From 61f021ed326298bd2d20e019f300ba907e20db9d Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Thu, 4 Jul 2019 18:14:19 +0200 Subject: [PATCH] Always forward AST nodes for unresolvable dynamic imports (#2984) --- src/Module.ts | 21 +++++++++---------- .../dynamic-import-unresolvable/_config.js | 20 ++++++++++++++++++ .../dynamic-import-unresolvable/_expected.js | 3 +++ .../dynamic-import-unresolvable/main.js | 3 +++ 4 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 test/form/samples/dynamic-import-unresolvable/_config.js create mode 100644 test/form/samples/dynamic-import-unresolvable/_expected.js create mode 100644 test/form/samples/dynamic-import-unresolvable/main.js diff --git a/src/Module.ts b/src/Module.ts index 34458441aa4..acf5541094d 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -302,18 +302,17 @@ export default class Module { getDynamicImportExpressions(): (string | Node)[] { return this.dynamicImports.map(({ node }) => { const importArgument = node.parent.arguments[0]; - if (importArgument instanceof TemplateLiteral) { - if (importArgument.expressions.length === 0 && importArgument.quasis.length === 1) { - return importArgument.quasis[0].value.cooked; - } - } else if (importArgument instanceof Literal) { - if (typeof importArgument.value === 'string') { - return importArgument.value; - } - } else { - return importArgument; + if ( + importArgument instanceof TemplateLiteral && + importArgument.quasis.length === 1 && + importArgument.quasis[0].value.cooked + ) { + return importArgument.quasis[0].value.cooked; + } + if (importArgument instanceof Literal && typeof importArgument.value === 'string') { + return importArgument.value; } - return undefined as any; + return importArgument; }); } diff --git a/test/form/samples/dynamic-import-unresolvable/_config.js b/test/form/samples/dynamic-import-unresolvable/_config.js new file mode 100644 index 00000000000..6f64fe7a3ed --- /dev/null +++ b/test/form/samples/dynamic-import-unresolvable/_config.js @@ -0,0 +1,20 @@ +const assert = require('assert'); + +module.exports = { + solo: true, + description: 'Returns the raw AST nodes for unresolvable dynamic imports', + options: { + plugins: [ + { + resolveDynamicImport(specifier) { + assert.ok(specifier); + assert.strictEqual(typeof specifier, 'object'); + if (specifier.type !== 'TemplateLiteral' && specifier.type !== 'Literal') { + throw new Error(`Unexpected specifier type ${specifier.type}.`); + } + return false; + } + } + ] + } +}; diff --git a/test/form/samples/dynamic-import-unresolvable/_expected.js b/test/form/samples/dynamic-import-unresolvable/_expected.js new file mode 100644 index 00000000000..10da593b0b0 --- /dev/null +++ b/test/form/samples/dynamic-import-unresolvable/_expected.js @@ -0,0 +1,3 @@ +import(`${globalVar}`); +import(`My ${globalVar}`); +import(7); diff --git a/test/form/samples/dynamic-import-unresolvable/main.js b/test/form/samples/dynamic-import-unresolvable/main.js new file mode 100644 index 00000000000..10da593b0b0 --- /dev/null +++ b/test/form/samples/dynamic-import-unresolvable/main.js @@ -0,0 +1,3 @@ +import(`${globalVar}`); +import(`My ${globalVar}`); +import(7);