diff --git a/packages/esm-shim/src/constants.ts b/packages/esm-shim/src/constants.ts index ef2953f5e..9f00e960c 100644 --- a/packages/esm-shim/src/constants.ts +++ b/packages/esm-shim/src/constants.ts @@ -11,4 +11,4 @@ const require = cjsModule.createRequire(import.meta.url); `; export const ESMStaticImportRegex = - /(?<=\s|^|;)import\s*([\s"']*(?[\w\t\n\r $*,/{}]+)from\s*)?["']\s*(?(?<="\s*)[^"]*[^\s"](?=\s*")|(?<='\s*)[^']*[^\s'](?=\s*'))\s*["'][\s;]*/gm; + /(?<=\s|^|;)import\s*([\s"']*(?[\w\t\n\r $*,/{}]+)from\s*)?["']\s*(?(?<="\s*)[^"\n]*[^\s"](?=\s*")|(?<='\s*)[^'\n]*[^\s'](?=\s*'))\s*["'][\s;]*/gm; diff --git a/packages/esm-shim/test/fixtures/cjs-import-literal.js b/packages/esm-shim/test/fixtures/cjs-import-literal.js new file mode 100644 index 000000000..915b1ceaf --- /dev/null +++ b/packages/esm-shim/test/fixtures/cjs-import-literal.js @@ -0,0 +1,6 @@ +const dn = __dirname; + +module.exports = { + keyword: ' import', + dn +}; diff --git a/packages/esm-shim/test/snapshots/test.js.md b/packages/esm-shim/test/snapshots/test.js.md index 1447dcc3a..98c82442e 100644 --- a/packages/esm-shim/test/snapshots/test.js.md +++ b/packages/esm-shim/test/snapshots/test.js.md @@ -93,3 +93,23 @@ Generated by [AVA](https://avajs.dev). ␊ export { c, child, s };␊ ` + +## inject cjs shim should not break on valid js object with `import` literal value + +> Snapshot 1 + + `␊ + // -- Shims --␊ + import cjsUrl from 'node:url';␊ + import cjsPath from 'node:path';␊ + import cjsModule from 'node:module';␊ + const __filename = cjsUrl.fileURLToPath(import.meta.url);␊ + const __dirname = cjsPath.dirname(__filename);␊ + const require = cjsModule.createRequire(import.meta.url);␊ + const dn = __dirname;␊ + ␊ + module.exports = {␊ + keyword: ' import',␊ + dn␊ + };␊ + ` diff --git a/packages/esm-shim/test/snapshots/test.js.snap b/packages/esm-shim/test/snapshots/test.js.snap index 7c8a3ca3d..56705e652 100644 Binary files a/packages/esm-shim/test/snapshots/test.js.snap and b/packages/esm-shim/test/snapshots/test.js.snap differ diff --git a/packages/esm-shim/test/test.js b/packages/esm-shim/test/test.js index 3f9e5f8e4..24f5a3291 100644 --- a/packages/esm-shim/test/test.js +++ b/packages/esm-shim/test/test.js @@ -67,3 +67,19 @@ test.serial('inject cjs shim for esm output with multiple import statements', as t.snapshot(output.code); t.falsy(output.map); }); + +// see issue #1649 https://github.com/rollup/plugins/issues/1649 +test.serial( + 'inject cjs shim should not break on valid js object with `import` literal value', + async (t) => { + const bundle = await rollup({ + input: 'test/fixtures/cjs-import-literal.js', + plugins: [esmShim()] + }); + const result = await bundle.generate({ format: 'es' }); + t.is(result.output.length, 1); + const [output] = result.output; + t.snapshot(output.code); + t.falsy(output.map); + } +);