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 d1a85b6f8..743e96bdb 100644 --- a/.github/workflows/build-and-tests.yml +++ b/.github/workflows/build-and-tests.yml @@ -213,7 +213,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 }} @@ -227,16 +227,16 @@ 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' || '' }} 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 + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 if: matrix.settings.cache-cargo != false with: path: | @@ -252,7 +252,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 }} @@ -284,7 +284,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/ @@ -323,7 +323,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/ @@ -350,7 +350,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/ @@ -534,7 +534,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..36b3dd47b 100644 --- a/.github/workflows/performance-report.yml +++ b/.github/workflows/performance-report.yml @@ -35,12 +35,12 @@ 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 - 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/ @@ -77,12 +77,12 @@ 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 - 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..b20de9055 100644 --- a/.github/workflows/repl-artefacts.yml +++ b/.github/workflows/repl-artefacts.yml @@ -35,12 +35,12 @@ 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 - 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/ @@ -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: diff --git a/CHANGELOG.md b/CHANGELOG.md index 80e230a7e..38173be68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,68 @@ # 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_ + +### 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_ + +### 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/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/browser/package.json b/browser/package.json index 67855cfce..a35bcceb4 100644 --- a/browser/package.json +++ b/browser/package.json @@ -1,6 +1,6 @@ { "name": "@rollup/browser", - "version": "4.59.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/docs/configuration-options/index.md b/docs/configuration-options/index.md index 13e039deb..74b6b7aa1 100755 --- a/docs/configuration-options/index.md +++ b/docs/configuration-options/index.md @@ -58,6 +58,8 @@ rollup -i src/main.js ... -e foo,bar,baz 当创建 `iife` 或 `umd` 格式的 bundle 时,你需要通过 [`output.globals`](#output-globals) 选项提供全局变量名,以替换掉外部引入。 +请注意,[source phase 导入](../es-module-syntax/index.md#source-phase-import)(`import source x from 'y'`)必须是外部的。如果 source phase 导入解析到非外部模块,Rollup 将抛出错误。 + 如果一个相对引入,即以 `./` 或 `../` 开头,被标记为 `external`,rollup 将在内部将该模块 ID 解析为绝对路径,以便引入的不同外部模块可以合并。当写入生成的 bundle 后,这些引入模块将再次被转换为相对引入。例如: ```js diff --git a/docs/es-module-syntax/index.md b/docs/es-module-syntax/index.md index 1dfd2aa88..5f4653efa 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 }) => { 这对于代码分解应用程序和动态使用模块非常有用。 +### Source Phase 导入 {#source-phase-import} + +使用 [Source Phase Imports 提案](https://github.com/tc39/proposal-source-phase-imports) 导入模块的 Source Phase 表示,而不执行它。 + +这对于通过模块系统导入编译好的 WebAssembly 模块非常有用,而无需依赖 fetch API: + +```js +import source myModule from './module.wasm'; +``` + +Source phase 导入必须是[外部的](../configuration-options/index.md#external) —— 如果 source phase 导入解析到非外部模块,Rollup 将抛出错误。在 `es` 输出格式中,它们会被保留为 `import source` 声明。其他输出格式(`cjs`、`amd`、`iife`、`umd`、`system`)不支持 source phase 导入,如果存在则会抛出错误。 + ## 导出 {#exporting} ### 具名导出 {#named-exports} diff --git a/package-lock.json b/package-lock.json index 8a63ee5cf..f4e9e63fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rollup", - "version": "4.59.0", + "version": "4.60.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rollup", - "version": "4.59.0", + "version": "4.60.1", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -41,9 +41,10 @@ "@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", "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", @@ -69,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", @@ -94,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" }, @@ -112,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" @@ -177,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": { @@ -219,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" @@ -740,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": { @@ -1697,9 +1698,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": { @@ -2376,14 +2377,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": { @@ -2398,15 +2399,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": { @@ -2421,17 +2422,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" }, @@ -2447,9 +2448,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": { @@ -2464,15 +2465,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" @@ -2486,13 +2487,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" @@ -2506,13 +2507,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": { @@ -2527,14 +2528,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" }, @@ -4431,9 +4432,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" ], @@ -4445,9 +4446,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" ], @@ -4459,9 +4460,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" ], @@ -4473,9 +4474,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" ], @@ -4487,9 +4488,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" ], @@ -4501,9 +4502,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" ], @@ -4515,9 +4516,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" ], @@ -4529,9 +4530,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" ], @@ -4543,9 +4544,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" ], @@ -4557,9 +4558,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" ], @@ -4571,9 +4572,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" ], @@ -4585,9 +4586,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" ], @@ -4599,9 +4600,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" ], @@ -4613,9 +4614,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" ], @@ -4627,9 +4628,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" ], @@ -4641,9 +4642,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" ], @@ -4655,9 +4656,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" ], @@ -4669,9 +4670,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" ], @@ -4683,9 +4684,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" ], @@ -4697,9 +4698,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" ], @@ -4711,9 +4712,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" ], @@ -4725,9 +4726,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" ], @@ -4739,9 +4740,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" ], @@ -4753,9 +4754,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" ], @@ -4767,9 +4768,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" ], @@ -5004,9 +5005,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": { @@ -5578,17 +5579,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" @@ -5601,7 +5602,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" } @@ -5617,17 +5618,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": { @@ -5643,14 +5644,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": { @@ -5665,14 +5666,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" @@ -5683,9 +5684,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": { @@ -5700,15 +5701,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" }, @@ -5725,9 +5726,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": { @@ -5739,16 +5740,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", @@ -5767,16 +5768,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" @@ -5791,13 +5792,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": { @@ -5935,42 +5936,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", @@ -5978,14 +5979,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": { @@ -6097,57 +6098,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" }, @@ -6279,9 +6280,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": { @@ -6301,8 +6302,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", @@ -6337,6 +6336,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", @@ -6399,27 +6411,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" @@ -6506,9 +6518,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": { @@ -6702,9 +6714,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": { @@ -6712,10 +6724,14 @@ "teex": "^1.0.1" }, "peerDependencies": { + "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, "bare-buffer": { "optional": true }, @@ -6756,9 +6772,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": { @@ -6822,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": { @@ -6902,9 +6918,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": { @@ -7236,9 +7252,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": [ { @@ -8743,9 +8759,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": { @@ -8772,17 +8788,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", @@ -8872,9 +8877,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.326", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.326.tgz", + "integrity": "sha512-uRBlUfKKdsXMkiiOurgaybNC10tjrD+skXLEg7NHbm6h0uAoqj3xMb9uue5BfcSCXJ4mcyJMOucI6q55D7p6KQ==", "dev": true, "license": "ISC" }, @@ -9170,9 +9175,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 +9185,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 +9198,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", @@ -10274,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": { @@ -11200,9 +11205,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": { @@ -11375,9 +11380,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", @@ -11466,237 +11471,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", @@ -12174,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": { @@ -12450,20 +12224,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", @@ -13024,9 +12798,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": { @@ -13193,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": { @@ -14353,9 +14127,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": { @@ -15048,27 +14822,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", @@ -15159,9 +14912,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": { @@ -15493,16 +15246,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, @@ -15517,31 +15270,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" } }, @@ -16523,9 +16276,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": { @@ -16707,9 +16460,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": { @@ -17018,16 +16771,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" @@ -17784,18 +17537,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": "*" @@ -17910,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": { @@ -18217,9 +17970,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": { @@ -18266,9 +18019,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/package.json b/package.json index 9ed4d2ae0..f7ff6c8b3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rollup", - "version": "4.59.0", + "version": "4.60.1", "description": "Next-generation ES module bundler", "main": "dist/rollup.js", "module": "dist/es/rollup.js", @@ -148,9 +148,10 @@ "@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", "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", @@ -176,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", @@ -201,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" }, diff --git a/renovate.json b/renovate.json index 134742132..0555f7ed0 100644 --- a/renovate.json +++ b/renovate.json @@ -35,10 +35,12 @@ }, { "matchPackageNames": [ + "@inquirer/prompts", + "@rollup/plugin-terser", "@types/node", + "typescript", + "vite", "yargs-parser", - "@inquirer/prompts", - "@rollup/plugin-terser" ], "matchUpdateTypes": [ "major" diff --git a/rust/Cargo.lock b/rust/Cargo.lock index bb89ed19d..1eb6b3814 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", ] @@ -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", @@ -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" 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" 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..634f0e1fb 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; } @@ -163,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) { @@ -175,10 +178,12 @@ function getVariableForExportNameRecursive( searchedNamesAndModules.set(name, new Set([target])); } return target.getVariableForExportName(name, { + exportOrReexportModules, importChain, importerForSideEffects, isExportAllSearch, - searchedNamesAndModules + searchedNamesAndModules, + sideEffectModules }); } @@ -253,6 +258,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[]; @@ -269,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; @@ -593,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] === '*') { @@ -623,7 +637,9 @@ export default class Module { importerForSideEffects, false, searchedNamesAndModules, - [...importChain, this.id] + [...importChain, this.id], + sideEffectModules, + exportOrReexportModules ); if (!variable) { return this.error( @@ -646,6 +662,10 @@ export default class Module { ).add(this); } } + if (this.info.moduleSideEffects) { + sideEffectModules?.add(this); + } + exportOrReexportModules?.add(this); return [variable]; } @@ -656,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 }]; @@ -670,6 +692,10 @@ export default class Module { getNewSet ).add(this); } + + sideEffectModules?.add(this); + exportOrReexportModules?.add(this); + return [variable]; } @@ -688,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; } } @@ -943,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); @@ -969,7 +1020,9 @@ export default class Module { importerForSideEffects || this, isExportAllSearch, searchedNamesAndModules, - [this.id] + [this.id], + sideEffectModules, + exportOrReexportModules ); if (!declaration) { @@ -1118,16 +1171,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 +1280,9 @@ export default class Module { } else { this.sourcesWithAttributes.set(source, parsedAttributes); } + if ((declaration as ImportDeclaration).phase === 'source') { + this.sourcePhaseSources.add(source); + } } private getImportedJsxFactoryVariable( @@ -1245,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) { @@ -1262,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) { @@ -1279,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, @@ -1306,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]; } @@ -1426,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/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/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/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/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); 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',