From 8b2d57083b7ce895a9fbbcacea6ef3876eee7690 Mon Sep 17 00:00:00 2001 From: michael faith Date: Sun, 15 Dec 2024 18:02:47 -0600 Subject: [PATCH] [utils] [fix] `unambiguous` detect modules exported from minified code This change adjusts the regex pattern used to detect modules to support detection on minified code. Fixes #3107 --- tests/files/minified/no-newline.js | 3 +++ tests/files/minified/one-line-no-semi-renamed.js | 1 + tests/files/minified/one-line-no-semi.js | 1 + tests/files/minified/one-line.js | 1 + tests/src/core/getExports.js | 4 ++++ utils/CHANGELOG.md | 6 ++++++ utils/unambiguous.js | 2 +- 7 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/files/minified/no-newline.js create mode 100644 tests/files/minified/one-line-no-semi-renamed.js create mode 100644 tests/files/minified/one-line-no-semi.js create mode 100644 tests/files/minified/one-line.js diff --git a/tests/files/minified/no-newline.js b/tests/files/minified/no-newline.js new file mode 100644 index 000000000..261989a75 --- /dev/null +++ b/tests/files/minified/no-newline.js @@ -0,0 +1,3 @@ +function y() { + console.log("y"); +}export {y}; diff --git a/tests/files/minified/one-line-no-semi-renamed.js b/tests/files/minified/one-line-no-semi-renamed.js new file mode 100644 index 000000000..601f9c7b7 --- /dev/null +++ b/tests/files/minified/one-line-no-semi-renamed.js @@ -0,0 +1 @@ +function a(){console.log('foo')}export{a as foo}; diff --git a/tests/files/minified/one-line-no-semi.js b/tests/files/minified/one-line-no-semi.js new file mode 100644 index 000000000..09a632811 --- /dev/null +++ b/tests/files/minified/one-line-no-semi.js @@ -0,0 +1 @@ +function a(){return true}export{a}; diff --git a/tests/files/minified/one-line.js b/tests/files/minified/one-line.js new file mode 100644 index 000000000..b79898eb3 --- /dev/null +++ b/tests/files/minified/one-line.js @@ -0,0 +1 @@ +function a(){console.log("foo")};export{a}; diff --git a/tests/src/core/getExports.js b/tests/src/core/getExports.js index f11a26131..a02edb85c 100644 --- a/tests/src/core/getExports.js +++ b/tests/src/core/getExports.js @@ -465,6 +465,10 @@ describe('ExportMap', function () { ['bar.js', true], ['deep-es7/b.js', true], ['common.js', false], + ['./minified/no-newline.js', true], + ['./minified/one-line-no-semi-renamed.js', true], + ['./minified/one-line-no-semi.js', true], + ['./minified/one-line.js', true], ]; for (const [testFile, expectedRegexResult] of testFiles) { diff --git a/utils/CHANGELOG.md b/utils/CHANGELOG.md index bb9372512..fe7381a2d 100644 --- a/utils/CHANGELOG.md +++ b/utils/CHANGELOG.md @@ -5,6 +5,9 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange ## Unreleased +### Fixed +- `unambiguous`: detect modules exported from minified code ([#3124], thanks [@michaelfaith]) + ### Changed - [refactor] `parse`: avoid using a regex here (thanks [@ljharb]) @@ -180,6 +183,7 @@ Yanked due to critical issue with cache key resulting from #839. ### Fixed - `unambiguous.test()` regex is now properly in multiline mode +[#3124]: https://github.com/import-js/eslint-plugin-import/pull/3124 [#3072]: https://github.com/import-js/eslint-plugin-import/pull/3072 [#3061]: https://github.com/import-js/eslint-plugin-import/pull/3061 [#3057]: https://github.com/import-js/eslint-plugin-import/pull/3057 @@ -230,6 +234,7 @@ Yanked due to critical issue with cache key resulting from #839. [@JounQin]: https://github.com/JounQin [@kaiyoma]: https://github.com/kaiyoma [@leipert]: https://github.com/leipert +[@ljharb]: https://github.com/ljharb [@manuth]: https://github.com/manuth [@maxkomarychev]: https://github.com/maxkomarychev [@mgwalker]: https://github.com/mgwalker @@ -238,6 +243,7 @@ Yanked due to critical issue with cache key resulting from #839. [@nicolo-ribaudo]: https://github.com/nicolo-ribaudo [@pmcelhaney]: https://github.com/pmcelhaney [@sergei-startsev]: https://github.com/sergei-startsev +[@silverwind]: https://github.com/silverwind [@sompylasar]: https://github.com/sompylasar [@timkraut]: https://github.com/timkraut [@vikr01]: https://github.com/vikr01 diff --git a/utils/unambiguous.js b/utils/unambiguous.js index 20aabd1bd..df7b9be7a 100644 --- a/utils/unambiguous.js +++ b/utils/unambiguous.js @@ -2,7 +2,7 @@ exports.__esModule = true; -const pattern = /(^|;)\s*(export|import)((\s+\w)|(\s*[{*=]))|import\(/m; +const pattern = /(^|[;})])\s*(export|import)((\s+\w)|(\s*[{*=]))|import\(/m; /** * detect possible imports/exports without a full parse. *