From 80ffb59b9911ec46e303aa41e61af766c211ba56 Mon Sep 17 00:00:00 2001 From: fi3ework Date: Mon, 30 Sep 2024 01:42:55 +0800 Subject: [PATCH] fix: preserve require.resolve / dynamic require / dynamic import --- CONTRIBUTING.md | 6 +- package.json | 2 +- packages/core/src/config.ts | 17 ++- .../tests/__snapshots__/config.test.ts.snap | 9 ++ pnpm-lock.yaml | 118 ++++++++------- .../__snapshots__/index.test.ts.snap | 137 ++---------------- .../require/import-dynamic/index.ts | 5 + .../require/import-dynamic/package.json | 6 + .../require/import-dynamic/rslib.config.ts | 14 ++ tests/integration/require/index.test.ts | 104 +++++++++++++ .../require/require-as-expression/index.js | 2 + .../require-as-expression/package.json | 6 + .../require-as-expression/rslib.config.ts | 14 ++ .../require/require-dynamic/index.ts | 12 ++ .../require/require-dynamic/package.json | 6 + .../require/require-dynamic/rslib.config.ts | 14 ++ .../require/require-resolve/index.ts | 16 ++ .../require/require-resolve/package.json | 6 + .../require/require-resolve/rslib.config.ts | 14 ++ 19 files changed, 322 insertions(+), 186 deletions(-) create mode 100644 tests/integration/require/import-dynamic/index.ts create mode 100644 tests/integration/require/import-dynamic/package.json create mode 100644 tests/integration/require/import-dynamic/rslib.config.ts create mode 100644 tests/integration/require/index.test.ts create mode 100644 tests/integration/require/require-as-expression/index.js create mode 100644 tests/integration/require/require-as-expression/package.json create mode 100644 tests/integration/require/require-as-expression/rslib.config.ts create mode 100644 tests/integration/require/require-dynamic/index.ts create mode 100644 tests/integration/require/require-dynamic/package.json create mode 100644 tests/integration/require/require-dynamic/rslib.config.ts create mode 100644 tests/integration/require/require-resolve/index.ts create mode 100644 tests/integration/require/require-resolve/package.json create mode 100644 tests/integration/require/require-resolve/rslib.config.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6a4c44ddc..f2265ffe9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -138,6 +138,6 @@ Here are the steps to publish (we generally use CI for releases and avoid publis The project is still in its early stages and under active development, so it possible dependents on Rsbuild or Rspack canary versions to test the latest features. The current versions are: -| Package | Link | -| ------------ | --------------------------------------------------------------------------------------- | -| @rspack/core | https://github.com/web-infra-dev/rspack/commit/bb0219fd3eaee45d9957b4c29a176f2ac67a84ee | +| Package | Link | +| ------------ | ------------------------------------------------- | +| @rspack/core | https://github.com/web-infra-dev/rspack/pull/7939 | diff --git a/package.json b/package.json index 07b089558..62391cb3c 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ }, "pnpm": { "overrides": { - "@rspack/core": "npm:@rspack/core-canary@1.0.6-canary-bb0219fd-20240920080859" + "@rspack/core": "npm:@rspack/core-canary@1.0.9-canary-0cad17d5-20240929151646" } } } diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index 60e245054..44dd4b596 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -432,6 +432,14 @@ export async function createConstantRsbuildConfig(): Promise { } const composeFormatConfig = (format: Format): RsbuildConfig => { + const jsParserOptions = { + importMeta: false, + requireResolve: false, + requireDynamic: false, + requireAsExpression: false, + importDynamic: false, + }; + switch (format) { case 'esm': return { @@ -446,13 +454,12 @@ const composeFormatConfig = (format: Format): RsbuildConfig => { }, module: { parser: { - javascript: { - importMeta: false, - }, + javascript: jsParserOptions, }, }, optimization: { concatenateModules: true, + sideEffects: 'flag', }, experiments: { outputModule: true, @@ -467,9 +474,7 @@ const composeFormatConfig = (format: Format): RsbuildConfig => { rspack: { module: { parser: { - javascript: { - importMeta: false, - }, + javascript: jsParserOptions, }, }, output: { diff --git a/packages/core/tests/__snapshots__/config.test.ts.snap b/packages/core/tests/__snapshots__/config.test.ts.snap index f62fff0b3..cd09f0498 100644 --- a/packages/core/tests/__snapshots__/config.test.ts.snap +++ b/packages/core/tests/__snapshots__/config.test.ts.snap @@ -102,12 +102,17 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config 1 "module": { "parser": { "javascript": { + "importDynamic": false, "importMeta": false, + "requireAsExpression": false, + "requireDynamic": false, + "requireResolve": false, }, }, }, "optimization": { "concatenateModules": true, + "sideEffects": "flag", }, "output": { "chunkFormat": "module", @@ -252,7 +257,11 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config 1 "module": { "parser": { "javascript": { + "importDynamic": false, "importMeta": false, + "requireAsExpression": false, + "requireDynamic": false, + "requireResolve": false, }, }, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5af49a8d9..b80b8b724 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - '@rspack/core': npm:@rspack/core-canary@1.0.6-canary-bb0219fd-20240920080859 + '@rspack/core': npm:@rspack/core-canary@1.0.9-canary-0cad17d5-20240929151646 importers: @@ -418,6 +418,14 @@ importers: tests/integration/minify/default: {} + tests/integration/require/import-dynamic: {} + + tests/integration/require/require-as-expression: {} + + tests/integration/require/require-dynamic: {} + + tests/integration/require/require-resolve: {} + tests/integration/resolve/data-url: {} tests/integration/resolve/false: {} @@ -1168,56 +1176,56 @@ packages: typescript: optional: true - '@rspack/binding-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-YlNfURktP6ZxE4oszyb+4fhwYpoZjUIp437T31gNV2V8mP3hvNCeMfJMtOy9x1J4J8i43gBToKWwehfmS4CV6g==} + '@rspack/binding-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-q4WxxYKLzG5NDKBDXkYRmqoAAfkok++QQyfU2sRMQsEAydpO0z6At4sBv/S7iPUOrK55mcuW09SiaR0xvpo3sg==} - '@rspack/binding-darwin-arm64-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-5P22nCctUqFppuE7T5elntjGzhdfU3BdRkJCZhwbO5bRXnT36Mf+W5NX6stLEkicL0TNMZs06A0k52RzXzYv4Q==} + '@rspack/binding-darwin-arm64-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-/73lnQg/gAAbgOzj6l1sIKNcBM3TjUTyiR7QzXdoX6/snvV5G0N9DE5KlJ2kONhjyIIg3yo3fZAnSB32CbQJhg==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-Ioh6zHrSffnhCUj4mA0g5SEfNQExwFNL6kMSwAH4XBaUrvmhGMtwNaKEe0QE9Qb/BuQSiPz8mx/WhrB3y3pi6g==} + '@rspack/binding-darwin-x64-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-Jxvin9BW965uRf0s+UJ0qCieSRdPRSsyDgGh8ySxkvPWm5AN2R+98IZxAGBhsVtDG+GVr8gmU5mGp0tzArqPmw==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-9lO4/iE+kpv4gLJXNayYtmiefEKWZrsZoCeEa7r8qe08CTvfvMFanE2jOS5BVOf6yCB9LUTpG2orkwDVoOhVGg==} + '@rspack/binding-linux-arm64-gnu-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-82l/W1hfvcVQUjT6fmV1ItcM0wdMHF4eHo3q1AbXcAXNzDpQcZKtv7hZiJhraNWXFLiCni29yMF3Yw81WuOGuQ==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-P6XtRSM32UwDKfXsDttnzmy8uIaBSu7eIkVoe6wyxAPFBFQhpbMXfn+ue3bC+fMg/NvJM7XiOjw8CgUJdcNAjQ==} + '@rspack/binding-linux-arm64-musl-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-Y0oxLrzUwtoqiVueHA+OXlnv0RxuxczsJkb3K0qIYNt0GkgxDURQlXGFtJvgAi1WgEPp559hqMKERn/waHDxSw==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-x64-gnu-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-RPtyIv51ZaWV7jLh5sSF4NVnWU2D7RbPQEs1feiBt/PwsFpqqiF1ZnkioH45q1gj+w7xLwQVIe4Au3R50MRMOQ==} + '@rspack/binding-linux-x64-gnu-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-UOokaI237u4r3I5Ga4K/FUPU7XreEUtSD5kb7yqnnywAPqOJhvVAf/qoPSQzTfkvgpM7YEsV9k9vacu5T+wcZQ==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-xnrnSLUrQSAGNomS5gS7m2Z5jNOcHACUUEXru8vsPlSd9O9GdNqazzSKQZhrEfacBOiXI0g9Zk45aQggKXaDKA==} + '@rspack/binding-linux-x64-musl-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-na8ee9P1XS1rfA6ieyqlz9Y1tXPdDm3stzlrh4x31YsOZTWQBdhiAzDppdU6ZkJ0JKoyWIVrKTSq7ufla+2etw==} cpu: [x64] os: [linux] - '@rspack/binding-win32-arm64-msvc-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-MGwfiq+0eI2WDALbQxj5UiQN6BSLpe2YQ5BziOTfIdPF+vLcJzJ+LmP92oqwLyDLMEK2Kufqesposr/z5wmNQA==} + '@rspack/binding-win32-arm64-msvc-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-aBR+jho7v11uJ9gUFPQqKjkF0zhuBKebOXDv9wg86iF6R9F74Jr68MI6569g7xO3nX1XrBBXd/WLoHFxkmeFjQ==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-lWy0HmbphU5+ezsBD8Zk7596Xko8VMD9COICqNTR9s38nRhPGVNefYTM/T9VAuHAfhOFU1ulBqSYESFCe5Kv9Q==} + '@rspack/binding-win32-ia32-msvc-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-7H+qAt2kIE5GHDVf4UztOz9CqEVaXPuYx1SB1XC/qb68STzbtLBmGuPHrW2OC7NQ/pLwNiwsAlH+MzChTFKSfA==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-us3KuKeqi5mEyGOiuZte3gz3DudiWuUHPbmyvTsK7YRd9Zpl66myMuXj9biR5gShHznYCFr6dPbOsEHE3aDJxg==} + '@rspack/binding-win32-x64-msvc-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-QdXWGTBtk3JbRaHYJCmTXnou5O/R5Iy8ByYetEXZC7E7EJ5TqU4lnbbXjemycICUgPjOlRmY0J/TBViFLt1QMg==} cpu: [x64] os: [win32] - '@rspack/core-canary@1.0.6-canary-bb0219fd-20240920080859': - resolution: {integrity: sha512-3/192m2xJuzb8staWt4tXoBzwpxRU8SXbXZr/ZWFfMlVtuaGCIf4VkL2cQMKbK0caM9Ae8WHXnsjeDepQVwLnQ==} + '@rspack/core-canary@1.0.9-canary-0cad17d5-20240929151646': + resolution: {integrity: sha512-ibVlaWI5sOO6aW1QgtNDEP4Zd77X238qgKayv6F7/lBsRcicJ7BkwwWfFMWiPaawoHudimtNrg+weBCQl0SVGw==} engines: {node: '>=16.0.0'} peerDependencies: '@swc/helpers': '>=0.5.1' @@ -1225,8 +1233,8 @@ packages: '@swc/helpers': optional: true - '@rspack/lite-tapable@1.0.0': - resolution: {integrity: sha512-7MZf4lburSUZoEenwazwUDKHhqyfnLCGnQ/tKcUtztfmVzfjZfRn/EaiT0AKkYGnL2U8AGsw89oUeVyvaOLVCw==} + '@rspack/lite-tapable@1.0.1': + resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} engines: {node: '>=16.0.0'} '@rspack/plugin-react-refresh@1.0.0': @@ -5122,8 +5130,8 @@ snapshots: '@rsbuild/core@1.0.5': dependencies: - '@rspack/core': '@rspack/core-canary@1.0.6-canary-bb0219fd-20240920080859(@swc/helpers@0.5.13)' - '@rspack/lite-tapable': 1.0.0 + '@rspack/core': '@rspack/core-canary@1.0.9-canary-0cad17d5-20240929151646(@swc/helpers@0.5.13)' + '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.13 caniuse-lite: 1.0.30001663 core-js: 3.38.1 @@ -5132,8 +5140,8 @@ snapshots: '@rsbuild/core@1.0.7': dependencies: - '@rspack/core': '@rspack/core-canary@1.0.6-canary-bb0219fd-20240920080859(@swc/helpers@0.5.13)' - '@rspack/lite-tapable': 1.0.0 + '@rspack/core': '@rspack/core-canary@1.0.9-canary-0cad17d5-20240929151646(@swc/helpers@0.5.13)' + '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.13 caniuse-lite: 1.0.30001663 core-js: 3.38.1 @@ -5142,8 +5150,8 @@ snapshots: '@rsbuild/core@1.0.8': dependencies: - '@rspack/core': '@rspack/core-canary@1.0.6-canary-bb0219fd-20240920080859(@swc/helpers@0.5.13)' - '@rspack/lite-tapable': 1.0.0 + '@rspack/core': '@rspack/core-canary@1.0.9-canary-0cad17d5-20240929151646(@swc/helpers@0.5.13)' + '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.13 core-js: 3.38.1 optionalDependencies: @@ -5209,55 +5217,55 @@ snapshots: '@microsoft/api-extractor': 7.47.9(@types/node@18.19.39) typescript: 5.6.2 - '@rspack/binding-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-canary@1.0.9-canary-0cad17d5-20240929151646': optionalDependencies: - '@rspack/binding-darwin-arm64': '@rspack/binding-darwin-arm64-canary@1.0.6-canary-bb0219fd-20240920080859' - '@rspack/binding-darwin-x64': '@rspack/binding-darwin-x64-canary@1.0.6-canary-bb0219fd-20240920080859' - '@rspack/binding-linux-arm64-gnu': '@rspack/binding-linux-arm64-gnu-canary@1.0.6-canary-bb0219fd-20240920080859' - '@rspack/binding-linux-arm64-musl': '@rspack/binding-linux-arm64-musl-canary@1.0.6-canary-bb0219fd-20240920080859' - '@rspack/binding-linux-x64-gnu': '@rspack/binding-linux-x64-gnu-canary@1.0.6-canary-bb0219fd-20240920080859' - '@rspack/binding-linux-x64-musl': '@rspack/binding-linux-x64-musl-canary@1.0.6-canary-bb0219fd-20240920080859' - '@rspack/binding-win32-arm64-msvc': '@rspack/binding-win32-arm64-msvc-canary@1.0.6-canary-bb0219fd-20240920080859' - '@rspack/binding-win32-ia32-msvc': '@rspack/binding-win32-ia32-msvc-canary@1.0.6-canary-bb0219fd-20240920080859' - '@rspack/binding-win32-x64-msvc': '@rspack/binding-win32-x64-msvc-canary@1.0.6-canary-bb0219fd-20240920080859' - - '@rspack/binding-darwin-arm64-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-darwin-arm64': '@rspack/binding-darwin-arm64-canary@1.0.9-canary-0cad17d5-20240929151646' + '@rspack/binding-darwin-x64': '@rspack/binding-darwin-x64-canary@1.0.9-canary-0cad17d5-20240929151646' + '@rspack/binding-linux-arm64-gnu': '@rspack/binding-linux-arm64-gnu-canary@1.0.9-canary-0cad17d5-20240929151646' + '@rspack/binding-linux-arm64-musl': '@rspack/binding-linux-arm64-musl-canary@1.0.9-canary-0cad17d5-20240929151646' + '@rspack/binding-linux-x64-gnu': '@rspack/binding-linux-x64-gnu-canary@1.0.9-canary-0cad17d5-20240929151646' + '@rspack/binding-linux-x64-musl': '@rspack/binding-linux-x64-musl-canary@1.0.9-canary-0cad17d5-20240929151646' + '@rspack/binding-win32-arm64-msvc': '@rspack/binding-win32-arm64-msvc-canary@1.0.9-canary-0cad17d5-20240929151646' + '@rspack/binding-win32-ia32-msvc': '@rspack/binding-win32-ia32-msvc-canary@1.0.9-canary-0cad17d5-20240929151646' + '@rspack/binding-win32-x64-msvc': '@rspack/binding-win32-x64-msvc-canary@1.0.9-canary-0cad17d5-20240929151646' + + '@rspack/binding-darwin-arm64-canary@1.0.9-canary-0cad17d5-20240929151646': optional: true - '@rspack/binding-darwin-x64-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-darwin-x64-canary@1.0.9-canary-0cad17d5-20240929151646': optional: true - '@rspack/binding-linux-arm64-gnu-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-linux-arm64-gnu-canary@1.0.9-canary-0cad17d5-20240929151646': optional: true - '@rspack/binding-linux-arm64-musl-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-linux-arm64-musl-canary@1.0.9-canary-0cad17d5-20240929151646': optional: true - '@rspack/binding-linux-x64-gnu-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-linux-x64-gnu-canary@1.0.9-canary-0cad17d5-20240929151646': optional: true - '@rspack/binding-linux-x64-musl-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-linux-x64-musl-canary@1.0.9-canary-0cad17d5-20240929151646': optional: true - '@rspack/binding-win32-arm64-msvc-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-win32-arm64-msvc-canary@1.0.9-canary-0cad17d5-20240929151646': optional: true - '@rspack/binding-win32-ia32-msvc-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-win32-ia32-msvc-canary@1.0.9-canary-0cad17d5-20240929151646': optional: true - '@rspack/binding-win32-x64-msvc-canary@1.0.6-canary-bb0219fd-20240920080859': + '@rspack/binding-win32-x64-msvc-canary@1.0.9-canary-0cad17d5-20240929151646': optional: true - '@rspack/core-canary@1.0.6-canary-bb0219fd-20240920080859(@swc/helpers@0.5.13)': + '@rspack/core-canary@1.0.9-canary-0cad17d5-20240929151646(@swc/helpers@0.5.13)': dependencies: '@module-federation/runtime-tools': 0.5.1 - '@rspack/binding': '@rspack/binding-canary@1.0.6-canary-bb0219fd-20240920080859' - '@rspack/lite-tapable': 1.0.0 + '@rspack/binding': '@rspack/binding-canary@1.0.9-canary-0cad17d5-20240929151646' + '@rspack/lite-tapable': 1.0.1 caniuse-lite: 1.0.30001663 optionalDependencies: '@swc/helpers': 0.5.13 - '@rspack/lite-tapable@1.0.0': {} + '@rspack/lite-tapable@1.0.1': {} '@rspack/plugin-react-refresh@1.0.0(react-refresh@0.14.2)': dependencies: diff --git a/tests/integration/decorators/__snapshots__/index.test.ts.snap b/tests/integration/decorators/__snapshots__/index.test.ts.snap index 52cce022a..9a2395847 100644 --- a/tests/integration/decorators/__snapshots__/index.test.ts.snap +++ b/tests/integration/decorators/__snapshots__/index.test.ts.snap @@ -1,43 +1,7 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`decorators default to 2022-03 1`] = ` -"// The require scope -var __webpack_require__ = {}; -/************************************************************************/ // webpack/runtime/define_property_getters -(()=>{ - __webpack_require__.d = function(exports, definition) { - for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, { - enumerable: true, - get: definition[key] - }); - }; -})(); -// webpack/runtime/has_own_property -(()=>{ - __webpack_require__.o = function(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); - }; -})(); -// webpack/runtime/make_namespace_object -(()=>{ - // define __esModule on exports - __webpack_require__.r = function(exports) { - if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports, Symbol.toStringTag, { - value: 'Module' - }); - Object.defineProperty(exports, '__esModule', { - value: true - }); - }; -})(); -/************************************************************************/ var __webpack_exports__ = {}; -__webpack_require__.r(__webpack_exports__); -__webpack_require__.d(__webpack_exports__, { - Person: function() { - return _Person; - } -}); -function applyDecs2203RFactory() { +"function applyDecs2203RFactory() { function createAddInitializerMethod(initializers, decoratorFinishedRef) { return function(initializer) { assertNotFinished(decoratorFinishedRef, \\"addInitializer\\"); @@ -336,13 +300,13 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) { return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass); } var _dec, _initClass; -function enhancer(name) { +function src_enhancer(name) { return function(target) { target.prototype.name = name; }; } let _Person; -_dec = enhancer('rslib'); +_dec = src_enhancer('rslib'); class Person { static{ ({ c: [_Person, _initClass] } = _apply_decs_2203_r(this, [], [ @@ -357,56 +321,21 @@ class Person { _initClass(); } } +export { _Person as Person }; " `; exports[`decorators with experimentalDecorators in tsconfig 1`] = ` -"// The require scope -var __webpack_require__ = {}; -/************************************************************************/ // webpack/runtime/define_property_getters -(()=>{ - __webpack_require__.d = function(exports, definition) { - for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, { - enumerable: true, - get: definition[key] - }); - }; -})(); -// webpack/runtime/has_own_property -(()=>{ - __webpack_require__.o = function(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); - }; -})(); -// webpack/runtime/make_namespace_object -(()=>{ - // define __esModule on exports - __webpack_require__.r = function(exports) { - if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports, Symbol.toStringTag, { - value: 'Module' - }); - Object.defineProperty(exports, '__esModule', { - value: true - }); - }; -})(); -/************************************************************************/ var __webpack_exports__ = {}; -__webpack_require__.r(__webpack_exports__); -__webpack_require__.d(__webpack_exports__, { - Person: function() { - return Person; - } -}); -function _ts_decorate(decorators, target, key, desc) { +"function _ts_decorate(decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (\\"object\\" == typeof Reflect && \\"function\\" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); + if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc); else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; } function _ts_metadata(k, v) { - if (\\"object\\" == typeof Reflect && \\"function\\" == typeof Reflect.metadata) return Reflect.metadata(k, v); + if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(k, v); } -function enhancer(name) { +function src_enhancer(name) { return function(target) { target.prototype.name = name; }; @@ -417,51 +346,16 @@ class Person { } } Person = _ts_decorate([ - enhancer('rslib'), - _ts_metadata(\\"design:type\\", Function), - _ts_metadata(\\"design:paramtypes\\", []) + src_enhancer('rslib'), + _ts_metadata("design:type", Function), + _ts_metadata("design:paramtypes", []) ], Person); +export { Person }; " `; exports[`decorators with experimentalDecorators in tsconfig 2`] = ` -"// The require scope -var __webpack_require__ = {}; -/************************************************************************/ // webpack/runtime/define_property_getters -(()=>{ - __webpack_require__.d = function(exports, definition) { - for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, { - enumerable: true, - get: definition[key] - }); - }; -})(); -// webpack/runtime/has_own_property -(()=>{ - __webpack_require__.o = function(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); - }; -})(); -// webpack/runtime/make_namespace_object -(()=>{ - // define __esModule on exports - __webpack_require__.r = function(exports) { - if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports, Symbol.toStringTag, { - value: 'Module' - }); - Object.defineProperty(exports, '__esModule', { - value: true - }); - }; -})(); -/************************************************************************/ var __webpack_exports__ = {}; -__webpack_require__.r(__webpack_exports__); -__webpack_require__.d(__webpack_exports__, { - Person: function() { - return _Person; - } -}); -function applyDecs2203RFactory() { +"function applyDecs2203RFactory() { function createAddInitializerMethod(initializers, decoratorFinishedRef) { return function(initializer) { assertNotFinished(decoratorFinishedRef, \\"addInitializer\\"); @@ -760,13 +654,13 @@ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) { return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass); } var _dec, _initClass; -function enhancer(name) { +function src_enhancer(name) { return function(target) { target.prototype.name = name; }; } let _Person; -_dec = enhancer('rslib'); +_dec = src_enhancer('rslib'); class Person { static{ ({ c: [_Person, _initClass] } = _apply_decs_2203_r(this, [], [ @@ -781,5 +675,6 @@ class Person { _initClass(); } } +export { _Person as Person }; " `; diff --git a/tests/integration/require/import-dynamic/index.ts b/tests/integration/require/import-dynamic/index.ts new file mode 100644 index 000000000..b560d9481 --- /dev/null +++ b/tests/integration/require/import-dynamic/index.ts @@ -0,0 +1,5 @@ +const i1 = import(`${process.env.DIR}./other`); +const i2 = import(process.env.DIR!); +const condition = 1 > 0; +const i3 = import(condition ? './other1' : './other2'); +export { i1, i2, i3 }; diff --git a/tests/integration/require/import-dynamic/package.json b/tests/integration/require/import-dynamic/package.json new file mode 100644 index 000000000..2d99f0ebe --- /dev/null +++ b/tests/integration/require/import-dynamic/package.json @@ -0,0 +1,6 @@ +{ + "name": "require-import-dynamic-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/require/import-dynamic/rslib.config.ts b/tests/integration/require/import-dynamic/rslib.config.ts new file mode 100644 index 000000000..67fafd2b8 --- /dev/null +++ b/tests/integration/require/import-dynamic/rslib.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; + +export default defineConfig({ + lib: [generateBundleEsmConfig(), generateBundleCjsConfig()], + output: { + target: 'node', + }, + source: { + entry: { + index: './index.ts', + }, + }, +}); diff --git a/tests/integration/require/index.test.ts b/tests/integration/require/index.test.ts new file mode 100644 index 000000000..e507f3a44 --- /dev/null +++ b/tests/integration/require/index.test.ts @@ -0,0 +1,104 @@ +import { join } from 'node:path'; +import { buildAndGetResults } from 'test-helper'; +import { expect, test } from 'vitest'; + +test('require.resolve', async () => { + const fixturePath = join(__dirname, 'require-resolve'); + const { entries } = await buildAndGetResults(fixturePath); + + const statements = [ + "const cjs1 = require.resolve('./other')", + 'const cjs2 = require.resolve(`${process.env.DIR}./other`)', + 'const assignedResolve = require.resolve', + "const cjs3 = assignedResolve('./other')", + "const cr1 = _require.resolve('./other')", + 'const cr2 = _require.resolve(`${process.env.DIR}./other`)', + 'const assignedResolve2 = _require.resolve', + "const cr3 = assignedResolve2('./other')", + ]; + + const esmStatements = [ + 'import * as __WEBPACK_EXTERNAL_MODULE_node_module__ from "node:module"', + 'const _require = (0, __WEBPACK_EXTERNAL_MODULE_node_module__.createRequire)(import.meta.url)', + ]; + + const cjsStatements = [ + 'const _require = (0, external_node_module_namespaceObject.createRequire)(__rslib_import_meta_url__)', + ]; + + for (const statement of [...statements, ...esmStatements]) { + expect(entries.esm).toContain(statement); + } + + for (const statement of [...statements, ...cjsStatements]) { + expect(entries.cjs).toContain(statement); + } +}); + +test('require dynamic', async () => { + const fixturePath = join(__dirname, 'require-dynamic'); + const { entries } = await buildAndGetResults(fixturePath); + + const statements = [ + 'const cjs1 = require(`${process.env.DIR}./other`)', + 'const cjs2 = require(process.env.DIR)', + 'const cr1 = _require(`${process.env.DIR}./other`)', + 'const cr2 = _require(process.env.DIR)', + ]; + + const esmStatements = [ + 'import * as __WEBPACK_EXTERNAL_MODULE_node_module__ from "node:module"', + 'const _require = (0, __WEBPACK_EXTERNAL_MODULE_node_module__.createRequire)(import.meta.url)', + ]; + + const cjsStatements = [ + 'const _require = (0, external_node_module_namespaceObject.createRequire)(__rslib_import_meta_url__)', + ]; + + for (const statement of [...statements, ...esmStatements]) { + expect(entries.esm).toContain(statement); + } + + for (const statement of [...statements, ...cjsStatements]) { + expect(entries.cjs).toContain(statement); + } +}); + +test('import dynamic', async () => { + const fixturePath = join(__dirname, 'import-dynamic'); + const { entries } = await buildAndGetResults(fixturePath); + + const statements = [ + 'const i1 = import(`${process.env.DIR}./other`)', + 'const i2 = import(process.env.DIR)', + "const i3 = import(condition ? './other1' : './other2')", + ]; + + for (const statement of [...statements]) { + expect(entries.esm).toContain(statement); + } + + for (const statement of [...statements]) { + expect(entries.cjs).toContain(statement); + } +}); + +test('require as expression', async () => { + const fixturePath = join(__dirname, 'require-as-expression'); + const { entries } = await buildAndGetResults(fixturePath); + + const statements = [ + 'const lazyFn = (module, requireFn)=>{}', + "lazyFn('./other.js', require)", + ]; + + for (const statement of [...statements]) { + expect(entries.esm).toContain(statement); + } + + for (const statement of [...statements]) { + expect(entries.cjs).toContain(statement); + } +}); + +test.todo('require.resolve with `require` shims'); diff --git a/tests/integration/require/require-as-expression/index.js b/tests/integration/require/require-as-expression/index.js new file mode 100644 index 000000000..888d1605a --- /dev/null +++ b/tests/integration/require/require-as-expression/index.js @@ -0,0 +1,2 @@ +const lazyFn = (module, requireFn) => {}; +lazyFn('./other.js', require); diff --git a/tests/integration/require/require-as-expression/package.json b/tests/integration/require/require-as-expression/package.json new file mode 100644 index 000000000..390627a73 --- /dev/null +++ b/tests/integration/require/require-as-expression/package.json @@ -0,0 +1,6 @@ +{ + "name": "require-require-as-expression-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/require/require-as-expression/rslib.config.ts b/tests/integration/require/require-as-expression/rslib.config.ts new file mode 100644 index 000000000..e0264b270 --- /dev/null +++ b/tests/integration/require/require-as-expression/rslib.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; + +export default defineConfig({ + lib: [generateBundleEsmConfig(), generateBundleCjsConfig()], + output: { + target: 'node', + }, + source: { + entry: { + index: './index.js', + }, + }, +}); diff --git a/tests/integration/require/require-dynamic/index.ts b/tests/integration/require/require-dynamic/index.ts new file mode 100644 index 000000000..1ca4556d7 --- /dev/null +++ b/tests/integration/require/require-dynamic/index.ts @@ -0,0 +1,12 @@ +import { createRequire } from 'node:module'; + +// Using CommonJS require. +const cjs1 = require(`${process.env.DIR}./other`); +const cjs2 = require(process.env.DIR!); + +// Using createRequire. +const _require = createRequire(import.meta.url); +const cr1 = _require(`${process.env.DIR}./other`); +const cr2 = _require(process.env.DIR!); + +export { cjs1, cjs2, cr1, cr2 }; diff --git a/tests/integration/require/require-dynamic/package.json b/tests/integration/require/require-dynamic/package.json new file mode 100644 index 000000000..5baa2bb5d --- /dev/null +++ b/tests/integration/require/require-dynamic/package.json @@ -0,0 +1,6 @@ +{ + "name": "require-require-dynamic-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/require/require-dynamic/rslib.config.ts b/tests/integration/require/require-dynamic/rslib.config.ts new file mode 100644 index 000000000..67fafd2b8 --- /dev/null +++ b/tests/integration/require/require-dynamic/rslib.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; + +export default defineConfig({ + lib: [generateBundleEsmConfig(), generateBundleCjsConfig()], + output: { + target: 'node', + }, + source: { + entry: { + index: './index.ts', + }, + }, +}); diff --git a/tests/integration/require/require-resolve/index.ts b/tests/integration/require/require-resolve/index.ts new file mode 100644 index 000000000..acf9d0e70 --- /dev/null +++ b/tests/integration/require/require-resolve/index.ts @@ -0,0 +1,16 @@ +import { createRequire } from 'node:module'; + +// Using CommonJS require. +const cjs1 = require.resolve('./other'); +const cjs2 = require.resolve(`${process.env.DIR}./other`); +const assignedResolve = require.resolve; +const cjs3 = assignedResolve('./other'); + +// Using createRequire. +const _require = createRequire(import.meta.url); +const cr1 = _require.resolve('./other'); +const cr2 = _require.resolve(`${process.env.DIR}./other`); +const assignedResolve2 = _require.resolve; +const cr3 = assignedResolve2('./other'); + +export { cjs1, cjs2, cjs3, cr1, cr2, cr3 }; diff --git a/tests/integration/require/require-resolve/package.json b/tests/integration/require/require-resolve/package.json new file mode 100644 index 000000000..37e67ef6b --- /dev/null +++ b/tests/integration/require/require-resolve/package.json @@ -0,0 +1,6 @@ +{ + "name": "require-dynamic-require-test", + "version": "1.0.0", + "private": true, + "type": "module" +} diff --git a/tests/integration/require/require-resolve/rslib.config.ts b/tests/integration/require/require-resolve/rslib.config.ts new file mode 100644 index 000000000..67fafd2b8 --- /dev/null +++ b/tests/integration/require/require-resolve/rslib.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleCjsConfig, generateBundleEsmConfig } from 'test-helper'; + +export default defineConfig({ + lib: [generateBundleEsmConfig(), generateBundleCjsConfig()], + output: { + target: 'node', + }, + source: { + entry: { + index: './index.ts', + }, + }, +});