From 4eeea29bd42b6abf3dad53b760f53750cd698872 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sat, 21 Mar 2026 07:16:16 +0100 Subject: [PATCH 01/15] Pin Vite It currently does not work with Vitepress. --- renovate.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index 134742132..c4eedd211 100644 --- a/renovate.json +++ b/renovate.json @@ -38,7 +38,8 @@ "@types/node", "yargs-parser", "@inquirer/prompts", - "@rollup/plugin-terser" + "@rollup/plugin-terser", + "vite" ], "matchUpdateTypes": [ "major" From 0cba9e079e1d6e56882558827b37557f36c52966 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sat, 21 Mar 2026 07:18:36 +0100 Subject: [PATCH 02/15] 4.59.1 --- CHANGELOG.md | 31 +++++++++++++++++++++++++++++++ browser/package.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 80e230a7e..da71ba850 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # rollup changelog +## 4.59.1 + +_2026-03-21_ + +### Bug Fixes + +- Fix a crash when using lazy dynamic imports with moduleSideEffects:false (#6306) + +### Pull Requests + +- [#6281](https://github.com/rollup/rollup/pull/6281): fix(deps): update minor/patch updates (@renovate[bot], @lukastaegert) +- [#6282](https://github.com/rollup/rollup/pull/6282): chore(deps): update github artifact actions (major) (@renovate[bot], @lukastaegert) +- [#6283](https://github.com/rollup/rollup/pull/6283): chore(deps): update dependency nyc to v18 (@renovate[bot], @lukastaegert) +- [#6284](https://github.com/rollup/rollup/pull/6284): fix(deps): update swc monorepo (major) (@renovate[bot]) +- [#6285](https://github.com/rollup/rollup/pull/6285): chore(deps): lock file maintenance (@renovate[bot]) +- [#6290](https://github.com/rollup/rollup/pull/6290): chore(deps): update minor/patch updates (@renovate[bot], @lukastaegert) +- [#6291](https://github.com/rollup/rollup/pull/6291): chore(deps): update dependency @shikijs/vitepress-twoslash to v4 (@renovate[bot]) +- [#6292](https://github.com/rollup/rollup/pull/6292): chore(deps): lock file maintenance (@renovate[bot]) +- [#6297](https://github.com/rollup/rollup/pull/6297): chore(deps): update minor/patch updates (@renovate[bot]) +- [#6298](https://github.com/rollup/rollup/pull/6298): chore(deps): lock file maintenance (@renovate[bot]) +- [#6299](https://github.com/rollup/rollup/pull/6299): chore(deps): lock file maintenance (@renovate[bot]) +- [#6300](https://github.com/rollup/rollup/pull/6300): docs: update packagephobia link (@bluwy) +- [#6301](https://github.com/rollup/rollup/pull/6301): chore(deps): update dependency lint-staged to ^16.3.3 (@renovate[bot]) +- [#6306](https://github.com/rollup/rollup/pull/6306): fix: fix chunk assignment for deoptimized module with dynamic import (@JoaoBrlt, @lukastaegert) +- [#6307](https://github.com/rollup/rollup/pull/6307): chore(deps): update minor/patch updates (@renovate[bot]) +- [#6308](https://github.com/rollup/rollup/pull/6308): chore(deps): update dependency lru-cache to v11 (@renovate[bot]) +- [#6309](https://github.com/rollup/rollup/pull/6309): chore(deps): update dependency vite to v8 (@renovate[bot]) +- [#6310](https://github.com/rollup/rollup/pull/6310): chore(deps): lock file maintenance (@renovate[bot]) +- [#6311](https://github.com/rollup/rollup/pull/6311): chore(deps): lock file maintenance (@renovate[bot]) +- [#6312](https://github.com/rollup/rollup/pull/6312): chore(deps): lock file maintenance (@renovate[bot]) + ## 4.59.0 _2026-02-22_ diff --git a/browser/package.json b/browser/package.json index 67855cfce..8902b7b17 100644 --- a/browser/package.json +++ b/browser/package.json @@ -1,6 +1,6 @@ { "name": "@rollup/browser", - "version": "4.59.0", + "version": "4.59.1", "description": "Next-generation ES module bundler browser build", "main": "dist/rollup.browser.js", "module": "dist/es/rollup.browser.js", diff --git a/package-lock.json b/package-lock.json index 8a63ee5cf..5fef43a9d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rollup", - "version": "4.59.0", + "version": "4.59.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rollup", - "version": "4.59.0", + "version": "4.59.1", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" diff --git a/package.json b/package.json index 9ed4d2ae0..5ff437cc7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rollup", - "version": "4.59.0", + "version": "4.59.1", "description": "Next-generation ES module bundler", "main": "dist/rollup.js", "module": "dist/es/rollup.js", From 6b725b9f0aae80e4ca4bf3e7b9763b153b850d8b Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sat, 21 Mar 2026 04:01:10 -0400 Subject: [PATCH 03/15] feat: external only Source Phase imports support (#6279) * feat: external only Source Phase imports support * docs * fixup * fix: update source phase test configs to match error output Add missing url fields and fix message text to match the updated logSourcePhaseFormatUnsupported and logNonExternalSourcePhaseImport functions in src/utils/logs.ts. * Remove unnecessary fields * Improve coverage --------- Co-authored-by: Lukas Taegert-Atkinson --- docs/configuration-options/index.md | 2 + docs/es-module-syntax/index.md | 12 + package-lock.json | 268 ++---------------- package.json | 3 +- .../src/ast_nodes/import_declaration.rs | 19 +- .../src/ast_nodes/import_expression.rs | 27 +- rust/parse_ast/src/convert_ast/converter.rs | 4 +- .../convert_ast/converter/ast_constants.rs | 6 +- .../convert_ast/converter/string_constants.rs | 2 + scripts/ast-types.js | 20 +- scripts/generate-ast-macros.js | 3 +- scripts/generate-buffer-parsers.js | 6 + scripts/generate-buffer-to-ast.js | 8 + scripts/generate-string-constants.js | 4 +- src/Chunk.ts | 23 +- src/Graph.ts | 2 +- src/Module.ts | 24 +- src/ModuleLoader.ts | 20 +- src/ast/bufferParsers.ts | 4 + src/ast/nodes/ImportDeclaration.ts | 1 + src/ast/nodes/ImportExpression.ts | 1 + src/ast/variables/ExternalVariable.ts | 5 + src/finalisers/amd.ts | 2 + src/finalisers/cjs.ts | 3 + src/finalisers/es.ts | 16 +- src/finalisers/iife.ts | 3 + src/finalisers/shared/throwOnPhase.ts | 13 + src/finalisers/system.ts | 3 + src/finalisers/umd.ts | 2 + src/utils/bufferToAst.ts | 12 +- src/utils/convert-ast-strings.ts | 4 +- src/utils/deconflictChunk.ts | 6 + src/utils/logs.ts | 23 ++ src/utils/urls.ts | 3 + .../source-phase-imports-external/_config.js | 8 + .../_expected.js | 9 + .../source-phase-imports-external/main.js | 9 + .../_config.js | 25 ++ .../dep.js | 1 + .../main.js | 1 + .../_config.js | 13 + .../source-phase-dynamic-import-error/dep.js | 1 + .../source-phase-dynamic-import-error/main.js | 1 + .../_config.js | 13 + .../source-phase-format-unsupported/main.js | 2 + .../source-phase-import-error/_config.js | 13 + .../samples/source-phase-import-error/dep.js | 1 + .../samples/source-phase-import-error/main.js | 1 + test/testHelpers.js | 3 +- 49 files changed, 364 insertions(+), 291 deletions(-) create mode 100644 src/finalisers/shared/throwOnPhase.ts create mode 100644 test/form/samples/source-phase-imports-external/_config.js create mode 100644 test/form/samples/source-phase-imports-external/_expected.js create mode 100644 test/form/samples/source-phase-imports-external/main.js create mode 100644 test/function/samples/source-phase-dynamic-import-error-resolved/_config.js create mode 100644 test/function/samples/source-phase-dynamic-import-error-resolved/dep.js create mode 100644 test/function/samples/source-phase-dynamic-import-error-resolved/main.js create mode 100644 test/function/samples/source-phase-dynamic-import-error/_config.js create mode 100644 test/function/samples/source-phase-dynamic-import-error/dep.js create mode 100644 test/function/samples/source-phase-dynamic-import-error/main.js create mode 100644 test/function/samples/source-phase-format-unsupported/_config.js create mode 100644 test/function/samples/source-phase-format-unsupported/main.js create mode 100644 test/function/samples/source-phase-import-error/_config.js create mode 100644 test/function/samples/source-phase-import-error/dep.js create mode 100644 test/function/samples/source-phase-import-error/main.js diff --git a/docs/configuration-options/index.md b/docs/configuration-options/index.md index efba1cced..4de992a92 100755 --- a/docs/configuration-options/index.md +++ b/docs/configuration-options/index.md @@ -58,6 +58,8 @@ When providing a function, it is called with three parameters `(id, parent, isRe When creating an `iife` or `umd` bundle, you will need to provide global variable names to replace your external imports via the [`output.globals`](#output-globals) option. +Note that [source phase imports](../es-module-syntax/index.md#source-phase-import) (`import source x from 'y'`) are required to be external. Rollup will raise an error if a source phase import resolves to a module that is not external. + If a relative import, i.e. starting with `./` or `../`, is marked as "external", rollup will internally resolve the id to an absolute file system location so that different imports of the external module can be merged. When the resulting bundle is written, the import will again be converted to a relative import. Example: ```js diff --git a/docs/es-module-syntax/index.md b/docs/es-module-syntax/index.md index ceab161d9..c1ad697a6 100755 --- a/docs/es-module-syntax/index.md +++ b/docs/es-module-syntax/index.md @@ -66,6 +66,18 @@ import('./modules.js').then(({ default: DefaultExport, NamedExport }) => { This is useful for code-splitting applications and using modules on-the-fly. +### Source Phase Import + +Import the Source Phase representation of a module without executing it, using the [Source Phase Imports Proposal](https://github.com/tc39/proposal-source-phase-imports). + +This is useful for importing compiled WebAssembly modules through the module system without relying on the fetch API: + +```js +import source myModule from './module.wasm'; +``` + +Source phase imports must be [external](../configuration-options/index.md#external) — Rollup will raise an error if a source phase import resolves to a non-external module. They are preserved as `import source` declarations in `es` output format. Other output formats (`cjs`, `amd`, `iife`, `umd`, `system`) do not support source phase imports and will raise an error if one is present. + ## Exporting ### Named exports diff --git a/package-lock.json b/package-lock.json index 5fef43a9d..a697f944a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,6 +44,7 @@ "@vue/language-server": "^3.2.5", "acorn": "^8.16.0", "acorn-import-assertions": "^1.9.0", + "acorn-import-phases": "^1.0.4", "acorn-jsx": "^5.3.2", "buble": "^0.20.0", "builtin-modules": "^5.0.0", @@ -54,7 +55,7 @@ "date-time": "^4.0.0", "es5-shim": "^4.6.7", "es6-shim": "^0.35.8", - "eslint": "^10.0.3", + "eslint": "^10.1.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-unicorn": "^63.0.0", @@ -6337,6 +6338,19 @@ "acorn": "^8" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -8772,17 +8786,6 @@ "node": ">=6" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -9170,9 +9173,9 @@ } }, "node_modules/eslint": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.0.3.tgz", - "integrity": "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz", + "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==", "dev": true, "license": "MIT", "peer": true, @@ -9180,7 +9183,7 @@ "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.3", - "@eslint/config-helpers": "^0.5.2", + "@eslint/config-helpers": "^0.5.3", "@eslint/core": "^1.1.1", "@eslint/plugin-kit": "^0.6.1", "@humanfs/node": "^0.16.6", @@ -9193,7 +9196,7 @@ "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", - "espree": "^11.1.1", + "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -11466,237 +11469,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", diff --git a/package.json b/package.json index 5ff437cc7..96b04a517 100644 --- a/package.json +++ b/package.json @@ -151,6 +151,7 @@ "@vue/language-server": "^3.2.5", "acorn": "^8.16.0", "acorn-import-assertions": "^1.9.0", + "acorn-import-phases": "^1.0.4", "acorn-jsx": "^5.3.2", "buble": "^0.20.0", "builtin-modules": "^5.0.0", @@ -161,7 +162,7 @@ "date-time": "^4.0.0", "es5-shim": "^4.6.7", "es6-shim": "^0.35.8", - "eslint": "^10.0.3", + "eslint": "^10.1.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-unicorn": "^63.0.0", diff --git a/rust/parse_ast/src/ast_nodes/import_declaration.rs b/rust/parse_ast/src/ast_nodes/import_declaration.rs index c5f4798bf..146feea80 100644 --- a/rust/parse_ast/src/ast_nodes/import_declaration.rs +++ b/rust/parse_ast/src/ast_nodes/import_declaration.rs @@ -1,9 +1,11 @@ use swc_ecma_ast::ImportDecl; use crate::convert_ast::converter::ast_constants::{ - IMPORT_DECLARATION_ATTRIBUTES_OFFSET, IMPORT_DECLARATION_RESERVED_BYTES, - IMPORT_DECLARATION_SOURCE_OFFSET, IMPORT_DECLARATION_SPECIFIERS_OFFSET, TYPE_IMPORT_DECLARATION, + IMPORT_DECLARATION_ATTRIBUTES_OFFSET, IMPORT_DECLARATION_PHASE_OFFSET, + IMPORT_DECLARATION_RESERVED_BYTES, IMPORT_DECLARATION_SOURCE_OFFSET, + IMPORT_DECLARATION_SPECIFIERS_OFFSET, TYPE_IMPORT_DECLARATION, }; +use crate::convert_ast::converter::string_constants::{STRING_DEFER, STRING_SOURCE}; use crate::convert_ast::converter::AstConverter; impl AstConverter<'_> { @@ -31,6 +33,19 @@ impl AstConverter<'_> { &import_declaration.with, end_position + IMPORT_DECLARATION_ATTRIBUTES_OFFSET, ); + // phase (only written for non-Evaluation phases; Evaluation leaves the default 0) + let phase_position = end_position + IMPORT_DECLARATION_PHASE_OFFSET; + match &import_declaration.phase { + swc_ecma_ast::ImportPhase::Source => { + self.buffer[phase_position..phase_position + 4].copy_from_slice(&STRING_SOURCE); + } + swc_ecma_ast::ImportPhase::Defer => { + self.buffer[phase_position..phase_position + 4].copy_from_slice(&STRING_DEFER); + } + swc_ecma_ast::ImportPhase::Evaluation => { + // Leave buffer at default 0; TS side treats 0 as no phase (undefined) + } + } // end self.add_end(end_position, &import_declaration.span); } diff --git a/rust/parse_ast/src/ast_nodes/import_expression.rs b/rust/parse_ast/src/ast_nodes/import_expression.rs index 101adee31..4e85d3ce0 100644 --- a/rust/parse_ast/src/ast_nodes/import_expression.rs +++ b/rust/parse_ast/src/ast_nodes/import_expression.rs @@ -1,14 +1,20 @@ use swc_common::Span; -use swc_ecma_ast::ExprOrSpread; +use swc_ecma_ast::{ExprOrSpread, Import}; use crate::convert_ast::converter::ast_constants::{ - IMPORT_EXPRESSION_OPTIONS_OFFSET, IMPORT_EXPRESSION_RESERVED_BYTES, - IMPORT_EXPRESSION_SOURCE_OFFSET, TYPE_IMPORT_EXPRESSION, + IMPORT_EXPRESSION_OPTIONS_OFFSET, IMPORT_EXPRESSION_PHASE_OFFSET, + IMPORT_EXPRESSION_RESERVED_BYTES, IMPORT_EXPRESSION_SOURCE_OFFSET, TYPE_IMPORT_EXPRESSION, }; +use crate::convert_ast::converter::string_constants::{STRING_DEFER, STRING_SOURCE}; use crate::convert_ast::converter::AstConverter; impl AstConverter<'_> { - pub(crate) fn store_import_expression(&mut self, span: &Span, arguments: &[ExprOrSpread]) { + pub(crate) fn store_import_expression( + &mut self, + span: &Span, + arguments: &[ExprOrSpread], + import: &Import, + ) { let end_position = self.add_type_and_start( &TYPE_IMPORT_EXPRESSION, span, @@ -23,6 +29,19 @@ impl AstConverter<'_> { self.update_reference_position(end_position + IMPORT_EXPRESSION_OPTIONS_OFFSET); self.convert_expression_or_spread(argument); } + // phase (only written for non-Evaluation phases; Evaluation leaves the default 0) + let phase_position = end_position + IMPORT_EXPRESSION_PHASE_OFFSET; + match &import.phase { + swc_ecma_ast::ImportPhase::Source => { + self.buffer[phase_position..phase_position + 4].copy_from_slice(&STRING_SOURCE); + } + swc_ecma_ast::ImportPhase::Defer => { + self.buffer[phase_position..phase_position + 4].copy_from_slice(&STRING_DEFER); + } + swc_ecma_ast::ImportPhase::Evaluation => { + // Leave buffer at default 0; TS side treats 0 as no phase (undefined) + } + } // end self.add_end(end_position, span); } diff --git a/rust/parse_ast/src/convert_ast/converter.rs b/rust/parse_ast/src/convert_ast/converter.rs index bad0dfa4d..17148bd1e 100644 --- a/rust/parse_ast/src/convert_ast/converter.rs +++ b/rust/parse_ast/src/convert_ast/converter.rs @@ -201,8 +201,8 @@ impl<'a> AstConverter<'a> { is_chained: bool, ) { match &call_expression.callee { - Callee::Import(_) => { - self.store_import_expression(&call_expression.span, &call_expression.args) + Callee::Import(import) => { + self.store_import_expression(&call_expression.span, &call_expression.args, import) } Callee::Expr(callee_expression) => self.store_call_expression( &call_expression.span, diff --git a/rust/parse_ast/src/convert_ast/converter/ast_constants.rs b/rust/parse_ast/src/convert_ast/converter/ast_constants.rs index add6ddf81..2a7aba600 100644 --- a/rust/parse_ast/src/convert_ast/converter/ast_constants.rs +++ b/rust/parse_ast/src/convert_ast/converter/ast_constants.rs @@ -122,14 +122,16 @@ pub const IMPORT_ATTRIBUTE_RESERVED_BYTES: usize = 12; pub const IMPORT_ATTRIBUTE_KEY_OFFSET: usize = 4; pub const IMPORT_ATTRIBUTE_VALUE_OFFSET: usize = 8; -pub const IMPORT_DECLARATION_RESERVED_BYTES: usize = 16; +pub const IMPORT_DECLARATION_RESERVED_BYTES: usize = 20; pub const IMPORT_DECLARATION_SPECIFIERS_OFFSET: usize = 4; pub const IMPORT_DECLARATION_SOURCE_OFFSET: usize = 8; pub const IMPORT_DECLARATION_ATTRIBUTES_OFFSET: usize = 12; +pub const IMPORT_DECLARATION_PHASE_OFFSET: usize = 16; -pub const IMPORT_EXPRESSION_RESERVED_BYTES: usize = 12; +pub const IMPORT_EXPRESSION_RESERVED_BYTES: usize = 16; pub const IMPORT_EXPRESSION_SOURCE_OFFSET: usize = 4; pub const IMPORT_EXPRESSION_OPTIONS_OFFSET: usize = 8; +pub const IMPORT_EXPRESSION_PHASE_OFFSET: usize = 12; pub const JSX_EMPTY_EXPRESSION_RESERVED_BYTES: usize = 4; diff --git a/rust/parse_ast/src/convert_ast/converter/string_constants.rs b/rust/parse_ast/src/convert_ast/converter/string_constants.rs index b5955be0e..778105e86 100644 --- a/rust/parse_ast/src/convert_ast/converter/string_constants.rs +++ b/rust/parse_ast/src/convert_ast/converter/string_constants.rs @@ -64,3 +64,5 @@ pub const STRING_NOSIDEEFFECTS: [u8; 4] = 59u32.to_ne_bytes(); // noSideEffects pub const STRING_SOURCEMAP: [u8; 4] = 60u32.to_ne_bytes(); // sourcemap pub const STRING_USING: [u8; 4] = 61u32.to_ne_bytes(); // using pub const STRING_AWAIT_USING: [u8; 4] = 62u32.to_ne_bytes(); // await using +pub const STRING_SOURCE: [u8; 4] = 63u32.to_ne_bytes(); // source +pub const STRING_DEFER: [u8; 4] = 64u32.to_ne_bytes(); // defer diff --git a/scripts/ast-types.js b/scripts/ast-types.js index f36d1719d..6cdac9abb 100644 --- a/scripts/ast-types.js +++ b/scripts/ast-types.js @@ -26,7 +26,7 @@ * For JSX, see also https://github.com/facebook/jsx/blob/main/AST.md */ -/** @typedef {"Node"|"OptionalNode"|"NodeList"|"Annotations"|"InvalidAnnotations"|"String"|"FixedString"|"OptionalString"|"NullableString"|"Float"} FieldType */ +/** @typedef {"Node"|"OptionalNode"|"NodeList"|"Annotations"|"InvalidAnnotations"|"String"|"FixedString"|"OptionalFixedString"|"OptionalString"|"NullableString"|"Float"} FieldType */ /** @typedef {[name:string, type:FieldType]} FieldWithType */ @@ -354,23 +354,33 @@ export const AST_NODES = { useMacro: false }, ImportDeclaration: { - estreeType: 'estree.ImportDeclaration & { attributes: ImportAttributeNode[] }', + estreeType: + 'estree.ImportDeclaration & { attributes: ImportAttributeNode[]; phase?: "source" | "defer" }', fields: [ ['specifiers', 'NodeList'], ['source', 'Node'], - ['attributes', 'NodeList'] + ['attributes', 'NodeList'], + ['phase', 'OptionalFixedString'] ], + fieldTypes: { + phase: '"source" | "defer"' + }, useMacro: false }, ImportDefaultSpecifier: { fields: [['local', 'Node']] }, ImportExpression: { - estreeType: 'estree.ImportExpression & { options: estree.Expression | null }', + estreeType: + 'estree.ImportExpression & { options: estree.Expression | null; phase?: "source" | "defer" }', fields: [ ['source', 'Node'], - ['options', 'OptionalNode'] + ['options', 'OptionalNode'], + ['phase', 'OptionalFixedString'] ], + fieldTypes: { + phase: '"source" | "defer"' + }, scriptedFields: { source: `node.source = convertNode(node, scope, $position, buffer); node.sourceAstNode = convertJsonNode($position, buffer);` diff --git a/scripts/generate-ast-macros.js b/scripts/generate-ast-macros.js index 5252348ae..81f97b062 100644 --- a/scripts/generate-ast-macros.js +++ b/scripts/generate-ast-macros.js @@ -35,7 +35,8 @@ const astMacros = astNodeNamesWithFieldOrder fieldConverters += ` // ${fieldName}`; switch (fieldType) { - case 'FixedString': { + case 'FixedString': + case 'OptionalFixedString': { valuesInput += `, ${fieldName} => $${fieldName}_value:expr`; fieldConverters += ` let ${fieldName}_position = end_position + ${reservedBytes}; diff --git a/scripts/generate-buffer-parsers.js b/scripts/generate-buffer-parsers.js index b42b8c0b9..6b5352bf8 100644 --- a/scripts/generate-buffer-parsers.js +++ b/scripts/generate-buffer-parsers.js @@ -157,6 +157,12 @@ function getFieldDefinition([fieldName, fieldType], node, originalNode, offset) needsScope: false }; } + case 'OptionalFixedString': { + return { + definition: `const ${fieldName}Index = ${dataStart};\n${assignmentLeftHand}${fieldName}Index === 0 ? undefined : FIXED_STRINGS[${fieldName}Index]${typeCastString};`, + needsScope: false + }; + } case 'Float': { return { definition: `${assignmentLeftHand}new DataView(buffer.buffer).getFloat64((${getPosition}) << 2, true);`, diff --git a/scripts/generate-buffer-to-ast.js b/scripts/generate-buffer-to-ast.js index 648b0d2e8..c7227dbcc 100644 --- a/scripts/generate-buffer-to-ast.js +++ b/scripts/generate-buffer-to-ast.js @@ -80,6 +80,9 @@ function getFieldDefinition([fieldName, fieldType], node, originalNode, offset) case 'Float': { return ''; } + case 'OptionalFixedString': { + return `const ${fieldName}Index = ${dataStart};\n`; + } case 'OptionalNode': { return `const ${fieldName}Position = ${dataStart};\n`; } @@ -118,6 +121,11 @@ function getFieldProperty([fieldName, fieldType], node, originalNode, offset) { case 'InvalidAnnotations': { return `...(${fieldName}.length > 0 ? { [INVALID_ANNOTATION_KEY]: ${fieldName} } : {})`; } + case 'OptionalFixedString': { + const typeCast = originalNode.fieldTypes?.[fieldName] || node.fieldTypes?.[fieldName]; + const typeCastString = typeCast ? ` as ${typeCast}` : ''; + return `...(${fieldName}Index === 0 ? {} : { ${fieldName}: FIXED_STRINGS[${fieldName}Index]${typeCastString} })`; + } default: { return `${fieldName}: ${getFieldPropertyBase([fieldName, fieldType], node, originalNode, offset)}`; } diff --git a/scripts/generate-string-constants.js b/scripts/generate-string-constants.js index 120c2a6c9..768f4067d 100644 --- a/scripts/generate-string-constants.js +++ b/scripts/generate-string-constants.js @@ -72,7 +72,9 @@ const stringConstantsTemplate = [ ['STRING_NOSIDEEFFECTS', 'noSideEffects'], ['STRING_SOURCEMAP', 'sourcemap'], ['STRING_USING', 'using'], - ['STRING_AWAIT_USING', 'await using'] + ['STRING_AWAIT_USING', 'await using'], + ['STRING_SOURCE', 'source'], + ['STRING_DEFER', 'defer'] ]; const rustCode = diff --git a/src/Chunk.ts b/src/Chunk.ts index 117d7cd30..ea73af348 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -6,6 +6,7 @@ import type ImportExpression from './ast/nodes/ImportExpression'; import { formatsMaybeAccessDocumentCurrentScript } from './ast/nodes/MetaProperty'; import type ChildScope from './ast/scopes/ChildScope'; import ExportDefaultVariable from './ast/variables/ExportDefaultVariable'; +import type ExternalVariable from './ast/variables/ExternalVariable'; import LocalVariable from './ast/variables/LocalVariable'; import NamespaceVariable from './ast/variables/NamespaceVariable'; import SyntheticNamedExportVariable from './ast/variables/SyntheticNamedExportVariable'; @@ -107,6 +108,7 @@ export interface ChunkDependency { namedExportsMode: boolean; namespaceVariableName: string | undefined; reexports: ReexportSpecifier[] | null; + sourcePhaseImport: string | undefined; } export type ChunkExports = { @@ -125,6 +127,7 @@ export interface ReexportSpecifier { export interface ImportSpecifier { imported: string; local: string; + phase: 'source' | 'instance'; } interface FacadeName { @@ -1074,10 +1077,17 @@ export default class Chunk { const module = variable.module!; let dependency: Chunk | ExternalChunk; let imported: string; + const isSourcePhase = + module instanceof ExternalModule && (variable as ExternalVariable).isSourcePhase; if (module instanceof ExternalModule) { dependency = this.externalChunkByModule.get(module)!; imported = variable.name; - if (imported !== 'default' && imported !== '*' && interop(module.id) === 'defaultOnly') { + if ( + !isSourcePhase && + imported !== 'default' && + imported !== '*' && + interop(module.id) === 'defaultOnly' + ) { return error(logUnexpectedNamedImport(module.id, imported, false)); } } else { @@ -1086,7 +1096,8 @@ export default class Chunk { } getOrCreate(importsByDependency, dependency, getNewArray).push({ imported, - local: variable.getName(this.snippets.getPropertyAccess) + local: variable.getName(this.snippets.getPropertyAccess), + phase: isSourcePhase ? 'source' : 'instance' }); } return importsByDependency; @@ -1241,6 +1252,9 @@ export default class Chunk { const namedExportsMode = dependency instanceof ExternalChunk || dependency.exportMode !== 'default'; const importPath = dependency.getImportPath(fileName); + // Separate source-phase imports from regular imports + const sourcePhaseImport = imports?.find(index => index.phase === 'source'); + const instanceImports = imports?.filter(index => index.phase !== 'source') ?? null; renderedDependencies.set(dependency, { attributes: @@ -1258,12 +1272,13 @@ export default class Chunk { this.inputOptions.onLog ), importPath, - imports, + imports: instanceImports && instanceImports.length > 0 ? instanceImports : null, isChunk: dependency instanceof Chunk, name: dependency.variableName, namedExportsMode, namespaceVariableName: dependency.namespaceVariableName, - reexports + reexports, + sourcePhaseImport: sourcePhaseImport?.local }); } diff --git a/src/Graph.ts b/src/Graph.ts index 58ca3418d..475e02cdb 100644 --- a/src/Graph.ts +++ b/src/Graph.ts @@ -228,7 +228,7 @@ export default class Graph { private warnForMissingExports(): void { for (const module of this.modules) { for (const importDescription of module.importDescriptions.values()) { - if (importDescription.name !== '*') { + if (importDescription.name !== '*' && importDescription.phase !== 'source') { const [variable, options] = importDescription.module.getVariableForExportName( importDescription.name, { importChain: [module.id] } diff --git a/src/Module.ts b/src/Module.ts index 13aba84a7..8e1629a9e 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -26,7 +26,7 @@ import type { ObjectPath } from './ast/utils/PathTracker'; import { type EntityPathTracker, UNKNOWN_PATH } from './ast/utils/PathTracker'; import ExportDefaultVariable from './ast/variables/ExportDefaultVariable'; import ExportShimVariable from './ast/variables/ExportShimVariable'; -import ExternalVariable from './ast/variables/ExternalVariable'; +import ExternalVariable, { SOURCE_PHASE_IMPORT } from './ast/variables/ExternalVariable'; import NamespaceVariable from './ast/variables/NamespaceVariable'; import SyntheticNamedExportVariable from './ast/variables/SyntheticNamedExportVariable'; import type Variable from './ast/variables/Variable'; @@ -94,6 +94,7 @@ import { MISSING_EXPORT_SHIM_VARIABLE } from './utils/variableNames'; export interface ImportDescription { module: Module | ExternalModule; name: string; + phase: 'source' | 'instance'; source: string; start: number; } @@ -253,6 +254,7 @@ export default class Module { declare scope: ModuleScope; readonly sideEffectDependenciesByVariable = new Map>(); declare sourcemapChain: DecodedSourceMapOrMissing[]; + readonly sourcePhaseSources = new Set(); readonly sourcesWithAttributes = new Map>(); declare transformFiles?: EmittedFile[]; @@ -1118,16 +1120,19 @@ export default class Module { } const name = - specifier instanceof ImportDefaultSpecifier - ? 'default' - : specifier instanceof ImportNamespaceSpecifier - ? '*' - : specifier.imported instanceof Identifier - ? specifier.imported.name - : specifier.imported.value; + node.phase === 'source' + ? SOURCE_PHASE_IMPORT + : specifier instanceof ImportDefaultSpecifier + ? 'default' + : specifier instanceof ImportNamespaceSpecifier + ? '*' + : specifier.imported instanceof Identifier + ? specifier.imported.name + : specifier.imported.value; this.importDescriptions.set(localName, { module: null as never, // filled in later name, + phase: node.phase === 'source' ? 'source' : 'instance', source, start: specifier.start }); @@ -1224,6 +1229,9 @@ export default class Module { } else { this.sourcesWithAttributes.set(source, parsedAttributes); } + if ((declaration as ImportDeclaration).phase === 'source') { + this.sourcePhaseSources.add(source); + } } private getImportedJsxFactoryVariable( diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 21be38040..a3decaf05 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -27,6 +27,7 @@ import { logImplicitDependantCannotBeExternal, logInconsistentImportAttributes, logInternalIdCannotBeExternal, + logNonExternalSourcePhaseImport, logUnresolvedEntry, logUnresolvedImplicitDependant, logUnresolvedImport, @@ -384,12 +385,20 @@ export class ModuleLoader { ): Promise { const dependencies = await Promise.all( resolveDynamicImportPromises.map(resolveDynamicImportPromise => - resolveDynamicImportPromise.then(async ([{ node }, resolvedId]) => { + resolveDynamicImportPromise.then(async ([{ argument, node }, resolvedId]) => { if (resolvedId === null) return null; if (typeof resolvedId === 'string') { node.resolution = resolvedId; return null; } + if (node.phase === 'source' && !resolvedId.external) { + return error( + logNonExternalSourcePhaseImport( + typeof argument === 'string' ? argument : relativeId(resolvedId.id), + module.id + ) + ); + } return (node.resolution = await this.fetchResolvedDependency( relativeId(resolvedId.id), module.id, @@ -526,9 +535,12 @@ export class ModuleLoader { ): Promise { for (const dependency of await Promise.all( resolveStaticDependencyPromises.map(resolveStaticDependencyPromise => - resolveStaticDependencyPromise.then(([source, resolvedId]) => - this.fetchResolvedDependency(source, module.id, resolvedId) - ) + resolveStaticDependencyPromise.then(([source, resolvedId]) => { + if (module.sourcePhaseSources.has(source) && !resolvedId.external) { + return error(logNonExternalSourcePhaseImport(source, module.id)); + } + return this.fetchResolvedDependency(source, module.id, resolvedId); + }) ) )) { module.dependencies.add(dependency); diff --git a/src/ast/bufferParsers.ts b/src/ast/bufferParsers.ts index 826f12b3c..185c15015 100644 --- a/src/ast/bufferParsers.ts +++ b/src/ast/bufferParsers.ts @@ -594,6 +594,8 @@ const bufferParsers: ((node: any, position: number, buffer: AstBuffer) => void)[ node.specifiers = convertNodeList(node, scope, buffer[position], buffer); node.source = convertNode(node, scope, buffer[position + 1], buffer); node.attributes = convertNodeList(node, scope, buffer[position + 2], buffer); + const phaseIndex = buffer[position + 3]; + node.phase = phaseIndex === 0 ? undefined : (FIXED_STRINGS[phaseIndex] as 'source' | 'defer'); }, function importDefaultSpecifier(node: ImportDefaultSpecifier, position, buffer) { const { scope } = node; @@ -605,6 +607,8 @@ const bufferParsers: ((node: any, position: number, buffer: AstBuffer) => void)[ node.sourceAstNode = convertJsonNode(buffer[position], buffer); const optionsPosition = buffer[position + 1]; node.options = optionsPosition === 0 ? null : convertNode(node, scope, optionsPosition, buffer); + const phaseIndex = buffer[position + 2]; + node.phase = phaseIndex === 0 ? undefined : (FIXED_STRINGS[phaseIndex] as 'source' | 'defer'); }, function importNamespaceSpecifier(node: ImportNamespaceSpecifier, position, buffer) { const { scope } = node; diff --git a/src/ast/nodes/ImportDeclaration.ts b/src/ast/nodes/ImportDeclaration.ts index d279d26b2..ffa7531c2 100644 --- a/src/ast/nodes/ImportDeclaration.ts +++ b/src/ast/nodes/ImportDeclaration.ts @@ -11,6 +11,7 @@ import { doNotDeoptimize, NodeBase, onlyIncludeSelfNoDeoptimize } from './shared export default class ImportDeclaration extends NodeBase { declare attributes: ImportAttribute[]; declare needsBoundaries: true; + declare phase: 'source' | 'defer' | undefined; declare source: Literal; declare specifiers: (ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier)[]; declare type: NodeType.tImportDeclaration; diff --git a/src/ast/nodes/ImportExpression.ts b/src/ast/nodes/ImportExpression.ts index 7d93b6b28..fa24742db 100644 --- a/src/ast/nodes/ImportExpression.ts +++ b/src/ast/nodes/ImportExpression.ts @@ -56,6 +56,7 @@ function getChunkInfoWithPath(chunk: Chunk): PreRenderedChunkWithFileName { export default class ImportExpression extends NodeBase { declare options: ExpressionNode | null; inlineNamespace: NamespaceVariable | null = null; + declare phase: 'source' | 'defer' | undefined; declare source: ExpressionNode; declare type: NodeType.tImportExpression; declare sourceAstNode: AstNode; diff --git a/src/ast/variables/ExternalVariable.ts b/src/ast/variables/ExternalVariable.ts index ceda7380b..1db4f5ac3 100644 --- a/src/ast/variables/ExternalVariable.ts +++ b/src/ast/variables/ExternalVariable.ts @@ -6,8 +6,12 @@ import type IdentifierBase from '../nodes/shared/IdentifierBase'; import { type ObjectPath } from '../utils/PathTracker'; import Variable from './Variable'; +/** Synthetic import name for source phase imports, similar to '*' for namespaces */ +export const SOURCE_PHASE_IMPORT = '*source'; + export default class ExternalVariable extends Variable { readonly isNamespace: boolean; + readonly isSourcePhase: boolean; readonly module: ExternalModule; referenced = false; @@ -15,6 +19,7 @@ export default class ExternalVariable extends Variable { super(name); this.module = module; this.isNamespace = name === '*'; + this.isSourcePhase = name === SOURCE_PHASE_IMPORT; } addReference(identifier: IdentifierBase): void { diff --git a/src/finalisers/amd.ts b/src/finalisers/amd.ts index 923bc0f8a..5cb9119f9 100644 --- a/src/finalisers/amd.ts +++ b/src/finalisers/amd.ts @@ -4,6 +4,7 @@ import type { FinaliserOptions } from './index'; import getCompleteAmdId from './shared/getCompleteAmdId'; import { getExportBlock, getNamespaceMarkers } from './shared/getExportBlock'; import getInteropBlock from './shared/getInteropBlock'; +import throwOnPhase from './shared/throwOnPhase'; import updateExtensionForRelativeAmdId from './shared/updateExtensionForRelativeAmdId'; import warnOnBuiltins from './shared/warnOnBuiltins'; @@ -37,6 +38,7 @@ export default function amd( }: NormalizedOutputOptions ): void { warnOnBuiltins(log, dependencies); + throwOnPhase('amd', id, dependencies); const deps = dependencies.map( m => `'${updateExtensionForRelativeAmdId(m.importPath, amd.forceJsExtensionForImports)}'` ); diff --git a/src/finalisers/cjs.ts b/src/finalisers/cjs.ts index 7660867c5..7d0e58a38 100644 --- a/src/finalisers/cjs.ts +++ b/src/finalisers/cjs.ts @@ -5,6 +5,7 @@ import type { GenerateCodeSnippets } from '../utils/generateCodeSnippets'; import type { FinaliserOptions } from './index'; import { getExportBlock, getNamespaceMarkers } from './shared/getExportBlock'; import getInteropBlock from './shared/getInteropBlock'; +import throwOnPhase from './shared/throwOnPhase'; export default function cjs( magicString: MagicStringBundle, @@ -14,6 +15,7 @@ export default function cjs( exports, hasDefaultExport, hasExports, + id, indent: t, intro, isEntryFacade, @@ -33,6 +35,7 @@ export default function cjs( strict }: NormalizedOutputOptions ): void { + throwOnPhase('cjs', id, dependencies); const { _, n } = snippets; const useStrict = strict ? `'use strict';${n}${n}` : ''; diff --git a/src/finalisers/es.ts b/src/finalisers/es.ts index 960f8ea7b..1cfead2de 100644 --- a/src/finalisers/es.ts +++ b/src/finalisers/es.ts @@ -44,11 +44,23 @@ function getImportBlock( { _ }: GenerateCodeSnippets ): string[] { const importBlock: string[] = []; - for (const { importPath, reexports, imports, name, attributes } of dependencies) { + for (const { + importPath, + reexports, + imports, + name, + attributes, + sourcePhaseImport + } of dependencies) { const assertion = attributes ? `${_}${importAttributesKey}${_}${attributes}` : ''; const pathWithAssertion = `'${importPath}'${assertion};`; + if (sourcePhaseImport) { + importBlock.push(`import source ${sourcePhaseImport} from${_}${pathWithAssertion}`); + } if (!reexports && !imports) { - importBlock.push(`import${_}${pathWithAssertion}`); + if (!sourcePhaseImport) { + importBlock.push(`import${_}${pathWithAssertion}`); + } continue; } if (imports) { diff --git a/src/finalisers/iife.ts b/src/finalisers/iife.ts index 93a206511..f7237e351 100644 --- a/src/finalisers/iife.ts +++ b/src/finalisers/iife.ts @@ -12,6 +12,7 @@ import { getExportBlock, getNamespaceMarkers } from './shared/getExportBlock'; import getInteropBlock from './shared/getInteropBlock'; import { keypath } from './shared/sanitize'; import setupNamespace from './shared/setupNamespace'; +import throwOnPhase from './shared/throwOnPhase'; import trimEmptyImports from './shared/trimEmptyImports'; import warnOnBuiltins from './shared/warnOnBuiltins'; @@ -23,6 +24,7 @@ export default function iife( exports, hasDefaultExport, hasExports, + id, indent: t, intro, namedExportsMode, @@ -44,6 +46,7 @@ export default function iife( strict }: NormalizedOutputOptions ): void { + throwOnPhase('iife', id, dependencies); const { _, getNonArrowFunctionIntro, getPropertyAccess, n } = snippets; const isNamespaced = name && name.includes('.'); const useVariableAssignment = !extend && !isNamespaced; diff --git a/src/finalisers/shared/throwOnPhase.ts b/src/finalisers/shared/throwOnPhase.ts new file mode 100644 index 000000000..a14db3267 --- /dev/null +++ b/src/finalisers/shared/throwOnPhase.ts @@ -0,0 +1,13 @@ +import type { ChunkDependency } from '../../Chunk'; +import { error, logSourcePhaseFormatUnsupported } from '../../utils/logs'; + +export default function throwOnPhase( + outputFormat: string, + chunkId: string, + dependencies: readonly ChunkDependency[] +): void { + const sourcePhaseDependency = dependencies.find(dependency => dependency.sourcePhaseImport); + if (sourcePhaseDependency) { + error(logSourcePhaseFormatUnsupported(outputFormat, chunkId, sourcePhaseDependency.importPath)); + } +} diff --git a/src/finalisers/system.ts b/src/finalisers/system.ts index ad926028c..eeec29e20 100644 --- a/src/finalisers/system.ts +++ b/src/finalisers/system.ts @@ -6,6 +6,7 @@ import { stringifyObjectKeyIfNeeded } from '../utils/identifierHelpers'; import { getHelpersBlock } from '../utils/interopHelpers'; import { MISSING_EXPORT_SHIM_VARIABLE } from '../utils/variableNames'; import type { FinaliserOptions } from './index'; +import throwOnPhase from './shared/throwOnPhase'; export default function system( magicString: MagicStringBundle, @@ -14,6 +15,7 @@ export default function system( dependencies, exports, hasExports, + id, indent: t, intro, snippets, @@ -29,6 +31,7 @@ export default function system( systemNullSetters }: NormalizedOutputOptions ): void { + throwOnPhase('system', id, dependencies); const { _, getFunctionIntro, getNonArrowFunctionIntro, n, s } = snippets; const { importBindings, setters, starExcludes } = analyzeDependencies( dependencies, diff --git a/src/finalisers/umd.ts b/src/finalisers/umd.ts index 16be02c37..0499a7d2c 100644 --- a/src/finalisers/umd.ts +++ b/src/finalisers/umd.ts @@ -8,6 +8,7 @@ import { getExportBlock, getNamespaceMarkers } from './shared/getExportBlock'; import getInteropBlock from './shared/getInteropBlock'; import { keypath } from './shared/sanitize'; import { assignToDeepVariable } from './shared/setupNamespace'; +import throwOnPhase from './shared/throwOnPhase'; import trimEmptyImports from './shared/trimEmptyImports'; import updateExtensionForRelativeAmdId from './shared/updateExtensionForRelativeAmdId'; import warnOnBuiltins from './shared/warnOnBuiltins'; @@ -73,6 +74,7 @@ export default function umd( return error(logMissingNameOptionForUmdExport()); } + throwOnPhase('umd', id, dependencies); warnOnBuiltins(log, dependencies); const amdDeps = dependencies.map( diff --git a/src/utils/bufferToAst.ts b/src/utils/bufferToAst.ts index a7789d4ac..e7023a96e 100644 --- a/src/utils/bufferToAst.ts +++ b/src/utils/bufferToAst.ts @@ -404,13 +404,15 @@ const nodeConverters: ((position: number, buffer: AstBuffer) => any)[] = [ }; }, function importDeclaration(position, buffer): ImportDeclarationNode { + const phaseIndex = buffer[position + 5]; return { type: 'ImportDeclaration', start: buffer[position], end: buffer[position + 1], specifiers: convertNodeList(buffer[position + 2], buffer), source: convertNode(buffer[position + 3], buffer), - attributes: convertNodeList(buffer[position + 4], buffer) + attributes: convertNodeList(buffer[position + 4], buffer), + ...(phaseIndex === 0 ? {} : { phase: FIXED_STRINGS[phaseIndex] as 'source' | 'defer' }) }; }, function importDefaultSpecifier(position, buffer): ImportDefaultSpecifierNode { @@ -423,12 +425,14 @@ const nodeConverters: ((position: number, buffer: AstBuffer) => any)[] = [ }, function importExpression(position, buffer): ImportExpressionNode { const optionsPosition = buffer[position + 3]; + const phaseIndex = buffer[position + 4]; return { type: 'ImportExpression', start: buffer[position], end: buffer[position + 1], source: convertNode(buffer[position + 2], buffer), - options: optionsPosition === 0 ? null : convertNode(optionsPosition, buffer) + options: optionsPosition === 0 ? null : convertNode(optionsPosition, buffer), + ...(phaseIndex === 0 ? {} : { phase: FIXED_STRINGS[phaseIndex] as 'source' | 'defer' }) }; }, function importNamespaceSpecifier(position, buffer): ImportNamespaceSpecifierNode { @@ -1020,11 +1024,11 @@ export type ImportAttributeNode = RollupAstNode<{ value: estree.Literal; }>; export type ImportDeclarationNode = RollupAstNode< - estree.ImportDeclaration & { attributes: ImportAttributeNode[] } + estree.ImportDeclaration & { attributes: ImportAttributeNode[]; phase?: 'source' | 'defer' } >; export type ImportDefaultSpecifierNode = RollupAstNode; export type ImportExpressionNode = RollupAstNode< - estree.ImportExpression & { options: estree.Expression | null } + estree.ImportExpression & { options: estree.Expression | null; phase?: 'source' | 'defer' } >; export type ImportNamespaceSpecifierNode = RollupAstNode; export type ImportSpecifierNode = RollupAstNode; diff --git a/src/utils/convert-ast-strings.ts b/src/utils/convert-ast-strings.ts index ad2da5d2b..eda3f8659 100644 --- a/src/utils/convert-ast-strings.ts +++ b/src/utils/convert-ast-strings.ts @@ -64,5 +64,7 @@ export default [ 'noSideEffects', 'sourcemap', 'using', - 'await using' + 'await using', + 'source', + 'defer' ]; diff --git a/src/utils/deconflictChunk.ts b/src/utils/deconflictChunk.ts index 9981974f8..5d09475e8 100644 --- a/src/utils/deconflictChunk.ts +++ b/src/utils/deconflictChunk.ts @@ -1,5 +1,6 @@ import type ChildScope from '../ast/scopes/ChildScope'; import ExportDefaultVariable from '../ast/variables/ExportDefaultVariable'; +import type ExternalVariable from '../ast/variables/ExternalVariable'; import type SyntheticNamedExportVariable from '../ast/variables/SyntheticNamedExportVariable'; import type Variable from '../ast/variables/Variable'; import type Chunk from '../Chunk'; @@ -111,6 +112,11 @@ function deconflictImportsEsmOrSystem( : chunkByModule.get(module)! ).variableName ); + } else if (module instanceof ExternalModule && (variable as ExternalVariable).isSourcePhase) { + variable.setRenderNames( + null, + getSafeName(module.suggestedVariableName + '__source', usedNames, variable.forbiddenNames) + ); } else if (module instanceof ExternalModule && name === 'default') { variable.setRenderNames( null, diff --git a/src/utils/logs.ts b/src/utils/logs.ts index 0f852802b..d6c592933 100644 --- a/src/utils/logs.ts +++ b/src/utils/logs.ts @@ -26,6 +26,7 @@ import { URL_OUTPUT_GLOBALS, URL_OUTPUT_INTEROP, URL_OUTPUT_NAME, + URL_SOURCE_PHASE_IMPORTS, URL_SOURCEMAP_IS_LIKELY_TO_BE_INCORRECT, URL_THIS_IS_UNDEFINED, URL_TREATING_MODULE_AS_EXTERNAL_DEPENDENCY, @@ -164,6 +165,7 @@ const ADDON_ERROR = 'ADDON_ERROR', MIXED_EXPORTS = 'MIXED_EXPORTS', MODULE_LEVEL_DIRECTIVE = 'MODULE_LEVEL_DIRECTIVE', NAMESPACE_CONFLICT = 'NAMESPACE_CONFLICT', + NON_EXTERNAL_SOURCE_PHASE_IMPORT = 'NON_EXTERNAL_SOURCE_PHASE_IMPORT', NO_FS_IN_BROWSER = 'NO_FS_IN_BROWSER', NO_TRANSFORM_MAP_OR_AST_WITHOUT_CODE = 'NO_TRANSFORM_MAP_OR_AST_WITHOUT_CODE', ONLY_INLINE_SOURCEMAPS = 'ONLY_INLINE_SOURCEMAPS', @@ -173,6 +175,7 @@ const ADDON_ERROR = 'ADDON_ERROR', REDECLARATION_ERROR = 'REDECLARATION_ERROR', RESERVED_NAMESPACE = 'RESERVED_NAMESPACE', SHIMMED_EXPORT = 'SHIMMED_EXPORT', + SOURCE_PHASE_FORMAT_UNSUPPORTED = 'SOURCE_PHASE_FORMAT_UNSUPPORTED', SOURCEMAP_BROKEN = 'SOURCEMAP_BROKEN', SOURCEMAP_ERROR = 'SOURCEMAP_ERROR', SYNTHETIC_NAMED_EXPORTS_NEED_NAMESPACE_EXPORT = 'SYNTHETIC_NAMED_EXPORTS_NEED_NAMESPACE_EXPORT', @@ -892,6 +895,14 @@ export function logNamespaceConflict( }; } +export function logNonExternalSourcePhaseImport(source: string, importer: string): RollupLog { + return { + code: NON_EXTERNAL_SOURCE_PHASE_IMPORT, + message: `Source phase import "${source}" in "${relativeId(importer)}" must be external. Source phase imports are only supported for external modules. Use the "external" option to mark this module as external.`, + url: getRollupUrl(URL_SOURCE_PHASE_IMPORTS) + }; +} + export function logNoFileSystemInBrowser(method: string): RollupLog { return { code: NO_FS_IN_BROWSER, @@ -1000,6 +1011,18 @@ export function logShimmedExport(id: string, binding: string): RollupLog { }; } +export function logSourcePhaseFormatUnsupported( + outputFormat: string, + chunkId: string, + dependencyId: string +): RollupLog { + return { + code: SOURCE_PHASE_FORMAT_UNSUPPORTED, + message: `Source phase imports are not supported for the "${outputFormat}" output format, importing "${dependencyId}" in "${chunkId}". Use the "es" output format to support source phase imports.`, + url: getRollupUrl(URL_SOURCE_PHASE_IMPORTS) + }; +} + export function logSourcemapBroken(plugin: string): RollupLog { return { code: SOURCEMAP_BROKEN, diff --git a/src/utils/urls.ts b/src/utils/urls.ts index b8e496359..df415c3d2 100644 --- a/src/utils/urls.ts +++ b/src/utils/urls.ts @@ -36,6 +36,9 @@ export const URL_TREESHAKE_NOSIDEEFFECTS = 'configuration-options/#no-side-effec export const URL_TREESHAKE_MODULESIDEEFFECTS = 'configuration-options/#treeshake-modulesideeffects'; export const URL_WATCH = 'configuration-options/#watch'; +// es-module-syntax +export const URL_SOURCE_PHASE_IMPORTS = 'es-module-syntax/#source-phase-import'; + // command-line-interface export const URL_BUNDLE_CONFIG_AS_CJS = 'command-line-interface/#bundleconfigascjs'; export const URL_CONFIGURATION_FILES = 'command-line-interface/#configuration-files'; diff --git a/test/form/samples/source-phase-imports-external/_config.js b/test/form/samples/source-phase-imports-external/_config.js new file mode 100644 index 000000000..b2985cd85 --- /dev/null +++ b/test/form/samples/source-phase-imports-external/_config.js @@ -0,0 +1,8 @@ +module.exports = defineTest({ + description: 'preserves source phase import externals', + formats: ['es'], + options: { + external: ['./dep1.js'] // dep2 tested as implicit external + }, + expectedWarnings: ['UNRESOLVED_IMPORT'] +}); diff --git a/test/form/samples/source-phase-imports-external/_expected.js b/test/form/samples/source-phase-imports-external/_expected.js new file mode 100644 index 000000000..4d22b8007 --- /dev/null +++ b/test/form/samples/source-phase-imports-external/_expected.js @@ -0,0 +1,9 @@ +import source mod2__source from './dep1.js'; +import mod2 from './dep1.js'; +import source dep2__source from 'dep2'; + +console.log(mod2__source); +console.log(mod2); +console.log(dep2__source); + +import.source('./dep1.js').then(console.log); diff --git a/test/form/samples/source-phase-imports-external/main.js b/test/form/samples/source-phase-imports-external/main.js new file mode 100644 index 000000000..b9eb5d41e --- /dev/null +++ b/test/form/samples/source-phase-imports-external/main.js @@ -0,0 +1,9 @@ +import source mod1 from './dep1.js'; +import mod2 from './dep1.js'; +import source mod3 from 'dep2'; + +console.log(mod1); +console.log(mod2); +console.log(mod3); + +import.source('./dep1.js').then(console.log); diff --git a/test/function/samples/source-phase-dynamic-import-error-resolved/_config.js b/test/function/samples/source-phase-dynamic-import-error-resolved/_config.js new file mode 100644 index 000000000..57b679cba --- /dev/null +++ b/test/function/samples/source-phase-dynamic-import-error-resolved/_config.js @@ -0,0 +1,25 @@ +const path = require('node:path'); +const ID_MAIN = path.join(__dirname, 'main.js'); + +module.exports = defineTest({ + description: 'throws for non-external dynamic source phase imports with dynamic attributes', + options: { + plugins: [ + { + name: 'test', + resolveDynamicImport(specifier) { + if (specifier?.type === 'Identifier' && specifier.name === 'dynamic') { + return { id: 'dynamic' }; + } + } + } + ] + }, + error: { + code: 'NON_EXTERNAL_SOURCE_PHASE_IMPORT', + message: + 'Source phase import "dynamic" in "main.js" must be external. Source phase imports are only supported for external modules. Use the "external" option to mark this module as external.', + url: 'https://rollupjs.org/es-module-syntax/#source-phase-import', + watchFiles: [ID_MAIN] + } +}); diff --git a/test/function/samples/source-phase-dynamic-import-error-resolved/dep.js b/test/function/samples/source-phase-dynamic-import-error-resolved/dep.js new file mode 100644 index 000000000..787bdab3a --- /dev/null +++ b/test/function/samples/source-phase-dynamic-import-error-resolved/dep.js @@ -0,0 +1 @@ +export default 'dep'; diff --git a/test/function/samples/source-phase-dynamic-import-error-resolved/main.js b/test/function/samples/source-phase-dynamic-import-error-resolved/main.js new file mode 100644 index 000000000..a9a6dd650 --- /dev/null +++ b/test/function/samples/source-phase-dynamic-import-error-resolved/main.js @@ -0,0 +1 @@ +import.source(dynamic).then(console.log) diff --git a/test/function/samples/source-phase-dynamic-import-error/_config.js b/test/function/samples/source-phase-dynamic-import-error/_config.js new file mode 100644 index 000000000..9849fc6c4 --- /dev/null +++ b/test/function/samples/source-phase-dynamic-import-error/_config.js @@ -0,0 +1,13 @@ +const path = require('node:path'); +const ID_MAIN = path.join(__dirname, 'main.js'); + +module.exports = defineTest({ + description: 'throws for non-external dynamic source phase imports', + error: { + code: 'NON_EXTERNAL_SOURCE_PHASE_IMPORT', + message: + 'Source phase import "./dep.js" in "main.js" must be external. Source phase imports are only supported for external modules. Use the "external" option to mark this module as external.', + url: 'https://rollupjs.org/es-module-syntax/#source-phase-import', + watchFiles: [ID_MAIN] + } +}); diff --git a/test/function/samples/source-phase-dynamic-import-error/dep.js b/test/function/samples/source-phase-dynamic-import-error/dep.js new file mode 100644 index 000000000..787bdab3a --- /dev/null +++ b/test/function/samples/source-phase-dynamic-import-error/dep.js @@ -0,0 +1 @@ +export default 'dep'; diff --git a/test/function/samples/source-phase-dynamic-import-error/main.js b/test/function/samples/source-phase-dynamic-import-error/main.js new file mode 100644 index 000000000..54a83b6bd --- /dev/null +++ b/test/function/samples/source-phase-dynamic-import-error/main.js @@ -0,0 +1 @@ +import.source('./dep.js').then(console.log); diff --git a/test/function/samples/source-phase-format-unsupported/_config.js b/test/function/samples/source-phase-format-unsupported/_config.js new file mode 100644 index 000000000..bb4e86e40 --- /dev/null +++ b/test/function/samples/source-phase-format-unsupported/_config.js @@ -0,0 +1,13 @@ +module.exports = defineTest({ + description: 'throws for source phase imports in non-ES output formats', + options: { + external: ['external'], + output: { format: 'cjs' } + }, + generateError: { + code: 'SOURCE_PHASE_FORMAT_UNSUPPORTED', + message: + 'Source phase imports are not supported for the "cjs" output format, importing "external" in "main.js". Use the "es" output format to support source phase imports.', + url: 'https://rollupjs.org/es-module-syntax/#source-phase-import' + } +}); diff --git a/test/function/samples/source-phase-format-unsupported/main.js b/test/function/samples/source-phase-format-unsupported/main.js new file mode 100644 index 000000000..165d69785 --- /dev/null +++ b/test/function/samples/source-phase-format-unsupported/main.js @@ -0,0 +1,2 @@ +import source mod from 'external'; +console.log(mod); diff --git a/test/function/samples/source-phase-import-error/_config.js b/test/function/samples/source-phase-import-error/_config.js new file mode 100644 index 000000000..c197701f8 --- /dev/null +++ b/test/function/samples/source-phase-import-error/_config.js @@ -0,0 +1,13 @@ +const path = require('node:path'); +const ID_MAIN = path.join(__dirname, 'main.js'); + +module.exports = defineTest({ + description: 'throws for non-external source phase imports', + error: { + code: 'NON_EXTERNAL_SOURCE_PHASE_IMPORT', + message: + 'Source phase import "./dep.js" in "main.js" must be external. Source phase imports are only supported for external modules. Use the "external" option to mark this module as external.', + url: 'https://rollupjs.org/es-module-syntax/#source-phase-import', + watchFiles: [ID_MAIN] + } +}); diff --git a/test/function/samples/source-phase-import-error/dep.js b/test/function/samples/source-phase-import-error/dep.js new file mode 100644 index 000000000..787bdab3a --- /dev/null +++ b/test/function/samples/source-phase-import-error/dep.js @@ -0,0 +1 @@ +export default 'dep'; diff --git a/test/function/samples/source-phase-import-error/main.js b/test/function/samples/source-phase-import-error/main.js new file mode 100644 index 000000000..a8e606c65 --- /dev/null +++ b/test/function/samples/source-phase-import-error/main.js @@ -0,0 +1 @@ +import source mod from './dep.js'; diff --git a/test/testHelpers.js b/test/testHelpers.js index 69bbaf8e2..b1f8e91d1 100644 --- a/test/testHelpers.js +++ b/test/testHelpers.js @@ -23,6 +23,7 @@ const path = require('node:path'); const { platform, version } = require('node:process'); const { Parser } = require('acorn'); const { importAssertions } = require('acorn-import-assertions'); +const importPhases = require('acorn-import-phases'); const jsx = require('acorn-jsx'); const fixturify = require('fixturify'); @@ -465,7 +466,7 @@ exports.replaceDirectoryInStringifiedObject = function replaceDirectoryInStringi /** @type {boolean} */ exports.hasEsBuild = existsSync(path.join(__dirname, '../dist/es')); -const acornParser = Parser.extend(importAssertions, jsx()); +const acornParser = Parser.extend(importAssertions, importPhases(), jsx()); exports.verifyAstPlugin = { name: 'verify-ast', From 6ecd69fb2ce736c8aabb50829edd227d1792c957 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Sun, 22 Mar 2026 07:31:53 +0100 Subject: [PATCH 04/15] 4.60.0 --- CHANGELOG.md | 12 ++++++++++++ browser/package.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da71ba850..6d9b6478b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # rollup changelog +## 4.60.0 + +_2026-03-22_ + +### Features + +- Support source phase imports as long as they are external (#6279) + +### Pull Requests + +- [#6279](https://github.com/rollup/rollup/pull/6279): feat: external only Source Phase imports support (@guybedford, @lukastaegert) + ## 4.59.1 _2026-03-21_ diff --git a/browser/package.json b/browser/package.json index 8902b7b17..ad3d1e269 100644 --- a/browser/package.json +++ b/browser/package.json @@ -1,6 +1,6 @@ { "name": "@rollup/browser", - "version": "4.59.1", + "version": "4.60.0", "description": "Next-generation ES module bundler browser build", "main": "dist/rollup.browser.js", "module": "dist/es/rollup.browser.js", diff --git a/package-lock.json b/package-lock.json index a697f944a..3ef0327cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rollup", - "version": "4.59.1", + "version": "4.60.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rollup", - "version": "4.59.1", + "version": "4.60.0", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" diff --git a/package.json b/package.json index 96b04a517..b601e9cc3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rollup", - "version": "4.59.1", + "version": "4.60.0", "description": "Next-generation ES module bundler", "main": "dist/rollup.js", "module": "dist/es/rollup.js", From 5598a6658cd8220f146bb7b034f436f432c98c80 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Mar 2026 19:01:47 +0000 Subject: [PATCH 05/15] chore(deps): lock file maintenance (#6323) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 928 +++++++++++++++++++++++----------------------- rust/Cargo.lock | 8 +- 2 files changed, 474 insertions(+), 462 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3ef0327cd..4d1e77e46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -113,16 +113,16 @@ } }, "node_modules/@algolia/abtesting": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.15.2.tgz", - "integrity": "sha512-rF7vRVE61E0QORw8e2NNdnttcl3jmFMWS9B4hhdga12COe+lMa26bQLfcBn/Nbp9/AF/8gXdaRCPsVns3CnjsA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.16.0.tgz", + "integrity": "sha512-alHFZ68/i9qLC/muEB07VQ9r7cB8AvCcGX6dVQi2PNHhc/ZQRmmFAv8KK1ay4UiseGSFr7f0nXBKsZ/jRg7e4g==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" @@ -178,41 +178,41 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.49.2.tgz", - "integrity": "sha512-XyvKCm0RRmovMI/ChaAVjTwpZhXdbgt3iZofK914HeEHLqD1MUFFVLz7M0+Ou7F56UkHXwRbpHwb9xBDNopprQ==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.50.0.tgz", + "integrity": "sha512-mfgUdLQNxOAvCZUGzPQxjahEWEPuQkKlV0ZtGmePOa9ZxIQZlk31vRBNbM6ScU8jTH41SCYE77G/lCifDr1SVw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.49.2.tgz", - "integrity": "sha512-jq/3qvtmj3NijZlhq7A1B0Cl41GfaBpjJxcwukGsYds6aMSCWrEAJ9pUqw/C9B3hAmILYKl7Ljz3N9SFvekD3Q==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.50.0.tgz", + "integrity": "sha512-5mjokeKYyPaP3Q8IYJEnutI+O4dW/Ixxx5IgsSxT04pCfGqPXxTOH311hTQxyNpcGGEOGrMv8n8Z+UMTPamioQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.49.2.tgz", - "integrity": "sha512-bn0biLequn3epobCfjUqCxlIlurLr4RHu7RaE4trgN+RDcUq6HCVC3/yqq1hwbNYpVtulnTOJzcaxYlSr1fnuw==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.50.0.tgz", + "integrity": "sha512-emtOvR6dl3rX3sBJXXbofMNHU1qMQqQSWu319RMrNL5BWoBqyiq7y0Zn6cjJm7aGHV/Qbf+KCCYeWNKEMPI3BQ==", "dev": true, "license": "MIT", "engines": { @@ -220,152 +220,152 @@ } }, "node_modules/@algolia/client-insights": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.49.2.tgz", - "integrity": "sha512-z14wfFs1T3eeYbCArC8pvntAWsPo9f6hnUGoj8IoRUJTwgJiiySECkm8bmmV47/x0oGHfsVn3kBdjMX0yq0sNA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.50.0.tgz", + "integrity": "sha512-IerGH2/hcj/6bwkpQg/HHRqmlGN1XwygQWythAk0gZFBrghs9danJaYuSS3ShzLSVoIVth4jY5GDPX9Lbw5cgg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.49.2.tgz", - "integrity": "sha512-GpRf7yuuAX93+Qt0JGEJZwgtL0MFdjFO9n7dn8s2pA9mTjzl0Sc5+uTk1VPbIAuf7xhCP9Mve+URGb6J+EYxgA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.50.0.tgz", + "integrity": "sha512-3idPJeXn5L0MmgP9jk9JJqblrQ/SguN93dNK9z9gfgyupBhHnJMOEjrRYcVgTIfvG13Y04wO+Q0FxE2Ut8PVbA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.49.2.tgz", - "integrity": "sha512-HZwApmNkp0DiAjZcLYdQLddcG4Agb88OkojiAHGgcm5DVXobT5uSZ9lmyrbw/tmQBJwgu2CNw4zTyXoIB7YbPA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.50.0.tgz", + "integrity": "sha512-q7qRoWrQK1a8m5EFQEmPlo7+pg9mVQ8X5jsChtChERre0uS2pdYEDixBBl0ydBSGkdGbLUDufcACIhH/077E4g==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.49.2.tgz", - "integrity": "sha512-y1IOpG6OSmTpGg/CT0YBb/EAhR2nsC18QWp9Jy8HO9iGySpcwaTvs5kHa17daP3BMTwWyaX9/1tDTDQshZzXdg==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.50.0.tgz", + "integrity": "sha512-Jc360x4yqb3eEg4OY4KEIdGePBxZogivKI+OGIU8aLXgAYPTECvzeOBc90312yHA1hr3AeRlAFl0rIc8lQaIrQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion": { - "version": "1.49.2", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.49.2.tgz", - "integrity": "sha512-YYJRjaZ2bqk923HxE4um7j/Cm3/xoSkF2HC2ZweOF8cXL3sqnlndSUYmCaxHFjNPWLaSHk2IfssX6J/tdKTULw==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.50.0.tgz", + "integrity": "sha512-OS3/Viao+NPpyBbEY3tf6hLewppG+UclD+9i0ju56mq2DrdMJFCkEky6Sk9S5VPcbLzxzg3BqBX6u9Q35w19aQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.49.2", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.49.2.tgz", - "integrity": "sha512-9WgH+Dha39EQQyGKCHlGYnxW/7W19DIrEbCEbnzwAMpGAv1yTWCHMPXHxYa+LcL3eCp2V/5idD1zHNlIKmHRHg==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.50.0.tgz", + "integrity": "sha512-/znwgSiGufpbJVIoDmeQaHtTq+OMdDawFRbMSJVv+12n79hW+qdQXS8/Uu3BD3yn0BzgVFJEvrsHrCsInZKdhw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.49.2.tgz", - "integrity": "sha512-K7Gp5u+JtVYgaVpBxF5rGiM+Ia8SsMdcAJMTDV93rwh00DKNllC19o1g+PwrDjDvyXNrnTEbofzbTs2GLfFyKA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.50.0.tgz", + "integrity": "sha512-dHjUfu4jfjdQiKDpCpAnM7LP5yfG0oNShtfpF5rMCel6/4HIoqJ4DC4h5GKDzgrvJYtgAhblo0AYBmOM00T+lQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/client-common": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.49.2.tgz", - "integrity": "sha512-3UhYCcWX6fbtN8ABcxZlhaQEwXFh3CsFtARyyadQShHMPe3mJV9Wel4FpJTa+seugRkbezFz0tt6aPTZSYTBuA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.50.0.tgz", + "integrity": "sha512-bffIbUljAWnh/Ctu5uScORajuUavqmZ0ACYd1fQQeSSYA9NNN83ynO26pSc2dZRXpSK0fkc1//qSSFXMKGu+aw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2" + "@algolia/client-common": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.49.2.tgz", - "integrity": "sha512-G94VKSGbsr+WjsDDOBe5QDQ82QYgxvpxRGJfCHZBnYKYsy/jv9qGIDb93biza+LJWizQBUtDj7bZzp3QZyzhPQ==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.50.0.tgz", + "integrity": "sha512-y0EwNvPGvkM+yTAqqO6Gpt9wVGm3CLDtpLvNEiB3VGvN3WzfkjZGtLUsG/ru2kVJIIU7QcV0puuYgEpBeFxcJg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2" + "@algolia/client-common": "5.50.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.49.2.tgz", - "integrity": "sha512-UuihBGHafG/ENsrcTGAn5rsOffrCIRuHMOsD85fZGLEY92ate+BMTUqxz60dv5zerh8ZumN4bRm8eW2z9L11jA==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.50.0.tgz", + "integrity": "sha512-xpwefe4fCOWnZgXCbkGpqQY6jgBSCf2hmgnySbyzZIccrv3SoashHKGPE4x6vVG+gdHrGciMTAcDo9HOZwH22Q==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.49.2" + "@algolia/client-common": "5.50.0" }, "engines": { "node": ">= 14.0.0" @@ -741,9 +741,9 @@ } }, "node_modules/@codemirror/language": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.2.tgz", - "integrity": "sha512-jEPmz2nGGDxhRTg3lTpzmIyGKxz3Gp3SJES4b0nAuE5SWQoKdT5GoQ69cwMmFd+wvFUhYirtDTr0/DRHpQAyWg==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.3.tgz", + "integrity": "sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==", "dev": true, "license": "MIT", "dependencies": { @@ -853,6 +853,37 @@ } } }, + "node_modules/@docsearch/js/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@docsearch/js/node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, "node_modules/@docsearch/js/node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -1698,9 +1729,9 @@ } }, "node_modules/@iconify-json/simple-icons": { - "version": "1.2.74", - "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.74.tgz", - "integrity": "sha512-yqaohfY6jnYjTVpuTkaBQHrWbdUrQyWXhau0r/0EZiNWYXPX/P8WWwl1DoLH5CbvDjjcWQw5J0zADhgCUklOqA==", + "version": "1.2.75", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.75.tgz", + "integrity": "sha512-KvcCUbvcBWb0sbqLIxHoY8z5/piXY08wcY9gfMhF+ph3AfzGMaSmZFkUY71HSXAljQngXkgs4bdKdekO0HQWvg==", "dev": true, "license": "CC0-1.0", "dependencies": { @@ -2377,14 +2408,14 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.56.11", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.11.tgz", - "integrity": "sha512-wThHjzUp01ImIjfCwhs+UnFkeGPFAymwLEkOtenHewaKe2pTP12p6r1UuwikA9NEvNf9Vlck92r8fb8n/MWM5w==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", + "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.56.11", - "@jsonjoy.com/fs-node-utils": "4.56.11", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", "thingies": "^2.5.0" }, "engines": { @@ -2399,15 +2430,15 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.56.11", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.11.tgz", - "integrity": "sha512-ZYlF3XbMayyp97xEN8ZvYutU99PCHjM64mMZvnCseXkCJXJDVLAwlF8Q/7q/xiWQRsv3pQBj1WXHd9eEyYcaCQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", + "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.56.11", - "@jsonjoy.com/fs-node-builtins": "4.56.11", - "@jsonjoy.com/fs-node-utils": "4.56.11", + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", "thingies": "^2.5.0" }, "engines": { @@ -2422,17 +2453,17 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.56.11", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.11.tgz", - "integrity": "sha512-D65YrnP6wRuZyEWoSFnBJSr5zARVpVBGctnhie4rCsMuGXNzX7IHKaOt85/Aj7SSoG1N2+/xlNjWmkLvZ2H3Tg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", + "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.56.11", - "@jsonjoy.com/fs-node-builtins": "4.56.11", - "@jsonjoy.com/fs-node-utils": "4.56.11", - "@jsonjoy.com/fs-print": "4.56.11", - "@jsonjoy.com/fs-snapshot": "4.56.11", + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", "glob-to-regex.js": "^1.0.0", "thingies": "^2.5.0" }, @@ -2448,9 +2479,9 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.56.11", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.11.tgz", - "integrity": "sha512-CNmt3a0zMCIhniFLXtzPWuUxXFU+U+2VyQiIrgt/rRVeEJNrMQUABaRbVxR0Ouw1LyR9RjaEkPM6nYpED+y43A==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", + "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2465,15 +2496,15 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.56.11", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.11.tgz", - "integrity": "sha512-5OzGdvJDgZVo+xXWEYo72u81zpOWlxlbG4d4nL+hSiW+LKlua/dldNgPrpWxtvhgyntmdFQad2UTxFyGjJAGhA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", + "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.56.11", - "@jsonjoy.com/fs-node-builtins": "4.56.11", - "@jsonjoy.com/fs-node-utils": "4.56.11" + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1" }, "engines": { "node": ">=10.0" @@ -2487,13 +2518,13 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.56.11", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.11.tgz", - "integrity": "sha512-JADOZFDA3wRfsuxkT0+MYc4F9hJO2PYDaY66kRTG6NqGX3+bqmKu66YFYAbII/tEmQWPZeHoClUB23rtQM9UPg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", + "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.56.11" + "@jsonjoy.com/fs-node-builtins": "4.57.1" }, "engines": { "node": ">=10.0" @@ -2507,13 +2538,13 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.56.11", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.11.tgz", - "integrity": "sha512-rnaKRgCRIn8JGTjxhS0JPE38YM3Pj/H7SW4/tglhIPbfKEkky7dpPayNKV2qy25SZSL15oFVgH/62dMZ/z7cyA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", + "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.56.11", + "@jsonjoy.com/fs-node-utils": "4.57.1", "tree-dump": "^1.1.0" }, "engines": { @@ -2528,14 +2559,14 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.56.11", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.11.tgz", - "integrity": "sha512-IIldPX+cIRQuUol9fQzSS3hqyECxVpYMJQMqdU3dCKZFRzEl1rkIkw4P6y7Oh493sI7YdxZlKr/yWdzEWZ1wGQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", + "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.56.11", + "@jsonjoy.com/fs-node-utils": "4.57.1", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -4432,9 +4463,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", - "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.0.tgz", + "integrity": "sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==", "cpu": [ "arm" ], @@ -4446,9 +4477,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", - "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.0.tgz", + "integrity": "sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==", "cpu": [ "arm64" ], @@ -4460,9 +4491,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", - "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.0.tgz", + "integrity": "sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==", "cpu": [ "arm64" ], @@ -4474,9 +4505,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", - "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.0.tgz", + "integrity": "sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==", "cpu": [ "x64" ], @@ -4488,9 +4519,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", - "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.0.tgz", + "integrity": "sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==", "cpu": [ "arm64" ], @@ -4502,9 +4533,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", - "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.0.tgz", + "integrity": "sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==", "cpu": [ "x64" ], @@ -4516,9 +4547,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", - "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.0.tgz", + "integrity": "sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==", "cpu": [ "arm" ], @@ -4530,9 +4561,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", - "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.0.tgz", + "integrity": "sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==", "cpu": [ "arm" ], @@ -4544,9 +4575,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", - "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.0.tgz", + "integrity": "sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==", "cpu": [ "arm64" ], @@ -4558,9 +4589,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", - "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.0.tgz", + "integrity": "sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==", "cpu": [ "arm64" ], @@ -4572,9 +4603,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", - "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.0.tgz", + "integrity": "sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==", "cpu": [ "loong64" ], @@ -4586,9 +4617,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", - "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.0.tgz", + "integrity": "sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==", "cpu": [ "loong64" ], @@ -4600,9 +4631,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", - "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.0.tgz", + "integrity": "sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==", "cpu": [ "ppc64" ], @@ -4614,9 +4645,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", - "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.0.tgz", + "integrity": "sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==", "cpu": [ "ppc64" ], @@ -4628,9 +4659,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", - "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.0.tgz", + "integrity": "sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==", "cpu": [ "riscv64" ], @@ -4642,9 +4673,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", - "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.0.tgz", + "integrity": "sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==", "cpu": [ "riscv64" ], @@ -4656,9 +4687,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", - "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.0.tgz", + "integrity": "sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==", "cpu": [ "s390x" ], @@ -4670,9 +4701,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", - "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.0.tgz", + "integrity": "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==", "cpu": [ "x64" ], @@ -4684,9 +4715,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", - "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.0.tgz", + "integrity": "sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==", "cpu": [ "x64" ], @@ -4698,9 +4729,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", - "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.0.tgz", + "integrity": "sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==", "cpu": [ "x64" ], @@ -4712,9 +4743,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", - "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.0.tgz", + "integrity": "sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==", "cpu": [ "arm64" ], @@ -4726,9 +4757,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", - "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.0.tgz", + "integrity": "sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==", "cpu": [ "arm64" ], @@ -4740,9 +4771,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", - "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.0.tgz", + "integrity": "sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==", "cpu": [ "ia32" ], @@ -4754,9 +4785,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", - "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.0.tgz", + "integrity": "sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==", "cpu": [ "x64" ], @@ -4768,9 +4799,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", - "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.0.tgz", + "integrity": "sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==", "cpu": [ "x64" ], @@ -5005,9 +5036,9 @@ "license": "MIT" }, "node_modules/@swc/helpers": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.19.tgz", - "integrity": "sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.20.tgz", + "integrity": "sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5579,17 +5610,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.1.tgz", - "integrity": "sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", + "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.57.1", - "@typescript-eslint/type-utils": "8.57.1", - "@typescript-eslint/utils": "8.57.1", - "@typescript-eslint/visitor-keys": "8.57.1", + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/type-utils": "8.57.2", + "@typescript-eslint/utils": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -5602,7 +5633,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.57.1", + "@typescript-eslint/parser": "^8.57.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -5618,17 +5649,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.1.tgz", - "integrity": "sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", + "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.57.1", - "@typescript-eslint/types": "8.57.1", - "@typescript-eslint/typescript-estree": "8.57.1", - "@typescript-eslint/visitor-keys": "8.57.1", + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", "debug": "^4.4.3" }, "engines": { @@ -5644,14 +5675,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.1.tgz", - "integrity": "sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", + "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.57.1", - "@typescript-eslint/types": "^8.57.1", + "@typescript-eslint/tsconfig-utils": "^8.57.2", + "@typescript-eslint/types": "^8.57.2", "debug": "^4.4.3" }, "engines": { @@ -5666,14 +5697,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.1.tgz", - "integrity": "sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", + "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.1", - "@typescript-eslint/visitor-keys": "8.57.1" + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5684,9 +5715,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.1.tgz", - "integrity": "sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", + "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", "dev": true, "license": "MIT", "engines": { @@ -5701,15 +5732,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.1.tgz", - "integrity": "sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", + "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.1", - "@typescript-eslint/typescript-estree": "8.57.1", - "@typescript-eslint/utils": "8.57.1", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/utils": "8.57.2", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -5726,9 +5757,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.1.tgz", - "integrity": "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", + "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", "dev": true, "license": "MIT", "engines": { @@ -5740,16 +5771,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.1.tgz", - "integrity": "sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", + "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.57.1", - "@typescript-eslint/tsconfig-utils": "8.57.1", - "@typescript-eslint/types": "8.57.1", - "@typescript-eslint/visitor-keys": "8.57.1", + "@typescript-eslint/project-service": "8.57.2", + "@typescript-eslint/tsconfig-utils": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/visitor-keys": "8.57.2", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -5768,16 +5799,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.1.tgz", - "integrity": "sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", + "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.57.1", - "@typescript-eslint/types": "8.57.1", - "@typescript-eslint/typescript-estree": "8.57.1" + "@typescript-eslint/scope-manager": "8.57.2", + "@typescript-eslint/types": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5792,13 +5823,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.1.tgz", - "integrity": "sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz", + "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.1", + "@typescript-eslint/types": "8.57.2", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -5936,42 +5967,42 @@ "license": "MIT" }, "node_modules/@vue/compiler-core": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz", - "integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.31.tgz", + "integrity": "sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@vue/shared": "3.5.30", + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.31", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz", - "integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.31.tgz", + "integrity": "sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/compiler-core": "3.5.31", + "@vue/shared": "3.5.31" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz", - "integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.31.tgz", + "integrity": "sha512-M8wpPgR9UJ8MiRGjppvx9uWJfLV7A/T+/rL8s/y3QG3u0c2/YZgff3d6SuimKRIhcYnWg5fTfDMlz2E6seUW8Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@vue/compiler-core": "3.5.30", - "@vue/compiler-dom": "3.5.30", - "@vue/compiler-ssr": "3.5.30", - "@vue/shared": "3.5.30", + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.31", + "@vue/compiler-dom": "3.5.31", + "@vue/compiler-ssr": "3.5.31", + "@vue/shared": "3.5.31", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.8", @@ -5979,14 +6010,14 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz", - "integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.31.tgz", + "integrity": "sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/compiler-dom": "3.5.31", + "@vue/shared": "3.5.31" } }, "node_modules/@vue/devtools-api": { @@ -6098,57 +6129,57 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz", - "integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.31.tgz", + "integrity": "sha512-DtKXxk9E/KuVvt8VxWu+6Luc9I9ETNcqR1T1oW1gf02nXaZ1kuAx58oVu7uX9XxJR0iJCro6fqBLw9oSBELo5g==", "dev": true, "license": "MIT", "dependencies": { - "@vue/shared": "3.5.30" + "@vue/shared": "3.5.31" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz", - "integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.31.tgz", + "integrity": "sha512-AZPmIHXEAyhpkmN7aWlqjSfYynmkWlluDNPHMCZKFHH+lLtxP/30UJmoVhXmbDoP1Ng0jG0fyY2zCj1PnSSA6Q==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/reactivity": "3.5.31", + "@vue/shared": "3.5.31" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz", - "integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.31.tgz", + "integrity": "sha512-xQJsNRmGPeDCJq/u813tyonNgWBFjzfVkBwDREdEWndBnGdHLHgkwNBQxLtg4zDrzKTEcnikUy1UUNecb3lJ6g==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.30", - "@vue/runtime-core": "3.5.30", - "@vue/shared": "3.5.30", + "@vue/reactivity": "3.5.31", + "@vue/runtime-core": "3.5.31", + "@vue/shared": "3.5.31", "csstype": "^3.2.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz", - "integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.31.tgz", + "integrity": "sha512-GJuwRvMcdZX/CriUnyIIOGkx3rMV3H6sOu0JhdKbduaeCji6zb60iOGMY7tFoN24NfsUYoFBhshZtGxGpxO4iA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/compiler-ssr": "3.5.31", + "@vue/shared": "3.5.31" }, "peerDependencies": { - "vue": "3.5.30" + "vue": "3.5.31" } }, "node_modules/@vue/shared": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz", - "integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.31.tgz", + "integrity": "sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw==", "dev": true, "license": "MIT" }, @@ -6280,9 +6311,9 @@ "license": "BSD-2-Clause" }, "node_modules/@zenuml/core": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/@zenuml/core/-/core-3.46.0.tgz", - "integrity": "sha512-bjG37doCwXer4DhlBh1d7bHUuJbqAK/1I+kHyL7Evy0eWZnBOTEOfp6LodB5cokw3w2IMxzYuj7qyRzwjqoeiA==", + "version": "3.46.1", + "resolved": "https://registry.npmjs.org/@zenuml/core/-/core-3.46.1.tgz", + "integrity": "sha512-H+f9373BnjD0Lq4qweWEvCnOcY4m7NFycuh7Vp2GVvETZJ6gRiX+z4R7p+f0HvEuLxKKaZfGaX391YJKJVAtBw==", "dev": true, "license": "MIT", "dependencies": { @@ -6302,8 +6333,6 @@ "marked": "^4.3.0", "pako": "^2.1.0", "pino": "^8.21.0", - "radash": "^12.1.1", - "ramda": "^0.28.0", "react": "^19.2.3", "react-dom": "^19.2.3", "tailwind-merge": "^3.4.0", @@ -6413,27 +6442,27 @@ } }, "node_modules/algoliasearch": { - "version": "5.49.2", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.49.2.tgz", - "integrity": "sha512-1K0wtDaRONwfhL4h8bbJ9qTjmY6rhGgRvvagXkMBsAOMNr+3Q2SffHECh9DIuNVrMA1JwA0zCwhyepgBZVakng==", + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.50.0.tgz", + "integrity": "sha512-yE5I83Q2s8euVou8Y3feXK08wyZInJWLYXgWO6Xti9jBUEZAGUahyeQ7wSZWkifLWVnQVKEz5RAmBlXG5nqxog==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@algolia/abtesting": "1.15.2", - "@algolia/client-abtesting": "5.49.2", - "@algolia/client-analytics": "5.49.2", - "@algolia/client-common": "5.49.2", - "@algolia/client-insights": "5.49.2", - "@algolia/client-personalization": "5.49.2", - "@algolia/client-query-suggestions": "5.49.2", - "@algolia/client-search": "5.49.2", - "@algolia/ingestion": "1.49.2", - "@algolia/monitoring": "1.49.2", - "@algolia/recommend": "5.49.2", - "@algolia/requester-browser-xhr": "5.49.2", - "@algolia/requester-fetch": "5.49.2", - "@algolia/requester-node-http": "5.49.2" + "@algolia/abtesting": "1.16.0", + "@algolia/client-abtesting": "5.50.0", + "@algolia/client-analytics": "5.50.0", + "@algolia/client-common": "5.50.0", + "@algolia/client-insights": "5.50.0", + "@algolia/client-personalization": "5.50.0", + "@algolia/client-query-suggestions": "5.50.0", + "@algolia/client-search": "5.50.0", + "@algolia/ingestion": "1.50.0", + "@algolia/monitoring": "1.50.0", + "@algolia/recommend": "5.50.0", + "@algolia/requester-browser-xhr": "5.50.0", + "@algolia/requester-fetch": "5.50.0", + "@algolia/requester-node-http": "5.50.0" }, "engines": { "node": ">= 14.0.0" @@ -6520,9 +6549,9 @@ } }, "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -6716,9 +6745,9 @@ } }, "node_modules/bare-stream": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.10.0.tgz", - "integrity": "sha512-DOPZF/DDcDruKDA43cOw6e9Quq5daua7ygcAwJE/pKJsRWhgSSemi7qVNGE5kyDIxIeN1533G/zfbvWX7Wcb9w==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.11.0.tgz", + "integrity": "sha512-Y/+iQ49fL3rIn6w/AVxI/2+BRrpmzJvdWt5Jv8Za6Ngqc6V227c+pYjYYgLdpR3MwQ9ObVXD0ZrqoBztakM0rw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6726,10 +6755,14 @@ "teex": "^1.0.1" }, "peerDependencies": { + "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, "bare-buffer": { "optional": true }, @@ -6770,9 +6803,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.9", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.9.tgz", - "integrity": "sha512-OZd0e2mU11ClX8+IdXe3r0dbqMEznRiT4TfbhYIbcRPZkqJ7Qwer8ij3GZAmLsRKa+II9V1v5czCkvmHH3XZBg==", + "version": "2.10.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.11.tgz", + "integrity": "sha512-DAKrHphkJyiGuau/cFieRYhcTFeK/lBuD++C7cZ6KZHbMhBrisoi+EvhQ5RZrIfV5qwsW8kgQ07JIC+MDJRAhg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -6916,9 +6949,9 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7250,9 +7283,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001780", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001780.tgz", - "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==", + "version": "1.0.30001781", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", + "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", "dev": true, "funding": [ { @@ -8757,9 +8790,9 @@ } }, "node_modules/delaunator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", - "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", + "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==", "dev": true, "license": "ISC", "dependencies": { @@ -8875,9 +8908,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.321", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.321.tgz", - "integrity": "sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==", + "version": "1.5.325", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.325.tgz", + "integrity": "sha512-PwfIw7WQSt3xX7yOf5OE/unLzsK9CaN2f/FvV3WjPR1Knoc1T9vePRVV4W1EM301JzzysK51K7FNKcusCr0zYA==", "dev": true, "license": "ISC" }, @@ -11203,9 +11236,9 @@ } }, "node_modules/jotai": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.18.1.tgz", - "integrity": "sha512-e0NOzK+yRFwHo7DOp0DS0Ycq74KMEAObDWFGmfEL28PD9nLqBTt3/Ug7jf9ca72x0gC9LQZG9zH+0ISICmy3iA==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.19.0.tgz", + "integrity": "sha512-r2wwxEXP1F2JteDLZEOPoIpAHhV89paKsN5GWVYndPNMMP/uVZDcC+fNj0A8NjKgaPWzdyO8Vp8YcYKe0uCEqQ==", "dev": true, "license": "MIT", "engines": { @@ -11378,9 +11411,9 @@ "license": "MIT" }, "node_modules/katex": { - "version": "0.16.39", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.39.tgz", - "integrity": "sha512-FR2f6y85+81ZLO0GPhyQ+EJl/E5ILNWltJhpAeOTzRny952Z13x2867lTFDmvMZix//Ux3CuMQ2VkLXRbUwOFg==", + "version": "0.16.43", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.43.tgz", + "integrity": "sha512-K7NL5JtGrFEglipOAjY4UYA69CnTuNmjArxeXF6+bw7h2OGySUPv6QWRjfb1gmutJ4Mw/qLeBqiROOEDULp4nA==", "dev": true, "funding": [ "https://opencollective.com/katex", @@ -12222,20 +12255,20 @@ "license": "MIT" }, "node_modules/memfs": { - "version": "4.56.11", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.11.tgz", - "integrity": "sha512-/GodtwVeKVIHZKLUSr2ZdOxKBC5hHki4JNCU22DoCGPEHr5o2PD5U721zvESKyWwCfTfavFl9WZYgA13OAYK0g==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.1.tgz", + "integrity": "sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.56.11", - "@jsonjoy.com/fs-fsa": "4.56.11", - "@jsonjoy.com/fs-node": "4.56.11", - "@jsonjoy.com/fs-node-builtins": "4.56.11", - "@jsonjoy.com/fs-node-to-fsa": "4.56.11", - "@jsonjoy.com/fs-node-utils": "4.56.11", - "@jsonjoy.com/fs-print": "4.56.11", - "@jsonjoy.com/fs-snapshot": "4.56.11", + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-to-fsa": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -12796,9 +12829,9 @@ } }, "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -14125,9 +14158,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { @@ -14820,27 +14853,6 @@ "dev": true, "license": "MIT" }, - "node_modules/radash": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/radash/-/radash-12.1.1.tgz", - "integrity": "sha512-h36JMxKRqrAxVD8201FrCpyeNuUY9Y5zZwujr20fFO77tpUtGa6EZzfKw/3WaiBX95fq7+MpsuMLNdSnORAwSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/ramda": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", - "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -14931,9 +14943,9 @@ } }, "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -15265,16 +15277,16 @@ } }, "node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", + "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==", "dev": true, "license": "Unlicense" }, "node_modules/rollup": { - "version": "4.59.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", - "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "version": "4.60.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.0.tgz", + "integrity": "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==", "dev": true, "license": "MIT", "peer": true, @@ -15289,31 +15301,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.59.0", - "@rollup/rollup-android-arm64": "4.59.0", - "@rollup/rollup-darwin-arm64": "4.59.0", - "@rollup/rollup-darwin-x64": "4.59.0", - "@rollup/rollup-freebsd-arm64": "4.59.0", - "@rollup/rollup-freebsd-x64": "4.59.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", - "@rollup/rollup-linux-arm-musleabihf": "4.59.0", - "@rollup/rollup-linux-arm64-gnu": "4.59.0", - "@rollup/rollup-linux-arm64-musl": "4.59.0", - "@rollup/rollup-linux-loong64-gnu": "4.59.0", - "@rollup/rollup-linux-loong64-musl": "4.59.0", - "@rollup/rollup-linux-ppc64-gnu": "4.59.0", - "@rollup/rollup-linux-ppc64-musl": "4.59.0", - "@rollup/rollup-linux-riscv64-gnu": "4.59.0", - "@rollup/rollup-linux-riscv64-musl": "4.59.0", - "@rollup/rollup-linux-s390x-gnu": "4.59.0", - "@rollup/rollup-linux-x64-gnu": "4.59.0", - "@rollup/rollup-linux-x64-musl": "4.59.0", - "@rollup/rollup-openbsd-x64": "4.59.0", - "@rollup/rollup-openharmony-arm64": "4.59.0", - "@rollup/rollup-win32-arm64-msvc": "4.59.0", - "@rollup/rollup-win32-ia32-msvc": "4.59.0", - "@rollup/rollup-win32-x64-gnu": "4.59.0", - "@rollup/rollup-win32-x64-msvc": "4.59.0", + "@rollup/rollup-android-arm-eabi": "4.60.0", + "@rollup/rollup-android-arm64": "4.60.0", + "@rollup/rollup-darwin-arm64": "4.60.0", + "@rollup/rollup-darwin-x64": "4.60.0", + "@rollup/rollup-freebsd-arm64": "4.60.0", + "@rollup/rollup-freebsd-x64": "4.60.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.0", + "@rollup/rollup-linux-arm-musleabihf": "4.60.0", + "@rollup/rollup-linux-arm64-gnu": "4.60.0", + "@rollup/rollup-linux-arm64-musl": "4.60.0", + "@rollup/rollup-linux-loong64-gnu": "4.60.0", + "@rollup/rollup-linux-loong64-musl": "4.60.0", + "@rollup/rollup-linux-ppc64-gnu": "4.60.0", + "@rollup/rollup-linux-ppc64-musl": "4.60.0", + "@rollup/rollup-linux-riscv64-gnu": "4.60.0", + "@rollup/rollup-linux-riscv64-musl": "4.60.0", + "@rollup/rollup-linux-s390x-gnu": "4.60.0", + "@rollup/rollup-linux-x64-gnu": "4.60.0", + "@rollup/rollup-linux-x64-musl": "4.60.0", + "@rollup/rollup-openbsd-x64": "4.60.0", + "@rollup/rollup-openharmony-arm64": "4.60.0", + "@rollup/rollup-win32-arm64-msvc": "4.60.0", + "@rollup/rollup-win32-ia32-msvc": "4.60.0", + "@rollup/rollup-win32-x64-gnu": "4.60.0", + "@rollup/rollup-win32-x64-msvc": "4.60.0", "fsevents": "~2.3.2" } }, @@ -16295,9 +16307,9 @@ } }, "node_modules/tar": { - "version": "7.5.12", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.12.tgz", - "integrity": "sha512-9TsuLcdhOn4XztcQqhNyq1KOwOOED/3k58JAvtULiYqbO8B/0IBAAIE1hj0Svmm58k27TmcigyDI0deMlgG3uw==", + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz", + "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -16479,9 +16491,9 @@ } }, "node_modules/thingies": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", - "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", "dev": true, "license": "MIT", "engines": { @@ -16790,16 +16802,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.1.tgz", - "integrity": "sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==", + "version": "8.57.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.2.tgz", + "integrity": "sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.57.1", - "@typescript-eslint/parser": "8.57.1", - "@typescript-eslint/typescript-estree": "8.57.1", - "@typescript-eslint/utils": "8.57.1" + "@typescript-eslint/eslint-plugin": "8.57.2", + "@typescript-eslint/parser": "8.57.2", + "@typescript-eslint/typescript-estree": "8.57.2", + "@typescript-eslint/utils": "8.57.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -17556,18 +17568,18 @@ "license": "MIT" }, "node_modules/vue": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz", - "integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==", + "version": "3.5.31", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.31.tgz", + "integrity": "sha512-iV/sU9SzOlmA/0tygSmjkEN6Jbs3nPoIPFhCMLD2STrjgOU8DX7ZtzMhg4ahVwf5Rp9KoFzcXeB1ZrVbLBp5/Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.5.30", - "@vue/compiler-sfc": "3.5.30", - "@vue/runtime-dom": "3.5.30", - "@vue/server-renderer": "3.5.30", - "@vue/shared": "3.5.30" + "@vue/compiler-dom": "3.5.31", + "@vue/compiler-sfc": "3.5.31", + "@vue/runtime-dom": "3.5.31", + "@vue/server-renderer": "3.5.31", + "@vue/shared": "3.5.31" }, "peerDependencies": { "typescript": "*" @@ -17989,9 +18001,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "dev": true, "license": "MIT", "engines": { @@ -18038,9 +18050,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", "dev": true, "license": "ISC", "peer": true, diff --git a/rust/Cargo.lock b/rust/Cargo.lock index bb89ed19d..f9720bbe2 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -207,9 +207,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cmake" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" dependencies = [ "cc", ] @@ -1746,9 +1746,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-width" From 119abdba9b50c1243623bb66d3af2a1e46ca990f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Mar 2026 06:43:28 +0000 Subject: [PATCH 06/15] chore(deps): lock file maintenance (#6324) * chore(deps): lock file maintenance * Resolve audit --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lukas Taegert-Atkinson --- audit-resolve.json | 10 +++++++ package-lock.json | 67 +++++++++++++--------------------------------- 2 files changed, 28 insertions(+), 49 deletions(-) diff --git a/audit-resolve.json b/audit-resolve.json index 105ba1a9e..389a2af7b 100644 --- a/audit-resolve.json +++ b/audit-resolve.json @@ -14,6 +14,16 @@ "decision": "ignore", "madeAt": 1772778003517, "expiresAt": 1775369996393 + }, + "1115519|@rollup/plugin-terser>serialize-javascript": { + "decision": "ignore", + "madeAt": 1774678997033, + "expiresAt": 1777270978460 + }, + "1115519|mocha>diff>serialize-javascript": { + "decision": "ignore", + "madeAt": 1774678997033, + "expiresAt": 1777270978460 } }, "rules": {}, diff --git a/package-lock.json b/package-lock.json index 4d1e77e46..dd98d1a2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -853,37 +853,6 @@ } } }, - "node_modules/@docsearch/js/node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@docsearch/js/node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, "node_modules/@docsearch/js/node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -6869,9 +6838,9 @@ "license": "MIT" }, "node_modules/binary-install/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8908,9 +8877,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.325", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.325.tgz", - "integrity": "sha512-PwfIw7WQSt3xX7yOf5OE/unLzsK9CaN2f/FvV3WjPR1Knoc1T9vePRVV4W1EM301JzzysK51K7FNKcusCr0zYA==", + "version": "1.5.326", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.326.tgz", + "integrity": "sha512-uRBlUfKKdsXMkiiOurgaybNC10tjrD+skXLEg7NHbm6h0uAoqj3xMb9uue5BfcSCXJ4mcyJMOucI6q55D7p6KQ==", "dev": true, "license": "ISC" }, @@ -10310,9 +10279,9 @@ "license": "MIT" }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { @@ -11979,9 +11948,9 @@ "license": "MIT" }, "node_modules/matcher-collection/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -12998,9 +12967,9 @@ "license": "MIT" }, "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { @@ -17694,9 +17663,9 @@ "license": "MIT" }, "node_modules/walk-sync/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { From b25d25e8e6f3127d40d7b1b93dac4b9941907324 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Mar 2026 07:44:26 +0000 Subject: [PATCH 07/15] fix(deps): update swc monorepo (major) (#6322) fix(deps): update swc monorepo Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lukas Taegert-Atkinson --- rust/Cargo.lock | 24 ++++++++++++------------ rust/parse_ast/Cargo.toml | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index f9720bbe2..1eb6b3814 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1314,9 +1314,9 @@ dependencies = [ [[package]] name = "swc_compiler_base" -version = "49.0.0" +version = "50.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9840f1fb3e2c98f55a4b4f7485d062b374d929d94c02dfb5002b9325768678a9" +checksum = "95042dca4a6b644e62ec4f672b0221294539fd5787b0bf2b609af9d920b13a70" dependencies = [ "anyhow", "base64", @@ -1439,9 +1439,9 @@ dependencies = [ [[package]] name = "swc_ecma_minifier" -version = "46.0.0" +version = "47.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3975f1c2347ec502c975e4df17dff27f5ba70281e02a314448055ad689979e2a" +checksum = "11869fd5fb37f67be9586cef43ad6d408170957537847e652f2b1d17cc01f19a" dependencies = [ "arrayvec", "bitflags", @@ -1476,9 +1476,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "35.0.0" +version = "36.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943b8743c57783b35b6c173b0a8ef539a6c1d06ee5d1588b2821992c3fd35f39" +checksum = "0c4c7846e4c9ee7bb52e1958b5fe7a924088451cf699e01e7203d6f5210b055e" dependencies = [ "bitflags", "either", @@ -1497,9 +1497,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "38.0.0" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a6bfa9bb82de047afae2eadef24e7ac4e4578fe11c977d8f61423131bdef9e4" +checksum = "5d4fb6ec9ec1d782104996b86119fb775c08073ce4ace8e90b3c27b75b1c0812" dependencies = [ "better_scoped_tls", "indexmap", @@ -1519,9 +1519,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "40.0.0" +version = "41.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f43dc268f8164b5363c44a0fe9408808155f1506684e25f32685f77fe9df4b6" +checksum = "f9882dc5dcf2d9c4bdd1bad7a34a2db8e7d34fdf81b7c144ef83f167b93432d5" dependencies = [ "bytes-str", "dashmap", @@ -1543,9 +1543,9 @@ dependencies = [ [[package]] name = "swc_ecma_usage_analyzer" -version = "29.0.0" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26a2082f0ab640cb8fa48c7b5708000c188178a891c9cb970ad714e40350825" +checksum = "14fb67600772fe41d9d02d96a202f95153ee817ab37942535f06426182674df6" dependencies = [ "bitflags", "indexmap", diff --git a/rust/parse_ast/Cargo.toml b/rust/parse_ast/Cargo.toml index 7cab81d30..c620bea9d 100644 --- a/rust/parse_ast/Cargo.toml +++ b/rust/parse_ast/Cargo.toml @@ -7,9 +7,9 @@ edition = "2021" [dependencies] anyhow = "1.0.102" -swc_compiler_base = "49.0.0" +swc_compiler_base = "50.0.0" swc_config = "4.0.0" swc_common = { version = "19.0.0", features = ["parking_lot"] } swc_ecma_ast = "21.0.0" -swc_ecma_parser = "35.0.0" +swc_ecma_parser = "36.0.0" parking_lot = "0.12.5" From c336205e2b926dfb134d80c740198cf2ea43159f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Mar 2026 07:53:58 +0000 Subject: [PATCH 08/15] chore(deps): update openharmony-rs/setup-ohos-sdk action to v1 (#6321) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lukas Taegert-Atkinson --- .github/workflows/build-and-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-tests.yml b/.github/workflows/build-and-tests.yml index 8ad41f497..9a6fdfb7e 100644 --- a/.github/workflows/build-and-tests.yml +++ b/.github/workflows/build-and-tests.yml @@ -236,7 +236,7 @@ jobs: targets: ${{ !matrix.settings.build-std && matrix.settings.target || '' }} - name: Setup OpenHarmony SDK if: ${{ contains(matrix.settings.target, 'ohos') }} - uses: openharmony-rs/setup-ohos-sdk@3c181b3244cec76aaec289ab84fb00f55f2fce3f # v0.2.4 + uses: openharmony-rs/setup-ohos-sdk@eb82b94ef522b07269679195c2512f22e922ef3b # v1.0.0 - name: Restore Cargo cache uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 if: matrix.settings.cache-cargo != false From 65e82a98065543b16a17fb3ea23594d7dbdb5108 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Mar 2026 07:58:07 +0000 Subject: [PATCH 09/15] chore(deps): update msys2/setup-msys2 digest to cafece8 (#6318) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lukas Taegert-Atkinson --- .github/workflows/build-and-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-tests.yml b/.github/workflows/build-and-tests.yml index 9a6fdfb7e..7d752890c 100644 --- a/.github/workflows/build-and-tests.yml +++ b/.github/workflows/build-and-tests.yml @@ -215,7 +215,7 @@ jobs: if: ${{ matrix.settings.target != 'x86_64-pc-windows-gnu' }} with: node-version: 24.10.0 - - uses: msys2/setup-msys2@4f806de0a5a7294ffabaff804b38a9b435a73bda # v2 + - uses: msys2/setup-msys2@cafece8e6baf9247cf9b1bf95097b0b983cc558d # v2 if: ${{ matrix.settings.target == 'x86_64-pc-windows-gnu' }} with: msystem: ${{ matrix.settings.msystem }} From 42785ffa0be3add9d2b5b355adcd4a41d850fe9d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Mar 2026 08:00:10 +0000 Subject: [PATCH 10/15] chore(deps): update minor/patch updates (#6319) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lukas Taegert-Atkinson --- .../actions/install-and-cache-node-deps/action.yml | 4 ++-- .github/workflows/build-and-tests.yml | 12 ++++++------ .github/workflows/performance-report.yml | 4 ++-- .github/workflows/repl-artefacts.yml | 2 +- package-lock.json | 12 ++++++------ package.json | 12 ++++++------ 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/actions/install-and-cache-node-deps/action.yml b/.github/actions/install-and-cache-node-deps/action.yml index 90cdcb948..d178b7507 100644 --- a/.github/actions/install-and-cache-node-deps/action.yml +++ b/.github/actions/install-and-cache-node-deps/action.yml @@ -5,7 +5,7 @@ runs: steps: - name: Restore Node dependencies cache id: cache-node-modules - uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: | node_modules @@ -24,7 +24,7 @@ runs: shell: bash - name: Save Node dependencies cache if: steps.cache-node-modules.outputs.cache-hit != 'true' && github.ref == 'refs/heads/master' - uses: actions/cache/save@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: | node_modules diff --git a/.github/workflows/build-and-tests.yml b/.github/workflows/build-and-tests.yml index 7d752890c..d36a5f676 100644 --- a/.github/workflows/build-and-tests.yml +++ b/.github/workflows/build-and-tests.yml @@ -238,7 +238,7 @@ jobs: if: ${{ contains(matrix.settings.target, 'ohos') }} uses: openharmony-rs/setup-ohos-sdk@eb82b94ef522b07269679195c2512f22e922ef3b # v1.0.0 - name: Restore Cargo cache - uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 if: matrix.settings.cache-cargo != false with: path: | @@ -254,7 +254,7 @@ jobs: with: version: 0.14.1 - name: Install cargo-zigbuild - uses: taiki-e/install-action@de6bbd1333b8f331563d54a051e542c7dfef81c3 # v2.68.34 + uses: taiki-e/install-action@328a871ad8f62ecac78390391f463ccabc974b72 # v2.69.9 if: ${{ matrix.settings.cross == 'zig' }} env: GITHUB_TOKEN: ${{ github.token }} @@ -286,7 +286,7 @@ jobs: shell: bash - name: Save Cargo cache if: github.ref == 'refs/heads/master' && matrix.settings.cache-cargo != false - uses: actions/cache/save@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: | ~/.cargo/registry/index/ @@ -325,7 +325,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Restore Cargo cache - uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: | ~/.cargo/registry/index/ @@ -352,7 +352,7 @@ jobs: - name: Save Cargo cache if: github.ref == 'refs/heads/master' - uses: actions/cache/save@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: | ~/.cargo/registry/index/ @@ -536,7 +536,7 @@ jobs: env: CI: true - name: Upload coverage - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2 + uses: codecov/codecov-action@1af58845a975a7985b0beb0cbe6fbbb71a41dbad # v5.5.3 if: matrix.coverage with: fail_ci_if_error: true diff --git a/.github/workflows/performance-report.yml b/.github/workflows/performance-report.yml index 279460a2b..fe6fc174f 100644 --- a/.github/workflows/performance-report.yml +++ b/.github/workflows/performance-report.yml @@ -40,7 +40,7 @@ jobs: toolchain: nightly-2025-07-25 components: rust-src - name: Restore Cargo cache - uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: | ~/.cargo/registry/index/ @@ -82,7 +82,7 @@ jobs: toolchain: nightly-2025-07-25 components: rust-src - name: Restore Cargo cache - uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: | ~/.cargo/registry/index/ diff --git a/.github/workflows/repl-artefacts.yml b/.github/workflows/repl-artefacts.yml index aac5db1a6..820ccd413 100644 --- a/.github/workflows/repl-artefacts.yml +++ b/.github/workflows/repl-artefacts.yml @@ -40,7 +40,7 @@ jobs: toolchain: nightly-2025-07-25 components: rust-src - name: Restore Cargo cache - uses: actions/cache/restore@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: | ~/.cargo/registry/index/ diff --git a/package-lock.json b/package-lock.json index dd98d1a2c..58bd450b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,7 @@ "@types/picomatch": "^4.0.2", "@types/semver": "^7.7.1", "@types/yargs-parser": "^21.0.3", - "@vue/language-server": "^3.2.5", + "@vue/language-server": "^3.2.6", "acorn": "^8.16.0", "acorn-import-assertions": "^1.9.0", "acorn-import-phases": "^1.0.4", @@ -70,21 +70,21 @@ "lint-staged": "^16.4.0", "locate-character": "^3.0.0", "magic-string": "^0.30.21", - "memfs": "^4.56.11", + "memfs": "^4.57.1", "mocha": "11.7.5", "nodemon": "^3.1.14", "npm-audit-resolver": "^3.0.0-RC.0", "nyc": "^18.0.0", "patch-package": "^8.0.1", "picocolors": "^1.1.1", - "picomatch": "^4.0.3", + "picomatch": "^4.0.4", "pinia": "^3.0.4", "prettier": "^3.8.1", "prettier-plugin-organize-imports": "^4.3.0", "pretty-bytes": "^7.1.0", "pretty-ms": "^9.3.0", "requirejs": "^2.3.8", - "rollup": "^4.59.0", + "rollup": "^4.60.0", "rollup-plugin-license": "^3.7.0", "semver": "^7.7.4", "shx": "^0.4.0", @@ -95,12 +95,12 @@ "terser": "^5.46.1", "tslib": "^2.8.1", "typescript": "^5.9.3", - "typescript-eslint": "^8.57.1", + "typescript-eslint": "^8.57.2", "vite": "^7.3.1", "vitepress": "^1.6.4", "vue": "^3.5.30", "vue-eslint-parser": "^10.4.0", - "vue-tsc": "^3.2.5", + "vue-tsc": "^3.2.6", "wasm-pack": "^0.14.0", "yargs-parser": "^21.1.1" }, diff --git a/package.json b/package.json index b601e9cc3..b3ba37c10 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "@types/picomatch": "^4.0.2", "@types/semver": "^7.7.1", "@types/yargs-parser": "^21.0.3", - "@vue/language-server": "^3.2.5", + "@vue/language-server": "^3.2.6", "acorn": "^8.16.0", "acorn-import-assertions": "^1.9.0", "acorn-import-phases": "^1.0.4", @@ -177,21 +177,21 @@ "lint-staged": "^16.4.0", "locate-character": "^3.0.0", "magic-string": "^0.30.21", - "memfs": "^4.56.11", + "memfs": "^4.57.1", "mocha": "11.7.5", "nodemon": "^3.1.14", "npm-audit-resolver": "^3.0.0-RC.0", "nyc": "^18.0.0", "patch-package": "^8.0.1", "picocolors": "^1.1.1", - "picomatch": "^4.0.3", + "picomatch": "^4.0.4", "pinia": "^3.0.4", "prettier": "^3.8.1", "prettier-plugin-organize-imports": "^4.3.0", "pretty-bytes": "^7.1.0", "pretty-ms": "^9.3.0", "requirejs": "^2.3.8", - "rollup": "^4.59.0", + "rollup": "^4.60.0", "rollup-plugin-license": "^3.7.0", "semver": "^7.7.4", "shx": "^0.4.0", @@ -202,12 +202,12 @@ "terser": "^5.46.1", "tslib": "^2.8.1", "typescript": "^5.9.3", - "typescript-eslint": "^8.57.1", + "typescript-eslint": "^8.57.2", "vite": "^7.3.1", "vitepress": "^1.6.4", "vue": "^3.5.30", "vue-eslint-parser": "^10.4.0", - "vue-tsc": "^3.2.5", + "vue-tsc": "^3.2.6", "wasm-pack": "^0.14.0", "yargs-parser": "^21.1.1" }, From fe50d862804c1f157f0ae378a3c555b8b3ef6ce7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Mar 2026 08:52:24 +0000 Subject: [PATCH 11/15] chore(deps): pin dependencies (#6317) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lukas Taegert-Atkinson --- .github/workflows/build-and-tests.yml | 2 +- .github/workflows/performance-report.yml | 4 ++-- .github/workflows/repl-artefacts.yml | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-and-tests.yml b/.github/workflows/build-and-tests.yml index d36a5f676..1d4d2401e 100644 --- a/.github/workflows/build-and-tests.yml +++ b/.github/workflows/build-and-tests.yml @@ -229,7 +229,7 @@ jobs: path-type: inherit release: false - name: Install Toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable with: toolchain: nightly-2025-07-25 components: ${{ matrix.settings.build-std && 'rust-src' || '' }} diff --git a/.github/workflows/performance-report.yml b/.github/workflows/performance-report.yml index fe6fc174f..36b3dd47b 100644 --- a/.github/workflows/performance-report.yml +++ b/.github/workflows/performance-report.yml @@ -35,7 +35,7 @@ jobs: with: ref: ${{matrix.settings.ref}} - name: Install Toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable with: toolchain: nightly-2025-07-25 components: rust-src @@ -77,7 +77,7 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - name: Install Toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable with: toolchain: nightly-2025-07-25 components: rust-src diff --git a/.github/workflows/repl-artefacts.yml b/.github/workflows/repl-artefacts.yml index 820ccd413..b20de9055 100644 --- a/.github/workflows/repl-artefacts.yml +++ b/.github/workflows/repl-artefacts.yml @@ -35,7 +35,7 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Install Toolchain - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable with: toolchain: nightly-2025-07-25 components: rust-src @@ -61,7 +61,7 @@ jobs: npm exec -- concurrently -c green,blue,yellow 'npm:build:napi -- --release' 'npm run build:wasm' 'npm:build:cjs' && npm run build:copy-native && npm run build:bootstrap - name: Upload "${{ github.event.number }}/rollup.browser.js" to bucket - uses: zdurham/s3-upload-github-action@master + uses: zdurham/s3-upload-github-action@161dfa6991b9d88a97f02f4aeb5dcd26ea7e03cd # master with: args: --cache-control max-age=300,public env: @@ -72,7 +72,7 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: Upload "${{ github.event.number }}/rollup.browser.js.map" to bucket - uses: zdurham/s3-upload-github-action@master + uses: zdurham/s3-upload-github-action@161dfa6991b9d88a97f02f4aeb5dcd26ea7e03cd # master with: args: --cache-control max-age=300,public env: @@ -83,7 +83,7 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name: Upload "${{ github.event.number }}/bindings_wasm_bg.wasm" to bucket - uses: zdurham/s3-upload-github-action@master + uses: zdurham/s3-upload-github-action@161dfa6991b9d88a97f02f4aeb5dcd26ea7e03cd # master with: args: --cache-control max-age=300,public env: From ca5540692dee41c3ce2ed3ed280e0f3e7c228115 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 29 Mar 2026 05:53:54 +0000 Subject: [PATCH 12/15] chore(deps): pin dependency typescript to v5 (#6320) * chore(deps): update dependency typescript to v6 * Prevent TypeScript updates until all dependencies support it --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Lukas Taegert-Atkinson --- renovate.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/renovate.json b/renovate.json index c4eedd211..0555f7ed0 100644 --- a/renovate.json +++ b/renovate.json @@ -35,11 +35,12 @@ }, { "matchPackageNames": [ - "@types/node", - "yargs-parser", "@inquirer/prompts", "@rollup/plugin-terser", - "vite" + "@types/node", + "typescript", + "vite", + "yargs-parser", ], "matchUpdateTypes": [ "major" From 51f8f602fac0edfcf9b01fbff2a7f80e395d68bf Mon Sep 17 00:00:00 2001 From: littlegrayss <30349510+littlegrayss@users.noreply.github.com> Date: Sun, 29 Mar 2026 18:16:12 +0800 Subject: [PATCH 13/15] fix: skip dropping side-effects on namespaceReexportsByName cache hit (#6274) (#6286) * fix: skip dropping side-effects on namespaceReexportsByName cache hit (#6274) When multiple entries reference the same variable via a namespace re-export, the `namespaceReexportsByName` cache was returning early. This prevented `getVariableFromNamespaceReexports` from capturing the side-effect dependencies for the subsequent importers, leading to dropped side effects (such as CSS imports). This fix explicitly re-invokes `getVariableFromNamespaceReexports` when the cache is hit and an `importerForSideEffects` is provided, utilizing its traversal to correctly link side effects to the new importer, while ignoring the return value. Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude Co-Authored-By: Happy * refactor: cache side-effect metadata to avoid re-traversal on namespaceReexportsByName cache hit Replace the re-traversal approach with a parallel `namespaceSideEffectsByName` cache that stores the collected side-effect modules and cyclic reexporters on first resolution. Cache hits now replay the stored metadata for each importer directly, avoiding redundant graph traversal while preserving correct side-effect tracking across multiple importers. Update the test to cover the multi-entry scenario where two entries resolve the same export through the namespace reexport cache. * Simplify implementation and add missing tests --------- Co-authored-by: Claude Co-authored-by: Happy Co-authored-by: TrickyPi <530257315@qq.com> --- src/Module.ts | 93 ++++++++++++++++--- .../_config.js | 13 +++ .../_expected/amd/entry1.js | 5 + .../_expected/amd/entry2.js | 5 + .../_expected/amd/generated-effect.js | 9 ++ .../_expected/cjs/entry1.js | 5 + .../_expected/cjs/entry2.js | 5 + .../_expected/cjs/generated-effect.js | 7 ++ .../_expected/es/entry1.js | 3 + .../_expected/es/entry2.js | 3 + .../_expected/es/generated-effect.js | 5 + .../_expected/system/entry1.js | 14 +++ .../_expected/system/entry2.js | 14 +++ .../_expected/system/generated-effect.js | 12 +++ .../entry1.js | 2 + .../entry2.js | 2 + .../lib/effect.js | 1 + .../lib/foo.js | 2 + .../lib/fooImpl.js | 1 + .../lib/index.js | 1 + .../_config.js | 46 +++++++++ .../entry1.js | 4 + .../entry2.js | 4 + .../lib/effect.js | 1 + .../lib/foo.js | 2 + .../lib/fooImpl.js | 5 + .../lib/index.js | 1 + .../circular-namespace-reexport-cache/main.js | 4 + 28 files changed, 256 insertions(+), 13 deletions(-) create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_config.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/entry1.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/entry2.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/generated-effect.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/entry1.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/entry2.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/generated-effect.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/entry1.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/entry2.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/generated-effect.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/entry1.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/entry2.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/generated-effect.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/entry1.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/entry2.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/effect.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/foo.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/fooImpl.js create mode 100644 test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/index.js create mode 100644 test/function/samples/circular-namespace-reexport-cache/_config.js create mode 100644 test/function/samples/circular-namespace-reexport-cache/entry1.js create mode 100644 test/function/samples/circular-namespace-reexport-cache/entry2.js create mode 100644 test/function/samples/circular-namespace-reexport-cache/lib/effect.js create mode 100644 test/function/samples/circular-namespace-reexport-cache/lib/foo.js create mode 100644 test/function/samples/circular-namespace-reexport-cache/lib/fooImpl.js create mode 100644 test/function/samples/circular-namespace-reexport-cache/lib/index.js create mode 100644 test/function/samples/circular-namespace-reexport-cache/main.js diff --git a/src/Module.ts b/src/Module.ts index 8e1629a9e..634f0e1fb 100644 --- a/src/Module.ts +++ b/src/Module.ts @@ -164,7 +164,9 @@ function getVariableForExportNameRecursive( importerForSideEffects: Module | undefined, isExportAllSearch: boolean | undefined, searchedNamesAndModules = new Map>(), - importChain: string[] + importChain: string[], + sideEffectModules?: Set, + exportOrReexportModules?: Set ): [variable: Variable | null, options?: VariableOptions] { const searchedModules = searchedNamesAndModules.get(name); if (searchedModules) { @@ -176,10 +178,12 @@ function getVariableForExportNameRecursive( searchedNamesAndModules.set(name, new Set([target])); } return target.getVariableForExportName(name, { + exportOrReexportModules, importChain, importerForSideEffects, isExportAllSearch, - searchedNamesAndModules + searchedNamesAndModules, + sideEffectModules }); } @@ -271,7 +275,11 @@ export default class Module { private readonly exportShimVariable = new ExportShimVariable(this); private readonly namespaceReexportsByName = new Map< string, - [variable: Variable | null, options?: VariableOptions] + | [null] + | [ + variable: Variable, + options: PartialRequired + ] >(); private readonly reexportDescriptions = new Map(); private relevantDependencies: Set | null = null; @@ -595,13 +603,17 @@ export default class Module { importChain = [], isExportAllSearch, onlyExplicit, - searchedNamesAndModules + searchedNamesAndModules, + sideEffectModules, + exportOrReexportModules }: { importerForSideEffects?: Module; importChain?: string[]; isExportAllSearch?: boolean; onlyExplicit?: boolean; searchedNamesAndModules?: Map>; + sideEffectModules?: Set; + exportOrReexportModules?: Set; } = EMPTY_OBJECT ): [variable: Variable | null, options?: VariableOptions] { if (name[0] === '*') { @@ -625,7 +637,9 @@ export default class Module { importerForSideEffects, false, searchedNamesAndModules, - [...importChain, this.id] + [...importChain, this.id], + sideEffectModules, + exportOrReexportModules ); if (!variable) { return this.error( @@ -648,6 +662,10 @@ export default class Module { ).add(this); } } + if (this.info.moduleSideEffects) { + sideEffectModules?.add(this); + } + exportOrReexportModules?.add(this); return [variable]; } @@ -658,8 +676,10 @@ export default class Module { } const name = exportDeclaration.localName; const variable = this.traceVariable(name, { + exportOrReexportModules, importerForSideEffects, - searchedNamesAndModules + searchedNamesAndModules, + sideEffectModules }); if (!variable) { return [null, { missingButExportExists: true }]; @@ -672,6 +692,10 @@ export default class Module { getNewSet ).add(this); } + + sideEffectModules?.add(this); + exportOrReexportModules?.add(this); + return [variable]; } @@ -690,6 +714,27 @@ export default class Module { ); this.namespaceReexportsByName.set(name, foundNamespaceReexport); if (foundNamespaceReexport[0]) { + const [namespaceReexportVariable, namespaceReexportOptions] = foundNamespaceReexport; + if (importerForSideEffects) { + const { exportOrReexportModules, sideEffectModules } = namespaceReexportOptions; + for (const module of exportOrReexportModules) { + if (importerForSideEffects.alternativeReexportModules.has(namespaceReexportVariable)) { + continue; + } + setAlternativeExporterIfCyclic( + namespaceReexportVariable, + importerForSideEffects, + module + ); + } + for (const module of sideEffectModules) { + getOrCreate( + importerForSideEffects.sideEffectDependenciesByVariable, + namespaceReexportVariable, + getNewSet + ).add(module); + } + } return foundNamespaceReexport; } } @@ -945,11 +990,15 @@ export default class Module { { importerForSideEffects, isExportAllSearch, - searchedNamesAndModules + searchedNamesAndModules, + sideEffectModules, + exportOrReexportModules }: { importerForSideEffects?: Module; isExportAllSearch?: boolean; searchedNamesAndModules?: Map>; + sideEffectModules?: Set; + exportOrReexportModules?: Set; } = EMPTY_OBJECT ): Variable | null { const localVariable = this.scope.variables.get(name); @@ -971,7 +1020,9 @@ export default class Module { importerForSideEffects || this, isExportAllSearch, searchedNamesAndModules, - [this.id] + [this.id], + sideEffectModules, + exportOrReexportModules ); if (!declaration) { @@ -1253,10 +1304,17 @@ export default class Module { importerForSideEffects: Module | undefined, searchedNamesAndModules: Map> | undefined, importChain: string[] - ): [variable: Variable | null, options?: VariableOptions] { + ): + | [null] + | [ + variable: Variable, + options: PartialRequired + ] { let foundSyntheticDeclaration: SyntheticNamedExportVariable | null = null; const foundInternalDeclarations = new Map(); const foundExternalDeclarations = new Set(); + const sideEffectModules = new Set(); + const exportOrReexportModules = new Set(); for (const module of this.exportAllModules) { // Synthetic namespaces should not hide "regular" exports of the same name if (module.info.syntheticNamedExports === name) { @@ -1270,7 +1328,9 @@ export default class Module { // We are creating a copy to handle the case where the same binding is // imported through different namespace reexports gracefully copyNameToModulesMap(searchedNamesAndModules), - importChain + importChain, + sideEffectModules, + exportOrReexportModules ); if (module instanceof ExternalModule || options?.indirectExternal) { @@ -1287,7 +1347,7 @@ export default class Module { const foundDeclarationList = [...foundInternalDeclarations]; const usedDeclaration = foundDeclarationList[0][0]; if (foundDeclarationList.length === 1) { - return [usedDeclaration]; + return [usedDeclaration, { exportOrReexportModules, sideEffectModules }]; } this.options.onLog( LOGLEVEL_WARN, @@ -1314,10 +1374,13 @@ export default class Module { ) ); } - return [usedDeclaration, { indirectExternal: true }]; + return [ + usedDeclaration, + { exportOrReexportModules, indirectExternal: true, sideEffectModules } + ]; } if (foundSyntheticDeclaration) { - return [foundSyntheticDeclaration]; + return [foundSyntheticDeclaration, { exportOrReexportModules, sideEffectModules }]; } return [null]; } @@ -1434,9 +1497,13 @@ const copyNameToModulesMap = ( new Map(Array.from(searchedNamesAndModules, ([name, modules]) => [name, new Set(modules)])); interface VariableOptions { + exportOrReexportModules?: Set; indirectExternal?: boolean; missingButExportExists?: boolean; + sideEffectModules?: Set; } const sortExportedVariables = ([a]: [string, Variable], [b]: [string, Variable]) => a < b ? -1 : a > b ? 1 : 0; + +type PartialRequired = T & Required>; diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_config.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_config.js new file mode 100644 index 000000000..fba7e9281 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_config.js @@ -0,0 +1,13 @@ +module.exports = defineTest({ + description: + 'correctly tracks side-effect dependencies for multiple importers through namespace reexport cache', + options: { + input: ['entry1.js', 'entry2.js'], + treeshake: { + moduleSideEffects(id) { + if (id.endsWith('index.js')) return false; + return true; + } + } + } +}); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/entry1.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/entry1.js new file mode 100644 index 000000000..7833464e7 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/entry1.js @@ -0,0 +1,5 @@ +define(['./generated-effect'], (function (effect) { 'use strict'; + + console.log('entry1', effect.foo); + +})); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/entry2.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/entry2.js new file mode 100644 index 000000000..a1fc77479 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/entry2.js @@ -0,0 +1,5 @@ +define(['./generated-effect'], (function (effect) { 'use strict'; + + console.log('entry2', effect.foo); + +})); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/generated-effect.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/generated-effect.js new file mode 100644 index 000000000..c757aefee --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/amd/generated-effect.js @@ -0,0 +1,9 @@ +define(['exports'], (function (exports) { 'use strict'; + + const foo = 'foo'; + + console.log('side effect'); + + exports.foo = foo; + +})); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/entry1.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/entry1.js new file mode 100644 index 000000000..f9be9c051 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/entry1.js @@ -0,0 +1,5 @@ +'use strict'; + +var effect = require('./generated-effect.js'); + +console.log('entry1', effect.foo); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/entry2.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/entry2.js new file mode 100644 index 000000000..3142ab59b --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/entry2.js @@ -0,0 +1,5 @@ +'use strict'; + +var effect = require('./generated-effect.js'); + +console.log('entry2', effect.foo); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/generated-effect.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/generated-effect.js new file mode 100644 index 000000000..a110a49f8 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/cjs/generated-effect.js @@ -0,0 +1,7 @@ +'use strict'; + +const foo = 'foo'; + +console.log('side effect'); + +exports.foo = foo; diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/entry1.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/entry1.js new file mode 100644 index 000000000..34866bb48 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/entry1.js @@ -0,0 +1,3 @@ +import { f as foo } from './generated-effect.js'; + +console.log('entry1', foo); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/entry2.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/entry2.js new file mode 100644 index 000000000..aa24d4613 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/entry2.js @@ -0,0 +1,3 @@ +import { f as foo } from './generated-effect.js'; + +console.log('entry2', foo); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/generated-effect.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/generated-effect.js new file mode 100644 index 000000000..a5fb98b1a --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/es/generated-effect.js @@ -0,0 +1,5 @@ +const foo = 'foo'; + +console.log('side effect'); + +export { foo as f }; diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/entry1.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/entry1.js new file mode 100644 index 000000000..ac4770879 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/entry1.js @@ -0,0 +1,14 @@ +System.register(['./generated-effect.js'], (function () { + 'use strict'; + var foo; + return { + setters: [function (module) { + foo = module.f; + }], + execute: (function () { + + console.log('entry1', foo); + + }) + }; +})); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/entry2.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/entry2.js new file mode 100644 index 000000000..149e9ebee --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/entry2.js @@ -0,0 +1,14 @@ +System.register(['./generated-effect.js'], (function () { + 'use strict'; + var foo; + return { + setters: [function (module) { + foo = module.f; + }], + execute: (function () { + + console.log('entry2', foo); + + }) + }; +})); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/generated-effect.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/generated-effect.js new file mode 100644 index 000000000..d19b36417 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/_expected/system/generated-effect.js @@ -0,0 +1,12 @@ +System.register([], (function (exports) { + 'use strict'; + return { + execute: (function () { + + const foo = exports("f", 'foo'); + + console.log('side effect'); + + }) + }; +})); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/entry1.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/entry1.js new file mode 100644 index 000000000..07dfc44ff --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/entry1.js @@ -0,0 +1,2 @@ +import { foo } from './lib/index.js'; +console.log('entry1', foo); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/entry2.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/entry2.js new file mode 100644 index 000000000..fc7a53a59 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/entry2.js @@ -0,0 +1,2 @@ +import { foo } from './lib/index.js'; +console.log('entry2', foo); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/effect.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/effect.js new file mode 100644 index 000000000..75bb07d82 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/effect.js @@ -0,0 +1 @@ +console.log('side effect'); diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/foo.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/foo.js new file mode 100644 index 000000000..007158283 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/foo.js @@ -0,0 +1,2 @@ +export { foo } from './fooImpl.js'; +import './effect.js'; diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/fooImpl.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/fooImpl.js new file mode 100644 index 000000000..3329a7d97 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/fooImpl.js @@ -0,0 +1 @@ +export const foo = 'foo'; diff --git a/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/index.js b/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/index.js new file mode 100644 index 000000000..7b7aceca5 --- /dev/null +++ b/test/chunking-form/samples/namespace-reexport-side-effect-cache/lib/index.js @@ -0,0 +1 @@ +export * from './foo.js'; diff --git a/test/function/samples/circular-namespace-reexport-cache/_config.js b/test/function/samples/circular-namespace-reexport-cache/_config.js new file mode 100644 index 000000000..957584718 --- /dev/null +++ b/test/function/samples/circular-namespace-reexport-cache/_config.js @@ -0,0 +1,46 @@ +const path = require('node:path'); + +const ID_ENTRY1 = path.join(__dirname, 'entry1.js'); +const ID_ENTRY2 = path.join(__dirname, 'entry2.js'); +const ID_INDEX = path.join(__dirname, 'lib/index.js'); +const ID_FOO = path.join(__dirname, 'lib/foo.js'); +const ID_FOO_IMPL = path.join(__dirname, 'lib/fooImpl.js'); + +module.exports = defineTest({ + description: 'handles cyclic reexports through cached namespace reexports for multiple importers', + options: { + output: { + preserveModules: true + } + }, + warnings: [ + { + code: 'CIRCULAR_DEPENDENCY', + ids: [ID_ENTRY1, ID_INDEX, ID_FOO, ID_FOO_IMPL, ID_ENTRY1], + message: + 'Circular dependency: entry1.js -> lib/index.js -> lib/foo.js -> lib/fooImpl.js -> entry1.js' + }, + { + code: 'CIRCULAR_DEPENDENCY', + ids: [ID_INDEX, ID_FOO, ID_FOO_IMPL, ID_ENTRY2, ID_INDEX], + message: + 'Circular dependency: lib/index.js -> lib/foo.js -> lib/fooImpl.js -> entry2.js -> lib/index.js' + }, + { + code: 'CYCLIC_CROSS_CHUNK_REEXPORT', + exporter: ID_FOO_IMPL, + id: ID_ENTRY1, + message: + 'Export "foo" of module "lib/fooImpl.js" was reexported through module "lib/foo.js" while both modules are dependencies of each other and will end up in different chunks by current Rollup settings. This scenario is not well supported at the moment as it will produce a circular dependency between chunks and will likely lead to broken execution order.\nEither change the import in "entry1.js" to point directly to the exporting module or do not use "output.preserveModules" to ensure these modules end up in the same chunk.', + reexporter: ID_FOO + }, + { + code: 'CYCLIC_CROSS_CHUNK_REEXPORT', + exporter: ID_FOO_IMPL, + id: ID_ENTRY2, + message: + 'Export "foo" of module "lib/fooImpl.js" was reexported through module "lib/foo.js" while both modules are dependencies of each other and will end up in different chunks by current Rollup settings. This scenario is not well supported at the moment as it will produce a circular dependency between chunks and will likely lead to broken execution order.\nEither change the import in "entry2.js" to point directly to the exporting module or do not use "output.preserveModules" to ensure these modules end up in the same chunk.', + reexporter: ID_FOO + } + ] +}); diff --git a/test/function/samples/circular-namespace-reexport-cache/entry1.js b/test/function/samples/circular-namespace-reexport-cache/entry1.js new file mode 100644 index 000000000..b03b2689b --- /dev/null +++ b/test/function/samples/circular-namespace-reexport-cache/entry1.js @@ -0,0 +1,4 @@ +import { foo } from './lib/index.js'; +console.log('entry1', foo); + +export const entry1 = 'entry1'; diff --git a/test/function/samples/circular-namespace-reexport-cache/entry2.js b/test/function/samples/circular-namespace-reexport-cache/entry2.js new file mode 100644 index 000000000..ee3352428 --- /dev/null +++ b/test/function/samples/circular-namespace-reexport-cache/entry2.js @@ -0,0 +1,4 @@ +import { foo } from './lib/index.js'; +console.log('entry2', foo); + +export const entry2 = 'entry2'; diff --git a/test/function/samples/circular-namespace-reexport-cache/lib/effect.js b/test/function/samples/circular-namespace-reexport-cache/lib/effect.js new file mode 100644 index 000000000..75bb07d82 --- /dev/null +++ b/test/function/samples/circular-namespace-reexport-cache/lib/effect.js @@ -0,0 +1 @@ +console.log('side effect'); diff --git a/test/function/samples/circular-namespace-reexport-cache/lib/foo.js b/test/function/samples/circular-namespace-reexport-cache/lib/foo.js new file mode 100644 index 000000000..007158283 --- /dev/null +++ b/test/function/samples/circular-namespace-reexport-cache/lib/foo.js @@ -0,0 +1,2 @@ +export { foo } from './fooImpl.js'; +import './effect.js'; diff --git a/test/function/samples/circular-namespace-reexport-cache/lib/fooImpl.js b/test/function/samples/circular-namespace-reexport-cache/lib/fooImpl.js new file mode 100644 index 000000000..6cca2cdc7 --- /dev/null +++ b/test/function/samples/circular-namespace-reexport-cache/lib/fooImpl.js @@ -0,0 +1,5 @@ +import { entry1 } from '../entry1'; +import { entry2 } from '../entry2'; +export const foo = 'foo'; + +console.log(entry1, entry2); diff --git a/test/function/samples/circular-namespace-reexport-cache/lib/index.js b/test/function/samples/circular-namespace-reexport-cache/lib/index.js new file mode 100644 index 000000000..7b7aceca5 --- /dev/null +++ b/test/function/samples/circular-namespace-reexport-cache/lib/index.js @@ -0,0 +1 @@ +export * from './foo.js'; diff --git a/test/function/samples/circular-namespace-reexport-cache/main.js b/test/function/samples/circular-namespace-reexport-cache/main.js new file mode 100644 index 000000000..a85452bb6 --- /dev/null +++ b/test/function/samples/circular-namespace-reexport-cache/main.js @@ -0,0 +1,4 @@ +import { entry1 } from './entry1'; +import { entry2 } from './entry2'; + +console.log(entry1, entry2); From ae871d762f6bbeb4320d28fe179211168f27a434 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Mon, 30 Mar 2026 06:13:22 +0200 Subject: [PATCH 14/15] 4.60.1 --- CHANGELOG.md | 20 ++++++++++++++++++++ browser/package.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d9b6478b..38173be68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # rollup changelog +## 4.60.1 + +_2026-03-30_ + +### Bug Fixes + +- Resolve a situation where side effect imports could be dropped due to a caching issue (#6286) + +### Pull Requests + +- [#6286](https://github.com/rollup/rollup/pull/6286): fix: skip dropping side-effects on namespaceReexportsByName cache hit (#6274) (@littlegrayss, @TrickyPi) +- [#6317](https://github.com/rollup/rollup/pull/6317): chore(deps): pin dependencies (@renovate[bot], @lukastaegert) +- [#6318](https://github.com/rollup/rollup/pull/6318): chore(deps): update msys2/setup-msys2 digest to cafece8 (@renovate[bot], @lukastaegert) +- [#6319](https://github.com/rollup/rollup/pull/6319): chore(deps): update minor/patch updates (@renovate[bot], @lukastaegert) +- [#6320](https://github.com/rollup/rollup/pull/6320): chore(deps): pin dependency typescript to v5 (@renovate[bot], @lukastaegert) +- [#6321](https://github.com/rollup/rollup/pull/6321): chore(deps): update openharmony-rs/setup-ohos-sdk action to v1 (@renovate[bot], @lukastaegert) +- [#6322](https://github.com/rollup/rollup/pull/6322): fix(deps): update swc monorepo (major) (@renovate[bot], @lukastaegert) +- [#6323](https://github.com/rollup/rollup/pull/6323): chore(deps): lock file maintenance (@renovate[bot]) +- [#6324](https://github.com/rollup/rollup/pull/6324): chore(deps): lock file maintenance (@renovate[bot], @lukastaegert) + ## 4.60.0 _2026-03-22_ diff --git a/browser/package.json b/browser/package.json index ad3d1e269..a35bcceb4 100644 --- a/browser/package.json +++ b/browser/package.json @@ -1,6 +1,6 @@ { "name": "@rollup/browser", - "version": "4.60.0", + "version": "4.60.1", "description": "Next-generation ES module bundler browser build", "main": "dist/rollup.browser.js", "module": "dist/es/rollup.browser.js", diff --git a/package-lock.json b/package-lock.json index 58bd450b1..f4e9e63fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rollup", - "version": "4.60.0", + "version": "4.60.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rollup", - "version": "4.60.0", + "version": "4.60.1", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" diff --git a/package.json b/package.json index b3ba37c10..f7ff6c8b3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rollup", - "version": "4.60.0", + "version": "4.60.1", "description": "Next-generation ES module bundler", "main": "dist/rollup.js", "module": "dist/es/rollup.js", From 21de6e719751888dc136878551d21d32e4914dc9 Mon Sep 17 00:00:00 2001 From: waynzh Date: Sat, 4 Apr 2026 20:44:42 +0800 Subject: [PATCH 15/15] docs(cn): resolve conflicts --- docs/configuration-options/index.md | 8 ++------ docs/es-module-syntax/index.md | 14 +++++--------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/docs/configuration-options/index.md b/docs/configuration-options/index.md index a56306229..74b6b7aa1 100755 --- a/docs/configuration-options/index.md +++ b/docs/configuration-options/index.md @@ -58,13 +58,9 @@ rollup -i src/main.js ... -e foo,bar,baz 当创建 `iife` 或 `umd` 格式的 bundle 时,你需要通过 [`output.globals`](#output-globals) 选项提供全局变量名,以替换掉外部引入。 -<<<<<<< HEAD -如果一个相对引入,即以 `./` 或 `../` 开头,被标记为 `external`,rollup 将在内部将该模块 ID 解析为绝对路径,以便引入的不同外部模块可以合并。当写入生成的 bundle 后,这些引入模块将再次被转换为相对引入。例如: -======= -Note that [source phase imports](../es-module-syntax/index.md#source-phase-import) (`import source x from 'y'`) are required to be external. Rollup will raise an error if a source phase import resolves to a module that is not external. +请注意,[source phase 导入](../es-module-syntax/index.md#source-phase-import)(`import source x from 'y'`)必须是外部的。如果 source phase 导入解析到非外部模块,Rollup 将抛出错误。 -If a relative import, i.e. starting with `./` or `../`, is marked as "external", rollup will internally resolve the id to an absolute file system location so that different imports of the external module can be merged. When the resulting bundle is written, the import will again be converted to a relative import. Example: ->>>>>>> ae871d762f6bbeb4320d28fe179211168f27a434 +如果一个相对引入,即以 `./` 或 `../` 开头,被标记为 `external`,rollup 将在内部将该模块 ID 解析为绝对路径,以便引入的不同外部模块可以合并。当写入生成的 bundle 后,这些引入模块将再次被转换为相对引入。例如: ```js // 输入 diff --git a/docs/es-module-syntax/index.md b/docs/es-module-syntax/index.md index 827d93009..5f4653efa 100755 --- a/docs/es-module-syntax/index.md +++ b/docs/es-module-syntax/index.md @@ -66,23 +66,19 @@ import('./modules.js').then(({ default: DefaultExport, NamedExport }) => { 这对于代码分解应用程序和动态使用模块非常有用。 -<<<<<<< HEAD -## 导出 {#exporting} -======= -### Source Phase Import +### Source Phase 导入 {#source-phase-import} -Import the Source Phase representation of a module without executing it, using the [Source Phase Imports Proposal](https://github.com/tc39/proposal-source-phase-imports). +使用 [Source Phase Imports 提案](https://github.com/tc39/proposal-source-phase-imports) 导入模块的 Source Phase 表示,而不执行它。 -This is useful for importing compiled WebAssembly modules through the module system without relying on the fetch API: +这对于通过模块系统导入编译好的 WebAssembly 模块非常有用,而无需依赖 fetch API: ```js import source myModule from './module.wasm'; ``` -Source phase imports must be [external](../configuration-options/index.md#external) — Rollup will raise an error if a source phase import resolves to a non-external module. They are preserved as `import source` declarations in `es` output format. Other output formats (`cjs`, `amd`, `iife`, `umd`, `system`) do not support source phase imports and will raise an error if one is present. +Source phase 导入必须是[外部的](../configuration-options/index.md#external) —— 如果 source phase 导入解析到非外部模块,Rollup 将抛出错误。在 `es` 输出格式中,它们会被保留为 `import source` 声明。其他输出格式(`cjs`、`amd`、`iife`、`umd`、`system`)不支持 source phase 导入,如果存在则会抛出错误。 -## Exporting ->>>>>>> ae871d762f6bbeb4320d28fe179211168f27a434 +## 导出 {#exporting} ### 具名导出 {#named-exports}