1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /* eslint-disable no-underscore-dangle */
- export default function injectDynamicImport(acorn) {
- const tt = acorn.tokTypes;
- // NOTE: This allows `yield import()` to parse correctly.
- tt._import.startsExpr = true;
- function parseDynamicImport() {
- const node = this.startNode();
- this.next();
- if (this.type !== tt.parenL) {
- this.unexpected();
- }
- return this.finishNode(node, 'Import');
- }
- function peekNext() {
- return this.input[this.pos];
- }
- // eslint-disable-next-line no-param-reassign
- acorn.plugins.dynamicImport = function dynamicImportPlugin(instance) {
- instance.extend('parseStatement', nextMethod => (
- function parseStatement(...args) {
- const node = this.startNode();
- if (this.type === tt._import) {
- const nextToken = peekNext.call(this);
- if (nextToken === tt.parenL.label) {
- const expr = this.parseExpression();
- return this.parseExpressionStatement(node, expr);
- }
- }
- return nextMethod.apply(this, args);
- }
- ));
- instance.extend('parseExprAtom', nextMethod => (
- function parseExprAtom(refDestructuringErrors) {
- if (this.type === tt._import) {
- return parseDynamicImport.call(this);
- }
- return nextMethod.call(this, refDestructuringErrors);
- }
- ));
- };
- return acorn;
- }
|