blob: bd10a09b4ed174959c3894e1ed39f2045372f95f [file] [log] [blame]
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;
}