72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports['default'] = injectDynamicImport;
|
||
|
/* eslint-disable no-underscore-dangle */
|
||
|
|
||
|
var DynamicImportKey = exports.DynamicImportKey = 'Import';
|
||
|
|
||
|
function injectDynamicImport(acorn) {
|
||
|
var tt = acorn.tokTypes;
|
||
|
|
||
|
// NOTE: This allows `yield import()` to parse correctly.
|
||
|
tt._import.startsExpr = true;
|
||
|
|
||
|
function parseDynamicImport() {
|
||
|
var node = this.startNode();
|
||
|
this.next();
|
||
|
if (this.type !== tt.parenL) {
|
||
|
this.unexpected();
|
||
|
}
|
||
|
return this.finishNode(node, DynamicImportKey);
|
||
|
}
|
||
|
|
||
|
function peekNext() {
|
||
|
return this.input[this.pos];
|
||
|
}
|
||
|
|
||
|
// eslint-disable-next-line no-param-reassign
|
||
|
acorn.plugins.dynamicImport = function () {
|
||
|
function dynamicImportPlugin(instance) {
|
||
|
instance.extend('parseStatement', function (nextMethod) {
|
||
|
return function () {
|
||
|
function parseStatement() {
|
||
|
var node = this.startNode();
|
||
|
if (this.type === tt._import) {
|
||
|
var nextToken = peekNext.call(this);
|
||
|
if (nextToken === tt.parenL.label) {
|
||
|
var expr = this.parseExpression();
|
||
|
return this.parseExpressionStatement(node, expr);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
|
||
|
args[_key] = arguments[_key];
|
||
|
}
|
||
|
|
||
|
return nextMethod.apply(this, args);
|
||
|
}
|
||
|
|
||
|
return parseStatement;
|
||
|
}();
|
||
|
});
|
||
|
|
||
|
instance.extend('parseExprAtom', function (nextMethod) {
|
||
|
return function () {
|
||
|
function parseExprAtom(refDestructuringErrors) {
|
||
|
if (this.type === tt._import) {
|
||
|
return parseDynamicImport.call(this);
|
||
|
}
|
||
|
return nextMethod.call(this, refDestructuringErrors);
|
||
|
}
|
||
|
|
||
|
return parseExprAtom;
|
||
|
}();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return dynamicImportPlugin;
|
||
|
}();
|
||
|
|
||
|
return acorn;
|
||
|
}
|