From a8a3d3e096a66094a8c336f51ba57a68aeac9fd7 Mon Sep 17 00:00:00 2001 From: Lenny Burdette Date: Fri, 12 Mar 2021 11:29:20 -0800 Subject: [PATCH] fix(dynamic-import-vars): allow ./${var}.suffix.js Allow dynamically importing files in the same directory with an extra suffix before the extension. --- .../dynamic-import-vars/src/dynamic-import-to-glob.js | 10 +++++++--- .../test/src/dynamic-import-to-glob.test.js | 9 +++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/dynamic-import-vars/src/dynamic-import-to-glob.js b/packages/dynamic-import-vars/src/dynamic-import-to-glob.js index 4e16d3f44..c814b123b 100644 --- a/packages/dynamic-import-vars/src/dynamic-import-to-glob.js +++ b/packages/dynamic-import-vars/src/dynamic-import-to-glob.js @@ -86,10 +86,14 @@ export function dynamicImportToGlob(node, sourceString) { ); } - if (glob.startsWith('./*.')) { + // Disallow ./*.ext + const ownDirectoryStarExtension = /^\.\/\*\.[\w]+$/; + if (ownDirectoryStarExtension.test(glob)) { throw new VariableDynamicImportError( - `${`invalid import "${sourceString}". Variable imports cannot import their own directory, ` + - 'place imports in a separate directory or make the import filename more specific. '}${example}` + `${ + `invalid import "${sourceString}". Variable imports cannot import their own directory, ` + + 'place imports in a separate directory or make the import filename more specific. ' + }${example}` ); } diff --git a/packages/dynamic-import-vars/test/src/dynamic-import-to-glob.test.js b/packages/dynamic-import-vars/test/src/dynamic-import-to-glob.test.js index bbd350e40..5d0508ec8 100644 --- a/packages/dynamic-import-vars/test/src/dynamic-import-to-glob.test.js +++ b/packages/dynamic-import-vars/test/src/dynamic-import-to-glob.test.js @@ -17,6 +17,15 @@ test('template literal with variable filename', (t) => { t.is(glob, './foo/*.js'); }); +test('template literal with dot-prefixed suffix', (t) => { + const ast = CustomParser.parse('import(`./${bar}.entry.js`);', { + sourceType: 'module' + }); + + const glob = dynamicImportToGlob(ast.body[0].expression.arguments[0]); + t.is(glob, './*.entry.js'); +}); + test('template literal with variable directory', (t) => { const ast = CustomParser.parse('import(`./foo/${bar}/x.js`);', { sourceType: 'module'