diff --git a/.changeset/bridge-ssr-v1.md b/.changeset/bridge-ssr-v1.md new file mode 100644 index 00000000000..a03c0a77087 --- /dev/null +++ b/.changeset/bridge-ssr-v1.md @@ -0,0 +1,7 @@ +--- +'@module-federation/bridge-shared': minor +'@module-federation/bridge-react': minor +'@module-federation/bridge-vue3': minor +--- + +add a thin buffered Bridge SSR contract with remote-owned React 18 and Vue 3 rendering, document-slot hydration, identity-only host references, instance-scoped mount markers, and contextual server-render failures diff --git a/.changeset/bright-pots-vanish.md b/.changeset/bright-pots-vanish.md deleted file mode 100644 index bb3d5a7d8be..00000000000 --- a/.changeset/bright-pots-vanish.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@module-federation/retry-plugin': patch ---- - -fix: externalize @module-federation/runtime and runtime-core from DTS bundle to prevent type incompatibility in consumers diff --git a/.changeset/clean-devtools-graph.md b/.changeset/clean-devtools-graph.md deleted file mode 100644 index db21705a990..00000000000 --- a/.changeset/clean-devtools-graph.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@module-federation/devtools": patch ---- - -Fix dependency graph cards for remotes that are only known by their manifest URL. diff --git a/.changeset/drop-ansi-colors-dts-plugin.md b/.changeset/drop-ansi-colors-dts-plugin.md deleted file mode 100644 index e292e061f8e..00000000000 --- a/.changeset/drop-ansi-colors-dts-plugin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@module-federation/dts-plugin': patch ---- - -chore(dts-plugin): drop `ansi-colors` dependency in favor of inline ANSI escape for the single red error message. diff --git a/.changeset/drop-lodash-get.md b/.changeset/drop-lodash-get.md deleted file mode 100644 index 2d630d65a64..00000000000 --- a/.changeset/drop-lodash-get.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@module-federation/typescript': patch ---- - -chore(typescript): drop `lodash.get` dependency in favor of optional chaining in `normalizeOptions`. diff --git a/.changeset/drop-resolve-extractor.md b/.changeset/drop-resolve-extractor.md deleted file mode 100644 index 857b7545c2d..00000000000 --- a/.changeset/drop-resolve-extractor.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@module-federation/third-party-dts-extractor': patch ---- - -chore(third-party-dts-extractor): replace `resolve` with `exsolve` (0 transitive deps, ~100KB smaller) for the single `package.json` lookup. diff --git a/.changeset/fast-manifests-flush.md b/.changeset/fast-manifests-flush.md new file mode 100644 index 00000000000..605ba312bfe --- /dev/null +++ b/.changeset/fast-manifests-flush.md @@ -0,0 +1,7 @@ +--- +'@module-federation/nextjs-mf': patch +'@module-federation/node': patch +'@module-federation/sdk': patch +--- + +Use manifest expose assets for Next.js chunk flushing, including aliased remotes, and derive legacy federated stats compatibility assets without an extra Webpack stats traversal. diff --git a/.changeset/fix-runtime-esm-preload.md b/.changeset/fix-runtime-esm-preload.md new file mode 100644 index 00000000000..3041d317f8a --- /dev/null +++ b/.changeset/fix-runtime-esm-preload.md @@ -0,0 +1,7 @@ +--- +'@module-federation/runtime-core': patch +--- + +fix(runtime): preload ESM remote chunks with `modulepreload` links instead of +executable module scripts before container initialization. Loader plugins now +observe these implicit ESM preloads through `createLink`. diff --git a/.changeset/fuzzy-pears-play.md b/.changeset/fuzzy-pears-play.md deleted file mode 100644 index 8f7a441bdc6..00000000000 --- a/.changeset/fuzzy-pears-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@module-federation/playground": patch ---- - -Add a publishable Module Federation playground package for the docs site. diff --git a/.changeset/modern-v3-lazy-compilation.md b/.changeset/modern-v3-lazy-compilation.md deleted file mode 100644 index 9394c54afce..00000000000 --- a/.changeset/modern-v3-lazy-compilation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@module-federation/modern-js-v3": patch ---- - -Disable lazy compilation for Modern.js v3 producer apps. diff --git a/.changeset/node-esm-builtin-loader.md b/.changeset/node-esm-builtin-loader.md deleted file mode 100644 index 808ae572569..00000000000 --- a/.changeset/node-esm-builtin-loader.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@module-federation/sdk": patch ---- - -Handle Node.js built-in imports in the Node ESM remote loader. diff --git a/.changeset/replace-find-pkg-with-empathic.md b/.changeset/replace-find-pkg-with-empathic.md deleted file mode 100644 index fc5fd8c037c..00000000000 --- a/.changeset/replace-find-pkg-with-empathic.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@module-federation/managers': patch -'@module-federation/third-party-dts-extractor': patch -'@module-federation/manifest': patch ---- - -chore: replace `find-pkg` with `empathic` (per [e18e replacements](https://e18e.dev/docs/replacements/find-pkg.html)). Removes unused `find-pkg` dependency from `@module-federation/manifest`. diff --git a/.changeset/small-deps-consolidated.md b/.changeset/small-deps-consolidated.md deleted file mode 100644 index a72b346080e..00000000000 --- a/.changeset/small-deps-consolidated.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@module-federation/devtools': patch -'@module-federation/treeshake-server': patch -'@module-federation/rspress-plugin': patch -'create-module-federation': patch -'@module-federation/third-party-dts-extractor': patch ---- - -Bump runtime dependencies: echarts 6.1.0 (devtools), hono 4.12.26 and @hono/node-server 1.19.13 (treeshake-server), lodash-es 4.18.1 (rspress-plugin), handlebars 4.7.9 (create-module-federation), resolve 1.22.12 (third-party-dts-extractor). diff --git a/.changeset/tricky-pants-rescue.md b/.changeset/tricky-pants-rescue.md deleted file mode 100644 index e109c611c66..00000000000 --- a/.changeset/tricky-pants-rescue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@module-federation/treeshake-server': patch ---- - -Bump undici to 7.28.0 to resolve known vulnerabilities (CVE-2026-12151 and related advisories). diff --git a/.codex/skills/local-ci/SKILL.md b/.codex/skills/local-ci/SKILL.md index 556a34b8f2a..fce1704e0b1 100644 --- a/.codex/skills/local-ci/SKILL.md +++ b/.codex/skills/local-ci/SKILL.md @@ -99,5 +99,5 @@ Use the local CI job if one exists for the workflow's behavior. For workflow syn - `ci:local` sets `CI=true` and mirrors the repo workflow order. - Some jobs intentionally skip GitHub-only actions such as `actionlint` and `bundle-size-comment`. -- The repo uses `pnpm`, Node 20, and Turbo as the standard execution path. +- The repo uses `pnpm`, Node 24, and Turbo as the standard execution path. - In worktrees, still use Turbo/package scripts directly as documented by the repo instructions. diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index a55a76c3a91..a0793b07b2a 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -18,6 +18,8 @@ jobs: checkout-install: runs-on: ubuntu-latest timeout-minutes: 30 + outputs: + e2e_suites: ${{ steps.e2e-affected.outputs.e2e_suites }} steps: - name: Checkout Repository uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 @@ -27,16 +29,20 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' - name: Install dependencies run: pnpm install --frozen-lockfile + - name: Evaluate E2E affected suites + id: e2e-affected + run: node tools/scripts/ci-is-affected.mjs --githubOutputAll=e2e_suites + - name: Restore Turborepo cache id: turbo-cache uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 @@ -53,6 +59,9 @@ jobs: - name: Check code format run: node tools/scripts/check-format-changed.mjs + - name: Test CI affected policy + run: node --test tools/scripts/ci-is-affected.test.mjs + - name: Verify Rslib Template Publint Wiring run: node packages/create-module-federation/scripts/verify-rslib-templates.mjs @@ -85,6 +94,19 @@ jobs: - name: Run affected package tests run: node tools/scripts/run-affected-package-tests.mjs + - name: Pack Node.js 20 compatibility artifacts + if: ${{ !startsWith(github.head_ref, 'release-v') }} + run: node tools/scripts/prepare-node20-compat-packages.mjs + + - name: Upload Node.js 20 compatibility artifacts + if: ${{ !startsWith(github.head_ref, 'release-v') }} + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: node20-compat-packages + path: artifacts/node20-compat/*.tgz + if-no-files-found: error + retention-days: 1 + - name: Save Turborepo cache if: ${{ success() && steps.turbo-cache.outputs.cache-hit != 'true' }} uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 @@ -94,52 +116,85 @@ jobs: e2e-modern: needs: checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).modern }} uses: ./.github/workflows/e2e-modern.yml secrets: inherit + node20-compat: + if: ${{ !startsWith(github.head_ref, 'release-v') }} + needs: checkout-install + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - name: Checkout Repository + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + + - name: Setup Node.js 20.19.5 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + with: + node-version: '20.19.5' + + - name: Download Node.js 20 compatibility artifacts + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + with: + name: node20-compat-packages + path: artifacts/node20-compat + + - name: Verify published packages on Node.js 20.19.5 + run: node tools/scripts/verify-node20-compat.mjs + e2e-runtime: needs: checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).runtime }} uses: ./.github/workflows/e2e-runtime.yml secrets: inherit e2e-manifest: needs: checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).manifest }} uses: ./.github/workflows/e2e-manifest.yml secrets: inherit e2e-node: needs: checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).node }} uses: ./.github/workflows/e2e-node.yml secrets: inherit e2e-next-dev: needs: checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).next }} uses: ./.github/workflows/e2e-next-dev.yml secrets: inherit e2e-next-prod: needs: checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).next }} uses: ./.github/workflows/e2e-next-prod.yml secrets: inherit e2e-treeshake: needs: checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).treeshake }} uses: ./.github/workflows/e2e-treeshake.yml secrets: inherit e2e-modern-ssr: needs: checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).modernSsr }} uses: ./.github/workflows/e2e-modern-ssr.yml secrets: inherit e2e-router: needs: checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).router }} uses: ./.github/workflows/e2e-router.yml secrets: inherit e2e-metro: needs: - checkout-install + if: ${{ fromJSON(needs.checkout-install.outputs.e2e_suites).metro }} uses: ./.github/workflows/e2e-metro.yml secrets: inherit diff --git a/.github/workflows/bundle-size.yml b/.github/workflows/bundle-size.yml index 25341fc241d..f2b0f4d17f6 100644 --- a/.github/workflows/bundle-size.yml +++ b/.github/workflows/bundle-size.yml @@ -29,7 +29,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: 20 + node-version: 24 cache: pnpm cache-dependency-path: '**/pnpm-lock.yaml' diff --git a/.github/workflows/devtools.yml b/.github/workflows/devtools.yml index f389fabfa7a..232eb914fb3 100644 --- a/.github/workflows/devtools.yml +++ b/.github/workflows/devtools.yml @@ -20,10 +20,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' diff --git a/.github/workflows/e2e-bridge-ssr.yml b/.github/workflows/e2e-bridge-ssr.yml new file mode 100644 index 00000000000..9cb1a7a5595 --- /dev/null +++ b/.github/workflows/e2e-bridge-ssr.yml @@ -0,0 +1,45 @@ +name: E2E Test for Bridge SSR + +on: + pull_request: + paths: + - 'packages/bridge/**' + - 'apps/bridge-ssr-demo/**' + - 'tools/scripts/*bridge-ssr*' + - '.github/workflows/e2e-bridge-ssr.yml' + - 'pnpm-lock.yaml' + +concurrency: + group: e2e-bridge-ssr-${{ github.ref }} + cancel-in-progress: true + +jobs: + rsbuild: + runs-on: ubuntu-latest + timeout-minutes: 45 + steps: + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + with: + node-version: '20' + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm run build:packages + - run: pnpm run e2e:bridge:ssr + - run: pnpm run e2e:bridge:ssr:production + + vite-smoke: + runs-on: ubuntu-latest + timeout-minutes: 30 + continue-on-error: true + steps: + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + with: + node-version: '20' + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm run build:packages + - run: pnpm run e2e:bridge:ssr:vite-smoke diff --git a/.github/workflows/e2e-manifest.yml b/.github/workflows/e2e-manifest.yml index 1aba2e9a5a5..f3796437556 100644 --- a/.github/workflows/e2e-manifest.yml +++ b/.github/workflows/e2e-manifest.yml @@ -1,4 +1,4 @@ -# .github/workflows/e2e-webpack-host.yml +# .github/workflows/e2e-manifest.yml name: E2E Test for Manifest on: @@ -17,10 +17,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -45,24 +45,8 @@ jobs: - name: Build shared packages run: pnpm run build:packages - - name: Check CI conditions - id: check-ci - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=3008-webpack-host,3009-webpack-provider,3010-rspack-provider,3011-rspack-manifest-provider,3012-rspack-js-entry-provider || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - - name: E2E Test for Manifest Demo (dev) - if: steps.check-ci.outputs.run-e2e == 'true' run: pnpm exec turbo run test:e2e --filter=3008-webpack-host - name: E2E Test for Manifest Demo (prod) - if: steps.check-ci.outputs.run-e2e == 'true' run: pnpm exec turbo run test:e2e:production --filter=3008-webpack-host diff --git a/.github/workflows/e2e-metro.yml b/.github/workflows/e2e-metro.yml index 9560cac3639..01b33b19692 100644 --- a/.github/workflows/e2e-metro.yml +++ b/.github/workflows/e2e-metro.yml @@ -15,51 +15,7 @@ env: METRO_APP_NAME: example-host jobs: - e2e-metro-check-affected: - runs-on: ubuntu-latest - timeout-minutes: 30 - outputs: - should_run_e2e: ${{ steps.affected.outputs.should-run-e2e }} - steps: - - name: Check out repository - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - with: - fetch-depth: 0 - - - name: Set up pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - - name: Set up Node.js 20 - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 - with: - node-version: '20' - cache: 'pnpm' - cache-dependency-path: '**/pnpm-lock.yaml' - - - name: Export SKIP_DEVTOOLS_POSTINSTALL - run: echo "SKIP_DEVTOOLS_POSTINSTALL=true" >> "$GITHUB_ENV" - shell: bash - - - name: Install pnpm dependencies - run: pnpm install --frozen-lockfile - - - name: Evaluate Metro affected scope - id: affected - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=${{ env.METRO_APP_NAME }} || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "should-run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "should-run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - e2e-metro-android: - needs: e2e-metro-check-affected - if: needs.e2e-metro-check-affected.outputs.should_run_e2e == 'true' runs-on: ubuntu-latest timeout-minutes: 60 env: @@ -82,10 +38,10 @@ jobs: - name: Set up pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Set up Node.js 20 + - name: Set up Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -170,9 +126,8 @@ jobs: path: ~/.maestro/tests/ e2e-metro-ios: - needs: e2e-metro-check-affected - if: needs.e2e-metro-check-affected.outputs.should_run_e2e == 'true' - runs-on: macos-latest + # Xcode 26.5 fails to compile React Native 0.80's fmt pod for the simulator. + runs-on: macos-15 timeout-minutes: 60 env: NO_COLOR: 1 @@ -190,10 +145,10 @@ jobs: - name: Set up pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Set up Node.js 20 + - name: Set up Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' diff --git a/.github/workflows/e2e-modern-ssr.yml b/.github/workflows/e2e-modern-ssr.yml index bbfb6a89a78..247957a4e54 100644 --- a/.github/workflows/e2e-modern-ssr.yml +++ b/.github/workflows/e2e-modern-ssr.yml @@ -16,10 +16,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -44,20 +44,5 @@ jobs: - name: Build shared packages run: pnpm run build:packages - - name: Check CI conditions - id: check-ci - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=@module-federation/modern-js,@module-federation/modern-js-v3,modernjs-ssr-host,modernjs-ssr-remote,modernjs-ssr-remote-new-version,modernjs-ssr-nested-remote,modernjs-ssr-dynamic-remote,modernjs-ssr-dynamic-remote-new-version,modernjs-ssr-dynamic-nested-remote,modernjs-ssr-data-fetch-host,modernjs-ssr-data-fetch-provider,modernjs-ssr-data-fetch-provider-csr || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - - name: Manifest verification for ModernJS SSR - if: steps.check-ci.outputs.run-e2e == 'true' run: node tools/scripts/run-modern-e2e.mjs --mode=manifest diff --git a/.github/workflows/e2e-modern.yml b/.github/workflows/e2e-modern.yml index 7ed2a7c757c..b5cd1b15301 100644 --- a/.github/workflows/e2e-modern.yml +++ b/.github/workflows/e2e-modern.yml @@ -1,4 +1,4 @@ -# .github/workflows/e2e-modernjs.yml +# .github/workflows/e2e-modern.yml name: E2E Test for ModernJS on: @@ -17,10 +17,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -45,20 +45,5 @@ jobs: - name: Build shared packages run: pnpm run build:packages - - name: Check CI conditions - id: check-ci - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=@module-federation/modern-js,@module-federation/modern-js-v3 || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - - name: Run Modern package test suite - if: steps.check-ci.outputs.run-e2e == 'true' run: pnpm exec turbo run test --filter=@module-federation/modern-js --filter=@module-federation/modern-js-v3 --concurrency=20 diff --git a/.github/workflows/e2e-next-dev.yml b/.github/workflows/e2e-next-dev.yml index e8524459313..0a2df603814 100644 --- a/.github/workflows/e2e-next-dev.yml +++ b/.github/workflows/e2e-next-dev.yml @@ -18,10 +18,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -46,20 +46,5 @@ jobs: - name: Build shared packages run: pnpm run build:packages - - name: Check CI conditions - id: check-ci - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=@module-federation/3000-home,@module-federation/3001-shop,@module-federation/3002-checkout || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - - name: E2E Test for Next.js Dev - if: steps.check-ci.outputs.run-e2e == 'true' run: node tools/scripts/run-next-e2e.mjs --mode=dev diff --git a/.github/workflows/e2e-next-prod.yml b/.github/workflows/e2e-next-prod.yml index e1e7a6fa8c3..2b8f6fcdce8 100644 --- a/.github/workflows/e2e-next-prod.yml +++ b/.github/workflows/e2e-next-prod.yml @@ -16,10 +16,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -44,20 +44,5 @@ jobs: - name: Build shared packages run: pnpm run build:packages - - name: Check CI conditions - id: check-ci - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=@module-federation/3000-home,@module-federation/3001-shop,@module-federation/3002-checkout || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - - name: E2E Test for Next.js Prod - if: steps.check-ci.outputs.run-e2e == 'true' run: node tools/scripts/run-next-e2e.mjs --mode=prod diff --git a/.github/workflows/e2e-node.yml b/.github/workflows/e2e-node.yml index aa2033e9a48..0e3843d7f09 100644 --- a/.github/workflows/e2e-node.yml +++ b/.github/workflows/e2e-node.yml @@ -1,4 +1,4 @@ -# .github/workflows/e2e-node-federation.yml +# .github/workflows/e2e-node.yml name: E2E Node Federation on: @@ -17,10 +17,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -45,20 +45,5 @@ jobs: - name: Build shared packages run: pnpm run build:packages - - name: Check CI conditions - id: check-ci - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=node-host,node-local-remote,node-remote,node-dynamic-remote-new-version,node-dynamic-remote,node-host-e2e || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - - name: E2E Node Federation - if: steps.check-ci.outputs.run-e2e == 'true' run: pnpm run e2e:node diff --git a/.github/workflows/e2e-router.yml b/.github/workflows/e2e-router.yml index 8f46d8ccc66..c0f22539465 100644 --- a/.github/workflows/e2e-router.yml +++ b/.github/workflows/e2e-router.yml @@ -1,4 +1,4 @@ -# .github/workflows/e2e-router-host-2000.yml +# .github/workflows/e2e-router.yml name: E2E Test for Router on: @@ -17,10 +17,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -45,20 +45,5 @@ jobs: - name: Build shared packages run: pnpm run build:packages - - name: Check CI conditions - id: check-ci - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=host,host-v5,host-vue3,remote1,remote2,remote3,remote4,remote5,remote6 || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - - name: E2E Test for Router - if: steps.check-ci.outputs.run-e2e == 'true' run: node tools/scripts/run-router-e2e.mjs --mode=dev diff --git a/.github/workflows/e2e-runtime.yml b/.github/workflows/e2e-runtime.yml index d2c7adb9247..4bab493185d 100644 --- a/.github/workflows/e2e-runtime.yml +++ b/.github/workflows/e2e-runtime.yml @@ -1,4 +1,4 @@ -# .github/workflows/e2e-runtime-host.yml +# .github/workflows/e2e-runtime.yml name: E2E Test for Runtime on: @@ -17,10 +17,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -45,20 +45,5 @@ jobs: - name: Build shared packages run: pnpm run build:packages - - name: Check CI conditions - id: check-ci - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=runtime-host,runtime-remote1,runtime-remote2 || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - - name: E2E Test for Runtime Demo - if: steps.check-ci.outputs.run-e2e == 'true' run: pnpm exec turbo run test:e2e --filter=runtime-host diff --git a/.github/workflows/e2e-shared-tree-shaking.yml b/.github/workflows/e2e-shared-tree-shaking.yml index 38a27ab4ac5..e3e63a3bb1b 100644 --- a/.github/workflows/e2e-shared-tree-shaking.yml +++ b/.github/workflows/e2e-shared-tree-shaking.yml @@ -16,10 +16,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' diff --git a/.github/workflows/e2e-treeshake.yml b/.github/workflows/e2e-treeshake.yml index 54e67044fa6..17b3b653bc6 100644 --- a/.github/workflows/e2e-treeshake.yml +++ b/.github/workflows/e2e-treeshake.yml @@ -19,10 +19,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' @@ -44,24 +44,8 @@ jobs: - name: Build shared packages run: pnpm run build:packages - - name: Check CI conditions - id: check-ci - run: | - ci_status=0 - node tools/scripts/ci-is-affected.mjs --appName=@module-federation/treeshake-server,@module-federation/treeshake-frontend || ci_status=$? - if [ "$ci_status" -eq 0 ]; then - echo "run-e2e=true" >> "$GITHUB_OUTPUT" - elif [ "$ci_status" -eq 1 ]; then - echo "run-e2e=false" >> "$GITHUB_OUTPUT" - else - echo "ci-is-affected failed with unexpected exit code: $ci_status" >&2 - exit "$ci_status" - fi - - name: E2E Treeshake Server - if: steps.check-ci.outputs.run-e2e == 'true' run: pnpm exec turbo run test --filter=@module-federation/treeshake-server --only - name: E2E Treeshake Frontend - if: steps.check-ci.outputs.run-e2e == 'true' run: pnpm exec turbo run e2e --filter=@module-federation/treeshake-frontend --only diff --git a/.github/workflows/lint-deps.yml b/.github/workflows/lint-deps.yml index 1e443e1543f..28677ff1b04 100644 --- a/.github/workflows/lint-deps.yml +++ b/.github/workflows/lint-deps.yml @@ -26,10 +26,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' diff --git a/.github/workflows/pkg-pr-new.yml b/.github/workflows/pkg-pr-new.yml index 2709cf9865e..54c6e0cf4e3 100644 --- a/.github/workflows/pkg-pr-new.yml +++ b/.github/workflows/pkg-pr-new.yml @@ -28,10 +28,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' diff --git a/.github/workflows/release-pull-request.yml b/.github/workflows/release-pull-request.yml index fdf867b28e8..2d1b0b374ee 100644 --- a/.github/workflows/release-pull-request.yml +++ b/.github/workflows/release-pull-request.yml @@ -36,10 +36,10 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 - - name: Setup Node.js 20 + - name: Setup Node.js 24 uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: '20' + node-version: '24' cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2d1fa3204b7..9c54e0e261e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,5 @@ name: Release +run-name: Release ${{ inputs.version }} from ${{ inputs.branch }} on: workflow_dispatch: inputs: @@ -20,7 +21,7 @@ permissions: jobs: release: - name: Release + name: Release ${{ inputs.version }} from ${{ inputs.branch }} if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'push' }} runs-on: ubuntu-latest environment: npm @@ -45,14 +46,16 @@ jobs: - name: Setup Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: - node-version: 20 + node-version: 24 cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' - # Update npm to the latest version to enable OIDC + # npm 12.0.0 omits its bundled sigstore dependency and breaks OIDC + # provenance publishing. Keep npm 11 until the upstream fix ships. + # https://github.com/npm/cli/issues/9722 - name: Update npm run: | - npm install -g npm@latest + npm install -g npm@^11 npm --version - name: Install deps diff --git a/.github/workflows/website-zephyr.yml b/.github/workflows/website-zephyr.yml new file mode 100644 index 00000000000..0ab770a06f5 --- /dev/null +++ b/.github/workflows/website-zephyr.yml @@ -0,0 +1,79 @@ +name: Website Zephyr Deploy + +on: + pull_request: + types: [opened, synchronize, reopened, closed] + branches: [main] + paths: + - 'apps/website-new/**' + - 'packages/rspress-plugin/**' + - 'package.json' + - 'pnpm-lock.yaml' + - 'turbo.json' + - '.github/workflows/website-zephyr.yml' + release: + types: [released] + workflow_dispatch: + +permissions: + contents: read + pull-requests: write + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + SITE_ORIGIN: https://module-federation.io + ZE_SECRET_TOKEN: ${{ secrets.ZE_SECRET_TOKEN }} + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + +jobs: + deploy: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout Repository + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + fetch-depth: 0 + + - name: Setup pnpm + uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4 + + - name: Setup Node.js 24 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + with: + node-version: '24' + cache: 'pnpm' + cache-dependency-path: '**/pnpm-lock.yaml' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Restore Turborepo cache + uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 + with: + path: .turbo/cache + key: ${{ runner.os }}-turbo-${{ github.ref_name }}-${{ hashFiles('pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-turbo-${{ github.ref_name }}- + ${{ runner.os }}-turbo- + + - name: Use production Zephyr environment + if: ${{ github.event_name == 'release' }} + run: echo "ZE_ENV=production" >> "$GITHUB_ENV" + + - name: Build and deploy website with Zephyr + if: ${{ env.ZE_SECRET_TOKEN != '' && github.event.action != 'closed' }} + run: pnpm run build:website + + - name: Update Zephyr preview environment + if: ${{ env.ZE_SECRET_TOKEN != '' && github.event_name == 'pull_request' }} + uses: ZephyrCloudIO/zephyr-preview-environment-action@b3ada4d42eb404c8af6da6299c1b0585d238fdd0 # main, pending Node 24 release + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Skip Zephyr deploy without token + if: ${{ env.ZE_SECRET_TOKEN == '' }} + run: echo "ZE_SECRET_TOKEN is not available for this workflow run; skipping Zephyr deploy." diff --git a/.husky/commit-msg b/.husky/commit-msg index 693dbea0ca6..087d40d63ce 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,5 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" - -pnpm run commitlint ${1} +pnpm run commitlint --edit "${1}" diff --git a/.nvmrc b/.nvmrc index 209e3ef4b62..a45fd52cc58 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20 +24 diff --git a/.prettierignore b/.prettierignore index a9e2bf4e1d4..70683db1d6b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,6 +8,9 @@ pnpm-lock.yaml **/dist/** **/dist-rslib/** +**/dist-vite/** +**/playwright-report/** +**/test-results/** apps/website-new/docs packages/treeshake-server/template/** diff --git a/.tool-versions b/.tool-versions index 77730a63469..fcf8a11aa82 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -nodejs 20.19.0 +nodejs 24.18.0 diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 79ba01f3db5..6f8c838b4d3 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,7 +4,7 @@ { "label": "pnpm-build-enhanced", "type": "shell", - "command": "source $HOME/.nvm/nvm.sh && nvm use 20 && pnpm --filter @module-federation/enhanced run build", + "command": "source $HOME/.nvm/nvm.sh && nvm use 24 && pnpm --filter @module-federation/enhanced run build", "problemMatcher": [], "options": { "shell": { @@ -17,7 +17,7 @@ "panel": "dedicated", "clear": true }, - "detail": "Sources NVM, uses Node v20, then builds the enhanced package." + "detail": "Sources NVM, uses Node v24, then builds the enhanced package." } ] } diff --git a/AGENTS.md b/AGENTS.md index 6308311818c..ec49d591537 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -21,7 +21,7 @@ If prose docs conflict with workflows (for example `README.md` or `CONTRIBUTING. ## Environment Parity -- Node.js: `20` (from `.nvmrc` and workflow setup) +- Node.js: `24` (from `.nvmrc` and workflow setup) - pnpm: `10.28.0` (from `package.json` `packageManager`) - Package manager: pnpm only diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e89cc8555d9..f92d287df70 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,15 +23,15 @@ Thank you for your interest in contributing to Module Federation! Before startin ### Install Node.js -We recommend using Node.js 20 LTS. Check your Node.js version with `node -v`. +We recommend using Node.js 24 LTS. Check your Node.js version with `node -v`. To install Node.js, use [nvm](https://github.com/nvm-sh/nvm) or [fnm](https://github.com/Schniz/fnm): ```bash -# Install Node.js 20 LTS -nvm install 20 --lts -nvm alias default 20 -nvm use 20 +# Install Node.js 24 LTS +nvm install 24 --lts +nvm alias default 24 +nvm use 24 ``` ### Install Dependencies diff --git a/README.md b/README.md index 4d43d56612d..7b8e7e1b71d 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,24 @@ Come and chat with us on [Discussions](https://github.com/module-federation/univ Please read the [Contributing Guide](https://github.com/module-federation/core/blob/main/CONTRIBUTING.md). +### Node.js support + +Working on this repository requires Node.js 24 and pnpm 10.28.0. The repository's +development, test, build, and release workflows run on Node.js 24. + +Published packages that execute in Node.js, including build plugins, command-line +tools, type generation, workers, and server-side runtime code, remain compatible +with Node.js 20.19.5. CI builds the packages on Node.js 24, installs the resulting +package tarballs in a clean Node.js 20.19.5 project, and verifies their CommonJS, +ES module, command-line, and type entry points. The clean TypeScript project is +also built with both Webpack and Rspack, and the resulting Node.js bundles are +executed on Node.js 20.19.5. + +Browser runtime compatibility is defined by the browser build targets rather than +the Node.js version used to maintain this repository. Node.js 20 compatibility is +provided for legacy consumers even though Node.js 20 no longer receives upstream +maintenance. + ![Alt](https://repobeats.axiom.co/api/embed/856dc1d4a6965d225232b1bd2da5d54549dc169e.svg 'Repobeats analytics image') ## 🙌 Code of Conduct diff --git a/apps/3000-home/cypress/tsconfig.json b/apps/3000-home/cypress/tsconfig.json index 0285a6e4c66..2a308b20964 100644 --- a/apps/3000-home/cypress/tsconfig.json +++ b/apps/3000-home/cypress/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../tsconfig.json", "compilerOptions": { "allowJs": true, - "outDir": "../../dist/out-tsc", "module": "commonjs", "types": ["cypress", "node"], "sourceMap": false diff --git a/apps/3001-shop/cypress/tsconfig.json b/apps/3001-shop/cypress/tsconfig.json index 0285a6e4c66..2a308b20964 100644 --- a/apps/3001-shop/cypress/tsconfig.json +++ b/apps/3001-shop/cypress/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../tsconfig.json", "compilerOptions": { "allowJs": true, - "outDir": "../../dist/out-tsc", "module": "commonjs", "types": ["cypress", "node"], "sourceMap": false diff --git a/apps/3002-checkout/cypress/tsconfig.json b/apps/3002-checkout/cypress/tsconfig.json index 0285a6e4c66..2a308b20964 100644 --- a/apps/3002-checkout/cypress/tsconfig.json +++ b/apps/3002-checkout/cypress/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../tsconfig.json", "compilerOptions": { "allowJs": true, - "outDir": "../../dist/out-tsc", "module": "commonjs", "types": ["cypress", "node"], "sourceMap": false diff --git a/apps/bridge-ssr-demo/.gitignore b/apps/bridge-ssr-demo/.gitignore new file mode 100644 index 00000000000..a7fe3c62b30 --- /dev/null +++ b/apps/bridge-ssr-demo/.gitignore @@ -0,0 +1,3 @@ +**/dist-vite/ +**/test-results/ +**/playwright-report/ diff --git a/apps/bridge-ssr-demo/README.md b/apps/bridge-ssr-demo/README.md new file mode 100644 index 00000000000..0cade160d2e --- /dev/null +++ b/apps/bridge-ssr-demo/README.md @@ -0,0 +1,24 @@ +# Bridge SSR V1 acceptance demo + +This focused demo proves buffered, application-level Bridge SSR in both cross-framework directions: + +- React 18 host → Vue 3 remote +- Vue 3 host → React 18 remote + +The server host calls `renderRemoteBridge` and passes the complete result to its remote component. That component emits a single instance-scoped document slot which owns the remote HTML and dehydrated state. The host hydration JSON contains only a versioned identity reference, so the remote HTML is transferred once. + +Before React `hydrateRoot` or the Vue host mount, the client creates a hydration registry from the document and installs it through the framework adapter. The reference resolves a validated snapshot from that registry. Successful hydration consumes the snapshot once; a later SPA revisit uses CSR. A missing slot also uses CSR, while malformed, duplicate, or identity-conflicting slots surface contextual errors. + +Client and Node builds expose the same `./export-app` key from different source files. Preparation and the framework server renderer stay in the Node graph; hydration mapping stays browser-safe. + +Run from the repository root: + +```bash +pnpm run e2e:bridge:ssr +pnpm run e2e:bridge:ssr:production +pnpm run e2e:bridge:ssr:vite-smoke +``` + +Rsbuild development and production are required. The Vite command is a non-blocking React-host → Vue-remote smoke proof. The suites cover raw HTML, single-copy transport, hydration, deep routes, host and remote navigation, CSR revisits after consumption, multiple independent instances, browser/server error monitoring, and exclusion of server-only renderers and preparation from browser bundles. + +React Router v6 remotes use the strict `router-v6` alias in browser and Node builds; the browser bundle checks are release gates, not documentation-only guidance. Assets and head management, response status/headers, shared fallbacks and timeouts, data routers, streaming, and additional framework adapters are intentionally outside V1. Without a host-owned wrapper, a slow or broken remote can delay or fail the host response. diff --git a/apps/bridge-ssr-demo/host-vue/package.json b/apps/bridge-ssr-demo/host-vue/package.json new file mode 100644 index 00000000000..50dd19c626d --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/package.json @@ -0,0 +1,31 @@ +{ + "name": "bridge-ssr-host-vue", + "private": true, + "version": "0.0.1", + "scripts": { + "dev": "NODE_OPTIONS=--experimental-vm-modules node ./server.mjs", + "build": "rsbuild build", + "serve:production": "NODE_OPTIONS=--experimental-vm-modules BRIDGE_SSR_MODE=production node ./server.mjs", + "e2e:ssr:ci": "node ../../../scripts/ensure-playwright.js && playwright test --config playwright.config.ts --reporter=line" + }, + "dependencies": { + "@module-federation/bridge-react": "workspace:*", + "@module-federation/bridge-shared": "workspace:*", + "@module-federation/bridge-vue3": "workspace:*", + "@module-federation/enhanced": "workspace:*", + "@module-federation/runtime": "workspace:*", + "@vue/server-renderer": "^3.5.30", + "express": "^4.21.2", + "react": "18.3.1", + "react-dom": "18.3.1", + "vue": "^3.5.30", + "vue-router": "4.4.5" + }, + "devDependencies": { + "@module-federation/rsbuild-plugin": "workspace:*", + "@playwright/test": "1.57.0", + "@rsbuild/core": "1.7.3", + "@rsbuild/plugin-vue": "^1.2.6", + "typescript": "~5.0.4" + } +} diff --git a/apps/bridge-ssr-demo/host-vue/playwright.config.ts b/apps/bridge-ssr-demo/host-vue/playwright.config.ts new file mode 100644 index 00000000000..db2de20c99a --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/playwright.config.ts @@ -0,0 +1,25 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: '../host/e2e', + timeout: 60_000, + fullyParallel: false, + retries: process.env.CI ? 2 : 0, + workers: 1, + use: { + baseURL: process.env.BRIDGE_SSR_VUE_BASE_URL ?? 'http://localhost:2303', + trace: 'on-first-retry', + ...devices['Desktop Chrome'], + }, + projects: [ + { + name: 'vue-host-nojs', + testMatch: /bridge-ssr-nojs\.spec\.ts/, + use: { javaScriptEnabled: false }, + }, + { + name: 'vue-host-browser', + testMatch: /bridge-ssr-browser\.spec\.ts/, + }, + ], +}); diff --git a/apps/bridge-ssr-demo/host-vue/rsbuild.config.ts b/apps/bridge-ssr-demo/host-vue/rsbuild.config.ts new file mode 100644 index 00000000000..318329e9621 --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/rsbuild.config.ts @@ -0,0 +1,49 @@ +import { defineConfig } from '@rsbuild/core'; +import { pluginVue } from '@rsbuild/plugin-vue'; +import { pluginModuleFederation } from '@module-federation/rsbuild-plugin'; +import { + bridgeSsrHostUrl, + bridgeSsrRemotePort, + bridgeSsrServerManifestPath, +} from '../shared/devHost'; + +const reactOrigin = bridgeSsrHostUrl(bridgeSsrRemotePort('react')); +const webRemotes = { + bridge_ssr_react: `bridge_ssr_react@${reactOrigin}/mf-manifest.json`, +}; +const ssrRemotes = { + bridge_ssr_react: `bridge_ssr_react@${reactOrigin}/${bridgeSsrServerManifestPath}`, +}; +const shared = { + vue: { singleton: true, eager: true }, + 'vue-router': { singleton: true, eager: true }, + react: { singleton: true, eager: true }, + 'react-dom': { singleton: true, eager: true }, +}; + +export default defineConfig({ + performance: { buildCache: false }, + server: { port: 2303, cors: true, middlewareMode: true }, + environments: { + client: { + source: { entry: { index: './src/entry.client.ts' } }, + html: { template: './src/index.html' }, + output: { distPath: { root: 'dist' } }, + }, + ssr: { + source: { entry: { index: './src/entry.server.ts' } }, + output: { target: 'node', distPath: { root: 'dist/ssr' } }, + }, + }, + plugins: [ + pluginVue(), + pluginModuleFederation( + { name: 'bridge_ssr_vue_host', remotes: webRemotes, shared }, + { environment: 'client' }, + ), + pluginModuleFederation( + { name: 'bridge_ssr_vue_host', remotes: ssrRemotes, shared }, + { target: 'node', environment: 'ssr' }, + ), + ], +}); diff --git a/apps/bridge-ssr-demo/host-vue/server.mjs b/apps/bridge-ssr-demo/host-vue/server.mjs new file mode 100644 index 00000000000..69bf42e65b0 --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/server.mjs @@ -0,0 +1,11 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { startBridgeHost } from '../shared/createHostServer.mjs'; + +const rootDir = path.dirname(fileURLToPath(import.meta.url)); +startBridgeHost({ rootDir, port: 2303, label: 'bridge-ssr-vue-host' }).catch( + (error) => { + console.error('[bridge-ssr-vue-host] failed:', error); + process.exitCode = 1; + }, +); diff --git a/apps/bridge-ssr-demo/host-vue/src/App.vue b/apps/bridge-ssr-demo/host-vue/src/App.vue new file mode 100644 index 00000000000..7df3e1cc223 --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/src/App.vue @@ -0,0 +1,76 @@ + + + diff --git a/apps/bridge-ssr-demo/host-vue/src/entry.client.ts b/apps/bridge-ssr-demo/host-vue/src/entry.client.ts new file mode 100644 index 00000000000..3d95da30f37 --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/src/entry.client.ts @@ -0,0 +1,16 @@ +import { createSSRApp } from 'vue'; +import { createRouter, createWebHistory } from 'vue-router'; +import { createBridgeHydrationRegistry } from '@module-federation/bridge-shared'; +import { provideBridgeHydrationRegistry } from '@module-federation/bridge-vue3'; +import App from './App.vue'; +import { readHostSSRContext } from './ssrContext'; + +const router = createRouter({ + history: createWebHistory(), + routes: [{ path: '/:pathMatch(.*)*', component: App }], +}); +const app = createSSRApp(App, { ssrContext: readHostSSRContext() }); +app.use(router); +provideBridgeHydrationRegistry(app, createBridgeHydrationRegistry(document)); +await router.isReady(); +app.mount('#root'); diff --git a/apps/bridge-ssr-demo/host-vue/src/entry.server.ts b/apps/bridge-ssr-demo/host-vue/src/entry.server.ts new file mode 100644 index 00000000000..818631b00e9 --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/src/entry.server.ts @@ -0,0 +1,34 @@ +import { createSSRApp } from 'vue'; +import { renderToString } from '@vue/server-renderer'; +import { createMemoryHistory, createRouter } from 'vue-router'; +import App from './App.vue'; +import { toHostHydrationContext } from './ssrContext'; +import { + prepareSSRContext, + type PrepareSSRContextOptions, +} from './prepareSSRContext'; + +async function createHostApp(url: string, options: PrepareSSRContextOptions) { + const ssrContext = await prepareSSRContext(url, options); + const router = createRouter({ + history: createMemoryHistory(), + routes: [{ path: '/:pathMatch(.*)*', component: App }], + }); + await router.push(url); + await router.isReady(); + const app = createSSRApp(App, { ssrContext }); + app.use(router); + return { app, ssrContext }; +} + +export async function render( + url: string, + options: PrepareSSRContextOptions = {}, +) { + const { app, ssrContext } = await createHostApp(url, options); + return { + html: await renderToString(app), + ssrContext, + hydrationContext: toHostHydrationContext(ssrContext), + }; +} diff --git a/apps/bridge-ssr-demo/host-vue/src/env.d.ts b/apps/bridge-ssr-demo/host-vue/src/env.d.ts new file mode 100644 index 00000000000..c736914276c --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/src/env.d.ts @@ -0,0 +1,4 @@ +/// + +declare module 'bridge_ssr_react/export-app'; +declare module 'bridge_ssr_vue/export-app'; diff --git a/apps/bridge-ssr-demo/host-vue/src/index.html b/apps/bridge-ssr-demo/host-vue/src/index.html new file mode 100644 index 00000000000..edf442c4adf --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/src/index.html @@ -0,0 +1,11 @@ + + + + + + Bridge SSR Vue Host + + +
+ + diff --git a/apps/bridge-ssr-demo/host-vue/src/prepareSSRContext.ts b/apps/bridge-ssr-demo/host-vue/src/prepareSSRContext.ts new file mode 100644 index 00000000000..97af22acd50 --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/src/prepareSSRContext.ts @@ -0,0 +1,51 @@ +import { getInstance } from '@module-federation/runtime'; +import { renderRemoteBridge } from '@module-federation/bridge-shared'; +import { normalizeBridgeRequestUrl } from '../../host/src/lib/normalizeRequestUrl.mjs'; +import type { HostSSRContext } from './ssrContext'; + +export type PrepareSSRContextOptions = { signal?: AbortSignal }; + +export async function prepareSSRContext( + url: string, + options: PrepareSSRContextOptions = {}, +): Promise { + const requestUrl = normalizeBridgeRequestUrl(url); + const parsed = new URL(requestUrl, 'http://bridge-ssr.local'); + const context: HostSSRContext = { url: requestUrl }; + const instance = getInstance(); + if (!instance) + throw new Error('Module Federation runtime is not initialized'); + const request = new Request(parsed, { signal: options.signal }); + + const renderReact = ( + instanceId: string, + basename: string, + name: string, + age: number, + ) => + renderRemoteBridge({ + loader: () => + instance.loadRemote>( + 'bridge_ssr_react/export-app', + ), + moduleName: 'bridge_ssr_react', + instanceId, + request, + props: { basename, name, age }, + }); + + if (parsed.pathname.startsWith('/react-pair')) { + context.reactPair = await Promise.all([ + renderReact('react-pair-left', '/react-pair', 'Left', 1), + renderReact('react-pair-right', '/react-pair', 'Right', 2), + ]); + } else if (parsed.pathname.startsWith('/react-remote')) { + context.reactRemote = await renderReact( + 'react-primary', + '/react-remote', + 'Ming', + 12, + ); + } + return context; +} diff --git a/apps/bridge-ssr-demo/host-vue/src/remoteApps.ts b/apps/bridge-ssr-demo/host-vue/src/remoteApps.ts new file mode 100644 index 00000000000..0ffa9858501 --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/src/remoteApps.ts @@ -0,0 +1,5 @@ +import { createRemoteAppComponent } from '@module-federation/bridge-vue3'; + +export const RemoteReactApp = createRemoteAppComponent({ + loader: () => import('bridge_ssr_react/export-app'), +}); diff --git a/apps/bridge-ssr-demo/host-vue/src/ssrContext.ts b/apps/bridge-ssr-demo/host-vue/src/ssrContext.ts new file mode 100644 index 00000000000..b6a605f44d7 --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/src/ssrContext.ts @@ -0,0 +1,57 @@ +import { + assertBridgeSSRReference, + toBridgeSSRReference, + type BridgeSSRReference, + type BridgeSSRResult, +} from '@module-federation/bridge-shared'; + +export type RemoteSSRData = BridgeSSRResult | BridgeSSRReference; + +export type HostSSRContext = { + url: string; + reactRemote?: RemoteSSRData; + reactPair?: [RemoteSSRData, RemoteSSRData]; +}; + +export type HostHydrationContext = { + url: string; + reactRemote?: BridgeSSRReference; + reactPair?: [BridgeSSRReference, BridgeSSRReference]; +}; + +function toReference(data: RemoteSSRData): BridgeSSRReference { + if ('html' in data) return toBridgeSSRReference(data); + assertBridgeSSRReference(data); + return data; +} + +export function toHostHydrationContext( + context: HostSSRContext, +): HostHydrationContext { + return { + url: context.url, + ...(context.reactRemote + ? { reactRemote: toReference(context.reactRemote) } + : {}), + ...(context.reactPair + ? { + reactPair: context.reactPair.map(toReference) as [ + BridgeSSRReference, + BridgeSSRReference, + ], + } + : {}), + }; +} + +export const HOST_SSR_CONTEXT_SCRIPT_ID = 'bridge-ssr-host-context'; + +export function readHostSSRContext() { + const script = document.getElementById(HOST_SSR_CONTEXT_SCRIPT_ID); + if (!script?.textContent) return undefined; + try { + return JSON.parse(script.textContent) as HostHydrationContext; + } catch { + return undefined; + } +} diff --git a/apps/bridge-ssr-demo/host-vue/tsconfig.json b/apps/bridge-ssr-demo/host-vue/tsconfig.json new file mode 100644 index 00000000000..8a26c51abfb --- /dev/null +++ b/apps/bridge-ssr-demo/host-vue/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "strict": true, + "skipLibCheck": true, + "allowJs": true, + "types": ["node"] + }, + "include": ["src", "rsbuild.config.ts", "playwright.config.ts"] +} diff --git a/apps/bridge-ssr-demo/host/e2e/bridge-ssr-browser.spec.ts b/apps/bridge-ssr-demo/host/e2e/bridge-ssr-browser.spec.ts new file mode 100644 index 00000000000..be739f4e1e5 --- /dev/null +++ b/apps/bridge-ssr-demo/host/e2e/bridge-ssr-browser.spec.ts @@ -0,0 +1,118 @@ +import { expect, test } from './fixtures'; + +const direction = (projectName: string) => + projectName.startsWith('vue-host') + ? { + route: '/react-remote', + detail: '/react-remote/detail', + homeHeading: 'React Remote Home', + detailHeading: 'React Remote Detail', + counter: '.react-remote-counter', + detailLink: '.react-remote-detail-link', + hostLink: '.host-react-remote-link', + } + : { + route: '/vue-remote', + detail: '/vue-remote/detail', + homeHeading: 'Vue Remote Home', + detailHeading: 'Vue Remote Detail', + counter: '.vue-remote-counter', + detailLink: '.vue-remote-detail-link', + hostLink: '.host-vue-remote-link', + }; + +test('hydrates the direct SSR island and remains interactive', async ({ + page, +}, testInfo) => { + const remote = direction(testInfo.project.name); + await page.goto(remote.route); + await expect( + page.getByRole('heading', { name: remote.homeHeading }), + ).toBeVisible(); + const mount = page.locator('[data-mf-bridge-ssr="true"]'); + await expect(mount).toHaveCount(1); + const counter = page.locator(remote.counter); + await counter.click(); + await expect(counter).toHaveText(/Count: 1/); +}); + +test('server-renders a deep route and remote navigation updates the URL', async ({ + page, +}, testInfo) => { + const remote = direction(testInfo.project.name); + await page.goto(`${remote.detail}?source=e2e#bridge-state`); + await expect(page).toHaveURL( + new RegExp(`${remote.detail}\\?source=e2e#bridge-state$`), + ); + await expect( + page.getByRole('heading', { name: remote.detailHeading }), + ).toBeVisible(); + await page.goto(remote.route); + await page.locator(remote.detailLink).click(); + await expect(page).toHaveURL(new RegExp(`${remote.detail}$`)); + await expect( + page.getByRole('heading', { name: remote.detailHeading }), + ).toBeVisible(); +}); + +test('host navigation enters, leaves, and returns through CSR without reload', async ({ + page, +}, testInfo) => { + const remote = direction(testInfo.project.name); + await page.goto('/'); + await page.evaluate(() => { + ( + window as Window & { __navigationSentinel?: string } + ).__navigationSentinel = 'alive'; + }); + await page.locator(remote.hostLink).first().click(); + await expect( + page.getByRole('heading', { name: remote.homeHeading }), + ).toBeVisible(); + await page.getByRole('link', { name: 'Home' }).first().click(); + await expect(page).toHaveURL(/\/$/); + await page.locator(remote.hostLink).first().click(); + await expect( + page.getByRole('heading', { name: remote.homeHeading }), + ).toBeVisible(); + await expect + .poll(() => page.evaluate(() => (window as any).__navigationSentinel)) + .toBe('alive'); +}); + +test('consumes direct-visit SSR once and revisits through CSR', async ({ + page, +}, testInfo) => { + const remote = direction(testInfo.project.name); + await page.goto(remote.route); + await expect(page.locator('[data-mf-bridge-ssr="true"]')).toHaveCount(1); + await expect( + page.getByRole('heading', { name: remote.homeHeading }), + ).toBeVisible(); + + await page.getByRole('link', { name: 'Home' }).first().click(); + await page.locator(remote.hostLink).first().click(); + await expect( + page.getByRole('heading', { name: remote.homeHeading }), + ).toBeVisible(); + await expect(page.locator('[data-mf-bridge-ssr="true"]')).toHaveCount(0); +}); + +test('two instances of one React remote hydrate independently', async ({ + page, +}, testInfo) => { + test.skip(!testInfo.project.name.startsWith('vue-host')); + await page.goto('/react-pair'); + const mounts = page.locator('[data-mf-bridge-ssr="true"]'); + await expect(mounts).toHaveCount(2); + const ids = await mounts.evaluateAll((nodes) => + nodes.map((node) => node.getAttribute('data-mf-bridge-instance')), + ); + expect(new Set(ids).size).toBe(2); + const counters = page.locator('.react-remote-counter'); + await counters.nth(0).click(); + await expect(counters.nth(0)).toHaveText('Count: 1'); + await expect(counters.nth(1)).toHaveText('Count: 0'); + await expect(page.getByText('name: Left, age: 1')).toBeVisible(); + await expect(page.getByText('name: Right, age: 2')).toBeVisible(); +}); diff --git a/apps/bridge-ssr-demo/host/e2e/bridge-ssr-nojs.spec.ts b/apps/bridge-ssr-demo/host/e2e/bridge-ssr-nojs.spec.ts new file mode 100644 index 00000000000..db31282b8c9 --- /dev/null +++ b/apps/bridge-ssr-demo/host/e2e/bridge-ssr-nojs.spec.ts @@ -0,0 +1,30 @@ +import { expect, test } from '@playwright/test'; + +test('raw response contains the cross-framework remote route', async ({ + page, + request, +}, testInfo) => { + const vueHost = testInfo.project.name.startsWith('vue-host'); + const route = vueHost ? '/react-remote/detail' : '/vue-remote/detail'; + const heading = vueHost ? 'React Remote Detail' : 'Vue Remote Detail'; + const response = await request.get(route); + const html = await response.text(); + expect(response.ok()).toBeTruthy(); + expect(html).toContain(heading); + expect(html).toContain('data-mf-bridge-ssr="true"'); + expect(html).toContain('data-mf-bridge-slot="true"'); + expect(html).toContain('data-mf-bridge-state="true"'); + expect(html).toContain('bridge-ssr-host-context'); + expect(html.match(new RegExp(heading, 'g'))).toHaveLength(1); + + const contextMatch = html.match( + / diff --git a/apps/bridge-ssr-demo/remote-vue/src/export-app.server.ts b/apps/bridge-ssr-demo/remote-vue/src/export-app.server.ts new file mode 100644 index 00000000000..c90e02a653d --- /dev/null +++ b/apps/bridge-ssr-demo/remote-vue/src/export-app.server.ts @@ -0,0 +1,32 @@ +import App from './RemoteVueApplication.vue'; +import { createBridgeComponent } from '@module-federation/bridge-vue3'; +import { createMemoryHistory, createRouter } from 'vue-router'; +import Home from './pages/Home.vue'; +import Detail from './pages/Detail.vue'; + +export default createBridgeComponent({ + rootComponent: App, + appOptions: () => ({ + router: createRouter({ + history: createMemoryHistory(), + routes: [ + { path: '/', component: Home }, + { path: '/detail', component: Detail }, + ], + }), + }), + ssr: { + prepare(context) { + const props = context.props as { test?: string; basename?: string }; + return { + props: { + ...(typeof props.test === 'string' ? { test: props.test } : {}), + ...(typeof props.basename === 'string' + ? { basename: props.basename } + : {}), + }, + dehydratedState: { test: props.test ?? null }, + }; + }, + }, +}); diff --git a/apps/bridge-ssr-demo/remote-vue/src/export-app.ts b/apps/bridge-ssr-demo/remote-vue/src/export-app.ts new file mode 100644 index 00000000000..fcb14c40b0c --- /dev/null +++ b/apps/bridge-ssr-demo/remote-vue/src/export-app.ts @@ -0,0 +1,26 @@ +import App from './RemoteVueApplication.vue'; +import { createBridgeComponent } from '@module-federation/bridge-vue3'; +import { createRouter, createWebHistory } from 'vue-router'; +import Home from './pages/Home.vue'; +import Detail from './pages/Detail.vue'; + +export default createBridgeComponent({ + rootComponent: App, + appOptions: () => ({ + router: createRouter({ + history: createWebHistory(), + routes: [ + { path: '/', component: Home }, + { path: '/detail', component: Detail }, + ], + }), + }), + ssr: { + hydrate(state) { + if (!state || Array.isArray(state) || typeof state !== 'object') + return {}; + const test = (state as Record).test; + return typeof test === 'string' ? { test } : {}; + }, + }, +}); diff --git a/apps/bridge-ssr-demo/remote-vue/src/index.html b/apps/bridge-ssr-demo/remote-vue/src/index.html new file mode 100644 index 00000000000..c7fe0adc4c3 --- /dev/null +++ b/apps/bridge-ssr-demo/remote-vue/src/index.html @@ -0,0 +1,11 @@ + + + + + + Bridge SSR Vue Remote + + +
+ + diff --git a/apps/bridge-ssr-demo/remote-vue/src/pages/Detail.vue b/apps/bridge-ssr-demo/remote-vue/src/pages/Detail.vue new file mode 100644 index 00000000000..2e05e520e52 --- /dev/null +++ b/apps/bridge-ssr-demo/remote-vue/src/pages/Detail.vue @@ -0,0 +1,6 @@ + diff --git a/apps/bridge-ssr-demo/remote-vue/src/pages/Home.vue b/apps/bridge-ssr-demo/remote-vue/src/pages/Home.vue new file mode 100644 index 00000000000..8373d64d00d --- /dev/null +++ b/apps/bridge-ssr-demo/remote-vue/src/pages/Home.vue @@ -0,0 +1,16 @@ + + + diff --git a/apps/bridge-ssr-demo/remote-vue/src/ssr-env.ts b/apps/bridge-ssr-demo/remote-vue/src/ssr-env.ts new file mode 100644 index 00000000000..ffee3d7483a --- /dev/null +++ b/apps/bridge-ssr-demo/remote-vue/src/ssr-env.ts @@ -0,0 +1,6 @@ +/** + * Node MF environment entry for the Vue remote. + * Rsbuild builds this to dist/ssr/ for the host to consume via + * bridge_ssr_vue@/ssr/mf-manifest.json at request time. + */ +export {}; diff --git a/apps/bridge-ssr-demo/remote-vue/src/standalone.ts b/apps/bridge-ssr-demo/remote-vue/src/standalone.ts new file mode 100644 index 00000000000..4f6adaaeb2d --- /dev/null +++ b/apps/bridge-ssr-demo/remote-vue/src/standalone.ts @@ -0,0 +1,15 @@ +import { createApp } from 'vue'; +import App from './RemoteVueApplication.vue'; +import { createRouter, createWebHistory } from 'vue-router'; +import Home from './pages/Home.vue'; +import Detail from './pages/Detail.vue'; + +const router = createRouter({ + history: createWebHistory(), + routes: [ + { path: '/', component: Home }, + { path: '/detail', component: Detail }, + ], +}); + +createApp(App).use(router).mount('#root'); diff --git a/apps/bridge-ssr-demo/remote-vue/tsconfig.json b/apps/bridge-ssr-demo/remote-vue/tsconfig.json new file mode 100644 index 00000000000..ac97d6272cc --- /dev/null +++ b/apps/bridge-ssr-demo/remote-vue/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "jsx": "preserve", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["src", "rsbuild.config.ts"] +} diff --git a/apps/bridge-ssr-demo/remote-vue/vite.config.mts b/apps/bridge-ssr-demo/remote-vue/vite.config.mts new file mode 100644 index 00000000000..3e7ba50bbd4 --- /dev/null +++ b/apps/bridge-ssr-demo/remote-vue/vite.config.mts @@ -0,0 +1,51 @@ +import { federation } from '@module-federation/vite'; +import vue from '@vitejs/plugin-vue'; +import { defineConfig } from 'vite'; +import path from 'node:path'; +import { bridgeSsrHostUrl } from '../shared/devHost'; + +const isSSR = process.env.BRIDGE_VITE_SSR === 'true'; +const remoteOrigin = bridgeSsrHostUrl(2402); + +export default defineConfig({ + plugins: [ + vue(), + federation({ + name: 'bridge_ssr_vue', + filename: 'remoteEntry.js', + exposes: { + './export-app': isSSR + ? './src/export-app.server.ts' + : './src/export-app.ts', + }, + shared: isSSR + ? {} + : { + vue: { singleton: true }, + 'vue-router': { singleton: true }, + }, + manifest: true, + dts: false, + target: isSSR ? 'node' : 'web', + getPublicPath: `return '${remoteOrigin}${isSSR ? '/ssr' : ''}/'`, + }), + ], + server: { + origin: remoteOrigin, + port: 2402, + }, + build: { + outDir: isSSR ? 'dist-vite/ssr' : 'dist-vite', + emptyOutDir: !isSSR, + target: isSSR ? 'node20' : 'es2020', + ssr: isSSR ? './src/ssr-env.ts' : undefined, + rollupOptions: isSSR + ? undefined + : { + input: path.resolve(__dirname, 'src/standalone.ts'), + }, + }, + ssr: { + noExternal: true, + }, +}); diff --git a/apps/bridge-ssr-demo/shared/createHostServer.mjs b/apps/bridge-ssr-demo/shared/createHostServer.mjs new file mode 100644 index 00000000000..cb81f843efb --- /dev/null +++ b/apps/bridge-ssr-demo/shared/createHostServer.mjs @@ -0,0 +1,108 @@ +import express from 'express'; +import { createRsbuild, loadConfig } from '@rsbuild/core'; +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { pathToFileURL } from 'node:url'; +import { serializeBridgeJSON } from '@module-federation/bridge-shared/dist/index.es.js'; + +const shouldRender = (url) => { + if (url.startsWith('/@') || url.startsWith('/__rsbuild')) return false; + const pathname = url.split('?')[0]; + return !pathname.includes('.') || pathname.endsWith('.html'); +}; + +function assembleDocument(template, html, ssrContext) { + const marker = ''; + if (!template.includes(marker)) { + throw new Error(`Bridge SSR host template is missing ${marker}`); + } + const payload = ``; + return template.replace(marker, html).replace('', `${payload}`); +} + +function registerSSRRoute(app, getBundle, getTemplate, label) { + app.get('*', async (req, res, next) => { + if (!shouldRender(req.originalUrl)) return next(); + const controller = new AbortController(); + const disconnect = () => controller.abort(new Error('Client disconnected')); + req.once('aborted', disconnect); + try { + const [bundle, template] = await Promise.all([ + getBundle(), + getTemplate(), + ]); + const rendered = await bundle.render(req.originalUrl, { + signal: controller.signal, + }); + if (controller.signal.aborted) return; + res + .status(200) + .type('html') + .set('Cache-Control', 'no-store') + .send( + assembleDocument(template, rendered.html, rendered.hydrationContext), + ); + } catch (error) { + if (!controller.signal.aborted) { + console.error(`[${label}] SSR request failed`, error, error?.cause); + next(error); + } + } finally { + req.off('aborted', disconnect); + } + }); +} + +export async function startBridgeHost({ rootDir, port, label }) { + const host = + process.env.HOST ?? process.env.BRIDGE_SSR_DEV_HOST ?? 'localhost'; + const app = express(); + if (process.env.BRIDGE_SSR_MODE === 'production') { + const dist = path.join(rootDir, 'dist'); + const template = await readFile(path.join(dist, 'index.html'), 'utf8'); + const imported = await import( + `${pathToFileURL(path.join(dist, 'ssr', 'index.js')).href}?${Date.now()}` + ); + registerSSRRoute( + app, + async () => imported.default ?? imported, + async () => template, + label, + ); + app.use(express.static(dist)); + } else { + const { content } = await loadConfig({ cwd: rootDir }); + const rsbuild = await createRsbuild({ + cwd: rootDir, + rsbuildConfig: content, + }); + const server = await rsbuild.createDevServer(); + let bundlePromise; + const getBundle = () => { + bundlePromise ??= server.environments.ssr + .loadBundle('index') + .catch((error) => { + bundlePromise = undefined; + throw error; + }); + return bundlePromise; + }; + registerSSRRoute( + app, + getBundle, + () => server.environments.client.getTransformedHtml('index'), + label, + ); + app.use(server.middlewares); + const httpServer = app.listen(port, host, async () => { + await server.afterListen(); + console.log(`[${label}] ready at http://${host}:${port}`); + }); + server.connectWebSocket({ server: httpServer }); + return; + } + + app.listen(port, host, () => { + console.log(`[${label}] production ready at http://${host}:${port}`); + }); +} diff --git a/apps/bridge-ssr-demo/shared/devHost.ts b/apps/bridge-ssr-demo/shared/devHost.ts new file mode 100644 index 00000000000..b5aefe9ca6f --- /dev/null +++ b/apps/bridge-ssr-demo/shared/devHost.ts @@ -0,0 +1,17 @@ +export const BRIDGE_SSR_DEV_HOST = + process.env.BRIDGE_SSR_DEV_HOST ?? 'localhost'; + +export const BRIDGE_SSR_REMOTE_BUNDLER = + process.env.BRIDGE_SSR_REMOTE_BUNDLER === 'vite' ? 'vite' : 'rsbuild'; + +export const bridgeSsrRemotePort = (framework: 'react' | 'vue') => { + if (BRIDGE_SSR_REMOTE_BUNDLER === 'vite') { + return framework === 'react' ? 2401 : 2402; + } + return framework === 'react' ? 2301 : 2302; +}; + +export const bridgeSsrServerManifestPath = 'ssr/mf-manifest.json'; + +export const bridgeSsrHostUrl = (port: number) => + `http://${BRIDGE_SSR_DEV_HOST}:${port}`; diff --git a/apps/bridge-ssr-demo/shared/package.json b/apps/bridge-ssr-demo/shared/package.json new file mode 100644 index 00000000000..99cc4bbc4db --- /dev/null +++ b/apps/bridge-ssr-demo/shared/package.json @@ -0,0 +1,11 @@ +{ + "name": "bridge-ssr-demo-shared", + "private": true, + "version": "0.0.1", + "type": "module", + "dependencies": { + "@module-federation/bridge-shared": "workspace:*", + "@rsbuild/core": "1.7.3", + "express": "^4.21.2" + } +} diff --git a/apps/bridge-ssr-demo/shared/pluginServeSsrDist.ts b/apps/bridge-ssr-demo/shared/pluginServeSsrDist.ts new file mode 100644 index 00000000000..fa6c1f40146 --- /dev/null +++ b/apps/bridge-ssr-demo/shared/pluginServeSsrDist.ts @@ -0,0 +1,63 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import type { RsbuildPlugin } from '@rsbuild/core'; + +function getContentType(filePath: string) { + if (filePath.endsWith('.json')) { + return 'application/json'; + } + if (filePath.endsWith('.js')) { + return 'application/javascript'; + } + if (filePath.endsWith('.map')) { + return 'application/json'; + } + return 'application/octet-stream'; +} + +export function pluginServeSsrDist(rootDir = process.cwd()): RsbuildPlugin { + const ssrDir = path.join(rootDir, 'dist', 'ssr'); + + return { + name: 'plugin-serve-ssr-dist', + setup(api) { + api.modifyRsbuildConfig((config) => { + config.dev ??= {}; + const previous = config.dev.setupMiddlewares; + + config.dev.setupMiddlewares = (middlewares, server) => { + if (typeof previous === 'function') { + previous(middlewares, server); + } else if (Array.isArray(previous)) { + previous.forEach((setup) => setup(middlewares, server)); + } + + middlewares.unshift((req, res, next) => { + const url = req.url?.split('?')[0] ?? ''; + if (!url.startsWith('/ssr/')) { + next(); + return; + } + + const relativePath = decodeURIComponent(url.slice('/ssr/'.length)); + const filePath = path.join(ssrDir, relativePath); + + if ( + !filePath.startsWith(ssrDir) || + !fs.existsSync(filePath) || + fs.statSync(filePath).isDirectory() + ) { + next(); + return; + } + + res.statusCode = 200; + res.setHeader('Content-Type', getContentType(filePath)); + res.setHeader('Access-Control-Allow-Origin', '*'); + fs.createReadStream(filePath).pipe(res); + }); + }; + }); + }, + }; +} diff --git a/apps/bridge-ssr-demo/shared/routerAlias.ts b/apps/bridge-ssr-demo/shared/routerAlias.ts new file mode 100644 index 00000000000..6ce885d8c98 --- /dev/null +++ b/apps/bridge-ssr-demo/shared/routerAlias.ts @@ -0,0 +1,14 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const directory = path.dirname(fileURLToPath(import.meta.url)); + +export function createBridgeRouterAlias(reactRouterDomPath: string) { + return { + 'react-router-dom$': path.resolve( + directory, + '../../../packages/bridge/bridge-react/dist/router-v6.es.js', + ), + 'react-router-dom/dist/index.js': reactRouterDomPath, + }; +} diff --git a/apps/bridge-ssr-demo/shared/serveDist.mjs b/apps/bridge-ssr-demo/shared/serveDist.mjs new file mode 100644 index 00000000000..292ec4f14fa --- /dev/null +++ b/apps/bridge-ssr-demo/shared/serveDist.mjs @@ -0,0 +1,19 @@ +import express from 'express'; +import path from 'node:path'; + +const [distDir, portValue] = process.argv.slice(2); +const port = Number(portValue); + +if (!distDir || !Number.isInteger(port)) { + throw new Error('Usage: serveDist.mjs '); +} + +const app = express(); +app.use((_req, res, next) => { + res.setHeader('Access-Control-Allow-Origin', '*'); + next(); +}); +app.use(express.static(path.resolve(distDir))); +app.listen(port, process.env.HOST ?? 'localhost', () => { + console.log(`[bridge-ssr-static] serving ${distDir} on port ${port}`); +}); diff --git a/apps/bundle-size/tsconfig.json b/apps/bundle-size/tsconfig.json index f5cbb05134c..654125d29cb 100644 --- a/apps/bundle-size/tsconfig.json +++ b/apps/bundle-size/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": "./", "jsx": "react-jsx", "allowJs": true, "esModuleInterop": true, @@ -14,7 +13,7 @@ "noFallthroughCasesInSwitch": true, "resolveJsonModule": true, "paths": { - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, "files": [], diff --git a/apps/esbuild/package.json b/apps/esbuild/package.json index 8095236089a..975ebd3f93a 100644 --- a/apps/esbuild/package.json +++ b/apps/esbuild/package.json @@ -25,7 +25,7 @@ "esbuild": "^0.28.1", "json5": "^2.2.1", "live-server": "^1.1.0", - "typescript": "^4.8.2" + "typescript": "7.0.2" }, "dependencies": { "react": "^18.3.1", diff --git a/apps/esbuild/tsconfig.json b/apps/esbuild/tsconfig.json index 71bcf4b9317..2174a61a195 100644 --- a/apps/esbuild/tsconfig.json +++ b/apps/esbuild/tsconfig.json @@ -4,11 +4,10 @@ "strict": false, "module": "ES2022", "target": "ES2022", - "moduleResolution": "Node", - "baseUrl": ".", "jsx": "react", "paths": { - "shared-lib": ["libs/shared-lib/index.ts"] + "shared-lib": ["libs/shared-lib/index.ts"], + "*": ["./*"] } } } diff --git a/apps/manifest-demo/webpack-host/cypress/tsconfig.json b/apps/manifest-demo/webpack-host/cypress/tsconfig.json index 0285a6e4c66..2a308b20964 100644 --- a/apps/manifest-demo/webpack-host/cypress/tsconfig.json +++ b/apps/manifest-demo/webpack-host/cypress/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../tsconfig.json", "compilerOptions": { "allowJs": true, - "outDir": "../../dist/out-tsc", "module": "commonjs", "types": ["cypress", "node"], "sourceMap": false diff --git a/apps/metro-example-host/android/settings.gradle b/apps/metro-example-host/android/settings.gradle index 961118a98b2..a26914f76e4 100644 --- a/apps/metro-example-host/android/settings.gradle +++ b/apps/metro-example-host/android/settings.gradle @@ -1,6 +1,7 @@ pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand(['npx', 'rock', 'config', '-p', 'android']) } +def npxCommand = System.getProperty("os.name").toLowerCase().contains("windows") ? "npx.cmd" : "npx" +extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand([npxCommand, 'rock', 'config', '-p', 'android']) } rootProject.name = "MFExampleHost" include ':app' includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/apps/metro-example-host/ios/Podfile b/apps/metro-example-host/ios/Podfile index ed9ba5d996a..5f2264d6890 100644 --- a/apps/metro-example-host/ios/Podfile +++ b/apps/metro-example-host/ios/Podfile @@ -31,5 +31,15 @@ target 'MFExampleHost' do :mac_catalyst_enabled => false, # :ccache_enabled => true ) + + # fmt 11.0.2 fails as C++20 with Apple Clang 21 (Xcode 26.4+). + # Remove after React Native upgrades to fmt 12.1.0 or newer. + installer.pods_project.targets.each do |target| + next unless target.name == 'fmt' + + target.build_configurations.each do |build_config| + build_config.build_settings['CLANG_CXX_LANGUAGE_STANDARD'] = 'c++17' + end + end end end diff --git a/apps/metro-example-host/package.json b/apps/metro-example-host/package.json index 6486cafc058..02dfba8e381 100644 --- a/apps/metro-example-host/package.json +++ b/apps/metro-example-host/package.json @@ -37,11 +37,11 @@ "@react-native/gradle-plugin": "0.80.0", "@react-native/metro-config": "0.80.0", "@react-native/typescript-config": "0.80.0", - "rock": "^0.13.0", - "@rock-js/platform-android": "^0.13.0", - "@rock-js/platform-ios": "^0.13.0", - "@rock-js/plugin-metro": "^0.13.0", - "@rock-js/provider-github": "^0.13.0", + "rock": "^0.14.1", + "@rock-js/platform-android": "^0.14.1", + "@rock-js/platform-ios": "^0.14.1", + "@rock-js/plugin-metro": "^0.14.1", + "@rock-js/provider-github": "^0.14.1", "@types/jest": "^29.5.13", "@types/lodash": "^4", "@types/react": "^19.1.0", @@ -51,7 +51,7 @@ "nodemon": "^3.1.9", "prettier": "2.8.8", "react-test-renderer": "19.1.0", - "typescript": "5.0.4" + "typescript": "7.0.2" }, "engines": { "node": ">=18" diff --git a/apps/metro-example-mini/android/settings.gradle b/apps/metro-example-mini/android/settings.gradle index f4def3c495c..55ca2579229 100644 --- a/apps/metro-example-mini/android/settings.gradle +++ b/apps/metro-example-mini/android/settings.gradle @@ -1,6 +1,7 @@ pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand(['npx', 'rock', 'config', '-p', 'android']) } +def npxCommand = System.getProperty('os.name').toLowerCase().contains('windows') ? 'npx.cmd' : 'npx' +extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand([npxCommand, 'rock', 'config', '-p', 'android']) } rootProject.name = 'mini' include ':app' includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/apps/metro-example-mini/package.json b/apps/metro-example-mini/package.json index fd48f95064e..fb6f9bef2f4 100644 --- a/apps/metro-example-mini/package.json +++ b/apps/metro-example-mini/package.json @@ -35,11 +35,11 @@ "@react-native/eslint-config": "0.80.0", "@react-native/metro-config": "0.80.0", "@react-native/typescript-config": "0.80.0", - "rock": "^0.13.0", - "@rock-js/platform-android": "^0.13.0", - "@rock-js/platform-ios": "^0.13.0", - "@rock-js/plugin-metro": "^0.13.0", - "@rock-js/provider-github": "^0.13.0", + "rock": "^0.14.1", + "@rock-js/platform-android": "^0.14.1", + "@rock-js/platform-ios": "^0.14.1", + "@rock-js/plugin-metro": "^0.14.1", + "@rock-js/provider-github": "^0.14.1", "@types/jest": "^29.5.13", "@types/lodash": "^4", "@types/react": "^19.1.0", @@ -50,7 +50,7 @@ "prettier": "2.8.8", "react-test-renderer": "19.1.0", "serve": "^14.2.4", - "typescript": "5.0.4" + "typescript": "7.0.2" }, "engines": { "node": ">=18" diff --git a/apps/metro-example-nested-mini/package.json b/apps/metro-example-nested-mini/package.json index 37a103e2959..781b70f404c 100644 --- a/apps/metro-example-nested-mini/package.json +++ b/apps/metro-example-nested-mini/package.json @@ -34,11 +34,11 @@ "@react-native/eslint-config": "0.80.0", "@react-native/metro-config": "0.80.0", "@react-native/typescript-config": "0.80.0", - "rock": "^0.13.0", - "@rock-js/platform-android": "^0.13.0", - "@rock-js/platform-ios": "^0.13.0", - "@rock-js/plugin-metro": "^0.13.0", - "@rock-js/provider-github": "^0.13.0", + "rock": "^0.14.1", + "@rock-js/platform-android": "^0.14.1", + "@rock-js/platform-ios": "^0.14.1", + "@rock-js/plugin-metro": "^0.14.1", + "@rock-js/provider-github": "^0.14.1", "@types/jest": "^29.5.13", "@types/lodash": "^4", "@types/react": "^19.1.0", @@ -49,7 +49,7 @@ "prettier": "2.8.8", "react-test-renderer": "19.1.0", "serve": "^14.2.4", - "typescript": "5.0.4" + "typescript": "7.0.2" }, "engines": { "node": ">=18" diff --git a/apps/modern-component-data-fetch/host/modern.config.ts b/apps/modern-component-data-fetch/host/modern.config.ts index 1d3fe4507fc..5423a4a3bf5 100644 --- a/apps/modern-component-data-fetch/host/modern.config.ts +++ b/apps/modern-component-data-fetch/host/modern.config.ts @@ -1,6 +1,8 @@ import { appTools, defineConfig } from '@modern-js/app-tools'; import { moduleFederationPlugin } from '@module-federation/modern-js-v3'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ server: { @@ -9,6 +11,13 @@ export default defineConfig({ }, port: 5001, }, + tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, + }, plugins: [ appTools(), moduleFederationPlugin({ diff --git a/apps/modern-component-data-fetch/host/package.json b/apps/modern-component-data-fetch/host/package.json index 03aef65e42c..1b65723ade7 100644 --- a/apps/modern-component-data-fetch/host/package.json +++ b/apps/modern-component-data-fetch/host/package.json @@ -4,14 +4,14 @@ "version": "0.1.34", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "start": "modern start", - "serve": "modern serve", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", - "inspect": "modern inspect", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", + "inspect": "TS_NODE_COMPILER=typescript-compiler modern inspect", "e2e": "pnpm exec cypress run --project . --e2e --config baseUrl=http://localhost:5001 --browser chrome", "e2e:development": "pnpm exec cypress open --project . --e2e --config baseUrl=http://localhost:5001 --browser electron", "test:e2e": "pnpm --filter modernjs-ssr-data-fetch-host run e2e", @@ -31,7 +31,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "4.24.15", "react": "~18.3.1", @@ -39,16 +39,17 @@ }, "devDependencies": { "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~3.0.2", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/modern-component-data-fetch/host/tsconfig.app.json b/apps/modern-component-data-fetch/host/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/modern-component-data-fetch/host/tsconfig.app.json +++ b/apps/modern-component-data-fetch/host/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/modern-component-data-fetch/host/tsconfig.json b/apps/modern-component-data-fetch/host/tsconfig.json index 26ef0ff0304..365dd790db4 100644 --- a/apps/modern-component-data-fetch/host/tsconfig.json +++ b/apps/modern-component-data-fetch/host/tsconfig.json @@ -3,13 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@shared/*": ["./shared/*"], - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts"], "exclude": ["**/node_modules"] } diff --git a/apps/modern-component-data-fetch/host/tsconfig.spec.json b/apps/modern-component-data-fetch/host/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/modern-component-data-fetch/host/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/modern-component-data-fetch/provider/modern.config.ts b/apps/modern-component-data-fetch/provider/modern.config.ts index 31f086ef587..fd513dfe6c1 100644 --- a/apps/modern-component-data-fetch/provider/modern.config.ts +++ b/apps/modern-component-data-fetch/provider/modern.config.ts @@ -1,6 +1,8 @@ import { appTools, defineConfig } from '@modern-js/app-tools'; import { moduleFederationPlugin } from '@module-federation/modern-js-v3'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ server: { @@ -9,5 +11,12 @@ export default defineConfig({ }, port: 5002, }, + tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, + }, plugins: [appTools(), moduleFederationPlugin()], }); diff --git a/apps/modern-component-data-fetch/provider/package.json b/apps/modern-component-data-fetch/provider/package.json index 55afc46a7a2..8b19850a994 100644 --- a/apps/modern-component-data-fetch/provider/package.json +++ b/apps/modern-component-data-fetch/provider/package.json @@ -4,13 +4,13 @@ "version": "0.1.34", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "start": "modern start", - "serve": "modern serve", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", "e2e": "pnpm exec cypress run --project . --e2e --config baseUrl=http://localhost:4001 --browser chrome", "e2e:development": "pnpm exec cypress open --project . --e2e --config baseUrl=http://localhost:4001 --browser electron", "test:e2e": "pnpm exec concurrently \"lsof -i :8080 || pnpm --filter modernjs-ssr-data-fetch-provider run serve & echo 'done'\" \"sleep 20 && pnpm --filter modernjs-ssr-data-fetch-provider run e2e\"" @@ -29,7 +29,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "4.24.15", "react": "~18.3.1", @@ -37,16 +37,17 @@ }, "devDependencies": { "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~3.0.2", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/modern-component-data-fetch/provider/tsconfig.app.json b/apps/modern-component-data-fetch/provider/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/modern-component-data-fetch/provider/tsconfig.app.json +++ b/apps/modern-component-data-fetch/provider/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/modern-component-data-fetch/provider/tsconfig.json b/apps/modern-component-data-fetch/provider/tsconfig.json index 26ef0ff0304..365dd790db4 100644 --- a/apps/modern-component-data-fetch/provider/tsconfig.json +++ b/apps/modern-component-data-fetch/provider/tsconfig.json @@ -3,13 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@shared/*": ["./shared/*"], - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts"], "exclude": ["**/node_modules"] } diff --git a/apps/modern-component-data-fetch/provider/tsconfig.spec.json b/apps/modern-component-data-fetch/provider/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/modern-component-data-fetch/provider/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/modernjs-ssr/dynamic-nested-remote/modern.config.ts b/apps/modernjs-ssr/dynamic-nested-remote/modern.config.ts index a6509f42ed9..36a717f125b 100644 --- a/apps/modernjs-ssr/dynamic-nested-remote/modern.config.ts +++ b/apps/modernjs-ssr/dynamic-nested-remote/modern.config.ts @@ -1,6 +1,8 @@ import { appTools, defineConfig } from '@modern-js/app-tools'; import { moduleFederationPlugin } from '@module-federation/modern-js-v3'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ server: { @@ -9,5 +11,12 @@ export default defineConfig({ }, port: 3054, }, + tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, + }, plugins: [appTools(), moduleFederationPlugin()], }); diff --git a/apps/modernjs-ssr/dynamic-nested-remote/package.json b/apps/modernjs-ssr/dynamic-nested-remote/package.json index c0f8b54b451..52e370edf5a 100644 --- a/apps/modernjs-ssr/dynamic-nested-remote/package.json +++ b/apps/modernjs-ssr/dynamic-nested-remote/package.json @@ -4,13 +4,13 @@ "version": "0.1.34", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "start": "FEDERATION_DEBUG=true modern start", - "serve": "modern serve", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "start": "FEDERATION_DEBUG=true TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", "e2e": "pnpm exec cypress run --project . --e2e --config baseUrl=http://localhost:4001 --browser chrome", "e2e:development": "pnpm exec cypress open --project . --e2e --config baseUrl=http://localhost:4001 --browser electron", "test:e2e": "pnpm exec concurrently \"lsof -i :8080 || pnpm --filter modernjs-ssr-dynamic-nested-remote run serve & echo 'done'\" \"sleep 20 && pnpm --filter modernjs-ssr-dynamic-nested-remote run e2e\"" @@ -29,7 +29,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "4.24.15", "react": "~18.3.1", @@ -37,16 +37,17 @@ }, "devDependencies": { "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~6.0.1", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.app.json b/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.app.json +++ b/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.json b/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.json index 3119be88290..22cfb05853f 100644 --- a/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.json +++ b/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.json @@ -3,13 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@shared/*": ["./shared/*"], - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts", "@mf-types"], "exclude": ["**/node_modules"] } diff --git a/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.spec.json b/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/modernjs-ssr/dynamic-nested-remote/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/modernjs-ssr/dynamic-remote-new-version/modern.config.ts b/apps/modernjs-ssr/dynamic-remote-new-version/modern.config.ts index 76bd0a89c6d..48c632ee5fc 100644 --- a/apps/modernjs-ssr/dynamic-remote-new-version/modern.config.ts +++ b/apps/modernjs-ssr/dynamic-remote-new-version/modern.config.ts @@ -1,6 +1,8 @@ import { appTools, defineConfig } from '@modern-js/app-tools'; import { moduleFederationPlugin } from '@module-federation/modern-js-v3'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ server: { @@ -11,6 +13,11 @@ export default defineConfig({ }, tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, rspack: (config) => { config.output!.uniqueName = 'modernjs-ssr-dynamic-remote-new-version'; config.output!.chunkLoadingGlobal = diff --git a/apps/modernjs-ssr/dynamic-remote-new-version/package.json b/apps/modernjs-ssr/dynamic-remote-new-version/package.json index f61bfd40073..0eb22a56765 100644 --- a/apps/modernjs-ssr/dynamic-remote-new-version/package.json +++ b/apps/modernjs-ssr/dynamic-remote-new-version/package.json @@ -4,13 +4,13 @@ "version": "0.1.34", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "start": "modern start", - "serve": "modern serve", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", "e2e": "pnpm exec cypress run --project . --e2e --config baseUrl=http://localhost:4001 --browser chrome", "e2e:development": "pnpm exec cypress open --project . --e2e --config baseUrl=http://localhost:4001 --browser electron", "test:e2e": "pnpm exec concurrently \"lsof -i :8080 || pnpm --filter modernjs-ssr-dynamic-remote-new-version run serve & echo 'done'\" \"sleep 20 && pnpm --filter modernjs-ssr-dynamic-remote-new-version run e2e\"" @@ -29,7 +29,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "4.24.15", "react": "~18.3.1", @@ -37,16 +37,17 @@ }, "devDependencies": { "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~6.0.1", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.app.json b/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.app.json +++ b/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.json b/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.json index ce7f951eefc..d929725e99d 100644 --- a/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.json +++ b/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.json @@ -3,12 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], - "@shared/*": ["./shared/*"] + "@shared/*": ["./shared/*"], + "*": ["./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts"], "exclude": ["**/node_modules"] } diff --git a/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.spec.json b/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/modernjs-ssr/dynamic-remote-new-version/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/modernjs-ssr/host/modern.config.ts b/apps/modernjs-ssr/host/modern.config.ts index 12eb0d3ffd1..1ae92d83cb8 100644 --- a/apps/modernjs-ssr/host/modern.config.ts +++ b/apps/modernjs-ssr/host/modern.config.ts @@ -1,6 +1,8 @@ import { appTools, defineConfig } from '@modern-js/app-tools'; import { moduleFederationPlugin } from '@module-federation/modern-js-v3'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ server: { @@ -9,5 +11,12 @@ export default defineConfig({ }, port: 3050, }, + tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, + }, plugins: [appTools(), moduleFederationPlugin()], }); diff --git a/apps/modernjs-ssr/host/package.json b/apps/modernjs-ssr/host/package.json index 3f729eb22a6..3f7225c646f 100644 --- a/apps/modernjs-ssr/host/package.json +++ b/apps/modernjs-ssr/host/package.json @@ -4,13 +4,13 @@ "version": "0.1.34", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "start": "modern start", - "serve": "modern serve", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", "e2e": "pnpm exec cypress run --project . --e2e --config baseUrl=http://localhost:3050 --browser chrome", "e2e:development": "pnpm exec cypress open --project . --e2e --config baseUrl=http://localhost:3050 --browser electron", "test:e2e": "pnpm run e2e" @@ -29,7 +29,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "4.24.15", "react": "~18.3.1", @@ -37,16 +37,17 @@ }, "devDependencies": { "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~6.0.1", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/modernjs-ssr/host/tsconfig.app.json b/apps/modernjs-ssr/host/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/modernjs-ssr/host/tsconfig.app.json +++ b/apps/modernjs-ssr/host/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/modernjs-ssr/host/tsconfig.json b/apps/modernjs-ssr/host/tsconfig.json index 56c65a06081..93198c6d1e9 100644 --- a/apps/modernjs-ssr/host/tsconfig.json +++ b/apps/modernjs-ssr/host/tsconfig.json @@ -3,13 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@shared/*": ["./shared/*"], - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts", "./@mf-types"], "exclude": ["**/node_modules"] } diff --git a/apps/modernjs-ssr/host/tsconfig.spec.json b/apps/modernjs-ssr/host/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/modernjs-ssr/host/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/modernjs-ssr/nested-remote/modern.config.ts b/apps/modernjs-ssr/nested-remote/modern.config.ts index 440f69d59db..dc60f9f498f 100644 --- a/apps/modernjs-ssr/nested-remote/modern.config.ts +++ b/apps/modernjs-ssr/nested-remote/modern.config.ts @@ -1,6 +1,8 @@ import { appTools, defineConfig } from '@modern-js/app-tools'; import { moduleFederationPlugin } from '@module-federation/modern-js-v3'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ server: { @@ -9,5 +11,12 @@ export default defineConfig({ }, port: 3052, }, + tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, + }, plugins: [appTools(), moduleFederationPlugin()], }); diff --git a/apps/modernjs-ssr/nested-remote/package.json b/apps/modernjs-ssr/nested-remote/package.json index 35aa661b7be..6b8b6389cdb 100644 --- a/apps/modernjs-ssr/nested-remote/package.json +++ b/apps/modernjs-ssr/nested-remote/package.json @@ -4,13 +4,13 @@ "version": "0.1.34", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "start": "modern start", - "serve": "modern serve", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", "e2e": "pnpm exec cypress run --project . --e2e --config baseUrl=http://localhost:4001 --browser chrome", "e2e:development": "pnpm exec cypress open --project . --e2e --config baseUrl=http://localhost:4001 --browser electron", "test:e2e": "pnpm exec concurrently \"lsof -i :8080 || pnpm --filter modernjs-ssr-nested-remote run serve & echo 'done'\" \"sleep 20 && pnpm --filter modernjs-ssr-nested-remote run e2e\"" @@ -29,7 +29,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "4.24.15", "react": "~18.3.1", @@ -37,16 +37,17 @@ }, "devDependencies": { "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~6.0.1", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/modernjs-ssr/nested-remote/tsconfig.app.json b/apps/modernjs-ssr/nested-remote/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/modernjs-ssr/nested-remote/tsconfig.app.json +++ b/apps/modernjs-ssr/nested-remote/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/modernjs-ssr/nested-remote/tsconfig.json b/apps/modernjs-ssr/nested-remote/tsconfig.json index 26ef0ff0304..365dd790db4 100644 --- a/apps/modernjs-ssr/nested-remote/tsconfig.json +++ b/apps/modernjs-ssr/nested-remote/tsconfig.json @@ -3,13 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@shared/*": ["./shared/*"], - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts"], "exclude": ["**/node_modules"] } diff --git a/apps/modernjs-ssr/nested-remote/tsconfig.spec.json b/apps/modernjs-ssr/nested-remote/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/modernjs-ssr/nested-remote/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/modernjs-ssr/remote-new-version/modern.config.ts b/apps/modernjs-ssr/remote-new-version/modern.config.ts index acb3c0807dd..86e0e6b2d47 100644 --- a/apps/modernjs-ssr/remote-new-version/modern.config.ts +++ b/apps/modernjs-ssr/remote-new-version/modern.config.ts @@ -1,6 +1,8 @@ import { appTools, defineConfig } from '@modern-js/app-tools'; import { moduleFederationPlugin } from '@module-federation/modern-js-v3'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ server: { @@ -11,6 +13,11 @@ export default defineConfig({ }, tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, rspack: (config) => { config.output!.uniqueName = 'modernjs-ssr-remote-new-version'; config.output!.chunkLoadingGlobal = diff --git a/apps/modernjs-ssr/remote-new-version/package.json b/apps/modernjs-ssr/remote-new-version/package.json index af10c263677..5da80d843e2 100644 --- a/apps/modernjs-ssr/remote-new-version/package.json +++ b/apps/modernjs-ssr/remote-new-version/package.json @@ -4,13 +4,13 @@ "version": "0.1.36", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "start": "modern start", - "serve": "modern serve", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", "e2e": "pnpm exec cypress run --project . --e2e --config baseUrl=http://localhost:4001 --browser chrome", "e2e:development": "pnpm exec cypress open --project . --e2e --config baseUrl=http://localhost:4001 --browser electron", "test:e2e": "pnpm exec concurrently \"lsof -i :8080 || pnpm --filter modernjs-ssr-remote-new-version run serve & echo 'done'\" \"sleep 20 && pnpm --filter modernjs-ssr-remote-new-version run e2e\"" @@ -29,7 +29,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "4.24.15", "react": "~18.3.1", @@ -37,16 +37,17 @@ }, "devDependencies": { "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~6.0.1", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/modernjs-ssr/remote-new-version/tsconfig.app.json b/apps/modernjs-ssr/remote-new-version/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/modernjs-ssr/remote-new-version/tsconfig.app.json +++ b/apps/modernjs-ssr/remote-new-version/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/modernjs-ssr/remote-new-version/tsconfig.json b/apps/modernjs-ssr/remote-new-version/tsconfig.json index ce7f951eefc..d929725e99d 100644 --- a/apps/modernjs-ssr/remote-new-version/tsconfig.json +++ b/apps/modernjs-ssr/remote-new-version/tsconfig.json @@ -3,12 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], - "@shared/*": ["./shared/*"] + "@shared/*": ["./shared/*"], + "*": ["./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts"], "exclude": ["**/node_modules"] } diff --git a/apps/modernjs-ssr/remote-new-version/tsconfig.spec.json b/apps/modernjs-ssr/remote-new-version/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/modernjs-ssr/remote-new-version/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/modernjs-ssr/remote/modern.config.ts b/apps/modernjs-ssr/remote/modern.config.ts index f47062eb1aa..7fd1aef796e 100644 --- a/apps/modernjs-ssr/remote/modern.config.ts +++ b/apps/modernjs-ssr/remote/modern.config.ts @@ -1,11 +1,20 @@ import { appTools, defineConfig } from '@modern-js/app-tools'; import { moduleFederationPlugin } from '@module-federation/modern-js-v3'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ output: { assetPrefix: 'http://localhost:3051', }, + tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, + }, plugins: [appTools(), moduleFederationPlugin()], server: { diff --git a/apps/modernjs-ssr/remote/package.json b/apps/modernjs-ssr/remote/package.json index 12d62f7884a..02cf6a1b48b 100644 --- a/apps/modernjs-ssr/remote/package.json +++ b/apps/modernjs-ssr/remote/package.json @@ -4,13 +4,13 @@ "version": "0.1.36", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "start": "modern start", - "serve": "modern serve", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", "e2e": "pnpm exec cypress run --project . --e2e --config baseUrl=http://localhost:4001 --browser chrome", "e2e:development": "pnpm exec cypress open --project . --e2e --config baseUrl=http://localhost:4001 --browser electron", "test:e2e": "pnpm exec concurrently \"lsof -i :8080 || pnpm --filter modernjs-ssr-remote run serve & echo 'done'\" \"sleep 20 && pnpm --filter modernjs-ssr-remote run e2e\"" @@ -29,7 +29,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "4.24.15", "react": "~18.3.1", @@ -37,16 +37,17 @@ }, "devDependencies": { "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~6.0.1", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/modernjs-ssr/remote/tsconfig.app.json b/apps/modernjs-ssr/remote/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/modernjs-ssr/remote/tsconfig.app.json +++ b/apps/modernjs-ssr/remote/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/modernjs-ssr/remote/tsconfig.json b/apps/modernjs-ssr/remote/tsconfig.json index ce7f951eefc..d929725e99d 100644 --- a/apps/modernjs-ssr/remote/tsconfig.json +++ b/apps/modernjs-ssr/remote/tsconfig.json @@ -3,12 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], - "@shared/*": ["./shared/*"] + "@shared/*": ["./shared/*"], + "*": ["./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts"], "exclude": ["**/node_modules"] } diff --git a/apps/modernjs-ssr/remote/tsconfig.spec.json b/apps/modernjs-ssr/remote/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/modernjs-ssr/remote/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/next-app-router/next-app-router-4000/package.json b/apps/next-app-router/next-app-router-4000/package.json index 81cb44a7468..d8428e10d25 100644 --- a/apps/next-app-router/next-app-router-4000/package.json +++ b/apps/next-app-router/next-app-router-4000/package.json @@ -54,6 +54,6 @@ "prettier": "3.2.5", "prettier-plugin-tailwindcss": "0.5.14", "tailwindcss": "3.4.3", - "typescript": "5.4.5" + "typescript": "7.0.2" } } diff --git a/apps/next-app-router/next-app-router-4000/tsconfig.json b/apps/next-app-router/next-app-router-4000/tsconfig.json index 399d25eda35..499157ee124 100644 --- a/apps/next-app-router/next-app-router-4000/tsconfig.json +++ b/apps/next-app-router/next-app-router-4000/tsconfig.json @@ -9,14 +9,13 @@ "noEmit": true, "esModuleInterop": true, "module": "esnext", - "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "incremental": true, - "baseUrl": ".", "paths": { - "#/*": ["./*"] + "#/*": ["./*"], + "*": ["./*"] }, "plugins": [ { diff --git a/apps/next-app-router/next-app-router-4001/package.json b/apps/next-app-router/next-app-router-4001/package.json index 98db98a8697..180d8ef78c2 100644 --- a/apps/next-app-router/next-app-router-4001/package.json +++ b/apps/next-app-router/next-app-router-4001/package.json @@ -54,6 +54,6 @@ "prettier": "3.2.5", "prettier-plugin-tailwindcss": "0.5.14", "tailwindcss": "3.4.3", - "typescript": "5.4.5" + "typescript": "7.0.2" } } diff --git a/apps/next-app-router/next-app-router-4001/tsconfig.json b/apps/next-app-router/next-app-router-4001/tsconfig.json index 399d25eda35..499157ee124 100644 --- a/apps/next-app-router/next-app-router-4001/tsconfig.json +++ b/apps/next-app-router/next-app-router-4001/tsconfig.json @@ -9,14 +9,13 @@ "noEmit": true, "esModuleInterop": true, "module": "esnext", - "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "incremental": true, - "baseUrl": ".", "paths": { - "#/*": ["./*"] + "#/*": ["./*"], + "*": ["./*"] }, "plugins": [ { diff --git a/apps/node-dynamic-remote-new-version/CHANGELOG.md b/apps/node-dynamic-remote-new-version/CHANGELOG.md index 300680f595b..01bf18105f2 100644 --- a/apps/node-dynamic-remote-new-version/CHANGELOG.md +++ b/apps/node-dynamic-remote-new-version/CHANGELOG.md @@ -1,5 +1,17 @@ # node-dynamic-remote-new-version +## 1.0.14 + +### Patch Changes + +- @module-federation/node@2.7.47 + +## 1.0.13 + +### Patch Changes + +- @module-federation/node@2.7.46 + ## 1.0.12 ### Patch Changes diff --git a/apps/node-dynamic-remote-new-version/package.json b/apps/node-dynamic-remote-new-version/package.json index 1ebce92bd7c..c7bad659bda 100644 --- a/apps/node-dynamic-remote-new-version/package.json +++ b/apps/node-dynamic-remote-new-version/package.json @@ -6,7 +6,7 @@ "@module-federation/node": "workspace:*", "lodash": "4.18.1" }, - "version": "1.0.12", + "version": "1.0.14", "scripts": { "build": "NODE_OPTIONS=--max_old_space_size=4096 pnpm exec webpack-cli --config webpack.config.js --output-path dist --mode production", "build:development": "NODE_OPTIONS=--max_old_space_size=4096 pnpm exec webpack-cli --config webpack.config.js --output-path dist --mode development", diff --git a/apps/node-dynamic-remote/CHANGELOG.md b/apps/node-dynamic-remote/CHANGELOG.md index b6f69a70488..bef50dfb6aa 100644 --- a/apps/node-dynamic-remote/CHANGELOG.md +++ b/apps/node-dynamic-remote/CHANGELOG.md @@ -1,5 +1,17 @@ # node-dynamic-remote +## 1.0.14 + +### Patch Changes + +- @module-federation/node@2.7.47 + +## 1.0.13 + +### Patch Changes + +- @module-federation/node@2.7.46 + ## 1.0.12 ### Patch Changes diff --git a/apps/node-dynamic-remote/package.json b/apps/node-dynamic-remote/package.json index f4a275d0f76..3116fa9278a 100644 --- a/apps/node-dynamic-remote/package.json +++ b/apps/node-dynamic-remote/package.json @@ -6,7 +6,7 @@ "@module-federation/node": "workspace:*", "lodash": "4.18.1" }, - "version": "1.0.12", + "version": "1.0.14", "scripts": { "build": "NODE_OPTIONS=--max_old_space_size=4096 pnpm exec webpack-cli --config webpack.config.js --output-path dist --mode production", "build:development": "NODE_OPTIONS=--max_old_space_size=4096 pnpm exec webpack-cli --config webpack.config.js --output-path dist --mode development", diff --git a/apps/node-remote/package.json b/apps/node-remote/package.json index 1a57be9d910..e12e2651ba7 100644 --- a/apps/node-remote/package.json +++ b/apps/node-remote/package.json @@ -22,6 +22,6 @@ "test:ci": "pnpm exec jest --config jest.config.ts --passWithNoTests --ci --coverage" }, "devDependencies": { - "@rslib/core": "^0.9.0" + "@rslib/core": "^0.23.2" } } diff --git a/apps/react-ts-host/package.json b/apps/react-ts-host/package.json index 3c629f9f816..f28cd8812bf 100644 --- a/apps/react-ts-host/package.json +++ b/apps/react-ts-host/package.json @@ -15,7 +15,8 @@ "@pmmmwh/react-refresh-webpack-plugin": "0.5.15", "@types/react": "18.3.11", "@types/react-dom": "18.3.0", - "react-refresh": "0.14.2" + "react-refresh": "0.14.2", + "typescript": "7.0.2" }, "scripts": { "build": "NODE_OPTIONS=--max_old_space_size=4096 pnpm exec webpack-cli --config webpack.config.js --mode production", diff --git a/apps/react-ts-host/tsconfig.app.json b/apps/react-ts-host/tsconfig.app.json index cc700883f35..a0c46a9e944 100644 --- a/apps/react-ts-host/tsconfig.app.json +++ b/apps/react-ts-host/tsconfig.app.json @@ -1,10 +1,9 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "baseUrl": "./", "outDir": "../../dist/out-tsc", "paths": { - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, "exclude": ["dist/**"] diff --git a/apps/react-ts-host/tsconfig.json b/apps/react-ts-host/tsconfig.json index d41497eee01..c0f4149df64 100644 --- a/apps/react-ts-host/tsconfig.json +++ b/apps/react-ts-host/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "./", "jsx": "react-jsx", "allowJs": true, "esModuleInterop": true, diff --git a/apps/react-ts-nested-remote/package.json b/apps/react-ts-nested-remote/package.json index e4483c87ad9..6bd709cb8b9 100644 --- a/apps/react-ts-nested-remote/package.json +++ b/apps/react-ts-nested-remote/package.json @@ -12,7 +12,8 @@ "@types/react": "18.3.11", "@types/react-dom": "18.3.0", "file-loader": "6.2.0", - "react-refresh": "0.14.2" + "react-refresh": "0.14.2", + "typescript": "7.0.2" }, "scripts": { "build": "NODE_OPTIONS=--max_old_space_size=4096 pnpm exec webpack-cli --config webpack.config.js --mode production", diff --git a/apps/react-ts-nested-remote/src/app/nx-welcome.tsx b/apps/react-ts-nested-remote/src/app/nx-welcome.tsx index 19826130615..2a99057ae0f 100644 --- a/apps/react-ts-nested-remote/src/app/nx-welcome.tsx +++ b/apps/react-ts-nested-remote/src/app/nx-welcome.tsx @@ -1,3 +1,5 @@ +/// + import RemoteModule from 'react_ts_remote/Module'; export default RemoteModule; diff --git a/apps/react-ts-nested-remote/src/app/react-ts-remote.d.ts b/apps/react-ts-nested-remote/src/app/react-ts-remote.d.ts new file mode 100644 index 00000000000..189513bb2a7 --- /dev/null +++ b/apps/react-ts-nested-remote/src/app/react-ts-remote.d.ts @@ -0,0 +1,6 @@ +declare module 'react_ts_remote/Module' { + import type { ComponentType } from 'react'; + + const RemoteModule: ComponentType; + export default RemoteModule; +} diff --git a/apps/react-ts-nested-remote/tsconfig.app.json b/apps/react-ts-nested-remote/tsconfig.app.json index cc700883f35..a0c46a9e944 100644 --- a/apps/react-ts-nested-remote/tsconfig.app.json +++ b/apps/react-ts-nested-remote/tsconfig.app.json @@ -1,10 +1,9 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "baseUrl": "./", "outDir": "../../dist/out-tsc", "paths": { - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, "exclude": ["dist/**"] diff --git a/apps/react-ts-nested-remote/tsconfig.json b/apps/react-ts-nested-remote/tsconfig.json index d41497eee01..c0f4149df64 100644 --- a/apps/react-ts-nested-remote/tsconfig.json +++ b/apps/react-ts-nested-remote/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "./", "jsx": "react-jsx", "allowJs": true, "esModuleInterop": true, diff --git a/apps/react-ts-nested-remote/webpack.config.js b/apps/react-ts-nested-remote/webpack.config.js index bbae55f9b46..bb9fcd5c872 100644 --- a/apps/react-ts-nested-remote/webpack.config.js +++ b/apps/react-ts-nested-remote/webpack.config.js @@ -1,3 +1,5 @@ +/* eslint-env node */ + const path = require('path'); const swcLoader = require.resolve('swc-loader'); const styleLoader = require.resolve('style-loader'); diff --git a/apps/react-ts-remote/package.json b/apps/react-ts-remote/package.json index 0c8564c3065..7710d61e01e 100644 --- a/apps/react-ts-remote/package.json +++ b/apps/react-ts-remote/package.json @@ -12,7 +12,8 @@ "@types/react": "18.3.11", "@types/react-dom": "18.3.0", "file-loader": "6.2.0", - "react-refresh": "0.14.2" + "react-refresh": "0.14.2", + "typescript": "7.0.2" }, "scripts": { "build": "NODE_OPTIONS=--max_old_space_size=4096 pnpm exec rspack build --config rspack.config.js --mode production", diff --git a/apps/react-ts-remote/tsconfig.json b/apps/react-ts-remote/tsconfig.json index a6adc9189f5..5eff7c0b051 100644 --- a/apps/react-ts-remote/tsconfig.json +++ b/apps/react-ts-remote/tsconfig.json @@ -1,6 +1,15 @@ { - "extends": "../../tsconfig.base.json", "compilerOptions": { + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": false, + "target": "es2021", + "module": "esnext", + "moduleResolution": "bundler", + "lib": ["es2021", "dom"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, "jsx": "react-jsx", "allowJs": true, "esModuleInterop": true, diff --git a/apps/router-demo/router-host-2000/package.json b/apps/router-demo/router-host-2000/package.json index 2a3984416cb..ae517c3f792 100644 --- a/apps/router-demo/router-host-2000/package.json +++ b/apps/router-demo/router-host-2000/package.json @@ -25,8 +25,8 @@ }, "devDependencies": { "@module-federation/rsbuild-plugin": "workspace:*", - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-react": "^1.4.5", + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-react": "^2.1.0", "@types/react": "^18.2.79", "@types/react-dom": "^18.3.0", "tailwindcss": "^3.4.3", diff --git a/apps/router-demo/router-host-2000/tsconfig.json b/apps/router-demo/router-host-2000/tsconfig.json index 49e31a92899..074ade8cc48 100644 --- a/apps/router-demo/router-host-2000/tsconfig.json +++ b/apps/router-demo/router-host-2000/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "./", "target": "ES2020", "lib": ["DOM", "ES2020"], "jsx": "react-jsx", @@ -12,7 +11,7 @@ "moduleResolution": "bundler", "useDefineForClassFields": true, "paths": { - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, "include": ["src", "./@mf-types"] diff --git a/apps/router-demo/router-host-v5-2200/package.json b/apps/router-demo/router-host-v5-2200/package.json index ca6c3495f6f..22d7ae2b2a4 100644 --- a/apps/router-demo/router-host-v5-2200/package.json +++ b/apps/router-demo/router-host-v5-2200/package.json @@ -24,11 +24,11 @@ }, "devDependencies": { "@module-federation/rsbuild-plugin": "workspace:*", - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-react": "^1.4.5", + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-react": "^2.1.0", "@types/react": "^18.2.79", "@types/react-dom": "^18.3.0", "tailwindcss": "^3.4.3", - "typescript": "^5.4.5" + "typescript": "7.0.2" } } diff --git a/apps/router-demo/router-host-v5-2200/tsconfig.json b/apps/router-demo/router-host-v5-2200/tsconfig.json index 49e31a92899..074ade8cc48 100644 --- a/apps/router-demo/router-host-v5-2200/tsconfig.json +++ b/apps/router-demo/router-host-v5-2200/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "./", "target": "ES2020", "lib": ["DOM", "ES2020"], "jsx": "react-jsx", @@ -12,7 +11,7 @@ "moduleResolution": "bundler", "useDefineForClassFields": true, "paths": { - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, "include": ["src", "./@mf-types"] diff --git a/apps/router-demo/router-host-vue3-2100/package.json b/apps/router-demo/router-host-vue3-2100/package.json index cc7622acb1b..74d32725aa7 100644 --- a/apps/router-demo/router-host-vue3-2100/package.json +++ b/apps/router-demo/router-host-vue3-2100/package.json @@ -17,9 +17,9 @@ }, "devDependencies": { "@module-federation/rsbuild-plugin": "workspace:*", - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-vue": "^1.2.6", + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-vue": "^2.0.1", "tailwindcss": "^3.4.3", - "typescript": "^5.4.2" + "typescript": "7.0.2" } } diff --git a/apps/router-demo/router-host-vue3-2100/tsconfig.json b/apps/router-demo/router-host-vue3-2100/tsconfig.json index 606e45c39c1..2f51363cf96 100644 --- a/apps/router-demo/router-host-vue3-2100/tsconfig.json +++ b/apps/router-demo/router-host-vue3-2100/tsconfig.json @@ -9,11 +9,10 @@ "skipLibCheck": true, "isolatedModules": true, "resolveJsonModule": true, - "moduleResolution": "node", "useDefineForClassFields": true, - "baseUrl": ".", "paths": { - "@/*": ["./src/*"] + "@/*": ["./src/*"], + "*": ["./*"] } }, "include": ["src"] diff --git a/apps/router-demo/router-remote1-2001/package.json b/apps/router-demo/router-remote1-2001/package.json index 82e278ccd6e..a9064988e4c 100644 --- a/apps/router-demo/router-remote1-2001/package.json +++ b/apps/router-demo/router-remote1-2001/package.json @@ -20,12 +20,12 @@ }, "devDependencies": { "@ant-design/cssinjs": "^1.20.0", - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-react": "^1.4.5", + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-react": "^2.1.0", "@rsbuild/shared": "^0.7.10", "@types/react": "^18.2.79", "@types/react-dom": "^18.3.0", "@types/react-router-dom": "^5.3.3", - "typescript": "^5.4.5" + "typescript": "7.0.2" } } diff --git a/apps/router-demo/router-remote1-2001/tsconfig.json b/apps/router-demo/router-remote1-2001/tsconfig.json index 77055e139c0..a6d1d39de46 100644 --- a/apps/router-demo/router-remote1-2001/tsconfig.json +++ b/apps/router-demo/router-remote1-2001/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "./", "target": "ES2020", "lib": ["DOM", "ES2020"], "module": "ESNext", @@ -10,7 +9,10 @@ "isolatedModules": true, "resolveJsonModule": true, "moduleResolution": "bundler", - "useDefineForClassFields": true + "useDefineForClassFields": true, + "paths": { + "*": ["./*"] + } }, "include": ["src"] } diff --git a/apps/router-demo/router-remote2-2002/package.json b/apps/router-demo/router-remote2-2002/package.json index 6922b980931..515f8eba6f8 100644 --- a/apps/router-demo/router-remote2-2002/package.json +++ b/apps/router-demo/router-remote2-2002/package.json @@ -19,10 +19,10 @@ "react-router-dom": "6.30.3" }, "devDependencies": { - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-react": "^1.4.5", + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-react": "^2.1.0", "@types/react": "^18.2.79", "@types/react-dom": "^18.3.0", - "typescript": "^5.4.5" + "typescript": "7.0.2" } } diff --git a/apps/router-demo/router-remote2-2002/tsconfig.json b/apps/router-demo/router-remote2-2002/tsconfig.json index 77055e139c0..a6d1d39de46 100644 --- a/apps/router-demo/router-remote2-2002/tsconfig.json +++ b/apps/router-demo/router-remote2-2002/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "./", "target": "ES2020", "lib": ["DOM", "ES2020"], "module": "ESNext", @@ -10,7 +9,10 @@ "isolatedModules": true, "resolveJsonModule": true, "moduleResolution": "bundler", - "useDefineForClassFields": true + "useDefineForClassFields": true, + "paths": { + "*": ["./*"] + } }, "include": ["src"] } diff --git a/apps/router-demo/router-remote3-2003/package.json b/apps/router-demo/router-remote3-2003/package.json index e6e841555b6..e8c305a413c 100644 --- a/apps/router-demo/router-remote3-2003/package.json +++ b/apps/router-demo/router-remote3-2003/package.json @@ -16,11 +16,11 @@ "vue-router": "^4.4.5" }, "devDependencies": { - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-vue": "^1.2.6", + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-vue": "^2.0.1", "@vue/tsconfig": "^0.5.1", "tailwindcss": "^3.4.3", - "typescript": "^5.4.2", + "typescript": "7.0.2", "vue-tsc": "^2.0.26" } } diff --git a/apps/router-demo/router-remote3-2003/tsconfig.json b/apps/router-demo/router-remote3-2003/tsconfig.json index 5b72eab70f3..d4b7b917d03 100644 --- a/apps/router-demo/router-remote3-2003/tsconfig.json +++ b/apps/router-demo/router-remote3-2003/tsconfig.json @@ -11,11 +11,10 @@ "skipLibCheck": true, "isolatedModules": true, "resolveJsonModule": true, - "moduleResolution": "node", "useDefineForClassFields": true, - "baseUrl": ".", "paths": { - "@/*": ["./src/*"] + "@/*": ["./src/*"], + "*": ["./*"] } }, "include": ["src"] diff --git a/apps/router-demo/router-remote4-2004/package.json b/apps/router-demo/router-remote4-2004/package.json index 9fbe2ecca3c..fb5c3414bc0 100644 --- a/apps/router-demo/router-remote4-2004/package.json +++ b/apps/router-demo/router-remote4-2004/package.json @@ -19,10 +19,10 @@ "react-router-dom": "6.30.3" }, "devDependencies": { - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-react": "^1.4.5", + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-react": "^2.1.0", "@types/react": "^18.2.79", "@types/react-dom": "^18.3.0", - "typescript": "^5.4.5" + "typescript": "7.0.2" } } diff --git a/apps/router-demo/router-remote4-2004/tsconfig.json b/apps/router-demo/router-remote4-2004/tsconfig.json index 77055e139c0..a6d1d39de46 100644 --- a/apps/router-demo/router-remote4-2004/tsconfig.json +++ b/apps/router-demo/router-remote4-2004/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "./", "target": "ES2020", "lib": ["DOM", "ES2020"], "module": "ESNext", @@ -10,7 +9,10 @@ "isolatedModules": true, "resolveJsonModule": true, "moduleResolution": "bundler", - "useDefineForClassFields": true + "useDefineForClassFields": true, + "paths": { + "*": ["./*"] + } }, "include": ["src"] } diff --git a/apps/router-demo/router-remote5-2005/CHANGELOG.md b/apps/router-demo/router-remote5-2005/CHANGELOG.md index f225141f33e..647ac8e61c4 100644 --- a/apps/router-demo/router-remote5-2005/CHANGELOG.md +++ b/apps/router-demo/router-remote5-2005/CHANGELOG.md @@ -1,5 +1,22 @@ # remote5 +## 2.0.16 + +### Patch Changes + +- Updated dependencies [cef63f9] +- Updated dependencies [6ee67dc] + - @module-federation/rsbuild-plugin@2.8.0 + - @module-federation/bridge-react@2.8.0 + +## 2.0.15 + +### Patch Changes + +- Updated dependencies [61fe85d] + - @module-federation/rsbuild-plugin@2.7.0 + - @module-federation/bridge-react@2.7.0 + ## 2.0.14 ### Patch Changes diff --git a/apps/router-demo/router-remote5-2005/package.json b/apps/router-demo/router-remote5-2005/package.json index 37fe901313b..3e84252bf00 100644 --- a/apps/router-demo/router-remote5-2005/package.json +++ b/apps/router-demo/router-remote5-2005/package.json @@ -1,7 +1,7 @@ { "name": "remote5", "private": true, - "version": "2.0.14", + "version": "2.0.16", "scripts": { "dev": "rsbuild dev", "build": "rsbuild build", @@ -18,10 +18,10 @@ "react-router-dom": "6.30.3" }, "devDependencies": { - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-react": "^1.4.5", + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-react": "^2.1.0", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", - "typescript": "^5.4.5" + "typescript": "7.0.2" } } diff --git a/apps/router-demo/router-remote5-2005/tsconfig.json b/apps/router-demo/router-remote5-2005/tsconfig.json index 77055e139c0..a6d1d39de46 100644 --- a/apps/router-demo/router-remote5-2005/tsconfig.json +++ b/apps/router-demo/router-remote5-2005/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "./", "target": "ES2020", "lib": ["DOM", "ES2020"], "module": "ESNext", @@ -10,7 +9,10 @@ "isolatedModules": true, "resolveJsonModule": true, "moduleResolution": "bundler", - "useDefineForClassFields": true + "useDefineForClassFields": true, + "paths": { + "*": ["./*"] + } }, "include": ["src"] } diff --git a/apps/router-demo/router-remote6-2006/CHANGELOG.md b/apps/router-demo/router-remote6-2006/CHANGELOG.md index 787e75a382a..29b94f64dc4 100644 --- a/apps/router-demo/router-remote6-2006/CHANGELOG.md +++ b/apps/router-demo/router-remote6-2006/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## 2.0.16 + +### Patch Changes + +- Updated dependencies [cef63f9] +- Updated dependencies [6ee67dc] + - @module-federation/rsbuild-plugin@2.8.0 + - @module-federation/bridge-react@2.8.0 + +## 2.0.15 + +### Patch Changes + +- Updated dependencies [61fe85d] + - @module-federation/rsbuild-plugin@2.7.0 + - @module-federation/bridge-react@2.7.0 + ## 2.0.14 ### Patch Changes diff --git a/apps/router-demo/router-remote6-2006/package.json b/apps/router-demo/router-remote6-2006/package.json index 8c5dc1280aa..bd67f4f0080 100644 --- a/apps/router-demo/router-remote6-2006/package.json +++ b/apps/router-demo/router-remote6-2006/package.json @@ -1,7 +1,7 @@ { "name": "remote6", "private": true, - "version": "2.0.14", + "version": "2.0.16", "scripts": { "dev": "rsbuild dev", "build": "rsbuild build", @@ -20,10 +20,10 @@ "react-router": "7.16.0" }, "devDependencies": { - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-react": "^1.4.5", + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-react": "^2.1.0", "@types/react": "^18.2.79", "@types/react-dom": "^18.3.0", - "typescript": "^5.4.5" + "typescript": "7.0.2" } } diff --git a/apps/rslib-module/package.json b/apps/rslib-module/package.json index 33a5648550d..c97449c57d1 100644 --- a/apps/rslib-module/package.json +++ b/apps/rslib-module/package.json @@ -22,8 +22,8 @@ "@module-federation/enhanced": "workspace:*", "@module-federation/rsbuild-plugin": "workspace:*", "@module-federation/storybook-addon": "workspace:*", - "@rsbuild/plugin-react": "^1.4.5", - "@rslib/core": "^0.9.0", + "@rsbuild/plugin-react": "^2.1.0", + "@rslib/core": "^0.23.2", "@types/react": "^18.3.11", "http-server": "^14.1.1", "react": "^18.3.1", diff --git a/apps/runtime-demo/3005-runtime-host/cypress/tsconfig.json b/apps/runtime-demo/3005-runtime-host/cypress/tsconfig.json index 0285a6e4c66..2a308b20964 100644 --- a/apps/runtime-demo/3005-runtime-host/cypress/tsconfig.json +++ b/apps/runtime-demo/3005-runtime-host/cypress/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../tsconfig.json", "compilerOptions": { "allowJs": true, - "outDir": "../../dist/out-tsc", "module": "commonjs", "types": ["cypress", "node"], "sourceMap": false diff --git a/apps/runtime-demo/3005-runtime-host/tsconfig.json b/apps/runtime-demo/3005-runtime-host/tsconfig.json index 1253e3c31f5..e0500ee55e6 100644 --- a/apps/runtime-demo/3005-runtime-host/tsconfig.json +++ b/apps/runtime-demo/3005-runtime-host/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../../tsconfig.base.json", "compilerOptions": { - "baseUrl": "./", "jsx": "react-jsx", "allowJs": true, "esModuleInterop": true, @@ -14,7 +13,7 @@ "noFallthroughCasesInSwitch": true, "resolveJsonModule": true, "paths": { - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, "files": [], diff --git a/apps/runtime-demo/3008-runtime-remote/package.json b/apps/runtime-demo/3008-runtime-remote/package.json index 1da85383daf..0c49ca0e91f 100644 --- a/apps/runtime-demo/3008-runtime-remote/package.json +++ b/apps/runtime-demo/3008-runtime-remote/package.json @@ -14,7 +14,7 @@ "react-dom": "^18.3.1" }, "devDependencies": { - "@rsbuild/core": "1.7.3", - "@rsbuild/plugin-react": "^1.4.5" + "@rsbuild/core": "2.1.4", + "@rsbuild/plugin-react": "^2.1.0" } } diff --git a/apps/shared-tree-shaking/no-server/host/CHANGELOG.md b/apps/shared-tree-shaking/no-server/host/CHANGELOG.md index 213818a6e51..1f4dcd5c7da 100644 --- a/apps/shared-tree-shaking/no-server/host/CHANGELOG.md +++ b/apps/shared-tree-shaking/no-server/host/CHANGELOG.md @@ -1,5 +1,20 @@ # modernjs-ssr-nested-remote +## 1.0.16 + +### Patch Changes + +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/enhanced@2.8.0 + +## 1.0.15 + +### Patch Changes + +- @module-federation/enhanced@2.7.0 + ## 1.0.14 ### Patch Changes diff --git a/apps/shared-tree-shaking/no-server/host/modern.config.ts b/apps/shared-tree-shaking/no-server/host/modern.config.ts index 0a5164cd591..bd417789cd1 100644 --- a/apps/shared-tree-shaking/no-server/host/modern.config.ts +++ b/apps/shared-tree-shaking/no-server/host/modern.config.ts @@ -8,6 +8,8 @@ import mfConfig from './module-federation.config'; const publicPath = 'http://localhost:3001/'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ dev: { @@ -30,6 +32,11 @@ export default defineConfig({ enableAsyncEntry: true, }, tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, bundlerChain(chain) { chain.optimization.runtimeChunk(false); chain.plugin('MF').use(ModuleFederationPlugin, [mfConfig]); diff --git a/apps/shared-tree-shaking/no-server/host/package.json b/apps/shared-tree-shaking/no-server/host/package.json index 578fd514b24..603cf217af0 100644 --- a/apps/shared-tree-shaking/no-server/host/package.json +++ b/apps/shared-tree-shaking/no-server/host/package.json @@ -1,18 +1,18 @@ { "name": "shared-tree-shaking-no-server-host", "private": true, - "version": "1.0.14", + "version": "1.0.16", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "build:re-shake": "SECONDARY_SHARED_TREE_SHAKING=true modern build", - "start": "modern start", - "serve": "modern serve", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", - "inspect": "modern inspect", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "build:re-shake": "SECONDARY_SHARED_TREE_SHAKING=true TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", + "inspect": "TS_NODE_COMPILER=typescript-compiler modern inspect", "e2e": "pnpm exec cypress run --config-file cypress.config.ts --browser chrome --config baseUrl=http://localhost:3001", "e2e:development": "pnpm exec cypress open --config-file cypress.config.ts --browser chrome --config baseUrl=http://localhost:3001", "test:e2e": "pnpm exec turbo run build --filter=shared-tree-shaking-no-server-host --filter=shared-tree-shaking-no-server-provider && pnpm --filter shared-tree-shaking-no-server-host run serve & pnpm --filter shared-tree-shaking-no-server-provider run serve & sleep 10 && pnpm --filter shared-tree-shaking-no-server-host run e2e" @@ -31,7 +31,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/enhanced": "workspace:*", "antd": "6.0.1", "react": "~18.3.1", @@ -39,20 +39,20 @@ }, "devDependencies": { "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/tsconfig": "3.0.1", "@modern-js/server-runtime": "3.0.1", "@modern-js/plugin-server": "2.68.0", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~3.0.2", - "typescript": "~5.0.4", + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3", "fs-extra": "^11.1.1", - "ts-node": "~10.8.1", "tsconfig-paths": "~3.14.1" } } diff --git a/apps/shared-tree-shaking/no-server/host/tsconfig.app.json b/apps/shared-tree-shaking/no-server/host/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/shared-tree-shaking/no-server/host/tsconfig.app.json +++ b/apps/shared-tree-shaking/no-server/host/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/shared-tree-shaking/no-server/host/tsconfig.json b/apps/shared-tree-shaking/no-server/host/tsconfig.json index 4ccadf499c6..5314b63bf73 100644 --- a/apps/shared-tree-shaking/no-server/host/tsconfig.json +++ b/apps/shared-tree-shaking/no-server/host/tsconfig.json @@ -3,13 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@shared/*": ["./shared/*"], - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts", "server"], "exclude": ["**/node_modules"] } diff --git a/apps/shared-tree-shaking/no-server/host/tsconfig.spec.json b/apps/shared-tree-shaking/no-server/host/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/shared-tree-shaking/no-server/host/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/shared-tree-shaking/no-server/provider/CHANGELOG.md b/apps/shared-tree-shaking/no-server/provider/CHANGELOG.md index 213818a6e51..1f4dcd5c7da 100644 --- a/apps/shared-tree-shaking/no-server/provider/CHANGELOG.md +++ b/apps/shared-tree-shaking/no-server/provider/CHANGELOG.md @@ -1,5 +1,20 @@ # modernjs-ssr-nested-remote +## 1.0.16 + +### Patch Changes + +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/enhanced@2.8.0 + +## 1.0.15 + +### Patch Changes + +- @module-federation/enhanced@2.7.0 + ## 1.0.14 ### Patch Changes diff --git a/apps/shared-tree-shaking/no-server/provider/modern.config.ts b/apps/shared-tree-shaking/no-server/provider/modern.config.ts index 45cb99d97b4..bc701fe6f3e 100644 --- a/apps/shared-tree-shaking/no-server/provider/modern.config.ts +++ b/apps/shared-tree-shaking/no-server/provider/modern.config.ts @@ -9,6 +9,8 @@ import mfConfig from './module-federation.config'; const publicPath = 'http://localhost:3002/'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ dev: { @@ -32,6 +34,11 @@ export default defineConfig({ enableAsyncEntry: true, }, tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, bundlerChain(chain) { chain.optimization.runtimeChunk(false); chain.plugin('MF').use(ModuleFederationPlugin, [mfConfig]); diff --git a/apps/shared-tree-shaking/no-server/provider/package.json b/apps/shared-tree-shaking/no-server/provider/package.json index 1b88c427d35..22e7aa03827 100644 --- a/apps/shared-tree-shaking/no-server/provider/package.json +++ b/apps/shared-tree-shaking/no-server/provider/package.json @@ -1,17 +1,17 @@ { "name": "shared-tree-shaking-no-server-provider", "private": true, - "version": "1.0.14", + "version": "1.0.16", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "build:shake": "SHAKE=true modern build", - "start": "modern start", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "build:shake": "SHAKE=true TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", "serve": "serve dist -C -p 3002", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade" + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade" }, "engines": { "node": ">=16.18.1" @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/enhanced": "workspace:*", "antd": "6.0.1", "react": "~18.3.1", @@ -36,17 +36,18 @@ "devDependencies": { "serve": "14.2.5", "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", "@modern-js/plugin-server": "2.68.0", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~3.0.2", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/shared-tree-shaking/no-server/provider/tsconfig.app.json b/apps/shared-tree-shaking/no-server/provider/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/shared-tree-shaking/no-server/provider/tsconfig.app.json +++ b/apps/shared-tree-shaking/no-server/provider/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/shared-tree-shaking/no-server/provider/tsconfig.json b/apps/shared-tree-shaking/no-server/provider/tsconfig.json index 26ef0ff0304..365dd790db4 100644 --- a/apps/shared-tree-shaking/no-server/provider/tsconfig.json +++ b/apps/shared-tree-shaking/no-server/provider/tsconfig.json @@ -3,13 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@shared/*": ["./shared/*"], - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts"], "exclude": ["**/node_modules"] } diff --git a/apps/shared-tree-shaking/no-server/provider/tsconfig.spec.json b/apps/shared-tree-shaking/no-server/provider/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/shared-tree-shaking/no-server/provider/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/shared-tree-shaking/with-server/host/CHANGELOG.md b/apps/shared-tree-shaking/with-server/host/CHANGELOG.md index 20e0fecee88..4c2fe623752 100644 --- a/apps/shared-tree-shaking/with-server/host/CHANGELOG.md +++ b/apps/shared-tree-shaking/with-server/host/CHANGELOG.md @@ -1,5 +1,22 @@ # modernjs-ssr-nested-remote +## 1.0.16 + +### Patch Changes + +- Updated dependencies [dcc96d1] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] +- Updated dependencies [f796458] + - @module-federation/modern-js-v3@2.8.0 + +## 1.0.15 + +### Patch Changes + +- Updated dependencies [d13cafa] + - @module-federation/modern-js-v3@2.7.0 + ## 1.0.14 ### Patch Changes diff --git a/apps/shared-tree-shaking/with-server/host/modern.config.ts b/apps/shared-tree-shaking/with-server/host/modern.config.ts index a60d882d3de..dd2dde875a1 100644 --- a/apps/shared-tree-shaking/with-server/host/modern.config.ts +++ b/apps/shared-tree-shaking/with-server/host/modern.config.ts @@ -19,6 +19,8 @@ if (isSecondarySharedTreeShaking) { const publicPath = 'http://localhost:3001/'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ dev: { @@ -43,6 +45,11 @@ export default defineConfig({ serverPlugin(), ], tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, webpack: webpackConfig, }, }); diff --git a/apps/shared-tree-shaking/with-server/host/package.json b/apps/shared-tree-shaking/with-server/host/package.json index d4f82209b1d..8b49d4b6ea2 100644 --- a/apps/shared-tree-shaking/with-server/host/package.json +++ b/apps/shared-tree-shaking/with-server/host/package.json @@ -1,19 +1,19 @@ { "name": "shared-tree-shaking-with-server-host", "private": true, - "version": "1.0.14", + "version": "1.0.16", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "build:re-shake": "SECONDARY_SHARED_TREE_SHAKING=true modern build", - "start": "modern start", - "serve": "modern serve", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "build:re-shake": "SECONDARY_SHARED_TREE_SHAKING=true TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", + "serve": "TS_NODE_COMPILER=typescript-compiler modern serve", "serve:re-shake": "serve dist-test -C -p 3003", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade", - "inspect": "modern inspect", + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade", + "inspect": "TS_NODE_COMPILER=typescript-compiler modern inspect", "serve:all": "pnpm exec turbo run build --filter=shared-tree-shaking-with-server-host --filter=shared-tree-shaking-with-server-provider && pnpm --filter shared-tree-shaking-with-server-host run build:re-shake && pnpm --filter shared-tree-shaking-with-server-host run serve & pnpm --filter shared-tree-shaking-with-server-provider run serve & pnpm --filter shared-tree-shaking-with-server-host run serve:re-shake", "e2e": "pnpm exec cypress run --config-file cypress.config.ts --browser chrome --config baseUrl=http://localhost:3001", "e2e:development": "pnpm exec cypress open --config-file cypress.config.ts --browser chrome --config baseUrl=http://localhost:3001", @@ -33,7 +33,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "6.0.1", "react": "~18.3.1", @@ -42,21 +42,21 @@ "devDependencies": { "serve": "14.2.5", "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", "@modern-js/server-runtime": "3.0.1", "@modern-js/plugin-server": "2.68.0", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~3.0.2", - "typescript": "~5.0.4", + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3", "fs-extra": "^11.1.1", - "ts-node": "~10.8.1", "tsconfig-paths": "~3.14.1" } } diff --git a/apps/shared-tree-shaking/with-server/host/tsconfig.app.json b/apps/shared-tree-shaking/with-server/host/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/shared-tree-shaking/with-server/host/tsconfig.app.json +++ b/apps/shared-tree-shaking/with-server/host/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/shared-tree-shaking/with-server/host/tsconfig.json b/apps/shared-tree-shaking/with-server/host/tsconfig.json index 4ccadf499c6..5314b63bf73 100644 --- a/apps/shared-tree-shaking/with-server/host/tsconfig.json +++ b/apps/shared-tree-shaking/with-server/host/tsconfig.json @@ -3,13 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@shared/*": ["./shared/*"], - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts", "server"], "exclude": ["**/node_modules"] } diff --git a/apps/shared-tree-shaking/with-server/host/tsconfig.spec.json b/apps/shared-tree-shaking/with-server/host/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/shared-tree-shaking/with-server/host/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/shared-tree-shaking/with-server/provider/CHANGELOG.md b/apps/shared-tree-shaking/with-server/provider/CHANGELOG.md index 20e0fecee88..4c2fe623752 100644 --- a/apps/shared-tree-shaking/with-server/provider/CHANGELOG.md +++ b/apps/shared-tree-shaking/with-server/provider/CHANGELOG.md @@ -1,5 +1,22 @@ # modernjs-ssr-nested-remote +## 1.0.16 + +### Patch Changes + +- Updated dependencies [dcc96d1] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] +- Updated dependencies [f796458] + - @module-federation/modern-js-v3@2.8.0 + +## 1.0.15 + +### Patch Changes + +- Updated dependencies [d13cafa] + - @module-federation/modern-js-v3@2.7.0 + ## 1.0.14 ### Patch Changes diff --git a/apps/shared-tree-shaking/with-server/provider/modern.config.ts b/apps/shared-tree-shaking/with-server/provider/modern.config.ts index 361e3512852..a03bb668a20 100644 --- a/apps/shared-tree-shaking/with-server/provider/modern.config.ts +++ b/apps/shared-tree-shaking/with-server/provider/modern.config.ts @@ -19,6 +19,8 @@ if (isSecondarySharedTreeShaking) { const publicPath = 'http://localhost:3002/'; +const typeCheckerTypeScriptPath = require.resolve('typescript-compiler'); + // https://modernjs.dev/en/configure/app/usage export default defineConfig({ dev: { @@ -44,6 +46,11 @@ export default defineConfig({ serverPlugin(), ], tools: { + tsChecker: { + typescript: { + typescriptPath: typeCheckerTypeScriptPath, + }, + }, webpack: webpackConfig, }, }); diff --git a/apps/shared-tree-shaking/with-server/provider/package.json b/apps/shared-tree-shaking/with-server/provider/package.json index a2d441f27c3..4233610b981 100644 --- a/apps/shared-tree-shaking/with-server/provider/package.json +++ b/apps/shared-tree-shaking/with-server/provider/package.json @@ -1,17 +1,17 @@ { "name": "shared-tree-shaking-with-server-provider", "private": true, - "version": "1.0.14", + "version": "1.0.16", "scripts": { "reset": "npx rimraf ./**/node_modules", - "dev": "modern dev", - "build": "modern build", - "build:shake": "SECONDARY_SHARED_TREE_SHAKING=true modern build", - "start": "modern start", + "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", + "build": "TS_NODE_COMPILER=typescript-compiler modern build", + "build:shake": "SECONDARY_SHARED_TREE_SHAKING=true TS_NODE_COMPILER=typescript-compiler modern build", + "start": "TS_NODE_COMPILER=typescript-compiler modern start", "serve": "serve dist -C -p 3002", - "new": "modern new", - "lint": "modern lint", - "upgrade": "modern upgrade" + "new": "TS_NODE_COMPILER=typescript-compiler modern new", + "lint": "TS_NODE_COMPILER=typescript-compiler modern lint", + "upgrade": "TS_NODE_COMPILER=typescript-compiler modern upgrade" }, "engines": { "node": ">=16.18.1" @@ -27,7 +27,7 @@ ], "dependencies": { "@babel/runtime": "7.28.2", - "@modern-js/runtime": "3.0.1", + "@modern-js/runtime": "3.5.0", "@module-federation/modern-js-v3": "workspace:*", "antd": "6.0.1", "react": "~18.3.1", @@ -36,16 +36,17 @@ "devDependencies": { "@modern-js/plugin-server": "2.68.0", "@modern-js-app/eslint-config": "2.59.0", - "@modern-js/app-tools": "3.0.1", + "@modern-js/app-tools": "3.5.0", "@modern-js/eslint-config": "2.59.0", "@modern-js/tsconfig": "3.0.1", - "@types/jest": "~29.5.0", "@types/node": "^20.19.5", "@types/react": "~18.2.0", "@types/react-dom": "~18.3.0", "lint-staged": "~13.1.0", "prettier": "~3.3.3", "rimraf": "~3.0.2", - "typescript": "~5.0.4" + "ts-node": "10.9.2", + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" } } diff --git a/apps/shared-tree-shaking/with-server/provider/tsconfig.app.json b/apps/shared-tree-shaking/with-server/provider/tsconfig.app.json index b5b3e6e9e03..b733a1ee53d 100644 --- a/apps/shared-tree-shaking/with-server/provider/tsconfig.app.json +++ b/apps/shared-tree-shaking/with-server/provider/tsconfig.app.json @@ -12,6 +12,6 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/apps/shared-tree-shaking/with-server/provider/tsconfig.json b/apps/shared-tree-shaking/with-server/provider/tsconfig.json index 26ef0ff0304..365dd790db4 100644 --- a/apps/shared-tree-shaking/with-server/provider/tsconfig.json +++ b/apps/shared-tree-shaking/with-server/provider/tsconfig.json @@ -3,13 +3,15 @@ "compilerOptions": { "declaration": false, "jsx": "preserve", - "baseUrl": "./", "paths": { "@/*": ["./src/*"], "@shared/*": ["./shared/*"], - "*": ["./@mf-types/*"] + "*": ["./@mf-types/*", "./*"] } }, + "ts-node": { + "compiler": "typescript-compiler" + }, "include": ["src", "shared", "config", "modern.config.ts"], "exclude": ["**/node_modules"] } diff --git a/apps/shared-tree-shaking/with-server/provider/tsconfig.spec.json b/apps/shared-tree-shaking/with-server/provider/tsconfig.spec.json deleted file mode 100644 index 9b2a121d114..00000000000 --- a/apps/shared-tree-shaking/with-server/provider/tsconfig.spec.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/apps/website-new/CHANGELOG.md b/apps/website-new/CHANGELOG.md index a1e503553db..c22d8227b27 100644 --- a/apps/website-new/CHANGELOG.md +++ b/apps/website-new/CHANGELOG.md @@ -1,5 +1,22 @@ # website-new +## 1.3.28 + +### Patch Changes + +- @module-federation/rspress-plugin@2.8.0 +- @module-federation/runtime@2.8.0 +- @module-federation/error-codes@2.8.0 + +## 1.3.27 + +### Patch Changes + +- Updated dependencies [8ec950c] + - @module-federation/rspress-plugin@2.7.0 + - @module-federation/runtime@2.7.0 + - @module-federation/error-codes@2.7.0 + ## 1.3.26 ### Patch Changes diff --git a/apps/website-new/docs/en/configure/experiments.mdx b/apps/website-new/docs/en/configure/experiments.mdx index 0ccfb9b7208..5c85dff1d08 100644 --- a/apps/website-new/docs/en/configure/experiments.mdx +++ b/apps/website-new/docs/en/configure/experiments.mdx @@ -56,16 +56,30 @@ This object contains flags related to build-time optimizations that can affect t When set to `true`, this option defines the `FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN` global constant as `true` during the build. In the `@module-federation/runtime-core`, this prevents the `snapshotPlugin()` and `generatePreloadAssetsPlugin()` from being included and initialized within the Module Federation instance. **Impact:** -* **Benefit:** Can reduce the overall bundle size of the Module Federation runtime by excluding the code for these two plugins. -* **Cost:** Disables the functionality provided by these plugins. The `snapshotPlugin` is crucial for the "mf-manifest protocol" – it's responsible for generating or providing runtime access to a build manifest (e.g., `mf-manifest.json`) containing metadata about exposed modules, shared dependencies, versions, and remotes. Disabling it means: - * The runtime loses access to this build manifest data. - * Features relying on the manifest, such as dynamic remote discovery, manifest-based version compatibility checks, advanced asset preloading (also handled by the removed `generatePreloadAssetsPlugin`), and potentially runtime debugging/introspection tools, will not function correctly or will be unavailable. - * Use this option only if you do not rely on these manifest-driven features and prioritize a minimal runtime footprint. + +- **Benefit:** Can reduce the overall bundle size of the Module Federation runtime by excluding the code for these two plugins. +- **Cost:** Disables the functionality provided by these plugins. The `snapshotPlugin` is crucial for the "mf-manifest protocol" – it's responsible for generating or providing runtime access to a build manifest (e.g., `mf-manifest.json`) containing metadata about exposed modules, shared dependencies, versions, and remotes. Disabling it means: + - The runtime loses access to this build manifest data. + - Features relying on the manifest, such as dynamic remote discovery, manifest-based version compatibility checks, advanced asset preloading (also handled by the removed `generatePreloadAssetsPlugin`), and potentially runtime debugging/introspection tools, will not function correctly or will be unavailable. + - Use this option only if you do not rely on these manifest-driven features and prioritize a minimal runtime footprint. :::warning **Caution:** Setting `disableSnapshot: true` will disable the mf-manifest protocol. This means you will lose TypeScript syncing support and hot module replacement (HMR) for federated modules. If you are only using `.js` remotes (not manifest-based remotes), you will not lose any functionality as the `js` remotes do not support these capabilities anyways. ::: +### disableRemote and disableShared + +- Type: `boolean` +- Required: No +- Default: `false` + +These options remove independent runtime-core capabilities at build time: + +- `disableRemote` removes the complete remote consumption path, including registration, entry loading, preloading, reading and executing exposed modules, and related snapshot handling. It does not remove the `exposes` or `container.get` generated for the current producer. Use it only when the build never consumes or dynamically registers remotes. +- `disableShared` removes shared dependency registration, resolution, and loading. A minimal empty share scope is retained so a remote without shared dependencies can still initialize. + +The options can be combined. Calling an API for a disabled capability throws an explicit error. Keep every option at its default unless the build is guaranteed not to use that capability. + ### target - Type: `'web' | 'node'` @@ -75,12 +89,13 @@ When set to `true`, this option defines the `FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLU This option defines the `ENV_TARGET` global constant during the build, specifying the intended execution environment. **Impact:** -* **`target: 'web'`**: Optimizes the build for browser environments. - * Ensures browser-specific remote entry loading mechanisms are used (`loadEntryDom`). - * Crucially, enables tree-shaking/dead-code elimination for Node.js-specific code within the `@module-federation/sdk`. Functions like `createScriptNode` and `loadScriptNode`, along with their required Node.js built-in modules (e.g., `vm`, `path`, `http`), are completely removed from the bundle, significantly reducing its size. -* **`target: 'node'`**: Optimizes the build for Node.js environments. - * Ensures Node.js-specific remote entry loading mechanisms are used (`loadEntryNode`). - * Includes the necessary Node.js-specific functions from the SDK (`createScriptNode`, `loadScriptNode`) in the bundle, allowing the federated application to function correctly in Node.js. + +- **`target: 'web'`**: Optimizes the build for browser environments. + - Ensures browser-specific remote entry loading mechanisms are used (`loadEntryDom`). + - Crucially, enables tree-shaking/dead-code elimination for Node.js-specific code within the `@module-federation/sdk`. Functions like `createScriptNode` and `loadScriptNode`, along with their required Node.js built-in modules (e.g., `vm`, `path`, `http`), are completely removed from the bundle, significantly reducing its size. +- **`target: 'node'`**: Optimizes the build for Node.js environments. + - Ensures Node.js-specific remote entry loading mechanisms are used (`loadEntryNode`). + - Includes the necessary Node.js-specific functions from the SDK (`createScriptNode`, `loadScriptNode`) in the bundle, allowing the federated application to function correctly in Node.js. Explicitly setting this value is recommended to ensure the intended optimizations are applied, especially in universal or server-side rendering scenarios. @@ -88,16 +103,17 @@ Explicitly setting this value is recommended to ensure the intended optimization The following table demonstrates how different combinations of the `disableSnapshot`, `target: 'web'`, and `externalRuntime` optimization flags affect the size of the generated `remoteEntry.js` file. These measurements can help you choose the right trade-off between runtime features and bundle size for your use case. -| Optimization Flags | remoteEntry.js | Gzip Size | Brotli Size | -|---------------------------------------------|:--------------:|:---------:|:-----------:| -| No optimization flags enabled | 69K | 21437 B | 19024 B | -| `disableSnapshot: true` | 65K | 20096 B | 17860 B | -| `target: 'web'` | 60K | 19314 B | 17105 B | -| Both enabled | 56K | 17998 B | 15982 B | -| Both enabled + `externalRuntime: true` | 14K | 5381 B | 4703 B | -| Both disabled + `externalRuntime: true` | 22K | 8222 B | 7269 B | +| Optimization Flags | remoteEntry.js | Gzip Size | Brotli Size | +| --------------------------------------- | :------------: | :-------: | :---------: | +| No optimization flags enabled | 69K | 21437 B | 19024 B | +| `disableSnapshot: true` | 65K | 20096 B | 17860 B | +| `target: 'web'` | 60K | 19314 B | 17105 B | +| Both enabled | 56K | 17998 B | 15982 B | +| Both enabled + `externalRuntime: true` | 14K | 5381 B | 4703 B | +| Both disabled + `externalRuntime: true` | 22K | 8222 B | 7269 B | **Notes:** + - Enabling both `disableSnapshot` and `target: 'web'` provides the greatest reduction in bundle size, especially when combined with `externalRuntime: true`. - Using the external runtime (`externalRuntime: true`) can dramatically reduce the size of your remote entry, but requires that the consumer provides the runtime. - Smaller bundle sizes can lead to faster load times and improved performance, but may disable certain features (see above for details on what each flag does). diff --git a/apps/website-new/docs/en/guide/advanced/_meta.json b/apps/website-new/docs/en/guide/advanced/_meta.json index c75da14498f..4dc184c495f 100644 --- a/apps/website-new/docs/en/guide/advanced/_meta.json +++ b/apps/website-new/docs/en/guide/advanced/_meta.json @@ -1,4 +1,9 @@ [ + { + "type": "file", + "name": "runtime-size-optimization", + "label": "Optimize Runtime Size" + }, "shared-tree-shaking", "multiple-shared-scope", { diff --git a/apps/website-new/docs/en/guide/advanced/runtime-size-optimization.mdx b/apps/website-new/docs/en/guide/advanced/runtime-size-optimization.mdx new file mode 100644 index 00000000000..75213ffe767 --- /dev/null +++ b/apps/website-new/docs/en/guide/advanced/runtime-size-optimization.mdx @@ -0,0 +1,219 @@ +# Optimize Runtime Size + +The {props.name || 'Module Federation'} runtime includes remote consumption, shared dependencies, and Manifest / Snapshot capabilities by default. This covers most use cases out of the box, but code for unused capabilities can still be included in the final output. + +Use `experiments.optimization` to remove capabilities that a build will definitely not use and reduce its runtime size. + +:::warning Before you enable these options + +These options remove code at build time. They are not feature flags that can be re-enabled after the page starts. Calling an API whose capability was removed throws an error. Rebuild and redeploy after changing an option. + +::: + +## Decide what this build needs + +Do not decide from the Host or Remote label alone. A Remote can consume other Remotes, while a Host can avoid shared dependencies entirely. Base the decision on what this build actually does. + +| Capability | Keep it when | Enable when it is definitely unused | +| --- | --- | --- | +| Remote consumption | `remotes` is configured, or the build calls `loadRemote`, `registerRemotes`, or `preloadRemote` | `disableRemote` | +| Shared dependencies | `shared` is configured, or the build registers, initializes, or loads shared dependencies | `disableShared` | +| Manifest / Snapshot | The build uses Manifest remotes, preloading, type synchronization, hot updates, DevTools, or runtime plugins that depend on Snapshot data | `disableSnapshot` | + +`disableRemote` removes the ability of the current build to consume other Remotes. It does not remove the producer-side `exposes` or `container.get` generated by the bundler. A producer that only exposes modules and never consumes another Remote can still enable it. + +When a build has no `exposes`, the Webpack and Rspack plugins also remove container entry initialization from the consumer's `main.js` automatically. No `disableExpose` option is needed. This does not change the producer's `remoteEntry.js`. + +## Configuration + +Webpack and Rspack accept the same options in `ModuleFederationPlugin`: + +```ts title="rspack.config.ts" +import { ModuleFederationPlugin } from '@module-federation/enhanced/rspack'; + +export default { + plugins: [ + new ModuleFederationPlugin({ + name: 'app_remote', + filename: 'remoteEntry.js', + exposes: { + './Button': './src/Button', + }, + experiments: { + optimization: { + target: 'web', + disableRemote: true, + disableShared: true, + disableSnapshot: true, + }, + }, + }), + ], +}; +``` + +For Webpack, change the import to `@module-federation/enhanced/webpack`. + +This combination is suitable for a minimal producer that only exposes modules, does not consume other Remotes, does not use shared dependencies, and does not depend on Manifest / Snapshot data. Start from the defaults and enable only options that are safe for your build. + +### Configure a runtime-only project with environment variables + +If your project bundles `@module-federation/runtime` or `@module-federation/runtime-core` directly without `ModuleFederationPlugin`, use environment variables and replace them with build-time booleans in your bundler configuration. + +For example, a project that does not consume Remotes, use shared dependencies or Snapshot data, and has no `exposes` can build with: + +```bash +FEDERATION_OPTIMIZE_NO_REMOTE=true \ +FEDERATION_OPTIMIZE_NO_SHARED=true \ +FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN=true \ +FEDERATION_HAS_EXPOSES=false \ +pnpm build +``` + +Webpack must replace the values explicitly: + +```ts title="webpack.config.ts" +import webpack from 'webpack'; + +const federationDefines = { + FEDERATION_OPTIMIZE_NO_REMOTE: JSON.stringify( + process.env.FEDERATION_OPTIMIZE_NO_REMOTE === 'true', + ), + FEDERATION_OPTIMIZE_NO_SHARED: JSON.stringify( + process.env.FEDERATION_OPTIMIZE_NO_SHARED === 'true', + ), + FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN: JSON.stringify( + process.env.FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === 'true', + ), + FEDERATION_HAS_EXPOSES: JSON.stringify( + process.env.FEDERATION_HAS_EXPOSES !== 'false', + ), +}; + +export default { + plugins: [new webpack.DefinePlugin(federationDefines)], +}; +``` + +With Rspack, pass the same `federationDefines` object to `rspack.DefinePlugin`. With Vite, pass it to the top-level `define` option. + +Leaving environment variables as runtime strings is not enough. The bundler must replace them with `true` or `false` at build time so the minifier can remove the corresponding code. All capabilities remain enabled when no value is provided, preserving existing behavior. + +## What each option removes + +### disableRemote + +Removes remote registration, entry loading, preloading, exposed-module retrieval and execution. It also removes Snapshot handling used only for remote loading and the remote-loading function generated by Webpack. + +Suitable for: + +- producers that only expose modules and never consume another Remote; +- standalone builds without `remotes` that never register a Remote at runtime. + +Do not use it for: + +- Hosts with configured `remotes`; +- applications that call `loadRemote`, `registerRemotes`, or `preloadRemote`; +- applications that rely on a Manifest to discover or load Remotes dynamically. + +### disableShared + +Removes shared dependency registration, selection, and loading, together with Webpack shared consumption, shared initialization, initial shared installation, fallback handling, and the shared tree-shaking plugin. A minimal empty share scope remains so a remote entry that does not use shared dependencies can still initialize. + +Use it only when the build has no `shared` configuration and never registers or loads a shared dependency through runtime APIs. + +Keep this capability when React, Vue, a component library, or another dependency must be reused across applications, remain a singleton, or participate in version selection. + +### disableSnapshot + +Removes Manifest / Snapshot and related preload capabilities. It can reduce the output further, but its impact is broader than the other options. + +Enable it only when using plain JavaScript Remotes without type synchronization, hot updates, preloading, DevTools, dynamic discovery, or another Snapshot-dependent feature. See the [Manifest / Snapshot guide](/guide/basic/manifest-snapshot.html#impact-of-disablesnapshot) for the complete impact. + +## Common combinations + +### Producer that only exposes modules + +If it does not consume other Remotes, enable: + +```ts +optimization: { + disableRemote: true, +} +``` + +Enable `disableShared` or `disableSnapshot` as well only when the producer does not use those capabilities. + +### Host without shared dependencies + +The Host still needs remote consumption, so disable only shared handling: + +```ts +optimization: { + disableShared: true, +} +``` + +### Lightweight Host using plain JavaScript Remotes + +If it does not use shared dependencies or Manifest / Snapshot data: + +```ts +optimization: { + target: 'web', + disableShared: true, + disableSnapshot: true, +} +``` + +Remote consumption must remain enabled. + +## Difference from externalRuntime + +`externalRuntime` extracts runtime code from each `remoteEntry.js` so multiple builds can reuse one external runtime. It mainly reduces duplicate downloads. `disableRemote`, `disableShared`, and `disableSnapshot` remove capabilities that the build does not need. + +You can combine both approaches: remove unused capabilities first, then use `externalRuntime` to reduce duplicated code across outputs. When using an external runtime, the page must provide a compatible runtime in advance. See [experiments.externalRuntime](/configure/experiments.html#externalruntime) for configuration details. + +## Verify that the optimization works + +### 1. Establish a comparable baseline + +Record the output size before optimization with the same build mode, minification settings, and dependency versions. Do not compare development output with production output. + +### 2. Enable one option at a time + +Build and record the size of `remoteEntry.js` or the file that actually contains the runtime. Confirm each reduction before combining options so it is easier to identify both the benefit and any lost behavior. + +The repository test fixture produced the following results. All three builds target the web and disable Snapshot support to isolate the two options. These values illustrate the relative reduction; actual results vary by project and version. + +| Configuration | Minified size | Reduction | +| --- | ---: | ---: | +| Remote and shared enabled | 73,154 B | - | +| `disableRemote: true` | 52,916 B | about 27.66% | +| `disableShared: true` | 50,008 B | about 31.64% | + +When `exposes` is not configured, the reduction affects the consumer's `main.js`, not the producer's `remoteEntry.js`. The following builds use the same entry, dependencies, and production settings; only container entry initialization changes. + +| Consumer `main.js` | Minified | Gzip | Reduction | +| --- | ---: | ---: | ---: | +| Container entry initialization included | 79,328 B | 23,897 B | - | +| No `exposes` | 78,344 B | 23,689 B | 984 B (1.24%), 208 B gzip (0.87%) | + +### 3. Test real application flows + +At minimum, verify: + +- initial page load and refresh; +- every remote module entry; +- dynamic registration and preload paths; +- shared dependency singleton and version behavior; +- development hot updates and type synchronization; +- DevTools, runtime plugins, and monitoring. + +If an explicit disabled-capability error appears, the build still needs that capability. Restore the corresponding option to `false` and rebuild. + +## Further reading + +- [Complete experiments configuration](/configure/experiments.html) +- [Manifest / Snapshot](/guide/basic/manifest-snapshot.html) +- [Shared Dependency Tree Shaking](/guide/advanced/shared-tree-shaking.html) diff --git a/apps/website-new/docs/en/guide/bridge/_meta.json b/apps/website-new/docs/en/guide/bridge/_meta.json index b7f300763b2..9703deaca9e 100644 --- a/apps/website-new/docs/en/guide/bridge/_meta.json +++ b/apps/website-new/docs/en/guide/bridge/_meta.json @@ -10,5 +10,10 @@ "label": "React", "collapsible": true, "collapsed": true + }, + { + "type": "file", + "name": "ssr", + "label": "Server rendering" } ] diff --git a/apps/website-new/docs/en/guide/bridge/ssr.mdx b/apps/website-new/docs/en/guide/bridge/ssr.mdx new file mode 100644 index 00000000000..a9d5c515922 --- /dev/null +++ b/apps/website-new/docs/en/guide/bridge/ssr.mdx @@ -0,0 +1,84 @@ +# Server rendering Bridge applications + +Bridge SSR V1 lets a federated application provider return a buffered HTML island on the server and hydrate that same island through the existing client lifecycle. + +## Supported scope + +- React 18 with declarative React Router v6 +- Vue 3 with Vue Router 4 +- Full server-side results and identity-only client hydration references +- Multiple instances of the same remote through document-unique instance IDs + +React data routers and other React or Router versions keep their existing client-rendering support but are not supported for SSR in V1. + +React Router v6 remotes must alias `react-router-dom$` to `@module-federation/bridge-react/dist/router-v6.es.js` in both their browser and Node builds. The default `router.es.js` adapter is CSR-only. Attempting to use the default adapter or `RouterProvider` during SSR throws a configuration error. + +## Remote provider + +Set `ssr: true` when no request preparation is needed. If preparation is required, map the same federated export key to separate browser and Node source files. The browser file supplies `hydrate`; the Node file supplies `prepare`. This keeps server renderers and request-only code out of browser chunks. + +```ts +// export-app.server.ts +export default createBridgeComponent({ + rootComponent: App, + ssr: { + prepare({ props }) { + return { + props, + dehydratedState: { initialValue: props.initialValue }, + }; + }, + }, +}); +``` + +The React Node entry owns `react-dom/server`; the Vue Node entry owns `@vue/server-renderer`. Framework elements, routers, application instances, and renderers never cross `@module-federation/bridge-shared`. + +## Host rendering + +Use `renderRemoteBridge` with an intentional, sanitized standard `Request`, stable module name, document-unique instance ID, and explicit props: + +```ts +const result = await renderRemoteBridge({ + loader: () => federationInstance.loadRemote('catalog/export-app'), + moduleName: 'catalog', + instanceId: 'catalog-sidebar', + request, + props: { basename: '/catalog' }, +}); +``` + +Pass the complete result to `createRemoteAppComponent` as `ssr` during server rendering. The adapter emits one instance-scoped slot containing exactly one marked mount child with the remote HTML and one adjacent `application/json` state child. The state child contains the versioned identity and optional dehydrated state, serialized with `serializeBridgeJSON` so executable HTML sequences are escaped. + +Only serialize an identity reference into the host hydration context: + +```ts +import { toBridgeSSRReference } from '@module-federation/bridge-shared'; + +const hydrationContext = { + catalog: toBridgeSSRReference(result), +}; +``` + +On the client, create the registry from the server-rendered document and install it before React `hydrateRoot` or the Vue host application mount. Pass the identity reference, not the full result, as `ssr`. + +```tsx +const registry = createBridgeHydrationRegistry(document); + +hydrateRoot( + document.getElementById('root')!, + + + , +); +``` + +Vue hosts call `provideBridgeHydrationRegistry(app, registry)` before `app.mount(...)`. A referenced slot is single-use: successful hydration consumes its snapshot, so navigating away and returning through the SPA takes the normal CSR path instead of rehydrating stale markup. A missing referenced slot also takes the CSR path. Malformed, duplicated, or identity-conflicting slots throw a contextual hydration error instead of silently mounting over invalid server markup. + +`renderRemoteBridge` rejects provider-load, unsupported-contract, identity, and rendering failures with contextual errors. Response policy remains host-owned. + +Bridge SSR V1 does not provide a shared load/render timeout or CSR fallback for server failures. A slow or broken remote can delay or fail the host response; hosts that need another policy must apply it around `renderRemoteBridge`. + +## Not included in V1 + +Assets/CSP/head management, status and header conflict policy, shared timeouts and server fallbacks, React data routers, additional React/Router versions, Nuxt or Modern.js adapters, portals/Teleports, streaming, backpressure, and benchmarks are follow-up work. diff --git a/apps/website-new/docs/en/integrations/framework/modernjs/quick-start.mdx b/apps/website-new/docs/en/integrations/framework/modernjs/quick-start.mdx index ed87a674c60..475a255d6cb 100644 --- a/apps/website-new/docs/en/integrations/framework/modernjs/quick-start.mdx +++ b/apps/website-new/docs/en/integrations/framework/modernjs/quick-start.mdx @@ -16,7 +16,7 @@ This chapter explains how to use the Module Federation plugin in Modern.js and p ### Node.js -Before getting started, you will need to install [Node.js](https://nodejs.org/), and ensure that your Node.js version is no lower than v20.19.5. **We recommend using the LTS version of Node.js 22.** +Before getting started, you will need to install [Node.js](https://nodejs.org/), and ensure that your Node.js version is no lower than v20.19.5. **We recommend using the LTS version of Node.js 24.** You can check the currently used Node.js version with the following command: @@ -26,17 +26,17 @@ node -v If you do not have Node.js installed in your current environment, or the installed version is lower than v20.19.5, you can use [nvm](https://github.com/nvm-sh/nvm) or [fnm](https://github.com/Schniz/fnm) to install the required version. -Here is an example of how to install the Node.js 22 LTS version via nvm: +Here is an example of how to install the Node.js 24 LTS version via nvm: ```bash -# Install the long-term support version of Node.js 22 -nvm install 22 --lts +# Install the long-term support version of Node.js 24 +nvm install 24 --lts -# Make the newly installed Node.js 22 as the default version -nvm alias default 22 +# Make the newly installed Node.js 24 as the default version +nvm alias default 24 -# Switch to the newly installed Node.js 22 -nvm use 22 +# Switch to the newly installed Node.js 24 +nvm use 24 ``` :::tip nvm and fnm diff --git a/apps/website-new/docs/en/integrations/framework/nextjs/basic-example.mdx b/apps/website-new/docs/en/integrations/framework/nextjs/basic-example.mdx index 347f1bd2eb0..54ee9689591 100644 --- a/apps/website-new/docs/en/integrations/framework/nextjs/basic-example.mdx +++ b/apps/website-new/docs/en/integrations/framework/nextjs/basic-example.mdx @@ -27,7 +27,7 @@ Check out the example project list here: [Next.js SSR](https://github.com/module ## Setup Environment -Before getting started, you will need to install [Node.js](https://nodejs.org/), and ensure that your Node.js version >= 16. **We recommend using the LTS version of Node.js 20.** +Before getting started, you will need to install [Node.js](https://nodejs.org/), and ensure that your Node.js version >= 16. **We recommend using the LTS version of Node.js 24.** You can check the currently used Node.js version with the following command: @@ -37,17 +37,17 @@ node -v If you do not have Node.js installed in your current environment, or the installed version is too low, you can use [nvm](https://github.com/nvm-sh/nvm) or [fnm](https://github.com/Schniz/fnm) to install the required version. -Here is an example of how to install the Node.js 20 LTS version via nvm: +Here is an example of how to install the Node.js 24 LTS version via nvm: ```bash -# Install the long-term support version of Node.js 20 -nvm install 20 --lts +# Install the long-term support version of Node.js 24 +nvm install 24 --lts -# Make the newly installed Node.js 20 as the default version -nvm alias default 20 +# Make the newly installed Node.js 24 as the default version +nvm alias default 24 -# Switch to the newly installed Node.js 20 -nvm use 20 +# Switch to the newly installed Node.js 24 +nvm use 24 ``` @@ -487,4 +487,3 @@ export default nextConfig; - diff --git a/apps/website-new/docs/en/integrations/framework/nextjs/index.mdx b/apps/website-new/docs/en/integrations/framework/nextjs/index.mdx index 8c093af3c8d..1904ea07677 100644 --- a/apps/website-new/docs/en/integrations/framework/nextjs/index.mdx +++ b/apps/website-new/docs/en/integrations/framework/nextjs/index.mdx @@ -69,7 +69,7 @@ new NextFederationPlugin({ exposePages: boolean, // `false` by default enableImageLoaderFix: boolean, // `false` by default enableUrlLoaderFix: boolean, // `false` by default - skipSharingNextInternals: boolean, // `false` by default + skipSharingNextInternals: boolean // `false` by default }, }); ``` @@ -80,6 +80,8 @@ new NextFederationPlugin({ - `enableUrlLoaderFix` – adds public hostname to all assets bundled by `url-loader`. - `skipSharingNextInternals` – disables sharing of next internals. You can use it if you want to share next internals yourself or want to use this plugin on non next applications +Next.js derives the expose asset fields used by legacy `flushChunks()` from `mf-manifest.json` without an additional Webpack stats traversal, so applications on older versions continue to work during rolling upgrades. Custom tooling that reads other legacy stats fields should migrate to `mf-manifest.json`; setting `manifest: false` retains the complete legacy output. + ## Demo You can see it in action here: https://github.com/module-federation/module-federation-examples/pull/2147 diff --git a/apps/website-new/docs/en/integrations/practice/react/rsbuild-cra.mdx b/apps/website-new/docs/en/integrations/practice/react/rsbuild-cra.mdx index e30a18c3785..ce06234635e 100644 --- a/apps/website-new/docs/en/integrations/practice/react/rsbuild-cra.mdx +++ b/apps/website-new/docs/en/integrations/practice/react/rsbuild-cra.mdx @@ -10,7 +10,7 @@ Check out the example project list here: [Rsbuild CRA](https://github.com/module ## Setup Environment -Before getting started, you will need to install [Node.js](https://nodejs.org/), and ensure that your Node.js version >= 16. **We recommend using the LTS version of Node.js 20.** +Before getting started, you will need to install [Node.js](https://nodejs.org/), and ensure that your Node.js version >= 16. **We recommend using the LTS version of Node.js 24.** You can check the currently used Node.js version with the following command: @@ -20,17 +20,17 @@ node -v If you do not have Node.js installed in your current environment, or the installed version is too low, you can use [nvm](https://github.com/nvm-sh/nvm) or [fnm](https://github.com/Schniz/fnm) to install the required version. -Here is an example of how to install the Node.js 20 LTS version via nvm: +Here is an example of how to install the Node.js 24 LTS version via nvm: ```bash -# Install the long-term support version of Node.js 20 -nvm install 20 --lts +# Install the long-term support version of Node.js 24 +nvm install 24 --lts -# Make the newly installed Node.js 20 as the default version -nvm alias default 20 +# Make the newly installed Node.js 24 as the default version +nvm alias default 24 -# Switch to the newly installed Node.js 20 -nvm use 20 +# Switch to the newly installed Node.js 24 +nvm use 24 ``` ## Step 1: Setup React Applications diff --git a/apps/website-new/docs/pt-BR/_components/EnableAsyncEntry.mdx b/apps/website-new/docs/pt-BR/_components/EnableAsyncEntry.mdx new file mode 100644 index 00000000000..d0f0f8970c7 --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/EnableAsyncEntry.mdx @@ -0,0 +1,24 @@ +Se o `@module-federation/modern-js-v3` plugin é usado, o corresponding asynchronous entry vai ser habilitado based no builder tipo por padrão. + +But se it é [build mode](https://modernjs.dev/en/guides/concept/entries.html#build-mode-entry), then você still precisa definir o asynchronous entry manually. + +Next, nós vai demonstrate como para habilite asynchronous entry. + +Crie o bootstrap.js arquivo e copy o contents do original arquivo de entrada here: + +```diff title="bootstrap.js" ++ import React from 'react'; ++ import ReactDOM from 'react-dom'; ++ import App from './App'; ++ ReactDOM.render(, document.getElementById('root')); +``` + +Modify o content do original arquivo de entrada e reference bootstrap.js instead: + +```diff title="index.js" ++ import('./bootstrap'); +- import React from 'react'; +- import ReactDOM from 'react-dom'; +- import App from './App'; +- ReactDOM.render(, document.getElementById('root')); +``` diff --git a/apps/website-new/docs/pt-BR/_components/cli/view-all-cmds.mdx b/apps/website-new/docs/pt-BR/_components/cli/view-all-cmds.mdx new file mode 100644 index 00000000000..e50262d724a --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/cli/view-all-cmds.mdx @@ -0,0 +1,21 @@ +Se você precisa view all disponível CLI comandos, please run o seguintes comando no projeto diretório: + +```bash +npx mf -h +``` + +Output: + +```bash + +Usage: mf [options] + +Options: + -V, --version output the version number + -h, --help display help for command + +Commands: + dts [options] generate or fetch the mf types + help [command] display help for command + +``` diff --git a/apps/website-new/docs/pt-BR/_components/configure/mf-manifest-stats-common.mdx b/apps/website-new/docs/pt-BR/_components/configure/mf-manifest-stats-common.mdx new file mode 100644 index 00000000000..f37ef0ccc51 --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/configure/mf-manifest-stats-common.mdx @@ -0,0 +1,68 @@ +## metaData (Both Arquivos) + +`metaData` describes como este build é consumido em runtime e o build context. Both `mf-stats.json` e `mf-manifest.json` include it. + +### StatsMetaData + +`StatsMetaData` has two mutually exclusive shapes: + +- **Função form**: `getPublicPath: string` +- **String form**: `publicPath: string` (opcional `ssrPublicPath: string`) + +Shared fields: + +| Field | Tipo | Obrigatório | Description | +| ---------------- | ---------------- | -------- | ------------------------------- | +| `name` | `string` | Yes | Current remote/host name | +| `globalName` | `string` | Yes | Global name for o remoteEntry | +| `buildInfo` | `StatsBuildInfo` | Yes | Build information | +| `remoteEntry` | `ResourceInfo` | Yes | Remote entry resource | +| `ssrRemoteEntry` | `ResourceInfo` | No | SSR remote entry (se any) | +| `types` | `MetaDataTypes` | No | Tipos bundle info (se any) | +| `type` | `string` | Yes | APP, NPM | +| `pluginVersion` | `string` | No | MF Plugin versão | + +### ResourceInfo + +| Field | Tipo | Obrigatório | Description | +| ------ | ----------------- | -------- | ------------------------------------------ | +| `path` | `string` | Yes | Relative caminho em build output | +| `name` | `string` | Yes | Arquivo name | +| `type` | `RemoteEntryType` | Yes | Remote entry format (`var/umd/system/...`) | + +### StatsBuildInfo + +| Field | Tipo | Obrigatório | Description | +| ---------------- | ---------- | -------- | ---------------------------- | +| `buildVersion` | `string` | Yes | Build versão | +| `buildName` | `string` | Yes | Build name | +| `target` | `string[]` | No | Build targets | +| `plugins` | `string[]` | No | Tree-shaking plugins | +| `excludePlugins` | `string[]` | No | Tree-shaking exclude plugins | + +### MetaDataTypes + +| Field | Tipo | Obrigatório | Description | +| ------ | -------- | -------- | --------------------------------------------------------- | +| `path` | `string` | Yes | Output caminho | +| `name` | `string` | Yes | Arquivo name (obrigatório for legacy tipos, vai ser deprecated) | +| `api` | `string` | Yes | API entry | +| `zip` | `string` | Yes | Zip caminho | + +## assets (Both Arquivos) + +`StatsAssets` describes sync/async assets para uma shared ou módulo exposto. Both arquivos use it. + +### StatsAssets + +| Field | Tipo | Obrigatório | Description | +| ----- | ----------------- | -------- | ----------------- | +| `js` | `StatsAssetsInfo` | Yes | JavaScript assets | +| `css` | `StatsAssetsInfo` | Yes | CSS assets | + +### StatsAssetsInfo + +| Field | Tipo | Obrigatório | Description | +| ------- | ---------- | -------- | -------------- | +| `sync` | `string[]` | Yes | Initial assets | +| `async` | `string[]` | Yes | Async assets | diff --git a/apps/website-new/docs/pt-BR/_components/create-shared-tree-shaking-deploy-server.mdx b/apps/website-new/docs/pt-BR/_components/create-shared-tree-shaking-deploy-server.mdx new file mode 100644 index 00000000000..54b158e6914 --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/create-shared-tree-shaking-deploy-server.mdx @@ -0,0 +1,44 @@ +## Deploy Servidor (reference implementation) + +Se você plan para build your own Deploy Servidor, o seguintes high-level flow pode ser usado para implement `server-calc`. + +### 1. Aggregate `usedExports` during implantação + +In your CI/CD implantação pipeline, your service deve: + +- collect build metadata for all aplicações about para ser released (typically `mf-stats.json` ou similar arquivos); +- para o mesmo dependência compartilhada (e.g. `antd@6.1.0`), aggregate o `usedExports` declared by each aplicação. + +### 2. Compute o global minimum union + +Merge e deduplicate all collected `usedExports` lists para get o minimal global definir (o union) obrigatório pelo system. + +### 3. Run uma secondary build para produce o optimized shared bundle + +Invoke your ferramenta de build (e.g. Rspack CLI) as um isolated build e pass: + +- o target dependência compartilhada name e versão (e.g. `antd@6.1.0`); +- o global `usedExports` union do previous step. + O output é uma standalone shared bundle containing apenas o obrigatório módulos. + +### 4. Update e publish o Snapshot + +Upload o optimized bundle para your static asset host (CDN). Then update o Module Federation Snapshot arquivo (typically o remote versão de `mf-manifest.json`) com fields such as: + +- `secondarySharedTreeShakingEntry`: URL do optimized bundle, +- `secondarySharedTreeShakingName`: unique bundle name, +- `treeShakingStatus`: mark as disponível. + +Finally, distribute o updated Snapshot para all consumers. + +### 5. Runtime on-demand carregamento + +Quando uma user visits a aplicação, o MF Runtime reads o Snapshot. Se `treeShakingStatus` é disponível e o environment meets o carregamento conditions, it carrega o optimized bundle via `secondarySharedTreeShakingEntry` instead do full bundle. + +:::tip Versioning, caching, and compatibility + +- **Strict versioning** é o foundation. Ensure secondary builds e carregamento em runtime são based no exact mesmo versão (e.g. `antd@6.1.0`) para avoid mismatches. +- Use uma **reasonable caching estratégia** for secondary build artifacts. Since content changes com o global `usedExports`, prefer content-hash-based filenames for long-term caching. +- Este flow é **forward compatible**: quando não habilitado ou conditions aren't met, consumers fall back para o full bundle sem impacting existente functionality. + +::: diff --git a/apps/website-new/docs/pt-BR/_components/data-fetch/consumer.mdx b/apps/website-new/docs/pt-BR/_components/data-fetch/consumer.mdx new file mode 100644 index 00000000000..22438aa4b40 --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/data-fetch/consumer.mdx @@ -0,0 +1,34 @@ +::: info Note +Atualmente, apenas [Modern.js](/integrations/framework/modernjs/index.html) suporta dados fetching em SSR environments. +::: + +No consumer, precisamos use o [createLazyComponent](/guide/bridge/react/load-component.html#what-is-createlazycomponent) API para carregar o remote componente e buscar its dados. + +```tsx +import { getInstance } from '@module-federation/enhanced/runtime'; +import { ERROR_TYPE } from '@module-federation/bridge-react/data-fetch'; +import { lazyLoadComponentPlugin } from '@module-federation/bridge-react/data-fetch'; + +const instance = getInstance(); +instance.registerPlugins([lazyLoadComponentPlugin()]); + +const List = instance.createLazyComponent({ + loader: () => import('remote/List'), + loading: 'loading...', + export: 'default', + fallback: ({ error, errorType, dataFetchMapKey }) => { + console.error(error); + if (errorType === ERROR_TYPE.LOAD_REMOTE) { + return
load remote failed
; + } + if (errorType === ERROR_TYPE.DATA_FETCH) { + return
data fetch failed: {dataFetchMapKey}
; + } + return
error type is unknown
; + }, +}); + +export default function Index() { + return ; +} +``` diff --git a/apps/website-new/docs/pt-BR/_components/data-fetch/prefetch-demo.mdx b/apps/website-new/docs/pt-BR/_components/data-fetch/prefetch-demo.mdx new file mode 100644 index 00000000000..592c88ab6e0 --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/data-fetch/prefetch-demo.mdx @@ -0,0 +1,34 @@ +### Scenario 1: Prefetching Dados Only + +Quando uma user hovers over uma link esse vai navigate para o shop page, nós pode pré-busca o dados needed for esse page. + +```ts +import { getInstance } from '@module-federation/enhanced/runtime'; + +const instance = getInstance(); + +const handleMouseEnter = () => { + instance.prefetch({ + id: 'shop/Button', + dataFetchParams: { productId: '12345' }, + }); +}; +``` + +### Scenario 2: Prefetching Dados e Preloading Componente Resources + +For further optimization, nós pode download o componente's JS e CSS arquivos at o mesmo time as prefetching o dados. + +```ts +import { getInstance } from '@module-federation/enhanced/runtime'; + +const instance = getInstance(); + +const handleMouseEnter = () => { + instance.prefetch({ + id: 'shop/Button', + dataFetchParams: { productId: '12345' }, + preloadComponentResource: true, + }); +}; +``` diff --git a/apps/website-new/docs/pt-BR/_components/data-fetch/prefetch-tip.mdx b/apps/website-new/docs/pt-BR/_components/data-fetch/prefetch-tip.mdx new file mode 100644 index 00000000000..38fa7ca4652 --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/data-fetch/prefetch-tip.mdx @@ -0,0 +1,5 @@ +:::note + +Esta API requires registering o [lazyLoadComponentPlugin plugin](/guide/bridge/react/load-component.html#step-1-register-lazyloadcomponentplugin) antes ele pode ser usado. + +::: diff --git a/apps/website-new/docs/pt-BR/_components/data-fetch/provider-tip.mdx b/apps/website-new/docs/pt-BR/_components/data-fetch/provider-tip.mdx new file mode 100644 index 00000000000..38d15f34458 --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/data-fetch/provider-tip.mdx @@ -0,0 +1,3 @@ +::: tip +Producers pode use [Rslib](/integrations/build-tool/rslib.html#ssr) e [Modern.js](/integrations/framework/modernjs/index.html). +::: diff --git a/apps/website-new/docs/pt-BR/_components/runtime/index.mdx b/apps/website-new/docs/pt-BR/_components/runtime/index.mdx new file mode 100644 index 00000000000..c1d99c36e78 --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/runtime/index.mdx @@ -0,0 +1,31 @@ +Se o plugin de build é usado, um MF instance vai ser automatically criado e stored em memory quando o projeto começa. Você pode diretamente call métodos do MF instance via o. + +```ts +import { loadRemote } from '@module-federation/enhanced/runtime'; + +loadRemote('remote1'); +``` + +Se o plugin de build é não usado, você precisa manually crie um MF instance antes chamar o corresponding API. + +```ts +import { createInstance } from '@module-federation/enhanced/runtime'; + +const mf = createInstance({ + name: 'host', + remotes: [ + { + name: 'remote1', + entry: 'http://localhost:2001/vmok-manifest.json', + }, + ], +}); + +mf.loadRemote('remote1'); +``` + +:::tip ModuleFederation instance + +Um objeto criado pelo `ModuleFederation` class esse contains all runtime functionality. Você pode enter `__FEDERATION__.__INSTANCES__` no console para view o full instance information. + +::: diff --git a/apps/website-new/docs/pt-BR/_components/secondary-build.mdx b/apps/website-new/docs/pt-BR/_components/secondary-build.mdx new file mode 100644 index 00000000000..7eccd0420cf --- /dev/null +++ b/apps/website-new/docs/pt-BR/_components/secondary-build.mdx @@ -0,0 +1,70 @@ +## Producing uma secondary tree-shaken shared artifact + +:::warning Note +Se your goal é “tree-shake uma dependência compartilhada para uma single aplicação”, [usedExports](/configure/shared.html#usedexports) é geralmente enough. + +Este section é about generating uma standalone secondary artifact esse pode ser carregado em runtime on demand, e pode ser distributed ou reused do implantação side. +::: + +Este process builds apenas dependências compartilhadas; remotes vai não take effect. O original projeto entry é automatically ignored during o build, e apenas módulos shared são bundled. + +### Non-Modern.js projetos + +Use `TreeShakingSharedPlugin` em your build configuração, definir `secondary: true`, e reuse your existente `mfConfig`. + +import { Tab, Tabs } from '@theme'; + + + + ```ts + import { TreeShakingSharedPlugin } from '@module-federation/enhanced'; + // import { TreeShakingSharedPlugin } from '@module-federation/enhanced/rspack'; + // ... + plugins: [ + new TreeShakingSharedPlugin({ + secondary: true, + mfConfig, + }), + ]; + ``` + + + ```ts + import { TreeShakingSharedPlugin } from '@module-federation/rsbuild-plugin'; + // ... + plugins: [ + new TreeShakingSharedPlugin({ + secondary: true, + mfConfig, + }), + ]; + ``` + + + ```ts + import { sharing } from '@rspack/core'; + const { TreeShakingSharedPlugin } = sharing; + // ... + plugins: [ + new TreeShakingSharedPlugin({ + secondary: true, + mfConfig, + }), + ]; + ``` + + + +### Modern.js projetos + +Ao usar `@module-federation/modern-js-v3`, habilite `secondarySharedTreeShaking: true` no plugin opções para gerar o secondary artifact. + +```ts title="modern.config.ts" +import mfPlugin from '@module-federation/modern-js-v3'; +// ... +plugins: [ + mfPlugin({ + secondarySharedTreeShaking: true, + }), +]; +``` diff --git a/apps/website-new/docs/pt-BR/_nav.json b/apps/website-new/docs/pt-BR/_nav.json new file mode 100644 index 00000000000..0053c44e388 --- /dev/null +++ b/apps/website-new/docs/pt-BR/_nav.json @@ -0,0 +1,113 @@ +[ + { + "text": "IA", + "link": "/ai/", + "activeMatch": "/ai/" + }, + { + "text": "Guia", + "link": "/guide/start/", + "activeMatch": "/guide/" + }, + { + "text": "Integrações", + "link": "/integrations/", + "activeMatch": "/integrations/", + "items": [ + { + "text": "Visão geral", + "link": "/integrations/" + }, + { + "text": "Rsbuild", + "link": "/integrations/build-tool/rsbuild" + }, + { + "text": "Rslib", + "link": "/integrations/build-tool/rslib" + }, + { + "text": "Vite", + "link": "/integrations/build-tool/vite" + }, + { + "text": "Rspack", + "link": "/integrations/bundler/rspack" + }, + { + "text": "Webpack", + "link": "/integrations/bundler/webpack" + }, + { + "text": "Metro", + "link": "/integrations/bundler/metro" + }, + { + "text": "Rspress", + "link": "/integrations/documentation/rspress" + }, + { + "text": "Modern.js", + "link": "/integrations/framework/modernjs" + }, + { + "text": "Next.js", + "link": "/integrations/framework/nextjs" + }, + { + "text": "Angular", + "link": "/integrations/framework/angular" + }, + { + "text": "Monorepos", + "link": "/integrations/framework/monorepos" + }, + { + "text": "Prática", + "link": "/integrations/practice" + } + ] + }, + { + "text": "Configuração", + "link": "/configure/", + "activeMatch": "/configure/" + }, + { + "text": "Plugins", + "link": "/plugin/dev/index", + "activeMatch": "/plugin/" + }, + { + "text": "Showcase", + "link": "/showcase/index", + "activeMatch": "/showcase/" + }, + { + "text": "Blog", + "link": "/blog/index", + "activeMatch": "/blog/" + }, + { + "text": "Ecossistema", + "activeMatch": "/ecosystem/", + "items": [ + { + "text": "Module Federation Examples", + "link": "https://github.com/module-federation/module-federation-examples" + }, + { + "text": "Practical Module Federation", + "link": "https://module-federation.myshopify.com/products/practical-module-federation" + }, + { + "text": "Zephyr Cloud", + "link": "https://zephyr-cloud.io/" + }, + { + "text": "Nx", + "link": "https://nx.dev/" + } + ] + } +] diff --git a/apps/website-new/docs/pt-BR/ai/index.mdx b/apps/website-new/docs/pt-BR/ai/index.mdx new file mode 100644 index 00000000000..dd5e8a40433 --- /dev/null +++ b/apps/website-new/docs/pt-BR/ai/index.mdx @@ -0,0 +1,116 @@ +--- +pageType: doc-wide +sidebar: false +--- + +# Início rápido com AI + +:::tip Prefere ler a documentação por conta própria? +Se quiser percorrer os conceitos, a configuração e as integrações do Module Federation em ordem, acesse o [guia de introdução](/guide/start/index.html). +::: + +## Uma maneira melhor de começar + +Se você já usa uma ferramenta de codificação com AI, o melhor ponto de partida não é ler toda a documentação manualmente. + +A abordagem mais rápida é: **entregue primeiro a documentação mais recente do Module Federation ao seu agente; depois, deixe-o responder perguntas, depurar problemas, atualizar configurações e escrever código.** + +Muitos modelos ainda têm conhecimento incompleto ou desatualizado sobre o Module Federation 2.0. O objetivo desta página não é fazer você estudar primeiro, mas ajudar seu agente a consultar o material correto antes de agir. + +## Configuração recomendada + +Se você usa Claude Code, Cursor, Windsurf ou outro editor com suporte a Skills, instale: + +```bash +npx skills add module-federation/agent-skills --skill mf -y +``` + +Depois peça ao agente para ler a documentação antes de responder: + +```text +/mf docs What's the difference between singleton and requiredVersion in shared? +``` + +A ideia é simples: + +- você não precisa procurar pela documentação primeiro +- seu agente lê a documentação mais recente antes de responder +- o resultado tem muito mais chance de ser correto + +## Se quiser que o agente faça mais + +A skill `mf` faz mais do que responder perguntas. Ela também pode ajudar seu agente a: + +- adicionar Module Federation a um projeto existente +- inspecionar problemas de configuração +- analisar problemas de tipos +- verificar conflitos de dependências compartilhadas +- inspecionar informações de módulos remotos +- ler relatórios de observabilidade e depurar falhas de carregamento do MF + +[Ver documentação das Agent Skills](/ai/skill.html) + +## Observar e depurar carregamento do MF + +Se você quiser que um agente de codificação com AI depure carregamento do Module Federation com dados concretos de runtime, habilite o [Observability Plugin](/plugin/plugins/observability-plugin.html) +primeiro. + +Depois de uma falha de carregamento, o console do navegador imprime uma `traceId` e, +em desenvolvimento, um comando `read:`. Passe essa dica do console para seu agente: + +```text +/mf observability +I saw this Module Federation console error: + +[Module Federation] Observability report generated +traceId: mf-... +read: window.__FEDERATION__.__OBSERVABILITY__["runtime_host"].getReport("mf-...") + +Please read the report and fix the issue. +``` + +Para Node ou SSR, peça ao agente para ler `.mf/observability/latest.json`. Em +produção, envie relatórios com o callback `onReport` e forneça ao agente o +relatório enviado ou o trace ID. + +## Você ainda pode usar isso sem instalar nada + +Se você quiser primeiro uma versão mais leve, envie isto diretamente ao seu agente: + +```text +Before answering, please read https://module-federation.io/llms.txt to learn about the latest Module Federation 2.0 documentation, then answer my question. +``` + +Essa é a forma mais simples de impedir que o modelo tente adivinhar quando a skill ainda não foi instalada. + +## Documentação que você pode passar ao seu agente + +### llms.txt + +[module-federation.io](https://module-federation.io) oferece suporte ao padrão [llms.txt](https://llmstxt.org), que é um bom ponto de entrada para sistemas de AI: + +```text +https://module-federation.io/llms.txt +``` + +### Documentação em Markdown + +Todas as páginas do site de documentação também estão disponíveis em Markdown. Troque `.html` no fim de uma URL de documentação por `.md`: + +```text +# HTML version +https://module-federation.io/guide/basic/runtime.html + +# Markdown version +https://module-federation.io/guide/basic/runtime.md +``` + +## Próximos passos + +Se quiser começar usando esse fluxo de trabalho agora: + +1. Instale `mf` +2. Faça a pergunta que você quer responder +3. Habilite o [Observability Plugin](/plugin/plugins/observability-plugin.html) quando + precisar de observabilidade do carregamento do MF +4. Abra a [documentação das Skills](/ai/skill.html) para ver quais subcomandos ela oferece diff --git a/apps/website-new/docs/pt-BR/ai/skill.mdx b/apps/website-new/docs/pt-BR/ai/skill.mdx new file mode 100644 index 00000000000..64c39e1e4d2 --- /dev/null +++ b/apps/website-new/docs/pt-BR/ai/skill.mdx @@ -0,0 +1,135 @@ +--- +pageType: doc-wide +sidebar: false +--- + +# Skills + +Module Federation agora expõe uma **skill `mf`** unificada. + +Você não precisa escolher uma lista longa de skills separadas nem ler a documentação primeiro para depois repassá-la ao agente. A abordagem mais simples é instalar esta única skill e deixar o agente decidir se deve ler documentação, inspecionar configuração ou solucionar um problema. + +Se ainda não leu, comece pelo [início rápido com AI](/ai/index.html). + +## Instalação + +```bash +npx skills add module-federation/agent-skills --skill mf -y +``` + +Depois disso, a entrada principal é: + +```text +/mf +``` + +Se você não puder usar a CLI, também pode copiar manualmente o diretório do GitHub: + +```text +https://github.com/module-federation/agent-skills/tree/main/skills/mf +``` + +## Como usar + +`mf` tem um único ponto de entrada, mas contém várias capacidades. Você pode informar um subcomando explícito ou simplesmente pedir em linguagem natural. + +Com subcomandos explícitos: + +```text +/mf docs How do I use Module Federation in Modern.js? +/mf integrate +/mf type-check +/mf runtime-error RUNTIME-008 +/mf observability +``` + +Com linguagem natural: + +```text +/mf What's the difference between singleton and requiredVersion in shared? +/mf Help me figure out why this project is not pulling remote types +/mf Add Module Federation to the current project +/mf I saw a Module Federation console error with traceId mf-... +``` + +## O que `mf` oferece + +| Subcomando | Use para | +| --- | --- | +| `docs` | Ler a documentação mais recente antes de responder perguntas sobre configuração, APIs e conceitos | +| `context` | Inspecionar a configuração de MF do projeto atual | +| `module-info` | Inspecionar URLs de módulos remotos, módulos expostos e metadados relacionados | +| `integrate` | Adicionar Module Federation a um projeto existente | +| `type-check` | Solucionar problemas relacionados a tipos | +| `shared-deps` | Solucionar conflitos de dependências compartilhadas e bundling duplicado | +| `perf` | Solucionar lentidão no desenvolvimento local e no HMR | +| `config-check` | Solucionar erros de configuração, arquivos ausentes e incompatibilidades de plugin | +| `bridge-check` | Solucionar problemas de integração com Bridge | +| `runtime-error` | Solucionar códigos explícitos de erro em runtime, especialmente `RUNTIME-001` e `RUNTIME-008` | +| `observability` | Ler relatórios de observabilidade, rastrear fases de carregamento e depurar falhas de carregamento em runtime/build | + +## Fluxos de trabalho mais comuns + +### 1. Leia a documentação antes de responder + +Esse é o caso de uso mais comum e o melhor lugar para começar: + +```text +/mf docs What's the difference between singleton and requiredVersion in shared? +``` + +Isso faz o agente ler a documentação mais recente primeiro, em vez de tentar adivinhar com base em memória desatualizada. + +### 2. Deixe o agente integrar por você + +Se quiser adicionar Module Federation a um projeto existente: + +```text +/mf integrate +``` + +O agente vai inspecionar seu projeto atual e decidir o que fazer em seguida. + +### 3. Deixe o agente depurar diretamente + +Se você já tem um problema concreto: + +```text +/mf type-check +/mf shared-deps +/mf config-check +/mf runtime-error RUNTIME-008 +/mf observability +``` + +Nesse ponto, o objetivo não é você investigar manualmente primeiro. O objetivo é deixar o agente começar o diagnóstico imediatamente. + +### 4. Deixe o agente ler a observabilidade do MF + +Para observabilidade completa do carregamento, instale o [Observability Plugin](/plugin/plugins/observability-plugin.html) +na sua aplicação. Quando um erro no console do navegador imprimir uma `traceId` e um +comando `read:`, passe isso para a skill: + +```text +/mf observability +I saw this Module Federation console error: + +[Module Federation] Observability report generated +traceId: mf-... +read: window.__FEDERATION__.__OBSERVABILITY__["runtime_host"].getReport("mf-...") + +Please read the report and fix the issue. +``` + +Para Node, SSR ou uploads de produção: + +```text +/mf observability +Read .mf/observability/latest.json and explain the likely owner and fix. +``` + +## A única coisa que você realmente precisa lembrar + +Você não precisa ler a documentação primeiro e depois dizer ao agente o que fazer. + +Instale `mf`; depois deixe o agente ler, inspecionar, decidir e agir. diff --git a/apps/website-new/docs/pt-BR/blog/_meta.json b/apps/website-new/docs/pt-BR/blog/_meta.json new file mode 100644 index 00000000000..c69c6a5aca3 --- /dev/null +++ b/apps/website-new/docs/pt-BR/blog/_meta.json @@ -0,0 +1,16 @@ +[ + "index", + "announcement", + "hoisted-runtime", + "error-load-remote", + { + "type": "file", + "name": "node", + "label": "Module Federation no Node.js, de forma simples" + }, + { + "type": "file", + "name": "v2-stable-version", + "label": "Lançamento estável do MF 2.0" + } +] diff --git a/apps/website-new/docs/pt-BR/blog/announcement.mdx b/apps/website-new/docs/pt-BR/blog/announcement.mdx new file mode 100644 index 00000000000..25fc25f81a5 --- /dev/null +++ b/apps/website-new/docs/pt-BR/blog/announcement.mdx @@ -0,0 +1,116 @@ +# Announcement de Release + +> April 26, 2024 + +Today, nós são excited para announce o official release de Module Federation 2.0! +Este novo versão é uma collaborative effort entre o [ByteDance Web Infra](https://github.com/web-infra-dev) team, o author de Module Federation, [Zack Jackson](https://github.com/ScriptedAlchemy) +e several de our community members. Special thanks para [@ilteoood](https://github.com/ilteoood), [@patricklafrance](https://github.com/patricklafrance) e [@crutch12](https://github.com/crutch12). +Module Federation 2.0 addresses many issues do previous versão, building upon ByteDance's internal practices e o existente community ecosystem de Module Federation. + + +import AnnouncementVideo from '@components/AnnouncementVideo.tsx'; + + + +## Why Use Module Federation 2.0? + +Introduced by Webpack 5, Module Federation has been uma significant feature for over three years. +As um módulo compartilhamento solution, it has gained widespread adoption, especialmente em large web projetos, enhancing o efficiency e simplicity de developing large aplicações e facilitating team collaboration. +However, com its broader use, novo challenges have emerged. + +Versão 2.0 addresses these challenges com several enhancements: + +- **Best Practices**: Uma novo independent documentation site [here](https://module-federation.io/) includes best practices e configurações esse enhance its uso. +- **Decoupling Runtime de Build Tools**: Este versão decouples o Runtime de ferramenta de build, standardizing implementation across various platforms e increasing o flexibility de módulo carregamento. +- **Tipo Safety**: O updated plugin de build now automatically generates e carrega tipos for TypeScript projetos, com desenvolvimento mode synchronizing tipos para garantir safety. +- **Depuraçãoging Tools**: Enhanced debugging é facilitated por uma nova Chome DevTools, making o process mais convenient e efficient. +- **Implantação Platforms**: O addition do `mf-manifest.json` arquivo protocol simplifies integração com implantação platforms, allowing for better management de versão recursos e versões. + +## Introduction para Features de Module Federation 2.0 + +### New Documentation Site + +O novo documentation fornece uma detailed introduction para o applicable scenarios e capabilities do framework. Ele cobre o entire process de starting uma projeto com Rspack para utilizing its features. Additionally, ele oferece um em-depth discussion e explanation do configuração do seu plugin. + +![](@public/blog/announcement/module-federation-doc.png) + +### Enhanced Módulo Carregamento Flexibility + +O updated versão brings significant changes. O runtime capabilities esse were originally embedded em Webpack have been extracted para form uma standalone SDK. Essa mudança allows for dynamic registration e carregamento de remote e módulos shared sem relying on any ferramenta de build. Moreover, o use de módulo preloading e runtime plugins has been enhanced, providing mais powerful control over o módulo processo de carregamento. + +```typescript +import { init, loadRemote } from '@module-federation/enhanced/runtime'; + +init({ + name: '@demo/app-main', + remotes: [ + { + name: "@demo/app1", + entry: "http://localhost:3005/mf-manifest.json", + alias: "app1" + }, + { + name: "@demo/app2", + entry: "http://localhost:3006/remoteEntry.js", + alias: "app2" + }, + ], +}); + +loadRemote("app2/util").then((md)=>{ + md.add(1,2,3); +}); +``` +### Decoupling Webpack e Supporting Cross-Tool Compartilhamento de Módulos + +O novo versão do Module Federation plugin adopts uma completamente novo Runtime architecture. Essa mudança means esse o ferramenta de build é no longer tightly coupled com o Runtime. Developers pode now freely introduce artifacts produced by diferente ferramenta de build em their projetos e flexibly assemble them for operation. + +Atualmente, multiple ferramenta de build são compatible com it, including Webpack e Rspack. Other ferramenta de build pode também implement Module Federation baseado em este standard, que vai maintain consistency e standardization no runtime. + +### Dica de tipos + +O novo versão introduces uma groundbreaking feature - dynamic módulo tipo hints! Este feature effectively solves o problem de tipo loss quando converting local módulos para dynamic módulos remotos em TypeScript projetos. Now, usando este plugin, você pode não apenas automatically generate e use remote tipos but também achieve uma real-time tipo update experience semelhante a npm link quando all projetos são running locally. + +![](https://module-federation-assest.netlify.app/document/announcement/blog/announcement/demo-type-hint.gif) + +### Chrome DevTools + +O Devtool é uma debugging tool developed specifically for este framework. Ele pode clearly display o dependências entre módulos, as well as o configuração de Exponha e shared. Additionally, o tool suporta proxying módulos de online pages para o local ambiente de desenvolvimento e maintains hot update functionality para forneça uma smooth experiência de desenvolvimento. + +![](https://module-federation-assest.netlify.app/document/announcement/blog/announcement/chrome-devtool-display.gif) + +### Manifest Protocol + +O plugin de build for Module Federation generates uma Manifest arquivo. +Este arquivo contains basic information about o system, such as remoteEntry, shared, exposes, remotes, chunks, e tipo. +Este information é uma cornerstone for analyzing dependências entre projetos e helps us build e optimize o platform. +In este way, nós pode perform fine-grained versão e gray release management de módulos on diferente implantação platforms. +In addition, o plugin de build e runtime pode diretamente use o Manifest arquivo protocol para implement mais advanced features. +Por exemplo, o dynamic tipo hinting feature was developed no mais recente versão based no Manifest arquivo protocol. + +![](https://module-federation-assest.netlify.app/document/announcement/blog/announcement/manifest-file.gif) + +## Acknowledgments + +O desenvolvimento do novo versão de Module Federation could não have been possible sem o inspiration e suporte de many projetos within o community. +Here, nós express our deep respect e gratitude para these projetos: + +- [Webpack Module Federation](https://webpack.js.org/concepts/module-federation/). O novo versão de Module Federation was forked de it, redesigned e implemented on este basis. +- O [Module Federation Universe](https://github.com/module-federation/core) repository, onde o original implementation de Universe é o foundation do novo Module Federation. +- O [Rspack](https://github.com/web-infra-dev/rspack) projeto. O Rspack team implemented Module Federation baseado em Module Federation Runtime, ensuring full compatibility de 2.0 com o Rspack ecosystem. + +## Future Plans + +### Enhancing Developer Experience + +Although o novo versão introduces dynamic tipo hints e Chrome Developer Tools suporte, o current functionality do Chrome Developer Tools é still insufficient. +We plan para enhance o debugging tools for Module Federation, such as adding visualization features for shared reuse. + +### Providing High-Performance Solutions + +As uma solution for micro-frontend architecture, Module Federation também faces o unique "request waterfall problem" inherent para micro-frontend architectures. +To address este issue, Module Federation plans para forneça uma series de high-performance estratégias, including Servidor-Side Rendering (SSR) e Pré-busca de dados. + +### Collaborating com Community Partners + +O novo features de Module Federation 2.0 são currently apenas compatível by Webpack e Rspack, two ferramenta de build. Module Federation fornece uma rich definir de basic SDKs, facilitating other ferramenta de build para extend e encapsulate on este basis. Atualmente, Module Federation é mainly usado as um módulo compartilhamento solution. Our plan é para combine it com upper-layer frameworks para forneça uma series de micro-frontend architecture best practices baseado em Module Federation. Este vai help developers better meet o needs de large web aplicações em micro-frontend architecture desenvolvimento. diff --git a/apps/website-new/docs/pt-BR/blog/error-load-remote.mdx b/apps/website-new/docs/pt-BR/blog/error-load-remote.mdx new file mode 100644 index 00000000000..f167165cd66 --- /dev/null +++ b/apps/website-new/docs/pt-BR/blog/error-load-remote.mdx @@ -0,0 +1,597 @@ +--- +title: Erro handling for renderização do módulo remoto em Module Federation. +--- + +# Erro handling for renderização do módulo remoto em Module Federation. +import BlogGifGrid from '@components/BlogGifGrid.tsx'; + + +## Background +Remote módulo processo de carregamento may fail due para network recurso carregamento falha ou business logic renderização falha. + +Though Module Federation Runtime fornece detailed informações detalhadas de log de erro e runtime hook para help users locate o cause de carregamento falha, precisamos add erro fallback mechanism para garantir o stability do entire site, preventing o entire site de crashing due para o falha de uma renderização do módulo remoto. + +## Solution + +To build uma robust carregamento de módulo remoto mechanism, nós pode handle possíveis problemas do seguintes three levels: + +> O seguinte solutions pode refer para o exemplos em [router-demo](https://github.com/module-federation/core/tree/main/apps/router-demo). + +### Network layer: Retry mechanism + +Use [`@module-federation/retry-plugin`](https://module-federation.io/zh/plugin/plugins/retry-plugin.html) plugin para tratar problemas relacionados à rede: +- Automatically retry falhou recurso requests +- Configurable retry times e interval + +- Suporte custom tratamento de erros estratégia + +### Carregamento layer: Erro handling hook + +Use Module Federation Runtime fornecido [`errorLoadRemote`](https://module-federation.io/zh/plugin/dev/index.html#errorloadremote) hook para mais granular tratamento de erros: +- Capture erros em diferente carregamento lifecycle +- Forneçum componente de fallback ou backup recurso +- Suporte custom tratamento de erros estratégia + +### Rendering layer: Erro boundary + +Use React's `ErrorBoundary` mechanism para tratar componente renderização exceptions: +- Graceful degradation, display friendly erro prompts +- Isolate erro impact, prevent o entire aplicação de crashing +- Suporte erro recovery e retry carregamento + +Esses three solutions são for diferente scenarios, pode ser usado separadamente, ou combined para forneça uma mais comprehensive tratamento de erros mechanism. Below nós vai introduce o specific implementation de each solution em detail. + + +### Add mecanismo de retry + +For weak network environment ou producer has não started o service, nós pode add mecanismo de retry para solicitar recursos multiple times, que vai increase o probability de recurso carregamento success. + +Module Federation official fornece retry plugin [@module-federation/retry-plugin](https://module-federation.io/zh/plugin/plugins/retry-plugin.html) para suporte mecanismo de retry for recursos, oferece retry para recursos fetch e script. + +#### Registro em runtime puro + +```ts + +import React from 'react'; +import { createInstance, loadRemote } from '@module-federation/enhanced/runtime'; +import { RetryPlugin } from '@module-federation/retry-plugin'; + +const mf = createInstance({ + name: 'host', + remotes: [ + { + name: "remote1", + alias: "remote1" + entry: "http://localhost:2001/mf-manifest.json", + } + ], + plugins: [ + RetryPlugin({ + retryTimes: 3, + retryDelay: 1000, + manifestDomains: ['https://domain1.example.com', 'https://domain2.example.com'], + domains: ['https://cdn1.example.com', 'https://cdn2.example.com'], + addQuery: ({ times, originalQuery }) => `${originalQuery}&retry=${times}`, + onRetry: ({ times, url }) => console.log('retry', times, url), + onSuccess: ({ url }) => console.log('success', url), + onError: ({ url }) => console.log('error', url), + }), + ] +}); + +// Module loading +const Remote1Button = React.lazy(() => mf.loadRemote('remote1/button')); + +export default () => { + return ( + Loading Remote1App...}> + + + ); +} + +// Method/function loading +mf.loadRemote<{add: (...args: Array)=> number }>("remote1/util").then((md)=>{ + md.add(1,2,3); +}); + +``` + +> Para saber mais sobre a configuração de parâmetros de [@module-federation/retry-plugin](https://module-federation.io/zh/plugin/plugins/retry-plugin.html#type) consulte [document](https://module-federation.io/zh/plugin/plugins/retry-plugin.html#type) + +#### Plugin registration + +```ts +import { pluginModuleFederation } from '@module-federation/rsbuild-plugin'; +import { defineConfig } from '@rsbuild/core'; +import { pluginReact } from '@rsbuild/plugin-react'; +import path from 'path'; + +export default defineConfig({ + plugins: [ + pluginReact(), + pluginModuleFederation({ + name: 'host', + runtimePlugins: [ + path.join(__dirname, './src/runtime-plugin/retry.ts'), + ], + }), + ], +}); +``` + +```tsx +// src/runtime-plugin/retry.ts +import { RetryPlugin } from '@module-federation/retry-plugin'; + +const retryPlugin = () => + RetryPlugin({ + retryTimes: 3, + retryDelay: 1000, + manifestDomains: ['https://domain1.example.com', 'https://domain2.example.com'], + domains: ['https://cdn1.example.com', 'https://cdn2.example.com'], + addQuery: ({ times, originalQuery }) => `${originalQuery}&retry=${times}`, + onRetry: ({ times, url }) => console.log('retry', times, url), + onSuccess: ({ url }) => console.log('success', url), + onError: ({ url }) => console.log('error', url), + }); +export default retryPlugin; +``` + +Effect as follows: + + + +### errorLoadRemote hook + +Para erros no processo de carregamento de módulos remotos, eles podem ser captured no [`errorLoadRemote`](https://module-federation.io/zh/plugin/dev/index.html#errorloadremote) hook. + +`errorLoadRemote` é o hook for tratamento de erros em Module Federation Runtime. Quando o carregamento de módulo remoto fails, este hook vai ser triggered. It é designed para trigger quando o módulo carregamento fails em diferente lifecycle stages, e allow users para customize tratamento de erros estratégias. + +`errorLoadRemote` suporta returning um componente de fallback for erro fallback, e também suporta returning specific recurso content para garantir subsequent processes render normally. + +We divide o uso de módulo registration e carregamento em "runtime puro + importação dinâmica" e "registro por plugin + importação síncrona". + + +#### Pure runtime + importação dinâmica + +Ao usar registro em runtime puro, o módulo remoto vai não solicitar recursos until depois registration. + +```tsx +import React from 'react'; +import { createInstance, loadRemote } from '@module-federation/enhanced/runtime'; +import { RetryPlugin } from '@module-federation/retry-plugin'; + +// Module registration +const mf = createInstance({ + name: 'host', + remotes: [ + { + name: "remote1", + entry: "http://localhost:2001/mf-manifest.json", + alias: "remote1" + } + ], + plugins: [ + RetryPlugin({ + retryTimes: 3, + retryDelay: 1000, + }), + ] +}); + +// Module loading +const Remote1Button = React.lazy(() => loadRemote('remote1/button')); + +export default () => { + return ( + Loading Remote1App...}> + + + ); +} + +// Method/function loading +loadRemote<{add: (...args: Array)=> number }>("remote1/util").then((md)=>{ + md.add(1,2,3); +}); + +``` + +Use o `errorLoadRemote` hook para capture carregamento de módulo remoto erros (including recurso carregamento erros), e suporte returning `errorBoundary` componente de fallback. + +```tsx +import React from 'react'; +import { createInstance, loadRemote } from '@module-federation/enhanced/runtime'; +import { RetryPlugin } from '@module-federation/retry-plugin'; + +const fallbackPlugin: () => ModuleFederationRuntimePlugin = function () { + return { + name: 'fallback-plugin', + errorLoadRemote(args) { + return { default: () =>
fallback component
}; + }, + }; +}; + +// Module registration +const mf = createInstance({ + name: 'host', + remotes: [ + { + name: "remote1", + alias: "remote1" + entry: "http://localhost:2001/mf-manifest.json", + } + ], + plugins: [ + RetryPlugin({ + retryTimes: 3, + retryDelay: 1000, + }), + fallbackPlugin() + ] +}); + +// Module loading +const Remote1Button = React.lazy(() => mf.loadRemote('remote1/button')); + +export default () => { + return ( + Loading Remote1App...}> + + + ); +} + +// Method/function loading +mf.loadRemote<{add: (...args: Array)=> number }>("remote1/util").then((md)=>{ + md.add(1,2,3); +}); + +``` + +Effect as follows: + + + + +#### Plugin registration + importação síncrona + +Plugin registration suporta usando importação síncrona para carregar módulos, e o momento da solicitação de recursos é earlier than runtime puro, so precisamos registrar o `errorLoadRemote` hook no plugin. + +```tsx +// rsbuild.config.ts +import { pluginModuleFederation } from '@module-federation/rsbuild-plugin'; +import { defineConfig } from '@rsbuild/core'; +import { pluginReact } from '@rsbuild/plugin-react'; +import path from 'path'; + +export default defineConfig({ + plugins: [ + pluginReact(), + pluginModuleFederation({ + name: 'host', + remotes: { + remote1: 'remote1@http://localhost:2001/mf-manifest.json', + }, + runtimePlugins: [ + path.join(__dirname, './src/runtime-plugin/retry.ts'), + path.join(__dirname, './src/runtime-plugin/fallback.ts'), + ], + ... + }), + ], +}); + +``` + +:::info Tips +O seguinte exemplo shows como para tratar erros em diferente lifecycle stages. + +Se your aplicação scenario é simple, você pode refer para o **simplified versão** below, que fornece uma unified tratamento de erros solution. + +::: + +```tsx +// src/runtime-plugin/fallback.ts +import type { ModuleFederationRuntimePlugin } from '@module-federation/runtime'; + +interface FallbackConfig { + // Backup service address + backupEntryUrl?: string; + // Custom error message + errorMessage?: string; +} + +const fallbackPlugin = (config: FallbackConfig = {}): ModuleFederationRuntimePlugin => { + const { + backupEntryUrl = 'http://localhost:2002/mf-manifest.json', + errorMessage = 'Module loading failed, please try again later' + } = config; + + return { + name: 'fallback-plugin', + async errorLoadRemote(args) { + // Handle component loading errors + if (args.lifecycle === 'onLoad') { + const React = await import('react'); + + // Create a fallback component with error message + const FallbackComponent = React.memo(() => { + return React.createElement( + 'div', + { + style: { + padding: '16px', + border: '1px solid #ffa39e', + borderRadius: '4px', + backgroundColor: '#fff1f0', + color: '#cf1322' + } + }, + errorMessage + ); + }); + + FallbackComponent.displayName = 'ErrorFallbackComponent'; + + return () => ({ + __esModule: true, + default: FallbackComponent + }); + } + + // Handle entry file loading errors + if (args.lifecycle === 'afterResolve') { + try { + // Try to load backup service + const response = await fetch(backupEntryUrl); + if (!response.ok) { + throw new Error(`Failed to fetch backup entry: ${response.statusText}`); + } + const backupManifest = await response.json(); + console.info('Successfully loaded backup manifest'); + return backupManifest; + } catch (error) { + console.error('Failed to load backup manifest:', error); + // If backup service also fails, return original error + return args; + } + } + + return args; + }, + }; +}; + +export default fallbackPlugin; +``` + +- `App.tsx` importação síncrona: `import Remote1App from 'remote1/app';` + +- About `fallback.ts`: + + - `errorLoadRemote` hook receives um `args` parameter, que contains o detailed information do erro. Through `args.lifecycle` nós pode determine o stage do erro occurrence, e take o corresponding processing estratégia: + + - **Handle componente carregamento erros** (`args.lifecycle === 'onLoad'`) + - Este tipo de erro occurs no módulo processo de carregamento other than o entry recurso `mf-manifest.json` + - We pode retornar um componente de fallback com styles: + + ```ts + if (args.lifecycle === 'onLoad') { + const React = await import('react'); + const FallbackComponent = React.memo(() => { + return React.createElement( + 'div', + { + style: { + padding: '16px', + border: '1px solid #ffa39e', + borderRadius: '4px', + backgroundColor: '#fff1f0', + color: '#cf1322' + } + }, + 'fallback component' + ); + }); + FallbackComponent.displayName = 'ErrorFallbackComponent'; + return () => ({ + __esModule: true, + default: FallbackComponent + }); + } + ``` + + - **Handle arquivo de entrada carregamento erros** (`args.lifecycle === 'afterResolve'`) + - Este tipo de erro occurs no entry recurso `mf-manifest.json` processo de carregamento + - We pode handle it no seguintes two formas: + + uma. Try para carregar backup service: + ```ts + if (args.lifecycle === 'afterResolve') { + try { + const response = await fetch('http://localhost:2002/mf-manifest.json'); + if (!response.ok) { + throw new Error(`Failed to fetch backup entry: ${response.statusText}`); + } + const backupManifest = await response.json(); + console.info('Successfully loaded backup manifest'); + return backupManifest; + } catch (error) { + console.error('Failed to load backup manifest:', error); + return args; + } + } + ``` + + b. Use local backup recurso: + ```ts + if (args.lifecycle === 'afterResolve') { + // Use predefined backup清单 + const backupManifest = { + id: 'fallback', + name: 'fallback', + metaData: { + name: 'fallback', + type: 'app', + buildInfo: { + buildVersion: 'local', + buildName: 'fallback', + }, + remoteEntry: { + name: 'remoteEntry.js', + path: '', + type: 'global', + }, + types: { + path: '', + name: '', + zip: '@mf-types.zip', + api: '@mf-types.d.ts', + }, + globalName: 'fallback', + pluginVersion: '1', + publicPath: 'https://example.com/', + }, + shared: [], + remotes: [], + exposes: [], + }; + return backupManifest; + } + ``` + + - **Simplified versão** + + Se você não precisa distinguish entre erro tipos, você pode também use uma generic tratamento de erros solution: + + ```ts + import type { ModuleFederationRuntimePlugin } from '@module-federation/runtime'; + + const fallbackPlugin = (errorMessage = 'Module loading failed, please try again later'): ModuleFederationRuntimePlugin => { + return { + name: 'fallback-plugin', + async errorLoadRemote() { + const React = await import('react'); + const FallbackComponent = React.memo(() => { + return React.createElement( + 'div', + { + style: { + padding: '16px', + border: '1px solid #ffa39e', + borderRadius: '4px', + backgroundColor: '#fff1f0', + color: '#cf1322' + } + }, + errorMessage + ); + }); + FallbackComponent.displayName = 'ErrorFallbackComponent'; + return () => ({ + __esModule: true, + default: FallbackComponent + }); + }, + }; + }; + export default fallbackPlugin; + ``` + +Effect as follows: + + + + +### Set ErrorBoundary for componente + +React's ErrorBoundary é o último line de defense for handling componente-level erros, no dynamic carregamento scenario de módulos remotos (such as carregamento lazy), ele pode help us capture e process o renderização erros de módulos remotos e forneça graceful degradation. + +Setting ErrorBoundary for componentes é suitable for importação dinâmica módulo remoto scenarios, such as carregamento lazy scenarios. + +Moreover, depois setting ErrorBoundary for componentes, você pode avoid relying no errorLoadRemote hook for erro fallback, que é uma feature de React itself para forneça erro fallback for your componentes. + + +- `App.tsx` importação dinâmica módulo remoto + +```tsx +// App.tsx +import React, { + useRef, + useEffect, + ForwardRefExoticComponent, + Suspense, +} from 'react'; + +const Remote1AppWithLoadRemote = React.lazy(() => loadRemote('remote1/app')); +const Remote1AppWithErrorBoundary = React.forwardRef((props, ref) => ( + Error loading Remote1App...}> + Loading Remote1App...}> + + + +)); + +export default function App() { + return ( + <> +
+

Remote1

+ +
+ + ); +} +``` + + +Effect as follows: + + diff --git a/apps/website-new/docs/pt-BR/blog/hoisted-runtime.mdx b/apps/website-new/docs/pt-BR/blog/hoisted-runtime.mdx new file mode 100644 index 00000000000..9d6f13c2559 --- /dev/null +++ b/apps/website-new/docs/pt-BR/blog/hoisted-runtime.mdx @@ -0,0 +1,77 @@ +import {Tabs, Tab} from '@theme' + +# Async Startup em Module Federation + +> Sep 5, 2024 + +We're excited para announce uma nova experimental feature: `experiments.asyncStartup = true`. + +Este release introduces **asynchronous startup**, enabling automatic async initialization for Module Federation entrypoints. + +## 🚀 Key Features + +### Automatic Async Initialization + +Com async startup habilitado, **dynamic importa (`import()`) at o top de your app são no longer obrigatório**. All entrypoints vai now initialize asynchronously por padrão. Este means: +- No mais eager erros +- No need for "async boundaries" em userland code +- Automatic handling de async initialization + +:::note +Este apenas affects ponto de entrada initialization. Você pode still use dynamic importa normally throughout your aplicação, including for importing módulos remotos. Este feature doesn't change ou limit como dynamic importa work em your code. +::: + +:::tip +**Note:** Asynchronous entrypoints vai always exporte uma promise. Este é particularly relevant se você're manually requiring uma bundled entrypoint ou exposing something like uma UMD library para o global escopo. +::: + +#### Antes & Depois Comparison + +See como o novo async behavior simplifies entrypoints. Click no "Antes" e "Depois" tabs para see o difference. + + + + ```jsx + // entrypoint + import('./bootstrap.js') + + // bootstrap.js + import React from 'react'; + import ReactDOM from 'react-dom/client'; + import App from './App'; + + const root = ReactDOM.createRoot(document.getElementById('root')!); + root.render( + + + , + ); + ``` + + + ```jsx + // entrypoint + import React from 'react'; + import ReactDOM from 'react-dom/client'; + import App from './App'; + + const root = ReactDOM.createRoot(document.getElementById('root')!); + root.render( + + + , + ); + ``` + + + +### Important Notes + +Ao usar async startup: +- All entrypoints initialize asynchronously por padrão +- Exporta de entrypoints vai ser promises esse resolve para o actual exporta +- No manual async boundaries ou dynamic importa needed +- Eager consumption erros são automatically prevented por meio de async initialization + +Esse recurso simplifica Module Federation configuração by removing o need for manual async handling enquanto ensuring proper initialization de módulos federados. + diff --git a/apps/website-new/docs/pt-BR/blog/index.mdx b/apps/website-new/docs/pt-BR/blog/index.mdx new file mode 100644 index 00000000000..37f65225f96 --- /dev/null +++ b/apps/website-new/docs/pt-BR/blog/index.mdx @@ -0,0 +1,31 @@ +--- +title: Visão geral +sidebar: false +--- +# Module Federation Blog + +Find o mais recente posts e release announcements about Module Federation here. + +## [Module Federation 2.0 Stable Release](/blog/v2-stable-version.html) + +> February 10, 2026 + +Module Federation 2.0 é officially stable, bringing dependência compartilhada tree shaking e uma Modern.js v3 plugin para make integração easier. + +## [Module Federation on Node.js: From Usable to Ergonomic](/blog/node.html) + +> January 23, 2026 + +Aprenda como use Module Federation em Node.js, including runtime-apenas consumption, Rspack/Webpack integração, e producer-side build configuração. + +## [Handling Remote Module Rendering Errors](/blog/error-load-remote.html) + +> September 9, 2025 + +Fallback estratégias for módulo remoto carregue/render falhas: network retries, o errorLoadRemote hook, e React ErrorBoundary. + +## [Release Announcement](/blog/announcement.html) + +> April 26, 2024 + +Announces o official release de Module Federation 2.0 e introduces core capabilities like runtime decoupling, tipo safety, devtools, e o Manifest protocol. diff --git a/apps/website-new/docs/pt-BR/blog/node.mdx b/apps/website-new/docs/pt-BR/blog/node.mdx new file mode 100644 index 00000000000..fcc33beb332 --- /dev/null +++ b/apps/website-new/docs/pt-BR/blog/node.mdx @@ -0,0 +1,76 @@ +# {props.name || 'Module Federation'} on Node.js, Made Easy + +import RuntimeConsumerDemo from '@docs/_snippets/node/runtime-consumer-demo'; +import HostRspackConfig from '@docs/_snippets/node/host-rspack-config'; +import HostUsage from '@docs/_snippets/node/host-usage'; +import RemoteRslibConfig from '@docs/_snippets/node/remote-rslib-config'; +import RemoteRspackConfig from '@docs/_snippets/node/remote-rspack-config'; + +{props.name || 'Module Federation'} suporta Node.js out do box. Whether você são consuming módulos em runtime apenas, ou integrating em uma Webpack/Rspack pipeline de build, ele pode ser adopted com uma relativamente small amount de configuração. Este documento walks por meio de formas comuns para usar {props.name || 'Module Federation'} em Node.js. + +## Visão geral + +Em uma Node.js servidor aplicação, você pode carregar módulos remotos via {props.name || 'Module Federation'}. Esses módulos podem ser local arquivos criado em CommonJS format, ou remote services accessed over HTTP. Isso permite uma flexible foundation for do lado do servidor microservices, dynamic feature delivery, e shared recursos. + +## Consumer + +### Runtime-Only + +Se você são apenas consuming módulos em Node.js e não quiser introduce bundlers like Webpack/Rspack, você pode use o runtime-apenas approach. O ideia principal é: **no plugin de build obrigatório**. Você só precisa do APIs fornecido by { props.runtime || '@module-federation/runtime' }. + +Steps: + +1. **Crie um MF instance** com `createInstance`. +2. **Register remotes** via o `remotes` array. +3. **Carregue módulos** via `loadRemote`. + +O seguinte exemplo shows como para carregar um módulo remoto exposto over HTTP: + +{props.runtimeConsumerDemo || } + +### Usando uma Bundler Plugin (Rspack/Webpack) + +Se sua aplicação Node.js é criado com Webpack ou Rspack, integrating {props.name || 'Module Federation'} é straightforward: adicione o plugin e o obrigatório runtime configuração. + +For o Host (consumer), o key é para adicionar `@module-federation/node/runtimePlugin` e definir `remoteType: 'script'` e `target: 'async-node'`, then apply o rest do configuração. + +Rspack exemplo (Webpack é em grande parte o mesmo): + +{props.hostRspackConfig || } + +Depois esse, você pode diretamente `import` módulos remotos em your code: + +{props.hostUsage || } + +## Provider + +No producer side, nós recommend usando Rslib. Você só precisa de para usar o { props.rsbuildPlugin || '@module-federation/rsbuild-plugin' } plugin e definir `target: 'async-node'` para gerar uma remote esse pode ser consumido em Node.js. + +Configuração principal de `apps/node-remote/rslib.config.ts`: + +{props.remoteRslibConfig || } + +Se você não são usando Rslib, você pode também build o remote com Rspack/Webpack (o configuração é em grande parte o mesmo). O pontos principais são: definir `target` para `async-node`, e output `remoteEntry.js` com `library.type = 'commonjs-module'`. + +Rspack exemplo: + +{props.remoteRspackConfig || } + +Webpack configuração é em grande parte o mesmo as o Rspack exemplo above. + +## FAQ + +### 1. What does `target: 'async-node'` do? + +`target: 'async-node'` é uma Webpack alvo de build esse produz uma saída adequada para Node.js com carregamento assíncrono. Este é important for Module Federation’s modelo de carregamento dinâmico e assíncrono—especialmente quando você need top-level `await` enquanto carregamento remotes. + +### 2. Why do I precisa definir `remoteType: 'script'`? + +Atualmente, o MF bundler runtime apenas suporta o `script` carregamento de remote tipo, so for Node.js consumption você precisa explicitamente definir `remoteType: 'script'`. + +## References + +- **Host (Consumer) exemplo configuração**: [`apps/node-host/webpack.config.js`](https://github.com/module-federation/core/blob/main/apps/node-host/webpack.configuração.js) +- **Host (Consumer) exemplo code**: [`apps/node-host/src/main.js`](https://github.com/module-federation/core/blob/main/apps/node-host/src/main.js) +- **Remote (Producer) Rslib exemplo configuração**: [`apps/node-remote/rslib.config.ts`](https://github.com/module-federation/core/blob/main/apps/node-remote/rslib.configuração.ts) +- **Remote (Producer) Webpack exemplo configuração**: [`apps/node-remote/webpack.config.js`](https://github.com/module-federation/core/blob/main/apps/node-remote/webpack.configuração.js) diff --git a/apps/website-new/docs/pt-BR/blog/v2-stable-version.mdx b/apps/website-new/docs/pt-BR/blog/v2-stable-version.mdx new file mode 100644 index 00000000000..c25936a423c --- /dev/null +++ b/apps/website-new/docs/pt-BR/blog/v2-stable-version.mdx @@ -0,0 +1,149 @@ +# MF 2.0 Stable Release: Balancing Developer Productivity e Extreme Performance + +One year ago, nós open-sourced Module Federation 2.0 ([MF 2.0](https://module-federation.io/en/blog/announcement.html)), e since then nós have received uma wealth de valuable feedback e suggestions do community. We believe esse uma mature micro-frontend solution deve não apenas improve collaborative desenvolvimento efficiency, but também forneça uma core engine esse enables extreme performance. Com este em mind, nós have spent o past year deeply refining MF 2.0 e expanding its capabilities. + +Today, nós são pleased para announce esse **MF 2.0 é now officially stable**. O stable release delivers powerful performance optimizations, covers uma broader range de implantação scenarios, e significantly improves o developer experience. + +## End-para-End Performance Optimization System +MF 2.0 systematically restructures o performance pipeline de micro-frontend aplicações across four stages: **build, asset carregamento, renderização, e dados fetching**. + +Esses capabilities não exist em isolation; they work together para form um end-para-end performance optimization system tailored for módulo federation scenarios. + +**All capabilities suporte incremental adoption**. Você pode habilite them gradually as needed sem performing uma big-bang rewrite de your current architecture, e sem compromising o stability de existente systems. + +### Tree Shaking for Shared Dependências +Traditional dependências compartilhadas avoid duplicate carregamento, but para garantir completeness, shared libraries são often **bundled e exposto as whole pacotes**. Even se você apenas use uma small portion, você still have para carregar o entire library, que causes bundle sizes para grow continuously. + +In **MF 2.0**, este problem é addressed: + +**Shared dependências now suporte tree shaking.** + +By simply enabling `treeShaking`, MF pode perform on-demand pruning de dependências compartilhadas sem sacrificing o dynamic nature de módulo federation. It retains apenas o módulos esse são actually likely para ser usado, significantly reducing o size de shared bundles enquanto remaining fully compatible com existente projetos. + +![](https://module-federation-assest.netlify.app/document/announcement/blog/v2-stable-version/enable-shared-tree-shaking.png) + +MF 2.0 fornece two modes para fit diferente scenarios: + +- **runtime-infer**: Zero external dependências e ready para usar out do box. Em runtime, MF primeiro attempts para reuse já-carregado tree-shaken shared bundles; se their capabilities são insufficient, it automatically falls back para carregamento o full dependência para garantir functional completeness. Você pode improve reuse effectiveness com `usedExports`. + +- **servidor-calc**: Uma mode onde o servidor ou CI system analyzes dependência uso across multiple aplicações e produces uma globally optimal shared-pruning result, suitable for large systems. + +Uma **visual analysis dashboard** é também fornecido, making it easy para see como dependências compartilhadas são usado e o que bundle size savings they deliver. + +For uma large componente library like **Ant Design**, quando uma aplicação apenas usa o Badge, Button, e List componentes, o shared bundle size é about **1404.2 KB** sem shared-dependência tree shaking. Depois enabling tree shaking, o actual carregado size drops para **344.0 KB**, reducing unnecessary code by approximately **75.5%**. + + +![Configuration](https://module-federation-assest.netlify.app/document/announcement/blog/v2-stable-version/definir-configuração.png) +![Analysis result](https://module-federation-assest.netlify.app/document/announcement/blog/v2-stable-version/analyze-result.png) + +### Servidor-Side Rendering (SSR) +SSR generates full HTML no servidor e retorna it diretamente para o navegador, so pages pode render sem waiting for do lado do cliente hydration. Este dramatically improves **primeiro-screen performance** e **SEO**. For medium-para-large web aplicações, SSR has effectively become uma standard capability. + +However, em micro-frontend architectures, SSR has historically been difficult para implement. Early MF versões did não cover este capability, forcing developers para choose entre **architectural flexibility** e **performance benefits**. + +In **MF 2.0**, este trade-off é eliminated. + +Você pode use **MF SSR** diretamente within **{ props.framework || 'Modern.js' }**, giving micro-frontend aplicações high-performance SSR capabilities as well. + +{ props.ssr || '' } + +### Isomorphic Pré-busca de dadosing +MF 2.0 introduces uma nova **isomorphic dados fetching solution** esse suporta both **SSR e CSR** scenarios. It fornece built-em **`prefetch`** e **`cache`** APIs for unified dados prefetching e cache management, ensuring stable e predictable performance across diferente renderização modes. + +By leveraging preloading e caching, pages pode prepare critical dados antes renderização, preventing repeated requests e waterfall carregamento, que significantly improves both initial carregue e interactive responsiveness. + +{ props.dataSolution || '' } + + +{ props.serverPreload || '' } + + +### Rust-Powered Capabilities +In large projetos, **manifest generation** often becomes uma performance bottleneck during o build phase. MF 2.0 moves este core capability para uma **Rust implementation**, taking advantage de Rust’s high performance e memory safety para substantially reduce o time obrigatório para gerar manifests. + +At o mesmo time, **AsyncStartUp** has também been rewritten em Rust. Você no longer precisa configure asynchronous ponto de entradas para get equivalent capabilities, e related primeiro-screen performance risks são effectively eliminated, making a aplicação startup caminho simpler, mais stable, e mais efficient. + +{ props.deploy || '' } + +## More Powerful Depuraçãoging System +MF 2.0 builds uma comprehensive debugging system around **observability e debuggability**. It makes dependências compartilhadas, módulo relationships, e potential side effects **visible, traceable, e detectable em advance**, greatly reducing uncertainty quando developing e integrating dynamic aplicações. + +### Side Effect Scanner +Antes consuming um módulo remoto, teams often precisa assess whether it pollutes global variables, registers event listeners, ou affects style escopos—uncertainties esse significantly increase o cost de adopting micro-frontends. + +MF 2.0 fornece uma **Side Effect Scanner** esse statically analyzes build outputs e identifies o seguintes side effects: + +- Global variables +- Event listeners +- CSS selector impact escopo + +O accompanying **CLI tool** pode automatically perform scans e output results, allowing consumers para understand o risks antes integração e thereby significantly lower o cost de onboarding módulos federados. + +### Chrome Extension for Dependência Visualization +We have fully upgraded o existente Chrome extension com uma nova UI e stronger debugging capabilities, making o runtime estado de módulo federation **visible, queryable, e verifiable**. + +- **Smart sidebar sync** +O panel automatically follows o current page sem manual refresh ou reconnection, providing uma smoother debugging experience. + + +- **Shared dependência visualization** +O novo **Shared** panel clearly shows dependência compartilhada carregamento no current page, por exemplo: + - Whether React é successfully shared + - Which shared versão é actually em use + - Whether your compartilhamento estratégia é working as expected +![Shared dependências visualization](https://module-federation-assest.netlify.app/document/announcement/blog/v2-stable-version/chrome-shared.png) + +- **Fast dependência graph navigation** +Você pode search for any módulo no dependência graph, e see its upstream e downstream relations em uma clear hierarchy, making complex dependências easy para reason about. + +![Dependency graph](https://module-federation-assest.netlify.app/document/announcement/blog/v2-stable-version/chrome-dep.png) + +- **Dados trimming mode** +Quando there são many módulos, você pode habilite trimming mode para reduce o size de proxy dados e avoid injection falhas caused by localStorage limits. +*Trimmed dados apenas affects preloading analysis, não actual behavior, so it é safe para habilite.* + + +## Richer Ecosystem + +MF now suporta o major **bundlers, aplicação frameworks, e UI stacks**, e pode run reliably across diferente technical ecosystems, helping teams introduce módulo federation sem changing their existente technology choices. + +- **Bundler**: Webpack / Rspack / Rollup / Rolldown + +- **Build Tool**: Rsbuild / Vite / Metro + +- **Framework/Tool**: Modern.js / Next.js / Rspress / Rslib / Storybook + +- **UI Library**: React / Vue / React Native + +![MF 2.0 ecosystem](https://module-federation-assest.netlify.app/document/announcement/blog/v2-stable-version/ecosystem.png) + +On top de este, MF 2.0 extends módulo federation capabilities em mais critical desenvolvimento e delivery scenarios: + +### Node.js +Módulo federation pode now ser usado diretamente no **Node.js runtime**, so módulos remotos pode ser consumido não apenas pelo navegador but também by **SSR, BFF, e Node service layers**, enabling uma unified delivery model for módulos across frontend e backend. + +### Rspress Documentation Splitting +In **Rspress**, MF suporta splitting e carregamento módulos remotos by document ou rota, allowing large documentation sites para ser **decomposed e released independently via módulo federation**, que é ideal for multi-team documentation e knowledge platforms. + +### Rstest +Within o **Rstest** testing system, módulo federation pode carregar módulos remotos em uma real runtime manner, enabling micro-frontend e MF aplicações para perform **integração tests e end-para-end tests esse closely mirror production**, avoiding o gap entre tests e real runtime behavior. + +## Changes +### Versão Changes (Minor Changes) +We prioritize **stability e compatibility**, so este upgrade contains no breaking changes e apenas introduces uma few minor updates. O key changes são: + +### Minor Changes + +- O padrão valor de `library.type` é changed de `var` para `global`. +- `runtimePlugins` now suporte configuração parameters. + +## What's Next? +### React Servidor Componentes +React Servidor Componentes (RSC) represent uma revolutionary step forward no React ecosystem. Compared para MF x SSR, o combination de MF x RSC pode deliver even better performance (com much smaller bundles) e safer dados handling. We have já validated este approach em basic demos e vai forneça stronger suporte e integração em Modern.js. + +### AI-friendly Design +We são gradually enriching MF com **o contextual information e metadata obrigatório for AI para usar componentes e módulos**, including capability boundaries, uso constraints, runtime environments, e dependência relationships. We também plan para introduce **quantitative scoring e confidence mechanisms** so esse componente assets pode ser understood, evaluated, e selected by AI. + +{ props.aiFriendly || '' } + +{ props.next || '' } diff --git a/apps/website-new/docs/pt-BR/configure/_meta.json b/apps/website-new/docs/pt-BR/configure/_meta.json new file mode 100644 index 00000000000..d0b2028735b --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/_meta.json @@ -0,0 +1,107 @@ +[ + { + "type": "file", + "name": "index", + "label": "Visão geral" + }, + { + "type": "file", + "name": "name", + "label": "name" + }, + { + "type": "file", + "name": "filename", + "label": "filename" + }, + { + "type": "file", + "name": "library", + "label": "library" + }, + { + "type": "file", + "name": "remotes", + "label": "remotes" + }, + { + "type": "file", + "name": "remotetype", + "label": "remoteType" + }, + { + "type": "file", + "name": "shareScope", + "label": "shareScope" + }, + { + "type": "file", + "name": "exposes", + "label": "exposes" + }, + { + "type": "file", + "name": "shared", + "label": "shared" + }, + { + "type": "file", + "name": "runtimeplugins", + "label": "runtimePlugins" + }, + { + "type": "file", + "name": "getpublicpath", + "label": "getPublicPath" + }, + { + "type": "file", + "name": "implementation", + "label": "implementation" + }, + { + "type": "file", + "name": "dts", + "label": "dts" + }, + { + "type": "file", + "name": "dev", + "label": "dev" + }, + { + "type": "file", + "name": "manifest", + "label": "manifest" + }, + { + "type": "file", + "name": "shareStrategy", + "label": "shareStrategy" + }, + { + "type": "file", + "name": "experiments", + "label": "experiments" + }, + { + "type": "file", + "name": "injectTreeShakingUsedExports", + "label": "injectTreeShakingUsedExports" + }, + { + "type": "file", + "name": "treeShakingDir", + "label": "treeShakingDir" + }, + { + "type": "file", + "name": "treeShakingSharedExcludePlugins", + "label": "treeShakingSharedExcludePlugins" + }, + { + "type": "file", + "name": "treeShakingSharedPlugins", + "label": "treeShakingSharedPlugins" + } +] diff --git a/apps/website-new/docs/pt-BR/configure/dev.mdx b/apps/website-new/docs/pt-BR/configure/dev.mdx new file mode 100644 index 00000000000..e28f5187d15 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/dev.mdx @@ -0,0 +1,40 @@ +# dev + +- Tipo: `boolean | PluginDevOptions` +- Obrigatório: No +- Padrão valor: `true` +- Uso scenario: usado para control `Module Federation` dev behavior + +O `PluginDevOptions` tipos são as seguintes: + +```ts +interface PluginDevOptions { + disableLiveReload?: boolean; + disableHotTypesReload?: boolean; + disableDynamicRemoteTypeHints?: boolean; +} +``` + +## disableHotTypesReload + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `false` + +Whether para disable tipo hot reloading + +## disableLiveReload + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `false` + +Whether para disable `liveReload`, depois setting `true`, any updates do producer vai não trigger o consumer's **page** `liveReload` + +## disableDynamicRemoteTypeHints + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `false` + +Whether para disable tipo hot reloading diff --git a/apps/website-new/docs/pt-BR/configure/dts.mdx b/apps/website-new/docs/pt-BR/configure/dts.mdx new file mode 100644 index 00000000000..5cce1dee362 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/dts.mdx @@ -0,0 +1,394 @@ +# dts + +- Tipo: `boolean | PluginDtsOptions` +- Obrigatório: No +- Padrão valor: `true` +- Usage scenario: used to control {props.brandName || props.name || 'Module Federation'} generation/consumption type behavior + +Depois configuração, o producer vai automatically generate uma compressed tipo arquivo `@mf-types.zip` (padrão name) durante o build, e o consumer vai automatically pull o tipo arquivo de `remotes` e decompress it para `@mf-types` (padrão name). + +O `PluginDtsOptions` tipos são as seguintes: + +```ts +interface PluginDtsOptions { + generateTypes?: boolean | DtsRemoteOptions; + consumeTypes?: boolean | DtsHostOptions; + tsConfigPath?: string; + cwd?: string; +} +``` + +## generateTypes + +- Tipo: `boolean | DtsRemoteOptions` +- Obrigatório: No +- Padrão valor: `true` +- Uso scenario: usado para control `Module Federation` generation tipo behavior + +O `DtsRemoteOptions` tipos são as seguintes: + +```ts +interface DtsRemoteOptions { + tsConfigPath?: string; + typesFolder?: string; + outputDir?: string; + deleteTypesFolder?: boolean; + additionalFilesToCompile?: string[]; + compilerInstance?: 'tsc' | 'vue-tsc'; + compileInChildProcess?: boolean; + generateAPITypes?: boolean; + extractThirdParty?: boolean; + extractRemoteTypes?: boolean; + abortOnError?: boolean; + deleteTsConfig?: boolean; + afterGenerate?: ( + options: DtsGenerateTypesHookOptions, + ) => Promise | void; +} + +interface DtsGenerateTypesHookOptions { + zipTypesPath: string; + apiTypesPath: string; + zipName: string; + apiFileName: string; +} +``` + +Quando configuring `generateTypes` para `true`, o seguintes configuração vai ser generated por padrão: + +```json +{ + "generateAPITypes": true, + "abortOnError": false, + "extractThirdParty": false, + "extractRemoteTypes": false, + "compileInChildProcess": true, + "deleteTsConfig": true +} +``` + +### extractRemoteTypes + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `undefined` +- Uso scenario: Quando o content do producer `exposes` has its own `remotes` módulo esse re-exporta itself, then `extractRemoteTypes: true` pode ensure esse o consumer pode normally obtain o módulo tipo do producer `exposes` +- Exemplo: [Nested type re-export](/guide/basic/type-prompt.html#nested-type-re-export) + +Whether para extract o tipo de `remotes`. + +### extractThirdParty + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `undefined` +- Uso scenario: Quando o content do producer `exposes` contains um módulo containing `antd`, e o consumer does não have `antd` installed, then `extractThirdParty: true` pode ensure esse o consumer pode normally obtain o módulo do producer `exposes` tipo +- Exemplo: [Third-party package type extraction](/guide/basic/type-prompt.html#third-party-package-type-extraction) + +Whether para extract third-party pacote tipos. + +### generateAPITypes + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `undefined` +- Exemplo: [Federation Runtime API type prompt](/guide/basic/type-prompt.html#federation-runtime-api-type-prompt) + +Whether para gerar o `loadRemote` tipo em `Federation Runtime` + +### compileInChildProcess + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `undefined` + +Whether generate tipos em child process + +### abortOnError + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `false` + +Whether para lança um erro quando uma problem é encountered during tipo generation + +### afterGenerate + +- Type: `(options: DtsGenerateTypesHookOptions) => Promise | void` +- Obrigatório: No +- Padrão valor: `undefined` + +Runs depois federated tipos são generated e antes o generated arquivos são emitted. + +```ts title="module-federation.config.ts" +new ModuleFederationPlugin({ + dts: { + generateTypes: { + afterGenerate({ zipTypesPath, apiTypesPath }) { + console.log('zip types:', zipTypesPath); + console.log('api types:', apiTypesPath); + }, + }, + }, +}); +``` + +### tsConfigPath + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `path.join(process.cwd(),'./tsconfig.json')` +> priority: dts.generateTypes.tsConfigPath > dts.tsConfigPath +tsconfig configuração arquivo caminho + +### outputDir + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `undefined` + +Custom base output diretório for generated tipo assets. + +Quando este opção é não definir, Module Federation emits `@mf-types.zip` e +`@mf-types.d.ts` relative para o bundler output diretório. Se your remote entry +é emitted para uma nested subdirectory such as `production/remoteEntry.js`, definir +`dts.generateTypes.outputDir` para o mesmo nested output diretório so o tipo +artifacts são emitted alongside o arquivo de entrada. + +Este keeps o padrão inferred tipo URLs aligned com o remote entry caminho, so +consumers geralmente não need `remoteTypeUrls` just porque o remote entry é +served de uma subdirectory. + +```ts title="module-federation.config.ts" +new ModuleFederationPlugin({ + filename: 'production/remoteEntry.js', + dts: { + generateTypes: { + outputDir: `dist/react/${process.env.DEPLOY_ENVIRONMENT || 'production'}`, + }, + }, +}); +``` + +Com o configuração above, o generated arquivos são emitted para +`dist/react/production/@mf-types.zip` e +`dist/react/production/@mf-types.d.ts`. + +### typesFolder + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `'@mf-types'` + +O name do generated compression tipo arquivo. Por exemplo, se typesFolder é definir para `custom`, then o name do generated compression tipo arquivo é: `custom.zip` + +### deleteTypesFolder + +- Tipo: `boolean` +- Obrigatório: No + -Padrão: `true` + +Whether para delete o generated tipo pasta + +### compilerInstance + +- Tipo: `'tsc' | 'tsgo' | 'vue-tsc' | 'tspc' | string` +- Obrigatório: No +- Padrão valor: `'tsc'` + +Instance de compiled tipo + +### deleteTsConfig + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `true` + +Whether para delete o temporary tsconfig configuração arquivo. + +## consumeTypes + +- Tipo: `boolean | DtsHostOptions` +- Obrigatório: No +- Padrão valor: `true` +- Uso scenario: usado para control `Module Federation` consumption (carregamento) tipo behavior + +O `DtsHostOptions` tipos são as seguintes: + +```ts +interface DtsHostOptions { + typesFolder?: string; + abortOnError?: boolean; + remoteTypesFolder?: string; + deleteTypesFolder?: boolean; + maxRetries?: number; + consumeAPITypes?: boolean; + family?: 0 | 4 | 6; +} +``` + +Quando configuring `consumeTypes` para `true`, o seguintes configuração vai ser generated por padrão: + +```json +{ + "abortOnError": false, + "consumeAPITypes": true +} +``` + +### consumeAPITypes + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `true` +- Exemplo: [Federation Runtime API type prompt](/guide/basic/type-prompt.html#federation-runtime-api-type-prompt) + +Whether para gerar o tipo de runtime `loadRemote` API + +### maxRetries + +- Tipo: `number` +- Obrigatório: No +- Padrão valor: `3` + +Maximum number de retries for falhou carregamento + +### abortOnError + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `false` + +Whether para lança um erro quando uma problem é encountered during tipo carregamento + +### typesFolder + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `'@mf-types'` + +Tipo storage diretório depois successful carregamento + +### deleteTypesFolder + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `true` + +Antes carregamento tipo arquivos, whether para delete o previously carregado `typesFolder` diretório + +### remoteTypesFolder + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `'@mf-types'` + +`typesFolder` corresponding para `remotes` diretório configuração + +### remoteTypeUrls + +- Type: `(() => Promise) | RemoteTypeUrls` +- Obrigatório: No +- Padrão valor:`undefined` + +Usado for getting o address do `remote` tipo arquivo. + +Aplicação scenarios: + +* Only o runtime API é usado para carregar o producer, e no plugin de build é usado. O MF tipo arquivo address é informed by criação uma `module-federation.config.ts` configuração arquivo e setting este configuração. + +```ts title="module-federation.config.ts" +import { createModuleFederationConfig, type moduleFederationPlugin } from '@module-federation/enhanced'; + +export default createModuleFederationConfig({ + // ... + remotes: { + 'remote1-alias': 'remote1@http://localhost:80801/remoteEntry.js' + }, + dts:{ + consumeTypes:{ + remoteTypeUrls: async()=>{ + // Simulate the request interface to obtain the type file address + const data = await new Promise(resolve=>{ + setTimeout(()=>{ + resolve({ + remote1:{ + alias: 'remote1-alias', + api:'http://localhost:8081/custom-dir/@mf-types.d.ts', + zip:'http://localhost:8081/custom-dir/@mf-types.zip' + } + } ) + },1000) + }); + + return data; + } + } + } +}); +``` + + +* Quando remote é `remoteEntry.js`, o tipo arquivo address geralmente diretamente replaces o js arquivo com o corresponding tipo arquivo, such as `@mf-types.zip`, but o actual uploaded tipo arquivo address é não este, so você pode tell MF o real tipo arquivo address by setting este configuração. + +```ts title="module-federation.config.ts" +import { createModuleFederationConfig } from '@module-federation/enhanced'; + +export default createModuleFederationConfig({ + // ... + remotes: { + 'remote1-alias': 'remote1@http://localhost:80801/remoteEntry.js' + }, + dts:{ + consumeTypes:{ + remoteTypeUrls: { + // remote name + remote1:{ + alias: 'remote1-alias', + api:'http://localhost:8081/custom-dir/@mf-types.d.ts', + zip:'http://localhost:8081/custom-dir/@mf-types.zip' + } + } + } + } +}); +``` + +### family + +- Tipo: `0 | 4 | 6` +- Obrigatório: No +- Padrão valor: `0` + +Configure o IP versão family esse vai ser usado for network operations. + +### typesOnBuild +- Tipo: `boolean` +- Obrigatório: No +- Padrão: `false` + +Por padrão, Module Federation does não carregue tipo arquivos em produção ( process.env.NODE_ENV === 'production' ). To habilite tipo carregamento em produção builds, definir typesOnBuild para true. + +## tsConfigPath + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `path.join(process.cwd(),'./tsconfig.json')` + +tsconfig configuração arquivo caminho + +## cwd + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `undefined` + +O working diretório para run o compiler + +## displayErrorInTerminal + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `true` + +Whether print erro log em terminal diff --git a/apps/website-new/docs/pt-BR/configure/experiments.mdx b/apps/website-new/docs/pt-BR/configure/experiments.mdx new file mode 100644 index 00000000000..1556fa1a6d8 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/experiments.mdx @@ -0,0 +1,119 @@ +# experiments + +O `experiments` configuração enables advanced e experimental capabilities no plugin. + +## asyncStartup + +- Tipo: `boolean` +- Obrigatório: No +- Padrão: `false` + +Quando `asyncStartup` é habilitado, all Module Federation entrypoints vai initialize asynchronously por padrão. Este means: + +- No need for manual `import()` statements at o top de your app (e.g., `import('./bootstrap')`) +- All entrypoints automatically handle async initialization +- Prevention de "eager consumption" erros por meio de automatic async handling + +:::warning + +Ao usar este mode, all entrypoints vai initialize asynchronously. Se você're manually requiring uma bundled entrypoint ou exposing uma UMD library, it vai retornar uma promise resolving para o exporta. + +::: + +## externalRuntime + +- Tipo: `boolean` +- Obrigatório: No +- Padrão: `false` + +Quando definir para `true`, `@module-federation/runtime-core` vai ser treated as um external e read do global `_FEDERATION_RUNTIME_CORE` em runtime. Ensure o consumer fornece este global (typically usado together com `provideExternalRuntime`), caso contrário it vai não work. + +## provideExternalRuntime + +- Tipo: `boolean` +- Obrigatório: No +- Padrão: `false` + +Only for pure consumer scenarios (no `exposes`). Quando habilitado, automatically injects `@module-federation/inject-external-runtime-core-plugin` para forneça o external runtime at execution time. + +:::warning Notes + +- Usando este together com `exposes` vai lança um erro — apenas pure consumers pode habilite it. +- Prefer configuring it at o topmost consumer para avoid multiple injections. + +::: + +## optimization + +Este objeto contains flags related para build-time optimizations esse pode affect o Module Federation runtime's size e behavior. + +### disableSnapshot + +- Tipo: `boolean` +- Obrigatório: No +- Padrão: `false` + +Quando definir para `true`, este opção defines o `FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN` global constant as `true` during o build. No `@module-federation/runtime-core`, este prevents o `snapshotPlugin()` e `generatePreloadAssetsPlugin()` de being included e initialized within o Module Federation instance. + +**Impact:** + +- **Benefit:** Can reduce o overall bundle size do Module Federation runtime by excluding o code for these two plugins. +- **Cost:** Disables o functionality fornecido by these plugins. O `snapshotPlugin` é crucial para o "mf-manifest protocol" – it's responsible for generating ou providing runtime access para uma build manifest (e.g., `mf-manifest.json`) containing metadata about módulo expostos, dependências compartilhadas, versões, e remotes. Disabling it means: + - O runtime loses access para este build manifest dados. + - Features relying no manifest, such as dynamic remote discovery, manifest-based versão compatibility checks, advanced asset preloading (também handled pelo removed `generatePreloadAssetsPlugin`), e potentially runtime debugging/introspection tools, vai não função correctly ou vai ser unavailable. + - Use este opção apenas se você não rely on these manifest-driven features e prioritize uma minimal runtime footprint. + +:::warning +**Caution:** Setting `disableSnapshot: true` vai disable o mf-manifest protocol. Este means você vai lose TypeScript syncing suporte e hot módulo replacement (HMR) for módulos federados. Se você são apenas usando `.js` remotes (não manifest-based remotes), você vai não lose any functionality as o `js` remotes não suporte these capabilities anyways. +::: + +### disableRemote e disableShared + +- Tipo: `boolean` +- Obrigatório: Não +- Padrão: `false` + +Estas opções removem capacidades independentes do runtime-core durante o build: + +- `disableRemote` remove todo o fluxo de consumo de remotes, incluindo registro, carregamento da entrada, pré-carregamento, leitura e execução de módulos expostos e processamento de snapshots relacionado. Ele não remove os `exposes` nem o `container.get` gerados para o produtor atual. Use apenas quando o build nunca consumir ou registrar remotes dinamicamente. +- `disableShared` remove o registro, a resolução e o carregamento de dependências compartilhadas. Um escopo compartilhado vazio e mínimo é mantido para permitir a inicialização de remotes sem dependências compartilhadas. + +As opções podem ser combinadas. Chamar uma API de uma capacidade desabilitada gera um erro explícito. Mantenha o valor padrão sempre que o build ainda puder usar a capacidade correspondente. + +### target + +- Tipo: `'web' | 'node'` +- Obrigatório: No +- Padrão: Inferred de Webpack's `target` opção (geralmente `'web'`) + +Este opção defines o `ENV_TARGET` global constant during o build, specifying o intended execution environment. + +**Impact:** + +- **`target: 'web'`**: Optimizes o build for navegador environments. + - Ensures navegador-specific remote entry carregamento mechanisms são usado (`loadEntryDom`). + - Crucially, enables tree-shaking/dead-code elimination for Node.js-specific code within o `@module-federation/sdk`. Funções like `createScriptNode` e `loadScriptNode`, along com their obrigatório Node.js built-em módulos (e.g., `vm`, `path`, `http`), são completamente removed do bundle, significantly reducing its size. +- **`target: 'node'`**: Optimizes o build for Node.js environments. + - Ensures Node.js-specific remote entry carregamento mechanisms são usado (`loadEntryNode`). + - Includes o necessário Node.js-specific funções do SDK (`createScriptNode`, `loadScriptNode`) no bundle, allowing o federated aplicação para função correctly em Node.js. + +Explicitly setting este valor é recomendado para garantir o intended optimizations são applied, especialmente em universal ou do lado do servidor renderização scenarios. + +### Impact de Optimization Flags on `remoteEntry.js` Size + +O seguinte table demonstrates como diferente combinations do `disableSnapshot`, `target: 'web'`, e `externalRuntime` optimization flags affect o size do generated `remoteEntry.js` arquivo. Esses measurements pode help você choose o right trade-off entre runtime features e bundle size for your use case. + +| Optimization Flags | remoteEntry.js | Gzip Size | Brotli Size | +| ----------------------------------------- | :------------: | :-------: | :---------: | +| No optimization flags habilitado | 69K | 21437 B | 19024 B | +| `disableSnapshot: true` | 65K | 20096 B | 17860 B | +| `target: 'web'` | 60K | 19314 B | 17105 B | +| Both habilitado | 56K | 17998 B | 15982 B | +| Both habilitado + `externalRuntime: true` | 14K | 5381 B | 4703 B | +| Both disabled + `externalRuntime: true` | 22K | 8222 B | 7269 B | + +**Notes:** + +- Enabling both `disableSnapshot` e `target: 'web'` fornece uma ferramenta greatest reduction em bundle size, especialmente quando combined com `externalRuntime: true`. +- Usando o external runtime (`externalRuntime: true`) pode dramatically reduce o size de your remote entry, but requires esse o consumer fornece uma ferramenta runtime. +- Smaller bundle sizes pode lead para faster carregue times e improved performance, but may disable certain features (see above for details no que each flag does). diff --git a/apps/website-new/docs/pt-BR/configure/exposes.mdx b/apps/website-new/docs/pt-BR/configure/exposes.mdx new file mode 100644 index 00000000000..8d0fbfeba0b --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/exposes.mdx @@ -0,0 +1,44 @@ +# exposes + +- Tipo: `PluginExposesOptions` +- Obrigatório: No +- Padrão valor: `undefined` +- Usage: Determines the modules and file entries exposed by {props.brandName || props.name || 'Module Federation'}. + +:::tip +Uma producer-specific parameter, setting `exposes` indicates esse este é uma producer. + +::: + +Depois configuração, o módulo expostos vai ser separated em uma distinct chunk, e se there são any asynchronous chunks, they vai ser extracted em individual chunks as well (o specific extraction behavior depends no chunk splitting rules). + +O `PluginExposesOptions` tipo é as follows: + +```tsx +interface PluginExposesOptions { + [exposeKey: string]: string | ExposesConfig; +} + +interface ExposesConfig { + // File entry + import: string; +} +``` + +O `exposeKey` é essentially consistent com o [Package Entry Points](https://nodejs.org/api/packages.html#package-entry-points) specification (except for não supporting regular expression matching). Exemplo uso: + +```jsx +module.exports = { + plugins: [ + new ModuleFederationPlugin({ + name: 'provider', + exposes: { + // Note: "./" is not supported. Exporting as `.` indicates a default export + '.': './src/index.tsx', + './add': './src/utils/add.ts', + './Button': './src/components/Button.tsx', + }, + }), + ], +}; +``` diff --git a/apps/website-new/docs/pt-BR/configure/filename.mdx b/apps/website-new/docs/pt-BR/configure/filename.mdx new file mode 100644 index 00000000000..9d083145c87 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/filename.mdx @@ -0,0 +1,6 @@ +# filename + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `remoteEntry.js` +- Uso: Determines o filename do generated `remoteEntry`. diff --git a/apps/website-new/docs/pt-BR/configure/getpublicpath.mdx b/apps/website-new/docs/pt-BR/configure/getpublicpath.mdx new file mode 100644 index 00000000000..36635847528 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/getpublicpath.mdx @@ -0,0 +1,37 @@ +# getPublicPath + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `undefined` +- Effective condition: apenas effective quando `exposes` é definir + + +Usado para definir uma dynamic `publicPath`. O valor deve ser uma stringified função ou uma stringified retornar expression. Quando other consumers carregue este provider, o string em `getPublicPath` vai ser executed via `new Function` para obtain o retornar valor, que vai ser usado as o `publicPath` prefix para o módulo’s static assets. Por exemplo, se your deployed projeto receives uma dynamic `cdn_prefix`, você pode configure it as: + +- Função form: ``function(){ retornar window.cdn_prefix }`` +- Return form: ``retornar "https:" + window.navigator.cdn_host + "/recurso/app/"`` + +No exemplo below, `getPublicPath` é definir. Quando other consumers carregue este provider, o string em `getPublicPath` vai ser executed usando `new Function` para obtain o valor, que vai ser usado as o `publicPath` prefix para o módulo’s static assets. + +:::tip NOTE +`getPublicPath` deve ser uma stringified função ou uma stringified retornar expression. +::: + +:::tip NOTE +Se você're usando o módulo federation webpack plugin e want para definir uma dynamic publicPath, você deve definir `__webpack_public_path__ = window.cdn_prefix` no `getPublicPath` função body. +::: + +```ts title="rspack.config.ts" +module.exports = { + plugins: [ + new ModuleFederationPlugin({ + name: 'provider', + exposes: { + './Button': './src/components/Button.tsx', + }, + // ... + getPublicPath: `function() {return "https:" + window.navigator.cdn_host + "/resource/app/"}`, + }), + ], +}; +``` diff --git a/apps/website-new/docs/pt-BR/configure/implementation.mdx b/apps/website-new/docs/pt-BR/configure/implementation.mdx new file mode 100644 index 00000000000..fd6d586a204 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/implementation.mdx @@ -0,0 +1,25 @@ +# implementation + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `undefined` + +O `implementation` opção é usado para modificar o actual bundler runtime versão. It deve ser definir para o caminho de `@module-federation/runtime-tools`. + +Quando working com Module Federation, o runtime é responsible for handling o carregamento e compartilhamento de módulos remotos. Por padrão, o bundler usa uma specific versão do runtime esse é compatible com its versão. However, em some cases, você might precisa use uma diferente versão do runtime ou uma custom implementation. + +By specifying o `implementation` opção, você pode forneça uma caminho para o desired runtime implementation. Este é particularly useful se você precisa use features de uma newer ou older versão do runtime esse não são disponível no padrão versão fornecido pelo bundler. + +Por exemplo, se você quiser use uma specific versão de `@module-federation/runtime-tools`, você pode definir o `implementation` opção em your configuração arquivo: + +```javascript +module.exports = { + // ...other configurations + plugins: [ + new ModuleFederationPlugin({ + // ...other Module Federation options + implementation: require.resolve('@module-federation/runtime-tools'), + }), + ], +}; +``` diff --git a/apps/website-new/docs/pt-BR/configure/index.mdx b/apps/website-new/docs/pt-BR/configure/index.mdx new file mode 100644 index 00000000000..1d07803a974 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/index.mdx @@ -0,0 +1,38 @@ +# Visão geral da configuração + +Esta página lista todas as opções de configuração do `Module Federation`. Para instalação de pacotes e configuração de plugins em diferentes tipos de projeto, consulte Integrações. + +```ts +type ModuleFederationOptions = { + // Nome para module federation + name: string; + // Escopo(s) de compartilhamento para a aplicação atual (padrão: 'default') + shareScope?: string | string[]; + // Nome do arquivo remoteEntry + filename?: string; + // Configuração de módulos remotos e informações de entrada em module federation + remotes?: Array; + // Informações de módulos expostos por module federation + exposes?: PluginExposesOptions; + // Configuração de dependências compartilhadas + shared?: ShareInfos; + // publicPath dinâmico + getPublicPath?: string; + // Plugins de runtime + runtimePlugins?: Array]>; + // Implementação de runtime a ser usada + implementation?: string; + // Configuração de manifest + manifest?: boolean | PluginManifestOptions; + // Controla liveReload da página e hot reload de tipos + dev?: boolean | PluginDevOptions; + // Controla tipos + dts?: boolean | PluginDtsOptions; + // Usa um ponto de entrada de runtime virtual em vez de gravar um arquivo temporário em disco + virtualRuntimeEntry?: boolean; + injectTreeShakingUsedExports?: boolean; + treeShakingDir?: string; + treeShakingSharedPlugins?: Array; + treeShakingSharedExcludePlugins?: Array; +}; +``` diff --git a/apps/website-new/docs/pt-BR/configure/injectTreeShakingUsedExports.mdx b/apps/website-new/docs/pt-BR/configure/injectTreeShakingUsedExports.mdx new file mode 100644 index 00000000000..ead29442db5 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/injectTreeShakingUsedExports.mdx @@ -0,0 +1,11 @@ +# injectTreeShakingUsedExports + +Whether para inject o exporta usado by `shared` no bundler runtime. + +- Tipo: `boolean` +- Obrigatório: No +- Padrão: `undefined` + +Este opção controls whether o actual usado exporta de módulos shared são injected no bundler runtime, enabling mais precise dependência management e optimizations. + +Se você são usando `mode: 'server-calc'`, it é recomendado para definir este opção para `false`. diff --git a/apps/website-new/docs/pt-BR/configure/library.mdx b/apps/website-new/docs/pt-BR/configure/library.mdx new file mode 100644 index 00000000000..85a5cb710b5 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/library.mdx @@ -0,0 +1,101 @@ +# library + +`library` configures o output library format do Module Federation container, determining como o container é exposto para external consumers. + +- Tipo: `LibraryOptions` +- Obrigatório: No +- Padrão: `undefined` + +```ts +interface LibraryOptions { + type: LibraryType; + name?: string | string[] | { amd?: string; commonjs?: string; root?: string | string[] }; + export?: string | string[]; + umdNamedDefine?: boolean; + amdContainer?: string; + auxiliaryComment?: string | { + amd?: string; + commonjs?: string; + commonjs2?: string; + root?: string; + }; +} + +type LibraryType = + | 'var' | 'module' | 'assign' | 'assign-properties' + | 'this' | 'window' | 'self' | 'global' + | 'commonjs' | 'commonjs2' | 'commonjs-module' | 'commonjs-static' + | 'amd' | 'amd-require' | 'umd' | 'umd2' + | 'jsonp' | 'system' | string; +``` + +## tipo + +- Tipo: `LibraryType` +- Obrigatório: Yes +- Padrão: - + +Specifies o output library tipo para o container. Common valores: + +| Valor | Description | +|---|---| +| `'var'` | Assigns para uma global variable (padrão) | +| `'module'` | ESM output (requires `experiments.outputModule: true`) | +| `'commonjs2'` | CommonJS via `module.exports` | +| `'umd'` | Compatible com AMD, CommonJS, e global variable | +| `'global'` | Attaches para o `global` objeto | +| `'window'` | Attaches para o `window` objeto | +| `'self'` | Attaches para o `self` objeto | +| `'system'` | SystemJS módulo format | + +## name + +- Tipo: `string | string[] | LibraryCustomUmdObject` +- Obrigatório: No +- Padrão: `undefined` + +O name do library. For `umd` tipo, você pode specify separate names for amd, commonjs, e o global variable. + +## exporte + +- Tipo: `string | string[]` +- Obrigatório: No +- Padrão: `undefined` + +Specifies que exporte deve ser exposto as o library. + +## umdNamedDefine + +- Tipo: `boolean` +- Obrigatório: No +- Padrão: `false` + +Quando `type` é `'umd'`, whether para name o AMD módulo (i.e. pass o módulo name em `define()`). + +## amdContainer + +- Tipo: `string` +- Obrigatório: No +- Padrão: `undefined` + +Add uma container prefix for `define`/`require` funções no AMD módulo. + +## auxiliaryComment + +- Tipo: `string | object` +- Obrigatório: No +- Padrão: `undefined` + +Add uma comment no UMD wrapper for each módulo format. + +## Exemplo + +```ts +new ModuleFederationPlugin({ + name: '@demo/provider', + library: { type: 'var', name: 'provider' }, + exposes: { + './Button': './src/Button', + }, +}); +``` diff --git a/apps/website-new/docs/pt-BR/configure/manifest.mdx b/apps/website-new/docs/pt-BR/configure/manifest.mdx new file mode 100644 index 00000000000..ed24a769b7f --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/manifest.mdx @@ -0,0 +1,52 @@ +# manifest + +- Tipo: `boolean | PluginManifestOptions` +- Obrigatório: No +- Padrão valor: `undefined` + +Controls whether the plugin generates manifest artifacts and how they are produced. Quando enabled, the plugin emits {props.manifest || 'mf-manifest.json' } and {props.stats || 'mf-stats.json' } (names can be customized via `fileName`) on every build so that other tools can consume them diretamente por meio de `processAssets` or from the final build output. + +- {props.stats || 'mf-stats.json'}: captures the full build statistics, including the assets for exposes/shared/remotes, `metaData` (plugin version, build info, `remoteEntry`, etc.), and any additional asset analysis. Ideal for debugging or merging stats across environments, see field references: [{props.stats || 'mf-stats.json'}](/guide/advanced/stats-fields.html). +- {props.manifest || 'mf-manifest.json'}: a runtime-oriented manifest distilled from the stats. It keeps the stable structure that {props.brandName || 'Module Federation'} consumers read quando carregamento remote modules. The exposes/shared/remotes entries describe what is actually available to consumers, see field references: [{props.manifest || 'mf-manifest.json'}](/guide/advanced/manifest-fields.html). + +O `PluginManifestOptions` tipos são as seguintes: + +```ts +interface PluginManifestOptions { + filePath?: string; + disableAssetsAnalyze?: boolean; + fileName?: string; +} +``` + +## filePath + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `undefined` + +manifest filePath + +## fileName + +- Tipo: `string` +- Obrigatório: No +- Padrão valor: `'mf-manifest.json'` + +manifest fileName + +Se `fileName` é fornecido, o companion stats arquivo automatically receives uma `-stats` suffix (por exemplo, `fileName: 'mf.json'` produces both `mf.json` e `mf-stats.json`). Generated arquivos são written under `filePath` quando esse opção é definir. + +## disableAssetsAnalyze + +:::warning +It é não recomendado para definir este configuração. Depois setting, o preload função vai ser disabled! +::: + +- Tipo: `boolean` +- Obrigatório: No +- Padrão valor: `undefined` + +Quando analyzing assets em complex projetos, ele pode take uma long time. By setting este opção para `true`, asset analysis vai ser disabled, optimizing build time. +Se o projeto é purely consumer-oriented, it vai ser definir para `true` em dev por padrão. +Se definir para `true`, o `shared` e `exposes` fields vai não ser present no manifest, e `assets` vai não ser present em `remotes`. diff --git a/apps/website-new/docs/pt-BR/configure/name.mdx b/apps/website-new/docs/pt-BR/configure/name.mdx new file mode 100644 index 00000000000..22ff6d0cd4e --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/name.mdx @@ -0,0 +1,8 @@ +# name + +- Tipo: `string` +- Obrigatório: Yes + +`Module Federation` módulo name, o name deve ser unique. + +`Module Federation` usa o name for runtime dados retrieval e global chunk storage variable references. diff --git a/apps/website-new/docs/pt-BR/configure/remotes.mdx b/apps/website-new/docs/pt-BR/configure/remotes.mdx new file mode 100644 index 00000000000..f2cb4c2e26e --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/remotes.mdx @@ -0,0 +1,77 @@ +# remotes + +- Tipo: `PluginRemoteOptions` +- Obrigatório: No +- Padrão: `undefined` +- Usage: Used for consuming producer modules with {props.brandName || props.name || 'Module Federation'} + +:::tip +Uma parameter unique para consumers. Se `remotes` é definir, ele pode ser considered esse este é uma consumer. +::: + +O `PluginRemoteOptions` tipo é as follows: + +```tsx +type ModuleFederationInfo = string; +type ShareScope = string | string[]; + +type RemoteConfig = { + external: ModuleFederationInfo | ModuleFederationInfo[]; + shareScope?: ShareScope; +}; + +interface PluginRemoteOptions { + [remoteAlias: string]: ModuleFederationInfo | RemoteConfig; +} +``` + +- `remoteAlias` é o name actually usado for reference pelo consumer e pode ser configured as needed. Por exemplo, se `remoteAlias` é definir para `demo`, then o consumption método would ser `import xx from 'demo'`. +- `ModuleFederationInfo` é composed de `ModuleFederation name` + `@` + `ModuleFederation entry` + - `ModuleFederation name` é o name definir pelo producer + - `entry` pode ser either `mf-manifest.json` ou `remoteEntry.js` + - Quando `entry` é `mf-manifest.json`, it has o seguintes additional capabilities: + - Dynamic módulo tipo hints + - Resource preloading + - Chrome devtool debugging tool + +```js +module.exports = { + plugins: [ + new ModuleFederationPlugin({ + name: 'host', + // The `remotes` below defines two producers, named `manifest-provider` for the project started on port 3011 and `js-entry-provider` for the project started on port 3012 + remotes: { + 'manifest-provider': + 'manifest_provider@http://localhost:3011/mf-manifest.json', + 'js-entry-provider': + 'js_entry_provider@http://localhost:3012/remoteEntry.js', + }, + }), + ], +}; +``` + +## shareScope + +- Tipo: `string | string[]` +- Obrigatório: No +- Padrão: `'default'` + +Defines que compartilhe escopos (Compartilhe Escopo) o consumer aligns com uma given producer. Este é useful for isolating certain dependências compartilhadas away do padrão pool (por exemplo, putting um internal design system em `scope1` enquanto keeping React em `default`). + +```ts +new ModuleFederationPlugin({ + name: 'host', + remotes: { + remote: { + external: 'app_remote@http://localhost:2001/remoteEntry.js', + shareScope: ['default', 'scope1'], + }, + }, +}); +``` + +Related configuração: + +- O producer deve declare que escopos it initializes via [shareScope](/configure/shareScope.html). +- Each dependência compartilhada chooses its escopo via [shared.shareScope](/configure/shared.html#sharescope). diff --git a/apps/website-new/docs/pt-BR/configure/remotetype.mdx b/apps/website-new/docs/pt-BR/configure/remotetype.mdx new file mode 100644 index 00000000000..76b6fa80230 --- /dev/null +++ b/apps/website-new/docs/pt-BR/configure/remotetype.mdx @@ -0,0 +1,59 @@ +# remoteType + +`remoteType` specifies o external módulo tipo for remote containers, determining como o runtime carrega remote entries. + +- Tipo: `ExternalsType` +- Obrigatório: No +- Padrão: `'script'` + +```ts +type ExternalsType = + | 'var' | 'module' | 'assign' + | 'this' | 'window' | 'self' | 'global' + | 'commonjs' | 'commonjs2' | 'commonjs-module' | 'commonjs-static' + | 'amd' | 'amd-require' + | 'umd' | 'umd2' + | 'jsonp' | 'system' + | 'promise' | 'import' | 'module-import' + | 'script' | 'node-commonjs'; +``` + +## Uso + +`remoteType` controls como webpack/rspack carrega remote container scripts em runtime. Common valores: + +| Valor | Description | +|---|---| +| `'script'` | Loads via `', + 'unexpected', + ); + expect(() => + createBridgeHydrationRegistry(document).peek('remote/app', 'remote-1'), + ).toThrow(/only its direct mount and state children/); + + document.body.innerHTML = original.replace( + '"state":', + '"html":"duplicate","state":', + ); + expect(() => + createBridgeHydrationRegistry(document).peek('remote/app', 'remote-1'), + ).toThrow(/incompatible state envelope/); + }); + + it('allows the same instanceId across different module names', () => { + const second = { + ...result, + moduleName: 'other/app', + html: '

other remote

', + }; + document.body.innerHTML = + renderToStaticMarkup( + , + ) + + renderToStaticMarkup( + , + ); + const registry = createBridgeHydrationRegistry(document); + expect(registry.peek('remote/app', 'remote-1')?.html).toBe( + '

server remote

', + ); + expect(registry.peek('other/app', 'remote-1')?.html).toBe( + '

other remote

', + ); + }); + + it('fail clears a peeked snapshot so later peeks miss', () => { + installSlot(); + const registry = createBridgeHydrationRegistry(document); + expect(registry.peek('remote/app', 'remote-1')).toBeDefined(); + registry.fail('remote/app', 'remote-1'); + expect(registry.peek('remote/app', 'remote-1')).toBeUndefined(); + expect(registry.consume('remote/app', 'remote-1')).toBeUndefined(); + }); +}); diff --git a/packages/bridge/bridge-react/src/hydration.tsx b/packages/bridge/bridge-react/src/hydration.tsx new file mode 100644 index 00000000000..b131dfe162f --- /dev/null +++ b/packages/bridge/bridge-react/src/hydration.tsx @@ -0,0 +1,83 @@ +import React from 'react'; +import { + BRIDGE_SSR_PROTOCOL_VERSION, + MF_BRIDGE_STATE_ATTR, + getBridgeSSRContainerAttrs, + getBridgeSSRSlotAttrs, + serializeBridgeSSRStateEnvelope, + type BridgeHydrationRegistry, + type BridgeHydrationSnapshot, + type BridgeSSRResult, +} from '@module-federation/bridge-shared'; +import { getRootDomDefaultClassName } from './utils'; + +const BridgeHydrationContext = React.createContext< + BridgeHydrationRegistry | undefined +>(undefined); + +export function BridgeHydrationProvider({ + registry, + children, +}: { + registry: BridgeHydrationRegistry; + children: React.ReactNode; +}) { + return ( + + {children} + + ); +} + +export function useBridgeHydrationRegistry() { + return React.useContext(BridgeHydrationContext); +} + +export function BridgeRemoteSlot({ + moduleName, + instanceId, + payload, + snapshot, + className, + style, + mountRef, +}: { + moduleName: string; + instanceId: string; + payload?: BridgeSSRResult; + snapshot?: BridgeHydrationSnapshot; + className?: string; + style?: React.CSSProperties; + mountRef?: React.Ref; +}) { + const html = payload?.html ?? snapshot?.html ?? ''; + const state = payload?.dehydratedState ?? snapshot?.state; + const rootClassName = + `${getRootDomDefaultClassName(moduleName)} ${className || ''}`.trim(); + + return ( +
+
+ \u2028\u2029' })).toBe( + '{"value":"\\u003c/script>\\u2028\\u2029"}', + ); + }); + + it('rejects cyclic and non-JSON state', () => { + const cyclic: Record = {}; + cyclic.self = cyclic; + expect(() => assertBridgeJSONValue(cyclic)).toThrow(/cyclic/); + expect(() => assertBridgeJSONValue({ value: Number.NaN })).toThrow( + /finite/, + ); + expect(() => + assertBridgeJSONValue(JSON.parse('{"__proto__":{"polluted":true}}')), + ).toThrow(/__proto__/); + }); + + it('treats empty SSR markup as hydration-eligible when markers match', async () => { + const { hasBridgeSSRMarkup, getBridgeSSRContainerAttrs } = + await import('./ssr'); + const attrs = getBridgeSSRContainerAttrs({ + moduleName: 'remote/app', + instanceId: 'remote-1', + }); + const dom = { + getAttribute(name: string) { + return attrs[name] ?? null; + }, + } as HTMLElement; + expect( + hasBridgeSSRMarkup(dom, { + moduleName: 'remote/app', + instanceId: 'remote-1', + }), + ).toBe(true); + }); + + it('validates host-carried results before matching their identity', () => { + const result = { + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: 'remote/app', + instanceId: 'remote-1', + html: '

remote

', + } as const; + + expect( + getMatchingBridgeSSRResult(result, { + moduleName: 'remote/app', + instanceId: 'remote-1', + }), + ).toBe(result); + expect( + getMatchingBridgeSSRResult(result, { moduleName: 'other/app' }), + ).toBeUndefined(); + expect(() => + getMatchingBridgeSSRResult( + { ...result, protocolVersion: 2 }, + { moduleName: 'remote/app' }, + ), + ).toThrow(/incompatible result/); + }); + + it('creates an identity-only client reference', () => { + const result = { + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: 'remote/app', + instanceId: 'remote-1', + html: '

remote

', + dehydratedState: { ready: true }, + } as const; + const reference = toBridgeSSRReference(result); + + expect(reference).toEqual({ + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: 'remote/app', + instanceId: 'remote-1', + }); + expect(reference).not.toHaveProperty('html'); + expect(reference).not.toHaveProperty('dehydratedState'); + expect(Object.isFrozen(reference)).toBe(true); + expect( + getMatchingBridgeSSRPayload(reference, { + moduleName: 'remote/app', + instanceId: 'remote-1', + }), + ).toBe(reference); + }); + + it('serializes state separately from remote HTML', () => { + expect( + serializeBridgeSSRStateEnvelope({ + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: 'remote/app', + instanceId: 'remote-1', + state: { value: '\u2028\u2029' }, + }), + ).toBe( + '{"protocolVersion":1,"moduleName":"remote/app","instanceId":"remote-1","state":{"value":"\\u003c/script>\\u2028\\u2029"}}', + ); + expect(() => + serializeBridgeSSRStateEnvelope({ + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: 'remote/app', + instanceId: 'remote-1', + html: '

must not be serialized

', + } as any), + ).toThrow(/state envelope is incompatible/); + }); + + it('loads, renders, and validates a remote provider', async () => { + const renderServer = vi.fn(async (context) => ({ + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: context.moduleName, + instanceId: context.instanceId, + html: '

remote

', + dehydratedState: { ready: true }, + })); + const request = new Request('http://bridge.test/detail'); + await expect( + renderRemoteBridge({ + loader: async () => ({ default: () => ({ renderServer }) }), + moduleName: 'remote/app', + instanceId: 'remote-1', + request, + props: { intentional: true }, + }), + ).resolves.toMatchObject({ html: '

remote

' }); + expect(renderServer).toHaveBeenCalledWith( + expect.objectContaining({ request, signal: request.signal }), + ); + }); + + it('adds context to load and contract failures', async () => { + await expect( + renderRemoteBridge({ + loader: async () => { + throw new Error('network'); + }, + moduleName: 'remote/app', + instanceId: 'remote-1', + request: new Request('http://bridge.test/'), + }), + ).rejects.toEqual( + expect.objectContaining({ + name: 'BridgeSSRError', + message: 'Unable to load Bridge remote remote/app', + }), + ); + + await expect( + renderRemoteBridge({ + loader: async () => ({ default: () => ({}) }), + moduleName: 'remote/app', + instanceId: 'remote-1', + request: new Request('http://bridge.test/'), + }), + ).rejects.toBeInstanceOf(BridgeSSRError); + }); +}); diff --git a/packages/bridge/bridge-shared/src/ssr.ts b/packages/bridge/bridge-shared/src/ssr.ts new file mode 100644 index 00000000000..9ec952d9759 --- /dev/null +++ b/packages/bridge/bridge-shared/src/ssr.ts @@ -0,0 +1,508 @@ +import { + BRIDGE_SSR_PROTOCOL_VERSION, + BridgeSSRError, + type BridgeHydrationRegistry, + type BridgeHydrationSnapshot, + type BridgeJSONValue, + type BridgeSSRReference, + type BridgeSSRResult, + type BridgeSSRStateEnvelope, +} from './type'; + +export const MF_BRIDGE_SSR_ATTR = 'data-mf-bridge-ssr'; +export const MF_BRIDGE_VERSION_ATTR = 'data-mf-bridge-version'; +export const MF_BRIDGE_MODULE_ATTR = 'data-mf-bridge-module'; +export const MF_BRIDGE_INSTANCE_ATTR = 'data-mf-bridge-instance'; +export const MF_BRIDGE_SLOT_ATTR = 'data-mf-bridge-slot'; +export const MF_BRIDGE_MOUNT_ATTR = 'data-mf-bridge-mount'; +export const MF_BRIDGE_STATE_ATTR = 'data-mf-bridge-state'; + +function assertPrintable(value: string, label: string) { + if (!value || /[\u0000-\u001f\u007f]/.test(value)) { + throw new BridgeSSRError( + `Bridge SSR ${label} must be a non-empty printable string`, + ); + } +} + +export function assertBridgeSSRIdentity(value: { + moduleName: string; + instanceId: string; +}) { + assertPrintable(value.moduleName, 'moduleName'); + assertPrintable(value.instanceId, 'instanceId'); +} + +function validateJSON( + value: unknown, + path: string, + ancestors: WeakSet, +): void { + if ( + value === null || + typeof value === 'string' || + typeof value === 'boolean' + ) { + return; + } + if (typeof value === 'number') { + if (Number.isFinite(value)) return; + throw new BridgeSSRError(`Bridge SSR value at ${path} must be finite`); + } + if (typeof value !== 'object' || value === undefined) { + throw new BridgeSSRError( + `Bridge SSR value at ${path} must be JSON serializable`, + ); + } + if (ancestors.has(value)) { + throw new BridgeSSRError(`Bridge SSR value at ${path} must not be cyclic`); + } + ancestors.add(value); + if (Array.isArray(value)) { + for (let index = 0; index < value.length; index += 1) { + if (!Object.prototype.hasOwnProperty.call(value, index)) { + throw new BridgeSSRError( + `Bridge SSR array at ${path} must not be sparse`, + ); + } + validateJSON(value[index], `${path}[${index}]`, ancestors); + } + } else { + const prototype = Object.getPrototypeOf(value); + if (prototype !== Object.prototype && prototype !== null) { + throw new BridgeSSRError( + `Bridge SSR value at ${path} must use plain objects`, + ); + } + for (const [key, descriptor] of Object.entries( + Object.getOwnPropertyDescriptors(value), + )) { + if (key === '__proto__' || key === 'prototype' || key === 'constructor') { + throw new BridgeSSRError( + `Bridge SSR value at ${path} must not contain ${key}`, + ); + } + if ( + !descriptor.enumerable || + !Object.prototype.hasOwnProperty.call(descriptor, 'value') + ) { + throw new BridgeSSRError( + `Bridge SSR value at ${path}.${key} must be an enumerable data property`, + ); + } + validateJSON(descriptor.value, `${path}.${key}`, ancestors); + } + if (Object.getOwnPropertySymbols(value).length > 0) { + throw new BridgeSSRError( + `Bridge SSR value at ${path} must not contain symbol keys`, + ); + } + } + ancestors.delete(value); +} + +export function assertBridgeJSONValue( + value: unknown, +): asserts value is BridgeJSONValue { + validateJSON(value, 'state', new WeakSet()); +} + +export function serializeBridgeJSON(value: BridgeJSONValue): string { + assertBridgeJSONValue(value); + return JSON.stringify(value) + .replace(/; + if ( + Object.keys(reference).some( + (key) => + key !== 'protocolVersion' && + key !== 'moduleName' && + key !== 'instanceId', + ) || + reference.protocolVersion !== BRIDGE_SSR_PROTOCOL_VERSION || + typeof reference.moduleName !== 'string' || + typeof reference.instanceId !== 'string' + ) { + throw new BridgeSSRError('Bridge SSR reference is incompatible'); + } + assertBridgeSSRIdentity({ + moduleName: reference.moduleName, + instanceId: reference.instanceId, + }); +} + +export function serializeBridgeSSRStateEnvelope( + envelope: BridgeSSRStateEnvelope, +): string { + const allowedKeys = new Set([ + 'protocolVersion', + 'moduleName', + 'instanceId', + 'state', + ]); + if ( + !envelope || + typeof envelope !== 'object' || + Array.isArray(envelope) || + Object.keys(envelope).some((key) => !allowedKeys.has(key)) + ) { + throw new BridgeSSRError('Bridge SSR state envelope is incompatible'); + } + assertBridgeSSRReference({ + protocolVersion: envelope.protocolVersion, + moduleName: envelope.moduleName, + instanceId: envelope.instanceId, + }); + if (envelope.state !== undefined) assertBridgeJSONValue(envelope.state); + return JSON.stringify(envelope) + .replace(/; + const allowedKeys = new Set([ + 'protocolVersion', + 'moduleName', + 'instanceId', + 'html', + 'dehydratedState', + ]); + if (Object.keys(result).some((key) => !allowedKeys.has(key))) { + throw new BridgeSSRError('Bridge SSR returned unsupported result fields'); + } + if ( + result.protocolVersion !== BRIDGE_SSR_PROTOCOL_VERSION || + typeof result.moduleName !== 'string' || + typeof result.instanceId !== 'string' || + typeof result.html !== 'string' + ) { + throw new BridgeSSRError('Bridge SSR returned an incompatible result'); + } + assertBridgeSSRIdentity({ + moduleName: result.moduleName, + instanceId: result.instanceId, + }); + if (result.dehydratedState !== undefined) { + assertBridgeJSONValue(result.dehydratedState); + } +} + +export function getMatchingBridgeSSRResult( + value: unknown, + expected: { moduleName?: string; instanceId?: string }, +): BridgeSSRResult | undefined { + if (value === undefined) return undefined; + assertBridgeSSRResult(value); + if ( + (expected.moduleName !== undefined && + value.moduleName !== expected.moduleName) || + (expected.instanceId !== undefined && + value.instanceId !== expected.instanceId) + ) { + return undefined; + } + return value; +} + +export function getMatchingBridgeSSRPayload( + value: unknown, + expected: { moduleName?: string; instanceId?: string }, +): BridgeSSRResult | BridgeSSRReference | undefined { + if (value === undefined) return undefined; + if (value && typeof value === 'object' && 'html' in value) { + assertBridgeSSRResult(value); + } else { + assertBridgeSSRReference(value); + } + if ( + (expected.moduleName !== undefined && + value.moduleName !== expected.moduleName) || + (expected.instanceId !== undefined && + value.instanceId !== expected.instanceId) + ) { + return undefined; + } + return value; +} + +export function getBridgeSSRContainerAttrs(value: { + moduleName: string; + instanceId: string; +}): Record { + assertBridgeSSRIdentity(value); + return { + [MF_BRIDGE_SSR_ATTR]: 'true', + [MF_BRIDGE_MOUNT_ATTR]: 'true', + [MF_BRIDGE_VERSION_ATTR]: String(BRIDGE_SSR_PROTOCOL_VERSION), + [MF_BRIDGE_MODULE_ATTR]: value.moduleName, + [MF_BRIDGE_INSTANCE_ATTR]: value.instanceId, + }; +} + +export function getBridgeSSRSlotAttrs(value: { + moduleName: string; + instanceId: string; +}): Record { + assertBridgeSSRIdentity(value); + return { + [MF_BRIDGE_SLOT_ATTR]: 'true', + [MF_BRIDGE_VERSION_ATTR]: String(BRIDGE_SSR_PROTOCOL_VERSION), + [MF_BRIDGE_MODULE_ATTR]: value.moduleName, + [MF_BRIDGE_INSTANCE_ATTR]: value.instanceId, + }; +} + +export function hasBridgeSSRMarkup( + dom: HTMLElement, + value?: { moduleName?: string; instanceId?: string }, +) { + // Empty SSR output is still hydration-eligible: trust markers/identity, not + // child presence. Remotes may render null/empty fragments with state only. + return ( + dom.getAttribute(MF_BRIDGE_SSR_ATTR) === 'true' && + dom.getAttribute(MF_BRIDGE_VERSION_ATTR) === + String(BRIDGE_SSR_PROTOCOL_VERSION) && + (!value?.moduleName || + dom.getAttribute(MF_BRIDGE_MODULE_ATTR) === value.moduleName) && + (!value?.instanceId || + dom.getAttribute(MF_BRIDGE_INSTANCE_ATTR) === value.instanceId) + ); +} + +function directChildrenWithAttribute( + parent: Element, + attribute: string, +): T[] { + return Array.from(parent.children).filter( + (child) => child.getAttribute(attribute) === 'true', + ) as T[]; +} + +function freezeJSONValue( + value: BridgeJSONValue | undefined, +): BridgeJSONValue | undefined { + if (!value || typeof value !== 'object' || Object.isFrozen(value)) { + return value; + } + if (Array.isArray(value)) value.forEach((item) => freezeJSONValue(item)); + else Object.values(value).forEach((item) => freezeJSONValue(item)); + Object.freeze(value); + return value; +} + +function hydrationError(message: string, cause?: unknown) { + return new BridgeSSRError(message, cause); +} + +function hydrationIdentityKey(moduleName: string, instanceId: string) { + return `${moduleName}\0${instanceId}`; +} + +function readSlotSnapshot(slot: HTMLElement): BridgeHydrationSnapshot { + const versionAttr = slot.getAttribute(MF_BRIDGE_VERSION_ATTR); + const moduleName = slot.getAttribute(MF_BRIDGE_MODULE_ATTR) || ''; + const instanceId = slot.getAttribute(MF_BRIDGE_INSTANCE_ATTR) || ''; + assertBridgeSSRIdentity({ moduleName, instanceId }); + if (versionAttr !== String(BRIDGE_SSR_PROTOCOL_VERSION)) { + throw hydrationError( + `Bridge SSR slot ${moduleName}:${instanceId} uses unsupported protocol version ${versionAttr}`, + ); + } + const protocolVersion = BRIDGE_SSR_PROTOCOL_VERSION; + + const mounts = directChildrenWithAttribute( + slot, + MF_BRIDGE_MOUNT_ATTR, + ); + const scripts = directChildrenWithAttribute( + slot, + MF_BRIDGE_STATE_ATTR, + ); + if (mounts.length !== 1 || scripts.length !== 1) { + throw hydrationError( + `Bridge SSR slot ${instanceId} must contain exactly one direct mount and state child`, + ); + } + + const [mount] = mounts; + const [script] = scripts; + if ( + slot.children.length !== 2 || + slot.children[0] !== mount || + slot.children[1] !== script || + script.tagName !== 'SCRIPT' + ) { + throw hydrationError( + `Bridge SSR slot ${instanceId} must contain only its direct mount and state children in order`, + ); + } + if ( + mount.getAttribute(MF_BRIDGE_MODULE_ATTR) !== moduleName || + mount.getAttribute(MF_BRIDGE_INSTANCE_ATTR) !== instanceId || + mount.getAttribute(MF_BRIDGE_VERSION_ATTR) !== String(protocolVersion) + ) { + throw hydrationError( + `Bridge SSR slot ${instanceId} mount metadata does not match its slot`, + ); + } + if (script.type !== 'application/json' || !script.textContent) { + throw hydrationError( + `Bridge SSR slot ${instanceId} has an invalid state envelope`, + ); + } + + let envelope: BridgeSSRStateEnvelope; + try { + envelope = JSON.parse(script.textContent) as BridgeSSRStateEnvelope; + } catch (error) { + throw hydrationError( + `Bridge SSR slot ${instanceId} state envelope is not valid JSON`, + error, + ); + } + const envelopeKeys = Object.keys(envelope); + if ( + !envelope || + typeof envelope !== 'object' || + Array.isArray(envelope) || + envelopeKeys.some( + (key) => + key !== 'protocolVersion' && + key !== 'moduleName' && + key !== 'instanceId' && + key !== 'state', + ) + ) { + throw hydrationError( + `Bridge SSR slot ${instanceId} has an incompatible state envelope`, + ); + } + if ( + envelope.protocolVersion !== protocolVersion || + envelope.moduleName !== moduleName || + envelope.instanceId !== instanceId + ) { + throw hydrationError( + `Bridge SSR slot ${instanceId} state metadata does not match its slot`, + ); + } + if (envelope.state !== undefined) assertBridgeJSONValue(envelope.state); + + return Object.freeze({ + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName, + instanceId, + html: mount.innerHTML, + state: freezeJSONValue(envelope.state), + }); +} + +export function createBridgeHydrationRegistry( + root?: ParentNode, +): BridgeHydrationRegistry { + const hydrationRoot = + root ?? (typeof document === 'undefined' ? undefined : document); + if (!hydrationRoot) { + throw hydrationError( + 'createBridgeHydrationRegistry requires a document root', + ); + } + const snapshots = new Map(); + const errors = new Map(); + + for (const slot of Array.from( + hydrationRoot.querySelectorAll( + `[${MF_BRIDGE_SLOT_ATTR}="true"]`, + ), + )) { + const moduleName = slot.getAttribute(MF_BRIDGE_MODULE_ATTR) || ''; + const instanceId = slot.getAttribute(MF_BRIDGE_INSTANCE_ATTR) || ''; + const key = hydrationIdentityKey(moduleName, instanceId); + if (snapshots.has(key) || errors.has(key)) { + snapshots.delete(key); + errors.set( + key, + hydrationError( + `Duplicate Bridge SSR identity ${moduleName}:${instanceId}`, + ), + ); + continue; + } + try { + const snapshot = readSlotSnapshot(slot); + snapshots.set( + hydrationIdentityKey(snapshot.moduleName, snapshot.instanceId), + snapshot, + ); + } catch (error) { + errors.set( + key, + error instanceof BridgeSSRError + ? error + : hydrationError( + `Unable to read Bridge SSR slot ${moduleName}:${instanceId}`, + error, + ), + ); + } + } + + const peek = (moduleName: string, instanceId: string) => { + const key = hydrationIdentityKey(moduleName, instanceId); + const error = errors.get(key); + if (error) throw error; + return snapshots.get(key); + }; + + return { + peek, + consume(moduleName, instanceId) { + const key = hydrationIdentityKey(moduleName, instanceId); + const snapshot = peek(moduleName, instanceId); + snapshots.delete(key); + errors.delete(key); + return snapshot; + }, + fail(moduleName, instanceId) { + const key = hydrationIdentityKey(moduleName, instanceId); + snapshots.delete(key); + errors.delete(key); + }, + }; +} diff --git a/packages/bridge/bridge-shared/src/type.ts b/packages/bridge/bridge-shared/src/type.ts index 7842bac3f94..4e1c86874ea 100644 --- a/packages/bridge/bridge-shared/src/type.ts +++ b/packages/bridge/bridge-shared/src/type.ts @@ -1,12 +1,108 @@ +import type { CSSProperties } from 'react'; + +export const BRIDGE_SSR_PROTOCOL_VERSION = 1 as const; + +export type BridgeJSONValue = + | null + | boolean + | number + | string + | BridgeJSONValue[] + | { [key: string]: BridgeJSONValue }; + +export type BridgeSSRPrepareResult

> = { + props?: P; + dehydratedState?: BridgeJSONValue; +}; + +export type BridgeSSRConfig

> = + | boolean + | { + prepare?: ( + context: BridgeServerRenderContext

, + ) => + | void + | BridgeSSRPrepareResult

+ | Promise>; + hydrate?: ( + state: BridgeJSONValue | undefined, + ) => Partial

| Record; + }; + +export type BridgeServerRenderContext

> = { + moduleName: string; + instanceId: string; + request: Request; + signal: AbortSignal; + props: P; +}; + +export type BridgeSSRResult = { + protocolVersion: typeof BRIDGE_SSR_PROTOCOL_VERSION; + moduleName: string; + instanceId: string; + /** Trusted remote HTML. Remotes are treated as trusted HTML producers. */ + html: string; + dehydratedState?: BridgeJSONValue; +}; + +/** Identity-only payload safe to serialize into a host hydration context. */ +export type BridgeSSRReference = Pick< + BridgeSSRResult, + 'protocolVersion' | 'moduleName' | 'instanceId' +>; + +export type BridgeSSRStateEnvelope = BridgeSSRReference & { + state?: BridgeJSONValue; +}; + +export type BridgeHydrationSnapshot = BridgeSSRReference & { + html: string; + state?: BridgeJSONValue; +}; + +export interface BridgeHydrationRegistry { + peek( + moduleName: string, + instanceId: string, + ): BridgeHydrationSnapshot | undefined; + consume( + moduleName: string, + instanceId: string, + ): BridgeHydrationSnapshot | undefined; + fail(moduleName: string, instanceId: string): void; +} + +export class BridgeSSRError extends Error { + override readonly cause?: unknown; + + constructor(message: string, cause?: unknown) { + super(message); + this.name = 'BridgeSSRError'; + this.cause = cause; + } +} + export interface ProviderParams { moduleName?: string; basename?: string; memoryRoute?: { entryPath: string }; hashRoute?: boolean; - style?: React.CSSProperties; + style?: CSSProperties; className?: string; } export interface RenderFnParams extends ProviderParams { dom: HTMLElement; + instanceId?: string; + ssrState?: BridgeJSONValue; + signal?: AbortSignal; +} + +export interface BridgeProviderAPI { + render: (info: RenderFnParams) => void | Promise; + destroy: (info: { dom: HTMLElement }) => void; + renderServer?: ( + context: BridgeServerRenderContext, + ) => Promise; } diff --git a/packages/bridge/bridge-shared/tsconfig.json b/packages/bridge/bridge-shared/tsconfig.json index d3f8fdd8f2a..1ff076b3d58 100644 --- a/packages/bridge/bridge-shared/tsconfig.json +++ b/packages/bridge/bridge-shared/tsconfig.json @@ -1,23 +1,19 @@ { "compilerOptions": { "useDefineForClassFields": true, - - /* Bundler mode */ "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "jsxImportSource": "vue", - - /* Linting */ "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "declaration": true, "emitDeclarationOnly": true, "outDir": "dist", + "rootDir": ".", "skipLibCheck": true, "strict": true, - "moduleResolution": "node", "target": "esnext", "module": "esnext", "lib": ["esnext", "dom"], @@ -25,10 +21,11 @@ "esModuleInterop": true, "allowSyntheticDefaultImports": true, "sourceMap": true, - "baseUrl": ".", "paths": { - "@/*": ["src/*"] - } + "@/*": ["./src/*"], + "*": ["./*"] + }, + "ignoreDeprecations": "6.0" }, "include": [ "src/**/*.ts", @@ -37,5 +34,9 @@ "src/remoteApp.tsx", "src/create.ts" ], - "references": [{ "path": "./tsconfig.node.json" }] + "references": [ + { + "path": "./tsconfig.node.json" + } + ] } diff --git a/packages/bridge/bridge-shared/vite.config.ts b/packages/bridge/bridge-shared/vite.config.ts index 9b0a6bf9fbc..95eee593db8 100644 --- a/packages/bridge/bridge-shared/vite.config.ts +++ b/packages/bridge/bridge-shared/vite.config.ts @@ -1,11 +1,10 @@ import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import path from 'path'; -import dts from 'vite-plugin-dts'; import vueJsx from '@vitejs/plugin-vue-jsx'; export default defineConfig({ - plugins: [vue(), dts(), vueJsx()], + plugins: [vue(), vueJsx()], build: { lib: { entry: path.resolve(__dirname, 'src/index.ts'), diff --git a/packages/bridge/vue3-bridge/CHANGELOG.md b/packages/bridge/vue3-bridge/CHANGELOG.md index 6215a367705..5941e1a388c 100644 --- a/packages/bridge/vue3-bridge/CHANGELOG.md +++ b/packages/bridge/vue3-bridge/CHANGELOG.md @@ -1,5 +1,24 @@ # @module-federation/bridge-vue3 +## 2.8.0 + +### Patch Changes + +- Updated dependencies [ea490ae] + - @module-federation/sdk@2.8.0 + - @module-federation/runtime@2.8.0 + - @module-federation/bridge-shared@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/runtime@2.7.0 + - @module-federation/bridge-shared@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/bridge/vue3-bridge/README.md b/packages/bridge/vue3-bridge/README.md index 0bfecb08f8a..47c75592545 100644 --- a/packages/bridge/vue3-bridge/README.md +++ b/packages/bridge/vue3-bridge/README.md @@ -7,3 +7,12 @@ This template should help get you started developing with Vue 3 and TypeScript i - [VS Code](https://code.visualstudio.com/) + [Vue - Official](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (previously Volar) and disable Vetur - Use [vue-tsc](https://github.com/vuejs/language-tools/tree/master/packages/tsc) for performing the same type checking from the command line, or for generating d.ts files for SFCs. + +## Bridge SSR V1 hydration + +Serialize only `toBridgeSSRReference(result)` in host JSON. On the client, create +`createBridgeHydrationRegistry(document)` and call +`provideBridgeHydrationRegistry(app, registry)` before `app.mount(...)`. The full +server result is rendered once into its document slot; the client reference +consumes that slot's validated snapshot once. Missing slots use CSR, while +malformed slots throw. Vue Router 4 is the supported V1 router. diff --git a/packages/bridge/vue3-bridge/__tests__/remoteApp.ssr.test.ts b/packages/bridge/vue3-bridge/__tests__/remoteApp.ssr.test.ts new file mode 100644 index 00000000000..7c7b5368351 --- /dev/null +++ b/packages/bridge/vue3-bridge/__tests__/remoteApp.ssr.test.ts @@ -0,0 +1,221 @@ +import { afterEach, beforeEach, describe, expect, it, rs } from '@rstest/core'; +import { createApp, defineComponent, h, KeepAlive, nextTick } from 'vue'; +import { createMemoryHistory, createRouter, RouterView } from 'vue-router'; +import { + BRIDGE_SSR_PROTOCOL_VERSION, + createBridgeHydrationRegistry, + MF_BRIDGE_SSR_ATTR, + toBridgeSSRReference, +} from '@module-federation/bridge-shared'; +import RemoteApp from '../src/remoteApp'; +import { provideBridgeHydrationRegistry } from '../src/hydration'; + +rs.mock('@module-federation/runtime', () => ({ + getInstance: () => ({ + bridgeHook: { + lifecycle: { + beforeBridgeRender: { emit: rs.fn(async () => ({})) }, + afterBridgeRender: { emit: rs.fn() }, + beforeBridgeDestroy: { emit: rs.fn() }, + afterBridgeDestroy: { emit: rs.fn() }, + }, + }, + }), +})); + +const flushBridgeRender = async () => { + await nextTick(); + await Promise.resolve(); + await nextTick(); +}; + +const installSlot = () => { + document.body.innerHTML = + '

' + + '

server remote

' + + '' + + '
'; +}; + +describe('RemoteApp SSR lifecycle', () => { + let root: HTMLDivElement; + + beforeEach(() => { + document.body.innerHTML = ''; + root = document.createElement('div'); + }); + + afterEach(() => { + document.body.innerHTML = ''; + }); + + const mountApp = (app: ReturnType) => { + document.body.appendChild(root); + app.mount(root); + }; + + it('claims the registry snapshot before provider render', async () => { + const result = { + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: 'ecApp', + instanceId: 'ec:1', + html: '

server remote

', + dehydratedState: { ready: true }, + }; + installSlot(); + const registry = createBridgeHydrationRegistry(document); + expect(registry.peek('ecApp', 'ec:1')).toBeDefined(); + + const providerReturn = { + render: rs.fn(), + destroy: rs.fn(), + }; + const App = defineComponent({ + setup: () => () => + h(RemoteApp, { + moduleName: 'ecApp', + instanceId: 'ec:1', + ssr: toBridgeSSRReference(result), + providerInfo: () => providerReturn, + }), + }); + const app = createApp(App); + provideBridgeHydrationRegistry(app, registry); + // RemoteApp calls useRoute(); give it a router even for the non-route case. + const router = createRouter({ + history: createMemoryHistory(), + routes: [{ path: '/', component: { template: '
' } }], + }); + app.use(router); + await router.isReady(); + mountApp(app); + await flushBridgeRender(); + + expect(providerReturn.render).toHaveBeenCalledTimes(1); + expect(providerReturn.render.mock.calls[0][0].ssrState).toEqual({ + ready: true, + }); + expect(registry.peek('ecApp', 'ec:1')).toBeUndefined(); + app.unmount(); + }); + + it('claims SSR once under KeepAlive and reactivates through CSR', async () => { + const result = { + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: 'ecApp', + instanceId: 'ec:1', + html: '

server remote

', + dehydratedState: { ready: true }, + }; + installSlot(); + const registry = createBridgeHydrationRegistry(document); + const providerReturn = { + render: rs.fn(), + destroy: rs.fn(), + }; + const RemoteRoute = defineComponent({ + setup() { + return () => + h(RemoteApp, { + moduleName: 'ecApp', + basename: '/ec', + instanceId: 'ec:1', + ssr: toBridgeSSRReference(result), + providerInfo: () => providerReturn, + }); + }, + }); + + const router = createRouter({ + history: createMemoryHistory(), + routes: [ + { path: '/', component: { template: '
home
' } }, + { path: '/ec/:pathMatch(.*)*', component: RemoteRoute }, + ], + }); + + const App = defineComponent({ + setup() { + return () => + h(RouterView, null, { + default: ({ Component }) => + h(KeepAlive, null, () => (Component ? h(Component) : null)), + }); + }, + }); + + const app = createApp(App); + provideBridgeHydrationRegistry(app, registry); + app.use(router); + + await router.push('/ec'); + await router.isReady(); + mountApp(app); + await flushBridgeRender(); + + expect(providerReturn.render).toHaveBeenCalledTimes(1); + expect(providerReturn.render.mock.calls[0][0].ssrState).toEqual({ + ready: true, + }); + expect(registry.peek('ecApp', 'ec:1')).toBeUndefined(); + + await router.push('/'); + await flushBridgeRender(); + expect(providerReturn.destroy).toHaveBeenCalledTimes(1); + + await router.push('/ec'); + await flushBridgeRender(); + expect(providerReturn.render).toHaveBeenCalledTimes(2); + expect(providerReturn.render.mock.calls[1][0].ssrState).toBeUndefined(); + const remountDom = providerReturn.render.mock.calls[1][0] + .dom as HTMLElement; + expect(remountDom.getAttribute(MF_BRIDGE_SSR_ATTR)).toBeNull(); + + app.unmount(); + }); + + it('releases an unclaimed SSR snapshot when unmounted before render settles', async () => { + const result = { + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: 'ecApp', + instanceId: 'ec:1', + html: '

server remote

', + dehydratedState: { ready: true }, + }; + installSlot(); + const registry = createBridgeHydrationRegistry(document); + expect(registry.peek('ecApp', 'ec:1')).toBeDefined(); + + const providerReturn = { + render: rs.fn( + () => + new Promise(() => { + /* never settles */ + }), + ), + destroy: rs.fn(), + }; + const App = defineComponent({ + setup: () => () => + h(RemoteApp, { + moduleName: 'ecApp', + instanceId: 'ec:1', + ssr: toBridgeSSRReference(result), + providerInfo: () => providerReturn, + }), + }); + const app = createApp(App); + provideBridgeHydrationRegistry(app, registry); + const router = createRouter({ + history: createMemoryHistory(), + routes: [{ path: '/', component: { template: '
' } }], + }); + app.use(router); + await router.isReady(); + mountApp(app); + // Unmount before the render queue microtask claims the snapshot. + app.unmount(); + await flushBridgeRender(); + expect(registry.peek('ecApp', 'ec:1')).toBeUndefined(); + }); +}); diff --git a/packages/bridge/vue3-bridge/__tests__/remoteApp.test.ts b/packages/bridge/vue3-bridge/__tests__/remoteApp.test.ts index 1e5aca2dc13..e65634f2e8d 100644 --- a/packages/bridge/vue3-bridge/__tests__/remoteApp.test.ts +++ b/packages/bridge/vue3-bridge/__tests__/remoteApp.test.ts @@ -1,24 +1,32 @@ -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { createApp, defineComponent, h, KeepAlive, nextTick } from 'vue'; +import { afterEach, beforeEach, describe, expect, it, rs } from '@rstest/core'; +import { + createApp, + defineComponent, + h, + KeepAlive, + nextTick, + ref as vueRef, +} from 'vue'; import { createMemoryHistory, createRouter, RouterView } from 'vue-router'; import RemoteApp from '../src/remoteApp'; -const { dispatchPopstateEnv } = vi.hoisted(() => ({ - dispatchPopstateEnv: vi.fn(), +const { dispatchPopstateEnv } = rs.hoisted(() => ({ + dispatchPopstateEnv: rs.fn(), })); -vi.mock('@module-federation/bridge-shared', () => ({ +rs.mock('@module-federation/bridge-shared', () => ({ dispatchPopstateEnv, + getMatchingBridgeSSRPayload: () => undefined, })); -vi.mock('@module-federation/runtime', () => ({ +rs.mock('@module-federation/runtime', () => ({ getInstance: () => ({ bridgeHook: { lifecycle: { - beforeBridgeRender: { emit: vi.fn(async () => ({})) }, - afterBridgeRender: { emit: vi.fn() }, - beforeBridgeDestroy: { emit: vi.fn() }, - afterBridgeDestroy: { emit: vi.fn() }, + beforeBridgeRender: { emit: rs.fn(async () => ({})) }, + afterBridgeRender: { emit: rs.fn() }, + beforeBridgeDestroy: { emit: rs.fn() }, + afterBridgeDestroy: { emit: rs.fn() }, }, }, }), @@ -45,8 +53,8 @@ describe('RemoteApp', () => { it('destroys and re-renders the remote app when used under KeepAlive', async () => { const providerReturn = { - render: vi.fn(), - destroy: vi.fn(), + render: rs.fn(), + destroy: rs.fn(), }; const RemoteRoute = defineComponent({ setup() { @@ -96,4 +104,72 @@ describe('RemoteApp', () => { app.unmount(); }); + + it('forwards updated application props to the mounted provider', async () => { + const providerReturn = { + render: rs.fn(), + destroy: rs.fn(), + }; + const providerInfo = () => providerReturn; + const label = vueRef('first'); + const App = defineComponent({ + setup: () => () => + h(RemoteApp, { + moduleName: 'ecApp', + providerInfo, + label: label.value, + }), + }); + const app = createApp(App); + app.mount(root); + await flushBridgeRender(); + expect(providerReturn.render).toHaveBeenCalledTimes(1); + expect(providerReturn.render.mock.calls[0][0].label).toBe('first'); + + label.value = 'second'; + await flushBridgeRender(); + expect(providerReturn.render).toHaveBeenCalledTimes(2); + expect(providerReturn.render.mock.calls[1][0].label).toBe('second'); + app.unmount(); + }); + + it('replaces a provider that changes during an asynchronous mount', async () => { + let finishFirstRender!: () => void; + const firstProvider = { + render: rs.fn( + () => + new Promise((resolve) => { + finishFirstRender = resolve; + }), + ), + destroy: rs.fn(), + }; + const secondProvider = { + render: rs.fn(), + destroy: rs.fn(), + }; + const providerInfo = vueRef(() => firstProvider); + const App = defineComponent({ + setup: () => () => + h(RemoteApp, { + moduleName: 'ecApp', + providerInfo: providerInfo.value, + }), + }); + const app = createApp(App); + app.mount(root); + await nextTick(); + await Promise.resolve(); + expect(firstProvider.render).toHaveBeenCalledOnce(); + + providerInfo.value = () => secondProvider; + await nextTick(); + finishFirstRender(); + await flushBridgeRender(); + await flushBridgeRender(); + + expect(firstProvider.destroy).toHaveBeenCalledOnce(); + expect(secondProvider.render).toHaveBeenCalledOnce(); + app.unmount(); + }); }); diff --git a/packages/bridge/vue3-bridge/__tests__/routeUtils.test.ts b/packages/bridge/vue3-bridge/__tests__/routeUtils.test.ts index 720844121fd..764bf0b9ae0 100644 --- a/packages/bridge/vue3-bridge/__tests__/routeUtils.test.ts +++ b/packages/bridge/vue3-bridge/__tests__/routeUtils.test.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { describe, it, expect, beforeEach, rs } from '@rstest/core'; import { createRouter, createWebHistory } from 'vue-router'; import { processRoutes, type RouteProcessingOptions } from '../src/routeUtils'; @@ -961,7 +961,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; const originalPush = targetRouter.push; @@ -990,7 +990,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; result.patchRouter!(targetRouter); @@ -1020,7 +1020,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; result.patchRouter!(targetRouter); @@ -1047,7 +1047,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const replaceSpy = vi.fn(); + const replaceSpy = rs.fn(); targetRouter.replace = replaceSpy; result.patchRouter!(targetRouter); @@ -1074,7 +1074,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const resolveSpy = vi.fn().mockReturnValue({}); + const resolveSpy = rs.fn().mockReturnValue({}); targetRouter.resolve = resolveSpy; result.patchRouter!(targetRouter); @@ -1101,7 +1101,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; result.patchRouter!(targetRouter); @@ -1128,7 +1128,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; result.patchRouter!(targetRouter); @@ -1155,7 +1155,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; result.patchRouter!(targetRouter); @@ -1182,7 +1182,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; result.patchRouter!(targetRouter); @@ -1210,7 +1210,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; result.patchRouter!(targetRouter); @@ -1237,7 +1237,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; result.patchRouter!(targetRouter); @@ -1264,7 +1264,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const replaceSpy = vi.fn(); + const replaceSpy = rs.fn(); targetRouter.replace = replaceSpy; result.patchRouter!(targetRouter); @@ -1291,7 +1291,7 @@ describe('routeUtils', () => { routes: result.routes, }); - const pushSpy = vi.fn(); + const pushSpy = rs.fn(); targetRouter.push = pushSpy; result.patchRouter!(targetRouter); diff --git a/packages/bridge/vue3-bridge/package.json b/packages/bridge/vue3-bridge/package.json index 322a3fe356a..ff944f92aaf 100644 --- a/packages/bridge/vue3-bridge/package.json +++ b/packages/bridge/vue3-bridge/package.json @@ -7,7 +7,7 @@ "url": "git+https://github.com/module-federation/core.git", "directory": "packages/bridge/vue3-bridge" }, - "version": "2.6.0", + "version": "2.8.0", "publishConfig": { "access": "public" }, @@ -15,6 +15,22 @@ "main": "./dist/index.cjs", "module": "./dist/index.js", "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "browser": { + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "node": { + "import": "./dist/index.server.js", + "require": "./dist/index.server.cjs" + }, + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "./*": "./*" + }, "files": [ "dist/", "package.json", @@ -22,28 +38,36 @@ ], "scripts": { "dev": "vite", - "build": "vite build", + "build": "vite build && tsc -p tsconfig.json", "preview": "vite preview", - "test": "vitest" + "test": "rstest" }, "peerDependencies": { "vue": "=3", - "vue-router": "=4" + "vue-router": "=4", + "@vue/server-renderer": "^3.0.0" + }, + "peerDependenciesMeta": { + "@vue/server-renderer": { + "optional": true + } }, "dependencies": { "@module-federation/bridge-shared": "workspace:*", - "@module-federation/sdk": "workspace:*", - "@module-federation/runtime": "workspace:*" + "@module-federation/runtime": "workspace:*", + "@module-federation/sdk": "workspace:*" }, "devDependencies": { + "@rsbuild/plugin-babel": "2.0.1", + "@rsbuild/plugin-vue-jsx": "2.0.1", "@types/react": "^18.3.11", "@vitejs/plugin-vue": "^5.0.4", "@vitejs/plugin-vue-jsx": "^4.0.0", - "typescript": "^5.2.2", + "typescript": "7.0.2", "vite": "^5.4.21", - "vite-plugin-dts": "^4.5.4", "vue": "^3.5.30", "vue-router": "4.4.5", + "@vue/server-renderer": "^3.5.30", "vue-tsc": "^2.2.12" } } diff --git a/packages/bridge/vue3-bridge/rstest.config.ts b/packages/bridge/vue3-bridge/rstest.config.ts new file mode 100644 index 00000000000..5d1bb8841bb --- /dev/null +++ b/packages/bridge/vue3-bridge/rstest.config.ts @@ -0,0 +1,25 @@ +import { defineConfig } from '@rstest/core'; +import { pluginBabel } from '@rsbuild/plugin-babel'; +import { pluginVueJsx } from '@rsbuild/plugin-vue-jsx'; +import { resolve } from 'path'; + +export default defineConfig({ + source: { + define: { + __APP_VERSION__: '"unknown"', + }, + }, + plugins: [ + pluginBabel({ + include: /\.(?:jsx|tsx)$/, + }), + pluginVueJsx(), + ], + testEnvironment: 'jsdom', + globals: true, + resolve: { + alias: { + '@': resolve(__dirname, './src'), + }, + }, +}); diff --git a/packages/bridge/vue3-bridge/src/create.ts b/packages/bridge/vue3-bridge/src/create.ts index a888cf24216..2c3033220dd 100644 --- a/packages/bridge/vue3-bridge/src/create.ts +++ b/packages/bridge/vue3-bridge/src/create.ts @@ -2,9 +2,18 @@ import { type AsyncComponentOptions, defineAsyncComponent, h } from 'vue'; import { useRoute } from 'vue-router'; import RemoteApp from './remoteApp.jsx'; import { LoggerInstance } from './utils.js'; +import type { + BridgeSSRReference, + BridgeSSRResult, +} from '@module-federation/bridge-shared'; declare const __APP_VERSION__: string; +export type RemoteAppSSRProps = { + ssr?: BridgeSSRResult | BridgeSSRReference; + instanceId?: string; +}; + export function createRemoteAppComponent(info: { loader: () => Promise; export?: string; @@ -14,6 +23,7 @@ export function createRemoteAppComponent(info: { hashRoute?: boolean; }) { return defineAsyncComponent({ + // @ts-ignore __APP_VERSION__, ...info.asyncComponentOptions, //@ts-ignore diff --git a/packages/bridge/vue3-bridge/src/hydration.ts b/packages/bridge/vue3-bridge/src/hydration.ts new file mode 100644 index 00000000000..1375ac12bff --- /dev/null +++ b/packages/bridge/vue3-bridge/src/hydration.ts @@ -0,0 +1,17 @@ +import { inject, type App, type InjectionKey } from 'vue'; +import type { BridgeHydrationRegistry } from '@module-federation/bridge-shared'; + +export const BridgeHydrationRegistryKey: InjectionKey = + Symbol.for('mf.bridge.hydration-registry'); + +export function provideBridgeHydrationRegistry( + app: App, + registry: BridgeHydrationRegistry, +) { + app.provide(BridgeHydrationRegistryKey, registry); + return app; +} + +export function useBridgeHydrationRegistry() { + return inject(BridgeHydrationRegistryKey, undefined); +} diff --git a/packages/bridge/vue3-bridge/src/index.server.ts b/packages/bridge/vue3-bridge/src/index.server.ts new file mode 100644 index 00000000000..9743a3fb20a --- /dev/null +++ b/packages/bridge/vue3-bridge/src/index.server.ts @@ -0,0 +1,18 @@ +import { + createBridgeComponentWithServerRenderer, + type ProviderFnParams, +} from './provider'; +import { renderBridgeVueToString } from './server-renderer'; + +export function createBridgeComponent(bridgeInfo: ProviderFnParams) { + return createBridgeComponentWithServerRenderer( + bridgeInfo, + renderBridgeVueToString, + ); +} + +export type { ProviderFnParams } from './provider'; +export { createRemoteComponent, createRemoteAppComponent } from './create'; +export type { RemoteAppSSRProps } from './create'; +export { provideBridgeHydrationRegistry } from './hydration'; +export type { RenderFnParams } from '@module-federation/bridge-shared'; diff --git a/packages/bridge/vue3-bridge/src/index.ts b/packages/bridge/vue3-bridge/src/index.ts index fbf7a554075..1de0572548e 100644 --- a/packages/bridge/vue3-bridge/src/index.ts +++ b/packages/bridge/vue3-bridge/src/index.ts @@ -1,4 +1,6 @@ export { createBridgeComponent } from './provider'; export type { ProviderFnParams } from './provider'; export { createRemoteComponent, createRemoteAppComponent } from './create'; +export type { RemoteAppSSRProps } from './create'; +export { provideBridgeHydrationRegistry } from './hydration'; export type { RenderFnParams } from '@module-federation/bridge-shared'; diff --git a/packages/bridge/vue3-bridge/src/provider.spec.ts b/packages/bridge/vue3-bridge/src/provider.spec.ts new file mode 100644 index 00000000000..0979d3afc28 --- /dev/null +++ b/packages/bridge/vue3-bridge/src/provider.spec.ts @@ -0,0 +1,186 @@ +import { describe, expect, it, rs } from '@rstest/core'; +import { defineComponent, h } from 'vue'; +import { createMemoryHistory, createRouter } from 'vue-router'; +import { getBridgeSSRContainerAttrs } from '@module-federation/bridge-shared'; +import { createBridgeComponentWithServerRenderer } from './provider'; + +describe('Vue Bridge server provider', () => { + it('creates a request-local app and returns the thin V1 result', async () => { + const serverRenderer = rs.fn(async () => '

vue remote

'); + const factory = createBridgeComponentWithServerRenderer( + { + rootComponent: defineComponent(() => () => h('p', 'vue remote')), + appOptions: () => ({ + router: createRouter({ + history: createMemoryHistory(), + routes: [ + { + path: '/detail', + component: defineComponent(() => () => h('p')), + }, + ], + }), + }), + ssr: true, + }, + serverRenderer, + ); + const provider = factory(); + const request = new Request('http://bridge.test/detail'); + await expect( + provider.renderServer!({ + moduleName: 'vue/remote', + instanceId: 'vue-1', + request, + signal: request.signal, + props: {}, + }), + ).resolves.toEqual({ + protocolVersion: 1, + moduleName: 'vue/remote', + instanceId: 'vue-1', + html: '

vue remote

', + dehydratedState: undefined, + }); + expect(serverRenderer).toHaveBeenCalledOnce(); + }); + + it('updates application props without remounting the app', async () => { + const provider = createBridgeComponentWithServerRenderer({ + rootComponent: defineComponent({ + props: { label: String }, + setup: (props) => () => h('p', props.label), + }), + appOptions: () => undefined, + })(); + const dom = document.createElement('div'); + document.body.appendChild(dom); + + await provider.render({ + dom, + moduleName: 'vue/remote', + label: 'first', + } as any); + const firstApp = (dom as HTMLElement & { __vue_app__?: any }).__vue_app__; + const unmount = rs.spyOn(firstApp, 'unmount'); + + await provider.render({ + dom, + moduleName: 'vue/remote', + label: 'second', + } as any); + await Promise.resolve(); + expect(unmount).not.toHaveBeenCalled(); + expect(dom.textContent).toBe('second'); + expect((dom as HTMLElement & { __vue_app__?: any }).__vue_app__).toBe( + firstApp, + ); + + await provider.render({ dom, moduleName: 'vue/remote' } as any); + await Promise.resolve(); + expect(dom.textContent).toBe(''); + + provider.destroy({ dom }); + expect(unmount).toHaveBeenCalledOnce(); + }); + + it('remounts when routing configuration changes', async () => { + const provider = createBridgeComponentWithServerRenderer({ + rootComponent: defineComponent(() => () => h('p', 'remote')), + appOptions: () => undefined, + })(); + const dom = document.createElement('div'); + document.body.appendChild(dom); + await provider.render({ + dom, + moduleName: 'vue/remote', + basename: '/first', + }); + const firstApp = (dom as HTMLElement & { __vue_app__?: any }).__vue_app__; + const unmount = rs.spyOn(firstApp, 'unmount'); + + await provider.render({ + dom, + moduleName: 'vue/remote', + basename: '/second', + }); + expect(unmount).toHaveBeenCalledOnce(); + expect((dom as HTMLElement & { __vue_app__?: any }).__vue_app__).not.toBe( + firstApp, + ); + }); + + it('applies dehydrated state only during the initial hydration mount', async () => { + const hydrate = rs.fn(() => ({ label: 'hydrated' })); + const provider = createBridgeComponentWithServerRenderer({ + rootComponent: defineComponent({ + props: { label: String }, + setup: (props) => () => h('p', props.label), + }), + appOptions: () => undefined, + ssr: { hydrate }, + })(); + const dom = document.createElement('div'); + for (const [name, value] of Object.entries( + getBridgeSSRContainerAttrs({ + moduleName: 'vue/remote', + instanceId: 'vue-1', + }), + )) { + dom.setAttribute(name, value); + } + dom.innerHTML = '

hydrated

'; + document.body.appendChild(dom); + + await provider.render({ + dom, + moduleName: 'vue/remote', + instanceId: 'vue-1', + ssrState: { label: 'server' }, + }); + await provider.render({ + dom, + moduleName: 'vue/remote', + instanceId: 'vue-1', + label: 'updated', + } as any); + + expect(hydrate).toHaveBeenCalledOnce(); + expect(dom.textContent).toBe('updated'); + provider.destroy({ dom }); + }); + + it('ignores apps created before an aborted client mount', async () => { + const controller = new AbortController(); + const provider = createBridgeComponentWithServerRenderer({ + rootComponent: defineComponent(() => () => h('p', 'remote')), + appOptions: () => { + queueMicrotask(() => controller.abort(new Error('cancelled'))); + return { + router: createRouter({ + history: createMemoryHistory(), + routes: [ + { + path: '/', + component: defineComponent(() => () => h('p')), + }, + ], + }), + }; + }, + })(); + const dom = document.createElement('div'); + document.body.appendChild(dom); + await expect( + provider.render({ + dom, + moduleName: 'vue/remote', + memoryRoute: { entryPath: '/' }, + signal: controller.signal, + }), + ).resolves.toBeUndefined(); + expect( + (dom as HTMLElement & { __vue_app__?: any }).__vue_app__, + ).toBeUndefined(); + }); +}); diff --git a/packages/bridge/vue3-bridge/src/provider.ts b/packages/bridge/vue3-bridge/src/provider.ts index 6b3e66eee41..2e68ac3e6f7 100644 --- a/packages/bridge/vue3-bridge/src/provider.ts +++ b/packages/bridge/vue3-bridge/src/provider.ts @@ -1,6 +1,14 @@ import * as Vue from 'vue'; import * as VueRouter from 'vue-router'; -import { RenderFnParams } from '@module-federation/bridge-shared'; +import { + BRIDGE_SSR_PROTOCOL_VERSION, + hasBridgeSSRMarkup, + type BridgeSSRConfig, + type BridgeSSRPrepareResult, + type BridgeSSRResult, + type BridgeServerRenderContext, + type RenderFnParams, +} from '@module-federation/bridge-shared'; import { LoggerInstance } from './utils'; import { getInstance } from '@module-federation/runtime'; import { processRoutes } from './routeUtils'; @@ -11,6 +19,9 @@ type AddOptionsFnParams = { app: Vue.App; basename: RenderFnParams['basename']; memoryRoute: RenderFnParams['memoryRoute']; + request?: Request; + signal?: AbortSignal; + ssr: boolean; [key: string]: any; }; @@ -18,95 +29,239 @@ export type ProviderFnParams = { rootComponent: Vue.Component; appOptions: (params: AddOptionsFnParams) => { router?: VueRouter.Router; - /** Called with the bridge's internal router after creation but before navigation. - * Use this to register global guards (beforeEach, afterEach, etc.) that would - * otherwise be lost when the bridge recreates the router. */ afterRouterCreate?: (router: VueRouter.Router) => void; } | void; + ssr?: BridgeSSRConfig>; }; -export function createBridgeComponent(bridgeInfo: ProviderFnParams) { - const rootMap = new Map(); - const instance = getInstance(); +export type BridgeVueServerRenderer = ( + app: Vue.App, + context: Record, +) => string | Promise; + +type BridgeAppInfo = Omit & { + dom?: HTMLElement; + request?: Request; + url?: string; +}; + +async function setupBridgeApp( + bridgeInfo: ProviderFnParams, + info: BridgeAppInfo, + props: Record, + mode: 'ssr' | 'hydrate' | 'csr', +) { + if (info.signal?.aborted) throw info.signal.reason; + const ReactiveBridgeRoot = Vue.defineComponent({ + name: 'BridgeReactiveRoot', + setup: () => () => Vue.h(bridgeInfo.rootComponent, props), + }); + const app = (mode === 'csr' ? Vue.createApp : Vue.createSSRApp)( + ReactiveBridgeRoot, + ); + const options = bridgeInfo.appOptions({ + ...props, + app, + basename: info.basename, + memoryRoute: info.memoryRoute, + hashRoute: info.hashRoute, + request: info.request, + signal: info.signal, + ssr: mode === 'ssr', + }); + let router: VueRouter.Router | undefined; + if (options?.router) { + const effectiveMemoryRoute = + mode === 'ssr' ? { entryPath: info.url ?? '/' } : info.memoryRoute; + const processed = processRoutes({ + router: options.router, + basename: info.basename, + memoryRoute: effectiveMemoryRoute, + hashRoute: info.hashRoute, + }); + router = VueRouter.createRouter({ + ...options.router.options, + history: processed.history, + routes: processed.routes, + }); + processed.patchRouter?.(router); + options.afterRouterCreate?.(router); + if (effectiveMemoryRoute) { + await router.push(effectiveMemoryRoute.entryPath); + } + app.use(router); + if (mode !== 'csr') await router.isReady(); + } + if (info.signal?.aborted) throw info.signal.reason; + return { app, router }; +} + +function serverLocation(request: Request, basename?: string) { + const url = new URL(request.url); + let pathname = url.pathname || '/'; + const base = (basename || '/').replace(/\/$/, '') || '/'; + if (base !== '/' && (pathname === base || pathname.startsWith(`${base}/`))) { + pathname = pathname.slice(base.length) || '/'; + } + return `${pathname}${url.search}`; +} + +export function createBridgeComponentWithServerRenderer( + bridgeInfo: ProviderFnParams, + serverRenderer?: BridgeVueServerRenderer, +) { + const roots = new Map< + HTMLElement, + { + app: Vue.App; + props: Record; + routeKey: string; + } + >(); + const runtime = getInstance(); + return () => { - return { + const config = + typeof bridgeInfo.ssr === 'object' ? bridgeInfo.ssr : undefined; + const provider: { + __APP_VERSION__: string; + render: (info: RenderFnParams) => Promise; + destroy: (info: { dom: HTMLElement }) => void; + renderServer?: ( + context: BridgeServerRenderContext>, + ) => Promise; + } = { __APP_VERSION__, - async render(info: RenderFnParams) { - LoggerInstance.debug(`createBridgeComponent render Info`, info); + async render(info) { + if (info.signal?.aborted) return; const { moduleName, dom, basename, memoryRoute, hashRoute, - ...propsInfo + instanceId, + ssrState, + signal, + ...applicationProps } = info; - const app = Vue.createApp(bridgeInfo.rootComponent, propsInfo); - rootMap.set(dom, app); - const beforeBridgeRenderRes = - await instance?.bridgeHook?.lifecycle?.beforeBridgeRender?.emit(info); - + await runtime?.bridgeHook?.lifecycle?.beforeBridgeRender?.emit(info); const extraProps = beforeBridgeRenderRes && typeof beforeBridgeRenderRes === 'object' && - beforeBridgeRenderRes?.extraProps - ? beforeBridgeRenderRes?.extraProps + beforeBridgeRenderRes.extraProps + ? beforeBridgeRenderRes.extraProps : {}; - - const bridgeOptions = bridgeInfo.appOptions({ - app, - basename, - memoryRoute, - hashRoute, - ...propsInfo, - ...extraProps, - }); - if (bridgeOptions?.router) { - const { history, routes, patchRouter } = processRoutes({ - router: bridgeOptions.router, - basename: info.basename, - memoryRoute: info.memoryRoute, - hashRoute: info.hashRoute, - }); - - const router = VueRouter.createRouter({ - ...bridgeOptions.router.options, - history, - routes, - }); - - if (patchRouter) { - patchRouter(router); - } - - if (bridgeOptions.afterRouterCreate) { - bridgeOptions.afterRouterCreate(router); - } - - LoggerInstance.debug(`createBridgeComponent render router info>>>`, { + const routeKey = JSON.stringify([ + basename ?? null, + memoryRoute?.entryPath ?? null, + hashRoute ?? false, + ]); + const mounted = roots.get(dom); + const shouldHydrate = + !mounted && + hasBridgeSSRMarkup(dom, { moduleName, - router, + instanceId, }); - // memory route Initializes the route - if (memoryRoute) { - await router.push(memoryRoute.entryPath); + const hydrated = + shouldHydrate && config?.hydrate ? config.hydrate(ssrState) : {}; + const nextProps = { ...hydrated, ...applicationProps, ...extraProps }; + if (mounted?.routeKey === routeKey) { + for (const key of Object.keys(mounted.props)) { + if (!(key in nextProps)) delete mounted.props[key]; } - - app.use(router); + Object.assign(mounted.props, nextProps); + runtime?.bridgeHook?.lifecycle?.afterBridgeRender?.emit(info); + return; } - - app.mount(dom); - instance?.bridgeHook?.lifecycle?.afterBridgeRender?.emit(info); + if (mounted) { + mounted.app.unmount(); + roots.delete(dom); + } + const reactiveProps = Vue.shallowReactive(nextProps); + let app: Vue.App | undefined; + try { + ({ app } = await setupBridgeApp( + bridgeInfo, + { basename, memoryRoute, hashRoute, instanceId, signal }, + reactiveProps, + shouldHydrate ? 'hydrate' : 'csr', + )); + } catch (error) { + if (signal?.aborted) return; + throw error; + } + if (signal?.aborted) { + // Never mounted: drop the request-local app without unmount warnings. + return; + } + app.mount(dom, shouldHydrate); + if (signal?.aborted || !dom.isConnected) { + app.unmount(); + return; + } + roots.set(dom, { app, props: reactiveProps, routeKey }); + runtime?.bridgeHook?.lifecycle?.afterBridgeRender?.emit(info); + LoggerInstance.debug('createBridgeComponent rendered', { moduleName }); }, - destroy(info: { dom: HTMLElement }) { - LoggerInstance.debug(`createBridgeComponent destroy Info`, info); - const root = rootMap.get(info?.dom); - - instance?.bridgeHook?.lifecycle?.beforeBridgeDestroy?.emit(info); - root?.unmount(); - instance?.bridgeHook?.lifecycle?.afterBridgeDestroy?.emit(info); + destroy({ dom }) { + const info = { dom }; + LoggerInstance.debug('createBridgeComponent destroy Info', info); + runtime?.bridgeHook?.lifecycle?.beforeBridgeDestroy?.emit(info); + roots.get(dom)?.app.unmount(); + roots.delete(dom); + runtime?.bridgeHook?.lifecycle?.afterBridgeDestroy?.emit(info); }, }; + + if (serverRenderer && bridgeInfo.ssr) { + provider.renderServer = async (context) => { + if (context.signal.aborted) throw context.signal.reason; + const preparedValue = await config?.prepare?.(context); + if (context.signal.aborted) throw context.signal.reason; + const prepared = (preparedValue || {}) as BridgeSSRPrepareResult< + Record + >; + const renderInfo = prepared.props ?? context.props; + const { basename, memoryRoute, hashRoute, ...applicationProps } = + renderInfo; + delete applicationProps.moduleName; + const { app } = await setupBridgeApp( + bridgeInfo, + { + moduleName: context.moduleName, + basename: basename as string | undefined, + memoryRoute: memoryRoute as RenderFnParams['memoryRoute'], + hashRoute: Boolean(hashRoute), + request: context.request, + signal: context.signal, + url: serverLocation( + context.request, + basename as string | undefined, + ), + }, + applicationProps, + 'ssr', + ); + if (context.signal.aborted) throw context.signal.reason; + const ssrContext: Record = {}; + const html = await serverRenderer(app, ssrContext); + if (context.signal.aborted) throw context.signal.reason; + return { + protocolVersion: BRIDGE_SSR_PROTOCOL_VERSION, + moduleName: context.moduleName, + instanceId: context.instanceId, + html, + dehydratedState: prepared.dehydratedState, + }; + }; + } + return provider; }; } + +export function createBridgeComponent(bridgeInfo: ProviderFnParams) { + return createBridgeComponentWithServerRenderer(bridgeInfo); +} diff --git a/packages/bridge/vue3-bridge/src/remoteApp.tsx b/packages/bridge/vue3-bridge/src/remoteApp.tsx index 3a04bb951f2..63660c01c24 100644 --- a/packages/bridge/vue3-bridge/src/remoteApp.tsx +++ b/packages/bridge/vue3-bridge/src/remoteApp.tsx @@ -4,15 +4,40 @@ import { onBeforeUnmount, onActivated, onDeactivated, + onUpdated, watch, defineComponent, useAttrs, nextTick, + type PropType, } from 'vue'; -import { dispatchPopstateEnv } from '@module-federation/bridge-shared'; +import { + BRIDGE_SSR_PROTOCOL_VERSION, + dispatchPopstateEnv, + getBridgeSSRContainerAttrs, + getBridgeSSRSlotAttrs, + getMatchingBridgeSSRPayload, + MF_BRIDGE_INSTANCE_ATTR, + MF_BRIDGE_MODULE_ATTR, + MF_BRIDGE_MOUNT_ATTR, + MF_BRIDGE_SSR_ATTR, + MF_BRIDGE_VERSION_ATTR, + serializeBridgeSSRStateEnvelope, + type BridgeSSRReference, + type BridgeSSRResult, +} from '@module-federation/bridge-shared'; import { useRoute } from 'vue-router'; import { LoggerInstance } from './utils'; import { getInstance } from '@module-federation/runtime'; +import { useBridgeHydrationRegistry } from './hydration'; + +function clearBridgeSSRMountAttrs(dom: HTMLElement) { + dom.removeAttribute(MF_BRIDGE_SSR_ATTR); + dom.removeAttribute(MF_BRIDGE_MOUNT_ATTR); + dom.removeAttribute(MF_BRIDGE_VERSION_ATTR); + dom.removeAttribute(MF_BRIDGE_MODULE_ATTR); + dom.removeAttribute(MF_BRIDGE_INSTANCE_ATTR); +} export default defineComponent({ name: 'RemoteApp', @@ -23,6 +48,8 @@ export default defineComponent({ hashRoute: Boolean, providerInfo: Function, rootAttrs: Object, + ssr: Object as PropType, + instanceId: String, }, inheritAttrs: false, setup(props) { @@ -32,52 +59,163 @@ export default defineComponent({ const isRendered = ref(false); const isActive = ref(false); const wasDeactivated = ref(false); + const renderError = ref(); + const controller = new AbortController(); + let renderQueue = Promise.resolve(); + let consumedSnapshot = false; + let hydratedOnce = false; + let csrOnly = false; + let providerGeneration = 0; const route = useRoute(); const hostInstance = getInstance(); const componentAttrs = useAttrs(); + let lastComponentAttrs = { ...componentAttrs }; + const ssrPayload = getMatchingBridgeSSRPayload(props.ssr, { + moduleName: props.moduleName, + instanceId: props.instanceId, + }); + const instanceId = props.instanceId || ssrPayload?.instanceId; + const serverPayload = + ssrPayload && 'html' in ssrPayload + ? (ssrPayload as BridgeSSRResult) + : undefined; + const reference = + ssrPayload && !('html' in ssrPayload) + ? (ssrPayload as BridgeSSRReference) + : undefined; + const registry = useBridgeHydrationRegistry(); + if (reference && !registry) { + throw new Error( + 'Bridge SSR references require provideBridgeHydrationRegistry before mount', + ); + } + const snapshot = + reference && instanceId + ? registry!.peek(reference.moduleName, instanceId) + : undefined; + const hasSSRPayload = Boolean((serverPayload || snapshot) && instanceId); + const registryModuleName = + props.moduleName || reference?.moduleName || ssrPayload?.moduleName || ''; + + const releaseUnclaimedSnapshot = () => { + if (!snapshot || !instanceId || consumedSnapshot || !registry) return; + registry.fail(registryModuleName, instanceId); + consumedSnapshot = true; + }; const getBridgeRenderProps = () => ({ - name: props.moduleName, + moduleName: props.moduleName, dom: rootRef.value, basename: props.basename, memoryRoute: props.memoryRoute, hashRoute: props.hashRoute, }); - const renderComponent = async () => { - if (!rootRef.value || isRendered.value) { - return; - } - const providerReturn = props.providerInfo?.(); - providerInfoRef.value = providerReturn; - - let renderProps = { - ...componentAttrs, - moduleName: props.moduleName, - dom: rootRef.value, - basename: props.basename, - memoryRoute: props.memoryRoute, - hashRoute: props.hashRoute, - }; - LoggerInstance.debug( - `createRemoteAppComponent LazyComponent render >>>`, - renderProps, - ); + const renderComponent = () => { + const pending = renderQueue.then(async () => { + const generation = providerGeneration; + const dom = rootRef.value as HTMLElement | null; + if ( + !dom || + !dom.isConnected || + !props.providerInfo || + controller.signal.aborted + ) { + return; + } + const providerReturn = providerInfoRef.value || props.providerInfo?.(); + providerInfoRef.value = providerReturn; + const wasRendered = isRendered.value; + + // Claim before any await so cancel cannot leave a peekable snapshot. + // After a claim (even if render aborts), never hydrate again — CSR only. + let ssrState = + wasRendered || hydratedOnce || consumedSnapshot + ? undefined + : serverPayload?.dehydratedState; + if ( + !wasRendered && + !hydratedOnce && + !consumedSnapshot && + snapshot && + instanceId && + registry + ) { + const claimed = registry.consume(registryModuleName, instanceId); + if (Object.is(claimed, snapshot)) { + consumedSnapshot = true; + ssrState = snapshot.state; + } else { + consumedSnapshot = true; + hydratedOnce = true; + ssrState = undefined; + clearBridgeSSRMountAttrs(dom); + } + } - const beforeBridgeRenderRes = - (await hostInstance?.bridgeHook?.lifecycle?.beforeBridgeRender?.emit( + let renderProps = { + ...componentAttrs, + moduleName: props.moduleName, + dom, + basename: props.basename, + memoryRoute: props.memoryRoute, + hashRoute: props.hashRoute, + instanceId, + ssrState, + signal: controller.signal, + }; + LoggerInstance.debug( + `createRemoteAppComponent LazyComponent render >>>`, renderProps, - )) || {}; + ); - renderProps = { ...renderProps, ...beforeBridgeRenderRes.extraProps }; - providerReturn.render(renderProps); - isRendered.value = true; - hostInstance?.bridgeHook?.lifecycle?.afterBridgeRender?.emit(renderProps); + const beforeBridgeRenderRes = + (await hostInstance?.bridgeHook?.lifecycle?.beforeBridgeRender?.emit( + renderProps, + )) || {}; + renderProps = { ...renderProps, ...beforeBridgeRenderRes.extraProps }; + await providerReturn.render(renderProps); + if ( + generation !== providerGeneration || + controller.signal.aborted || + wasDeactivated.value || + !dom.isConnected + ) { + // Only destroy if this provider is still the active one. A newer + // providerInfo watch may already have destroyed and replaced it. + if (providerInfoRef.value === providerReturn) { + providerReturn.destroy?.({ dom }); + providerInfoRef.value = null; + isRendered.value = false; + } + return; + } + isRendered.value = true; + // One-shot hydrate for this instance. Keep SSR markers in the DOM so + // hosts/tests can observe them; strip only on KeepAlive deactivate. + if (snapshot || serverPayload) { + hydratedOnce = true; + } + hostInstance?.bridgeHook?.lifecycle?.afterBridgeRender?.emit( + renderProps, + ); + }); + renderQueue = pending.catch((error) => { + if (controller.signal.aborted || wasDeactivated.value) return; + if (snapshot && instanceId && !consumedSnapshot) { + registry?.fail(registryModuleName, instanceId); + consumedSnapshot = true; + } + renderError.value = error; + }); + return renderQueue; }; const destroyComponent = () => { const providerReturn = providerInfoRef.value as any; - if (!providerReturn || !isRendered.value) { + // Destroy whenever a provider was obtained. A failed/aborted render may + // still have mounted an app before rejecting, so do not gate on isRendered. + if (!providerReturn) { return; } LoggerInstance.debug( @@ -125,7 +263,39 @@ export default defineComponent({ onMounted(() => { isActive.value = true; - renderComponent(); + void renderComponent(); + }); + + watch( + () => props.providerInfo, + () => { + providerGeneration += 1; + destroyComponent(); + providerInfoRef.value = null; + void renderComponent(); + }, + { flush: 'post' }, + ); + + watch( + () => [props.basename, props.memoryRoute, props.hashRoute], + () => { + if (isRendered.value) void renderComponent(); + }, + { deep: true, flush: 'post' }, + ); + + onUpdated(() => { + const nextComponentAttrs = { ...componentAttrs }; + const keys = Object.keys(nextComponentAttrs); + const attrsChanged = + keys.length !== Object.keys(lastComponentAttrs).length || + keys.some( + (key) => !Object.is(nextComponentAttrs[key], lastComponentAttrs[key]), + ); + if (!attrsChanged) return; + lastComponentAttrs = nextComponentAttrs; + if (isRendered.value) void renderComponent(); }); onActivated(async () => { @@ -135,20 +305,66 @@ export default defineComponent({ } wasDeactivated.value = false; await nextTick(); - renderComponent(); + await renderComponent(); }); onDeactivated(() => { isActive.value = false; wasDeactivated.value = true; + releaseUnclaimedSnapshot(); + if (consumedSnapshot) hydratedOnce = true; + csrOnly = true; + const dom = rootRef.value as HTMLElement | null; + if (dom) clearBridgeSSRMountAttrs(dom); destroyComponent(); }); onBeforeUnmount(() => { + controller.abort(); watchStopHandle(); + releaseUnclaimedSnapshot(); destroyComponent(); }); - return () =>
; + return () => { + if (renderError.value) throw renderError.value; + const mount = ( +
+ ); + if (!hasSSRPayload || !instanceId || csrOnly) return mount; + const moduleName = props.moduleName || ssrPayload!.moduleName; + return ( +
+ {mount} + \n', - }, - ); + it('infers ts files for multi-dot expose paths', () => { + const { context, resolvedPath } = resolveExpose( + './src/components/foo.generated', + { + 'src/components/foo.generated.ts': 'export const foo = 1;\n', + }, + ); - expect(resolvedPath).toBe( - resolve(context, 'src/components/foo.generated.vue'), - ); - }); + expect(resolvedPath).toBe( + resolve(context, 'src/components/foo.generated.ts'), + ); + }); - it('infers jsx files for multi-dot expose paths', () => { - const { context, resolvedPath } = resolveExpose( - './src/components/foo.generated', - { - 'src/components/foo.generated.jsx': - 'export const Foo = () => null;\n', - }, - ); + it('preserves explicit multi-dot ts paths', () => { + const { context, resolvedPath } = resolveExpose( + './src/components/foo.generated.ts', + { + 'src/components/foo.generated.ts': 'export const foo = 1;\n', + }, + ); - expect(resolvedPath).toBe( - resolve(context, 'src/components/foo.generated.jsx'), - ); - }); + expect(resolvedPath).toBe( + resolve(context, 'src/components/foo.generated.ts'), + ); + }); - it('falls back to dotted directory index files', () => { - const { context, resolvedPath } = resolveExpose( - './src/components/foo.bar', - { - 'src/components/foo.bar/index.ts': 'export const foo = 1;\n', - }, - ); + it('infers tsx files for multi-dot expose paths', () => { + const { context, resolvedPath } = resolveExpose( + './src/components/foo.generated', + { + 'src/components/foo.generated.tsx': + 'export const Foo = () => null;\n', + }, + ); - expect(resolvedPath).toBe( - resolve(context, 'src/components/foo.bar/index.ts'), - ); - }); + expect(resolvedPath).toBe( + resolve(context, 'src/components/foo.generated.tsx'), + ); + }); - it('falls back to normal directory index files', () => { - const { context, resolvedPath } = resolveExpose( - './src/components/foo', - { - 'src/components/foo/index.ts': 'export const foo = 1;\n', - }, - ); + it('infers vue files for multi-dot expose paths', () => { + const { context, resolvedPath } = resolveExpose( + './src/components/foo.generated', + { + 'src/components/foo.generated.vue': + '\n', + }, + ); - expect(resolvedPath).toBe( - resolve(context, 'src/components/foo/index.ts'), - ); - }); - }); - }); + expect(resolvedPath).toBe( + resolve(context, 'src/components/foo.generated.vue'), + ); + }); - describe('successfully parse tsconfig with project references', () => { - it.each([ - { - tsConfigFile: './testconfig-reference.test.json', - expectedRootDir: resolve(__dirname), - }, - { - tsConfigFile: './testconfig-reference-2.test.json', - expectedRootDir: resolve(__dirname), - }, - { - tsConfigFile: './testconfig-reference-relative.test.json', - expectedRootDir: resolve(__dirname, '..'), - }, - ])( - 'infers rootDir from project references', - ({ tsConfigFile, expectedRootDir }) => { - const tsConfigPath = join(__dirname, tsConfigFile); - const { tsConfig } = retrieveRemoteConfig({ - moduleFederationConfig, - tsConfigPath, + it('infers jsx files for multi-dot expose paths', () => { + const { context, resolvedPath } = resolveExpose( + './src/components/foo.generated', + { + 'src/components/foo.generated.jsx': + 'export const Foo = () => null;\n', + }, + ); + + expect(resolvedPath).toBe( + resolve(context, 'src/components/foo.generated.jsx'), + ); }); - expect(tsConfig.compilerOptions.rootDir).toBe(expectedRootDir); - }, - ); + it('falls back to dotted directory index files', () => { + const { context, resolvedPath } = resolveExpose( + './src/components/foo.bar', + { + 'src/components/foo.bar/index.ts': 'export const foo = 1;\n', + }, + ); + + expect(resolvedPath).toBe( + resolve(context, 'src/components/foo.bar/index.ts'), + ); + }); + + it('falls back to normal directory index files', () => { + const { context, resolvedPath } = resolveExpose( + './src/components/foo', + { + 'src/components/foo/index.ts': 'export const foo = 1;\n', + }, + ); + + expect(resolvedPath).toBe( + resolve(context, 'src/components/foo/index.ts'), + ); + }); + }); + } }); + + for (const scenario of typeScriptScenarios) { + describe(`successfully parse tsconfig with project references using ${scenario.name}`, () => { + it.each([ + { + tsConfigFile: './testconfig-reference.test.json', + expectedRootDir: resolve(__dirname), + }, + { + tsConfigFile: './testconfig-reference-2.test.json', + expectedRootDir: resolve(__dirname), + }, + { + tsConfigFile: './testconfig-reference-relative.test.json', + expectedRootDir: resolve(__dirname, '..'), + }, + ])( + 'infers rootDir from project references', + ({ tsConfigFile, expectedRootDir }) => { + const tsConfigPath = join(__dirname, tsConfigFile); + const typeScriptContext = createTemporaryProject({}); + const { tsConfig } = retrieveRemoteConfig({ + moduleFederationConfig: withTypeScriptScenario( + scenario, + typeScriptContext, + moduleFederationConfig, + ), + tsConfigPath, + }); + + expect(tsConfig.compilerOptions.rootDir).toBe(expectedRootDir); + }, + ); + }); + } }); diff --git a/packages/dts-plugin/src/core/configurations/remotePlugin.ts b/packages/dts-plugin/src/core/configurations/remotePlugin.ts index 180231d9fd9..0a160e4e755 100644 --- a/packages/dts-plugin/src/core/configurations/remotePlugin.ts +++ b/packages/dts-plugin/src/core/configurations/remotePlugin.ts @@ -1,11 +1,67 @@ -import { existsSync } from 'fs'; -import { dirname, join, resolve, extname, isAbsolute } from 'path'; +import crypto from 'crypto'; +import { execFileSync } from 'child_process'; +import { existsSync, mkdirSync, realpathSync, rmSync, writeFileSync } from 'fs'; +import { + dirname, + join, + resolve, + extname, + isAbsolute, + normalize, + relative, + sep, +} from 'path'; import { utils } from '@module-federation/managers'; -import typescript from 'typescript'; +import { TEMP_DIR } from '@module-federation/sdk'; import { RemoteOptions } from '../interfaces/RemoteOptions'; import { validateOptions } from '../lib/utils'; -import { TsConfigJson } from '../interfaces/TsConfigJson'; +import { + TsConfigCompilerOptions, + TsConfigJson, +} from '../interfaces/TsConfigJson'; +import { + getTypeScriptPackageInfo, + requireTypeScript, +} from '../lib/typeScriptResolver'; +import { logger } from '../../server'; + +interface ProjectReference { + path: string; + originalPath?: string; +} + +interface ParsedConfigContent { + options: TsConfigCompilerOptions; + fileNames: string[]; + projectReferences: ProjectReference[]; +} + +interface LegacyTypeScriptApi { + sys: { + readFile: (path: string) => string | undefined; + }; + readConfigFile: ( + fileName: string, + readFile: (path: string) => string | undefined, + ) => { + config?: TsConfigJson; + error?: { + messageText: string | { toString(): string }; + }; + }; + parseJsonConfigFileContent: ( + json: TsConfigJson, + host: LegacyTypeScriptApi['sys'], + basePath: string, + ) => ParsedConfigContent; + createProgram: ( + rootNames: string[], + options: TsConfigCompilerOptions, + ) => { + getSourceFiles: () => Array<{ fileName: string }>; + }; +} const defaultOptions = { tsConfigPath: './tsconfig.json', @@ -26,9 +82,7 @@ const defaultOptions = { deleteTsConfig: true, } satisfies Partial; -function getEffectiveRootDir( - parsedCommandLine: typescript.ParsedCommandLine, -): string { +function getEffectiveRootDir(parsedCommandLine: ParsedConfigContent): string { const compilerOptions = parsedCommandLine.options; if (compilerOptions.rootDir) { @@ -76,48 +130,326 @@ function getEffectiveRootDir( const getDependentFiles = ( rootFiles: string[], - configContent: typescript.ParsedCommandLine, + configContent: ParsedConfigContent, rootDir: string, + typescript: LegacyTypeScriptApi, ): string[] => { const program = typescript.createProgram(rootFiles, configContent.options); const sourceFiles = program.getSourceFiles(); const dependentFiles = sourceFiles .map((file) => file.fileName) .filter( - (file) => !file.endsWith('.d.ts') && file.startsWith(rootDir + '/'), - ); + (file) => !file.endsWith('.d.ts') && isFileWithinRootDir(file, rootDir), + ) + .map((file) => normalizeFileToRootDir(file, rootDir)); return dependentFiles.length ? dependentFiles : rootFiles; }; +const normalizeForComparison = (value: string) => { + try { + return normalize(realpathSync.native(value)); + } catch { + return normalize(value); + } +}; + +const isFileWithinRootDir = (file: string, rootDir: string) => { + const normalizedFile = normalizeForComparison(file); + const normalizedRootDir = normalizeForComparison(rootDir); + return ( + normalizedFile === normalizedRootDir || + normalizedFile.startsWith( + normalizedRootDir.endsWith(sep) + ? normalizedRootDir + : `${normalizedRootDir}${sep}`, + ) + ); +}; + +const normalizeFileToRootDir = (file: string, rootDir: string) => { + const normalizedFile = normalizeForComparison(file); + const normalizedRootDir = normalizeForComparison(rootDir); + if ( + normalizedFile === normalizedRootDir || + normalizedFile.startsWith( + normalizedRootDir.endsWith(sep) + ? normalizedRootDir + : `${normalizedRootDir}${sep}`, + ) + ) { + return normalize( + join(rootDir, relative(normalizedRootDir, normalizedFile)), + ); + } + return normalize(file); +}; + +const getTypeScriptContext = ({ + context, + moduleFederationConfig, +}: Required) => { + const dtsOptions = moduleFederationConfig.dts; + return typeof dtsOptions !== 'boolean' && dtsOptions?.cwd + ? dtsOptions.cwd + : context; +}; + +const resolveFromConfigDir = (value: unknown, configDir: string) => { + if (typeof value !== 'string') { + return value; + } + return isAbsolute(value) ? normalize(value) : resolve(configDir, value); +}; + +const normalizeCompilerOptions = ( + compilerOptions: TsConfigCompilerOptions = {}, + configDir: string, +): TsConfigCompilerOptions => { + const normalizedOptions = { ...compilerOptions }; + for (const pathOption of [ + 'rootDir', + 'outDir', + 'declarationDir', + 'tsBuildInfoFile', + ]) { + if (typeof normalizedOptions[pathOption] === 'string') { + normalizedOptions[pathOption] = resolveFromConfigDir( + normalizedOptions[pathOption], + configDir, + ); + } + } + if ( + normalizedOptions['moduleResolution'] === 'node' || + normalizedOptions['moduleResolution'] === 'node10' + ) { + // TS 7 still prints legacy node resolution from --showConfig, but rejects it for --project. + normalizedOptions['moduleResolution'] = 'bundler'; + } + return normalizedOptions; +}; + +const parseShowConfigOutput = ( + stdout: string, + resolvedTsConfigPath: string, +): { + rawTsConfigJson: TsConfigJson; + configContent: ParsedConfigContent; +} => { + const configDir = dirname(resolvedTsConfigPath); + const shownConfig = JSON.parse(stdout) as TsConfigJson; + const compilerOptions = normalizeCompilerOptions( + shownConfig.compilerOptions, + configDir, + ); + const fileNames = (shownConfig.files || []).map((file) => + resolveFromConfigDir(file, configDir), + ) as string[]; + const projectReferences = (shownConfig.references || []).map((reference) => ({ + ...reference, + path: resolveFromConfigDir(reference.path, configDir) as string, + originalPath: reference.path, + })); + + return { + rawTsConfigJson: { + ...shownConfig, + compilerOptions, + }, + configContent: { + options: compilerOptions, + fileNames, + projectReferences, + }, + }; +}; + +const readTsConfigWithTsc = ( + resolvedTsConfigPath: string, + typeScriptContext: string, +) => { + const typeScriptPackageInfo = getTypeScriptPackageInfo(typeScriptContext); + const stdout = execFileSync( + process.execPath, + [ + typeScriptPackageInfo.tscBinPath, + '--showConfig', + '--project', + resolvedTsConfigPath, + ], + { + cwd: typeScriptContext, + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'pipe'], + }, + ); + return parseShowConfigOutput(stdout, resolvedTsConfigPath); +}; + +const writeListFilesTsConfig = ( + rootFiles: string[], + resolvedTsConfigPath: string, + context: string, + compilerOptions?: TsConfigCompilerOptions, +) => { + const hash = crypto + .createHash('md5') + .update(`${JSON.stringify(rootFiles)}${resolvedTsConfigPath}${Date.now()}`) + .digest('hex'); + const tempTsConfigJsonPath = resolve( + context, + 'node_modules', + TEMP_DIR, + `tsconfig.list-files.${hash}.json`, + ); + mkdirSync(dirname(tempTsConfigJsonPath), { recursive: true }); + const listFilesConfig: TsConfigJson = compilerOptions + ? { + compilerOptions, + files: rootFiles.map((file) => + isAbsolute(file) ? file : resolve(context, file), + ), + } + : { + extends: resolvedTsConfigPath, + files: rootFiles.map((file) => + isAbsolute(file) ? file : resolve(context, file), + ), + }; + writeFileSync(tempTsConfigJsonPath, JSON.stringify(listFilesConfig, null, 2)); + return tempTsConfigJsonPath; +}; + +const formatCompilerError = (error: unknown) => { + const readOutput = (value: unknown) => { + if (Buffer.isBuffer(value)) { + return value.toString('utf8'); + } + return typeof value === 'string' ? value : ''; + }; + + if (typeof error === 'object' && error !== null) { + const processError = error as { + stderr?: unknown; + stdout?: unknown; + message?: unknown; + }; + const stderr = readOutput(processError.stderr).trim(); + if (stderr) { + return stderr.split(/\r?\n/)[0]; + } + const stdout = readOutput(processError.stdout).trim(); + if (stdout) { + return stdout.split(/\r?\n/)[0]; + } + if (typeof processError.message === 'string') { + return processError.message; + } + } + + return String(error); +}; + +const getDependentFilesWithTsc = ( + rootFiles: string[], + rootDir: string, + resolvedTsConfigPath: string, + compilerOptions: TsConfigCompilerOptions, + context: string, + typeScriptContext: string, +): string[] => { + if (!rootFiles.length) { + return []; + } + + const typeScriptPackageInfo = getTypeScriptPackageInfo(typeScriptContext); + const listFilesTsConfigPath = writeListFilesTsConfig( + rootFiles, + resolvedTsConfigPath, + context, + compilerOptions, + ); + try { + const stdout = execFileSync( + process.execPath, + [ + typeScriptPackageInfo.tscBinPath, + '--listFilesOnly', + '--project', + listFilesTsConfigPath, + ], + { + cwd: typeScriptContext, + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'pipe'], + }, + ); + const dependentFiles = stdout + .split(/\r?\n/) + .map((file) => file.trim()) + .filter(Boolean) + .map((file) => (isAbsolute(file) ? file : resolve(context, file))) + .filter( + (file) => !file.endsWith('.d.ts') && isFileWithinRootDir(file, rootDir), + ) + .map((file) => normalizeFileToRootDir(file, rootDir)); + return dependentFiles.length ? dependentFiles : rootFiles; + } catch (error) { + logger.warn( + `Failed to collect TypeScript dependency files with "tsc --listFilesOnly"; falling back to exposed files only. ${formatCompilerError( + error, + )}`, + ); + return rootFiles; + } finally { + rmSync(listFilesTsConfigPath, { force: true }); + } +}; + const readTsConfig = ( - { + remoteOptions: Required, + mapComponentsToExpose: Record, +): TsConfigJson => { + const { tsConfigPath, typesFolder, compiledTypesFolder, context, additionalFilesToCompile, outputDir, - }: Required, - mapComponentsToExpose: Record, -): TsConfigJson => { + } = remoteOptions; const resolvedTsConfigPath = resolve(context, tsConfigPath); + const typeScriptContext = getTypeScriptContext(remoteOptions); + const typeScriptPackageInfo = getTypeScriptPackageInfo(typeScriptContext); + + let rawTsConfigJson: TsConfigJson; + let configContent: ParsedConfigContent; + let typescript: LegacyTypeScriptApi | undefined; + + if (typeScriptPackageInfo.majorVersion === 7) { + ({ rawTsConfigJson, configContent } = readTsConfigWithTsc( + resolvedTsConfigPath, + typeScriptContext, + )); + } else { + typescript = requireTypeScript(typeScriptContext); + const readResult = typescript.readConfigFile( + resolvedTsConfigPath, + typescript.sys.readFile, + ); - const readResult = typescript.readConfigFile( - resolvedTsConfigPath, - typescript.sys.readFile, - ); + if (readResult.error) { + throw new Error(readResult.error.messageText.toString()); + } - if (readResult.error) { - throw new Error(readResult.error.messageText.toString()); + rawTsConfigJson = readResult.config || {}; + configContent = typescript.parseJsonConfigFileContent( + rawTsConfigJson, + typescript.sys, + dirname(resolvedTsConfigPath), + ); + configContent.projectReferences = configContent.projectReferences || []; } - - const rawTsConfigJson: TsConfigJson = readResult.config; - - const configContent = typescript.parseJsonConfigFileContent( - rawTsConfigJson, - typescript.sys, - dirname(resolvedTsConfigPath), - ); const rootDir = getEffectiveRootDir(configContent); const outDir = resolve( @@ -127,7 +459,7 @@ const readTsConfig = ( compiledTypesFolder, ); - const defaultCompilerOptions: typescript.CompilerOptions = { + const defaultCompilerOptions: TsConfigCompilerOptions = { rootDir, emitDeclarationOnly: true, noEmit: false, @@ -165,7 +497,16 @@ const readTsConfig = ( ); const filesToCompile = [ - ...getDependentFiles(rootFiles, configContent, rootDir), + ...(typescript + ? getDependentFiles(rootFiles, configContent, rootDir, typescript) + : getDependentFilesWithTsc( + rootFiles, + rootDir, + resolvedTsConfigPath, + configContent.options, + context, + typeScriptContext, + )), ...configContent.fileNames.filter( (filename) => filename.endsWith('.d.ts') && diff --git a/packages/dts-plugin/src/core/configurations/tsconfig.test.json b/packages/dts-plugin/src/core/configurations/tsconfig.test.json index 00cb31f56d6..29a505a4e90 100644 --- a/packages/dts-plugin/src/core/configurations/tsconfig.test.json +++ b/packages/dts-plugin/src/core/configurations/tsconfig.test.json @@ -3,11 +3,11 @@ "target": "es2017", "module": "esnext", "lib": ["esnext"], - "moduleResolution": "node", "esModuleInterop": true, "strict": true, "strictNullChecks": true, "resolveJsonModule": true, - "declarationDir": "dts-dist" + "declarationDir": "dts-dist", + "ignoreDeprecations": "6.0" } } diff --git a/packages/dts-plugin/src/core/interfaces/TsConfigJson.ts b/packages/dts-plugin/src/core/interfaces/TsConfigJson.ts index 6744ed727fe..55cbeaf78e4 100644 --- a/packages/dts-plugin/src/core/interfaces/TsConfigJson.ts +++ b/packages/dts-plugin/src/core/interfaces/TsConfigJson.ts @@ -1,9 +1,19 @@ -import ts from 'typescript'; +export type TsConfigCompilerOptions = Record & { + rootDir?: string; + outDir?: string; + declarationDir?: string; + tsBuildInfoFile?: string; + incremental?: boolean; + paths?: Record; + baseUrl?: string; +}; export interface TsConfigJson { extends?: string; - compilerOptions?: ts.CompilerOptions; + compilerOptions?: TsConfigCompilerOptions; exclude?: string[]; include?: string[]; files?: string[]; + references?: Array<{ path: string }>; + [key: string]: any; } diff --git a/packages/dts-plugin/src/core/lib/DTSManager.advance.spec.ts b/packages/dts-plugin/src/core/lib/DTSManager.advance.spec.ts index 63fb0aefe54..cd4f2ebc353 100644 --- a/packages/dts-plugin/src/core/lib/DTSManager.advance.spec.ts +++ b/packages/dts-plugin/src/core/lib/DTSManager.advance.spec.ts @@ -2,7 +2,7 @@ import AdmZip from 'adm-zip'; import dirTree from 'directory-tree'; import { readFileSync, rmSync } from 'fs'; import { join } from 'path'; -import { describe, expect, it, vi, beforeAll } from 'vitest'; +import { describe, expect, it, rs, beforeAll } from '@rstest/core'; import { DTSManager } from './DTSManager'; import * as utils from './utils'; const TEST_DIT_DIR = 'dist-test'; @@ -97,7 +97,7 @@ describe('DTSManager advance usage', () => { remoteOptions.typesFolder, ); const apiFile = `${apiDistFolder}.d.ts`; - vi.spyOn(utils, 'nativeFetch').mockImplementation((url) => { + rs.spyOn(utils, 'nativeFetch').mockImplementation((url) => { if (url.includes('.d.ts')) { return Promise.resolve({ data: readFileSync(apiFile, 'utf8'), @@ -197,6 +197,9 @@ describe('DTSManager advance usage', () => { { name: 'typeScriptCompiler.d.ts', }, + { + name: 'typeScriptResolver.d.ts', + }, { name: 'utils.d.ts', }, diff --git a/packages/dts-plugin/src/core/lib/DTSManager.general.spec.ts b/packages/dts-plugin/src/core/lib/DTSManager.general.spec.ts index 24452b545f7..f9184ef7776 100644 --- a/packages/dts-plugin/src/core/lib/DTSManager.general.spec.ts +++ b/packages/dts-plugin/src/core/lib/DTSManager.general.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it, vi, beforeEach } from 'vitest'; +import { describe, expect, it, rs, beforeEach } from '@rstest/core'; import { DTSManager } from './DTSManager'; import fs from 'fs'; import path from 'path'; @@ -9,19 +9,38 @@ import { RemoteOptions } from '../interfaces/RemoteOptions'; import { downloadTypesArchive } from './archiveHandler'; import * as utils from './utils'; -vi.mock('fs/promises'); -vi.mock('fs'); -vi.mock('./archiveHandler'); -vi.mock('@module-federation/third-party-dts-extractor', () => ({ - ThirdPartyExtractor: vi.fn().mockImplementation(() => ({ - collectTypeImports: vi.fn().mockReturnValue([]), +const fsMocks = rs.hoisted(() => ({ + existsSync: rs.fn(() => false), + rmSync: rs.fn(), + writeFileSync: rs.fn(), + readFileSync: rs.fn(), +})); + +const fsPromisesMocks = rs.hoisted(() => ({ + cp: rs.fn().mockResolvedValue(undefined), + mkdir: rs.fn().mockResolvedValue(undefined), + rm: rs.fn().mockResolvedValue(undefined), +})); + +rs.mock('fs/promises', () => fsPromisesMocks); +rs.mock('fs', () => ({ + default: fsMocks, + ...fsMocks, +})); +rs.mock('./archiveHandler', () => ({ + createTypesArchive: rs.fn().mockResolvedValue(undefined), + downloadTypesArchive: rs.fn(), +})); +rs.mock('@module-federation/third-party-dts-extractor', () => ({ + ThirdPartyExtractor: rs.fn().mockImplementation(() => ({ + collectTypeImports: rs.fn().mockReturnValue([]), })), })); const projectRoot = path.join(__dirname, '../../..'); -vi.mock('../configurations/hostPlugin', () => ({ - retrieveHostConfig: vi.fn().mockImplementation((options) => ({ +rs.mock('../configurations/hostPlugin', () => ({ + retrieveHostConfig: rs.fn().mockImplementation((options) => ({ hostOptions: { ...options, context: projectRoot, @@ -44,7 +63,7 @@ vi.mock('../configurations/hostPlugin', () => ({ }, }, })), - retrieveRemoteInfo: vi.fn().mockImplementation(({ remoteAlias, remote }) => ({ + retrieveRemoteInfo: rs.fn().mockImplementation(({ remoteAlias, remote }) => ({ name: remoteAlias, url: remote, alias: remoteAlias, @@ -55,7 +74,7 @@ describe('DTSManager General Tests', () => { let dtsManager: DTSManager; beforeEach(() => { - vi.clearAllMocks(); + rs.clearAllMocks(); const remoteOptions: RemoteOptions = { moduleFederationConfig: { name: 'testRemote', @@ -87,12 +106,12 @@ describe('DTSManager General Tests', () => { dtsManager = new DTSManager({ remote: remoteOptions }); // Add mock implementations - vi.spyOn(dtsManager, 'consumeArchiveTypes').mockResolvedValue(undefined); - vi.spyOn(dtsManager, 'consumeAPITypes').mockResolvedValue(undefined); + rs.spyOn(dtsManager, 'consumeArchiveTypes').mockResolvedValue(undefined); + rs.spyOn(dtsManager, 'consumeAPITypes').mockResolvedValue(undefined); // Add mock for fs.writeFileSync - vi.spyOn(fs, 'writeFileSync').mockImplementation(() => undefined); - vi.spyOn(fs, 'readFileSync').mockReturnValue(` + rs.spyOn(fs, 'writeFileSync').mockImplementation(() => undefined); + rs.spyOn(fs, 'readFileSync').mockReturnValue(` import type { PackageType as PackageType_0, RemoteKeys as RemoteKeys_0 } from './existing/apis.d.ts'; `); }); @@ -142,7 +161,7 @@ describe('DTSManager General Tests', () => { }, }; - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: manifestResponse.data, status: 200, headers: {}, @@ -173,7 +192,7 @@ describe('DTSManager General Tests', () => { }, }; - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: manifestResponse.data, status: 200, headers: {}, @@ -185,7 +204,7 @@ describe('DTSManager General Tests', () => { alias: 'test-alias', }; - const joinSpy = vi + const joinSpy = rs .spyOn(path, 'join') .mockImplementation(path.win32.join as typeof path.join); @@ -212,7 +231,7 @@ describe('DTSManager General Tests', () => { }, }; - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: manifestResponse.data, status: 200, headers: {}, @@ -231,7 +250,7 @@ describe('DTSManager General Tests', () => { }); it('should handle manifest fetch errors', async () => { - vi.spyOn(utils, 'nativeFetch').mockRejectedValueOnce( + rs.spyOn(utils, 'nativeFetch').mockRejectedValueOnce( new Error('Network error'), ); @@ -259,7 +278,7 @@ describe('DTSManager General Tests', () => { }, }; - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: manifestResponse.data, status: 200, headers: {}, @@ -306,10 +325,10 @@ describe('DTSManager General Tests', () => { apiTypeUrl: 'http://example.com/api.d.ts', }; - const mockDownloader = vi + const mockDownloader = rs .fn() .mockResolvedValue(['test-alias', '/tmp/types']); - vi.mocked(downloadTypesArchive).mockReturnValue(mockDownloader); + rs.mocked(downloadTypesArchive).mockReturnValue(mockDownloader); const result = await dtsManager.consumeTargetRemotes( baseHostOptions, @@ -340,7 +359,7 @@ describe('DTSManager General Tests', () => { describe('updateTypes', () => { it('should handle positive update mode for host', async () => { - const generateTypesSpy = vi + const generateTypesSpy = rs .spyOn(dtsManager, 'generateTypes') .mockResolvedValue(undefined); dtsManager.options.host = { @@ -399,18 +418,18 @@ describe('DTSManager General Tests', () => { type PackageType = T extends 'REMOTE_ALIAS_IDENTIFIER/Component' ? typeof import('REMOTE_ALIAS_IDENTIFIER/Component') : any; `; - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: apiTypeContent, status: 200, headers: {}, } as any); - vi.spyOn(fs, 'writeFileSync'); + rs.spyOn(fs, 'writeFileSync'); // @ts-expect-error only need timeout, which is not required await dtsManager.downloadAPITypes(remoteInfo, '/tmp/types', {}); expect(fs.writeFileSync).toHaveBeenCalled(); - const writeCall = vi.mocked(fs.writeFileSync).mock.calls[0]; + const writeCall = rs.mocked(fs.writeFileSync).mock.calls[0]; const content = writeCall[1] as string; expect(content).toContain('test-alias/Component'); @@ -430,7 +449,7 @@ describe('DTSManager General Tests', () => { apiTypeUrl: '', }; - vi.spyOn(fs, 'writeFileSync'); + rs.spyOn(fs, 'writeFileSync'); await dtsManager.downloadAPITypes(remoteInfo, '/tmp/types'); @@ -447,10 +466,10 @@ describe('DTSManager General Tests', () => { apiTypeUrl: 'http://example.com/api.d.ts', }; - vi.spyOn(utils, 'nativeFetch').mockRejectedValueOnce( + rs.spyOn(utils, 'nativeFetch').mockRejectedValueOnce( new Error('Network error'), ); - vi.spyOn(fs, 'writeFileSync'); + rs.spyOn(fs, 'writeFileSync'); await dtsManager.downloadAPITypes(remoteInfo, '/tmp/types'); @@ -481,7 +500,7 @@ describe('DTSManager General Tests', () => { }; it('should handle no loaded remote API aliases', () => { - vi.spyOn(fs, 'writeFileSync'); + rs.spyOn(fs, 'writeFileSync'); dtsManager.consumeAPITypes(baseHostOptions); @@ -492,12 +511,12 @@ describe('DTSManager General Tests', () => { const existingContent = ` import type { PackageType as PackageType_0, RemoteKeys as RemoteKeys_0 } from './existing/apis.d.ts'; `; - vi.spyOn(fs, 'readFileSync').mockReturnValue(existingContent); - vi.spyOn(fs, 'writeFileSync'); + rs.spyOn(fs, 'readFileSync').mockReturnValue(existingContent); + rs.spyOn(fs, 'writeFileSync'); // Mock the ThirdPartyExtractor to return the existing import - vi.mocked(ThirdPartyExtractor).mockImplementation(() => ({ - collectTypeImports: vi.fn().mockReturnValue(['./existing/apis.d.ts']), + rs.mocked(ThirdPartyExtractor).mockImplementation(() => ({ + collectTypeImports: rs.fn().mockReturnValue(['./existing/apis.d.ts']), pkgs: {} as Record, pattern: /.*/, context: '', @@ -505,10 +524,10 @@ describe('DTSManager General Tests', () => { tsConfigPath: '', typesFolder: '', implementation: 'webpack', - addPkgs: vi.fn(), - inferPkgDir: vi.fn(), - collectPkgs: vi.fn(), - copyDts: vi.fn().mockResolvedValue(undefined), + addPkgs: rs.fn(), + inferPkgDir: rs.fn(), + collectPkgs: rs.fn(), + copyDts: rs.fn().mockResolvedValue(undefined), exclude: [], })); diff --git a/packages/dts-plugin/src/core/lib/DTSManager.spec.ts b/packages/dts-plugin/src/core/lib/DTSManager.spec.ts index 2eaa0a254ae..1840d4bd46a 100644 --- a/packages/dts-plugin/src/core/lib/DTSManager.spec.ts +++ b/packages/dts-plugin/src/core/lib/DTSManager.spec.ts @@ -2,7 +2,7 @@ import AdmZip from 'adm-zip'; import dirTree from 'directory-tree'; import { rmSync, existsSync } from 'fs'; import { join } from 'path'; -import { describe, expect, it, vi, beforeAll } from 'vitest'; +import { describe, expect, it, rs, beforeAll } from '@rstest/core'; import { DTSManager } from './DTSManager'; import { UpdateMode } from '../../server/constant'; import * as utils from './utils'; @@ -145,6 +145,9 @@ describe('DTSManager', () => { { name: 'typeScriptCompiler.d.ts', }, + { + name: 'typeScriptResolver.d.ts', + }, { name: 'utils.d.ts', }, @@ -269,6 +272,9 @@ describe('DTSManager', () => { { name: 'typeScriptCompiler.d.ts', }, + { + name: 'typeScriptResolver.d.ts', + }, { name: 'utils.d.ts', }, @@ -326,7 +332,7 @@ describe('DTSManager', () => { const distFolder = join(projectRoot, TEST_DIT_DIR, typesFolder); const zip = new AdmZip(); zip.addLocalFolder(distFolder); - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: zip.toBuffer(), status: 200, headers: {}, @@ -348,7 +354,7 @@ describe('DTSManager', () => { const manifestUrl = 'https://foo.it/static/mf-manifest.json'; const manifestTypesUrl = 'https://foo.it/@mf-types.zip'; const conventionTypesUrl = 'https://foo.it/static/@mf-types.zip'; - const nativeFetchSpy = vi + const nativeFetchSpy = rs .spyOn(utils, 'nativeFetch') .mockImplementation((url) => { if (url === manifestUrl) { @@ -408,7 +414,7 @@ describe('DTSManager', () => { }); it('no delete exist remote types if fetch new remote types failed', async () => { - vi.spyOn(utils, 'nativeFetch').mockRejectedValueOnce(new Error('error')); + rs.spyOn(utils, 'nativeFetch').mockRejectedValueOnce(new Error('error')); await dtsManager.consumeTypes(); expect( dirTree(targetFolder, { @@ -504,6 +510,9 @@ describe('DTSManager', () => { { name: 'typeScriptCompiler.d.ts', }, + { + name: 'typeScriptResolver.d.ts', + }, { name: 'utils.d.ts', }, @@ -563,7 +572,7 @@ describe('DTSManager', () => { const distFolder = join(projectRoot, TEST_DIT_DIR, typesFolder); const zip = new AdmZip(); zip.addLocalFolder(distFolder); - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: zip.toBuffer(), status: 200, headers: {}, @@ -651,6 +660,9 @@ describe('DTSManager', () => { { name: 'typeScriptCompiler.d.ts', }, + { + name: 'typeScriptResolver.d.ts', + }, { name: 'utils.d.ts', }, diff --git a/packages/dts-plugin/src/core/lib/DtsWorker.spec.ts b/packages/dts-plugin/src/core/lib/DtsWorker.spec.ts index 1b1f99edad5..28b8020c37a 100644 --- a/packages/dts-plugin/src/core/lib/DtsWorker.spec.ts +++ b/packages/dts-plugin/src/core/lib/DtsWorker.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'; +import { describe, expect, it, rs, beforeEach, afterEach } from '@rstest/core'; import { join } from 'path'; import dirTree from 'directory-tree'; import { execSync } from 'child_process'; @@ -158,6 +158,9 @@ describe('generateTypesInChildProcess', () => { { name: 'typeScriptCompiler.d.ts', }, + { + name: 'typeScriptResolver.d.ts', + }, { name: 'utils.d.ts', }, @@ -271,25 +274,25 @@ describe('DtsWorker Unit Tests', () => { }; beforeEach(() => { - vi.spyOn(console, 'error').mockImplementation(() => {}); + rs.spyOn(console, 'error').mockImplementation(() => {}); originalKill = process.kill; originalDebugMode = isDebugMode; // eslint-disable-next-line @typescript-eslint/no-require-imports DtsWorkerClass = require('../../../dist/core').DtsWorker; // Reset isDebugMode for each test - vi.mock('./utils', () => ({ + rs.mock('./utils', () => ({ isDebugMode: () => false, cloneDeepOptions: (options: any) => JSON.parse(JSON.stringify(options)), })); // Mock logger - vi.mock('../../server', () => ({ + rs.mock('../../server', () => ({ logger: { - error: vi.fn(), - info: vi.fn(), - warn: vi.fn(), - debug: vi.fn(), + error: rs.fn(), + info: rs.fn(), + warn: rs.fn(), + debug: rs.fn(), }, - fileLog: vi.fn(), + fileLog: rs.fn(), })); }); @@ -303,8 +306,8 @@ describe('DtsWorker Unit Tests', () => { dtsWorker = null; } process.kill = originalKill; - vi.restoreAllMocks(); - vi.resetModules(); + rs.restoreAllMocks(); + rs.resetModules(); }); describe('initialization', () => { @@ -328,7 +331,7 @@ describe('DtsWorker Unit Tests', () => { }, }; - vi.mock('./utils', () => ({ + rs.mock('./utils', () => ({ isDebugMode: () => false, cloneDeepOptions: (options: any) => { const cloned = JSON.parse(JSON.stringify(options)); @@ -361,10 +364,10 @@ describe('DtsWorker Unit Tests', () => { }); it('should ensure child process exits even when promise rejects', async () => { - vi.mock('../rpc/index', () => ({ + rs.mock('../rpc/index', () => ({ createRpcWorker: () => ({ connect: () => Promise.resolve(), - terminate: vi.fn(), + terminate: rs.fn(), process: { pid: process.pid, connected: true, @@ -384,15 +387,15 @@ describe('DtsWorker Unit Tests', () => { describe('debug mode handling', () => { it('should log errors in debug mode', async () => { - vi.mock('./utils', () => ({ + rs.mock('./utils', () => ({ isDebugMode: () => true, cloneDeepOptions: (options: any) => JSON.parse(JSON.stringify(options)), })); - vi.mock('../rpc/index', () => ({ + rs.mock('../rpc/index', () => ({ createRpcWorker: () => ({ connect: () => Promise.resolve(), - terminate: vi.fn(), + terminate: rs.fn(), process: { pid: process.pid, connected: true, @@ -403,7 +406,7 @@ describe('DtsWorker Unit Tests', () => { }), })); - const consoleSpy = vi.spyOn(console, 'error'); + const consoleSpy = rs.spyOn(console, 'error'); dtsWorker = new DtsWorkerClass(mockOptions); dtsWorker._res = Promise.reject(new Error('Test error')); @@ -412,15 +415,15 @@ describe('DtsWorker Unit Tests', () => { }); it('should not log errors when not in debug mode', async () => { - vi.mock('./utils', () => ({ + rs.mock('./utils', () => ({ isDebugMode: () => false, cloneDeepOptions: (options: any) => JSON.parse(JSON.stringify(options)), })); - vi.mock('../rpc/index', () => ({ + rs.mock('../rpc/index', () => ({ createRpcWorker: () => ({ connect: () => Promise.resolve(), - terminate: vi.fn(), + terminate: rs.fn(), process: { pid: process.pid, connected: true, @@ -431,11 +434,11 @@ describe('DtsWorker Unit Tests', () => { }), })); - const consoleSpy = vi.spyOn(console, 'error'); + const consoleSpy = rs.spyOn(console, 'error'); dtsWorker = new DtsWorkerClass(mockOptions); // Mock process.kill to not throw - process.kill = vi.fn(); + process.kill = rs.fn(); // Mock the promise to resolve normally dtsWorker._res = Promise.resolve(); diff --git a/packages/dts-plugin/src/core/lib/archiveHandler.test.ts b/packages/dts-plugin/src/core/lib/archiveHandler.test.ts index 5338acc9133..3d6073849d3 100644 --- a/packages/dts-plugin/src/core/lib/archiveHandler.test.ts +++ b/packages/dts-plugin/src/core/lib/archiveHandler.test.ts @@ -19,9 +19,9 @@ import { describe, expect, it, - vi, + rs, MockInstance, -} from 'vitest'; +} from '@rstest/core'; import { createTypesArchive, @@ -46,7 +46,7 @@ describe('archiveHandler', () => { }; beforeEach(() => { - vi.clearAllMocks(); + rs.clearAllMocks(); // Clean up and recreate the output directory rmSync(tsConfig.compilerOptions.outDir, { recursive: true, force: true }); mkdirSync(tsConfig.compilerOptions.outDir, { recursive: true }); @@ -283,7 +283,7 @@ describe('archiveHandler', () => { Buffer.from('export declare const bar: number;'), ); - const nativeFetchMock = vi + const nativeFetchMock = rs .spyOn(utils, 'nativeFetch') .mockResolvedValueOnce({ data: zip.toBuffer(), @@ -306,7 +306,7 @@ describe('archiveHandler', () => { it('should retry on network failure up to maxRetries', async () => { const error = new Error('Network error'); - const nativeFetchMock = vi + const nativeFetchMock = rs .spyOn(utils, 'nativeFetch') .mockRejectedValue(error); @@ -322,7 +322,7 @@ describe('archiveHandler', () => { const zip = new AdmZip(); // Add an empty directory to the archive zip.addFile('.keep', Buffer.from('')); - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: zip.toBuffer(), status: 200, headers: {}, @@ -344,7 +344,7 @@ describe('archiveHandler', () => { const zip = new AdmZip(); zip.addFile('new.d.ts', Buffer.from('new content')); - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: zip.toBuffer(), status: 200, headers: {}, @@ -369,7 +369,7 @@ describe('archiveHandler', () => { const zip = new AdmZip(); zip.addFile('new.d.ts', Buffer.from('new content')); - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: zip.toBuffer(), status: 200, headers: {}, @@ -386,7 +386,7 @@ describe('archiveHandler', () => { ...hostOptions, abortOnError: false, }; - const nativeFetchMock = vi + const nativeFetchMock = rs .spyOn(utils, 'nativeFetch') .mockRejectedValue(new Error('Network error')); @@ -400,7 +400,7 @@ describe('archiveHandler', () => { }); it('should handle malformed zip data', async () => { - vi.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ + rs.spyOn(utils, 'nativeFetch').mockResolvedValueOnce({ data: Buffer.from('not a valid zip file'), status: 200, headers: {}, diff --git a/packages/dts-plugin/src/core/lib/consumeTypes.spec.ts b/packages/dts-plugin/src/core/lib/consumeTypes.spec.ts index 55da8251ee2..d28194e7e13 100644 --- a/packages/dts-plugin/src/core/lib/consumeTypes.spec.ts +++ b/packages/dts-plugin/src/core/lib/consumeTypes.spec.ts @@ -1,13 +1,15 @@ -import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { describe, it, expect, beforeEach, rs } from '@rstest/core'; import { consumeTypes } from './consumeTypes'; import { getDTSManagerConstructor } from './utils'; import { DTSManagerOptions } from '../interfaces/DTSManagerOptions'; // Mock the utils module -vi.mock('./utils'); +rs.mock('./utils', () => ({ + getDTSManagerConstructor: rs.fn(), +})); describe('consumeTypes', () => { - const mockConsumeTypes = vi.fn().mockResolvedValue(undefined); + const mockConsumeTypes = rs.fn().mockResolvedValue(undefined); // Mock implementation of DTSManager class MockDTSManager { @@ -18,7 +20,7 @@ describe('consumeTypes', () => { } beforeEach(() => { - vi.clearAllMocks(); + rs.clearAllMocks(); mockConsumeTypes.mockClear(); (getDTSManagerConstructor as any).mockReturnValue(MockDTSManager); }); diff --git a/packages/dts-plugin/src/core/lib/typeScriptCompiler.test.ts b/packages/dts-plugin/src/core/lib/typeScriptCompiler.test.ts index a3f3d2fe5af..32ab9fb49e0 100644 --- a/packages/dts-plugin/src/core/lib/typeScriptCompiler.test.ts +++ b/packages/dts-plugin/src/core/lib/typeScriptCompiler.test.ts @@ -1,11 +1,20 @@ import dirTree from 'directory-tree'; -import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs'; +import { + existsSync, + mkdirSync, + readFileSync, + rmSync, + symlinkSync, + writeFileSync, +} from 'fs'; +import { createRequire } from 'module'; import os from 'os'; -import { join, resolve, sep } from 'path'; +import { dirname, join, resolve, sep } from 'path'; import util from 'util'; -import { afterEach, describe, expect, it, vi } from 'vitest'; +import { afterEach, describe, expect, it, rs } from '@rstest/core'; import type { TsConfigJson } from '../interfaces/TsConfigJson'; +import { retrieveRemoteConfig } from '../configurations/remotePlugin'; import { RemoteOptions } from '../interfaces/RemoteOptions'; import { compileTs, @@ -14,7 +23,19 @@ import { } from './typeScriptCompiler'; describe('typeScriptCompiler', () => { + const requireFromTest = createRequire(__filename); const tmpDir = join(os.tmpdir(), 'typeScriptCompiler'); + const linkTypeScriptPackage = (projectDir: string, packageName: string) => { + const typeScriptRoot = dirname( + requireFromTest.resolve(`${packageName}/package.json`), + ); + mkdirSync(join(projectDir, 'node_modules'), { recursive: true }); + symlinkSync( + typeScriptRoot, + join(projectDir, 'node_modules/typescript'), + 'junction', + ); + }; const readJSONSync = (filePath: string) => JSON.parse(readFileSync(filePath, 'utf-8')); @@ -95,7 +116,7 @@ describe('typeScriptCompiler', () => { }; afterEach(() => { - vi.restoreAllMocks(); + rs.restoreAllMocks(); rmSync(tmpDir, { recursive: true, force: true }); mkdirSync(join(tmpDir, 'typesRemoteFolder'), { recursive: true }); }); @@ -123,9 +144,9 @@ describe('typeScriptCompiler', () => { // no files generate if empty mapToExpose }); - it('use shell option on windows when invoking compiler', async () => { - const execPromise = vi.fn().mockResolvedValue({}); - vi.spyOn(util, 'promisify').mockReturnValue( + it('does not use shell option on windows when invoking direct TypeScript compiler', async () => { + const execPromise = rs.fn().mockResolvedValue({}); + rs.spyOn(util, 'promisify').mockReturnValue( execPromise as unknown as ReturnType, ); const restorePlatform = withProcessPlatform('win32'); @@ -145,15 +166,15 @@ describe('typeScriptCompiler', () => { } expect(execPromise).toHaveBeenCalledWith( - 'npx', + process.execPath, expect.any(Array), - expect.objectContaining({ shell: true }), + expect.objectContaining({ cwd: projectRoot, shell: false }), ); }); it('disable shell option on non-windows platforms', async () => { - const execPromise = vi.fn().mockResolvedValue({}); - vi.spyOn(util, 'promisify').mockReturnValue( + const execPromise = rs.fn().mockResolvedValue({}); + rs.spyOn(util, 'promisify').mockReturnValue( execPromise as unknown as ReturnType, ); const restorePlatform = withProcessPlatform('linux'); @@ -173,15 +194,15 @@ describe('typeScriptCompiler', () => { } expect(execPromise).toHaveBeenCalledWith( - 'npx', + process.execPath, expect.any(Array), - expect.objectContaining({ shell: false }), + expect.objectContaining({ cwd: projectRoot, shell: false }), ); }); it('splits compilerInstance arguments for execFile', async () => { - const execPromise = vi.fn().mockResolvedValue({}); - vi.spyOn(util, 'promisify').mockReturnValue( + const execPromise = rs.fn().mockResolvedValue({}); + rs.spyOn(util, 'promisify').mockReturnValue( execPromise as unknown as ReturnType, ); const restorePlatform = withProcessPlatform('linux'); @@ -201,14 +222,81 @@ describe('typeScriptCompiler', () => { } const args = execPromise.mock.calls[0]?.[1] as string[]; - expect(args.slice(0, 3)).toEqual(['tsc', '--pretty', 'false']); + expect(args[0]).toMatch(/typescript[/\\]bin[/\\]tsc$/); + expect(args.slice(1, 3)).toEqual(['--pretty', 'false']); expect(args[3]).toBe('--project'); expect(args[4]).toEqual(expect.any(String)); }); + it('keeps custom compilerInstance invocations through the package manager', async () => { + const execPromise = rs.fn().mockResolvedValue({}); + rs.spyOn(util, 'promisify').mockReturnValue( + execPromise as unknown as ReturnType, + ); + const restorePlatform = withProcessPlatform('linux'); + const filepath = join(__dirname, './typeScriptCompiler.ts'); + const mapToExpose = { + tsCompiler: filepath, + }; + + try { + await compileTs( + mapToExpose, + { ...tsConfig, files: [filepath] }, + { + ...remoteOptions, + compilerInstance: 'vue-tsc --declaration false', + }, + ); + } finally { + restorePlatform(); + } + + const args = execPromise.mock.calls[0]?.[1] as string[]; + expect(execPromise).toHaveBeenCalledWith( + 'npx', + expect.any(Array), + expect.objectContaining({ cwd: projectRoot, shell: false }), + ); + expect(args.slice(0, 3)).toEqual(['vue-tsc', '--declaration', 'false']); + expect(args[3]).toBe('--project'); + expect(args[4]).toEqual(expect.any(String)); + }); + + it('uses shell option on windows for custom compilerInstance invocations', async () => { + const execPromise = rs.fn().mockResolvedValue({}); + rs.spyOn(util, 'promisify').mockReturnValue( + execPromise as unknown as ReturnType, + ); + const restorePlatform = withProcessPlatform('win32'); + const filepath = join(__dirname, './typeScriptCompiler.ts'); + const mapToExpose = { + tsCompiler: filepath, + }; + + try { + await compileTs( + mapToExpose, + { ...tsConfig, files: [filepath] }, + { + ...remoteOptions, + compilerInstance: 'vue-tsc --declaration false', + }, + ); + } finally { + restorePlatform(); + } + + expect(execPromise).toHaveBeenCalledWith( + 'npx', + expect.any(Array), + expect.objectContaining({ cwd: projectRoot, shell: true }), + ); + }); + it('does not wrap project path in single quotes on Windows (#4133)', async () => { - const execPromise = vi.fn().mockRejectedValue(new Error('tsc error')); - vi.spyOn(util, 'promisify').mockReturnValue( + const execPromise = rs.fn().mockRejectedValue(new Error('tsc error')); + rs.spyOn(util, 'promisify').mockReturnValue( execPromise as unknown as ReturnType, ); const restorePlatform = withProcessPlatform('win32'); @@ -241,6 +329,7 @@ describe('typeScriptCompiler', () => { const projectDir = join(tmpDir, 'declarationDirProject'); const srcDir = join(projectDir, 'src'); mkdirSync(srcDir, { recursive: true }); + linkTypeScriptPackage(projectDir, 'typescript'); const entryFile = join(srcDir, 'hello.ts'); writeFileSync(entryFile, 'export const hello = 1;\n'); @@ -253,10 +342,11 @@ describe('typeScriptCompiler', () => { compilerOptions: { target: 'es2017', module: 'esnext', - moduleResolution: 'node', + moduleResolution: 'node10', declaration: true, emitDeclarationOnly: true, declarationDir: 'decl-dist', + ignoreDeprecations: '6.0', }, include: ['src'], }, @@ -278,7 +368,7 @@ describe('typeScriptCompiler', () => { compilerOptions: { target: 'es2017', module: 'esnext', - moduleResolution: 'node', + moduleResolution: 'node10', strict: true, esModuleInterop: true, emitDeclarationOnly: true, @@ -287,6 +377,7 @@ describe('typeScriptCompiler', () => { outDir, declarationDir: outDir, rootDir: projectDir, + ignoreDeprecations: '6.0', }, files: [entryFile], include: [], @@ -349,6 +440,9 @@ describe('typeScriptCompiler', () => { { name: 'typeScriptCompiler.d.ts', }, + { + name: 'typeScriptResolver.d.ts', + }, ], name: 'lib', }, @@ -375,6 +469,7 @@ describe('typeScriptCompiler', () => { const projectDir = join(tmpDir, 'multiDotExposeProject'); const srcDir = join(projectDir, 'src', 'components'); mkdirSync(srcDir, { recursive: true }); + linkTypeScriptPackage(projectDir, 'typescript'); const entryFile = join(srcDir, 'foo.generated.ts'); writeFileSync(entryFile, 'export const foo = 1;\n'); @@ -387,12 +482,13 @@ describe('typeScriptCompiler', () => { compilerOptions: { target: 'es2017', module: 'esnext', - moduleResolution: 'node', + moduleResolution: 'node10', strict: true, esModuleInterop: true, declaration: true, emitDeclarationOnly: true, rootDir: projectDir, + ignoreDeprecations: '6.0', }, include: ['src'], }, @@ -414,7 +510,7 @@ describe('typeScriptCompiler', () => { compilerOptions: { target: 'es2017', module: 'esnext', - moduleResolution: 'node', + moduleResolution: 'node10', strict: true, esModuleInterop: true, emitDeclarationOnly: true, @@ -423,6 +519,7 @@ describe('typeScriptCompiler', () => { outDir, declarationDir: outDir, rootDir: projectDir, + ignoreDeprecations: '6.0', }, files: [entryFile], include: [], @@ -454,6 +551,90 @@ describe('typeScriptCompiler', () => { ); }); + it('generates declarations with TypeScript 7', async () => { + const projectDir = join(tmpDir, 'typescript7Project'); + const srcDir = join(projectDir, 'src'); + mkdirSync(srcDir, { recursive: true }); + + linkTypeScriptPackage(projectDir, 'typescript-7'); + + const entryFile = join(srcDir, 'button.ts'); + const dependencyFile = join(srcDir, 'dependency.ts'); + const unusedFile = join(srcDir, 'unused.ts'); + writeFileSync(entryFile, "export { dependency } from './dependency';\n"); + writeFileSync(dependencyFile, 'export const dependency = 1;\n'); + writeFileSync(unusedFile, 'export const unused = 1;\n'); + + writeFileSync( + join(projectDir, 'tsconfig.json'), + JSON.stringify( + { + compilerOptions: { + target: 'es2017', + module: 'commonjs', + moduleResolution: 'node10', + rootDir: './src', + outDir: './dist', + strict: true, + }, + include: ['src'], + }, + null, + 2, + ), + ); + + const { tsConfig, mapComponentsToExpose, remoteOptions } = + retrieveRemoteConfig({ + context: projectDir, + tsConfigPath: './tsconfig.json', + typesFolder: 'typesRemoteFolder', + compiledTypesFolder: 'compiledTypesFolder', + moduleFederationConfig: { + name: 'typescript7Remote', + filename: 'remoteEntry.js', + exposes: { + './button': './src/button.ts', + }, + dts: { + cwd: projectDir, + }, + }, + }); + + expect(tsConfig.compilerOptions.moduleResolution).toBe('bundler'); + + await compileTs(mapComponentsToExpose, tsConfig, remoteOptions); + + expect( + existsSync( + join( + projectDir, + 'dist/typesRemoteFolder/compiledTypesFolder/button.d.ts', + ), + ), + ).toBe(true); + expect( + existsSync( + join( + projectDir, + 'dist/typesRemoteFolder/compiledTypesFolder/dependency.d.ts', + ), + ), + ).toBe(true); + expect( + existsSync(join(projectDir, 'dist/typesRemoteFolder/button.d.ts')), + ).toBe(true); + expect( + existsSync( + join( + projectDir, + 'dist/typesRemoteFolder/compiledTypesFolder/unused.d.ts', + ), + ), + ).toBe(false); + }); + it('with additionalFilesToCompile', async () => { const filepath = join(__dirname, './typeScriptCompiler.ts'); @@ -542,6 +723,9 @@ describe('typeScriptCompiler', () => { { name: 'typeScriptCompiler.d.ts', }, + { + name: 'typeScriptResolver.d.ts', + }, { name: 'utils.d.ts', }, diff --git a/packages/dts-plugin/src/core/lib/typeScriptCompiler.ts b/packages/dts-plugin/src/core/lib/typeScriptCompiler.ts index 9127629e36c..f65ff46472a 100644 --- a/packages/dts-plugin/src/core/lib/typeScriptCompiler.ts +++ b/packages/dts-plugin/src/core/lib/typeScriptCompiler.ts @@ -21,6 +21,7 @@ import { TEMP_DIR } from '@module-federation/sdk'; import { RemoteOptions } from '../interfaces/RemoteOptions'; import { TsConfigJson } from '../interfaces/TsConfigJson'; import { logger } from '../../server'; +import { getTypeScriptPackageInfo } from './typeScriptResolver'; const STARTS_WITH_SLASH = /^\//; @@ -239,6 +240,49 @@ const formatCommandForDisplay = (executable: string, args: string[]) => { return [executable, ...args].map(formatArg).join(' '); }; +const getTypeScriptContext = (remoteOptions: Required) => { + const dtsOptions = remoteOptions.moduleFederationConfig.dts; + return typeof dtsOptions !== 'boolean' && dtsOptions?.cwd + ? dtsOptions.cwd + : remoteOptions.context; +}; + +const resolveCompilerCommand = ( + remoteOptions: Required, + tempTsConfigJsonPath: string, +) => { + const compilerArgs = splitCommandArgs(remoteOptions.compilerInstance); + const resolvedCompilerArgs = + compilerArgs.length > 0 ? compilerArgs : [remoteOptions.compilerInstance]; + + if (resolvedCompilerArgs[0] === 'tsc') { + const typeScriptPackageInfo = getTypeScriptPackageInfo( + getTypeScriptContext(remoteOptions), + ); + const args = [ + typeScriptPackageInfo.tscBinPath, + ...resolvedCompilerArgs.slice(1), + '--project', + tempTsConfigJsonPath, + ]; + return { + executable: process.execPath, + args, + displayCommand: formatCommandForDisplay(process.execPath, args), + shell: false, + }; + } + + const executable = resolvePackageManagerExecutable(); + const args = [...resolvedCompilerArgs, '--project', tempTsConfigJsonPath]; + return { + executable, + args, + displayCommand: formatCommandForDisplay(executable, args), + shell: process.platform === 'win32', + }; +}; + export const compileTs = async ( mapComponentsToExpose: Record, tsConfig: TsConfigJson, @@ -268,23 +312,14 @@ export const compileTs = async ( : undefined, }); const execPromise = util.promisify(execFile); - const pmExecutable = resolvePackageManagerExecutable(); - const compilerArgs = splitCommandArgs(remoteOptions.compilerInstance); - const resolvedCompilerArgs = - compilerArgs.length > 0 ? compilerArgs : [remoteOptions.compilerInstance]; - const cmdArgs = [ - ...resolvedCompilerArgs, - '--project', + const compilerCommand = resolveCompilerCommand( + remoteOptions, tempTsConfigJsonPath, - ]; - const cmd = formatCommandForDisplay(pmExecutable, cmdArgs); + ); try { - await execPromise(pmExecutable, cmdArgs, { - cwd: - typeof remoteOptions.moduleFederationConfig.dts !== 'boolean' - ? (remoteOptions.moduleFederationConfig.dts?.cwd ?? undefined) - : undefined, - shell: process.platform === 'win32', + await execPromise(compilerCommand.executable, compilerCommand.args, { + cwd: getTypeScriptContext(remoteOptions), + shell: compilerCommand.shell, }); } catch (err) { if (compilerOptions.tsBuildInfoFile) { @@ -297,7 +332,7 @@ export const compileTs = async ( logAndReport( TYPE_001, typeDescMap, - { cmd }, + { cmd: compilerCommand.displayCommand }, (msg) => { throw new Error(msg); }, diff --git a/packages/dts-plugin/src/core/lib/typeScriptResolver.ts b/packages/dts-plugin/src/core/lib/typeScriptResolver.ts new file mode 100644 index 00000000000..831f1bdad20 --- /dev/null +++ b/packages/dts-plugin/src/core/lib/typeScriptResolver.ts @@ -0,0 +1,98 @@ +import { createRequire } from 'module'; +import { dirname, resolve } from 'path'; + +interface TypeScriptPackageJson { + version?: string; + bin?: string | Record; +} + +interface ResolvedTypeScriptPackage { + packageJsonPath: string; + packageJson: TypeScriptPackageJson; + requireFromContext: NodeJS.Require; +} + +export interface TypeScriptPackageInfo { + packageJsonPath: string; + packageRoot: string; + version: string; + majorVersion: number; + tscBinPath: string; +} + +const parseMajorVersion = (version: string): number => { + const major = Number.parseInt(version.split('.')[0], 10); + return Number.isNaN(major) ? 0 : major; +}; + +const isMissingTypeScriptPackage = (error: unknown) => + typeof error === 'object' && + error !== null && + 'code' in error && + error.code === 'MODULE_NOT_FOUND' && + 'message' in error && + typeof error.message === 'string' && + error.message.includes('typescript/package.json'); + +const resolveTypeScriptPackage = ( + context = process.cwd(), +): ResolvedTypeScriptPackage => { + const candidateContexts = [...new Set([context, process.cwd()])]; + let missingTypeScriptError: unknown; + + for (const candidateContext of candidateContexts) { + const requireFromContext = createRequire( + resolve(candidateContext, 'package.json'), + ); + try { + const packageJsonPath = requireFromContext.resolve( + 'typescript/package.json', + ); + return { + packageJsonPath, + packageJson: requireFromContext( + 'typescript/package.json', + ) as TypeScriptPackageJson, + requireFromContext, + }; + } catch (error) { + if (!isMissingTypeScriptPackage(error)) { + throw error; + } + missingTypeScriptError = error; + } + } + + throw missingTypeScriptError; +}; + +export const getTypeScriptPackageInfo = ( + context = process.cwd(), +): TypeScriptPackageInfo => { + const { packageJsonPath, packageJson } = resolveTypeScriptPackage(context); + const version = packageJson.version || '0.0.0'; + const packageRoot = dirname(packageJsonPath); + const bin = + typeof packageJson.bin === 'string' + ? packageJson.bin + : (packageJson.bin?.['tsc'] ?? './bin/tsc'); + + return { + packageJsonPath, + packageRoot, + version, + majorVersion: parseMajorVersion(version), + tscBinPath: resolve(packageRoot, bin), + }; +}; + +export const getTypeScriptMajorVersion = (context = process.cwd()) => + getTypeScriptPackageInfo(context).majorVersion; + +export const isTypeScript7 = (context = process.cwd()) => + getTypeScriptMajorVersion(context) === 7; + +export const requireTypeScript = (context = process.cwd()): T => { + const { requireFromContext } = resolveTypeScriptPackage(context); + return requireFromContext('typescript') as T; +}; diff --git a/packages/dts-plugin/src/core/lib/utils.spec.ts b/packages/dts-plugin/src/core/lib/utils.spec.ts index 1ce93e0fb19..ca3f1a07336 100644 --- a/packages/dts-plugin/src/core/lib/utils.spec.ts +++ b/packages/dts-plugin/src/core/lib/utils.spec.ts @@ -1,4 +1,4 @@ -import { it, describe, expect, vi } from 'vitest'; +import { it, describe, expect, rs } from '@rstest/core'; import { nativeFetch, cloneDeepOptions } from './utils'; import type { DTSManagerOptions } from '../interfaces/DTSManagerOptions'; @@ -6,13 +6,13 @@ it('nativeFetch should merge MF_ENV_HEADERS into request headers', async () => { const prevEnv = process.env['MF_ENV_HEADERS']; process.env['MF_ENV_HEADERS'] = JSON.stringify({ 'x-test': '1' }); - const fetchMock = vi.fn().mockResolvedValue({ + const fetchMock = rs.fn().mockResolvedValue({ ok: true, status: 200, headers: new Headers({ 'content-type': 'text/plain' }), - text: vi.fn().mockResolvedValue('ok'), + text: rs.fn().mockResolvedValue('ok'), }); - vi.stubGlobal('fetch', fetchMock); + rs.stubGlobal('fetch', fetchMock); const res = await nativeFetch('http://localhost'); @@ -24,7 +24,7 @@ it('nativeFetch should merge MF_ENV_HEADERS into request headers', async () => { ); expect(res.data).toBe('ok'); - vi.unstubAllGlobals(); + rs.unstubAllGlobals(); process.env['MF_ENV_HEADERS'] = prevEnv; }); @@ -32,13 +32,13 @@ it('nativeFetch should return arraybuffer when responseType is arraybuffer', asy const buf = Buffer.from('hello'); const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); - const fetchMock = vi.fn().mockResolvedValue({ + const fetchMock = rs.fn().mockResolvedValue({ ok: true, status: 200, headers: new Headers({ 'content-type': 'application/zip' }), - arrayBuffer: vi.fn().mockResolvedValue(ab), + arrayBuffer: rs.fn().mockResolvedValue(ab), }); - vi.stubGlobal('fetch', fetchMock); + rs.stubGlobal('fetch', fetchMock); const res = await nativeFetch('http://localhost/file.zip', { responseType: 'arraybuffer', @@ -46,7 +46,7 @@ it('nativeFetch should return arraybuffer when responseType is arraybuffer', asy expect(res.data).toBeInstanceOf(ArrayBuffer); - vi.unstubAllGlobals(); + rs.unstubAllGlobals(); }); describe('cloneDeepOptions', () => { diff --git a/packages/dts-plugin/src/core/rpc/__snapshots__/wrap-rpc.spec.ts.snap b/packages/dts-plugin/src/core/rpc/__snapshots__/wrap-rpc.spec.ts.snap index ddc6b6b2d9b..3793b234db9 100644 --- a/packages/dts-plugin/src/core/rpc/__snapshots__/wrap-rpc.spec.ts.snap +++ b/packages/dts-plugin/src/core/rpc/__snapshots__/wrap-rpc.spec.ts.snap @@ -1,43 +1,4 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`wrapRpc > once > rejects on process close with %p { code: -1, signal: undefined, message: 'Process 1234 exited with code -1' } 1`] = ` -[ - Any, -] -`; - -exports[`wrapRpc > once > rejects on process close with %p { code: -1, signal: undefined, message: 'Process 1234 exited with code -1' } 2`] = ` -{ - "close": [], - "message": [], -} -`; - -exports[`wrapRpc > once > rejects on process close with %p { code: 100, signal: 'SIGINT', message: 'Process 1234 exited with code 100 [SIGINT]' } 1`] = ` -[ - Any, -] -`; - -exports[`wrapRpc > once > rejects on process close with %p { code: 100, signal: 'SIGINT', message: 'Process 1234 exited with code 100 [SIGINT]' } 2`] = ` -{ - "close": [], - "message": [], -} -`; - -exports[`wrapRpc > once > rejects on process close with %p { code: undefined, signal: undefined, message: 'Process 1234 exited' } 1`] = ` -[ - Any, -] -`; - -exports[`wrapRpc > once > rejects on process close with %p { code: undefined, signal: undefined, message: 'Process 1234 exited' } 2`] = ` -{ - "close": [], - "message": [], -} -`; +// Rstest Snapshot v1 exports[`wrapRpc > once > rejects on valid reject message 1`] = ` [ @@ -68,45 +29,6 @@ exports[`wrapRpc > resident process > ignores invalid message 2`] = ` } `; -exports[`wrapRpc > resident process > rejects on process close with %p { code: -1, signal: undefined, message: 'Process 1234 exited with code -1' } 1`] = ` -[ - Any, -] -`; - -exports[`wrapRpc > resident process > rejects on process close with %p { code: -1, signal: undefined, message: 'Process 1234 exited with code -1' } 2`] = ` -{ - "close": [], - "message": [], -} -`; - -exports[`wrapRpc > resident process > rejects on process close with %p { code: 100, signal: 'SIGINT', message: 'Process 1234 exited with code 100 [SIGINT]' } 1`] = ` -[ - Any, -] -`; - -exports[`wrapRpc > resident process > rejects on process close with %p { code: 100, signal: 'SIGINT', message: 'Process 1234 exited with code 100 [SIGINT]' } 2`] = ` -{ - "close": [], - "message": [], -} -`; - -exports[`wrapRpc > resident process > rejects on process close with %p { code: undefined, signal: undefined, message: 'Process 1234 exited' } 1`] = ` -[ - Any, -] -`; - -exports[`wrapRpc > resident process > rejects on process close with %p { code: undefined, signal: undefined, message: 'Process 1234 exited' } 2`] = ` -{ - "close": [], - "message": [], -} -`; - exports[`wrapRpc > resident process > rejects on send error 1`] = ` { "close": [ diff --git a/packages/dts-plugin/src/core/rpc/wrap-rpc.spec.ts b/packages/dts-plugin/src/core/rpc/wrap-rpc.spec.ts index 4cf886f542c..6773ca08093 100644 --- a/packages/dts-plugin/src/core/rpc/wrap-rpc.spec.ts +++ b/packages/dts-plugin/src/core/rpc/wrap-rpc.spec.ts @@ -1,5 +1,5 @@ import { ChildProcess } from 'child_process'; -import { describe, expect, it, vi, beforeEach } from 'vitest'; +import { describe, expect, it, rs, beforeEach } from '@rstest/core'; import { randomUUID } from 'crypto'; import { RpcExitError, wrapRpc, RpcMessage, RpcGMCallTypes } from './index'; @@ -21,8 +21,8 @@ describe('wrapRpc', () => { childProcessMock = { connected: true, pid: 1234, - send: vi.spyOn(mockChildProcessFn, 'send'), - on: vi + send: rs.spyOn(mockChildProcessFn, 'send'), + on: rs .fn() .mockImplementation( (name: string, handlerToAdd: (...args: unknown[]) => void) => { @@ -39,7 +39,7 @@ describe('wrapRpc', () => { }); }, ), - once: vi + once: rs .fn() .mockImplementation( (name: string, handlerToAdd: (...args: unknown[]) => void) => { @@ -52,7 +52,7 @@ describe('wrapRpc', () => { }); }, ), - off: vi + off: rs .fn() .mockImplementation( (name: string, handlerToRemove: (...args: unknown[]) => void) => { @@ -64,7 +64,7 @@ describe('wrapRpc', () => { ); }, ), - kill: vi.fn().mockImplementation((signal?: NodeJS.Signals | number) => { + kill: rs.fn().mockImplementation((signal?: NodeJS.Signals | number) => { const handlerName = 'close'; if (!eventHandlers[handlerName]) { return; @@ -155,7 +155,7 @@ describe('wrapRpc', () => { value: 41, }); - expect(promise).resolves.toEqual(41); + await expect(promise).resolves.toEqual(41); expect(eventHandlers).toMatchSnapshot({ message: [expect.any(Function)], close: [expect.any(Function)], @@ -176,7 +176,7 @@ describe('wrapRpc', () => { error: 'sad error', }); - expect(promise).rejects.toEqual('sad error'); + await expect(promise).rejects.toEqual('sad error'); expect(eventHandlers).toMatchSnapshot({ message: [expect.any(Function)], close: [expect.any(Function)], @@ -184,7 +184,7 @@ describe('wrapRpc', () => { }); it('rejects on send error', async () => { - childProcessMock.send = vi + childProcessMock.send = rs .fn() .mockImplementation((message, callback) => { callback(new Error('cannot send')); @@ -192,7 +192,7 @@ describe('wrapRpc', () => { const wrapped = wrapRpc<() => void>(childProcessMock, { id: randomUUID(), }); - expect(wrapped()).rejects.toEqual(new Error('cannot send')); + await expect(wrapped()).rejects.toEqual(new Error('cannot send')); expect(eventHandlers).toMatchSnapshot({ message: [expect.any(Function)], close: [expect.any(Function)], @@ -218,15 +218,15 @@ describe('wrapRpc', () => { id: randomUUID(), }); const promise = wrapped(); - expect(eventHandlers['close']).toMatchSnapshot([expect.any(Function)]); + expect(eventHandlers['close']).toEqual([expect.any(Function)]); const triggerClose = eventHandlers['close'][0]; triggerClose(code, signal); - expect(promise).rejects.toEqual( + await expect(promise).rejects.toEqual( new RpcExitError(message, code, signal), ); - expect(eventHandlers).toMatchSnapshot({ + expect(eventHandlers).toEqual({ message: [], close: [], }); @@ -263,7 +263,7 @@ describe('wrapRpc', () => { value: 41, }); - expect(promise).resolves.toEqual(41); + await expect(promise).resolves.toEqual(41); expect(eventHandlers).toEqual({ message: [], close: [], @@ -284,7 +284,7 @@ describe('wrapRpc', () => { error: 'sad error', }); - expect(promise).rejects.toEqual('sad error'); + await expect(promise).rejects.toEqual('sad error'); expect(eventHandlers).toEqual({ message: [], close: [], @@ -311,15 +311,15 @@ describe('wrapRpc', () => { once: true, }); const promise = wrapped(); - expect(eventHandlers['close']).toMatchSnapshot([expect.any(Function)]); + expect(eventHandlers['close']).toEqual([expect.any(Function)]); const triggerClose = eventHandlers['close'][0]; triggerClose(code, signal); - expect(promise).rejects.toEqual( + await expect(promise).rejects.toEqual( new RpcExitError(message, code, signal), ); - expect(eventHandlers).toMatchSnapshot({ + expect(eventHandlers).toEqual({ message: [], close: [], }); diff --git a/packages/dts-plugin/src/dev-worker/handleWorkerMessage.spec.ts b/packages/dts-plugin/src/dev-worker/handleWorkerMessage.spec.ts index c347a6f65eb..f57bc9494ff 100644 --- a/packages/dts-plugin/src/dev-worker/handleWorkerMessage.spec.ts +++ b/packages/dts-plugin/src/dev-worker/handleWorkerMessage.spec.ts @@ -1,15 +1,15 @@ -import { describe, expect, it, vi, afterEach } from 'vitest'; +import { describe, expect, it, rs, afterEach } from '@rstest/core'; import { RpcGMCallTypes } from '../core/rpc/types'; import { handleDevWorkerMessage } from './handleWorkerMessage'; describe('handleDevWorkerMessage', () => { afterEach(() => { - vi.restoreAllMocks(); + rs.restoreAllMocks(); }); it('does not throw when EXIT arrives before module server is initialized', () => { - const processExit = vi.fn(); + const processExit = rs.fn(); expect(() => handleDevWorkerMessage( @@ -17,7 +17,7 @@ describe('handleDevWorkerMessage', () => { type: RpcGMCallTypes.EXIT, id: 'exit-before-init', }, - { processExit, log: vi.fn() }, + { processExit, log: rs.fn() }, ), ).not.toThrow(); @@ -25,9 +25,9 @@ describe('handleDevWorkerMessage', () => { }); it('calls module server exit when present', () => { - const processExit = vi.fn(); + const processExit = rs.fn(); const moduleServer = { - exit: vi.fn(), + exit: rs.fn(), }; handleDevWorkerMessage( @@ -35,7 +35,7 @@ describe('handleDevWorkerMessage', () => { type: RpcGMCallTypes.EXIT, id: 'exit-with-server', }, - { moduleServer, processExit, log: vi.fn() }, + { moduleServer, processExit, log: rs.fn() }, ); expect(moduleServer.exit).toHaveBeenCalledTimes(1); @@ -43,9 +43,9 @@ describe('handleDevWorkerMessage', () => { }); it('ignores non-exit messages', () => { - const processExit = vi.fn(); + const processExit = rs.fn(); const moduleServer = { - exit: vi.fn(), + exit: rs.fn(), }; handleDevWorkerMessage( @@ -54,7 +54,7 @@ describe('handleDevWorkerMessage', () => { id: 'message', args: [], }, - { moduleServer, processExit, log: vi.fn() }, + { moduleServer, processExit, log: rs.fn() }, ); expect(moduleServer.exit).not.toHaveBeenCalled(); diff --git a/packages/dts-plugin/src/plugins/GenerateTypesPlugin.test.ts b/packages/dts-plugin/src/plugins/GenerateTypesPlugin.test.ts index b4e76b3ada9..141d47292cc 100644 --- a/packages/dts-plugin/src/plugins/GenerateTypesPlugin.test.ts +++ b/packages/dts-plugin/src/plugins/GenerateTypesPlugin.test.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { describe, expect, it, vi, beforeEach } from 'vitest'; +import { describe, expect, it, rs, beforeEach } from '@rstest/core'; import { callAfterGenerateHook, isSafeRelativePath, @@ -8,11 +8,11 @@ import { GenerateTypesPlugin, } from './GenerateTypesPlugin'; -vi.mock('../core/index', () => ({ - validateOptions: vi.fn(), - generateTypes: vi.fn().mockResolvedValue(undefined), - generateTypesInChildProcess: vi.fn().mockResolvedValue(undefined), - retrieveTypesAssetsInfo: vi.fn().mockReturnValue({ +rs.mock('../core/index', () => ({ + validateOptions: rs.fn(), + generateTypes: rs.fn().mockResolvedValue(undefined), + generateTypesInChildProcess: rs.fn().mockResolvedValue(undefined), + retrieveTypesAssetsInfo: rs.fn().mockReturnValue({ zipTypesPath: undefined, apiTypesPath: undefined, zipName: '@mf-types.zip', @@ -20,10 +20,10 @@ vi.mock('../core/index', () => ({ }), })); -const { mockIsDev } = vi.hoisted(() => ({ mockIsDev: vi.fn() })); -vi.mock('./utils', () => ({ +const { mockIsDev } = rs.hoisted(() => ({ mockIsDev: rs.fn() })); +rs.mock('./utils', () => ({ isDev: mockIsDev, - getCompilerOutputDir: vi.fn().mockReturnValue('dist'), + getCompilerOutputDir: rs.fn().mockReturnValue('dist'), })); function createMockCompiler() { @@ -32,13 +32,13 @@ function createMockCompiler() { const compilation = { hooks: { processAssets: { - tapPromise: vi.fn((_opts: unknown, fn: () => Promise) => { + tapPromise: rs.fn((_opts: unknown, fn: () => Promise) => { processAssetsCallbacks.push(fn); }), }, }, - getAsset: vi.fn().mockReturnValue(undefined), - emitAsset: vi.fn(), + getAsset: rs.fn().mockReturnValue(undefined), + emitAsset: rs.fn(), constructor: { PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER: 10000 }, }; @@ -47,7 +47,7 @@ function createMockCompiler() { outputPath: '/project/dist', hooks: { thisCompilation: { - tap: vi.fn((_name: string, fn: (c: typeof compilation) => void) => { + tap: rs.fn((_name: string, fn: (c: typeof compilation) => void) => { fn(compilation); }), }, @@ -77,19 +77,19 @@ describe('afterGenerate callback', () => { }; beforeEach(() => { - vi.clearAllMocks(); + rs.clearAllMocks(); }); it('should call afterGenerate after type generation in prod', async () => { mockIsDev.mockReturnValue(false); - const afterGenerate = vi.fn().mockResolvedValue(undefined); + const afterGenerate = rs.fn().mockResolvedValue(undefined); const { compiler, triggerProcessAssets } = createMockCompiler(); const plugin = new GenerateTypesPlugin( basePluginOptions, { generateTypes: { afterGenerate } }, Promise.resolve(undefined), - vi.fn(), + rs.fn(), ); plugin.apply(compiler as any); await triggerProcessAssets(); @@ -99,19 +99,19 @@ describe('afterGenerate callback', () => { it('should call afterGenerate after type generation in dev', async () => { mockIsDev.mockReturnValue(true); - const afterGenerate = vi.fn().mockResolvedValue(undefined); + const afterGenerate = rs.fn().mockResolvedValue(undefined); const { compiler, triggerProcessAssets } = createMockCompiler(); const plugin = new GenerateTypesPlugin( basePluginOptions, { generateTypes: { afterGenerate } }, Promise.resolve(undefined), - vi.fn(), + rs.fn(), ); plugin.apply(compiler as any); await triggerProcessAssets(); // In dev mode emitTypesFilesPromise is not awaited, flush microtasks - await vi.waitFor(() => expect(afterGenerate).toHaveBeenCalledOnce()); + await rs.waitFor(() => expect(afterGenerate).toHaveBeenCalledOnce()); }); it('should not throw when afterGenerate is not provided', async () => { @@ -122,7 +122,7 @@ describe('afterGenerate callback', () => { basePluginOptions, { generateTypes: true }, Promise.resolve(undefined), - vi.fn(), + rs.fn(), ); plugin.apply(compiler as any); @@ -131,7 +131,7 @@ describe('afterGenerate callback', () => { it('should not call afterGenerate when asset already exists (early return)', async () => { mockIsDev.mockReturnValue(false); - const afterGenerate = vi.fn(); + const afterGenerate = rs.fn(); const { compiler, compilation, triggerProcessAssets } = createMockCompiler(); compilation.getAsset.mockReturnValue({}); @@ -140,7 +140,7 @@ describe('afterGenerate callback', () => { basePluginOptions, { generateTypes: { afterGenerate } }, Promise.resolve(undefined), - vi.fn(), + rs.fn(), ); plugin.apply(compiler as any); await triggerProcessAssets(); @@ -151,7 +151,7 @@ describe('afterGenerate callback', () => { it('should await async afterGenerate before continuing', async () => { mockIsDev.mockReturnValue(false); const order: string[] = []; - const afterGenerate = vi.fn(async () => { + const afterGenerate = rs.fn(async () => { order.push('callback'); }); const { compiler, triggerProcessAssets } = createMockCompiler(); @@ -160,7 +160,7 @@ describe('afterGenerate callback', () => { basePluginOptions, { generateTypes: { afterGenerate } }, Promise.resolve(undefined), - vi.fn(), + rs.fn(), ); plugin.apply(compiler as any); order.push('before'); @@ -344,7 +344,7 @@ describe('GenerateTypesPlugin', () => { describe('afterGenerate', () => { it('should call afterGenerate with generated asset info', async () => { - const afterGenerate = vi.fn(); + const afterGenerate = rs.fn(); await callAfterGenerateHook({ dtsManagerOptions: { @@ -376,7 +376,7 @@ describe('GenerateTypesPlugin', () => { remote: { moduleFederationConfig: basePluginOptions, abortOnError: false, - afterGenerate: vi + afterGenerate: rs .fn() .mockRejectedValue(new Error('hook failed')), }, diff --git a/packages/dts-plugin/src/server/broker/Broker.ts b/packages/dts-plugin/src/server/broker/Broker.ts index 4fdca8ec15b..c214dec2e3c 100644 --- a/packages/dts-plugin/src/server/broker/Broker.ts +++ b/packages/dts-plugin/src/server/broker/Broker.ts @@ -1,7 +1,6 @@ import { IncomingMessage, createServer } from 'http'; import { UpdateMode } from '../constant'; import WebSocket from 'isomorphic-ws'; -import schedule from 'node-schedule'; import { parse } from 'url'; import { Publisher } from '../Publisher'; import { getIdentifier, fileLog, error } from '../utils'; @@ -32,6 +31,59 @@ import { DEFAULT_WEB_SOCKET_PORT, WEB_SOCKET_CONNECT_MAGIC_ID as DEFAULT_WEB_SOCKET_CONNECT_MAGIC_ID, } from '../constant'; + +const CLEANUP_HOURS = [0, 3, 6, 9, 12, 15, 18]; + +interface ScheduledTask { + cancel(): void; +} + +export function getNextCleanupDelay(now = new Date()): number { + for (const hour of CLEANUP_HOURS) { + const candidate = new Date(now); + candidate.setHours(hour, 0, 0, 0); + if (candidate.getTime() > now.getTime()) { + return candidate.getTime() - now.getTime(); + } + } + + const nextDay = new Date(now); + nextDay.setDate(nextDay.getDate() + 1); + nextDay.setHours(CLEANUP_HOURS[0], 0, 0, 0); + return nextDay.getTime() - now.getTime(); +} + +export function scheduleCleanup( + callback: () => void, + testIntervalMs = 0, +): ScheduledTask { + let timeout: ReturnType | undefined; + let cancelled = false; + + const scheduleNext = () => { + const delay = testIntervalMs > 0 ? testIntervalMs : getNextCleanupDelay(); + timeout = setTimeout(() => { + if (cancelled) { + return; + } + callback(); + scheduleNext(); + }, delay); + }; + + scheduleNext(); + + return { + cancel() { + cancelled = true; + if (timeout) { + clearTimeout(timeout); + timeout = undefined; + } + }, + }; +} + export class Broker { static readonly WEB_SOCKET_CONNECT_MAGIC_ID = DEFAULT_WEB_SOCKET_CONNECT_MAGIC_ID; @@ -44,7 +96,7 @@ export class Broker { private _webSocketServer?: WebSocket.Server; private _secureWebSocketServer?: WebSocket.Server; private _tmpSubscriberShelter: TmpSubscriberShelter = new Map(); - private _scheduleJob: schedule.Job | null = null; + private _scheduleJob: ScheduledTask | null = null; constructor() { this._setSchedule(); @@ -680,24 +732,11 @@ export class Broker { }); } - // Every day on 0/6/9/12/15//18, Publishers that have not been connected within 1.5 hours will be cleared regularly. + // Every day at 0/3/6/9/12/15/18, publishers that have not been connected within 1.5 hours will be cleared. // If process.env.FEDERATION_SERVER_TEST is set, it will be read at a specified time. private _setSchedule(): void { - const rule = new schedule.RecurrenceRule(); - if (Number(process.env['FEDERATION_SERVER_TEST'])) { - const interval = Number(process.env['FEDERATION_SERVER_TEST']) / 1000; - const second = []; - for (let i = 0; i < 60; i = i + interval) { - second.push(i); - } - rule.second = second; - } else { - rule.second = 0; - rule.hour = [0, 3, 6, 9, 12, 15, 18]; - rule.minute = 0; - } const serverTest = Number(process.env['FEDERATION_SERVER_TEST']); - this._scheduleJob = schedule.scheduleJob(rule, () => { + this._scheduleJob = scheduleCleanup(() => { this._tmpSubscriberShelter.forEach((tmpSubscriber, identifier) => { fileLog( ` _clearTmpSubScriberRelation ${identifier}, ${ @@ -718,7 +757,7 @@ export class Broker { this._clearTmpSubScriberRelation(identifier); } }); - }); + }, serverTest); } private _clearSchedule(): void { diff --git a/packages/dts-plugin/src/server/broker/schedule.spec.ts b/packages/dts-plugin/src/server/broker/schedule.spec.ts new file mode 100644 index 00000000000..40c69f59dfe --- /dev/null +++ b/packages/dts-plugin/src/server/broker/schedule.spec.ts @@ -0,0 +1,37 @@ +import { describe, expect, it, rs } from '@rstest/core'; +import { getNextCleanupDelay, scheduleCleanup } from './Broker'; + +describe('broker cleanup schedule', () => { + it('calculates the next configured cleanup time', () => { + const now = new Date(2026, 0, 1, 7, 30, 0, 0); + const next = new Date(now.getTime() + getNextCleanupDelay(now)); + + expect(next.getFullYear()).toBe(2026); + expect(next.getMonth()).toBe(0); + expect(next.getDate()).toBe(1); + expect(next.getHours()).toBe(9); + expect(next.getMinutes()).toBe(0); + }); + + it('rolls over to midnight after the last cleanup time', () => { + const now = new Date(2026, 0, 1, 19, 0, 0, 0); + const next = new Date(now.getTime() + getNextCleanupDelay(now)); + + expect(next.getDate()).toBe(2); + expect(next.getHours()).toBe(0); + }); + + it('runs at the test interval and stops after cancellation', async () => { + rs.useFakeTimers(); + const callback = rs.fn(); + const task = scheduleCleanup(callback, 5_000); + + await rs.advanceTimersByTimeAsync(10_000); + expect(callback).toHaveBeenCalledTimes(2); + + task.cancel(); + await rs.advanceTimersByTimeAsync(10_000); + expect(callback).toHaveBeenCalledTimes(2); + rs.useRealTimers(); + }); +}); diff --git a/packages/dts-plugin/tests/vue-tsc2/index.spec.ts b/packages/dts-plugin/tests/vue-tsc2/index.spec.ts index f1a72b7daa0..cacd734df8d 100644 --- a/packages/dts-plugin/tests/vue-tsc2/index.spec.ts +++ b/packages/dts-plugin/tests/vue-tsc2/index.spec.ts @@ -1,6 +1,6 @@ import dirTree from 'directory-tree'; import { join } from 'path'; -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { generateTypes, type RemoteOptions } from '../../src/core'; const TEST_DIT_DIR = 'dist-test'; diff --git a/packages/dts-plugin/tsconfig.json b/packages/dts-plugin/tsconfig.json index bfa0f38e587..3d118b9d2c0 100644 --- a/packages/dts-plugin/tsconfig.json +++ b/packages/dts-plugin/tsconfig.json @@ -4,7 +4,6 @@ "sourceMap": false, "target": "es6", "module": "esnext", - "moduleResolution": "node", "esModuleInterop": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, @@ -12,7 +11,8 @@ "declaration": true, "allowJs": true, "lib": ["ES2021", "DOM"], - "types": ["node"] + "types": ["node"], + "ignoreDeprecations": "6.0" }, "include": ["src", "__tests__"] } diff --git a/packages/dts-plugin/tsconfig.spec.json b/packages/dts-plugin/tsconfig.spec.json index 7eb929b6c93..41981fbd402 100644 --- a/packages/dts-plugin/tsconfig.spec.json +++ b/packages/dts-plugin/tsconfig.spec.json @@ -10,5 +10,5 @@ }, "files": [], "include": [], - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] + "exclude": ["rstest.config.mts", "src/**/*.spec.ts", "src/**/*.test.ts"] } diff --git a/packages/dts-plugin/vite.config.mts b/packages/dts-plugin/vite.config.mts deleted file mode 100644 index 058c29f4b7d..00000000000 --- a/packages/dts-plugin/vite.config.mts +++ /dev/null @@ -1,24 +0,0 @@ -/// -import { defineConfig } from 'vite'; - -import tsconfigPaths from 'vite-tsconfig-paths'; - -export default defineConfig({ - cacheDir: '../../node_modules/.vitest/dts-plugin', - - plugins: [tsconfigPaths()], - - test: { - cache: { - dir: '../../node_modules/.vitest', - }, - environment: 'node', - include: [ - 'src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}', - 'tests/**/*.spec.ts', - ], - reporters: ['default'], - testTimeout: 60000, - globalSetup: ['./tests/setup.ts'], - }, -}); diff --git a/packages/enhanced/CHANGELOG.md b/packages/enhanced/CHANGELOG.md index 797c9a72fe5..89a61b66117 100644 --- a/packages/enhanced/CHANGELOG.md +++ b/packages/enhanced/CHANGELOG.md @@ -1,5 +1,49 @@ # @module-federation/enhanced +## 2.8.0 + +### Patch Changes + +- ea490ae: Allow builds to exclude unused remote consumption and shared capabilities, and automatically omit Webpack container initialization when no exposes are configured. +- 6ee67dc: Reduce installed and bundled size by replacing general-purpose cache, path, version, package lookup, scheduling, fetch, and error fallback dependencies with focused built-in utilities. +- 681e5d2: feat(dts-plugin): support ts 7 for federated type generation while keeping existing ts versions supported +- Updated dependencies [d6a76d8] +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] +- Updated dependencies [a5633f8] + - @module-federation/manifest@2.8.0 + - @module-federation/rspack@2.8.0 + - @module-federation/sdk@2.8.0 + - @module-federation/webpack-bundler-runtime@2.8.0 + - @module-federation/bridge-react-webpack-plugin@2.8.0 + - @module-federation/dts-plugin@2.8.0 + - @module-federation/managers@2.8.0 + - @module-federation/cli@2.8.0 + - @module-federation/runtime-tools@2.8.0 + - @module-federation/inject-external-runtime-core-plugin@2.8.0 + - @module-federation/error-codes@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [a7351f3] +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] +- Updated dependencies [a5f123a] + - @module-federation/dts-plugin@2.7.0 + - @module-federation/sdk@2.7.0 + - @module-federation/managers@2.7.0 + - @module-federation/manifest@2.7.0 + - @module-federation/cli@2.7.0 + - @module-federation/rspack@2.7.0 + - @module-federation/bridge-react-webpack-plugin@2.7.0 + - @module-federation/webpack-bundler-runtime@2.7.0 + - @module-federation/runtime-tools@2.7.0 + - @module-federation/inject-external-runtime-core-plugin@2.7.0 + - @module-federation/error-codes@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/enhanced/package.json b/packages/enhanced/package.json index 9ab8006b5be..803aa1dc3d2 100644 --- a/packages/enhanced/package.json +++ b/packages/enhanced/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/enhanced", - "version": "2.6.0", + "version": "2.8.0", "main": "./dist/src/index.js", "types": "./dist/src/index.d.ts", "repository": { @@ -21,7 +21,7 @@ "access": "public" }, "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", + "typescript": "^4.9.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "vue-tsc": ">=1.0.24", "webpack": "^5.0.0" }, @@ -77,9 +77,10 @@ "devDependencies": { "ajv": "^8.18.0", "enhanced-resolve": "^5.0.0", - "terser": "^5.37.0", "fast-glob": "3.3.3", - "memfs": "4.46.0" + "memfs": "4.46.0", + "terser": "^5.37.0", + "typescript": "7.0.2" }, "dependencies": { "@module-federation/webpack-bundler-runtime": "workspace:*", @@ -93,7 +94,6 @@ "@module-federation/runtime-tools": "workspace:*", "@module-federation/sdk": "workspace:*", "@module-federation/cli": "workspace:*", - "upath": "2.0.1", "schema-utils": "4.3.0", "tapable": "2.3.0" }, @@ -101,7 +101,7 @@ "generate:schema": "node src/scripts/compile-schema.js && node src/scripts/generate-sdk-types.js", "build": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && pnpm -C . exec tsdown --config tsdown.config.mts && cp *.md dist && node -e \"const fs=require('fs');const path=require('path');const src='src';const dst='dist/src';(function w(d){for(const e of fs.readdirSync(d,{withFileTypes:true})){const p=path.join(d,e.name);if(e.isDirectory())w(p);else if(e.name.endsWith('.d.ts')){const rel=path.relative(src,p);const out=path.join(dst,rel);fs.mkdirSync(path.dirname(out),{recursive:true});fs.copyFileSync(p,out);}}})(src);\"", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\"", - "test": "node test/scripts/ensure-reshake-fixtures.js && NODE_OPTIONS=\"--experimental-vm-modules --max-old-space-size=24576\" npx rstest -c rstest.config.ts && NODE_OPTIONS=\"--experimental-vm-modules --max-old-space-size=24576\" npx rstest -c rstest.treeshake.serial.config.ts", + "test": "node test/scripts/ensure-reshake-fixtures.js && NODE_OPTIONS=\"--experimental-vm-modules --max-old-space-size=24576\" npx rstest && NODE_OPTIONS=\"--experimental-vm-modules --max-old-space-size=24576\" npx rstest -c rstest.treeshake.serial.config.ts", "pre-release": "pnpm run test && pnpm run build" } } diff --git a/packages/enhanced/rstestmigrate.md b/packages/enhanced/rstestmigrate.md index 4d1330a5d62..e737fda2d21 100644 --- a/packages/enhanced/rstestmigrate.md +++ b/packages/enhanced/rstestmigrate.md @@ -24,11 +24,11 @@ Rstest docs listed in the references section. ### 1) Update scripts and Nx targets - Switch `packages/enhanced/project.json` `test` target to Rstest: - `rstest run -c packages/enhanced/rstest.config.ts` (match CLI usage). + `rstest -c packages/enhanced/rstest.config.ts` (match CLI usage). - Replace or remove `test:jest` and `test:experiments` targets, or rewrite them as Rstest equivalents (for example, separate includes/projects). - Keep `enhanced:rstest` in the root `package.json` as the user-facing entry - point and ensure it uses `rstest run` (or `rstest`) consistently. + point and ensure it uses `rstest` consistently. ### 2) Expand `rstest.config.ts` coverage - Include unit and compiler tests (not just ConfigTestCases): diff --git a/packages/enhanced/src/lib/Constants.d.ts b/packages/enhanced/src/lib/Constants.d.ts new file mode 100644 index 00000000000..5c529e1a053 --- /dev/null +++ b/packages/enhanced/src/lib/Constants.d.ts @@ -0,0 +1,117 @@ +/** + * @type {Readonly<"javascript/auto">} + */ +export declare const JAVASCRIPT_MODULE_TYPE_AUTO: Readonly<'javascript/auto'>; +/** + * @type {Readonly<"javascript/dynamic">} + */ +export declare const JAVASCRIPT_MODULE_TYPE_DYNAMIC: Readonly<'javascript/dynamic'>; +/** + * @type {Readonly<"javascript/esm">} + * This is the module type used for _strict_ ES Module syntax. This means that all legacy formats + * that webpack supports (CommonJS, AMD, SystemJS) are not supported. + */ +export declare const JAVASCRIPT_MODULE_TYPE_ESM: Readonly<'javascript/esm'>; +/** + * @type {Readonly<"json">} + * This is the module type used for JSON files. JSON files are always parsed as ES Module. + */ +export declare const JSON_MODULE_TYPE: Readonly<'json'>; +/** + * @type {Readonly<"webassembly/async">} + * This is the module type used for WebAssembly modules. In webpack 5 they are always treated as async modules. + * + */ +export declare const WEBASSEMBLY_MODULE_TYPE_ASYNC: Readonly<'webassembly/async'>; +/** + * @type {Readonly<"webassembly/sync">} + * This is the module type used for WebAssembly modules. In webpack 4 they are always treated as sync modules. + * There is a legacy option to support this usage in webpack 5 and up. + */ +export declare const WEBASSEMBLY_MODULE_TYPE_SYNC: Readonly<'webassembly/sync'>; +/** + * @type {Readonly<"css">} + * This is the module type used for CSS files. + */ +export declare const CSS_MODULE_TYPE: Readonly<'css'>; +/** + * @type {Readonly<"css/global">} + * This is the module type used for CSS modules files where you need to use `:local` in selector list to hash classes. + */ +export declare const CSS_MODULE_TYPE_GLOBAL: Readonly<'css/global'>; +/** + * @type {Readonly<"css/module">} + * This is the module type used for CSS modules files, by default all classes are hashed. + */ +export declare const CSS_MODULE_TYPE_MODULE: Readonly<'css/module'>; +/** + * @type {Readonly<"css/auto">} + * This is the module type used for CSS files, the module will be parsed as CSS modules if it's filename contains `.module.` or `.modules.`. + */ +export declare const CSS_MODULE_TYPE_AUTO: Readonly<'css/auto'>; +/** + * @type {Readonly<"asset">} + * This is the module type used for automatically choosing between `asset/inline`, `asset/resource` based on asset size limit (8096). + */ +export declare const ASSET_MODULE_TYPE: Readonly<'asset'>; +/** + * @type {Readonly<"asset/inline">} + * This is the module type used for assets that are inlined as a data URI. This is the equivalent of `url-loader`. + */ +export declare const ASSET_MODULE_TYPE_INLINE: Readonly<'asset/inline'>; +/** + * @type {Readonly<"asset/resource">} + * This is the module type used for assets that are copied to the output directory. This is the equivalent of `file-loader`. + */ +export declare const ASSET_MODULE_TYPE_RESOURCE: Readonly<'asset/resource'>; +/** + * @type {Readonly<"asset/source">} + * This is the module type used for assets that are imported as source code. This is the equivalent of `raw-loader`. + */ +export declare const ASSET_MODULE_TYPE_SOURCE: Readonly<'asset/source'>; +/** + * @type {Readonly<"asset/raw-data-url">} + * TODO: Document what this asset type is for. See css-loader tests for its usage. + */ +export declare const ASSET_MODULE_TYPE_RAW_DATA_URL: Readonly<'asset/raw-data-url'>; +/** + * @type {Readonly<"runtime">} + * This is the module type used for the webpack runtime abstractions. + */ +export declare const WEBPACK_MODULE_TYPE_RUNTIME: Readonly<'runtime'>; +/** + * @type {Readonly<"fallback-module">} + * This is the module type used for the ModuleFederation feature's FallbackModule class. + * TODO: Document this better. + */ +export declare const WEBPACK_MODULE_TYPE_FALLBACK: Readonly<'fallback-module'>; +/** + * @type {Readonly<"remote-module">} + * This is the module type used for the ModuleFederation feature's RemoteModule class. + * TODO: Document this better. + */ +export declare const WEBPACK_MODULE_TYPE_REMOTE: Readonly<'remote-module'>; +/** + * @type {Readonly<"provide-module">} + * This is the module type used for the ModuleFederation feature's ProvideModule class. + * TODO: Document this better. + */ +export declare const WEBPACK_MODULE_TYPE_PROVIDE: Readonly<'provide-module'>; +/** + * @type {Readonly<"consume-shared-module">} + * This is the module type used for the ModuleFederation feature's ConsumeSharedModule class. + */ +export declare const WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE: Readonly<'consume-shared-module'>; +/** + * @type {Readonly<"lazy-compilation-proxy">} + * Module type used for `experiments.lazyCompilation` feature. See `LazyCompilationPlugin` for more information. + */ +export declare const WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY: Readonly<'lazy-compilation-proxy'>; +/** @typedef {"javascript/auto" | "javascript/dynamic" | "javascript/esm"} JavaScriptModuleTypes */ +/** @typedef {"json"} JSONModuleType */ +/** @typedef {"webassembly/async" | "webassembly/sync"} WebAssemblyModuleTypes */ +/** @typedef {"css" | "css/global" | "css/module"} CSSModuleTypes */ +/** @typedef {"asset" | "asset/inline" | "asset/resource" | "asset/source" | "asset/raw-data-url"} AssetModuleTypes */ +/** @typedef {"runtime" | "fallback-module" | "remote-module" | "provide-module" | "consume-shared-module" | "lazy-compilation-proxy"} WebpackModuleTypes */ +/** @typedef {string} UnknownModuleTypes */ +/** @typedef {JavaScriptModuleTypes | JSONModuleType | WebAssemblyModuleTypes | CSSModuleTypes | AssetModuleTypes | WebpackModuleTypes | UnknownModuleTypes} ModuleTypes */ diff --git a/packages/enhanced/src/lib/container/ContainerEntryModule.d.ts b/packages/enhanced/src/lib/container/ContainerEntryModule.d.ts new file mode 100644 index 00000000000..bea8cc919db --- /dev/null +++ b/packages/enhanced/src/lib/container/ContainerEntryModule.d.ts @@ -0,0 +1,111 @@ +import type { Compilation } from 'webpack'; +import type { + InputFileSystem, + LibIdentOptions, + NeedBuildContext, + ObjectDeserializerContext, + ObjectSerializerContext, + RequestShortener, + ResolverWithOptions, + WebpackOptions, +} from 'webpack/lib/Module'; +import type WebpackError from 'webpack/lib/WebpackError'; +declare const Module: typeof import('webpack').Module; +export type ExposeOptions = { + /** + * requests to exposed modules (last one is exported) + */ + import: string[]; + /** + * custom chunk name for the exposed module + */ + name: string; +}; +declare class ContainerEntryModule extends Module { + private _name; + private _exposes; + private _shareScope; + private _injectRuntimeEntry; + /** + * @param {string} name container entry name + * @param {[string, ExposeOptions][]} exposes list of exposed modules + * @param {string|string[]} shareScope name of the share scope + * @param {string} injectRuntimeEntry the path of injectRuntime file. + */ + constructor( + name: string, + exposes: [string, ExposeOptions][], + shareScope: string | string[], + injectRuntimeEntry: string, + ); + /** + * @param {ObjectDeserializerContext} context context + * @returns {ContainerEntryModule} deserialized container entry module + */ + static deserialize(context: ObjectDeserializerContext): ContainerEntryModule; + /** + * @returns {Set} types available (do not mutate) + */ + getSourceTypes(): Set; + /** + * @returns {string} a unique identifier of the module + */ + identifier(): string; + /** + * @param {RequestShortener} requestShortener the request shortener + * @returns {string} a user readable identifier of the module + */ + readableIdentifier(requestShortener: RequestShortener): string; + /** + * @param {LibIdentOptions} options options + * @returns {string | null} an identifier for library inclusion + */ + libIdent(options: LibIdentOptions): string | null; + /** + * @param {NeedBuildContext} context context info + * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild + * @returns {void} + */ + needBuild( + context: NeedBuildContext, + callback: ( + arg0: (WebpackError | null) | undefined, + arg1: boolean | undefined, + ) => void, + ): void; + /** + * @param {WebpackOptions} options webpack options + * @param {Compilation} compilation the compilation + * @param {ResolverWithOptions} resolver the resolver + * @param {InputFileSystem} fs the file system + * @param {function(WebpackError): void} callback callback function + * @returns {void} + */ + build( + options: WebpackOptions, + compilation: Compilation, + resolver: ResolverWithOptions, + fs: InputFileSystem, + callback: (err?: WebpackError) => void, + ): void; + /** + * @param {CodeGenerationContext} context context for code generation + * @returns {CodeGenerationResult} result + */ + codeGeneration({ moduleGraph, chunkGraph, runtimeTemplate }: any): { + sources: Map; + runtimeRequirements: Set< + '__webpack_exports__' | '__webpack_require__.d' | '__webpack_require__.o' + >; + }; + /** + * @param {string=} type the source type for which the size should be estimated + * @returns {number} the estimated size of the module (must be non-zero) + */ + size(type?: string): number; + /** + * @param {ObjectSerializerContext} context context + */ + serialize(context: ObjectSerializerContext): void; +} +export default ContainerEntryModule; diff --git a/packages/enhanced/src/lib/container/ContainerExposedDependency.d.ts b/packages/enhanced/src/lib/container/ContainerExposedDependency.d.ts new file mode 100644 index 00000000000..7828986d74e --- /dev/null +++ b/packages/enhanced/src/lib/container/ContainerExposedDependency.d.ts @@ -0,0 +1,29 @@ +declare const dependencies: typeof import('webpack').dependencies; +import type { + ObjectDeserializerContext, + ObjectSerializerContext, +} from 'webpack/lib/dependencies/ModuleDependency'; +declare class ContainerExposedDependency extends dependencies.ModuleDependency { + exposedName: string; + request: string; + /** + * @param {string} exposedName public name + * @param {string} request request to module + */ + constructor(exposedName: string, request: string); + get type(): string; + get category(): string; + /** + * @returns {string | null} an identifier to merge equal requests + */ + getResourceIdentifier(): string | null; + /** + * @param {ObjectSerializerContext} context context + */ + serialize(context: ObjectSerializerContext): void; + /** + * @param {ObjectDeserializerContext} context context + */ + deserialize(context: ObjectDeserializerContext): void; +} +export default ContainerExposedDependency; diff --git a/packages/enhanced/src/lib/container/ModuleFederationPlugin.ts b/packages/enhanced/src/lib/container/ModuleFederationPlugin.ts index 89436594f57..dc9c5a34d60 100644 --- a/packages/enhanced/src/lib/container/ModuleFederationPlugin.ts +++ b/packages/enhanced/src/lib/container/ModuleFederationPlugin.ts @@ -47,6 +47,17 @@ const validate = createSchemaValidation( }, ); +function hasExposes( + exposes: moduleFederationPlugin.ModuleFederationPluginOptions['exposes'], +): boolean { + return Boolean( + exposes && + (Array.isArray(exposes) + ? exposes.length > 0 + : Object.keys(exposes).length > 0), + ); +} + function getEnhancedPackageVersion(): string { let currentDir = __dirname; @@ -86,7 +97,7 @@ class ModuleFederationPlugin implements WebpackPluginInstance { } private _patchBundlerConfig(compiler: Compiler): void { - const { name, experiments } = this._options; + const { name, experiments, exposes } = this._options; const definePluginOptions: Record = {}; const MFPluginNum = compiler.options.plugins.filter( @@ -103,6 +114,27 @@ class ModuleFederationPlugin implements WebpackPluginInstance { const disableSnapshot = experiments?.optimization?.disableSnapshot ?? false; definePluginOptions['FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN'] = disableSnapshot; + definePluginOptions['FEDERATION_OPTIMIZE_NO_REMOTE'] = + experiments?.optimization?.disableRemote ?? false; + definePluginOptions['FEDERATION_OPTIMIZE_NO_SHARED'] = + experiments?.optimization?.disableShared ?? false; + definePluginOptions['FEDERATION_HAS_EXPOSES'] = + hasExposes(exposes) || + compiler.options.plugins.some((plugin) => { + if (!plugin || typeof plugin !== 'object') { + return false; + } + + const namedPlugin = plugin as WebpackPluginInstance & { + name?: string; + _options?: moduleFederationPlugin.ModuleFederationPluginOptions; + }; + if (namedPlugin.name !== 'ModuleFederationPlugin') { + return false; + } + + return hasExposes(namedPlugin._options?.exposes); + }); // Determine ENV_TARGET: only if manually specified in experiments.optimization.target if ( @@ -146,11 +178,7 @@ class ModuleFederationPlugin implements WebpackPluginInstance { (new RemoteEntryPlugin(options) as unknown as WebpackPluginInstance).apply( compiler, ); - const useContainerPlugin = - options.exposes && - (Array.isArray(options.exposes) - ? options.exposes.length > 0 - : Object.keys(options.exposes).length > 0); + const useContainerPlugin = hasExposes(options.exposes); if (experiments?.provideExternalRuntime) { if (useContainerPlugin) { diff --git a/packages/enhanced/src/lib/container/options.d.ts b/packages/enhanced/src/lib/container/options.d.ts new file mode 100644 index 00000000000..af571d4a17b --- /dev/null +++ b/packages/enhanced/src/lib/container/options.d.ts @@ -0,0 +1,26 @@ +export type ContainerOptionsFormat = + | (string | Record)[] + | Record; +/** + * @template T + * @template R + * @param {ContainerOptionsFormat} options options passed by the user + * @param {function(string | string[], string) : R} normalizeSimple normalize a simple item + * @param {function(T, string) : R} normalizeOptions normalize a complex item + * @returns {[string, R][]} parsed options + */ +export declare function parseOptions( + options: ContainerOptionsFormat, + normalizeSimple: (item: string | string[], name: string) => R, + normalizeOptions: (item: T, name: string) => R, +): [string, R][]; +/** + * @template T + * @param {string} scope scope name + * @param {ContainerOptionsFormat} options options passed by the user + * @returns {Record} options to spread or pass + */ +export declare function scope( + scope: string, + options: ContainerOptionsFormat, +): Record; diff --git a/packages/enhanced/src/lib/container/runtime/normalizeToPosixPath.ts b/packages/enhanced/src/lib/container/runtime/normalizeToPosixPath.ts new file mode 100644 index 00000000000..25928e6e42e --- /dev/null +++ b/packages/enhanced/src/lib/container/runtime/normalizeToPosixPath.ts @@ -0,0 +1,22 @@ +import path from 'path'; + +function toPosixSeparators(value: string): string { + return value.replace(/\\/g, '/').replace(/(?[0]['remotes']; +export interface NormalizedRuntimeInitOptionsWithOutShared { + name: string; + remotes: Array< + Remotes[0] & { + externalType: moduleFederationPlugin.ExternalsType; + } + >; +} +type EntryStaticNormalized = Awaited< + ReturnType any>> +>; +interface ModifyEntryOptions { + compiler: webpack.Compiler; + prependEntry?: (entry: EntryStaticNormalized) => void; + staticEntry?: EntryStaticNormalized; +} +export declare function getFederationGlobalScope( + runtimeGlobals: typeof RuntimeGlobals, +): string; +export declare function normalizeRuntimeInitOptionsWithOutShared( + options: moduleFederationPlugin.ModuleFederationPluginOptions, +): NormalizedRuntimeInitOptionsWithOutShared; +export declare function modifyEntry(options: ModifyEntryOptions): void; +export declare function createHash(contents: string): string; +export declare const normalizeToPosixPath: (p: string) => string; +export {}; diff --git a/packages/enhanced/src/lib/container/runtime/utils.ts b/packages/enhanced/src/lib/container/runtime/utils.ts index 672ba85a752..bae723e5d78 100644 --- a/packages/enhanced/src/lib/container/runtime/utils.ts +++ b/packages/enhanced/src/lib/container/runtime/utils.ts @@ -3,8 +3,6 @@ Author Zackary Jackson @ScriptedAlchemy */ import { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-path'; -import upath from 'upath'; -import path from 'path'; import crypto from 'crypto'; import { parseOptions } from '../options'; import type webpack from 'webpack'; @@ -140,5 +138,4 @@ export function createHash(contents: string): string { return crypto.createHash('md5').update(contents).digest('hex'); } -export const normalizeToPosixPath = (p: string) => - upath.normalizeSafe(path.normalize(p || '')); +export { normalizeToPosixPath } from './normalizeToPosixPath'; diff --git a/packages/enhanced/src/schemas/container/ModuleFederationPlugin.check.ts b/packages/enhanced/src/schemas/container/ModuleFederationPlugin.check.ts index 2d3b63fd027..bf811930a68 100644 --- a/packages/enhanced/src/schemas/container/ModuleFederationPlugin.check.ts +++ b/packages/enhanced/src/schemas/container/ModuleFederationPlugin.check.ts @@ -444,7 +444,7 @@ const t = { ], }, timeout: { type: 'number' }, - family: { enum: [0, 4, 6] }, + family: { enum: [4, 6] }, typesOnBuild: { type: 'boolean' }, }, }, @@ -469,6 +469,8 @@ const t = { type: 'object', properties: { disableSnapshot: { type: 'boolean' }, + disableRemote: { type: 'boolean' }, + disableShared: { type: 'boolean' }, target: { enum: ['web', 'node'] }, }, additionalProperties: !1, @@ -4361,8 +4363,6 @@ function D( const n = c; if ( - 0 !== - e && 4 !== e && 6 !== @@ -4719,6 +4719,10 @@ function D( if ( 'disableSnapshot' !== e && + 'disableRemote' !== + e && + 'disableShared' !== + e && 'target' !== e ) return ( @@ -4754,37 +4758,89 @@ function D( ); var I = e === c; } else I = !0; - if (I) + if (I) { if ( void 0 !== - r.target + r.disableRemote ) { - let e = r.target; - const n = c; + const e = c; if ( - 'web' !== e && - 'node' !== e + 'boolean' != + typeof r.disableRemote ) return ( (D.errors = [ { params: { - allowedValues: - t - .properties - .experiments - .properties - .optimization - .properties - .target - .enum, + type: 'boolean', }, }, ]), !1 ); - I = n === c; + I = e === c; } else I = !0; + if (I) { + if ( + void 0 !== + r.disableShared + ) { + const e = c; + if ( + 'boolean' != + typeof r.disableShared + ) + return ( + (D.errors = + [ + { + params: + { + type: 'boolean', + }, + }, + ]), + !1 + ); + I = e === c; + } else I = !0; + if (I) + if ( + void 0 !== + r.target + ) { + let e = + r.target; + const n = c; + if ( + 'web' !== + e && + 'node' !== e + ) + return ( + (D.errors = + [ + { + params: + { + allowedValues: + t + .properties + .experiments + .properties + .optimization + .properties + .target + .enum, + }, + }, + ]), + !1 + ); + I = n === c; + } else I = !0; + } + } } } } diff --git a/packages/enhanced/src/schemas/container/ModuleFederationPlugin.json b/packages/enhanced/src/schemas/container/ModuleFederationPlugin.json index 999f02b1cbf..42acc6b9ff2 100644 --- a/packages/enhanced/src/schemas/container/ModuleFederationPlugin.json +++ b/packages/enhanced/src/schemas/container/ModuleFederationPlugin.json @@ -889,6 +889,14 @@ "description": "Enable optimization to skip snapshot plugin", "type": "boolean" }, + "disableRemote": { + "description": "Disable remote loading code in runtime-core", + "type": "boolean" + }, + "disableShared": { + "description": "Disable shared dependency code in runtime-core", + "type": "boolean" + }, "target": { "description": "Target environment for the build", "enum": ["web", "node"] diff --git a/packages/enhanced/src/schemas/container/ModuleFederationPlugin.ts b/packages/enhanced/src/schemas/container/ModuleFederationPlugin.ts index 7bf5c76f11a..0a101950abf 100644 --- a/packages/enhanced/src/schemas/container/ModuleFederationPlugin.ts +++ b/packages/enhanced/src/schemas/container/ModuleFederationPlugin.ts @@ -936,7 +936,7 @@ export default { type: 'number', }, family: { - enum: [0, 4, 6], + enum: [4, 6], }, typesOnBuild: { type: 'boolean', @@ -989,6 +989,14 @@ export default { description: 'Enable optimization to skip snapshot plugin', type: 'boolean', }, + disableRemote: { + description: 'Disable remote loading code in runtime-core', + type: 'boolean', + }, + disableShared: { + description: 'Disable shared dependency code in runtime-core', + type: 'boolean', + }, target: { description: 'Target environment for the build', enum: ['web', 'node'], diff --git a/packages/enhanced/test/configCases/container/experiments-optimization/index.js b/packages/enhanced/test/configCases/container/experiments-optimization/index.js index 1230a4a0e47..e9679a5fa3a 100644 --- a/packages/enhanced/test/configCases/container/experiments-optimization/index.js +++ b/packages/enhanced/test/configCases/container/experiments-optimization/index.js @@ -7,11 +7,17 @@ if (!globalThis.__EXPERIMENTS_OPTIMIZATION_CASE__) { const readOutput = (filename) => fs.readFileSync(path.join(__dirname, filename), 'utf-8'); + const countOccurrences = (source, marker) => source.split(marker).length - 1; const webRemoteEntry = readOutput('remoteEntry-web.js'); const nodeRemoteEntry = readOutput('remoteEntry-node.js'); const webRemoteEntryEsm = readOutput('module/remoteEntry-web.mjs'); const nodeRemoteEntryEsm = readOutput('module/remoteEntry-node.mjs'); + const fullCapabilities = readOutput('remoteEntry-capabilities-full.js'); + const noRemote = readOutput('remoteEntry-capabilities-no-remote.js'); + const noShared = readOutput('remoteEntry-capabilities-no-shared.js'); + const fullConsumerEntry = readOutput('bundle4.js'); + const noExposesConsumerEntry = readOutput('bundle7.js'); it('should replace optimization define flags with static values', () => { expect(webRemoteEntry).not.toContain('ENV_TARGET'); @@ -33,6 +39,18 @@ if (!globalThis.__EXPERIMENTS_OPTIMIZATION_CASE__) { expect(nodeRemoteEntryEsm).not.toContain( 'FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN', ); + + [ + fullCapabilities, + noRemote, + noShared, + fullConsumerEntry, + noExposesConsumerEntry, + ].forEach((source) => { + expect(source).not.toContain('FEDERATION_OPTIMIZE_NO_REMOTE'); + expect(source).not.toContain('FEDERATION_OPTIMIZE_NO_SHARED'); + expect(source).not.toContain('FEDERATION_HAS_EXPOSES'); + }); }); it('should eliminate snapshot plugins from the web optimized CJS bundle', () => { @@ -58,4 +76,40 @@ if (!globalThis.__EXPERIMENTS_OPTIMIZATION_CASE__) { expect(nodeRemoteEntryEsm).toContain('generate-preload-assets-plugin'); expect(nodeRemoteEntryEsm).toContain('attrs:{name'); }); + + it('should eliminate the complete remote consumption path', () => { + expect(noRemote.length).toBeLessThan(fullCapabilities.length); + expect(fullCapabilities).toContain('availableExposes'); + expect(fullCapabilities).toContain('mf_module_id'); + expect(fullCapabilities).toContain('Container missing'); + expect(noRemote).not.toContain('availableExposes'); + expect(noRemote).not.toContain('mf_module_id'); + expect(noRemote).not.toContain('Container missing'); + }); + + it('should eliminate the complete shared consumption path', () => { + const sharedRuntimeMarkers = [ + 'Initialization of sharing external failed', + 'Shared module is not available for eager consumption', + 'No fallback item found for shareKey', + 'tree-shake-plugin', + ]; + + expect(noShared.length).toBeLessThan(fullCapabilities.length); + sharedRuntimeMarkers.forEach((marker) => { + expect(fullCapabilities).toContain(marker); + expect(noShared).not.toContain(marker); + }); + }); + + it('should eliminate container initialization from the consumer entry without exposes', () => { + expect(noExposesConsumerEntry.length).toBeLessThan( + fullConsumerEntry.length, + ); + expect( + countOccurrences(noExposesConsumerEntry, 'remoteEntryInitOptions'), + ).toBeLessThan( + countOccurrences(fullConsumerEntry, 'remoteEntryInitOptions'), + ); + }); } diff --git a/packages/enhanced/test/configCases/container/experiments-optimization/webpack.config.js b/packages/enhanced/test/configCases/container/experiments-optimization/webpack.config.js index a5124bc7d80..8797b6fc9ac 100644 --- a/packages/enhanced/test/configCases/container/experiments-optimization/webpack.config.js +++ b/packages/enhanced/test/configCases/container/experiments-optimization/webpack.config.js @@ -25,6 +25,9 @@ const createConfig = ({ outputModule, optimizationTarget, disableSnapshot, + disableRemote, + disableShared, + exposes = commonConfig.exposes, uniqueName, containerName, filename, @@ -55,12 +58,14 @@ const createConfig = ({ type: 'commonjs-module', name: containerName, }, - exposes: commonConfig.exposes, + exposes, remotes: commonConfig.remotes, experiments: { optimization: { target: optimizationTarget, disableSnapshot, + disableRemote, + disableShared, }, }, }), @@ -104,4 +109,42 @@ module.exports = [ containerName: 'experiments_optimization_node_esm', filename: 'module/remoteEntry-node.mjs', }), + createConfig({ + entry: './noop.js', + outputModule: false, + optimizationTarget: 'web', + disableSnapshot: true, + uniqueName: 'experiments-optimization-capabilities-full', + containerName: 'capabilities_full', + filename: 'remoteEntry-capabilities-full.js', + }), + createConfig({ + entry: './noop.js', + outputModule: false, + optimizationTarget: 'web', + disableSnapshot: true, + disableRemote: true, + uniqueName: 'experiments-optimization-capabilities-no-remote', + containerName: 'capabilities_no_remote', + filename: 'remoteEntry-capabilities-no-remote.js', + }), + createConfig({ + entry: './noop.js', + outputModule: false, + optimizationTarget: 'web', + disableSnapshot: true, + disableShared: true, + uniqueName: 'experiments-optimization-capabilities-no-shared', + containerName: 'capabilities_no_shared', + filename: 'remoteEntry-capabilities-no-shared.js', + }), + createConfig({ + entry: './noop.js', + outputModule: false, + optimizationTarget: 'web', + disableSnapshot: true, + exposes: {}, + uniqueName: 'experiments-optimization-capabilities-full', + containerName: 'capabilities_full', + }), ]; diff --git a/packages/enhanced/test/unit/container/runtime/normalizeToPosixPath.test.ts b/packages/enhanced/test/unit/container/runtime/normalizeToPosixPath.test.ts new file mode 100644 index 00000000000..631713f27d0 --- /dev/null +++ b/packages/enhanced/test/unit/container/runtime/normalizeToPosixPath.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from '@rstest/core'; +import { normalizeToPosixPath } from '../../../../src/lib/container/runtime/normalizeToPosixPath'; + +describe('normalizeToPosixPath', () => { + it.each([ + ['', '.'], + ['a\\b', 'a/b'], + ['.\\a\\b', './a/b'], + ['C:\\foo\\..\\bar', 'C:/bar'], + ['\\\\server\\share\\a\\..\\b', '//server/share/b'], + ['a//b///c', 'a/b/c'], + ['../a/./b', '../a/b'], + ['/a/b/../', '/a/'], + ['C:/foo//bar/', 'C:/foo/bar/'], + ['\\\\.\\pipe\\name', '//./pipe/name'], + ['\\\\?\\C:\\foo\\..\\bar', '//?/C:/bar'], + ])('normalizes %s', (input, expected) => { + expect(normalizeToPosixPath(input)).toBe(expected); + }); +}); diff --git a/packages/enhanced/tsconfig.json b/packages/enhanced/tsconfig.json index 3ae62d99c09..8f70fcf7b6d 100644 --- a/packages/enhanced/tsconfig.json +++ b/packages/enhanced/tsconfig.json @@ -8,7 +8,6 @@ "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, diff --git a/packages/enhanced/tsconfig.spec.json b/packages/enhanced/tsconfig.spec.json index b55e848de9d..5081ea87c51 100644 --- a/packages/enhanced/tsconfig.spec.json +++ b/packages/enhanced/tsconfig.spec.json @@ -5,10 +5,10 @@ "module": "commonjs", "types": ["@rstest/core/globals", "node"], "noEmit": true, - "baseUrl": ".", "paths": { "webpack": ["../../webpack/types.d.ts"], - "webpack/*": ["../../webpack/lib/*.d.ts", "../../webpack/*"] + "webpack/*": ["../../webpack/lib/*.d.ts", "../../webpack/*"], + "*": ["./*"] } }, "include": [ diff --git a/packages/error-codes/CHANGELOG.md b/packages/error-codes/CHANGELOG.md index 72bd0ea0fe8..56ba0461fbf 100644 --- a/packages/error-codes/CHANGELOG.md +++ b/packages/error-codes/CHANGELOG.md @@ -1,5 +1,9 @@ # @module-federation/error-codes +## 2.8.0 + +## 2.7.0 + ## 2.6.0 ## 2.5.1 diff --git a/packages/error-codes/jest.config.js b/packages/error-codes/jest.config.js index 271f638474c..c9a0927767b 100644 --- a/packages/error-codes/jest.config.js +++ b/packages/error-codes/jest.config.js @@ -13,7 +13,6 @@ module.exports = { __BROWSER__: false, __VERSION__: '"unknown"', }, - preset: 'ts-jest', transformIgnorePatterns: [ // Change MODULE_NAME_HERE to your module that isn't being compiled '/node_modules/', diff --git a/packages/error-codes/package.json b/packages/error-codes/package.json index 8c04cd3bbc9..563ee2efdcd 100644 --- a/packages/error-codes/package.json +++ b/packages/error-codes/package.json @@ -4,7 +4,7 @@ "author": "zhanghang ", "public": true, "sideEffects": false, - "version": "2.6.0", + "version": "2.8.0", "license": "MIT", "repository": { "type": "git", diff --git a/packages/error-codes/tsconfig.json b/packages/error-codes/tsconfig.json index 88004663d5a..dc0403bddf1 100644 --- a/packages/error-codes/tsconfig.json +++ b/packages/error-codes/tsconfig.json @@ -7,7 +7,6 @@ "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noFallthroughCasesInSwitch": true, - "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, diff --git a/packages/esbuild/CHANGELOG.md b/packages/esbuild/CHANGELOG.md index e78a9380dd8..af1ad4dc918 100644 --- a/packages/esbuild/CHANGELOG.md +++ b/packages/esbuild/CHANGELOG.md @@ -1,5 +1,25 @@ # @module-federation/esbuild +## 0.0.111 + +### Patch Changes + +- Updated dependencies [ea490ae] + - @module-federation/sdk@2.8.0 + - @module-federation/webpack-bundler-runtime@2.8.0 + - @module-federation/runtime@2.8.0 + +## 0.0.110 + +### Patch Changes + +- 61fe85d: chore(deps): upgrade `@rslib/core` to 0.23.2, `@rsbuild/core` to 2.1.4, and `@rsbuild/plugin-react`/`plugin-vue`/`plugin-sass` to their 2.x latest across dev dependencies. `create-module-federation` templates are updated so newly scaffolded projects pick up the same versions. `@module-federation/modern-js-v3` is realigned to `@modern-js/* 3.5.0` (which uses `@rsbuild/core 2.1.0`) to resolve a `Rspack` type mismatch between the upgraded `@module-federation/rsbuild-plugin` and modern-js's own rsbuild embedding. Peer dependency ranges are untouched. +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/runtime@2.7.0 + - @module-federation/webpack-bundler-runtime@2.7.0 + ## 0.0.109 ### Patch Changes diff --git a/packages/esbuild/package.json b/packages/esbuild/package.json index dd47a76a0bc..c97e6ead5a9 100644 --- a/packages/esbuild/package.json +++ b/packages/esbuild/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/esbuild", - "version": "0.0.109", + "version": "0.0.111", "author": "Zack Jackson (@ScriptedAlchemy)", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -63,7 +63,8 @@ "npmlog": "7.0.1" }, "devDependencies": { - "@rslib/core": "^0.12.4" + "@rslib/core": "^0.23.2", + "typescript": "7.0.2" }, "scripts": { "build": "rslib build", diff --git a/packages/managers/CHANGELOG.md b/packages/managers/CHANGELOG.md index 44f31e8bb00..8b13079a40f 100644 --- a/packages/managers/CHANGELOG.md +++ b/packages/managers/CHANGELOG.md @@ -1,5 +1,22 @@ # @module-federation/managers +## 2.8.0 + +### Patch Changes + +- 6ee67dc: Reduce installed and bundled size by replacing general-purpose cache, path, version, package lookup, scheduling, fetch, and error fallback dependencies with focused built-in utilities. +- Updated dependencies [ea490ae] + - @module-federation/sdk@2.8.0 + +## 2.7.0 + +### Patch Changes + +- a5f123a: chore: replace `find-pkg` with `empathic` (per [e18e replacements](https://e18e.dev/docs/replacements/find-pkg.html)). Removes unused `find-pkg` dependency from `@module-federation/manifest`. +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/managers/__tests__/findPackageJson.spec.ts b/packages/managers/__tests__/findPackageJson.spec.ts new file mode 100644 index 00000000000..f407e103dcc --- /dev/null +++ b/packages/managers/__tests__/findPackageJson.spec.ts @@ -0,0 +1,23 @@ +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { findPackageJson } from '../src/findPackageJson'; + +describe('findPackageJson', () => { + it('finds the closest package.json from a nested directory', () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'mf-managers-')); + const nested = path.join(root, 'a', 'b'); + fs.mkdirSync(nested, { recursive: true }); + fs.writeFileSync(path.join(root, 'package.json'), '{}'); + + expect(findPackageJson(nested)).toBe(path.join(root, 'package.json')); + fs.rmSync(root, { recursive: true, force: true }); + }); + + it('returns undefined when no package.json exists', () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'mf-managers-')); + + expect(findPackageJson(root)).toBeUndefined(); + fs.rmSync(root, { recursive: true, force: true }); + }); +}); diff --git a/packages/managers/jest.config.js b/packages/managers/jest.config.js index 2d574a36a71..aa7de73a673 100644 --- a/packages/managers/jest.config.js +++ b/packages/managers/jest.config.js @@ -26,7 +26,6 @@ module.exports = { __BROWSER__: false, __VERSION__: '"unknown"', }, - preset: 'ts-jest', transformIgnorePatterns: [ // Change MODULE_NAME_HERE to your module that isn't being compiled '/node_modules/', diff --git a/packages/managers/package.json b/packages/managers/package.json index f952a05b04b..8a383529bf1 100644 --- a/packages/managers/package.json +++ b/packages/managers/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/managers", - "version": "2.6.0", + "version": "2.8.0", "license": "MIT", "description": "Provide managers for helping handle mf data .", "keywords": [ @@ -25,8 +25,7 @@ "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "dependencies": { - "@module-federation/sdk": "workspace:*", - "empathic": "2.0.0" + "@module-federation/sdk": "workspace:*" }, "devDependencies": { "webpack": "5.104.1" diff --git a/packages/managers/src/PKGJsonManager.ts b/packages/managers/src/PKGJsonManager.ts index 8e152fa751d..e81d03d6e06 100644 --- a/packages/managers/src/PKGJsonManager.ts +++ b/packages/managers/src/PKGJsonManager.ts @@ -1,7 +1,7 @@ import path from 'path'; -import { up as findPkgUp } from 'empathic/package'; import fs from 'fs'; import { MFModuleType, logger } from '@module-federation/sdk'; +import { findPackageJson } from './findPackageJson'; export class PKGJsonManager { private _pkg?: Record; @@ -23,7 +23,7 @@ export class PKGJsonManager { return pkg; } catch (_err) { try { - const pkgPath = findPkgUp({ cwd: root }); + const pkgPath = findPackageJson(root); if (!pkgPath) { return {}; } diff --git a/packages/managers/src/SharedManager.ts b/packages/managers/src/SharedManager.ts index d99852db240..514161ca70a 100644 --- a/packages/managers/src/SharedManager.ts +++ b/packages/managers/src/SharedManager.ts @@ -1,4 +1,3 @@ -import { up as findPkgUp } from 'empathic/package'; import path from 'path'; import fs from 'fs'; import { @@ -9,6 +8,7 @@ import { import { NormalizedSharedOptions } from './types'; import { BasicPluginOptionsManager } from './BasicPluginOptionsManager'; import { parseOptions } from './utils'; +import { findPackageJson } from './findPackageJson'; class SharedManager extends BasicPluginOptionsManager { normalizedOptions: NormalizedSharedOptions = {}; @@ -69,9 +69,10 @@ class SharedManager extends BasicPluginOptionsManager = {}; + + init(options: { remotes?: Record }) { + this.normalizedOptions = Object.entries(options.remotes || {}).reduce( + (normalizedOptions, [alias, remote]) => { + const [name, entry] = remote.split('@'); + normalizedOptions[alias] = { alias, name, entry }; + return normalizedOptions; + }, + {} as Record, + ); + } }, SharedManager: class { normalizedOptions: Record = {}; @@ -175,4 +189,38 @@ describe('ModuleHandler', () => { expect(exposesMap['./src/Button']?.path).toBe('./Button'); expect(exposesMap['./src/Card']?.path).toBe('./Card'); }); + + it.each(['webpack', 'rspack'] as const)( + 'parses %s remote reference identifiers', + (bundler) => { + const modules: StatsModule[] = [ + { + identifier: `remote (default) ${bundler}/container/reference/app2 ./Button`, + nameForCondition: './src/App.tsx', + } as StatsModule, + ]; + + const moduleHandler = new ModuleHandler( + { + name: 'host', + remotes: { + app2: 'app2@http://localhost:3002/remoteEntry.js', + }, + }, + modules, + { bundler }, + ); + + const { remotes } = moduleHandler.collect(); + + expect(remotes).toHaveLength(1); + expect(remotes[0]).toMatchObject({ + alias: 'app2', + consumingFederationContainerName: 'host', + federationContainerName: 'app2', + moduleName: 'Button', + entry: 'http://localhost:3002/remoteEntry.js', + }); + }, + ); }); diff --git a/packages/manifest/__tests__/StatsManager.spec.ts b/packages/manifest/__tests__/StatsManager.spec.ts new file mode 100644 index 00000000000..155cf8d231b --- /dev/null +++ b/packages/manifest/__tests__/StatsManager.spec.ts @@ -0,0 +1,88 @@ +import type { Stats, moduleFederationPlugin } from '@module-federation/sdk'; +import type { Compiler } from 'webpack'; + +jest.mock( + '@module-federation/dts-plugin/core', + () => ({ + isTSProject: () => false, + retrieveTypesAssetsInfo: () => ({}) as const, + }), + { virtual: true }, +); + +jest.mock( + '@module-federation/managers', + () => ({ + ContainerManager: class { + init() {} + }, + RemoteManager: class { + init() {} + }, + SharedManager: class { + init() {} + }, + PKGJsonManager: class {}, + UNKNOWN_MODULE_NAME: 'unknown', + utils: {}, + }), + { virtual: true }, +); + +import { StatsManager } from '../src/StatsManager'; + +describe('StatsManager', () => { + it.each([ + { + description: + 'reconciles pre-emitted Rspack metadata to the configured ESM library type', + library: { type: 'module' }, + emittedType: 'global', + expectedType: 'module', + }, + { + description: + 'preserves pre-emitted Rspack metadata without a configured library type', + library: undefined, + emittedType: 'system', + expectedType: 'system', + }, + ] as const)('$description', ({ library, emittedType, expectedType }) => { + const manager = new StatsManager(); + manager.init( + { + name: 'esm_remote', + library, + exposes: { './App': './src/App' }, + } as moduleFederationPlugin.ModuleFederationPluginOptions, + { pluginVersion: 'test', bundler: 'rspack' }, + ); + const stats = { + id: 'esm_remote', + name: 'esm_remote', + metaData: { + name: 'esm_remote', + globalName: 'esm_remote', + buildInfo: { buildVersion: '1.0.0', buildName: 'esm_remote' }, + remoteEntry: { + name: 'remoteEntry.mjs', + path: '', + type: emittedType, + }, + types: { path: '', name: '', api: '', zip: '' }, + pluginVersion: 'test', + }, + exposes: [], + shared: [], + remotes: [], + } as unknown as Stats; + const compiler = { + context: process.cwd(), + options: { output: { publicPath: 'auto' } }, + } as unknown as Compiler; + + const updated = manager.updateStats(stats, compiler); + + expect(updated.metaData.remoteEntry.type).toBe(expectedType); + }); +}); diff --git a/packages/manifest/jest.config.js b/packages/manifest/jest.config.js index 1a50a91f194..f5c733ac1a6 100644 --- a/packages/manifest/jest.config.js +++ b/packages/manifest/jest.config.js @@ -13,7 +13,6 @@ module.exports = { __BROWSER__: false, __VERSION__: '"unknown"', }, - preset: 'ts-jest', transformIgnorePatterns: [ // Change MODULE_NAME_HERE to your module that isn't being compiled '/node_modules/', diff --git a/packages/manifest/package.json b/packages/manifest/package.json index 3aee70f2032..63015bae16d 100644 --- a/packages/manifest/package.json +++ b/packages/manifest/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/manifest", - "version": "2.6.0", + "version": "2.8.0", "license": "MIT", "description": "Provide manifest/stats for webpack/rspack MF project .", "keywords": [ @@ -51,6 +51,7 @@ } }, "devDependencies": { + "typescript": "7.0.2", "webpack": "^5.0.0" }, "scripts": { diff --git a/packages/manifest/src/ModuleHandler.ts b/packages/manifest/src/ModuleHandler.ts index 3d35e3c4f38..7d3f8cf0881 100644 --- a/packages/manifest/src/ModuleHandler.ts +++ b/packages/manifest/src/ModuleHandler.ts @@ -25,6 +25,8 @@ type ContainerExposeEntry = [ { import: string[]; name?: string }, ]; +const REMOTE_REFERENCE_PREFIX = /^(?:webpack|rspack)\/container\/reference\//; + const isNonEmptyString = (value: unknown): value is string => { return typeof value === 'string' && value.trim().length > 0; }; @@ -378,12 +380,12 @@ class ModuleHandler { } const remoteManagerNormalizedOptions = this._remoteManager.normalizedOptions; - // identifier = remote (default) webpack/container/reference/app2 ./Button + // identifier = remote (default) [webpack|rspack]/container/reference/app2 ./Button const data = identifier.split(' '); if (data.length === 4) { const moduleName = data[3].replace('./', ''); - const remoteAlias = data[2].replace('webpack/container/reference/', ''); + const remoteAlias = data[2].replace(REMOTE_REFERENCE_PREFIX, ''); const normalizedRemote = remoteManagerNormalizedOptions[remoteAlias]; const basicRemote: StatsRemoteVal = { alias: normalizedRemote.alias, diff --git a/packages/manifest/src/StatsManager.ts b/packages/manifest/src/StatsManager.ts index da43dca8bb7..4859df57fbf 100644 --- a/packages/manifest/src/StatsManager.ts +++ b/packages/manifest/src/StatsManager.ts @@ -173,7 +173,7 @@ class StatsManager { remoteEntry: { name: getRemoteEntryName(), path: '', - // same as the types supported by runtime, currently only global/var/script is supported + // The runtime loader type follows the configured container library type. type: (this._options?.library?.type as RemoteEntryType | undefined) || 'global', @@ -598,6 +598,13 @@ class StatsManager { updateStats(stats: Stats, compiler: Compiler): Stats { const { metaData } = stats; + const configuredRemoteEntryType = this._options.library?.type; + if (configuredRemoteEntryType && metaData.remoteEntry) { + // Rspack may pre-emit stats with the default `global` type even when + // the configured container library and emitted remote entry are ESM. + // The configured library is authoritative for runtime loader selection. + metaData.remoteEntry.type = configuredRemoteEntryType; + } if (!metaData.types) { metaData.types = getTypesMetaInfo(this._options, compiler.context); } diff --git a/packages/manifest/tsconfig.json b/packages/manifest/tsconfig.json index 343792e6cef..1ec99053b52 100644 --- a/packages/manifest/tsconfig.json +++ b/packages/manifest/tsconfig.json @@ -7,7 +7,6 @@ "noImplicitOverride": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, diff --git a/packages/metro-core/CHANGELOG.md b/packages/metro-core/CHANGELOG.md index 87a140fb3e9..2d6a6a49c02 100644 --- a/packages/metro-core/CHANGELOG.md +++ b/packages/metro-core/CHANGELOG.md @@ -1,5 +1,31 @@ # @module-federation/metro +## 2.8.0 + +### Patch Changes + +- 2dc9a40: chore: bump Rock dependencies to 0.14.1 +- d4da7fb: fix: normalize Metro paths on Windows +- 7c4ac9f: Support TypeScript 7 in Metro projects. +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/sdk@2.8.0 + - @module-federation/dts-plugin@2.8.0 + - @module-federation/runtime@2.8.0 + +## 2.7.0 + +### Patch Changes + +- 61fe85d: chore(deps): upgrade `@rslib/core` to 0.23.2, `@rsbuild/core` to 2.1.4, and `@rsbuild/plugin-react`/`plugin-vue`/`plugin-sass` to their 2.x latest across dev dependencies. `create-module-federation` templates are updated so newly scaffolded projects pick up the same versions. `@module-federation/modern-js-v3` is realigned to `@modern-js/* 3.5.0` (which uses `@rsbuild/core 2.1.0`) to resolve a `Rspack` type mismatch between the upgraded `@module-federation/rsbuild-plugin` and modern-js's own rsbuild embedding. Peer dependency ranges are untouched. +- Updated dependencies [a7351f3] +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/dts-plugin@2.7.0 + - @module-federation/sdk@2.7.0 + - @module-federation/runtime@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/metro-core/__tests__/commands/utils/path-utils.spec.ts b/packages/metro-core/__tests__/commands/utils/path-utils.spec.ts index 76bd46ac1d0..a5b40bad1c7 100644 --- a/packages/metro-core/__tests__/commands/utils/path-utils.spec.ts +++ b/packages/metro-core/__tests__/commands/utils/path-utils.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { normalizeOutputRelativePath, toFileSourceUrl, diff --git a/packages/metro-core/__tests__/plugin/babel-transformer.spec.ts b/packages/metro-core/__tests__/plugin/babel-transformer.spec.ts index 3cb19ef00e8..6526e83db0d 100644 --- a/packages/metro-core/__tests__/plugin/babel-transformer.spec.ts +++ b/packages/metro-core/__tests__/plugin/babel-transformer.spec.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { vol } from 'memfs'; -import { afterEach, describe, expect, it, vi } from 'vitest'; +import { afterEach, describe, expect, it, rs } from '@rstest/core'; import { createBabelTransformer } from '../../src/plugin/babel-transformer'; import type { ModuleFederationConfigNormalized } from '../../src/types'; @@ -20,19 +20,19 @@ function createConfig(): ModuleFederationConfigNormalized { describe('createBabelTransformer', () => { afterEach(() => { vol.reset(); - vi.restoreAllMocks(); + rs.restoreAllMocks(); }); it('escapes Windows paths for require()', () => { const realReadFileSync = fs.readFileSync.bind(fs); - vi.spyOn(fs, 'readFileSync').mockImplementation(((filePath, options) => { + rs.spyOn(fs, 'readFileSync').mockImplementation(((filePath, options) => { const targetPath = filePath.toString(); if (vol.existsSync(targetPath)) { return vol.readFileSync(targetPath, options as never); } return realReadFileSync(filePath, options as never); }) as typeof fs.readFileSync); - vi.spyOn(fs, 'writeFileSync').mockImplementation((( + rs.spyOn(fs, 'writeFileSync').mockImplementation((( filePath, data, options, diff --git a/packages/metro-core/__tests__/plugin/generators.spec.ts b/packages/metro-core/__tests__/plugin/generators.spec.ts index 77ec1bee9c7..9d269017751 100644 --- a/packages/metro-core/__tests__/plugin/generators.spec.ts +++ b/packages/metro-core/__tests__/plugin/generators.spec.ts @@ -1,5 +1,5 @@ import path from 'node:path'; -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { getInitHostModule, getRemoteEntryModule, diff --git a/packages/metro-core/__tests__/plugin/helpers.spec.ts b/packages/metro-core/__tests__/plugin/helpers.spec.ts index 1902550789d..8bf2f729d67 100644 --- a/packages/metro-core/__tests__/plugin/helpers.spec.ts +++ b/packages/metro-core/__tests__/plugin/helpers.spec.ts @@ -1,5 +1,5 @@ -import { describe, expect, it } from 'vitest'; -import { toPosixPath } from '../../src/plugin/helpers'; +import { describe, expect, it } from '@rstest/core'; +import { replaceExtension, toPosixPath } from '../../src/plugin/helpers'; describe('toPosixPath', () => { it('converts backslashes to forward slashes', () => { @@ -12,3 +12,12 @@ describe('toPosixPath', () => { expect(toPosixPath('/usr/local/bin')).toBe('/usr/local/bin'); }); }); + +describe('replaceExtension', () => { + it('preserves existing path separators', () => { + expect(replaceExtension('src/info.tsx', '.bundle')).toBe('src/info.bundle'); + expect(replaceExtension('src\\info.tsx', '.bundle')).toBe( + 'src\\info.bundle', + ); + }); +}); diff --git a/packages/metro-core/__tests__/plugin/manifest-middleware.spec.ts b/packages/metro-core/__tests__/plugin/manifest-middleware.spec.ts index 36d8e1956e1..579216fb79b 100644 --- a/packages/metro-core/__tests__/plugin/manifest-middleware.spec.ts +++ b/packages/metro-core/__tests__/plugin/manifest-middleware.spec.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { afterEach, describe, expect, it, vi } from 'vitest'; +import { afterEach, describe, expect, it, rs } from '@rstest/core'; import { createManifestMiddleware } from '../../src/plugin/manifest-middleware'; import type { ModuleFederationConfigNormalized } from '../../src/types'; @@ -45,11 +45,11 @@ describe('createManifestMiddleware', () => { const tmpDirPath = path.join(projectRoot, 'node_modules', '.mf-metro'); const remoteEntryPath = path.join(tmpDirPath, 'mini.js'); const sharedEntryPath = path.join(tmpDirPath, 'shared', 'lodash.js'); - const build = vi.fn(async () => ({ code: '', map: '' })); - const middleware = vi.fn(); - const next = vi.fn(); + const build = rs.fn(async () => ({ code: '', map: '' })); + const middleware = rs.fn(); + const next = rs.fn(); const vmManager = { - registerVirtualModule: vi.fn(), + registerVirtualModule: rs.fn(), }; const enhanced = createManifestMiddleware({ diff --git a/packages/metro-core/__tests__/plugin/manifest.spec.ts b/packages/metro-core/__tests__/plugin/manifest.spec.ts index 697ba3ecaae..de5610ff272 100644 --- a/packages/metro-core/__tests__/plugin/manifest.spec.ts +++ b/packages/metro-core/__tests__/plugin/manifest.spec.ts @@ -2,7 +2,7 @@ import crypto from 'node:crypto'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { afterEach, describe, expect, it } from 'vitest'; +import { afterEach, describe, expect, it } from '@rstest/core'; import { createManifest, recordBundleHash, diff --git a/packages/metro-core/__tests__/plugin/normalize-options.spec.ts b/packages/metro-core/__tests__/plugin/normalize-options.spec.ts index e5bb1f8fa6c..4744a323a98 100644 --- a/packages/metro-core/__tests__/plugin/normalize-options.spec.ts +++ b/packages/metro-core/__tests__/plugin/normalize-options.spec.ts @@ -1,8 +1,8 @@ import path from 'node:path'; import { vol } from 'memfs'; -import { afterEach, describe, expect, it, vi } from 'vitest'; +import { afterEach, describe, expect, it, rs } from '@rstest/core'; -vi.mock('node:fs', () => { +rs.mock('node:fs', () => { const memfs = require('memfs').fs; return { ...memfs, default: memfs }; }); @@ -48,7 +48,7 @@ function getShared() { describe('normalizeOptions', () => { afterEach(() => { vol.reset(); - vi.restoreAllMocks(); + rs.restoreAllMocks(); }); it('defaults dts to false and does not inject type-hints plugin', () => { @@ -113,8 +113,8 @@ describe('normalizeOptions', () => { const metroCorePluginPath = require.resolve('../../src/modules/metroCorePlugin.ts'); expect(normalized.plugins).toEqual([ - path.relative(tmpDirPath, metroCorePluginPath), - path.relative(tmpDirPath, runtimePluginPath), + toPosixPath(path.relative(tmpDirPath, metroCorePluginPath)), + toPosixPath(path.relative(tmpDirPath, runtimePluginPath)), ]); }); @@ -139,8 +139,8 @@ describe('normalizeOptions', () => { const metroCorePluginPath = require.resolve('../../src/modules/metroCorePlugin.ts'); expect(normalized.plugins).toEqual([ - path.relative(tmpDirPath, metroCorePluginPath), - path.relative(tmpDirPath, runtimePluginPath), + toPosixPath(path.relative(tmpDirPath, metroCorePluginPath)), + toPosixPath(path.relative(tmpDirPath, runtimePluginPath)), ]); }); @@ -161,7 +161,7 @@ describe('normalizeOptions', () => { const metroCorePluginPath = require.resolve('../../src/modules/metroCorePlugin.ts'); expect(normalized.plugins).toEqual([ - path.relative(tmpDirPath, metroCorePluginPath), + toPosixPath(path.relative(tmpDirPath, metroCorePluginPath)), '@scope/pkg/plugin', 'pkg-name', ]); diff --git a/packages/metro-core/__tests__/plugin/patch-initialize-core.spec.ts b/packages/metro-core/__tests__/plugin/patch-initialize-core.spec.ts new file mode 100644 index 00000000000..40ed07d3334 --- /dev/null +++ b/packages/metro-core/__tests__/plugin/patch-initialize-core.spec.ts @@ -0,0 +1,41 @@ +import { createRequire } from 'node:module'; +import { describe, expect, it } from '@rstest/core'; + +const require = createRequire(import.meta.url); +const { transformSync } = require('@babel/core'); +const patchInitializeCore = require('../../babel-plugin/patch-initialize-core'); + +function transform(filename: string) { + const result = transformSync( + ` + 'use strict'; + require('./setUpGlobals'); + `, + { + babelrc: false, + configFile: false, + filename, + plugins: [patchInitializeCore], + }, + ); + + return result?.code ?? ''; +} + +describe('patch-initialize-core babel plugin', () => { + it('injects init-host with POSIX paths', () => { + const code = transform( + '/repo/node_modules/react-native/Libraries/Core/InitializeCore.js', + ); + + expect(code).toContain('require("mf:init-host")'); + }); + + it('injects init-host with Windows paths', () => { + const code = transform( + 'C:\\repo\\node_modules\\react-native\\Libraries\\Core\\InitializeCore.js', + ); + + expect(code).toContain('require("mf:init-host")'); + }); +}); diff --git a/packages/metro-core/__tests__/plugin/patch-require.spec.ts b/packages/metro-core/__tests__/plugin/patch-require.spec.ts new file mode 100644 index 00000000000..f009ffb48e2 --- /dev/null +++ b/packages/metro-core/__tests__/plugin/patch-require.spec.ts @@ -0,0 +1,50 @@ +import { createRequire } from 'node:module'; +import { describe, expect, it } from '@rstest/core'; + +const require = createRequire(import.meta.url); +const { transformSync } = require('@babel/core'); +const patchRequire = require('../../babel-plugin/patch-require'); + +function transform(filename: string) { + const result = transformSync( + ` + global.__r = metroRequire; + global.__c = clear; + global.__registerSegment = registerSegment; + `, + { + babelrc: false, + configFile: false, + filename, + plugins: [patchRequire], + }, + ); + + return result?.code ?? ''; +} + +describe('patch-require babel plugin', () => { + it('patches Metro require globals with POSIX paths', () => { + const code = transform( + '/repo/node_modules/metro-runtime/src/polyfills/require.js', + ); + + expect(code).toContain('global[`${__METRO_GLOBAL_PREFIX__}__r`]'); + expect(code).toContain('global[`${__METRO_GLOBAL_PREFIX__}__c`]'); + expect(code).toContain( + 'global[`${__METRO_GLOBAL_PREFIX__}__registerSegment`]', + ); + }); + + it('patches Metro require globals with Windows paths', () => { + const code = transform( + 'C:\\repo\\node_modules\\metro-runtime\\src\\polyfills\\require.js', + ); + + expect(code).toContain('global[`${__METRO_GLOBAL_PREFIX__}__r`]'); + expect(code).toContain('global[`${__METRO_GLOBAL_PREFIX__}__c`]'); + expect(code).toContain( + 'global[`${__METRO_GLOBAL_PREFIX__}__registerSegment`]', + ); + }); +}); diff --git a/packages/metro-core/__tests__/plugin/resolver.spec.ts b/packages/metro-core/__tests__/plugin/resolver.spec.ts index 37f2bc6938c..a1f689a4095 100644 --- a/packages/metro-core/__tests__/plugin/resolver.spec.ts +++ b/packages/metro-core/__tests__/plugin/resolver.spec.ts @@ -1,6 +1,6 @@ import path from 'node:path'; import type { CustomResolutionContext, CustomResolver } from 'metro-resolver'; -import { describe, expect, it, vi } from 'vitest'; +import { describe, expect, it, rs } from '@rstest/core'; import { createResolveRequest } from '../../src/plugin/resolver'; import type { ModuleFederationConfigNormalized } from '../../src/types'; import type { VirtualModuleManager } from '../../src/utils'; @@ -86,7 +86,7 @@ function createSharedResolverFixture({ const projectDir = '/project'; const tmpDir = path.join(projectDir, 'node_modules', '.mf-metro'); const config = createConfig(sharedName, importName); - const fallbackResolver = vi.fn(() => ({ + const fallbackResolver = rs.fn(() => ({ type: 'sourceFile', filePath: '/fallback.js', })); @@ -95,7 +95,7 @@ function createSharedResolverFixture({ fallbackResolver, ); const vmManager: Pick = { - registerVirtualModule: vi.fn(), + registerVirtualModule: rs.fn(), }; const resolveRequest = createResolveRequest({ @@ -117,6 +117,19 @@ function createSharedResolverFixture({ }; } +function createBaseConfig(): ModuleFederationConfigNormalized { + return { + name: 'mini', + filename: 'mini.bundle', + remotes: {}, + exposes: {}, + shared: {}, + shareStrategy: 'loaded-first', + plugins: [], + dts: false, + }; +} + describe('createResolveRequest', () => { it.each([ { @@ -158,7 +171,7 @@ describe('createResolveRequest', () => { // The resolver also registers the virtual module it returns. The path // must stay keyed by sharedName, while the generated code loads the // actual package import that Metro resolved. - const [[registeredPath, registeredModule]] = vi.mocked( + const [[registeredPath, registeredModule]] = rs.mocked( vmManager.registerVirtualModule, ).mock.calls; expect(registeredPath).toBe(expectedPath); @@ -168,4 +181,40 @@ describe('createResolveRequest', () => { expect(fallbackResolver).not.toHaveBeenCalled(); }, ); + + it('patches HMRClient when Metro resolves it with Windows separators', () => { + const projectDir = '/project'; + const tmpDir = path.join(projectDir, 'node_modules', '.mf-metro'); + const fallbackResolver = rs.fn(() => ({ + type: 'sourceFile', + filePath: + 'C:\\project\\node_modules\\react-native\\Libraries\\Utilities\\HMRClient.js', + })); + const context = createResolverContext( + path.join(projectDir, 'src', 'App.tsx'), + fallbackResolver, + ); + const vmManager: Pick = { + registerVirtualModule: rs.fn(), + }; + + const resolveRequest = createResolveRequest({ + isRemote: false, + hacks: { + patchHMRClient: true, + patchInitializeCore: false, + }, + options: createBaseConfig(), + paths: createPaths(projectDir, tmpDir), + vmManager, + customResolver: fallbackResolver, + }); + + const resolved = resolveRequest(context, 'HMRClient', 'android'); + + expect(resolved).toEqual({ + type: 'sourceFile', + filePath: expect.stringContaining(path.join('modules', 'HMRClient.ts')), + }); + }); }); diff --git a/packages/metro-core/__tests__/plugin/rewrite-request.spec.ts b/packages/metro-core/__tests__/plugin/rewrite-request.spec.ts index 804b43ea1b5..8af0e904661 100644 --- a/packages/metro-core/__tests__/plugin/rewrite-request.spec.ts +++ b/packages/metro-core/__tests__/plugin/rewrite-request.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { createRewriteRequest } from '../../src/plugin/rewrite-request'; describe('createRewriteRequest', () => { diff --git a/packages/metro-core/__tests__/plugin/serializer.spec.ts b/packages/metro-core/__tests__/plugin/serializer.spec.ts index 287aa0d1dbf..f6a599e735d 100644 --- a/packages/metro-core/__tests__/plugin/serializer.spec.ts +++ b/packages/metro-core/__tests__/plugin/serializer.spec.ts @@ -1,20 +1,23 @@ -import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { beforeEach, describe, expect, it, rs } from '@rstest/core'; import { ConfigError } from '../../src/utils/errors'; -vi.mock('../../src/utils/metro-compat', () => { - const baseJSBundle = vi.fn(() => ({ mocked: true })); +rs.mock('../../src/utils/metro-compat', () => { + const baseJSBundle = rs.fn(() => ({ mocked: true })); return { CountingSet: class CountingSet extends Set {}, baseJSBundle, - bundleToString: vi.fn(() => ({ code: 'serialized-output' })), + bundleToString: rs.fn(() => ({ code: 'serialized-output' })), }; }); import { getModuleFederationSerializer } from '../../src/plugin/serializer'; import { baseJSBundle } from '../../src/utils/metro-compat'; -function createSerializer(exposes: Record) { +function createSerializer( + exposes: Record, + isUsingMFBundleCommand = true, +) { return getModuleFederationSerializer( { name: 'MFExampleMini', @@ -25,7 +28,7 @@ function createSerializer(exposes: Record) { shareStrategy: 'loaded-first', plugins: [], }, - true, + isUsingMFBundleCommand, ); } @@ -45,7 +48,7 @@ function createGraph() { describe('getModuleFederationSerializer', () => { beforeEach(() => { - vi.clearAllMocks(); + rs.clearAllMocks(); }); it('matches expose paths when the entry path contains backslashes', async () => { @@ -62,6 +65,27 @@ describe('getModuleFederationSerializer', () => { expect(baseJSBundle).toHaveBeenCalledTimes(1); }); + it('uses POSIX dependency keys for Windows split bundle entry paths', async () => { + const serializer = createSerializer({}, false); + + await expect( + serializer( + '/projectRoot/src\\info.tsx', + [], + createGraph(), + createSerializerOptions(), + ), + ).resolves.toBe('serialized-output'); + + const preModules = rs.mocked(baseJSBundle).mock.calls[0][1] as any[]; + expect(preModules[0].output[0].data.code).toContain( + 'deps.shared["src/info"]', + ); + expect(preModules[1].output[0].data.code).toContain( + 'deps.remotes["src/info"]', + ); + }); + it('matches expose paths without extension against resolved entry files', async () => { const serializer = createSerializer({ './info': './src/info' }); @@ -92,7 +116,7 @@ describe('getModuleFederationSerializer', () => { ).resolves.toBe('serialized-output'); expect(baseJSBundle).toHaveBeenCalledTimes(1); - const preModules = vi.mocked(baseJSBundle).mock.calls[0][1] as any[]; + const preModules = rs.mocked(baseJSBundle).mock.calls[0][1] as any[]; expect(preModules[0].output[0].data.code).toContain('["exposed/tsx"]'); expect(preModules[1].output[0].data.code).toContain('["exposed/tsx"]'); }); diff --git a/packages/metro-core/__tests__/plugin/validate-options.spec.ts b/packages/metro-core/__tests__/plugin/validate-options.spec.ts index f3bce196a36..bcd03f36450 100644 --- a/packages/metro-core/__tests__/plugin/validate-options.spec.ts +++ b/packages/metro-core/__tests__/plugin/validate-options.spec.ts @@ -1,4 +1,4 @@ -import { afterEach, describe, expect, it, vi } from 'vitest'; +import { afterEach, describe, expect, it, rs } from '@rstest/core'; import { validateOptions } from '../../src/plugin/validate-options'; function getValidConfig() { @@ -25,11 +25,11 @@ function getValidConfig() { describe('validateOptions', () => { afterEach(() => { - vi.restoreAllMocks(); + rs.restoreAllMocks(); }); it('warns when unsupported options are configured', () => { - const warnSpy = vi + const warnSpy = rs .spyOn(console, 'warn') .mockImplementation(() => undefined); @@ -44,7 +44,7 @@ describe('validateOptions', () => { }); it('warns that runtime plugin params are not supported', () => { - const warnSpy = vi + const warnSpy = rs .spyOn(console, 'warn') .mockImplementation(() => undefined); @@ -59,7 +59,7 @@ describe('validateOptions', () => { }); it('does not warn for runtime plugin tuple without params', () => { - const warnSpy = vi + const warnSpy = rs .spyOn(console, 'warn') .mockImplementation(() => undefined); @@ -72,7 +72,7 @@ describe('validateOptions', () => { }); it('warns when deprecated plugins is used', () => { - const warnSpy = vi + const warnSpy = rs .spyOn(console, 'warn') .mockImplementation(() => undefined); diff --git a/packages/metro-core/__tests__/plugin/with-module-federation.spec.ts b/packages/metro-core/__tests__/plugin/with-module-federation.spec.ts index 744ba3722f1..3c5345dc80e 100644 --- a/packages/metro-core/__tests__/plugin/with-module-federation.spec.ts +++ b/packages/metro-core/__tests__/plugin/with-module-federation.spec.ts @@ -1,14 +1,14 @@ import path from 'node:path'; import { vol } from 'memfs'; -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { afterEach, beforeEach, describe, expect, it, rs } from '@rstest/core'; -vi.mock('node:fs', () => { +rs.mock('node:fs', () => { const memfs = require('memfs').fs; return { ...memfs, default: memfs }; }); -vi.mock('../../src/plugin/babel-transformer', () => ({ - createBabelTransformer: vi.fn( +rs.mock('../../src/plugin/babel-transformer', () => ({ + createBabelTransformer: rs.fn( ({ tmpDirPath }: { tmpDirPath: string }) => `${tmpDirPath}/babel-transformer.js`, ), @@ -60,8 +60,8 @@ function createMetroConfig(projectRoot: string) { return { projectRoot, serializer: { - getModulesRunBeforeMainModule: vi.fn(() => []), - getPolyfills: vi.fn(() => []), + getModulesRunBeforeMainModule: rs.fn(() => []), + getPolyfills: rs.fn(() => []), }, transformer: { babelTransformerPath: path.join(projectRoot, 'babel-transformer.js'), @@ -85,7 +85,7 @@ describe('withModuleFederation', () => { delete (global as any).__METRO_FEDERATION_REMOTE_ENTRY_PATH; delete (global as any).__METRO_FEDERATION_MANIFEST_PATH; vol.reset(); - vi.restoreAllMocks(); + rs.restoreAllMocks(); }); it('uses runtimePlugins in normalized federation config', () => { @@ -111,7 +111,7 @@ describe('withModuleFederation', () => { const metroConfig = createMetroConfig(projectRoot); const runtimePluginPath = path.join(projectRoot, 'runtime-plugin.js'); vol.writeFileSync(runtimePluginPath, 'module.exports = () => ({})'); - const warnSpy = vi + const warnSpy = rs .spyOn(console, 'warn') .mockImplementation(() => undefined); @@ -129,7 +129,7 @@ describe('withModuleFederation', () => { const metroConfig = createMetroConfig(projectRoot); const runtimePluginPath = path.join(projectRoot, 'runtime-plugin.js'); vol.writeFileSync(runtimePluginPath, 'module.exports = () => ({})'); - const warnSpy = vi + const warnSpy = rs .spyOn(console, 'warn') .mockImplementation(() => undefined); diff --git a/packages/metro-core/babel-plugin/patch-initialize-core.js b/packages/metro-core/babel-plugin/patch-initialize-core.js index 100743bc7a9..dea3d091f23 100644 --- a/packages/metro-core/babel-plugin/patch-initialize-core.js +++ b/packages/metro-core/babel-plugin/patch-initialize-core.js @@ -45,9 +45,9 @@ function metroPatchInitializeCorePlugin() { Program: { enter(_, state) { state.hasInjected = false; - state.shouldTransform = state.file.opts.filename.includes( - 'react-native/Libraries/Core/InitializeCore.js', - ); + state.shouldTransform = state.file.opts.filename + .replaceAll('\\', '/') + .includes('react-native/Libraries/Core/InitializeCore.js'); }, exit(path, state) { if (!state.shouldTransform) return; diff --git a/packages/metro-core/babel-plugin/patch-require.js b/packages/metro-core/babel-plugin/patch-require.js index 487fd7d092b..2a1b820134e 100644 --- a/packages/metro-core/babel-plugin/patch-require.js +++ b/packages/metro-core/babel-plugin/patch-require.js @@ -140,9 +140,9 @@ function metroPatchRequireBabelPlugin() { Program: { enter(_, state) { // Transform only require.js from metro-runtime - state.shouldTransform = state.file.opts.filename.includes( - 'metro-runtime/src/polyfills/require.js', - ); + state.shouldTransform = state.file.opts.filename + .replaceAll('\\', '/') + .includes('metro-runtime/src/polyfills/require.js'); // Perform refreshSymbols transformation only once // Because it is referenced in multiple places state.hasTransformed = { diff --git a/packages/metro-core/package.json b/packages/metro-core/package.json index 5af1a8c55e1..a1b63c6c8a3 100644 --- a/packages/metro-core/package.json +++ b/packages/metro-core/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/metro", - "version": "2.6.0", + "version": "2.8.0", "description": "Module Federation for Metro bundler", "keywords": [ "module-federation", @@ -57,8 +57,8 @@ }, "scripts": { "build": "rslib build", - "test": "vitest run --config vitest.config.mts", - "test:watch": "vitest --config vitest.config.mts", + "test": "rstest", + "test:watch": "rstest --watch", "typecheck": "tsc --noEmit", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.{ts,tsx,js,jsx}\"" }, @@ -87,9 +87,9 @@ } }, "devDependencies": { - "@rslib/core": "^0.10.0", - "@typescript-eslint/eslint-plugin": "8.54.0", - "@typescript-eslint/parser": "8.54.0", + "@rslib/core": "^0.23.2", + "@typescript-eslint/eslint-plugin": "8.56.1", + "@typescript-eslint/parser": "8.56.1", "@types/node": "^20.19.5", "@types/react": "^19.1.0", "memfs": "4.46.0", @@ -101,6 +101,6 @@ "react": "19.1.0", "react-native": "0.80.0", "ts-node": "^10.9.2", - "typescript": "^5.8.3" + "typescript": "^6.0.3" } } diff --git a/packages/metro-core/rstest.config.mts b/packages/metro-core/rstest.config.mts new file mode 100644 index 00000000000..85219860b09 --- /dev/null +++ b/packages/metro-core/rstest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({ + testEnvironment: 'node', + include: ['__tests__/**/*.spec.ts', '__tests__/**/*.test.ts'], + globals: true, +}); diff --git a/packages/metro-core/src/modules/asyncRequire.ts b/packages/metro-core/src/modules/asyncRequire.ts index 1e30ee7bc10..18d400bdad7 100644 --- a/packages/metro-core/src/modules/asyncRequire.ts +++ b/packages/metro-core/src/modules/asyncRequire.ts @@ -27,8 +27,8 @@ function getBundleId(bundlePath: string, publicPath: string) { if (path.startsWith('/')) { path = path.slice(1); } - // remove the query params - path = path.split('?')[0]; + // remove the query params and normalize Windows separators + path = path.split('?')[0].replaceAll('\\', '/'); // remove the bundle extension return path.replace('.bundle', ''); } diff --git a/packages/metro-core/src/plugin/helpers.ts b/packages/metro-core/src/plugin/helpers.ts index e6f80ea312f..938a1991e2b 100644 --- a/packages/metro-core/src/plugin/helpers.ts +++ b/packages/metro-core/src/plugin/helpers.ts @@ -13,8 +13,18 @@ export function isUsingMFBundleCommand(command = process.argv[2]) { } export function replaceExtension(filepath: string, extension: string) { - const { dir, name } = path.parse(filepath); - return path.format({ dir, name, ext: extension }); + // Only treat dots after the last path separator as file extensions. + const separatorIndex = Math.max( + filepath.lastIndexOf('/'), + filepath.lastIndexOf('\\'), + ); + const dotIndex = filepath.lastIndexOf('.'); + + // Dotfiles and directory names with dots should not be truncated. + const extensionStart = + dotIndex > separatorIndex + 1 ? dotIndex : filepath.length; + + return `${filepath.slice(0, extensionStart)}${extension}`; } export function removeExtension(filepath: string) { diff --git a/packages/metro-core/src/plugin/resolver.ts b/packages/metro-core/src/plugin/resolver.ts index 42faf51204e..524503cfe28 100644 --- a/packages/metro-core/src/plugin/resolver.ts +++ b/packages/metro-core/src/plugin/resolver.ts @@ -227,7 +227,10 @@ function resolveModule(moduleName: string): string { function replaceModule(from: RegExp, to: string | null) { return (resolved: Resolution): Resolution => { - if (resolved.type === 'sourceFile' && from.test(resolved.filePath)) { + if ( + resolved.type === 'sourceFile' && + from.test(toPosixPath(resolved.filePath)) + ) { if (to === null) return { type: 'empty' }; return { type: 'sourceFile', filePath: to }; } diff --git a/packages/metro-core/src/plugin/serializer.ts b/packages/metro-core/src/plugin/serializer.ts index 0817f6fdaca..2cc214505d5 100644 --- a/packages/metro-core/src/plugin/serializer.ts +++ b/packages/metro-core/src/plugin/serializer.ts @@ -200,8 +200,7 @@ function getBundlePath( const relativeEntryPath = path.relative(projectRoot, entryPoint); const normalizedRelativeEntryPath = normalizeEntryPath(relativeEntryPath); if (!isUsingMFBundleCommand) { - const { dir, name } = path.parse(relativeEntryPath); - return path.format({ dir, name, ext: '' }); + return removePathExtension(normalizedRelativeEntryPath); } // try to match with an exposed module first diff --git a/packages/metro-core/tsconfig.build.json b/packages/metro-core/tsconfig.build.json index 587e9fb1b90..f28f69f1b74 100644 --- a/packages/metro-core/tsconfig.build.json +++ b/packages/metro-core/tsconfig.build.json @@ -2,8 +2,8 @@ "extends": "./tsconfig.json", "exclude": ["src/modules"], "compilerOptions": { - "rootDir": "src", - "outDir": "dist", + "rootDir": "./src", + "outDir": "./dist", "sourceMap": false, "declarationMap": false } diff --git a/packages/metro-core/tsconfig.json b/packages/metro-core/tsconfig.json index a58257592ff..21260bfe236 100644 --- a/packages/metro-core/tsconfig.json +++ b/packages/metro-core/tsconfig.json @@ -2,10 +2,10 @@ "extends": "../../tsconfig.base.json", "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts"], "compilerOptions": { - "rootDir": "src", + "rootDir": "./src", "jsx": "react-jsx", "paths": { - "metro/private/*": ["metro/src/*"] + "metro/private/*": ["./node_modules/metro/src/*"] } } } diff --git a/packages/metro-core/tsconfig.lib.json b/packages/metro-core/tsconfig.lib.json index ce71b83a01e..408e1e4c7c1 100644 --- a/packages/metro-core/tsconfig.lib.json +++ b/packages/metro-core/tsconfig.lib.json @@ -6,5 +6,5 @@ "types": ["node"] }, "include": ["src/**/*.ts"], - "exclude": ["vitest.config.mts", "src/**/*.spec.ts", "src/**/*.test.ts"] + "exclude": ["rstest.config.mts", "src/**/*.spec.ts", "src/**/*.test.ts"] } diff --git a/packages/metro-core/tsconfig.spec.json b/packages/metro-core/tsconfig.spec.json index 87a3cf65d5e..a8a1ad9e59c 100644 --- a/packages/metro-core/tsconfig.spec.json +++ b/packages/metro-core/tsconfig.spec.json @@ -3,11 +3,10 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "moduleResolution": "node10", - "types": ["vitest/globals", "node"] + "types": ["@rstest/core/globals", "node"] }, "include": [ - "vitest.config.mts", + "rstest.config.mts", "__tests__/**/*.test.ts", "__tests__/**/*.spec.ts", "src/**/*.d.ts" diff --git a/packages/metro-core/vitest.config.mts b/packages/metro-core/vitest.config.mts deleted file mode 100644 index a0988637797..00000000000 --- a/packages/metro-core/vitest.config.mts +++ /dev/null @@ -1,10 +0,0 @@ -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - cacheDir: '../../node_modules/.vitest/metro-core', - test: { - environment: 'node', - include: ['__tests__/**/*.spec.ts', '__tests__/**/*.test.ts'], - globals: true, - }, -}); diff --git a/packages/metro-plugin-rnc-cli/CHANGELOG.md b/packages/metro-plugin-rnc-cli/CHANGELOG.md index 6c87cf570d7..1a15cecb7db 100644 --- a/packages/metro-plugin-rnc-cli/CHANGELOG.md +++ b/packages/metro-plugin-rnc-cli/CHANGELOG.md @@ -1,5 +1,21 @@ # @module-federation/metro-plugin-rnc-cli +## 2.8.0 + +### Patch Changes + +- Updated dependencies [2dc9a40] +- Updated dependencies [d4da7fb] +- Updated dependencies [7c4ac9f] + - @module-federation/metro@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [61fe85d] + - @module-federation/metro@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/metro-plugin-rnc-cli/jest.config.ts b/packages/metro-plugin-rnc-cli/jest.config.ts index 1db901e7000..bf341717937 100644 --- a/packages/metro-plugin-rnc-cli/jest.config.ts +++ b/packages/metro-plugin-rnc-cli/jest.config.ts @@ -3,7 +3,7 @@ export default { preset: '../../jest.preset.js', testEnvironment: 'node', transform: { - '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], + '^.+\\.[tj]sx?$': ['@swc/jest'], }, moduleFileExtensions: ['ts', 'js', 'html'], coverageDirectory: '../../coverage/packages/metro-rnc-cli', diff --git a/packages/metro-plugin-rnc-cli/package.json b/packages/metro-plugin-rnc-cli/package.json index 535896f46df..51b9c4bce45 100644 --- a/packages/metro-plugin-rnc-cli/package.json +++ b/packages/metro-plugin-rnc-cli/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/metro-plugin-rnc-cli", - "version": "2.6.0", + "version": "2.8.0", "description": "Metro Module Federation plugin for React Native Enterprise Framework (RNEF)", "keywords": [ "rnc", @@ -34,8 +34,9 @@ }, "devDependencies": { "@module-federation/metro": "workspace:*", - "@typescript-eslint/eslint-plugin": "8.54.0", - "@typescript-eslint/parser": "8.54.0" + "@typescript-eslint/eslint-plugin": "8.56.1", + "@typescript-eslint/parser": "8.56.1", + "typescript": "^6.0.3" }, "scripts": { "build": "echo 'No build needed for metro-plugin-rnc-cli - pure JavaScript package'", diff --git a/packages/metro-plugin-rnef/CHANGELOG.md b/packages/metro-plugin-rnef/CHANGELOG.md index 2c8d0618fa4..c238f6f66ba 100644 --- a/packages/metro-plugin-rnef/CHANGELOG.md +++ b/packages/metro-plugin-rnef/CHANGELOG.md @@ -1,5 +1,21 @@ # @module-federation/metro-plugin-rnef +## 2.8.0 + +### Patch Changes + +- Updated dependencies [2dc9a40] +- Updated dependencies [d4da7fb] +- Updated dependencies [7c4ac9f] + - @module-federation/metro@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [61fe85d] + - @module-federation/metro@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/metro-plugin-rnef/package.json b/packages/metro-plugin-rnef/package.json index b3b3556bcda..67b0131bf7b 100644 --- a/packages/metro-plugin-rnef/package.json +++ b/packages/metro-plugin-rnef/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/metro-plugin-rnef", - "version": "2.6.0", + "version": "2.8.0", "description": "Metro Module Federation plugin for React Native Enterprise Framework (RNEF). Deprecated: use @module-federation/metro-plugin-rock instead.", "keywords": [ "rnef", @@ -46,10 +46,10 @@ "@module-federation/metro": "workspace:*", "@rnef/config": "^0.7.18", "@rnef/tools": "^0.7.18", - "@rslib/core": "^0.10.0", - "@typescript-eslint/eslint-plugin": "8.54.0", - "@typescript-eslint/parser": "8.54.0", + "@rslib/core": "^0.23.2", + "@typescript-eslint/eslint-plugin": "8.56.1", + "@typescript-eslint/parser": "8.56.1", "@types/node": "^20.0.0", - "typescript": "^5.8.3" + "typescript": "^6.0.3" } } diff --git a/packages/metro-plugin-rock/CHANGELOG.md b/packages/metro-plugin-rock/CHANGELOG.md index bf559ae48cb..c472edf1916 100644 --- a/packages/metro-plugin-rock/CHANGELOG.md +++ b/packages/metro-plugin-rock/CHANGELOG.md @@ -1,5 +1,21 @@ # @module-federation/metro-plugin-rock +## 2.8.0 + +### Patch Changes + +- Updated dependencies [2dc9a40] +- Updated dependencies [d4da7fb] +- Updated dependencies [7c4ac9f] + - @module-federation/metro@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [61fe85d] + - @module-federation/metro@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/metro-plugin-rock/package.json b/packages/metro-plugin-rock/package.json index 8e2a2c0a3e9..90eee5151f2 100644 --- a/packages/metro-plugin-rock/package.json +++ b/packages/metro-plugin-rock/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/metro-plugin-rock", - "version": "2.6.0", + "version": "2.8.0", "description": "Metro Module Federation plugin for Rock", "keywords": [ "rock", @@ -44,10 +44,10 @@ "@module-federation/metro": "workspace:*", "@rock-js/config": "^0.13.0", "@rock-js/tools": "^0.13.0", - "@rslib/core": "^0.10.0", - "@typescript-eslint/eslint-plugin": "8.54.0", - "@typescript-eslint/parser": "8.54.0", + "@rslib/core": "^0.23.2", + "@typescript-eslint/eslint-plugin": "8.56.1", + "@typescript-eslint/parser": "8.56.1", "@types/node": "^20.0.0", - "typescript": "^5.8.3" + "typescript": "^6.0.3" } } diff --git a/packages/modernjs-v3/CHANGELOG.md b/packages/modernjs-v3/CHANGELOG.md index a44061a05ce..b4c5af671bf 100644 --- a/packages/modernjs-v3/CHANGELOG.md +++ b/packages/modernjs-v3/CHANGELOG.md @@ -1,5 +1,42 @@ # @module-federation/modern-js-v3 +## 2.8.0 + +### Patch Changes + +- dcc96d1: fix(modernjs-v3): set optimization.usedExports to "global" to prevent tree shaking issues in micro frontend mode +- 6ee67dc: Reduce installed and bundled size by replacing general-purpose cache, path, version, package lookup, scheduling, fetch, and error fallback dependencies with focused built-in utilities. +- 681e5d2: feat(dts-plugin): support ts 7 for federated type generation while keeping existing ts versions supported +- f796458: Automatically select federation optimization targets for Modern.js browser and + SSR builds, with an option to disable this behavior. +- Updated dependencies [cef63f9] +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/rsbuild-plugin@2.8.0 + - @module-federation/enhanced@2.8.0 + - @module-federation/sdk@2.8.0 + - @module-federation/bridge-react@2.8.0 + - @module-federation/node@2.7.47 + - @module-federation/runtime@2.8.0 + - @module-federation/cli@2.8.0 + +## 2.7.0 + +### Patch Changes + +- d13cafa: Disable lazy compilation for Modern.js v3 producer apps. +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] +- Updated dependencies [61fe85d] + - @module-federation/sdk@2.7.0 + - @module-federation/rsbuild-plugin@2.7.0 + - @module-federation/cli@2.7.0 + - @module-federation/enhanced@2.7.0 + - @module-federation/bridge-react@2.7.0 + - @module-federation/node@2.7.46 + - @module-federation/runtime@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/modernjs-v3/package.json b/packages/modernjs-v3/package.json index 340aaa0a126..1254892d02a 100644 --- a/packages/modernjs-v3/package.json +++ b/packages/modernjs-v3/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/modern-js-v3", - "version": "2.6.0", + "version": "2.8.0", "files": [ "dist/", "types.d.ts", @@ -12,7 +12,7 @@ "scripts": { "build": "rslib build", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\"", - "test": "pnpm exec vitest run --passWithNoTests --config vite.config.mts", + "test": "pnpm exec rstest --passWithNoTests", "pre-release": "pnpm run test && pnpm run build" }, "repository": { @@ -137,41 +137,41 @@ "types": "./dist/types/cli/index.d.ts", "author": "hanric ", "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, "dependencies": { "@module-federation/rsbuild-plugin": "workspace:*", "@module-federation/bridge-react": "workspace:*", - "lru-cache": "10.4.3", "@module-federation/enhanced": "workspace:*", "@module-federation/runtime": "workspace:*", "@module-federation/node": "workspace:*", "@module-federation/sdk": "workspace:*", "@module-federation/cli": "workspace:*", "@swc/helpers": "0.5.17", - "node-fetch": "3.3.0", - "jiti": "2.4.2", - "react-error-boundary": "4.1.2" + "jiti": "2.4.2" }, "devDependencies": { "@rsbuild/plugin-react": "1.4.5", + "@rstest/core": "^0.10.6", "@module-federation/manifest": "workspace:*", - "@rslib/core": "0.18.5", - "@rsbuild/core": "2.0.0-beta.2", + "@rslib/core": "0.23.2", + "@rsbuild/core": "2.1.4", "@rspack/core": "2.0.6", - "@modern-js/app-tools": "3.0.1", - "@modern-js/server-runtime": "3.0.1", + "@modern-js/app-tools": "3.5.0", + "@modern-js/server-runtime": "3.5.0", "@modern-js/module-tools": "2.70.5", - "@modern-js/runtime": "3.0.1", - "@modern-js/tsconfig": "3.0.1", + "@modern-js/runtime": "3.5.0", "@types/react": "^18.3.11", "@types/react-dom": "^18.3.0", "react": "~18.3.1", "react-dom": "~18.3.1", - "vitest": "1.6.0" + "typescript": "7.0.2" }, "peerDependencies": { "react": ">=17", "react-dom": ">=17", - "typescript": "^4.9.0 || ^5.0.0", + "typescript": "^4.9.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "vue-tsc": "^1.0.24", "react-router-dom": "^4 || ^5 || ^6 || ^7", "react-router": "^7" diff --git a/packages/modernjs-v3/rstest.config.mts b/packages/modernjs-v3/rstest.config.mts new file mode 100644 index 00000000000..5ac4912aa5b --- /dev/null +++ b/packages/modernjs-v3/rstest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({ + testEnvironment: 'node', + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + reporters: ['default'], + passWithNoTests: true, +}); diff --git a/packages/modernjs-v3/src/cli/configPlugin.spec.ts b/packages/modernjs-v3/src/cli/configPlugin.spec.ts index 94114c007c3..b2d4866144c 100644 --- a/packages/modernjs-v3/src/cli/configPlugin.spec.ts +++ b/packages/modernjs-v3/src/cli/configPlugin.spec.ts @@ -1,5 +1,9 @@ -import { it, expect, describe, vi, afterEach } from 'vitest'; -import { moduleFederationConfigPlugin, patchMFConfig } from './configPlugin'; +import { it, expect, describe, rs, afterEach } from '@rstest/core'; +import { + moduleFederationConfigPlugin, + patchMFConfig, + setDefaultOptimizationTarget, +} from './configPlugin'; import logger from '../logger'; const mfConfig = { @@ -27,18 +31,18 @@ const getModernJsConfig = async ( } as any); await plugin.setup!({ - config: vi.fn((callback) => { + config: rs.fn((callback) => { configCallbacks.push(callback); }), - getConfig: vi.fn(() => modernjsConfig), - modifyBundlerChain: vi.fn(), + getConfig: rs.fn(() => modernjsConfig), + modifyBundlerChain: rs.fn(), } as any); return configCallbacks[0](); }; afterEach(() => { - vi.restoreAllMocks(); + rs.restoreAllMocks(); }); describe('patchMFConfig', async () => { @@ -110,9 +114,60 @@ describe('patchMFConfig', async () => { }); }); +describe('setDefaultOptimizationTarget', () => { + it('defaults to web when SSR is disabled', () => { + const config = { name: 'host' }; + + setDefaultOptimizationTarget(config, false, false); + + expect(config).toMatchObject({ + experiments: { optimization: { target: 'web' } }, + }); + }); + + it('defaults to web for the browser target when SSR is enabled', () => { + const config = { name: 'host' }; + + setDefaultOptimizationTarget(config, true, false); + + expect(config).toMatchObject({ + experiments: { optimization: { target: 'web' } }, + }); + }); + + it('defaults to node for the server target when SSR is enabled', () => { + const config = { name: 'host' }; + + setDefaultOptimizationTarget(config, true, true); + + expect(config).toMatchObject({ + experiments: { optimization: { target: 'node' } }, + }); + }); + + it('preserves an explicitly configured target', () => { + const config = { + name: 'host', + experiments: { optimization: { target: 'web' as const } }, + }; + + setDefaultOptimizationTarget(config, true, true); + + expect(config.experiments.optimization.target).toBe('web'); + }); + + it('does not set a target when autoOptimization is disabled', () => { + const config = { name: 'host' }; + + setDefaultOptimizationTarget(config, true, true, false); + + expect(config).toStrictEqual({ name: 'host' }); + }); +}); + describe('moduleFederationConfigPlugin', async () => { it('disables lazyCompilation when the project is a producer', async () => { - const warnSpy = vi.spyOn(logger, 'warn').mockImplementation(() => {}); + const warnSpy = rs.spyOn(logger, 'warn').mockImplementation(() => {}); const modernJsConfig = await getModernJsConfig( { name: 'remote', @@ -141,7 +196,7 @@ describe('moduleFederationConfigPlugin', async () => { }); it('keeps lazyCompilation unchanged when the project is not a producer', async () => { - const warnSpy = vi.spyOn(logger, 'warn').mockImplementation(() => {}); + const warnSpy = rs.spyOn(logger, 'warn').mockImplementation(() => {}); const modernJsConfig = await getModernJsConfig( { name: 'host', diff --git a/packages/modernjs-v3/src/cli/configPlugin.ts b/packages/modernjs-v3/src/cli/configPlugin.ts index 97928b40b90..98ea54c0ed3 100644 --- a/packages/modernjs-v3/src/cli/configPlugin.ts +++ b/packages/modernjs-v3/src/cli/configPlugin.ts @@ -232,6 +232,22 @@ export const patchMFConfig = ( return mfConfig; }; +export const setDefaultOptimizationTarget = ( + mfConfig: moduleFederationPlugin.ModuleFederationPluginOptions, + enableSSR: boolean, + isServer: boolean, + autoOptimization = true, +) => { + if (!autoOptimization) { + return; + } + + mfConfig.experiments ||= {}; + mfConfig.experiments.optimization ||= {}; + mfConfig.experiments.optimization.target ??= + enableSSR && isServer ? 'node' : 'web'; +}; + function patchIgnoreWarning(chain: BundlerChainConfig) { const ignoreWarnings = chain.get('ignoreWarnings') || []; const ignoredMsgs = [ @@ -369,7 +385,10 @@ export function patchBundlerConfig(options: { modernjsConfig.deploy?.microFrontend && Object.keys(mfConfig.exposes || {}).length ) { - chain.optimization.usedExports(false); + logger.info( + 'optimization.usedExports is set to "global" to avoid tree shaking issues in micro frontend mode.', + ); + chain.optimization.usedExports('global'); } } @@ -401,6 +420,12 @@ export const moduleFederationConfigPlugin = ( addMyTypes2Ignored(chain, !isWeb ? ssrConfig : csrConfig); const targetMFConfig = !isWeb ? ssrConfig : csrConfig; + setDefaultOptimizationTarget( + targetMFConfig, + enableSSR, + !isWeb, + userConfig.originPluginOptions.autoOptimization, + ); patchMFConfig(targetMFConfig, !isWeb); if ( diff --git a/packages/modernjs-v3/src/cli/mfRuntimePlugins/inject-node-fetch.ts b/packages/modernjs-v3/src/cli/mfRuntimePlugins/inject-node-fetch.ts index 7ea5c64bf32..71a2761e37c 100644 --- a/packages/modernjs-v3/src/cli/mfRuntimePlugins/inject-node-fetch.ts +++ b/packages/modernjs-v3/src/cli/mfRuntimePlugins/inject-node-fetch.ts @@ -1,12 +1,12 @@ import type { ModuleFederationRuntimePlugin } from '@module-federation/enhanced/runtime'; -import nodeFetch from 'node-fetch'; const injectNodeFetchPlugin: () => ModuleFederationRuntimePlugin = () => ({ name: 'inject-node-fetch-plugin', beforeInit(args) { if (!globalThis.fetch) { - // @ts-expect-error inject node-fetch - globalThis.fetch = nodeFetch; + throw new Error( + '@module-federation/modern-js-v3 requires Node.js 18 or later.', + ); } return args; }, diff --git a/packages/modernjs-v3/src/cli/ssrPlugin.spec.ts b/packages/modernjs-v3/src/cli/ssrPlugin.spec.ts index 66306d5e9c4..47e8c2894b4 100644 --- a/packages/modernjs-v3/src/cli/ssrPlugin.spec.ts +++ b/packages/modernjs-v3/src/cli/ssrPlugin.spec.ts @@ -2,7 +2,7 @@ import path from 'path'; import { createRequire } from 'node:module'; import { mkdtemp, mkdir, rm, writeFile } from 'fs/promises'; import { tmpdir } from 'os'; -import { describe, expect, it, vi } from 'vitest'; +import { describe, expect, it, rs } from '@rstest/core'; const nodeRequire = createRequire(__filename); @@ -30,25 +30,25 @@ const createPluginHarness = async () => { let rsbuildPlugin: any; const api = { - _internalRuntimePlugins: vi.fn(), - _internalServerPlugins: vi.fn(), - config: vi.fn((callback) => { + _internalRuntimePlugins: rs.fn(), + _internalServerPlugins: rs.fn(), + config: rs.fn((callback) => { const config = callback(); rsbuildPlugin = config.builderPlugins[0]; }), - getAppContext: vi.fn(() => ({ bundlerType: 'rspack' })), - getConfig: vi.fn(() => ({ server: { ssr: true } })), - modifyBundlerChain: vi.fn(), - onAfterBuild: vi.fn(), - onDevCompileDone: vi.fn(), + getAppContext: rs.fn(() => ({ bundlerType: 'rspack' })), + getConfig: rs.fn(() => ({ server: { ssr: true } })), + modifyBundlerChain: rs.fn(), + onAfterBuild: rs.fn(), + onDevCompileDone: rs.fn(), }; await moduleFederationSSRPlugin(pluginOptions).setup!(api as any); const rsbuildApi = { - modifyEnvironmentConfig: vi.fn(), - modifyRspackConfig: vi.fn(), - processAssets: vi.fn(), + modifyEnvironmentConfig: rs.fn(), + modifyRspackConfig: rs.fn(), + processAssets: rs.fn(), }; rsbuildPlugin.setup(rsbuildApi); diff --git a/packages/modernjs-v3/src/server/fileCache.spec.ts b/packages/modernjs-v3/src/server/fileCache.spec.ts index f671ac7b699..87b08665b55 100644 --- a/packages/modernjs-v3/src/server/fileCache.spec.ts +++ b/packages/modernjs-v3/src/server/fileCache.spec.ts @@ -1,21 +1,39 @@ -import { it, expect, describe, vi } from 'vitest'; +import { beforeEach, describe, expect, it, rs } from '@rstest/core'; -vi.mock('fs/promises', () => ({ +rs.mock('fs/promises', () => ({ access: () => Promise.resolve(), lstat: () => Promise.resolve({ - mtimeMs: Date.now(), + mtimeMs: 1, size: 4, }), - readFile: () => Promise.resolve('test'), + readFile: rs.fn(() => Promise.resolve('test')), })); +import { readFile } from 'fs/promises'; import { FileCache } from './fileCache'; describe('modern serve static file cache', async () => { + beforeEach(() => { + rs.mocked(readFile).mockClear(); + }); + it('should cache file', async () => { const cache = new FileCache(); const result = await cache.getFile('test.txt'); expect(result?.content).toBe('test'); + + await cache.getFile('test.txt'); + expect(readFile).toHaveBeenCalledTimes(1); + }); + + it('evicts the least recently used file when full', async () => { + const cache = new FileCache(4); + + await cache.getFile('first.txt'); + await cache.getFile('second.txt'); + await cache.getFile('first.txt'); + + expect(readFile).toHaveBeenCalledTimes(3); }); }); diff --git a/packages/modernjs-v3/src/server/fileCache.ts b/packages/modernjs-v3/src/server/fileCache.ts index f509557753f..237a232d0e9 100644 --- a/packages/modernjs-v3/src/server/fileCache.ts +++ b/packages/modernjs-v3/src/server/fileCache.ts @@ -1,5 +1,5 @@ import { access, lstat, readFile } from 'fs/promises'; -import { LRUCache } from 'lru-cache'; +import { SizeLimitedCache } from '@module-federation/bridge-react/size-limited-cache'; const pathExists = async (filepath: string): Promise => { try { @@ -16,9 +16,11 @@ export interface FileResult { } export class FileCache { - private cache = new LRUCache({ - maxSize: 200 * 1024 * 1024, // 200MB - }); + private cache: SizeLimitedCache; + + constructor(maxSize = 200 * 1024 * 1024) { + this.cache = new SizeLimitedCache({ maxSize }); + } /** * Check if file exists and return file info diff --git a/packages/modernjs-v3/src/server/staticMiddleware.spec.ts b/packages/modernjs-v3/src/server/staticMiddleware.spec.ts index b7661259bb4..d37cd778b61 100644 --- a/packages/modernjs-v3/src/server/staticMiddleware.spec.ts +++ b/packages/modernjs-v3/src/server/staticMiddleware.spec.ts @@ -1,14 +1,14 @@ -import { it, expect, describe, vi, beforeEach } from 'vitest'; +import { it, expect, describe, rs, beforeEach } from '@rstest/core'; import { createStaticMiddleware } from './staticMiddleware'; // Mock dependencies -vi.mock('fs/promises', () => ({ - access: vi.fn(), +rs.mock('fs/promises', () => ({ + access: rs.fn(), })); -vi.mock('./fileCache', () => ({ +rs.mock('./fileCache', () => ({ fileCache: { - getFile: vi.fn(), + getFile: rs.fn(), }, })); @@ -22,7 +22,7 @@ describe('staticMiddleware', () => { beforeEach(() => { // Reset all mocks - vi.clearAllMocks(); + rs.clearAllMocks(); // Create middleware instance middleware = createStaticMiddleware({ @@ -31,13 +31,13 @@ describe('staticMiddleware', () => { }); // Setup mock context - nextSpy = vi.fn(); + nextSpy = rs.fn(); mockContext = { req: { path: '', }, - header: vi.fn(), - body: vi.fn(), + header: rs.fn(), + body: rs.fn(), }; }); diff --git a/packages/modernjs-v3/src/types/index.ts b/packages/modernjs-v3/src/types/index.ts index fa1d505437a..5a94cd184b1 100644 --- a/packages/modernjs-v3/src/types/index.ts +++ b/packages/modernjs-v3/src/types/index.ts @@ -4,6 +4,12 @@ import type { StatsAssetResource } from '@module-federation/rsbuild-plugin/utils export interface PluginOptions { config?: moduleFederationPlugin.ModuleFederationPluginOptions; configPath?: string; + /** + * Automatically set the federation optimization target from the Modern.js + * SSR and bundler target configuration. + * @default true + */ + autoOptimization?: boolean; ssr?: | { distOutputDir?: string; diff --git a/packages/modernjs-v3/tsconfig.json b/packages/modernjs-v3/tsconfig.json index 9c6a5722240..5c318adb361 100644 --- a/packages/modernjs-v3/tsconfig.json +++ b/packages/modernjs-v3/tsconfig.json @@ -1,11 +1,27 @@ { - "extends": "@modern-js/tsconfig/base", + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Module Federation Modern.js", "compilerOptions": { + "target": "ES2015", + "lib": ["DOM", "ESNext"], + "allowJs": true, + "module": "ESNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, "declaration": false, "jsx": "preserve", - "baseUrl": "./", - "paths": {}, - "noImplicitAny": false + "experimentalDecorators": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "rootDir": "./src", + "paths": { + "*": ["./*"] + }, + "noImplicitAny": false, + "ignoreDeprecations": "6.0" }, - "include": ["src", "types", "global.d.ts"] + "include": ["src", "types", "global.d.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] } diff --git a/packages/modernjs-v3/vite.config.mts b/packages/modernjs-v3/vite.config.mts deleted file mode 100644 index 8b1968bc101..00000000000 --- a/packages/modernjs-v3/vite.config.mts +++ /dev/null @@ -1,24 +0,0 @@ -/// -import { defineConfig } from 'vite'; - -import tsconfigPaths from 'vite-tsconfig-paths'; - -export default defineConfig({ - cacheDir: '../../node_modules/.vite/modernjs', - - plugins: [tsconfigPaths()], - - // Uncomment this if you are using workers. - // worker: { - // plugins: [ tsconfigPaths() ], - // }, - - test: { - cache: { - dir: '../../node_modules/.vitest', - }, - environment: 'node', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - reporters: ['default'], - }, -}); diff --git a/packages/modernjs/CHANGELOG.md b/packages/modernjs/CHANGELOG.md index ebf6681061f..f38afcb2900 100644 --- a/packages/modernjs/CHANGELOG.md +++ b/packages/modernjs/CHANGELOG.md @@ -1,5 +1,41 @@ # @module-federation/modern-js +## 2.8.0 + +### Patch Changes + +- dcc96d1: fix(modernjs-v3): set optimization.usedExports to "global" to prevent tree shaking issues in micro frontend mode +- 6ee67dc: Reduce installed and bundled size by replacing general-purpose cache, path, version, package lookup, scheduling, fetch, and error fallback dependencies with focused built-in utilities. +- 681e5d2: feat(dts-plugin): support ts 7 for federated type generation while keeping existing ts versions supported +- f796458: Automatically select federation optimization targets for Modern.js browser and + SSR builds, with an option to disable this behavior. +- Updated dependencies [cef63f9] +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/rsbuild-plugin@2.8.0 + - @module-federation/enhanced@2.8.0 + - @module-federation/sdk@2.8.0 + - @module-federation/bridge-react@2.8.0 + - @module-federation/node@2.7.47 + - @module-federation/runtime@2.8.0 + - @module-federation/cli@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] +- Updated dependencies [61fe85d] + - @module-federation/sdk@2.7.0 + - @module-federation/rsbuild-plugin@2.7.0 + - @module-federation/cli@2.7.0 + - @module-federation/enhanced@2.7.0 + - @module-federation/bridge-react@2.7.0 + - @module-federation/node@2.7.46 + - @module-federation/runtime@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/modernjs/package.json b/packages/modernjs/package.json index 14514b4f7ce..11ef9de5dee 100644 --- a/packages/modernjs/package.json +++ b/packages/modernjs/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/modern-js", - "version": "2.6.0", + "version": "2.8.0", "files": [ "dist/", "types.d.ts", @@ -12,7 +12,7 @@ "scripts": { "build": "rslib build", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\"", - "test": "pnpm exec vitest run --passWithNoTests --config vite.config.mts", + "test": "pnpm exec rstest --passWithNoTests", "pre-release": "pnpm run test && pnpm run build" }, "repository": { @@ -137,39 +137,38 @@ "types": "./dist/types/cli/index.d.ts", "author": "hanric ", "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, "dependencies": { - "@modern-js/utils": "2.70.5", "@module-federation/rsbuild-plugin": "workspace:*", "@module-federation/bridge-react": "workspace:*", - "lru-cache": "10.4.3", "@module-federation/enhanced": "workspace:*", "@module-federation/runtime": "workspace:*", "@module-federation/node": "workspace:*", "@module-federation/sdk": "workspace:*", "@module-federation/cli": "workspace:*", "@swc/helpers": "0.5.17", - "node-fetch": "3.3.0", - "jiti": "2.4.2", - "react-error-boundary": "4.1.2" + "jiti": "2.4.2" }, "devDependencies": { "@rsbuild/plugin-react": "1.4.5", + "@rstest/core": "^0.10.6", "@module-federation/manifest": "workspace:*", - "@rslib/core": "0.18.5", + "@rslib/core": "0.23.2", "@rsbuild/core": "1.3.21", "@modern-js/app-tools": "2.70.5", "@modern-js/server-runtime": "2.70.5", "@modern-js/module-tools": "2.70.5", "@modern-js/runtime": "2.70.5", - "@modern-js/tsconfig": "2.70.5", "@types/react": "^18.3.11", "@types/react-dom": "^18.3.0", - "vitest": "1.6.0" + "typescript": "7.0.2" }, "peerDependencies": { "react": ">=17", "react-dom": ">=17", - "typescript": "^4.9.0 || ^5.0.0", + "typescript": "^4.9.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "vue-tsc": "^1.0.24", "react-router-dom": "^4 || ^5 || ^6 || ^7", "react-router": "^7" diff --git a/packages/modernjs/rstest.config.mts b/packages/modernjs/rstest.config.mts new file mode 100644 index 00000000000..5ac4912aa5b --- /dev/null +++ b/packages/modernjs/rstest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({ + testEnvironment: 'node', + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + reporters: ['default'], + passWithNoTests: true, +}); diff --git a/packages/modernjs/src/cli/configPlugin.spec.ts b/packages/modernjs/src/cli/configPlugin.spec.ts index fc531db627e..fc4f032a6b6 100644 --- a/packages/modernjs/src/cli/configPlugin.spec.ts +++ b/packages/modernjs/src/cli/configPlugin.spec.ts @@ -1,5 +1,5 @@ -import { it, expect, describe } from 'vitest'; -import { patchMFConfig } from './configPlugin'; +import { it, expect, describe } from '@rstest/core'; +import { patchMFConfig, setDefaultOptimizationTarget } from './configPlugin'; import { getIPV4 } from './utils'; const mfConfig = { @@ -80,3 +80,54 @@ describe('patchMFConfig', async () => { }); }); }); + +describe('setDefaultOptimizationTarget', () => { + it('defaults to web when SSR is disabled', () => { + const config = { name: 'host' }; + + setDefaultOptimizationTarget(config, false, false); + + expect(config).toMatchObject({ + experiments: { optimization: { target: 'web' } }, + }); + }); + + it('defaults to web for the browser target when SSR is enabled', () => { + const config = { name: 'host' }; + + setDefaultOptimizationTarget(config, true, false); + + expect(config).toMatchObject({ + experiments: { optimization: { target: 'web' } }, + }); + }); + + it('defaults to node for the server target when SSR is enabled', () => { + const config = { name: 'host' }; + + setDefaultOptimizationTarget(config, true, true); + + expect(config).toMatchObject({ + experiments: { optimization: { target: 'node' } }, + }); + }); + + it('preserves an explicitly configured target', () => { + const config = { + name: 'host', + experiments: { optimization: { target: 'web' as const } }, + }; + + setDefaultOptimizationTarget(config, true, true); + + expect(config.experiments.optimization.target).toBe('web'); + }); + + it('does not set a target when autoOptimization is disabled', () => { + const config = { name: 'host' }; + + setDefaultOptimizationTarget(config, true, true, false); + + expect(config).toStrictEqual({ name: 'host' }); + }); +}); diff --git a/packages/modernjs/src/cli/configPlugin.ts b/packages/modernjs/src/cli/configPlugin.ts index c9080bd28b7..f079d99bcf3 100644 --- a/packages/modernjs/src/cli/configPlugin.ts +++ b/packages/modernjs/src/cli/configPlugin.ts @@ -238,6 +238,22 @@ export const patchMFConfig = ( return mfConfig; }; +export const setDefaultOptimizationTarget = ( + mfConfig: moduleFederationPlugin.ModuleFederationPluginOptions, + enableSSR: boolean, + isServer: boolean, + autoOptimization = true, +) => { + if (!autoOptimization) { + return; + } + + mfConfig.experiments ||= {}; + mfConfig.experiments.optimization ||= {}; + mfConfig.experiments.optimization.target ??= + enableSSR && isServer ? 'node' : 'web'; +}; + function patchIgnoreWarning(chain: BundlerChainConfig) { const ignoreWarnings = chain.get('ignoreWarnings') || []; const ignoredMsgs = [ @@ -377,7 +393,10 @@ export function patchBundlerConfig(options: { modernjsConfig.deploy?.microFrontend && Object.keys(mfConfig.exposes || {}).length ) { - chain.optimization.usedExports(false); + logger.info( + 'optimization.usedExports is set to "global" to avoid tree shaking issues in micro frontend mode.', + ); + chain.optimization.usedExports('global'); } } @@ -411,6 +430,12 @@ export const moduleFederationConfigPlugin = ( addMyTypes2Ignored(chain, !isWeb ? ssrConfig : csrConfig); const targetMFConfig = !isWeb ? ssrConfig : csrConfig; + setDefaultOptimizationTarget( + targetMFConfig, + enableSSR, + !isWeb, + userConfig.originPluginOptions.autoOptimization, + ); patchMFConfig(targetMFConfig, !isWeb); if ( diff --git a/packages/modernjs/src/cli/mfRuntimePlugins/inject-node-fetch.ts b/packages/modernjs/src/cli/mfRuntimePlugins/inject-node-fetch.ts index 7ea5c64bf32..9c0910f3fc1 100644 --- a/packages/modernjs/src/cli/mfRuntimePlugins/inject-node-fetch.ts +++ b/packages/modernjs/src/cli/mfRuntimePlugins/inject-node-fetch.ts @@ -1,12 +1,12 @@ import type { ModuleFederationRuntimePlugin } from '@module-federation/enhanced/runtime'; -import nodeFetch from 'node-fetch'; const injectNodeFetchPlugin: () => ModuleFederationRuntimePlugin = () => ({ name: 'inject-node-fetch-plugin', beforeInit(args) { if (!globalThis.fetch) { - // @ts-expect-error inject node-fetch - globalThis.fetch = nodeFetch; + throw new Error( + '@module-federation/modern-js requires Node.js 18 or later.', + ); } return args; }, diff --git a/packages/modernjs/src/cli/ssrPlugin.spec.ts b/packages/modernjs/src/cli/ssrPlugin.spec.ts index 468ea97b424..b8da455a0de 100644 --- a/packages/modernjs/src/cli/ssrPlugin.spec.ts +++ b/packages/modernjs/src/cli/ssrPlugin.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it, vi } from 'vitest'; +import { describe, expect, it, rs } from '@rstest/core'; const createPluginHarness = async () => { const { moduleFederationSSRPlugin } = await import('./ssrPlugin'); @@ -19,26 +19,26 @@ const createPluginHarness = async () => { let rsbuildPlugin: any; const api = { - _internalRuntimePlugins: vi.fn(), - _internalServerPlugins: vi.fn(), - config: vi.fn((callback) => { + _internalRuntimePlugins: rs.fn(), + _internalServerPlugins: rs.fn(), + config: rs.fn((callback) => { const config = callback(); rsbuildPlugin = config.builderPlugins[0]; }), - getAppContext: vi.fn(() => ({ bundlerType: 'rspack' })), - getConfig: vi.fn(() => ({ server: { ssr: true } })), - modifyBundlerChain: vi.fn(), - onAfterBuild: vi.fn(), - onDevCompileDone: vi.fn(), + getAppContext: rs.fn(() => ({ bundlerType: 'rspack' })), + getConfig: rs.fn(() => ({ server: { ssr: true } })), + modifyBundlerChain: rs.fn(), + onAfterBuild: rs.fn(), + onDevCompileDone: rs.fn(), }; await moduleFederationSSRPlugin(pluginOptions).setup!(api as any); const rsbuildApi = { - modifyEnvironmentConfig: vi.fn(), - modifyRspackConfig: vi.fn(), - modifyWebpackConfig: vi.fn(), - processAssets: vi.fn(), + modifyEnvironmentConfig: rs.fn(), + modifyRspackConfig: rs.fn(), + modifyWebpackConfig: rs.fn(), + processAssets: rs.fn(), }; rsbuildPlugin.setup(rsbuildApi); diff --git a/packages/modernjs/src/server/fileCache.spec.ts b/packages/modernjs/src/server/fileCache.spec.ts index f671ac7b699..87b08665b55 100644 --- a/packages/modernjs/src/server/fileCache.spec.ts +++ b/packages/modernjs/src/server/fileCache.spec.ts @@ -1,21 +1,39 @@ -import { it, expect, describe, vi } from 'vitest'; +import { beforeEach, describe, expect, it, rs } from '@rstest/core'; -vi.mock('fs/promises', () => ({ +rs.mock('fs/promises', () => ({ access: () => Promise.resolve(), lstat: () => Promise.resolve({ - mtimeMs: Date.now(), + mtimeMs: 1, size: 4, }), - readFile: () => Promise.resolve('test'), + readFile: rs.fn(() => Promise.resolve('test')), })); +import { readFile } from 'fs/promises'; import { FileCache } from './fileCache'; describe('modern serve static file cache', async () => { + beforeEach(() => { + rs.mocked(readFile).mockClear(); + }); + it('should cache file', async () => { const cache = new FileCache(); const result = await cache.getFile('test.txt'); expect(result?.content).toBe('test'); + + await cache.getFile('test.txt'); + expect(readFile).toHaveBeenCalledTimes(1); + }); + + it('evicts the least recently used file when full', async () => { + const cache = new FileCache(4); + + await cache.getFile('first.txt'); + await cache.getFile('second.txt'); + await cache.getFile('first.txt'); + + expect(readFile).toHaveBeenCalledTimes(3); }); }); diff --git a/packages/modernjs/src/server/fileCache.ts b/packages/modernjs/src/server/fileCache.ts index f509557753f..237a232d0e9 100644 --- a/packages/modernjs/src/server/fileCache.ts +++ b/packages/modernjs/src/server/fileCache.ts @@ -1,5 +1,5 @@ import { access, lstat, readFile } from 'fs/promises'; -import { LRUCache } from 'lru-cache'; +import { SizeLimitedCache } from '@module-federation/bridge-react/size-limited-cache'; const pathExists = async (filepath: string): Promise => { try { @@ -16,9 +16,11 @@ export interface FileResult { } export class FileCache { - private cache = new LRUCache({ - maxSize: 200 * 1024 * 1024, // 200MB - }); + private cache: SizeLimitedCache; + + constructor(maxSize = 200 * 1024 * 1024) { + this.cache = new SizeLimitedCache({ maxSize }); + } /** * Check if file exists and return file info diff --git a/packages/modernjs/src/server/staticMiddleware.spec.ts b/packages/modernjs/src/server/staticMiddleware.spec.ts index b7661259bb4..d37cd778b61 100644 --- a/packages/modernjs/src/server/staticMiddleware.spec.ts +++ b/packages/modernjs/src/server/staticMiddleware.spec.ts @@ -1,14 +1,14 @@ -import { it, expect, describe, vi, beforeEach } from 'vitest'; +import { it, expect, describe, rs, beforeEach } from '@rstest/core'; import { createStaticMiddleware } from './staticMiddleware'; // Mock dependencies -vi.mock('fs/promises', () => ({ - access: vi.fn(), +rs.mock('fs/promises', () => ({ + access: rs.fn(), })); -vi.mock('./fileCache', () => ({ +rs.mock('./fileCache', () => ({ fileCache: { - getFile: vi.fn(), + getFile: rs.fn(), }, })); @@ -22,7 +22,7 @@ describe('staticMiddleware', () => { beforeEach(() => { // Reset all mocks - vi.clearAllMocks(); + rs.clearAllMocks(); // Create middleware instance middleware = createStaticMiddleware({ @@ -31,13 +31,13 @@ describe('staticMiddleware', () => { }); // Setup mock context - nextSpy = vi.fn(); + nextSpy = rs.fn(); mockContext = { req: { path: '', }, - header: vi.fn(), - body: vi.fn(), + header: rs.fn(), + body: rs.fn(), }; }); diff --git a/packages/modernjs/src/types/index.ts b/packages/modernjs/src/types/index.ts index fa1d505437a..5a94cd184b1 100644 --- a/packages/modernjs/src/types/index.ts +++ b/packages/modernjs/src/types/index.ts @@ -4,6 +4,12 @@ import type { StatsAssetResource } from '@module-federation/rsbuild-plugin/utils export interface PluginOptions { config?: moduleFederationPlugin.ModuleFederationPluginOptions; configPath?: string; + /** + * Automatically set the federation optimization target from the Modern.js + * SSR and bundler target configuration. + * @default true + */ + autoOptimization?: boolean; ssr?: | { distOutputDir?: string; diff --git a/packages/modernjs/tsconfig.json b/packages/modernjs/tsconfig.json index 9c6a5722240..5c318adb361 100644 --- a/packages/modernjs/tsconfig.json +++ b/packages/modernjs/tsconfig.json @@ -1,11 +1,27 @@ { - "extends": "@modern-js/tsconfig/base", + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Module Federation Modern.js", "compilerOptions": { + "target": "ES2015", + "lib": ["DOM", "ESNext"], + "allowJs": true, + "module": "ESNext", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, "declaration": false, "jsx": "preserve", - "baseUrl": "./", - "paths": {}, - "noImplicitAny": false + "experimentalDecorators": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "rootDir": "./src", + "paths": { + "*": ["./*"] + }, + "noImplicitAny": false, + "ignoreDeprecations": "6.0" }, - "include": ["src", "types", "global.d.ts"] + "include": ["src", "types", "global.d.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] } diff --git a/packages/modernjs/vite.config.mts b/packages/modernjs/vite.config.mts deleted file mode 100644 index 8b1968bc101..00000000000 --- a/packages/modernjs/vite.config.mts +++ /dev/null @@ -1,24 +0,0 @@ -/// -import { defineConfig } from 'vite'; - -import tsconfigPaths from 'vite-tsconfig-paths'; - -export default defineConfig({ - cacheDir: '../../node_modules/.vite/modernjs', - - plugins: [tsconfigPaths()], - - // Uncomment this if you are using workers. - // worker: { - // plugins: [ tsconfigPaths() ], - // }, - - test: { - cache: { - dir: '../../node_modules/.vitest', - }, - environment: 'node', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - reporters: ['default'], - }, -}); diff --git a/packages/native-federation-tests/package.json b/packages/native-federation-tests/package.json index 1e9ea76b899..ce4fd1e0388 100644 --- a/packages/native-federation-tests/package.json +++ b/packages/native-federation-tests/package.json @@ -95,13 +95,14 @@ "unplugin": "^1.10.1" }, "devDependencies": { + "@rstest/core": "^0.10.6", "directory-tree": "3.5.2", - "vitest": "1.6.0" + "typescript": "6.0.3" }, "scripts": { "build": "tsdown --config tsdown.config.ts && cp package.json dist && cp *.md dist", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\"", - "test": "pnpm exec vitest run --passWithNoTests --config vite.config.mts", + "test": "pnpm exec rstest --passWithNoTests", "pre-release": "pnpm run test && pnpm run build" } } diff --git a/packages/native-federation-tests/rstest.config.mts b/packages/native-federation-tests/rstest.config.mts new file mode 100644 index 00000000000..5ac4912aa5b --- /dev/null +++ b/packages/native-federation-tests/rstest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({ + testEnvironment: 'node', + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + reporters: ['default'], + passWithNoTests: true, +}); diff --git a/packages/native-federation-tests/src/configurations/hostPlugin.test.ts b/packages/native-federation-tests/src/configurations/hostPlugin.test.ts index 0532d083d92..93d45da1a08 100644 --- a/packages/native-federation-tests/src/configurations/hostPlugin.test.ts +++ b/packages/native-federation-tests/src/configurations/hostPlugin.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { retrieveHostConfig } from './hostPlugin'; diff --git a/packages/native-federation-tests/src/configurations/remotePlugin.test.ts b/packages/native-federation-tests/src/configurations/remotePlugin.test.ts index 73e3e0e16ce..f8706f5bd4d 100644 --- a/packages/native-federation-tests/src/configurations/remotePlugin.test.ts +++ b/packages/native-federation-tests/src/configurations/remotePlugin.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { retrieveRemoteConfig } from './remotePlugin'; diff --git a/packages/native-federation-tests/src/configurations/tsconfig.test.json b/packages/native-federation-tests/src/configurations/tsconfig.test.json index 0e105b88cc2..0bcfa41d517 100644 --- a/packages/native-federation-tests/src/configurations/tsconfig.test.json +++ b/packages/native-federation-tests/src/configurations/tsconfig.test.json @@ -3,10 +3,11 @@ "target": "es2017", "module": "esnext", "lib": ["esnext"], - "moduleResolution": "node", + "moduleResolution": "node10", "esModuleInterop": true, "strict": true, "strictNullChecks": true, - "resolveJsonModule": true + "resolveJsonModule": true, + "ignoreDeprecations": "6.0" } } diff --git a/packages/native-federation-tests/src/index.test.ts b/packages/native-federation-tests/src/index.test.ts index e0004f12e8e..ec062774d61 100644 --- a/packages/native-federation-tests/src/index.test.ts +++ b/packages/native-federation-tests/src/index.test.ts @@ -4,7 +4,7 @@ import dirTree from 'directory-tree'; import { rm } from 'fs/promises'; import { join, resolve } from 'path'; import { UnpluginOptions } from 'unplugin'; -import { describe, expect, it, vi } from 'vitest'; +import { describe, expect, it, rs } from '@rstest/core'; import { NativeFederationTestsHost, @@ -176,7 +176,7 @@ describe('index', () => { const zip = new AdmZip(); zip.addLocalFolder(distFolder); - axios.get = vi.fn().mockResolvedValueOnce({ data: zip.toBuffer() }); + axios.get = rs.fn().mockResolvedValueOnce({ data: zip.toBuffer() }); const unplugin = NativeFederationTestsHost.rollup( options, diff --git a/packages/native-federation-tests/src/lib/archiveHandler.test.ts b/packages/native-federation-tests/src/lib/archiveHandler.test.ts index 0b96699ba79..448154e1776 100644 --- a/packages/native-federation-tests/src/lib/archiveHandler.test.ts +++ b/packages/native-federation-tests/src/lib/archiveHandler.test.ts @@ -3,7 +3,7 @@ import axios from 'axios'; import { existsSync, mkdirSync, mkdtempSync, rmSync } from 'fs'; import os from 'os'; import { join } from 'path'; -import { afterAll, describe, expect, it, vi } from 'vitest'; +import { afterAll, describe, expect, it, rs } from '@rstest/core'; import { RemoteOptions } from '../interfaces/RemoteOptions'; import { createTestsArchive, downloadTypesArchive } from './archiveHandler'; @@ -36,7 +36,9 @@ describe('archiveHandler', () => { }); it('throws for unexisting outDir', async () => { - expect(createTestsArchive(remoteOptions, '/foo')).rejects.toThrowError(); + await expect( + createTestsArchive(remoteOptions, '/foo'), + ).rejects.toThrowError(); }); }); @@ -53,19 +55,20 @@ describe('archiveHandler', () => { }; it('throws for unexisting url', async () => { - expect( - downloadTypesArchive(hostOptions)([tmpDir, 'https://foo.it']), + axios.get = rs.fn().mockRejectedValue(new Error('Rejected value')); + + await expect(() => + downloadTypesArchive(hostOptions)([tmpDir, fileToDownload]), ).rejects.toThrowError( 'Network error: Unable to download federated mocks', ); - // .rejects.toThrowError('getaddrinfo ENOTFOUND foo.it') }); it('correctly extract downloaded archive', async () => { const zip = new AdmZip(); zip.addLocalFolder(tmpDir); - axios.get = vi.fn().mockResolvedValueOnce({ data: zip.toBuffer() }); + axios.get = rs.fn().mockResolvedValueOnce({ data: zip.toBuffer() }); await downloadTypesArchive(hostOptions)([ destinationFolder, @@ -78,7 +81,7 @@ describe('archiveHandler', () => { const zip = new AdmZip(); zip.addLocalFolder(tmpDir); - axios.get = vi.fn().mockResolvedValue({ data: zip.toBuffer() }); + axios.get = rs.fn().mockResolvedValue({ data: zip.toBuffer() }); const downloader = downloadTypesArchive(hostOptions); diff --git a/packages/native-federation-tests/tsconfig.json b/packages/native-federation-tests/tsconfig.json index 02d112283c6..4ff66fe556c 100644 --- a/packages/native-federation-tests/tsconfig.json +++ b/packages/native-federation-tests/tsconfig.json @@ -3,11 +3,12 @@ "target": "es2017", "module": "esnext", "lib": ["esnext"], - "moduleResolution": "node", + "moduleResolution": "node10", "esModuleInterop": true, "strict": true, "strictNullChecks": true, "resolveJsonModule": true, - "types": ["vitest"] + "types": ["@rstest/core"], + "ignoreDeprecations": "6.0" } } diff --git a/packages/native-federation-tests/tsconfig.lib.json b/packages/native-federation-tests/tsconfig.lib.json index 0d988700198..281f8906dbd 100644 --- a/packages/native-federation-tests/tsconfig.lib.json +++ b/packages/native-federation-tests/tsconfig.lib.json @@ -8,7 +8,7 @@ }, "include": ["**/*.ts"], "exclude": [ - "jest.config.ts", + "rstest.config.mts", "**/*.spec.ts", "**/*.test.ts", "tsdown.config.ts" diff --git a/packages/native-federation-tests/tsconfig.spec.json b/packages/native-federation-tests/tsconfig.spec.json index 6d3be742713..fd3ffea77da 100644 --- a/packages/native-federation-tests/tsconfig.spec.json +++ b/packages/native-federation-tests/tsconfig.spec.json @@ -2,7 +2,12 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "../../dist/out-tsc", - "types": ["vitest/globals", "vitest/importMeta", "vite/client", "node"] + "types": [ + "@rstest/core/globals", + "@rstest/core/importMeta", + "vite/client", + "node" + ] }, "include": [ "vite.config.ts", diff --git a/packages/native-federation-tests/vite.config.mts b/packages/native-federation-tests/vite.config.mts deleted file mode 100644 index baa2c24c8d3..00000000000 --- a/packages/native-federation-tests/vite.config.mts +++ /dev/null @@ -1,24 +0,0 @@ -/// -import { defineConfig } from 'vite'; - -import tsconfigPaths from 'vite-tsconfig-paths'; - -export default defineConfig({ - cacheDir: '../../node_modules/.vite/native-federation-tests', - - plugins: [tsconfigPaths()], - - // Uncomment this if you are using workers. - // worker: { - // plugins: [ tsconfigPaths() ], - // }, - - test: { - cache: { - dir: '../../node_modules/.vitest', - }, - environment: 'node', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - reporters: ['default'], - }, -}); diff --git a/packages/native-federation-typescript/package.json b/packages/native-federation-typescript/package.json index a749ec919de..2371085ceb5 100644 --- a/packages/native-federation-typescript/package.json +++ b/packages/native-federation-typescript/package.json @@ -94,7 +94,7 @@ "unplugin": "^1.10.1" }, "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", + "typescript": "^4.9.0 || ^5.0.0 || ^6.0.0", "vue-tsc": "^1.0.24" }, "peerDependenciesMeta": { @@ -103,15 +103,16 @@ } }, "devDependencies": { + "@rstest/core": "^0.10.6", "directory-tree": "3.5.2", + "typescript": "6.0.3", "upath": "2.0.1", - "vitest": "1.6.0", "webpack": "5.104.1" }, "scripts": { "build": "tsdown --config tsdown.config.ts && cp package.json dist && cp *.md dist", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\"", - "test": "pnpm exec vitest run --passWithNoTests --config vite.config.mts", + "test": "pnpm exec rstest --passWithNoTests", "pre-release": "pnpm run test && pnpm run build" } } diff --git a/packages/native-federation-typescript/rstest.config.mts b/packages/native-federation-typescript/rstest.config.mts new file mode 100644 index 00000000000..5ac4912aa5b --- /dev/null +++ b/packages/native-federation-typescript/rstest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({ + testEnvironment: 'node', + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + reporters: ['default'], + passWithNoTests: true, +}); diff --git a/packages/native-federation-typescript/src/configurations/hostPlugin.test.ts b/packages/native-federation-typescript/src/configurations/hostPlugin.test.ts index 8fd1161dcdb..cd29663898e 100644 --- a/packages/native-federation-typescript/src/configurations/hostPlugin.test.ts +++ b/packages/native-federation-typescript/src/configurations/hostPlugin.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { retrieveHostConfig } from './hostPlugin'; diff --git a/packages/native-federation-typescript/src/configurations/remotePlugin.test.ts b/packages/native-federation-typescript/src/configurations/remotePlugin.test.ts index 4fd698b650c..801581ab5af 100644 --- a/packages/native-federation-typescript/src/configurations/remotePlugin.test.ts +++ b/packages/native-federation-typescript/src/configurations/remotePlugin.test.ts @@ -1,5 +1,5 @@ import { join } from 'path'; -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { retrieveRemoteConfig } from './remotePlugin'; @@ -48,6 +48,7 @@ describe('hostPlugin', () => { noEmit: false, declaration: true, outDir: 'dist/@mf-types/compiled-types', + ignoreDeprecations: '6.0', }); expect(mapComponentsToExpose).toStrictEqual({ @@ -92,6 +93,7 @@ describe('hostPlugin', () => { noEmit: false, declaration: true, outDir: 'dist/typesFolder/compiledTypesFolder', + ignoreDeprecations: '6.0', }); expect(mapComponentsToExpose).toStrictEqual({ diff --git a/packages/native-federation-typescript/src/configurations/tsconfig.test.json b/packages/native-federation-typescript/src/configurations/tsconfig.test.json index 0e105b88cc2..0bcfa41d517 100644 --- a/packages/native-federation-typescript/src/configurations/tsconfig.test.json +++ b/packages/native-federation-typescript/src/configurations/tsconfig.test.json @@ -3,10 +3,11 @@ "target": "es2017", "module": "esnext", "lib": ["esnext"], - "moduleResolution": "node", + "moduleResolution": "node10", "esModuleInterop": true, "strict": true, "strictNullChecks": true, - "resolveJsonModule": true + "resolveJsonModule": true, + "ignoreDeprecations": "6.0" } } diff --git a/packages/native-federation-typescript/src/index.test.ts b/packages/native-federation-typescript/src/index.test.ts index 7ee824b938a..c43f4fe3018 100644 --- a/packages/native-federation-typescript/src/index.test.ts +++ b/packages/native-federation-typescript/src/index.test.ts @@ -4,7 +4,7 @@ import dirTree from 'directory-tree'; import { rm } from 'fs/promises'; import { join, resolve } from 'path'; import { UnpluginOptions } from 'unplugin'; -import { describe, expect, it, vi } from 'vitest'; +import { describe, expect, it, rs } from '@rstest/core'; import type { Compiler } from 'webpack'; import { @@ -197,7 +197,7 @@ describe('index', () => { const zip = new AdmZip(); zip.addLocalFolder(distFolder); - axios.get = vi.fn().mockResolvedValueOnce({ data: zip.toBuffer() }); + axios.get = rs.fn().mockResolvedValueOnce({ data: zip.toBuffer() }); const unplugin = NativeFederationTypeScriptHost.rollup( options, diff --git a/packages/native-federation-typescript/src/lib/archiveHandler.test.ts b/packages/native-federation-typescript/src/lib/archiveHandler.test.ts index ea9e2624b09..d5b6ab43c06 100644 --- a/packages/native-federation-typescript/src/lib/archiveHandler.test.ts +++ b/packages/native-federation-typescript/src/lib/archiveHandler.test.ts @@ -3,7 +3,7 @@ import axios from 'axios'; import { existsSync, mkdirSync, mkdtempSync, rmSync } from 'fs'; import os from 'os'; import { join } from 'path'; -import { afterAll, describe, expect, it, vi } from 'vitest'; +import { afterAll, describe, expect, it, rs } from '@rstest/core'; import { RemoteOptions } from '../interfaces/RemoteOptions'; import { createTypesArchive, downloadTypesArchive } from './archiveHandler'; @@ -40,7 +40,7 @@ describe('archiveHandler', () => { }); it('throws for unexisting outDir', async () => { - expect( + await expect( createTypesArchive({ ...tsConfig, outDir: '/foo' }, remoteOptions), ).rejects.toThrowError(); }); @@ -62,7 +62,7 @@ describe('archiveHandler', () => { const zip = new AdmZip(); zip.addLocalFolder(tmpDir); - axios.get = vi.fn().mockResolvedValueOnce({ data: zip.toBuffer() }); + axios.get = rs.fn().mockResolvedValueOnce({ data: zip.toBuffer() }); await downloadTypesArchive(hostOptions)([ destinationFolder, @@ -81,7 +81,7 @@ describe('archiveHandler', () => { const zip = new AdmZip(); zip.addLocalFolder(tmpDir); - axios.get = vi.fn().mockResolvedValue({ data: zip.toBuffer() }); + axios.get = rs.fn().mockResolvedValue({ data: zip.toBuffer() }); const downloader = downloadTypesArchive(hostOptions); @@ -107,7 +107,7 @@ describe('archiveHandler', () => { it('correctly handles exception', async () => { const message = 'Rejected value'; - axios.get = vi.fn().mockRejectedValue(new Error(message)); + axios.get = rs.fn().mockRejectedValue(new Error(message)); await expect(() => downloadTypesArchive(hostOptions)([destinationFolder, fileToDownload]), diff --git a/packages/native-federation-typescript/src/lib/typeScriptCompiler.test.ts b/packages/native-federation-typescript/src/lib/typeScriptCompiler.test.ts index 7ded9d123fe..a210d027309 100644 --- a/packages/native-federation-typescript/src/lib/typeScriptCompiler.test.ts +++ b/packages/native-federation-typescript/src/lib/typeScriptCompiler.test.ts @@ -2,7 +2,7 @@ import dirTree from 'directory-tree'; import { mkdtempSync, rmSync } from 'fs'; import os from 'os'; import { join, sep } from 'path'; -import { afterEach, describe, expect, it } from 'vitest'; +import { afterEach, describe, expect, it } from '@rstest/core'; import { RemoteOptions } from '../interfaces/RemoteOptions'; import { diff --git a/packages/native-federation-typescript/tsconfig.json b/packages/native-federation-typescript/tsconfig.json index 0e105b88cc2..0bcfa41d517 100644 --- a/packages/native-federation-typescript/tsconfig.json +++ b/packages/native-federation-typescript/tsconfig.json @@ -3,10 +3,11 @@ "target": "es2017", "module": "esnext", "lib": ["esnext"], - "moduleResolution": "node", + "moduleResolution": "node10", "esModuleInterop": true, "strict": true, "strictNullChecks": true, - "resolveJsonModule": true + "resolveJsonModule": true, + "ignoreDeprecations": "6.0" } } diff --git a/packages/native-federation-typescript/tsconfig.lib.json b/packages/native-federation-typescript/tsconfig.lib.json index 0d988700198..281f8906dbd 100644 --- a/packages/native-federation-typescript/tsconfig.lib.json +++ b/packages/native-federation-typescript/tsconfig.lib.json @@ -8,7 +8,7 @@ }, "include": ["**/*.ts"], "exclude": [ - "jest.config.ts", + "rstest.config.mts", "**/*.spec.ts", "**/*.test.ts", "tsdown.config.ts" diff --git a/packages/native-federation-typescript/tsconfig.spec.json b/packages/native-federation-typescript/tsconfig.spec.json index 6d3be742713..fd3ffea77da 100644 --- a/packages/native-federation-typescript/tsconfig.spec.json +++ b/packages/native-federation-typescript/tsconfig.spec.json @@ -2,7 +2,12 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "../../dist/out-tsc", - "types": ["vitest/globals", "vitest/importMeta", "vite/client", "node"] + "types": [ + "@rstest/core/globals", + "@rstest/core/importMeta", + "vite/client", + "node" + ] }, "include": [ "vite.config.ts", diff --git a/packages/native-federation-typescript/vite.config.mts b/packages/native-federation-typescript/vite.config.mts deleted file mode 100644 index baa2c24c8d3..00000000000 --- a/packages/native-federation-typescript/vite.config.mts +++ /dev/null @@ -1,24 +0,0 @@ -/// -import { defineConfig } from 'vite'; - -import tsconfigPaths from 'vite-tsconfig-paths'; - -export default defineConfig({ - cacheDir: '../../node_modules/.vite/native-federation-tests', - - plugins: [tsconfigPaths()], - - // Uncomment this if you are using workers. - // worker: { - // plugins: [ tsconfigPaths() ], - // }, - - test: { - cache: { - dir: '../../node_modules/.vitest', - }, - environment: 'node', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - reporters: ['default'], - }, -}); diff --git a/packages/nextjs-mf/CHANGELOG.md b/packages/nextjs-mf/CHANGELOG.md index 28bac442a68..850e8f7c69a 100644 --- a/packages/nextjs-mf/CHANGELOG.md +++ b/packages/nextjs-mf/CHANGELOG.md @@ -1,5 +1,32 @@ # @module-federation/nextjs-mf +## 8.8.71 + +### Patch Changes + +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/enhanced@2.8.0 + - @module-federation/runtime-core@2.8.0 + - @module-federation/sdk@2.8.0 + - @module-federation/webpack-bundler-runtime@2.8.0 + - @module-federation/node@2.7.47 + - @module-federation/runtime@2.8.0 + +## 8.8.70 + +### Patch Changes + +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/enhanced@2.7.0 + - @module-federation/node@2.7.46 + - @module-federation/runtime@2.7.0 + - @module-federation/runtime-core@2.7.0 + - @module-federation/webpack-bundler-runtime@2.7.0 + ## 8.8.69 ### Patch Changes diff --git a/packages/nextjs-mf/jest.config.js b/packages/nextjs-mf/jest.config.js index a2da2ba1a3e..16cd7f4d162 100644 --- a/packages/nextjs-mf/jest.config.js +++ b/packages/nextjs-mf/jest.config.js @@ -5,12 +5,7 @@ module.exports = { globals: {}, testEnvironment: 'node', transform: { - '^.+\\.[tj]s$': [ - 'ts-jest', - { - tsconfig: '/tsconfig.spec.json', - }, - ], + '^.+\\.[tj]sx?$': ['@swc/jest'], }, moduleFileExtensions: ['ts', 'js', 'html'], coverageDirectory: '../../coverage/packages/nextjs-mf', diff --git a/packages/nextjs-mf/package.json b/packages/nextjs-mf/package.json index fa54abbfbca..f2edbf48dcc 100644 --- a/packages/nextjs-mf/package.json +++ b/packages/nextjs-mf/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/nextjs-mf", - "version": "8.8.69", + "version": "8.8.71", "license": "MIT", "main": "dist/src/index.js", "module": "dist/src/index.mjs", @@ -22,7 +22,7 @@ ], "scripts": { "postinstall": "echo \"Deprecation Notice: We intend to deprecate 'nextjs-mf'. Please see https://github.com/module-federation/core/issues/3153 for more details.\"", - "build": "tsdown --config tsdown.config.mts", + "build": "tsdown --config tsdown.config.mts && tsc -p tsconfig.lib.json && node ../../tools/scripts/copy-dts-to-dmts.mjs dist", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.js\" \"**/*.ts\"", "test": "pnpm exec jest --config jest.config.js --passWithNoTests", "pre-release": "pnpm run test && pnpm run build && rm -f ./dist/package.json" @@ -76,7 +76,8 @@ "@types/btoa": "^1.2.5", "@types/react": "^18.3.1", "@types/react-dom": "^18.3.1", - "tsdown": "0.20.3" + "tsdown": "0.20.3", + "typescript": "7.0.2" }, "peerDependencies": { "webpack": "^5.40.0", diff --git a/packages/nextjs-mf/src/plugins/NextFederationPlugin/FederatedStatsCompatibilityPlugin.test.ts b/packages/nextjs-mf/src/plugins/NextFederationPlugin/FederatedStatsCompatibilityPlugin.test.ts new file mode 100644 index 00000000000..9e2622abff3 --- /dev/null +++ b/packages/nextjs-mf/src/plugins/NextFederationPlugin/FederatedStatsCompatibilityPlugin.test.ts @@ -0,0 +1,169 @@ +import type { Compiler } from 'webpack'; +import type { Manifest } from '@module-federation/sdk'; +import { + createFederatedStats, + FederatedStatsCompatibilityPlugin, +} from './FederatedStatsCompatibilityPlugin'; + +const manifest = { + id: 'shop', + name: 'shop', + metaData: { + name: 'shop', + type: 'app', + buildInfo: { buildVersion: '1.0.0', buildName: 'shop' }, + globalName: 'shop', + publicPath: 'auto', + remoteEntry: { + path: 'static/chunks', + name: 'remoteEntry.js', + type: 'window', + }, + types: { path: '', name: '', zip: '', api: '' }, + }, + shared: [], + remotes: [], + exposes: [ + { + id: 'shop:Button', + name: 'Button', + path: './Button', + assets: { + js: { sync: ['static/chunks/button.js'], async: ['lazy.js'] }, + css: { sync: ['static/css/button.css'], async: ['lazy.css'] }, + }, + }, + ], +} satisfies Manifest; + +describe('FederatedStatsCompatibilityPlugin', () => { + it('creates the expose fields consumed by legacy flushChunks', () => { + expect(createFederatedStats(manifest)).toEqual({ + sharedModules: [], + federatedModules: [ + { + remote: 'shop', + entry: 'static/chunks/remoteEntry.js', + sharedModules: [], + exposes: { + './Button': ['static/chunks/button.js', 'static/css/button.css'], + }, + remoteModules: {}, + }, + ], + }); + }); + + it('reads a custom manifest asset and emits both legacy filenames', () => { + let compilationHandler: ((compilation: any) => void) | undefined; + let assetsHandler: (() => void) | undefined; + let processAssetsOptions: Record | undefined; + const emitted = new Map string }>(); + const rawManifest = JSON.stringify(manifest); + emitted.set('server/federated-stats.json', { + source: () => 'stale', + }); + const compilation = { + hooks: { + processAssets: { + tap: (options: Record, handler: () => void) => { + processAssetsOptions = options; + assetsHandler = handler; + }, + }, + }, + getAsset: jest.fn((filename: string) => { + if (filename === 'meta/custom.json') { + return { source: { source: () => rawManifest } }; + } + return emitted.get(filename); + }), + emitAsset: jest.fn((filename: string, source: { source: () => string }) => + emitted.set(filename, source), + ), + updateAsset: jest.fn( + (filename: string, source: { source: () => string }) => + emitted.set(filename, source), + ), + }; + const compiler = { + hooks: { + thisCompilation: { + tap: (_name: string, handler: (compilation: any) => void) => { + compilationHandler = handler; + }, + }, + }, + webpack: { + Compilation: { PROCESS_ASSETS_STAGE_REPORT: 5000 }, + sources: { + RawSource: class { + constructor(private readonly value: string) {} + source() { + return this.value; + } + }, + }, + }, + } as unknown as Compiler; + + new FederatedStatsCompatibilityPlugin({ + filenames: [ + 'static/chunks/federated-stats.json', + 'server/federated-stats.json', + ], + manifest: { filePath: 'meta', fileName: 'custom' }, + }).apply(compiler); + compilationHandler?.(compilation); + assetsHandler?.(); + + expect(processAssetsOptions).toEqual({ + name: 'FederatedStatsCompatibilityPlugin', + stage: 5000, + }); + expect(compilation.getAsset).toHaveBeenCalledWith('meta/custom.json'); + expect(compilation.emitAsset).toHaveBeenCalledTimes(1); + expect(compilation.updateAsset).toHaveBeenCalledTimes(1); + expect(Array.from(emitted)).toHaveLength(2); + expect( + JSON.parse(emitted.get('server/federated-stats.json')!.source()), + ).toEqual(createFederatedStats(manifest)); + }); + + it('fails the build instead of omitting the compatibility asset', () => { + let compilationHandler: ((compilation: any) => void) | undefined; + let assetsHandler: (() => void) | undefined; + const compilation = { + hooks: { + processAssets: { + tap: (_options: unknown, handler: () => void) => { + assetsHandler = handler; + }, + }, + }, + getAsset: jest.fn(), + }; + const compiler = { + hooks: { + thisCompilation: { + tap: (_name: string, handler: (compilation: any) => void) => { + compilationHandler = handler; + }, + }, + }, + webpack: { + Compilation: { PROCESS_ASSETS_STAGE_REPORT: 5000 }, + }, + } as unknown as Compiler; + + new FederatedStatsCompatibilityPlugin({ + filenames: ['federated-stats.json'], + manifest: true, + }).apply(compiler); + compilationHandler?.(compilation); + + expect(assetsHandler).toThrow( + 'Cannot emit federated-stats.json because mf-manifest.json was not generated', + ); + }); +}); diff --git a/packages/nextjs-mf/src/plugins/NextFederationPlugin/FederatedStatsCompatibilityPlugin.ts b/packages/nextjs-mf/src/plugins/NextFederationPlugin/FederatedStatsCompatibilityPlugin.ts new file mode 100644 index 00000000000..67e55704a4f --- /dev/null +++ b/packages/nextjs-mf/src/plugins/NextFederationPlugin/FederatedStatsCompatibilityPlugin.ts @@ -0,0 +1,87 @@ +import type { Compiler, WebpackPluginInstance } from 'webpack'; +import { + getManifestFileName, + simpleJoinRemoteEntry, + type Manifest, + type moduleFederationPlugin, +} from '@module-federation/sdk'; + +type FederatedStatsCompatibilityPluginOptions = { + filenames: string[]; + manifest: moduleFederationPlugin.ModuleFederationPluginOptions['manifest']; +}; + +export const createFederatedStats = (manifest: Manifest) => { + const exposes: Record = {}; + + for (const expose of manifest.exposes) { + exposes[expose.path || `./${expose.name}`] = [ + ...expose.assets.js.sync, + ...expose.assets.css.sync, + ]; + } + + return { + sharedModules: [], + federatedModules: [ + { + remote: manifest.name, + entry: simpleJoinRemoteEntry( + manifest.metaData.remoteEntry.path, + manifest.metaData.remoteEntry.name, + ), + sharedModules: [], + exposes, + remoteModules: {}, + }, + ], + }; +}; + +export class FederatedStatsCompatibilityPlugin implements WebpackPluginInstance { + private readonly options: FederatedStatsCompatibilityPluginOptions; + + constructor(options: FederatedStatsCompatibilityPluginOptions) { + this.options = options; + } + + apply(compiler: Compiler): void { + compiler.hooks.thisCompilation.tap( + 'FederatedStatsCompatibilityPlugin', + (compilation) => { + compilation.hooks.processAssets.tap( + { + name: 'FederatedStatsCompatibilityPlugin', + stage: compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT, + }, + () => { + const manifestFilename = getManifestFileName( + this.options.manifest, + ).manifestFileName; + const manifestAsset = compilation.getAsset(manifestFilename); + if (!manifestAsset) { + throw new Error( + `Cannot emit federated-stats.json because ${manifestFilename} was not generated`, + ); + } + + const manifest = JSON.parse( + manifestAsset.source.source().toString(), + ) as Manifest; + const source = new compiler.webpack.sources.RawSource( + JSON.stringify(createFederatedStats(manifest)), + ); + + for (const filename of this.options.filenames) { + if (compilation.getAsset(filename)) { + compilation.updateAsset(filename, source); + } else { + compilation.emitAsset(filename, source); + } + } + }, + ); + }, + ); + } +} diff --git a/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-client-plugins.test.ts b/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-client-plugins.test.ts new file mode 100644 index 00000000000..c39a291c141 --- /dev/null +++ b/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-client-plugins.test.ts @@ -0,0 +1,95 @@ +import type { moduleFederationPlugin } from '@module-federation/sdk'; +import type { Compiler } from 'webpack'; + +jest.mock( + '@module-federation/node', + () => ({ + ChunkCorrelationPlugin: jest.fn().mockImplementation(() => ({ + apply: jest.fn(), + })), + }), + { virtual: true }, +); + +jest.mock('../container/InvertedContainerPlugin', () => ({ + __esModule: true, + default: jest.fn().mockImplementation(() => ({ + apply: jest.fn(), + })), +})); + +jest.mock('./FederatedStatsCompatibilityPlugin', () => ({ + FederatedStatsCompatibilityPlugin: jest.fn().mockImplementation(() => ({ + apply: jest.fn(), + })), +})); + +jest.mock('../../logger', () => ({ + __esModule: true, + default: { + error: jest.fn(), + warn: jest.fn(), + }, +})); + +const { ChunkCorrelationPlugin } = jest.requireMock('@module-federation/node'); +const InvertedContainerPlugin = jest.requireMock( + '../container/InvertedContainerPlugin', +).default; +const { FederatedStatsCompatibilityPlugin } = jest.requireMock( + './FederatedStatsCompatibilityPlugin', +); +const { applyClientPlugins } = + require('./apply-client-plugins') as typeof import('./apply-client-plugins'); + +const options: moduleFederationPlugin.ModuleFederationPluginOptions = { + name: 'host', +}; + +const createCompiler = () => + ({ + options: { + output: { + publicPath: '/_next/', + }, + }, + }) as Compiler; + +describe('applyClientPlugins', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('emits compatibility stats from the manifest', () => { + const compiler = createCompiler(); + + applyClientPlugins(compiler, { ...options }, {}); + + expect(FederatedStatsCompatibilityPlugin).toHaveBeenCalledWith({ + filenames: [ + 'static/chunks/federated-stats.json', + 'server/federated-stats.json', + ], + manifest: undefined, + }); + expect(ChunkCorrelationPlugin).not.toHaveBeenCalled(); + expect(InvertedContainerPlugin).toHaveBeenCalledTimes(1); + }); + + it.each([{ manifest: false }, { manifest: { disableAssetsAnalyze: true } }])( + 'uses full chunk correlation for $manifest', + (manifestOptions) => { + const compiler = createCompiler(); + + applyClientPlugins(compiler, { ...options, ...manifestOptions }, {}); + + expect(ChunkCorrelationPlugin).toHaveBeenCalledWith({ + filename: [ + 'static/chunks/federated-stats.json', + 'server/federated-stats.json', + ], + }); + expect(FederatedStatsCompatibilityPlugin).not.toHaveBeenCalled(); + }, + ); +}); diff --git a/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-client-plugins.ts b/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-client-plugins.ts index 1a3a53e76a6..817319f6ae2 100644 --- a/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-client-plugins.ts +++ b/packages/nextjs-mf/src/plugins/NextFederationPlugin/apply-client-plugins.ts @@ -4,6 +4,12 @@ import InvertedContainerPlugin from '../container/InvertedContainerPlugin'; import type { moduleFederationPlugin } from '@module-federation/sdk'; import type { NextFederationPluginExtraOptions } from './next-fragments'; import logger from '../../logger'; +import { FederatedStatsCompatibilityPlugin } from './FederatedStatsCompatibilityPlugin'; + +const FEDERATED_STATS_FILENAMES = [ + 'static/chunks/federated-stats.json', + 'server/federated-stats.json', +]; /** * Applies client-specific plugins. @@ -52,13 +58,22 @@ export function applyClientPlugins( name, }; - // Apply the ChunkCorrelationPlugin to collect metadata on chunks - new ChunkCorrelationPlugin({ - filename: [ - 'static/chunks/federated-stats.json', - 'server/federated-stats.json', - ], - }).apply(compiler); + // Preserve the legacy asset for hosts that have not migrated to manifests. + const manifestHasAssets = + options.manifest !== false && + (typeof options.manifest !== 'object' || + !options.manifest.disableAssetsAnalyze); + + if (!manifestHasAssets) { + new ChunkCorrelationPlugin({ + filename: FEDERATED_STATS_FILENAMES, + }).apply(compiler); + } else { + new FederatedStatsCompatibilityPlugin({ + filenames: FEDERATED_STATS_FILENAMES, + manifest: options.manifest, + }).apply(compiler); + } // Apply the InvertedContainerPlugin to add custom runtime modules to the container runtime new InvertedContainerPlugin().apply(compiler); diff --git a/packages/nextjs-mf/src/plugins/NextFederationPlugin/index.ts b/packages/nextjs-mf/src/plugins/NextFederationPlugin/index.ts index 3ce572676a4..c3a8be58bf9 100644 --- a/packages/nextjs-mf/src/plugins/NextFederationPlugin/index.ts +++ b/packages/nextjs-mf/src/plugins/NextFederationPlugin/index.ts @@ -31,6 +31,7 @@ import { ModuleFederationPlugin } from '@module-federation/enhanced/webpack'; import { bindLoggerToCompiler } from '@module-federation/sdk'; import type { moduleFederationPlugin } from '@module-federation/sdk'; import logger from '../../logger'; +import { normalizeManifestOptions } from './manifest-options'; const resolveRuntimePluginPath = (): string => process.env.IS_ESM_BUILD === 'true' @@ -219,7 +220,6 @@ export class NextFederationPlugin { const defaultShared = this._extraOptions.skipSharingNextInternals ? {} : retrieveDefaultShared(isServer); - return { ...this._options, runtime: false, @@ -241,12 +241,9 @@ export class NextFederationPlugin { }, shared: { ...defaultShared, - ...this._options.shared, - }, - manifest: { - ...(this._options.manifest ?? {}), - filePath: isServer ? '' : '/static/chunks', + ...(this._options.shared as Record), }, + manifest: normalizeManifestOptions(this._options.manifest, isServer), // nextjs project needs to add config.watchOptions = ['**/node_modules/**', '**/@mf-types/**'] to prevent loop types update dts: this._options.dts ?? false, shareStrategy: this._options.shareStrategy ?? 'loaded-first', diff --git a/packages/nextjs-mf/src/plugins/NextFederationPlugin/manifest-options.test.ts b/packages/nextjs-mf/src/plugins/NextFederationPlugin/manifest-options.test.ts new file mode 100644 index 00000000000..7add5bb9022 --- /dev/null +++ b/packages/nextjs-mf/src/plugins/NextFederationPlugin/manifest-options.test.ts @@ -0,0 +1,14 @@ +import { normalizeManifestOptions } from './manifest-options'; + +describe('normalizeManifestOptions', () => { + it('preserves manifest: false for client plugin selection', () => { + expect(normalizeManifestOptions(false, false)).toBe(false); + }); + + it('retains custom options while setting the compiler-specific path', () => { + expect( + normalizeManifestOptions({ fileName: 'custom', filePath: 'old' }, false), + ).toEqual({ fileName: 'custom', filePath: '/static/chunks' }); + expect(normalizeManifestOptions(true, true)).toEqual({ filePath: '' }); + }); +}); diff --git a/packages/nextjs-mf/src/plugins/NextFederationPlugin/manifest-options.ts b/packages/nextjs-mf/src/plugins/NextFederationPlugin/manifest-options.ts new file mode 100644 index 00000000000..bcc162eaf85 --- /dev/null +++ b/packages/nextjs-mf/src/plugins/NextFederationPlugin/manifest-options.ts @@ -0,0 +1,16 @@ +import type { moduleFederationPlugin } from '@module-federation/sdk'; + +type ManifestOptions = + moduleFederationPlugin.ModuleFederationPluginOptions['manifest']; + +export const normalizeManifestOptions = ( + manifest: ManifestOptions, + isServer: boolean, +): ManifestOptions => { + if (manifest === false) return false; + + return { + ...(typeof manifest === 'object' && manifest !== null ? manifest : {}), + filePath: isServer ? '' : '/static/chunks', + }; +}; diff --git a/packages/nextjs-mf/src/plugins/NextFederationPlugin/set-options.ts b/packages/nextjs-mf/src/plugins/NextFederationPlugin/set-options.ts index bae02d0b794..924b04bb090 100644 --- a/packages/nextjs-mf/src/plugins/NextFederationPlugin/set-options.ts +++ b/packages/nextjs-mf/src/plugins/NextFederationPlugin/set-options.ts @@ -1,18 +1,8 @@ import type { moduleFederationPlugin } from '@module-federation/sdk'; - -export interface NextFederationPluginExtraOptions { - enableImageLoaderFix?: boolean; - enableUrlLoaderFix?: boolean; - exposePages?: boolean; - skipSharingNextInternals?: boolean; - automaticPageStitching?: boolean; - debug?: boolean; -} - -export interface NextFederationPluginOptions - extends moduleFederationPlugin.ModuleFederationPluginOptions { - extraOptions: NextFederationPluginExtraOptions; -} +import type { + NextFederationPluginExtraOptions, + NextFederationPluginOptions, +} from './next-fragments'; export function setOptions(options: NextFederationPluginOptions): { mainOptions: moduleFederationPlugin.ModuleFederationPluginOptions; diff --git a/packages/nextjs-mf/src/plugins/container/InvertedContainerRuntimeModule.ts b/packages/nextjs-mf/src/plugins/container/InvertedContainerRuntimeModule.ts index 1a223fe2c0d..89ef0602935 100644 --- a/packages/nextjs-mf/src/plugins/container/InvertedContainerRuntimeModule.ts +++ b/packages/nextjs-mf/src/plugins/container/InvertedContainerRuntimeModule.ts @@ -1,14 +1,25 @@ import { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-path'; -import type ContainerEntryModule from '@module-federation/enhanced/src/lib/container/ContainerEntryModule'; const { RuntimeModule, Template, RuntimeGlobals } = require( normalizeWebpackPath('webpack'), -) as typeof import('webpack'); +) as typeof import('webpack') & { + RuntimeGlobals: Record; +}; interface InvertedContainerRuntimeModuleOptions { name?: string; containers: Set; // Adjust the type as necessary } +type ContainerEntryModule = NonNullable< + ReturnType +> & { + _name?: string; +}; + +type CompilationModuleGraph = { + getModule: (dependency: unknown) => unknown; +}; + class InvertedContainerRuntimeModule extends RuntimeModule { private options: InvertedContainerRuntimeModuleOptions; diff --git a/packages/nextjs-mf/tsconfig.json b/packages/nextjs-mf/tsconfig.json index 3ae62d99c09..8f70fcf7b6d 100644 --- a/packages/nextjs-mf/tsconfig.json +++ b/packages/nextjs-mf/tsconfig.json @@ -8,7 +8,6 @@ "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, diff --git a/packages/nextjs-mf/tsconfig.lib.json b/packages/nextjs-mf/tsconfig.lib.json index a76f2ea3a7d..14a9e0dc193 100644 --- a/packages/nextjs-mf/tsconfig.lib.json +++ b/packages/nextjs-mf/tsconfig.lib.json @@ -1,7 +1,17 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "dist" + "outDir": "dist", + "rootDir": ".", + "declaration": true, + "emitDeclarationOnly": true, + "noEmit": false, + "strict": false, + "noPropertyAccessFromIndexSignature": false, + "paths": { + "@module-federation/enhanced/src/*": ["../enhanced/src/*"], + "*": ["./*"] + } }, "include": ["src/**/*.ts", "utils/**/*.ts", "*.ts"], "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] diff --git a/packages/nextjs-mf/tsdown.config.mts b/packages/nextjs-mf/tsdown.config.mts index 4a727da89d7..50739c7bb00 100644 --- a/packages/nextjs-mf/tsdown.config.mts +++ b/packages/nextjs-mf/tsdown.config.mts @@ -28,10 +28,7 @@ export default defineConfig([ 'react-dom', 'webpack', ], - dts: { - resolver: 'tsc', - eager: true, - }, + dts: false, copyLicense: true, unbundle: true, define: {}, diff --git a/packages/node/CHANGELOG.md b/packages/node/CHANGELOG.md index 8a29147f1a4..57fabfc9f82 100644 --- a/packages/node/CHANGELOG.md +++ b/packages/node/CHANGELOG.md @@ -1,5 +1,26 @@ # @module-federation/node +## 2.7.47 + +### Patch Changes + +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/enhanced@2.8.0 + - @module-federation/sdk@2.8.0 + - @module-federation/runtime@2.8.0 + +## 2.7.46 + +### Patch Changes + +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/enhanced@2.7.0 + - @module-federation/runtime@2.7.0 + ## 2.7.45 ### Patch Changes diff --git a/packages/node/jest.config.js b/packages/node/jest.config.js index 60fad132bd9..158c92d7d24 100644 --- a/packages/node/jest.config.js +++ b/packages/node/jest.config.js @@ -5,12 +5,7 @@ module.exports = { globals: {}, testEnvironment: 'node', transform: { - '^.+\\.[tj]s$': [ - 'ts-jest', - { - tsconfig: '/tsconfig.spec.json', - }, - ], + '^.+\\.[tj]sx?$': ['@swc/jest'], }, moduleFileExtensions: ['ts', 'js', 'html'], coverageDirectory: '../../coverage/packages/node', diff --git a/packages/node/package.json b/packages/node/package.json index 54800d5a3e0..dad743013bb 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,7 +1,7 @@ { "public": true, "name": "@module-federation/node", - "version": "2.7.45", + "version": "2.7.47", "type": "commonjs", "main": "./dist/src/index.js", "module": "./dist/src/index.mjs", @@ -123,6 +123,9 @@ "optional": true } }, + "devDependencies": { + "typescript": "7.0.2" + }, "scripts": { "build": "tsdown --config tsdown.config.mts", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.js\" \"**/*.ts\"", diff --git a/packages/node/src/__tests__/flush-chunks.test.ts b/packages/node/src/__tests__/flush-chunks.test.ts new file mode 100644 index 00000000000..221910fc277 --- /dev/null +++ b/packages/node/src/__tests__/flush-chunks.test.ts @@ -0,0 +1,327 @@ +import { flushChunks, usedChunks } from '../utils/flush-chunks'; + +const remoteEntry = + 'https://cdn.example.com/_next/static/ssr/remoteEntry.js?token=test'; + +const setKnownRemote = ( + remoteInfo: Record = {}, + configuredEntry = remoteEntry, +) => { + (globalThis as any).__FEDERATION__ = { + __INSTANCES__: [ + { + moduleCache: new Map([ + [ + 'shop', + { + remoteInfo: { + name: 'shop', + entry: remoteEntry, + ...remoteInfo, + }, + }, + ], + ]), + options: { + remotes: [ + { + name: 'shop', + alias: remoteInfo.alias, + entry: configuredEntry, + }, + ], + }, + }, + ], + }; +}; + +const jsonResponse = (body: unknown) => ({ + ok: true, + status: 200, + json: jest.fn().mockResolvedValue(body), +}); + +describe('flushChunks', () => { + beforeEach(() => { + usedChunks.clear(); + setKnownRemote(); + global.fetch = jest.fn(); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + it('loads manifest assets once per remote', async () => { + (global.fetch as jest.Mock).mockResolvedValue( + jsonResponse({ + metaData: { publicPath: 'auto' }, + exposes: [ + { + name: 'Button', + path: './Button', + assets: { + js: { + sync: ['static/chunks/shared.js', 'static/chunks/button.js'], + async: ['static/chunks/lazy.js'], + }, + css: { + sync: ['static/css/button.css'], + async: ['static/css/lazy.css'], + }, + }, + }, + { + name: 'Card', + path: './Card', + assets: { + js: { + sync: ['static/chunks/shared.js', 'static/chunks/card.js'], + async: [], + }, + css: { sync: [], async: [] }, + }, + }, + ], + }), + ); + usedChunks.add('shop/Button'); + usedChunks.add('shop/Card'); + + await expect(flushChunks()).resolves.toEqual([ + 'https://cdn.example.com/_next/static/chunks/shared.js', + 'https://cdn.example.com/_next/static/chunks/button.js', + 'https://cdn.example.com/_next/static/css/button.css', + 'https://cdn.example.com/_next/static/chunks/card.js', + ]); + expect(global.fetch).toHaveBeenCalledTimes(1); + expect(global.fetch).toHaveBeenCalledWith( + 'https://cdn.example.com/_next/static/chunks/mf-manifest.json?token=test', + ); + expect(usedChunks.size).toBe(0); + }); + + it('honors an absolute manifest public path', async () => { + (global.fetch as jest.Mock).mockResolvedValue( + jsonResponse({ + metaData: { publicPath: 'https://assets.example.com/app/' }, + exposes: [ + { + name: 'Button', + path: './Button', + assets: { + js: { sync: ['button.js'], async: [] }, + css: { sync: [], async: [] }, + }, + }, + ], + }), + ); + usedChunks.add('shop->Button'); + + await expect(flushChunks()).resolves.toEqual([ + 'https://assets.example.com/app/button.js', + ]); + }); + + it('uses the server public path during SSR', async () => { + (global.fetch as jest.Mock).mockResolvedValue( + jsonResponse({ + metaData: { + publicPath: 'auto', + ssrPublicPath: 'https://server.example.com', + }, + exposes: [ + { + name: 'Button', + path: './Button', + assets: { + js: { sync: ['button.js'], async: [] }, + css: { sync: [], async: [] }, + }, + }, + ], + }), + ); + usedChunks.add('shop/Button'); + + await expect(flushChunks()).resolves.toEqual([ + 'https://server.example.com/button.js', + ]); + }); + + it('uses the configured manifest URL retained by the runtime', async () => { + const manifestUrl = + 'https://cdn.example.com/custom/remote-metadata.json?token=test'; + setKnownRemote({}, manifestUrl); + (global.fetch as jest.Mock).mockResolvedValue( + jsonResponse({ + metaData: { + getPublicPath: "function () { return 'https://assets.example.com'; }", + }, + exposes: [ + { + name: 'Button', + path: './Button', + assets: { + js: { sync: ['button.js'], async: [] }, + css: { sync: [], async: [] }, + }, + }, + ], + }), + ); + usedChunks.add('shop/Button'); + + await expect(flushChunks()).resolves.toEqual([ + 'https://assets.example.com/button.js', + ]); + expect(global.fetch).toHaveBeenCalledWith(manifestUrl); + }); + + it('groups canonical and nested alias requests for the same remote', async () => { + setKnownRemote({ alias: 'store/catalog' }); + (global.fetch as jest.Mock).mockResolvedValue( + jsonResponse({ + metaData: { publicPath: 'auto' }, + exposes: [ + { + name: 'Button', + path: './Button', + assets: { + js: { sync: ['static/chunks/button.js'], async: [] }, + css: { sync: [], async: [] }, + }, + }, + { + name: 'Card', + path: './Card', + assets: { + js: { sync: ['static/chunks/card.js'], async: [] }, + css: { sync: [], async: [] }, + }, + }, + ], + }), + ); + usedChunks.add('store/catalog/Button'); + usedChunks.add('shop/Card'); + + await expect(flushChunks()).resolves.toEqual([ + 'https://cdn.example.com/_next/static/chunks/button.js', + 'https://cdn.example.com/_next/static/chunks/card.js', + ]); + expect(global.fetch).toHaveBeenCalledTimes(1); + }); + + it('uses legacy stats for requests missing from the manifest', async () => { + (global.fetch as jest.Mock) + .mockResolvedValueOnce( + jsonResponse({ + metaData: { publicPath: 'auto' }, + exposes: [ + { + name: 'Button', + path: './Button', + assets: { + js: { sync: ['static/chunks/button.js'], async: [] }, + css: { sync: [], async: [] }, + }, + }, + ], + }), + ) + .mockResolvedValueOnce( + jsonResponse({ + federatedModules: [ + { + exposes: { + './Card': ['static/chunks/card.js'], + }, + }, + ], + }), + ); + usedChunks.add('shop/Button'); + usedChunks.add('shop/Card'); + + await expect(flushChunks()).resolves.toEqual([ + 'https://cdn.example.com/_next/static/chunks/button.js', + 'https://cdn.example.com/_next/static/chunks/card.js', + ]); + expect(global.fetch).toHaveBeenCalledTimes(2); + }); + + it('uses legacy stats when a manifest expose has no analyzed assets', async () => { + (global.fetch as jest.Mock) + .mockResolvedValueOnce( + jsonResponse({ + metaData: { publicPath: 'auto' }, + exposes: [ + { + name: 'Button', + path: './Button', + assets: { + js: { sync: [], async: [] }, + css: { sync: [], async: [] }, + }, + }, + ], + }), + ) + .mockResolvedValueOnce( + jsonResponse({ + federatedModules: [ + { + exposes: { + './Button': ['static/chunks/button.js'], + }, + }, + ], + }), + ); + usedChunks.add('shop/Button'); + + await expect(flushChunks()).resolves.toEqual([ + 'https://cdn.example.com/_next/static/chunks/button.js', + ]); + expect(global.fetch).toHaveBeenCalledTimes(2); + }); + + it('falls back to federated stats for older remotes', async () => { + (global.fetch as jest.Mock) + .mockResolvedValueOnce({ ok: false, status: 404 }) + .mockResolvedValueOnce( + jsonResponse({ + federatedModules: [ + { + exposes: { + './Button': ['static/chunks/button.js'], + }, + }, + ], + }), + ); + usedChunks.add('shop/Button'); + + await expect(flushChunks()).resolves.toEqual([ + 'https://cdn.example.com/_next/static/chunks/button.js', + ]); + expect(global.fetch).toHaveBeenNthCalledWith( + 2, + 'https://cdn.example.com/_next/static/chunks/federated-stats.json?token=test', + ); + }); + + it('reports unknown remotes without fetching metadata', async () => { + const error = jest.spyOn(console, 'error').mockImplementation(); + usedChunks.add('missing/Button'); + + await expect(flushChunks()).resolves.toEqual([]); + expect(global.fetch).not.toHaveBeenCalled(); + expect(error).toHaveBeenCalledWith( + 'flush chunks: Remote missing is not defined in the global config', + ); + }); +}); diff --git a/packages/node/src/__tests__/runtimePlugin.test.ts b/packages/node/src/__tests__/runtimePlugin.test.ts index 267c2486740..15a8477470f 100644 --- a/packages/node/src/__tests__/runtimePlugin.test.ts +++ b/packages/node/src/__tests__/runtimePlugin.test.ts @@ -18,7 +18,6 @@ import type { ModuleFederation, Federation, } from '@module-federation/runtime'; -import * as runtimePluginModule from '../runtimePlugin'; declare global { interface Global { @@ -275,9 +274,9 @@ describe('runtimePlugin', () => { runInThisContext: mockRunInThisContext, }; - require('vm').Script.mockImplementation(() => mockScript); + require('vm').Script.mockImplementationOnce(() => mockScript); - require('fs').readFile.mockImplementation( + require('fs').readFile.mockImplementationOnce( ( path: string, encoding: string, @@ -303,7 +302,7 @@ describe('runtimePlugin', () => { it('should handle readFile errors', () => { require('fs').existsSync.mockReturnValue(true); const readError = new Error('Read error'); - require('fs').readFile.mockImplementation( + require('fs').readFile.mockImplementationOnce( ( path: string, encoding: string, @@ -321,7 +320,7 @@ describe('runtimePlugin', () => { it('should handle script evaluation errors', () => { require('fs').existsSync.mockReturnValue(true); - require('fs').readFile.mockImplementation( + require('fs').readFile.mockImplementationOnce( ( path: string, encoding: string, @@ -333,7 +332,7 @@ describe('runtimePlugin', () => { // Mock Script to throw an error when constructed const evalError = new Error('Evaluation failed'); - require('vm').Script.mockImplementation(() => { + require('vm').Script.mockImplementationOnce(() => { throw evalError; }); @@ -427,13 +426,9 @@ describe('runtimePlugin', () => { }); it('should attach remote chunk context when execution fails', async () => { - const syntaxError = new SyntaxError('Unexpected token :'); (global.fetch as jest.Mock).mockResolvedValue({ text: jest.fn().mockResolvedValue('const broken = { foo: };'), }); - require('vm').Script.mockImplementationOnce(() => { - throw syntaxError; - }); const url = Object.assign(new URL('http://example.com/chunk.js'), { mfMetadata: { @@ -542,13 +537,14 @@ describe('runtimePlugin', () => { return new originalURL(args[0], args[1]); }) as any; - // Mock a complex remote entry URL with a path + // Use a complex remote entry URL with a path const mockEntryUrl = 'http://example.com/static/js/remoteEntry.js'; - jest - .spyOn(runtimePluginModule, 'returnFromCache') - .mockReturnValue(mockEntryUrl); + const originalEntry = mockModule.remoteInfo.entry; + mockModule.remoteInfo.entry = mockEntryUrl; // Set a rootDir for testing combined paths + const originalRootOutputDir = (global as any).__webpack_require__ + .federation.rootOutputDir; (global as any).__webpack_require__.federation.rootOutputDir = 'dist'; const result = resolveUrl('test-remote', 'chunk123.js'); @@ -560,6 +556,9 @@ describe('runtimePlugin', () => { // Restore the original URL constructor global.URL = originalURL; + mockModule.remoteInfo.entry = originalEntry; + (global as any).__webpack_require__.federation.rootOutputDir = + originalRootOutputDir; }); it('should return null when URL cannot be resolved', () => { @@ -569,13 +568,8 @@ describe('runtimePlugin', () => { throw new Error('Invalid URL'); }) as any; - // Mock returnFromCache and returnFromGlobalInstances to return null - const spyReturnFromCache = jest - .spyOn(runtimePluginModule, 'returnFromCache') - .mockReturnValue(null); - const spyReturnFromGlobalInstances = jest - .spyOn(runtimePluginModule, 'returnFromGlobalInstances') - .mockReturnValue(null); + const originalInstances = (global as any).__FEDERATION__.__INSTANCES__; + (global as any).__FEDERATION__.__INSTANCES__ = []; const result = resolveUrl('non-existent-remote', 'chunk.js'); @@ -583,8 +577,7 @@ describe('runtimePlugin', () => { // Clean up mocks global.URL = originalURL; - spyReturnFromCache.mockRestore(); - spyReturnFromGlobalInstances.mockRestore(); + (global as any).__FEDERATION__.__INSTANCES__ = originalInstances; }); it('should attach fallback resolution metadata to resolved urls', () => { @@ -624,7 +617,6 @@ describe('runtimePlugin', () => { }); it('should load a chunk from the filesystem', () => { - // Create a spy that will resolve successfully const mockCallback = jest.fn(); const mockChunk = { modules: { 'test-module': {} }, @@ -632,63 +624,76 @@ describe('runtimePlugin', () => { runtime: jest.fn(), }; - // Create a manual spy for loadFromFs that calls the callback with a successful result - jest - .spyOn(runtimePluginModule, 'loadFromFs') - .mockImplementation((path, callback) => callback(null, mockChunk)); + require('fs').existsSync.mockReturnValueOnce(true); + require('fs').readFile.mockImplementationOnce( + ( + path: string, + encoding: string, + callback: (error: Error | null, content?: string) => void, + ) => callback(null, '// mock chunk'), + ); + require('vm').Script.mockImplementationOnce(() => ({ + runInThisContext: jest.fn().mockReturnValue((exports: any) => { + Object.assign(exports, mockChunk); + }), + })); loadChunk('filesystem', 'test-chunk', '/dist', mockCallback, {}); - expect(runtimePluginModule.loadFromFs).toHaveBeenCalledWith( - expect.stringContaining('test-chunk'), - expect.any(Function), - ); - + expect(require('fs').readFile).toHaveBeenCalled(); expect(mockCallback).toHaveBeenCalledWith(null, mockChunk); }); - it('should fetch a chunk from a URL', () => { - const mockCallback = jest.fn(); + it('should fetch a chunk from a URL', async () => { const mockChunk = { modules: { 'test-module': {} }, ids: ['test-chunk'], - runtime: jest.fn(), + runtime: null, + }; + const originalPublicPath = (global as any).__webpack_require__.p; + (global as any).__webpack_require__.p = 'http://example.com/'; + (global.fetch as jest.Mock).mockResolvedValueOnce({ + text: jest + .fn() + .mockResolvedValue( + "exports.modules = {'test-module': {}}; exports.ids = ['test-chunk']; exports.runtime = null;", + ), + }); + const args = { + origin: { + options: { name: 'test-host' }, + loaderHook: { + lifecycle: { + fetch: { emit: jest.fn().mockResolvedValue(null) }, + }, + }, + }, }; - const mockFetchAndRun = jest - .spyOn(runtimePluginModule, 'fetchAndRun') - .mockImplementation((url, chunkId, callback, args) => - callback(null, mockChunk), + const result = await new Promise((resolve, reject) => { + loadChunk( + 'url', + 'test-chunk', + '/dist', + (error, chunk) => { + if (error) reject(error); + else resolve(chunk); + }, + args, ); + }); - // Create a proper URL object - const testUrl = new URL('http://example.com/chunk.js'); - const resolveUrlSpy = jest - .spyOn(runtimePluginModule, 'resolveUrl') - .mockReturnValue(testUrl); - - loadChunk('url', 'test-chunk', '/dist', mockCallback, {}); - - // Fix the parameter order to match the implementation: (remoteName, chunkName) - expect(resolveUrlSpy).toHaveBeenCalledWith('/dist', 'test-chunk'); - expect(mockFetchAndRun).toHaveBeenCalledWith( - testUrl, - 'test-chunk', - mockCallback, - {}, - ); - expect(mockCallback).toHaveBeenCalledWith(null, mockChunk); - - // Restore mocks - mockFetchAndRun.mockRestore(); - resolveUrlSpy.mockRestore(); + expect(result).toEqual(mockChunk); + (global as any).__webpack_require__.p = originalPublicPath; }); it('should handle unknown strategies', () => { const mockCallback = jest.fn(); - // Mock resolveUrl to return a URL to ensure we test the strategy branch - jest.spyOn(runtimePluginModule, 'resolveUrl').mockReturnValue(null); + const originalPublicPath = (global as any).__webpack_require__.p; + const originalInstances = (global as any).__FEDERATION__.__INSTANCES__; + (global as any).__webpack_require__.p = 'invalid'; + (global as any).__FEDERATION__.__INSTANCES__ = []; // The strategy 'unknown' isn't in the implementation, so it will default to the URL path // which requires resolveUrl to work, which we've mocked to return null @@ -700,6 +705,8 @@ describe('runtimePlugin', () => { ids: [], runtime: null, }); + (global as any).__webpack_require__.p = originalPublicPath; + (global as any).__FEDERATION__.__INSTANCES__ = originalInstances; }); }); @@ -820,25 +827,8 @@ describe('runtimePlugin', () => { }); it('should return a handler for chunk loading and reuse existing promises', () => { - // Setup mock for loadChunk - const mockChunk = { - modules: { 'test-module': {} }, - ids: ['test-chunk'], - runtime: jest.fn(), - }; - - jest - .spyOn(runtimePluginModule, 'loadChunk') - .mockImplementation((strategy, chunkId, root, callback, args) => { - callback(null, mockChunk); - }); - - jest - .spyOn(runtimePluginModule, 'installChunk') - .mockImplementation((chunk, installedChunks) => { - // Mock implementation that doesn't rely on iterating chunk.ids - installedChunks['test-chunk'] = 0; - }); + require('fs').existsSync.mockReturnValue(true); + require('fs').readFile.mockImplementationOnce(() => undefined); // Create a test environment const installedChunks: Record = {}; diff --git a/packages/node/src/utils/flush-chunks.ts b/packages/node/src/utils/flush-chunks.ts index 49729e17dc6..f03b839ddab 100644 --- a/packages/node/src/utils/flush-chunks.ts +++ b/packages/node/src/utils/flush-chunks.ts @@ -1,5 +1,20 @@ /* eslint-disable no-undef */ +import { getResourceUrl, type Manifest } from '@module-federation/sdk'; +import type { RemoteInfo } from '@module-federation/runtime/types'; + +type LegacyFederatedStats = { + federatedModules?: Array<{ + exposes?: Record; + }>; +}; + +type RemoteRequests = { + remoteInfo: RemoteInfo; + manifestUrl?: string; + requests: Set; +}; + // @ts-ignore if (!globalThis.usedChunks) { // @ts-ignore @@ -11,176 +26,194 @@ if (!globalThis.usedChunks) { */ // @ts-ignore export const { usedChunks } = globalThis; -/** - * Load hostStats from the JSON file. - * @returns {object} hostStats - An object containing host stats data. - */ -const loadHostStats = () => { - try { - //@ts-ignore - return __non_webpack_require__('../federated-stats.json'); - } catch (e) { - return {}; - } -}; +const getFederationController = () => + new Function('return globalThis')().__FEDERATION__; -export const getAllKnownRemotes = function () { - // Attempt to access the global federation controller safely - const federationController = new Function('return globalThis')() - .__FEDERATION__; +export const getAllKnownRemotes = function (): Record { + const federationController = getFederationController(); if (!federationController || !federationController.__INSTANCES__) { - // If the federation controller or instances are not defined, return an empty object return {}; } - var collected = {}; - // Use a for...of loop to iterate over all federation instances + const collected: Record = {}; for (const instance of federationController.__INSTANCES__) { - // Use another for...of loop to iterate over the module cache Map entries - for (const [key, cacheModule] of instance.moduleCache) { - // Check if the cacheModule has remoteInfo and use it to collect remote names + for (const [, cacheModule] of instance.moduleCache) { if (cacheModule.remoteInfo) { - //@ts-ignore - collected[cacheModule.remoteInfo.name] = cacheModule.remoteInfo; + const remoteInfo = cacheModule.remoteInfo as RemoteInfo; + collected[remoteInfo.name] = remoteInfo; + if (remoteInfo.alias) collected[remoteInfo.alias] = remoteInfo; } } } return collected; }; -/** - * Create a shareMap based on the loaded modules. - * @returns {object} shareMap - An object containing the shareMap data. - */ -const createShareMap = () => { - // Check if __webpack_share_scopes__ is defined and has a default property - // @ts-ignore - if (__webpack_share_scopes__?.default) { - // Reduce the keys of the default property to create the share map - // @ts-ignore - return Object.keys(__webpack_share_scopes__.default).reduce((acc, key) => { - // @ts-ignore - const shareMap = __webpack_share_scopes__.default[key]; - // shareScope may equal undefined or null if it has unexpected value - if (!shareMap || typeof shareMap !== 'object') { - return acc; +const getConfiguredManifestUrls = (): Map => { + const manifestUrls = new Map(); + const federationController = getFederationController(); + + for (const instance of federationController?.__INSTANCES__ || []) { + for (const configuredRemote of instance.options?.remotes || []) { + if (!('entry' in configuredRemote)) continue; + try { + if (!new URL(configuredRemote.entry).pathname.endsWith('.json')) { + continue; + } + } catch { + continue; } - // Get the loaded modules for the current key - const loadedModules = Object.values(shareMap) - // Filter out the modules that are not loaded - // @ts-ignore - .filter((sharedModule) => sharedModule.loaded) - // Map the filtered modules to their 'from' properties - // @ts-ignore - .map((sharedModule) => sharedModule.from); - - // If there are any loaded modules, add them to the accumulator object - if (loadedModules.length > 0) { - // @ts-ignore - acc[key] = loadedModules; + manifestUrls.set(configuredRemote.name, configuredRemote.entry); + if (configuredRemote.alias) { + manifestUrls.set(configuredRemote.alias, configuredRemote.entry); } - // Return the accumulator object for the next iteration - return acc; - }, {}); + } } - // If __webpack_share_scopes__ is not defined or doesn't have a default property, return an empty object - return {}; + + return manifestUrls; }; -/** - * Process a single chunk and return an array of updated chunks. - * @param {string} chunk - A chunk string containing remote and request data. - * @param {object} shareMap - An object containing the shareMap data. - * @param {object} hostStats - An object containing host stats data. - * @returns {Promise} A promise that resolves to an array of updated chunks. - */ -// @ts-ignore -const processChunk = async (chunk, shareMap, hostStats) => { - const chunks = new Set(); - const normalizedChunk = chunk.includes('->') - ? chunk.replace('->', '/') - : chunk; - const remoteSeparatorIndex = normalizedChunk.indexOf('/'); +const parseUsedChunk = ( + chunk: string, + remoteNames: string[], +): [remote: string, request: string] => { + const normalizedChunk = chunk.replace('->', '/'); const remote = - remoteSeparatorIndex === -1 - ? normalizedChunk - : normalizedChunk.slice(0, remoteSeparatorIndex); - const req = - remoteSeparatorIndex === -1 - ? '' - : normalizedChunk.slice(remoteSeparatorIndex + 1); - const request = req?.startsWith('./') ? req : './' + req; - const knownRemotes = getAllKnownRemotes(); - //@ts-ignore - if (!knownRemotes[remote]) { - console.error( - `flush chunks: Remote ${remote} is not defined in the global config`, - ); - return; - } + remoteNames.find( + (name) => + normalizedChunk === name || normalizedChunk.startsWith(`${name}/`), + ) || normalizedChunk.split('/', 1)[0]; + const request = normalizedChunk.slice(remote.length).replace(/^\//, ''); + return [remote, request.startsWith('./') ? request : `./${request}`]; +}; - try { - //@ts-ignore - const remoteName = new URL(knownRemotes[remote].entry).pathname - .split('/') - .pop(); - //@ts-ignore - - const statsFile = knownRemotes[remote].entry - .replace(remoteName, 'federated-stats.json') - .replace('ssr', 'chunks'); - let stats = {}; - - try { - stats = await fetch(statsFile).then((res) => res.json()); - } catch (e) { - console.error('flush error', e); - } - //@ts-ignore +const getMetadataUrl = (entry: string, filename: string): string => { + const url = new URL(entry); + url.pathname = `${url.pathname.slice(0, url.pathname.lastIndexOf('/') + 1)}${filename}`; + url.pathname = url.pathname.replace('/ssr/', '/chunks/'); + return url.href; +}; - const [prefix] = knownRemotes[remote].entry.split('static/'); - //@ts-ignore +const getManifestUrl = ( + remoteInfo: RemoteInfo, + configuredManifestUrl?: string, +): string => { + if (configuredManifestUrl) return configuredManifestUrl; + return getMetadataUrl(remoteInfo.entry, 'mf-manifest.json'); +}; - if (stats.federatedModules) { - //@ts-ignore +const getAssetBaseUrl = (metadataUrl: string): URL => { + const baseUrl = new URL(metadataUrl); + const staticPathIndex = baseUrl.pathname.indexOf('/static/'); + baseUrl.pathname = + staticPathIndex === -1 + ? baseUrl.pathname.slice(0, baseUrl.pathname.lastIndexOf('/') + 1) + : baseUrl.pathname.slice(0, staticPathIndex + 1); + baseUrl.search = ''; + baseUrl.hash = ''; + return baseUrl; +}; - stats.federatedModules.forEach((modules) => { - if (modules.exposes?.[request]) { - //@ts-ignore +const fetchJson = async (url: string): Promise => { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Request failed with status ${response.status}`); + } + return response.json() as Promise; +}; - modules.exposes[request].forEach((chunk) => { - chunks.add([prefix, chunk].join('')); +const collectManifestAssets = ( + manifest: Manifest, + manifestUrl: string, + requests: Set, +): { chunks: string[]; missingRequests: Set } => { + const chunks = new Set(); + const missingRequests = new Set(requests); + let assetBaseUrl = getAssetBaseUrl(manifestUrl); + const resourceBasePath = getResourceUrl(manifest.metaData, ''); - Object.values(chunk).forEach((chunk) => { - //@ts-ignore + if (resourceBasePath !== 'auto') { + const normalizedBasePath = + resourceBasePath && !resourceBasePath.endsWith('/') + ? `${resourceBasePath}/` + : resourceBasePath || './'; + assetBaseUrl = new URL(normalizedBasePath, manifestUrl); + } - if (chunk.files) { - //@ts-ignore + const resolveAssetUrl = (file: string) => new URL(file, assetBaseUrl).href; - chunk.files.forEach((file) => { - chunks.add(prefix + file); - }); - } - //@ts-ignore + for (const expose of manifest.exposes) { + const request = expose.path || `./${expose.name}`; + if (!requests.has(request)) continue; - if (chunk.requiredModules) { - //@ts-ignore + const hasSyncAssets = + expose.assets.js.sync.length > 0 || expose.assets.css.sync.length > 0; + if (hasSyncAssets) missingRequests.delete(request); - chunk.requiredModules.forEach((module) => { - if (shareMap[module]) { - // If the module is from the host, log the host stats - } - }); - } - }); - }); - } - }); + for (const file of expose.assets.js.sync) { + chunks.add(resolveAssetUrl(file)); + } + for (const file of expose.assets.css.sync) { + chunks.add(resolveAssetUrl(file)); } + } + + return { chunks: Array.from(chunks), missingRequests }; +}; + +const collectLegacyAssets = ( + stats: LegacyFederatedStats, + statsUrl: string, + requests: Set, +): string[] => { + const chunks = new Set(); + const assetBaseUrl = getAssetBaseUrl(statsUrl); + + for (const federatedModule of stats.federatedModules || []) { + for (const request of requests) { + for (const file of federatedModule.exposes?.[request] || []) { + chunks.add(new URL(file, assetBaseUrl).href); + } + } + } + + return Array.from(chunks); +}; + +const processRemote = async ( + remoteInfo: RemoteInfo, + requests: Set, + configuredManifestUrl?: string, +): Promise => { + const manifestUrl = getManifestUrl(remoteInfo, configuredManifestUrl); + let manifestChunks: string[] = []; + let legacyRequests = requests; - return Array.from(chunks); - } catch (e) { - console.error('flush error:', e); + try { + const manifest = await fetchJson(manifestUrl); + const { chunks, missingRequests } = collectManifestAssets( + manifest, + manifestUrl, + requests, + ); + manifestChunks = chunks; + if (!missingRequests.size) return chunks; + legacyRequests = missingRequests; + } catch { + // Older remotes may only expose federated-stats.json. + } + + const statsUrl = getMetadataUrl(remoteInfo.entry, 'federated-stats.json'); + try { + const stats = await fetchJson(statsUrl); + return Array.from( + new Set([ + ...manifestChunks, + ...collectLegacyAssets(stats, statsUrl, legacyRequests), + ]), + ); + } catch (error) { + if (!manifestChunks.length) console.error('flush error:', error); + return manifestChunks; } }; @@ -188,21 +221,43 @@ const processChunk = async (chunk, shareMap, hostStats) => { * Flush the chunks and return a deduplicated array of chunks. * @returns {Promise} A promise that resolves to an array of deduplicated chunks. */ -export const flushChunks = async () => { - const hostStats = loadHostStats(); - const shareMap = createShareMap(); +export const flushChunks = async (): Promise => { + const knownRemotes = getAllKnownRemotes(); + const configuredManifestUrls = getConfiguredManifestUrls(); + const remoteNames = Object.keys(knownRemotes).sort( + (left, right) => right.length - left.length, + ); + const requestsByRemote = new Map(); + + for (const chunk of usedChunks) { + const [remote, request] = parseUsedChunk(chunk, remoteNames); + const remoteInfo = knownRemotes[remote]; + if (!remoteInfo) { + console.error( + `flush chunks: Remote ${remote} is not defined in the global config`, + ); + continue; + } + + const remoteRequests = requestsByRemote.get(remoteInfo.name) || { + remoteInfo, + manifestUrl: + configuredManifestUrls.get(remote) || + configuredManifestUrls.get(remoteInfo.name), + requests: new Set(), + }; + remoteRequests.requests.add(request); + requestsByRemote.set(remoteInfo.name, remoteRequests); + } + usedChunks.clear(); const allFlushed = await Promise.all( - Array.from(usedChunks).map(async (chunk) => - processChunk(chunk, shareMap, hostStats), + Array.from( + requestsByRemote.values(), + ({ remoteInfo, requests, manifestUrl }) => + processRemote(remoteInfo, requests, manifestUrl), ), ); - // Deduplicate the chunks array - const dedupe = Array.from(new Set([...allFlushed.flat()])); - - // Clear usedChunks - usedChunks.clear(); - // Filter out any undefined or null values - return dedupe.filter(Boolean); + return Array.from(new Set(allFlushed.flat())); }; diff --git a/packages/node/tsconfig.json b/packages/node/tsconfig.json index c0371e6f17e..6a9426ae9d1 100644 --- a/packages/node/tsconfig.json +++ b/packages/node/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "target": "ES2021", - "moduleResolution": "node", "resolveJsonModule": true, "skipLibCheck": true, "skipDefaultLibCheck": true, diff --git a/packages/observability-plugin/CHANGELOG.md b/packages/observability-plugin/CHANGELOG.md index c56c63f26d5..675b83cb179 100644 --- a/packages/observability-plugin/CHANGELOG.md +++ b/packages/observability-plugin/CHANGELOG.md @@ -1,5 +1,20 @@ # @module-federation/observability-plugin +## 2.5.4 + +### Patch Changes + +- Updated dependencies [ea490ae] + - @module-federation/sdk@2.8.0 + +## 2.5.3 + +### Patch Changes + +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + ## 2.5.2 ### Patch Changes diff --git a/packages/observability-plugin/__tests__/observability.spec.ts b/packages/observability-plugin/__tests__/observability.spec.ts index ea53d15e2d4..c7e1fa52f7a 100644 --- a/packages/observability-plugin/__tests__/observability.spec.ts +++ b/packages/observability-plugin/__tests__/observability.spec.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; -import { describe, expect, it, vi } from 'vitest'; +import { describe, expect, it, rs } from '@rstest/core'; import { createObservability, ObservabilityPlugin } from '../src'; import { ObservabilityBuildPlugin, @@ -573,7 +573,7 @@ const createLoadedBeforeFederationFixture = () => { name: 'provider', entryGlobalName: 'provider_global', }, - remoteEntryExports: { get: vi.fn() }, + remoteEntryExports: { get: rs.fn() }, inited: true, }, ], @@ -592,7 +592,7 @@ const createLoadedBeforeFederationFixture = () => { name: 'provider', entryGlobalName: 'provider_global', }, - remoteEntryExports: { get: vi.fn() }, + remoteEntryExports: { get: rs.fn() }, inited: true, }, ], @@ -651,7 +651,7 @@ const createBuildCompilerFixture = ( ) => { const processAssetsCallbacks: Array<() => Promise> = []; const emittedAssets: Record = {}; - const warn = vi.fn(); + const warn = rs.fn(); const compilation = { constructor: { PROCESS_ASSETS_STAGE_REPORT: 5000, @@ -1017,7 +1017,7 @@ describe('ObservabilityPlugin', () => { it('does not wrap a remote React function component unless callback injection is explicitly enabled', async () => { const react = { - createElement: vi.fn((type: unknown, props?: unknown) => ({ + createElement: rs.fn((type: unknown, props?: unknown) => ({ type, props, })), @@ -1064,7 +1064,7 @@ describe('ObservabilityPlugin', () => { it('injects the producer loaded callback when explicitly enabled', async () => { const react = { - createElement: vi.fn((type: unknown, props?: unknown) => ({ + createElement: rs.fn((type: unknown, props?: unknown) => ({ type, props, })), @@ -1195,7 +1195,7 @@ describe('ObservabilityPlugin', () => { it('injects the producer loaded callback for build-time remote factories', async () => { const react = { - createElement: vi.fn((type: unknown, props?: unknown) => ({ + createElement: rs.fn((type: unknown, props?: unknown) => ({ type, props, })), @@ -1325,7 +1325,7 @@ describe('ObservabilityPlugin', () => { it('wraps explicitly matched React remotes even when the compiled component name is not capitalized', async () => { const react = { - createElement: vi.fn((type: unknown, props?: unknown) => ({ + createElement: rs.fn((type: unknown, props?: unknown) => ({ type, props, })), @@ -1394,7 +1394,7 @@ describe('ObservabilityPlugin', () => { it('matches React callback injection by remote alias and expose', async () => { const react = { - createElement: vi.fn((type: unknown, props?: unknown) => ({ + createElement: rs.fn((type: unknown, props?: unknown) => ({ type, props, })), @@ -1572,7 +1572,7 @@ describe('ObservabilityPlugin', () => { it('posts events to the local collector outside debug mode', () => { const originalFetch = globalThis.fetch; const originalDebug = process.env['FEDERATION_DEBUG']; - const fetchMock = vi.fn(() => Promise.resolve({ ok: true })); + const fetchMock = rs.fn(() => Promise.resolve({ ok: true })); Object.defineProperty(globalThis, 'fetch', { value: fetchMock, configurable: true, @@ -1640,7 +1640,7 @@ describe('ObservabilityPlugin', () => { it('posts events to the local collector in debug mode', () => { const originalFetch = globalThis.fetch; const originalDebug = process.env['FEDERATION_DEBUG']; - const fetchMock = vi.fn(() => Promise.resolve({ ok: true })); + const fetchMock = rs.fn(() => Promise.resolve({ ok: true })); Object.defineProperty(globalThis, 'fetch', { value: fetchMock, configurable: true, @@ -1708,11 +1708,11 @@ describe('ObservabilityPlugin', () => { it('logs local collector connection failures in debug mode', async () => { const originalFetch = globalThis.fetch; const originalDebug = process.env['FEDERATION_DEBUG']; - const consoleDebug = vi + const consoleDebug = rs .spyOn(console, 'debug') .mockImplementation(() => undefined); const fetchError = new Error('collector unavailable'); - const fetchMock = vi.fn(() => Promise.reject(fetchError)); + const fetchMock = rs.fn(() => Promise.reject(fetchError)); Object.defineProperty(globalThis, 'fetch', { value: fetchMock, configurable: true, @@ -1759,11 +1759,11 @@ describe('ObservabilityPlugin', () => { it('hides local collector connection failures outside debug mode', async () => { const originalFetch = globalThis.fetch; const originalDebug = process.env['FEDERATION_DEBUG']; - const consoleDebug = vi + const consoleDebug = rs .spyOn(console, 'debug') .mockImplementation(() => undefined); const fetchError = new Error('collector unavailable'); - const fetchMock = vi.fn(() => Promise.reject(fetchError)); + const fetchMock = rs.fn(() => Promise.reject(fetchError)); Object.defineProperty(globalThis, 'fetch', { value: fetchMock, configurable: true, @@ -1806,7 +1806,7 @@ describe('ObservabilityPlugin', () => { it('posts events to the browser devtools channel when enabled', () => { const originalPostMessage = (globalThis as { postMessage?: unknown }) .postMessage; - const postMessageMock = vi.fn(); + const postMessageMock = rs.fn(); Object.defineProperty(globalThis, 'postMessage', { value: postMessageMock, configurable: true, @@ -1862,8 +1862,8 @@ describe('ObservabilityPlugin', () => { const originalNodeEnv = process.env['NODE_ENV']; const originalPostMessage = (globalThis as { postMessage?: unknown }) .postMessage; - const fetchMock = vi.fn(() => Promise.resolve({ ok: true })); - const postMessageMock = vi.fn(); + const fetchMock = rs.fn(() => Promise.resolve({ ok: true })); + const postMessageMock = rs.fn(); Object.defineProperty(globalThis, 'fetch', { value: fetchMock, @@ -3230,13 +3230,13 @@ describe('ObservabilityPlugin', () => { console: false, }); - vi.useFakeTimers(); + rs.useFakeTimers(); try { - vi.setSystemTime(1000); + rs.setSystemTime(1000); await emitRemoteLoaded(observability); const buttonTraceId = observability.getLatestReport()?.traceId || ''; - vi.setSystemTime(2000); + rs.setSystemTime(2000); await emitRemoteLoaded(observability, { id: 'catalog/Card', expose: './Card', @@ -3248,7 +3248,7 @@ describe('ObservabilityPlugin', () => { }); const cardTraceId = observability.getLatestReport()?.traceId || ''; - vi.setSystemTime(3000); + rs.setSystemTime(3000); observability.plugin.errorLoadShare?.({ pkgName: 'react', shareInfo: createShared({ @@ -3303,7 +3303,7 @@ describe('ObservabilityPlugin', () => { observability.getLatestReport()?.traceId, ); } finally { - vi.useRealTimers(); + rs.useRealTimers(); } }); @@ -3839,7 +3839,7 @@ describe('ObservabilityPlugin', () => { it('prints a minimal console hint with traceId on error', () => { const observability = createObservability({ level: 'verbose' }); - const error = vi + const error = rs .spyOn(console, 'error') .mockImplementation(() => undefined); @@ -3882,7 +3882,7 @@ describe('ObservabilityPlugin', () => { scope: 'runtime_host', }, }); - const error = vi + const error = rs .spyOn(console, 'error') .mockImplementation(() => undefined); @@ -3917,7 +3917,7 @@ describe('ObservabilityPlugin', () => { __FEDERATION__?: Record; } ).__FEDERATION__; - const info = vi.spyOn(console, 'info').mockImplementation(() => undefined); + const info = rs.spyOn(console, 'info').mockImplementation(() => undefined); try { ( @@ -3981,7 +3981,7 @@ describe('ObservabilityPlugin', () => { __FEDERATION__?: Record; } ).__FEDERATION__; - const info = vi.spyOn(console, 'info').mockImplementation(() => undefined); + const info = rs.spyOn(console, 'info').mockImplementation(() => undefined); try { ( @@ -4076,7 +4076,7 @@ describe('ObservabilityPlugin', () => { level: 'verbose', printRawStack: true, }); - const errorSpy = vi + const errorSpy = rs .spyOn(console, 'error') .mockImplementation(() => undefined); const error = new Error('raw stack enabled'); @@ -4098,7 +4098,7 @@ describe('ObservabilityPlugin', () => { it('passes raw errors to explicit callbacks without affecting loading', () => { const rawError = new Error('raw callback'); - const onRawError = vi.fn(() => { + const onRawError = rs.fn(() => { throw new Error('ignored callback failure'); }); const observability = createObservability({ @@ -4306,7 +4306,7 @@ describe('ObservabilityPlugin', () => { level: 'verbose', printRawStack: true, }); - const errorSpy = vi + const errorSpy = rs .spyOn(console, 'error') .mockImplementation(() => undefined); const error = new Error('node raw stack enabled'); @@ -4446,10 +4446,10 @@ describe('ObservabilityPlugin', () => { it('does not let observability callbacks affect loading', async () => { const observability = createObservability({ level: 'verbose', - onEvent: vi.fn(() => { + onEvent: rs.fn(() => { throw new Error('onEvent failed'); }), - onReport: vi.fn(() => { + onReport: rs.fn(() => { throw new Error('onReport failed'); }), }); @@ -4463,13 +4463,13 @@ describe('ObservabilityPlugin', () => { const observability = createObservability({ level: 'verbose', console: false, - onEvent: vi.fn(() => { + onEvent: rs.fn(() => { throw new Error('onEvent failed'); }), - onReport: vi.fn(() => { + onReport: rs.fn(() => { throw new Error('onReport failed'); }), - onRawError: vi.fn(() => { + onRawError: rs.fn(() => { throw new Error('onRawError failed'); }), }); diff --git a/packages/observability-plugin/package.json b/packages/observability-plugin/package.json index 80e63afc356..e80d54ae90c 100644 --- a/packages/observability-plugin/package.json +++ b/packages/observability-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/observability-plugin", - "version": "2.5.2", + "version": "2.5.4", "author": "module-federation", "main": "./dist/index.js", "module": "./dist/esm/index.js", @@ -72,7 +72,7 @@ }, "scripts": { "build": "tsdown --config tsdown.config.ts && cp *.md dist", - "test": "vitest run -u -c vitest.config.ts", + "test": "rstest -u", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\" \"package.json\"", "pre-release": "pnpm run test && pnpm run build" } diff --git a/packages/observability-plugin/rstest.config.ts b/packages/observability-plugin/rstest.config.ts new file mode 100644 index 00000000000..0b5fadc7841 --- /dev/null +++ b/packages/observability-plugin/rstest.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from '@rstest/core'; +import path from 'path'; + +export default defineConfig({ + source: { + define: { + __DEV__: true, + __TEST__: true, + __BROWSER__: false, + __VERSION__: '"unknown"', + }, + }, + testEnvironment: 'node', + include: [path.resolve(__dirname, '__tests__/*.spec.ts')], + globals: true, + testTimeout: 10000, +}); diff --git a/packages/observability-plugin/vitest.config.ts b/packages/observability-plugin/vitest.config.ts deleted file mode 100644 index 9d82a458863..00000000000 --- a/packages/observability-plugin/vitest.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import path from 'path'; -import { defineConfig } from 'vitest/config'; -import tsconfigPaths from 'vite-tsconfig-paths'; - -export default defineConfig({ - define: { - __DEV__: true, - __TEST__: true, - __BROWSER__: false, - __VERSION__: '"unknown"', - }, - plugins: [tsconfigPaths()], - test: { - environment: 'node', - include: [path.resolve(__dirname, '__tests__/*.spec.ts')], - globals: true, - testTimeout: 10000, - }, -}); diff --git a/packages/playground/CHANGELOG.md b/packages/playground/CHANGELOG.md new file mode 100644 index 00000000000..8bdf541986b --- /dev/null +++ b/packages/playground/CHANGELOG.md @@ -0,0 +1,18 @@ +# @module-federation/playground + +## 0.0.3 + +### Patch Changes + +- 681e5d2: feat(dts-plugin): support ts 7 for federated type generation while keeping existing ts versions supported +- Updated dependencies [6ee67dc] + - @module-federation/bridge-react@2.8.0 + - @module-federation/runtime@2.8.0 + +## 0.0.2 + +### Patch Changes + +- f8b9b32: Add a publishable Module Federation playground package for the docs site. + - @module-federation/bridge-react@2.7.0 + - @module-federation/runtime@2.7.0 diff --git a/packages/playground/package.json b/packages/playground/package.json index eb865d1dfbf..f1f697b3c61 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/playground", - "version": "0.0.1", + "version": "0.0.3", "description": "Module Federation Playground", "homepage": "https://module-federation.io", "repository": { @@ -12,14 +12,14 @@ "author": "2heal1 ", "exports": { ".": { - "types": "./dist/cjs/index.d.ts", + "types": "./dist/types/index.d.ts", "import": "./dist/esm/index.mjs", "require": "./dist/cjs/index.js" } }, "main": "./dist/cjs/index.js", "module": "./dist/esm/index.mjs", - "types": "./dist/cjs/index.d.ts", + "types": "./dist/types/index.d.ts", "files": [ "dist" ], @@ -30,7 +30,7 @@ "prebuild": "pnpm run sync:bridge-runtime", "dev": "rslib mf-dev", "start": "rsbuild dev", - "build": "rslib build", + "build": "tsc -p tsconfig.build.json && node scripts/write-dts-entry.mjs && rslib build", "pre-release": "pnpm run build" }, "dependencies": { @@ -38,7 +38,8 @@ "@module-federation/runtime": "workspace:*", "@monaco-editor/react": "4.7.0", "monaco-editor": "0.52.2", - "typescript": "^5.9.3" + "typescript": "7.0.2", + "typescript-compiler": "npm:typescript@6.0.3" }, "devDependencies": { "@module-federation/rsbuild-plugin": "workspace:*", diff --git a/packages/playground/rslib.config.ts b/packages/playground/rslib.config.ts index 376eeca74bc..52d2eb95526 100644 --- a/packages/playground/rslib.config.ts +++ b/packages/playground/rslib.config.ts @@ -33,9 +33,7 @@ function isTypescriptDynamicRequireWarning(warning: unknown) { } const shared = { - dts: { - bundle: true, - }, + dts: false, source: { entry: { index: './src/component.ts', diff --git a/packages/playground/scripts/write-dts-entry.mjs b/packages/playground/scripts/write-dts-entry.mjs new file mode 100644 index 00000000000..bebd926ec61 --- /dev/null +++ b/packages/playground/scripts/write-dts-entry.mjs @@ -0,0 +1,7 @@ +import { mkdir, writeFile } from 'node:fs/promises'; + +await mkdir('dist/types', { recursive: true }); +await writeFile( + 'dist/types/index.d.ts', + "export * from './component';\nexport { default } from './component';\n", +); diff --git a/packages/playground/src/consumerCompiler.ts b/packages/playground/src/consumerCompiler.ts index e5b8ed407d7..5a9edd14a8f 100644 --- a/packages/playground/src/consumerCompiler.ts +++ b/packages/playground/src/consumerCompiler.ts @@ -1,4 +1,4 @@ -import ts from 'typescript'; +import * as ts from 'typescript-compiler'; import { BRIDGE_RUNTIME_FILES } from './generated/bridgeRuntimeFiles'; export type CompilePlaygroundParams = { diff --git a/packages/playground/tsconfig.build.json b/packages/playground/tsconfig.build.json new file mode 100644 index 00000000000..64769b34980 --- /dev/null +++ b/packages/playground/tsconfig.build.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true, + "noEmit": false, + "outDir": "./dist/types", + "rootDir": "./src" + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/packages/retry-plugin/CHANGELOG.md b/packages/retry-plugin/CHANGELOG.md index 30443e0bca2..0749ba96080 100644 --- a/packages/retry-plugin/CHANGELOG.md +++ b/packages/retry-plugin/CHANGELOG.md @@ -1,5 +1,23 @@ # @module-federation/retry-plugin +## 2.8.0 + +### Patch Changes + +- Updated dependencies [ea490ae] + - @module-federation/sdk@2.8.0 + - @module-federation/runtime@2.8.0 + +## 2.7.0 + +### Patch Changes + +- c103676: fix: externalize @module-federation/runtime and runtime-core from DTS bundle to prevent type incompatibility in consumers +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/runtime@2.7.0 + ## 2.6.0 ### Minor Changes diff --git a/packages/retry-plugin/__tests__/retry.spec.ts b/packages/retry-plugin/__tests__/retry.spec.ts index e76ae832a1d..9eb78f2b5ed 100644 --- a/packages/retry-plugin/__tests__/retry.spec.ts +++ b/packages/retry-plugin/__tests__/retry.spec.ts @@ -1,24 +1,24 @@ -import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; +import { describe, it, expect, beforeEach, afterEach, rs } from '@rstest/core'; import { fetchRetry } from '../src/fetch-retry'; import { scriptRetry } from '../src/script-retry'; import { ERROR_ABANDONED, RUNTIME_008 } from '../src/constant'; -const mockFetch = vi.fn(); +const mockFetch = rs.fn(); global.fetch = mockFetch; -vi.mock('../src/logger', () => ({ +rs.mock('../src/logger', () => ({ default: { - log: vi.fn(), - warn: vi.fn(), - error: vi.fn(), + log: rs.fn(), + warn: rs.fn(), + error: rs.fn(), }, })); describe('Retry Plugin', () => { beforeEach(() => { - vi.clearAllMocks(); + rs.clearAllMocks(); mockFetch.mockClear(); - vi.useRealTimers(); + rs.useRealTimers(); }); describe('fetchRetry', () => { @@ -96,7 +96,7 @@ describe('Retry Plugin', () => { }); it('should call onRetry callback', async () => { - const onRetry = vi.fn(); + const onRetry = rs.fn(); mockFetch.mockRejectedValue(new Error('Network error')); await expect( @@ -118,7 +118,7 @@ describe('Retry Plugin', () => { }); it('should call onSuccess callback on retry success (not on first success)', async () => { - const onSuccess = vi.fn(); + const onSuccess = rs.fn(); const mockResponse = { ok: true, json: () => Promise.resolve({ data: 'test' }), @@ -148,7 +148,7 @@ describe('Retry Plugin', () => { }); it('should call onError callback on final failure', async () => { - const onError = vi.fn(); + const onError = rs.fn(); mockFetch.mockRejectedValue(new Error('Network error')); await expect( @@ -170,7 +170,7 @@ describe('Retry Plugin', () => { describe('scriptRetry', () => { it('should retry on script load failure', async () => { - const mockRetryFn = vi + const mockRetryFn = rs .fn() .mockRejectedValueOnce(new Error('Script load error')) .mockResolvedValueOnce({ module: 'loaded' }); @@ -192,7 +192,7 @@ describe('Retry Plugin', () => { }); it('should respect retryTimes limit for scripts', async () => { - const mockRetryFn = vi + const mockRetryFn = rs .fn() .mockRejectedValue(new Error('Script load error')); @@ -212,7 +212,7 @@ describe('Retry Plugin', () => { }); it('should use getRetryUrl for script retries', async () => { - const mockRetryFn = vi + const mockRetryFn = rs .fn() .mockRejectedValue(new Error('Script load error')); @@ -237,10 +237,10 @@ describe('Retry Plugin', () => { }); it('should call callbacks for script retry', async () => { - const onRetry = vi.fn(); - const onSuccess = vi.fn(); - const onError = vi.fn(); - const mockRetryFn = vi + const onRetry = rs.fn(); + const onSuccess = rs.fn(); + const onError = rs.fn(); + const mockRetryFn = rs .fn() .mockImplementationOnce(({ getEntryUrl }: any) => { // trigger onRetry by calling getEntryUrl @@ -274,7 +274,7 @@ describe('Retry Plugin', () => { 'http://localhost:2011', 'http://localhost:2021', ]; - const mockRetryFn = vi.fn().mockImplementation(({ getEntryUrl }: any) => { + const mockRetryFn = rs.fn().mockImplementation(({ getEntryUrl }: any) => { // Consumer always calls getEntryUrl with the same original URL const nextUrl = getEntryUrl('http://localhost:2001/remoteEntry.js'); sequence.push(nextUrl); @@ -307,7 +307,7 @@ describe('Retry Plugin', () => { it('should append retryCount when addQuery is true for scripts', async () => { const sequence: string[] = []; - const mockRetryFn = vi.fn().mockImplementation(({ getEntryUrl }: any) => { + const mockRetryFn = rs.fn().mockImplementation(({ getEntryUrl }: any) => { // Consumer always calls getEntryUrl with the same original URL const nextUrl = getEntryUrl('https://cdn-a.example.com/entry.js'); sequence.push(nextUrl); @@ -341,7 +341,7 @@ describe('Retry Plugin', () => { it('should prevent query parameter accumulation for scripts with functional addQuery', async () => { const sequence: string[] = []; - const mockRetryFn = vi.fn().mockImplementation(({ getEntryUrl }: any) => { + const mockRetryFn = rs.fn().mockImplementation(({ getEntryUrl }: any) => { // Consumer always calls getEntryUrl with the same original URL const nextUrl = getEntryUrl('https://m1.example.com/remoteEntry.js'); sequence.push(nextUrl); @@ -387,12 +387,12 @@ describe('Retry Plugin', () => { describe('exponential backoff', () => { afterEach(() => { - vi.useRealTimers(); + rs.useRealTimers(); }); it('should apply exponential backoff when retryDelay is a function for fetchRetry', async () => { - vi.useFakeTimers(); - const setTimeoutSpy = vi.spyOn(global, 'setTimeout'); + rs.useFakeTimers(); + const setTimeoutSpy = rs.spyOn(global, 'setTimeout'); mockFetch.mockRejectedValue(new Error('fail')); const backoff = (attempt: number) => 1000 * 2 ** (attempt - 1); @@ -404,7 +404,7 @@ describe('Retry Plugin', () => { }); const assertion = expect(fetchPromise).rejects.toThrow(); - await vi.runAllTimersAsync(); + await rs.runAllTimersAsync(); await assertion; const delays = setTimeoutSpy.mock.calls.map(([, ms]) => ms); @@ -413,9 +413,9 @@ describe('Retry Plugin', () => { }); it('should apply exponential backoff when retryDelay is a function for scriptRetry', async () => { - vi.useFakeTimers(); - const setTimeoutSpy = vi.spyOn(global, 'setTimeout'); - const mockRetryFn = vi + rs.useFakeTimers(); + const setTimeoutSpy = rs.spyOn(global, 'setTimeout'); + const mockRetryFn = rs .fn() .mockRejectedValue(new Error('Script load error')); @@ -434,7 +434,7 @@ describe('Retry Plugin', () => { }); const assertion = expect(retryPromise).rejects.toThrow(ERROR_ABANDONED); - await vi.runAllTimersAsync(); + await rs.runAllTimersAsync(); await assertion; const delays = setTimeoutSpy.mock.calls.map(([, ms]) => ms); diff --git a/packages/retry-plugin/jest.config.ts b/packages/retry-plugin/jest.config.ts deleted file mode 100644 index c1822747922..00000000000 --- a/packages/retry-plugin/jest.config.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* eslint-disable */ -import { readFileSync } from 'fs'; - -// Reading the SWC compilation config and remove the "exclude" -// for the test files to be compiled by SWC -const { exclude: _, ...swcJestConfig } = JSON.parse( - readFileSync(`${__dirname}/.swcrc`, 'utf-8'), -); - -// disable .swcrc look-up by SWC core because we're passing in swcJestConfig ourselves. -// If we do not disable this, SWC Core will read .swcrc and won't transform our test files due to "exclude" -if (swcJestConfig.swcrc === undefined) { - swcJestConfig.swcrc = false; -} - -// Uncomment if using global setup/teardown files being transformed via swc -// https://nx.dev/packages/jest/documents/overview#global-setup/teardown-with-nx-libraries -// jest needs EsModule Interop to find the default exported setup/teardown functions -// swcJestConfig.module.noInterop = false; - -export default { - displayName: 'runtime', - preset: '../../jest.preset.js', - transform: { - '^.+\\.[tj]s$': ['@swc/jest', swcJestConfig], - }, - moduleFileExtensions: ['ts', 'js', 'html'], - testEnvironment: 'node', - coverageDirectory: '../../coverage/packages/retry-plugin', -}; diff --git a/packages/retry-plugin/package.json b/packages/retry-plugin/package.json index 5a22351a0bc..b648ddd4dd8 100644 --- a/packages/retry-plugin/package.json +++ b/packages/retry-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/retry-plugin", - "version": "2.6.0", + "version": "2.8.0", "author": "danpeen ", "main": "./dist/index.js", "module": "./dist/esm/index.js", @@ -43,7 +43,7 @@ }, "scripts": { "build": "tsdown --config tsdown.config.ts && cp *.md dist", - "test": "vitest run -u -c vitest.config.ts", + "test": "rstest -u", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\" \"package.json\"", "build-debug": "FEDERATION_DEBUG=true pnpm run build", "pre-release": "pnpm run test && pnpm run build" diff --git a/packages/retry-plugin/rstest.config.ts b/packages/retry-plugin/rstest.config.ts new file mode 100644 index 00000000000..8bb787e52a2 --- /dev/null +++ b/packages/retry-plugin/rstest.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from '@rstest/core'; +import path from 'path'; + +export default defineConfig({ + source: { + define: { + __DEV__: true, + __TEST__: true, + __BROWSER__: false, + __VERSION__: '"unknown"', + }, + }, + testEnvironment: 'jsdom', + include: [path.resolve(__dirname, '__tests__/*.spec.ts')], + globals: true, + testTimeout: 10000, +}); diff --git a/packages/retry-plugin/tsconfig.json b/packages/retry-plugin/tsconfig.json index 209ee4dad8e..90b8d931e39 100644 --- a/packages/retry-plugin/tsconfig.json +++ b/packages/retry-plugin/tsconfig.json @@ -11,5 +11,5 @@ }, "files": [], "include": [], - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] } diff --git a/packages/retry-plugin/vitest.config.ts b/packages/retry-plugin/vitest.config.ts deleted file mode 100644 index b9e99866eca..00000000000 --- a/packages/retry-plugin/vitest.config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { defineConfig } from 'vitest/config'; -import tsconfigPaths from 'vite-tsconfig-paths'; -import path from 'path'; -export default defineConfig({ - define: { - __DEV__: true, - __TEST__: true, - __BROWSER__: false, - __VERSION__: '"unknown"', - }, - plugins: [tsconfigPaths()], - test: { - environment: 'jsdom', - include: [path.resolve(__dirname, '__tests__/*.spec.ts')], - globals: true, - testTimeout: 10000, - }, -}); diff --git a/packages/rsbuild-plugin/CHANGELOG.md b/packages/rsbuild-plugin/CHANGELOG.md index b58430007e3..b78977167f4 100644 --- a/packages/rsbuild-plugin/CHANGELOG.md +++ b/packages/rsbuild-plugin/CHANGELOG.md @@ -1,5 +1,28 @@ # @module-federation/rsbuild-plugin +## 2.8.0 + +### Patch Changes + +- cef63f9: fix(rsbuild-plugin): force `output.library.type` to `commonjs-module` in `patchNodeConfig` so the `mf-ssr` bundle stops emitting module-scope `export {}` and passes rspack 2.1.x minification. +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/enhanced@2.8.0 + - @module-federation/sdk@2.8.0 + - @module-federation/node@2.7.47 + +## 2.7.0 + +### Patch Changes + +- 61fe85d: chore(deps): upgrade `@rslib/core` to 0.23.2, `@rsbuild/core` to 2.1.4, and `@rsbuild/plugin-react`/`plugin-vue`/`plugin-sass` to their 2.x latest across dev dependencies. `create-module-federation` templates are updated so newly scaffolded projects pick up the same versions. `@module-federation/modern-js-v3` is realigned to `@modern-js/* 3.5.0` (which uses `@rsbuild/core 2.1.0`) to resolve a `Rspack` type mismatch between the upgraded `@module-federation/rsbuild-plugin` and modern-js's own rsbuild embedding. Peer dependency ranges are untouched. +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/enhanced@2.7.0 + - @module-federation/node@2.7.46 + ## 2.6.0 ### Patch Changes diff --git a/packages/rsbuild-plugin/package.json b/packages/rsbuild-plugin/package.json index cf4b1fbb6fd..3d6dfa29ee8 100644 --- a/packages/rsbuild-plugin/package.json +++ b/packages/rsbuild-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/rsbuild-plugin", - "version": "2.6.0", + "version": "2.8.0", "description": "Module Federation plugin for Rsbuild", "homepage": "https://module-federation.io", "bugs": { @@ -54,9 +54,10 @@ "@module-federation/node": "workspace:*" }, "devDependencies": { - "@rslib/core": "^0.12.4", - "@rsbuild/core": "2.0.0-beta.2", - "vitest": "1.6.1" + "@rslib/core": "^0.23.2", + "@rsbuild/core": "2.1.4", + "@rstest/core": "^0.10.6", + "typescript": "7.0.2" }, "peerDependencies": { "@rsbuild/core": "^1.3.21 || ^2.0.0-0" @@ -76,7 +77,7 @@ "scripts": { "build": "rslib build", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\" \"package.json\"", - "test": "pnpm exec vitest run --passWithNoTests --config vite.config.mts", + "test": "pnpm exec rstest --passWithNoTests", "pre-release": "pnpm run test && pnpm run build" } } diff --git a/packages/rsbuild-plugin/rstest.config.mts b/packages/rsbuild-plugin/rstest.config.mts new file mode 100644 index 00000000000..5ac4912aa5b --- /dev/null +++ b/packages/rsbuild-plugin/rstest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({ + testEnvironment: 'node', + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + reporters: ['default'], + passWithNoTests: true, +}); diff --git a/packages/rsbuild-plugin/src/cli/index.spec.ts b/packages/rsbuild-plugin/src/cli/index.spec.ts index a028b86bdbb..122f669ead9 100644 --- a/packages/rsbuild-plugin/src/cli/index.spec.ts +++ b/packages/rsbuild-plugin/src/cli/index.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { isMFFormat } from '../../src/cli'; import type { Rspack } from '@rsbuild/core'; diff --git a/packages/rsbuild-plugin/src/cli/index.test.ts b/packages/rsbuild-plugin/src/cli/index.test.ts index 09ba83dfd28..e5fc06e8276 100644 --- a/packages/rsbuild-plugin/src/cli/index.test.ts +++ b/packages/rsbuild-plugin/src/cli/index.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest'; +import { describe, expect, it } from '@rstest/core'; import { pluginModuleFederation } from './index'; import type { moduleFederationPlugin } from '@module-federation/sdk'; diff --git a/packages/rsbuild-plugin/src/cli/node-target.spec.ts b/packages/rsbuild-plugin/src/cli/node-target.spec.ts index 36a796358a3..c58ea339651 100644 --- a/packages/rsbuild-plugin/src/cli/node-target.spec.ts +++ b/packages/rsbuild-plugin/src/cli/node-target.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it, vi } from 'vitest'; +import { describe, expect, it, rs } from '@rstest/core'; import { pluginModuleFederation, RSBUILD_PLUGIN_MODULE_FEDERATION_NAME, @@ -30,16 +30,16 @@ function createMockApi( modifyRsbuildConfig: (callback: (config: Record) => void) => { callback(rsbuildConfig); }, - modifyEnvironmentConfig: vi.fn(), - expose: vi.fn(), - processAssets: vi.fn(), + modifyEnvironmentConfig: rs.fn(), + expose: rs.fn(), + processAssets: rs.fn(), onBeforeCreateCompiler: ( callback: (args: { bundlerConfigs?: Rspack.Configuration[] }) => void, ) => { state.beforeCreateCompiler = callback; }, - onDevCompileDone: vi.fn(), - onAfterBuild: vi.fn(), + onDevCompileDone: rs.fn(), + onAfterBuild: rs.fn(), }; return { api, state, rsbuildConfig }; @@ -175,7 +175,7 @@ describe('pluginModuleFederation node target environment behavior', () => { expect(ssrBundlerConfig.plugins?.length).toBeGreaterThan(0); expect(clientBundlerConfig.target).toBeUndefined(); expect(clientBundlerConfig.plugins?.length).toBe(0); - const exposedApi = (api.expose as ReturnType).mock.calls.find( + const exposedApi = (api.expose as ReturnType).mock.calls.find( ([name]) => name === RSBUILD_PLUGIN_MODULE_FEDERATION_NAME, )?.[1] as { options: { diff --git a/packages/rsbuild-plugin/src/utils/ssr.spec.ts b/packages/rsbuild-plugin/src/utils/ssr.spec.ts index 85624747dcd..ca3ecb77d8d 100644 --- a/packages/rsbuild-plugin/src/utils/ssr.spec.ts +++ b/packages/rsbuild-plugin/src/utils/ssr.spec.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, vi } from 'vitest'; +import { describe, it, expect, rs } from '@rstest/core'; import { createSSRMFConfig, patchSSRRspackConfig, SSR_DIR } from './ssr'; import type { Rspack } from '@rsbuild/core'; import type { moduleFederationPlugin } from '@module-federation/sdk'; diff --git a/packages/rsbuild-plugin/src/utils/ssr.ts b/packages/rsbuild-plugin/src/utils/ssr.ts index 08fc8e53b90..5a4230601af 100644 --- a/packages/rsbuild-plugin/src/utils/ssr.ts +++ b/packages/rsbuild-plugin/src/utils/ssr.ts @@ -57,6 +57,18 @@ export function patchNodeConfig( config.output.module = false; config.output.chunkFormat = 'commonjs'; config.output.chunkLoading = 'async-node'; + const prevLibrary = config.output.library; + if ( + prevLibrary && + typeof prevLibrary === 'object' && + !Array.isArray(prevLibrary) + ) { + config.output.library = { ...prevLibrary, type: 'commonjs-module' }; + } else if (typeof prevLibrary === 'string' || Array.isArray(prevLibrary)) { + config.output.library = { name: prevLibrary, type: 'commonjs-module' }; + } else { + config.output.library = { type: 'commonjs-module' }; + } delete config.output.chunkLoadingGlobal; const UniverseEntryChunkTrackerPluginModule = safeRequire<{ default?: new () => Rspack.RspackPluginInstance; diff --git a/packages/rsbuild-plugin/tsconfig.json b/packages/rsbuild-plugin/tsconfig.json index bc1635aab04..977deb076a6 100644 --- a/packages/rsbuild-plugin/tsconfig.json +++ b/packages/rsbuild-plugin/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "baseUrl": ".", "rootDir": "./", "outDir": "dist", "sourceMap": false, @@ -11,7 +10,7 @@ "moduleResolution": "bundler", "allowJs": false, "strict": true, - "types": ["jest", "node"], + "types": ["node"], "experimentalDecorators": true, "resolveJsonModule": true, "allowSyntheticDefaultImports": true, @@ -20,7 +19,8 @@ "declaration": true, "paths": { "@/*": ["./*"], - "@src/*": ["./src/*"] + "@src/*": ["./src/*"], + "*": ["./*"] } }, "include": ["src", "../../global.d.ts", "__tests__/**/*"], diff --git a/packages/rsbuild-plugin/tsconfig.lib.json b/packages/rsbuild-plugin/tsconfig.lib.json index 4b75aca1f6b..d2be5624718 100644 --- a/packages/rsbuild-plugin/tsconfig.lib.json +++ b/packages/rsbuild-plugin/tsconfig.lib.json @@ -6,5 +6,5 @@ "types": ["node"] }, "include": ["src/**/*.ts"], - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] + "exclude": ["rstest.config.mts", "src/**/*.spec.ts", "src/**/*.test.ts"] } diff --git a/packages/rsbuild-plugin/tsconfig.spec.json b/packages/rsbuild-plugin/tsconfig.spec.json index 9b2a121d114..70848594750 100644 --- a/packages/rsbuild-plugin/tsconfig.spec.json +++ b/packages/rsbuild-plugin/tsconfig.spec.json @@ -3,10 +3,10 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": ["jest", "node"] + "types": ["@rstest/core/globals", "@rstest/core/importMeta", "node"] }, "include": [ - "jest.config.ts", + "rstest.config.mts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts" diff --git a/packages/rsbuild-plugin/vite.config.mts b/packages/rsbuild-plugin/vite.config.mts deleted file mode 100644 index 639f4182275..00000000000 --- a/packages/rsbuild-plugin/vite.config.mts +++ /dev/null @@ -1,24 +0,0 @@ -/// -import { defineConfig } from 'vite'; - -import tsconfigPaths from 'vite-tsconfig-paths'; - -export default defineConfig({ - cacheDir: '../../node_modules/.vite/rsbuild-plugin', - - plugins: [tsconfigPaths()], - - // Uncomment this if you are using workers. - // worker: { - // plugins: [ tsconfigPaths() ], - // }, - - test: { - cache: { - dir: '../../node_modules/.vitest', - }, - environment: 'node', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - reporters: ['default'], - }, -}); diff --git a/packages/rspack/CHANGELOG.md b/packages/rspack/CHANGELOG.md index 5428ceec1b3..9844aebc01c 100644 --- a/packages/rspack/CHANGELOG.md +++ b/packages/rspack/CHANGELOG.md @@ -1,5 +1,40 @@ # @module-federation/rspack +## 2.8.0 + +### Patch Changes + +- ea490ae: Allow builds to exclude unused remote consumption and shared capabilities, and automatically omit Webpack container initialization when no exposes are configured. +- 681e5d2: feat(dts-plugin): support ts 7 for federated type generation while keeping existing ts versions supported +- Updated dependencies [d6a76d8] +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] +- Updated dependencies [a5633f8] + - @module-federation/manifest@2.8.0 + - @module-federation/sdk@2.8.0 + - @module-federation/bridge-react-webpack-plugin@2.8.0 + - @module-federation/dts-plugin@2.8.0 + - @module-federation/managers@2.8.0 + - @module-federation/runtime-tools@2.8.0 + - @module-federation/inject-external-runtime-core-plugin@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [a7351f3] +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] +- Updated dependencies [a5f123a] + - @module-federation/dts-plugin@2.7.0 + - @module-federation/sdk@2.7.0 + - @module-federation/managers@2.7.0 + - @module-federation/manifest@2.7.0 + - @module-federation/bridge-react-webpack-plugin@2.7.0 + - @module-federation/runtime-tools@2.7.0 + - @module-federation/inject-external-runtime-core-plugin@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/rspack/__tests__/ModuleFederationPlugin.spec.ts b/packages/rspack/__tests__/ModuleFederationPlugin.spec.ts index f8e9cfa355e..ff101840e3e 100644 --- a/packages/rspack/__tests__/ModuleFederationPlugin.spec.ts +++ b/packages/rspack/__tests__/ModuleFederationPlugin.spec.ts @@ -1,8 +1,39 @@ import { + ModuleFederationPlugin, resolveRspackRuntimeAlias, resolveRspackRuntimeImplementation, } from '../src/ModuleFederationPlugin'; +function getOptimizationDefines( + optimization?: NonNullable< + NonNullable< + ConstructorParameters[0]['experiments'] + >['optimization'] + >, + exposes?: ConstructorParameters[0]['exposes'], +) { + let definitions: Record = {}; + class DefinePlugin { + constructor(options: Record) { + definitions = options; + } + + apply() {} + } + + const plugin = new ModuleFederationPlugin({ + name: 'test', + exposes, + experiments: { optimization }, + }); + + (plugin as any)._patchBundlerConfig({ + webpack: { DefinePlugin }, + }); + + return definitions; +} + describe('runtime resolution compatibility', () => { it('prefers the bundler implementation when available', () => { const resolve = jest.fn((request: string) => { @@ -67,3 +98,38 @@ describe('runtime resolution compatibility', () => { ); }); }); + +describe('runtime capability optimization defines', () => { + it('keeps all runtime capabilities enabled by default', () => { + expect(getOptimizationDefines()).toMatchObject({ + FEDERATION_OPTIMIZE_NO_REMOTE: false, + FEDERATION_OPTIMIZE_NO_SHARED: false, + FEDERATION_HAS_EXPOSES: false, + }); + }); + + it('derives expose capability from the container configuration', () => { + expect(getOptimizationDefines(undefined, {})).toMatchObject({ + FEDERATION_HAS_EXPOSES: false, + }); + expect( + getOptimizationDefines(undefined, { + './Button': './src/Button', + }), + ).toMatchObject({ + FEDERATION_HAS_EXPOSES: true, + }); + }); + + it('defines each disabled runtime capability independently', () => { + expect( + getOptimizationDefines({ + disableRemote: true, + disableShared: true, + }), + ).toMatchObject({ + FEDERATION_OPTIMIZE_NO_REMOTE: true, + FEDERATION_OPTIMIZE_NO_SHARED: true, + }); + }); +}); diff --git a/packages/rspack/jest.config.js b/packages/rspack/jest.config.js index a0e6674e3c6..907c9a12199 100644 --- a/packages/rspack/jest.config.js +++ b/packages/rspack/jest.config.js @@ -13,7 +13,6 @@ module.exports = { __BROWSER__: false, __VERSION__: '"unknown"', }, - preset: 'ts-jest', transformIgnorePatterns: [ // Change MODULE_NAME_HERE to your module that isn't being compiled '/node_modules/', diff --git a/packages/rspack/package.json b/packages/rspack/package.json index fa2fbb24738..544a0f10922 100644 --- a/packages/rspack/package.json +++ b/packages/rspack/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/rspack", - "version": "2.6.0", + "version": "2.8.0", "license": "MIT", "keywords": [ "Module Federation", @@ -33,7 +33,8 @@ "@module-federation/sdk": "workspace:*" }, "devDependencies": { - "@rspack/core": "^1.0.2" + "@rspack/core": "^1.0.2", + "typescript": "7.0.2" }, "exports": { ".": { @@ -81,7 +82,7 @@ } }, "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", + "typescript": "^4.9.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "vue-tsc": ">=1.0.24", "@rspack/core": "^0.7.0 || ^1.0.0 || ^2.0.0-0" }, diff --git a/packages/rspack/src/ModuleFederationPlugin.ts b/packages/rspack/src/ModuleFederationPlugin.ts index f19e036b5f7..4fe78266666 100644 --- a/packages/rspack/src/ModuleFederationPlugin.ts +++ b/packages/rspack/src/ModuleFederationPlugin.ts @@ -37,6 +37,17 @@ type RuntimeEntrySpec = { cjs: string; }; +function hasExposes( + exposes: moduleFederationPlugin.ModuleFederationPluginOptions['exposes'], +): boolean { + return Boolean( + exposes && + (Array.isArray(exposes) + ? exposes.length > 0 + : Object.keys(exposes).length > 0), + ); +} + function resolveRuntimeEntry( spec: RuntimeEntrySpec, implementation: string | undefined, @@ -99,7 +110,7 @@ export class ModuleFederationPlugin implements RspackPluginInstance { } private _patchBundlerConfig(compiler: Compiler): void { - const { name, experiments } = this._options; + const { name, experiments, exposes } = this._options; const definePluginOptions: Record = {}; if (name) { definePluginOptions['FEDERATION_BUILD_IDENTIFIER'] = JSON.stringify( @@ -110,6 +121,11 @@ export class ModuleFederationPlugin implements RspackPluginInstance { const disableSnapshot = experiments?.optimization?.disableSnapshot ?? false; definePluginOptions['FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN'] = disableSnapshot; + definePluginOptions['FEDERATION_OPTIMIZE_NO_REMOTE'] = + experiments?.optimization?.disableRemote ?? false; + definePluginOptions['FEDERATION_OPTIMIZE_NO_SHARED'] = + experiments?.optimization?.disableShared ?? false; + definePluginOptions['FEDERATION_HAS_EXPOSES'] = hasExposes(exposes); // Determine ENV_TARGET: only if manually specified in experiments.optimization.target if ( diff --git a/packages/rspack/src/index.ts b/packages/rspack/src/index.ts index d9b772f79a8..abc5efc8f20 100644 --- a/packages/rspack/src/index.ts +++ b/packages/rspack/src/index.ts @@ -1,4 +1,6 @@ export { ModuleFederationPlugin, PLUGIN_NAME } from './ModuleFederationPlugin'; import { container } from '@rspack/core'; -export const ContainerPlugin = container.ContainerPlugin; -export const ContainerReferencePlugin = container.ContainerReferencePlugin; +export const ContainerPlugin: typeof container.ContainerPlugin = + container.ContainerPlugin; +export const ContainerReferencePlugin: typeof container.ContainerReferencePlugin = + container.ContainerReferencePlugin; diff --git a/packages/rspack/tsconfig.json b/packages/rspack/tsconfig.json index 77578113c20..5549659621d 100644 --- a/packages/rspack/tsconfig.json +++ b/packages/rspack/tsconfig.json @@ -8,7 +8,6 @@ "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, diff --git a/packages/rspress-plugin/CHANGELOG.md b/packages/rspress-plugin/CHANGELOG.md index acab5d5583f..b3ba81e7ef0 100644 --- a/packages/rspress-plugin/CHANGELOG.md +++ b/packages/rspress-plugin/CHANGELOG.md @@ -1,5 +1,31 @@ # @module-federation/rspress-plugin +## 2.8.0 + +### Patch Changes + +- Updated dependencies [cef63f9] +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/rsbuild-plugin@2.8.0 + - @module-federation/enhanced@2.8.0 + - @module-federation/sdk@2.8.0 + - @module-federation/error-codes@2.8.0 + +## 2.7.0 + +### Patch Changes + +- 8ec950c: Bump runtime dependencies: echarts 6.1.0 (devtools), hono 4.12.26 and @hono/node-server 1.19.13 (treeshake-server), lodash-es 4.18.1 (rspress-plugin), handlebars 4.7.9 (create-module-federation), resolve 1.22.12 (third-party-dts-extractor). +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] +- Updated dependencies [61fe85d] + - @module-federation/sdk@2.7.0 + - @module-federation/rsbuild-plugin@2.7.0 + - @module-federation/enhanced@2.7.0 + - @module-federation/error-codes@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/rspress-plugin/package.json b/packages/rspress-plugin/package.json index fab5dc124c2..77f050a5924 100644 --- a/packages/rspress-plugin/package.json +++ b/packages/rspress-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/rspress-plugin", - "version": "2.6.0", + "version": "2.8.0", "type": "module", "description": "Module Federation plugin for Rspress", "keywords": [ @@ -36,11 +36,12 @@ "pre-release": "pnpm exec turbo run build --filter=@module-federation/webpack-bundler-runtime" }, "devDependencies": { - "@rslib/core": "^0.9.2", + "@rslib/core": "^0.23.2", "@rspress/core": "2.0.14", "@types/html-to-text": "^9.0.4", "@types/lodash-es": "^4.17.12", - "@types/react": "^18.3.11" + "@types/react": "^18.3.11", + "typescript": "7.0.2" }, "dependencies": { "cheerio": "1.0.0-rc.12", diff --git a/packages/runtime-core/CHANGELOG.md b/packages/runtime-core/CHANGELOG.md index 3bca7dcf9a6..a86e3fb77d7 100644 --- a/packages/runtime-core/CHANGELOG.md +++ b/packages/runtime-core/CHANGELOG.md @@ -1,5 +1,23 @@ # @module-federation/runtime +## 2.8.0 + +### Patch Changes + +- ea490ae: Allow builds to exclude unused remote consumption and shared capabilities, and automatically omit Webpack container initialization when no exposes are configured. +- Updated dependencies [ea490ae] + - @module-federation/sdk@2.8.0 + - @module-federation/error-codes@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/error-codes@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/runtime-core/__tests__/hooks.spec.ts b/packages/runtime-core/__tests__/hooks.spec.ts index a8b97e7a52d..83b56d0a85a 100644 --- a/packages/runtime-core/__tests__/hooks.spec.ts +++ b/packages/runtime-core/__tests__/hooks.spec.ts @@ -1,4 +1,4 @@ -import { assert, describe, test, it } from 'vitest'; +import { assert, describe, test, it } from '@rstest/core'; import { ModuleFederation } from '../src/core'; import { ModuleFederationRuntimePlugin } from '../src/type/plugin'; import { mockStaticServer, removeScriptTags } from './mock/utils'; diff --git a/packages/runtime-core/__tests__/instance.spec.ts b/packages/runtime-core/__tests__/instance.spec.ts index 6b6ea691888..9ccaf33bf56 100644 --- a/packages/runtime-core/__tests__/instance.spec.ts +++ b/packages/runtime-core/__tests__/instance.spec.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, vi } from 'vitest'; +import { describe, it, expect, rs } from '@rstest/core'; import { ModuleFederation, Module } from '../src/index'; import type { ModuleFederationRuntimePlugin } from '../src/type/plugin'; @@ -14,7 +14,7 @@ describe('ModuleFederation', () => { it('deduplicates concurrent remote module init', async () => { let beforeInitContainerCalls = 0; let initContainerCalls = 0; - const initSpy = vi.fn( + const initSpy = rs.fn( () => new Promise((resolve) => setTimeout(resolve, 10)), ); @@ -51,7 +51,7 @@ describe('ModuleFederation', () => { module.remoteEntryExports = { init: initSpy, - get: vi.fn(), + get: rs.fn(), } as any; const firstInit = module.init('first'); diff --git a/packages/runtime-core/__tests__/is-static-resources-equal.spec.ts b/packages/runtime-core/__tests__/is-static-resources-equal.spec.ts index 9c0da61c6aa..9a507d0481a 100644 --- a/packages/runtime-core/__tests__/is-static-resources-equal.spec.ts +++ b/packages/runtime-core/__tests__/is-static-resources-equal.spec.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from 'vitest'; +import { describe, it, expect } from '@rstest/core'; import { isStaticResourcesEqual } from '../src/utils/tool'; describe('isStaticResourcesEqual', () => { it('verify resources when URL does not specify protocol', () => { diff --git a/packages/runtime-core/__tests__/load-remote-diagnostics.spec.ts b/packages/runtime-core/__tests__/load-remote-diagnostics.spec.ts index 820f0d08d9e..d450486aec7 100644 --- a/packages/runtime-core/__tests__/load-remote-diagnostics.spec.ts +++ b/packages/runtime-core/__tests__/load-remote-diagnostics.spec.ts @@ -1,4 +1,4 @@ -import { beforeEach, describe, expect, it } from 'vitest'; +import { beforeEach, describe, expect, it } from '@rstest/core'; import { RUNTIME_014 } from '@module-federation/error-codes'; import { ModuleFederation } from '../src/core'; import { resetFederationGlobalInfo } from '../src/global'; diff --git a/packages/runtime-core/__tests__/load.spec.ts b/packages/runtime-core/__tests__/load.spec.ts index 39435ab5a5e..f2ca8a439ba 100644 --- a/packages/runtime-core/__tests__/load.spec.ts +++ b/packages/runtime-core/__tests__/load.spec.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { describe, it, expect, rs, beforeEach, afterEach } from '@rstest/core'; import { getRemoteEntry, getRemoteInfo } from '../src/utils/load'; import { ModuleFederation } from '../src/core'; import { resetFederationGlobalInfo } from '../src/global'; diff --git a/packages/runtime-core/__tests__/logger.spec.ts b/packages/runtime-core/__tests__/logger.spec.ts index 6e7706668e1..44c6b2b00fc 100644 --- a/packages/runtime-core/__tests__/logger.spec.ts +++ b/packages/runtime-core/__tests__/logger.spec.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; +import { describe, it, expect, rs, beforeEach, afterEach } from '@rstest/core'; import { error, warn, assert, logger } from '../src/utils/logger'; const LOG_CATEGORY = '[ Federation Runtime ]'; @@ -89,7 +89,7 @@ describe('logger', () => { beforeEach(() => { originalWarn = logger.warn; - logger.warn = vi.fn(); + logger.warn = rs.fn(); }); afterEach(() => { diff --git a/packages/runtime-core/__tests__/mock/utils.ts b/packages/runtime-core/__tests__/mock/utils.ts index 7cc926bfd96..42f2c55be52 100644 --- a/packages/runtime-core/__tests__/mock/utils.ts +++ b/packages/runtime-core/__tests__/mock/utils.ts @@ -1,5 +1,4 @@ -import createFetchMock from 'vitest-fetch-mock'; -import { vi } from 'vitest'; +import createFetchMock from 'rstest-fetch-mock'; import path from 'path'; import fs from 'fs'; @@ -13,7 +12,7 @@ function isAbsolute(url: string) { return false; } -const fetchMocker = createFetchMock(vi); +const fetchMocker = createFetchMock(); // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function mockStaticServer({ diff --git a/packages/runtime-core/__tests__/preload-assets.spec.ts b/packages/runtime-core/__tests__/preload-assets.spec.ts new file mode 100644 index 00000000000..7a3ffeb6a8e --- /dev/null +++ b/packages/runtime-core/__tests__/preload-assets.spec.ts @@ -0,0 +1,328 @@ +import type { ModuleInfo } from '@module-federation/sdk'; +import { describe, it, rs } from '@rstest/core'; +import { ModuleFederation } from '../src/core'; +import type { RemoteInfo } from '../src/type'; +import type { + ResourceLoadContext, + ResourceLoadInitiator, +} from '../src/type/preload'; +import type { ModuleFederationRuntimePlugin } from '../src/type/plugin'; +import { preloadAssets } from '../src/utils/preload'; + +type ResourceCall = { + url: string; + attrs: Record; + remoteInfo: RemoteInfo; + resourceContext?: ResourceLoadContext; +}; + +type ResourceCalls = { + links: ResourceCall[]; + scripts: ResourceCall[]; +}; + +function createResourceCalls(): ResourceCalls { + return { links: [], scripts: [] }; +} + +function completeLoadWhenHandlerIsAttached(element: HTMLElement): void { + let onload: GlobalEventHandlers['onload'] | null = null; + Object.defineProperty(element, 'onload', { + configurable: true, + get() { + return onload; + }, + set(handler: GlobalEventHandlers['onload'] | null) { + onload = handler; + if (handler) { + queueMicrotask(() => handler.call(element, new Event('load'))); + } + }, + }); +} + +function applyAttrs( + element: HTMLElement, + attrs: Record, +): void { + Object.entries(attrs).forEach(([name, value]) => { + element.setAttribute(name, String(value)); + }); +} + +function createResourceCapturePlugin( + calls: ResourceCalls, +): ModuleFederationRuntimePlugin { + return { + name: 'capture-preload-resources', + beforeInit(args) { + args.options.inBrowser = true; + return args; + }, + createLink({ url, attrs = {}, remoteInfo, resourceContext }) { + calls.links.push({ url, attrs, remoteInfo, resourceContext }); + const link = document.createElement('link'); + link.href = url; + applyAttrs(link, attrs); + completeLoadWhenHandlerIsAttached(link); + return link; + }, + createScript({ url, attrs = {}, remoteInfo, resourceContext }) { + calls.scripts.push({ url, attrs, remoteInfo, resourceContext }); + const script = document.createElement('script'); + script.src = url; + applyAttrs(script, attrs); + completeLoadWhenHandlerIsAttached(script); + return script; + }, + }; +} + +function createHost(calls: ResourceCalls): ModuleFederation { + return new ModuleFederation({ + name: 'preload-assets-host', + plugins: [createResourceCapturePlugin(calls)], + }); +} + +function createRemoteInfo(type: RemoteInfo['type']): RemoteInfo { + return { + name: 'preload-assets-remote', + entry: 'https://remote.test/remoteEntry.js', + type, + entryGlobalName: 'preload_assets_remote', + shareScope: 'default', + }; +} + +async function runPreload({ + type, + cssAssets = [], + jsAssetsWithoutEntry = [], + useLinkPreload = false, + initiator = 'loadRemote', +}: { + type: RemoteInfo['type']; + cssAssets?: string[]; + jsAssetsWithoutEntry?: string[]; + useLinkPreload?: boolean; + initiator?: ResourceLoadInitiator; +}): Promise { + const calls = createResourceCalls(); + const host = createHost(calls); + + await preloadAssets( + createRemoteInfo(type), + host, + { + cssAssets, + jsAssetsWithoutEntry, + entryAssets: [], + }, + useLinkPreload, + { + initiator, + id: 'preload-assets-remote/Expose', + }, + ); + + return calls; +} + +describe('preloadAssets', () => { + it.each(['module', 'esm'] as const)( + 'preloads %s chunks without executing them during loadRemote', + async (type) => { + const moduleUrl = 'https://remote.test/expose.js'; + const calls = await runPreload({ + type, + jsAssetsWithoutEntry: [moduleUrl], + }); + + expect(calls.scripts).toHaveLength(0); + expect(calls.links).toHaveLength(1); + expect(calls.links[0]).toMatchObject({ + url: moduleUrl, + attrs: { + rel: 'modulepreload', + fetchpriority: 'high', + }, + remoteInfo: { + name: 'preload-assets-remote', + type, + }, + resourceContext: { + initiator: 'loadRemote', + id: 'preload-assets-remote/Expose', + resourceType: 'js', + url: moduleUrl, + }, + }); + }, + ); + + it('keeps module chunks non-executing through loadRemote initialization', async () => { + const remoteName = 'preload-assets-integration-remote'; + const moduleUrl = 'https://remote.test/expose.js'; + const calls = createResourceCalls(); + const lifecycle: string[] = []; + const remoteSnapshot: ModuleInfo = { + version: '1.0.0', + buildVersion: '', + remoteEntry: 'https://remote.test/remoteEntry.js', + remoteEntryType: 'module', + remoteTypes: '', + remoteTypesZip: '', + globalName: remoteName, + publicPath: 'https://remote.test/', + remotesInfo: {}, + shared: [], + modules: [], + }; + + const host = new ModuleFederation({ + name: 'preload-assets-integration-host', + remotes: [ + { + name: remoteName, + entry: 'https://remote.test/mf-manifest.json', + }, + ], + plugins: [ + createResourceCapturePlugin(calls), + { + name: 'capture-container-initialization', + loadEntry() { + return { + init() { + lifecycle.push('init'); + }, + get() { + lifecycle.push('get'); + return () => Promise.resolve('loaded'); + }, + }; + }, + }, + ], + }); + + rs.spyOn(host.snapshotHandler, 'loadRemoteSnapshotInfo').mockResolvedValue({ + remoteSnapshot, + globalSnapshot: {}, + }); + rs.spyOn( + host.remoteHandler.hooks.lifecycle.generatePreloadAssets, + 'emit', + ).mockResolvedValue({ + cssAssets: [], + jsAssetsWithoutEntry: [moduleUrl], + entryAssets: [], + }); + + await expect(host.loadRemote(`${remoteName}/Expose`)).resolves.toBe( + 'loaded', + ); + + expect(lifecycle).toEqual(['init', 'get']); + expect(calls.scripts).toHaveLength(0); + expect(calls.links).toHaveLength(1); + expect(calls.links[0]).toMatchObject({ + url: moduleUrl, + attrs: { + rel: 'modulepreload', + fetchpriority: 'high', + }, + remoteInfo: { + name: remoteName, + type: 'module', + }, + resourceContext: { + initiator: 'loadRemote', + id: `${remoteName}/Expose`, + resourceType: 'js', + url: moduleUrl, + }, + }); + }); + + it('keeps executing classic chunks during loadRemote', async () => { + const scriptUrl = 'https://remote.test/expose.js'; + const calls = await runPreload({ + type: 'global', + jsAssetsWithoutEntry: [scriptUrl], + }); + + expect(calls.links).toHaveLength(0); + expect(calls.scripts).toHaveLength(1); + expect(calls.scripts[0]).toMatchObject({ + url: scriptUrl, + attrs: { + fetchpriority: 'high', + type: 'text/javascript', + }, + resourceContext: { + initiator: 'loadRemote', + id: 'preload-assets-remote/Expose', + resourceType: 'js', + url: scriptUrl, + }, + }); + }); + + it('keeps applying stylesheets during loadRemote', async () => { + const stylesheetUrl = 'https://remote.test/expose.css'; + const calls = await runPreload({ + type: 'module', + cssAssets: [stylesheetUrl], + }); + + expect(calls.scripts).toHaveLength(0); + expect(calls.links).toHaveLength(1); + expect(calls.links[0]).toMatchObject({ + url: stylesheetUrl, + attrs: { + rel: 'stylesheet', + type: 'text/css', + }, + resourceContext: { + initiator: 'loadRemote', + id: 'preload-assets-remote/Expose', + resourceType: 'css', + url: stylesheetUrl, + }, + }); + + const attachedStylesheet = Array.from( + document.head.querySelectorAll('link'), + ).find((link) => link.href === stylesheetUrl); + expect(attachedStylesheet).toBeDefined(); + attachedStylesheet?.remove(); + }); + + it('keeps explicit preloadRemote chunks as preload links', async () => { + const scriptUrl = 'https://remote.test/expose.js'; + const calls = await runPreload({ + type: 'module', + jsAssetsWithoutEntry: [scriptUrl], + useLinkPreload: true, + initiator: 'preloadRemote', + }); + + expect(calls.scripts).toHaveLength(0); + expect(calls.links).toHaveLength(1); + expect(calls.links[0]).toMatchObject({ + url: scriptUrl, + attrs: { + rel: 'preload', + as: 'script', + }, + resourceContext: { + initiator: 'preloadRemote', + id: 'preload-assets-remote/Expose', + resourceType: 'js', + url: scriptUrl, + }, + }); + }); +}); diff --git a/packages/runtime-core/__tests__/production-examples-verification.spec.ts b/packages/runtime-core/__tests__/production-examples-verification.spec.ts index 5c188427dd7..22ea61c742c 100644 --- a/packages/runtime-core/__tests__/production-examples-verification.spec.ts +++ b/packages/runtime-core/__tests__/production-examples-verification.spec.ts @@ -1,4 +1,4 @@ -import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'; +import { describe, it, expect, beforeEach, rs, afterEach } from '@rstest/core'; import { ModuleFederation } from '../src/core'; import type { ModuleFederationRuntimePlugin } from '../src/type/plugin'; import { mockStaticServer, removeScriptTags } from './mock/utils'; @@ -41,11 +41,11 @@ describe('Production-Ready Examples Verification', () => { beforeEach(() => { removeScriptTags(); resetFederationGlobalInfo(); - vi.clearAllMocks(); + rs.clearAllMocks(); }); afterEach(() => { - vi.restoreAllMocks(); + rs.restoreAllMocks(); }); describe('Enhanced Offline Fallback Plugin (building-custom-retry-plugin.mdx)', () => { @@ -544,7 +544,7 @@ describe('Production-Ready Examples Verification', () => { // Mock fetch for backup manifest const originalFetch = global.fetch; - global.fetch = vi.fn().mockResolvedValue({ + global.fetch = rs.fn().mockResolvedValue({ ok: true, json: () => Promise.resolve({ @@ -663,7 +663,7 @@ describe('Production-Ready Examples Verification', () => { // Test the fallback error component structure const mockErrorInfo = { error: { message: 'Test error message' }, - resetErrorBoundary: vi.fn(), + resetErrorBoundary: rs.fn(), }; const result = FallbackErrorComp(mockErrorInfo); diff --git a/packages/runtime-core/__tests__/register-remotes.spec.ts b/packages/runtime-core/__tests__/register-remotes.spec.ts index 5a216943fde..c7789536191 100644 --- a/packages/runtime-core/__tests__/register-remotes.spec.ts +++ b/packages/runtime-core/__tests__/register-remotes.spec.ts @@ -1,4 +1,4 @@ -import { assert, describe, it, expect, vi } from 'vitest'; +import { assert, describe, it, expect, rs } from '@rstest/core'; import { ModuleFederation } from '../src/index'; describe('ModuleFederation', () => { @@ -155,7 +155,7 @@ describe('ModuleFederation', () => { exposes: [], }, ]; - const manifestFetch = vi.fn((url: string) => { + const manifestFetch = rs.fn((url: string) => { if (url === manifestUrl) { return Promise.resolve( new Response( diff --git a/packages/runtime-core/__tests__/semver.spec.ts b/packages/runtime-core/__tests__/semver.spec.ts index 8bd41e475df..a43c8ec1209 100644 --- a/packages/runtime-core/__tests__/semver.spec.ts +++ b/packages/runtime-core/__tests__/semver.spec.ts @@ -1,5 +1,5 @@ // Test cases for semver ranges taken from https://devhints.io/semver -import { describe, expect, test } from 'vitest'; +import { describe, expect, test } from '@rstest/core'; import { satisfy } from '../src/utils/semver'; const version = '1.2.3'; diff --git a/packages/runtime-core/__tests__/shared-diagnostics.spec.ts b/packages/runtime-core/__tests__/shared-diagnostics.spec.ts index c6a6088086c..c1309d8f72b 100644 --- a/packages/runtime-core/__tests__/shared-diagnostics.spec.ts +++ b/packages/runtime-core/__tests__/shared-diagnostics.spec.ts @@ -1,4 +1,4 @@ -import { beforeEach, describe, expect, it } from 'vitest'; +import { beforeEach, describe, expect, it } from '@rstest/core'; import { RUNTIME_005 } from '@module-federation/error-codes'; import { ModuleFederation } from '../src/core'; import { resetFederationGlobalInfo } from '../src/global'; diff --git a/packages/runtime-core/__tests__/snapshot.spec.ts b/packages/runtime-core/__tests__/snapshot.spec.ts index ef2bfb04496..08862ebabf6 100644 --- a/packages/runtime-core/__tests__/snapshot.spec.ts +++ b/packages/runtime-core/__tests__/snapshot.spec.ts @@ -1,4 +1,4 @@ -import { assert, describe, it } from 'vitest'; +import { assert, describe, it } from '@rstest/core'; import { ModuleFederation } from '../src'; import { getGlobalSnapshot, resetFederationGlobalInfo } from '../src/global'; diff --git a/packages/runtime-core/jest.config.ts b/packages/runtime-core/jest.config.ts deleted file mode 100644 index 68edd54f0a7..00000000000 --- a/packages/runtime-core/jest.config.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* eslint-disable */ -import { readFileSync } from 'fs'; - -// Reading the SWC compilation config and remove the "exclude" -// for the test files to be compiled by SWC -const { exclude: _, ...swcJestConfig } = JSON.parse( - readFileSync(`${__dirname}/.swcrc`, 'utf-8'), -); - -// disable .swcrc look-up by SWC core because we're passing in swcJestConfig ourselves. -// If we do not disable this, SWC Core will read .swcrc and won't transform our test files due to "exclude" -if (swcJestConfig.swcrc === undefined) { - swcJestConfig.swcrc = false; -} - -// Uncomment if using global setup/teardown files being transformed via swc -// https://nx.dev/packages/jest/documents/overview#global-setup/teardown-with-nx-libraries -// jest needs EsModule Interop to find the default exported setup/teardown functions -// swcJestConfig.module.noInterop = false; - -export default { - displayName: 'runtime', - preset: '../../jest.preset.js', - transform: { - '^.+\\.[tj]s$': ['@swc/jest', swcJestConfig], - }, - moduleFileExtensions: ['ts', 'js', 'html'], - testEnvironment: 'node', - coverageDirectory: '../../coverage/packages/runtime', -}; diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index 05b5a901e40..9d37fe23b86 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/runtime-core", - "version": "2.6.0", + "version": "2.8.0", "type": "module", "author": "zhouxiao ", "main": "./dist/index.cjs", @@ -60,6 +60,6 @@ "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\" \"package.json\"", "build-debug": "RUNTIME_CORE_TSDOWN_MODE=debug tsdown --config tsdown.config.ts", "pre-release": "pnpm run test && pnpm run build", - "test": "vitest run -u -c vitest.config.ts" + "test": "rstest -u" } } diff --git a/packages/runtime-core/rstest.config.ts b/packages/runtime-core/rstest.config.ts new file mode 100644 index 00000000000..b4b6c5f02a2 --- /dev/null +++ b/packages/runtime-core/rstest.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from '@rstest/core'; +import path from 'path'; + +export default defineConfig({ + source: { + define: { + __DEV__: true, + __TEST__: true, + __BROWSER__: false, + __VERSION__: '"unknown"', + }, + }, + testEnvironment: 'jsdom', + include: [path.resolve(__dirname, '__tests__/*.spec.ts')], + globals: true, + setupFiles: [path.resolve(__dirname, './__tests__/setup.ts')], + testTimeout: 10000, +}); diff --git a/packages/runtime-core/src/core.ts b/packages/runtime-core/src/core.ts index df09129a9a0..7887eec0832 100644 --- a/packages/runtime-core/src/core.ts +++ b/packages/runtime-core/src/core.ts @@ -26,7 +26,7 @@ import { RUNTIME_010, runtimeDescMap, } from '@module-federation/error-codes'; -import { Module, type RemoteModuleFactory } from './module'; +import type { Module, RemoteModuleFactory } from './module'; import { AsyncHook, AsyncWaterfallHook, @@ -36,21 +36,33 @@ import { } from './utils/hooks'; import { generatePreloadAssetsPlugin } from './plugins/generate-preload-assets'; import { snapshotPlugin } from './plugins/snapshot'; -import { getRemoteInfo } from './utils/load'; import { DEFAULT_SCOPE } from './constant'; import { SnapshotHandler } from './plugins/snapshot/SnapshotHandler'; +import { DisabledSnapshotHandler } from './plugins/snapshot/disabled'; import { SharedHandler } from './shared'; +import { DisabledSharedHandler } from './shared/disabled'; import { RemoteHandler } from './remote'; +import { DisabledRemoteHandler } from './remote/disabled'; import { formatShareConfigs } from './utils/share'; // Declare the global constant that will be defined by DefinePlugin // Default to true if not defined (e.g., when runtime-core is used outside of webpack) // so that snapshot functionality is included by default. declare const FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN: boolean; +declare const FEDERATION_OPTIMIZE_NO_REMOTE: boolean; +declare const FEDERATION_OPTIMIZE_NO_SHARED: boolean; const USE_SNAPSHOT = typeof FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === 'boolean' ? !FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN : true; // Default to true (use snapshot) when not explicitly defined +const USE_REMOTE = + typeof FEDERATION_OPTIMIZE_NO_REMOTE === 'boolean' + ? !FEDERATION_OPTIMIZE_NO_REMOTE + : true; +const USE_SHARED = + typeof FEDERATION_OPTIMIZE_NO_SHARED === 'boolean' + ? !FEDERATION_OPTIMIZE_NO_SHARED + : true; export class ModuleFederation { options: Options; @@ -284,9 +296,10 @@ export class ModuleFederation { moduleInfo?: GlobalModuleInfo[string]; constructor(userOptions: UserOptions) { - const plugins = USE_SNAPSHOT - ? [snapshotPlugin(), generatePreloadAssetsPlugin()] - : []; + const plugins = + USE_REMOTE && USE_SNAPSHOT + ? [snapshotPlugin(), generatePreloadAssetsPlugin()] + : []; // TODO: Validate the details of the options // Initialize options with default values const defaultOptions: Options = { @@ -300,9 +313,15 @@ export class ModuleFederation { this.name = userOptions.name; this.options = defaultOptions; - this.snapshotHandler = new SnapshotHandler(this); - this.sharedHandler = new SharedHandler(this); - this.remoteHandler = new RemoteHandler(this); + this.snapshotHandler = ( + USE_REMOTE ? new SnapshotHandler(this) : new DisabledSnapshotHandler() + ) as SnapshotHandler; + this.sharedHandler = ( + USE_SHARED ? new SharedHandler(this) : new DisabledSharedHandler() + ) as SharedHandler; + this.remoteHandler = ( + USE_REMOTE ? new RemoteHandler(this) : new DisabledRemoteHandler() + ) as RemoteHandler; this.shareScopeMap = this.sharedHandler.shareScopeMap; this.registerPlugins([ ...defaultOptions.plugins, @@ -364,13 +383,7 @@ export class ModuleFederation { url: string, container: RemoteEntryExports, ): Module { - const remoteInfo = getRemoteInfo({ name, entry: url }); - const module = new Module({ host: this, remoteInfo }); - - module.remoteEntryExports = container; - this.moduleCache.set(name, module); - - return module; + return this.remoteHandler.initRawContainer(name, url, container); } // eslint-disable-next-line max-lines-per-function @@ -396,10 +409,9 @@ export class ModuleFederation { } formatOptions(globalOptions: Options, userOptions: UserOptions): Options { - const { allShareInfos: shared } = formatShareConfigs( - globalOptions, - userOptions, - ); + const shared = USE_SHARED + ? formatShareConfigs(globalOptions, userOptions).allShareInfos + : {}; const { userOptions: userOptionsRes, options: globalOptionsRes } = this.hooks.lifecycle.beforeInit.emit({ origin: this, diff --git a/packages/runtime-core/src/index.ts b/packages/runtime-core/src/index.ts index 5efa2c6fb47..e561a0abd55 100644 --- a/packages/runtime-core/src/index.ts +++ b/packages/runtime-core/src/index.ts @@ -1,6 +1,16 @@ import helpersDefault, { type IGlobalUtils, type IShareUtils } from './helpers'; +import { Module as RemoteModule } from './module'; +import { UnavailableRemoteModule } from './remote/disabled'; + +declare const FEDERATION_OPTIMIZE_NO_REMOTE: boolean; const helpers = helpersDefault; +const Module = ( + typeof FEDERATION_OPTIMIZE_NO_REMOTE === 'boolean' && + FEDERATION_OPTIMIZE_NO_REMOTE + ? UnavailableRemoteModule + : RemoteModule +) as typeof RemoteModule; export { ModuleFederation } from './core'; export { @@ -27,7 +37,7 @@ export { } from './utils'; export { getRegisteredShare } from '../src/utils/share'; export { loadScript, loadScriptNode } from '@module-federation/sdk'; -export { Module } from './module'; +export { Module }; export * as types from './type'; export { helpers }; export { satisfy } from '../src/utils/semver'; diff --git a/packages/runtime-core/src/plugins/snapshot/disabled.ts b/packages/runtime-core/src/plugins/snapshot/disabled.ts new file mode 100644 index 00000000000..87c2748fd25 --- /dev/null +++ b/packages/runtime-core/src/plugins/snapshot/disabled.ts @@ -0,0 +1,5 @@ +import { PluginSystem } from '../../utils/hooks'; + +export class DisabledSnapshotHandler { + hooks = new PluginSystem({}); +} diff --git a/packages/runtime-core/src/remote/disabled.ts b/packages/runtime-core/src/remote/disabled.ts new file mode 100644 index 00000000000..73d19b776d8 --- /dev/null +++ b/packages/runtime-core/src/remote/disabled.ts @@ -0,0 +1,38 @@ +import { PluginSystem } from '../utils/hooks'; + +const REMOTE_DISABLED_MESSAGE = + 'Remote loading is disabled by experiments.optimization.disableRemote.'; + +export class UnavailableRemoteModule { + constructor() { + throw new Error(REMOTE_DISABLED_MESSAGE); + } +} + +export class DisabledRemoteHandler { + hooks = new PluginSystem({}); + + formatAndRegisterRemote() { + return []; + } + + loadRemote(): never { + throw new Error(REMOTE_DISABLED_MESSAGE); + } + + preloadRemote(): never { + throw new Error(REMOTE_DISABLED_MESSAGE); + } + + registerRemotes(): never { + throw new Error(REMOTE_DISABLED_MESSAGE); + } + + getRemoteModuleAndOptions(): never { + throw new Error(REMOTE_DISABLED_MESSAGE); + } + + initRawContainer(): never { + throw new Error(REMOTE_DISABLED_MESSAGE); + } +} diff --git a/packages/runtime-core/src/remote/index.ts b/packages/runtime-core/src/remote/index.ts index 1704e41d5f7..3ce06056593 100644 --- a/packages/runtime-core/src/remote/index.ts +++ b/packages/runtime-core/src/remote/index.ts @@ -509,6 +509,21 @@ export class RemoteHandler { }); } + initRawContainer( + name: string, + url: string, + container: RemoteEntryExports, + ): Module { + const { host } = this; + const remoteInfo = getRemoteInfo({ name, entry: url }); + const module = new Module({ host, remoteInfo }); + + module.remoteEntryExports = container; + host.moduleCache.set(name, module); + + return module; + } + async getRemoteModuleAndOptions(options: { id: string }): Promise<{ module: Module; moduleOptions: ModuleOptions; diff --git a/packages/runtime-core/src/shared/disabled.ts b/packages/runtime-core/src/shared/disabled.ts new file mode 100644 index 00000000000..fb775abd056 --- /dev/null +++ b/packages/runtime-core/src/shared/disabled.ts @@ -0,0 +1,40 @@ +import type { LoadRemoteMatch } from '../remote'; +import type { ShareScopeMap } from '../type'; +import { AsyncWaterfallHook, PluginSystem } from '../utils/hooks'; + +export class DisabledSharedHandler { + shareScopeMap: ShareScopeMap = {}; + hooks = new PluginSystem({ + afterResolve: new AsyncWaterfallHook('afterResolve'), + }); + + registerShared() { + return { + newShareInfos: {}, + allShareInfos: {}, + }; + } + + loadShare(): never { + throw new Error( + 'Shared dependency loading is disabled by experiments.optimization.disableShared.', + ); + } + + loadShareSync(): never { + throw new Error( + 'Shared dependency loading is disabled by experiments.optimization.disableShared.', + ); + } + + initializeSharing(): [] { + return []; + } + + initShareScopeMap( + scopeName: string, + shareScope: ShareScopeMap[string], + ): void { + this.shareScopeMap[scopeName] = shareScope; + } +} diff --git a/packages/runtime-core/src/shared/index.ts b/packages/runtime-core/src/shared/index.ts index 07ca4d05942..81a01847e41 100644 --- a/packages/runtime-core/src/shared/index.ts +++ b/packages/runtime-core/src/shared/index.ts @@ -42,7 +42,7 @@ import { warn, } from '../utils'; import { DEFAULT_SCOPE } from '../constant'; -import { LoadRemoteMatch } from '../remote'; +import type { LoadRemoteMatch } from '../remote'; import { createRemoteEntryInitOptions } from '../module'; export class SharedHandler { diff --git a/packages/runtime-core/src/type/plugin.ts b/packages/runtime-core/src/type/plugin.ts index c25a74ae30f..743ab29a782 100644 --- a/packages/runtime-core/src/type/plugin.ts +++ b/packages/runtime-core/src/type/plugin.ts @@ -1,8 +1,8 @@ -import { ModuleFederation } from '../core'; -import { Module } from '../module'; -import { SnapshotHandler } from '../plugins/snapshot/SnapshotHandler'; -import { SharedHandler } from '../shared'; -import { RemoteHandler } from '../remote'; +import type { ModuleFederation } from '../core'; +import type { Module } from '../module'; +import type { SnapshotHandler } from '../plugins/snapshot/SnapshotHandler'; +import type { SharedHandler } from '../shared'; +import type { RemoteHandler } from '../remote'; type CoreLifeCycle = ModuleFederation['hooks']['lifecycle']; type CoreLifeCyclePartial = Partial<{ diff --git a/packages/runtime-core/src/utils/load.ts b/packages/runtime-core/src/utils/load.ts index 9452f82736e..7bcc7c3ded6 100644 --- a/packages/runtime-core/src/utils/load.ts +++ b/packages/runtime-core/src/utils/load.ts @@ -24,6 +24,10 @@ import { declare const ENV_TARGET: 'web' | 'node'; const importCallback = '.then(callbacks[0]).catch(callbacks[1])'; +export function isEsmRemoteType(type: RemoteInfo['type']): boolean { + return type === 'esm' || type === 'module'; +} + async function loadEsmEntry({ entry, remoteEntryExports, @@ -200,23 +204,23 @@ async function loadEntryDom({ resourceContext?: ResourceLoadContext; }) { const { entry, entryGlobalName: globalName, name, type } = remoteInfo; - switch (type) { - case 'esm': - case 'module': - return loadEsmEntry({ entry, remoteEntryExports }); - case 'system': - return loadSystemJsEntry({ entry, remoteEntryExports }); - default: - return loadEntryScript({ - entry, - globalName, - name, - remoteInfo, - loaderHook, - getEntryUrl, - resourceContext, - }); + if (isEsmRemoteType(type)) { + return loadEsmEntry({ entry, remoteEntryExports }); + } + + if (type === 'system') { + return loadSystemJsEntry({ entry, remoteEntryExports }); } + + return loadEntryScript({ + entry, + globalName, + name, + remoteInfo, + loaderHook, + getEntryUrl, + resourceContext, + }); } async function loadEntryNode({ diff --git a/packages/runtime-core/src/utils/preload.ts b/packages/runtime-core/src/utils/preload.ts index 9deb9810339..f7be6f117ad 100644 --- a/packages/runtime-core/src/utils/preload.ts +++ b/packages/runtime-core/src/utils/preload.ts @@ -14,7 +14,7 @@ import { import { matchRemote } from './manifest'; import { assert } from './logger'; import { ModuleFederation } from '../core'; -import { getRemoteEntry } from './load'; +import { getRemoteEntry, isEsmRemoteType } from './load'; export function defaultPreloadArgs( preloadConfig: PreloadRemoteArgs | depsPreloadArg, @@ -307,39 +307,37 @@ export function preloadAssets( }); } + let preloadJsAsset = waitForScriptPreload; + let defaultAttrs: Record = { + fetchpriority: 'high', + type: 'text/javascript', + }; + if (useLinkPreload) { - const defaultAttrs = { + preloadJsAsset = waitForLinkPreload; + defaultAttrs = { rel: 'preload', as: 'script', }; - jsAssetsWithoutEntry.forEach((jsUrl) => { - results.push( - waitForLinkPreload({ - host, - remoteInfo, - url: jsUrl, - attrs: defaultAttrs, - context: createResourceContext(baseContext, 'js'), - }), - ); - }); - } else { - const defaultAttrs = { + } else if (isEsmRemoteType(remoteInfo.type)) { + preloadJsAsset = waitForLinkPreload; + defaultAttrs = { + rel: 'modulepreload', fetchpriority: 'high', - type: remoteInfo?.type === 'module' ? 'module' : 'text/javascript', }; - jsAssetsWithoutEntry.forEach((jsUrl) => { - results.push( - waitForScriptPreload({ - host, - remoteInfo, - url: jsUrl, - attrs: defaultAttrs, - context: createResourceContext(baseContext, 'js'), - }), - ); - }); } + + jsAssetsWithoutEntry.forEach((jsUrl) => { + results.push( + preloadJsAsset({ + host, + remoteInfo, + url: jsUrl, + attrs: defaultAttrs, + context: createResourceContext(baseContext, 'js'), + }), + ); + }); } return Promise.all(results); diff --git a/packages/runtime-core/tsconfig.json b/packages/runtime-core/tsconfig.json index ea7082763db..5d454e7ec15 100644 --- a/packages/runtime-core/tsconfig.json +++ b/packages/runtime-core/tsconfig.json @@ -11,7 +11,7 @@ }, "files": [], "include": [], - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "references": [ { "path": "./tsconfig.lib.json" diff --git a/packages/runtime-core/tsconfig.lib.json b/packages/runtime-core/tsconfig.lib.json index a51e17924d1..ac50558a75a 100644 --- a/packages/runtime-core/tsconfig.lib.json +++ b/packages/runtime-core/tsconfig.lib.json @@ -6,5 +6,5 @@ "types": ["node"] }, "include": ["src/**/*.ts", "global.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] } diff --git a/packages/runtime-core/vitest.config.ts b/packages/runtime-core/vitest.config.ts deleted file mode 100644 index 54d13516e7c..00000000000 --- a/packages/runtime-core/vitest.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { defineConfig } from 'vitest/config'; -import tsconfigPaths from 'vite-tsconfig-paths'; -import path from 'path'; -export default defineConfig({ - define: { - __DEV__: true, - __TEST__: true, - __BROWSER__: false, - __VERSION__: '"unknown"', - }, - plugins: [tsconfigPaths()], - test: { - environment: 'jsdom', - include: [path.resolve(__dirname, '__tests__/*.spec.ts')], - globals: true, - setupFiles: [path.resolve(__dirname, './__tests__/setup.ts')], - testTimeout: 10000, - }, -}); diff --git a/packages/runtime-plugins/inject-external-runtime-core-plugin/CHANGELOG.md b/packages/runtime-plugins/inject-external-runtime-core-plugin/CHANGELOG.md index 09194c25e4d..1cab6a39516 100644 --- a/packages/runtime-plugins/inject-external-runtime-core-plugin/CHANGELOG.md +++ b/packages/runtime-plugins/inject-external-runtime-core-plugin/CHANGELOG.md @@ -1,5 +1,17 @@ # @module-federation/inject-external-runtime-core-plugin +## 2.8.0 + +### Patch Changes + +- @module-federation/runtime-tools@2.8.0 + +## 2.7.0 + +### Patch Changes + +- @module-federation/runtime-tools@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/runtime-plugins/inject-external-runtime-core-plugin/package.json b/packages/runtime-plugins/inject-external-runtime-core-plugin/package.json index 4ea9631acc2..0322f861754 100644 --- a/packages/runtime-plugins/inject-external-runtime-core-plugin/package.json +++ b/packages/runtime-plugins/inject-external-runtime-core-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/inject-external-runtime-core-plugin", - "version": "2.6.0", + "version": "2.8.0", "type": "module", "license": "MIT", "description": "A sdk for support module federation", diff --git a/packages/runtime-plugins/inject-external-runtime-core-plugin/tsconfig.json b/packages/runtime-plugins/inject-external-runtime-core-plugin/tsconfig.json index bb69d249599..f27bedf7fc3 100644 --- a/packages/runtime-plugins/inject-external-runtime-core-plugin/tsconfig.json +++ b/packages/runtime-plugins/inject-external-runtime-core-plugin/tsconfig.json @@ -8,7 +8,6 @@ "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, diff --git a/packages/runtime-tools/CHANGELOG.md b/packages/runtime-tools/CHANGELOG.md index 7853c8848fa..869e54657bb 100644 --- a/packages/runtime-tools/CHANGELOG.md +++ b/packages/runtime-tools/CHANGELOG.md @@ -1,5 +1,20 @@ # @module-federation/runtime-tools +## 2.8.0 + +### Patch Changes + +- Updated dependencies [ea490ae] + - @module-federation/webpack-bundler-runtime@2.8.0 + - @module-federation/runtime@2.8.0 + +## 2.7.0 + +### Patch Changes + +- @module-federation/runtime@2.7.0 +- @module-federation/webpack-bundler-runtime@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/runtime-tools/package.json b/packages/runtime-tools/package.json index 454bacb0b2a..885f08b6717 100644 --- a/packages/runtime-tools/package.json +++ b/packages/runtime-tools/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/runtime-tools", - "version": "2.6.0", + "version": "2.8.0", "type": "module", "author": "zhanghang ", "main": "./dist/index.cjs", diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index d3d7665632f..0794b197dfb 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,24 @@ # @module-federation/runtime +## 2.8.0 + +### Patch Changes + +- Updated dependencies [ea490ae] + - @module-federation/runtime-core@2.8.0 + - @module-federation/sdk@2.8.0 + - @module-federation/error-codes@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/runtime-core@2.7.0 + - @module-federation/error-codes@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/runtime/__tests__/__snapshots__/preload-remote.spec.ts.snap b/packages/runtime/__tests__/__snapshots__/preload-remote.spec.ts.snap index 2d845938dc4..de0f41a46ae 100644 --- a/packages/runtime/__tests__/__snapshots__/preload-remote.spec.ts.snap +++ b/packages/runtime/__tests__/__snapshots__/preload-remote.spec.ts.snap @@ -1,4 +1,4 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html +// Rstest Snapshot v1 exports[`preload-remote inBrowser > 1 preload with default config 1`] = ` { diff --git a/packages/runtime/__tests__/api.spec.ts b/packages/runtime/__tests__/api.spec.ts index e4b9e0dc19d..1ffc969e32b 100644 --- a/packages/runtime/__tests__/api.spec.ts +++ b/packages/runtime/__tests__/api.spec.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from 'vitest'; +import { describe, it, expect } from '@rstest/core'; import { createInstance, getInstance, init } from '../src'; // eslint-disable-next-line max-lines-per-function diff --git a/packages/runtime/__tests__/get-registered-share.spec.ts b/packages/runtime/__tests__/get-registered-share.spec.ts index 6b22c5ab33d..a1a154470af 100644 --- a/packages/runtime/__tests__/get-registered-share.spec.ts +++ b/packages/runtime/__tests__/get-registered-share.spec.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from 'vitest'; +import { describe, it, expect } from '@rstest/core'; import { assert, getRegisteredShare } from '@module-federation/runtime-core'; describe('get expected shared', () => { diff --git a/packages/runtime/__tests__/globa.spec.ts b/packages/runtime/__tests__/globa.spec.ts index 32c8ebbc086..ba58c756ad7 100644 --- a/packages/runtime/__tests__/globa.spec.ts +++ b/packages/runtime/__tests__/globa.spec.ts @@ -1,9 +1,9 @@ -import { describe, it, expect, vi } from 'vitest'; +import { describe, it, expect, rs } from '@rstest/core'; import { init } from '../src/index'; describe('global', () => { it('inject mode', () => { - globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = vi.fn() as any; + globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = rs.fn() as any; const injectArgs = { name: '@federation/inject-mode', remotes: [], diff --git a/packages/runtime/__tests__/global.spec.ts b/packages/runtime/__tests__/global.spec.ts index ce1610cb1d7..73f58bcedf4 100644 --- a/packages/runtime/__tests__/global.spec.ts +++ b/packages/runtime/__tests__/global.spec.ts @@ -1,10 +1,15 @@ -import { expectTypeOf, describe, it, vi, expect } from 'vitest'; +import { describe, it, rs, expect } from '@rstest/core'; import { init, loadRemote, loadShare, loadShareSync } from '../src/index'; import { getInfoWithoutType } from '@module-federation/runtime-core'; +type IsAssignable = [Actual] extends [Expected] + ? true + : false; +type ExpectFalse = T; + describe('global', () => { it('inject mode', () => { - globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = vi.fn(); + globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = rs.fn(); const injectArgs = { name: '@federation/inject-mode', remotes: [], @@ -49,28 +54,38 @@ describe('global', () => { describe('global types (generic)', () => { it('loadRemote', async () => { const typedLoadRemote: typeof loadRemote = loadRemote; - expectTypeOf(typedLoadRemote).returns.toMatchTypeOf< - Promise - >(); - expectTypeOf(typedLoadRemote).returns.not.toMatchTypeOf>(); + type LoadRemoteReturn = ReturnType; + const _acceptsStringOrNull: Promise = + null as never as LoadRemoteReturn; + const _rejectsNullOnly: ExpectFalse< + IsAssignable> + > = false; + void _acceptsStringOrNull; + void _rejectsNullOnly; }); it('loadShare', async () => { const typedLoadShare: typeof loadShare = loadShare; - expectTypeOf(typedLoadShare).returns.toMatchTypeOf< - Promise string | undefined)> - >(); - expectTypeOf(typedLoadShare).returns.not.toMatchTypeOf< - Promise undefined)> - >(); + type LoadShareReturn = ReturnType; + const _acceptsStringFactory: Promise string | undefined)> = + null as never as LoadShareReturn; + const _rejectsUndefinedOnlyFactory: ExpectFalse< + IsAssignable undefined)>> + > = false; + void _acceptsStringFactory; + void _rejectsUndefinedOnlyFactory; }); it('loadShareSync', () => { const typedLoadShareSync: typeof loadShareSync = loadShareSync; - expectTypeOf(typedLoadShareSync).returns.toMatchTypeOf< - () => string | never - >(); - expectTypeOf(typedLoadShareSync).returns.not.toMatchTypeOf<() => never>(); + type LoadShareSyncReturn = ReturnType; + const _acceptsStringFactory: () => string | never = + null as never as LoadShareSyncReturn; + const _rejectsNeverOnlyFactory: ExpectFalse< + IsAssignable never> + > = false; + void _acceptsStringFactory; + void _rejectsNeverOnlyFactory; }); }); }); diff --git a/packages/runtime/__tests__/hooks.spec.ts b/packages/runtime/__tests__/hooks.spec.ts index 076bbc61940..8033f33563d 100644 --- a/packages/runtime/__tests__/hooks.spec.ts +++ b/packages/runtime/__tests__/hooks.spec.ts @@ -1,4 +1,4 @@ -import { assert, describe, test, it } from 'vitest'; +import { assert, describe, test, it } from '@rstest/core'; import { ModuleFederation, addGlobalSnapshot, diff --git a/packages/runtime/__tests__/instance.spec.ts b/packages/runtime/__tests__/instance.spec.ts index 7867f40e15b..2e9bd5d2921 100644 --- a/packages/runtime/__tests__/instance.spec.ts +++ b/packages/runtime/__tests__/instance.spec.ts @@ -1,4 +1,4 @@ -import { assert, describe, test, it } from 'vitest'; +import { assert, describe, test, it } from '@rstest/core'; import { ModuleFederation } from '../src/index'; describe('ModuleFederation', () => { diff --git a/packages/runtime/__tests__/is-static-resources-equal.spec.ts b/packages/runtime/__tests__/is-static-resources-equal.spec.ts index a3691577c2d..1392b5c3486 100644 --- a/packages/runtime/__tests__/is-static-resources-equal.spec.ts +++ b/packages/runtime/__tests__/is-static-resources-equal.spec.ts @@ -1,4 +1,4 @@ -import { describe, it, expect } from 'vitest'; +import { describe, it, expect } from '@rstest/core'; import { isStaticResourcesEqual } from '@module-federation/runtime-core'; describe('isStaticResourcesEqual', () => { it('verify resources when URL does not specify protocol', () => { diff --git a/packages/runtime/__tests__/load-remote.spec.ts b/packages/runtime/__tests__/load-remote.spec.ts index 6801cd1dc64..92006a990a8 100644 --- a/packages/runtime/__tests__/load-remote.spec.ts +++ b/packages/runtime/__tests__/load-remote.spec.ts @@ -1,5 +1,5 @@ import 'whatwg-fetch'; -import { assert, describe, it } from 'vitest'; +import { assert, describe, it } from '@rstest/core'; import { ModuleFederation, init } from '../src/index'; import { mockRemoteSnapshot } from './mock/utils'; import { matchRemoteWithNameAndExpose } from '@module-federation/runtime-core'; diff --git a/packages/runtime/__tests__/mock/utils.ts b/packages/runtime/__tests__/mock/utils.ts index 7cc926bfd96..42f2c55be52 100644 --- a/packages/runtime/__tests__/mock/utils.ts +++ b/packages/runtime/__tests__/mock/utils.ts @@ -1,5 +1,4 @@ -import createFetchMock from 'vitest-fetch-mock'; -import { vi } from 'vitest'; +import createFetchMock from 'rstest-fetch-mock'; import path from 'path'; import fs from 'fs'; @@ -13,7 +12,7 @@ function isAbsolute(url: string) { return false; } -const fetchMocker = createFetchMock(vi); +const fetchMocker = createFetchMock(); // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function mockStaticServer({ diff --git a/packages/runtime/__tests__/preload-remote.spec.ts b/packages/runtime/__tests__/preload-remote.spec.ts index d01c1e44fc6..add9f38e56a 100644 --- a/packages/runtime/__tests__/preload-remote.spec.ts +++ b/packages/runtime/__tests__/preload-remote.spec.ts @@ -1,4 +1,4 @@ -import { describe, it } from 'vitest'; +import { describe, it } from '@rstest/core'; import { init } from '../src/index'; import { mockStaticServer } from './mock/utils'; import { Global, addGlobalSnapshot } from '@module-federation/runtime-core'; diff --git a/packages/runtime/__tests__/register-remotes.spec.ts b/packages/runtime/__tests__/register-remotes.spec.ts index 174d914c491..92c3721fedc 100644 --- a/packages/runtime/__tests__/register-remotes.spec.ts +++ b/packages/runtime/__tests__/register-remotes.spec.ts @@ -1,4 +1,4 @@ -import { assert, describe, it, expect } from 'vitest'; +import { assert, describe, it, expect } from '@rstest/core'; import { ModuleFederation } from '../src/index'; describe('ModuleFederation', () => { diff --git a/packages/runtime/__tests__/semver.spec.ts b/packages/runtime/__tests__/semver.spec.ts index fe52928fa11..89798410c3a 100644 --- a/packages/runtime/__tests__/semver.spec.ts +++ b/packages/runtime/__tests__/semver.spec.ts @@ -1,5 +1,5 @@ // Test cases for semver ranges taken from https://devhints.io/semver -import { describe, expect, test } from 'vitest'; +import { describe, expect, test } from '@rstest/core'; import { satisfy } from '@module-federation/runtime-core'; const version = '1.2.3'; diff --git a/packages/runtime/__tests__/shares.spec.ts b/packages/runtime/__tests__/shares.spec.ts index cca49ba2f5a..35dd0bdba2e 100644 --- a/packages/runtime/__tests__/shares.spec.ts +++ b/packages/runtime/__tests__/shares.spec.ts @@ -1,4 +1,4 @@ -import { assert, describe, it } from 'vitest'; +import { assert, describe, it } from '@rstest/core'; import { init } from '../src/index'; import { mergeShareInfo1, diff --git a/packages/runtime/__tests__/snapshot.spec.ts b/packages/runtime/__tests__/snapshot.spec.ts index 8b798022a67..483de877f05 100644 --- a/packages/runtime/__tests__/snapshot.spec.ts +++ b/packages/runtime/__tests__/snapshot.spec.ts @@ -1,4 +1,4 @@ -import { assert, describe, it } from 'vitest'; +import { assert, describe, it } from '@rstest/core'; import { ModuleFederation } from '../src'; import { getGlobalSnapshot, diff --git a/packages/runtime/jest.config.ts b/packages/runtime/jest.config.ts deleted file mode 100644 index 68edd54f0a7..00000000000 --- a/packages/runtime/jest.config.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* eslint-disable */ -import { readFileSync } from 'fs'; - -// Reading the SWC compilation config and remove the "exclude" -// for the test files to be compiled by SWC -const { exclude: _, ...swcJestConfig } = JSON.parse( - readFileSync(`${__dirname}/.swcrc`, 'utf-8'), -); - -// disable .swcrc look-up by SWC core because we're passing in swcJestConfig ourselves. -// If we do not disable this, SWC Core will read .swcrc and won't transform our test files due to "exclude" -if (swcJestConfig.swcrc === undefined) { - swcJestConfig.swcrc = false; -} - -// Uncomment if using global setup/teardown files being transformed via swc -// https://nx.dev/packages/jest/documents/overview#global-setup/teardown-with-nx-libraries -// jest needs EsModule Interop to find the default exported setup/teardown functions -// swcJestConfig.module.noInterop = false; - -export default { - displayName: 'runtime', - preset: '../../jest.preset.js', - transform: { - '^.+\\.[tj]s$': ['@swc/jest', swcJestConfig], - }, - moduleFileExtensions: ['ts', 'js', 'html'], - testEnvironment: 'node', - coverageDirectory: '../../coverage/packages/runtime', -}; diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 5aa4211300d..4920225b84a 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/runtime", - "version": "2.6.0", + "version": "2.8.0", "type": "module", "author": "zhouxiao ", "main": "./dist/index.cjs", @@ -95,6 +95,6 @@ "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\" \"package.json\"", "build-debug": "RUNTIME_TSDOWN_MODE=debug tsdown --config tsdown.config.ts", "pre-release": "pnpm run test && pnpm run build", - "test": "vitest run -u -c vitest.config.ts" + "test": "rstest -u" } } diff --git a/packages/runtime/rstest.config.ts b/packages/runtime/rstest.config.ts new file mode 100644 index 00000000000..b4b6c5f02a2 --- /dev/null +++ b/packages/runtime/rstest.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from '@rstest/core'; +import path from 'path'; + +export default defineConfig({ + source: { + define: { + __DEV__: true, + __TEST__: true, + __BROWSER__: false, + __VERSION__: '"unknown"', + }, + }, + testEnvironment: 'jsdom', + include: [path.resolve(__dirname, '__tests__/*.spec.ts')], + globals: true, + setupFiles: [path.resolve(__dirname, './__tests__/setup.ts')], + testTimeout: 10000, +}); diff --git a/packages/runtime/tsconfig.json b/packages/runtime/tsconfig.json index ea7082763db..5d454e7ec15 100644 --- a/packages/runtime/tsconfig.json +++ b/packages/runtime/tsconfig.json @@ -11,7 +11,7 @@ }, "files": [], "include": [], - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "references": [ { "path": "./tsconfig.lib.json" diff --git a/packages/runtime/tsconfig.lib.json b/packages/runtime/tsconfig.lib.json index a51e17924d1..ac50558a75a 100644 --- a/packages/runtime/tsconfig.lib.json +++ b/packages/runtime/tsconfig.lib.json @@ -6,5 +6,5 @@ "types": ["node"] }, "include": ["src/**/*.ts", "global.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] + "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] } diff --git a/packages/runtime/vitest.config.ts b/packages/runtime/vitest.config.ts deleted file mode 100644 index 304ff043a6f..00000000000 --- a/packages/runtime/vitest.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from 'vitest/config'; -import tsconfigPaths from 'vite-tsconfig-paths'; -//@ts-ignore -import path from 'path'; -export default defineConfig({ - define: { - __DEV__: true, - __TEST__: true, - __BROWSER__: false, - __VERSION__: '"unknown"', - }, - plugins: [tsconfigPaths()], - test: { - environment: 'jsdom', - include: [path.resolve(__dirname, '__tests__/*.spec.ts')], - globals: true, - setupFiles: [path.resolve(__dirname, './__tests__/setup.ts')], - testTimeout: 10000, - }, -}); diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index 33039e30d0b..3e9c1059a71 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -1,5 +1,21 @@ # @module-federation/sdk +## 2.8.0 + +### Patch Changes + +- ea490ae: Allow builds to exclude unused remote consumption and shared capabilities, and automatically omit Webpack container initialization when no exposes are configured. + +## 2.7.0 + +### Minor Changes + +- dcc640b: chore(sdk): drop the `node-fetch` fallback and optional peer dependency. Native `fetch` was already preferred everywhere it exists (Node 18+); the fallback only fired on EOL Node versions, where the loader-hook path was broken anyway. Removes up to ~9MB of optional install weight (`web-streams-polyfill` et al). + +### Patch Changes + +- 9958086: Handle Node.js built-in imports in the Node ESM remote loader. + ## 2.6.0 ## 2.5.1 diff --git a/packages/sdk/jest.config.cjs b/packages/sdk/jest.config.cjs index 2d574a36a71..aa7de73a673 100644 --- a/packages/sdk/jest.config.cjs +++ b/packages/sdk/jest.config.cjs @@ -26,7 +26,6 @@ module.exports = { __BROWSER__: false, __VERSION__: '"unknown"', }, - preset: 'ts-jest', transformIgnorePatterns: [ // Change MODULE_NAME_HERE to your module that isn't being compiled '/node_modules/', diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 5f2cde5a55b..97627c8a696 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/sdk", - "version": "2.6.0", + "version": "2.8.0", "type": "module", "license": "MIT", "description": "A sdk for support module federation", @@ -65,14 +65,6 @@ "@jest/globals": "29.7.0", "webpack": "^5.0.0" }, - "peerDependencies": { - "node-fetch": "^2.7.0 || ^3.3.2" - }, - "peerDependenciesMeta": { - "node-fetch": { - "optional": true - } - }, "scripts": { "build": "tsdown --config tsdown.config.ts", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\" \"package.json\"", diff --git a/packages/sdk/src/node.ts b/packages/sdk/src/node.ts index 78681fa6686..2b059c88d8e 100644 --- a/packages/sdk/src/node.ts +++ b/packages/sdk/src/node.ts @@ -30,12 +30,6 @@ function importNodeModule(name: string): Promise { return promise; } -const loadNodeFetch = async (): Promise => { - const fetchModule = - await importNodeModule('node-fetch'); - return (fetchModule.default || fetchModule) as unknown as typeof fetch; -}; - const lazyLoaderHookFetch = async ( input: RequestInfo | URL, init?: RequestInit, @@ -47,9 +41,7 @@ const lazyLoaderHookFetch = async ( const res = await hook(input, init || {}); if (!res || !(res instanceof Response)) { - const fetchFunction = - typeof fetch === 'undefined' ? await loadNodeFetch() : fetch; - return fetchFunction(input, init || {}); + return fetch(input, init || {}); } return res; @@ -92,7 +84,7 @@ export const createScriptNode = lazyLoaderHookFetch(input, init, loaderHook); } - return typeof fetch === 'undefined' ? loadNodeFetch() : fetch; + return fetch; }; const handleScriptFetch = async (f: typeof fetch, urlObj: URL) => { diff --git a/packages/sdk/src/types/plugins/ModuleFederationPlugin.ts b/packages/sdk/src/types/plugins/ModuleFederationPlugin.ts index ffe50596921..c129a8db928 100644 --- a/packages/sdk/src/types/plugins/ModuleFederationPlugin.ts +++ b/packages/sdk/src/types/plugins/ModuleFederationPlugin.ts @@ -495,6 +495,14 @@ export interface ModuleFederationPluginOptions { * Enable optimization to skip snapshot plugin */ disableSnapshot?: boolean; + /** + * Disable remote loading code in runtime-core. + */ + disableRemote?: boolean; + /** + * Disable shared dependency code in runtime-core. + */ + disableShared?: boolean; /** * Target environment for the build */ diff --git a/packages/sdk/src/utils.ts b/packages/sdk/src/utils.ts index eb49198b819..495f87bbd24 100644 --- a/packages/sdk/src/utils.ts +++ b/packages/sdk/src/utils.ts @@ -177,7 +177,16 @@ const generateShareFilename = (pkgName: string, withExt: boolean): string => { return encodeName(pkgName, '__federation_shared_', withExt); }; -const getResourceUrl = (module: ModuleInfo, sourceUrl: string): string => { +type ResourceUrlInfo = + | { getPublicPath: string } + | { publicPath: string; ssrPublicPath?: string }; + +function getResourceUrl(module: ModuleInfo, sourceUrl: string): string; +function getResourceUrl(module: ResourceUrlInfo, sourceUrl: string): string; +function getResourceUrl( + module: ModuleInfo | ResourceUrlInfo, + sourceUrl: string, +): string { if ('getPublicPath' in module) { let publicPath; @@ -206,7 +215,7 @@ const getResourceUrl = (module: ModuleInfo, sourceUrl: string): string => { ); return ''; } -}; +} // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types const assert = (condition: any, msg: string): asserts condition => { diff --git a/packages/sdk/tsconfig.json b/packages/sdk/tsconfig.json index d5b031b252c..b3d58da6f5f 100644 --- a/packages/sdk/tsconfig.json +++ b/packages/sdk/tsconfig.json @@ -8,7 +8,6 @@ "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, diff --git a/packages/storybook-addon/CHANGELOG.md b/packages/storybook-addon/CHANGELOG.md index 6937c913fd4..7d7f2e8704c 100644 --- a/packages/storybook-addon/CHANGELOG.md +++ b/packages/storybook-addon/CHANGELOG.md @@ -1,5 +1,25 @@ # @module-federation/storybook-addon +## 6.0.16 + +### Patch Changes + +- Updated dependencies [ea490ae] +- Updated dependencies [6ee67dc] +- Updated dependencies [681e5d2] + - @module-federation/enhanced@2.8.0 + - @module-federation/sdk@2.8.0 + +## 6.0.15 + +### Patch Changes + +- 61fe85d: chore(deps): upgrade `@rslib/core` to 0.23.2, `@rsbuild/core` to 2.1.4, and `@rsbuild/plugin-react`/`plugin-vue`/`plugin-sass` to their 2.x latest across dev dependencies. `create-module-federation` templates are updated so newly scaffolded projects pick up the same versions. `@module-federation/modern-js-v3` is realigned to `@modern-js/* 3.5.0` (which uses `@rsbuild/core 2.1.0`) to resolve a `Rspack` type mismatch between the upgraded `@module-federation/rsbuild-plugin` and modern-js's own rsbuild embedding. Peer dependency ranges are untouched. +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/enhanced@2.7.0 + ## 6.0.14 ### Patch Changes diff --git a/packages/storybook-addon/jest.config.cjs b/packages/storybook-addon/jest.config.cjs new file mode 100644 index 00000000000..bb694f71b4d --- /dev/null +++ b/packages/storybook-addon/jest.config.cjs @@ -0,0 +1,34 @@ +/* eslint-disable */ +module.exports = { + displayName: 'storybook-addon', + preset: '../../jest.preset.js', + transform: { + '^.+\\.[tj]sx?$': [ + '@swc/jest', + { + jsc: { + parser: { + syntax: 'typescript', + tsx: true, + }, + transform: { + react: { + runtime: 'automatic', + }, + }, + target: 'es2022', + }, + module: { + type: 'commonjs', + }, + }, + ], + }, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], + coverageDirectory: '../../coverage/packages/storybook-addon', + // https://mswjs.io/docs/migrations/1.x-to-2.x#requestresponsetextencoder-is-not-defined-jest + testEnvironment: 'jest-fixed-jsdom', +}; diff --git a/packages/storybook-addon/jest.config.ts b/packages/storybook-addon/jest.config.ts deleted file mode 100644 index 113a0a86c3e..00000000000 --- a/packages/storybook-addon/jest.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* eslint-disable */ -export default { - displayName: 'storybook-addon', - preset: '../../jest.preset.js', - globals: { - 'ts-jest': { - tsconfig: '/tsconfig.spec.json', - }, - }, - transform: { - '^.+\\.[tj]s$': 'ts-jest', - }, - moduleNameMapper: { - '^(\\.{1,2}/.*)\\.js$': '$1', - }, - moduleFileExtensions: ['ts', 'js', 'html'], - coverageDirectory: '../../coverage/packages/storybook-addon', - // https://mswjs.io/docs/migrations/1.x-to-2.x#requestresponsetextencoder-is-not-defined-jest - testEnvironment: 'jest-fixed-jsdom', -}; diff --git a/packages/storybook-addon/package.json b/packages/storybook-addon/package.json index e11bdbbbd75..de0d32e7f5c 100644 --- a/packages/storybook-addon/package.json +++ b/packages/storybook-addon/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/storybook-addon", - "version": "6.0.14", + "version": "6.0.16", "description": "Storybook addon to consume remote module federated apps/components", "type": "module", "license": "MIT", @@ -53,18 +53,19 @@ "@module-federation/sdk": "workspace:*" }, "devDependencies": { - "@nx/module-federation": ">= 16.0.0", - "jest-fixed-jsdom": "^0.0.9", "@module-federation/utilities": "workspace:*", - "@rsbuild/core": "2.0.0-beta.2", - "@storybook/node-logger": "7.6.20", + "@nx/module-federation": ">= 16.0.0", + "@rsbuild/core": "2.1.4", "@storybook/core": "^8.4.6", + "@storybook/node-logger": "7.6.20", + "jest-fixed-jsdom": "^0.0.9", + "typescript": "7.0.2", "webpack": "5.104.1", "webpack-virtual-modules": "0.6.2" }, "peerDependencies": { "@rsbuild/core": "^1.0.1 || ^2.0.0-0", - "@module-federation/sdk": "^2.6.0", + "@module-federation/sdk": "^2.8.0", "@nx/react": ">= 16.0.0", "@nx/webpack": ">= 16.0.0", "@nx/module-federation": ">= 16.0.0", @@ -109,8 +110,8 @@ "scripts": { "build": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\" && pnpm -C . exec tsdown --config tsdown.config.ts && cp *.md dist", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\"", - "test": "pnpm exec jest --config jest.config.ts --passWithNoTests", - "test:ci": "pnpm exec jest --config jest.config.ts --passWithNoTests --ci --coverage", + "test": "pnpm exec jest --config jest.config.cjs --passWithNoTests", + "test:ci": "pnpm exec jest --config jest.config.cjs --passWithNoTests --ci --coverage", "pre-release": "pnpm run test && pnpm run build" } } diff --git a/packages/storybook-addon/src/utils/with-module-federation-enhanced-rsbuild.spec.ts b/packages/storybook-addon/src/utils/with-module-federation-enhanced-rsbuild.spec.ts index d4cac41b96b..abe5088f2a1 100644 --- a/packages/storybook-addon/src/utils/with-module-federation-enhanced-rsbuild.spec.ts +++ b/packages/storybook-addon/src/utils/with-module-federation-enhanced-rsbuild.spec.ts @@ -1,6 +1,6 @@ import { moduleFederationPlugin } from '@module-federation/sdk'; -class MockModuleFederationPlugin {} +function MockModuleFederationPlugin() {} jest.mock('@module-federation/enhanced/rspack', () => ({ ModuleFederationPlugin: MockModuleFederationPlugin, diff --git a/packages/third-party-dts-extractor/CHANGELOG.md b/packages/third-party-dts-extractor/CHANGELOG.md index 861bab50994..74f67eb93e0 100644 --- a/packages/third-party-dts-extractor/CHANGELOG.md +++ b/packages/third-party-dts-extractor/CHANGELOG.md @@ -1,5 +1,19 @@ # @module-federation/third-party-dts-extractor +## 2.8.0 + +### Patch Changes + +- 6ee67dc: Reduce installed and bundled size by replacing general-purpose cache, path, version, package lookup, scheduling, fetch, and error fallback dependencies with focused built-in utilities. + +## 2.7.0 + +### Patch Changes + +- 2add9ef: chore(third-party-dts-extractor): replace `resolve` with `exsolve` (0 transitive deps, ~100KB smaller) for the single `package.json` lookup. +- a5f123a: chore: replace `find-pkg` with `empathic` (per [e18e replacements](https://e18e.dev/docs/replacements/find-pkg.html)). Removes unused `find-pkg` dependency from `@module-federation/manifest`. +- 8ec950c: Bump runtime dependencies: echarts 6.1.0 (devtools), hono 4.12.26 and @hono/node-server 1.19.13 (treeshake-server), lodash-es 4.18.1 (rspress-plugin), handlebars 4.7.9 (create-module-federation), resolve 1.22.12 (third-party-dts-extractor). + ## 2.6.0 ## 2.5.1 diff --git a/packages/third-party-dts-extractor/package.json b/packages/third-party-dts-extractor/package.json index ba44c2fb09d..51c9cb04402 100644 --- a/packages/third-party-dts-extractor/package.json +++ b/packages/third-party-dts-extractor/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/third-party-dts-extractor", - "version": "2.6.0", + "version": "2.8.0", "files": [ "dist/", "README.md" @@ -31,21 +31,18 @@ "types": "./dist/index.d.ts", "author": "hanric ", "license": "MIT", - "dependencies": { - "empathic": "2.0.0", - "exsolve": "1.0.8" - }, "devDependencies": { + "@rstest/core": "^0.10.6", "@types/node": "^20.19.5", "@types/react": "^18.3.11", - "vitest": "1.6.0", "react": "^18", + "typescript": "7.0.2", "tsup": "7.3.0" }, "scripts": { - "build": "tsup --config tsup.config.ts --outDir dist && cp package.json dist && cp *.md dist", + "build": "tsup --config tsup.config.ts --outDir dist && tsc -p tsconfig.lib.json && cp package.json dist && cp *.md dist", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\"", - "test": "pnpm exec vitest run --passWithNoTests --config vite.config.mts", + "test": "pnpm exec rstest --passWithNoTests", "pre-release": "pnpm run test && pnpm run build" } } diff --git a/packages/third-party-dts-extractor/rstest.config.mts b/packages/third-party-dts-extractor/rstest.config.mts new file mode 100644 index 00000000000..5ac4912aa5b --- /dev/null +++ b/packages/third-party-dts-extractor/rstest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({ + testEnvironment: 'node', + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + reporters: ['default'], + passWithNoTests: true, +}); diff --git a/packages/third-party-dts-extractor/src/ThirdPartyExtractor.spec.ts b/packages/third-party-dts-extractor/src/ThirdPartyExtractor.spec.ts index 6a266be9f24..a2d989804c3 100644 --- a/packages/third-party-dts-extractor/src/ThirdPartyExtractor.spec.ts +++ b/packages/third-party-dts-extractor/src/ThirdPartyExtractor.spec.ts @@ -1,7 +1,8 @@ import { existsSync, readFileSync, readdirSync } from 'fs'; -import { join } from 'path'; -import { describe, expect, it } from 'vitest'; +import { dirname, join } from 'path'; +import { describe, expect, it } from '@rstest/core'; import { ThirdPartyExtractor } from './ThirdPartyExtractor'; +import { resolvePackageJson } from './utils'; const readJSONSync = (filePath: string) => JSON.parse(readFileSync(filePath, 'utf-8')); @@ -36,6 +37,13 @@ describe('ThirdPartyExtractor', () => { expect(pkgJson.name).toBe('@types/react'); }); + it('should resolve package.json even when the package does not export it', () => { + const pkgJsonPath = resolvePackageJson('@types/react', packageRoot); + + expect(readJSONSync(pkgJsonPath).name).toBe('@types/react'); + expect(dirname(pkgJsonPath)).toContain('@types'); + }); + it('should correctly collect third party pkg types dir while passing dts file', () => { thirdPartyExtractor.pkgs = {}; thirdPartyExtractor.collectPkgs(` diff --git a/packages/third-party-dts-extractor/src/ThirdPartyExtractor.ts b/packages/third-party-dts-extractor/src/ThirdPartyExtractor.ts index 6951ac8e7d3..27315c59a2d 100644 --- a/packages/third-party-dts-extractor/src/ThirdPartyExtractor.ts +++ b/packages/third-party-dts-extractor/src/ThirdPartyExtractor.ts @@ -1,9 +1,7 @@ -import { up as findPkgUp } from 'empathic/package'; import { copyFile, lstat, mkdir, readdir } from 'fs/promises'; import { existsSync, readFileSync } from 'fs'; import path from 'path'; -import { resolveModulePath } from 'exsolve'; -import { getTypedName, getPackageRootDir } from './utils'; +import { getTypedName, getPackageRootDir, resolvePackageJson } from './utils'; const ignoredPkgs = ['typescript']; @@ -75,7 +73,7 @@ class ThirdPartyExtractor { if (isNodeUtils(importEntry, importPath)) { return; } - const packageDir = getPackageRootDir(importPath); + const packageDir = getPackageRootDir(importPath, this.context); const pkgJsonPath = path.join(packageDir, 'package.json'); const dir = path.dirname(pkgJsonPath); @@ -97,13 +95,7 @@ class ThirdPartyExtractor { return dir; } else { const typedPkgName = getTypedName(pkg.name); - const typedPkgJsonPath = findPkgUp({ - cwd: path.dirname( - resolveModulePath(`${typedPkgName}/package.json`, { - from: this.context, - }), - ), - }) as string; + const typedPkgJsonPath = resolvePackageJson(typedPkgName, this.context); const typedDir = path.dirname(typedPkgJsonPath); readFileSync(typedPkgJsonPath, 'utf-8'); this.addPkgs(typedPkgName, typedDir); diff --git a/packages/third-party-dts-extractor/src/utils.ts b/packages/third-party-dts-extractor/src/utils.ts index 23dd8316afe..8f5ca5ad68f 100644 --- a/packages/third-party-dts-extractor/src/utils.ts +++ b/packages/third-party-dts-extractor/src/utils.ts @@ -15,13 +15,16 @@ function getTypedName(name: string) { * 5. Otherwise, return the fallback directory (if it contains a package.json). * 6. If all else fails, throw an error. */ -function getPackageRootDir(packageName: string | undefined): string { +function getPackageRootDir( + packageName: string | undefined, + context = process.cwd(), +): string { if (!packageName) { throw new Error('No package name provided.'); } // 1) Resolve the entry file - const entryFile = require.resolve(packageName); + const entryFile = require.resolve(packageName, { paths: [context] }); const entryDir = path.dirname(entryFile); // 2) Fallback: check if there's a package.json in entryDir @@ -81,4 +84,31 @@ function getPackageRootDir(packageName: string | undefined): string { ); } -export { getTypedName, getPackageRootDir }; +function resolvePackageJson(packageName: string, context: string): string { + try { + return require.resolve(`${packageName}/package.json`, { + paths: [context], + }); + } catch { + let currentPath = path.resolve(context); + while (true) { + const candidate = path.join( + currentPath, + 'node_modules', + packageName, + 'package.json', + ); + if (fs.existsSync(candidate)) { + return candidate; + } + + const parentPath = path.dirname(currentPath); + if (parentPath === currentPath) { + throw new Error(`Could not resolve package.json for "${packageName}".`); + } + currentPath = parentPath; + } + } +} + +export { getTypedName, getPackageRootDir, resolvePackageJson }; diff --git a/packages/third-party-dts-extractor/tsconfig.json b/packages/third-party-dts-extractor/tsconfig.json index 2a21c1ece63..b89ffbd9a21 100644 --- a/packages/third-party-dts-extractor/tsconfig.json +++ b/packages/third-party-dts-extractor/tsconfig.json @@ -3,9 +3,11 @@ "target": "es2017", "module": "esnext", "lib": ["esnext"], - "moduleResolution": "node", "esModuleInterop": true, "resolveJsonModule": true, - "types": ["node"] + "types": ["node"], + "strict": false, + "skipLibCheck": true, + "ignoreDeprecations": "6.0" } } diff --git a/packages/third-party-dts-extractor/tsconfig.lib.json b/packages/third-party-dts-extractor/tsconfig.lib.json index e668d0d06f1..e3220e93d8e 100644 --- a/packages/third-party-dts-extractor/tsconfig.lib.json +++ b/packages/third-party-dts-extractor/tsconfig.lib.json @@ -1,14 +1,16 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "../../dist/out-tsc", + "outDir": "./dist", + "rootDir": "./src", "declaration": true, + "emitDeclarationOnly": true, "skipLibCheck": true, - "types": [] + "types": ["node"] }, - "include": ["**/*.ts"], + "include": ["src/**/*.ts"], "exclude": [ - "jest.config.ts", + "rstest.config.mts", "**/*.spec.ts", "**/*.test.ts", "tsup.config.ts" diff --git a/packages/third-party-dts-extractor/tsconfig.spec.json b/packages/third-party-dts-extractor/tsconfig.spec.json index 6d3be742713..fd3ffea77da 100644 --- a/packages/third-party-dts-extractor/tsconfig.spec.json +++ b/packages/third-party-dts-extractor/tsconfig.spec.json @@ -2,7 +2,12 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "../../dist/out-tsc", - "types": ["vitest/globals", "vitest/importMeta", "vite/client", "node"] + "types": [ + "@rstest/core/globals", + "@rstest/core/importMeta", + "vite/client", + "node" + ] }, "include": [ "vite.config.ts", diff --git a/packages/third-party-dts-extractor/tsup.config.ts b/packages/third-party-dts-extractor/tsup.config.ts index c2c3e311c12..ac400be964c 100644 --- a/packages/third-party-dts-extractor/tsup.config.ts +++ b/packages/third-party-dts-extractor/tsup.config.ts @@ -3,13 +3,13 @@ import { defineConfig } from 'tsup'; const shared = { entry: [join(__dirname, 'src', 'index.ts')], - dts: true, + dts: false, splitting: true, outDir: join('packages', 'third-party-dts-extractor', 'dist'), external: [join(__dirname, 'package.json')], }; export default defineConfig([ - { ...shared, format: 'cjs' as const, clean: true, noExternal: ['exsolve'] }, + { ...shared, format: 'cjs' as const, clean: true }, { ...shared, format: 'esm' as const }, ]); diff --git a/packages/third-party-dts-extractor/vite.config.mts b/packages/third-party-dts-extractor/vite.config.mts deleted file mode 100644 index baa2c24c8d3..00000000000 --- a/packages/third-party-dts-extractor/vite.config.mts +++ /dev/null @@ -1,24 +0,0 @@ -/// -import { defineConfig } from 'vite'; - -import tsconfigPaths from 'vite-tsconfig-paths'; - -export default defineConfig({ - cacheDir: '../../node_modules/.vite/native-federation-tests', - - plugins: [tsconfigPaths()], - - // Uncomment this if you are using workers. - // worker: { - // plugins: [ tsconfigPaths() ], - // }, - - test: { - cache: { - dir: '../../node_modules/.vitest', - }, - environment: 'node', - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - reporters: ['default'], - }, -}); diff --git a/packages/treeshake-frontend/CHANGELOG.md b/packages/treeshake-frontend/CHANGELOG.md index 094de6ae559..16c3d99b9ef 100644 --- a/packages/treeshake-frontend/CHANGELOG.md +++ b/packages/treeshake-frontend/CHANGELOG.md @@ -1,5 +1,9 @@ # @module-federation/treeshake-frontend +## 2.8.0 + +## 2.7.0 + ## 2.6.0 ## 2.5.1 diff --git a/packages/treeshake-frontend/build.sh b/packages/treeshake-frontend/build.sh index cfe78ad6459..842c03bef95 100644 --- a/packages/treeshake-frontend/build.sh +++ b/packages/treeshake-frontend/build.sh @@ -3,9 +3,9 @@ set -e source /etc/profile -nvm install 22 +nvm install 24 -nvm use 22 +nvm use 24 echo 'node version is ' && node -v diff --git a/packages/treeshake-frontend/package.json b/packages/treeshake-frontend/package.json index f35fdc071f8..985b92627b0 100644 --- a/packages/treeshake-frontend/package.json +++ b/packages/treeshake-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/treeshake-frontend", - "version": "2.6.0", + "version": "2.8.0", "scripts": { "dev": "rsbuild dev", "build": "rsbuild build && rslib build", @@ -8,7 +8,7 @@ "lint": "eslint .", "preview": "rsbuild preview", "e2e:serve": "node scripts/e2e-server.js", - "test:e2e": "node ../../scripts/ensure-playwright.js && pnpm exec turbo run build --filter=@module-federation/treeshake-server && pnpm run build && rstest run -c rstest.config.ts", + "test:e2e": "node ../../scripts/ensure-playwright.js && pnpm exec turbo run build --filter=@module-federation/treeshake-server && pnpm run build && rstest", "test": "pnpm -C . test:e2e", "e2e": "pnpm -C . test:e2e" }, @@ -71,9 +71,9 @@ "@eslint/js": "^9.15.0", "@rstest/core": "^0.6.5", "@playwright/test": "^1.57.0", - "@rsbuild/core": "^1.6.15", - "@rsbuild/plugin-react": "^1.4.2", - "@rslib/core": "^0.12.4", + "@rsbuild/core": "^2.1.4", + "@rsbuild/plugin-react": "^2.1.0", + "@rslib/core": "^0.23.2", "@types/canvas-confetti": "^1.9.0", "@types/node": "^22.10.7", "@types/react": "^18.3.12", @@ -86,7 +86,7 @@ "globals": "^15.12.0", "postcss": "8.5.10", "tailwindcss": "v3.4.16", - "typescript": "~5.6.2", + "typescript": "^6.0.3", "typescript-eslint": "^8.15.0" }, "exports": { diff --git a/packages/treeshake-frontend/tsconfig.adapter.json b/packages/treeshake-frontend/tsconfig.adapter.json index 373fa2da6c8..80be68d9754 100644 --- a/packages/treeshake-frontend/tsconfig.adapter.json +++ b/packages/treeshake-frontend/tsconfig.adapter.json @@ -2,7 +2,6 @@ "compilerOptions": { "target": "ES2020", "module": "CommonJS", - "moduleResolution": "node", "lib": ["ES2020", "DOM"], "declaration": true, "outDir": "dist/adapter", @@ -10,7 +9,8 @@ "types": ["node"], "esModuleInterop": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true + "forceConsistentCasingInFileNames": true, + "ignoreDeprecations": "6.0" }, "include": ["adapter/**/*.ts"] } diff --git a/packages/treeshake-server/CHANGELOG.md b/packages/treeshake-server/CHANGELOG.md index 568f723131b..5fac9856179 100644 --- a/packages/treeshake-server/CHANGELOG.md +++ b/packages/treeshake-server/CHANGELOG.md @@ -1,5 +1,14 @@ # @module-federation/treeshake-server +## 2.8.0 + +## 2.7.0 + +### Patch Changes + +- 8ec950c: Bump runtime dependencies: echarts 6.1.0 (devtools), hono 4.12.26 and @hono/node-server 1.19.13 (treeshake-server), lodash-es 4.18.1 (rspress-plugin), handlebars 4.7.9 (create-module-federation), resolve 1.22.12 (third-party-dts-extractor). +- db81375: Bump undici to 7.28.0 to resolve known vulnerabilities (CVE-2026-12151 and related advisories). + ## 2.6.0 ## 2.5.1 diff --git a/packages/treeshake-server/package.json b/packages/treeshake-server/package.json index f3545daaeee..92289778f19 100644 --- a/packages/treeshake-server/package.json +++ b/packages/treeshake-server/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/treeshake-server", - "version": "2.6.0", + "version": "2.8.0", "description": "Build service powered by Hono that installs dependencies, builds with Rspack, and uploads artifacts.", "main": "dist/index.js", "module": "dist/index.mjs", @@ -51,7 +51,7 @@ "@vercel/nft": "^1.1.1", "pino-pretty": "^13.1.2", "ts-node": "^10.9.2", - "typescript": "^5.9.3" + "typescript": "7.0.2" }, "engines": { "node": ">=20.19.5", diff --git a/packages/treeshake-server/tsconfig.json b/packages/treeshake-server/tsconfig.json index d324f6bd428..934a6884ec2 100644 --- a/packages/treeshake-server/tsconfig.json +++ b/packages/treeshake-server/tsconfig.json @@ -2,17 +2,17 @@ "compilerOptions": { "target": "ES2020", "module": "CommonJS", - "moduleResolution": "Node", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "skipLibCheck": true, "resolveJsonModule": true, "types": ["node"], - "baseUrl": "./", "paths": { - "@/*": ["src/*"] - } + "@/*": ["./src/*"], + "*": ["./*"] + }, + "ignoreDeprecations": "6.0" }, "include": ["src", "test"], "ts-node": { diff --git a/packages/treeshake-server/tsconfig.lib.json b/packages/treeshake-server/tsconfig.lib.json index 0100bacb1d1..9e76db88b39 100644 --- a/packages/treeshake-server/tsconfig.lib.json +++ b/packages/treeshake-server/tsconfig.lib.json @@ -2,6 +2,7 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./dist/out-tsc", + "rootDir": "./src", "declaration": true, "types": ["node"] }, diff --git a/packages/typescript/CHANGELOG.md b/packages/typescript/CHANGELOG.md index 65d315c579f..82dba00d328 100644 --- a/packages/typescript/CHANGELOG.md +++ b/packages/typescript/CHANGELOG.md @@ -1,5 +1,11 @@ # @module-federation/typescript +## 3.1.9 + +### Patch Changes + +- 6b22938: chore(typescript): drop `lodash.get` dependency in favor of optional chaining in `normalizeOptions`. + ## 3.1.8 ### Patch Changes diff --git a/packages/typescript/package.json b/packages/typescript/package.json index 2392729ce3c..5158c07a539 100644 --- a/packages/typescript/package.json +++ b/packages/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/typescript", - "version": "3.1.8", + "version": "3.1.9", "description": "Webpack plugin to stream typescript for module federation apps/components", "license": "MIT", "type": "commonjs", @@ -47,6 +47,9 @@ "node-fetch": "2.7.0", "tapable": "2.3.0" }, + "devDependencies": { + "typescript": "6.0.3" + }, "peerDependenciesMeta": { "react": { "optional": true diff --git a/packages/utilities/CHANGELOG.md b/packages/utilities/CHANGELOG.md index a6a82969d52..c46eda127fb 100644 --- a/packages/utilities/CHANGELOG.md +++ b/packages/utilities/CHANGELOG.md @@ -1,5 +1,21 @@ # @module-federation/utilities +## 3.1.99 + +### Patch Changes + +- a5633f8: Support Rspack container reference identifiers when collecting remote and delegate modules. +- Updated dependencies [ea490ae] + - @module-federation/sdk@2.8.0 + +## 3.1.98 + +### Patch Changes + +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + ## 3.1.97 ### Patch Changes diff --git a/packages/utilities/jest.config.ts b/packages/utilities/jest.config.ts index 097eb994c71..e45cc0ddc0e 100644 --- a/packages/utilities/jest.config.ts +++ b/packages/utilities/jest.config.ts @@ -4,12 +4,7 @@ export default { preset: '../../jest.preset.js', globals: {}, transform: { - '^.+\\.[tj]s$': [ - 'ts-jest', - { - tsconfig: '/tsconfig.spec.json', - }, - ], + '^.+\\.[tj]sx?$': ['@swc/jest'], }, moduleFileExtensions: ['ts', 'js', 'html'], coverageDirectory: '../../coverage/packages/utils', diff --git a/packages/utilities/package.json b/packages/utilities/package.json index 16a890d161c..1a8c3a0b9b5 100644 --- a/packages/utilities/package.json +++ b/packages/utilities/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/utilities", - "version": "3.1.97", + "version": "3.1.99", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.mjs", "types": "./dist/types/index.d.ts", diff --git a/packages/utilities/src/plugins/DelegateModulesPlugin.test.ts b/packages/utilities/src/plugins/DelegateModulesPlugin.test.ts new file mode 100644 index 00000000000..91d6e9ba293 --- /dev/null +++ b/packages/utilities/src/plugins/DelegateModulesPlugin.test.ts @@ -0,0 +1,41 @@ +import DelegateModulesPlugin from './DelegateModulesPlugin'; + +describe('DelegateModulesPlugin', () => { + it.each(['webpack', 'rspack'])( + 'collects %s container reference modules as delegates', + (bundler) => { + const remoteModule = { + identifier: () => `${bundler}/container/reference/app2`, + userRequest: `${bundler}/container/reference/app2`, + }; + const finishModules = { + tapAsync: jest.fn( + ( + _name, + handler: (modules: unknown[], callback: () => void) => void, + ) => handler([remoteModule], jest.fn()), + ), + }; + const compilation = { + hooks: { + finishModules, + optimizeChunks: { tap: jest.fn() }, + }, + }; + const compiler = { + hooks: { + thisCompilation: { + tap: jest.fn((_name, handler) => handler(compilation)), + }, + }, + }; + const plugin = new DelegateModulesPlugin({}); + + plugin.apply(compiler as never); + + expect(plugin._delegateModules.get(remoteModule.identifier())).toBe( + remoteModule, + ); + }, + ); +}); diff --git a/packages/utilities/src/plugins/DelegateModulesPlugin.ts b/packages/utilities/src/plugins/DelegateModulesPlugin.ts index 59bb37408d2..7ea26d5426d 100644 --- a/packages/utilities/src/plugins/DelegateModulesPlugin.ts +++ b/packages/utilities/src/plugins/DelegateModulesPlugin.ts @@ -6,6 +6,8 @@ import type { Module, } from 'webpack'; +const REMOTE_REFERENCE_PREFIX = /^(?:webpack|rspack)\/container\/reference/; + class DelegateModulesPlugin { options: { debug: boolean; [key: string]: any }; _delegateModules: Map; @@ -88,9 +90,8 @@ class DelegateModulesPlugin { if (normalModule) { const mid = normalModule.identifier(); if ( - normalModule?.userRequest?.startsWith( - 'webpack/container/reference', - ) + normalModule?.userRequest && + REMOTE_REFERENCE_PREFIX.test(normalModule.userRequest) ) { this._delegateModules.set(mid, normalModule); } diff --git a/packages/webpack-bundler-runtime/CHANGELOG.md b/packages/webpack-bundler-runtime/CHANGELOG.md index 3d4b4798871..196e45ceda9 100644 --- a/packages/webpack-bundler-runtime/CHANGELOG.md +++ b/packages/webpack-bundler-runtime/CHANGELOG.md @@ -1,5 +1,25 @@ # @module-federation/webpack-bundler-runtime +## 2.8.0 + +### Patch Changes + +- ea490ae: Allow builds to exclude unused remote consumption and shared capabilities, and automatically omit Webpack container initialization when no exposes are configured. +- Updated dependencies [ea490ae] + - @module-federation/sdk@2.8.0 + - @module-federation/runtime@2.8.0 + - @module-federation/error-codes@2.8.0 + +## 2.7.0 + +### Patch Changes + +- Updated dependencies [dcc640b] +- Updated dependencies [9958086] + - @module-federation/sdk@2.7.0 + - @module-federation/runtime@2.7.0 + - @module-federation/error-codes@2.7.0 + ## 2.6.0 ### Patch Changes diff --git a/packages/webpack-bundler-runtime/jest.config.cjs b/packages/webpack-bundler-runtime/jest.config.cjs index 3a1ad5072cb..3e0e45996af 100644 --- a/packages/webpack-bundler-runtime/jest.config.cjs +++ b/packages/webpack-bundler-runtime/jest.config.cjs @@ -26,7 +26,6 @@ module.exports = { __BROWSER__: false, __VERSION__: '"unknown"', }, - preset: 'ts-jest', transformIgnorePatterns: [ // Change MODULE_NAME_HERE to your module that isn't being compiled '/node_modules/', diff --git a/packages/webpack-bundler-runtime/package.json b/packages/webpack-bundler-runtime/package.json index d7228a503c1..2b87af52c82 100644 --- a/packages/webpack-bundler-runtime/package.json +++ b/packages/webpack-bundler-runtime/package.json @@ -1,7 +1,7 @@ { "public": true, "name": "@module-federation/webpack-bundler-runtime", - "version": "2.6.0", + "version": "2.8.0", "type": "module", "license": "MIT", "description": "Module Federation Runtime for webpack", diff --git a/packages/webpack-bundler-runtime/src/index.ts b/packages/webpack-bundler-runtime/src/index.ts index dc9b130f0eb..ff7bf9130dc 100644 --- a/packages/webpack-bundler-runtime/src/index.ts +++ b/packages/webpack-bundler-runtime/src/index.ts @@ -9,22 +9,39 @@ import { initContainerEntry } from './initContainerEntry'; import { init } from './init'; import { getSharedFallbackGetter } from './getSharedFallbackGetter'; +declare const FEDERATION_OPTIMIZE_NO_REMOTE: boolean; +declare const FEDERATION_OPTIMIZE_NO_SHARED: boolean; +declare const FEDERATION_HAS_EXPOSES: boolean; + export * from './types'; +const USE_REMOTE = + typeof FEDERATION_OPTIMIZE_NO_REMOTE === 'boolean' + ? !FEDERATION_OPTIMIZE_NO_REMOTE + : true; +const USE_SHARED = + typeof FEDERATION_OPTIMIZE_NO_SHARED === 'boolean' + ? !FEDERATION_OPTIMIZE_NO_SHARED + : true; +const USE_EXPOSES = + typeof FEDERATION_HAS_EXPOSES === 'boolean' ? FEDERATION_HAS_EXPOSES : true; + +const bundlerRuntime = { + remotes: USE_REMOTE ? remotes : undefined, + consumes: USE_SHARED ? consumes : undefined, + I: USE_SHARED ? initializeSharing : undefined, + S: {}, + installInitialConsumes: USE_SHARED ? installInitialConsumes : undefined, + initContainerEntry: USE_EXPOSES ? initContainerEntry : undefined, + init, + getSharedFallbackGetter: USE_SHARED ? getSharedFallbackGetter : undefined, +} as NonNullable; + const federation: Federation = { runtime, instance: undefined, initOptions: undefined, - bundlerRuntime: { - remotes, - consumes, - I: initializeSharing, - S: {}, - installInitialConsumes, - initContainerEntry, - init, - getSharedFallbackGetter, - }, + bundlerRuntime, attachShareScopeMap, bundlerRuntimeOptions: {}, }; @@ -33,7 +50,7 @@ const federation: Federation = { export { runtime, attachShareScopeMap }; export const instance = federation.instance; export const initOptions = federation.initOptions; -export const bundlerRuntime = federation.bundlerRuntime; +export { bundlerRuntime }; export const bundlerRuntimeOptions = federation.bundlerRuntimeOptions; export default federation; diff --git a/packages/webpack-bundler-runtime/src/init.ts b/packages/webpack-bundler-runtime/src/init.ts index fc2e8260a5a..d8a7e9e2d7c 100644 --- a/packages/webpack-bundler-runtime/src/init.ts +++ b/packages/webpack-bundler-runtime/src/init.ts @@ -6,6 +6,13 @@ import { import { ShareArgs } from '@module-federation/runtime/types'; import helpers from '@module-federation/runtime/helpers'; +declare const FEDERATION_OPTIMIZE_NO_SHARED: boolean; + +const USE_SHARED = + typeof FEDERATION_OPTIMIZE_NO_SHARED === 'boolean' + ? !FEDERATION_OPTIMIZE_NO_SHARED + : true; + export function init({ webpackRequire }: { webpackRequire: WebpackRequire }) { const { initOptions, runtime, sharedFallback, bundlerRuntime, libraryType } = webpackRequire.federation; @@ -14,117 +21,119 @@ export function init({ webpackRequire }: { webpackRequire: WebpackRequire }) { throw new Error('initOptions is required!'); } - const treeShakingSharePlugin: () => ModuleFederationRuntimePlugin = - function () { - return { - name: 'tree-shake-plugin', - beforeInit(args) { - const { userOptions, origin, options: registeredOptions } = args; - const version = userOptions.version || registeredOptions.version; - if (!sharedFallback) { - return args; - } + if (USE_SHARED) { + const treeShakingSharePlugin: () => ModuleFederationRuntimePlugin = + function () { + return { + name: 'tree-shake-plugin', + beforeInit(args) { + const { userOptions, origin, options: registeredOptions } = args; + const version = userOptions.version || registeredOptions.version; + if (!sharedFallback) { + return args; + } - const currentShared = userOptions.shared || {}; - const shared: Array<[pkgName: string, ShareArgs]> = []; + const currentShared = userOptions.shared || {}; + const shared: Array<[pkgName: string, ShareArgs]> = []; - Object.keys(currentShared).forEach((sharedName) => { - const sharedArgs = Array.isArray(currentShared[sharedName]) - ? currentShared[sharedName] - : [currentShared[sharedName]]; - sharedArgs.forEach((sharedArg) => { - shared.push([sharedName, sharedArg]); - if ('get' in sharedArg) { - sharedArg.treeShaking ||= {}; - sharedArg.treeShaking.get = sharedArg.get; - sharedArg.get = bundlerRuntime!.getSharedFallbackGetter({ - shareKey: sharedName, - factory: sharedArg.get, - webpackRequire, - libraryType, - version: sharedArg.version, - }); - } + Object.keys(currentShared).forEach((sharedName) => { + const sharedArgs = Array.isArray(currentShared[sharedName]) + ? currentShared[sharedName] + : [currentShared[sharedName]]; + sharedArgs.forEach((sharedArg) => { + shared.push([sharedName, sharedArg]); + if ('get' in sharedArg) { + sharedArg.treeShaking ||= {}; + sharedArg.treeShaking.get = sharedArg.get; + sharedArg.get = bundlerRuntime!.getSharedFallbackGetter({ + shareKey: sharedName, + factory: sharedArg.get, + webpackRequire, + libraryType, + version: sharedArg.version, + }); + } + }); }); - }); - // read snapshot to override re-shake getter - const hostGlobalSnapshot = - helpers.global.getGlobalSnapshotInfoByModuleInfo({ - name: origin.name, - version: version, - }); - if (!hostGlobalSnapshot || !('shared' in hostGlobalSnapshot)) { - return args; - } + // read snapshot to override re-shake getter + const hostGlobalSnapshot = + helpers.global.getGlobalSnapshotInfoByModuleInfo({ + name: origin.name, + version: version, + }); + if (!hostGlobalSnapshot || !('shared' in hostGlobalSnapshot)) { + return args; + } - Object.keys(registeredOptions.shared || {}).forEach((pkgName) => { - const sharedInfo = registeredOptions.shared[pkgName]; - sharedInfo.forEach((sharedArg) => { - shared.push([pkgName, sharedArg]); + Object.keys(registeredOptions.shared || {}).forEach((pkgName) => { + const sharedInfo = registeredOptions.shared[pkgName]; + sharedInfo.forEach((sharedArg) => { + shared.push([pkgName, sharedArg]); + }); }); - }); - const patchShared = (pkgName: string, shared: ShareArgs) => { - const shareSnapshot = hostGlobalSnapshot.shared.find( - (item) => item.sharedName === pkgName, - ); - if (!shareSnapshot) { - return; - } - const { treeShaking } = shared; - if (!treeShaking) { - return; - } - const { - secondarySharedTreeShakingName, - secondarySharedTreeShakingEntry, - treeShakingStatus, - } = shareSnapshot; - if (treeShaking.status === treeShakingStatus) { - return; - } - treeShaking.status = treeShakingStatus; - if ( - secondarySharedTreeShakingEntry && - libraryType && - secondarySharedTreeShakingName - ) { - treeShaking.get = async () => { - const shareEntry = await getRemoteEntry({ - origin, - remoteInfo: { - name: secondarySharedTreeShakingName, - entry: secondarySharedTreeShakingEntry, - type: libraryType, - entryGlobalName: secondarySharedTreeShakingName, - // current not used - shareScope: 'default', - }, - }); - // TODO: add errorLoad hook ? - // @ts-ignore - await shareEntry.init( - origin, + const patchShared = (pkgName: string, shared: ShareArgs) => { + const shareSnapshot = hostGlobalSnapshot.shared.find( + (item) => item.sharedName === pkgName, + ); + if (!shareSnapshot) { + return; + } + const { treeShaking } = shared; + if (!treeShaking) { + return; + } + const { + secondarySharedTreeShakingName, + secondarySharedTreeShakingEntry, + treeShakingStatus, + } = shareSnapshot; + if (treeShaking.status === treeShakingStatus) { + return; + } + treeShaking.status = treeShakingStatus; + if ( + secondarySharedTreeShakingEntry && + libraryType && + secondarySharedTreeShakingName + ) { + treeShaking.get = async () => { + const shareEntry = await getRemoteEntry({ + origin, + remoteInfo: { + name: secondarySharedTreeShakingName, + entry: secondarySharedTreeShakingEntry, + type: libraryType, + entryGlobalName: secondarySharedTreeShakingName, + // current not used + shareScope: 'default', + }, + }); + // TODO: add errorLoad hook ? // @ts-ignore - __webpack_require__.federation.bundlerRuntime, - ); - // @ts-ignore - const getter = shareEntry.get(); - return getter; - }; - } - }; - shared.forEach(([pkgName, sharedArg]) => { - patchShared(pkgName, sharedArg); - }); + await shareEntry.init( + origin, + // @ts-ignore + __webpack_require__.federation.bundlerRuntime, + ); + // @ts-ignore + const getter = shareEntry.get(); + return getter; + }; + } + }; + shared.forEach(([pkgName, sharedArg]) => { + patchShared(pkgName, sharedArg); + }); - return args; - }, + return args; + }, + }; }; - }; - initOptions.plugins ||= []; - initOptions.plugins.push(treeShakingSharePlugin()); + initOptions.plugins ||= []; + initOptions.plugins.push(treeShakingSharePlugin()); + } return runtime!.init(initOptions); } diff --git a/packages/webpack-bundler-runtime/tsconfig.json b/packages/webpack-bundler-runtime/tsconfig.json index 88004663d5a..dc0403bddf1 100644 --- a/packages/webpack-bundler-runtime/tsconfig.json +++ b/packages/webpack-bundler-runtime/tsconfig.json @@ -7,7 +7,6 @@ "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noFallthroughCasesInSwitch": true, - "moduleResolution": "node", "resolveJsonModule": true, "esModuleInterop": true, "skipLibCheck": true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72ed5c7855b..8c841f7d3bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,7 +30,7 @@ importers: version: 5.19.1(date-fns@4.1.0)(luxon@3.7.2)(moment@2.30.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) axios: specifier: 1.16.1 - version: 1.16.1 + version: 1.16.1(debug@4.4.3) core-js: specifier: 3.36.1 version: 3.36.1 @@ -66,7 +66,7 @@ importers: version: 2.3.0 typedoc: specifier: 0.28.17 - version: 0.28.17(typescript@5.9.3) + version: 0.28.17(typescript@6.0.3) undici: specifier: 7.28.0 version: 7.28.0 @@ -97,13 +97,13 @@ importers: version: 1.9.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@commitlint/cli': specifier: ^19.4.1 - version: 19.8.1(@types/node@20.19.5)(typescript@5.9.3) + version: 19.8.1(@types/node@20.19.5)(typescript@6.0.3) '@commitlint/config-conventional': specifier: 19.5.0 version: 19.5.0 '@commitlint/cz-commitlint': specifier: 19.5.0 - version: 19.5.0(@types/node@20.19.5)(commitizen@4.3.1(@types/node@20.19.5)(typescript@5.9.3))(inquirer@8.2.7(@types/node@20.19.5))(typescript@5.9.3) + version: 19.5.0(@types/node@20.19.5)(commitizen@4.3.1(@types/node@20.19.5)(typescript@6.0.3))(inquirer@8.2.7(@types/node@20.19.5))(typescript@6.0.3) '@fontsource/roboto': specifier: 5.1.0 version: 5.1.0 @@ -112,7 +112,7 @@ importers: version: 5.1.0 '@mermaid-js/mermaid-cli': specifier: 11.16.0 - version: 11.16.0(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(playwright-core@1.57.0)(puppeteer@25.3.0(yauzl@2.10.0))(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3))) + version: 11.16.0(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(playwright-core@1.57.0)(puppeteer@25.3.0(yauzl@2.10.0))(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3))) '@playwright/test': specifier: 1.57.0 version: 1.57.0 @@ -126,8 +126,8 @@ importers: specifier: 6.0.1 version: 6.0.1(rollup@4.59.0) '@rslib/core': - specifier: ^0.10.4 - version: 0.10.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(typescript@5.9.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1)(typescript@6.0.3) '@rspack/cli': specifier: 1.3.9 version: 1.3.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.104.1) @@ -138,20 +138,20 @@ importers: specifier: 1.1.1 version: 1.1.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.104.1) '@rstest/core': - specifier: ^0.8.0 - version: 0.8.5(jsdom@20.0.3) + specifier: ^0.10.6 + version: 0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1)(jsdom@20.0.3) '@storybook/addon-docs': specifier: 9.0.17 version: 9.0.17(@types/react@19.2.14)(storybook@8.6.17(prettier@3.8.1)) '@storybook/nextjs': specifier: 9.0.9 - version: 9.0.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(next@14.2.35(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.100.0)(webpack-cli@5.1.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass-embedded@1.100.0)(sass@1.100.0)(storybook@8.6.17(prettier@3.8.1))(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1) + version: 9.0.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(next@14.2.35(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.100.0)(webpack-cli@5.1.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass-embedded@1.100.0)(sass@1.100.0)(storybook@8.6.17(prettier@3.8.1))(type-fest@2.19.0)(typescript@6.0.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1) '@svgr/webpack': specifier: 8.1.0 - version: 8.1.0(typescript@5.9.3) + version: 8.1.0(typescript@6.0.3) '@swc-node/register': specifier: 1.10.10 - version: 1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3) + version: 1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3) '@swc/cli': specifier: 0.6.0 version: 0.6.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(chokidar@4.0.3) @@ -166,7 +166,7 @@ importers: version: 0.2.36(@swc/core@1.7.26(@swc/helpers@0.5.13)) '@tailwindcss/forms': specifier: 0.5.9 - version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3))) + version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3))) '@testing-library/react': specifier: 16.1.0 version: 16.1.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -211,19 +211,10 @@ importers: version: 3.2.3 '@typescript-eslint/eslint-plugin': specifier: 8.56.1 - version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/parser': specifier: 8.56.1 - version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@vitest/coverage-istanbul': - specifier: 1.6.0 - version: 1.6.0(vitest@1.6.0) - '@vitest/coverage-v8': - specifier: 1.6.0 - version: 1.6.0(vitest@1.6.0) - '@vitest/ui': - specifier: 1.6.0 - version: 1.6.0(vitest@1.6.0) + version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.5.15) @@ -238,7 +229,7 @@ importers: version: 2.5.1 commitizen: specifier: ^4.3.0 - version: 4.3.1(@types/node@20.19.5)(typescript@5.9.3) + version: 4.3.1(@types/node@20.19.5)(typescript@6.0.3) concurrently: specifier: 8.2.2 version: 8.2.2 @@ -268,7 +259,7 @@ importers: version: 2.15.2(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-import: specifier: 2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)) + version: 2.31.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-jsx-a11y: specifier: 6.10.1 version: 6.10.1(eslint@9.39.3(jiti@2.6.1)) @@ -286,7 +277,7 @@ importers: version: 12.1.1(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-storybook: specifier: 9.0.9 - version: 9.0.9(eslint@9.39.3(jiti@2.6.1))(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3) + version: 9.0.9(eslint@9.39.3(jiti@2.6.1))(storybook@8.6.17(prettier@3.8.1))(typescript@6.0.3) graceful-fs: specifier: ^4.2.11 version: 4.2.11 @@ -298,16 +289,10 @@ importers: version: 8.0.3 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) - jest-cli: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + version: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 - jest-environment-node: - specifier: 29.7.0 - version: 29.7.0 jiti: specifier: 2.6.1 version: 2.6.1 @@ -325,7 +310,7 @@ importers: version: 2.1.35 msw: specifier: ^1.2.1 - version: 1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@5.9.3) + version: 1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3) node-fetch: specifier: ~3.3.2 version: 3.3.2 @@ -368,6 +353,9 @@ importers: rsbuild-plugin-publint: specifier: ^0.2.1 version: 0.2.1(@rsbuild/core@1.7.3) + rstest-fetch-mock: + specifier: 0.1.0 + version: 0.1.0(@rstest/core@0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1)(jsdom@20.0.3)) serve: specifier: ^14.2.4 version: 14.2.5 @@ -382,49 +370,46 @@ importers: version: 0.2.6(@swc/core@1.7.26(@swc/helpers@0.5.13))(webpack@5.104.1) tailwindcss: specifier: 3.4.13 - version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) terser-webpack-plugin: specifier: ^5.3.10 version: 5.4.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)) ts-jest: specifier: 29.1.5 - version: 29.1.5(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.28.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.1.5(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.28.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)))(typescript@6.0.3) ts-node: specifier: 10.9.1 - version: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3) + version: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3) tsdown: specifier: 0.20.3 - version: 0.20.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(publint@0.3.18)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + version: 0.20.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(publint@0.3.18)(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)) tslib: specifier: 2.8.1 version: 2.8.1 tsup: specifier: 7.3.0 - version: 7.3.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(postcss@8.5.15)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3))(typescript@5.9.3) + version: 7.3.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(postcss@8.5.15)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3))(typescript@6.0.3) turbo: specifier: ^2.9.14 version: 2.10.2 typescript: - specifier: 5.9.3 - version: 5.9.3 + specifier: 6.0.3 + version: 6.0.3 url-loader: specifier: 4.1.1 version: 4.1.1(file-loader@6.2.0(webpack@5.104.1))(webpack@5.104.1) vite: specifier: 7.3.5 - version: 7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.2) + version: 7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) vite-tsconfig-paths: specifier: 4.2.3 - version: 4.2.3(typescript@5.9.3)(vite@7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.2)) + version: 4.2.3(typescript@6.0.3)(vite@7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0)) vitest: specifier: 1.6.0 - version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vitest-fetch-mock: - specifier: ^0.2.2 - version: 0.2.2(encoding@0.1.13)(vitest@1.6.0) + version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) vue-tsc: specifier: ^2.2.10 - version: 2.2.12(typescript@5.9.3) + version: 2.2.12(typescript@6.0.3) wait-on: specifier: ^7.2.0 version: 7.2.0 @@ -564,6 +549,196 @@ importers: specifier: 5.104.1 version: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) + apps/bridge-ssr-demo/host: + dependencies: + '@module-federation/bridge-react': + specifier: workspace:* + version: link:../../../packages/bridge/bridge-react + '@module-federation/bridge-shared': + specifier: workspace:* + version: link:../../../packages/bridge/bridge-shared + '@module-federation/enhanced': + specifier: workspace:* + version: link:../../../packages/enhanced + express: + specifier: ^4.21.2 + version: 4.22.1 + react: + specifier: ~18.3.1 + version: 18.3.1 + react-dom: + specifier: ~18.3.1 + version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: 6.30.2 + version: 6.30.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + vue: + specifier: ^3.5.30 + version: 3.5.30(typescript@5.0.4) + vue-router: + specifier: 4.4.5 + version: 4.4.5(vue@3.5.30(typescript@5.0.4)) + devDependencies: + '@module-federation/rsbuild-plugin': + specifier: workspace:* + version: link:../../../packages/rsbuild-plugin + '@playwright/test': + specifier: 1.57.0 + version: 1.57.0 + '@rsbuild/core': + specifier: 1.7.3 + version: 1.7.3 + '@rsbuild/plugin-react': + specifier: ^1.4.5 + version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + '@types/express': + specifier: ^4.17.21 + version: 4.17.21 + '@types/react': + specifier: ~18.2.0 + version: 18.2.79 + '@types/react-dom': + specifier: ~18.3.0 + version: 18.3.7(@types/react@18.2.79) + typescript: + specifier: ~5.0.4 + version: 5.0.4 + + apps/bridge-ssr-demo/host-vue: + dependencies: + '@module-federation/bridge-react': + specifier: workspace:* + version: link:../../../packages/bridge/bridge-react + '@module-federation/bridge-shared': + specifier: workspace:* + version: link:../../../packages/bridge/bridge-shared + '@module-federation/bridge-vue3': + specifier: workspace:* + version: link:../../../packages/bridge/vue3-bridge + '@module-federation/enhanced': + specifier: workspace:* + version: link:../../../packages/enhanced + '@module-federation/runtime': + specifier: workspace:* + version: link:../../../packages/runtime + '@vue/server-renderer': + specifier: ^3.5.30 + version: 3.5.30(vue@3.5.30(typescript@5.0.4)) + express: + specifier: ^4.21.2 + version: 4.22.1 + react: + specifier: 18.3.1 + version: 18.3.1 + react-dom: + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) + vue: + specifier: ^3.5.30 + version: 3.5.30(typescript@5.0.4) + vue-router: + specifier: 4.4.5 + version: 4.4.5(vue@3.5.30(typescript@5.0.4)) + devDependencies: + '@module-federation/rsbuild-plugin': + specifier: workspace:* + version: link:../../../packages/rsbuild-plugin + '@playwright/test': + specifier: 1.57.0 + version: 1.57.0 + '@rsbuild/core': + specifier: 1.7.3 + version: 1.7.3 + '@rsbuild/plugin-vue': + specifier: ^1.2.6 + version: 1.2.9(@rsbuild/core@1.7.3)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.0.4)) + typescript: + specifier: ~5.0.4 + version: 5.0.4 + + apps/bridge-ssr-demo/remote-react: + dependencies: + '@module-federation/bridge-react': + specifier: workspace:* + version: link:../../../packages/bridge/bridge-react + react: + specifier: ~18.3.1 + version: 18.3.1 + react-dom: + specifier: ~18.3.1 + version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: 6.30.2 + version: 6.30.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + devDependencies: + '@module-federation/rsbuild-plugin': + specifier: workspace:* + version: link:../../../packages/rsbuild-plugin + '@rsbuild/core': + specifier: 1.7.3 + version: 1.7.3 + '@rsbuild/plugin-react': + specifier: ^1.4.5 + version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + '@types/react': + specifier: ~18.2.0 + version: 18.2.79 + '@types/react-dom': + specifier: ~18.3.0 + version: 18.3.7(@types/react@18.2.79) + typescript: + specifier: ~5.0.4 + version: 5.0.4 + + apps/bridge-ssr-demo/remote-vue: + dependencies: + '@module-federation/bridge-vue3': + specifier: workspace:* + version: link:../../../packages/bridge/vue3-bridge + '@vue/server-renderer': + specifier: ^3.5.30 + version: 3.5.30(vue@3.5.30(typescript@5.0.4)) + vue: + specifier: ^3.5.30 + version: 3.5.30(typescript@5.0.4) + vue-router: + specifier: 4.4.5 + version: 4.4.5(vue@3.5.30(typescript@5.0.4)) + devDependencies: + '@module-federation/rsbuild-plugin': + specifier: workspace:* + version: link:../../../packages/rsbuild-plugin + '@module-federation/vite': + specifier: 1.16.16 + version: 1.16.16(typescript@5.0.4)(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue-tsc@2.2.12(typescript@5.0.4)) + '@rsbuild/core': + specifier: 1.7.3 + version: 1.7.3 + '@rsbuild/plugin-vue': + specifier: ^1.2.6 + version: 1.2.9(@rsbuild/core@1.7.3)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.0.4)) + '@vitejs/plugin-vue': + specifier: ^5.0.4 + version: 5.2.4(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@5.0.4)) + typescript: + specifier: ~5.0.4 + version: 5.0.4 + vite: + specifier: ^5.4.21 + version: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + + apps/bridge-ssr-demo/shared: + dependencies: + '@module-federation/bridge-shared': + specifier: workspace:* + version: link:../../../packages/bridge/bridge-shared + '@rsbuild/core': + specifier: 1.7.3 + version: 1.7.3 + express: + specifier: ^4.21.2 + version: 4.22.1 + apps/bundle-size: dependencies: antd: @@ -644,8 +819,8 @@ importers: specifier: ^1.1.0 version: 1.2.2 typescript: - specifier: ^4.8.2 - version: 4.9.5 + specifier: 7.0.2 + version: 7.0.2 apps/manifest-demo/3009-webpack-provider: dependencies: @@ -833,7 +1008,7 @@ importers: version: 19.1.0 react-native: specifier: 0.80.0 - version: 0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@5.0.4))(@types/react@19.2.14)(react@19.1.0) + version: 0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@7.0.2))(@types/react@19.2.14)(react@19.1.0) devDependencies: '@babel/core': specifier: ^7.25.2 @@ -858,7 +1033,7 @@ importers: version: 0.80.0(@babel/core@7.29.0) '@react-native/eslint-config': specifier: 0.80.0 - version: 0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4) + version: 0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)))(prettier@2.8.8)(typescript@7.0.2) '@react-native/gradle-plugin': specifier: 0.80.0 version: 0.80.0 @@ -869,17 +1044,17 @@ importers: specifier: 0.80.0 version: 0.80.0 '@rock-js/platform-android': - specifier: ^0.13.0 - version: 0.13.0 + specifier: ^0.14.1 + version: 0.14.1 '@rock-js/platform-ios': - specifier: ^0.13.0 - version: 0.13.0(typescript@5.0.4) + specifier: ^0.14.1 + version: 0.14.1(typescript@7.0.2) '@rock-js/plugin-metro': - specifier: ^0.13.0 - version: 0.13.0 + specifier: ^0.14.1 + version: 0.14.1 '@rock-js/provider-github': - specifier: ^0.13.0 - version: 0.13.0 + specifier: ^0.14.1 + version: 0.14.1 '@types/jest': specifier: ^29.5.13 version: 29.5.13 @@ -897,7 +1072,7 @@ importers: version: 8.57.1 jest: specifier: ^29.6.3 - version: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)) + version: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) nodemon: specifier: ^3.1.9 version: 3.1.14 @@ -908,11 +1083,11 @@ importers: specifier: 19.1.0 version: 19.1.0(react@19.1.0) rock: - specifier: ^0.13.0 - version: 0.13.0(typescript@5.0.4) + specifier: ^0.14.1 + version: 0.14.1(typescript@7.0.2) typescript: - specifier: 5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 apps/metro-example-mini: dependencies: @@ -924,7 +1099,7 @@ importers: version: 19.1.0 react-native: specifier: 0.80.0 - version: 0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@5.0.4))(@types/react@19.2.14)(react@19.1.0) + version: 0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@7.0.2))(@types/react@19.2.14)(react@19.1.0) devDependencies: '@babel/core': specifier: ^7.25.2 @@ -946,13 +1121,13 @@ importers: version: link:../../packages/runtime '@react-native-community/cli': specifier: ^19.1.0 - version: 19.1.2(typescript@5.0.4) + version: 19.1.2(typescript@7.0.2) '@react-native/babel-preset': specifier: 0.80.0 version: 0.80.0(@babel/core@7.29.0) '@react-native/eslint-config': specifier: 0.80.0 - version: 0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4) + version: 0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)))(prettier@2.8.8)(typescript@7.0.2) '@react-native/metro-config': specifier: 0.80.0 version: 0.80.0(@babel/core@7.29.0) @@ -960,17 +1135,108 @@ importers: specifier: 0.80.0 version: 0.80.0 '@rock-js/platform-android': - specifier: ^0.13.0 - version: 0.13.0 + specifier: ^0.14.1 + version: 0.14.1 '@rock-js/platform-ios': - specifier: ^0.13.0 - version: 0.13.0(typescript@5.0.4) + specifier: ^0.14.1 + version: 0.14.1(typescript@7.0.2) '@rock-js/plugin-metro': - specifier: ^0.13.0 - version: 0.13.0 + specifier: ^0.14.1 + version: 0.14.1 '@rock-js/provider-github': - specifier: ^0.13.0 - version: 0.13.0 + specifier: ^0.14.1 + version: 0.14.1 + '@types/jest': + specifier: ^29.5.13 + version: 29.5.13 + '@types/lodash': + specifier: ^4 + version: 4.17.24 + '@types/react': + specifier: ^19.1.0 + version: 19.2.14 + '@types/react-test-renderer': + specifier: ^19.1.0 + version: 19.1.0 + eslint: + specifier: ^8.57.0 + version: 8.57.1 + jest: + specifier: ^29.6.3 + version: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) + nodemon: + specifier: ^3.1.9 + version: 3.1.14 + prettier: + specifier: 2.8.8 + version: 2.8.8 + react-test-renderer: + specifier: 19.1.0 + version: 19.1.0(react@19.1.0) + rock: + specifier: ^0.14.1 + version: 0.14.1(typescript@7.0.2) + serve: + specifier: ^14.2.4 + version: 14.2.5 + typescript: + specifier: 7.0.2 + version: 7.0.2 + + apps/metro-example-nested-mini: + dependencies: + lodash: + specifier: 4.18.1 + version: 4.18.1 + react: + specifier: 19.1.0 + version: 19.1.0 + react-native: + specifier: 0.80.0 + version: 0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@7.0.2))(@types/react@19.2.14)(react@19.1.0) + devDependencies: + '@babel/core': + specifier: ^7.25.2 + version: 7.29.0 + '@babel/preset-env': + specifier: ^7.25.3 + version: 7.29.2(@babel/core@7.29.0) + '@babel/runtime': + specifier: ^7.25.0 + version: 7.28.2 + '@module-federation/metro': + specifier: workspace:* + version: link:../../packages/metro-core + '@module-federation/metro-plugin-rock': + specifier: workspace:* + version: link:../../packages/metro-plugin-rock + '@module-federation/runtime': + specifier: workspace:* + version: link:../../packages/runtime + '@react-native/babel-preset': + specifier: 0.80.0 + version: 0.80.0(@babel/core@7.29.0) + '@react-native/eslint-config': + specifier: 0.80.0 + version: 0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)))(prettier@2.8.8)(typescript@7.0.2) + '@react-native/metro-config': + specifier: 0.80.0 + version: 0.80.0(@babel/core@7.29.0) + '@react-native/typescript-config': + specifier: 0.80.0 + version: 0.80.0 + '@rock-js/platform-android': + specifier: ^0.14.1 + version: 0.14.1 + '@rock-js/platform-ios': + specifier: ^0.14.1 + version: 0.14.1(typescript@7.0.2) + '@rock-js/plugin-metro': + specifier: ^0.14.1 + version: 0.14.1 + '@rock-js/provider-github': + specifier: ^0.14.1 + version: 0.14.1 '@types/jest': specifier: ^29.5.13 version: 29.5.13 @@ -988,7 +1254,7 @@ importers: version: 8.57.1 jest: specifier: ^29.6.3 - version: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) + version: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) nodemon: specifier: ^3.1.9 version: 3.1.14 @@ -999,105 +1265,14 @@ importers: specifier: 19.1.0 version: 19.1.0(react@19.1.0) rock: - specifier: ^0.13.0 - version: 0.13.0(typescript@5.0.4) + specifier: ^0.14.1 + version: 0.14.1(typescript@7.0.2) serve: specifier: ^14.2.4 version: 14.2.5 typescript: - specifier: 5.0.4 - version: 5.0.4 - - apps/metro-example-nested-mini: - dependencies: - lodash: - specifier: 4.18.1 - version: 4.18.1 - react: - specifier: 19.1.0 - version: 19.1.0 - react-native: - specifier: 0.80.0 - version: 0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@5.0.4))(@types/react@19.2.14)(react@19.1.0) - devDependencies: - '@babel/core': - specifier: ^7.25.2 - version: 7.29.0 - '@babel/preset-env': - specifier: ^7.25.3 - version: 7.29.2(@babel/core@7.29.0) - '@babel/runtime': - specifier: ^7.25.0 - version: 7.28.2 - '@module-federation/metro': - specifier: workspace:* - version: link:../../packages/metro-core - '@module-federation/metro-plugin-rock': - specifier: workspace:* - version: link:../../packages/metro-plugin-rock - '@module-federation/runtime': - specifier: workspace:* - version: link:../../packages/runtime - '@react-native/babel-preset': - specifier: 0.80.0 - version: 0.80.0(@babel/core@7.29.0) - '@react-native/eslint-config': - specifier: 0.80.0 - version: 0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4) - '@react-native/metro-config': - specifier: 0.80.0 - version: 0.80.0(@babel/core@7.29.0) - '@react-native/typescript-config': - specifier: 0.80.0 - version: 0.80.0 - '@rock-js/platform-android': - specifier: ^0.13.0 - version: 0.13.0 - '@rock-js/platform-ios': - specifier: ^0.13.0 - version: 0.13.0(typescript@5.0.4) - '@rock-js/plugin-metro': - specifier: ^0.13.0 - version: 0.13.0 - '@rock-js/provider-github': - specifier: ^0.13.0 - version: 0.13.0 - '@types/jest': - specifier: ^29.5.13 - version: 29.5.13 - '@types/lodash': - specifier: ^4 - version: 4.17.24 - '@types/react': - specifier: ^19.1.0 - version: 19.2.14 - '@types/react-test-renderer': - specifier: ^19.1.0 - version: 19.1.0 - eslint: - specifier: ^8.57.0 - version: 8.57.1 - jest: - specifier: ^29.6.3 - version: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) - nodemon: - specifier: ^3.1.9 - version: 3.1.14 - prettier: - specifier: 2.8.8 - version: 2.8.8 - react-test-renderer: - specifier: 19.1.0 - version: 19.1.0(react@19.1.0) - rock: - specifier: ^0.13.0 - version: 0.13.0(typescript@5.0.4) - serve: - specifier: ^14.2.4 - version: 14.2.5 - typescript: - specifier: 5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 apps/modern-component-data-fetch/host: dependencies: @@ -1105,8 +1280,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../packages/modernjs-v3 @@ -1122,19 +1297,16 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -1153,9 +1325,15 @@ importers: rimraf: specifier: ~3.0.2 version: 3.0.2 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/modern-component-data-fetch/provider: dependencies: @@ -1163,8 +1341,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../packages/modernjs-v3 @@ -1180,19 +1358,16 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -1211,9 +1386,15 @@ importers: rimraf: specifier: ~3.0.2 version: 3.0.2 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/modern-component-data-fetch/provider-csr: devDependencies: @@ -1231,7 +1412,7 @@ importers: version: link:../../../packages/storybook-addon '@rsbuild/plugin-react': specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(webpack-hot-middleware@2.26.1) + version: 1.4.5(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(webpack-hot-middleware@2.26.1) '@rslib/core': specifier: ^0.9.0 version: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) @@ -1257,8 +1438,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../packages/modernjs-v3 @@ -1274,19 +1455,16 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -1305,9 +1483,15 @@ importers: rimraf: specifier: ~6.0.1 version: 6.0.1 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/modernjs-ssr/dynamic-remote: dependencies: @@ -1329,7 +1513,7 @@ importers: version: link:../../../packages/rsbuild-plugin '@rsbuild/plugin-react': specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(webpack-hot-middleware@2.26.1) + version: 1.4.5(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(webpack-hot-middleware@2.26.1) '@rslib/core': specifier: ^0.9.0 version: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) @@ -1346,8 +1530,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../packages/modernjs-v3 @@ -1363,19 +1547,16 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -1394,9 +1575,15 @@ importers: rimraf: specifier: ~6.0.1 version: 6.0.1 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/modernjs-ssr/host: dependencies: @@ -1404,8 +1591,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../packages/modernjs-v3 @@ -1421,19 +1608,16 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -1452,9 +1636,15 @@ importers: rimraf: specifier: ~6.0.1 version: 6.0.1 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/modernjs-ssr/nested-remote: dependencies: @@ -1462,8 +1652,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../packages/modernjs-v3 @@ -1479,19 +1669,16 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -1510,9 +1697,15 @@ importers: rimraf: specifier: ~6.0.1 version: 6.0.1 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/modernjs-ssr/remote: dependencies: @@ -1520,8 +1713,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../packages/modernjs-v3 @@ -1537,19 +1730,16 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -1568,9 +1758,15 @@ importers: rimraf: specifier: ~6.0.1 version: 6.0.1 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/modernjs-ssr/remote-new-version: dependencies: @@ -1578,8 +1774,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../packages/modernjs-v3 @@ -1595,19 +1791,16 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -1626,9 +1819,15 @@ importers: rimraf: specifier: ~6.0.1 version: 6.0.1 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/next-app-router/next-app-router-4000: dependencies: @@ -1652,7 +1851,7 @@ importers: version: 3.0.0-canary.1 next: specifier: 16.1.5 - version: 16.1.5(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.15.10(@swc/helpers@0.5.23))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.100.0)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) + version: 16.1.5(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.15.41(@swc/helpers@0.5.23))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.100.0)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) react: specifier: 19.0.0-rc-cd22717c-20241013 version: 19.0.0-rc-cd22717c-20241013 @@ -1670,14 +1869,14 @@ importers: version: 3.0.1(react@19.0.0-rc-cd22717c-20241013) vercel: specifier: 34.0.0 - version: 34.0.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(encoding@0.1.13) + version: 34.0.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(encoding@0.1.13) devDependencies: '@tailwindcss/forms': specifier: 0.5.7 - version: 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5))) + version: 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))) '@tailwindcss/typography': specifier: 0.5.12 - version: 0.5.12(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5))) + version: 0.5.12(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))) '@types/ms': specifier: 0.7.34 version: 0.7.34 @@ -1701,7 +1900,7 @@ importers: version: 9.26.0(jiti@2.6.1) eslint-config-next: specifier: 16.0.10 - version: 16.0.10(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) + version: 16.0.10(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) lint-staged: specifier: 15.2.2 version: 15.2.2 @@ -1716,10 +1915,10 @@ importers: version: 0.5.14(prettier@3.2.5) tailwindcss: specifier: 3.4.3 - version: 3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5)) + version: 3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 7.0.2 + version: 7.0.2 apps/next-app-router/next-app-router-4001: dependencies: @@ -1743,7 +1942,7 @@ importers: version: 3.0.0-canary.1 next: specifier: 16.1.5 - version: 16.1.5(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.15.10(@swc/helpers@0.5.23))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.100.0)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) + version: 16.1.5(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.15.41(@swc/helpers@0.5.23))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.100.0)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) react: specifier: 19.0.0-rc-cd22717c-20241013 version: 19.0.0-rc-cd22717c-20241013 @@ -1761,14 +1960,14 @@ importers: version: 3.0.1(react@19.0.0-rc-cd22717c-20241013) vercel: specifier: 34.0.0 - version: 34.0.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(encoding@0.1.13) + version: 34.0.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(encoding@0.1.13) devDependencies: '@tailwindcss/forms': specifier: 0.5.7 - version: 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5))) + version: 0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))) '@tailwindcss/typography': specifier: 0.5.12 - version: 0.5.12(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5))) + version: 0.5.12(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))) '@types/ms': specifier: 0.7.34 version: 0.7.34 @@ -1792,7 +1991,7 @@ importers: version: 9.26.0(jiti@2.6.1) eslint-config-next: specifier: 16.0.10 - version: 16.0.10(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) + version: 16.0.10(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) lint-staged: specifier: 15.2.2 version: 15.2.2 @@ -1807,10 +2006,10 @@ importers: version: 0.5.14(prettier@3.2.5) tailwindcss: specifier: 3.4.3 - version: 3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5)) + version: 3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 7.0.2 + version: 7.0.2 apps/node-dynamic-remote: dependencies: @@ -1870,8 +2069,8 @@ importers: version: link:../../packages/rsbuild-plugin devDependencies: '@rslib/core': - specifier: ^0.9.0 - version: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2) apps/react-ts-host: dependencies: @@ -1906,6 +2105,9 @@ importers: react-refresh: specifier: 0.14.2 version: 0.14.2 + typescript: + specifier: 7.0.2 + version: 7.0.2 apps/react-ts-nested-remote: dependencies: @@ -1931,6 +2133,9 @@ importers: react-refresh: specifier: 0.14.2 version: 0.14.2 + typescript: + specifier: 7.0.2 + version: 7.0.2 apps/react-ts-remote: dependencies: @@ -1956,6 +2161,9 @@ importers: react-refresh: specifier: 0.14.2 version: 0.14.2 + typescript: + specifier: 7.0.2 + version: 7.0.2 apps/reactRemoteUI: dependencies: @@ -2035,11 +2243,11 @@ importers: specifier: workspace:* version: link:../../../packages/rsbuild-plugin '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-react': - specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) '@types/react': specifier: ^18.2.79 version: 18.3.28 @@ -2048,7 +2256,7 @@ importers: version: 18.3.7(@types/react@18.3.28) tailwindcss: specifier: ^3.4.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@26.1.0)(typescript@5.9.3)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)) typescript: specifier: ^5.4.5 version: 5.9.3 @@ -2084,11 +2292,11 @@ importers: specifier: workspace:* version: link:../../../packages/rsbuild-plugin '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-react': - specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) '@types/react': specifier: ^18.2.79 version: 18.3.28 @@ -2097,10 +2305,10 @@ importers: version: 18.3.7(@types/react@18.3.28) tailwindcss: specifier: ^3.4.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) typescript: - specifier: ^5.4.5 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 apps/router-demo/router-host-vue3-2100: dependencies: @@ -2112,26 +2320,26 @@ importers: version: link:../../../packages/enhanced vue: specifier: ^3.4.19 - version: 3.5.30(typescript@5.9.3) + version: 3.5.30(typescript@7.0.2) vue-router: specifier: ^4.4.5 - version: 4.4.5(vue@3.5.30(typescript@5.9.3)) + version: 4.4.5(vue@3.5.30(typescript@7.0.2)) devDependencies: '@module-federation/rsbuild-plugin': specifier: workspace:* version: link:../../../packages/rsbuild-plugin '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-vue': - specifier: ^1.2.6 - version: 1.2.7(@rsbuild/core@1.7.3)(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.9.3)) + specifier: ^2.0.1 + version: 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)) tailwindcss: specifier: ^3.4.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) typescript: - specifier: ^5.4.2 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 apps/router-demo/router-remote1-2001: dependencies: @@ -2161,11 +2369,11 @@ importers: specifier: ^1.20.0 version: 1.24.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-react': - specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@0.7.5(@swc/helpers@0.5.23)) '@rsbuild/shared': specifier: ^0.7.10 version: 0.7.10(@swc/helpers@0.5.23) @@ -2179,8 +2387,8 @@ importers: specifier: ^5.3.3 version: 5.3.3 typescript: - specifier: ^5.4.5 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 apps/router-demo/router-remote2-2002: dependencies: @@ -2207,85 +2415,11 @@ importers: version: 6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 - '@rsbuild/plugin-react': - specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) - '@types/react': - specifier: ^18.2.79 - version: 18.3.28 - '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.7(@types/react@18.3.28) - typescript: - specifier: ^5.4.5 - version: 5.9.3 - - apps/router-demo/router-remote3-2003: - dependencies: - '@module-federation/bridge-vue3': - specifier: workspace:* - version: link:../../../packages/bridge/vue3-bridge - '@module-federation/rsbuild-plugin': - specifier: workspace:* - version: link:../../../packages/rsbuild-plugin - vue: - specifier: ^3.4.19 - version: 3.5.30(typescript@5.9.3) - vue-router: - specifier: ^4.4.5 - version: 4.4.5(vue@3.5.30(typescript@5.9.3)) - devDependencies: - '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 - '@rsbuild/plugin-vue': - specifier: ^1.2.6 - version: 1.2.7(@rsbuild/core@1.7.3)(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.9.3)) - '@vue/tsconfig': - specifier: ^0.5.1 - version: 0.5.1 - tailwindcss: - specifier: ^3.4.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)) - typescript: - specifier: ^5.4.2 - version: 5.9.3 - vue-tsc: - specifier: ^2.0.26 - version: 2.2.12(typescript@5.9.3) - - apps/router-demo/router-remote4-2004: - dependencies: - '@emotion/react': - specifier: ^11.11.4 - version: 11.14.0(@types/react@18.3.28)(react@18.3.1) - '@emotion/styled': - specifier: ^11.11.5 - version: 11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1))(@types/react@18.3.28)(react@18.3.1) - '@module-federation/bridge-react': - specifier: workspace:* - version: link:../../../packages/bridge/bridge-react - '@module-federation/rsbuild-plugin': - specifier: workspace:* - version: link:../../../packages/rsbuild-plugin - react: - specifier: 18.3.1 - version: 18.3.1 - react-dom: - specifier: 18.3.1 - version: 18.3.1(react@18.3.1) - react-router-dom: - specifier: 6.30.3 - version: 6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - devDependencies: - '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-react': - specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) '@types/react': specifier: ^18.2.79 version: 18.3.28 @@ -2293,8 +2427,82 @@ importers: specifier: ^18.3.0 version: 18.3.7(@types/react@18.3.28) typescript: - specifier: ^5.4.5 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 + + apps/router-demo/router-remote3-2003: + dependencies: + '@module-federation/bridge-vue3': + specifier: workspace:* + version: link:../../../packages/bridge/vue3-bridge + '@module-federation/rsbuild-plugin': + specifier: workspace:* + version: link:../../../packages/rsbuild-plugin + vue: + specifier: ^3.4.19 + version: 3.5.30(typescript@7.0.2) + vue-router: + specifier: ^4.4.5 + version: 4.4.5(vue@3.5.30(typescript@7.0.2)) + devDependencies: + '@rsbuild/core': + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@rsbuild/plugin-vue': + specifier: ^2.0.1 + version: 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)) + '@vue/tsconfig': + specifier: ^0.5.1 + version: 0.5.1 + tailwindcss: + specifier: ^3.4.3 + version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) + typescript: + specifier: 7.0.2 + version: 7.0.2 + vue-tsc: + specifier: ^2.0.26 + version: 2.2.12(typescript@7.0.2) + + apps/router-demo/router-remote4-2004: + dependencies: + '@emotion/react': + specifier: ^11.11.4 + version: 11.14.0(@types/react@18.3.28)(react@18.3.1) + '@emotion/styled': + specifier: ^11.11.5 + version: 11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1))(@types/react@18.3.28)(react@18.3.1) + '@module-federation/bridge-react': + specifier: workspace:* + version: link:../../../packages/bridge/bridge-react + '@module-federation/rsbuild-plugin': + specifier: workspace:* + version: link:../../../packages/rsbuild-plugin + react: + specifier: 18.3.1 + version: 18.3.1 + react-dom: + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: 6.30.3 + version: 6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + devDependencies: + '@rsbuild/core': + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@rsbuild/plugin-react': + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) + '@types/react': + specifier: ^18.2.79 + version: 18.3.28 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.7(@types/react@18.3.28) + typescript: + specifier: 7.0.2 + version: 7.0.2 apps/router-demo/router-remote5-2005: dependencies: @@ -2321,11 +2529,11 @@ importers: version: 6.30.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) devDependencies: '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-react': - specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) '@types/react': specifier: ^19.0.0 version: 19.2.14 @@ -2333,8 +2541,8 @@ importers: specifier: ^19.0.0 version: 19.2.3(@types/react@19.2.14) typescript: - specifier: ^5.4.5 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 apps/router-demo/router-remote6-2006: dependencies: @@ -2364,11 +2572,11 @@ importers: version: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-react': - specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) '@types/react': specifier: ^18.2.79 version: 18.3.28 @@ -2376,8 +2584,8 @@ importers: specifier: ^18.3.0 version: 18.3.7(@types/react@18.3.28) typescript: - specifier: ^5.4.5 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 apps/rslib-module: devDependencies: @@ -2391,11 +2599,11 @@ importers: specifier: workspace:* version: link:../../packages/storybook-addon '@rsbuild/plugin-react': - specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(webpack-hot-middleware@2.26.1) + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) '@rslib/core': - specifier: ^0.9.0 - version: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2) '@types/react': specifier: ^18.3.11 version: 18.3.28 @@ -2413,10 +2621,10 @@ importers: version: 8.6.17(prettier@3.8.1) storybook-addon-rslib: specifier: ^1.0.1 - version: 1.0.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rslib/core@0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3))(storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@5.9.3))(typescript@5.9.3) + version: 1.0.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2))(storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@7.0.2))(typescript@7.0.2) storybook-react-rsbuild: specifier: ^1.0.1 - version: 1.0.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4)) + version: 1.0.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4)) apps/runtime-demo/3005-runtime-host: dependencies: @@ -2545,11 +2753,11 @@ importers: version: 18.3.1(react@18.3.1) devDependencies: '@rsbuild/core': - specifier: 1.7.3 - version: 1.7.3 + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-react': - specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) apps/shared-tree-shaking/no-server/host: dependencies: @@ -2557,8 +2765,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/enhanced': specifier: workspace:* version: link:../../../../packages/enhanced @@ -2574,22 +2782,19 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@3.14.2)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@3.14.2)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/plugin-server': specifier: 2.68.0 - version: 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/server-runtime': specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.0.1(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -2612,14 +2817,17 @@ importers: specifier: ~3.0.2 version: 3.0.2 ts-node: - specifier: ~10.8.1 - version: 10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4) + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) tsconfig-paths: specifier: ~3.14.1 version: 3.14.2 typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/shared-tree-shaking/no-server/provider: dependencies: @@ -2627,8 +2835,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/enhanced': specifier: workspace:* version: link:../../../../packages/enhanced @@ -2644,22 +2852,19 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/plugin-server': specifier: 2.68.0 - version: 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -2681,9 +2886,15 @@ importers: serve: specifier: 14.2.5 version: 14.2.5 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/shared-tree-shaking/with-server/host: dependencies: @@ -2691,8 +2902,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../../packages/modernjs-v3 @@ -2708,25 +2919,22 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@3.14.2)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@3.14.2)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/plugin-server': specifier: 2.68.0 - version: 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/server-runtime': specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.0.1(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -2752,14 +2960,17 @@ importers: specifier: 14.2.5 version: 14.2.5 ts-node: - specifier: ~10.8.1 - version: 10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4) + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) tsconfig-paths: specifier: ~3.14.1 version: 3.14.2 typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/shared-tree-shaking/with-server/provider: dependencies: @@ -2767,8 +2978,8 @@ importers: specifier: 7.28.2 version: 7.28.2 '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@module-federation/modern-js-v3': specifier: workspace:* version: link:../../../../packages/modernjs-v3 @@ -2784,22 +2995,19 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.0.4) + version: 2.59.0(typescript@7.0.2) '@modern-js/plugin-server': specifier: 2.68.0 - version: 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/tsconfig': specifier: 3.0.1 version: 3.0.1 - '@types/jest': - specifier: ~29.5.0 - version: 29.5.13 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -2818,9 +3026,15 @@ importers: rimraf: specifier: ~3.0.2 version: 3.0.2 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ~5.0.4 - version: 5.0.4 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 apps/website-new: dependencies: @@ -2834,11 +3048,11 @@ importers: specifier: workspace:* version: link:../../packages/runtime '@rsbuild/plugin-sass': - specifier: ^1.5.3 - version: 1.5.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) + specifier: ^2.0.1 + version: 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) '@rspress/core': specifier: 2.0.14 - version: 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2) + version: 2.0.14(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2) framer-motion: specifier: ^10.0.0 version: 10.18.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -2853,7 +3067,7 @@ importers: version: 7.15.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tailwindcss: specifier: ^3.2.7 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) xgplayer: specifier: ^3.0.16 version: 3.0.23(core-js@3.49.0) @@ -2867,6 +3081,9 @@ importers: '@types/react-dom': specifier: ^19.1.5 version: 19.2.3(@types/react@19.2.14) + zephyr-rspress-plugin: + specifier: ^1.1.2 + version: 1.1.2(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@rspress/core@2.0.14(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)) packages/assemble-release-plan: dependencies: @@ -2898,9 +3115,6 @@ importers: '@module-federation/sdk': specifier: workspace:* version: link:../../sdk - lru-cache: - specifier: 10.4.3 - version: 10.4.3 devDependencies: '@module-federation/bridge-shared': specifier: workspace:* @@ -2911,6 +3125,9 @@ importers: '@module-federation/runtime-core': specifier: workspace:* version: link:../../runtime-core + '@rsbuild/plugin-react': + specifier: 2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) '@testing-library/jest-dom': specifier: 6.6.3 version: 6.6.3 @@ -2925,25 +3142,25 @@ importers: version: 18.3.0 '@vitejs/plugin-react': specifier: ^4.3.3 - version: 4.7.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)) + version: 4.7.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)) '@vitejs/plugin-vue': specifier: ^5.0.4 - version: 5.2.4(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3)) + version: 5.2.4(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2)) '@vitejs/plugin-vue-jsx': specifier: ^4.0.0 - version: 4.2.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3)) + version: 4.2.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2)) hono: specifier: 4.12.26 version: 4.12.26 + jsdom: + specifier: 20.0.3 + version: 20.0.3 react: specifier: 18.3.1 version: 18.3.1 react-dom: specifier: 18.3.1 version: 18.3.1(react@18.3.1) - react-error-boundary: - specifier: ^4.1.2 - version: 4.1.2(react@18.3.1) react-router: specifier: 7.16.0 version: 7.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -2951,39 +3168,24 @@ importers: specifier: 6.30.3 version: 6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) typescript: - specifier: ^5.2.2 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vite-plugin-dts: - specifier: ^4.3.0 - version: 4.5.4(@types/node@26.1.0)(rollup@4.59.0)(typescript@5.9.3)(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)) - vitest: - specifier: 1.6.0 - version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + version: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) packages/bridge/bridge-react-webpack-plugin: dependencies: '@module-federation/sdk': specifier: workspace:* version: link:../../sdk - '@types/semver': - specifier: 7.5.8 - version: 7.5.8 - semver: - specifier: 7.6.3 - version: 7.6.3 devDependencies: typescript: - specifier: ^5.2.2 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vite-plugin-dts: - specifier: ^4.3.0 - version: 4.5.4(@types/node@26.1.0)(rollup@4.59.0)(typescript@5.9.3)(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)) + version: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) packages/bridge/bridge-shared: devDependencies: @@ -2995,22 +3197,22 @@ importers: version: 18.3.28 '@vitejs/plugin-vue': specifier: ^5.0.4 - version: 5.2.4(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3)) + version: 5.2.4(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2)) '@vitejs/plugin-vue-jsx': specifier: ^4.0.0 - version: 4.2.0(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3)) + version: 4.2.0(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2)) typescript: - specifier: ^5.2.2 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vite-plugin-dts: - specifier: ^4.3.0 - version: 4.5.4(@types/node@20.19.5)(rollup@4.59.0)(typescript@5.9.3)(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)) + version: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vitest: + specifier: 1.6.0 + version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) vue-tsc: specifier: ^2.0.6 - version: 2.2.12(typescript@5.9.3) + version: 2.2.12(typescript@7.0.2) packages/bridge/vue3-bridge: dependencies: @@ -3024,33 +3226,39 @@ importers: specifier: workspace:* version: link:../../sdk devDependencies: + '@rsbuild/plugin-babel': + specifier: 2.0.1 + version: 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)) + '@rsbuild/plugin-vue-jsx': + specifier: 2.0.1 + version: 2.0.1(@babel/core@7.29.7)(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) '@types/react': specifier: ^18.3.11 version: 18.3.28 '@vitejs/plugin-vue': specifier: ^5.0.4 - version: 5.2.4(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3)) + version: 5.2.4(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2)) '@vitejs/plugin-vue-jsx': specifier: ^4.0.0 - version: 4.2.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3)) + version: 4.2.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2)) + '@vue/server-renderer': + specifier: ^3.5.30 + version: 3.5.30(vue@3.5.30(typescript@7.0.2)) typescript: - specifier: ^5.2.2 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vite-plugin-dts: - specifier: ^4.5.4 - version: 4.5.4(@types/node@26.1.0)(rollup@4.59.0)(typescript@5.9.3)(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)) + version: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) vue: specifier: ^3.5.30 - version: 3.5.30(typescript@5.9.3) + version: 3.5.30(typescript@7.0.2) vue-router: specifier: 4.4.5 - version: 4.4.5(vue@3.5.30(typescript@5.9.3)) + version: 4.4.5(vue@3.5.30(typescript@7.0.2)) vue-tsc: specifier: ^2.2.12 - version: 2.2.12(typescript@5.9.3) + version: 2.2.12(typescript@7.0.2) packages/chrome-devtools: dependencies: @@ -3059,7 +3267,7 @@ importers: version: 2.66.7(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@modern-js/runtime': specifier: 2.70.8 - version: 2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4) + version: 2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4) '@module-federation/observability-plugin': specifier: workspace:* version: link:../observability-plugin @@ -3093,19 +3301,19 @@ importers: devDependencies: '@modern-js-app/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.9.3) + version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 2.70.8 - version: 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@swc/core@1.15.10(@swc/helpers@0.5.19))(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@5.9.3))(tsconfig-paths@4.2.0)(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) + version: 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@swc/core@1.15.41(@swc/helpers@0.5.19))(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) '@modern-js/eslint-config': specifier: 2.59.0 - version: 2.59.0(typescript@5.9.3) + version: 2.59.0(typescript@7.0.2) '@modern-js/module-tools': specifier: 2.70.8 - version: 2.70.8(@types/node@20.19.5)(typescript@5.9.3) + version: 2.70.8(@types/node@20.19.5)(typescript@7.0.2) '@modern-js/storybook': specifier: 2.70.8 - version: 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + version: 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) '@modern-js/tsconfig': specifier: 2.70.8 version: 2.70.8 @@ -3121,9 +3329,6 @@ importers: '@types/dagre': specifier: ^0.7.52 version: 0.7.54 - '@types/jest': - specifier: ~29.2.4 - version: 29.2.6 '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -3149,11 +3354,11 @@ importers: specifier: ~6.0.1 version: 6.0.1 typescript: - specifier: 5.9.3 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 vitest: specifier: 1.2.2 - version: 1.2.2(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + version: 1.2.2(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) packages/cli: dependencies: @@ -3173,6 +3378,9 @@ importers: '@types/node': specifier: ^20.19.5 version: 20.19.5 + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/core: dependencies: @@ -3202,8 +3410,8 @@ importers: version: 1.2.3 devDependencies: '@rslib/core': - specifier: ^0.9.0 - version: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2) '@types/glob': specifier: 7.2.0 version: 7.2.0 @@ -3234,12 +3442,6 @@ importers: isomorphic-ws: specifier: 5.0.0 version: 5.0.0(ws@8.21.0) - node-schedule: - specifier: 2.1.1 - version: 2.1.1 - typescript: - specifier: ^4.9.0 || ^5.0.0 - version: 5.9.3 undici: specifier: 7.28.0 version: 7.28.0 @@ -3250,30 +3452,33 @@ importers: '@module-federation/runtime': specifier: workspace:* version: link:../runtime - '@types/node-schedule': - specifier: 2.1.7 - version: 2.1.7 + '@rstest/core': + specifier: ^0.10.6 + version: 0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(jsdom@20.0.3) '@types/ws': specifier: 8.5.12 version: 8.5.12 '@vue/tsconfig': specifier: ^0.7.0 - version: 0.7.0(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)) + version: 0.7.0(typescript@6.0.3)(vue@3.5.30(typescript@6.0.3)) directory-tree: specifier: 3.5.2 version: 3.5.2 rimraf: specifier: ~6.0.1 version: 6.0.1 - vitest: - specifier: 1.6.0 - version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + typescript: + specifier: 6.0.3 + version: 6.0.3 + typescript-7: + specifier: npm:typescript@7.0.2 + version: typescript@7.0.2 vue: specifier: ^3.5.13 - version: 3.5.30(typescript@5.9.3) + version: 3.5.30(typescript@6.0.3) vue-tsc: specifier: ^2.2.10 - version: 2.2.12(typescript@5.9.3) + version: 2.2.12(typescript@6.0.3) webpack: specifier: ^5.104.1 version: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) @@ -3319,15 +3524,9 @@ importers: tapable: specifier: 2.3.0 version: 2.3.0 - typescript: - specifier: ^4.9.0 || ^5.0.0 - version: 5.9.3 - upath: - specifier: 2.0.1 - version: 2.0.1 vue-tsc: specifier: '>=1.0.24' - version: 2.2.12(typescript@5.9.3) + version: 2.2.12(typescript@7.0.2) webpack: specifier: ^5.0.0 version: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) @@ -3347,6 +3546,9 @@ importers: terser: specifier: ^5.37.0 version: 5.46.1 + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/error-codes: {} @@ -3387,17 +3589,17 @@ importers: version: 7.0.1 devDependencies: '@rslib/core': - specifier: ^0.12.4 - version: 0.12.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2) + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/managers: dependencies: '@module-federation/sdk': specifier: workspace:* version: link:../sdk - empathic: - specifier: 2.0.0 - version: 2.0.0 devDependencies: webpack: specifier: 5.104.1 @@ -3415,6 +3617,9 @@ importers: specifier: workspace:* version: link:../sdk devDependencies: + typescript: + specifier: 7.0.2 + version: 7.0.2 webpack: specifier: ^5.0.0 version: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) @@ -3426,7 +3631,7 @@ importers: version: 7.29.0 '@expo/metro-runtime': specifier: ^5.0.4 - version: 5.0.4(react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@5.9.3))(@types/react@19.2.14)(react@19.1.0)) + version: 5.0.4(react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@6.0.3))(@types/react@19.2.14)(react@19.1.0)) '@module-federation/dts-plugin': specifier: workspace:* version: link:../dts-plugin @@ -3438,8 +3643,8 @@ importers: version: link:../sdk devDependencies: '@rslib/core': - specifier: ^0.10.0 - version: 0.10.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(typescript@5.9.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@6.0.3) '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -3447,11 +3652,11 @@ importers: specifier: ^19.1.0 version: 19.2.14 '@typescript-eslint/eslint-plugin': - specifier: 8.54.0 - version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/parser': - specifier: 8.54.0 - version: 8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) memfs: specifier: 4.46.0 version: 4.46.0 @@ -3475,13 +3680,13 @@ importers: version: 19.1.0 react-native: specifier: 0.80.0 - version: 0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@5.9.3))(@types/react@19.2.14)(react@19.1.0) + version: 0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@6.0.3))(@types/react@19.2.14)(react@19.1.0) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@20.19.5)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@6.0.3) typescript: - specifier: ^5.8.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/metro-plugin-rnc-cli: devDependencies: @@ -3489,11 +3694,14 @@ importers: specifier: workspace:* version: link:../metro-core '@typescript-eslint/eslint-plugin': - specifier: 8.54.0 - version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/parser': - specifier: 8.54.0 - version: 8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 packages/metro-plugin-rnef: devDependencies: @@ -3507,20 +3715,20 @@ importers: specifier: ^0.7.18 version: 0.7.28 '@rslib/core': - specifier: ^0.10.0 - version: 0.10.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(typescript@5.9.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@6.0.3) '@types/node': specifier: ^20.0.0 version: 20.19.5 '@typescript-eslint/eslint-plugin': - specifier: 8.54.0 - version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/parser': - specifier: 8.54.0 - version: 8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) typescript: - specifier: ^5.8.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/metro-plugin-rock: devDependencies: @@ -3534,26 +3742,23 @@ importers: specifier: ^0.13.0 version: 0.13.0 '@rslib/core': - specifier: ^0.10.0 - version: 0.10.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(typescript@5.9.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@6.0.3) '@types/node': specifier: ^20.0.0 version: 20.19.5 '@typescript-eslint/eslint-plugin': - specifier: 8.54.0 - version: 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/parser': - specifier: 8.54.0 - version: 8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) typescript: - specifier: ^5.8.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/modernjs: dependencies: - '@modern-js/utils': - specifier: 2.70.5 - version: 2.70.5 '@module-federation/bridge-react': specifier: workspace:* version: link:../bridge/bridge-react @@ -3581,49 +3786,34 @@ importers: jiti: specifier: 2.4.2 version: 2.4.2 - lru-cache: - specifier: 10.4.3 - version: 10.4.3 - node-fetch: - specifier: 3.3.0 - version: 3.3.0 react: specifier: '>=17' version: 19.2.7 react-dom: specifier: '>=17' version: 19.2.7(react@19.2.7) - react-error-boundary: - specifier: 4.1.2 - version: 4.1.2(react@19.2.7) react-router: specifier: ^7 version: 7.12.0(react-dom@19.2.7(react@19.2.7))(react@19.2.7) react-router-dom: specifier: ^4 || ^5 || ^6 || ^7 version: 6.30.2(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - typescript: - specifier: ^4.9.0 || ^5.0.0 - version: 5.9.3 vue-tsc: specifier: ^1.0.24 - version: 1.8.27(typescript@5.9.3) + version: 1.8.27(typescript@7.0.2) devDependencies: '@modern-js/app-tools': specifier: 2.70.5 - version: 2.70.5(@rspack/core@1.7.9(@swc/helpers@0.5.17))(@swc/core@1.15.10(@swc/helpers@0.5.17))(encoding@0.1.13)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.59.0)(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3))(tsconfig-paths@4.2.0)(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) + version: 2.70.5(@rspack/core@1.7.9(@swc/helpers@0.5.17))(@swc/core@1.15.41(@swc/helpers@0.5.17))(encoding@0.1.13)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.59.0)(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) '@modern-js/module-tools': specifier: 2.70.5 - version: 2.70.5(@types/node@26.1.0)(typescript@5.9.3) + version: 2.70.5(@types/node@26.1.0)(typescript@7.0.2) '@modern-js/runtime': specifier: 2.70.5 - version: 2.70.5(react-dom@19.2.7(react@19.2.7))(react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@19.2.7) + version: 2.70.5(react-dom@19.2.7(react@19.2.7))(react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@19.2.7) '@modern-js/server-runtime': specifier: 2.70.5 version: 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@modern-js/tsconfig': - specifier: 2.70.5 - version: 2.70.5 '@module-federation/manifest': specifier: workspace:* version: link:../manifest @@ -3634,17 +3824,20 @@ importers: specifier: 1.4.5 version: 1.4.5(@rsbuild/core@1.3.21)(webpack-hot-middleware@2.26.1) '@rslib/core': - specifier: 0.18.5 - version: 0.18.5(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) + specifier: 0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2) + '@rstest/core': + specifier: ^0.10.6 + version: 0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(jsdom@20.0.3) '@types/react': specifier: ^18.3.11 version: 18.3.28 '@types/react-dom': specifier: ^18.3.0 version: 18.3.7(@types/react@18.3.28) - vitest: - specifier: 1.6.0 - version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/modernjs-v3: dependencies: @@ -3675,58 +3868,46 @@ importers: jiti: specifier: 2.4.2 version: 2.4.2 - lru-cache: - specifier: 10.4.3 - version: 10.4.3 - node-fetch: - specifier: 3.3.0 - version: 3.3.0 - react-error-boundary: - specifier: 4.1.2 - version: 4.1.2(react@18.3.1) react-router: specifier: ^7 version: 7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-router-dom: specifier: ^4 || ^5 || ^6 || ^7 version: 6.30.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - typescript: - specifier: ^4.9.0 || ^5.0.0 - version: 5.9.3 vue-tsc: specifier: ^1.0.24 - version: 1.8.27(typescript@5.9.3) + version: 1.8.27(typescript@7.0.2) devDependencies: '@modern-js/app-tools': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.9.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)) '@modern-js/module-tools': specifier: 2.70.5 - version: 2.70.5(@types/node@26.1.0)(typescript@5.9.3) + version: 2.70.5(@types/node@26.1.0)(typescript@7.0.2) '@modern-js/runtime': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@18.3.1) + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@modern-js/server-runtime': - specifier: 3.0.1 - version: 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/tsconfig': - specifier: 3.0.1 - version: 3.0.1 + specifier: 3.5.0 + version: 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@module-federation/manifest': specifier: workspace:* version: link:../manifest '@rsbuild/core': - specifier: 2.0.0-beta.2 - version: 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-react': specifier: 1.4.5 - version: 1.4.5(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(webpack-hot-middleware@2.26.1) + version: 1.4.5(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(webpack-hot-middleware@2.26.1) '@rslib/core': - specifier: 0.18.5 - version: 0.18.5(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) + specifier: 0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2) '@rspack/core': specifier: 2.0.6 - version: 2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17) + version: 2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17) + '@rstest/core': + specifier: ^0.10.6 + version: 0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(jsdom@20.0.3) '@types/react': specifier: ^18.3.11 version: 18.3.28 @@ -3739,9 +3920,9 @@ importers: react-dom: specifier: ~18.3.1 version: 18.3.1(react@18.3.1) - vitest: - specifier: 1.6.0 - version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/native-federation-tests: dependencies: @@ -3753,23 +3934,26 @@ importers: version: 4.1.3 axios: specifier: 1.16.1 - version: 1.16.1 + version: 1.16.1(debug@4.4.3) rambda: specifier: ^9.2.1 version: 9.2.1 tsdown: specifier: 0.20.3 - version: 0.20.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(publint@0.3.18)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + version: 0.20.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(publint@0.3.18)(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)) unplugin: specifier: ^1.10.1 version: 1.10.1 devDependencies: + '@rstest/core': + specifier: ^0.10.6 + version: 0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(jsdom@20.0.3) directory-tree: specifier: 3.5.2 version: 3.5.2 - vitest: - specifier: 1.6.0 - version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + typescript: + specifier: 6.0.3 + version: 6.0.3 packages/native-federation-typescript: dependencies: @@ -3781,29 +3965,29 @@ importers: version: 4.1.3 axios: specifier: 1.16.1 - version: 1.16.1 + version: 1.16.1(debug@4.4.3) rambda: specifier: ^9.2.1 version: 9.2.1 - typescript: - specifier: ^4.9.0 || ^5.0.0 - version: 5.9.3 unplugin: specifier: ^1.10.1 version: 1.10.1 vue-tsc: specifier: ^1.0.24 - version: 1.8.27(typescript@5.9.3) + version: 1.8.27(typescript@6.0.3) devDependencies: + '@rstest/core': + specifier: ^0.10.6 + version: 0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(jsdom@20.0.3) directory-tree: specifier: 3.5.2 version: 3.5.2 + typescript: + specifier: 6.0.3 + version: 6.0.3 upath: specifier: 2.0.1 version: 2.0.1 - vitest: - specifier: 1.6.0 - version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) webpack: specifier: 5.104.1 version: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) @@ -3858,7 +4042,10 @@ importers: version: 18.3.7(@types/react@18.3.28) tsdown: specifier: 0.20.3 - version: 0.20.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(publint@0.3.18)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + version: 0.20.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(publint@0.3.18)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@6.0.3)) + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/node: dependencies: @@ -3883,6 +4070,10 @@ importers: webpack: specifier: ^5.40.0 version: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) + devDependencies: + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/observability-plugin: dependencies: @@ -3909,8 +4100,11 @@ importers: specifier: 0.52.2 version: 0.52.2 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 + typescript-compiler: + specifier: npm:typescript@6.0.3 + version: typescript@6.0.3 devDependencies: '@module-federation/rsbuild-plugin': specifier: workspace:* @@ -3923,7 +4117,7 @@ importers: version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) '@rslib/core': specifier: ^0.12.4 - version: 0.12.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(typescript@5.9.3) + version: 0.12.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(typescript@7.0.2) '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -3963,14 +4157,17 @@ importers: version: link:../sdk devDependencies: '@rsbuild/core': - specifier: 2.0.0-beta.2 - version: 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rslib/core': - specifier: ^0.12.4 - version: 0.12.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) - vitest: - specifier: 1.6.1 - version: 1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2) + '@rstest/core': + specifier: ^0.10.6 + version: 0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(jsdom@20.0.3) + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/rspack: dependencies: @@ -3995,16 +4192,16 @@ importers: '@module-federation/sdk': specifier: workspace:* version: link:../sdk - typescript: - specifier: ^4.9.0 || ^5.0.0 - version: 5.9.3 vue-tsc: specifier: '>=1.0.24' - version: 2.2.12(typescript@5.9.3) + version: 2.2.12(typescript@7.0.2) devDependencies: '@rspack/core': specifier: ^1.0.2 version: 1.3.9(@swc/helpers@0.5.23) + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/rspress-plugin: dependencies: @@ -4022,7 +4219,7 @@ importers: version: link:../sdk '@rspress/shared': specifier: 2.0.14 - version: 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + version: 2.0.14(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) cheerio: specifier: 1.0.0-rc.12 version: 1.0.0-rc.12 @@ -4034,11 +4231,11 @@ importers: version: 4.18.1 devDependencies: '@rslib/core': - specifier: ^0.9.2 - version: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2) '@rspress/core': specifier: 2.0.14 - version: 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@18.3.28)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2) + version: 2.0.14(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@18.3.28)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2) '@types/html-to-text': specifier: ^9.0.4 version: 9.0.4 @@ -4048,6 +4245,9 @@ importers: '@types/react': specifier: ^18.3.11 version: 18.3.28 + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/runtime: dependencies: @@ -4086,10 +4286,6 @@ importers: version: link:../webpack-bundler-runtime packages/sdk: - dependencies: - node-fetch: - specifier: ^2.7.0 || ^3.3.2 - version: 3.3.2 devDependencies: '@jest/globals': specifier: 29.7.0 @@ -4108,10 +4304,10 @@ importers: version: link:../sdk '@nx/react': specifier: '>= 16.0.0' - version: 22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(esbuild@0.25.5)(eslint@9.39.3(jiti@2.6.1))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.2))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1))(vue-tsc@2.2.12(typescript@5.9.3))(webpack-cli@5.1.4) + version: 22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(esbuild@0.25.5)(eslint@9.39.3(jiti@2.6.1))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0))(vue-tsc@2.2.12(typescript@7.0.2))(webpack-cli@5.1.4) '@nx/webpack': specifier: '>= 16.0.0' - version: 22.5.4(@babel/traverse@7.29.7)(@rspack/core@1.6.8(@swc/helpers@0.5.23))(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack-cli@5.1.4) + version: 22.5.4(@babel/traverse@7.29.7)(@rspack/core@1.6.8(@swc/helpers@0.5.23))(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(typescript@7.0.2)(vue-template-compiler@2.7.16)(webpack-cli@5.1.4) storybook: specifier: '>= 8.2.0' version: 8.6.17(prettier@3.8.1) @@ -4121,10 +4317,10 @@ importers: version: link:../utilities '@nx/module-federation': specifier: '>= 16.0.0' - version: 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(esbuild@0.25.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(webpack-cli@5.1.4) + version: 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(esbuild@0.25.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))(webpack-cli@5.1.4) '@rsbuild/core': - specifier: 2.0.0-beta.2 - version: 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + specifier: 2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) '@storybook/core': specifier: ^8.4.6 version: 8.6.14(prettier@3.8.1)(storybook@8.6.17(prettier@3.8.1)) @@ -4134,22 +4330,21 @@ importers: jest-fixed-jsdom: specifier: ^0.0.9 version: 0.0.9(jest-environment-jsdom@29.7.0) + typescript: + specifier: 7.0.2 + version: 7.0.2 webpack: specifier: 5.104.1 - version: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + version: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-virtual-modules: specifier: 0.6.2 version: 0.6.2 packages/third-party-dts-extractor: - dependencies: - empathic: - specifier: 2.0.0 - version: 2.0.0 - exsolve: - specifier: 1.0.8 - version: 1.0.8 devDependencies: + '@rstest/core': + specifier: ^0.10.6 + version: 0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(jsdom@20.0.3) '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -4161,10 +4356,10 @@ importers: version: 18.3.1 tsup: specifier: 7.3.0 - version: 7.3.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(postcss@8.5.15)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3))(typescript@5.9.3) - vitest: - specifier: 1.6.0 - version: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + version: 7.3.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(postcss@8.5.15)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(typescript@7.0.2) + typescript: + specifier: 7.0.2 + version: 7.0.2 packages/treeshake-frontend: dependencies: @@ -4272,7 +4467,7 @@ importers: version: 12.15.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) i18next: specifier: 25.7.3 - version: 25.7.3(typescript@5.6.3) + version: 25.7.3(typescript@6.0.3) i18next-browser-languagedetector: specifier: 8.2.0 version: 8.2.0 @@ -4299,7 +4494,7 @@ importers: version: 7.54.2(react@18.3.1) react-i18next: specifier: 16.5.0 - version: 16.5.0(i18next@25.7.3(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3) + version: 16.5.0(i18next@25.7.3(typescript@6.0.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@6.0.3) react-resizable-panels: specifier: 2.1.7 version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -4317,7 +4512,7 @@ importers: version: 2.6.0 tailwindcss-animate: specifier: 1.0.7 - version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@6.0.3))) vaul: specifier: 1.1.2 version: 1.1.2(@types/react-dom@18.3.7(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -4335,14 +4530,14 @@ importers: specifier: ^1.57.0 version: 1.57.0 '@rsbuild/core': - specifier: ^1.6.15 - version: 1.7.3 + specifier: ^2.1.4 + version: 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-react': - specifier: ^1.4.2 - version: 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) + specifier: ^2.1.0 + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17)) '@rslib/core': - specifier: ^0.12.4 - version: 0.12.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(typescript@5.6.3) + specifier: ^0.23.2 + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@6.0.3) '@rstest/core': specifier: ^0.6.5 version: 0.6.9(jsdom@20.0.3) @@ -4381,13 +4576,13 @@ importers: version: 8.5.10 tailwindcss: specifier: v3.4.16 - version: 3.4.16(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@5.6.3)) + version: 3.4.16(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@6.0.3)) typescript: - specifier: ~5.6.2 - version: 5.6.3 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: specifier: ^8.15.0 - version: 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3) + version: 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) packages/treeshake-server: dependencies: @@ -4442,16 +4637,16 @@ importers: version: 13.1.3 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: 7.0.2 + version: 7.0.2 packages/typescript: dependencies: axios: specifier: 1.16.1 - version: 1.16.1 + version: 1.16.1(debug@4.4.3) next: specifier: '*' version: 16.1.5(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.100.0)(webpack-cli@5.1.4) @@ -4467,15 +4662,16 @@ importers: tapable: specifier: 2.3.0 version: 2.3.0 - typescript: - specifier: '*' - version: 5.9.3 vue-tsc: specifier: ^1.0.24 - version: 1.8.27(typescript@5.9.3) + version: 1.8.27(typescript@6.0.3) webpack: specifier: ^5.75.0 version: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) + devDependencies: + typescript: + specifier: 6.0.3 + version: 6.0.3 packages/utilities: dependencies: @@ -4792,6 +4988,10 @@ packages: resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.29.7': + resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} @@ -4806,6 +5006,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.29.7': + resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.28.5': resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} engines: {node: '>=6.9.0'} @@ -4829,6 +5035,10 @@ packages: resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.29.7': + resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} engines: {node: '>=6.9.0'} @@ -4853,6 +5063,10 @@ packages: resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.29.7': + resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.10.4': resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} @@ -4860,6 +5074,10 @@ packages: resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.27.1': resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} engines: {node: '>=6.9.0'} @@ -4872,10 +5090,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.29.7': + resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -4971,6 +5199,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-decorators@7.29.7': + resolution: {integrity: sha512-EtU0Hi3GvrTqD56xKmZvV/uCXK2ZbwVNPNLAquVItcAZpUhkXwWlo3Fmj0c2LxgSf2I8IDULeAepwNP1OefLXg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-export-default-from@7.27.1': resolution: {integrity: sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==} engines: {node: '>=6.9.0'} @@ -5028,6 +5262,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-decorators@7.29.7': + resolution: {integrity: sha512-9MTTLbF39X6sqM92JPEsoI7++26hjZvzkxKZy64aMhWLH2mPkJ/Q3AV4QLmls3R14FpSpkOwQQfUh962JGQxxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-dynamic-import@7.8.3': resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: @@ -5078,6 +5318,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.29.7': + resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -5132,6 +5378,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.29.7': + resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -5174,6 +5426,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-properties@7.29.7': + resolution: {integrity: sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-static-block@7.28.6': resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} engines: {node: '>=6.9.0'} @@ -5294,6 +5552,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.29.7': + resolution: {integrity: sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.29.0': resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} engines: {node: '>=6.9.0'} @@ -5480,6 +5744,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.29.7': + resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-escapes@7.27.1': resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} engines: {node: '>=6.9.0'} @@ -5533,6 +5803,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@7.29.7': + resolution: {integrity: sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/register@7.28.6': resolution: {integrity: sha512-pgcbbEl/dWQYb6L6Yew6F94rdwygfuv+vJ/tXfwIOYAfPB6TNWpXUMEtEq3YuTeHRdvMIhvz13bkT9CNaS+wqA==} engines: {node: '>=6.9.0'} @@ -5934,12 +6210,18 @@ packages: '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + '@emnapi/core@1.11.1': + resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} + '@emnapi/core@1.9.0': resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==} '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + '@emnapi/runtime@1.11.1': + resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} + '@emnapi/runtime@1.9.0': resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} @@ -5949,6 +6231,9 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@emnapi/wasi-threads@1.2.2': + resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -7465,6 +7750,10 @@ packages: resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/pattern@30.4.0': + resolution: {integrity: sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/reporters@29.7.0': resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7482,6 +7771,10 @@ packages: resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/schemas@30.4.1': + resolution: {integrity: sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/source-map@29.6.3': resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7506,6 +7799,10 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/types@30.4.1': + resolution: {integrity: sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -7570,48 +7867,96 @@ packages: peerDependencies: tslib: '2' + '@jsonjoy.com/fs-core@4.58.0': + resolution: {integrity: sha512-K82t5e9w3NYQeIcw129f0SCH/Rn8m8GKPJBYge4W/sA4hhE5h7I8YQhs2HRpUQyUpi+qk7I9tbp1/b87eCM/PA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/fs-fsa@4.56.11': resolution: {integrity: sha512-ZYlF3XbMayyp97xEN8ZvYutU99PCHjM64mMZvnCseXkCJXJDVLAwlF8Q/7q/xiWQRsv3pQBj1WXHd9eEyYcaCQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/fs-fsa@4.58.0': + resolution: {integrity: sha512-1/FdsxQao9pBo2OJLEfKrujHdVyGxXvDTT7EtNh9fvp3MK42nB+xHh1EJr2L1c0a05eCMyFCYZPID3KjX9EAng==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/fs-node-builtins@4.56.11': resolution: {integrity: sha512-CNmt3a0zMCIhniFLXtzPWuUxXFU+U+2VyQiIrgt/rRVeEJNrMQUABaRbVxR0Ouw1LyR9RjaEkPM6nYpED+y43A==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/fs-node-builtins@4.58.0': + resolution: {integrity: sha512-M1sAhjR1de4CL7ivQAFYqJRDVE3krwVOmfcAgG5YQJiDWxYfcGDMLUNcx0p/+Rcs31/Inh1m9aUDk/0jfR1T5w==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/fs-node-to-fsa@4.56.11': resolution: {integrity: sha512-5OzGdvJDgZVo+xXWEYo72u81zpOWlxlbG4d4nL+hSiW+LKlua/dldNgPrpWxtvhgyntmdFQad2UTxFyGjJAGhA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/fs-node-to-fsa@4.58.0': + resolution: {integrity: sha512-erivc39YHoqWY0U8q5IlEcn238AUkIBByMvM0w7OO/FU9hEH3P7oNkPpYWIMpEMncbePk672GiC8ZSwYc2m7fg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/fs-node-utils@4.56.11': resolution: {integrity: sha512-JADOZFDA3wRfsuxkT0+MYc4F9hJO2PYDaY66kRTG6NqGX3+bqmKu66YFYAbII/tEmQWPZeHoClUB23rtQM9UPg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/fs-node-utils@4.58.0': + resolution: {integrity: sha512-IrsAFMFBFQXjpS/u3jOY4DMIbRDg94KxzadddDlJv9xodxZ6/Y3ji91uMwrRqklyu+KoquO/Vxihf3/QrQiuOA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/fs-node@4.56.11': resolution: {integrity: sha512-D65YrnP6wRuZyEWoSFnBJSr5zARVpVBGctnhie4rCsMuGXNzX7IHKaOt85/Aj7SSoG1N2+/xlNjWmkLvZ2H3Tg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/fs-node@4.58.0': + resolution: {integrity: sha512-bOqoLND5b5xyM+1zro63kClBnB05HTIX0RzOSHy4kAjfnec+CTdV742H/nsDmbkDaaDLHMmYqxAw09NQ8yVIrQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/fs-print@4.56.11': resolution: {integrity: sha512-rnaKRgCRIn8JGTjxhS0JPE38YM3Pj/H7SW4/tglhIPbfKEkky7dpPayNKV2qy25SZSL15oFVgH/62dMZ/z7cyA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/fs-print@4.58.0': + resolution: {integrity: sha512-jbAYbeuzPXIzvWOuuFMoQgrWaQU5hBqevloebLaiAimoBYLjrjiLPdOaaLHepWcZzOq/7Us8x2F22YlsTPbwmw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/fs-snapshot@4.56.11': resolution: {integrity: sha512-IIldPX+cIRQuUol9fQzSS3hqyECxVpYMJQMqdU3dCKZFRzEl1rkIkw4P6y7Oh493sI7YdxZlKr/yWdzEWZ1wGQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' + '@jsonjoy.com/fs-snapshot@4.58.0': + resolution: {integrity: sha512-DkozLuMgzfpWZO8o8tSlFJIpUQauG7/sgjH0JrqsbLkmjdoInn/o1W7P9FZQSZlR9lOjDgSXs2MfE/sAUi2JRQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + '@jsonjoy.com/json-pack@1.21.0': resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} engines: {node: '>=10.0'} @@ -7836,8 +8181,8 @@ packages: tsconfig-paths: optional: true - '@modern-js/app-tools@3.0.1': - resolution: {integrity: sha512-xgib0+2kkm9Kx7iVl8SuAa8izSYWWyVrArZ1t53NKfqWQm2cQZf5nf9+MAVSsRoG9Hleob9nUK8/pM4rAAPSyA==} + '@modern-js/app-tools@3.5.0': + resolution: {integrity: sha512-Ng7+8zUwa5+QUEYtJUVg0tLPlqq/CFyfTgFy6OgQ8LWhcu1bLPY0SB/C2HEkUTYl6eaIpilZ0fUiYThsTX2yDg==} engines: {node: '>=20'} hasBin: true peerDependencies: @@ -7879,8 +8224,8 @@ packages: '@modern-js/babel-preset@2.70.8': resolution: {integrity: sha512-duxCARvviTlKSGbc2FuO/M+lDa16tLXblO51AYHVgzsdWwf+/Qwpou73OCRCrb2NcHLJ4RonWIbcqVscGEoV2w==} - '@modern-js/builder@3.0.1': - resolution: {integrity: sha512-5hSa5zi4tmD2rQ8tqaj03ROBf1eRgZGH1oKNG+4flwerMgp8qlVkXfmJmxG7PO2JuphhObA8/GFNEPVD0ey9uw==} + '@modern-js/builder@3.5.0': + resolution: {integrity: sha512-jEs1V11oGYINY8Z1CQjb2AxB410rDbTHRbsA+ou9EPss0Zh6mzB1quWVHh2kmkb3yPL4BSALIoKZG1tw8p1zHA==} '@modern-js/core@2.70.5': resolution: {integrity: sha512-8NV/AXg/iqm9HtnBJvZyhDm9Dku0R+6CnGTFAAgSV4Sh/vdunshuxEKYYH5rqWl3gbChsjhwmShvpHhlwyz3rg==} @@ -7897,11 +8242,8 @@ packages: '@modern-js/flight-server-transform-plugin@2.70.8': resolution: {integrity: sha512-f5XC6kaWB0BU2Lt/CptYiFDXeQGl9LEJy97QO0eabdRS2ibwpkE0Hd3gpzMAzqGI/llOeV3S1wafxGJYOqVdrQ==} - '@modern-js/flight-server-transform-plugin@3.0.1': - resolution: {integrity: sha512-KPGekiKpMm6mMjR3xEULH3wGWfA72wIpBJuHPCDW/I3umU2dghOpPxkGL3LyMcHCTuCKds3VJGsJGbAWf8fwWg==} - - '@modern-js/i18n-utils@3.0.1': - resolution: {integrity: sha512-hmdFk6Zi3Pe+gtnjvuRbXa960brmZtaQCDWvSw7Kndfadrhqd6AOFMzHYRPeKDbB/4sllytswWXvhnexJg0gJg==} + '@modern-js/i18n-utils@3.5.0': + resolution: {integrity: sha512-fPvJ8NZ7YxrEGqpkaEYgnHH5vEUotUQhnZWvQrnIpX8ZC9t65xR5BOArpqs/qgSotx+X9kLxsF2TnZg20l12xw==} '@modern-js/module-tools@2.70.5': resolution: {integrity: sha512-9kjguLIrgdE52gRxhk/WNnhRVsJlC6WnyLbUGtr+pR1d1/MiALvqBQ2Zpv/irXESNSqC/htxXY6e1D5ekt600g==} @@ -7947,8 +8289,8 @@ packages: peerDependencies: react: '>=17.0.0' - '@modern-js/plugin-data-loader@3.0.1': - resolution: {integrity: sha512-WGqsuVWOm6xbG+zM6KNTz1OvmluhfurtqHkoH+QLEmn5kUwMkzuXuqHyWM2ZKjngjgpB/bPhEp98DUEFvep8eA==} + '@modern-js/plugin-data-loader@3.5.0': + resolution: {integrity: sha512-RUnBERamzt0IBLYMOhLCdnIkLD3+zzPbxFrTtGllgcww8XSx5FwNGvcMuMh1xXNx46wwIzyZUoiyDOJ+yIDTpA==} engines: {node: '>=20'} peerDependencies: react: '>=17.0.2' @@ -7984,6 +8326,9 @@ packages: '@modern-js/plugin@3.0.1': resolution: {integrity: sha512-9qzUcXK8nfdPdG4isnx3b+r6rBiM2xecRPttwXxQ0sFDXtidbSfWFsoW86KdkMJKQ28vgdrfJBLJfyl2b7zp3w==} + '@modern-js/plugin@3.5.0': + resolution: {integrity: sha512-VdD+qp8KtAvMpWeDG0omp9p5bAZoSlEHHDOVXje09fsNdqDCvFxQRnu3wKwELGO4rxVmCtWSmlazqArUbTV+zg==} + '@modern-js/prod-server@2.70.5': resolution: {integrity: sha512-YMemt6lxIw45F9RdEHyb2i/0QfRKJEzcbPGxdGP+TPZ88fOrjqqUvoNgLJ4JsvrsN0OIKrIKPIjSxHAkRM9Zkw==} engines: {node: '>=16.2.0'} @@ -7992,8 +8337,8 @@ packages: resolution: {integrity: sha512-EgYyjIe4MRAIs7CNd8qCtQrpTC9WbrSrai9Fu9IiGniItshVQmp+d07joPiIoAob9Xd8UhGPt7KBW3pUcGLpEg==} engines: {node: '>=16.2.0'} - '@modern-js/prod-server@3.0.1': - resolution: {integrity: sha512-bKPi2LD3b2usU0cwIBLODyiONykq+f76LLv3+Sk4PI+K7PlMO5RjlJT4YmHzsWKXhUNRigqNZFoBV9V7rELmhw==} + '@modern-js/prod-server@3.5.0': + resolution: {integrity: sha512-g/3/dMtckJHfXjNuFMKEhtlTL1cYXX7kwaSWcbCmbMJ6S+984X2iJ2X7TAUo1s/Yd+TOSuMp8FBCPkEMesQETg==} engines: {node: '>=20'} '@modern-js/render@2.70.5': @@ -8010,12 +8355,12 @@ packages: react-dom: '>=17.0.0' react-server-dom-webpack: ^19.2.4 - '@modern-js/render@3.0.1': - resolution: {integrity: sha512-0PETtP5NuqFWuEc5IMSz6fYF7OMCwbIi5hG0SSToqQdVQUVJIxxi+Of7cCbiY4RqKGN9u/Fijz88DSDF8Lp4kw==} + '@modern-js/render@3.5.0': + resolution: {integrity: sha512-qqVN+NVsLSGx+RrKu8lhr9oT5hw3l1rBT6L7f0VWWdrA52JTX72TI34ySvrNOCe1KjqZvtID6i9gAlSNAb0Wfg==} peerDependencies: react: '>=17.0.2' react-dom: '>=17.0.2' - react-server-dom-webpack: ^19.2.3 + react-server-dom-rspack: 0.0.2 '@modern-js/rsbuild-plugin-esbuild@2.70.5': resolution: {integrity: sha512-v/vu2hcbOWaaO/NudMd1z17d3iP8Yxpy3Wewa10ocH80Jn33aUTy+5GSBFxcxumTdOEBKOjergy3HU8k5gPK1g==} @@ -8067,6 +8412,17 @@ packages: react-dom: optional: true + '@modern-js/runtime-utils@3.5.0': + resolution: {integrity: sha512-8sL6MZEaj153LDSZweRsPf+q7kwUphbGjYqdQ1SrRvRUVb94OAHI+XfqkaOKwzK+ekg8gQux91i0oRIDlvnAjw==} + peerDependencies: + react: '>=17.0.2' + react-dom: '>=17.0.2' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + '@modern-js/runtime@2.70.5': resolution: {integrity: sha512-SM/4jRUFaFSC6fjfLmz2mO4H+84nunj6A45cGffA0y3/oZQSc14iRwx+PLmqHWJl8tuks3gn7QK/D+BaIdAhSw==} engines: {node: '>=14.17.6'} @@ -8081,8 +8437,8 @@ packages: react: '>=17' react-dom: '>=17' - '@modern-js/runtime@3.0.1': - resolution: {integrity: sha512-/6Hj1x2ynK9e/abmLgle7GbPHZgJ4+eMfRPp469Nnj9dnqul4IE8Q/z/qVlSR4G9v9J+YUyCXxSpAh6UgaMP9w==} + '@modern-js/runtime@3.5.0': + resolution: {integrity: sha512-Yb7LqJWmTLz8Mgok5kQsQF10RExAQctYzgDzfxWXeWMjydScYe6RvNyJqKyK7b+Eofu9Wjz9P6h4mxZb+RVVdA==} engines: {node: '>=20'} peerDependencies: react: '>=17.0.2' @@ -8100,12 +8456,19 @@ packages: resolution: {integrity: sha512-HxW9p5V4XAlgLxMoh6fzqsZiciPFgcb6zK+NHWA13YzH+kqJx9uqL0RYAesoMDWRkkYFuzhxSR0eBRgSu4//IA==} engines: {node: '>=20'} + '@modern-js/server-core@3.5.0': + resolution: {integrity: sha512-Nn14A0z7yC37lk503xmxVUr5kXIyHdk6THJE/ftGAIozaOqpF5dTO4Km1hmCbYJUpOrhorW5tHL4rIjXmS/PFQ==} + engines: {node: '>=20'} + '@modern-js/server-runtime@2.70.5': resolution: {integrity: sha512-zJ6zU8SvxFiVQQkQg9+cSZNMYQhlxdVi0siaGwTeE4bEbviq/CsSiJST7GHH53ycS2qBZwLY8vE5XPSH0dZIhg==} '@modern-js/server-runtime@3.0.1': resolution: {integrity: sha512-hnB/djifreBxISA/L8Kb503Nknk2p56Nc3THxu4ufdMzuBAAWn4bGQ0qqhzODNMWRRmJdjLQEhJ4/U37I4O1jg==} + '@modern-js/server-runtime@3.5.0': + resolution: {integrity: sha512-84YOdfZUmI1gHMMJtJLQfnVLZPCfhYd+zFooDSki+4OhrzryPS/q8vL4rqKyaz6msuoi0e32ugxFzLrqHgTP4Q==} + '@modern-js/server-utils@2.68.0': resolution: {integrity: sha512-VkHJm4IoxXOCYPoUMVq8userl9mI4FIqXokZUxVCoc6PAUgPj+axkWEPLpRsCuKRPQdn08MEHd3vI72wJ+P3Zg==} @@ -8115,8 +8478,8 @@ packages: '@modern-js/server-utils@2.70.8': resolution: {integrity: sha512-RGfz0ZIONg/3+QmQv22an3UwvC/YnHLufAiKerur75DZpIrUQQogLz1LksA2ihMtmwqRHVHiY32dKhHTs4jJ5g==} - '@modern-js/server-utils@3.0.1': - resolution: {integrity: sha512-Z+rrXC7kzDfplX80WpZpJ6vfaz2S/h567ynM91KW7sjCRPDz1gawvZLUnCz/ZkpFYnpf1w50gcwyUj5TQx9i9Q==} + '@modern-js/server-utils@3.5.0': + resolution: {integrity: sha512-HIJEXi4c6vMvEKZ6tXcwVv5YXlQX2jpNJ7wnYHAbFYRXXJ7qp6HwlnhFtxVVNCntSt0hpVSR2UFSkG61Xtg2Gw==} '@modern-js/server@2.70.5': resolution: {integrity: sha512-LKhtQwxeEbtkCON4APH2YWNNM61DvYvyia+6JHm/RSgURuA2IIM9WSXUr10EHg3XKI3VMABnuRo7UBOHubtYKA==} @@ -8146,10 +8509,10 @@ packages: tsconfig-paths: optional: true - '@modern-js/server@3.0.1': - resolution: {integrity: sha512-uDAWoWCnnuNvkpfoLtds3OL224xzs5I5/9BcKUnwy+xeRqTJaRV/zwgibOBpFpKTv6pOHBbHcC6YbN0np8ONsA==} + '@modern-js/server@3.5.0': + resolution: {integrity: sha512-ILaZCx9uZkd8+Bj58w84N1cSw+KHnOkMP/agTvAz6Rx/RTW3hhZUfEY3M5bIb9ToSlc27r6pAzTcIAhNwfycKg==} peerDependencies: - devcert: ^1.2.2 + devcert: ^1.2.3 ts-node: ^10.9.2 tsconfig-paths: '>= 3.0.0 || >= 4.0.0' peerDependenciesMeta: @@ -8226,9 +8589,6 @@ packages: '@swc/helpers': optional: true - '@modern-js/tsconfig@2.70.5': - resolution: {integrity: sha512-Yv6EKtgkEG5+YmTxRed/zbp6Rieq0yN9ucsc09ZrE/p+wsQ8RUK9ILumHIX8hjz9Dy1b6+rqC7ZfuC0VHe/lLw==} - '@modern-js/tsconfig@2.70.8': resolution: {integrity: sha512-Z+lVMxO1z1E5ZuoWD6tnOxdDBMyqzrg4THTJnje2tgr9BB+7zF9cAzFTchdv3Bjm/IdQLq/pr1lpM6LnGq/GuQ==} @@ -8247,6 +8607,9 @@ packages: '@modern-js/types@3.0.1': resolution: {integrity: sha512-yF9hFXOvJybEpeHN32y4yR4jLVK0Sa6RVjf0juH44vlAQsPTXjmDWIv+vFCOn3o33Amd+F2lgTncLGA9BTJl0Q==} + '@modern-js/types@3.5.0': + resolution: {integrity: sha512-4DvHMk7kk5eo8460nAoUCRmnt9oa6T7y3PdH07TfPti5tqSYvmqYFCE83HDEvtBU+XlezBdpTtzvRyVJAOO5vQ==} + '@modern-js/uni-builder@2.70.5': resolution: {integrity: sha512-EpMo5EaDriASTwzZHrjidAAPBD5HtNrPl/3J3u+YWbsv5C2de9juuyjhgakY+EFv2NuiCXRj7/3QmDeUVgH1CA==} @@ -8273,6 +8636,22 @@ packages: react-dom: optional: true + '@modern-js/utils@3.5.0': + resolution: {integrity: sha512-a3ilaEb5FArJ5VzvnQx6j0MrmoSFqBrNdJiuTB/jYYhYGYZXET5MlW3hDUG5RkeaDev9VvRwmgI79rQxlVNvKw==} + peerDependencies: + react: ^19.2.7 + react-dom: ^19.2.7 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@module-federation/automatic-vendor-federation@1.2.1': + resolution: {integrity: sha512-73wxkXM7pbRZ6GGM90JP5IPTPvY3fvrhQyTVdMCUx85cQRWqnbzbibcsz3pkOMOeXyYAO4tXXsG13yNaEEGhJA==} + peerDependencies: + webpack: ^5.0.0-beta.16 + '@module-federation/bridge-react-webpack-plugin@0.21.6': resolution: {integrity: sha512-lJMmdhD4VKVkeg8RHb+Jwe6Ou9zKVgjtb1inEURDG/sSS2ksdZA8pVKLYbRPRbdmjr193Y8gJfqFbI2dqoyc/g==} @@ -8324,6 +8703,15 @@ packages: vue-tsc: optional: true + '@module-federation/dts-plugin@2.7.0': + resolution: {integrity: sha512-mVKeGUf/7iqRMAFfikhsr2zXtA70WuzJdS1bPqqoeLQNRGXBLDjedcDG26RpIlsvuZcmIOqgN5Z6qw7Bh/HZUg==} + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 || ^6.0.0 + vue-tsc: '>=1.0.24' + peerDependenciesMeta: + vue-tsc: + optional: true + '@module-federation/enhanced@0.21.6': resolution: {integrity: sha512-8PFQxtmXc6ukBC4CqGIoc96M2Ly9WVwCPu4Ffvt+K/SB6rGbeFeZoYAwREV1zGNMJ5v5ly6+AHIEOBxNuSnzSg==} hasBin: true @@ -8360,9 +8748,6 @@ packages: '@module-federation/error-codes@0.14.3': resolution: {integrity: sha512-sBJ3XKU9g5Up31jFeXPFsD8AgORV7TLO/cCSMuRewSfgYbG/3vSKLJmfHrO6+PvjZSb9VyV2UaF02ojktW65vw==} - '@module-federation/error-codes@0.17.1': - resolution: {integrity: sha512-n6Elm4qKSjwAPxLUGtwnl7qt4y1dxB8OpSgVvXBIzqI9p27a3ZXshLPLnumlpPg1Qudaj8sLnSnFtt9yGpt5yQ==} - '@module-federation/error-codes@0.18.0': resolution: {integrity: sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==} @@ -8378,8 +8763,11 @@ packages: '@module-federation/error-codes@2.2.2': resolution: {integrity: sha512-e+dxUrqrdRbhfvg8TyG0UQBQAjYZ8pI2b3HWfESLXqWi3xCiivZSnqsPN+zychrQ1hDZAdCheZ9zT91zhMrkxw==} - '@module-federation/error-codes@2.6.0': - resolution: {integrity: sha512-J9opjWJJZ1JI/9EvNZF8Ps1VMHS9EsH/i0UjCkQQxFVYZxSDBX1CFunvc7awac4cY//LqJUfqBbfoQPhCfKKKw==} + '@module-federation/error-codes@2.7.0': + resolution: {integrity: sha512-syToF3H77IbBhJ7auGMCIb5ZDmJ5tvaqSeEvncJrOCq7JBT96F4UDlQDyNh6kCVznvYqqHsPeEMrfI9b5/Omlg==} + + '@module-federation/error-codes@2.8.0': + resolution: {integrity: sha512-Gaog9904EmxYOQV0hli3XQ7jXeFaADfh5bnBtTCtbZ37Qd/Sz9kQfd+gYQRyIj7RGmkv9DPiN/SsmrTMrTymKw==} '@module-federation/inject-external-runtime-core-plugin@0.21.6': resolution: {integrity: sha512-DJQne7NQ988AVi3QB8byn12FkNb+C2lBeU1NRf8/WbL0gmHsr6kW8hiEJCm8LYaURwtsQqtsEV7i+8+51qjSmQ==} @@ -8397,6 +8785,9 @@ packages: '@module-federation/managers@2.2.2': resolution: {integrity: sha512-YuUCUdjwXGsFEWC6YwNjX+XC8V4i47549ljXarHBhCVIYIluigivpG5ZDq/kyoZQoeR9UnUwzMiKzt79y0f7Dg==} + '@module-federation/managers@2.7.0': + resolution: {integrity: sha512-cWohiUvSrY6dIfhwsRABmEWfvJiAD5u/gxU7XRk7bx5nYPj7qn5gvYWJtvLNWzenluHZR6sib+03QMlyo+MYKQ==} + '@module-federation/manifest@0.21.6': resolution: {integrity: sha512-yg93+I1qjRs5B5hOSvjbjmIoI2z3th8/yst9sfwvx4UDOG1acsE3HHMyPN0GdoIGwplC/KAnU5NmUz4tREUTGQ==} @@ -8441,9 +8832,6 @@ packages: '@module-federation/runtime-core@0.14.3': resolution: {integrity: sha512-xMFQXflLVW/AJTWb4soAFP+LB4XuhE7ryiLIX8oTyUoBBgV6U2OPghnFljPjeXbud72O08NYlQ1qsHw1kN/V8Q==} - '@module-federation/runtime-core@0.17.1': - resolution: {integrity: sha512-LCtIFuKgWPQ3E+13OyrVpuTPOWBMI/Ggwsq1Q874YeT8Px28b8tJRCj09DjyRFyhpSPyV/uG80T6iXPAUoLIfQ==} - '@module-federation/runtime-core@0.18.0': resolution: {integrity: sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ==} @@ -8459,8 +8847,11 @@ packages: '@module-federation/runtime-core@2.2.2': resolution: {integrity: sha512-JL+W6Yol1+CPJ662H1SEQLwxfBU2kCKhUcYrMr/X6j0qFWB8x5PBSpQbwAIcJiKfflHgBaJZypmCKmq8qRv3Aw==} - '@module-federation/runtime-core@2.6.0': - resolution: {integrity: sha512-9sL7Yj3H3COZI9JpK/J4hmJUBkIJdmowkj6phHuFiy5Hm5bHiE5U+9WBbR9KqTdyNhAVSL9FeprBW5/Io6i59A==} + '@module-federation/runtime-core@2.7.0': + resolution: {integrity: sha512-5ROZLVIeV9YnWO2RwCwSHcy6sh48yclErO/2GZ2Xe8lFubPrFirgU8pbwBjZw+All0ZzN44BGS4ECRMVFzVcpg==} + + '@module-federation/runtime-core@2.8.0': + resolution: {integrity: sha512-Tf98+epGGiPSHqmQHuXa2uXZMMvjGf1IqJDR1/FpXfmobv5ECN0mGZCjUHGNSyxvoDyXKIkKwJu7IwEoh0ouQA==} '@module-federation/runtime-tools@0.1.6': resolution: {integrity: sha512-7ILVnzMIa0Dlc0Blck5tVZG1tnk1MmLnuZpLOMpbdW+zl+N6wdMjjHMjEZFCUAJh2E5XJ3BREwfX8Ets0nIkLg==} @@ -8471,9 +8862,6 @@ packages: '@module-federation/runtime-tools@0.14.3': resolution: {integrity: sha512-QBETX7iMYXdSa3JtqFlYU+YkpymxETZqyIIRiqg0gW+XGpH3jgU68yjrme2NBJp7URQi/CFZG8KWtfClk0Pjgw==} - '@module-federation/runtime-tools@0.17.1': - resolution: {integrity: sha512-4kr6zTFFwGywJx6whBtxsc84V+COAuuBpEdEbPZN//YLXhNB0iz2IGsy9r9wDl+06h84bD+3dQ05l9euRLgXzQ==} - '@module-federation/runtime-tools@0.18.0': resolution: {integrity: sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA==} @@ -8492,8 +8880,8 @@ packages: '@module-federation/runtime-tools@2.2.2': resolution: {integrity: sha512-UnlKvy/zrbLTLItrI1tORiS6wdp5pYOCrR2LtDEbjJ2r+avzANSf2vJ7lAIT4SX5Pi9WwY5RhE4Y/BOwhAj4DA==} - '@module-federation/runtime-tools@2.6.0': - resolution: {integrity: sha512-LfvihAhAWWNWlAL9zM+UDVDSSuLE2ZU0ATJ6dcbJuLstYbHYfUqq2e6IyU8TKLPXIib0VAWqPrT44TPam1VJ7g==} + '@module-federation/runtime-tools@2.8.0': + resolution: {integrity: sha512-3yOqjdSHXxX4HA3GhlXg3hghGAXW2RJUsnwXCcik2/lTxOHizKI8f3RM+GGCKPxDVqtw43IShe3tA12jNL5A/A==} '@module-federation/runtime@0.1.6': resolution: {integrity: sha512-nj6a+yJ+QxmcE89qmrTl4lphBIoAds0PFPVGnqLRWflwAP88jrCcrrTqRhARegkFDL+wE9AE04+h6jzlbIfMKg==} @@ -8504,9 +8892,6 @@ packages: '@module-federation/runtime@0.14.3': resolution: {integrity: sha512-7ZHpa3teUDVhraYdxQGkfGHzPbjna4LtwbpudgzAxSLLFxLDNanaxCuSeIgSM9c+8sVUNC9kvzUgJEZB0krPJw==} - '@module-federation/runtime@0.17.1': - resolution: {integrity: sha512-vKEN32MvUbpeuB/s6UXfkHDZ9N5jFyDDJnj83UTJ8n4N1jHIJu9VZ6Yi4/Ac8cfdvU8UIK9bIbfVXWbUYZUDsw==} - '@module-federation/runtime@0.18.0': resolution: {integrity: sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw==} @@ -8525,8 +8910,11 @@ packages: '@module-federation/runtime@2.2.2': resolution: {integrity: sha512-zV6kbAUU1tQZr4KrZXQhzQP3WTb7oMRlIFw4UBhbh2JhAKGYS5CNc/n7+RV+mDxIs//qVmVzdSpJtTOMBLeFCw==} - '@module-federation/runtime@2.6.0': - resolution: {integrity: sha512-Y8KgL70RDxD8cCtGWGlGkt+TSDleIjdGmS27gnllibQAIgG/vHhPD11r8kd92x44k4dqtMIntzreOphGICl92g==} + '@module-federation/runtime@2.7.0': + resolution: {integrity: sha512-UtLozKKNvhT0D1+F0MEWsAmddJ39ItKW15E22LVMAwXmYZRSnzIvJQ2Y6kQ4LwhWABsw/GRSpUDex5OfhpSQPw==} + + '@module-federation/runtime@2.8.0': + resolution: {integrity: sha512-cGtUBQ1/TVy7KrXy6xPgy3FEmOGyIYkBA2T4iGH3ZH5PNPPTmqN9jF2AfneTSOj0RtBr7Pxq3CUt81E/UCvK1A==} '@module-federation/sdk@0.1.6': resolution: {integrity: sha512-qifXpyYLM7abUeEOIfv0oTkguZgRZuwh89YOAYIZJlkP6QbRG7DJMQvtM8X2yHXm9PTk0IYNnOJH0vNQCo6auQ==} @@ -8537,9 +8925,6 @@ packages: '@module-federation/sdk@0.14.3': resolution: {integrity: sha512-THJZMfbXpqjQOLblCQ8jjcBFFXsGRJwUWE9l/Q4SmuCSKMgAwie7yLT0qSGrHmyBYrsUjAuy+xNB4nfKP0pnGw==} - '@module-federation/sdk@0.17.1': - resolution: {integrity: sha512-nlUcN6UTEi+3HWF+k8wPy7gH0yUOmCT+xNatihkIVR9REAnr7BUvHFGlPJmx7WEbLPL46+zJUbtQHvLzXwFhng==} - '@module-federation/sdk@0.18.0': resolution: {integrity: sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A==} @@ -8563,13 +8948,11 @@ packages: node-fetch: optional: true - '@module-federation/sdk@2.6.0': - resolution: {integrity: sha512-Z3HT1uDciMrvz2at3sw6TJbAK9Fl7RmoC/8iqO35HDtQMQJ1qSsMIAjnsiCpAC0D4nAm6PIqgSqPWRO/WYgo0Q==} - peerDependencies: - node-fetch: ^2.7.0 || ^3.3.2 - peerDependenciesMeta: - node-fetch: - optional: true + '@module-federation/sdk@2.7.0': + resolution: {integrity: sha512-piiLEjaIdjbNq8E11Di6vsfryhcdN/+sBCH6NjG7gSU2VHHoHEayZQWWL7VVdS6rVjexF9McLhPTSrl0adUU+A==} + + '@module-federation/sdk@2.8.0': + resolution: {integrity: sha512-yBP+9+0Z8nlvKEXAZS3AsQVy7bFbZf8eMivGk4q4ZdwG3TsLMlsPjb1dQb2i7gcAG6ux9y2LWLkj/0LVk74cnQ==} '@module-federation/third-party-dts-extractor@0.21.6': resolution: {integrity: sha512-Il6x4hLsvCgZNk1DFwuMBNeoxD1BsZ5AW2BI/nUgu0k5FiAvfcz1OFawRFEHtaM/kVrCsymMOW7pCao90DaX3A==} @@ -8577,6 +8960,15 @@ packages: '@module-federation/third-party-dts-extractor@2.2.2': resolution: {integrity: sha512-BWKLXQ2Me+zw6y2yhk8/URuVcyYFP1aJZlTqb7KpYeSJEp2z5jk8sZX2R42GraAGAwSe9IwcW6Y4Za/eoxt/tA==} + '@module-federation/third-party-dts-extractor@2.7.0': + resolution: {integrity: sha512-hZJKkngQ4hwe0U+vrT3KOsU11qoHCQK0wB4x1bXoTgpTfV9j5NSuddOyRmwbvXpir9bDWh3xy7ghqsx3mFf3kA==} + + '@module-federation/vite@1.16.16': + resolution: {integrity: sha512-XtgLXydgUblSzIJaRljVrg5xyogABEUUnTsSXX11W/q55XR+mnpKInsGY3uBgX09GbjSW5DNHWal+1zKt2d7uw==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + '@module-federation/webpack-bundler-runtime@0.1.6': resolution: {integrity: sha512-K5WhKZ4RVNaMEtfHsd/9CNCgGKB0ipbm/tgweNNeC11mEuBTNxJ09Y630vg3WPkKv9vfMCuXg2p2Dk+Q/KWTSA==} @@ -8586,9 +8978,6 @@ packages: '@module-federation/webpack-bundler-runtime@0.14.3': resolution: {integrity: sha512-hIyJFu34P7bY2NeMIUHAS/mYUHEY71VTAsN0A0AqEJFSVPszheopu9VdXq0VDLrP9KQfuXT8SDxeYeJXyj0mgA==} - '@module-federation/webpack-bundler-runtime@0.17.1': - resolution: {integrity: sha512-Swspdgf4PzcbvS9SNKFlBzfq8h/Qxwqjq/xRSqw1pqAZWondZQzwTTqPXhgrg0bFlz7qWjBS/6a8KuH/gRvGaQ==} - '@module-federation/webpack-bundler-runtime@0.18.0': resolution: {integrity: sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==} @@ -8607,8 +8996,8 @@ packages: '@module-federation/webpack-bundler-runtime@2.2.2': resolution: {integrity: sha512-g5UEn5APnNYvajwWQ0oc3Um+HO1z/jBcBkLSKAoSOCI6XxQk5eAV1PNDuDehAgJEtJw5yFD25kZPW3X7m39y7g==} - '@module-federation/webpack-bundler-runtime@2.6.0': - resolution: {integrity: sha512-JjuWOU3ktwDjBWhM4WCoeiErcUxcB5YwUnVjyTMfNJHC3+DMhG4m6ziCl5EJrCv+KaEQdcvXmxLliNZidBZGQg==} + '@module-federation/webpack-bundler-runtime@2.8.0': + resolution: {integrity: sha512-82fDy9v+7qV5fiN8TKVhOdrxhmAZnUIX/IKivYX5ulCt8aoOzVFTiwm/P1GQUDD8z6dqR48xgJdZdf0548Mc9w==} '@monaco-editor/loader@1.7.0': resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} @@ -8819,6 +9208,12 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@ndelangen/get-tarball@3.0.9': resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} @@ -10976,24 +11371,33 @@ packages: '@rock-js/config@0.13.0': resolution: {integrity: sha512-yzmk0R+agdVVWkVXKR1lfATpNQyI1snIUIVYgjcsm4LvTIsxunruhFxpWW+fxhlP4hqnJ91IzhE1/HExgF187w==} - '@rock-js/platform-android@0.13.0': - resolution: {integrity: sha512-+HEy78Yxpx+iBQaCq5NE+cvNehko5FjKARnIfCDKmFekGXAgX9HEtkOhQPmtSxEhAE0a32T4n33quI8pitck2g==} + '@rock-js/config@0.14.1': + resolution: {integrity: sha512-F3P01IcOywtGViZixp//1a30b+WX25B5TuAwSZfyJvYLQBtFlt5U/kiPBhiZEGqp5i9EsNEua0TiLzhJYXedFQ==} + + '@rock-js/platform-android@0.14.1': + resolution: {integrity: sha512-OZN4IgU7ksZyPYu0LZ5X5jOyY+JiPBMvCeaU0o0dWRL+c6gQHDLDvQwiB5BT5qE+l/un/W75NuoA7xT+sCFb/g==} - '@rock-js/platform-apple-helpers@0.13.0': - resolution: {integrity: sha512-QDYNdmyVE4QsKpDP9KauQO+GIwo9vstb/tF9ZkTjSpg1jl8tebVHrTO8eFc8OKlZK4JQHEyuHL7NAPdbDrqnGg==} + '@rock-js/platform-apple-helpers@0.14.1': + resolution: {integrity: sha512-9zsynIwTseZJ5zuuajgVTv2SQoXh8Z21C/HON7kRWwzif7eTodTdLJYJfA9Q9KzMPInubhAGqGA43ChblFrFCg==} - '@rock-js/platform-ios@0.13.0': - resolution: {integrity: sha512-56pZ0RM0vEbhAJ+ugcbF/4CQYZg6er+CQI4DPtVgbYxdySO2Dcq2SbNUnEG6cqFS+5hOlkYJXT6BGVUEcHhhuQ==} + '@rock-js/platform-ios@0.14.1': + resolution: {integrity: sha512-76Ph46I8/K/KSFZR1iM8yxvfewmTzw0jw/G/rVZM8wYE0qdw9bQq0zt0hXzZPDSVR5reysnhwrx3anjIPv4Q8Q==} - '@rock-js/plugin-metro@0.13.0': - resolution: {integrity: sha512-LH3BCIAU4ZugUFHyAujKjuWeULxmtQ2KraO+knQTmLrLmd2yzgmbPG0a2jwb21CxgFUR1MjzG8AB65dOjI7dJQ==} + '@rock-js/plugin-metro@0.14.1': + resolution: {integrity: sha512-miQbu/aLPTflFE8pTJ7/dZ5TRhcFHHErTEB2ZpmFjz0qTMQv0GyJK6srpzWh39psA9RyzkPr77MhIqKi8Hrvgw==} '@rock-js/provider-github@0.13.0': resolution: {integrity: sha512-D38pEsgnr2GOlbOT/9Fey9zYyUej5aF7keRWBOSCvPpGMA4xLmdjUdXuvikv+fWFkN3i0xo1mglncxIOOBrbWA==} + '@rock-js/provider-github@0.14.1': + resolution: {integrity: sha512-2djLrbJgpxE0H5jvpo01b1eBQUWX0PbOoG8AIxHBaiaUYSBf/6Dar7m24mdiWXIrZJEQ96GJhYVdl/60ma2JsQ==} + '@rock-js/tools@0.13.0': resolution: {integrity: sha512-HtBP+sD2iyiXbZwlAC7aXKUfLHM5Gj5PBa+v3bpDtvvqXkE8MbIq2XjLvsRo0wY/RR0kJjBAH198qr0owbY8Fw==} + '@rock-js/tools@0.14.1': + resolution: {integrity: sha512-5NDwsJi4D21uAPRYQWm3PnWKuh19TZ5yduKdvmTVO+x6Yu/Dg/tXDdq7hD/ZZOPFWtJmlvNDdUzGbsHomQJvbw==} + '@rolldown/binding-android-arm64@1.0.0-rc.3': resolution: {integrity: sha512-0T1k9FinuBZ/t7rZ8jN6OpUKPnUjNdYHoj/cESWrQ3ZraAJ4OMm6z7QjSfCxqj8mOp9kTKc1zHK3kGz5vMu+nQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -11402,11 +11806,6 @@ packages: engines: {node: '>=16.10.0'} hasBin: true - '@rsbuild/core@1.4.16': - resolution: {integrity: sha512-t2684BBkqAh+dw/v00ySQc5P5SMul4a428L1qHwwIWFPAZ0bnus/hw/wI8nM2AQpMcKfJPkdyVSGm4ueCYPtPw==} - engines: {node: '>=16.10.0'} - hasBin: true - '@rsbuild/core@1.5.17': resolution: {integrity: sha512-tHa4puv+pEooQvSewu/K5sm270nkVPcP07Ioz1c+fbFCrFpiZWV5XumgznilS80097glUrieN+9xTbIHGXjThQ==} engines: {node: '>=18.12.0'} @@ -11432,8 +11831,8 @@ packages: core-js: optional: true - '@rsbuild/core@2.0.14': - resolution: {integrity: sha512-SSPer6vM+v82CV6JXIOzyyT++A1ECgsVvvUuveD5rfGxX/W58vWGnB+zWcYbMfYOjTntD+9ve6QGGh6kBjPx6A==} + '@rsbuild/core@2.0.15': + resolution: {integrity: sha512-O8vmMhZu1YImO6jOqt/K/vlJSvkq7UtSq5YM1DIlcEd9LW8Gf6/dkQ1B2KPI6F+hSMFBnTTTumdcIowSLCw97g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -11442,12 +11841,24 @@ packages: core-js: optional: true - '@rsbuild/plugin-assets-retry@1.5.1': - resolution: {integrity: sha512-AJR8xkwtGlYJDGDJdZ8PrluWyoDjXY8lpJFqL8X9QTUrBD3IRYamFRFAPim8azmEnF9dlnT74dmgqXsxHXThLQ==} + '@rsbuild/core@2.1.0': + resolution: {integrity: sha512-BNOp22xLGA+L8zvZ12Qg/3zhFhWFZCvZ7OcQRoGLSTw1pB9q/XDLK+WGey9SFPOtsRD3CRPXheXApxwvneH6uA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true peerDependencies: - '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + core-js: '>= 3.0.0' peerDependenciesMeta: - '@rsbuild/core': + core-js: + optional: true + + '@rsbuild/core@2.1.4': + resolution: {integrity: sha512-kdubx/qB6tXduCdqaW78OULLZJ3ludpuA4mOkDko18THsI1rUy9U34DsaDSnotE8GAvTeme+FX9MnqLEUlg8kQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + core-js: '>= 3.0.0' + peerDependenciesMeta: + core-js: optional: true '@rsbuild/plugin-assets-retry@1.5.2': @@ -11458,6 +11869,14 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-assets-retry@2.0.1': + resolution: {integrity: sha512-eI3VA+Wi8dNnPkpuQPDnqJXTtOVdGNa2JtjbNWg2raJ9si/M4/MPealfZHvkRK2XlrM0L1Mw3EeGqS3bufn0Yg==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-babel@1.0.1-rc.4': resolution: {integrity: sha512-jPNNZ2XnVnHZnIt+kZ7LftBkLgydrYEoCodoFWy9sKoRJbzy5Q23WgZPePS0QfClZw56n54lYDUC/3V6HdFaBQ==} peerDependencies: @@ -11473,6 +11892,22 @@ packages: peerDependencies: '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + '@rsbuild/plugin-babel@1.2.1': + resolution: {integrity: sha512-6Zad7Ff/RUNc91AtftemJcJ1wcZRGOiwuJy349qlLJl9F++oRYwUhx+MxLSpNnVeIywWx2mKdZZBtD1hLqfj9w==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rsbuild/plugin-babel@2.0.1': + resolution: {integrity: sha512-PkKWwQDm6Ll3emj9vrq4DYpob9XYonsgkuo4o9lY3ySNmK18+bKUCzPQkqrsMaJi+h1wDwFH/XnMGlIRS//dCw==} + peerDependencies: + '@rsbuild/core': ^2.0.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-check-syntax@1.6.1': resolution: {integrity: sha512-26xtEYN0QjZYoyt0lWnvIztBWjEZJvcfw7MN4f5B4SpNggmnF7F7aNPrgkY3EccXVFx1VGQBhnCkBV//OoS07Q==} peerDependencies: @@ -11481,6 +11916,14 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-check-syntax@2.0.0': + resolution: {integrity: sha512-rNc7J1DTwR+t2N/scaCsnKe1mCGc6SEky0gV+gaoLC+CP/VO6e9SxMxv0dHQJgNEzO0i+xQ9O1cU9p+dCo9xSQ==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-css-minimizer@1.1.1': resolution: {integrity: sha512-cTEAqiCR8X6iJ4+r0Gl0bC+bW8MUAqqXNyVBu7N0DrEatr9gsqo4e3x2d8gCyOnOUNsF6W35LvDWREsCCzDRHg==} peerDependencies: @@ -11489,11 +11932,27 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-css-minimizer@2.0.1': + resolution: {integrity: sha512-QZUEBLTYXwtCUVziK3XHaPv+3wLLGvO6X27sIwt12eyuIMSA5WbeuLD9y1hwsXu27jZBofP6s/mdV5H5bA/FOg==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-less@1.6.0': resolution: {integrity: sha512-LridpH/ai10eyN7jlEPfmNiv8Kc9+eDggZkXIMYXcccpdQsc+ZvuuOWMugbyyiZ2j56uCuhvS4fG6UYL8QmL6A==} peerDependencies: '@rsbuild/core': ^1.3.0 || ^2.0.0-0 + '@rsbuild/plugin-less@1.6.4': + resolution: {integrity: sha512-cDlxi6Ne0K8ZK4PrTy/wSli5RyGkT8I55j/e0R7ZBvriHM7JL0MaA28ceiKAqy70Hy/eZ/btHTB35Sl1FAor1g==} + peerDependencies: + '@rsbuild/core': ^1.3.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-node-polyfill@1.4.3': resolution: {integrity: sha512-VzJCgv5UxI0JZDC/UhAQ6Bzu3JaY7LPw18S6yrJFtvfF3Qn3SCLJILspeV1VolbfvfdfomhmdQkcFgliczLcSw==} peerDependencies: @@ -11518,11 +11977,6 @@ packages: '@rsbuild/core': optional: true - '@rsbuild/plugin-react@1.4.4': - resolution: {integrity: sha512-tWOjyV4ZpUgwKT7sXHtGs24EYeyfY/THpTraLgikUUk0yLDeNHlDT5XPHOfLIbLIB3L8763AfgASFyhiqFw76g==} - peerDependencies: - '@rsbuild/core': ^1.0.0 || ^2.0.0-0 - '@rsbuild/plugin-react@1.4.5': resolution: {integrity: sha512-eS2sXCedgGA/7bLu8yVtn48eE/GyPbXx4Q7OcutB01IQ1D2y8WSMBys4nwfrecy19utvw4NPn4gYDy52316+vg==} peerDependencies: @@ -11536,6 +11990,14 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-react@2.1.0': + resolution: {integrity: sha512-RQTIAWB/CwPjoWt9iAl+8HixeQVgZ7kEIBrWPCixfITyHdiD84h0YpUTpEUuz6kGHw1KXT9mHZ3Rwy6WG7aRDA==} + peerDependencies: + '@rsbuild/core': ^2.0.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-rem@1.0.5': resolution: {integrity: sha512-5I1J7WiNGjblk3LbzJ46ZMbCCUVoTPvmAGj254auKM5lzOt/i78jDgN70UtVJswWY9AAEND6E4MLMDTWjlV5yQ==} peerDependencies: @@ -11544,6 +12006,14 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-rem@1.0.6': + resolution: {integrity: sha512-4PCzvGNFGBM2HDhNqOw8Z6uofePB3hokmfBrm/PkJU0wIqH5P+JIeh51/HlTiODXoita0/ei1VSqfwwo9+E8Ig==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-sass@1.5.0': resolution: {integrity: sha512-m9eLjN8KQe43obVAevy8ivbcAVWJkChxooWev9m+7JZYSDPW1Fr3Zmc5ZBkroQUy8NxGTj/eWc434TmtzL2Mrw==} peerDependencies: @@ -11557,6 +12027,14 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-sass@2.0.1': + resolution: {integrity: sha512-BZRpVTZW+za+sv84nYYdIjR7XwVqyS8+1wAha/7BvQ1igdzlmT6xPd6h4jTWfNzdHuzIHZsuWY7kPS/ybzcndA==} + peerDependencies: + '@rsbuild/core': ^2.0.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-source-build@1.0.4': resolution: {integrity: sha512-t0oKUYpx4lhKW0JssIeRiji5X+uT6n2VYxpDRroE4cnudMVtKbLG1qGtnZeMK4VRc4qwxth1hjX2cHuQaALqYA==} peerDependencies: @@ -11565,6 +12043,14 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-source-build@1.0.6': + resolution: {integrity: sha512-F7m5qE/VzrUTq1ZsEmithuc+yxA52Bw4+6gkxprg+RpKqgBTLuv2sSQmpaJSYZrcLlkdCWLE4bwLY0zBT6MRAA==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-styled-components@1.6.0': resolution: {integrity: sha512-yK4Yh+zqSPfNISks/kh1cks4UaYgWeB/Pb06TgVwuQdJ8zdR0yw6X6ac4UA1tFehfzpf/8cih9O3O12JaON4fw==} peerDependencies: @@ -11578,6 +12064,14 @@ packages: peerDependencies: '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + '@rsbuild/plugin-svgr@2.0.3': + resolution: {integrity: sha512-k2dMtyscm6mZI/OuWPtrQ4AL2y2SphM3cYkLD9qQlFd8FufnCOP9bmgI4fisZNhyWsdN0WSmlkosGJxqltRf1A==} + peerDependencies: + '@rsbuild/core': ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-toml@1.1.2': resolution: {integrity: sha512-nhRtk8JNFlA582B5FflU00NAGvErjMOdr1elQSdJQuvQ3Ztq2Gz1IFaj9w4mC/LtNVUKzwRe0F7gs2W0wqzz5A==} peerDependencies: @@ -11602,6 +12096,17 @@ packages: '@rsbuild/core': optional: true + '@rsbuild/plugin-type-check@1.5.0': + resolution: {integrity: sha512-UgIwUG3ttTj6mtusutfQhhVy3CcZwTsseYJ/vH2/7q4cEOfypbO3CFUCnV7EtovFaIHukLu+H9JD/ocwmKEpQA==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + '@typescript/native-preview': ^7.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@typescript/native-preview': + optional: true + '@rsbuild/plugin-typed-css-modules@1.2.1': resolution: {integrity: sha512-PTiL6t7T5Z7riPAhyJcmYgwhWl/pNjQqpHYMojO3qKnNcFZJicUbFzKkwXCPTqNl9oCWKJAWNtyXAjQQyoINNw==} peerDependencies: @@ -11610,14 +12115,38 @@ packages: '@rsbuild/core': optional: true - '@rsbuild/plugin-vue@1.2.7': - resolution: {integrity: sha512-epDSChyeR4U+gwq2vfTARV9hbfrmdFTdmhBWIcv7MFyckn3yxJhweJVwdx14Wf3d8s1p4XZzDpqmphDyvX443Q==} + '@rsbuild/plugin-typed-css-modules@1.2.3': + resolution: {integrity: sha512-J/3VkCa+mFkffGWLhie+QkPlWBfnS6k/25m2b/AGkzSET5co44OjjD09F445eY3gm+uwaLgabdB7NpiUiAsl8g==} peerDependencies: '@rsbuild/core': ^1.0.0 || ^2.0.0-0 peerDependenciesMeta: '@rsbuild/core': optional: true + '@rsbuild/plugin-vue-jsx@2.0.1': + resolution: {integrity: sha512-PEGr2cUJkkU9w9YGhiwSQy2pNw4D6elSi2ZWxmsFLdZQ1u0DEojaMxNV/BZZMvFMeRSAs0DMAHQM5lRdhGam1w==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rsbuild/plugin-vue@1.2.9': + resolution: {integrity: sha512-ufD4eufkZZlNK3iY5NWg57AMK9qrTFmHycDkSTfRTua4Qczf7q9s7rCLYVfVv2w36cOXJIewM+376jD0zaQShQ==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rsbuild/plugin-vue@2.0.1': + resolution: {integrity: sha512-JbQ/e4J7lICXC6JpovJS9PHlIT0Vl1XngTni3HuVkXF82Q18k8nd0RmRDVRDFcb/mvqij5ITwZsez9h3DoYcQQ==} + peerDependencies: + '@rsbuild/core': ^2.0.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + '@rsbuild/plugin-yaml@1.0.4': resolution: {integrity: sha512-AqVvUjcPzE7RNnVB78+PF41KFOnKmVAP2JY+AuMMRKv4Nm8D/mk/1Rv2b9Rw8F9678j8xR8ikDtes5hFI6/R/A==} peerDependencies: @@ -11634,19 +12163,6 @@ packages: peerDependencies: '@rsbuild/core': ^1.3.21 - '@rslib/core@0.10.6': - resolution: {integrity: sha512-7OLdmmQbY116gNAAsY9baCid9REr+z11qfAzwVVFw+Q8avCE6YqpcBLfrBXlfmpBikfshDmHH8EpRrQwz8gZJQ==} - engines: {node: '>=16.7.0'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7 - typescript: ^5 - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - typescript: - optional: true - '@rslib/core@0.12.4': resolution: {integrity: sha512-GF+TIacQgtfvKK5r5g08IO795DnorpiHqcERsBua38iB0KsePpOGPAO+/E5YJncZ5regc72y1CByIELEeikgQA==} engines: {node: '>=18.12.0'} @@ -11661,13 +12177,13 @@ packages: typescript: optional: true - '@rslib/core@0.18.5': - resolution: {integrity: sha512-eofh36cvXJIq+h8sI2EniSD+2hr2V8eR+am3u9c8TIljv2KepQaHh1IH3OAIMRz/UOmXufJ97oHhH35fTK9vyA==} - engines: {node: '>=18.12.0'} + '@rslib/core@0.23.2': + resolution: {integrity: sha512-KxSp+/y0BJ1O4oKwxX4ydBY7/ZVeJCUpWAmQniCIct8mTxIQFPGO/ibKbKq2IxZYqRuRpM8g+Dtyq0VbEQf9HQ==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@microsoft/api-extractor': ^7 - typescript: ^5 + typescript: ^5 || ^6 || ^7.0.1-0 peerDependenciesMeta: '@microsoft/api-extractor': optional: true @@ -11712,11 +12228,6 @@ packages: cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-arm64@1.4.11': - resolution: {integrity: sha512-PrmBVhR8MC269jo6uQ+BMy1uwIDx0HAJYLQRQur8gXiehWabUBCRg/d4U9KR7rLzdaSScRyc5JWXR52T7/4MfA==} - cpu: [arm64] - os: [darwin] - '@rspack/binding-darwin-arm64@1.5.8': resolution: {integrity: sha512-spJfpOSN3f7V90ic45/ET2NKB2ujAViCNmqb0iGurMNQtFRq+7Kd+jvVKKGXKBHBbsQrFhidSWbbqy2PBPGK8g==} cpu: [arm64] @@ -11752,6 +12263,11 @@ packages: cpu: [arm64] os: [darwin] + '@rspack/binding-darwin-arm64@2.1.2': + resolution: {integrity: sha512-IYcxareUOYJZz+uNMSIwn+iDRiVyjZNOjoxO/zL4OFaPK8Ncrw0ka/9DqL9Gd7OpnAXN1zK3uS8yD0O1yIYI3Q==} + cpu: [arm64] + os: [darwin] + '@rspack/binding-darwin-x64@0.7.5': resolution: {integrity: sha512-teLK0TB1x0CsvaaiCopsFx4EvJe+/Hljwii6R7C9qOZs5zSOfbT/LQ202eA0sAGodCncARCGaXVrsekbrRYqeA==} cpu: [x64] @@ -11777,11 +12293,6 @@ packages: cpu: [x64] os: [darwin] - '@rspack/binding-darwin-x64@1.4.11': - resolution: {integrity: sha512-YIV8Wzy+JY0SoSsVtN4wxFXOjzxxVPnVXNswrrfqVUTPr9jqGOFYUWCGpbt8lcCgfuBFm6zN8HpOsKm1xUNsVA==} - cpu: [x64] - os: [darwin] - '@rspack/binding-darwin-x64@1.5.8': resolution: {integrity: sha512-YFOzeL1IBknBcri8vjUp43dfUBylCeQnD+9O9p0wZmLAw7DtpN5JEOe2AkGo8kdTqJjYKI+cczJPKIw6lu1LWw==} cpu: [x64] @@ -11817,6 +12328,11 @@ packages: cpu: [x64] os: [darwin] + '@rspack/binding-darwin-x64@2.1.2': + resolution: {integrity: sha512-aoifkILvx/XEHyvg8yW57xu95nx7f9f/3ah1+RguHSNKcJMcoCep9VX1Ct1N0ftqg8MC0JUObc7xWL5W14hmjA==} + cpu: [x64] + os: [darwin] + '@rspack/binding-linux-arm64-gnu@0.7.5': resolution: {integrity: sha512-/24UytJXrK+7CsucDb30GCKYIJ8nG6ceqbJyOtsJv9zeArNLHkxrYGSyjHJIpQfwVN17BPP4RNOi+yIZ3ZgDyA==} cpu: [arm64] @@ -11842,11 +12358,6 @@ packages: cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-gnu@1.4.11': - resolution: {integrity: sha512-ms6uwECUIcu+6e82C5HJhRMHnfsI+l33v7XQezntzRPN0+sG3EpikEoT7SGbgt4vDwaWLR7wS20suN4qd5r3GA==} - cpu: [arm64] - os: [linux] - '@rspack/binding-linux-arm64-gnu@1.5.8': resolution: {integrity: sha512-UAWCsOnpkvy8eAVRo0uipbHXDhnoDq5zmqWTMhpga0/a3yzCp2e+fnjZb/qnFNYb5MeL0O1mwMOYgn1M3oHILQ==} cpu: [arm64] @@ -11882,6 +12393,11 @@ packages: cpu: [arm64] os: [linux] + '@rspack/binding-linux-arm64-gnu@2.1.2': + resolution: {integrity: sha512-My4m40tyJSgiCEf3bB2KIEX710q3nZg99LIjy+8Zxgi3oZTkg1bFmFRusFU5U4eN5408zfSqDDGvjDE3Yv7o4w==} + cpu: [arm64] + os: [linux] + '@rspack/binding-linux-arm64-musl@0.7.5': resolution: {integrity: sha512-6RcxG42mLM01Pa6UYycACu/Nu9qusghAPUJumb8b8x5TRIDEtklYC5Ck6Rmagm+8E0ucMude2E/D4rMdIFcS3A==} cpu: [arm64] @@ -11907,11 +12423,6 @@ packages: cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.4.11': - resolution: {integrity: sha512-9evq0DOdxMN/H8VM8ZmyY9NSuBgILNVV6ydBfVPMHPx4r1E7JZGpWeKDegZcS5Erw3sS9kVSIxyX78L5PDzzKw==} - cpu: [arm64] - os: [linux] - '@rspack/binding-linux-arm64-musl@1.5.8': resolution: {integrity: sha512-GnSvGT4GjokPSD45cTtE+g7LgghuxSP1MRmvd+Vp/I8pnxTVSTsebRod4TAqyiv+l11nuS8yqNveK9qiOkBLWw==} cpu: [arm64] @@ -11947,6 +12458,21 @@ packages: cpu: [arm64] os: [linux] + '@rspack/binding-linux-arm64-musl@2.1.2': + resolution: {integrity: sha512-yt+GGWUH7WPE8K97cRc8OpZhH7Pbj1vU+lkvKbDtF/rR8X9a/bJsA/nBqyUV2oBKOVbrp5I8rFZlnDskMqgvKw==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-riscv64-gnu@2.1.2': + resolution: {integrity: sha512-uys8Jyw8Z3ralvICbN/L/nZfy5qELIwpOY72rhIqhoDYwFcL4fmMaY7WsvUcJOjCB2rqOcWPaWKuF2oPvo9iDQ==} + cpu: [riscv64] + os: [linux] + + '@rspack/binding-linux-riscv64-musl@2.1.2': + resolution: {integrity: sha512-JYNVQwqCaRGQWvjHQYzZkIzQiwllMaJwh4Rdu3ww6W2OJcJUqT08sL1pkOtU0iCxT4VUYiRRcp93VGTGpHr8fg==} + cpu: [riscv64] + os: [linux] + '@rspack/binding-linux-x64-gnu@0.7.5': resolution: {integrity: sha512-R0Lu4CJN2nWMW7WzPBuCIju80cQPpcaqwKJDj/quwQySpJJZ6c5qGwB8mntqjxIzZDrNH6u0OkpiUTbvWZj8ww==} cpu: [x64] @@ -11972,11 +12498,6 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.4.11': - resolution: {integrity: sha512-bHYFLxPPYBOSaHdQbEoCYGMQ1gOrEWj7Mro/DLfSHZi1a0okcQ2Q1y0i1DczReim3ZhLGNrK7k1IpFXCRbAobQ==} - cpu: [x64] - os: [linux] - '@rspack/binding-linux-x64-gnu@1.5.8': resolution: {integrity: sha512-XLxh5n/pzUfxsugz/8rVBv+Tx2nqEM+9rharK69kfooDsQNKyz7PANllBQ/v4svJ+W0BRHnDL4qXSGdteZeEjA==} cpu: [x64] @@ -12012,6 +12533,11 @@ packages: cpu: [x64] os: [linux] + '@rspack/binding-linux-x64-gnu@2.1.2': + resolution: {integrity: sha512-KDoPy0Msf/JLhxgPPrJQzZeB4Qpqd32em8AP5lSW2s6jR5I35dHgAe9xc2A++EQtnSrU4GTn6DBvFC7q84SihQ==} + cpu: [x64] + os: [linux] + '@rspack/binding-linux-x64-musl@0.7.5': resolution: {integrity: sha512-dDgi/ThikMy1m4llxPeEXDCA2I8F8ezFS/eCPLZGU2/J1b4ALwDjuRsMmo+VXSlFCKgIt98V6h1woeg7nu96yg==} cpu: [x64] @@ -12037,11 +12563,6 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.4.11': - resolution: {integrity: sha512-wrm4E7q2k4+cwT6Uhp6hIQ3eUe/YoaUttj6j5TqHYZX6YeLrNPtD9+ne6lQQ17BV8wmm6NZsmoFIJ5xIptpRhQ==} - cpu: [x64] - os: [linux] - '@rspack/binding-linux-x64-musl@1.5.8': resolution: {integrity: sha512-gE0+MZmwF+01p9/svpEESkzkLpBkVUG2o03YMpwXYC/maeRRhWvF8BJ7R3i/Ls/jFGSE87dKX5NbRLVzqksq/w==} cpu: [x64] @@ -12077,9 +12598,10 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-wasm32-wasi@1.4.11': - resolution: {integrity: sha512-hiYxHZjaZ17wQtXyLCK0IdtOvMWreGVTiGsaHCxyeT+SldDG+r16bXNjmlqfZsjlfl1mkAqKz1dg+mMX28OTqw==} - cpu: [wasm32] + '@rspack/binding-linux-x64-musl@2.1.2': + resolution: {integrity: sha512-66hWmIGvn4zCKAYXJE9Bp5SNSLYnLFq2Ke/efE+ZtWy43Dd5vk9AAOmThVGBwdwmIxmGtHGCp+cAuS4G0wu0TA==} + cpu: [x64] + os: [linux] '@rspack/binding-wasm32-wasi@1.5.8': resolution: {integrity: sha512-cfg3niNHeJuxuml1Vy9VvaJrI/5TakzoaZvKX2g5S24wfzR50Eyy4JAsZ+L2voWQQp1yMJbmPYPmnTCTxdJQBQ==} @@ -12109,6 +12631,10 @@ packages: resolution: {integrity: sha512-Yf4SiqTUroT5Ju+te0YAY2xxKOb35tECsO21v7hYyGa705wrgoAK/MmF7enOvs9GR1iZIqgiLD/wxsIxl8GjJw==} cpu: [wasm32] + '@rspack/binding-wasm32-wasi@2.1.2': + resolution: {integrity: sha512-EB4SqH8DW/E/OmqssNQvnIVGQiVUyYNlA/pcc6Ia4MlTNwu6eNDppcNLrToH+kSZpL4CpHSFfSM3eIsSuar2Rw==} + cpu: [wasm32] + '@rspack/binding-win32-arm64-msvc@0.7.5': resolution: {integrity: sha512-nEF4cUdLfgEK6FrgJSJhUlr2/7LY1tmqBNQCFsCjtDtUkQbJIEo1b8edT94G9tJcQoFE4cD+Re30yBYbQO2Thg==} cpu: [arm64] @@ -12134,11 +12660,6 @@ packages: cpu: [arm64] os: [win32] - '@rspack/binding-win32-arm64-msvc@1.4.11': - resolution: {integrity: sha512-+HF/mnjmTr8PC1dccRt1bkrD2tPDGeqvXC1BBLYd/Klq1VbtIcnrhfmvQM6KaXbiLcY9VWKzcZPOTmnyZ8TaHQ==} - cpu: [arm64] - os: [win32] - '@rspack/binding-win32-arm64-msvc@1.5.8': resolution: {integrity: sha512-7i3ZTHFXKfU/9Jm9XhpMkrdkxO7lfeYMNVEGkuU5dyBfRMQj69dRgPL7zJwc2plXiqu9LUOl+TwDNTjap7Q36g==} cpu: [arm64] @@ -12174,6 +12695,11 @@ packages: cpu: [arm64] os: [win32] + '@rspack/binding-win32-arm64-msvc@2.1.2': + resolution: {integrity: sha512-T6Fs/g32MRja/UpCq4AdyPRj8tA0cOkcEa4PrAcn/ztUgK8b/qMVxj5mhMI+n7k+kHZQnpeB1Q4HqdSJi6OocA==} + cpu: [arm64] + os: [win32] + '@rspack/binding-win32-ia32-msvc@0.7.5': resolution: {integrity: sha512-hEcHRwJIzpZsePr+5x6V/7TGhrPXhSZYG4sIhsrem1za9W+qqCYYLZ7KzzbRODU07QaAH2RxjcA1bf8F2QDYAQ==} cpu: [ia32] @@ -12199,11 +12725,6 @@ packages: cpu: [ia32] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.4.11': - resolution: {integrity: sha512-EU2fQGwrRfwFd/tcOInlD0jy6gNQE4Q3Ayj0Is+cX77sbhPPyyOz0kZDEaQ4qaN2VU8w4Hu/rrD7c0GAKLFvCw==} - cpu: [ia32] - os: [win32] - '@rspack/binding-win32-ia32-msvc@1.5.8': resolution: {integrity: sha512-7ZPPWO11J+soea1+mnfaPpQt7GIodBM7A86dx6PbXgVEoZmetcWPrCF2NBfXxQWOKJ9L3RYltC4z+ZyXRgMOrw==} cpu: [ia32] @@ -12239,6 +12760,11 @@ packages: cpu: [ia32] os: [win32] + '@rspack/binding-win32-ia32-msvc@2.1.2': + resolution: {integrity: sha512-OtxkFVz14mVL4QK8QriSELn9B6PaYGHw1jGJwVDEzpu2ZxSHCTQPz9dVE1ekYtREEqZUkRU7Fp7VfhJSmjTt2Q==} + cpu: [ia32] + os: [win32] + '@rspack/binding-win32-x64-msvc@0.7.5': resolution: {integrity: sha512-PpVpP6J5/2b4T10hzSUwjLvmdpAOj3ozARl1Nrf/lsbYwhiXivoB8Gvoy/xe/Xpgr732Dk9VCeeW8rreWOOUVQ==} cpu: [x64] @@ -12264,11 +12790,6 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-win32-x64-msvc@1.4.11': - resolution: {integrity: sha512-1Nc5ZzWqfvE+iJc47qtHFzYYnHsC3awavXrCo74GdGip1vxtksM3G30BlvAQHHVtEmULotWqPbjZpflw/Xk9Ag==} - cpu: [x64] - os: [win32] - '@rspack/binding-win32-x64-msvc@1.5.8': resolution: {integrity: sha512-N/zXQgzIxME3YUzXT8qnyzxjqcnXudWOeDh8CAG9zqTCnCiy16SFfQ/cQgEoLlD9geQntV6jx2GbDDI5kpDGMQ==} cpu: [x64] @@ -12304,6 +12825,11 @@ packages: cpu: [x64] os: [win32] + '@rspack/binding-win32-x64-msvc@2.1.2': + resolution: {integrity: sha512-Am+nx9fLF3nzgD/K05Bs1Bb+WO8SFLWAYRbXkymaL1r+RQxjRj7jd5ap2PhGOCcfaNA4yVWkAFvmFP92eRu7bQ==} + cpu: [x64] + os: [win32] + '@rspack/binding@0.7.5': resolution: {integrity: sha512-XcdOvaCz1mWWwr5vmEY9zncdInrjINEh60EWkYdqtCA67v7X7rB1fe6n4BeAI1+YLS2Eacj+lytlr+n7I+DYVg==} @@ -12319,9 +12845,6 @@ packages: '@rspack/binding@1.3.9': resolution: {integrity: sha512-3FFen1/0F2aP5uuCm8vPaJOrzM3karCPNMsc5gLCGfEy2rsK38Qinf9W4p1bw7+FhjOTzoSdkX+LFHeMDVxJhw==} - '@rspack/binding@1.4.11': - resolution: {integrity: sha512-maGl/zRwnl0QVwkBCkgjn5PH20L9HdlRIdkYhEsfTepy5x2QZ0ti/0T49djjTJQrqb+S1i6wWQymMMMMMsxx6Q==} - '@rspack/binding@1.5.8': resolution: {integrity: sha512-/91CzhRl9r5BIQCgGsS7jA6MDbw1I2BQpbfcUUdkdKl2P79K3Zo/Mw/TvKzS86catwLaUQEgkGRmYawOfPg7ow==} @@ -12343,6 +12866,9 @@ packages: '@rspack/binding@2.0.8': resolution: {integrity: sha512-3uZ+y8aQxq33ty2srMxg2Nu0XuBI6vVrG50rkDaXqwWqOohfgGUSfFuQK7EnSUNy4aFUQlCG6NHialQHJov0wg==} + '@rspack/binding@2.1.2': + resolution: {integrity: sha512-/mFcRSUW7Pl19KeaBIujJvZYNJQu0wD5D3aa5h+Qcph26v7nmLYlX7eajIHGi8tt2qTZX1lXifw2KLIXKwYaRQ==} + '@rspack/cli@1.3.9': resolution: {integrity: sha512-jGsde6kP1S7QntU4TYNv8KAHRwe5lb21rRVVj6qGFOQ7pckxWadyYyowo6Qg43OYlPAc9ZlDlba3Zg3gQoD73g==} hasBin: true @@ -12394,15 +12920,6 @@ packages: '@swc/helpers': optional: true - '@rspack/core@1.4.11': - resolution: {integrity: sha512-JtKnL6p7Kc/YgWQJF3Woo4OccbgKGyT/4187W4dyex8BMkdQcbqCNIdi6dFk02hwQzxpOOxRSBI4hlGRbz7oYQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - '@swc/helpers': '>=0.5.1' - peerDependenciesMeta: - '@swc/helpers': - optional: true - '@rspack/core@1.5.8': resolution: {integrity: sha512-sUd2LfiDhqYVfvknuoz0+/c+wSpn693xotnG5g1CSWKZArbtwiYzBIVnNlcHGmuoBRsnj/TkSq8dTQ7gwfBroQ==} engines: {node: '>=18.12.0'} @@ -12475,6 +12992,18 @@ packages: '@swc/helpers': optional: true + '@rspack/core@2.1.2': + resolution: {integrity: sha512-crpNQKhHfnzrIl4Sa4fjH30Ho5aAPgyqpmJZ41SkUFOzyKHdZKYfE5LF3CMh7MiFQFPPxiiKf5BcpxmtZZx4MQ==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + '@module-federation/runtime-tools': ^0.24.1 || ^2.0.0 + '@swc/helpers': ^0.5.23 + peerDependenciesMeta: + '@module-federation/runtime-tools': + optional: true + '@swc/helpers': + optional: true + '@rspack/dev-server@1.1.1': resolution: {integrity: sha512-9r7vOml2SrFA8cvbcJdSan9wHEo1TPXezF22+s5jvdyAAywg8w7HqDol6TPVv64NUonP1DOdyLxZ+6UW6WZiwg==} engines: {node: '>= 18.12.0'} @@ -12488,6 +13017,9 @@ packages: '@rspack/lite-tapable@1.1.0': resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==} + '@rspack/lite-tapable@1.1.2': + resolution: {integrity: sha512-1OnyWChLGE46YzWyjlmYJssOu/Y0STAnnr2ueKPqDCYTf63GJMs0mxNnCul4dNiVqHYPKv3/fxrTY3IpqoVwZQ==} + '@rspack/plugin-react-refresh@0.7.5': resolution: {integrity: sha512-ROI9lrmfIH+Z9lbBaP3YMhbD2R3rlm9SSzi/9WzzkQU6KK911S1D+sL2ByeJ7ipZafbHvMPWTmC2aQEvjhwQig==} peerDependencies: @@ -12514,6 +13046,15 @@ packages: '@rspack/core': optional: true + '@rspack/plugin-react-refresh@2.0.2': + resolution: {integrity: sha512-dGNZiCxQxgAUI9sah7gd8u+O7OJZRCmqtEJNDOd8xW5RqcieC86F7p5qcShyw6onH5pKf57evpr2VjGbaFGkZg==} + peerDependencies: + '@rspack/core': ^2.0.0 + react-refresh: '>=0.10.0 <1.0.0' + peerDependenciesMeta: + '@rspack/core': + optional: true + '@rspress/core@2.0.14': resolution: {integrity: sha512-k59i08zwBGgHrjHw8CK1m4CeTrKPvZRmV54bxubQl6AdDdmhJK6WrNg3UthwWmd38scKtqF40ATXDE8RMiNcNA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -12522,12 +13063,12 @@ packages: '@rspress/shared@2.0.14': resolution: {integrity: sha512-sCe9tAo+s9tR4DmFSjMyHOxQvhzTSYXkkMUfVEo5w+uMCNXXGAIC6D0xAVDMHq1jIFF9ix47VxzlCo+CYNS14g==} - '@rstest/core@0.6.9': - resolution: {integrity: sha512-0qImkQB6T5NLrlgeuaZxSfgpAaaciouKJycpZe673M+cn1WLai7blt2z+Tf4Qv4DVOw/ZyphSmM8WNYz09vNmw==} - engines: {node: '>=18.12.0'} + '@rstest/core@0.10.6': + resolution: {integrity: sha512-nX61dw2Tnxfwy/jGZEuNbh2tzapgaH6Iwj4Aw5d2wxUwxptUL3ddUxFF5M1ZSWoLEVG30VaPg3ITzrSo5sdbTg==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - happy-dom: '*' + happy-dom: ^20.8.3 jsdom: '*' peerDependenciesMeta: happy-dom: @@ -12535,8 +13076,8 @@ packages: jsdom: optional: true - '@rstest/core@0.8.5': - resolution: {integrity: sha512-4E9pXpy2Jxy1+J4mqGnsVQn7gVnkIv2lA7AbwAY0Zy90jJo+YCchpTGosba/jhBJJhETRAr3GIkPUECxFoyQ9A==} + '@rstest/core@0.6.9': + resolution: {integrity: sha512-0qImkQB6T5NLrlgeuaZxSfgpAaaciouKJycpZe673M+cn1WLai7blt2z+Tf4Qv4DVOw/ZyphSmM8WNYz09vNmw==} engines: {node: '>=18.12.0'} hasBin: true peerDependencies: @@ -13071,8 +13612,8 @@ packages: chokidar: optional: true - '@swc/core-darwin-arm64@1.15.10': - resolution: {integrity: sha512-U72pGqmJYbjrLhMndIemZ7u9Q9owcJczGxwtfJlz/WwMaGYAV/g4nkGiUVk/+QSX8sFCAjanovcU1IUsP2YulA==} + '@swc/core-darwin-arm64@1.15.41': + resolution: {integrity: sha512-kREh6J5paQFvP3i7f/4FbqRNOJREutVFVOkder4GVyCBQ39YmER55cW/y1NNjwrchzFqgYswFn0mMDCqbqKzrw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -13089,8 +13630,8 @@ packages: cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.15.10': - resolution: {integrity: sha512-NZpDXtwHH083L40xdyj1sY31MIwLgOxKfZEAGCI8xHXdHa+GWvEiVdGiu4qhkJctoHFzAEc7ZX3GN5phuJcPuQ==} + '@swc/core-darwin-x64@1.15.41': + resolution: {integrity: sha512-N8B56ESFazZAWZyIkecADSPCwlLEinW7QLMEeotCpv4J7VXwfH+OLkmRL8o96UZ+1355fwHxDTS6/wK7yucvkA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -13107,8 +13648,8 @@ packages: cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.15.10': - resolution: {integrity: sha512-ioieF5iuRziUF1HkH1gg1r93e055dAdeBAPGAk40VjqpL5/igPJ/WxFHGvc6WMLhUubSJI4S0AiZAAhEAp1jDg==} + '@swc/core-linux-arm-gnueabihf@1.15.41': + resolution: {integrity: sha512-6XrId2fyle0mS5xxON8rU84mPd2Cq1kDJRj+4BnQKTd7u+2kSA6Ww+JkOP0iTNqOqt9OXhPOEAjBHAuonWcdCg==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -13125,8 +13666,8 @@ packages: cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.15.10': - resolution: {integrity: sha512-tD6BClOrxSsNus9cJL7Gxdv7z7Y2hlyvZd9l0NQz+YXzmTWqnfzLpg16ovEI7gknH2AgDBB5ywOsqu8hUgSeEQ==} + '@swc/core-linux-arm64-gnu@1.15.41': + resolution: {integrity: sha512-ynLIarxlkVnqHn1D0fKOVht6mNU5ks6lrH+MY3kkS+XFaGGgDxFZVjWKJlkYTKm3RCvBTfA8Ng5fLufXheMRKQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -13143,8 +13684,8 @@ packages: cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.15.10': - resolution: {integrity: sha512-4uAHO3nbfbrTcmO/9YcVweTQdx5fN3l7ewwl5AEK4yoC4wXmoBTEPHAVdKNe4r9+xrTgd4BgyPsy0409OjjlMw==} + '@swc/core-linux-arm64-musl@1.15.41': + resolution: {integrity: sha512-dXu/5vd4gh8symyhRF+4G7gOPkjmb4pONhh7sl+6GSiW0LOKZlfu5kXmyFbTz9smOT7jgr002qY9b1nujjXt2A==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -13161,8 +13702,20 @@ packages: cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.15.10': - resolution: {integrity: sha512-W0h9ONNw1pVIA0cN7wtboOSTl4Jk3tHq+w2cMPQudu9/+3xoCxpFb9ZdehwCAk29IsvdWzGzY6P7dDVTyFwoqg==} + '@swc/core-linux-ppc64-gnu@1.15.41': + resolution: {integrity: sha512-XGO6zVPXoPE0gf/XnI4jBbafNT13AYgoh6ns0JCSdOetI/kqVf0vhpz7NuNgAzZrMVCsmieqjPoTwViDgh4mOQ==} + engines: {node: '>=10'} + cpu: [ppc64] + os: [linux] + + '@swc/core-linux-s390x-gnu@1.15.41': + resolution: {integrity: sha512-0WUglRwyZtW+iMi7J3iFdrCxreZZIKf4egTwEQfIYRsqFax69A0OrFj+NIoFSE03xBT/IFRrg+S8K6f9Ky+4hA==} + engines: {node: '>=10'} + cpu: [s390x] + os: [linux] + + '@swc/core-linux-x64-gnu@1.15.41': + resolution: {integrity: sha512-VxkuQK59c0tHm6uJZCUrS3cyA2JhGGfdU6e41SZz0x/JS+4Sm7C1mIc97In14vkZJopEt7yXA2TouCqZDSygEA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -13179,8 +13732,8 @@ packages: cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.15.10': - resolution: {integrity: sha512-XQNZlLZB62S8nAbw7pqoqwy91Ldy2RpaMRqdRN3T+tAg6Xg6FywXRKCsLh6IQOadr4p1+lGnqM/Wn35z5a/0Vw==} + '@swc/core-linux-x64-musl@1.15.41': + resolution: {integrity: sha512-/0qXIu1ZxggLuovLb22vFfKHq2AA4n6Whw5UwmVCHk4pkw7KWnPIQpMCEqUMPsNkFJig7PPp/TSYFu8ZEb2rtQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -13197,8 +13750,8 @@ packages: cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.15.10': - resolution: {integrity: sha512-qnAGrRv5Nj/DATxAmCnJQRXXQqnJwR0trxLndhoHoxGci9MuguNIjWahS0gw8YZFjgTinbTxOwzatkoySihnmw==} + '@swc/core-win32-arm64-msvc@1.15.41': + resolution: {integrity: sha512-Y481sMNZM6rECh9VO4+y26N1lWEDAyxnBZskUf37fl90uHE946VHfmiVQWT0uMFOhyJJFovGTRuF4W82dwewUg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -13215,8 +13768,8 @@ packages: cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.15.10': - resolution: {integrity: sha512-i4X/q8QSvzVlaRtv1xfnfl+hVKpCfiJ+9th484rh937fiEZKxZGf51C+uO0lfKDP1FfnT6C1yBYwHy7FLBVXFw==} + '@swc/core-win32-ia32-msvc@1.15.41': + resolution: {integrity: sha512-BAchBD5qeUzy3hiPSLJtaaoSm4blCLyYffOF1bGE4ETcV+OisqjUAwDQMJj++4bTpvMCDzwC+Bj3PmQyBCtscw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -13233,8 +13786,8 @@ packages: cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.15.10': - resolution: {integrity: sha512-HvY8XUFuoTXn6lSccDLYFlXv1SU/PzYi4PyUqGT++WfTnbw/68N/7BdUZqglGRwiSqr0qhYt/EhmBpULj0J9rA==} + '@swc/core-win32-x64-msvc@1.15.41': + resolution: {integrity: sha512-WOkA+fJ/ViVBQDsSV9JC52NACTe5PhlurA6viASDZGb7HR3KS01ZG7RZ+Bg6SVQFIoq3gSbTsskQVe6EbHFAYw==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -13251,8 +13804,8 @@ packages: cpu: [x64] os: [win32] - '@swc/core@1.15.10': - resolution: {integrity: sha512-udNofxftduMUEv7nqahl2nvodCiCDQ4Ge0ebzsEm6P8s0RC2tBM0Hqx0nNF5J/6t9uagFJyWIDjXy3IIWMHDJw==} + '@swc/core@1.15.41': + resolution: {integrity: sha512-03nQq/082QRJJiOvp3FGbgxTGyyxMxohPTjhk/W9bD2J0tk4ukITI7goOhOO2WbaHn/lsPmo/zf8+DIXhwpgYQ==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -13311,8 +13864,8 @@ packages: peerDependencies: '@swc/core': '*' - '@swc/plugin-loadable-components@11.7.0': - resolution: {integrity: sha512-7iVkVbLHPcEtUkYZmQywEpGJ99gLL+AQtUWc6mtIcvtGCkrhAfY5phFsq/Fm81bNE0A9+TxOwpjRGl3gEk8Nfg==} + '@swc/plugin-loadable-components@11.15.0': + resolution: {integrity: sha512-JbIsVDpOQlHO0WGRJgLzYrtQnNiv6Evg4mkBVLdvShjzja+wvc18aUpILhyAOsrzKcEigcmlR/aWwyFDb/4NLA==} '@swc/plugin-styled-components@12.7.0': resolution: {integrity: sha512-2nuoIsKTC6EY4OI8OuPrSg9NyhmyDmPxqKEmLXWUMW87X5asXwxAOsDLIRSR1xJYvp1oOak/HjyceOGDIE26Xw==} @@ -13320,6 +13873,9 @@ packages: '@swc/types@0.1.25': resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} + '@swc/types@0.1.27': + resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==} + '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -13397,6 +13953,9 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@toon-format/toon@0.9.0': + resolution: {integrity: sha512-BaMhGh1+/z8ceDrF2xL9Drd42hijbUJlivm/1goPR26RgCYsqlMkHbg48hx9a5UjZC7oZqxWPJ6ju5qvALi6Ag==} + '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -13449,6 +14008,9 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -13736,9 +14298,6 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jest@29.2.6': - resolution: {integrity: sha512-XEUC/Tgw3uMh6Ho8GkUtQ2lPhY5Fmgyp3TdlkTJs1W9VgNxs+Ow/x3Elh8lHQKqCbZL0AubQuqWjHVT033Hhrw==} - '@types/jest@29.5.13': resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} @@ -13799,9 +14358,6 @@ packages: '@types/node-forge@1.3.14': resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} - '@types/node-schedule@2.1.7': - resolution: {integrity: sha512-G7Z3R9H7r3TowoH6D2pkzUHPhcJrDF4Jz1JOQ80AX0K2DWTHoN9VC94XzFAPNMdbW9TBzMZ3LjpFi7RYdbxtXA==} - '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} @@ -13841,9 +14397,6 @@ packages: '@types/pug@2.0.10': resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} - '@types/qs@6.15.0': - resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} - '@types/qs@6.15.1': resolution: {integrity: sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==} @@ -13990,14 +14543,6 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.54.0': - resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.54.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.56.1': resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14044,13 +14589,6 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.54.0': - resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.56.1': resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14065,12 +14603,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.54.0': - resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.56.1': resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14095,10 +14627,6 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.54.0': - resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.56.1': resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14107,12 +14635,6 @@ packages: resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.54.0': - resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.56.1': resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14145,13 +14667,6 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.54.0': - resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.56.1': resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14178,10 +14693,6 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.54.0': - resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.56.1': resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14217,12 +14728,6 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.54.0': - resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.56.1': resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14247,13 +14752,6 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.54.0': - resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.56.1': resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14280,10 +14778,6 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.54.0': - resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.56.1': resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -14292,6 +14786,126 @@ packages: resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} deprecated: Potential CWE-502 - Update to 1.3.1 or higher @@ -14486,16 +15100,6 @@ packages: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 - '@vitest/coverage-istanbul@1.6.0': - resolution: {integrity: sha512-h/BwpXehkkS0qsNCS00QxiupAqVkNi0WT19BR0dQvlge5oHghoSVLx63fABYFoKxVb7Ue7+k6V2KokmQ1zdMpg==} - peerDependencies: - vitest: 1.6.0 - - '@vitest/coverage-v8@1.6.0': - resolution: {integrity: sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew==} - peerDependencies: - vitest: 1.6.0 - '@vitest/expect@1.2.2': resolution: {integrity: sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==} @@ -14552,33 +15156,27 @@ packages: '@volar/language-core@2.4.15': resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==} - '@volar/language-core@2.4.28': - resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} - '@volar/source-map@1.11.1': resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} '@volar/source-map@2.4.15': resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==} - '@volar/source-map@2.4.28': - resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} - '@volar/typescript@1.11.1': resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} '@volar/typescript@2.4.15': resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==} - '@volar/typescript@2.4.28': - resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} - '@vscode/sudo-prompt@9.3.2': resolution: {integrity: sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==} '@vue/babel-helper-vue-transform-on@1.5.0': resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==} + '@vue/babel-helper-vue-transform-on@2.0.1': + resolution: {integrity: sha512-uZ66EaFbnnZSYqYEyplWvn46GhZ1KuYSThdT68p+am7MgBNbQ3hphTL9L+xSIsWkdktwhPYLwPgVWqo96jDdRA==} + '@vue/babel-plugin-jsx@1.5.0': resolution: {integrity: sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==} peerDependencies: @@ -14587,11 +15185,24 @@ packages: '@babel/core': optional: true + '@vue/babel-plugin-jsx@2.0.1': + resolution: {integrity: sha512-a8CaLQjD/s4PVdhrLD/zT574ZNPnZBOY+IhdtKWRB4HRZ0I2tXBi5ne7d9eCfaYwp5gU5+4KIyFTV1W1YL9xZA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + '@vue/babel-plugin-resolve-type@1.5.0': resolution: {integrity: sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==} peerDependencies: '@babel/core': ^7.0.0-0 + '@vue/babel-plugin-resolve-type@2.0.1': + resolution: {integrity: sha512-ybwgIuRGRRBhOU37GImDoWQoz+TlSqap65qVI6iwg/J7FfLTLmMf97TS7xQH9I7Qtr/gp161kYVdhr1ZMraSYQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@vue/compiler-core@3.5.30': resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==} @@ -14618,14 +15229,6 @@ packages: typescript: optional: true - '@vue/language-core@2.2.0': - resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@vue/language-core@2.2.12': resolution: {integrity: sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==} peerDependencies: @@ -15000,9 +15603,6 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - alien-signals@0.4.14: - resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} - alien-signals@1.0.13: resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==} @@ -15375,8 +15975,8 @@ packages: peerDependencies: postcss: ^8.1.0 - autoprefixer@10.4.24: - resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} + autoprefixer@10.4.27: + resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -15396,6 +15996,11 @@ packages: resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} engines: {node: '>=4'} + axios-retry@4.5.0: + resolution: {integrity: sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==} + peerDependencies: + axios: 0.x || 1.x + axios@1.16.1: resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} @@ -15428,6 +16033,19 @@ packages: peerDependencies: '@babel/core': ^7.8.0 + babel-loader@10.1.1: + resolution: {integrity: sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg==} + engines: {node: ^18.20.0 || ^20.10.0 || >=22.0.0} + peerDependencies: + '@babel/core': ^7.12.0 || ^8.0.0-beta.1 + '@rspack/core': ^1.0.0 || ^2.0.0-0 + webpack: '>=5.61.0' + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + babel-loader@9.2.1: resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} engines: {node: '>= 14.15.0'} @@ -15517,6 +16135,9 @@ packages: '@babel/traverse': optional: true + babel-plugin-vue-jsx-hmr@1.0.0: + resolution: {integrity: sha512-XRq+XTD4bub6HkavELMhihvLX2++JkSBAxRXlqQK32b+Tb0S9PEqxrDSMpOEZ1iGyOaJZj9Y0uU/FzICdyL9MA==} + babel-preset-current-node-syntax@1.2.0: resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} peerDependencies: @@ -15751,6 +16372,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + browserslist@4.28.4: resolution: {integrity: sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -16351,9 +16977,6 @@ packages: compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - compare-versions@6.1.1: - resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} - component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} @@ -16392,9 +17015,6 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.4: - resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} - connect-history-api-fallback@2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} @@ -16537,9 +17157,6 @@ packages: core-js@3.42.0: resolution: {integrity: sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==} - core-js@3.45.1: - resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==} - core-js@3.46.0: resolution: {integrity: sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==} @@ -16624,9 +17241,6 @@ packages: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} - cross-fetch@3.2.0: - resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} - cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} @@ -16714,6 +17328,31 @@ packages: lightningcss: optional: true + css-minimizer-webpack-plugin@8.0.0: + resolution: {integrity: sha512-9bEpzHs8gEq6/cbEj418jXL/YWjBUD2YTLLk905Npt2JODqnRITin0+So5Vx4Dp5vyi2Lpt9pp2QHzQ7fdxNrw==} + engines: {node: '>= 20.9.0'} + peerDependencies: + '@parcel/css': '*' + '@swc/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + lightningcss: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + '@swc/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + lightningcss: + optional: true + css-select@4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} @@ -17340,6 +17979,10 @@ packages: dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@3.1.1: + resolution: {integrity: sha512-4MEa38/QexBob6gFNwu+EGdWvhJ1OKuNwdYY3Y3NyeWDQfnGeDYQUDfIRzWu5B5gsv03so2Uxd28YC6zrsx3Lw==} + engines: {node: '>=20.19.0'} + domain-browser@4.23.0: resolution: {integrity: sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==} engines: {node: '>=10'} @@ -17351,6 +17994,10 @@ packages: domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + domelementtype@3.0.0: + resolution: {integrity: sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==} + engines: {node: '>=20.19.0'} + domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} @@ -17364,6 +18011,10 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + domhandler@6.0.1: + resolution: {integrity: sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==} + engines: {node: '>=20.19.0'} + dompurify@3.4.11: resolution: {integrity: sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==} @@ -17373,6 +18024,10 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + domutils@4.0.2: + resolution: {integrity: sha512-qI4JLRKnSzqFqr7hAlS5xQDusBCjKSEG4t4+7aNrIQMHBcsC2TGEhuyABJdYkgSewL57PNLYEiibY2iPKhKpaA==} + engines: {node: '>=20.19.0'} + dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -17543,6 +18198,10 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + entities@8.0.0: + resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==} + engines: {node: '>=20.19.0'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -18220,6 +18879,10 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} + eventsource@4.1.0: + resolution: {integrity: sha512-2GuF51iuHX6A9xdTccMTsNb7VO0lHZihApxhvQzJB5A03DvHDd2FQepodbMaztPBmBcE/ox7o2gqaxGhYB9LhQ==} + engines: {node: '>=20.0.0'} + evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -18505,6 +19168,9 @@ packages: find-node-modules@2.1.3: resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} + find-package-json@1.2.0: + resolution: {integrity: sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==} + find-pkg@2.0.0: resolution: {integrity: sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==} engines: {node: '>=8'} @@ -18882,6 +19548,12 @@ packages: deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead. hasBin: true + git-up@7.0.0: + resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + + git-url-parse@15.0.0: + resolution: {integrity: sha512-5reeBufLi+i4QD3ZFftcJs9jC26aULFLBU23FeKM/b1rI0K6ofIeAblmDVO7Ht22zTDE9+CkJ3ZVb0CgJmz3UQ==} + github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} @@ -19300,6 +19972,10 @@ packages: htmlparser2@10.0.0: resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + htmlparser2@12.0.0: + resolution: {integrity: sha512-Tz7u1i95/g2x2jz81+x0FBVhBhY5aRTvD3tXXdFaljuNdzDLJ8UGNRrTcj2cgQvAg3iW/h77Fz15nLW0L0CrZw==} + engines: {node: '>=20.19.0'} + htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -19679,6 +20355,10 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + is-ci@4.1.0: + resolution: {integrity: sha512-Ab9bQDQ11lWootZUI5qxgN2ZXwxNI5hTwnsvOc1wyxQ7zQ8OkEDw79mI0+9jI3x432NfwbVRru+3noJfXF6lSQ==} + hasBin: true + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -19897,6 +20577,10 @@ packages: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} + is-retry-allowed@2.2.0: + resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} + engines: {node: '>=10'} + is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} @@ -19905,6 +20589,9 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} + is-ssh@1.4.1: + resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -20041,10 +20728,6 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - istanbul-reports@3.2.0: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} @@ -20167,6 +20850,10 @@ packages: resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-regex-util@30.4.0: + resolution: {integrity: sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-resolve-dependencies@29.7.0: resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -20191,6 +20878,10 @@ packages: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@30.4.1: + resolution: {integrity: sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-validate@29.7.0: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -20207,6 +20898,10 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@30.4.1: + resolution: {integrity: sha512-SHynN/q/QD++iNyvMdy+WMmbCGk8jIsNcRxycXbWubSOhvo6T+j2afcfUSl+3hYsiBebOTo0cT7c2H7CXugu1g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest@29.7.0: resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -20235,6 +20930,9 @@ packages: joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} + jose@6.2.1: resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==} @@ -20442,9 +21140,6 @@ packages: resolution: {integrity: sha512-MeuwbCoN1daWS32/Ni5qkzmrOtQO2qrnfdxDHjrm6s4b59yG4nexAJ0pTEFyzjLp0pBVO80CZp0vW8Ze30Ebow==} engines: {node: '>= 18'} - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -20479,6 +21174,19 @@ packages: less: ^3.5.0 || ^4.0.0 webpack: ^5.0.0 + less-loader@12.3.3: + resolution: {integrity: sha512-F0+ErFFDj3Pt+nVrCN6VlEGEzocv9s7x/aR9v2riI+WM83UAfTYBDBjGPJnT55lBLR6JSI4fmWblt+aA2JN6/w==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 + less: ^3.5.0 || ^4.0.0 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + less@4.6.4: resolution: {integrity: sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==} engines: {node: '>=18'} @@ -20582,10 +21290,6 @@ packages: resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} engines: {node: '>=14'} - local-pkg@1.1.2: - resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} - engines: {node: '>=14'} - locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -20752,9 +21456,6 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} - make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -20940,6 +21641,11 @@ packages: peerDependencies: tslib: '2' + memfs@4.58.0: + resolution: {integrity: sha512-0n6CDBqIT/eGrbWdDVNkLjasjupnEpOFjFOtXrS5p6EYYXGXBn5ZIMLetBlVdQYpP0hGK2MEOgYAC0/+NOr91w==} + peerDependencies: + tslib: '2' + memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} @@ -21428,6 +22134,9 @@ packages: mlly@1.8.1: resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + modern-tar@0.7.6: resolution: {integrity: sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==} engines: {node: '>=18.0.0'} @@ -21666,10 +22375,6 @@ packages: encoding: optional: true - node-fetch@3.3.0: - resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -21688,6 +22393,10 @@ packages: node-machine-id@1.1.12: resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==} + node-persist@4.0.4: + resolution: {integrity: sha512-8sPAz/7tw1mCCc8xBG4f0wi+flHkSSgQeX998iQ75Pu27evA6UUWCjSE7xnrYTg2q33oU5leJ061EKPDv6BocQ==} + engines: {node: '>=10.12.0'} + node-polyfill-webpack-plugin@2.0.1: resolution: {integrity: sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==} engines: {node: '>=12'} @@ -22110,6 +22819,12 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} + parse-path@7.1.0: + resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} + + parse-url@8.1.0: + resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + parse5-htmlparser2-tree-adapter@7.1.0: resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} @@ -22322,9 +23037,6 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -23007,12 +23719,18 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + property-information@5.6.0: resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + protocols@2.0.2: + resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -23725,11 +24443,6 @@ packages: react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - react-error-boundary@4.1.2: - resolution: {integrity: sha512-GQDxZ5Jd+Aq/qUxbCm1UtzmL/s++V7zKgE8yMktJiCQXCCFZnMZh9ng+6/Ne6PjNSXH0L9CjeOEREfRnq6Duag==} - peerDependencies: - react: '>=16.13.1' - react-error-boundary@5.0.0: resolution: {integrity: sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ==} peerDependencies: @@ -23976,6 +24689,14 @@ packages: react-dom: optional: true + react-server-dom-rspack@0.0.2: + resolution: {integrity: sha512-PowIm+Z65LkvC3yk4t3YrH2nMejwL361jiBT0BMW2bQCDUaNQknDHMPH0aTgMtJ9ZZ1Gc7KFgBvwB0itSzzELQ==} + engines: {node: '>=0.10.0'} + peerDependencies: + '@rspack/core': ^2.0.0-0 + react: ^19.1.0 + react-dom: ^19.1.0 + react-server-dom-webpack@19.2.4: resolution: {integrity: sha512-zEhkWv6RhXDctC2N7yEUHg3751nvFg81ydHj8LTTZuukF/IF1gcOKqqAL6Ds+kS5HtDVACYPik0IvzkgYXPhlQ==} engines: {node: '>=0.10.0'} @@ -24154,12 +24875,12 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} - reduce-configs@1.1.1: - resolution: {integrity: sha512-EYtsVGAQarE8daT54cnaY1PIknF2VB78ug6Zre2rs36EsJfC40EG6hmTU2A2P1ZuXnKAt2KI0fzOGHcX7wzdPw==} - reduce-configs@1.1.2: resolution: {integrity: sha512-AgBP55V8FC7NaqoOP2RCbTpu6LE+YuX3LUZkNAoitcfyS3/PIC8Obg/TJrBzTkJ+lDvZv0TTAeDpLkzjTtYlbw==} + reduce-configs@2.0.1: + resolution: {integrity: sha512-H9KTCWTEb1YM1OoOz0f6TeGZYlW82sIT1viNg3W8CjjY0pD3WI4MHs8GifKt5FKTVIfHh/DenfJqqY+FP9jF2A==} + reduce-flatten@2.0.0: resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} engines: {node: '>=6'} @@ -24411,6 +25132,10 @@ packages: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -24449,8 +25174,8 @@ packages: robust-predicates@3.0.3: resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} - rock@0.13.0: - resolution: {integrity: sha512-UbUIfENbQtkQfGZyviZzXB9tPcTCWwAqJ8ZhwOXH9PJKp2ivGC7fTcumZS/Ls58pICBmwTO/kWgZLkzD+7jKtQ==} + rock@0.14.1: + resolution: {integrity: sha512-cJs+EoTVFqk7mjE7SWMKTWrOBWBOIqXJ5puO0pRoKePHj4EadH+IJn+PHuyjrCWqJ3WJCU8Cl2jMSfc0RlL+lg==} hasBin: true rolldown-plugin-dts@0.22.5: @@ -24504,19 +25229,6 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} - rsbuild-plugin-dts@0.10.6: - resolution: {integrity: sha512-rVP82fFMDHW0GirhYx+w2bER1HhkOKJ8e/bAAF2OkMUP2k2fviMpl/gsnbO8KI9vcSqsQE2QXHkj781m6W84Ow==} - engines: {node: '>=16.7.0'} - peerDependencies: - '@microsoft/api-extractor': ^7 - '@rsbuild/core': 1.x - typescript: ^5 - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - typescript: - optional: true - rsbuild-plugin-dts@0.12.4: resolution: {integrity: sha512-+T8/jVMneNZgHG7Mw4fjuL5lqa5+sDDKKY5cxNLxD9erYpNGIpVlU31MNE94lvjMmhlK4u5hW/g10u72Fl/FVw==} engines: {node: '>=18.12.0'} @@ -24530,14 +25242,14 @@ packages: typescript: optional: true - rsbuild-plugin-dts@0.18.5: - resolution: {integrity: sha512-J17XXR5lNNHxXOG/Zi4kpIpCsQDxh3InPdicHkqfWNX65ly11nVC+zB/5CSkQFYAgJbw/y4SDSsuzOfkNt9DwQ==} - engines: {node: '>=18.12.0'} + rsbuild-plugin-dts@0.23.2: + resolution: {integrity: sha512-Ve8WOSPyTBjxH40O/6fChJtflL7yqcUtt5zbF0eHDM4hIt35jqLocRlSdCxFJdQm0blTjl6+hkmPa/vNI06ArA==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@microsoft/api-extractor': ^7 - '@rsbuild/core': 1.x - '@typescript/native-preview': 7.x - typescript: ^5 + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + '@typescript/native-preview': ^7.0.0-0 + typescript: ^5 || ^6 || ^7.0.1-0 peerDependenciesMeta: '@microsoft/api-extractor': optional: true @@ -24575,6 +25287,12 @@ packages: '@rsbuild/core': optional: true + rsbuild-plugin-rsc@0.1.1: + resolution: {integrity: sha512-aDITXfKR7D6LudDZeErVIzftgVRK6qoA77Mt/Lnp90qXgRRT3X63yOq4bx8bRPeFXIp1Rp+KS3VJq1K9oWmkMQ==} + peerDependencies: + '@rsbuild/core': ^2.0.0 + react-server-dom-rspack: '*' + rslog@1.2.3: resolution: {integrity: sha512-antALPJaKBRPBU1X2q9t085K4htWDOOv/K1qhTUk7h0l1ePU/KbDqKJn19eKP0dk7PqMioeA0+fu3gyPXCsXxQ==} engines: {node: '>=14.17.6'} @@ -24591,16 +25309,16 @@ packages: '@rspack/core': optional: true - rspack-manifest-plugin@5.2.1: - resolution: {integrity: sha512-H3qyCumiEiWy9zhcPIYPr3J3SWyvypVJJY5wxjG5L8gYny6dfNHfk0gyICg1tGO+g4uQzvVHER875ek/I/J8UA==} + rspack-manifest-plugin@5.2.2: + resolution: {integrity: sha512-vynki1FQjdRaPYHKuiu5vxa/CT6v6pa601Q1nXWOHgdJ1HGID7/bShwuD1c6K4GWboJYl590iD0i6hoUi4AAhA==} peerDependencies: - '@rspack/core': ^1.0.0 || ^2.0.0-0 + '@rspack/core': ^1.0.0 || ^2.0.0 peerDependenciesMeta: '@rspack/core': optional: true - rspack-vue-loader@17.5.0: - resolution: {integrity: sha512-hJrL2+jytfTs6ORHBOKTh5lU7BVZvmv7afELuQfyEpGC1ll7MKj1BxlgAIbhd6pZwoEwfdH79Lewtwe4VOlfCQ==} + rspack-vue-loader@17.5.1: + resolution: {integrity: sha512-1pXdeqYM95P0T8DO2ZcOCBnfMp62W5IG2c0RICn1rFYjHcja41IYSQLzcdc1uePEq0n4JZwvfR2lVs8wRZuwzA==} peerDependencies: '@rspack/core': ^1.0.0 || ^2.0.0-0 '@vue/compiler-sfc': '*' @@ -24613,6 +25331,11 @@ packages: vue: optional: true + rstest-fetch-mock@0.1.0: + resolution: {integrity: sha512-4OlF+nBmtL5PDtIJqpRdIgyTpaWDVnipMigAB8qsXLvje0oqTZ7x+PyoSARL/+QacnZIF4FHHOSGVYH2AGdJHA==} + peerDependencies: + '@rstest/core': '>=0.10.0' + run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -25058,6 +25781,10 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serialize-javascript@7.0.7: + resolution: {integrity: sha512-YAy8Od6KV+uuwUuU50np8fGB/Aues6Y0nAhA9y/hId74PlKUcme4pXcBD46NWKr1Q4osN/iseZ17YqO1XfmI8g==} + engines: {node: '>=20.0.0'} + serve-handler@6.1.6: resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} @@ -25920,6 +26647,11 @@ packages: engines: {node: '>=10'} hasBin: true + terser@5.48.0: + resolution: {integrity: sha512-J/9An6vs9Us6wKRriSFXBWdRZapREHqFzdNUKk0pmu804EMR6dr6winwo7e5JDxN4xahxQsuysyYFwlwj4XN/Q==} + engines: {node: '>=10'} + hasBin: true + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -26141,6 +26873,18 @@ packages: '@rspack/core': optional: true + ts-checker-rspack-plugin@1.5.1: + resolution: {integrity: sha512-h0jF3PAIrG+UA2nZ2OPUEt0NywkpiJkydkoVg/Kd1OFPFlrayNBJoSP0zeNPUpdsFEt7ICX1BjENCfOH9nmMyA==} + peerDependencies: + '@rspack/core': ^1.0.0 || ^2.0.0 + '@typescript/native-preview': ^7.0.0-0 + typescript: '>=3.8.0' + peerDependenciesMeta: + '@rspack/core': + optional: true + '@typescript/native-preview': + optional: true + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -26197,20 +26941,6 @@ packages: ts-morph@12.0.0: resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} - ts-node@10.8.2: - resolution: {integrity: sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - ts-node@10.9.1: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -26465,24 +27195,24 @@ packages: engines: {node: '>=12.20'} hasBin: true - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} hasBin: true typical@4.0.0: @@ -26897,15 +27627,6 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-plugin-dts@4.5.4: - resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} - peerDependencies: - typescript: '*' - vite: '*' - peerDependenciesMeta: - vite: - optional: true - vite-tsconfig-paths@4.2.3: resolution: {integrity: sha512-xVsA2xe6QSlzBujtWF8q2NYexh7PAUYfzJ4C8Axpe/7d2pcERYxuxGgph9F4f0iQO36g5tyGq6eBUYIssdUrVw==} peerDependencies: @@ -26985,12 +27706,6 @@ packages: yaml: optional: true - vitest-fetch-mock@0.2.2: - resolution: {integrity: sha512-XmH6QgTSjCWrqXoPREIdbj40T7i1xnGmAsTAgfckoO75W1IEHKR8hcPCQ7SO16RsdW1t85oUm6pcQRLeBgjVYQ==} - engines: {node: '>=14.14.0'} - peerDependencies: - vitest: '>=0.16.0' - vitest@1.2.2: resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==} engines: {node: ^18.0.0 || >=20.0.0} @@ -27517,6 +28232,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -27576,6 +28296,30 @@ packages: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} + zephyr-agent@1.1.2: + resolution: {integrity: sha512-mJlj9VL2P+wzaLge5sF27LrYBP+wVj+5BiNaQIPTsLSiU9Om3CXHXWTR6ss0w4FIdYazrJyAq2KFw3PgKsBDgA==} + + zephyr-edge-contract@1.1.2: + resolution: {integrity: sha512-ZeHYPIrDifKutPzTsjPjHP9JIdPqTpyBESeHHZzG8VSzo6UT58tpwUnDDgJtF/ONwresnD/0ypEYxfBxtcrV6Q==} + + zephyr-rsbuild-plugin@1.1.2: + resolution: {integrity: sha512-MhXfQ9oCP76LBDDc8Yl21ridsXFMobvTIjjyYbi+4LpOIof8ap+ZLyVtE14S1w4VyDerZNIzenOEJGbvJ5I/9g==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + + zephyr-rspack-plugin@1.1.2: + resolution: {integrity: sha512-OFIghyy2GXaLB/RLJCEWmRoXQf0FNvNB2VQJL3mWofk8oNRu1PxYCxCJ3ThAGN2tRJv0sCjMpzqpuHU+h3Kv/A==} + peerDependencies: + '@rspack/core': ^1.0.0 || ^2.0.0-0 + + zephyr-rspress-plugin@1.1.2: + resolution: {integrity: sha512-Leu8MDGzJrzUneP4fnLN1YGO6vHqLuSQ5LtIBbnmZP2IzGoEniiqRaj33oqNGK9cyWZfj8F5TvwHbbJ4vemYdA==} + peerDependencies: + '@rspress/core': ^2.0.0 + + zephyr-xpack-internal@1.1.2: + resolution: {integrity: sha512-IYs5aMOxGXH3YGv7Z9uW5pH9/r15UNNEg4CdSuWDDTJ7MskMVmHjSYwM57AYxHvMw/loVXOY1PQDVaUxklOUfQ==} + zod-to-json-schema@3.25.1: resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} peerDependencies: @@ -27925,11 +28669,11 @@ snapshots: dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.12.9) - '@babel/helpers': 7.29.2 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.12.9) + '@babel/helpers': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 convert-source-map: 1.9.0 debug: 4.4.3(supports-color@8.1.1) @@ -28033,6 +28777,10 @@ snapshots: dependencies: '@babel/types': 7.29.7 + '@babel/helper-annotate-as-pure@7.29.7': + dependencies: + '@babel/types': 7.29.7 + '@babel/helper-compilation-targets@7.28.6': dependencies: '@babel/compat-data': 7.29.0 @@ -28057,7 +28805,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -28070,7 +28818,20 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.7) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/traverse': 7.29.7 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -28117,21 +28878,28 @@ snapshots: '@babel/helper-member-expression-to-functions@7.28.5': dependencies: - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.29.7': + dependencies: + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.28.6(supports-color@5.5.0)': dependencies: - '@babel/traverse': 7.29.0(supports-color@5.5.0) + '@babel/traverse': 7.29.7(supports-color@5.5.0) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -28143,12 +28911,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.12.9)': + '@babel/helper-module-imports@7.29.7(supports-color@5.5.0)': dependencies: - '@babel/core': 7.12.9 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7(supports-color@5.5.0) + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -28170,6 +28936,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.29.7(@babel/core@7.12.9)': + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -28183,16 +28958,22 @@ snapshots: dependencies: '@babel/types': 7.29.7 + '@babel/helper-optimise-call-expression@7.29.7': + dependencies: + '@babel/types': 7.29.7 + '@babel/helper-plugin-utils@7.10.4': {} '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-plugin-utils@7.29.7': {} + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28201,7 +28982,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28210,7 +28991,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28219,13 +29000,29 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-member-expression-to-functions': 7.28.5 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.29.7': + dependencies: + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -28249,7 +29046,7 @@ snapshots: '@babel/helper-wrap-function@7.28.6': dependencies: '@babel/template': 7.29.7 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -28280,7 +29077,7 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28288,7 +29085,7 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28334,7 +29131,7 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28342,7 +29139,7 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28355,15 +29152,38 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-decorators@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-decorators': 7.29.7(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-proposal-object-rest-spread@7.12.1(@babel/core@7.12.9)': dependencies: '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.10.4 + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.12.9) @@ -28372,12 +29192,23 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-proposal-partial-application@7.27.1(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-proposal-pipeline-operator@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-pipeline-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-proposal-pipeline-operator@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-pipeline-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -28431,6 +29262,16 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-decorators@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -28446,6 +29287,11 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-flow@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -28496,6 +29342,16 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -28566,6 +29422,11 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-pipeline-operator@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -28591,6 +29452,16 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -28618,7 +29489,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28627,7 +29498,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.7) - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28685,6 +29556,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -28706,10 +29585,10 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-globals': 7.28.0 + '@babel/helper-globals': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28718,10 +29597,10 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-globals': 7.28.0 + '@babel/helper-globals': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.7) - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28729,19 +29608,19 @@ snapshots: dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/template': 7.28.6 + '@babel/template': 7.29.7 '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/template': 7.28.6 + '@babel/template': 7.29.7 '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28749,7 +29628,7 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28839,6 +29718,12 @@ snapshots: '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -28860,7 +29745,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28869,7 +29754,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28945,13 +29830,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -28961,7 +29854,7 @@ snapshots: '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -29030,7 +29923,7 @@ snapshots: '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -29041,7 +29934,7 @@ snapshots: '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.7) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.7) - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -29156,6 +30049,11 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -29163,6 +30061,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -29184,12 +30089,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.7) + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -29234,6 +30156,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.7) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -29301,6 +30235,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -29499,25 +30455,25 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-flow@7.27.1(@babel/core@7.29.0)': + '@babel/preset-flow@7.27.1(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.0) + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.29.7) '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 esutils: 2.0.3 '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 esutils: 2.0.3 '@babel/preset-react@7.28.5(@babel/core@7.29.0)': @@ -29532,6 +30488,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-react@7.28.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -29543,6 +30511,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-typescript@7.28.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + '@babel/register@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -29552,6 +30542,15 @@ snapshots: pirates: 4.0.7 source-map-support: 0.5.21 + '@babel/register@7.28.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.7 + source-map-support: 0.5.21 + '@babel/runtime@7.28.2': {} '@babel/runtime@7.29.2': {} @@ -29580,19 +30579,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.29.0(supports-color@5.5.0)': + '@babel/traverse@7.29.7': dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - debug: 4.4.3(supports-color@5.5.0) + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.7(supports-color@5.5.0)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -29600,7 +30599,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/template': 7.29.7 '@babel/types': 7.29.7 - debug: 4.4.3(supports-color@8.1.1) + debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -29917,11 +30916,11 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@commitlint/cli@19.8.1(@types/node@20.19.5)(typescript@5.9.3)': + '@commitlint/cli@19.8.1(@types/node@20.19.5)(typescript@6.0.3)': dependencies: '@commitlint/format': 19.8.1 '@commitlint/lint': 19.8.1 - '@commitlint/load': 19.8.1(@types/node@20.19.5)(typescript@5.9.3) + '@commitlint/load': 19.8.1(@types/node@20.19.5)(typescript@6.0.3) '@commitlint/read': 19.8.1 '@commitlint/types': 19.8.1 tinyexec: 1.0.4 @@ -29946,13 +30945,13 @@ snapshots: ajv: 8.18.0 optional: true - '@commitlint/cz-commitlint@19.5.0(@types/node@20.19.5)(commitizen@4.3.1(@types/node@20.19.5)(typescript@5.9.3))(inquirer@8.2.7(@types/node@20.19.5))(typescript@5.9.3)': + '@commitlint/cz-commitlint@19.5.0(@types/node@20.19.5)(commitizen@4.3.1(@types/node@20.19.5)(typescript@6.0.3))(inquirer@8.2.7(@types/node@20.19.5))(typescript@6.0.3)': dependencies: '@commitlint/ensure': 19.8.1 - '@commitlint/load': 19.8.1(@types/node@20.19.5)(typescript@5.9.3) + '@commitlint/load': 19.8.1(@types/node@20.19.5)(typescript@6.0.3) '@commitlint/types': 19.8.1 chalk: 5.6.2 - commitizen: 4.3.1(@types/node@20.19.5)(typescript@5.9.3) + commitizen: 4.3.1(@types/node@20.19.5)(typescript@6.0.3) inquirer: 8.2.7(@types/node@20.19.5) lodash.isplainobject: 4.0.6 word-wrap: 1.2.5 @@ -29991,15 +30990,15 @@ snapshots: '@commitlint/rules': 19.8.1 '@commitlint/types': 19.8.1 - '@commitlint/load@19.8.1(@types/node@20.19.5)(typescript@5.9.3)': + '@commitlint/load@19.8.1(@types/node@20.19.5)(typescript@6.0.3)': dependencies: '@commitlint/config-validator': 19.8.1 '@commitlint/execute-rule': 19.8.1 '@commitlint/resolve-extends': 19.8.1 '@commitlint/types': 19.8.1 chalk: 5.6.2 - cosmiconfig: 9.0.1(typescript@5.9.3) - cosmiconfig-typescript-loader: 6.2.0(@types/node@20.19.5)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.2.0(@types/node@20.19.5)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -30007,14 +31006,14 @@ snapshots: - '@types/node' - typescript - '@commitlint/load@20.5.0(@types/node@20.19.5)(typescript@5.9.3)': + '@commitlint/load@20.5.0(@types/node@20.19.5)(typescript@6.0.3)': dependencies: '@commitlint/config-validator': 20.5.0 '@commitlint/execute-rule': 20.0.0 '@commitlint/resolve-extends': 20.5.0 '@commitlint/types': 20.5.0 - cosmiconfig: 9.0.1(typescript@5.9.3) - cosmiconfig-typescript-loader: 6.2.0(@types/node@20.19.5)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.2.0(@types/node@20.19.5)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) is-plain-obj: 4.1.0 lodash.mergewith: 4.6.2 picocolors: 1.1.1 @@ -30161,6 +31160,12 @@ snapshots: dependencies: '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 + optional: true + + '@emnapi/core@1.11.1': + dependencies: + '@emnapi/wasi-threads': 1.2.2 + tslib: 2.8.1 '@emnapi/core@1.9.0': dependencies: @@ -30171,6 +31176,11 @@ snapshots: '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.1': + dependencies: + tslib: 2.8.1 '@emnapi/runtime@1.9.0': dependencies: @@ -30185,10 +31195,15 @@ snapshots: '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.2': + dependencies: + tslib: 2.8.1 '@emotion/babel-plugin@11.13.5': dependencies: - '@babel/helper-module-imports': 7.28.6 + '@babel/helper-module-imports': 7.29.7 '@babel/runtime': 7.28.2 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 @@ -30941,9 +31956,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/metro-runtime@5.0.4(react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@5.9.3))(@types/react@19.2.14)(react@19.1.0))': + '@expo/metro-runtime@5.0.4(react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@6.0.3))(@types/react@19.2.14)(react@19.1.0))': dependencies: - react-native: 0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@5.9.3))(@types/react@19.2.14)(react@19.1.0) + react-native: 0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@6.0.3))(@types/react@19.2.14)(react@19.1.0) '@expo/spawn-async@1.7.2': dependencies: @@ -31028,9 +32043,9 @@ snapshots: react-dom: 19.2.7(react@19.2.7) use-sync-external-store: 1.6.0(react@19.2.7) - '@headlessui/tailwindcss@0.2.2(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)))': + '@headlessui/tailwindcss@0.2.2(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)))': dependencies: - tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) '@heroicons/react@2.2.0(react@19.0.0-rc-cd22717c-20241013)': dependencies: @@ -31242,7 +32257,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -31256,7 +32271,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -31277,7 +32292,7 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -31291,7 +32306,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -31312,7 +32327,7 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -31326,7 +32341,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -31391,6 +32406,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/pattern@30.4.0': + dependencies: + '@types/node': 20.19.5 + jest-regex-util: 30.4.0 + '@jest/reporters@29.7.0': dependencies: '@bcoe/v8-coverage': 0.2.3 @@ -31428,6 +32448,10 @@ snapshots: dependencies: '@sinclair/typebox': 0.34.48 + '@jest/schemas@30.4.1': + dependencies: + '@sinclair/typebox': 0.34.48 + '@jest/source-map@29.6.3': dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -31450,7 +32474,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 @@ -31485,6 +32509,16 @@ snapshots: '@types/yargs': 17.0.35 chalk: 4.1.2 + '@jest/types@30.4.1': + dependencies: + '@jest/pattern': 30.4.0 + '@jest/schemas': 30.4.1 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.19.5 + '@types/yargs': 17.0.35 + chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -31545,6 +32579,13 @@ snapshots: thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/fs-core@4.58.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.58.0(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/fs-fsa@4.56.11(tslib@2.8.1)': dependencies: '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) @@ -31553,10 +32594,22 @@ snapshots: thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/fs-fsa@4.58.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.58.0(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/fs-node-builtins@4.56.11(tslib@2.8.1)': dependencies: tslib: 2.8.1 + '@jsonjoy.com/fs-node-builtins@4.58.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + '@jsonjoy.com/fs-node-to-fsa@4.56.11(tslib@2.8.1)': dependencies: '@jsonjoy.com/fs-fsa': 4.56.11(tslib@2.8.1) @@ -31564,11 +32617,23 @@ snapshots: '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/fs-node-to-fsa@4.58.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-fsa': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.58.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/fs-node-utils@4.56.11(tslib@2.8.1)': dependencies: '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/fs-node-utils@4.58.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.58.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/fs-node@4.56.11(tslib@2.8.1)': dependencies: '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) @@ -31580,12 +32645,29 @@ snapshots: thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/fs-node@4.58.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.58.0(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/fs-print@4.56.11(tslib@2.8.1)': dependencies: '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/fs-print@4.58.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-utils': 4.58.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/fs-snapshot@4.56.11(tslib@2.8.1)': dependencies: '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) @@ -31594,6 +32676,14 @@ snapshots: '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) tslib: 2.8.1 + '@jsonjoy.com/fs-snapshot@4.58.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)': dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) @@ -31763,7 +32853,7 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 - acorn: 8.16.0 + acorn: 8.17.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -31772,7 +32862,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.16.0) + recma-jsx: 1.0.1(acorn@8.17.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.1 @@ -31829,11 +32919,11 @@ snapshots: mermaid: 11.16.0 optional: true - '@mermaid-js/mermaid-cli@11.16.0(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(playwright-core@1.57.0)(puppeteer@25.3.0(yauzl@2.10.0))(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)))': + '@mermaid-js/mermaid-cli@11.16.0(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(playwright-core@1.57.0)(puppeteer@25.3.0(yauzl@2.10.0))(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)))': dependencies: '@fortawesome/fontawesome-free': 7.3.0 '@mermaid-js/layout-elk': 0.2.2(mermaid@11.16.0) - '@mermaid-js/mermaid-zenuml': 0.2.3(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(mermaid@11.16.0)(playwright-core@1.57.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3))) + '@mermaid-js/mermaid-zenuml': 0.2.3(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(mermaid@11.16.0)(playwright-core@1.57.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3))) chalk: 5.6.2 commander: 13.1.0 import-meta-resolve: 4.2.0 @@ -31850,9 +32940,9 @@ snapshots: - playwright-core - tailwindcss - '@mermaid-js/mermaid-zenuml@0.2.3(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(mermaid@11.16.0)(playwright-core@1.57.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)))': + '@mermaid-js/mermaid-zenuml@0.2.3(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(mermaid@11.16.0)(playwright-core@1.57.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)))': dependencies: - '@zenuml/core': 3.50.1(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(playwright-core@1.57.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3))) + '@zenuml/core': 3.50.1(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(playwright-core@1.57.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3))) mermaid: 11.16.0 transitivePeerDependencies: - '@babel/core' @@ -31872,6 +32962,7 @@ snapshots: '@rushstack/node-core-library': 5.20.3(@types/node@20.19.5) transitivePeerDependencies: - '@types/node' + optional: true '@microsoft/api-extractor-model@7.33.4(@types/node@22.19.15)': dependencies: @@ -31889,6 +32980,7 @@ snapshots: '@rushstack/node-core-library': 5.20.3(@types/node@26.1.0) transitivePeerDependencies: - '@types/node' + optional: true '@microsoft/api-extractor@7.57.7(@types/node@20.19.5)': dependencies: @@ -31902,12 +32994,13 @@ snapshots: diff: 8.0.3 lodash: 4.17.23 minimatch: 10.2.3 - resolve: 1.22.8 + resolve: 1.22.11 semver: 7.5.4 source-map: 0.6.1 typescript: 5.8.2 transitivePeerDependencies: - '@types/node' + optional: true '@microsoft/api-extractor@7.57.7(@types/node@22.19.15)': dependencies: @@ -31921,7 +33014,7 @@ snapshots: diff: 8.0.3 lodash: 4.17.23 minimatch: 10.2.3 - resolve: 1.22.8 + resolve: 1.22.11 semver: 7.5.4 source-map: 0.6.1 typescript: 5.8.2 @@ -31941,21 +33034,24 @@ snapshots: diff: 8.0.3 lodash: 4.17.23 minimatch: 10.2.3 - resolve: 1.22.8 + resolve: 1.22.11 semver: 7.5.4 source-map: 0.6.1 typescript: 5.8.2 transitivePeerDependencies: - '@types/node' + optional: true '@microsoft/tsdoc-config@0.18.1': dependencies: '@microsoft/tsdoc': 0.16.0 ajv: 8.18.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.11 + optional: true - '@microsoft/tsdoc@0.16.0': {} + '@microsoft/tsdoc@0.16.0': + optional: true '@modelcontextprotocol/sdk@1.27.1(zod@3.25.76)': dependencies: @@ -31979,53 +33075,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@modern-js-app/eslint-config@2.59.0(typescript@5.0.4)': - dependencies: - '@babel/core': 7.29.0 - '@babel/eslint-parser': 7.28.6(@babel/core@7.29.0)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@8.57.1))(eslint@8.57.1) - '@modern-js/babel-preset': 2.59.0(@rsbuild/core@1.0.1-rc.4) - '@rsbuild/core': 1.0.1-rc.4 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.0.4) - eslint: 8.57.1 - eslint-config-prettier: 8.10.2(eslint@8.57.1) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) - eslint-plugin-filenames: 1.3.2(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1) - eslint-plugin-node: 11.1.0(eslint@8.57.1) - eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) - eslint-plugin-promise: 6.6.0(eslint@8.57.1) - eslint-plugin-react: 7.37.2(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - prettier: 2.8.8 - typescript: 5.0.4 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - '@modern-js-app/eslint-config@2.59.0(typescript@5.9.3)': + '@modern-js-app/eslint-config@2.59.0(typescript@7.0.2)': dependencies: '@babel/core': 7.29.0 '@babel/eslint-parser': 7.28.6(@babel/core@7.29.7)(eslint@8.57.1) '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@8.57.1))(eslint@8.57.1) '@modern-js/babel-preset': 2.59.0(@rsbuild/core@1.0.1-rc.4) '@rsbuild/core': 1.0.1-rc.4 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@7.0.2) eslint: 8.57.1 eslint-config-prettier: 8.10.2(eslint@8.57.1) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) eslint-plugin-filenames: 1.3.2(eslint@8.57.1) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1) eslint-plugin-node: 11.1.0(eslint@8.57.1) eslint-plugin-prettier: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@2.8.8) eslint-plugin-promise: 6.6.0(eslint@8.57.1) eslint-plugin-react: 7.37.2(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) prettier: 2.8.8 - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -32077,7 +33147,7 @@ snapshots: '@swc/helpers': 0.5.1 redux: 4.2.1 - '@modern-js/app-tools@2.70.5(@rspack/core@1.7.9(@swc/helpers@0.5.17))(@swc/core@1.15.10(@swc/helpers@0.5.17))(encoding@0.1.13)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.59.0)(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3))(tsconfig-paths@4.2.0)(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': + '@modern-js/app-tools@2.70.5(@rspack/core@1.7.9(@swc/helpers@0.5.17))(@swc/core@1.15.41(@swc/helpers@0.5.17))(encoding@0.1.13)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(rollup@4.59.0)(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/parser': 7.29.2 '@babel/traverse': 7.29.0 @@ -32089,12 +33159,12 @@ snapshots: '@modern-js/plugin-i18n': 2.70.5 '@modern-js/plugin-v2': 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@modern-js/prod-server': 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@modern-js/rsbuild-plugin-esbuild': 2.70.5(@swc/core@1.15.10(@swc/helpers@0.5.17))(webpack-cli@5.1.4) - '@modern-js/server': 2.70.5(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3))(tsconfig-paths@4.2.0) + '@modern-js/rsbuild-plugin-esbuild': 2.70.5(@swc/core@1.15.41(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + '@modern-js/server': 2.70.5(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2))(tsconfig-paths@4.2.0) '@modern-js/server-core': 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@modern-js/server-utils': 2.70.5(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3) '@modern-js/types': 2.70.5 - '@modern-js/uni-builder': 2.70.5(@rspack/core@1.7.9(@swc/helpers@0.5.17))(esbuild@0.25.5)(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) + '@modern-js/uni-builder': 2.70.5(@rspack/core@1.7.9(@swc/helpers@0.5.17))(esbuild@0.25.5)(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.70.5 '@rsbuild/core': 1.7.3 '@rsbuild/plugin-node-polyfill': 1.4.3(@rsbuild/core@1.7.3) @@ -32108,7 +33178,7 @@ snapshots: pkg-types: 1.3.1 std-env: 3.10.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@parcel/css' @@ -32139,7 +33209,7 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/app-tools@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@swc/core@1.15.10(@swc/helpers@0.5.19))(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@5.9.3))(tsconfig-paths@4.2.0)(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': + '@modern-js/app-tools@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@swc/core@1.15.41(@swc/helpers@0.5.19))(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rollup@4.59.0)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/parser': 7.29.2 '@babel/traverse': 7.29.0 @@ -32151,12 +33221,12 @@ snapshots: '@modern-js/plugin-i18n': 2.70.8 '@modern-js/plugin-v2': 2.70.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@modern-js/prod-server': 2.70.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@modern-js/rsbuild-plugin-esbuild': 2.70.8(@swc/core@1.15.10(@swc/helpers@0.5.19))(webpack-cli@5.1.4) - '@modern-js/server': 2.70.8(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@5.9.3))(tsconfig-paths@4.2.0) + '@modern-js/rsbuild-plugin-esbuild': 2.70.8(@swc/core@1.15.41(@swc/helpers@0.5.19))(webpack-cli@5.1.4) + '@modern-js/server': 2.70.8(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0) '@modern-js/server-core': 2.70.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@modern-js/server-utils': 2.70.8(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3) '@modern-js/types': 2.70.8 - '@modern-js/uni-builder': 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(esbuild@0.25.5)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) + '@modern-js/uni-builder': 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(esbuild@0.25.5)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.70.8 '@rsbuild/core': 1.7.3 '@rsbuild/plugin-node-polyfill': 1.4.4(@rsbuild/core@1.7.3) @@ -32170,7 +33240,7 @@ snapshots: pkg-types: 1.3.1 std-env: 3.10.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@parcel/css' @@ -32201,39 +33271,40 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/app-tools@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.9.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4))': + '@modern-js/app-tools@3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4))': dependencies: - '@babel/parser': 7.29.2 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@modern-js/builder': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17))(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@5.9.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) - '@modern-js/i18n-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin-data-loader': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/prod-server': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3))(tsconfig-paths@4.2.0) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) + '@babel/parser': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@modern-js/builder': 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)) + '@modern-js/i18n-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin-data-loader': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/prod-server': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2))(tsconfig-paths@4.2.0) + '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 es-module-lexer: 1.7.0 - esbuild: 0.25.5 - esbuild-register: 3.6.0(esbuild@0.25.5) flatted: 3.4.2 - mlly: 1.8.1 + import-meta-resolve: 4.2.0 + mlly: 1.8.2 ndepe: 0.1.13(encoding@0.1.13)(rollup@4.59.0) pkg-types: 1.3.1 std-env: 3.10.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@parcel/css' - '@rspack/core' - '@swc/css' + - '@typescript/native-preview' - bufferutil - clean-css - core-js @@ -32241,50 +33312,52 @@ snapshots: - debug - devcert - encoding + - esbuild - lightningcss - react - react-dom + - react-server-dom-rspack - rollup - supports-color - tslib - typescript - utf-8-validate - webpack - - webpack-hot-middleware - '@modern-js/app-tools@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@3.14.2)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': + '@modern-js/app-tools@3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@3.14.2)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': dependencies: - '@babel/parser': 7.29.2 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@modern-js/builder': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) - '@modern-js/i18n-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin-data-loader': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/prod-server': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@3.14.2) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@babel/parser': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@modern-js/builder': 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + '@modern-js/i18n-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin-data-loader': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/prod-server': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@3.14.2) + '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 es-module-lexer: 1.7.0 - esbuild: 0.25.5 - esbuild-register: 3.6.0(esbuild@0.25.5) flatted: 3.4.2 - mlly: 1.8.1 + import-meta-resolve: 4.2.0 + mlly: 1.8.2 ndepe: 0.1.13(encoding@0.1.13)(rollup@4.59.0) pkg-types: 1.3.1 std-env: 3.10.0 optionalDependencies: - ts-node: 10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) tsconfig-paths: 3.14.2 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@parcel/css' - '@rspack/core' - '@swc/css' + - '@typescript/native-preview' - bufferutil - clean-css - core-js @@ -32292,101 +33365,52 @@ snapshots: - debug - devcert - encoding + - esbuild - lightningcss - react - react-dom + - react-server-dom-rspack - rollup - supports-color - tslib - typescript - utf-8-validate - webpack - - webpack-hot-middleware - - '@modern-js/app-tools@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': - dependencies: - '@babel/parser': 7.29.2 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@modern-js/builder': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) - '@modern-js/i18n-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin-data-loader': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/prod-server': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@swc/helpers': 0.5.17 - es-module-lexer: 1.7.0 - esbuild: 0.25.5 - esbuild-register: 3.6.0(esbuild@0.25.5) - flatted: 3.4.2 - mlly: 1.8.1 - ndepe: 0.1.13(encoding@0.1.13)(rollup@4.59.0) - pkg-types: 1.3.1 - std-env: 3.10.0 - optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4) - tsconfig-paths: 4.2.0 - transitivePeerDependencies: - - '@module-federation/runtime-tools' - - '@parcel/css' - - '@rspack/core' - - '@swc/css' - - bufferutil - - clean-css - - core-js - - csso - - debug - - devcert - - encoding - - lightningcss - - react - - react-dom - - rollup - - supports-color - - tslib - - typescript - - utf-8-validate - - webpack - - webpack-hot-middleware - '@modern-js/app-tools@3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(core-js@3.49.0)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': + '@modern-js/app-tools@3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(core-js@3.49.0)(encoding@0.1.13)(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': dependencies: - '@babel/parser': 7.29.2 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@modern-js/builder': 3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) - '@modern-js/i18n-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin': 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin-data-loader': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/prod-server': 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server': 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0) - '@modern-js/server-core': 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + '@babel/parser': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@modern-js/builder': 3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + '@modern-js/i18n-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin-data-loader': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/prod-server': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0) + '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 es-module-lexer: 1.7.0 - esbuild: 0.25.5 - esbuild-register: 3.6.0(esbuild@0.25.5) flatted: 3.4.2 - mlly: 1.8.1 + import-meta-resolve: 4.2.0 + mlly: 1.8.2 ndepe: 0.1.13(encoding@0.1.13)(rollup@4.59.0) pkg-types: 1.3.1 std-env: 3.10.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@parcel/css' - '@rspack/core' - '@swc/css' + - '@typescript/native-preview' - bufferutil - clean-css - core-js @@ -32394,20 +33418,21 @@ snapshots: - debug - devcert - encoding + - esbuild - lightningcss - react - react-dom + - react-server-dom-rspack - rollup - supports-color - tslib - typescript - utf-8-validate - webpack - - webpack-hot-middleware '@modern-js/babel-compiler@2.68.0': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@modern-js/utils': 2.68.0 '@swc/helpers': 0.5.17 transitivePeerDependencies: @@ -32415,7 +33440,7 @@ snapshots: '@modern-js/babel-compiler@2.70.5': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@modern-js/utils': 2.70.5 '@swc/helpers': 0.5.17 transitivePeerDependencies: @@ -32423,7 +33448,7 @@ snapshots: '@modern-js/babel-compiler@2.70.8': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@modern-js/utils': 2.70.8 '@swc/helpers': 0.5.17 transitivePeerDependencies: @@ -32474,19 +33499,19 @@ snapshots: - '@rsbuild/core' - supports-color - '@modern-js/babel-preset@2.68.0(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': + '@modern-js/babel-preset@2.68.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-proposal-partial-application': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-proposal-pipeline-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.2(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-proposal-partial-application': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-proposal-pipeline-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.7) + '@babel/preset-env': 7.29.2(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) '@babel/runtime': 7.28.2 '@babel/types': 7.29.7 - '@rsbuild/plugin-babel': 1.0.5(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) + '@rsbuild/plugin-babel': 1.0.5(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) '@swc/helpers': 0.5.17 '@types/babel__core': 7.20.5 babel-plugin-dynamic-import-node: 2.3.3 @@ -32497,14 +33522,14 @@ snapshots: '@modern-js/babel-preset@2.70.5(@rsbuild/core@1.7.3)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-proposal-partial-application': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-proposal-pipeline-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.2(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-proposal-partial-application': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-proposal-pipeline-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.7) + '@babel/preset-env': 7.29.2(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) '@babel/runtime': 7.28.2 '@babel/types': 7.29.7 '@rsbuild/plugin-babel': 1.1.0(@rsbuild/core@1.7.3) @@ -32518,14 +33543,14 @@ snapshots: '@modern-js/babel-preset@2.70.8(@rsbuild/core@1.7.3)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-proposal-partial-application': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-proposal-pipeline-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.2(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-proposal-partial-application': 7.27.1(@babel/core@7.29.7) + '@babel/plugin-proposal-pipeline-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.7) + '@babel/preset-env': 7.29.2(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) '@babel/runtime': 7.28.2 '@babel/types': 7.29.7 '@rsbuild/plugin-babel': 1.1.0(@rsbuild/core@1.7.3) @@ -32537,158 +33562,109 @@ snapshots: - '@rsbuild/core' - supports-color - '@modern-js/builder@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17))(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@5.9.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4))': - dependencies: - '@modern-js/flight-server-transform-plugin': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) - '@rsbuild/plugin-assets-retry': 1.5.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)) - '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)) - '@rsbuild/plugin-css-minimizer': 1.1.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) - '@rsbuild/plugin-less': 1.6.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)) - '@rsbuild/plugin-react': 1.4.4(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(webpack-hot-middleware@2.26.1) - '@rsbuild/plugin-rem': 1.0.5(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)) - '@rsbuild/plugin-sass': 1.5.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)) - '@rsbuild/plugin-source-build': 1.0.4(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)) - '@rsbuild/plugin-svgr': 1.3.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(typescript@5.9.3)(webpack-hot-middleware@2.26.1) - '@rsbuild/plugin-type-check': 1.3.3(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@5.9.3) - '@rsbuild/plugin-typed-css-modules': 1.2.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)) - '@swc/core': 1.15.10(@swc/helpers@0.5.17) - '@swc/helpers': 0.5.17 - autoprefixer: 10.4.24(postcss@8.5.10) - browserslist: 4.28.1 - core-js: 3.49.0 - cssnano: 6.1.2(postcss@8.5.10) - html-minifier-terser: 7.2.0 - lodash: 4.18.1 - postcss: 8.5.10 - postcss-custom-properties: 13.3.12(postcss@8.5.10) - postcss-flexbugs-fixes: 5.0.2(postcss@8.5.10) - postcss-font-variant: 5.0.0(postcss@8.5.10) - postcss-initial: 4.0.1(postcss@8.5.10) - postcss-media-minmax: 5.0.0(postcss@8.5.10) - postcss-nesting: 12.1.5(postcss@8.5.10) - postcss-page-break: 3.0.4(postcss@8.5.10) - rspack-manifest-plugin: 5.2.1(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17)) - ts-deepmerge: 7.0.3 - transitivePeerDependencies: - - '@module-federation/runtime-tools' - - '@parcel/css' - - '@rspack/core' - - '@swc/css' - - clean-css - - csso - - esbuild - - lightningcss - - react - - react-dom - - supports-color - - tslib - - typescript - - webpack - - webpack-hot-middleware - - '@modern-js/builder@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': - dependencies: - '@modern-js/flight-server-transform-plugin': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@rsbuild/plugin-assets-retry': 1.5.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) - '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) - '@rsbuild/plugin-css-minimizer': 1.1.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) - '@rsbuild/plugin-less': 1.6.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) - '@rsbuild/plugin-react': 1.4.4(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(webpack-hot-middleware@2.26.1) - '@rsbuild/plugin-rem': 1.0.5(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) - '@rsbuild/plugin-sass': 1.5.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) - '@rsbuild/plugin-source-build': 1.0.4(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) - '@rsbuild/plugin-svgr': 1.3.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(typescript@5.0.4)(webpack-hot-middleware@2.26.1) - '@rsbuild/plugin-type-check': 1.3.3(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(tslib@2.8.1)(typescript@5.0.4) - '@rsbuild/plugin-typed-css-modules': 1.2.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) - '@swc/core': 1.15.10(@swc/helpers@0.5.17) + '@modern-js/builder@3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4))': + dependencies: + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@rsbuild/plugin-assets-retry': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-check-syntax': 2.0.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-css-minimizer': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)) + '@rsbuild/plugin-less': 1.6.4(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)) + '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17)) + '@rsbuild/plugin-rem': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-sass': 1.5.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-source-build': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-svgr': 2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(typescript@7.0.2) + '@rsbuild/plugin-type-check': 1.5.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2) + '@rsbuild/plugin-typed-css-modules': 1.2.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 - autoprefixer: 10.4.24(postcss@8.5.10) - browserslist: 4.28.1 + autoprefixer: 10.4.27(postcss@8.5.15) + browserslist: 4.28.2 core-js: 3.49.0 - cssnano: 6.1.2(postcss@8.5.10) + cssnano: 6.1.2(postcss@8.5.15) html-minifier-terser: 7.2.0 lodash: 4.18.1 - postcss: 8.5.10 - postcss-custom-properties: 13.3.12(postcss@8.5.10) - postcss-flexbugs-fixes: 5.0.2(postcss@8.5.10) - postcss-font-variant: 5.0.0(postcss@8.5.10) - postcss-initial: 4.0.1(postcss@8.5.10) - postcss-media-minmax: 5.0.0(postcss@8.5.10) - postcss-nesting: 12.1.5(postcss@8.5.10) - postcss-page-break: 3.0.4(postcss@8.5.10) - rspack-manifest-plugin: 5.2.1(@rspack/core@1.3.9(@swc/helpers@0.5.13)) + postcss: 8.5.15 + postcss-custom-properties: 13.3.12(postcss@8.5.15) + postcss-flexbugs-fixes: 5.0.2(postcss@8.5.15) + postcss-font-variant: 5.0.0(postcss@8.5.15) + postcss-initial: 4.0.1(postcss@8.5.15) + postcss-media-minmax: 5.0.0(postcss@8.5.15) + postcss-nesting: 12.1.5(postcss@8.5.15) + postcss-page-break: 3.0.4(postcss@8.5.15) + rsbuild-plugin-rsc: 0.1.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + rspack-manifest-plugin: 5.2.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17)) ts-deepmerge: 7.0.3 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@parcel/css' - '@rspack/core' - '@swc/css' + - '@typescript/native-preview' - clean-css - csso - esbuild - lightningcss - react - react-dom + - react-server-dom-rspack - supports-color - tslib - typescript - webpack - - webpack-hot-middleware - '@modern-js/builder@3.0.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(esbuild@0.25.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@5.0.4)(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': - dependencies: - '@modern-js/flight-server-transform-plugin': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) - '@rsbuild/plugin-assets-retry': 1.5.1(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0)) - '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0)) - '@rsbuild/plugin-css-minimizer': 1.1.1(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) - '@rsbuild/plugin-less': 1.6.0(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0)) - '@rsbuild/plugin-react': 1.4.4(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(webpack-hot-middleware@2.26.1) - '@rsbuild/plugin-rem': 1.0.5(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0)) - '@rsbuild/plugin-sass': 1.5.0(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0)) - '@rsbuild/plugin-source-build': 1.0.4(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0)) - '@rsbuild/plugin-svgr': 1.3.0(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(typescript@5.0.4)(webpack-hot-middleware@2.26.1) - '@rsbuild/plugin-type-check': 1.3.3(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(tslib@2.8.1)(typescript@5.0.4) - '@rsbuild/plugin-typed-css-modules': 1.2.1(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0)) - '@swc/core': 1.15.10(@swc/helpers@0.5.17) + '@modern-js/builder@3.5.0(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(esbuild@0.28.1)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': + dependencies: + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@rsbuild/plugin-assets-retry': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-check-syntax': 2.0.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-css-minimizer': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + '@rsbuild/plugin-less': 1.6.4(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) + '@rsbuild/plugin-rem': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-sass': 1.5.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-source-build': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@rsbuild/plugin-svgr': 2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(typescript@7.0.2) + '@rsbuild/plugin-type-check': 1.5.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2) + '@rsbuild/plugin-typed-css-modules': 1.2.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 - autoprefixer: 10.4.24(postcss@8.5.10) - browserslist: 4.28.1 + autoprefixer: 10.4.27(postcss@8.5.15) + browserslist: 4.28.2 core-js: 3.49.0 - cssnano: 6.1.2(postcss@8.5.10) + cssnano: 6.1.2(postcss@8.5.15) html-minifier-terser: 7.2.0 lodash: 4.18.1 - postcss: 8.5.10 - postcss-custom-properties: 13.3.12(postcss@8.5.10) - postcss-flexbugs-fixes: 5.0.2(postcss@8.5.10) - postcss-font-variant: 5.0.0(postcss@8.5.10) - postcss-initial: 4.0.1(postcss@8.5.10) - postcss-media-minmax: 5.0.0(postcss@8.5.10) - postcss-nesting: 12.1.5(postcss@8.5.10) - postcss-page-break: 3.0.4(postcss@8.5.10) - rspack-manifest-plugin: 5.2.1(@rspack/core@1.3.9(@swc/helpers@0.5.13)) + postcss: 8.5.15 + postcss-custom-properties: 13.3.12(postcss@8.5.15) + postcss-flexbugs-fixes: 5.0.2(postcss@8.5.15) + postcss-font-variant: 5.0.0(postcss@8.5.15) + postcss-initial: 4.0.1(postcss@8.5.15) + postcss-media-minmax: 5.0.0(postcss@8.5.15) + postcss-nesting: 12.1.5(postcss@8.5.15) + postcss-page-break: 3.0.4(postcss@8.5.15) + rsbuild-plugin-rsc: 0.1.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + rspack-manifest-plugin: 5.2.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) ts-deepmerge: 7.0.3 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@parcel/css' - '@rspack/core' - '@swc/css' + - '@typescript/native-preview' - clean-css - csso - esbuild - lightningcss - react - react-dom + - react-server-dom-rspack - supports-color - tslib - typescript - webpack - - webpack-hot-middleware '@modern-js/core@2.70.5': dependencies: @@ -32704,18 +33680,9 @@ snapshots: '@modern-js/utils': 2.70.8 '@swc/helpers': 0.5.17 - '@modern-js/eslint-config@2.59.0(typescript@5.0.4)': - dependencies: - '@modern-js-app/eslint-config': 2.59.0(typescript@5.0.4) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - typescript - - '@modern-js/eslint-config@2.59.0(typescript@5.9.3)': + '@modern-js/eslint-config@2.59.0(typescript@7.0.2)': dependencies: - '@modern-js-app/eslint-config': 2.59.0(typescript@5.9.3) + '@modern-js-app/eslint-config': 2.59.0(typescript@7.0.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -32726,17 +33693,15 @@ snapshots: '@modern-js/flight-server-transform-plugin@2.70.8': {} - '@modern-js/flight-server-transform-plugin@3.0.1': {} - - '@modern-js/i18n-utils@3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/i18n-utils@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 transitivePeerDependencies: - react - react-dom - '@modern-js/module-tools@2.70.5(@types/node@26.1.0)(typescript@5.9.3)': + '@modern-js/module-tools@2.70.5(@types/node@26.1.0)(typescript@7.0.2)': dependencies: '@ampproject/remapping': 2.3.0 '@ast-grep/napi': 0.35.0 @@ -32765,13 +33730,13 @@ snapshots: terser: 5.46.1 tsconfig-paths-webpack-plugin: 4.1.0 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - '@types/node' - debug - supports-color - '@modern-js/module-tools@2.70.8(@types/node@20.19.5)(typescript@5.9.3)': + '@modern-js/module-tools@2.70.8(@types/node@20.19.5)(typescript@7.0.2)': dependencies: '@ampproject/remapping': 2.3.0 '@ast-grep/napi': 0.35.0 @@ -32800,7 +33765,7 @@ snapshots: terser: 5.46.1 tsconfig-paths-webpack-plugin: 4.1.0 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - '@types/node' - debug @@ -32826,7 +33791,7 @@ snapshots: '@modern-js/plugin-i18n': 2.70.5 '@modern-js/utils': 2.70.5 '@swc/helpers': 0.5.17 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) resolve-from: 5.0.0 transitivePeerDependencies: - '@types/node' @@ -32841,7 +33806,7 @@ snapshots: '@modern-js/plugin-i18n': 2.70.8 '@modern-js/utils': 2.70.8 '@swc/helpers': 0.5.17 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) resolve-from: 5.0.0 transitivePeerDependencies: - '@types/node' @@ -32850,7 +33815,7 @@ snapshots: '@modern-js/plugin-data-loader@2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@modern-js/runtime-utils': 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@modern-js/utils': 2.70.5 '@swc/helpers': 0.5.17 @@ -32872,10 +33837,10 @@ snapshots: - react-dom - supports-color - '@modern-js/plugin-data-loader@3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/plugin-data-loader@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 path-to-regexp: 6.3.0 react: 18.3.1 @@ -32892,10 +33857,10 @@ snapshots: '@modern-js/utils': 2.70.8 '@swc/helpers': 0.5.17 - '@modern-js/plugin-server@2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/plugin-server@2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@modern-js/runtime-utils': 2.68.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) + '@modern-js/server-utils': 2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) '@modern-js/utils': 2.68.0 '@swc/helpers': 0.5.17 transitivePeerDependencies: @@ -32905,7 +33870,7 @@ snapshots: - react-dom - supports-color - '@modern-js/plugin-state@2.70.8(@modern-js/runtime@2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@modern-js/plugin-state@2.70.8(@modern-js/runtime@2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@modern-js-reduck/plugin-auto-actions': 1.1.13(@modern-js-reduck/store@1.1.13) '@modern-js-reduck/plugin-devtools': 1.1.13(@modern-js-reduck/store@1.1.13) @@ -32913,7 +33878,7 @@ snapshots: '@modern-js-reduck/plugin-immutable': 1.1.13(@modern-js-reduck/store@1.1.13) '@modern-js-reduck/react': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@modern-js-reduck/store': 1.1.13 - '@modern-js/runtime': 2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4) + '@modern-js/runtime': 2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4) '@modern-js/runtime-utils': 2.70.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@modern-js/types': 2.70.8 '@modern-js/utils': 2.70.8 @@ -32958,26 +33923,12 @@ snapshots: '@modern-js/utils': 2.70.8 '@swc/helpers': 0.5.17 - '@modern-js/plugin@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) - '@swc/helpers': 0.5.17 - jiti: 2.6.1 - transitivePeerDependencies: - - '@module-federation/runtime-tools' - - core-js - - react - - react-dom - - '@modern-js/plugin@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/plugin@3.0.1(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/types': 3.0.1 '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@swc/helpers': 0.5.17 jiti: 2.6.1 transitivePeerDependencies: @@ -32986,12 +33937,12 @@ snapshots: - react - react-dom - '@modern-js/plugin@3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/plugin@3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@swc/helpers': 0.5.17 jiti: 2.6.1 transitivePeerDependencies: @@ -33020,11 +33971,11 @@ snapshots: - react - react-dom - '@modern-js/prod-server@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/prod-server@3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -33032,81 +33983,57 @@ snapshots: - react - react-dom - '@modern-js/prod-server@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@swc/helpers': 0.5.17 - transitivePeerDependencies: - - '@module-federation/runtime-tools' - - core-js - - react - - react-dom - - '@modern-js/prod-server@3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-core': 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@swc/helpers': 0.5.17 - transitivePeerDependencies: - - '@module-federation/runtime-tools' - - core-js - - react - - react-dom - - '@modern-js/render@2.70.5(react-dom@19.2.7(react@19.2.7))(react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@19.2.7)': + '@modern-js/render@2.70.5(react-dom@19.2.7(react@19.2.7))(react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@19.2.7)': dependencies: '@modern-js/types': 2.70.5 '@modern-js/utils': 2.70.5 '@swc/helpers': 0.5.17 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - react-server-dom-webpack: 19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + react-server-dom-webpack: 19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) - '@modern-js/render@2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)': + '@modern-js/render@2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)': dependencies: '@modern-js/types': 2.70.8 '@modern-js/utils': 2.70.8 '@swc/helpers': 0.5.17 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - react-server-dom-webpack: 19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + react-server-dom-webpack: 19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) - '@modern-js/render@3.0.1(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@18.3.1)': + '@modern-js/render@3.5.0(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-server-dom-webpack: 19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + react-server-dom-rspack: 0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/render@3.0.1(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1)': + '@modern-js/render@3.5.0(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-server-dom-webpack: 19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + react-server-dom-rspack: 0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/rsbuild-plugin-esbuild@2.70.5(@swc/core@1.15.10(@swc/helpers@0.5.17))(webpack-cli@5.1.4)': + '@modern-js/rsbuild-plugin-esbuild@2.70.5(@swc/core@1.15.41(@swc/helpers@0.5.17))(webpack-cli@5.1.4)': dependencies: '@swc/helpers': 0.5.17 esbuild: 0.25.5 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - uglify-js - webpack-cli - '@modern-js/rsbuild-plugin-esbuild@2.70.8(@swc/core@1.15.10(@swc/helpers@0.5.19))(webpack-cli@5.1.4)': + '@modern-js/rsbuild-plugin-esbuild@2.70.8(@swc/core@1.15.41(@swc/helpers@0.5.19))(webpack-cli@5.1.4)': dependencies: '@swc/helpers': 0.5.17 esbuild: 0.25.5 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.25.5)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - uglify-js @@ -33163,7 +34090,19 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@modern-js/runtime@2.70.5(react-dom@19.2.7(react@19.2.7))(react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@19.2.7)': + '@modern-js/runtime-utils@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@swc/helpers': 0.5.17 + lru-cache: 10.4.3 + react-router: 7.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + serialize-javascript: 6.0.2 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@modern-js/runtime@2.70.5(react-dom@19.2.7(react@19.2.7))(react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@19.2.7)': dependencies: '@babel/core': 7.29.0 '@babel/types': 7.29.0 @@ -33173,7 +34112,7 @@ snapshots: '@modern-js/plugin': 2.70.5 '@modern-js/plugin-data-loader': 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@modern-js/plugin-v2': 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@modern-js/render': 2.70.5(react-dom@19.2.7(react@19.2.7))(react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@19.2.7) + '@modern-js/render': 2.70.5(react-dom@19.2.7(react@19.2.7))(react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@19.2.7) '@modern-js/runtime-utils': 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@modern-js/types': 2.70.5 '@modern-js/utils': 2.70.5 @@ -33195,7 +34134,7 @@ snapshots: - react-server-dom-webpack - supports-color - '@modern-js/runtime@2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)': + '@modern-js/runtime@2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)': dependencies: '@babel/core': 7.29.0 '@babel/types': 7.29.0 @@ -33205,7 +34144,7 @@ snapshots: '@modern-js/plugin': 2.70.8 '@modern-js/plugin-data-loader': 2.70.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@modern-js/plugin-v2': 2.70.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@modern-js/render': 2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4) + '@modern-js/render': 2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4) '@modern-js/runtime-utils': 2.70.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@modern-js/types': 2.70.8 '@modern-js/utils': 2.70.8 @@ -33227,53 +34166,24 @@ snapshots: - react-server-dom-webpack - supports-color - '@modern-js/runtime@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@18.3.1)': - dependencies: - '@loadable/component': 5.16.7(react@18.3.1) - '@loadable/server': 5.16.7(@loadable/component@5.16.7(react@18.3.1))(react@18.3.1) - '@modern-js/plugin': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin-data-loader': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/render': 3.0.1(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@18.3.1) - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@swc/helpers': 0.5.17 - '@swc/plugin-loadable-components': 11.7.0 - '@types/loadable__component': 5.13.10 - '@types/react-helmet': 6.1.11 - cookie: 0.7.2 - entities: 7.0.1 - es-module-lexer: 1.7.0 - esbuild: 0.25.5 - invariant: 2.2.4 - isbot: 3.8.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-helmet: 6.1.0(react@18.3.1) - react-is: 18.3.1 - transitivePeerDependencies: - - '@module-federation/runtime-tools' - - core-js - - react-server-dom-webpack - - '@modern-js/runtime@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1)': + '@modern-js/runtime@3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@loadable/component': 5.16.7(react@18.3.1) '@loadable/server': 5.16.7(@loadable/component@5.16.7(react@18.3.1))(react@18.3.1) - '@modern-js/plugin': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin-data-loader': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/render': 3.0.1(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin-data-loader': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/render': 3.5.0(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 - '@swc/plugin-loadable-components': 11.7.0 + '@swc/plugin-loadable-components': 11.15.0 '@types/loadable__component': 5.13.10 '@types/react-helmet': 6.1.11 cookie: 0.7.2 entities: 7.0.1 es-module-lexer: 1.7.0 - esbuild: 0.25.5 invariant: 2.2.4 isbot: 3.8.0 react: 18.3.1 @@ -33283,26 +34193,26 @@ snapshots: transitivePeerDependencies: - '@module-federation/runtime-tools' - core-js - - react-server-dom-webpack + - react-server-dom-rspack - '@modern-js/runtime@3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1)': + '@modern-js/runtime@3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': dependencies: '@loadable/component': 5.16.7(react@18.3.1) '@loadable/server': 5.16.7(@loadable/component@5.16.7(react@18.3.1))(react@18.3.1) - '@modern-js/plugin': 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/plugin-data-loader': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/render': 3.0.1(react-dom@18.3.1(react@18.3.1))(react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))))(react@18.3.1) - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin-data-loader': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/render': 3.5.0(react-dom@18.3.1(react@18.3.1))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 - '@swc/plugin-loadable-components': 11.7.0 + '@swc/plugin-loadable-components': 11.15.0 '@types/loadable__component': 5.13.10 '@types/react-helmet': 6.1.11 cookie: 0.7.2 entities: 7.0.1 es-module-lexer: 1.7.0 - esbuild: 0.25.5 invariant: 2.2.4 isbot: 3.8.0 react: 18.3.1 @@ -33312,7 +34222,7 @@ snapshots: transitivePeerDependencies: - '@module-federation/runtime-tools' - core-js - - react-server-dom-webpack + - react-server-dom-rspack '@modern-js/server-core@2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: @@ -33350,9 +34260,9 @@ snapshots: - react - react-dom - '@modern-js/server-core@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/server-core@3.0.1(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/plugin': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin': 3.0.1(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 @@ -33369,30 +34279,11 @@ snapshots: - react - react-dom - '@modern-js/server-core@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/server-core@3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/plugin': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@swc/helpers': 0.5.17 - '@web-std/fetch': 4.2.1 - '@web-std/file': 3.0.3 - '@web-std/stream': 1.0.3 - cloneable-readable: 3.0.0 - flatted: 3.4.2 - hono: 4.12.26 - ts-deepmerge: 7.0.3 - transitivePeerDependencies: - - '@module-federation/runtime-tools' - - core-js - - react - - react-dom - - '@modern-js/server-core@3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@modern-js/plugin': 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/plugin': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 '@web-std/fetch': 4.2.1 '@web-std/file': 3.0.3 @@ -33416,10 +34307,10 @@ snapshots: - react - react-dom - '@modern-js/server-runtime@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/server-runtime@3.0.1(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@modern-js/types': 3.0.1 '@swc/helpers': 0.5.17 transitivePeerDependencies: @@ -33428,11 +34319,11 @@ snapshots: - react - react-dom - '@modern-js/server-runtime@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/server-runtime@3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 '@swc/helpers': 0.5.17 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -33440,19 +34331,19 @@ snapshots: - react - react-dom - '@modern-js/server-utils@2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': + '@modern-js/server-utils@2.68.0(@babel/traverse@7.29.7)(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.2(@babel/core@7.29.0) - '@babel/preset-react': 7.28.5(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/preset-env': 7.29.2(@babel/core@7.29.7) + '@babel/preset-react': 7.28.5(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) '@modern-js/babel-compiler': 2.68.0 '@modern-js/babel-plugin-module-resolver': 2.68.0 - '@modern-js/babel-preset': 2.68.0(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) + '@modern-js/babel-preset': 2.68.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) '@modern-js/utils': 2.68.0 '@swc/helpers': 0.5.17 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.29.0)(@babel/traverse@7.29.7) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.29.7)(@babel/traverse@7.29.7) transitivePeerDependencies: - '@babel/traverse' - '@rsbuild/core' @@ -33460,17 +34351,17 @@ snapshots: '@modern-js/server-utils@2.70.5(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.2(@babel/core@7.29.0) - '@babel/preset-react': 7.28.5(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/preset-env': 7.29.2(@babel/core@7.29.7) + '@babel/preset-react': 7.28.5(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) '@modern-js/babel-compiler': 2.70.5 '@modern-js/babel-plugin-module-resolver': 2.70.5 '@modern-js/babel-preset': 2.70.5(@rsbuild/core@1.7.3) '@modern-js/utils': 2.70.5 '@swc/helpers': 0.5.17 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.29.0)(@babel/traverse@7.29.0) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.29.7)(@babel/traverse@7.29.0) transitivePeerDependencies: - '@babel/traverse' - '@rsbuild/core' @@ -33494,32 +34385,32 @@ snapshots: - '@rsbuild/core' - supports-color - '@modern-js/server-utils@3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@modern-js/server-utils@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 transitivePeerDependencies: - react - react-dom - '@modern-js/server@2.70.5(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.70.5(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2))(tsconfig-paths@4.2.0)': dependencies: - '@babel/core': 7.29.0 - '@babel/register': 7.28.6(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/register': 7.28.6(@babel/core@7.29.7) '@modern-js/runtime-utils': 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@modern-js/server-core': 2.70.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@modern-js/server-utils': 2.70.5(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3) '@modern-js/types': 2.70.5 '@modern-js/utils': 2.70.5 '@swc/helpers': 0.5.17 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) connect-history-api-fallback: 2.0.0 http-compression: 1.0.6 minimatch: 3.1.5 path-to-regexp: 6.3.0 ws: 8.21.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -33531,7 +34422,7 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@2.70.8(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@5.9.3))(tsconfig-paths@4.2.0)': + '@modern-js/server@2.70.8(@babel/traverse@7.29.0)(@rsbuild/core@1.7.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.29.0 '@babel/register': 7.28.6(@babel/core@7.29.0) @@ -33541,14 +34432,14 @@ snapshots: '@modern-js/types': 2.70.8 '@modern-js/utils': 2.70.8 '@swc/helpers': 0.5.17 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) connect-history-api-fallback: 2.0.0 http-compression: 1.0.6 minimatch: 3.1.5 path-to-regexp: 6.3.0 ws: 8.21.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -33560,22 +34451,22 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3))(tsconfig-paths@4.2.0)': + '@modern-js/server@3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2))(tsconfig-paths@4.2.0)': dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) connect-history-api-fallback: 2.0.0 http-compression: 1.0.6 minimatch: 3.1.5 path-to-regexp: 6.3.0 ws: 8.21.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -33587,22 +34478,22 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@3.14.2)': + '@modern-js/server@3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@3.14.2)': dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) connect-history-api-fallback: 2.0.0 http-compression: 1.0.6 minimatch: 3.1.5 path-to-regexp: 6.3.0 ws: 8.21.0 optionalDependencies: - ts-node: 10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) tsconfig-paths: 3.14.2 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -33614,22 +34505,22 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)': + '@modern-js/server@3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)': dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-core': 3.0.1(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/runtime-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/server-utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@modern-js/types': 3.5.0 + '@modern-js/utils': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@swc/helpers': 0.5.17 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) connect-history-api-fallback: 2.0.0 http-compression: 1.0.6 minimatch: 3.1.5 path-to-regexp: 6.3.0 ws: 8.21.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -33641,39 +34532,12 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4))(tsconfig-paths@4.2.0)': - dependencies: - '@modern-js/runtime-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-core': 3.0.1(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/server-utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@modern-js/types': 3.0.1 - '@modern-js/utils': 3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@swc/helpers': 0.5.17 - axios: 1.16.1 - connect-history-api-fallback: 2.0.0 - http-compression: 1.0.6 - minimatch: 3.1.5 - path-to-regexp: 6.3.0 - ws: 8.21.0 - optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4) - tsconfig-paths: 4.2.0 - transitivePeerDependencies: - - '@module-federation/runtime-tools' - - bufferutil - - core-js - - debug - - react - - react-dom - - supports-color - - utf-8-validate - - '@modern-js/storybook-builder@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@modern-js/storybook-builder@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': dependencies: '@modern-js/core': 2.70.8 - '@modern-js/plugin-state': 2.70.8(@modern-js/runtime@2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@modern-js/runtime': 2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4) - '@modern-js/uni-builder': 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(esbuild@0.18.20)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) + '@modern-js/plugin-state': 2.70.8(@modern-js/runtime@2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@modern-js/runtime': 2.70.8(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4) + '@modern-js/uni-builder': 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(esbuild@0.18.20)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1) '@modern-js/utils': 2.70.8 '@rsbuild/core': 1.7.3 '@storybook/components': 7.6.24(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -33684,7 +34548,7 @@ snapshots: '@storybook/mdx2-csf': 1.1.0 '@storybook/preview': 7.6.24 '@storybook/preview-api': 7.6.24 - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) '@storybook/router': 7.6.24 '@storybook/theming': 7.6.24(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ast-types: 0.14.2 @@ -33722,11 +34586,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/storybook@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@modern-js/storybook@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': dependencies: - '@modern-js/storybook-builder': 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + '@modern-js/storybook-builder': 2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@19.2.4(react@19.2.4))(react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(react@19.2.4)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) '@modern-js/utils': 2.70.8 - '@storybook/react': 7.6.24(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + '@storybook/react': 7.6.24(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@7.0.2) storybook: 7.6.24(encoding@0.1.13) transitivePeerDependencies: - '@parcel/css' @@ -33806,8 +34670,6 @@ snapshots: '@modern-js/swc-plugins-win32-x64-msvc': 0.6.11 '@swc/helpers': 0.5.19 - '@modern-js/tsconfig@2.70.5': {} - '@modern-js/tsconfig@2.70.8': {} '@modern-js/tsconfig@3.0.1': {} @@ -33820,20 +34682,22 @@ snapshots: '@modern-js/types@3.0.1': {} - '@modern-js/uni-builder@2.70.5(@rspack/core@1.7.9(@swc/helpers@0.5.17))(esbuild@0.25.5)(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': + '@modern-js/types@3.5.0': {} + + '@modern-js/uni-builder@2.70.5(@rspack/core@1.7.9(@swc/helpers@0.5.17))(esbuild@0.25.5)(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': dependencies: - '@babel/core': 7.29.0 - '@babel/preset-react': 7.28.5(@babel/core@7.29.0) - '@babel/types': 7.29.0 + '@babel/core': 7.29.7 + '@babel/preset-react': 7.28.5(@babel/core@7.29.7) + '@babel/types': 7.29.7 '@modern-js/babel-preset': 2.70.5(@rsbuild/core@1.7.3) '@modern-js/flight-server-transform-plugin': 2.70.5 '@modern-js/utils': 2.70.5 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) '@rsbuild/core': 1.7.3 '@rsbuild/plugin-assets-retry': 1.5.2(@rsbuild/core@1.7.3) '@rsbuild/plugin-babel': 1.1.0(@rsbuild/core@1.7.3) '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@1.7.3) - '@rsbuild/plugin-css-minimizer': 1.1.1(@rsbuild/core@1.7.3)(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + '@rsbuild/plugin-css-minimizer': 1.1.1(@rsbuild/core@1.7.3)(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) '@rsbuild/plugin-less': 1.6.0(@rsbuild/core@1.7.3) '@rsbuild/plugin-pug': 1.3.2(@rsbuild/core@1.7.3) '@rsbuild/plugin-react': 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) @@ -33841,16 +34705,16 @@ snapshots: '@rsbuild/plugin-sass': 1.5.0(@rsbuild/core@1.7.3) '@rsbuild/plugin-source-build': 1.0.4(@rsbuild/core@1.7.3) '@rsbuild/plugin-styled-components': 1.6.0(@rsbuild/core@1.7.3) - '@rsbuild/plugin-svgr': 1.3.0(@rsbuild/core@1.7.3)(typescript@5.9.3)(webpack-hot-middleware@2.26.1) + '@rsbuild/plugin-svgr': 1.3.0(@rsbuild/core@1.7.3)(typescript@7.0.2)(webpack-hot-middleware@2.26.1) '@rsbuild/plugin-toml': 1.1.2(@rsbuild/core@1.7.3) - '@rsbuild/plugin-type-check': 1.3.3(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@5.9.3) + '@rsbuild/plugin-type-check': 1.3.3(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2) '@rsbuild/plugin-typed-css-modules': 1.2.1(@rsbuild/core@1.7.3) '@rsbuild/plugin-yaml': 1.0.4(@rsbuild/core@1.7.3) '@rsbuild/webpack': 1.6.1(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.17))(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) '@swc/core': 1.15.8(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 autoprefixer: 10.4.23(postcss@8.5.10) - babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + babel-loader: 9.2.1(@babel/core@7.29.7)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) babel-plugin-import: 1.13.8 babel-plugin-styled-components: 1.13.3(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7)) babel-plugin-transform-react-remove-prop-types: 0.4.24 @@ -33859,7 +34723,7 @@ snapshots: es-module-lexer: 1.5.3 glob: 9.3.5 html-minifier-terser: 7.2.0 - html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) jiti: 1.21.7 lodash: 4.18.1 magic-string: 0.30.21 @@ -33874,11 +34738,11 @@ snapshots: postcss-page-break: 3.0.4(postcss@8.5.10) react-refresh: 0.14.2 rspack-manifest-plugin: 5.0.3(@rspack/core@1.7.9(@swc/helpers@0.5.17)) - terser-webpack-plugin: 5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) ts-deepmerge: 7.0.2 - ts-loader: 9.4.4(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + ts-loader: 9.4.4(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) webpack: 5.104.1(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -33900,20 +34764,20 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/uni-builder@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(esbuild@0.18.20)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': + '@modern-js/uni-builder@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(esbuild@0.18.20)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/core': 7.29.0 '@babel/preset-react': 7.28.5(@babel/core@7.29.0) - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 '@modern-js/babel-preset': 2.70.8(@rsbuild/core@1.7.3) '@modern-js/flight-server-transform-plugin': 2.70.8 '@modern-js/utils': 2.70.8 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) '@rsbuild/core': 1.7.3 '@rsbuild/plugin-assets-retry': 1.5.2(@rsbuild/core@1.7.3) '@rsbuild/plugin-babel': 1.1.0(@rsbuild/core@1.7.3) '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@1.7.3) - '@rsbuild/plugin-css-minimizer': 1.1.1(@rsbuild/core@1.7.3)(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + '@rsbuild/plugin-css-minimizer': 1.1.1(@rsbuild/core@1.7.3)(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) '@rsbuild/plugin-less': 1.6.0(@rsbuild/core@1.7.3) '@rsbuild/plugin-pug': 1.3.2(@rsbuild/core@1.7.3) '@rsbuild/plugin-react': 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) @@ -33921,16 +34785,16 @@ snapshots: '@rsbuild/plugin-sass': 1.5.0(@rsbuild/core@1.7.3) '@rsbuild/plugin-source-build': 1.0.4(@rsbuild/core@1.7.3) '@rsbuild/plugin-styled-components': 1.6.0(@rsbuild/core@1.7.3) - '@rsbuild/plugin-svgr': 1.3.0(@rsbuild/core@1.7.3)(typescript@5.9.3)(webpack-hot-middleware@2.26.1) + '@rsbuild/plugin-svgr': 1.3.0(@rsbuild/core@1.7.3)(typescript@7.0.2)(webpack-hot-middleware@2.26.1) '@rsbuild/plugin-toml': 1.1.2(@rsbuild/core@1.7.3) - '@rsbuild/plugin-type-check': 1.3.4(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@5.9.3) + '@rsbuild/plugin-type-check': 1.3.4(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@7.0.2) '@rsbuild/plugin-typed-css-modules': 1.2.1(@rsbuild/core@1.7.3) '@rsbuild/plugin-yaml': 1.0.4(@rsbuild/core@1.7.3) '@rsbuild/webpack': 1.6.1(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack-cli@5.1.4) '@swc/core': 1.15.8(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 autoprefixer: 10.4.23(postcss@8.5.10) - babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) babel-plugin-import: 1.13.8 babel-plugin-styled-components: 1.13.3(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) babel-plugin-transform-react-remove-prop-types: 0.4.24 @@ -33939,7 +34803,7 @@ snapshots: es-module-lexer: 1.5.3 glob: 9.3.5 html-minifier-terser: 7.2.0 - html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) jiti: 1.21.7 lodash: 4.18.1 magic-string: 0.30.21 @@ -33954,11 +34818,11 @@ snapshots: postcss-page-break: 3.0.4(postcss@8.5.10) react-refresh: 0.14.2 rspack-manifest-plugin: 5.0.3(@rspack/core@1.7.9(@swc/helpers@0.5.19)) - terser-webpack-plugin: 5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) ts-deepmerge: 7.0.2 - ts-loader: 9.4.4(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + ts-loader: 9.4.4(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) webpack: 5.104.1(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack-cli@5.1.4) - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -33980,20 +34844,20 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/uni-builder@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(esbuild@0.25.5)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': + '@modern-js/uni-builder@2.70.8(@rspack/core@1.7.9(@swc/helpers@0.5.19))(esbuild@0.25.5)(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(tslib@2.8.1)(type-fest@2.19.0)(typescript@7.0.2)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)': dependencies: '@babel/core': 7.29.0 '@babel/preset-react': 7.28.5(@babel/core@7.29.0) - '@babel/types': 7.29.0 + '@babel/types': 7.29.7 '@modern-js/babel-preset': 2.70.8(@rsbuild/core@1.7.3) '@modern-js/flight-server-transform-plugin': 2.70.8 '@modern-js/utils': 2.70.8 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) '@rsbuild/core': 1.7.3 '@rsbuild/plugin-assets-retry': 1.5.2(@rsbuild/core@1.7.3) '@rsbuild/plugin-babel': 1.1.0(@rsbuild/core@1.7.3) '@rsbuild/plugin-check-syntax': 1.6.1(@rsbuild/core@1.7.3) - '@rsbuild/plugin-css-minimizer': 1.1.1(@rsbuild/core@1.7.3)(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + '@rsbuild/plugin-css-minimizer': 1.1.1(@rsbuild/core@1.7.3)(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) '@rsbuild/plugin-less': 1.6.0(@rsbuild/core@1.7.3) '@rsbuild/plugin-pug': 1.3.2(@rsbuild/core@1.7.3) '@rsbuild/plugin-react': 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) @@ -34001,16 +34865,16 @@ snapshots: '@rsbuild/plugin-sass': 1.5.0(@rsbuild/core@1.7.3) '@rsbuild/plugin-source-build': 1.0.4(@rsbuild/core@1.7.3) '@rsbuild/plugin-styled-components': 1.6.0(@rsbuild/core@1.7.3) - '@rsbuild/plugin-svgr': 1.3.0(@rsbuild/core@1.7.3)(typescript@5.9.3)(webpack-hot-middleware@2.26.1) + '@rsbuild/plugin-svgr': 1.3.0(@rsbuild/core@1.7.3)(typescript@7.0.2)(webpack-hot-middleware@2.26.1) '@rsbuild/plugin-toml': 1.1.2(@rsbuild/core@1.7.3) - '@rsbuild/plugin-type-check': 1.3.4(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@5.9.3) + '@rsbuild/plugin-type-check': 1.3.4(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@7.0.2) '@rsbuild/plugin-typed-css-modules': 1.2.1(@rsbuild/core@1.7.3) '@rsbuild/plugin-yaml': 1.0.4(@rsbuild/core@1.7.3) '@rsbuild/webpack': 1.6.1(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) '@swc/core': 1.15.8(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 autoprefixer: 10.4.23(postcss@8.5.10) - babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) babel-plugin-import: 1.13.8 babel-plugin-styled-components: 1.13.3(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) babel-plugin-transform-react-remove-prop-types: 0.4.24 @@ -34019,7 +34883,7 @@ snapshots: es-module-lexer: 1.5.3 glob: 9.3.5 html-minifier-terser: 7.2.0 - html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) jiti: 1.21.7 lodash: 4.18.1 magic-string: 0.30.21 @@ -34034,11 +34898,11 @@ snapshots: postcss-page-break: 3.0.4(postcss@8.5.10) react-refresh: 0.14.2 rspack-manifest-plugin: 5.0.3(@rspack/core@1.7.9(@swc/helpers@0.5.19)) - terser-webpack-plugin: 5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) ts-deepmerge: 7.0.2 - ts-loader: 9.4.4(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + ts-loader: 9.4.4(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) webpack: 5.104.1(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -34063,7 +34927,7 @@ snapshots: '@modern-js/utils@2.68.0': dependencies: '@swc/helpers': 0.5.17 - caniuse-lite: 1.0.30001780 + caniuse-lite: 1.0.30001800 lodash: 4.18.1 rslog: 1.2.3 @@ -34077,14 +34941,14 @@ snapshots: '@modern-js/utils@2.70.8': dependencies: '@swc/helpers': 0.5.17 - caniuse-lite: 1.0.30001780 + caniuse-lite: 1.0.30001800 lodash: 4.18.1 rslog: 1.2.3 '@modern-js/utils@3.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@swc/helpers': 0.5.17 - caniuse-lite: 1.0.30001780 + caniuse-lite: 1.0.30001800 import-meta-resolve: 4.2.0 lodash: 4.18.1 lodash-es: 4.18.1 @@ -34093,6 +34957,23 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@modern-js/utils@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.17 + caniuse-lite: 1.0.30001800 + import-meta-resolve: 4.2.0 + lodash: 4.18.1 + lodash-es: 4.18.1 + rslog: 1.3.2 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@module-federation/automatic-vendor-federation@1.2.1(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4))': + dependencies: + find-package-json: 1.2.0 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4) + '@module-federation/bridge-react-webpack-plugin@0.21.6': dependencies: '@module-federation/sdk': 0.21.6 @@ -34107,9 +34988,9 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/cli@0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))': + '@module-federation/cli@0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))': dependencies: - '@module-federation/dts-plugin': 0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/dts-plugin': 0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/sdk': 0.21.6 chalk: 3.0.0 commander: 11.1.0 @@ -34122,9 +35003,9 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/cli@2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))': + '@module-federation/cli@2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))': dependencies: - '@module-federation/dts-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/dts-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/sdk': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) chalk: 3.0.0 commander: 11.1.0 @@ -34157,7 +35038,7 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/dts-plugin@0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))': + '@module-federation/dts-plugin@0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))': dependencies: '@module-federation/error-codes': 0.21.6 '@module-federation/managers': 0.21.6 @@ -34165,7 +35046,7 @@ snapshots: '@module-federation/third-party-dts-extractor': 0.21.6 adm-zip: 0.5.16 ansi-colors: 4.1.3 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) chalk: 3.0.0 fs-extra: 9.1.0 isomorphic-ws: 5.0.0(ws@8.18.0) @@ -34174,17 +35055,17 @@ snapshots: log4js: 6.9.1 node-schedule: 2.1.1 rambda: 9.2.1 - typescript: 5.9.3 + typescript: 7.0.2 ws: 8.18.0 optionalDependencies: - vue-tsc: 2.2.12(typescript@5.9.3) + vue-tsc: 2.2.12(typescript@7.0.2) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - '@module-federation/dts-plugin@2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))': + '@module-federation/dts-plugin@2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))': dependencies: '@module-federation/error-codes': 2.2.2 '@module-federation/managers': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) @@ -34192,7 +35073,7 @@ snapshots: '@module-federation/third-party-dts-extractor': 2.2.2 adm-zip: 0.5.16 ansi-colors: 4.1.3 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) chalk: 3.0.0 fs-extra: 9.1.0 isomorphic-ws: 5.0.0(ws@8.18.0) @@ -34200,10 +35081,10 @@ snapshots: log4js: 6.9.1 node-schedule: 2.1.1 rambda: 9.2.1 - typescript: 5.9.3 + typescript: 7.0.2 ws: 8.18.0 optionalDependencies: - vue-tsc: 2.2.12(typescript@5.9.3) + vue-tsc: 2.2.12(typescript@7.0.2) transitivePeerDependencies: - bufferutil - debug @@ -34211,26 +35092,44 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.21.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4))': + '@module-federation/dts-plugin@2.7.0(typescript@5.0.4)(vue-tsc@2.2.12(typescript@5.0.4))': + dependencies: + '@module-federation/error-codes': 2.7.0 + '@module-federation/managers': 2.7.0 + '@module-federation/sdk': 2.7.0 + '@module-federation/third-party-dts-extractor': 2.7.0 + adm-zip: 0.5.10 + isomorphic-ws: 5.0.0(ws@8.21.0) + node-schedule: 2.1.1 + typescript: 5.0.4 + undici: 7.28.0 + ws: 8.21.0 + optionalDependencies: + vue-tsc: 2.2.12(typescript@5.0.4) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@module-federation/enhanced@0.21.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.21.6 - '@module-federation/cli': 0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/cli': 0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/data-prefetch': 0.21.6(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@module-federation/dts-plugin': 0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/dts-plugin': 0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/error-codes': 0.21.6 '@module-federation/inject-external-runtime-core-plugin': 0.21.6(@module-federation/runtime-tools@0.21.6) '@module-federation/managers': 0.21.6 - '@module-federation/manifest': 0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) - '@module-federation/rspack': 0.21.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/manifest': 0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) + '@module-federation/rspack': 0.21.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/runtime-tools': 0.21.6 '@module-federation/sdk': 0.21.6 btoa: 1.2.1 schema-utils: 4.3.0 upath: 2.0.1 optionalDependencies: - typescript: 5.9.3 - vue-tsc: 2.2.12(typescript@5.9.3) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + typescript: 7.0.2 + vue-tsc: 2.2.12(typescript@7.0.2) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -34240,17 +35139,17 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@2.2.2(@rspack/core@1.6.8(@swc/helpers@0.5.23))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4))': + '@module-federation/enhanced@2.2.2(@rspack/core@1.6.8(@swc/helpers@0.5.23))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4))': dependencies: '@module-federation/bridge-react-webpack-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/cli': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/cli': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/data-prefetch': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@module-federation/dts-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/dts-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/error-codes': 2.2.2 '@module-federation/inject-external-runtime-core-plugin': 2.2.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13))) '@module-federation/managers': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/manifest': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) - '@module-federation/rspack': 2.2.2(@rspack/core@1.6.8(@swc/helpers@0.5.23))(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/manifest': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) + '@module-federation/rspack': 2.2.2(@rspack/core@1.6.8(@swc/helpers@0.5.23))(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/runtime-tools': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) '@module-federation/sdk': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) '@module-federation/webpack-bundler-runtime': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) @@ -34259,9 +35158,9 @@ snapshots: tapable: 2.3.0 upath: 2.0.1 optionalDependencies: - typescript: 5.9.3 - vue-tsc: 2.2.12(typescript@5.9.3) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + typescript: 7.0.2 + vue-tsc: 2.2.12(typescript@7.0.2) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -34276,8 +35175,6 @@ snapshots: '@module-federation/error-codes@0.14.3': {} - '@module-federation/error-codes@0.17.1': {} - '@module-federation/error-codes@0.18.0': {} '@module-federation/error-codes@0.21.1': {} @@ -34288,7 +35185,9 @@ snapshots: '@module-federation/error-codes@2.2.2': {} - '@module-federation/error-codes@2.6.0': + '@module-federation/error-codes@2.7.0': {} + + '@module-federation/error-codes@2.8.0': optional: true '@module-federation/inject-external-runtime-core-plugin@0.21.6(@module-federation/runtime-tools@0.21.6)': @@ -34313,9 +35212,14 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/manifest@0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))': + '@module-federation/managers@2.7.0': + dependencies: + '@module-federation/sdk': 2.7.0 + empathic: 2.0.0 + + '@module-federation/manifest@0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))': dependencies: - '@module-federation/dts-plugin': 0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/dts-plugin': 0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/managers': 0.21.6 '@module-federation/sdk': 0.21.6 chalk: 3.0.0 @@ -34328,9 +35232,9 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/manifest@2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))': + '@module-federation/manifest@2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))': dependencies: - '@module-federation/dts-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/dts-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/managers': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) '@module-federation/sdk': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) chalk: 3.0.0 @@ -34344,9 +35248,9 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.7.36(@rspack/core@1.6.8(@swc/helpers@0.5.23))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4))': + '@module-federation/node@2.7.36(@rspack/core@1.6.8(@swc/helpers@0.5.23))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4))': dependencies: - '@module-federation/enhanced': 2.2.2(@rspack/core@1.6.8(@swc/helpers@0.5.23))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + '@module-federation/enhanced': 2.2.2(@rspack/core@1.6.8(@swc/helpers@0.5.23))(node-fetch@2.7.0(encoding@0.1.13))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) '@module-federation/runtime': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) '@module-federation/sdk': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) btoa: 1.2.1 @@ -34354,7 +35258,7 @@ snapshots: node-fetch: 2.7.0(encoding@0.1.13) tapable: 2.3.0 optionalDependencies: - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -34366,40 +35270,40 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/rspack@0.21.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))': + '@module-federation/rspack@0.21.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))': dependencies: '@module-federation/bridge-react-webpack-plugin': 0.21.6 - '@module-federation/dts-plugin': 0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/dts-plugin': 0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/inject-external-runtime-core-plugin': 0.21.6(@module-federation/runtime-tools@0.21.6) '@module-federation/managers': 0.21.6 - '@module-federation/manifest': 0.21.6(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/manifest': 0.21.6(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/runtime-tools': 0.21.6 '@module-federation/sdk': 0.21.6 '@rspack/core': 1.6.8(@swc/helpers@0.5.23) btoa: 1.2.1 optionalDependencies: - typescript: 5.9.3 - vue-tsc: 2.2.12(typescript@5.9.3) + typescript: 7.0.2 + vue-tsc: 2.2.12(typescript@7.0.2) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - '@module-federation/rspack@2.2.2(@rspack/core@1.6.8(@swc/helpers@0.5.23))(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))': + '@module-federation/rspack@2.2.2(@rspack/core@1.6.8(@swc/helpers@0.5.23))(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))': dependencies: '@module-federation/bridge-react-webpack-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/dts-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/dts-plugin': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/inject-external-runtime-core-plugin': 2.2.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13))) '@module-federation/managers': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) - '@module-federation/manifest': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + '@module-federation/manifest': 2.2.2(node-fetch@2.7.0(encoding@0.1.13))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2)) '@module-federation/runtime-tools': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) '@module-federation/sdk': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) '@rspack/core': 1.6.8(@swc/helpers@0.5.23) btoa: 1.2.1 optionalDependencies: - typescript: 5.9.3 - vue-tsc: 2.2.12(typescript@5.9.3) + typescript: 7.0.2 + vue-tsc: 2.2.12(typescript@7.0.2) transitivePeerDependencies: - bufferutil - debug @@ -34417,11 +35321,6 @@ snapshots: '@module-federation/error-codes': 0.14.3 '@module-federation/sdk': 0.14.3 - '@module-federation/runtime-core@0.17.1': - dependencies: - '@module-federation/error-codes': 0.17.1 - '@module-federation/sdk': 0.17.1 - '@module-federation/runtime-core@0.18.0': dependencies: '@module-federation/error-codes': 0.18.0 @@ -34449,20 +35348,15 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/runtime-core@2.6.0(node-fetch@3.3.0)': + '@module-federation/runtime-core@2.7.0': dependencies: - '@module-federation/error-codes': 2.6.0 - '@module-federation/sdk': 2.6.0(node-fetch@3.3.0) - transitivePeerDependencies: - - node-fetch - optional: true + '@module-federation/error-codes': 2.7.0 + '@module-federation/sdk': 2.7.0 - '@module-federation/runtime-core@2.6.0(node-fetch@3.3.2)': + '@module-federation/runtime-core@2.8.0': dependencies: - '@module-federation/error-codes': 2.6.0 - '@module-federation/sdk': 2.6.0(node-fetch@3.3.2) - transitivePeerDependencies: - - node-fetch + '@module-federation/error-codes': 2.8.0 + '@module-federation/sdk': 2.8.0 optional: true '@module-federation/runtime-tools@0.1.6': @@ -34480,11 +35374,6 @@ snapshots: '@module-federation/runtime': 0.14.3 '@module-federation/webpack-bundler-runtime': 0.14.3 - '@module-federation/runtime-tools@0.17.1': - dependencies: - '@module-federation/runtime': 0.17.1 - '@module-federation/webpack-bundler-runtime': 0.17.1 - '@module-federation/runtime-tools@0.18.0': dependencies: '@module-federation/runtime': 0.18.0 @@ -34517,20 +35406,10 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0)': + '@module-federation/runtime-tools@2.8.0': dependencies: - '@module-federation/runtime': 2.6.0(node-fetch@3.3.0) - '@module-federation/webpack-bundler-runtime': 2.6.0(node-fetch@3.3.0) - transitivePeerDependencies: - - node-fetch - optional: true - - '@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2)': - dependencies: - '@module-federation/runtime': 2.6.0(node-fetch@3.3.2) - '@module-federation/webpack-bundler-runtime': 2.6.0(node-fetch@3.3.2) - transitivePeerDependencies: - - node-fetch + '@module-federation/runtime': 2.8.0 + '@module-federation/webpack-bundler-runtime': 2.8.0 optional: true '@module-federation/runtime@0.1.6': @@ -34549,12 +35428,6 @@ snapshots: '@module-federation/runtime-core': 0.14.3 '@module-federation/sdk': 0.14.3 - '@module-federation/runtime@0.17.1': - dependencies: - '@module-federation/error-codes': 0.17.1 - '@module-federation/runtime-core': 0.17.1 - '@module-federation/sdk': 0.17.1 - '@module-federation/runtime@0.18.0': dependencies: '@module-federation/error-codes': 0.18.0 @@ -34591,22 +35464,17 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/runtime@2.6.0(node-fetch@3.3.0)': + '@module-federation/runtime@2.7.0': dependencies: - '@module-federation/error-codes': 2.6.0 - '@module-federation/runtime-core': 2.6.0(node-fetch@3.3.0) - '@module-federation/sdk': 2.6.0(node-fetch@3.3.0) - transitivePeerDependencies: - - node-fetch - optional: true + '@module-federation/error-codes': 2.7.0 + '@module-federation/runtime-core': 2.7.0 + '@module-federation/sdk': 2.7.0 - '@module-federation/runtime@2.6.0(node-fetch@3.3.2)': + '@module-federation/runtime@2.8.0': dependencies: - '@module-federation/error-codes': 2.6.0 - '@module-federation/runtime-core': 2.6.0(node-fetch@3.3.2) - '@module-federation/sdk': 2.6.0(node-fetch@3.3.2) - transitivePeerDependencies: - - node-fetch + '@module-federation/error-codes': 2.8.0 + '@module-federation/runtime-core': 2.8.0 + '@module-federation/sdk': 2.8.0 optional: true '@module-federation/sdk@0.1.6': {} @@ -34615,8 +35483,6 @@ snapshots: '@module-federation/sdk@0.14.3': {} - '@module-federation/sdk@0.17.1': {} - '@module-federation/sdk@0.18.0': {} '@module-federation/sdk@0.21.1': {} @@ -34631,14 +35497,9 @@ snapshots: optionalDependencies: node-fetch: 2.7.0(encoding@0.1.13) - '@module-federation/sdk@2.6.0(node-fetch@3.3.0)': - optionalDependencies: - node-fetch: 3.3.0 - optional: true + '@module-federation/sdk@2.7.0': {} - '@module-federation/sdk@2.6.0(node-fetch@3.3.2)': - optionalDependencies: - node-fetch: 3.3.2 + '@module-federation/sdk@2.8.0': optional: true '@module-federation/third-party-dts-extractor@0.21.6': @@ -34653,6 +35514,23 @@ snapshots: fs-extra: 9.1.0 resolve: 1.22.8 + '@module-federation/third-party-dts-extractor@2.7.0': + dependencies: + empathic: 2.0.0 + exsolve: 1.0.8 + + '@module-federation/vite@1.16.16(typescript@5.0.4)(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue-tsc@2.2.12(typescript@5.0.4))': + dependencies: + '@module-federation/dts-plugin': 2.7.0(typescript@5.0.4)(vue-tsc@2.2.12(typescript@5.0.4)) + '@module-federation/runtime': 2.7.0 + '@module-federation/sdk': 2.7.0 + vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - vue-tsc + '@module-federation/webpack-bundler-runtime@0.1.6': dependencies: '@module-federation/runtime': 0.1.6 @@ -34668,11 +35546,6 @@ snapshots: '@module-federation/runtime': 0.14.3 '@module-federation/sdk': 0.14.3 - '@module-federation/webpack-bundler-runtime@0.17.1': - dependencies: - '@module-federation/runtime': 0.17.1 - '@module-federation/sdk': 0.17.1 - '@module-federation/webpack-bundler-runtime@0.18.0': dependencies: '@module-federation/runtime': 0.18.0 @@ -34705,22 +35578,11 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/webpack-bundler-runtime@2.6.0(node-fetch@3.3.0)': + '@module-federation/webpack-bundler-runtime@2.8.0': dependencies: - '@module-federation/error-codes': 2.6.0 - '@module-federation/runtime': 2.6.0(node-fetch@3.3.0) - '@module-federation/sdk': 2.6.0(node-fetch@3.3.0) - transitivePeerDependencies: - - node-fetch - optional: true - - '@module-federation/webpack-bundler-runtime@2.6.0(node-fetch@3.3.2)': - dependencies: - '@module-federation/error-codes': 2.6.0 - '@module-federation/runtime': 2.6.0(node-fetch@3.3.2) - '@module-federation/sdk': 2.6.0(node-fetch@3.3.2) - transitivePeerDependencies: - - node-fetch + '@module-federation/error-codes': 2.8.0 + '@module-federation/runtime': 2.8.0 + '@module-federation/sdk': 2.8.0 optional: true '@monaco-editor/loader@1.7.0': @@ -34881,15 +35743,15 @@ snapshots: '@napi-rs/wasm-runtime@0.2.4': dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 '@tybys/wasm-util': 0.9.0 '@napi-rs/wasm-runtime@1.0.7': dependencies: - '@emnapi/core': 1.9.0 - '@emnapi/runtime': 1.9.0 - '@tybys/wasm-util': 0.10.1 + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 optional: true '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': @@ -34899,6 +35761,13 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@tybys/wasm-util': 0.10.3 + optional: true + '@ndelangen/get-tarball@3.0.9': dependencies: gunzip-maybe: 1.4.2 @@ -34984,21 +35853,21 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@nx/devkit@22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))': + '@nx/devkit@22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))': dependencies: '@zkochan/js-yaml': 0.0.7 ejs: 3.1.10 enquirer: 2.3.6 minimatch: 10.2.4 - nx: 22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)) + nx: 22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)) semver: 7.6.3 tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/eslint@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(@zkochan/js-yaml@0.0.7)(eslint@9.39.3(jiti@2.6.1))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))': + '@nx/eslint@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(@zkochan/js-yaml@0.0.7)(eslint@9.39.3(jiti@2.6.1))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) eslint: 9.39.3(jiti@2.6.1) semver: 7.6.3 tslib: 2.8.1 @@ -35014,21 +35883,21 @@ snapshots: - supports-color - verdaccio - '@nx/js@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))': + '@nx/js@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.2(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.7) + '@babel/preset-env': 7.29.2(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) '@babel/runtime': 7.28.2 - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/workspace': 22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/workspace': 22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)) '@zkochan/js-yaml': 0.0.7 - babel-plugin-const-enum: 1.2.0(@babel/core@7.29.0) + babel-plugin-const-enum: 1.2.0(@babel/core@7.29.7) babel-plugin-macros: 3.1.0 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.29.0)(@babel/traverse@7.29.7) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.29.7)(@babel/traverse@7.29.7) chalk: 4.1.2 columnify: 1.6.0 detect-port: 1.6.1 @@ -35050,20 +35919,20 @@ snapshots: - nx - supports-color - '@nx/module-federation@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(esbuild@0.25.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(webpack-cli@5.1.4)': + '@nx/module-federation@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(esbuild@0.25.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))(webpack-cli@5.1.4)': dependencies: - '@module-federation/enhanced': 0.21.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - '@module-federation/node': 2.7.36(@rspack/core@1.6.8(@swc/helpers@0.5.23))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + '@module-federation/enhanced': 0.21.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + '@module-federation/node': 2.7.36(@rspack/core@1.6.8(@swc/helpers@0.5.23))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) '@module-federation/sdk': 0.21.6 - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/web': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/web': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) '@rspack/core': 1.6.8(@swc/helpers@0.5.23) express: 4.22.1 http-proxy-middleware: 3.0.5 picocolors: 1.1.1 tslib: 2.8.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -35113,16 +35982,16 @@ snapshots: '@nx/nx-win32-x64-msvc@22.5.4': optional: true - '@nx/react@22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(esbuild@0.25.5)(eslint@9.39.3(jiti@2.6.1))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.2))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1))(vue-tsc@2.2.12(typescript@5.9.3))(webpack-cli@5.1.4)': + '@nx/react@22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(esbuild@0.25.5)(eslint@9.39.3(jiti@2.6.1))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0))(vue-tsc@2.2.12(typescript@7.0.2))(webpack-cli@5.1.4)': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/eslint': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(@zkochan/js-yaml@0.0.7)(eslint@9.39.3(jiti@2.6.1))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/module-federation': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(esbuild@0.25.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3))(webpack-cli@5.1.4) - '@nx/rollup': 22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/babel__core@7.20.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(typescript@5.9.3) - '@nx/web': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) - '@svgr/webpack': 8.1.0(typescript@5.9.3) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/eslint': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(@zkochan/js-yaml@0.0.7)(eslint@9.39.3(jiti@2.6.1))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/module-federation': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(@swc/helpers@0.5.23)(esbuild@0.25.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@7.0.2))(webpack-cli@5.1.4) + '@nx/rollup': 22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/babel__core@7.20.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(typescript@7.0.2) + '@nx/web': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@phenomnomnominal/tsquery': 6.1.4(typescript@7.0.2) + '@svgr/webpack': 8.1.0(typescript@7.0.2) express: 4.22.1 http-proxy-middleware: 3.0.5 minimatch: 10.2.4 @@ -35130,7 +35999,7 @@ snapshots: semver: 7.6.3 tslib: 2.8.1 optionalDependencies: - '@nx/vite': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(typescript@5.9.3)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.2))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)) + '@nx/vite': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(typescript@7.0.2)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)) transitivePeerDependencies: - '@babel/core' - '@babel/traverse' @@ -35156,16 +36025,16 @@ snapshots: - vue-tsc - webpack-cli - '@nx/rollup@22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/babel__core@7.20.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(typescript@5.9.3)': + '@nx/rollup@22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/babel__core@7.20.5)(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(typescript@7.0.2)': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) '@rollup/plugin-babel': 6.1.0(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.59.0) '@rollup/plugin-commonjs': 25.0.8(rollup@4.59.0) '@rollup/plugin-image': 3.0.3(rollup@4.59.0) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/plugin-node-resolve': 15.3.1(rollup@4.59.0) - '@rollup/plugin-typescript': 12.3.0(rollup@4.59.0)(tslib@2.8.1)(typescript@5.9.3) + '@rollup/plugin-typescript': 12.3.0(rollup@4.59.0)(tslib@2.8.1)(typescript@7.0.2) autoprefixer: 10.4.20(postcss@8.5.10) concat-with-sourcemaps: 1.1.0 picocolors: 1.1.1 @@ -35173,7 +36042,7 @@ snapshots: postcss: 8.5.10 postcss-modules: 6.0.1(postcss@8.5.10) rollup: 4.59.0 - rollup-plugin-typescript2: 0.36.0(rollup@4.59.0)(typescript@5.9.3) + rollup-plugin-typescript2: 0.36.0(rollup@4.59.0)(typescript@7.0.2) tslib: 2.8.1 transitivePeerDependencies: - '@babel/core' @@ -35187,20 +36056,20 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(typescript@5.9.3)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.2))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1))': + '@nx/vite@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(typescript@7.0.2)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0))': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/vitest': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(typescript@5.9.3)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.2))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)) - '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/vitest': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(typescript@7.0.2)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)) + '@phenomnomnominal/tsquery': 6.1.4(typescript@7.0.2) ajv: 8.18.0 enquirer: 2.3.6 picomatch: 4.0.2 semver: 7.6.3 tsconfig-paths: 4.2.0 tslib: 2.8.1 - vite: 7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.2) - vitest: 1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1) + vite: 7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) + vitest: 1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -35212,16 +36081,16 @@ snapshots: - verdaccio optional: true - '@nx/vitest@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(typescript@5.9.3)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.2))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1))': + '@nx/vitest@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(typescript@7.0.2)(vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0))': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@phenomnomnominal/tsquery': 6.1.4(typescript@7.0.2) semver: 7.6.3 tslib: 2.8.1 optionalDependencies: - vite: 7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.2) - vitest: 1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1) + vite: 7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) + vitest: 1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -35233,10 +36102,10 @@ snapshots: - verdaccio optional: true - '@nx/web@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))': + '@nx/web@22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) detect-port: 1.6.1 http-server: 14.1.1 picocolors: 1.1.1 @@ -35250,44 +36119,44 @@ snapshots: - supports-color - verdaccio - '@nx/webpack@22.5.4(@babel/traverse@7.29.7)(@rspack/core@1.6.8(@swc/helpers@0.5.23))(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack-cli@5.1.4)': + '@nx/webpack@22.5.4(@babel/traverse@7.29.7)(@rspack/core@1.6.8(@swc/helpers@0.5.23))(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)))(typescript@7.0.2)(vue-template-compiler@2.7.16)(webpack-cli@5.1.4)': dependencies: '@babel/core': 7.29.0 - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) - '@phenomnomnominal/tsquery': 6.1.4(typescript@5.9.3) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@nx/js': 22.5.4(@babel/traverse@7.29.7)(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) + '@phenomnomnominal/tsquery': 6.1.4(typescript@7.0.2) ajv: 8.18.0 autoprefixer: 10.4.20(postcss@8.4.49) - babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) browserslist: 4.28.1 - copy-webpack-plugin: 10.2.4(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - css-loader: 6.11.0(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - fork-ts-checker-webpack-plugin: 7.2.13(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + copy-webpack-plugin: 10.2.4(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + css-loader: 6.11.0(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + fork-ts-checker-webpack-plugin: 7.2.13(typescript@7.0.2)(vue-template-compiler@2.7.16)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) less: 4.6.4 - less-loader: 11.1.4(less@4.6.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - license-webpack-plugin: 4.0.2(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + less-loader: 11.1.4(less@4.6.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + license-webpack-plugin: 4.0.2(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) loader-utils: 2.0.4 - mini-css-extract-plugin: 2.4.7(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + mini-css-extract-plugin: 2.4.7(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) parse5: 4.0.0 picocolors: 1.1.1 postcss: 8.4.49 postcss-import: 14.1.0(postcss@8.4.49) - postcss-loader: 6.2.1(postcss@8.4.49)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + postcss-loader: 6.2.1(postcss@8.4.49)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) rxjs: 7.8.2 sass: 1.98.0 sass-embedded: 1.98.0 - sass-loader: 16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.23))(sass-embedded@1.98.0)(sass@1.98.0)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - source-map-loader: 5.0.0(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - style-loader: 3.3.4(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - terser-webpack-plugin: 5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - ts-loader: 9.5.4(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + sass-loader: 16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.23))(sass-embedded@1.98.0)(sass@1.98.0)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + source-map-loader: 5.0.0(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + style-loader: 3.3.4(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + ts-loader: 9.5.4(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) tsconfig-paths-webpack-plugin: 4.2.0 tslib: 2.8.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) webpack-node-externals: 3.0.0 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -35312,13 +36181,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@nx/workspace@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))': + '@nx/workspace@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))': dependencies: - '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23))) + '@nx/devkit': 22.5.4(nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) '@zkochan/js-yaml': 0.0.7 chalk: 4.1.2 enquirer: 2.3.6 - nx: 22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)) + nx: 22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)) picomatch: 4.0.2 semver: 7.6.3 tslib: 2.8.1 @@ -35535,11 +36404,11 @@ snapshots: tslib: 2.8.1 tsyringe: 4.10.0 - '@phenomnomnominal/tsquery@6.1.4(typescript@5.9.3)': + '@phenomnomnominal/tsquery@6.1.4(typescript@7.0.2)': dependencies: '@types/esquery': 1.5.4 esquery: 1.7.0 - typescript: 5.9.3 + typescript: 7.0.2 '@pinojs/redact@0.4.0': {} @@ -35568,7 +36437,7 @@ snapshots: webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.49.0 @@ -35578,13 +36447,13 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.3.0 source-map: 0.7.6 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: type-fest: 2.19.0 - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) webpack-hot-middleware: 2.26.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.16(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.49.0 @@ -35594,10 +36463,10 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.3.0 source-map: 0.7.6 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optionalDependencies: type-fest: 2.19.0 - webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + webpack-dev-server: 5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) webpack-hot-middleware: 2.26.1 '@polka/url@1.0.0-next.29': {} @@ -37366,33 +38235,33 @@ snapshots: fast-glob: 3.3.3 picocolors: 1.1.1 - '@react-native-community/cli-config@19.1.2(typescript@5.0.4)': + '@react-native-community/cli-config@19.1.2(typescript@6.0.3)': dependencies: '@react-native-community/cli-tools': 19.1.2 chalk: 4.1.2 - cosmiconfig: 9.0.1(typescript@5.0.4) + cosmiconfig: 9.0.1(typescript@6.0.3) deepmerge: 4.3.1 fast-glob: 3.3.3 joi: 17.13.3 transitivePeerDependencies: - typescript + optional: true - '@react-native-community/cli-config@19.1.2(typescript@5.9.3)': + '@react-native-community/cli-config@19.1.2(typescript@7.0.2)': dependencies: '@react-native-community/cli-tools': 19.1.2 chalk: 4.1.2 - cosmiconfig: 9.0.1(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@7.0.2) deepmerge: 4.3.1 fast-glob: 3.3.3 joi: 17.13.3 transitivePeerDependencies: - typescript - optional: true - '@react-native-community/cli-config@20.1.3(typescript@5.0.4)': + '@react-native-community/cli-config@20.1.3(typescript@7.0.2)': dependencies: '@react-native-community/cli-tools': 20.1.3 - cosmiconfig: 9.0.1(typescript@5.0.4) + cosmiconfig: 9.0.1(typescript@7.0.2) deepmerge: 4.3.1 fast-glob: 3.3.3 joi: 17.13.3 @@ -37400,9 +38269,9 @@ snapshots: transitivePeerDependencies: - typescript - '@react-native-community/cli-doctor@19.1.2(typescript@5.0.4)': + '@react-native-community/cli-doctor@19.1.2(typescript@6.0.3)': dependencies: - '@react-native-community/cli-config': 19.1.2(typescript@5.0.4) + '@react-native-community/cli-config': 19.1.2(typescript@6.0.3) '@react-native-community/cli-platform-android': 19.1.2 '@react-native-community/cli-platform-apple': 19.1.2 '@react-native-community/cli-platform-ios': 19.1.2 @@ -37419,10 +38288,11 @@ snapshots: yaml: 2.8.2 transitivePeerDependencies: - typescript + optional: true - '@react-native-community/cli-doctor@19.1.2(typescript@5.9.3)': + '@react-native-community/cli-doctor@19.1.2(typescript@7.0.2)': dependencies: - '@react-native-community/cli-config': 19.1.2(typescript@5.9.3) + '@react-native-community/cli-config': 19.1.2(typescript@7.0.2) '@react-native-community/cli-platform-android': 19.1.2 '@react-native-community/cli-platform-apple': 19.1.2 '@react-native-community/cli-platform-ios': 19.1.2 @@ -37439,7 +38309,6 @@ snapshots: yaml: 2.8.2 transitivePeerDependencies: - typescript - optional: true '@react-native-community/cli-platform-android@19.1.2': dependencies: @@ -37530,11 +38399,11 @@ snapshots: dependencies: joi: 17.13.3 - '@react-native-community/cli@19.1.2(typescript@5.0.4)': + '@react-native-community/cli@19.1.2(typescript@6.0.3)': dependencies: '@react-native-community/cli-clean': 19.1.2 - '@react-native-community/cli-config': 19.1.2(typescript@5.0.4) - '@react-native-community/cli-doctor': 19.1.2(typescript@5.0.4) + '@react-native-community/cli-config': 19.1.2(typescript@6.0.3) + '@react-native-community/cli-doctor': 19.1.2(typescript@6.0.3) '@react-native-community/cli-server-api': 19.1.2 '@react-native-community/cli-tools': 19.1.2 '@react-native-community/cli-types': 19.1.2 @@ -37552,12 +38421,13 @@ snapshots: - supports-color - typescript - utf-8-validate + optional: true - '@react-native-community/cli@19.1.2(typescript@5.9.3)': + '@react-native-community/cli@19.1.2(typescript@7.0.2)': dependencies: '@react-native-community/cli-clean': 19.1.2 - '@react-native-community/cli-config': 19.1.2(typescript@5.9.3) - '@react-native-community/cli-doctor': 19.1.2(typescript@5.9.3) + '@react-native-community/cli-config': 19.1.2(typescript@7.0.2) + '@react-native-community/cli-doctor': 19.1.2(typescript@7.0.2) '@react-native-community/cli-server-api': 19.1.2 '@react-native-community/cli-tools': 19.1.2 '@react-native-community/cli-types': 19.1.2 @@ -37575,13 +38445,12 @@ snapshots: - supports-color - typescript - utf-8-validate - optional: true '@react-native/assets-registry@0.80.0': {} '@react-native/babel-plugin-codegen@0.80.0(@babel/core@7.29.0)': dependencies: - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 '@react-native/codegen': 0.80.0(@babel/core@7.29.0) transitivePeerDependencies: - '@babel/core' @@ -37655,7 +38524,7 @@ snapshots: nullthrows: 1.1.1 yargs: 17.7.2 - '@react-native/community-cli-plugin@0.80.0(@react-native-community/cli@19.1.2(typescript@5.0.4))': + '@react-native/community-cli-plugin@0.80.0(@react-native-community/cli@19.1.2(typescript@6.0.3))': dependencies: '@react-native/dev-middleware': 0.80.0 chalk: 4.1.2 @@ -37666,13 +38535,13 @@ snapshots: metro-core: 0.82.5 semver: 7.6.3 optionalDependencies: - '@react-native-community/cli': 19.1.2(typescript@5.0.4) + '@react-native-community/cli': 19.1.2(typescript@6.0.3) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@react-native/community-cli-plugin@0.80.0(@react-native-community/cli@19.1.2(typescript@5.9.3))': + '@react-native/community-cli-plugin@0.80.0(@react-native-community/cli@19.1.2(typescript@7.0.2))': dependencies: '@react-native/dev-middleware': 0.80.0 chalk: 4.1.2 @@ -37683,7 +38552,7 @@ snapshots: metro-core: 0.82.5 semver: 7.6.3 optionalDependencies: - '@react-native-community/cli': 19.1.2(typescript@5.9.3) + '@react-native-community/cli': 19.1.2(typescript@7.0.2) transitivePeerDependencies: - bufferutil - supports-color @@ -37709,18 +38578,18 @@ snapshots: - supports-color - utf-8-validate - '@react-native/eslint-config@0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4)': + '@react-native/eslint-config@0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)))(prettier@2.8.8)(typescript@7.0.2)': dependencies: '@babel/core': 7.29.0 '@babel/eslint-parser': 7.28.6(@babel/core@7.29.0)(eslint@8.57.1) '@react-native/eslint-plugin': 0.80.0 - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@7.0.2) eslint: 8.57.1 eslint-config-prettier: 8.10.2(eslint@8.57.1) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) eslint-plugin-ft-flow: 2.0.3(@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)))(typescript@5.0.4) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)))(typescript@7.0.2) eslint-plugin-react: 7.37.2(eslint@8.57.1) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1) eslint-plugin-react-native: 4.1.0(eslint@8.57.1) @@ -37730,18 +38599,18 @@ snapshots: - supports-color - typescript - '@react-native/eslint-config@0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)))(prettier@2.8.8)(typescript@5.0.4)': + '@react-native/eslint-config@0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)))(prettier@2.8.8)(typescript@7.0.2)': dependencies: '@babel/core': 7.29.0 '@babel/eslint-parser': 7.28.6(@babel/core@7.29.0)(eslint@8.57.1) '@react-native/eslint-plugin': 0.80.0 - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@7.0.2) eslint: 8.57.1 eslint-config-prettier: 8.10.2(eslint@8.57.1) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) eslint-plugin-ft-flow: 2.0.3(@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)))(typescript@5.0.4) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)))(typescript@7.0.2) eslint-plugin-react: 7.37.2(eslint@8.57.1) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1) eslint-plugin-react-native: 4.1.0(eslint@8.57.1) @@ -37780,21 +38649,21 @@ snapshots: '@react-native/typescript-config@0.80.0': {} - '@react-native/virtualized-lists@0.80.0(@types/react@19.2.14)(react-native@0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@5.0.4))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0)': + '@react-native/virtualized-lists@0.80.0(@types/react@19.2.14)(react-native@0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@7.0.2))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.1.0 - react-native: 0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@5.0.4))(@types/react@19.2.14)(react@19.1.0) + react-native: 0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@7.0.2))(@types/react@19.2.14)(react@19.1.0) optionalDependencies: '@types/react': 19.2.14 - '@react-native/virtualized-lists@0.80.0(@types/react@19.2.14)(react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@5.9.3))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0)': + '@react-native/virtualized-lists@0.80.0(@types/react@19.2.14)(react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@6.0.3))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 19.1.0 - react-native: 0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@5.9.3))(@types/react@19.2.14)(react@19.1.0) + react-native: 0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@6.0.3))(@types/react@19.2.14)(react@19.1.0) optionalDependencies: '@types/react': 19.2.14 @@ -37931,37 +38800,45 @@ snapshots: joi: 17.13.3 tslib: 2.8.1 - '@rock-js/platform-android@0.13.0': + '@rock-js/config@0.14.1': + dependencies: + '@babel/code-frame': 7.29.7 + '@rock-js/provider-github': 0.14.1 + '@rock-js/tools': 0.14.1 + joi: 17.13.3 + tslib: 2.8.1 + + '@rock-js/platform-android@0.14.1': dependencies: '@react-native-community/cli-config-android': 20.1.3 - '@rock-js/tools': 0.13.0 + '@rock-js/tools': 0.14.1 tslib: 2.8.1 - '@rock-js/platform-apple-helpers@0.13.0(typescript@5.0.4)': + '@rock-js/platform-apple-helpers@0.14.1(typescript@7.0.2)': dependencies: - '@react-native-community/cli-config': 20.1.3(typescript@5.0.4) + '@react-native-community/cli-config': 20.1.3(typescript@7.0.2) '@react-native-community/cli-config-apple': 20.1.3 - '@rock-js/tools': 0.13.0 + '@rock-js/tools': 0.14.1 adm-zip: 0.5.16 fast-xml-parser: 4.5.4 tslib: 2.8.1 transitivePeerDependencies: - typescript - '@rock-js/platform-ios@0.13.0(typescript@5.0.4)': + '@rock-js/platform-ios@0.14.1(typescript@7.0.2)': dependencies: '@react-native-community/cli-config-apple': 20.1.3 '@react-native-community/cli-types': 20.1.3 - '@rock-js/platform-apple-helpers': 0.13.0(typescript@5.0.4) - '@rock-js/tools': 0.13.0 + '@rock-js/platform-apple-helpers': 0.14.1(typescript@7.0.2) + '@rock-js/tools': 0.14.1 tslib: 2.8.1 transitivePeerDependencies: - typescript - '@rock-js/plugin-metro@0.13.0': + '@rock-js/plugin-metro@0.14.1': dependencies: '@react-native-community/cli-server-api': 20.1.3 - '@rock-js/tools': 0.13.0 + '@rock-js/tools': 0.14.1 metro: 0.83.5 metro-config: 0.83.5 metro-core: 0.83.5 @@ -37978,6 +38855,12 @@ snapshots: ts-regex-builder: 1.8.2 tslib: 2.8.1 + '@rock-js/provider-github@0.14.1': + dependencies: + '@rock-js/tools': 0.14.1 + ts-regex-builder: 1.8.2 + tslib: 2.8.1 + '@rock-js/tools@0.13.0': dependencies: '@clack/prompts': 0.11.0 @@ -37991,6 +38874,19 @@ snapshots: tar: 7.5.11 tslib: 2.8.1 + '@rock-js/tools@0.14.1': + dependencies: + '@clack/prompts': 0.11.0 + adm-zip: 0.5.16 + appdirsjs: 1.2.7 + fs-fingerprint: 0.11.0 + is-unicode-supported: 2.1.0 + nano-spawn: 0.2.1 + picocolors: 1.1.1 + string-argv: 0.3.2 + tar: 7.5.11 + tslib: 2.8.1 + '@rolldown/binding-android-arm64@1.0.0-rc.3': optional: true @@ -38057,17 +38953,17 @@ snapshots: '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.9(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.9(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -38098,7 +38994,7 @@ snapshots: '@rollup/plugin-babel@6.1.0(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.59.0)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.28.6 + '@babel/helper-module-imports': 7.29.7 '@rollup/pluginutils': 5.3.0(rollup@4.59.0) optionalDependencies: '@types/babel__core': 7.20.5 @@ -38147,11 +39043,11 @@ snapshots: optionalDependencies: rollup: 4.59.0 - '@rollup/plugin-typescript@12.3.0(rollup@4.59.0)(tslib@2.8.1)(typescript@5.9.3)': + '@rollup/plugin-typescript@12.3.0(rollup@4.59.0)(tslib@2.8.1)(typescript@7.0.2)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) resolve: 1.22.8 - typescript: 5.9.3 + typescript: 7.0.2 optionalDependencies: rollup: 4.59.0 tslib: 2.8.1 @@ -38270,20 +39166,9 @@ snapshots: core-js: 3.42.0 jiti: 2.6.1 - '@rsbuild/core@1.4.16(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@rspack/core': 1.4.11(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/helpers@0.5.17) - '@rspack/lite-tapable': 1.0.1 - '@swc/helpers': 0.5.17 - core-js: 3.45.1 - jiti: 2.6.1 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@rsbuild/core@1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@rsbuild/core@1.5.17(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@rspack/core': 1.5.8(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/helpers@0.5.17) + '@rspack/core': 1.5.8(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@swc/helpers@0.5.17) '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.17 core-js: 3.46.0 @@ -38302,153 +39187,179 @@ snapshots: '@rsbuild/core@1.7.3': dependencies: - '@rspack/core': 1.7.9(@swc/helpers@0.5.19) - '@rspack/lite-tapable': 1.1.0 - '@swc/helpers': 0.5.19 + '@rspack/core': 1.7.9(@swc/helpers@0.5.23) + '@rspack/lite-tapable': 1.1.2 + '@swc/helpers': 0.5.23 core-js: 3.47.0 jiti: 2.6.1 - '@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0)': + '@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)': dependencies: - '@rspack/core': 2.0.0-beta.0(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(@swc/helpers@0.5.19) - '@swc/helpers': 0.5.19 + '@rspack/core': 2.0.0-beta.0(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + '@swc/helpers': 0.5.23 jiti: 2.6.1 optionalDependencies: core-js: 3.49.0 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0)': + '@rsbuild/core@2.0.15(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1)': dependencies: - '@rspack/core': 2.0.0-beta.0(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.19) - '@swc/helpers': 0.5.19 - jiti: 2.6.1 + '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + '@swc/helpers': 0.5.23 optionalDependencies: - core-js: 3.49.0 + core-js: 3.36.1 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)': + '@rsbuild/core@2.0.15(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)': dependencies: - '@rspack/core': 2.0.0-beta.0(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.19) - '@swc/helpers': 0.5.19 - jiti: 2.6.1 + '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + '@swc/helpers': 0.5.23 optionalDependencies: core-js: 3.49.0 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)': + '@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)': dependencies: - '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23) + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 optionalDependencies: core-js: 3.49.0 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/plugin-assets-retry@1.5.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))': + '@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0)': + dependencies: + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(@swc/helpers@0.5.23) + '@swc/helpers': 0.5.23 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) + core-js: 3.49.0 + transitivePeerDependencies: + - '@module-federation/runtime-tools' - '@rsbuild/plugin-assets-retry@1.5.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': + '@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1)': + dependencies: + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + '@swc/helpers': 0.5.23 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + core-js: 3.36.1 + transitivePeerDependencies: + - '@module-federation/runtime-tools' - '@rsbuild/plugin-assets-retry@1.5.1(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))': + '@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)': + dependencies: + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + '@swc/helpers': 0.5.23 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + core-js: 3.49.0 + transitivePeerDependencies: + - '@module-federation/runtime-tools' '@rsbuild/plugin-assets-retry@1.5.2(@rsbuild/core@1.7.3)': optionalDependencies: '@rsbuild/core': 1.7.3 + '@rsbuild/plugin-assets-retry@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@rsbuild/plugin-babel@1.0.1-rc.4(@rsbuild/core@1.0.1-rc.4)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) '@rsbuild/core': 1.0.1-rc.4 '@types/babel__core': 7.20.5 deepmerge: 4.3.1 - reduce-configs: 1.1.1 + reduce-configs: 1.1.2 upath: 2.0.1 transitivePeerDependencies: - supports-color - '@rsbuild/plugin-babel@1.0.5(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': + '@rsbuild/plugin-babel@1.0.5(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@types/babel__core': 7.20.5 deepmerge: 4.3.1 - reduce-configs: 1.1.1 + reduce-configs: 1.1.2 upath: 2.0.1 transitivePeerDependencies: - supports-color '@rsbuild/plugin-babel@1.1.0(@rsbuild/core@1.7.3)': dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) '@rsbuild/core': 1.7.3 '@types/babel__core': 7.20.5 deepmerge: 4.3.1 - reduce-configs: 1.1.1 + reduce-configs: 1.1.2 upath: 2.0.1 transitivePeerDependencies: - supports-color - '@rsbuild/plugin-check-syntax@1.6.1(@rsbuild/core@1.7.3)': + '@rsbuild/plugin-babel@1.2.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': dependencies: - acorn: 8.16.0 - browserslist-to-es-version: 1.4.1 - htmlparser2: 10.0.0 - picocolors: 1.1.1 - source-map: 0.7.6 + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) + '@types/babel__core': 7.20.5 + reduce-configs: 1.1.2 optionalDependencies: - '@rsbuild/core': 1.7.3 + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + transitivePeerDependencies: + - supports-color - '@rsbuild/plugin-check-syntax@1.6.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))': + '@rsbuild/plugin-babel@2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4))': dependencies: - acorn: 8.16.0 - browserslist-to-es-version: 1.4.1 - htmlparser2: 10.0.0 - picocolors: 1.1.1 - source-map: 0.7.6 + '@babel/core': 7.29.7 + '@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) + '@types/babel__core': 7.20.5 + babel-loader: 10.1.1(@babel/core@7.29.7)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)) + reduce-configs: 1.1.2 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + transitivePeerDependencies: + - '@rspack/core' + - supports-color + - webpack - '@rsbuild/plugin-check-syntax@1.6.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': + '@rsbuild/plugin-check-syntax@1.6.1(@rsbuild/core@1.7.3)': dependencies: - acorn: 8.16.0 + acorn: 8.17.0 browserslist-to-es-version: 1.4.1 htmlparser2: 10.0.0 picocolors: 1.1.1 source-map: 0.7.6 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-check-syntax@1.6.1(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))': + '@rsbuild/plugin-check-syntax@2.0.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': dependencies: - acorn: 8.16.0 + acorn: 8.17.0 browserslist-to-es-version: 1.4.1 - htmlparser2: 10.0.0 + htmlparser2: 12.0.0 picocolors: 1.1.1 source-map: 0.7.6 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) - '@rsbuild/plugin-css-minimizer@1.1.1(@rsbuild/core@1.7.3)(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@rsbuild/plugin-css-minimizer@1.1.1(@rsbuild/core@1.7.3)(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': dependencies: - css-minimizer-webpack-plugin: 7.0.2(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) - reduce-configs: 1.1.1 + css-minimizer-webpack-plugin: 7.0.2(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + reduce-configs: 1.1.2 optionalDependencies: '@rsbuild/core': 1.7.3 transitivePeerDependencies: @@ -38460,10 +39371,10 @@ snapshots: - lightningcss - webpack - '@rsbuild/plugin-css-minimizer@1.1.1(@rsbuild/core@1.7.3)(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4))': + '@rsbuild/plugin-css-minimizer@1.1.1(@rsbuild/core@1.7.3)(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4))': dependencies: - css-minimizer-webpack-plugin: 7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) - reduce-configs: 1.1.1 + css-minimizer-webpack-plugin: 7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + reduce-configs: 1.1.2 optionalDependencies: '@rsbuild/core': 1.7.3 transitivePeerDependencies: @@ -38475,10 +39386,10 @@ snapshots: - lightningcss - webpack - '@rsbuild/plugin-css-minimizer@1.1.1(@rsbuild/core@1.7.3)(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@rsbuild/plugin-css-minimizer@1.1.1(@rsbuild/core@1.7.3)(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': dependencies: - css-minimizer-webpack-plugin: 7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) - reduce-configs: 1.1.1 + css-minimizer-webpack-plugin: 7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + reduce-configs: 1.1.2 optionalDependencies: '@rsbuild/core': 1.7.3 transitivePeerDependencies: @@ -38490,27 +39401,12 @@ snapshots: - lightningcss - webpack - '@rsbuild/plugin-css-minimizer@1.1.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4))': - dependencies: - css-minimizer-webpack-plugin: 7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) - reduce-configs: 1.1.1 - optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) - transitivePeerDependencies: - - '@parcel/css' - - '@swc/css' - - clean-css - - csso - - esbuild - - lightningcss - - webpack - - '@rsbuild/plugin-css-minimizer@1.1.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': + '@rsbuild/plugin-css-minimizer@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4))': dependencies: - css-minimizer-webpack-plugin: 7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) - reduce-configs: 1.1.1 + css-minimizer-webpack-plugin: 8.0.0(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)) + reduce-configs: 1.1.2 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - '@parcel/css' - '@swc/css' @@ -38520,12 +39416,12 @@ snapshots: - lightningcss - webpack - '@rsbuild/plugin-css-minimizer@1.1.1(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': + '@rsbuild/plugin-css-minimizer@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': dependencies: - css-minimizer-webpack-plugin: 7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) - reduce-configs: 1.1.1 + css-minimizer-webpack-plugin: 8.0.0(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + reduce-configs: 1.1.2 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - '@parcel/css' - '@swc/css' @@ -38539,25 +39435,31 @@ snapshots: dependencies: '@rsbuild/core': 1.7.3 deepmerge: 4.3.1 - reduce-configs: 1.1.1 - - '@rsbuild/plugin-less@1.6.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))': - dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) - deepmerge: 4.3.1 - reduce-configs: 1.1.1 + reduce-configs: 1.1.2 - '@rsbuild/plugin-less@1.6.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': + '@rsbuild/plugin-less@1.6.4(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4))': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) deepmerge: 4.3.1 - reduce-configs: 1.1.1 + less: 4.6.4 + less-loader: 12.3.3(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(less@4.6.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)) + reduce-configs: 1.1.2 + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + transitivePeerDependencies: + - '@rspack/core' + - webpack - '@rsbuild/plugin-less@1.6.0(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))': + '@rsbuild/plugin-less@1.6.4(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)))': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) deepmerge: 4.3.1 - reduce-configs: 1.1.1 + less: 4.6.4 + less-loader: 12.3.3(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(less@4.6.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + reduce-configs: 1.1.2 + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + transitivePeerDependencies: + - '@rspack/core' + - webpack '@rsbuild/plugin-node-polyfill@1.4.3(@rsbuild/core@1.7.3)': dependencies: @@ -38620,118 +39522,119 @@ snapshots: '@types/pug': 2.0.10 lodash: 4.18.1 pug: 3.0.4 - reduce-configs: 1.1.1 + reduce-configs: 1.1.2 optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-react@1.4.4(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@1.4.5(@rsbuild/core@1.3.21)(webpack-hot-middleware@2.26.1)': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) + '@rsbuild/core': 1.3.21 '@rspack/plugin-react-refresh': 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) react-refresh: 0.18.0 transitivePeerDependencies: - webpack-hot-middleware - '@rsbuild/plugin-react@1.4.4(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1)': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 1.7.3 '@rspack/plugin-react-refresh': 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) react-refresh: 0.18.0 transitivePeerDependencies: - webpack-hot-middleware - '@rsbuild/plugin-react@1.4.4(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@1.4.5(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rspack/plugin-react-refresh': 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) react-refresh: 0.18.0 transitivePeerDependencies: - webpack-hot-middleware - '@rsbuild/plugin-react@1.4.5(@rsbuild/core@1.3.21)(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))': dependencies: - '@rsbuild/core': 1.3.21 - '@rspack/plugin-react-refresh': 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) + '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-refresh@0.18.0) react-refresh: 0.18.0 + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - - webpack-hot-middleware + - '@rspack/core' - '@rsbuild/plugin-react@1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))': dependencies: - '@rsbuild/core': 1.7.3 - '@rspack/plugin-react-refresh': 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) + '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-refresh@0.18.0) react-refresh: 0.18.0 + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - - webpack-hot-middleware + - '@rspack/core' - '@rsbuild/plugin-react@1.4.5(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) - '@rspack/plugin-react-refresh': 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) + '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-refresh@0.18.0) react-refresh: 0.18.0 + optionalDependencies: + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - - webpack-hot-middleware + - '@rspack/core' - '@rsbuild/plugin-react@1.4.5(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@rspack/plugin-react-refresh': 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-refresh@0.18.0) react-refresh: 0.18.0 + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - - webpack-hot-middleware + - '@rspack/core' - '@rsbuild/plugin-react@1.4.5(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) - '@rspack/plugin-react-refresh': 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-refresh@0.18.0) react-refresh: 0.18.0 + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - - webpack-hot-middleware + - '@rspack/core' - '@rsbuild/plugin-react@1.4.5(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@0.7.5(@swc/helpers@0.5.23))': dependencies: - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@rspack/plugin-react-refresh': 1.6.1(react-refresh@0.18.0)(webpack-hot-middleware@2.26.1) + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@0.7.5(@swc/helpers@0.5.23))(react-refresh@0.18.0) react-refresh: 0.18.0 + optionalDependencies: + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - - webpack-hot-middleware + - '@rspack/core' - '@rsbuild/plugin-react@2.0.1(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))': dependencies: - '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(react-refresh@0.18.0) + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-refresh@0.18.0) react-refresh: 0.18.0 optionalDependencies: - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@rsbuild/plugin-rem@1.0.5(@rsbuild/core@1.7.3)': - dependencies: - deepmerge: 4.3.1 - terser: 5.46.1 - optionalDependencies: - '@rsbuild/core': 1.7.3 - - '@rsbuild/plugin-rem@1.0.5(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))': dependencies: - deepmerge: 4.3.1 - terser: 5.46.1 + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-refresh@0.18.0) + react-refresh: 0.18.0 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + transitivePeerDependencies: + - '@rspack/core' - '@rsbuild/plugin-rem@1.0.5(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': + '@rsbuild/plugin-rem@1.0.5(@rsbuild/core@1.7.3)': dependencies: deepmerge: 4.3.1 - terser: 5.46.1 + terser: 5.48.0 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-rem@1.0.5(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))': + '@rsbuild/plugin-rem@1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': dependencies: deepmerge: 4.3.1 - terser: 5.46.1 + terser: 5.48.0 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-sass@1.5.0(@rsbuild/core@1.7.3)': dependencies: @@ -38739,106 +39642,59 @@ snapshots: deepmerge: 4.3.1 loader-utils: 2.0.4 postcss: 8.5.10 - reduce-configs: 1.1.1 - sass-embedded: 1.98.0 - - '@rsbuild/plugin-sass@1.5.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))': - dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) - deepmerge: 4.3.1 - loader-utils: 2.0.4 - postcss: 8.5.10 - reduce-configs: 1.1.1 - sass-embedded: 1.98.0 - - '@rsbuild/plugin-sass@1.5.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': - dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - deepmerge: 4.3.1 - loader-utils: 2.0.4 - postcss: 8.5.10 - reduce-configs: 1.1.1 - sass-embedded: 1.98.0 + reduce-configs: 1.1.2 + sass-embedded: 1.100.0 - '@rsbuild/plugin-sass@1.5.0(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))': + '@rsbuild/plugin-sass@1.5.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) deepmerge: 4.3.1 loader-utils: 2.0.4 - postcss: 8.5.10 - reduce-configs: 1.1.1 - sass-embedded: 1.98.0 + postcss: 8.5.15 + reduce-configs: 1.1.2 + sass-embedded: 1.100.0 + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) - '@rsbuild/plugin-sass@1.5.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': + '@rsbuild/plugin-sass@2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': dependencies: deepmerge: 4.3.1 loader-utils: 2.0.4 postcss: 8.5.15 - reduce-configs: 1.1.2 + reduce-configs: 2.0.1 sass-embedded: 1.100.0 optionalDependencies: - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-source-build@1.0.4(@rsbuild/core@1.7.3)': dependencies: fast-glob: 3.3.3 json5: 2.2.3 - yaml: 2.8.2 + yaml: 2.9.0 optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-source-build@1.0.4(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))': + '@rsbuild/plugin-source-build@1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': dependencies: fast-glob: 3.3.3 json5: 2.2.3 - yaml: 2.8.2 + yaml: 2.9.0 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) - - '@rsbuild/plugin-source-build@1.0.4(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': - dependencies: - fast-glob: 3.3.3 - json5: 2.2.3 - yaml: 2.8.2 - optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - - '@rsbuild/plugin-source-build@1.0.4(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))': - dependencies: - fast-glob: 3.3.3 - json5: 2.2.3 - yaml: 2.8.2 - optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@rsbuild/plugin-styled-components@1.6.0(@rsbuild/core@1.7.3)': dependencies: '@swc/plugin-styled-components': 12.7.0 - reduce-configs: 1.1.1 + reduce-configs: 1.1.2 optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-svgr@1.3.0(@rsbuild/core@1.7.3)(typescript@5.9.3)(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-svgr@1.3.0(@rsbuild/core@1.7.3)(typescript@7.0.2)(webpack-hot-middleware@2.26.1)': dependencies: '@rsbuild/core': 1.7.3 '@rsbuild/plugin-react': 1.4.5(@rsbuild/core@1.7.3)(webpack-hot-middleware@2.26.1) - '@svgr/core': 8.1.0(typescript@5.9.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) - deepmerge: 4.3.1 - loader-utils: 3.3.1 - transitivePeerDependencies: - - supports-color - - typescript - - webpack-hot-middleware - - '@rsbuild/plugin-svgr@1.3.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(typescript@5.9.3)(webpack-hot-middleware@2.26.1)': - dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) - '@rsbuild/plugin-react': 1.4.5(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(webpack-hot-middleware@2.26.1) - '@svgr/core': 8.1.0(typescript@5.9.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@7.0.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@7.0.2)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@7.0.2))(typescript@7.0.2) deepmerge: 4.3.1 loader-utils: 3.3.1 transitivePeerDependencies: @@ -38846,33 +39702,35 @@ snapshots: - typescript - webpack-hot-middleware - '@rsbuild/plugin-svgr@1.3.0(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(typescript@5.0.4)(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-svgr@2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(typescript@7.0.2)': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@rsbuild/plugin-react': 1.4.5(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(webpack-hot-middleware@2.26.1) - '@svgr/core': 8.1.0(typescript@5.0.4) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.0.4) + '@rsbuild/plugin-react': 2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17)) + '@svgr/core': 8.1.0(typescript@7.0.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@7.0.2)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@7.0.2))(typescript@7.0.2) deepmerge: 4.3.1 loader-utils: 3.3.1 + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: + - '@rspack/core' - supports-color - typescript - - webpack-hot-middleware - '@rsbuild/plugin-svgr@1.3.0(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(typescript@5.0.4)(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-svgr@2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(typescript@7.0.2)': dependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) - '@rsbuild/plugin-react': 1.4.5(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(webpack-hot-middleware@2.26.1) - '@svgr/core': 8.1.0(typescript@5.0.4) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.0.4) + '@rsbuild/plugin-react': 2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) + '@svgr/core': 8.1.0(typescript@7.0.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@7.0.2) deepmerge: 4.3.1 loader-utils: 3.3.1 + optionalDependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: + - '@rspack/core' - supports-color - typescript - - webpack-hot-middleware '@rsbuild/plugin-toml@1.1.2(@rsbuild/core@1.7.3)': dependencies: @@ -38880,12 +39738,12 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-type-check@1.3.3(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@5.9.3)': + '@rsbuild/plugin-type-check@1.3.3(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2)': dependencies: deepmerge: 4.3.1 json5: 2.2.3 - reduce-configs: 1.1.1 - ts-checker-rspack-plugin: 1.3.0(@rspack/core@1.7.9(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@5.9.3) + reduce-configs: 1.1.2 + ts-checker-rspack-plugin: 1.3.0(@rspack/core@1.7.9(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2) optionalDependencies: '@rsbuild/core': 1.7.3 transitivePeerDependencies: @@ -38893,66 +39751,53 @@ snapshots: - tslib - typescript - '@rsbuild/plugin-type-check@1.3.3(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@5.9.3)': - dependencies: - deepmerge: 4.3.1 - json5: 2.2.3 - reduce-configs: 1.1.1 - ts-checker-rspack-plugin: 1.3.0(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@5.9.3) - optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) - transitivePeerDependencies: - - '@rspack/core' - - tslib - - typescript - - '@rsbuild/plugin-type-check@1.3.3(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(tslib@2.8.1)(typescript@5.0.4)': + '@rsbuild/plugin-type-check@1.3.4(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@7.0.2)': dependencies: deepmerge: 4.3.1 json5: 2.2.3 - reduce-configs: 1.1.1 - ts-checker-rspack-plugin: 1.3.0(@rspack/core@1.3.9(@swc/helpers@0.5.13))(tslib@2.8.1)(typescript@5.0.4) + reduce-configs: 1.1.2 + ts-checker-rspack-plugin: 1.3.0(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@7.0.2) optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 1.7.3 transitivePeerDependencies: - '@rspack/core' - tslib - typescript - '@rsbuild/plugin-type-check@1.3.3(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))(@rspack/core@1.3.9(@swc/helpers@0.5.13))(tslib@2.8.1)(typescript@5.0.4)': + '@rsbuild/plugin-type-check@1.5.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2)': dependencies: deepmerge: 4.3.1 json5: 2.2.3 - reduce-configs: 1.1.1 - ts-checker-rspack-plugin: 1.3.0(@rspack/core@1.3.9(@swc/helpers@0.5.13))(tslib@2.8.1)(typescript@5.0.4) + reduce-configs: 1.1.2 + ts-checker-rspack-plugin: 1.5.1(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2) optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - tslib - typescript - '@rsbuild/plugin-type-check@1.3.4(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@5.9.3)': + '@rsbuild/plugin-type-check@1.5.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2)': dependencies: deepmerge: 4.3.1 json5: 2.2.3 - reduce-configs: 1.1.1 - ts-checker-rspack-plugin: 1.3.0(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@5.9.3) + reduce-configs: 1.1.2 + ts-checker-rspack-plugin: 1.5.1(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2) optionalDependencies: - '@rsbuild/core': 1.7.3 + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - tslib - typescript - '@rsbuild/plugin-type-check@1.3.4(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@5.9.3)': + '@rsbuild/plugin-type-check@1.5.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2)': dependencies: deepmerge: 4.3.1 json5: 2.2.3 - reduce-configs: 1.1.1 - ts-checker-rspack-plugin: 1.3.0(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@5.9.3) + reduce-configs: 1.1.2 + ts-checker-rspack-plugin: 1.5.1(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2) optionalDependencies: - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - tslib @@ -38962,23 +39807,36 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-typed-css-modules@1.2.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0))': + '@rsbuild/plugin-typed-css-modules@1.2.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) - '@rsbuild/plugin-typed-css-modules@1.2.1(@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))': + '@rsbuild/plugin-vue-jsx@2.0.1(@babel/core@7.29.7)(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))': + dependencies: + '@rsbuild/plugin-babel': 1.2.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.7) + babel-plugin-vue-jsx-hmr: 1.0.0 optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + transitivePeerDependencies: + - '@babel/core' + - supports-color - '@rsbuild/plugin-typed-css-modules@1.2.1(@rsbuild/core@2.0.0-beta.2(core-js@3.49.0))': + '@rsbuild/plugin-vue@1.2.9(@rsbuild/core@1.7.3)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.0.4))': + dependencies: + rspack-vue-loader: 17.5.1(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.0.4)) optionalDependencies: - '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(core-js@3.49.0) + '@rsbuild/core': 1.7.3 + transitivePeerDependencies: + - '@rspack/core' + - '@vue/compiler-sfc' + - vue - '@rsbuild/plugin-vue@1.2.7(@rsbuild/core@1.7.3)(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.9.3))': + '@rsbuild/plugin-vue@2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2))': dependencies: - rspack-vue-loader: 17.5.0(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.9.3)) + rspack-vue-loader: 17.5.1(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)) optionalDependencies: - '@rsbuild/core': 1.7.3 + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@vue/compiler-sfc' @@ -39002,11 +39860,11 @@ snapshots: '@rsbuild/webpack@1.6.1(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.17))(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)': dependencies: '@rsbuild/core': 1.7.3 - copy-webpack-plugin: 11.0.0(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) - html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) - mini-css-extract-plugin: 2.9.4(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + copy-webpack-plugin: 11.0.0(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + mini-css-extract-plugin: 2.9.4(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) picocolors: 1.1.1 - reduce-configs: 1.1.1 + reduce-configs: 1.1.2 tsconfig-paths-webpack-plugin: 4.2.0 webpack: 5.104.1(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) transitivePeerDependencies: @@ -39019,11 +39877,11 @@ snapshots: '@rsbuild/webpack@1.6.1(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack-cli@5.1.4)': dependencies: '@rsbuild/core': 1.7.3 - copy-webpack-plugin: 11.0.0(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) - html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) - mini-css-extract-plugin: 2.9.4(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + copy-webpack-plugin: 11.0.0(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + mini-css-extract-plugin: 2.9.4(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) picocolors: 1.1.1 - reduce-configs: 1.1.1 + reduce-configs: 1.1.2 tsconfig-paths-webpack-plugin: 4.2.0 webpack: 5.104.1(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: @@ -39036,11 +39894,11 @@ snapshots: '@rsbuild/webpack@1.6.1(@rsbuild/core@1.7.3)(@rspack/core@1.7.9(@swc/helpers@0.5.19))(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)': dependencies: '@rsbuild/core': 1.7.3 - copy-webpack-plugin: 11.0.0(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) - html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) - mini-css-extract-plugin: 2.9.4(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + copy-webpack-plugin: 11.0.0(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + mini-css-extract-plugin: 2.9.4(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) picocolors: 1.1.1 - reduce-configs: 1.1.1 + reduce-configs: 1.1.2 tsconfig-paths-webpack-plugin: 4.2.0 webpack: 5.104.1(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) transitivePeerDependencies: @@ -39050,63 +39908,65 @@ snapshots: - uglify-js - webpack-cli - '@rslib/core@0.10.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(typescript@5.9.3)': + '@rslib/core@0.12.4(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(typescript@7.0.2)': dependencies: - '@rsbuild/core': 1.4.16(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - rsbuild-plugin-dts: 0.10.6(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@1.4.16(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3) + '@rsbuild/core': 1.5.17(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + rsbuild-plugin-dts: 0.12.4(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@1.5.17(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1))(typescript@7.0.2) tinyglobby: 0.2.15 optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - '@rslib/core@0.12.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(typescript@5.9.3)': + '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1)(typescript@6.0.3)': dependencies: - '@rsbuild/core': 1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - rsbuild-plugin-dts: 0.12.4(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3) - tinyglobby: 0.2.15 + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1) + rsbuild-plugin-dts: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1))(typescript@6.0.3) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + - '@module-federation/runtime-tools' + - '@typescript/native-preview' + - core-js - '@rslib/core@0.12.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(typescript@5.6.3)': + '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@6.0.3)': dependencies: - '@rsbuild/core': 1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - rsbuild-plugin-dts: 0.12.4(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(@rsbuild/core@1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.6.3) - tinyglobby: 0.2.15 + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + rsbuild-plugin-dts: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(typescript@6.0.3) optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@22.19.15) - typescript: 5.6.3 + '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) + typescript: 6.0.3 transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + - '@module-federation/runtime-tools' + - '@typescript/native-preview' + - core-js - '@rslib/core@0.12.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3)': + '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@6.0.3)': dependencies: - '@rsbuild/core': 1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - rsbuild-plugin-dts: 0.12.4(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@rsbuild/core@1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3) - tinyglobby: 0.2.15 + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + rsbuild-plugin-dts: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(typescript@6.0.3) optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@26.1.0) - typescript: 5.9.3 + '@microsoft/api-extractor': 7.57.7(@types/node@22.19.15) + typescript: 6.0.3 transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + - '@module-federation/runtime-tools' + - '@typescript/native-preview' + - core-js - '@rslib/core@0.18.5(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3)': + '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2)': dependencies: - '@rsbuild/core': 1.7.3 - rsbuild-plugin-dts: 0.18.5(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@rsbuild/core@1.7.3)(typescript@5.9.3) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + rsbuild-plugin-dts: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(typescript@7.0.2) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@26.1.0) - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: + - '@module-federation/runtime-tools' - '@typescript/native-preview' + - core-js '@rslib/core@0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3)': dependencies: @@ -39132,9 +39992,6 @@ snapshots: '@rspack/binding-darwin-arm64@1.3.9': optional: true - '@rspack/binding-darwin-arm64@1.4.11': - optional: true - '@rspack/binding-darwin-arm64@1.5.8': optional: true @@ -39156,6 +40013,9 @@ snapshots: '@rspack/binding-darwin-arm64@2.0.8': optional: true + '@rspack/binding-darwin-arm64@2.1.2': + optional: true + '@rspack/binding-darwin-x64@0.7.5': optional: true @@ -39171,9 +40031,6 @@ snapshots: '@rspack/binding-darwin-x64@1.3.9': optional: true - '@rspack/binding-darwin-x64@1.4.11': - optional: true - '@rspack/binding-darwin-x64@1.5.8': optional: true @@ -39195,6 +40052,9 @@ snapshots: '@rspack/binding-darwin-x64@2.0.8': optional: true + '@rspack/binding-darwin-x64@2.1.2': + optional: true + '@rspack/binding-linux-arm64-gnu@0.7.5': optional: true @@ -39210,9 +40070,6 @@ snapshots: '@rspack/binding-linux-arm64-gnu@1.3.9': optional: true - '@rspack/binding-linux-arm64-gnu@1.4.11': - optional: true - '@rspack/binding-linux-arm64-gnu@1.5.8': optional: true @@ -39234,6 +40091,9 @@ snapshots: '@rspack/binding-linux-arm64-gnu@2.0.8': optional: true + '@rspack/binding-linux-arm64-gnu@2.1.2': + optional: true + '@rspack/binding-linux-arm64-musl@0.7.5': optional: true @@ -39249,9 +40109,6 @@ snapshots: '@rspack/binding-linux-arm64-musl@1.3.9': optional: true - '@rspack/binding-linux-arm64-musl@1.4.11': - optional: true - '@rspack/binding-linux-arm64-musl@1.5.8': optional: true @@ -39273,6 +40130,15 @@ snapshots: '@rspack/binding-linux-arm64-musl@2.0.8': optional: true + '@rspack/binding-linux-arm64-musl@2.1.2': + optional: true + + '@rspack/binding-linux-riscv64-gnu@2.1.2': + optional: true + + '@rspack/binding-linux-riscv64-musl@2.1.2': + optional: true + '@rspack/binding-linux-x64-gnu@0.7.5': optional: true @@ -39288,9 +40154,6 @@ snapshots: '@rspack/binding-linux-x64-gnu@1.3.9': optional: true - '@rspack/binding-linux-x64-gnu@1.4.11': - optional: true - '@rspack/binding-linux-x64-gnu@1.5.8': optional: true @@ -39312,6 +40175,9 @@ snapshots: '@rspack/binding-linux-x64-gnu@2.0.8': optional: true + '@rspack/binding-linux-x64-gnu@2.1.2': + optional: true + '@rspack/binding-linux-x64-musl@0.7.5': optional: true @@ -39327,9 +40193,6 @@ snapshots: '@rspack/binding-linux-x64-musl@1.3.9': optional: true - '@rspack/binding-linux-x64-musl@1.4.11': - optional: true - '@rspack/binding-linux-x64-musl@1.5.8': optional: true @@ -39351,17 +40214,12 @@ snapshots: '@rspack/binding-linux-x64-musl@2.0.8': optional: true - '@rspack/binding-wasm32-wasi@1.4.11(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' + '@rspack/binding-linux-x64-musl@2.1.2': optional: true - '@rspack/binding-wasm32-wasi@1.5.8(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@rspack/binding-wasm32-wasi@1.5.8(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': dependencies: - '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -39401,6 +40259,13 @@ snapshots: '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true + '@rspack/binding-wasm32-wasi@2.1.2': + dependencies: + '@emnapi/core': 1.11.1 + '@emnapi/runtime': 1.11.1 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optional: true + '@rspack/binding-win32-arm64-msvc@0.7.5': optional: true @@ -39416,9 +40281,6 @@ snapshots: '@rspack/binding-win32-arm64-msvc@1.3.9': optional: true - '@rspack/binding-win32-arm64-msvc@1.4.11': - optional: true - '@rspack/binding-win32-arm64-msvc@1.5.8': optional: true @@ -39440,6 +40302,9 @@ snapshots: '@rspack/binding-win32-arm64-msvc@2.0.8': optional: true + '@rspack/binding-win32-arm64-msvc@2.1.2': + optional: true + '@rspack/binding-win32-ia32-msvc@0.7.5': optional: true @@ -39455,9 +40320,6 @@ snapshots: '@rspack/binding-win32-ia32-msvc@1.3.9': optional: true - '@rspack/binding-win32-ia32-msvc@1.4.11': - optional: true - '@rspack/binding-win32-ia32-msvc@1.5.8': optional: true @@ -39479,6 +40341,9 @@ snapshots: '@rspack/binding-win32-ia32-msvc@2.0.8': optional: true + '@rspack/binding-win32-ia32-msvc@2.1.2': + optional: true + '@rspack/binding-win32-x64-msvc@0.7.5': optional: true @@ -39494,9 +40359,6 @@ snapshots: '@rspack/binding-win32-x64-msvc@1.3.9': optional: true - '@rspack/binding-win32-x64-msvc@1.4.11': - optional: true - '@rspack/binding-win32-x64-msvc@1.5.8': optional: true @@ -39518,6 +40380,9 @@ snapshots: '@rspack/binding-win32-x64-msvc@2.0.8': optional: true + '@rspack/binding-win32-x64-msvc@2.1.2': + optional: true + '@rspack/binding@0.7.5': optionalDependencies: '@rspack/binding-darwin-arm64': 0.7.5 @@ -39578,23 +40443,7 @@ snapshots: '@rspack/binding-win32-ia32-msvc': 1.3.9 '@rspack/binding-win32-x64-msvc': 1.3.9 - '@rspack/binding@1.4.11(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - optionalDependencies: - '@rspack/binding-darwin-arm64': 1.4.11 - '@rspack/binding-darwin-x64': 1.4.11 - '@rspack/binding-linux-arm64-gnu': 1.4.11 - '@rspack/binding-linux-arm64-musl': 1.4.11 - '@rspack/binding-linux-x64-gnu': 1.4.11 - '@rspack/binding-linux-x64-musl': 1.4.11 - '@rspack/binding-wasm32-wasi': 1.4.11(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - '@rspack/binding-win32-arm64-msvc': 1.4.11 - '@rspack/binding-win32-ia32-msvc': 1.4.11 - '@rspack/binding-win32-x64-msvc': 1.4.11 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@rspack/binding@1.5.8(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + '@rspack/binding@1.5.8(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': optionalDependencies: '@rspack/binding-darwin-arm64': 1.5.8 '@rspack/binding-darwin-x64': 1.5.8 @@ -39602,7 +40451,7 @@ snapshots: '@rspack/binding-linux-arm64-musl': 1.5.8 '@rspack/binding-linux-x64-gnu': 1.5.8 '@rspack/binding-linux-x64-musl': 1.5.8 - '@rspack/binding-wasm32-wasi': 1.5.8(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@rspack/binding-wasm32-wasi': 1.5.8(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@rspack/binding-win32-arm64-msvc': 1.5.8 '@rspack/binding-win32-ia32-msvc': 1.5.8 '@rspack/binding-win32-x64-msvc': 1.5.8 @@ -39688,6 +40537,21 @@ snapshots: '@rspack/binding-win32-ia32-msvc': 2.0.8 '@rspack/binding-win32-x64-msvc': 2.0.8 + '@rspack/binding@2.1.2': + optionalDependencies: + '@rspack/binding-darwin-arm64': 2.1.2 + '@rspack/binding-darwin-x64': 2.1.2 + '@rspack/binding-linux-arm64-gnu': 2.1.2 + '@rspack/binding-linux-arm64-musl': 2.1.2 + '@rspack/binding-linux-riscv64-gnu': 2.1.2 + '@rspack/binding-linux-riscv64-musl': 2.1.2 + '@rspack/binding-linux-x64-gnu': 2.1.2 + '@rspack/binding-linux-x64-musl': 2.1.2 + '@rspack/binding-wasm32-wasi': 2.1.2 + '@rspack/binding-win32-arm64-msvc': 2.1.2 + '@rspack/binding-win32-ia32-msvc': 2.1.2 + '@rspack/binding-win32-x64-msvc': 2.1.2 + '@rspack/cli@1.3.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.104.1)': dependencies: '@discoveryjs/json-ext': 0.5.7 @@ -39712,7 +40576,7 @@ snapshots: dependencies: '@module-federation/runtime-tools': 0.1.6 '@rspack/binding': 0.7.5 - caniuse-lite: 1.0.30001780 + caniuse-lite: 1.0.30001800 tapable: 2.2.1 webpack-sources: 3.2.3 optionalDependencies: @@ -39723,7 +40587,7 @@ snapshots: '@module-federation/runtime-tools': 0.5.1 '@rspack/binding': 1.0.14 '@rspack/lite-tapable': 1.0.1 - caniuse-lite: 1.0.30001780 + caniuse-lite: 1.0.30001800 optionalDependencies: '@swc/helpers': 0.5.17 @@ -39732,7 +40596,7 @@ snapshots: '@module-federation/runtime-tools': 0.13.1 '@rspack/binding': 1.3.11 '@rspack/lite-tapable': 1.0.1 - caniuse-lite: 1.0.30001780 + caniuse-lite: 1.0.30001800 optionalDependencies: '@swc/helpers': 0.5.17 @@ -39762,21 +40626,10 @@ snapshots: optionalDependencies: '@swc/helpers': 0.5.23 - '@rspack/core@1.4.11(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/helpers@0.5.17)': - dependencies: - '@module-federation/runtime-tools': 0.17.1 - '@rspack/binding': 1.4.11(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - '@rspack/lite-tapable': 1.0.1 - optionalDependencies: - '@swc/helpers': 0.5.17 - transitivePeerDependencies: - - '@emnapi/core' - - '@emnapi/runtime' - - '@rspack/core@1.5.8(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/helpers@0.5.17)': + '@rspack/core@1.5.8(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(@swc/helpers@0.5.17)': dependencies: '@module-federation/runtime-tools': 0.18.0 - '@rspack/binding': 1.5.8(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@rspack/binding': 1.5.8(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@rspack/lite-tapable': 1.0.1 optionalDependencies: '@swc/helpers': 0.5.17 @@ -39816,43 +40669,58 @@ snapshots: '@rspack/lite-tapable': 1.1.0 optionalDependencies: '@swc/helpers': 0.5.19 + optional: true - '@rspack/core@2.0.0-beta.0(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(@swc/helpers@0.5.19)': + '@rspack/core@1.7.9(@swc/helpers@0.5.23)': dependencies: - '@rspack/binding': 2.0.0-beta.0 + '@module-federation/runtime-tools': 0.22.0 + '@rspack/binding': 1.7.9 '@rspack/lite-tapable': 1.1.0 optionalDependencies: - '@module-federation/runtime-tools': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) - '@swc/helpers': 0.5.19 + '@swc/helpers': 0.5.23 - '@rspack/core@2.0.0-beta.0(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.19)': + '@rspack/core@2.0.0-beta.0(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)': dependencies: '@rspack/binding': 2.0.0-beta.0 '@rspack/lite-tapable': 1.1.0 optionalDependencies: - '@module-federation/runtime-tools': 2.6.0(node-fetch@3.3.0) - '@swc/helpers': 0.5.19 + '@module-federation/runtime-tools': 2.8.0 + '@swc/helpers': 0.5.23 - '@rspack/core@2.0.0-beta.0(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.19)': + '@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17)': dependencies: - '@rspack/binding': 2.0.0-beta.0 - '@rspack/lite-tapable': 1.1.0 + '@rspack/binding': 2.0.6 optionalDependencies: - '@module-federation/runtime-tools': 2.6.0(node-fetch@3.3.2) - '@swc/helpers': 0.5.19 + '@module-federation/runtime-tools': 2.8.0 + '@swc/helpers': 0.5.17 - '@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17)': + '@rspack/core@2.0.8(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)': dependencies: - '@rspack/binding': 2.0.6 + '@rspack/binding': 2.0.8 optionalDependencies: - '@module-federation/runtime-tools': 2.6.0(node-fetch@3.3.0) + '@module-federation/runtime-tools': 2.8.0 + '@swc/helpers': 0.5.23 + + '@rspack/core@2.1.2(@module-federation/runtime-tools@2.2.2(node-fetch@2.7.0(encoding@0.1.13)))(@swc/helpers@0.5.23)': + dependencies: + '@rspack/binding': 2.1.2 + optionalDependencies: + '@module-federation/runtime-tools': 2.2.2(node-fetch@2.7.0(encoding@0.1.13)) + '@swc/helpers': 0.5.23 + + '@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17)': + dependencies: + '@rspack/binding': 2.1.2 + optionalDependencies: + '@module-federation/runtime-tools': 2.8.0 '@swc/helpers': 0.5.17 + optional: true - '@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23)': + '@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)': dependencies: - '@rspack/binding': 2.0.8 + '@rspack/binding': 2.1.2 optionalDependencies: - '@module-federation/runtime-tools': 2.6.0(node-fetch@3.3.2) + '@module-federation/runtime-tools': 2.8.0 '@swc/helpers': 0.5.23 '@rspack/dev-server@1.1.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.104.1)': @@ -39879,6 +40747,8 @@ snapshots: '@rspack/lite-tapable@1.1.0': {} + '@rspack/lite-tapable@1.1.2': {} + '@rspack/plugin-react-refresh@0.7.5(react-refresh@0.14.2)': optionalDependencies: react-refresh: 0.14.2 @@ -39891,19 +40761,49 @@ snapshots: optionalDependencies: webpack-hot-middleware: 2.26.1 - '@rspack/plugin-react-refresh@2.0.0(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(react-refresh@0.18.0)': + '@rspack/plugin-react-refresh@2.0.0(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-refresh@0.18.0)': + dependencies: + react-refresh: 0.18.0 + optionalDependencies: + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17) + + '@rspack/plugin-react-refresh@2.0.0(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-refresh@0.18.0)': + dependencies: + react-refresh: 0.18.0 + optionalDependencies: + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + + '@rspack/plugin-react-refresh@2.0.2(@rspack/core@0.7.5(@swc/helpers@0.5.23))(react-refresh@0.18.0)': + dependencies: + react-refresh: 0.18.0 + optionalDependencies: + '@rspack/core': 0.7.5(@swc/helpers@0.5.23) + + '@rspack/plugin-react-refresh@2.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-refresh@0.18.0)': + dependencies: + react-refresh: 0.18.0 + optionalDependencies: + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17) + + '@rspack/plugin-react-refresh@2.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-refresh@0.18.0)': + dependencies: + react-refresh: 0.18.0 + optionalDependencies: + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17) + + '@rspack/plugin-react-refresh@2.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-refresh@0.18.0)': dependencies: react-refresh: 0.18.0 optionalDependencies: - '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23) + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) - '@rspress/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@18.3.28)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2)': + '@rspress/core@2.0.14(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@18.3.28)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2)': dependencies: '@mdx-js/mdx': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@18.3.28)(react@19.2.7) - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23)) - '@rspress/shared': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) + '@rspress/shared': 2.0.14(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@shikijs/rehype': 4.2.0 '@types/unist': 3.0.3 '@unhead/react': 2.1.15(react@19.2.7) @@ -39947,13 +40847,13 @@ snapshots: - micromark-util-types - supports-color - '@rspress/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2)': + '@rspress/core@2.0.14(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2)': dependencies: '@mdx-js/mdx': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.7) - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23)) - '@rspress/shared': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)) + '@rspress/shared': 2.0.14(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@shikijs/rehype': 4.2.0 '@types/unist': 3.0.3 '@unhead/react': 2.1.15(react@19.2.7) @@ -39997,26 +40897,38 @@ snapshots: - micromark-util-types - supports-color - '@rspress/shared@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)': + '@rspress/shared@2.0.14(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)': dependencies: - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) '@shikijs/rehype': 4.2.0 unified: 11.0.5 transitivePeerDependencies: - '@module-federation/runtime-tools' - core-js - '@rstest/core@0.6.9(jsdom@20.0.3)': + '@rstest/core@0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1)(jsdom@20.0.3)': dependencies: - '@rsbuild/core': 1.6.0-beta.1 + '@rsbuild/core': 2.0.15(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1) '@types/chai': 5.2.3 - tinypool: 1.1.1 optionalDependencies: jsdom: 20.0.3 + transitivePeerDependencies: + - '@module-federation/runtime-tools' + - core-js - '@rstest/core@0.8.5(jsdom@20.0.3)': + '@rstest/core@0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(jsdom@20.0.3)': dependencies: - '@rsbuild/core': 1.7.3 + '@rsbuild/core': 2.0.15(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@types/chai': 5.2.3 + optionalDependencies: + jsdom: 20.0.3 + transitivePeerDependencies: + - '@module-federation/runtime-tools' + - core-js + + '@rstest/core@0.6.9(jsdom@20.0.3)': + dependencies: + '@rsbuild/core': 1.6.0-beta.1 '@types/chai': 5.2.3 tinypool: 1.1.1 optionalDependencies: @@ -40032,10 +40944,11 @@ snapshots: fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.11 semver: 7.5.4 optionalDependencies: '@types/node': 20.19.5 + optional: true '@rushstack/node-core-library@5.20.3(@types/node@22.19.15)': dependencies: @@ -40045,7 +40958,7 @@ snapshots: fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.11 semver: 7.5.4 optionalDependencies: '@types/node': 22.19.15 @@ -40059,14 +40972,16 @@ snapshots: fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.11 semver: 7.5.4 optionalDependencies: '@types/node': 26.1.0 + optional: true '@rushstack/problem-matcher@0.2.1(@types/node@20.19.5)': optionalDependencies: '@types/node': 20.19.5 + optional: true '@rushstack/problem-matcher@0.2.1(@types/node@22.19.15)': optionalDependencies: @@ -40076,11 +40991,13 @@ snapshots: '@rushstack/problem-matcher@0.2.1(@types/node@26.1.0)': optionalDependencies: '@types/node': 26.1.0 + optional: true '@rushstack/rig-package@0.7.2': dependencies: - resolve: 1.22.8 + resolve: 1.22.11 strip-json-comments: 3.1.1 + optional: true '@rushstack/terminal@0.22.3(@types/node@20.19.5)': dependencies: @@ -40089,6 +41006,7 @@ snapshots: supports-color: 8.1.1 optionalDependencies: '@types/node': 20.19.5 + optional: true '@rushstack/terminal@0.22.3(@types/node@22.19.15)': dependencies: @@ -40106,6 +41024,7 @@ snapshots: supports-color: 8.1.1 optionalDependencies: '@types/node': 26.1.0 + optional: true '@rushstack/ts-command-line@5.3.3(@types/node@20.19.5)': dependencies: @@ -40115,6 +41034,7 @@ snapshots: string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' + optional: true '@rushstack/ts-command-line@5.3.3(@types/node@22.19.15)': dependencies: @@ -40134,6 +41054,7 @@ snapshots: string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' + optional: true '@selderee/plugin-htmlparser2@0.11.0': dependencies: @@ -40291,14 +41212,14 @@ snapshots: - encoding - supports-color - '@storybook/builder-webpack5@9.0.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3)(webpack-cli@5.1.4)': + '@storybook/builder-webpack5@9.0.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(storybook@8.6.17(prettier@3.8.1))(typescript@6.0.3)(webpack-cli@5.1.4)': dependencies: '@storybook/core-webpack': 9.0.9(storybook@8.6.17(prettier@3.8.1)) case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.3.1 css-loader: 6.11.0(@rspack/core@1.3.9(@swc/helpers@0.5.13))(webpack@5.104.1) es-module-lexer: 1.5.3 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.9.3)(webpack@5.104.1) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@6.0.3)(webpack@5.104.1) html-webpack-plugin: 5.6.2(@rspack/core@1.3.9(@swc/helpers@0.5.13))(webpack@5.104.1) magic-string: 0.30.21 storybook: 8.6.17(prettier@3.8.1) @@ -40310,7 +41231,7 @@ snapshots: webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -40329,7 +41250,7 @@ snapshots: '@storybook/cli@7.6.24(encoding@0.1.13)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/preset-env': 7.29.2(@babel/core@7.29.7) '@babel/types': 7.29.7 '@ndelangen/get-tarball': 3.0.9 @@ -40357,7 +41278,7 @@ snapshots: get-port: 5.1.1 giget: 1.2.5 globby: 11.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.29.2(@babel/core@7.29.0)) + jscodeshift: 0.15.2(@babel/preset-env@7.29.2(@babel/core@7.29.7)) leven: 3.1.0 ora: 5.4.1 prettier: 2.8.8 @@ -40381,8 +41302,8 @@ snapshots: '@storybook/codemod@7.6.24': dependencies: - '@babel/core': 7.29.0 - '@babel/preset-env': 7.29.2(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@babel/preset-env': 7.29.2(@babel/core@7.29.7) '@babel/types': 7.29.7 '@storybook/csf': 0.1.13 '@storybook/csf-tools': 7.6.24 @@ -40391,7 +41312,7 @@ snapshots: '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.6 globby: 11.1.0 - jscodeshift: 0.15.2(@babel/preset-env@7.29.2(@babel/core@7.29.0)) + jscodeshift: 0.15.2(@babel/preset-env@7.29.2(@babel/core@7.29.7)) lodash: 4.18.1 prettier: 2.8.8 recast: 0.23.11 @@ -40579,7 +41500,7 @@ snapshots: dependencies: '@babel/generator': 7.29.7 '@babel/parser': 7.29.7 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 '@storybook/csf': 0.1.13 '@storybook/types': 7.6.24 @@ -40631,7 +41552,7 @@ snapshots: '@storybook/mdx2-csf@1.1.0': {} - '@storybook/nextjs@9.0.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(next@14.2.35(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.100.0)(webpack-cli@5.1.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass-embedded@1.100.0)(sass@1.100.0)(storybook@8.6.17(prettier@3.8.1))(type-fest@2.19.0)(typescript@5.9.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': + '@storybook/nextjs@9.0.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(next@14.2.35(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.100.0)(webpack-cli@5.1.4))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass-embedded@1.100.0)(sass@1.100.0)(storybook@8.6.17(prettier@3.8.1))(type-fest@2.19.0)(typescript@6.0.3)(webpack-cli@5.1.4)(webpack-dev-server@5.2.3)(webpack-hot-middleware@2.26.1)(webpack@5.104.1)': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.0) @@ -40647,9 +41568,9 @@ snapshots: '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@babel/runtime': 7.28.2 '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@2.19.0)(webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)))(webpack-hot-middleware@2.26.1)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)) - '@storybook/builder-webpack5': 9.0.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3)(webpack-cli@5.1.4) - '@storybook/preset-react-webpack': 9.0.9(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3)(webpack-cli@5.1.4) - '@storybook/react': 9.0.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3) + '@storybook/builder-webpack5': 9.0.9(@rspack/core@1.3.9(@swc/helpers@0.5.13))(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(storybook@8.6.17(prettier@3.8.1))(typescript@6.0.3)(webpack-cli@5.1.4) + '@storybook/preset-react-webpack': 9.0.9(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@8.6.17(prettier@3.8.1))(typescript@6.0.3)(webpack-cli@5.1.4) + '@storybook/react': 9.0.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@8.6.17(prettier@3.8.1))(typescript@6.0.3) '@types/semver': 7.5.8 babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.104.1) css-loader: 6.11.0(@rspack/core@1.3.9(@swc/helpers@0.5.13))(webpack@5.104.1) @@ -40657,7 +41578,7 @@ snapshots: loader-utils: 3.3.1 node-polyfill-webpack-plugin: 2.0.1(webpack@5.104.1) postcss: 8.5.10 - postcss-loader: 8.2.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(postcss@8.5.10)(typescript@5.9.3)(webpack@5.104.1) + postcss-loader: 8.2.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(postcss@8.5.10)(typescript@6.0.3)(webpack@5.104.1) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 sass-loader: 14.2.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(sass-embedded@1.100.0)(sass@1.100.0)(webpack@5.104.1) @@ -40671,7 +41592,7 @@ snapshots: next: 14.2.35(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.7.26(@swc/helpers@0.5.13))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.100.0)(webpack-cli@5.1.4) react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - typescript: 5.9.3 + typescript: 6.0.3 webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) transitivePeerDependencies: - '@rspack/core' @@ -40695,10 +41616,10 @@ snapshots: '@storybook/node-logger@7.6.24': {} - '@storybook/preset-react-webpack@9.0.9(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3)(webpack-cli@5.1.4)': + '@storybook/preset-react-webpack@9.0.9(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@8.6.17(prettier@3.8.1))(typescript@6.0.3)(webpack-cli@5.1.4)': dependencies: '@storybook/core-webpack': 9.0.9(storybook@8.6.17(prettier@3.8.1)) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.9.3)(webpack@5.104.1) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@6.0.3)(webpack@5.104.1) '@types/semver': 7.5.8 find-up: 5.0.0 magic-string: 0.30.21 @@ -40711,7 +41632,7 @@ snapshots: tsconfig-paths: 4.2.0 webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - '@swc/core' - esbuild @@ -40727,7 +41648,7 @@ snapshots: '@storybook/csf': 0.1.13 '@storybook/global': 5.0.0 '@storybook/types': 7.6.24 - '@types/qs': 6.15.0 + '@types/qs': 6.15.1 dequal: 2.0.3 lodash: 4.18.1 memoizerific: 1.11.3 @@ -40742,45 +41663,45 @@ snapshots: '@storybook/preview@7.6.24': {} - '@storybook/react-docgen-typescript-plugin@1.0.1(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4))': + '@storybook/react-docgen-typescript-plugin@1.0.1(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4))': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.8 - react-docgen-typescript: 2.4.0(typescript@5.9.3) + react-docgen-typescript: 2.4.0(typescript@7.0.2) tslib: 2.8.1 - typescript: 5.9.3 + typescript: 7.0.2 webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@6.0.3)(webpack@5.104.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.8 - react-docgen-typescript: 2.4.0(typescript@5.9.3) + react-docgen-typescript: 2.4.0(typescript@6.0.3) tslib: 2.8.1 - typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + typescript: 6.0.3 + webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.9.3)(webpack@5.104.1)': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': dependencies: debug: 4.4.3(supports-color@8.1.1) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.8 - react-docgen-typescript: 2.4.0(typescript@5.9.3) + react-docgen-typescript: 2.4.0(typescript@7.0.2) tslib: 2.8.1 - typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) + typescript: 7.0.2 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color @@ -40807,7 +41728,7 @@ snapshots: react-dom: 19.2.7(react@19.2.7) storybook: 8.6.17(prettier@3.8.1) - '@storybook/react@7.6.24(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)': + '@storybook/react@7.6.24(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@7.0.2)': dependencies: '@storybook/client-logger': 7.6.24 '@storybook/core-client': 7.6.24 @@ -40833,12 +41754,12 @@ snapshots: type-fest: 2.19.0 util-deprecate: 1.0.2 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - encoding - supports-color - '@storybook/react@8.6.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3)': + '@storybook/react@8.6.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.17(prettier@3.8.1))(typescript@7.0.2)': dependencies: '@storybook/components': 8.6.18(storybook@8.6.17(prettier@3.8.1)) '@storybook/global': 5.0.0 @@ -40850,9 +41771,9 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.6.17(prettier@3.8.1) optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 - '@storybook/react@9.0.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3)': + '@storybook/react@9.0.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@8.6.17(prettier@3.8.1))(typescript@6.0.3)': dependencies: '@storybook/global': 5.0.0 '@storybook/react-dom-shim': 9.0.9(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(storybook@8.6.17(prettier@3.8.1)) @@ -40860,7 +41781,7 @@ snapshots: react-dom: 19.2.7(react@19.2.7) storybook: 8.6.17(prettier@3.8.1) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 '@storybook/router@7.6.24': dependencies: @@ -40910,67 +41831,67 @@ snapshots: '@types/express': 4.17.21 file-system-cache: 2.3.0 - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.0)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 - '@svgr/babel-preset@8.1.0(@babel/core@7.29.0)': + '@svgr/babel-preset@8.1.0(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.0) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.29.7) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.29.7) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.29.7) - '@svgr/core@8.1.0(typescript@5.0.4)': + '@svgr/core@8.1.0(typescript@6.0.3)': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.0.4) + cosmiconfig: 8.3.6(typescript@6.0.3) snake-case: 3.0.4 transitivePeerDependencies: - supports-color - typescript - '@svgr/core@8.1.0(typescript@5.9.3)': + '@svgr/core@8.1.0(typescript@7.0.2)': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) + '@babel/core': 7.29.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig: 8.3.6(typescript@7.0.2) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -40981,56 +41902,89 @@ snapshots: '@babel/types': 7.29.7 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))': dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 8.1.0(@babel/core@7.29.0) - '@svgr/core': 8.1.0(typescript@5.9.3) + '@babel/core': 7.29.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7) + '@svgr/core': 8.1.0(typescript@6.0.3) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.0.4)': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@7.0.2))': dependencies: - '@svgr/core': 8.1.0(typescript@5.9.3) - cosmiconfig: 8.3.6(typescript@5.0.4) + '@babel/core': 7.29.7 + '@svgr/babel-preset': 8.1.0(@babel/core@7.29.7) + '@svgr/core': 8.1.0(typescript@7.0.2) + '@svgr/hast-util-to-babel-ast': 8.0.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3)': + dependencies: + '@svgr/core': 8.1.0(typescript@6.0.3) + cosmiconfig: 8.3.6(typescript@6.0.3) + deepmerge: 4.3.1 + svgo: 3.3.3 + transitivePeerDependencies: + - typescript + + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@7.0.2)': + dependencies: + '@svgr/core': 8.1.0(typescript@6.0.3) + cosmiconfig: 8.3.6(typescript@7.0.2) deepmerge: 4.3.1 svgo: 3.3.3 transitivePeerDependencies: - typescript - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@7.0.2))(typescript@7.0.2)': dependencies: - '@svgr/core': 8.1.0(typescript@5.9.3) - cosmiconfig: 8.3.6(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@7.0.2) + cosmiconfig: 8.3.6(typescript@7.0.2) deepmerge: 4.3.1 svgo: 3.3.3 transitivePeerDependencies: - typescript - '@svgr/webpack@8.1.0(typescript@5.9.3)': + '@svgr/webpack@8.1.0(typescript@6.0.3)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.0) + '@babel/preset-env': 7.29.2(@babel/core@7.29.0) + '@babel/preset-react': 7.28.5(@babel/core@7.29.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@svgr/core': 8.1.0(typescript@6.0.3) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3) + transitivePeerDependencies: + - supports-color + - typescript + + '@svgr/webpack@8.1.0(typescript@7.0.2)': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.0) '@babel/preset-env': 7.29.2(@babel/core@7.29.0) '@babel/preset-react': 7.28.5(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@svgr/core': 8.1.0(typescript@5.9.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) + '@svgr/core': 8.1.0(typescript@7.0.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@7.0.2) transitivePeerDependencies: - supports-color - typescript - '@swc-node/core@1.14.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)': + '@swc-node/core@1.14.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)': dependencies: '@swc/core': 1.7.26(@swc/helpers@0.5.13) - '@swc/types': 0.1.25 + '@swc/types': 0.1.27 - '@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3)': + '@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3)': dependencies: - '@swc-node/core': 1.14.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25) + '@swc-node/core': 1.14.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27) '@swc-node/sourcemap-support': 0.5.1 '@swc/core': 1.7.26(@swc/helpers@0.5.13) colorette: 2.0.20 @@ -41038,7 +41992,7 @@ snapshots: oxc-resolver: 5.3.0 pirates: 4.0.7 tslib: 2.8.1 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - '@swc/types' - supports-color @@ -41068,7 +42022,7 @@ snapshots: - react-native-b4a - supports-color - '@swc/core-darwin-arm64@1.15.10': + '@swc/core-darwin-arm64@1.15.41': optional: true '@swc/core-darwin-arm64@1.15.8': @@ -41077,7 +42031,7 @@ snapshots: '@swc/core-darwin-arm64@1.7.26': optional: true - '@swc/core-darwin-x64@1.15.10': + '@swc/core-darwin-x64@1.15.41': optional: true '@swc/core-darwin-x64@1.15.8': @@ -41086,7 +42040,7 @@ snapshots: '@swc/core-darwin-x64@1.7.26': optional: true - '@swc/core-linux-arm-gnueabihf@1.15.10': + '@swc/core-linux-arm-gnueabihf@1.15.41': optional: true '@swc/core-linux-arm-gnueabihf@1.15.8': @@ -41095,7 +42049,7 @@ snapshots: '@swc/core-linux-arm-gnueabihf@1.7.26': optional: true - '@swc/core-linux-arm64-gnu@1.15.10': + '@swc/core-linux-arm64-gnu@1.15.41': optional: true '@swc/core-linux-arm64-gnu@1.15.8': @@ -41104,7 +42058,7 @@ snapshots: '@swc/core-linux-arm64-gnu@1.7.26': optional: true - '@swc/core-linux-arm64-musl@1.15.10': + '@swc/core-linux-arm64-musl@1.15.41': optional: true '@swc/core-linux-arm64-musl@1.15.8': @@ -41113,7 +42067,13 @@ snapshots: '@swc/core-linux-arm64-musl@1.7.26': optional: true - '@swc/core-linux-x64-gnu@1.15.10': + '@swc/core-linux-ppc64-gnu@1.15.41': + optional: true + + '@swc/core-linux-s390x-gnu@1.15.41': + optional: true + + '@swc/core-linux-x64-gnu@1.15.41': optional: true '@swc/core-linux-x64-gnu@1.15.8': @@ -41122,7 +42082,7 @@ snapshots: '@swc/core-linux-x64-gnu@1.7.26': optional: true - '@swc/core-linux-x64-musl@1.15.10': + '@swc/core-linux-x64-musl@1.15.41': optional: true '@swc/core-linux-x64-musl@1.15.8': @@ -41131,7 +42091,7 @@ snapshots: '@swc/core-linux-x64-musl@1.7.26': optional: true - '@swc/core-win32-arm64-msvc@1.15.10': + '@swc/core-win32-arm64-msvc@1.15.41': optional: true '@swc/core-win32-arm64-msvc@1.15.8': @@ -41140,7 +42100,7 @@ snapshots: '@swc/core-win32-arm64-msvc@1.7.26': optional: true - '@swc/core-win32-ia32-msvc@1.15.10': + '@swc/core-win32-ia32-msvc@1.15.41': optional: true '@swc/core-win32-ia32-msvc@1.15.8': @@ -41149,7 +42109,7 @@ snapshots: '@swc/core-win32-ia32-msvc@1.7.26': optional: true - '@swc/core-win32-x64-msvc@1.15.10': + '@swc/core-win32-x64-msvc@1.15.41': optional: true '@swc/core-win32-x64-msvc@1.15.8': @@ -41158,63 +42118,69 @@ snapshots: '@swc/core-win32-x64-msvc@1.7.26': optional: true - '@swc/core@1.15.10(@swc/helpers@0.5.17)': + '@swc/core@1.15.41(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.25 - optionalDependencies: - '@swc/core-darwin-arm64': 1.15.10 - '@swc/core-darwin-x64': 1.15.10 - '@swc/core-linux-arm-gnueabihf': 1.15.10 - '@swc/core-linux-arm64-gnu': 1.15.10 - '@swc/core-linux-arm64-musl': 1.15.10 - '@swc/core-linux-x64-gnu': 1.15.10 - '@swc/core-linux-x64-musl': 1.15.10 - '@swc/core-win32-arm64-msvc': 1.15.10 - '@swc/core-win32-ia32-msvc': 1.15.10 - '@swc/core-win32-x64-msvc': 1.15.10 + '@swc/types': 0.1.27 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.41 + '@swc/core-darwin-x64': 1.15.41 + '@swc/core-linux-arm-gnueabihf': 1.15.41 + '@swc/core-linux-arm64-gnu': 1.15.41 + '@swc/core-linux-arm64-musl': 1.15.41 + '@swc/core-linux-ppc64-gnu': 1.15.41 + '@swc/core-linux-s390x-gnu': 1.15.41 + '@swc/core-linux-x64-gnu': 1.15.41 + '@swc/core-linux-x64-musl': 1.15.41 + '@swc/core-win32-arm64-msvc': 1.15.41 + '@swc/core-win32-ia32-msvc': 1.15.41 + '@swc/core-win32-x64-msvc': 1.15.41 '@swc/helpers': 0.5.17 - '@swc/core@1.15.10(@swc/helpers@0.5.19)': + '@swc/core@1.15.41(@swc/helpers@0.5.19)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.25 - optionalDependencies: - '@swc/core-darwin-arm64': 1.15.10 - '@swc/core-darwin-x64': 1.15.10 - '@swc/core-linux-arm-gnueabihf': 1.15.10 - '@swc/core-linux-arm64-gnu': 1.15.10 - '@swc/core-linux-arm64-musl': 1.15.10 - '@swc/core-linux-x64-gnu': 1.15.10 - '@swc/core-linux-x64-musl': 1.15.10 - '@swc/core-win32-arm64-msvc': 1.15.10 - '@swc/core-win32-ia32-msvc': 1.15.10 - '@swc/core-win32-x64-msvc': 1.15.10 + '@swc/types': 0.1.27 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.41 + '@swc/core-darwin-x64': 1.15.41 + '@swc/core-linux-arm-gnueabihf': 1.15.41 + '@swc/core-linux-arm64-gnu': 1.15.41 + '@swc/core-linux-arm64-musl': 1.15.41 + '@swc/core-linux-ppc64-gnu': 1.15.41 + '@swc/core-linux-s390x-gnu': 1.15.41 + '@swc/core-linux-x64-gnu': 1.15.41 + '@swc/core-linux-x64-musl': 1.15.41 + '@swc/core-win32-arm64-msvc': 1.15.41 + '@swc/core-win32-ia32-msvc': 1.15.41 + '@swc/core-win32-x64-msvc': 1.15.41 '@swc/helpers': 0.5.19 optional: true - '@swc/core@1.15.10(@swc/helpers@0.5.23)': + '@swc/core@1.15.41(@swc/helpers@0.5.23)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.25 - optionalDependencies: - '@swc/core-darwin-arm64': 1.15.10 - '@swc/core-darwin-x64': 1.15.10 - '@swc/core-linux-arm-gnueabihf': 1.15.10 - '@swc/core-linux-arm64-gnu': 1.15.10 - '@swc/core-linux-arm64-musl': 1.15.10 - '@swc/core-linux-x64-gnu': 1.15.10 - '@swc/core-linux-x64-musl': 1.15.10 - '@swc/core-win32-arm64-msvc': 1.15.10 - '@swc/core-win32-ia32-msvc': 1.15.10 - '@swc/core-win32-x64-msvc': 1.15.10 + '@swc/types': 0.1.27 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.41 + '@swc/core-darwin-x64': 1.15.41 + '@swc/core-linux-arm-gnueabihf': 1.15.41 + '@swc/core-linux-arm64-gnu': 1.15.41 + '@swc/core-linux-arm64-musl': 1.15.41 + '@swc/core-linux-ppc64-gnu': 1.15.41 + '@swc/core-linux-s390x-gnu': 1.15.41 + '@swc/core-linux-x64-gnu': 1.15.41 + '@swc/core-linux-x64-musl': 1.15.41 + '@swc/core-win32-arm64-msvc': 1.15.41 + '@swc/core-win32-ia32-msvc': 1.15.41 + '@swc/core-win32-x64-msvc': 1.15.41 '@swc/helpers': 0.5.23 optional: true '@swc/core@1.15.8(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.25 + '@swc/types': 0.1.27 optionalDependencies: '@swc/core-darwin-arm64': 1.15.8 '@swc/core-darwin-x64': 1.15.8 @@ -41287,7 +42253,7 @@ snapshots: '@swc/counter': 0.1.3 jsonc-parser: 3.3.1 - '@swc/plugin-loadable-components@11.7.0': + '@swc/plugin-loadable-components@11.15.0': dependencies: '@swc/counter': 0.1.3 @@ -41299,27 +42265,31 @@ snapshots: dependencies: '@swc/counter': 0.1.3 + '@swc/types@0.1.27': + dependencies: + '@swc/counter': 0.1.3 + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/forms@0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5)))': + '@tailwindcss/forms@0.5.7(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5)) + tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)))': + '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + tailwindcss: 3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) - '@tailwindcss/typography@0.5.12(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5)))': + '@tailwindcss/typography@0.5.12(tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5)) + tailwindcss: 3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) '@tanstack/react-virtual@3.14.5(react-dom@19.2.7(react@19.2.7))(react@19.2.7)': dependencies: @@ -41331,7 +42301,7 @@ snapshots: '@testing-library/dom@10.4.1': dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 '@babel/runtime': 7.28.2 '@types/aria-query': 5.0.4 aria-query: 5.3.0 @@ -41380,6 +42350,8 @@ snapshots: '@tokenizer/token@0.3.0': {} + '@toon-format/toon@0.9.0': {} + '@tootallnate/once@2.0.0': {} '@ts-morph/common@0.11.1': @@ -41420,6 +42392,11 @@ snapshots: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 @@ -41432,14 +42409,15 @@ snapshots: dependencies: '@types/node': 20.19.5 - '@types/argparse@1.0.38': {} + '@types/argparse@1.0.38': + optional: true '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 @@ -41678,7 +42656,7 @@ snapshots: '@types/express-serve-static-core@4.19.8': dependencies: '@types/node': 20.19.5 - '@types/qs': 6.15.0 + '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -41686,7 +42664,7 @@ snapshots: dependencies: '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 4.19.8 - '@types/qs': 6.15.0 + '@types/qs': 6.15.1 '@types/serve-static': 2.2.0 '@types/express@4.17.25': @@ -41770,11 +42748,6 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest@29.2.6': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - '@types/jest@29.5.13': dependencies: expect: 29.7.0 @@ -41837,10 +42810,6 @@ snapshots: dependencies: '@types/node': 20.19.5 - '@types/node-schedule@2.1.7': - dependencies: - '@types/node': 20.19.5 - '@types/node@12.20.55': {} '@types/node@14.18.33': {} @@ -41876,8 +42845,6 @@ snapshots: '@types/pug@2.0.10': {} - '@types/qs@6.15.0': {} - '@types/qs@6.15.1': {} '@types/range-parser@1.2.7': {} @@ -41905,7 +42872,7 @@ snapshots: '@types/react-router-dom@5.3.3': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 19.2.14 '@types/react-router': 5.1.20 '@types/react-router@5.1.20': @@ -42026,147 +42993,100 @@ snapshots: '@types/node': 20.19.5 optional: true - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.0.4) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) - debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare-lite: 1.4.0 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.0.4) - optionalDependencies: - typescript: 5.0.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@7.0.2) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@7.0.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@7.0.2) debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.9.3) + tsutils: 3.21.0(typescript@7.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@7.0.2) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.0.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@7.0.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@7.0.2) '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.0.4) + ts-api-utils: 1.4.3(typescript@7.0.2) optionalDependencies: - typescript: 5.0.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 - eslint: 9.39.3(jiti@2.6.1) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/type-utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.56.1 eslint: 9.39.3(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.4.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5))(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2))(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/parser': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/type-utils': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/utils': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/type-utils': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) + '@typescript-eslint/utils': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) '@typescript-eslint/visitor-keys': 8.57.1 eslint: 9.26.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.4.0(typescript@7.0.2) + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/parser': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/type-utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3) - '@typescript-eslint/utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/type-utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.57.1 eslint: 9.39.3(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4)': - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) - debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1 - optionalDependencies: - typescript: 5.0.4 + ts-api-utils: 2.4.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.3)': + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@7.0.2)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@7.0.2) debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color @@ -42183,109 +43103,79 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.0.4) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@7.0.2) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 optionalDependencies: - typescript: 5.0.4 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.54.0 - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.3(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.56.1 '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/parser@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2)': dependencies: '@typescript-eslint/scope-manager': 8.57.1 '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@7.0.2) '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@8.1.1) eslint: 9.26.0(jiti@2.6.1) - typescript: 5.4.5 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3)': + '@typescript-eslint/parser@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.57.1 '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) - '@typescript-eslint/types': 8.57.1 - debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.56.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.3) '@typescript-eslint/types': 8.57.1 debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.1(typescript@5.4.5)': + '@typescript-eslint/project-service@8.57.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.4.5) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.3) '@typescript-eslint/types': 8.57.1 debug: 4.4.3(supports-color@8.1.1) - typescript: 5.4.5 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.1(typescript@5.6.3)': + '@typescript-eslint/project-service@8.57.1(typescript@7.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.6.3) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@7.0.2) '@typescript-eslint/types': 8.57.1 debug: 4.4.3(supports-color@8.1.1) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.57.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) - '@typescript-eslint/types': 8.57.1 - debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color @@ -42304,11 +43194,6 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.54.0': - dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 - '@typescript-eslint/scope-manager@8.56.1': dependencies: '@typescript-eslint/types': 8.56.1 @@ -42319,107 +43204,75 @@ snapshots: '@typescript-eslint/types': 8.57.1 '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.4.5)': - dependencies: - typescript: 5.4.5 - - '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.6.3)': + '@typescript-eslint/tsconfig-utils@8.56.1(typescript@6.0.3)': dependencies: - typescript: 5.6.3 + typescript: 6.0.3 - '@typescript-eslint/tsconfig-utils@8.57.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@6.0.3)': dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.0.4)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@7.0.2)': dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) - debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1 - tsutils: 3.21.0(typescript@5.0.4) - optionalDependencies: - typescript: 5.0.4 - transitivePeerDependencies: - - supports-color + typescript: 7.0.2 - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.9.3)': + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@7.0.2)': dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@7.0.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@7.0.2) debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 - tsutils: 3.21.0(typescript@5.9.3) + tsutils: 3.21.0(typescript@7.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.0.4)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@7.0.2)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.0.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@7.0.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@7.0.2) debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.0.4) + ts-api-utils: 1.4.3(typescript@7.0.2) optionalDependencies: - typescript: 5.0.4 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.3(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.4.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/type-utils@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2)': dependencies: '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.4.5) - '@typescript-eslint/utils': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@7.0.2) + '@typescript-eslint/utils': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) debug: 4.4.3(supports-color@8.1.1) eslint: 9.26.0(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.4.0(typescript@7.0.2) + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.6.3) - '@typescript-eslint/utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.3(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.6.3) - typescript: 5.6.3 + ts-api-utils: 2.4.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -42429,13 +43282,11 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.54.0': {} - '@typescript-eslint/types@8.56.1': {} '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.0.4)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@7.0.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -42443,23 +43294,9 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.0.4) + tsutils: 3.21.0(typescript@7.0.2) optionalDependencies: - typescript: 5.0.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.3(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.9.3) - optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color @@ -42478,7 +43315,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.0.4)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@7.0.2)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 @@ -42487,110 +43324,65 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.9 semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.0.4) + ts-api-utils: 1.4.3(typescript@7.0.2) optionalDependencies: - typescript: 5.0.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 - debug: 4.4.3(supports-color@8.1.1) - minimatch: 9.0.9 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.56.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.56.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) + '@typescript-eslint/project-service': 8.56.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.3) '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.4.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.57.1(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@8.57.1(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.57.1(typescript@5.4.5) - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.4.5) + '@typescript-eslint/project-service': 8.57.1(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.3) '@typescript-eslint/types': 8.57.1 '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 2.4.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.57.1(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.57.1(typescript@7.0.2)': dependencies: - '@typescript-eslint/project-service': 8.57.1(typescript@5.6.3) - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.6.3) + '@typescript-eslint/project-service': 8.57.1(typescript@7.0.2) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@7.0.2) '@typescript-eslint/types': 8.57.1 '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.6.3) - typescript: 5.6.3 + ts-api-utils: 2.4.0(typescript@7.0.2) + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.57.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.57.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@5.9.3) - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/visitor-keys': 8.57.1 - debug: 4.4.3(supports-color@8.1.1) - minimatch: 10.2.4 - semver: 7.7.4 - tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.0.4)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) - eslint: 8.57.1 - eslint-scope: 5.1.1 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.9.3)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@7.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@7.0.2) eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.6.3 @@ -42598,69 +43390,47 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.0.4)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@7.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.0.4) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@7.0.2) eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.54.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) - eslint: 9.39.3(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.56.1 '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.3) eslint: 9.39.3(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5)': + '@typescript-eslint/utils@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.26.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.57.1 '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@7.0.2) eslint: 9.26.0(jiti@2.6.1) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.6.3) - eslint: 9.39.3(jiti@2.6.1) - typescript: 5.6.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.57.1 '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.3) eslint: 9.39.3(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -42679,11 +43449,6 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.54.0': - dependencies: - '@typescript-eslint/types': 8.54.0 - eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.56.1': dependencies: '@typescript-eslint/types': 8.56.1 @@ -42694,6 +43459,66 @@ snapshots: '@typescript-eslint/types': 8.57.1 eslint-visitor-keys: 5.0.1 + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + '@ungap/structured-clone@1.3.0': {} '@unhead/react@2.1.15(react@19.2.7)': @@ -42828,8 +43653,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) '@rollup/pluginutils': 4.2.1 - acorn: 8.16.0 - acorn-import-attributes: 1.9.5(acorn@8.16.0) + acorn: 8.17.0 + acorn-import-attributes: 1.9.5(acorn@8.17.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -42846,8 +43671,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 2.0.3(encoding@0.1.13) '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - acorn: 8.16.0 - acorn-import-attributes: 1.9.5(acorn@8.16.0) + acorn: 8.17.0 + acorn-import-attributes: 1.9.5(acorn@8.17.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -42880,7 +43705,7 @@ snapshots: - rollup - supports-color - '@vercel/node@3.0.26(@swc/core@1.15.10(@swc/helpers@0.5.23))(encoding@0.1.13)': + '@vercel/node@3.0.26(@swc/core@1.15.41(@swc/helpers@0.5.23))(encoding@0.1.13)': dependencies: '@edge-runtime/node-utils': 2.3.0 '@edge-runtime/primitives': 4.1.0 @@ -42899,7 +43724,7 @@ snapshots: node-fetch: 2.6.9(encoding@0.1.13) path-to-regexp: 6.2.1 ts-morph: 12.0.0 - ts-node: 10.9.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@14.18.33)(typescript@4.9.5) + ts-node: 10.9.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@14.18.33)(typescript@4.9.5) typescript: 4.9.5 undici: 5.26.5 transitivePeerDependencies: @@ -42950,7 +43775,7 @@ snapshots: json-schema-to-ts: 1.6.4 ts-morph: 12.0.0 - '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))': + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -42958,75 +43783,46 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.2.0(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@4.2.0(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@rolldown/pluginutils': 1.0.0-rc.9 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.0) - vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vue: 3.5.30(typescript@5.9.3) + vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vue: 3.5.30(typescript@7.0.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.2.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@4.2.0(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@rolldown/pluginutils': 1.0.0-rc.9 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.0) - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vue: 3.5.30(typescript@5.9.3) + vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vue: 3.5.30(typescript@7.0.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2))': dependencies: - vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vue: 3.5.30(typescript@5.9.3) + vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vue: 3.5.30(typescript@7.0.2) - '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1))(vue@3.5.30(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@5.0.4))': dependencies: - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vue: 3.5.30(typescript@5.9.3) + vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vue: 3.5.30(typescript@5.0.4) - '@vitest/coverage-istanbul@1.6.0(vitest@1.6.0)': + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))(vue@3.5.30(typescript@7.0.2))': dependencies: - debug: 4.4.3(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.2.0 - magicast: 0.3.5 - picocolors: 1.1.1 - test-exclude: 6.0.0 - vitest: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - transitivePeerDependencies: - - supports-color - - '@vitest/coverage-v8@1.6.0(vitest@1.6.0)': - dependencies: - '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 0.2.3 - debug: 4.4.3(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.2.0 - magic-string: 0.30.21 - magicast: 0.3.5 - picocolors: 1.1.1 - std-env: 3.10.0 - strip-literal: 2.1.1 - test-exclude: 6.0.0 - vitest: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - transitivePeerDependencies: - - supports-color + vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vue: 3.5.30(typescript@7.0.2) '@vitest/expect@1.2.2': dependencies: @@ -43045,6 +43841,7 @@ snapshots: '@vitest/spy': 1.6.1 '@vitest/utils': 1.6.1 chai: 4.5.0 + optional: true '@vitest/runner@1.2.2': dependencies: @@ -43063,6 +43860,7 @@ snapshots: '@vitest/utils': 1.6.1 p-limit: 5.0.0 pathe: 1.1.2 + optional: true '@vitest/snapshot@1.2.2': dependencies: @@ -43081,6 +43879,7 @@ snapshots: magic-string: 0.30.21 pathe: 1.1.2 pretty-format: 29.7.0 + optional: true '@vitest/spy@1.2.2': dependencies: @@ -43093,6 +43892,7 @@ snapshots: '@vitest/spy@1.6.1': dependencies: tinyspy: 2.2.1 + optional: true '@vitest/ui@1.6.0(vitest@1.2.2)': dependencies: @@ -43103,7 +43903,7 @@ snapshots: pathe: 1.1.2 picocolors: 1.1.1 sirv: 2.0.4 - vitest: 1.2.2(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + vitest: 1.2.2(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) optional: true '@vitest/ui@1.6.0(vitest@1.6.0)': @@ -43115,7 +43915,8 @@ snapshots: pathe: 1.1.2 picocolors: 1.1.1 sirv: 2.0.4 - vitest: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + vitest: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + optional: true '@vitest/utils@1.2.2': dependencies: @@ -43137,6 +43938,7 @@ snapshots: estree-walker: 3.0.3 loupe: 2.3.7 pretty-format: 29.7.0 + optional: true '@volar/language-core@1.11.1': dependencies: @@ -43146,18 +43948,12 @@ snapshots: dependencies: '@volar/source-map': 2.4.15 - '@volar/language-core@2.4.28': - dependencies: - '@volar/source-map': 2.4.28 - '@volar/source-map@1.11.1': dependencies: muggle-string: 0.3.1 '@volar/source-map@2.4.15': {} - '@volar/source-map@2.4.28': {} - '@volar/typescript@1.11.1': dependencies: '@volar/language-core': 1.11.1 @@ -43169,24 +43965,20 @@ snapshots: path-browserify: 1.0.1 vscode-uri: 3.1.0 - '@volar/typescript@2.4.28': - dependencies: - '@volar/language-core': 2.4.28 - path-browserify: 1.0.1 - vscode-uri: 3.1.0 - '@vscode/sudo-prompt@9.3.2': {} '@vue/babel-helper-vue-transform-on@1.5.0': {} + '@vue/babel-helper-vue-transform-on@2.0.1': {} + '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.29.0)': dependencies: '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@vue/babel-helper-vue-transform-on': 1.5.0 '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.0) '@vue/shared': 3.5.30 @@ -43195,11 +43987,65 @@ snapshots: transitivePeerDependencies: - supports-color + '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.29.7)': + dependencies: + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.7) + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@vue/babel-helper-vue-transform-on': 1.5.0 + '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.29.7) + '@vue/shared': 3.5.30 + optionalDependencies: + '@babel/core': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.7)': + dependencies: + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.7) + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@vue/babel-helper-vue-transform-on': 2.0.1 + '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.7) + '@vue/shared': 3.5.30 + optionalDependencies: + '@babel/core': 7.29.7 + transitivePeerDependencies: + - supports-color + '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.29.0)': dependencies: '@babel/code-frame': 7.29.7 '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/parser': 7.29.7 + '@vue/compiler-sfc': 3.5.30 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.29.7)': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/parser': 7.29.7 + '@vue/compiler-sfc': 3.5.30 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.7)': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 '@babel/parser': 7.29.7 '@vue/compiler-sfc': 3.5.30 @@ -43221,7 +44067,7 @@ snapshots: '@vue/compiler-sfc@3.5.30': dependencies: - '@babel/parser': 7.29.2 + '@babel/parser': 7.29.7 '@vue/compiler-core': 3.5.30 '@vue/compiler-dom': 3.5.30 '@vue/compiler-ssr': 3.5.30 @@ -43243,7 +44089,7 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/language-core@1.8.27(typescript@5.9.3)': + '@vue/language-core@1.8.27(typescript@6.0.3)': dependencies: '@volar/language-core': 1.11.1 '@volar/source-map': 1.11.1 @@ -43255,22 +44101,50 @@ snapshots: path-browserify: 1.0.1 vue-template-compiler: 2.7.16 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 + + '@vue/language-core@1.8.27(typescript@7.0.2)': + dependencies: + '@volar/language-core': 1.11.1 + '@volar/source-map': 1.11.1 + '@vue/compiler-dom': 3.5.30 + '@vue/shared': 3.5.30 + computeds: 0.0.1 + minimatch: 9.0.9 + muggle-string: 0.3.1 + path-browserify: 1.0.1 + vue-template-compiler: 2.7.16 + optionalDependencies: + typescript: 7.0.2 + + '@vue/language-core@2.2.12(typescript@5.0.4)': + dependencies: + '@volar/language-core': 2.4.15 + '@vue/compiler-dom': 3.5.30 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.30 + alien-signals: 1.0.13 + minimatch: 9.0.9 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.0.4 + optional: true - '@vue/language-core@2.2.0(typescript@5.9.3)': + '@vue/language-core@2.2.12(typescript@6.0.3)': dependencies: - '@volar/language-core': 2.4.28 + '@volar/language-core': 2.4.15 '@vue/compiler-dom': 3.5.30 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.30 - alien-signals: 0.4.14 + alien-signals: 1.0.13 minimatch: 9.0.9 muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 - '@vue/language-core@2.2.12(typescript@5.9.3)': + '@vue/language-core@2.2.12(typescript@7.0.2)': dependencies: '@volar/language-core': 2.4.15 '@vue/compiler-dom': 3.5.30 @@ -43281,7 +44155,7 @@ snapshots: muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 '@vue/reactivity@3.5.30': dependencies: @@ -43299,20 +44173,32 @@ snapshots: '@vue/shared': 3.5.30 csstype: 3.2.3 - '@vue/server-renderer@3.5.30(vue@3.5.30(typescript@5.9.3))': + '@vue/server-renderer@3.5.30(vue@3.5.30(typescript@5.0.4))': dependencies: '@vue/compiler-ssr': 3.5.30 '@vue/shared': 3.5.30 - vue: 3.5.30(typescript@5.9.3) + vue: 3.5.30(typescript@5.0.4) + + '@vue/server-renderer@3.5.30(vue@3.5.30(typescript@6.0.3))': + dependencies: + '@vue/compiler-ssr': 3.5.30 + '@vue/shared': 3.5.30 + vue: 3.5.30(typescript@6.0.3) + + '@vue/server-renderer@3.5.30(vue@3.5.30(typescript@7.0.2))': + dependencies: + '@vue/compiler-ssr': 3.5.30 + '@vue/shared': 3.5.30 + vue: 3.5.30(typescript@7.0.2) '@vue/shared@3.5.30': {} '@vue/tsconfig@0.5.1': {} - '@vue/tsconfig@0.7.0(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3))': + '@vue/tsconfig@0.7.0(typescript@6.0.3)(vue@3.5.30(typescript@6.0.3))': optionalDependencies: - typescript: 5.9.3 - vue: 3.5.30(typescript@5.9.3) + typescript: 6.0.3 + vue: 3.5.30(typescript@6.0.3) '@web-std/blob@3.0.5': dependencies: @@ -43572,11 +44458,11 @@ snapshots: '@zeit/schemas@2.36.0': {} - '@zenuml/core@3.50.1(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(playwright-core@1.57.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)))': + '@zenuml/core@3.50.1(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(playwright-core@1.57.0)(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)))': dependencies: '@floating-ui/react': 0.27.19(react-dom@19.2.7(react@19.2.7))(react@19.2.7) '@headlessui/react': 2.2.10(react-dom@19.2.7(react@19.2.7))(react@19.2.7) - '@headlessui/tailwindcss': 0.2.2(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3))) + '@headlessui/tailwindcss': 0.2.2(tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3))) antlr4: 4.11.0 class-variance-authority: 0.7.1 clsx: 2.1.1 @@ -43632,24 +44518,28 @@ snapshots: acorn-globals@7.0.1: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: acorn: 8.16.0 - acorn-import-phases@1.0.4(acorn@8.16.0): + acorn-import-attributes@1.9.5(acorn@8.17.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 + + acorn-import-phases@1.0.4(acorn@8.17.0): + dependencies: + acorn: 8.17.0 acorn-jsx@5.3.2(acorn@7.4.1): dependencies: acorn: 7.4.1 - acorn-jsx@5.3.2(acorn@8.16.0): + acorn-jsx@5.3.2(acorn@8.17.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 acorn-loose@8.5.2: dependencies: @@ -43659,7 +44549,7 @@ snapshots: acorn-walk@8.3.5: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 acorn@7.4.1: {} @@ -43708,6 +44598,7 @@ snapshots: ajv-draft-04@1.0.0(ajv@8.18.0): optionalDependencies: ajv: 8.18.0 + optional: true ajv-formats@2.1.1(ajv@8.18.0): optionalDependencies: @@ -43740,8 +44631,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - alien-signals@0.4.14: {} - alien-signals@1.0.13: {} anser@1.4.10: {} @@ -44394,20 +45283,20 @@ snapshots: autoprefixer@10.4.23(postcss@8.5.10): dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001780 + browserslist: 4.28.4 + caniuse-lite: 1.0.30001800 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.10 postcss-value-parser: 4.2.0 - autoprefixer@10.4.24(postcss@8.5.10): + autoprefixer@10.4.27(postcss@8.5.15): dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001780 + browserslist: 4.28.4 + caniuse-lite: 1.0.30001800 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.10 + postcss: 8.5.15 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -44420,9 +45309,14 @@ snapshots: axe-core@4.11.1: {} - axios@1.16.1: + axios-retry@4.5.0(axios@1.16.1): + dependencies: + axios: 1.16.1(debug@4.4.3) + is-retry-allowed: 2.2.0 + + axios@1.16.1(debug@4.4.3): dependencies: - follow-redirects: 1.16.0 + follow-redirects: 1.16.0(debug@4.4.3) form-data: 4.0.5 https-proxy-agent: 5.0.1 proxy-from-env: 2.1.0 @@ -44438,9 +45332,9 @@ snapshots: b4a@1.8.0: {} - babel-core@7.0.0-bridge.0(@babel/core@7.29.0): + babel-core@7.0.0-bridge.0(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 babel-jest@29.7.0(@babel/core@7.29.0): dependencies: @@ -44468,26 +45362,27 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + babel-loader@10.1.1(@babel/core@7.29.7)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)): dependencies: - '@babel/core': 7.29.0 - find-cache-dir: 4.0.0 - schema-utils: 4.3.0 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + '@babel/core': 7.29.7 + find-up: 5.0.0 + optionalDependencies: + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) - babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: '@babel/core': 7.29.0 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) - babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@babel/core': 7.29.0 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.104.1): dependencies: @@ -44496,18 +45391,25 @@ snapshots: schema-utils: 4.3.0 webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) + babel-loader@9.2.1(@babel/core@7.29.7)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + dependencies: + '@babel/core': 7.29.7 + find-cache-dir: 4.0.0 + schema-utils: 4.3.0 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + babel-plugin-apply-mdx-type-prop@1.6.22(@babel/core@7.12.9): dependencies: '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.10.4 '@mdx-js/util': 1.6.22 - babel-plugin-const-enum@1.2.0(@babel/core@7.29.0): + babel-plugin-const-enum@1.2.0(@babel/core@7.29.7): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.7) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -44521,7 +45423,7 @@ snapshots: babel-plugin-import@1.13.8: dependencies: - '@babel/helper-module-imports': 7.28.6 + '@babel/helper-module-imports': 7.29.7 transitivePeerDependencies: - supports-color @@ -44546,7 +45448,7 @@ snapshots: dependencies: '@babel/runtime': 7.28.2 cosmiconfig: 7.1.0 - resolve: 1.22.8 + resolve: 1.22.11 babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): dependencies: @@ -44574,6 +45476,14 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7) + core-js-compat: 3.49.0 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 @@ -44607,7 +45517,7 @@ snapshots: babel-plugin-styled-components@1.13.3(styled-components@6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6 + '@babel/helper-module-imports': 7.29.7 babel-plugin-syntax-jsx: 6.18.0 lodash: 4.18.1 styled-components: 6.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -44617,7 +45527,7 @@ snapshots: babel-plugin-styled-components@1.13.3(styled-components@6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7)): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6 + '@babel/helper-module-imports': 7.29.7 babel-plugin-syntax-jsx: 6.18.0 lodash: 4.18.1 styled-components: 6.1.8(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -44627,7 +45537,7 @@ snapshots: babel-plugin-styled-components@2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) + '@babel/helper-module-imports': 7.29.7(supports-color@5.5.0) '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) lodash: 4.18.1 picomatch: 2.3.1 @@ -44639,7 +45549,7 @@ snapshots: babel-plugin-styled-components@2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.7(react@19.2.7))(react-is@18.3.1)(react@19.2.7))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) + '@babel/helper-module-imports': 7.29.7(supports-color@5.5.0) '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) lodash: 4.18.1 picomatch: 2.3.1 @@ -44669,13 +45579,27 @@ snapshots: optionalDependencies: '@babel/traverse': 7.29.0 - babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.29.0)(@babel/traverse@7.29.7): + babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.29.7)(@babel/traverse@7.29.0): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.28.6 + optionalDependencies: + '@babel/traverse': 7.29.0 + + babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.29.7)(@babel/traverse@7.29.7): + dependencies: + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 optionalDependencies: '@babel/traverse': 7.29.7 + babel-plugin-vue-jsx-hmr@1.0.0: + dependencies: + '@babel/core': 7.29.7 + '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 @@ -44987,11 +45911,11 @@ snapshots: browserslist-to-es-version@1.4.1: dependencies: - browserslist: 4.28.1 + browserslist: 4.28.4 browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001780 + caniuse-lite: 1.0.30001800 electron-to-chromium: 1.5.313 node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.24.4) @@ -45004,6 +45928,14 @@ snapshots: node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.40 + caniuse-lite: 1.0.30001800 + electron-to-chromium: 1.5.384 + node-releases: 2.0.50 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + browserslist@4.28.4: dependencies: baseline-browser-mapping: 2.10.40 @@ -45152,8 +46084,8 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001780 + browserslist: 4.28.4 + caniuse-lite: 1.0.30001800 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 @@ -45599,10 +46531,10 @@ snapshots: commander@9.5.0: {} - commitizen@4.3.1(@types/node@20.19.5)(typescript@5.9.3): + commitizen@4.3.1(@types/node@20.19.5)(typescript@6.0.3): dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@types/node@20.19.5)(typescript@5.9.3) + cz-conventional-changelog: 3.3.0(@types/node@20.19.5)(typescript@6.0.3) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -45630,8 +46562,6 @@ snapshots: array-ify: 1.0.0 dot-prop: 5.3.0 - compare-versions@6.1.1: {} - component-emitter@1.3.1: {} compressible@2.0.18: @@ -45683,8 +46613,6 @@ snapshots: confbox@0.1.8: {} - confbox@0.2.4: {} - connect-history-api-fallback@2.0.0: {} connect@3.7.0: @@ -45775,7 +46703,7 @@ snapshots: dependencies: toggle-selection: 1.0.6 - copy-webpack-plugin@10.2.4(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + copy-webpack-plugin@10.2.4(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -45783,9 +46711,9 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) - copy-webpack-plugin@11.0.0(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + copy-webpack-plugin@11.0.0(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -45793,9 +46721,9 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) - copy-webpack-plugin@11.0.0(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + copy-webpack-plugin@11.0.0(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -45803,7 +46731,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) copy-webpack-plugin@11.0.0(webpack@5.104.1): dependencies: @@ -45831,8 +46759,6 @@ snapshots: core-js@3.42.0: {} - core-js@3.45.1: {} - core-js@3.46.0: {} core-js@3.47.0: {} @@ -45858,12 +46784,12 @@ snapshots: dependencies: layout-base: 2.0.1 - cosmiconfig-typescript-loader@6.2.0(@types/node@20.19.5)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3): + cosmiconfig-typescript-loader@6.2.0(@types/node@20.19.5)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): dependencies: '@types/node': 20.19.5 - cosmiconfig: 9.0.1(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@6.0.3) jiti: 2.6.1 - typescript: 5.9.3 + typescript: 6.0.3 cosmiconfig@5.2.1: dependencies: @@ -45880,41 +46806,41 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6(typescript@5.0.4): + cosmiconfig@8.3.6(typescript@6.0.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.2.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.0.4 + typescript: 6.0.3 - cosmiconfig@8.3.6(typescript@5.9.3): + cosmiconfig@8.3.6(typescript@7.0.2): dependencies: import-fresh: 3.3.1 js-yaml: 4.2.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 - cosmiconfig@9.0.1(typescript@5.0.4): + cosmiconfig@9.0.1(typescript@6.0.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.2.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.0.4 + typescript: 6.0.3 - cosmiconfig@9.0.1(typescript@5.9.3): + cosmiconfig@9.0.1(typescript@7.0.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.2.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 create-ecdh@4.0.4: dependencies: @@ -45938,13 +46864,13 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.12 - create-jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)): + create-jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -45953,13 +46879,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)): + create-jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -45968,13 +46894,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)): + create-jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -45989,12 +46915,6 @@ snapshots: dependencies: luxon: 3.7.2 - cross-fetch@3.2.0(encoding@0.1.13): - dependencies: - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 @@ -46030,6 +46950,10 @@ snapshots: dependencies: postcss: 8.5.10 + css-declaration-sorter@7.3.1(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + css-loader@6.11.0(@rspack/core@1.3.9(@swc/helpers@0.5.13))(webpack@5.104.1): dependencies: icss-utils: 5.1.0(postcss@8.5.10) @@ -46044,7 +46968,7 @@ snapshots: '@rspack/core': 1.3.9(@swc/helpers@0.5.13) webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) - css-loader@6.11.0(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + css-loader@6.11.0(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: icss-utils: 5.1.0(postcss@8.5.10) postcss: 8.5.10 @@ -46056,9 +46980,9 @@ snapshots: semver: 7.6.3 optionalDependencies: '@rspack/core': 1.6.8(@swc/helpers@0.5.23) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) - css-minimizer-webpack-plugin@5.0.1(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + css-minimizer-webpack-plugin@5.0.1(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 cssnano: 6.1.2(postcss@8.5.10) @@ -46066,11 +46990,11 @@ snapshots: postcss: 8.5.10 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: esbuild: 0.25.5 - css-minimizer-webpack-plugin@7.0.2(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + css-minimizer-webpack-plugin@7.0.2(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 cssnano: 7.1.3(postcss@8.5.10) @@ -46078,11 +47002,11 @@ snapshots: postcss: 8.5.10 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optionalDependencies: esbuild: 0.18.20 - css-minimizer-webpack-plugin@7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + css-minimizer-webpack-plugin@7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 cssnano: 7.1.3(postcss@8.5.10) @@ -46090,11 +47014,11 @@ snapshots: postcss: 8.5.10 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: esbuild: 0.25.5 - css-minimizer-webpack-plugin@7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + css-minimizer-webpack-plugin@7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 cssnano: 7.1.3(postcss@8.5.10) @@ -46102,21 +47026,33 @@ snapshots: postcss: 8.5.10 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optionalDependencies: esbuild: 0.25.5 - css-minimizer-webpack-plugin@7.0.2(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))): + css-minimizer-webpack-plugin@8.0.0(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 cssnano: 7.1.3(postcss@8.5.10) - jest-worker: 29.7.0 + jest-worker: 30.4.1 postcss: 8.5.10 schema-utils: 4.3.0 - serialize-javascript: 6.0.2 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) + serialize-javascript: 7.0.7 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4) optionalDependencies: - esbuild: 0.25.5 + esbuild: 0.28.1 + + css-minimizer-webpack-plugin@8.0.0(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + cssnano: 7.1.3(postcss@8.5.10) + jest-worker: 30.4.1 + postcss: 8.5.10 + schema-utils: 4.3.0 + serialize-javascript: 7.0.7 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) + optionalDependencies: + esbuild: 0.28.1 css-select@4.3.0: dependencies: @@ -46163,7 +47099,7 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.5.10): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.4 css-declaration-sorter: 7.3.1(postcss@8.5.10) cssnano-utils: 4.0.2(postcss@8.5.10) postcss: 8.5.10 @@ -46195,9 +47131,43 @@ snapshots: postcss-svgo: 6.0.3(postcss@8.5.10) postcss-unique-selectors: 6.0.4(postcss@8.5.10) + cssnano-preset-default@6.1.2(postcss@8.5.15): + dependencies: + browserslist: 4.28.4 + css-declaration-sorter: 7.3.1(postcss@8.5.15) + cssnano-utils: 4.0.2(postcss@8.5.15) + postcss: 8.5.15 + postcss-calc: 9.0.1(postcss@8.5.15) + postcss-colormin: 6.1.0(postcss@8.5.15) + postcss-convert-values: 6.1.0(postcss@8.5.15) + postcss-discard-comments: 6.0.2(postcss@8.5.15) + postcss-discard-duplicates: 6.0.3(postcss@8.5.15) + postcss-discard-empty: 6.0.3(postcss@8.5.15) + postcss-discard-overridden: 6.0.2(postcss@8.5.15) + postcss-merge-longhand: 6.0.5(postcss@8.5.15) + postcss-merge-rules: 6.1.1(postcss@8.5.15) + postcss-minify-font-values: 6.1.0(postcss@8.5.15) + postcss-minify-gradients: 6.0.3(postcss@8.5.15) + postcss-minify-params: 6.1.0(postcss@8.5.15) + postcss-minify-selectors: 6.0.4(postcss@8.5.15) + postcss-normalize-charset: 6.0.2(postcss@8.5.15) + postcss-normalize-display-values: 6.0.2(postcss@8.5.15) + postcss-normalize-positions: 6.0.2(postcss@8.5.15) + postcss-normalize-repeat-style: 6.0.2(postcss@8.5.15) + postcss-normalize-string: 6.0.2(postcss@8.5.15) + postcss-normalize-timing-functions: 6.0.2(postcss@8.5.15) + postcss-normalize-unicode: 6.1.0(postcss@8.5.15) + postcss-normalize-url: 6.0.2(postcss@8.5.15) + postcss-normalize-whitespace: 6.0.2(postcss@8.5.15) + postcss-ordered-values: 6.0.2(postcss@8.5.15) + postcss-reduce-initial: 6.1.0(postcss@8.5.15) + postcss-reduce-transforms: 6.0.2(postcss@8.5.15) + postcss-svgo: 6.0.3(postcss@8.5.15) + postcss-unique-selectors: 6.0.4(postcss@8.5.15) + cssnano-preset-default@7.0.11(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.4 css-declaration-sorter: 7.3.1(postcss@8.5.10) cssnano-utils: 5.0.1(postcss@8.5.10) postcss: 8.5.10 @@ -46233,6 +47203,10 @@ snapshots: dependencies: postcss: 8.5.10 + cssnano-utils@4.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + cssnano-utils@5.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -46243,6 +47217,12 @@ snapshots: lilconfig: 3.1.3 postcss: 8.5.10 + cssnano@6.1.2(postcss@8.5.15): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.5.15) + lilconfig: 3.1.3 + postcss: 8.5.15 + cssnano@7.1.3(postcss@8.5.10): dependencies: cssnano-preset-default: 7.0.11(postcss@8.5.10) @@ -46325,16 +47305,16 @@ snapshots: cytoscape@3.34.0: {} - cz-conventional-changelog@3.3.0(@types/node@20.19.5)(typescript@5.9.3): + cz-conventional-changelog@3.3.0(@types/node@20.19.5)(typescript@6.0.3): dependencies: chalk: 2.4.2 - commitizen: 4.3.1(@types/node@20.19.5)(typescript@5.9.3) + commitizen: 4.3.1(@types/node@20.19.5)(typescript@6.0.3) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.5 optionalDependencies: - '@commitlint/load': 20.5.0(@types/node@20.19.5)(typescript@5.9.3) + '@commitlint/load': 20.5.0(@types/node@20.19.5)(typescript@6.0.3) transitivePeerDependencies: - '@types/node' - typescript @@ -46775,7 +47755,8 @@ snapshots: diff@4.0.4: {} - diff@8.0.3: {} + diff@8.0.3: + optional: true diffie-hellman@5.0.3: dependencies: @@ -46837,12 +47818,20 @@ snapshots: domhandler: 5.0.3 entities: 4.5.0 + dom-serializer@3.1.1: + dependencies: + domelementtype: 3.0.0 + domhandler: 6.0.1 + entities: 8.0.0 + domain-browser@4.23.0: {} domain-browser@5.7.0: {} domelementtype@2.3.0: {} + domelementtype@3.0.0: {} + domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 @@ -46855,6 +47844,10 @@ snapshots: dependencies: domelementtype: 2.3.0 + domhandler@6.0.1: + dependencies: + domelementtype: 3.0.0 + dompurify@3.4.11: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -46871,6 +47864,12 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 + domutils@4.0.2: + dependencies: + dom-serializer: 3.1.1 + domelementtype: 3.0.0 + domhandler: 6.0.1 + dot-case@3.0.4: dependencies: no-case: 3.0.4 @@ -47038,6 +48037,8 @@ snapshots: entities@7.0.1: {} + entities@8.0.0: {} + env-paths@2.2.1: {} envinfo@7.21.0: {} @@ -47202,7 +48203,7 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.16.0 + acorn: 8.17.0 esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 @@ -47513,20 +48514,20 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-next@16.0.10(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5): + eslint-config-next@16.0.10(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2): dependencies: '@next/eslint-plugin-next': 16.0.10 eslint: 9.26.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.26.0(jiti@2.6.1)) eslint-plugin-react: 7.37.2(eslint@9.26.0(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.1(eslint@9.26.0(jiti@2.6.1)) globals: 16.4.0 - typescript-eslint: 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) + typescript-eslint: 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) optionalDependencies: - typescript: 5.4.5 + typescript: 7.0.2 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-webpack @@ -47549,7 +48550,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) @@ -47560,46 +48561,36 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): - dependencies: - debug: 3.2.7(supports-color@8.1.1) - optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.0.4) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@7.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@7.0.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) eslint: 9.26.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.3(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.3(jiti@2.6.1)): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) eslint: 9.39.3(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -47637,7 +48628,7 @@ snapshots: lodash: 4.18.1 string-natural-compare: 3.0.1 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -47648,7 +48639,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.0.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@7.0.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -47660,42 +48651,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@7.0.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@8.1.1) - doctrine: 2.1.0 - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.5 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -47706,7 +48668,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.3(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.3(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.3(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -47718,13 +48680,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -47735,7 +48697,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.26.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)))(eslint@9.26.0(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -47747,30 +48709,30 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)))(typescript@5.0.4): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)))(typescript@7.0.2): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@7.0.2) eslint: 8.57.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4) - jest: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2) + jest: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)))(typescript@5.0.4): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)))(typescript@7.0.2): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.0.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@7.0.2) eslint: 8.57.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.0.4))(eslint@8.57.1)(typescript@5.0.4) - jest: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(typescript@7.0.2) + jest: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) transitivePeerDependencies: - supports-color - typescript @@ -47861,7 +48823,7 @@ snapshots: eslint-plugin-react-hooks@7.0.1(eslint@9.26.0(jiti@2.6.1)): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/parser': 7.29.7 eslint: 9.26.0(jiti@2.6.1) hermes-parser: 0.25.1 @@ -47951,9 +48913,9 @@ snapshots: dependencies: eslint: 9.39.3(jiti@2.6.1) - eslint-plugin-storybook@9.0.9(eslint@9.39.3(jiti@2.6.1))(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3): + eslint-plugin-storybook@9.0.9(eslint@9.39.3(jiti@2.6.1))(storybook@8.6.17(prettier@3.8.1))(typescript@6.0.3): dependencies: - '@typescript-eslint/utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) eslint: 9.39.3(jiti@2.6.1) storybook: 8.6.17(prettier@3.8.1) transitivePeerDependencies: @@ -48129,14 +49091,14 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 4.2.1 espree@9.6.1: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -48155,7 +49117,7 @@ snapshots: estree-to-babel@3.2.1: dependencies: - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 c8: 7.14.0 transitivePeerDependencies: @@ -48239,6 +49201,10 @@ snapshots: dependencies: eventsource-parser: 3.0.6 + eventsource@4.1.0: + dependencies: + eventsource-parser: 3.0.6 + evp_bytestokey@1.0.3: dependencies: md5.js: 1.3.5 @@ -48682,6 +49648,8 @@ snapshots: findup-sync: 4.0.0 merge: 2.1.1 + find-package-json@1.2.0: {} + find-pkg@2.0.0: dependencies: find-file-up: 2.0.1 @@ -48757,7 +49725,9 @@ snapshots: optionalDependencies: debug: 4.4.3(supports-color@8.1.1) - follow-redirects@1.16.0: {} + follow-redirects@1.16.0(debug@4.4.3): + optionalDependencies: + debug: 4.4.3(supports-color@8.1.1) for-each@0.3.5: dependencies: @@ -48777,9 +49747,9 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@7.2.13(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + fork-ts-checker-webpack-plugin@7.2.13(typescript@7.0.2)(vue-template-compiler@2.7.16)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.29.7 chalk: 4.1.2 chokidar: 3.6.0 cosmiconfig: 7.1.0 @@ -48791,12 +49761,12 @@ snapshots: schema-utils: 3.3.0 semver: 7.6.3 tapable: 2.3.0 - typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + typescript: 7.0.2 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.9.3)(webpack@5.104.1): + fork-ts-checker-webpack-plugin@8.0.0(typescript@6.0.3)(webpack@5.104.1): dependencies: '@babel/code-frame': 7.29.7 chalk: 4.1.2 @@ -48810,7 +49780,7 @@ snapshots: schema-utils: 3.3.0 semver: 7.6.3 tapable: 2.3.0 - typescript: 5.9.3 + typescript: 6.0.3 webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) form-data-encoder@2.1.4: {} @@ -49077,6 +50047,15 @@ snapshots: meow: 12.1.1 split2: 4.2.0 + git-up@7.0.0: + dependencies: + is-ssh: 1.4.1 + parse-url: 8.1.0 + + git-url-parse@15.0.0: + dependencies: + git-up: 7.0.0 + github-slugger@1.5.0: {} glob-parent@3.1.0: @@ -49624,7 +50603,7 @@ snapshots: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.46.1 + terser: 5.48.0 html-parse-stringify@3.0.1: dependencies: @@ -49661,7 +50640,7 @@ snapshots: '@rspack/core': 1.3.9(@swc/helpers@0.5.13) webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) - html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -49670,10 +50649,10 @@ snapshots: tapable: 2.3.0 optionalDependencies: '@rspack/core': 1.6.8(@swc/helpers@0.5.23) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) optional: true - html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -49682,9 +50661,9 @@ snapshots: tapable: 2.3.0 optionalDependencies: '@rspack/core': 1.7.9(@swc/helpers@0.5.17) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) - html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -49693,7 +50672,7 @@ snapshots: tapable: 2.3.0 optionalDependencies: '@rspack/core': 1.7.9(@swc/helpers@0.5.19) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) htmlparser2@10.0.0: dependencies: @@ -49702,6 +50681,13 @@ snapshots: domutils: 3.2.2 entities: 6.0.1 + htmlparser2@12.0.0: + dependencies: + domelementtype: 3.0.0 + domhandler: 6.0.1 + domutils: 4.0.2 + entities: 8.0.0 + htmlparser2@6.1.0: dependencies: domelementtype: 2.3.0 @@ -49893,11 +50879,11 @@ snapshots: dependencies: '@babel/runtime': 7.28.2 - i18next@25.7.3(typescript@5.6.3): + i18next@25.7.3(typescript@6.0.3): dependencies: '@babel/runtime': 7.29.2 optionalDependencies: - typescript: 5.6.3 + typescript: 6.0.3 iconv-lite@0.4.24: dependencies: @@ -49958,7 +50944,8 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-lazy@4.0.0: {} + import-lazy@4.0.0: + optional: true import-local@3.2.0: dependencies: @@ -50133,6 +51120,10 @@ snapshots: is-callable@1.2.7: {} + is-ci@4.1.0: + dependencies: + ci-info: 4.4.0 + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -50305,12 +51296,18 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + is-retry-allowed@2.2.0: {} + is-set@2.0.3: {} is-shared-array-buffer@1.0.4: dependencies: call-bound: 1.0.4 + is-ssh@1.4.1: + dependencies: + protocols: 2.0.2 + is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -50407,7 +51404,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/parser': 7.29.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -50417,7 +51414,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/parser': 7.29.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -50439,14 +51436,6 @@ snapshots: transitivePeerDependencies: - supports-color - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - debug: 4.4.3(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 @@ -50509,16 +51498,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)): + jest-cli@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + create-jest: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -50528,16 +51517,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)): + jest-cli@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)) + create-jest: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -50547,16 +51536,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)): + jest-cli@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) + create-jest: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) + jest-config: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -50566,12 +51555,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)): + jest-config@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.0) + babel-jest: 29.7.0(@babel/core@7.29.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -50592,17 +51581,17 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.19.5 - ts-node: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3) + ts-node: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)): + jest-config@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.0) + babel-jest: 29.7.0(@babel/core@7.29.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -50623,17 +51612,17 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.19.5 - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)): + jest-config@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.0) + babel-jest: 29.7.0(@babel/core@7.29.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -50654,17 +51643,17 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.19.5 - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)): + jest-config@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.29.0) + babel-jest: 29.7.0(@babel/core@7.29.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -50685,7 +51674,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 26.1.0 - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -50798,6 +51787,8 @@ snapshots: jest-regex-util@29.6.3: {} + jest-regex-util@30.4.0: {} + jest-resolve-dependencies@29.7.0: dependencies: jest-regex-util: 29.6.3 @@ -50872,15 +51863,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/generator': 7.29.7 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.7) '@babel/types': 7.29.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -50904,6 +51895,15 @@ snapshots: graceful-fs: 4.2.11 picomatch: 2.3.1 + jest-util@30.4.1: + dependencies: + '@jest/types': 30.4.1 + '@types/node': 20.19.5 + chalk: 4.1.2 + ci-info: 4.4.0 + graceful-fs: 4.2.11 + picomatch: 4.0.3 + jest-validate@29.7.0: dependencies: '@jest/types': 29.6.3 @@ -50937,36 +51937,44 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)): + jest-worker@30.4.1: dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + '@types/node': 20.19.5 + '@ungap/structured-clone': 1.3.0 + jest-util: 30.4.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + jest-cli: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)): + jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4)) + jest-cli: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)): + jest@29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4)) + jest-cli: 29.7.0(@types/node@26.1.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -50979,7 +51987,8 @@ snapshots: jiti@2.6.1: {} - jju@1.4.0: {} + jju@1.4.0: + optional: true joi@17.13.3: dependencies: @@ -50989,6 +51998,8 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 + jose@5.10.0: {} + jose@6.2.1: {} jotai@2.20.1(@babel/core@7.29.0)(@babel/template@7.29.7)(@types/react@19.2.14)(react@19.2.7): @@ -51023,19 +52034,19 @@ snapshots: jsc-safe-url@0.2.4: {} - jscodeshift@0.15.2(@babel/preset-env@7.29.2(@babel/core@7.29.0)): + jscodeshift@0.15.2(@babel/preset-env@7.29.2(@babel/core@7.29.7)): dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/parser': 7.29.7 - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) - '@babel/preset-flow': 7.27.1(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@babel/register': 7.28.6(@babel/core@7.29.0) - babel-core: 7.0.0-bridge.0(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.7) + '@babel/preset-flow': 7.27.1(@babel/core@7.29.7) + '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) + '@babel/register': 7.28.6(@babel/core@7.29.7) + babel-core: 7.0.0-bridge.0(@babel/core@7.29.7) chalk: 4.1.2 flow-parser: 0.305.1 graceful-fs: 4.2.11 @@ -51055,7 +52066,7 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.16.0 + acorn: 8.17.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -51227,8 +52238,6 @@ snapshots: type-is: 2.0.1 vary: 1.1.2 - kolorist@1.8.0: {} - language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -51254,10 +52263,24 @@ snapshots: leac@0.6.0: {} - less-loader@11.1.4(less@4.6.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + less-loader@11.1.4(less@4.6.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: less: 4.6.4 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + + less-loader@12.3.3(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(less@4.6.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)): + dependencies: + less: 4.6.4 + optionalDependencies: + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4) + + less-loader@12.3.3(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(less@4.6.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))): + dependencies: + less: 4.6.4 + optionalDependencies: + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) less@4.6.4: dependencies: @@ -51279,11 +52302,11 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-webpack-plugin@4.0.2(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + license-webpack-plugin@4.0.2(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: webpack-sources: 3.3.4 optionalDependencies: - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) lighthouse-logger@1.4.2: dependencies: @@ -51407,15 +52430,9 @@ snapshots: local-pkg@0.5.1: dependencies: - mlly: 1.8.1 + mlly: 1.8.2 pkg-types: 1.3.1 - local-pkg@1.1.2: - dependencies: - mlly: 1.8.1 - pkg-types: 2.3.0 - quansync: 0.2.11 - locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -51471,7 +52488,8 @@ snapshots: lodash@4.17.21: {} - lodash@4.17.23: {} + lodash@4.17.23: + optional: true lodash@4.18.1: {} @@ -51573,12 +52591,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.3.5: - dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - source-map-js: 1.2.1 - make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -51897,6 +52909,23 @@ snapshots: tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 + memfs@4.58.0(tslib@2.8.1): + dependencies: + '@jsonjoy.com/fs-core': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-to-fsa': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.58.0(tslib@2.8.1) + '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.5.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + memoize-one@5.2.1: {} memoizerific@1.11.3: @@ -51955,7 +52984,7 @@ snapshots: metro-babel-transformer@0.83.5: dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 flow-enums-runtime: 0.0.6 hermes-parser: 0.33.3 nullthrows: 1.1.1 @@ -52012,7 +53041,7 @@ snapshots: metro-cache: 0.83.5 metro-core: 0.83.5 metro-runtime: 0.83.5 - yaml: 2.8.2 + yaml: 2.9.0 transitivePeerDependencies: - bufferutil - supports-color @@ -52061,12 +53090,12 @@ snapshots: metro-minify-terser@0.82.5: dependencies: flow-enums-runtime: 0.0.6 - terser: 5.46.1 + terser: 5.48.0 metro-minify-terser@0.83.5: dependencies: flow-enums-runtime: 0.0.6 - terser: 5.46.1 + terser: 5.48.0 metro-resolver@0.82.5: dependencies: @@ -52103,7 +53132,7 @@ snapshots: metro-source-map@0.83.5: dependencies: - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 flow-enums-runtime: 0.0.6 invariant: 2.2.4 @@ -52140,9 +53169,9 @@ snapshots: metro-transform-plugins@0.82.5: dependencies: '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 + '@babel/generator': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 flow-enums-runtime: 0.0.6 nullthrows: 1.1.1 transitivePeerDependencies: @@ -52150,10 +53179,10 @@ snapshots: metro-transform-plugins@0.83.5: dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/generator': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.0 + '@babel/traverse': 7.29.7 flow-enums-runtime: 0.0.6 nullthrows: 1.1.1 transitivePeerDependencies: @@ -52162,9 +53191,9 @@ snapshots: metro-transform-worker@0.82.5: dependencies: '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 flow-enums-runtime: 0.0.6 metro: 0.82.5 metro-babel-transformer: 0.82.5 @@ -52181,7 +53210,7 @@ snapshots: metro-transform-worker@0.83.5: dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/generator': 7.29.7 '@babel/parser': 7.29.7 '@babel/types': 7.29.7 @@ -52248,13 +53277,13 @@ snapshots: metro@0.83.5: dependencies: - '@babel/code-frame': 7.29.0 - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 accepts: 2.0.0 chalk: 4.1.2 ci-info: 2.0.0 @@ -52450,8 +53479,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) micromark-extension-mdx-expression: 3.0.1 micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 @@ -52664,22 +53693,22 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.4.7(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + mini-css-extract-plugin@2.4.7(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: schema-utils: 4.3.0 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) - mini-css-extract-plugin@2.9.4(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + mini-css-extract-plugin@2.9.4(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: schema-utils: 4.3.0 tapable: 2.3.0 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) - mini-css-extract-plugin@2.9.4(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + mini-css-extract-plugin@2.9.4(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: schema-utils: 4.3.0 tapable: 2.3.0 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) mini-svg-data-uri@1.4.4: {} @@ -52690,6 +53719,7 @@ snapshots: minimatch@10.2.3: dependencies: brace-expansion: 5.0.4 + optional: true minimatch@10.2.4: dependencies: @@ -52772,14 +53802,21 @@ snapshots: mlly@1.6.1: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 pathe: 1.1.2 pkg-types: 1.3.1 ufo: 1.6.3 mlly@1.8.1: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + + mlly@1.8.2: + dependencies: + acorn: 8.17.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.3 @@ -52822,7 +53859,7 @@ snapshots: ms@3.0.0-canary.1: {} - msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@5.9.3): + msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3): dependencies: '@mswjs/cookies': 0.2.2 '@mswjs/interceptors': 0.17.10 @@ -52844,7 +53881,7 @@ snapshots: type-fest: 2.19.0 yargs: 17.7.2 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - '@types/node' - encoding @@ -53000,7 +54037,7 @@ snapshots: - webpack-cli optional: true - next@16.1.5(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.15.10(@swc/helpers@0.5.23))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.100.0)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)): + next@16.1.5(@babel/core@7.29.0)(@playwright/test@1.57.0)(@swc/core@1.15.41(@swc/helpers@0.5.23))(babel-plugin-macros@3.1.0)(esbuild@0.28.1)(react-dom@19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013))(react@19.0.0-rc-cd22717c-20241013)(sass@1.100.0)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)): dependencies: '@next/env': 16.1.5 '@swc/helpers': 0.5.15 @@ -53010,7 +54047,7 @@ snapshots: react: 19.0.0-rc-cd22717c-20241013 react-dom: 19.0.0-rc-cd22717c-20241013(react@19.0.0-rc-cd22717c-20241013) styled-jsx: 5.1.6(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react@19.0.0-rc-cd22717c-20241013) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) optionalDependencies: '@next/swc-darwin-arm64': 16.1.5 '@next/swc-darwin-x64': 16.1.5 @@ -53107,12 +54144,6 @@ snapshots: optionalDependencies: encoding: 0.1.13 - node-fetch@3.3.0: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 @@ -53127,6 +54158,10 @@ snapshots: node-machine-id@1.1.12: {} + node-persist@4.0.4: + dependencies: + p-limit: 3.1.0 + node-polyfill-webpack-plugin@2.0.1(webpack@5.104.1): dependencies: assert: 2.1.0 @@ -53253,13 +54288,13 @@ snapshots: nwsapi@2.2.23: {} - nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3))(@swc/core@1.15.10(@swc/helpers@0.5.23)): + nx@22.5.4(@swc-node/register@1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23)): dependencies: '@napi-rs/wasm-runtime': 0.2.4 '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.2 '@zkochan/js-yaml': 0.0.7 - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) cli-cursor: 3.1.0 cli-spinners: 2.6.1 cliui: 8.0.1 @@ -53288,7 +54323,7 @@ snapshots: tree-kill: 1.2.2 tsconfig-paths: 4.2.0 tslib: 2.8.1 - yaml: 2.8.2 + yaml: 2.9.0 yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: @@ -53302,8 +54337,8 @@ snapshots: '@nx/nx-linux-x64-musl': 22.5.4 '@nx/nx-win32-arm64-msvc': 22.5.4 '@nx/nx-win32-x64-msvc': 22.5.4 - '@swc-node/register': 1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.25)(typescript@5.9.3) - '@swc/core': 1.15.10(@swc/helpers@0.5.23) + '@swc-node/register': 1.10.10(@swc/core@1.7.26(@swc/helpers@0.5.13))(@swc/types@0.1.27)(typescript@6.0.3) + '@swc/core': 1.15.41(@swc/helpers@0.5.23) transitivePeerDependencies: - debug - supports-color @@ -53661,6 +54696,14 @@ snapshots: parse-passwd@1.0.0: {} + parse-path@7.1.0: + dependencies: + protocols: 2.0.2 + + parse-url@8.1.0: + dependencies: + parse-path: 7.1.0 + parse5-htmlparser2-tree-adapter@7.1.0: dependencies: domhandler: 5.0.3 @@ -53859,13 +54902,7 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.8.1 - pathe: 2.0.3 - - pkg-types@2.3.0: - dependencies: - confbox: 0.2.4 - exsolve: 1.0.8 + mlly: 1.8.2 pathe: 2.0.3 pkg-up@3.1.0: @@ -53927,15 +54964,23 @@ snapshots: postcss-colormin@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.4 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-colormin@6.1.0(postcss@8.5.15): + dependencies: + browserslist: 4.28.4 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-colormin@7.0.6(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.4 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.10 @@ -53943,13 +54988,19 @@ snapshots: postcss-convert-values@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.4 postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-convert-values@6.1.0(postcss@8.5.15): + dependencies: + browserslist: 4.28.4 + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-convert-values@7.0.9(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.4 postcss: 8.5.10 postcss-value-parser: 4.2.0 @@ -53975,6 +55026,10 @@ snapshots: dependencies: postcss: 8.5.10 + postcss-discard-comments@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-discard-comments@7.0.6(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -53984,6 +55039,10 @@ snapshots: dependencies: postcss: 8.5.10 + postcss-discard-duplicates@6.0.3(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-discard-duplicates@7.0.2(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -53992,6 +55051,10 @@ snapshots: dependencies: postcss: 8.5.10 + postcss-discard-empty@6.0.3(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-discard-empty@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54000,6 +55063,10 @@ snapshots: dependencies: postcss: 8.5.10 + postcss-discard-overridden@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-discard-overridden@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54008,10 +55075,18 @@ snapshots: dependencies: postcss: 8.5.10 + postcss-flexbugs-fixes@5.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-font-variant@5.0.0(postcss@8.5.10): dependencies: postcss: 8.5.10 + postcss-font-variant@5.0.0(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-import@14.1.0(postcss@8.4.49): dependencies: postcss: 8.4.49 @@ -54044,6 +55119,10 @@ snapshots: dependencies: postcss: 8.5.10 + postcss-initial@4.0.1(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-js@4.1.0(postcss@8.4.49): dependencies: camelcase-css: 2.0.1 @@ -54054,81 +55133,81 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.10 - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.2 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3) + ts-node: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3) - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@26.1.0)(typescript@5.9.3)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)): dependencies: lilconfig: 3.1.3 yaml: 2.8.2 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@26.1.0)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.2 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3) - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)): dependencies: lilconfig: 3.1.3 yaml: 2.8.2 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2) - postcss-load-config@4.0.2(postcss@8.5.10)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@5.6.3)): + postcss-load-config@4.0.2(postcss@8.5.10)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@6.0.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.2 optionalDependencies: postcss: 8.5.10 - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@5.6.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@6.0.3) - postcss-load-config@4.0.2(postcss@8.5.10)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.5.10)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)): dependencies: lilconfig: 3.1.3 yaml: 2.8.2 optionalDependencies: postcss: 8.5.10 - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) - postcss-load-config@4.0.2(postcss@8.5.15)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)): + postcss-load-config@4.0.2(postcss@8.5.15)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)): dependencies: lilconfig: 3.1.3 yaml: 2.8.2 optionalDependencies: postcss: 8.5.15 - ts-node: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3) + ts-node: 10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3) - postcss-load-config@4.0.2(postcss@8.5.15)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3)): + postcss-load-config@4.0.2(postcss@8.5.15)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)): dependencies: lilconfig: 3.1.3 yaml: 2.8.2 optionalDependencies: postcss: 8.5.15 - ts-node: 10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2) - postcss-loader@6.2.1(postcss@8.4.49)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + postcss-loader@6.2.1(postcss@8.4.49)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.4.49 semver: 7.6.3 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) - postcss-loader@8.2.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(postcss@8.5.10)(typescript@5.9.3)(webpack@5.104.1): + postcss-loader@8.2.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(postcss@8.5.10)(typescript@6.0.3)(webpack@5.104.1): dependencies: - cosmiconfig: 9.0.1(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@6.0.3) jiti: 2.6.1 postcss: 8.5.10 semver: 7.6.3 @@ -54142,12 +55221,22 @@ snapshots: dependencies: postcss: 8.5.10 + postcss-media-minmax@5.0.0(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-merge-longhand@6.0.5(postcss@8.5.10): dependencies: postcss: 8.5.10 postcss-value-parser: 4.2.0 stylehacks: 6.1.1(postcss@8.5.10) + postcss-merge-longhand@6.0.5(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + stylehacks: 6.1.1(postcss@8.5.15) + postcss-merge-longhand@7.0.5(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54156,15 +55245,23 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.5.10): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.4 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.5.10) postcss: 8.5.10 postcss-selector-parser: 6.1.2 + postcss-merge-rules@6.1.1(postcss@8.5.15): + dependencies: + browserslist: 4.28.4 + caniuse-api: 3.0.0 + cssnano-utils: 4.0.2(postcss@8.5.15) + postcss: 8.5.15 + postcss-selector-parser: 6.1.2 + postcss-merge-rules@7.0.8(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.4 caniuse-api: 3.0.0 cssnano-utils: 5.0.1(postcss@8.5.10) postcss: 8.5.10 @@ -54175,6 +55272,11 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-minify-font-values@6.1.0(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-minify-font-values@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54187,6 +55289,13 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-minify-gradients@6.0.3(postcss@8.5.15): + dependencies: + colord: 2.9.3 + cssnano-utils: 4.0.2(postcss@8.5.15) + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-minify-gradients@7.0.1(postcss@8.5.10): dependencies: colord: 2.9.3 @@ -54196,14 +55305,21 @@ snapshots: postcss-minify-params@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.4 cssnano-utils: 4.0.2(postcss@8.5.10) postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-minify-params@6.1.0(postcss@8.5.15): + dependencies: + browserslist: 4.28.4 + cssnano-utils: 4.0.2(postcss@8.5.15) + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-minify-params@7.0.6(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.4 cssnano-utils: 5.0.1(postcss@8.5.10) postcss: 8.5.10 postcss-value-parser: 4.2.0 @@ -54213,6 +55329,11 @@ snapshots: postcss: 8.5.10 postcss-selector-parser: 6.1.2 + postcss-minify-selectors@6.0.4(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-selector-parser: 6.1.2 + postcss-minify-selectors@7.0.6(postcss@8.5.10): dependencies: cssesc: 3.0.0 @@ -54302,10 +55423,21 @@ snapshots: postcss: 8.5.10 postcss-selector-parser: 6.1.2 + postcss-nesting@12.1.5(postcss@8.5.15): + dependencies: + '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.1.2) + '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2) + postcss: 8.5.15 + postcss-selector-parser: 6.1.2 + postcss-normalize-charset@6.0.2(postcss@8.5.10): dependencies: postcss: 8.5.10 + postcss-normalize-charset@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-normalize-charset@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54315,6 +55447,11 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-normalize-display-values@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-normalize-display-values@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54325,6 +55462,11 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-normalize-positions@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-normalize-positions@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54335,6 +55477,11 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-normalize-repeat-style@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-normalize-repeat-style@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54345,6 +55492,11 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-normalize-string@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-normalize-string@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54355,6 +55507,11 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-normalize-timing-functions@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-normalize-timing-functions@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54362,13 +55519,19 @@ snapshots: postcss-normalize-unicode@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.4 postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-normalize-unicode@6.1.0(postcss@8.5.15): + dependencies: + browserslist: 4.28.4 + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-normalize-unicode@7.0.6(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.4 postcss: 8.5.10 postcss-value-parser: 4.2.0 @@ -54377,6 +55540,11 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-normalize-url@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-normalize-url@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54387,6 +55555,11 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-normalize-whitespace@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-normalize-whitespace@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54398,6 +55571,12 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-ordered-values@6.0.2(postcss@8.5.15): + dependencies: + cssnano-utils: 4.0.2(postcss@8.5.15) + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-ordered-values@7.0.2(postcss@8.5.10): dependencies: cssnano-utils: 5.0.1(postcss@8.5.10) @@ -54408,15 +55587,25 @@ snapshots: dependencies: postcss: 8.5.10 + postcss-page-break@3.0.4(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-reduce-initial@6.1.0(postcss@8.5.10): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.4 caniuse-api: 3.0.0 postcss: 8.5.10 + postcss-reduce-initial@6.1.0(postcss@8.5.15): + dependencies: + browserslist: 4.28.4 + caniuse-api: 3.0.0 + postcss: 8.5.15 + postcss-reduce-initial@7.0.6(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.4 caniuse-api: 3.0.0 postcss: 8.5.10 @@ -54425,6 +55614,11 @@ snapshots: postcss: 8.5.10 postcss-value-parser: 4.2.0 + postcss-reduce-transforms@6.0.2(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + postcss-reduce-transforms@7.0.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54451,6 +55645,12 @@ snapshots: postcss-value-parser: 4.2.0 svgo: 3.3.3 + postcss-svgo@6.0.3(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-value-parser: 4.2.0 + svgo: 3.3.3 + postcss-svgo@7.1.1(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54462,6 +55662,11 @@ snapshots: postcss: 8.5.10 postcss-selector-parser: 6.1.2 + postcss-unique-selectors@6.0.4(postcss@8.5.15): + dependencies: + postcss: 8.5.15 + postcss-selector-parser: 6.1.2 + postcss-unique-selectors@7.0.5(postcss@8.5.10): dependencies: postcss: 8.5.10 @@ -54479,7 +55684,7 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -54613,12 +55818,20 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + property-information@5.6.0: dependencies: xtend: 4.0.2 property-information@7.1.0: {} + protocols@2.0.2: {} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -56187,13 +57400,17 @@ snapshots: - bufferutil - utf-8-validate - react-docgen-typescript@2.4.0(typescript@5.9.3): + react-docgen-typescript@2.4.0(typescript@6.0.3): dependencies: - typescript: 5.9.3 + typescript: 6.0.3 + + react-docgen-typescript@2.4.0(typescript@7.0.2): + dependencies: + typescript: 7.0.2 react-docgen@6.0.0-alpha.3: dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.29.7 '@babel/generator': 7.29.7 ast-types: 0.14.2 commander: 2.20.3 @@ -56208,9 +57425,9 @@ snapshots: react-docgen@7.1.1: dependencies: - '@babel/core': 7.29.0 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 + '@babel/core': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 '@types/doctrine': 0.0.9 @@ -56267,16 +57484,6 @@ snapshots: react-dom: 19.2.4(react@19.2.4) react-is: 18.1.0 - react-error-boundary@4.1.2(react@18.3.1): - dependencies: - '@babel/runtime': 7.28.2 - react: 18.3.1 - - react-error-boundary@4.1.2(react@19.2.7): - dependencies: - '@babel/runtime': 7.28.2 - react: 19.2.7 - react-error-boundary@5.0.0(react@18.3.1): dependencies: '@babel/runtime': 7.28.2 @@ -56331,16 +57538,16 @@ snapshots: optionalDependencies: react-dom: 19.2.4(react@19.2.4) - react-i18next@16.5.0(i18next@25.7.3(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.3): + react-i18next@16.5.0(i18next@25.7.3(typescript@6.0.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@6.0.3): dependencies: '@babel/runtime': 7.28.2 html-parse-stringify: 3.0.1 - i18next: 25.7.3(typescript@5.6.3) + i18next: 25.7.3(typescript@6.0.3) react: 18.3.1 use-sync-external-store: 1.6.0(react@18.3.1) optionalDependencies: react-dom: 18.3.1(react@18.3.1) - typescript: 5.6.3 + typescript: 6.0.3 react-is@16.13.1: {} @@ -56354,16 +57561,16 @@ snapshots: react-lazy-with-preload@2.2.1: {} - react-native@0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@5.0.4))(@types/react@19.2.14)(react@19.1.0): + react-native@0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@7.0.2))(@types/react@19.2.14)(react@19.1.0): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.80.0 '@react-native/codegen': 0.80.0(@babel/core@7.29.0) - '@react-native/community-cli-plugin': 0.80.0(@react-native-community/cli@19.1.2(typescript@5.0.4)) + '@react-native/community-cli-plugin': 0.80.0(@react-native-community/cli@19.1.2(typescript@7.0.2)) '@react-native/gradle-plugin': 0.80.0 '@react-native/js-polyfills': 0.80.0 '@react-native/normalize-colors': 0.80.0 - '@react-native/virtualized-lists': 0.80.0(@types/react@19.2.14)(react-native@0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@5.0.4))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0) + '@react-native/virtualized-lists': 0.80.0(@types/react@19.2.14)(react-native@0.80.0(@babel/core@7.29.0)(@react-native-community/cli@19.1.2(typescript@7.0.2))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -56401,16 +57608,16 @@ snapshots: - supports-color - utf-8-validate - react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@5.9.3))(@types/react@19.2.14)(react@19.1.0): + react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@6.0.3))(@types/react@19.2.14)(react@19.1.0): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.80.0 '@react-native/codegen': 0.80.0(@babel/core@7.29.7) - '@react-native/community-cli-plugin': 0.80.0(@react-native-community/cli@19.1.2(typescript@5.9.3)) + '@react-native/community-cli-plugin': 0.80.0(@react-native-community/cli@19.1.2(typescript@6.0.3)) '@react-native/gradle-plugin': 0.80.0 '@react-native/js-polyfills': 0.80.0 '@react-native/normalize-colors': 0.80.0 - '@react-native/virtualized-lists': 0.80.0(@types/react@19.2.14)(react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@5.9.3))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0) + '@react-native/virtualized-lists': 0.80.0(@types/react@19.2.14)(react-native@0.80.0(@babel/core@7.29.7)(@react-native-community/cli@19.1.2(typescript@6.0.3))(@types/react@19.2.14)(react@19.1.0))(react@19.1.0) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -56724,40 +57931,34 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) - react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - acorn-loose: 8.5.2 - neo-async: 2.6.2 + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) - webpack-sources: 3.5.0 - react-server-dom-webpack@19.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))): + react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - acorn-loose: 8.5.2 - neo-async: 2.6.2 + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) - webpack-sources: 3.5.0 - react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + react-server-dom-webpack@19.2.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: acorn-loose: 8.5.2 neo-async: 2.6.2 react: 19.2.4 react-dom: 19.2.4(react@19.2.4) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) webpack-sources: 3.5.0 - react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + react-server-dom-webpack@19.2.4(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: acorn-loose: 8.5.2 neo-async: 2.6.2 react: 19.2.7 react-dom: 19.2.7(react@19.2.7) - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-sources: 3.5.0 react-shadow@20.6.0(prop-types@15.8.1)(react-dom@17.0.2(react@17.0.2))(react@17.0.2): @@ -56978,10 +58179,10 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.16.0): + recma-jsx@1.0.1(acorn@8.17.0): dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -57006,10 +58207,10 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 - reduce-configs@1.1.1: {} - reduce-configs@1.1.2: {} + reduce-configs@2.0.1: {} + reduce-flatten@2.0.0: {} redux-promise-middleware@6.2.0(redux@4.2.1): @@ -57344,6 +58545,8 @@ snapshots: ret@0.1.15: {} + retry@0.12.0: {} + retry@0.13.1: {} reusify@1.1.0: {} @@ -57374,11 +58577,11 @@ snapshots: robust-predicates@3.0.3: {} - rock@0.13.0(typescript@5.0.4): + rock@0.14.1(typescript@7.0.2): dependencies: - '@react-native-community/cli-config': 20.1.3(typescript@5.0.4) - '@rock-js/config': 0.13.0 - '@rock-js/tools': 0.13.0 + '@react-native-community/cli-config': 20.1.3(typescript@7.0.2) + '@rock-js/config': 0.14.1 + '@rock-js/tools': 0.14.1 adm-zip: 0.5.16 commander: 12.1.0 tar: 7.5.11 @@ -57386,7 +58589,7 @@ snapshots: transitivePeerDependencies: - typescript - rolldown-plugin-dts@0.22.5(rolldown@1.0.0-rc.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)): + rolldown-plugin-dts@0.22.5(rolldown@1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1))(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)): dependencies: '@babel/generator': 8.0.0-rc.2 '@babel/helper-validator-identifier': 8.0.0-rc.2 @@ -57397,14 +58600,32 @@ snapshots: dts-resolver: 2.1.3 get-tsconfig: 4.13.6 obug: 2.1.1 - rolldown: 1.0.0-rc.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + rolldown: 1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optionalDependencies: - typescript: 5.9.3 - vue-tsc: 2.2.12(typescript@5.9.3) + typescript: 6.0.3 + vue-tsc: 2.2.12(typescript@6.0.3) + transitivePeerDependencies: + - oxc-resolver + + rolldown-plugin-dts@0.22.5(rolldown@1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@6.0.3)): + dependencies: + '@babel/generator': 8.0.0-rc.2 + '@babel/helper-validator-identifier': 8.0.0-rc.2 + '@babel/parser': 8.0.0-rc.2 + '@babel/types': 8.0.0-rc.2 + ast-kit: 3.0.0-beta.1 + birpc: 4.0.0 + dts-resolver: 2.1.3 + get-tsconfig: 4.13.6 + obug: 2.1.1 + rolldown: 1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optionalDependencies: + typescript: 7.0.2 + vue-tsc: 2.2.12(typescript@6.0.3) transitivePeerDependencies: - oxc-resolver - rolldown@1.0.0-rc.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + rolldown@1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1): dependencies: '@oxc-project/types': 0.112.0 '@rolldown/pluginutils': 1.0.0-rc.3 @@ -57419,14 +58640,14 @@ snapshots: '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.3 '@rolldown/binding-linux-x64-musl': 1.0.0-rc.3 '@rolldown/binding-openharmony-arm64': 1.0.0-rc.3 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.3 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.3 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' - rolldown@1.0.0-rc.9(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + rolldown@1.0.0-rc.9(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1): dependencies: '@oxc-project/types': 0.115.0 '@rolldown/pluginutils': 1.0.0-rc.9 @@ -57443,7 +58664,7 @@ snapshots: '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.9 '@rolldown/binding-linux-x64-musl': 1.0.0-rc.9 '@rolldown/binding-openharmony-arm64': 1.0.0-rc.9 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.9(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.9(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9 transitivePeerDependencies: @@ -57458,7 +58679,7 @@ snapshots: globby: 10.0.1 is-plain-object: 3.0.1 - rollup-plugin-typescript2@0.36.0(rollup@4.59.0)(typescript@5.9.3): + rollup-plugin-typescript2@0.36.0(rollup@4.59.0)(typescript@7.0.2): dependencies: '@rollup/pluginutils': 4.2.1 find-cache-dir: 3.3.2 @@ -57466,7 +58687,7 @@ snapshots: rollup: 4.59.0 semver: 7.6.3 tslib: 2.8.1 - typescript: 5.9.3 + typescript: 7.0.2 rollup@4.59.0: dependencies: @@ -57516,61 +58737,49 @@ snapshots: transitivePeerDependencies: - supports-color - rsbuild-plugin-dts@0.10.6(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@1.4.16(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3): + rsbuild-plugin-dts@0.12.4(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@1.5.17(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1))(typescript@7.0.2): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 1.4.16(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@rsbuild/core': 1.5.17(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) magic-string: 0.30.21 picocolors: 1.1.1 tinyglobby: 0.2.15 tsconfig-paths: 4.2.0 optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) - typescript: 5.9.3 + typescript: 7.0.2 - rsbuild-plugin-dts@0.12.4(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3): + rsbuild-plugin-dts@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1))(typescript@6.0.3): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - magic-string: 0.30.21 - picocolors: 1.1.1 - tinyglobby: 0.2.15 - tsconfig-paths: 4.2.0 + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) - typescript: 5.9.3 + typescript: 6.0.3 - rsbuild-plugin-dts@0.12.4(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(@rsbuild/core@1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.6.3): + rsbuild-plugin-dts@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(typescript@6.0.3): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - magic-string: 0.30.21 - picocolors: 1.1.1 - tinyglobby: 0.2.15 - tsconfig-paths: 4.2.0 + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@22.19.15) - typescript: 5.6.3 + '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) + typescript: 6.0.3 - rsbuild-plugin-dts@0.12.4(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@rsbuild/core@1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3): + rsbuild-plugin-dts@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(typescript@6.0.3): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 1.5.17(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - magic-string: 0.30.21 - picocolors: 1.1.1 - tinyglobby: 0.2.15 - tsconfig-paths: 4.2.0 + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@26.1.0) - typescript: 5.9.3 + '@microsoft/api-extractor': 7.57.7(@types/node@22.19.15) + typescript: 6.0.3 - rsbuild-plugin-dts@0.18.5(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@rsbuild/core@1.7.3)(typescript@5.9.3): + rsbuild-plugin-dts@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(typescript@7.0.2): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 1.7.3 + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@26.1.0) - typescript: 5.9.3 + typescript: 7.0.2 rsbuild-plugin-dts@0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@rsbuild/core@1.4.0-beta.2)(typescript@5.9.3): dependencies: @@ -57584,12 +58793,12 @@ snapshots: '@microsoft/api-extractor': 7.57.7(@types/node@26.1.0) typescript: 5.9.3 - rsbuild-plugin-html-minifier-terser@1.1.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)): + rsbuild-plugin-html-minifier-terser@1.1.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)): dependencies: '@types/html-minifier-terser': 7.0.2 html-minifier-terser: 7.2.0 optionalDependencies: - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) rsbuild-plugin-publint@0.2.1(@rsbuild/core@1.7.3): dependencies: @@ -57598,41 +58807,63 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.3 + rsbuild-plugin-rsc@0.1.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + dependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + react-server-dom-rspack: 0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + + rsbuild-plugin-rsc@0.1.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + dependencies: + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + react-server-dom-rspack: 0.0.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rslog@1.2.3: {} rslog@1.3.2: {} rspack-manifest-plugin@5.0.3(@rspack/core@1.7.9(@swc/helpers@0.5.17)): dependencies: - '@rspack/lite-tapable': 1.1.0 + '@rspack/lite-tapable': 1.1.2 optionalDependencies: '@rspack/core': 1.7.9(@swc/helpers@0.5.17) rspack-manifest-plugin@5.0.3(@rspack/core@1.7.9(@swc/helpers@0.5.19)): dependencies: - '@rspack/lite-tapable': 1.1.0 + '@rspack/lite-tapable': 1.1.2 optionalDependencies: '@rspack/core': 1.7.9(@swc/helpers@0.5.19) - rspack-manifest-plugin@5.2.1(@rspack/core@1.3.9(@swc/helpers@0.5.13)): + rspack-manifest-plugin@5.2.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17)): dependencies: - '@rspack/lite-tapable': 1.1.0 + '@rspack/lite-tapable': 1.1.2 optionalDependencies: - '@rspack/core': 1.3.9(@swc/helpers@0.5.13) + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17) - rspack-manifest-plugin@5.2.1(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17)): + rspack-manifest-plugin@5.2.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23)): dependencies: - '@rspack/lite-tapable': 1.1.0 + '@rspack/lite-tapable': 1.1.2 optionalDependencies: - '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17) + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) - rspack-vue-loader@17.5.0(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.9.3)): + rspack-vue-loader@17.5.1(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@5.0.4)): dependencies: - '@rspack/lite-tapable': 1.1.0 + '@rspack/lite-tapable': 1.1.2 chalk: 4.1.2 optionalDependencies: - '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23) - vue: 3.5.30(typescript@5.9.3) + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + vue: 3.5.30(typescript@5.0.4) + + rspack-vue-loader@17.5.1(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)): + dependencies: + '@rspack/lite-tapable': 1.1.2 + chalk: 4.1.2 + optionalDependencies: + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + vue: 3.5.30(typescript@7.0.2) + + rstest-fetch-mock@0.1.0(@rstest/core@0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1)(jsdom@20.0.3)): + dependencies: + '@rstest/core': 0.10.6(@module-federation/runtime-tools@2.8.0)(core-js@3.36.1)(jsdom@20.0.3) run-applescript@7.1.0: {} @@ -57868,14 +59099,14 @@ snapshots: sass-embedded: 1.100.0 webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) - sass-loader@16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.23))(sass-embedded@1.98.0)(sass@1.98.0)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + sass-loader@16.0.7(@rspack/core@1.6.8(@swc/helpers@0.5.23))(sass-embedded@1.98.0)(sass@1.98.0)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: neo-async: 2.6.2 optionalDependencies: '@rspack/core': 1.6.8(@swc/helpers@0.5.23) sass: 1.98.0 sass-embedded: 1.98.0 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) sass@1.100.0: dependencies: @@ -57988,6 +59219,7 @@ snapshots: semver@7.5.4: dependencies: lru-cache: 6.0.0 + optional: true semver@7.6.3: {} @@ -58033,6 +59265,8 @@ snapshots: dependencies: randombytes: 2.1.0 + serialize-javascript@7.0.7: {} + serve-handler@6.1.6: dependencies: bytes: 3.0.0 @@ -58341,11 +59575,11 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@5.0.0(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + source-map-loader@5.0.0(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) source-map-resolve@0.5.3: dependencies: @@ -58495,18 +59729,18 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - storybook-addon-rslib@1.0.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rslib/core@0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3))(storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@5.9.3))(typescript@5.9.3): + storybook-addon-rslib@1.0.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2))(storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@7.0.2))(typescript@7.0.2): dependencies: - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@rslib/core': 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(typescript@5.9.3) - storybook-builder-rsbuild: 1.0.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@5.9.3) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@rslib/core': 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.1.0))(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)(typescript@7.0.2) + storybook-builder-rsbuild: 1.0.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@7.0.2) optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 - storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@5.9.3): + storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@7.0.2): dependencies: - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@rsbuild/plugin-type-check': 1.3.4(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@5.9.3) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@rsbuild/plugin-type-check': 1.5.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2) '@storybook/addon-docs': 8.6.18(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1)) '@storybook/core-webpack': 8.6.18(storybook@8.6.17(prettier@3.8.1)) browser-assert: 1.2.1 @@ -58518,7 +59752,7 @@ snapshots: magic-string: 0.30.21 path-browserify: 1.0.1 process: 0.11.10 - rsbuild-plugin-html-minifier-terser: 1.1.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0)) + rsbuild-plugin-html-minifier-terser: 1.1.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0)) sirv: 2.0.4 storybook: 8.6.17(prettier@3.8.1) ts-dedent: 2.2.0 @@ -58526,35 +59760,37 @@ snapshots: util: 0.12.5 util-deprecate: 1.0.2 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - '@rspack/core' - '@types/react' + - '@typescript/native-preview' - tslib - storybook-react-rsbuild@1.0.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4)): + storybook-react-rsbuild@1.0.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.59.0)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - '@rsbuild/core': 2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0) - '@storybook/react': 8.6.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.17(prettier@3.8.1))(typescript@5.9.3) - '@storybook/react-docgen-typescript-plugin': 1.0.1(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4)) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + '@storybook/react': 8.6.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.6.17(prettier@3.8.1))(typescript@7.0.2) + '@storybook/react-docgen-typescript-plugin': 1.0.1(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4)) '@types/node': 18.19.130 find-up: 5.0.0 magic-string: 0.30.21 react: 18.3.1 react-docgen: 7.1.1 - react-docgen-typescript: 2.4.0(typescript@5.9.3) + react-docgen-typescript: 2.4.0(typescript@7.0.2) react-dom: 18.3.1(react@18.3.1) resolve: 1.22.11 storybook: 8.6.17(prettier@3.8.1) - storybook-builder-rsbuild: 1.0.3(@rsbuild/core@2.0.14(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(core-js@3.49.0))(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@5.9.3) + storybook-builder-rsbuild: 1.0.3(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))(tslib@2.8.1)(typescript@7.0.2) tsconfig-paths: 4.2.0 optionalDependencies: - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - '@rspack/core' - '@storybook/test' - '@types/react' + - '@typescript/native-preview' - rollup - supports-color - tslib @@ -58771,7 +60007,7 @@ snapshots: strip-literal@1.3.0: dependencies: - acorn: 8.16.0 + acorn: 8.17.0 strip-literal@2.1.1: dependencies: @@ -58787,9 +60023,9 @@ snapshots: style-inject@0.3.0: {} - style-loader@3.3.4(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + style-loader@3.3.4(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) style-loader@3.3.4(webpack@5.104.1): dependencies: @@ -58810,7 +60046,7 @@ snapshots: styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4): dependencies: '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) - '@babel/traverse': 7.29.0(supports-color@5.5.0) + '@babel/traverse': 7.29.7(supports-color@5.5.0) '@emotion/is-prop-valid': 1.4.0 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 @@ -58828,7 +60064,7 @@ snapshots: styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.7(react@19.2.7))(react-is@18.3.1)(react@19.2.7): dependencies: '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) - '@babel/traverse': 7.29.0(supports-color@5.5.0) + '@babel/traverse': 7.29.7(supports-color@5.5.0) '@emotion/is-prop-valid': 1.4.0 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 @@ -58936,13 +60172,19 @@ snapshots: stylehacks@6.1.1(postcss@8.5.10): dependencies: - browserslist: 4.24.4 + browserslist: 4.28.4 postcss: 8.5.10 postcss-selector-parser: 6.1.2 + stylehacks@6.1.1(postcss@8.5.15): + dependencies: + browserslist: 4.28.4 + postcss: 8.5.15 + postcss-selector-parser: 6.1.2 + stylehacks@7.0.8(postcss@8.5.10): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.4 postcss: 8.5.10 postcss-selector-parser: 7.1.1 @@ -59045,11 +60287,11 @@ snapshots: tailwind-merge@3.6.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@5.6.3))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@6.0.3))): dependencies: - tailwindcss: 3.4.16(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@5.6.3)) + tailwindcss: 3.4.16(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@6.0.3)) - tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)): + tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -59068,7 +60310,7 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.1.0(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -59076,7 +60318,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@26.1.0)(typescript@5.9.3)): + tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -59095,7 +60337,7 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.1.0(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@26.1.0)(typescript@5.9.3)) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -59103,7 +60345,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3)): + tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -59122,7 +60364,7 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.1.0(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3)) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -59130,7 +60372,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)): + tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -59149,7 +60391,7 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.1.0(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3)) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -59157,7 +60399,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@5.6.3)): + tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@6.0.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -59176,7 +60418,7 @@ snapshots: postcss: 8.5.10 postcss-import: 15.1.0(postcss@8.5.10) postcss-js: 4.1.0(postcss@8.5.10) - postcss-load-config: 4.0.2(postcss@8.5.10)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@5.6.3)) + postcss-load-config: 4.0.2(postcss@8.5.10)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@6.0.3)) postcss-nested: 6.2.0(postcss@8.5.10) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -59184,7 +60426,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5)): + tailwindcss@3.4.3(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -59203,7 +60445,7 @@ snapshots: postcss: 8.5.10 postcss-import: 15.1.0(postcss@8.5.10) postcss-js: 4.1.0(postcss@8.5.10) - postcss-load-config: 4.0.2(postcss@8.5.10)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.5.10)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) postcss-nested: 6.2.0(postcss@8.5.10) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -59295,115 +60537,137 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + terser: 5.48.0 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.15.8(@swc/helpers@0.5.17) esbuild: 0.18.20 - terser-webpack-plugin@5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + terser: 5.48.0 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.15.8(@swc/helpers@0.5.17) esbuild: 0.25.5 - terser-webpack-plugin@5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.3.14(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + terser: 5.48.0 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.15.8(@swc/helpers@0.5.17) esbuild: 0.25.5 - terser-webpack-plugin@5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.17) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) esbuild: 0.25.5 - terser-webpack-plugin@5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4) optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.19) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) + esbuild: 0.28.1 + + terser-webpack-plugin@5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.0 + terser: 5.46.1 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + optionalDependencies: + '@swc/core': 1.15.41(@swc/helpers@0.5.19) esbuild: 0.18.20 - terser-webpack-plugin@5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.19) + '@swc/core': 1.15.41(@swc/helpers@0.5.19) esbuild: 0.25.5 - terser-webpack-plugin@5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) + '@swc/core': 1.15.41(@swc/helpers@0.5.23) esbuild: 0.25.5 - terser-webpack-plugin@5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))): + terser-webpack-plugin@5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)) optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) + '@swc/core': 1.15.41(@swc/helpers@0.5.23) esbuild: 0.28.1 - terser-webpack-plugin@5.4.0(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4) + optionalDependencies: + '@swc/core': 1.15.41(@swc/helpers@0.5.23) + esbuild: 0.28.1 + + terser-webpack-plugin@5.4.0(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.0 + terser: 5.46.1 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.15.8(@swc/helpers@0.5.17) esbuild: 0.18.20 - terser-webpack-plugin@5.4.0(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + terser-webpack-plugin@5.4.0(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.0 terser: 5.46.1 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.15.8(@swc/helpers@0.5.17) esbuild: 0.25.5 @@ -59437,6 +60701,13 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + terser@5.48.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.17.0 + commander: 2.20.3 + source-map-support: 0.5.21 + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -59610,83 +60881,67 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.4.3(typescript@5.0.4): - dependencies: - typescript: 5.0.4 - ts-api-utils@1.4.3(typescript@5.9.3): dependencies: typescript: 5.9.3 - ts-api-utils@2.4.0(typescript@5.4.5): - dependencies: - typescript: 5.4.5 - - ts-api-utils@2.4.0(typescript@5.6.3): + ts-api-utils@1.4.3(typescript@7.0.2): dependencies: - typescript: 5.6.3 + typescript: 7.0.2 - ts-api-utils@2.4.0(typescript@5.9.3): + ts-api-utils@2.4.0(typescript@6.0.3): dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - ts-checker-rspack-plugin@1.3.0(@rspack/core@1.3.9(@swc/helpers@0.5.13))(tslib@2.8.1)(typescript@5.0.4): + ts-api-utils@2.4.0(typescript@7.0.2): dependencies: - '@rspack/lite-tapable': 1.1.0 - chokidar: 3.6.0 - memfs: 4.56.11(tslib@2.8.1) - picocolors: 1.1.1 - typescript: 5.0.4 - optionalDependencies: - '@rspack/core': 1.3.9(@swc/helpers@0.5.13) - transitivePeerDependencies: - - tslib + typescript: 7.0.2 - ts-checker-rspack-plugin@1.3.0(@rspack/core@1.7.9(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@5.9.3): + ts-checker-rspack-plugin@1.3.0(@rspack/core@1.7.9(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2): dependencies: - '@rspack/lite-tapable': 1.1.0 + '@rspack/lite-tapable': 1.1.2 chokidar: 3.6.0 memfs: 4.56.11(tslib@2.8.1) picocolors: 1.1.1 - typescript: 5.9.3 + typescript: 7.0.2 optionalDependencies: '@rspack/core': 1.7.9(@swc/helpers@0.5.17) transitivePeerDependencies: - tslib - ts-checker-rspack-plugin@1.3.0(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@5.9.3): + ts-checker-rspack-plugin@1.3.0(@rspack/core@1.7.9(@swc/helpers@0.5.19))(tslib@2.8.1)(typescript@7.0.2): dependencies: - '@rspack/lite-tapable': 1.1.0 + '@rspack/lite-tapable': 1.1.2 chokidar: 3.6.0 memfs: 4.56.11(tslib@2.8.1) picocolors: 1.1.1 - typescript: 5.9.3 + typescript: 7.0.2 optionalDependencies: '@rspack/core': 1.7.9(@swc/helpers@0.5.19) transitivePeerDependencies: - tslib - ts-checker-rspack-plugin@1.3.0(@rspack/core@2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@5.9.3): + ts-checker-rspack-plugin@1.5.1(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2): dependencies: - '@rspack/lite-tapable': 1.1.0 + '@rspack/lite-tapable': 1.1.2 chokidar: 3.6.0 - memfs: 4.56.11(tslib@2.8.1) + memfs: 4.58.0(tslib@2.8.1) picocolors: 1.1.1 - typescript: 5.9.3 + typescript: 7.0.2 optionalDependencies: - '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.0))(@swc/helpers@0.5.17) + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.17) transitivePeerDependencies: - tslib - ts-checker-rspack-plugin@1.3.0(@rspack/core@2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@5.9.3): + ts-checker-rspack-plugin@1.5.1(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2): dependencies: - '@rspack/lite-tapable': 1.1.0 + '@rspack/lite-tapable': 1.1.2 chokidar: 3.6.0 - memfs: 4.56.11(tslib@2.8.1) + memfs: 4.58.0(tslib@2.8.1) picocolors: 1.1.1 - typescript: 5.9.3 + typescript: 7.0.2 optionalDependencies: - '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.6.0(node-fetch@3.3.2))(@swc/helpers@0.5.23) + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) transitivePeerDependencies: - tslib @@ -59698,17 +60953,17 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.1.5(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.28.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.1.5(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(esbuild@0.28.1)(jest@29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)))(typescript@6.0.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + jest: 29.7.0(@types/node@20.19.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.9.3 + typescript: 6.0.3 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.29.0 @@ -59717,60 +60972,40 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.29.0) esbuild: 0.28.1 - ts-loader@9.4.4(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + ts-loader@9.4.4(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.20.1 micromatch: 4.0.8 semver: 7.6.3 - typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + typescript: 7.0.2 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) - ts-loader@9.4.4(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + ts-loader@9.4.4(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.20.1 micromatch: 4.0.8 semver: 7.6.3 - typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + typescript: 7.0.2 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) - ts-loader@9.5.4(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + ts-loader@9.5.4(typescript@7.0.2)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.20.1 micromatch: 4.0.8 semver: 7.6.3 source-map: 0.7.6 - typescript: 5.9.3 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + typescript: 7.0.2 + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) ts-morph@12.0.0: dependencies: '@ts-morph/common': 0.11.1 code-block-writer: 10.1.1 - ts-node@10.8.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.12 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.5 - acorn: 8.16.0 - acorn-walk: 8.3.5 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.4 - make-error: 1.3.6 - typescript: 5.0.4 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) - - ts-node@10.9.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@14.18.33)(typescript@4.9.5): + ts-node@10.9.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@14.18.33)(typescript@4.9.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -59788,9 +61023,9 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) + '@swc/core': 1.15.41(@swc/helpers@0.5.23) - ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3): + ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -59804,33 +61039,13 @@ snapshots: create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.9.3 + typescript: 6.0.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: '@swc/core': 1.7.26(@swc/helpers@0.5.13) - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@20.19.5)(typescript@5.9.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.12 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.5 - acorn: 8.16.0 - acorn-walk: 8.3.5 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.4 - make-error: 1.3.6 - typescript: 5.9.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.17) - - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@5.6.3): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@22.19.15)(typescript@6.0.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -59838,62 +61053,20 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 22.19.15 - acorn: 8.16.0 - acorn-walk: 8.3.5 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.4 - make-error: 1.3.6 - typescript: 5.6.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.17) - optional: true - - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@5.9.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.12 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 26.1.0 - acorn: 8.16.0 - acorn-walk: 8.3.5 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.4 - make-error: 1.3.6 - typescript: 5.9.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.17) - optional: true - - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@5.9.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.12 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.5 - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.9.3 + typescript: 6.0.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.19) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) optional: true - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.19))(@types/node@26.1.0)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.1.0)(typescript@7.0.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -59901,20 +61074,20 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 26.1.0 - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.9.3 + typescript: 7.0.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.19) + '@swc/core': 1.15.41(@swc/helpers@0.5.17) optional: true - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.0.4): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.19))(@types/node@20.19.5)(typescript@7.0.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -59922,20 +61095,20 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.19.5 - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.0.4 + typescript: 7.0.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) + '@swc/core': 1.15.41(@swc/helpers@0.5.19) optional: true - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@6.0.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -59943,20 +61116,19 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.19.5 - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.4.5 + typescript: 6.0.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) - optional: true + '@swc/core': 1.15.41(@swc/helpers@0.5.23) - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -59964,19 +61136,19 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.19.5 - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.9.3 + typescript: 7.0.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) + '@swc/core': 1.15.41(@swc/helpers@0.5.23) - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.0.4): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -59984,20 +61156,20 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 26.1.0 - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.0.4 + typescript: 5.9.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) + '@swc/core': 1.15.41(@swc/helpers@0.5.23) optional: true - ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.1.0)(typescript@7.0.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -60005,26 +61177,26 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 26.1.0 - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.9.3 + typescript: 7.0.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) + '@swc/core': 1.15.41(@swc/helpers@0.5.23) optional: true ts-regex-builder@1.8.2: {} ts-toolbelt@6.15.5: {} - tsconfck@2.1.2(typescript@5.9.3): + tsconfck@2.1.2(typescript@6.0.3): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 tsconfig-paths-webpack-plugin@4.1.0: dependencies: @@ -60059,7 +61231,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.20.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(publint@0.3.18)(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)): + tsdown@0.20.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(publint@0.3.18)(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)): dependencies: ansis: 4.2.0 cac: 6.7.14 @@ -60069,17 +61241,47 @@ snapshots: import-without-cache: 0.2.5 obug: 2.1.1 picomatch: 4.0.3 - rolldown: 1.0.0-rc.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) - rolldown-plugin-dts: 0.22.5(rolldown@1.0.0-rc.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(typescript@5.9.3)(vue-tsc@2.2.12(typescript@5.9.3)) + rolldown: 1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + rolldown-plugin-dts: 0.22.5(rolldown@1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1))(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)) semver: 7.7.4 tinyexec: 1.0.4 tinyglobby: 0.2.15 tree-kill: 1.2.2 unconfig-core: 7.5.0 - unrun: 0.2.32(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + unrun: 0.2.32(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) optionalDependencies: publint: 0.3.18 - typescript: 5.9.3 + typescript: 6.0.3 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + - '@ts-macro/tsc' + - '@typescript/native-preview' + - oxc-resolver + - synckit + - vue-tsc + + tsdown@0.20.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)(publint@0.3.18)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@6.0.3)): + dependencies: + ansis: 4.2.0 + cac: 6.7.14 + defu: 6.1.4 + empathic: 2.0.0 + hookable: 6.1.0 + import-without-cache: 0.2.5 + obug: 2.1.1 + picomatch: 4.0.3 + rolldown: 1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + rolldown-plugin-dts: 0.22.5(rolldown@1.0.0-rc.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1))(typescript@7.0.2)(vue-tsc@2.2.12(typescript@6.0.3)) + semver: 7.7.4 + tinyexec: 1.0.4 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + unconfig-core: 7.5.0 + unrun: 0.2.32(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) + optionalDependencies: + publint: 0.3.18 + typescript: 7.0.2 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -60099,7 +61301,7 @@ snapshots: tsscmp@1.0.6: {} - tsup@7.3.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(postcss@8.5.15)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3))(typescript@5.9.3): + tsup@7.3.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(postcss@8.5.15)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(typescript@7.0.2): dependencies: bundle-require: 4.2.1(esbuild@0.19.12) cac: 6.7.14 @@ -60109,21 +61311,21 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.5.15)(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@5.9.3)) + postcss-load-config: 4.0.2(postcss@8.5.15)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2)) resolve-from: 5.0.0 rollup: 4.59.0 source-map: 0.8.0-beta.0 sucrase: 3.35.1 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.15.10(@swc/helpers@0.5.23) + '@swc/core': 1.15.41(@swc/helpers@0.5.23) postcss: 8.5.15 - typescript: 5.9.3 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - ts-node - tsup@7.3.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(postcss@8.5.15)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3))(typescript@5.9.3): + tsup@7.3.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(postcss@8.5.15)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3))(typescript@6.0.3): dependencies: bundle-require: 4.2.1(esbuild@0.19.12) cac: 6.7.14 @@ -60133,7 +61335,7 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.5.15)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@5.9.3)) + postcss-load-config: 4.0.2(postcss@8.5.15)(ts-node@10.9.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(@types/node@20.19.5)(typescript@6.0.3)) resolve-from: 5.0.0 rollup: 4.59.0 source-map: 0.8.0-beta.0 @@ -60142,20 +61344,15 @@ snapshots: optionalDependencies: '@swc/core': 1.7.26(@swc/helpers@0.5.13) postcss: 8.5.15 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - ts-node - tsutils@3.21.0(typescript@5.0.4): - dependencies: - tslib: 1.14.1 - typescript: 5.0.4 - - tsutils@3.21.0(typescript@5.9.3): + tsutils@3.21.0(typescript@7.0.2): dependencies: tslib: 1.14.1 - typescript: 5.9.3 + typescript: 7.0.2 tsyringe@4.10.0: dependencies: @@ -60254,13 +61451,13 @@ snapshots: typedarray@0.0.6: {} - typedoc@0.28.17(typescript@5.9.3): + typedoc@0.28.17(typescript@6.0.3): dependencies: '@gerrit0/mini-shiki': 3.23.0 lunr: 2.3.9 markdown-it: 14.1.1 minimatch: 9.0.9 - typescript: 5.9.3 + typescript: 6.0.3 yaml: 2.8.2 types-react-dom@19.0.0-rc.1: @@ -60271,25 +61468,25 @@ snapshots: dependencies: csstype: 3.2.3 - typescript-eslint@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5): + typescript-eslint@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5))(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/parser': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.4.5) - '@typescript-eslint/utils': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2))(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) + '@typescript-eslint/parser': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@7.0.2) + '@typescript-eslint/utils': 8.57.1(eslint@9.26.0(jiti@2.6.1))(typescript@7.0.2) eslint: 9.26.0(jiti@2.6.1) - typescript: 5.4.5 + typescript: 7.0.2 transitivePeerDependencies: - supports-color - typescript-eslint@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3): + typescript-eslint@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3))(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3) - '@typescript-eslint/parser': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3) - '@typescript-eslint/typescript-estree': 8.57.1(typescript@5.6.3) - '@typescript-eslint/utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.57.1(@typescript-eslint/parser@8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3))(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.3) + '@typescript-eslint/utils': 8.57.1(eslint@9.39.3(jiti@2.6.1))(typescript@6.0.3) eslint: 9.39.3(jiti@2.6.1) - typescript: 5.6.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -60297,14 +61494,36 @@ snapshots: typescript@5.0.4: {} - typescript@5.4.5: {} - - typescript@5.6.3: {} - - typescript@5.8.2: {} + typescript@5.8.2: + optional: true typescript@5.9.3: {} + typescript@6.0.3: {} + + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 + typical@4.0.0: {} typical@5.2.0: {} @@ -60553,9 +61772,9 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unrun@0.2.32(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + unrun@0.2.32(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1): dependencies: - rolldown: 1.0.0-rc.9(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + rolldown: 1.0.0-rc.9(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -60583,6 +61802,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.4): dependencies: browserslist: 4.28.4 @@ -60730,14 +61955,14 @@ snapshots: - '@types/react' - '@types/react-dom' - vercel@34.0.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(encoding@0.1.13): + vercel@34.0.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(encoding@0.1.13): dependencies: '@vercel/build-utils': 7.11.0 '@vercel/fun': 1.1.0(encoding@0.1.13) '@vercel/go': 3.1.1 '@vercel/hydrogen': 1.0.2 '@vercel/next': 4.2.0(encoding@0.1.13) - '@vercel/node': 3.0.26(@swc/core@1.15.10(@swc/helpers@0.5.23))(encoding@0.1.13) + '@vercel/node': 3.0.26(@swc/core@1.15.41(@swc/helpers@0.5.23))(encoding@0.1.13) '@vercel/python': 4.1.1 '@vercel/redwood': 2.0.8(encoding@0.1.13) '@vercel/remix-builder': 2.1.5(encoding@0.1.13) @@ -60814,31 +62039,13 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-node@1.2.2(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): - dependencies: - cac: 6.7.14 - debug: 4.4.3(supports-color@8.1.1) - pathe: 1.1.2 - picocolors: 1.1.1 - vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite-node@1.6.0(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): + vite-node@1.2.2(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) transitivePeerDependencies: - '@types/node' - less @@ -60850,13 +62057,13 @@ snapshots: - supports-color - terser - vite-node@1.6.0(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): + vite-node@1.6.0(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) transitivePeerDependencies: - '@types/node' - less @@ -60868,31 +62075,13 @@ snapshots: - supports-color - terser - vite-node@1.6.1(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): + vite-node@1.6.1(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite-node@1.6.1(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1): - dependencies: - cac: 6.7.14 - debug: 4.4.3(supports-color@8.1.1) - pathe: 1.1.2 - picocolors: 1.1.1 - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1) + vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0) transitivePeerDependencies: - '@types/node' - less @@ -60905,56 +62094,18 @@ snapshots: - terser optional: true - vite-plugin-dts@4.5.4(@types/node@20.19.5)(rollup@4.59.0)(typescript@5.9.3)(vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)): - dependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - '@volar/typescript': 2.4.28 - '@vue/language-core': 2.2.0(typescript@5.9.3) - compare-versions: 6.1.1 - debug: 4.4.3(supports-color@8.1.1) - kolorist: 1.8.0 - local-pkg: 1.1.2 - magic-string: 0.30.21 - typescript: 5.9.3 - optionalDependencies: - vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - transitivePeerDependencies: - - '@types/node' - - rollup - - supports-color - - vite-plugin-dts@4.5.4(@types/node@26.1.0)(rollup@4.59.0)(typescript@5.9.3)(vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)): - dependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@26.1.0) - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - '@volar/typescript': 2.4.28 - '@vue/language-core': 2.2.0(typescript@5.9.3) - compare-versions: 6.1.1 - debug: 4.4.3(supports-color@8.1.1) - kolorist: 1.8.0 - local-pkg: 1.1.2 - magic-string: 0.30.21 - typescript: 5.9.3 - optionalDependencies: - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - transitivePeerDependencies: - - '@types/node' - - rollup - - supports-color - - vite-tsconfig-paths@4.2.3(typescript@5.9.3)(vite@7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.2)): + vite-tsconfig-paths@4.2.3(typescript@6.0.3)(vite@7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0)): dependencies: debug: 4.4.3(supports-color@8.1.1) globrex: 0.1.2 - tsconfck: 2.1.2(typescript@5.9.3) + tsconfck: 2.1.2(typescript@6.0.3) optionalDependencies: - vite: 7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.2) + vite: 7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): + vite@5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 @@ -60965,9 +62116,9 @@ snapshots: less: 4.6.4 sass: 1.100.0 sass-embedded: 1.100.0 - terser: 5.46.1 + terser: 5.48.0 - vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): + vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 @@ -60978,9 +62129,9 @@ snapshots: less: 4.6.4 sass: 1.100.0 sass-embedded: 1.100.0 - terser: 5.46.1 + terser: 5.48.0 - vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1): + vite@5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 @@ -60991,10 +62142,10 @@ snapshots: less: 4.6.4 sass: 1.98.0 sass-embedded: 1.98.0 - terser: 5.46.1 + terser: 5.48.0 optional: true - vite@7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1)(yaml@2.8.2): + vite@7.3.5(@types/node@20.19.5)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -61009,10 +62160,10 @@ snapshots: less: 4.6.4 sass: 1.100.0 sass-embedded: 1.100.0 - terser: 5.46.1 - yaml: 2.8.2 + terser: 5.48.0 + yaml: 2.9.0 - vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1)(yaml@2.8.2): + vite@7.3.5(@types/node@26.1.0)(jiti@2.6.1)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -61027,18 +62178,11 @@ snapshots: less: 4.6.4 sass: 1.98.0 sass-embedded: 1.98.0 - terser: 5.46.1 - yaml: 2.8.2 + terser: 5.48.0 + yaml: 2.9.0 optional: true - vitest-fetch-mock@0.2.2(encoding@0.1.13)(vitest@1.6.0): - dependencies: - cross-fetch: 3.2.0(encoding@0.1.13) - vitest: 1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - transitivePeerDependencies: - - encoding - - vitest@1.2.2(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): + vitest@1.2.2(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0): dependencies: '@vitest/expect': 1.2.2 '@vitest/runner': 1.2.2 @@ -61058,8 +62202,8 @@ snapshots: strip-literal: 1.3.0 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vite-node: 1.2.2(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vite-node: 1.2.2(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 @@ -61076,7 +62220,7 @@ snapshots: - supports-color - terser - vitest@1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): + vitest@1.6.0(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -61095,8 +62239,8 @@ snapshots: strip-literal: 2.1.1 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vite-node: 1.6.0(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) + vite: 5.4.21(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vite-node: 1.6.0(@types/node@20.19.5)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 @@ -61113,44 +62257,7 @@ snapshots: - supports-color - terser - vitest@1.6.0(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): - dependencies: - '@vitest/expect': 1.6.0 - '@vitest/runner': 1.6.0 - '@vitest/snapshot': 1.6.0 - '@vitest/spy': 1.6.0 - '@vitest/utils': 1.6.0 - acorn-walk: 8.3.5 - chai: 4.5.0 - debug: 4.4.3(supports-color@8.1.1) - execa: 8.0.1 - local-pkg: 0.5.1 - magic-string: 0.30.21 - pathe: 1.1.2 - picocolors: 1.1.1 - std-env: 3.10.0 - strip-literal: 2.1.1 - tinybench: 2.9.0 - tinypool: 0.8.4 - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vite-node: 1.6.0(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - why-is-node-running: 2.3.0 - optionalDependencies: - '@edge-runtime/vm': 3.2.0 - '@types/node': 26.1.0 - '@vitest/ui': 1.6.0(vitest@1.6.0) - jsdom: 20.0.3 - transitivePeerDependencies: - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1): + vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0): dependencies: '@vitest/expect': 1.6.1 '@vitest/runner': 1.6.1 @@ -61169,45 +62276,8 @@ snapshots: strip-literal: 2.1.1 tinybench: 2.9.0 tinypool: 0.8.4 - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - vite-node: 1.6.1(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.46.1) - why-is-node-running: 2.3.0 - optionalDependencies: - '@edge-runtime/vm': 3.2.0 - '@types/node': 26.1.0 - '@vitest/ui': 1.6.0(vitest@1.6.0) - jsdom: 20.0.3 - transitivePeerDependencies: - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vitest@1.6.1(@edge-runtime/vm@3.2.0)(@types/node@26.1.0)(@vitest/ui@1.6.0)(jsdom@20.0.3)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1): - dependencies: - '@vitest/expect': 1.6.1 - '@vitest/runner': 1.6.1 - '@vitest/snapshot': 1.6.1 - '@vitest/spy': 1.6.1 - '@vitest/utils': 1.6.1 - acorn-walk: 8.3.5 - chai: 4.5.0 - debug: 4.4.3(supports-color@8.1.1) - execa: 8.0.1 - local-pkg: 0.5.1 - magic-string: 0.30.21 - pathe: 1.1.2 - picocolors: 1.1.1 - std-env: 3.10.0 - strip-literal: 2.1.1 - tinybench: 2.9.0 - tinypool: 0.8.4 - vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1) - vite-node: 1.6.1(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.46.1) + vite: 5.4.21(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0) + vite-node: 1.6.1(@types/node@26.1.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 @@ -61246,38 +62316,83 @@ snapshots: transitivePeerDependencies: - supports-color - vue-router@4.4.5(vue@3.5.30(typescript@5.9.3)): + vue-router@4.4.5(vue@3.5.30(typescript@5.0.4)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.30(typescript@5.9.3) + vue: 3.5.30(typescript@5.0.4) + + vue-router@4.4.5(vue@3.5.30(typescript@7.0.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.30(typescript@7.0.2) vue-template-compiler@2.7.16: dependencies: de-indent: 1.0.2 he: 1.2.0 - vue-tsc@1.8.27(typescript@5.9.3): + vue-tsc@1.8.27(typescript@6.0.3): dependencies: '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.27(typescript@5.9.3) + '@vue/language-core': 1.8.27(typescript@6.0.3) semver: 7.6.3 - typescript: 5.9.3 + typescript: 6.0.3 + + vue-tsc@1.8.27(typescript@7.0.2): + dependencies: + '@volar/typescript': 1.11.1 + '@vue/language-core': 1.8.27(typescript@7.0.2) + semver: 7.6.3 + typescript: 7.0.2 - vue-tsc@2.2.12(typescript@5.9.3): + vue-tsc@2.2.12(typescript@5.0.4): dependencies: '@volar/typescript': 2.4.15 - '@vue/language-core': 2.2.12(typescript@5.9.3) - typescript: 5.9.3 + '@vue/language-core': 2.2.12(typescript@5.0.4) + typescript: 5.0.4 + optional: true + + vue-tsc@2.2.12(typescript@6.0.3): + dependencies: + '@volar/typescript': 2.4.15 + '@vue/language-core': 2.2.12(typescript@6.0.3) + typescript: 6.0.3 - vue@3.5.30(typescript@5.9.3): + vue-tsc@2.2.12(typescript@7.0.2): + dependencies: + '@volar/typescript': 2.4.15 + '@vue/language-core': 2.2.12(typescript@7.0.2) + typescript: 7.0.2 + + vue@3.5.30(typescript@5.0.4): 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@3.5.30(typescript@5.9.3)) + '@vue/server-renderer': 3.5.30(vue@3.5.30(typescript@5.0.4)) '@vue/shared': 3.5.30 optionalDependencies: - typescript: 5.9.3 + typescript: 5.0.4 + + vue@3.5.30(typescript@6.0.3): + 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@3.5.30(typescript@6.0.3)) + '@vue/shared': 3.5.30 + optionalDependencies: + typescript: 6.0.3 + + vue@3.5.30(typescript@7.0.2): + 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@3.5.30(typescript@7.0.2)) + '@vue/shared': 3.5.30 + optionalDependencies: + typescript: 7.0.2 w3c-xmlserializer@4.0.0: dependencies: @@ -61285,7 +62400,7 @@ snapshots: wait-on@7.2.0: dependencies: - axios: 1.16.1 + axios: 1.16.1(debug@4.4.3) joi: 17.13.3 lodash: 4.18.1 minimist: 1.2.8 @@ -61336,7 +62451,7 @@ snapshots: webpack-bundle-analyzer@4.10.2: dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 commander: 7.2.0 debounce: 1.2.1 @@ -61380,40 +62495,40 @@ snapshots: optionalDependencies: webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) - webpack-dev-middleware@7.4.5(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + webpack-dev-middleware@7.4.5(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: colorette: 2.0.20 memfs: 4.46.0 mime-types: 3.0.2 on-finished: 2.4.1 - range-parser: 1.2.1 + range-parser: 1.3.0 schema-utils: 4.3.0 optionalDependencies: - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) optional: true - webpack-dev-middleware@7.4.5(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + webpack-dev-middleware@7.4.5(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: colorette: 2.0.20 memfs: 4.46.0 mime-types: 3.0.2 on-finished: 2.4.1 - range-parser: 1.2.1 + range-parser: 1.3.0 schema-utils: 4.3.0 optionalDependencies: - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optional: true - webpack-dev-middleware@7.4.5(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + webpack-dev-middleware@7.4.5(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: colorette: 2.0.20 memfs: 4.46.0 mime-types: 3.0.2 on-finished: 2.4.1 - range-parser: 1.2.1 + range-parser: 1.3.0 schema-utils: 4.3.0 optionalDependencies: - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-dev-middleware@7.4.5(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)): dependencies: @@ -61421,7 +62536,7 @@ snapshots: memfs: 4.46.0 mime-types: 3.0.2 on-finished: 2.4.1 - range-parser: 1.2.1 + range-parser: 1.3.0 schema-utils: 4.3.0 optionalDependencies: webpack: 5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4) @@ -61464,7 +62579,7 @@ snapshots: - supports-color - utf-8-validate - webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -61492,10 +62607,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + webpack-dev-middleware: 7.4.5(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) ws: 8.21.0 optionalDependencies: - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - bufferutil @@ -61504,7 +62619,7 @@ snapshots: - utf-8-validate optional: true - webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -61532,10 +62647,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + webpack-dev-middleware: 7.4.5(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) ws: 8.21.0 optionalDependencies: - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - bufferutil @@ -61544,7 +62659,7 @@ snapshots: - utf-8-validate optional: true - webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + webpack-dev-server@5.2.3(webpack-cli@5.1.4)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -61572,10 +62687,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + webpack-dev-middleware: 7.4.5(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) ws: 8.21.0 optionalDependencies: - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: - bufferutil @@ -61643,30 +62758,30 @@ snapshots: webpack-sources@3.5.0: {} - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: typed-assert: 1.0.9 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: - html-webpack-plugin: 5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.6.8(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)): dependencies: typed-assert: 1.0.9 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4) optionalDependencies: - html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.17))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): dependencies: typed-assert: 1.0.9 - webpack: 5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack: 5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4) optionalDependencies: - html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + html-webpack-plugin: 5.6.6(@rspack/core@1.7.9(@swc/helpers@0.5.19))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) webpack-virtual-modules@0.6.2: {} - webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4): + webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -61674,9 +62789,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 @@ -61690,9 +62805,9 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: @@ -61700,7 +62815,7 @@ snapshots: - esbuild - uglify-js - webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4): + webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -61708,9 +62823,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 @@ -61724,9 +62839,9 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.17))(esbuild@0.28.1)(webpack-cli@5.1.4)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: @@ -61734,7 +62849,7 @@ snapshots: - esbuild - uglify-js - webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.25.5)(webpack-cli@5.1.4): + webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -61742,9 +62857,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 @@ -61758,9 +62873,9 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: @@ -61768,7 +62883,7 @@ snapshots: - esbuild - uglify-js - webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4): + webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.25.5)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -61776,9 +62891,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 @@ -61792,9 +62907,9 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: @@ -61802,7 +62917,7 @@ snapshots: - esbuild - uglify-js - webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)): + webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -61810,9 +62925,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 @@ -61826,9 +62941,77 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + terser-webpack-plugin: 5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 + optionalDependencies: + webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1)): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.20.1 + es-module-lexer: 2.0.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1))) + watchpack: 2.5.1 + webpack-sources: 3.5.0 + optionalDependencies: + webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.20.1 + es-module-lexer: 2.0.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.1 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.4.0(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)) + watchpack: 2.5.1 + webpack-sources: 3.5.0 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: @@ -61844,9 +63027,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 @@ -61860,9 +63043,9 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.4.0(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.18.20)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: @@ -61878,9 +63061,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 @@ -61894,9 +63077,9 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.10(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) + terser-webpack-plugin: 5.4.0(@swc/core@1.15.8(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: @@ -61912,9 +63095,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 @@ -61930,7 +63113,7 @@ snapshots: tapable: 2.3.0 terser-webpack-plugin: 5.4.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.25.5)(webpack-cli@5.1.4)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: @@ -61946,9 +63129,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.16.0 - acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + acorn: 8.17.0 + acorn-import-phases: 1.0.4(acorn@8.17.0) + browserslist: 4.28.4 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 @@ -61964,7 +63147,7 @@ snapshots: tapable: 2.3.0 terser-webpack-plugin: 5.4.0(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack@5.104.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.5.0 optionalDependencies: webpack-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) transitivePeerDependencies: @@ -62191,6 +63374,8 @@ snapshots: yaml@2.8.2: {} + yaml@2.9.0: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 @@ -62270,6 +63455,72 @@ snapshots: yocto-queue@1.2.2: {} + zephyr-agent@1.1.2: + dependencies: + '@toon-format/toon': 0.9.0 + axios: 1.16.1(debug@4.4.3) + axios-retry: 4.5.0(axios@1.16.1) + debug: 4.4.3(supports-color@8.1.1) + eventsource: 4.1.0 + git-url-parse: 15.0.0 + https-proxy-agent: 7.0.6 + is-ci: 4.1.0 + jose: 5.10.0 + node-persist: 4.0.4 + open: 10.2.0 + proper-lockfile: 4.1.2 + tslib: 2.8.1 + zephyr-edge-contract: 1.1.2 + transitivePeerDependencies: + - supports-color + + zephyr-edge-contract@1.1.2: + dependencies: + tslib: 2.8.1 + + zephyr-rsbuild-plugin@1.1.2(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)): + dependencies: + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0) + zephyr-rspack-plugin: 1.1.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)) + transitivePeerDependencies: + - '@rspack/core' + - supports-color + - webpack + + zephyr-rspack-plugin@1.1.2(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)): + dependencies: + '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23) + tslib: 2.8.1 + zephyr-agent: 1.1.2 + zephyr-xpack-internal: 1.1.2(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)) + transitivePeerDependencies: + - supports-color + - webpack + + zephyr-rspress-plugin@1.1.2(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@rspress/core@2.0.14(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)): + dependencies: + '@rspress/core': 2.0.14(@module-federation/runtime-tools@2.8.0)(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(@types/mdast@4.0.4)(@types/react@19.2.14)(core-js@3.49.0)(micromark-util-types@2.0.2)(micromark@4.0.2) + tslib: 2.8.1 + zephyr-agent: 1.1.2 + zephyr-edge-contract: 1.1.2 + zephyr-rsbuild-plugin: 1.1.2(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.0)(core-js@3.49.0))(@rspack/core@2.1.2(@module-federation/runtime-tools@2.8.0)(@swc/helpers@0.5.23))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)) + zephyr-xpack-internal: 1.1.2(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)) + transitivePeerDependencies: + - '@rsbuild/core' + - '@rspack/core' + - supports-color + - webpack + + zephyr-xpack-internal@1.1.2(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)): + dependencies: + '@module-federation/automatic-vendor-federation': 1.2.1(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)) + tslib: 2.8.1 + zephyr-agent: 1.1.2 + zephyr-edge-contract: 1.1.2 + transitivePeerDependencies: + - supports-color + - webpack + zod-to-json-schema@3.25.1(zod@3.25.76): dependencies: zod: 3.25.76 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 52cec333b83..b0ec56f2911 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -12,6 +12,7 @@ packages: - 'apps/manifest-demo/*' - 'apps/esbuild' - 'apps/*' + - 'apps/bridge-ssr-demo/*' - 'webpack' - 'assemble-release-plan' - 'packages/runtime-plugins/*' diff --git a/scripts/bundle-size-report.mjs b/scripts/bundle-size-report.mjs index d2d1d82212f..34c77630348 100755 --- a/scripts/bundle-size-report.mjs +++ b/scripts/bundle-size-report.mjs @@ -95,6 +95,20 @@ async function loadRslib() { return rslibPromise; } +async function runRslibBuild(config) { + const rslib = await loadRslib(); + if (typeof rslib.build === 'function') { + return rslib.build(config); + } + if (typeof rslib.createRslib === 'function') { + const instance = await rslib.createRslib({ config }); + const result = await instance.build(); + await result.close(); + return result; + } + throw new Error('Unsupported @rslib/core API: no build function available'); +} + async function loadWebpack() { if (!webpackPromise) { webpackPromise = Promise.resolve(require('webpack')); @@ -291,14 +305,13 @@ async function bundleEntry(entryPath, options) { } try { - const { build } = await loadRslib(); const entryName = options.entryName || 'bundle'; const distRoot = createTempDir( options.packageName || 'pkg', options.target, ); - await build( + await runRslibBuild( { lib: [ { @@ -669,6 +682,17 @@ async function measure(packagesDir) { }; } + const hasSuccessfulBundle = Object.values(results).some((pkg) => + Object.values(pkg.entrypoints).some( + (entry) => + typeof entry.webBundleGzip === 'number' || + typeof entry.nodeBundleGzip === 'number', + ), + ); + if (packages.length > 0 && !hasSuccessfulBundle) { + throw new Error('Bundle size measurement failed for every package'); + } + return { packages: results, scenarios: await measureScenarios(packagesDir, packages), @@ -852,7 +876,10 @@ function compare(baseData, currentData) { ); const buildTable = (title, metrics, rowsData) => { - if (rowsData.length === 0) return []; + const changedRows = rowsData.filter(({ base, current }) => + hasMetricChange(base, current, metrics), + ); + if (changedRows.length === 0) return []; const rows = []; rows.push(`### ${title}`); rows.push(''); @@ -864,7 +891,7 @@ function compare(baseData, currentData) { rows.push(`| ${headers.join(' | ')} |`); rows.push(`| ${headers.map(() => '---').join(' | ')} |`); - for (const { name, base, current } of rowsData) { + for (const { name, base, current } of changedRows) { const cells = [`\`${name}\``]; for (const metric of metrics) { const currentValue = current[metric.key]; diff --git a/tools/fixtures/node20-compat/package.json b/tools/fixtures/node20-compat/package.json new file mode 100644 index 00000000000..f9c2984a903 --- /dev/null +++ b/tools/fixtures/node20-compat/package.json @@ -0,0 +1,12 @@ +{ + "name": "module-federation-node20-compat-consumer", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "build:rspack": "rspack build --config rspack.config.cjs", + "build:webpack": "webpack --config webpack.config.cjs", + "typecheck": "tsc --project tsconfig.json" + }, + "dependencies": {} +} diff --git a/tools/fixtures/node20-compat/rspack.config.cjs b/tools/fixtures/node20-compat/rspack.config.cjs new file mode 100644 index 00000000000..cbdb5a744f6 --- /dev/null +++ b/tools/fixtures/node20-compat/rspack.config.cjs @@ -0,0 +1,49 @@ +const path = require('node:path'); +const { + ModuleFederationPlugin, +} = require('@module-federation/enhanced/rspack'); + +module.exports = { + mode: 'production', + target: 'node20', + entry: './src/index.ts', + output: { + clean: true, + filename: 'main.js', + path: path.resolve(__dirname, 'dist/rspack'), + }, + resolve: { + extensions: ['.ts', '.js'], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: { + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { syntax: 'typescript' }, + target: 'es2022', + }, + }, + }, + type: 'javascript/auto', + }, + ], + }, + optimization: { + minimize: false, + }, + plugins: [ + new ModuleFederationPlugin({ + name: 'node20_rspack_consumer', + filename: 'remoteEntry.js', + exposes: { + './Greeting': './src/exposed.ts', + }, + dts: false, + }), + ], +}; diff --git a/tools/fixtures/node20-compat/smoke-cjs.cjs b/tools/fixtures/node20-compat/smoke-cjs.cjs new file mode 100644 index 00000000000..7a35080a7a9 --- /dev/null +++ b/tools/fixtures/node20-compat/smoke-cjs.cjs @@ -0,0 +1,16 @@ +const modules = [ + '@module-federation/sdk', + '@module-federation/runtime-core', + '@module-federation/runtime', + '@module-federation/dts-plugin', + '@module-federation/enhanced', + '@module-federation/enhanced/webpack', + '@module-federation/node', + '@module-federation/cli', +]; + +for (const moduleName of modules) { + require(moduleName); +} + +console.log(`[node20-compat] CommonJS loaded ${modules.length} entry points`); diff --git a/tools/fixtures/node20-compat/smoke-esm.mjs b/tools/fixtures/node20-compat/smoke-esm.mjs new file mode 100644 index 00000000000..2982417f4d4 --- /dev/null +++ b/tools/fixtures/node20-compat/smoke-esm.mjs @@ -0,0 +1,16 @@ +const modules = [ + '@module-federation/sdk', + '@module-federation/runtime-core', + '@module-federation/runtime', + '@module-federation/dts-plugin', + '@module-federation/enhanced', + '@module-federation/enhanced/webpack', + '@module-federation/node', + '@module-federation/cli', +]; + +for (const moduleName of modules) { + await import(moduleName); +} + +console.log(`[node20-compat] ESM loaded ${modules.length} entry points`); diff --git a/tools/fixtures/node20-compat/src/exposed.ts b/tools/fixtures/node20-compat/src/exposed.ts new file mode 100644 index 00000000000..357a29a07a5 --- /dev/null +++ b/tools/fixtures/node20-compat/src/exposed.ts @@ -0,0 +1,3 @@ +export function node20CompatibleGreeting(name: string): string { + return `Hello, ${name}`; +} diff --git a/tools/fixtures/node20-compat/src/index.ts b/tools/fixtures/node20-compat/src/index.ts new file mode 100644 index 00000000000..2fe35ce8969 --- /dev/null +++ b/tools/fixtures/node20-compat/src/index.ts @@ -0,0 +1,20 @@ +import { init } from '@module-federation/runtime'; +import type * as dtsPlugin from '@module-federation/dts-plugin'; +import type * as enhanced from '@module-federation/enhanced'; +import type * as node from '@module-federation/node'; +import type * as runtime from '@module-federation/runtime'; +import type * as runtimeCore from '@module-federation/runtime-core'; +import type * as sdk from '@module-federation/sdk'; + +export type PublicPackageTypes = { + sdk: typeof sdk; + runtimeCore: typeof runtimeCore; + runtime: typeof runtime; + dtsPlugin: typeof dtsPlugin; + enhanced: typeof enhanced; + node: typeof node; +}; + +export const runtimeInitType = typeof init; + +console.log(`[node20-compat] Bundled runtime init type: ${runtimeInitType}`); diff --git a/tools/fixtures/node20-compat/tsconfig.json b/tools/fixtures/node20-compat/tsconfig.json new file mode 100644 index 00000000000..76f6a15f313 --- /dev/null +++ b/tools/fixtures/node20-compat/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Bundler", + "noEmit": true, + "skipLibCheck": true, + "strict": true, + "target": "ES2022", + "types": ["node"] + }, + "include": ["src/**/*.ts"] +} diff --git a/tools/fixtures/node20-compat/webpack.config.cjs b/tools/fixtures/node20-compat/webpack.config.cjs new file mode 100644 index 00000000000..aee90e79d10 --- /dev/null +++ b/tools/fixtures/node20-compat/webpack.config.cjs @@ -0,0 +1,48 @@ +const path = require('node:path'); +const { + ModuleFederationPlugin, +} = require('@module-federation/enhanced/webpack'); + +module.exports = { + mode: 'production', + target: 'node20', + entry: './src/index.ts', + output: { + clean: true, + filename: 'main.js', + path: path.resolve(__dirname, 'dist/webpack'), + }, + resolve: { + extensions: ['.ts', '.js'], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: { + loader: 'swc-loader', + options: { + jsc: { + parser: { syntax: 'typescript' }, + target: 'es2022', + }, + }, + }, + }, + ], + }, + optimization: { + minimize: false, + }, + plugins: [ + new ModuleFederationPlugin({ + name: 'node20_webpack_consumer', + filename: 'remoteEntry.js', + exposes: { + './Greeting': './src/exposed.ts', + }, + dts: false, + }), + ], +}; diff --git a/tools/scripts/ci-e2e-affected.mjs b/tools/scripts/ci-e2e-affected.mjs new file mode 100644 index 00000000000..d855b8ae710 --- /dev/null +++ b/tools/scripts/ci-e2e-affected.mjs @@ -0,0 +1,241 @@ +import { + E2E_SUITE_DEFINITIONS, + E2E_SUITES, + normalizeAppNames, +} from './ci-e2e-suites.mjs'; +import { parseJsonFromTurboOutput } from './turbo-script-utils.mjs'; + +const GLOBAL_E2E_INPUTS = new Set([ + '.github/workflows/build-and-test.yml', + 'package.json', + 'pnpm-lock.yaml', + 'pnpm-workspace.yaml', + 'turbo.json', + 'tools/scripts/ci-e2e-affected.mjs', + 'tools/scripts/ci-e2e-suites.mjs', + 'tools/scripts/ci-is-affected.mjs', + 'tools/scripts/e2e-process-utils.mjs', + 'tools/scripts/turbo-script-utils.mjs', + 'scripts/ensure-playwright.js', +]); + +export function computeE2ESuiteDecisions({ + affectedPackageNames, + changedFiles, +}) { + const runAll = changedFiles.some(isGlobalE2EInput); + const matchableAffectedNames = + createMatchablePackageNames(affectedPackageNames); + + return Object.fromEntries( + Object.entries(E2E_SUITES).map(([suiteName, appNames]) => [ + suiteName, + runAll || + changedFiles.some((file) => isE2ESuiteInput(suiteName, file)) || + normalizeAppNames(appNames).some((name) => + matchableAffectedNames.has(name), + ), + ]), + ); +} + +export function isAppNameAffected(appNames, affectedPackageNames) { + const matchableAffectedNames = + createMatchablePackageNames(affectedPackageNames); + return normalizeAppNames(appNames).some((name) => + matchableAffectedNames.has(name), + ); +} + +export function isGlobalE2EInput(relativePath) { + return GLOBAL_E2E_INPUTS.has(relativePath); +} + +export function isE2ESuiteInput(suiteName, relativePath) { + return ( + E2E_SUITE_DEFINITIONS[suiteName]?.inputs.includes(relativePath) ?? false + ); +} + +export function parseAffectedPackages(outputText) { + const payload = parseJsonFromTurboOutput(outputText); + const packageNames = new Set(); + + if (Array.isArray(payload)) { + collectPackageNamesFromList(payload, packageNames); + return packageNames; + } + + if (!payload || typeof payload !== 'object') { + throw new Error('Turbo affected output has an unsupported schema.'); + } + + let recognizedSchema = false; + + if ('items' in payload) { + if (!Array.isArray(payload.items)) { + throw new Error('Turbo affected output has an invalid items field.'); + } + recognizedSchema = true; + collectPackageNamesFromList(payload.items, packageNames); + } + + if ('packages' in payload) { + if ( + !payload.packages || + (typeof payload.packages !== 'object' && !Array.isArray(payload.packages)) + ) { + throw new Error('Turbo affected output has an invalid packages field.'); + } + recognizedSchema = true; + collectPackageNamesFromContainer(payload.packages, packageNames); + } + + if (typeof payload.name === 'string') { + recognizedSchema = true; + addPackageName(payload.name, packageNames); + } + + if (!recognizedSchema) { + throw new Error('Turbo affected output has an unsupported schema.'); + } + + return packageNames; +} + +function createMatchablePackageNames(packageNames) { + const matchableNames = new Set(); + for (const packageName of packageNames) { + matchableNames.add(packageName); + const unscoped = toUnscopedName(packageName); + if (unscoped) { + matchableNames.add(unscoped); + } + } + return matchableNames; +} + +function collectPackageNamesFromContainer(container, packageNames) { + if (!container) { + return; + } + + if (Array.isArray(container)) { + collectPackageNamesFromList(container, packageNames); + return; + } + + if (typeof container !== 'object') { + throw new Error('Turbo affected output has an invalid package container.'); + } + + let recognizedSchema = Object.keys(container).length === 0; + + if (typeof container.name === 'string') { + recognizedSchema = true; + addPackageName(container.name, packageNames); + } + + if ('items' in container) { + if (!Array.isArray(container.items)) { + throw new Error('Turbo affected output has an invalid items field.'); + } + recognizedSchema = true; + collectPackageNamesFromList(container.items, packageNames); + } + + if ('packages' in container) { + if ( + !container.packages || + (typeof container.packages !== 'object' && + !Array.isArray(container.packages)) + ) { + throw new Error('Turbo affected output has an invalid packages field.'); + } + recognizedSchema = true; + collectPackageNamesFromContainer(container.packages, packageNames); + } + + for (const [key, value] of Object.entries(container)) { + const valueLooksLikePackageEntry = + value && + typeof value === 'object' && + !Array.isArray(value) && + ('path' in value || 'name' in value || 'package' in value); + + if (valueLooksLikePackageEntry && isPackageNameCandidate(key)) { + recognizedSchema = true; + packageNames.add(key); + } + if (value && typeof value === 'object' && typeof value.name === 'string') { + recognizedSchema = true; + addPackageName(value.name, packageNames); + } + } + + if (!recognizedSchema) { + throw new Error('Turbo affected output has an unsupported package schema.'); + } +} + +function collectPackageNamesFromList(list, packageNames) { + for (const entry of list) { + if (typeof entry === 'string') { + addPackageName(entry, packageNames); + continue; + } + if (!entry || typeof entry !== 'object') { + throw new Error( + 'Turbo affected output has an unsupported package entry.', + ); + } + + if (typeof entry.name === 'string') { + addPackageName(entry.name, packageNames); + continue; + } + + if (typeof entry.package === 'string') { + addPackageName(entry.package, packageNames); + continue; + } + + if (Array.isArray(entry.items)) { + collectPackageNamesFromList(entry.items, packageNames); + continue; + } + + throw new Error('Turbo affected output has an unsupported package entry.'); + } +} + +function addPackageName(name, packageNames) { + if (!isPackageNameCandidate(name)) { + throw new Error(`Turbo affected output contains an invalid package name.`); + } + packageNames.add(name); +} + +function isPackageNameCandidate(value) { + if (typeof value !== 'string') { + return false; + } + if (!value || value === '//') { + return false; + } + if (value.includes('#') || value.includes('\\') || value.includes(' ')) { + return false; + } + if (value.startsWith('@')) { + return /^@[^/]+\/[^/]+$/.test(value); + } + return !value.includes('/'); +} + +function toUnscopedName(value) { + if (typeof value !== 'string' || !value.startsWith('@')) { + return null; + } + const [, unscoped] = value.split('/'); + return unscoped || null; +} diff --git a/tools/scripts/ci-e2e-suites.mjs b/tools/scripts/ci-e2e-suites.mjs new file mode 100644 index 00000000000..8edbe57367e --- /dev/null +++ b/tools/scripts/ci-e2e-suites.mjs @@ -0,0 +1,137 @@ +export const E2E_SUITE_DEFINITIONS = { + manifest: { + appNames: [ + '3008-webpack-host', + '3009-webpack-provider', + '3010-rspack-provider', + '3011-rspack-manifest-provider', + '3012-rspack-js-entry-provider', + ], + inputs: [ + '.github/workflows/e2e-manifest.yml', + 'tools/scripts/run-manifest-e2e.mjs', + ], + }, + metro: { + appNames: ['example-host'], + inputs: [ + '.github/workflows/e2e-metro.yml', + 'tools/scripts/run-metro-e2e.mjs', + ], + }, + modern: { + appNames: [ + '@module-federation/modern-js', + '@module-federation/modern-js-v3', + ], + inputs: ['.github/workflows/e2e-modern.yml'], + }, + modernSsr: { + appNames: [ + '@module-federation/modern-js', + '@module-federation/modern-js-v3', + 'modernjs-ssr-host', + 'modernjs-ssr-remote', + 'modernjs-ssr-remote-new-version', + 'modernjs-ssr-nested-remote', + 'modernjs-ssr-dynamic-remote', + 'modernjs-ssr-dynamic-remote-new-version', + 'modernjs-ssr-dynamic-nested-remote', + 'modernjs-ssr-data-fetch-host', + 'modernjs-ssr-data-fetch-provider', + 'modernjs-ssr-data-fetch-provider-csr', + ], + inputs: [ + '.github/workflows/e2e-modern-ssr.yml', + 'tools/scripts/run-modern-e2e.mjs', + ], + }, + next: { + appNames: [ + '@module-federation/3000-home', + '@module-federation/3001-shop', + '@module-federation/3002-checkout', + ], + inputs: [ + '.github/workflows/e2e-next-dev.yml', + '.github/workflows/e2e-next-prod.yml', + 'tools/scripts/run-next-e2e.mjs', + ], + }, + node: { + appNames: [ + 'node-host', + 'node-local-remote', + 'node-remote', + 'node-dynamic-remote-new-version', + 'node-dynamic-remote', + 'node-host-e2e', + ], + inputs: [ + '.github/workflows/e2e-node.yml', + 'tools/scripts/run-node-e2e.mjs', + ], + }, + router: { + appNames: [ + 'host', + 'host-v5', + 'host-vue3', + 'remote1', + 'remote2', + 'remote3', + 'remote4', + 'remote5', + 'remote6', + ], + inputs: [ + '.github/workflows/e2e-router.yml', + 'tools/scripts/run-router-e2e.mjs', + ], + }, + runtime: { + appNames: ['runtime-host', 'runtime-remote1', 'runtime-remote2'], + inputs: [ + '.github/workflows/e2e-runtime.yml', + 'tools/scripts/run-runtime-e2e.mjs', + ], + }, + sharedTreeShaking: { + appNames: [ + 'shared-tree-shaking-no-server-host', + 'shared-tree-shaking-no-server-provider', + 'shared-tree-shaking-with-server-host', + 'shared-tree-shaking-with-server-provider', + ], + inputs: ['.github/workflows/e2e-shared-tree-shaking.yml'], + parentWorkflow: false, + }, + treeshake: { + appNames: [ + '@module-federation/treeshake-server', + '@module-federation/treeshake-frontend', + ], + inputs: ['.github/workflows/e2e-treeshake.yml'], + }, +}; + +export const E2E_SUITES = Object.fromEntries( + Object.entries(E2E_SUITE_DEFINITIONS).map(([suiteName, definition]) => [ + suiteName, + definition.appNames, + ]), +); + +export function normalizeAppNames(appNames) { + if (Array.isArray(appNames)) { + return appNames.map((name) => name.trim()).filter(Boolean); + } + return (appNames ?? '') + .split(',') + .map((name) => name.trim()) + .filter(Boolean); +} + +export function serializeAppNames(appNames) { + return normalizeAppNames(appNames).join(','); +} diff --git a/tools/scripts/ci-is-affected.mjs b/tools/scripts/ci-is-affected.mjs index 595aa8b7a95..232ced2548d 100644 --- a/tools/scripts/ci-is-affected.mjs +++ b/tools/scripts/ci-is-affected.mjs @@ -1,32 +1,34 @@ import { spawnSync } from 'node:child_process'; +import { appendFileSync } from 'node:fs'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import yargs from 'yargs'; +import { hasGitRef as hasGitRefInRepo } from './turbo-script-utils.mjs'; import { - hasGitRef as hasGitRefInRepo, - parseJsonFromTurboOutput, -} from './turbo-script-utils.mjs'; + computeE2ESuiteDecisions, + isAppNameAffected, + isE2ESuiteInput, + isGlobalE2EInput, + parseAffectedPackages, +} from './ci-e2e-affected.mjs'; +import { + E2E_SUITES, + normalizeAppNames, + serializeAppNames, +} from './ci-e2e-suites.mjs'; const SCRIPT_DIR = dirname(fileURLToPath(import.meta.url)); const ROOT = resolve(SCRIPT_DIR, '../..'); -const GLOBAL_E2E_INPUT_PATTERNS = [ - 'package.json', - 'tools/scripts/ci-is-affected.mjs', - 'tools/scripts/e2e-process-utils.mjs', - 'tools/scripts/run-manifest-e2e.mjs', - 'tools/scripts/run-modern-e2e.mjs', - 'tools/scripts/run-metro-e2e.mjs', - 'tools/scripts/run-next-e2e.mjs', - 'tools/scripts/run-node-e2e.mjs', - 'tools/scripts/run-router-e2e.mjs', - 'tools/scripts/run-runtime-e2e.mjs', - 'scripts/ensure-playwright.js', -]; - const argv = yargs(process.argv.slice(2)) .option('appName', { type: 'string', - demandOption: true, + describe: + 'Comma-separated package/app names. Prefer --e2eSuite for built-in e2e suites.', + }) + .option('e2eSuite', { + type: 'string', + describe: + 'Named e2e suite from tools/scripts/ci-e2e-suites.mjs. Used to keep workflows and ci-local aligned.', }) .option('base', { type: 'string', @@ -34,17 +36,78 @@ const argv = yargs(process.argv.slice(2)) .option('head', { type: 'string', }) + .option('githubOutput', { + type: 'string', + describe: + 'Write the decision to $GITHUB_OUTPUT under this key (as true/false) and exit 0, instead of signaling via exit code.', + }) + .option('githubOutputAll', { + type: 'string', + describe: + 'Write all named suite decisions as one JSON object to $GITHUB_OUTPUT under this key.', + }) .strict(false) .parseSync(); -const appNames = argv.appName - .split(',') - .map((name) => name.trim()) - .filter(Boolean); +// Decision exits: without --githubOutput, exit 0 means "run e2e" and exit 1 +// means "skip" (consumed by ci-local.mjs and shell-translated workflow +// steps). With --githubOutput, the decision is written to $GITHUB_OUTPUT and +// the process exits 0 either way, so genuine crashes (nonzero without +// output) fail the workflow step instead of silently skipping e2e. +function decide(runE2E) { + if (argv.githubOutput) { + if (!process.env.GITHUB_OUTPUT) { + console.error('--githubOutput was passed but GITHUB_OUTPUT is not set.'); + process.exit(2); + } + appendFileSync( + process.env.GITHUB_OUTPUT, + `${argv.githubOutput}=${runE2E ? 'true' : 'false'}\n`, + ); + process.exit(0); + } + process.exit(runE2E ? 0 : 1); +} + +function decideAll(decisions) { + if (!argv.githubOutputAll) { + console.error('--githubOutputAll requires an output key.'); + process.exit(2); + } + if (!process.env.GITHUB_OUTPUT) { + console.error('--githubOutputAll was passed but GITHUB_OUTPUT is not set.'); + process.exit(2); + } + appendFileSync( + process.env.GITHUB_OUTPUT, + `${argv.githubOutputAll}=${JSON.stringify(decisions)}\n`, + ); + process.exit(0); +} + +const allSuitesMode = Boolean(argv.githubOutputAll); +if (allSuitesMode && (argv.appName || argv.e2eSuite || argv.githubOutput)) { + console.error( + '--githubOutputAll cannot be combined with --appName, --e2eSuite, or --githubOutput.', + ); + process.exit(2); +} + +const rawAppNames = allSuitesMode + ? [] + : argv.appName + ? normalizeAppNames(argv.appName) + : (E2E_SUITES[argv.e2eSuite] ?? null); +if (argv.e2eSuite && !rawAppNames) { + console.error(`Unknown e2e suite: ${argv.e2eSuite}`); + process.exit(2); +} + +const appNames = normalizeAppNames(rawAppNames); -if (appNames.length === 0) { - console.log('No valid app names were provided.'); - process.exit(1); +if (!allSuitesMode && appNames.length === 0) { + console.error('No valid app names were provided.'); + process.exit(2); } const base = resolveBase(argv.base); @@ -54,14 +117,14 @@ if (!base || !head) { console.warn( `Unable to resolve a valid base/head commit (base=${base}, head=${head}). Running e2e by default.`, ); - process.exit(0); + decideFailOpen(); } if (base === head) { console.warn( `Resolved base and head are identical (${base}). Running e2e by default.`, ); - process.exit(0); + decideFailOpen(); } const changedFiles = listChangedFiles(base, head); @@ -70,7 +133,7 @@ if (!changedFiles) { console.warn( `Unable to resolve changed files for base=${base} head=${head}. Running e2e by default.`, ); - process.exit(0); + decideFailOpen(); } const changedGlobalE2EInputs = changedFiles.filter(isGlobalE2EInput); @@ -79,7 +142,7 @@ if (changedGlobalE2EInputs.length > 0) { console.log( `Detected shared e2e harness changes (${changedGlobalE2EInputs.join(', ')}). Running e2e CI.`, ); - process.exit(0); + decideFailOpen(); } const turboResult = spawnSync( @@ -107,7 +170,7 @@ if (turboResult.status !== 0) { } else if (turboResult.stdout?.trim()) { console.warn(turboResult.stdout.trim()); } - process.exit(0); + decideFailOpen(); } let affectedPackageNames; @@ -122,32 +185,44 @@ try { console.warn( `Unable to parse Turbo affected output for base=${base} head=${head}. Running e2e by default.`, ); - process.exit(0); + decideFailOpen(); } } -const matchableAffectedNames = new Set(); -for (const packageName of affectedPackageNames) { - matchableAffectedNames.add(packageName); - const unscoped = toUnscopedName(packageName); - if (unscoped) { - matchableAffectedNames.add(unscoped); - } +if (allSuitesMode) { + const decisions = computeE2ESuiteDecisions({ + affectedPackageNames, + changedFiles, + }); + console.log(`E2E suite decisions: ${JSON.stringify(decisions)}`); + decideAll(decisions); } -const isAffected = appNames.some((name) => matchableAffectedNames.has(name)); +const isAffected = + (argv.e2eSuite && + changedFiles.some((file) => isE2ESuiteInput(argv.e2eSuite, file))) || + isAppNameAffected(appNames, affectedPackageNames); if (isAffected) { console.log( - `appNames: ${appNames.join(',')} , base=${base} head=${head}, conditions met, executing e2e CI.`, + `appNames: ${serializeAppNames(appNames)} , base=${base} head=${head}, conditions met, executing e2e CI.`, ); - process.exit(0); + decide(true); } console.log( - `appNames: ${appNames.join(',')} , base=${base} head=${head}, conditions not met, skipping e2e CI.`, + `appNames: ${serializeAppNames(appNames)} , base=${base} head=${head}, conditions not met, skipping e2e CI.`, ); -process.exit(1); +decide(false); + +function decideFailOpen() { + if (allSuitesMode) { + decideAll( + Object.fromEntries(Object.keys(E2E_SUITES).map((suite) => [suite, true])), + ); + } + decide(true); +} function hasGitRef(ref) { return hasGitRefInRepo(ROOT, ref); @@ -212,14 +287,6 @@ function listChangedFiles(baseRef, headRef) { .filter(Boolean); } -function isGlobalE2EInput(relativePath) { - return GLOBAL_E2E_INPUT_PATTERNS.some( - (pattern) => - relativePath === pattern || - (pattern.endsWith('/') && relativePath.startsWith(pattern)), - ); -} - function expandRefCandidates(ref) { if (!ref || !ref.trim()) { return []; @@ -245,129 +312,3 @@ function expandRefCandidates(ref) { return Array.from(candidates); } - -function parseAffectedPackages(outputText) { - const payload = parseJsonFromTurboOutput(outputText); - const packageNames = new Set(); - - if (Array.isArray(payload)) { - collectPackageNamesFromList(payload, packageNames); - return packageNames; - } - - if (!payload || typeof payload !== 'object') { - return packageNames; - } - - if (Array.isArray(payload.items)) { - collectPackageNamesFromList(payload.items, packageNames); - } - - if ('packages' in payload) { - collectPackageNamesFromContainer(payload.packages, packageNames); - } - - if (packageNames.size === 0 && typeof payload.name === 'string') { - addPackageName(payload.name, packageNames); - } - - return packageNames; -} - -function collectPackageNamesFromContainer(container, packageNames) { - if (!container) { - return; - } - - if (Array.isArray(container)) { - collectPackageNamesFromList(container, packageNames); - return; - } - - if (typeof container !== 'object') { - return; - } - - if (typeof container.name === 'string') { - addPackageName(container.name, packageNames); - } - - if (Array.isArray(container.items)) { - collectPackageNamesFromList(container.items, packageNames); - } - - if (Array.isArray(container.packages)) { - collectPackageNamesFromList(container.packages, packageNames); - } - - for (const [key, value] of Object.entries(container)) { - const valueLooksLikePackageEntry = - value && - typeof value === 'object' && - !Array.isArray(value) && - ('path' in value || 'name' in value || 'package' in value); - - if (valueLooksLikePackageEntry && isPackageNameCandidate(key)) { - packageNames.add(key); - } - if (value && typeof value === 'object' && typeof value.name === 'string') { - addPackageName(value.name, packageNames); - } - } -} - -function collectPackageNamesFromList(list, packageNames) { - for (const entry of list) { - if (typeof entry === 'string') { - addPackageName(entry, packageNames); - continue; - } - if (!entry || typeof entry !== 'object') { - continue; - } - - if (typeof entry.name === 'string') { - addPackageName(entry.name, packageNames); - continue; - } - - if (typeof entry.package === 'string') { - addPackageName(entry.package, packageNames); - continue; - } - - if (Array.isArray(entry.items)) { - collectPackageNamesFromList(entry.items, packageNames); - } - } -} - -function addPackageName(name, packageNames) { - if (isPackageNameCandidate(name)) { - packageNames.add(name); - } -} - -function isPackageNameCandidate(value) { - if (typeof value !== 'string') { - return false; - } - if (!value || value === '//') { - return false; - } - if (value.includes('#') || value.includes('\\') || value.includes(' ')) { - return false; - } - if (value.startsWith('@')) { - return /^@[^/]+\/[^/]+$/.test(value); - } - return !value.includes('/'); -} - -function toUnscopedName(value) { - if (typeof value !== 'string' || !value.startsWith('@')) { - return null; - } - const [, unscoped] = value.split('/'); - return unscoped || null; -} diff --git a/tools/scripts/ci-is-affected.test.mjs b/tools/scripts/ci-is-affected.test.mjs new file mode 100644 index 00000000000..699eb69b6e6 --- /dev/null +++ b/tools/scripts/ci-is-affected.test.mjs @@ -0,0 +1,285 @@ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { mkdtempSync, readFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import test from 'node:test'; +import { + computeE2ESuiteDecisions, + isAppNameAffected, + parseAffectedPackages, +} from './ci-e2e-affected.mjs'; +import { E2E_SUITE_DEFINITIONS, E2E_SUITES } from './ci-e2e-suites.mjs'; +import { createLocalE2EHelpers } from './ci-local-e2e.mjs'; + +const SCRIPT_DIR = dirname(fileURLToPath(import.meta.url)); +const ROOT = resolve(SCRIPT_DIR, '../..'); +const CLI_PATH = join(SCRIPT_DIR, 'ci-is-affected.mjs'); + +test('maps affected packages to their E2E suites', () => { + const decisions = computeE2ESuiteDecisions({ + affectedPackageNames: new Set([ + '@module-federation/modern-js', + 'runtime-host', + ]), + changedFiles: ['packages/runtime/src/index.ts'], + }); + + assert.equal(decisions.modern, true); + assert.equal(decisions.runtime, true); + assert.equal(decisions.router, false); +}); + +test('treats a suite workflow as input to only that suite', () => { + const decisions = computeE2ESuiteDecisions({ + affectedPackageNames: new Set(), + changedFiles: ['.github/workflows/e2e-router.yml'], + }); + + assert.deepEqual( + Object.entries(decisions) + .filter(([, shouldRun]) => shouldRun) + .map(([suiteName]) => suiteName), + ['router'], + ); +}); + +test('treats the Metro workflow as input to only the Metro suite', () => { + const decisions = computeE2ESuiteDecisions({ + affectedPackageNames: new Set(), + changedFiles: ['.github/workflows/e2e-metro.yml'], + }); + + assert.deepEqual( + Object.entries(decisions) + .filter(([, shouldRun]) => shouldRun) + .map(([suiteName]) => suiteName), + ['metro'], + ); +}); + +test('runs every suite for shared E2E policy changes', () => { + const decisions = computeE2ESuiteDecisions({ + affectedPackageNames: new Set(), + changedFiles: ['tools/scripts/ci-e2e-affected.mjs'], + }); + + assert.deepEqual( + decisions, + Object.fromEntries(Object.keys(E2E_SUITES).map((suite) => [suite, true])), + ); +}); + +test('gates every parent E2E suite in the parent workflow', () => { + const workflow = readFileSync( + join(ROOT, '.github/workflows/build-and-test.yml'), + 'utf8', + ); + + for (const [suiteName, definition] of Object.entries(E2E_SUITE_DEFINITIONS)) { + if (definition.parentWorkflow === false) { + continue; + } + assert.match( + workflow, + new RegExp(`e2e_suites\\)\\.${suiteName} \\}\\}`), + `missing parent gate for ${suiteName}`, + ); + } +}); + +test('matches scoped affected packages by unscoped app name', () => { + assert.equal( + isAppNameAffected(['modern-js'], new Set(['@module-federation/modern-js'])), + true, + ); +}); + +test('parses supported Turbo package output shapes', () => { + assert.deepEqual( + [...parseAffectedPackages('[{"name":"runtime-host"}]')], + ['runtime-host'], + ); + assert.deepEqual( + [ + ...parseAffectedPackages( + '{"packages":{"@module-federation/modern-js":{"path":"packages/modernjs"}}}', + ), + ], + ['@module-federation/modern-js'], + ); + assert.deepEqual( + [ + ...parseAffectedPackages( + '{"packageManager":"pnpm9","packages":{"count":0,"items":[]}}', + ), + ], + [], + ); +}); + +test('rejects malformed Turbo output so callers can fail open', () => { + assert.throws( + () => parseAffectedPackages('not json'), + /Unable to locate JSON payload in Turbo output/, + ); + assert.throws( + () => parseAffectedPackages('{"version":"2.9"}'), + /unsupported schema/, + ); + assert.throws( + () => parseAffectedPackages('[{"version":"2.9"}]'), + /unsupported package entry/, + ); + assert.throws( + () => parseAffectedPackages('{"items":[{"version":"2.9"}]}'), + /unsupported package entry/, + ); +}); + +test('translates local affected exit codes without hiding errors', async (t) => { + for (const { code, expected } of [ + { code: 0, expected: true }, + { code: 1, expected: false }, + ]) { + await t.test(`exit ${code}`, async () => { + const { checkAffectedStep } = createHelpersReturning({ code }); + const ctx = { env: {}, state: {} }; + + await checkAffectedStep(['runtime-host']).run(ctx); + + assert.equal(ctx.state.shouldRun, expected); + }); + } + + await t.test('unexpected exit', async () => { + const { checkAffectedStep } = createHelpersReturning({ code: 2 }); + + await assert.rejects( + checkAffectedStep(['runtime-host']).run({ env: {}, state: {} }), + /unexpected code 2/, + ); + }); +}); + +test('uses suite-aware selection for local E2E jobs', async () => { + const calls = []; + const helpers = createLocalE2EHelpers({ + formatExit: ({ code }) => `code ${code}`, + runCommand: async (command, args) => { + calls.push([command, args]); + return { code: 0 }; + }, + runPackagesBuild: async () => {}, + step: (label, run) => ({ label, run }), + }); + + const [, affectedStep] = helpers.e2eSetupSteps('router'); + await affectedStep.run({ env: {}, state: {} }); + + assert.deepEqual(calls, [ + ['node', ['tools/scripts/ci-is-affected.mjs', '--e2eSuite=router']], + ]); +}); + +test('combines a Metro suite selector with its app override', async () => { + const calls = []; + const helpers = createLocalE2EHelpers({ + formatExit: ({ code }) => `code ${code}`, + runCommand: async (command, args) => { + calls.push([command, args]); + return { code: 0 }; + }, + runPackagesBuild: async () => {}, + step: (label, run) => ({ label, run }), + }); + + await helpers + .checkAffectedStep(['custom-metro-app'], 'metro') + .run({ env: {}, state: {} }); + + assert.deepEqual(calls, [ + [ + 'node', + [ + 'tools/scripts/ci-is-affected.mjs', + '--appName=custom-metro-app', + '--e2eSuite=metro', + ], + ], + ]); +}); + +test('rejects unknown suites with an error exit', () => { + const result = runCli(['--e2eSuite=unknown']); + + assert.equal(result.status, 2); + assert.match(result.stderr, /Unknown e2e suite/); +}); + +test('requires GITHUB_OUTPUT for all-suite output mode', () => { + const env = { ...process.env }; + delete env.GITHUB_OUTPUT; + const result = runCli( + ['--githubOutputAll=e2e_suites', '--base=HEAD', '--head=HEAD'], + env, + ); + + assert.equal(result.status, 2); + assert.match(result.stderr, /GITHUB_OUTPUT is not set/); +}); + +test('writes a single fail-open decision to GITHUB_OUTPUT', () => { + const outputPath = createOutputPath(); + const result = runCli( + [ + '--e2eSuite=modern', + '--githubOutput=run_e2e', + '--base=HEAD', + '--head=HEAD', + ], + { ...process.env, GITHUB_OUTPUT: outputPath }, + ); + + assert.equal(result.status, 0); + assert.equal(readFileSync(outputPath, 'utf8'), 'run_e2e=true\n'); +}); + +test('writes all fail-open decisions as one JSON output', () => { + const outputPath = createOutputPath(); + const result = runCli( + ['--githubOutputAll=e2e_suites', '--base=HEAD', '--head=HEAD'], + { ...process.env, GITHUB_OUTPUT: outputPath }, + ); + + assert.equal(result.status, 0); + const output = readFileSync(outputPath, 'utf8').trim(); + const [name, json] = output.split('=', 2); + assert.equal(name, 'e2e_suites'); + assert.deepEqual( + JSON.parse(json), + Object.fromEntries(Object.keys(E2E_SUITES).map((suite) => [suite, true])), + ); +}); + +function runCli(args, env = process.env) { + return spawnSync(process.execPath, [CLI_PATH, ...args], { + cwd: ROOT, + encoding: 'utf8', + env, + }); +} + +function createOutputPath() { + return join(mkdtempSync(join(tmpdir(), 'ci-is-affected-')), 'output'); +} + +function createHelpersReturning(result) { + return createLocalE2EHelpers({ + formatExit: ({ code }) => `code ${code}`, + runCommand: async () => result, + runPackagesBuild: async () => {}, + step: (label, run) => ({ label, run }), + }); +} diff --git a/tools/scripts/ci-local-cli.mjs b/tools/scripts/ci-local-cli.mjs new file mode 100644 index 00000000000..794edf76e57 --- /dev/null +++ b/tools/scripts/ci-local-cli.mjs @@ -0,0 +1,297 @@ +export function parseArgs(argv) { + const onlyTokens = []; + const result = { + help: false, + list: false, + only: null, + printParity: false, + skipCache: false, + strictParity: false, + errors: [], + unknownArgs: [], + }; + for (let i = 2; i < argv.length; i += 1) { + const arg = argv[i]; + if (arg === '--list') { + result.list = true; + continue; + } + if (arg === '--help' || arg === '-h') { + result.help = true; + continue; + } + if (arg === '--only') { + const onlyValue = argv[i + 1]; + if (!onlyValue || onlyValue.startsWith('--')) { + result.errors.push('Missing value for --only.'); + continue; + } + onlyTokens.push(onlyValue); + i += 1; + continue; + } + if (arg.startsWith('--only=')) { + onlyTokens.push(arg.slice('--only='.length)); + continue; + } + if (arg === '--print-parity') { + result.printParity = true; + continue; + } + if (arg === '--skip-cache') { + result.skipCache = true; + continue; + } + if (arg === '--strict-parity') { + result.strictParity = true; + continue; + } + result.unknownArgs.push(arg); + } + if (onlyTokens.length > 0) { + result.only = onlyTokens.join(','); + } + return result; +} + +export function getOnlyJobNames(args) { + if (!args.only) { + return []; + } + return Array.from( + new Set( + args.only + .split(',') + .map((job) => job.trim()) + .filter(Boolean), + ), + ); +} + +export function getSelectableJobNames(jobList) { + const names = new Set(); + for (const job of jobList) { + names.add(job.name); + if (job.matrix?.length) { + for (const entry of job.matrix) { + names.add(formatMatrixJobName(job.name, entry)); + } + } + } + return names; +} + +export function validateArgs({ + args, + onlyJobNames, + onlyJobs, + selectableJobNames, +}) { + const issues = []; + + if (args.errors.length > 0) { + issues.push(...args.errors); + } + + if (args.unknownArgs.length > 0) { + issues.push( + `Unknown option(s): ${args.unknownArgs.join(', ')}. Use --help to see supported flags.`, + ); + } + + if (args.only !== null && onlyJobNames.length === 0) { + issues.push( + 'The --only option requires at least one job name (use --list to inspect available jobs).', + ); + } + + if (onlyJobs) { + const unknownJobNames = onlyJobNames.filter( + (jobName) => !selectableJobNames.has(jobName), + ); + if (unknownJobNames.length > 0) { + issues.push( + `Unknown job(s) in --only: ${unknownJobNames.join(', ')}. Use --list to inspect available jobs.`, + ); + } + } + + if (issues.length > 0) { + throw new Error(`[ci:local] ${issues.join(' ')}`); + } +} + +export function shouldRunJob(job, onlyJobs) { + if (!onlyJobs) { + return true; + } + if (onlyJobs.has(job.name)) { + return true; + } + if (job.matrix?.length) { + return job.matrix.some((entry) => + onlyJobs.has(formatMatrixJobName(job.name, entry)), + ); + } + return false; +} + +export function listJobs(jobList, { onlyJobs, selectableJobNames }) { + console.log('ci:local job list:'); + if (onlyJobs) { + console.log( + `[ci:local] Listing filtered jobs: ${Array.from(onlyJobs).join(', ')}`, + ); + } + let listedCount = 0; + for (const job of jobList) { + if (job.matrix?.length) { + const includeAllEntries = !onlyJobs || onlyJobs.has(job.name); + if (!includeAllEntries) { + const hasMatchingEntry = job.matrix.some((entry) => + onlyJobs.has(formatMatrixJobName(job.name, entry)), + ); + if (!hasMatchingEntry) { + continue; + } + } + for (const entry of job.matrix) { + const entryName = formatMatrixJobName(job.name, entry); + if (!includeAllEntries && onlyJobs && !onlyJobs.has(entryName)) { + continue; + } + console.log(`- ${formatJobListEntry({ name: entryName })}`); + listedCount += 1; + } + } else { + if (onlyJobs && !onlyJobs.has(job.name)) { + continue; + } + console.log(`- ${formatJobListEntry(job)}`); + listedCount += 1; + } + } + if (listedCount === 0) { + console.log('(no matching jobs)'); + } + if (onlyJobs) { + console.log( + `[ci:local] Matched ${listedCount} of ${selectableJobNames.size} selectable jobs.`, + ); + } else { + console.log(`[ci:local] Listed ${listedCount} selectable jobs.`); + } + console.log('\nUse --only=job1,job2 to run a subset.'); +} + +export function preflight({ + args, + detectPnpmVersion, + expectedNodeMajor, + expectedPnpmVersion, +}) { + const nodeMajor = Number(process.versions.node.split('.')[0]); + const parityIssues = []; + if (nodeMajor !== expectedNodeMajor) { + parityIssues.push( + `node ${process.versions.node} (expected major ${expectedNodeMajor})`, + ); + const pnpmVersionForHint = expectedPnpmVersion ?? '10.28.0'; + console.warn( + `[ci:local] Warning: running with Node ${process.versions.node}. CI runs with Node ${expectedNodeMajor}.`, + ); + console.warn( + `[ci:local] For closest parity run: source "$HOME/.nvm/nvm.sh" && nvm use ${expectedNodeMajor} && corepack enable && corepack prepare pnpm@${pnpmVersionForHint} --activate`, + ); + } + + const pnpmCheck = detectPnpmVersion(); + if (pnpmCheck.status !== 0) { + throw new Error( + '[ci:local] pnpm not found in PATH. Install/activate pnpm before running ci-local.', + ); + } + + const pnpmVersion = (pnpmCheck.stdout ?? '').trim(); + if (expectedPnpmVersion && pnpmVersion !== expectedPnpmVersion) { + parityIssues.push(`pnpm ${pnpmVersion} (expected ${expectedPnpmVersion})`); + console.warn( + `[ci:local] Warning: running with pnpm ${pnpmVersion}. CI parity target is pnpm ${expectedPnpmVersion}.`, + ); + console.warn( + `[ci:local] For closest parity run: corepack enable && corepack prepare pnpm@${expectedPnpmVersion} --activate`, + ); + } + + if (args.strictParity && parityIssues.length > 0) { + throw new Error( + `[ci:local] Strict parity check failed: ${parityIssues.join('; ')}`, + ); + } +} + +export function printParity({ + detectPnpmVersion, + expectedNodeMajor, + expectedPnpmVersion, + root, +}) { + const pnpmCheck = detectPnpmVersion(); + const currentPnpmVersion = + pnpmCheck.status === 0 ? (pnpmCheck.stdout ?? '').trim() : 'unavailable'; + + console.log('ci:local parity config:'); + console.log(`- repo root: ${root}`); + console.log(`- expected node major: ${expectedNodeMajor}`); + console.log( + `- expected pnpm version: ${expectedPnpmVersion ?? 'unconfigured'}`, + ); + console.log(`- current node: ${process.versions.node}`); + console.log(`- current pnpm: ${currentPnpmVersion}`); +} + +export function printHelp() { + console.log('Usage: node tools/scripts/ci-local.mjs [options]'); + console.log(''); + console.log('Options:'); + console.log(' --list List available jobs'); + console.log( + ' --only= Run only specific comma-separated jobs (repeatable)', + ); + console.log( + ' --print-parity Print derived node/pnpm parity settings', + ); + console.log( + ' --strict-parity Fail when node/pnpm parity is mismatched', + ); + console.log( + ' --skip-cache Bypass Turbo task caches for supported ci-local steps', + ); + console.log(' --help Show this help message'); + console.log(''); + console.log('Examples:'); + console.log(' node tools/scripts/ci-local.mjs --only=build-metro'); + console.log( + ' node tools/scripts/ci-local.mjs --only=build-metro --only=actionlint', + ); + console.log(' node tools/scripts/ci-local.mjs --list --only=build-metro'); + console.log(' node tools/scripts/ci-local.mjs --print-parity'); + console.log( + ' node tools/scripts/ci-local.mjs --strict-parity --only=build-and-test', + ); + console.log( + ' node tools/scripts/ci-local.mjs --skip-cache --only=build-and-test', + ); +} + +export function formatMatrixJobName(jobName, entry) { + const entryName = entry.name ?? entry.id ?? 'matrix'; + return `${jobName} (${entryName})`; +} + +function formatJobListEntry(job) { + if (!job.skipReason) { + return job.name; + } + return `${job.name} [skip: ${job.skipReason}]`; +} diff --git a/tools/scripts/ci-local-e2e.mjs b/tools/scripts/ci-local-e2e.mjs new file mode 100644 index 00000000000..44be0dd8003 --- /dev/null +++ b/tools/scripts/ci-local-e2e.mjs @@ -0,0 +1,100 @@ +import { serializeAppNames } from './ci-e2e-suites.mjs'; + +export function createLocalE2EHelpers({ + formatExit, + runCommand, + runPackagesBuild, + step, +}) { + function installDependenciesStep() { + return step('Install dependencies', (ctx) => + runCommand('pnpm', ['install', '--frozen-lockfile'], ctx), + ); + } + + function checkAffectedStep(appNames, suiteName) { + return step('Check CI conditions', async (ctx) => { + const resolvedAppNames = + typeof appNames === 'function' ? appNames(ctx) : appNames; + ctx.state.shouldRun = await ciIsAffected( + resolvedAppNames, + suiteName, + ctx, + ); + ctx.state.skipReason = ctx.state.shouldRun + ? null + : 'Not affected by current changes.'; + }); + } + + function setupAffectedE2E({ cypress = true } = {}) { + return step('Setup E2E dependencies and package build', async (ctx) => { + if (!ctx.state.shouldRun) { + logStepSkip(ctx, currentSkipReason(ctx)); + return; + } + if (cypress) { + await runCommand('npx', ['cypress', 'install'], ctx); + } + await runPackagesBuild(ctx); + }); + } + + function e2eSetupSteps(suiteName, options) { + return [ + installDependenciesStep(), + checkAffectedStep(null, suiteName), + setupAffectedE2E(options), + ]; + } + + async function runWhenAffected(ctx, run) { + if (!ctx.state.shouldRun) { + logStepSkip(ctx, currentSkipReason(ctx)); + return; + } + await run(); + } + + async function ciIsAffected(appNames, suiteName, ctx) { + const selectors = []; + const serializedAppNames = serializeAppNames(appNames); + if (serializedAppNames) { + selectors.push(`--appName=${serializedAppNames}`); + } + if (suiteName) { + selectors.push(`--e2eSuite=${suiteName}`); + } + const result = await runCommand( + 'node', + ['tools/scripts/ci-is-affected.mjs', ...selectors], + { ...ctx, allowFailure: true }, + ); + if (result.code === 0) { + return true; + } + if (result.code === 1) { + return false; + } + throw new Error( + `ci-is-affected failed with unexpected ${formatExit(result)}`, + ); + } + + function currentSkipReason(ctx) { + return ctx.state.skipReason ?? 'Not affected by current changes.'; + } + + return { + checkAffectedStep, + e2eSetupSteps, + installDependenciesStep, + logStepSkip, + runWhenAffected, + setupAffectedE2E, + }; +} + +function logStepSkip(ctx, reason) { + console.log(`[ci:local] ${ctx.jobName} -> Skipped: ${reason}`); +} diff --git a/tools/scripts/ci-local.mjs b/tools/scripts/ci-local.mjs index f43ff562baf..e9891bcb085 100644 --- a/tools/scripts/ci-local.mjs +++ b/tools/scripts/ci-local.mjs @@ -3,37 +3,55 @@ import { spawn, spawnSync } from 'node:child_process'; import { existsSync, readFileSync } from 'node:fs'; import { dirname, join, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { E2E_SUITES } from './ci-e2e-suites.mjs'; +import { createLocalE2EHelpers } from './ci-local-e2e.mjs'; +import { + formatMatrixJobName, + getOnlyJobNames, + getSelectableJobNames, + listJobs, + parseArgs, + preflight, + printHelp, + printParity, + shouldRunJob, + validateArgs, +} from './ci-local-cli.mjs'; process.env.CI = process.env.CI ?? 'true'; const SCRIPT_DIR = dirname(fileURLToPath(import.meta.url)); const ROOT = resolve(SCRIPT_DIR, '../..'); process.chdir(ROOT); -const DEFAULT_EXPECTED_NODE_MAJOR = 20; +const DEFAULT_EXPECTED_NODE_MAJOR = 24; const ROOT_PACKAGE_JSON = readRootPackageJson(); const EXPECTED_NODE_MAJOR = resolveExpectedNodeMajor(ROOT_PACKAGE_JSON); const EXPECTED_PNPM_VERSION = resolveExpectedPnpmVersion(ROOT_PACKAGE_JSON); +const SKIP_DEVTOOLS_POSTINSTALL_ENV = { SKIP_DEVTOOLS_POSTINSTALL: 'true' }; +const METRO_APP_NAME = + process.env.CI_LOCAL_METRO_APP_NAME ?? E2E_SUITES.metro[0]; +const METRO_E2E_ENV = { + ...SKIP_DEVTOOLS_POSTINSTALL_ENV, + METRO_APP_NAME, +}; const args = parseArgs(process.argv); -const onlyJobNames = args.only - ? Array.from( - new Set( - args.only - .split(',') - .map((job) => job.trim()) - .filter(Boolean), - ), - ) - : []; +const onlyJobNames = getOnlyJobNames(args); const onlyJobs = args.only === null ? null : new Set(onlyJobNames); -function setupE2E() { - return step('Setup E2E dependencies and package build', async (ctx) => { - await runCommand('pnpm', ['install', '--frozen-lockfile'], ctx); - await runCommand('npx', ['cypress', 'install'], ctx); - await runPackagesBuild(ctx); - }); -} +const { + checkAffectedStep, + e2eSetupSteps, + installDependenciesStep, + logStepSkip, + runWhenAffected, + setupAffectedE2E, +} = createLocalE2EHelpers({ + formatExit, + runCommand, + runPackagesBuild, + step, +}); const jobs = [ { @@ -48,6 +66,13 @@ const jobs = [ step('Check code format', (ctx) => runCommand('node', ['tools/scripts/check-format-changed.mjs'], ctx), ), + step('Test CI affected policy', (ctx) => + runCommand( + 'node', + ['--test', 'tools/scripts/ci-is-affected.test.mjs'], + ctx, + ), + ), step('Verify Rslib Template Publint Wiring', (ctx) => runCommand( 'node', @@ -172,31 +197,23 @@ const jobs = [ }, { name: 'e2e-modern', - env: { SKIP_DEVTOOLS_POSTINSTALL: 'true' }, + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, steps: [ - setupE2E(), - step('Check CI conditions', async (ctx) => { - ctx.state.shouldRun = await ciIsAffected( - '@module-federation/modern-js,@module-federation/modern-js-v3', - ctx, - ); - }), - step('E2E Test for ModernJS', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await runCommand('pnpm', ['run', 'e2e:modern'], ctx); - }), + ...e2eSetupSteps('modern'), + step('E2E Test for ModernJS', (ctx) => + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:modern'], ctx), + ), + ), ], }, { name: 'e2e-runtime', - env: { SKIP_DEVTOOLS_POSTINSTALL: 'true' }, + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, steps: [ - setupE2E(), + ...e2eSetupSteps('runtime'), step('E2E Test for Runtime Demo', (ctx) => - runIfAffected(ctx, 'runtime-host,runtime-remote1,runtime-remote2', () => + runWhenAffected(ctx, () => runCommand('pnpm', ['run', 'e2e:runtime'], ctx), ), ), @@ -204,159 +221,128 @@ const jobs = [ }, { name: 'e2e-manifest', - env: { SKIP_DEVTOOLS_POSTINSTALL: 'true' }, + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, steps: [ - setupE2E(), + ...e2eSetupSteps('manifest'), step('E2E Test for Manifest Demo (dev)', (ctx) => - runIfAffected( - ctx, - '3008-webpack-host,3009-webpack-provider,3010-rspack-provider,3011-rspack-manifest-provider,3012-rspack-js-entry-provider', - () => runCommand('pnpm', ['run', 'e2e:manifest:dev'], ctx), + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:manifest:dev'], ctx), ), ), step('E2E Test for Manifest Demo (prod)', (ctx) => - runIfAffected( - ctx, - '3008-webpack-host,3009-webpack-provider,3010-rspack-provider,3011-rspack-manifest-provider,3012-rspack-js-entry-provider', - () => runCommand('pnpm', ['run', 'e2e:manifest:prod'], ctx), + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:manifest:prod'], ctx), ), ), ], }, { name: 'e2e-node', - env: { SKIP_DEVTOOLS_POSTINSTALL: 'true' }, + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, steps: [ - setupE2E(), - step('Check CI conditions', async (ctx) => { - ctx.state.shouldRun = await ciIsAffected( - 'node-host,node-local-remote,node-remote,node-dynamic-remote-new-version,node-dynamic-remote,node-host-e2e', - ctx, - ); - }), - step('E2E Node Federation', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await runCommand('pnpm', ['run', 'e2e:node'], ctx); - }), + ...e2eSetupSteps('node'), + step('E2E Node Federation', (ctx) => + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:node'], ctx), + ), + ), ], }, { name: 'e2e-next-dev', env: { - SKIP_DEVTOOLS_POSTINSTALL: 'true', + ...SKIP_DEVTOOLS_POSTINSTALL_ENV, NEXT_PRIVATE_LOCAL_WEBPACK: 'true', }, steps: [ - setupE2E(), + ...e2eSetupSteps('next'), step('E2E Test for Next.js Dev', (ctx) => - runIfAffected( - ctx, - '@module-federation/3000-home,@module-federation/3001-shop,@module-federation/3002-checkout', - () => runCommand('pnpm', ['run', 'e2e:next:dev'], ctx), + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:next:dev'], ctx), ), ), ], }, { name: 'e2e-next-prod', - env: { SKIP_DEVTOOLS_POSTINSTALL: 'true' }, + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, steps: [ - setupE2E(), + ...e2eSetupSteps('next'), step('E2E Test for Next.js Prod', (ctx) => - runIfAffected( - ctx, - '@module-federation/3000-home,@module-federation/3001-shop,@module-federation/3002-checkout', - () => runCommand('pnpm', ['run', 'e2e:next:prod'], ctx), + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:next:prod'], ctx), ), ), ], }, { name: 'e2e-treeshake', - env: { SKIP_DEVTOOLS_POSTINSTALL: 'true' }, + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, steps: [ - step('Install dependencies', (ctx) => - runCommand('pnpm', ['install', '--frozen-lockfile'], ctx), + ...e2eSetupSteps('treeshake', { cypress: false }), + step('E2E Treeshake Server', (ctx) => + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:treeshake:server'], ctx), + ), + ), + step('E2E Treeshake Frontend', (ctx) => + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:treeshake:frontend'], ctx), + ), ), - step('Build packages', (ctx) => runPackagesBuild(ctx)), - step('Check CI conditions', async (ctx) => { - ctx.state.shouldRun = await ciIsAffected( - '@module-federation/treeshake-server,@module-federation/treeshake-frontend', - ctx, - ); - }), - step('E2E Treeshake Server', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await runCommand('pnpm', ['run', 'e2e:treeshake:server'], ctx); - }), - step('E2E Treeshake Frontend', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await runCommand('pnpm', ['run', 'e2e:treeshake:frontend'], ctx); - }), ], }, { name: 'e2e-modern-ssr', - env: { SKIP_DEVTOOLS_POSTINSTALL: 'true' }, + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, steps: [ - setupE2E(), - step('Check CI conditions', async (ctx) => { - ctx.state.shouldRun = await ciIsAffected( - '@module-federation/modern-js,@module-federation/modern-js-v3,modernjs-ssr-host,modernjs-ssr-remote,modernjs-ssr-remote-new-version,modernjs-ssr-nested-remote,modernjs-ssr-dynamic-remote,modernjs-ssr-dynamic-remote-new-version,modernjs-ssr-dynamic-nested-remote,modernjs-ssr-data-fetch-host,modernjs-ssr-data-fetch-provider,modernjs-ssr-data-fetch-provider-csr', - ctx, - ); - }), - step('E2E Test for ModernJS SSR', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await runCommand('pnpm', ['run', 'e2e:modern:ssr'], ctx); - }), + ...e2eSetupSteps('modernSsr'), + step('E2E Test for ModernJS SSR', (ctx) => + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:modern:ssr'], ctx), + ), + ), ], }, { name: 'e2e-router', - env: { SKIP_DEVTOOLS_POSTINSTALL: 'true' }, + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, steps: [ - setupE2E(), - step('Check CI conditions', async (ctx) => { - ctx.state.shouldRun = await ciIsAffected( - 'host,host-v5,host-vue3,remote1,remote2,remote3,remote4,remote5,remote6', - ctx, - ); - }), - step('E2E Test for Router', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; + ...e2eSetupSteps('router'), + step('E2E Test for Router', (ctx) => + runWhenAffected(ctx, () => + runCommand('pnpm', ['run', 'e2e:router'], ctx), + ), + ), + ], + }, + { + name: 'e2e-bridge-ssr', + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, + steps: [ + installDependenciesStep(), + step('Build packages', (ctx) => runPackagesBuild(ctx)), + step('Bridge SSR development acceptance', (ctx) => + runCommand('pnpm', ['run', 'e2e:bridge:ssr'], ctx), + ), + step('Bridge SSR production acceptance', (ctx) => + runCommand('pnpm', ['run', 'e2e:bridge:ssr:production'], ctx), + ), + step('Bridge SSR Vite smoke (non-blocking)', async (ctx) => { + try { + await runCommand('pnpm', ['run', 'e2e:bridge:ssr:vite-smoke'], ctx); + } catch (error) { + console.warn('[ci:local] Non-blocking Vite smoke failed:', error); } - await runCommand('pnpm', ['run', 'e2e:router'], ctx); }), ], }, { name: 'metro-affected-check', - env: { - SKIP_DEVTOOLS_POSTINSTALL: 'true', - METRO_APP_NAME: process.env.CI_LOCAL_METRO_APP_NAME ?? 'example-host', - }, + env: METRO_E2E_ENV, steps: [ - step('Install dependencies', (ctx) => - runCommand('pnpm', ['install', '--frozen-lockfile'], ctx), - ), - step('Check CI conditions', async (ctx) => { - ctx.state.shouldRun = await ciIsAffected(ctx.env.METRO_APP_NAME, ctx); - }), + installDependenciesStep(), + checkAffectedStep((ctx) => ctx.env.METRO_APP_NAME, 'metro'), step('Print Metro affected result', (ctx) => { if (ctx.state.shouldRun) { console.log( @@ -373,32 +359,23 @@ const jobs = [ }, { name: 'metro-android-e2e', - env: { - SKIP_DEVTOOLS_POSTINSTALL: 'true', - METRO_APP_NAME: process.env.CI_LOCAL_METRO_APP_NAME ?? 'example-host', - }, + env: METRO_E2E_ENV, steps: [ - step('Install dependencies', (ctx) => - runCommand('pnpm', ['install', '--frozen-lockfile'], ctx), - ), - step('Build shared packages', (ctx) => runPackagesBuild(ctx)), - step('Check CI conditions', async (ctx) => { - ctx.state.shouldRun = await ciIsAffected(ctx.env.METRO_APP_NAME, ctx); - }), + installDependenciesStep(), + checkAffectedStep((ctx) => ctx.env.METRO_APP_NAME, 'metro'), + setupAffectedE2E({ cypress: false }), step('Run Metro Android E2E tests', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await runCommand( - 'node', - [ - 'tools/scripts/run-metro-e2e.mjs', - '--platform=android', - `--appName=${ctx.env.METRO_APP_NAME}`, - '--skip-on-missing-prereqs', - ], - ctx, + await runWhenAffected(ctx, () => + runCommand( + 'node', + [ + 'tools/scripts/run-metro-e2e.mjs', + '--platform=android', + `--appName=${ctx.env.METRO_APP_NAME}`, + '--skip-on-missing-prereqs', + ], + ctx, + ), ); }), ], @@ -411,18 +388,10 @@ const jobs = [ }, { name: 'metro-ios-e2e', - env: { - SKIP_DEVTOOLS_POSTINSTALL: 'true', - METRO_APP_NAME: process.env.CI_LOCAL_METRO_APP_NAME ?? 'example-host', - }, + env: METRO_E2E_ENV, steps: [ - step('Install dependencies', (ctx) => - runCommand('pnpm', ['install', '--frozen-lockfile'], ctx), - ), - step('Build shared packages', (ctx) => runPackagesBuild(ctx)), - step('Check CI conditions', async (ctx) => { - ctx.state.shouldRun = await ciIsAffected(ctx.env.METRO_APP_NAME, ctx); - }), + installDependenciesStep(), + checkAffectedStep((ctx) => ctx.env.METRO_APP_NAME, 'metro'), step('Check Metro iOS compatibility', (ctx) => { if (!ctx.state.shouldRun) { logStepSkip(ctx, 'Not affected by current changes.'); @@ -430,23 +399,23 @@ const jobs = [ } if (process.platform !== 'darwin') { ctx.state.shouldRun = false; - logStepSkip(ctx, 'Requires macOS to run iOS simulator tests.'); + ctx.state.skipReason = 'Requires macOS to run iOS simulator tests.'; + logStepSkip(ctx, ctx.state.skipReason); } }), + setupAffectedE2E({ cypress: false }), step('Run Metro iOS E2E tests', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await runCommand( - 'node', - [ - 'tools/scripts/run-metro-e2e.mjs', - '--platform=ios', - `--appName=${ctx.env.METRO_APP_NAME}`, - '--skip-on-missing-prereqs', - ], - ctx, + await runWhenAffected(ctx, () => + runCommand( + 'node', + [ + 'tools/scripts/run-metro-e2e.mjs', + '--platform=ios', + `--appName=${ctx.env.METRO_APP_NAME}`, + '--skip-on-missing-prereqs', + ], + ctx, + ), ); }), ], @@ -459,37 +428,27 @@ const jobs = [ }, { name: 'e2e-shared-tree-shaking', - env: { SKIP_DEVTOOLS_POSTINSTALL: 'true' }, + env: SKIP_DEVTOOLS_POSTINSTALL_ENV, steps: [ - setupE2E(), - step('Check CI conditions', async (ctx) => { - ctx.state.shouldRun = await ciIsAffected( - 'shared-tree-shaking-no-server-host,shared-tree-shaking-no-server-provider,shared-tree-shaking-with-server-host,shared-tree-shaking-with-server-provider', - ctx, - ); - }), - step('E2E Shared Tree Shaking (runtime-infer)', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await runCommand( - 'pnpm', - ['run', 'e2e:shared-tree-shaking:runtime-infer'], - ctx, - ); - }), - step('E2E Shared Tree Shaking (server-calc)', async (ctx) => { - if (!ctx.state.shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await runCommand( - 'pnpm', - ['run', 'e2e:shared-tree-shaking:server-calc'], - ctx, - ); - }), + ...e2eSetupSteps('sharedTreeShaking'), + step('E2E Shared Tree Shaking (runtime-infer)', (ctx) => + runWhenAffected(ctx, () => + runCommand( + 'pnpm', + ['run', 'e2e:shared-tree-shaking:runtime-infer'], + ctx, + ), + ), + ), + step('E2E Shared Tree Shaking (server-calc)', (ctx) => + runWhenAffected(ctx, () => + runCommand( + 'pnpm', + ['run', 'e2e:shared-tree-shaking:server-calc'], + ctx, + ), + ), + ), ], }, { @@ -627,17 +586,27 @@ async function main() { printHelp(); return; } - validateArgs(); + validateArgs({ args, onlyJobNames, onlyJobs, selectableJobNames }); if (args.list) { - listJobs(jobs); + listJobs(jobs, { onlyJobs, selectableJobNames }); return; } - preflight(); + preflight({ + args, + detectPnpmVersion, + expectedNodeMajor: EXPECTED_NODE_MAJOR, + expectedPnpmVersion: EXPECTED_PNPM_VERSION, + }); if (args.skipCache) { console.log('[ci:local] Task cache bypass enabled (--skip-cache).'); } if (args.printParity) { - printParity(); + printParity({ + detectPnpmVersion, + expectedNodeMajor: EXPECTED_NODE_MAJOR, + expectedPnpmVersion: EXPECTED_PNPM_VERSION, + root: ROOT, + }); return; } for (const job of jobs) { @@ -697,49 +666,6 @@ async function runPackagesBuildAtPath(targetPath, ctx) { ); } -function preflight() { - const nodeMajor = Number(process.versions.node.split('.')[0]); - const parityIssues = []; - if (nodeMajor !== EXPECTED_NODE_MAJOR) { - parityIssues.push( - `node ${process.versions.node} (expected major ${EXPECTED_NODE_MAJOR})`, - ); - const pnpmVersionForHint = EXPECTED_PNPM_VERSION ?? '10.28.0'; - console.warn( - `[ci:local] Warning: running with Node ${process.versions.node}. CI runs with Node ${EXPECTED_NODE_MAJOR}.`, - ); - console.warn( - `[ci:local] For closest parity run: source "$HOME/.nvm/nvm.sh" && nvm use ${EXPECTED_NODE_MAJOR} && corepack enable && corepack prepare pnpm@${pnpmVersionForHint} --activate`, - ); - } - - const pnpmCheck = detectPnpmVersion(); - if (pnpmCheck.status !== 0) { - throw new Error( - '[ci:local] pnpm not found in PATH. Install/activate pnpm before running ci-local.', - ); - } - - const pnpmVersion = (pnpmCheck.stdout ?? '').trim(); - if (EXPECTED_PNPM_VERSION && pnpmVersion !== EXPECTED_PNPM_VERSION) { - parityIssues.push( - `pnpm ${pnpmVersion} (expected ${EXPECTED_PNPM_VERSION})`, - ); - console.warn( - `[ci:local] Warning: running with pnpm ${pnpmVersion}. CI parity target is pnpm ${EXPECTED_PNPM_VERSION}.`, - ); - console.warn( - `[ci:local] For closest parity run: corepack enable && corepack prepare pnpm@${EXPECTED_PNPM_VERSION} --activate`, - ); - } - - if (args.strictParity && parityIssues.length > 0) { - throw new Error( - `[ci:local] Strict parity check failed: ${parityIssues.join('; ')}`, - ); - } -} - async function runJob(job, parentCtx = {}) { const skipFilter = parentCtx.skipFilter === true; const inheritedCtx = { ...parentCtx }; @@ -749,7 +675,7 @@ async function runJob(job, parentCtx = {}) { console.log(`[ci:local] Skipping job "${job.name}": ${job.skipReason}`); return; } - if (!skipFilter && !shouldRunJob(job)) { + if (!skipFilter && !shouldRunJob(job, onlyJobs)) { console.log(`[ci:local] Skipping job "${job.name}" (filtered).`); return; } @@ -805,244 +731,6 @@ function step(label, run) { return { label, run }; } -function shouldRunJob(job) { - if (!onlyJobs) { - return true; - } - if (onlyJobs.has(job.name)) { - return true; - } - if (job.matrix?.length) { - return job.matrix.some((entry) => - onlyJobs.has(formatMatrixJobName(job.name, entry)), - ); - } - return false; -} - -function listJobs(jobList) { - console.log('ci:local job list:'); - if (onlyJobs) { - console.log( - `[ci:local] Listing filtered jobs: ${Array.from(onlyJobs).join(', ')}`, - ); - } - let listedCount = 0; - for (const job of jobList) { - if (job.matrix?.length) { - const includeAllEntries = !onlyJobs || onlyJobs.has(job.name); - if (!includeAllEntries) { - const hasMatchingEntry = job.matrix.some((entry) => - onlyJobs.has(formatMatrixJobName(job.name, entry)), - ); - if (!hasMatchingEntry) { - continue; - } - } - for (const entry of job.matrix) { - const entryName = formatMatrixJobName(job.name, entry); - if (!includeAllEntries && onlyJobs && !onlyJobs.has(entryName)) { - continue; - } - console.log(`- ${formatJobListEntry({ name: entryName })}`); - listedCount += 1; - } - } else { - if (onlyJobs && !onlyJobs.has(job.name)) { - continue; - } - console.log(`- ${formatJobListEntry(job)}`); - listedCount += 1; - } - } - if (listedCount === 0) { - console.log('(no matching jobs)'); - } - if (onlyJobs) { - console.log( - `[ci:local] Matched ${listedCount} of ${selectableJobNames.size} selectable jobs.`, - ); - } else { - console.log(`[ci:local] Listed ${listedCount} selectable jobs.`); - } - console.log('\nUse --only=job1,job2 to run a subset.'); -} - -function printParity() { - const pnpmCheck = detectPnpmVersion(); - const currentPnpmVersion = - pnpmCheck.status === 0 ? (pnpmCheck.stdout ?? '').trim() : 'unavailable'; - - console.log('ci:local parity config:'); - console.log(`- repo root: ${ROOT}`); - console.log(`- expected node major: ${EXPECTED_NODE_MAJOR}`); - console.log( - `- expected pnpm version: ${EXPECTED_PNPM_VERSION ?? 'unconfigured'}`, - ); - console.log(`- current node: ${process.versions.node}`); - console.log(`- current pnpm: ${currentPnpmVersion}`); -} - -function printHelp() { - console.log('Usage: node tools/scripts/ci-local.mjs [options]'); - console.log(''); - console.log('Options:'); - console.log(' --list List available jobs'); - console.log( - ' --only= Run only specific comma-separated jobs (repeatable)', - ); - console.log( - ' --print-parity Print derived node/pnpm parity settings', - ); - console.log( - ' --strict-parity Fail when node/pnpm parity is mismatched', - ); - console.log( - ' --skip-cache Bypass Turbo task caches for supported ci-local steps', - ); - console.log(' --help Show this help message'); - console.log(''); - console.log('Examples:'); - console.log(' node tools/scripts/ci-local.mjs --only=build-metro'); - console.log( - ' node tools/scripts/ci-local.mjs --only=build-metro --only=actionlint', - ); - console.log(' node tools/scripts/ci-local.mjs --list --only=build-metro'); - console.log(' node tools/scripts/ci-local.mjs --print-parity'); - console.log( - ' node tools/scripts/ci-local.mjs --strict-parity --only=build-and-test', - ); - console.log( - ' node tools/scripts/ci-local.mjs --skip-cache --only=build-and-test', - ); -} - -function parseArgs(argv) { - const result = { - help: false, - list: false, - only: null, - onlyTokens: [], - printParity: false, - skipCache: false, - strictParity: false, - errors: [], - unknownArgs: [], - }; - for (let i = 2; i < argv.length; i += 1) { - const arg = argv[i]; - if (arg === '--list') { - result.list = true; - continue; - } - if (arg === '--help' || arg === '-h') { - result.help = true; - continue; - } - if (arg === '--only') { - const onlyValue = argv[i + 1]; - if (!onlyValue || onlyValue.startsWith('--')) { - result.errors.push('Missing value for --only.'); - continue; - } - result.onlyTokens.push(onlyValue); - i += 1; - continue; - } - if (arg.startsWith('--only=')) { - result.onlyTokens.push(arg.slice('--only='.length)); - continue; - } - if (arg === '--print-parity') { - result.printParity = true; - continue; - } - if (arg === '--skip-cache') { - result.skipCache = true; - continue; - } - if (arg === '--strict-parity') { - result.strictParity = true; - continue; - } - result.unknownArgs.push(arg); - } - if (result.onlyTokens.length > 0) { - result.only = result.onlyTokens.join(','); - } - delete result.onlyTokens; - return result; -} - -function validateArgs() { - const issues = []; - - if (args.errors.length > 0) { - issues.push(...args.errors); - } - - if (args.unknownArgs.length > 0) { - issues.push( - `Unknown option(s): ${args.unknownArgs.join(', ')}. Use --help to see supported flags.`, - ); - } - - if (args.only !== null && onlyJobNames.length === 0) { - issues.push( - 'The --only option requires at least one job name (use --list to inspect available jobs).', - ); - } - - if (onlyJobs) { - const unknownJobNames = onlyJobNames.filter( - (jobName) => !selectableJobNames.has(jobName), - ); - if (unknownJobNames.length > 0) { - issues.push( - `Unknown job(s) in --only: ${unknownJobNames.join(', ')}. Use --list to inspect available jobs.`, - ); - } - } - - if (issues.length > 0) { - throw new Error(`[ci:local] ${issues.join(' ')}`); - } -} - -function formatMatrixJobName(jobName, entry) { - const entryName = entry.name ?? entry.id ?? 'matrix'; - return `${jobName} (${entryName})`; -} - -function formatJobListEntry(job) { - if (!job.skipReason) { - return job.name; - } - return `${job.name} [skip: ${job.skipReason}]`; -} - -function getSelectableJobNames(jobList) { - const names = new Set(); - for (const job of jobList) { - names.add(job.name); - if (job.matrix?.length) { - for (const entry of job.matrix) { - names.add(formatMatrixJobName(job.name, entry)); - } - } - } - return names; -} - -async function runIfAffected(ctx, affectedAppName, run) { - const shouldRun = await ciIsAffected(affectedAppName, ctx); - if (!shouldRun) { - logStepSkip(ctx, 'Not affected by current changes.'); - return; - } - await run(); -} - async function runChangedPackageTests(ctx) { const commandArgs = ['tools/scripts/run-affected-package-tests.mjs']; if (args.skipCache) { @@ -1210,19 +898,6 @@ function resolveExpectedPnpmVersion(packageJson) { return null; } -async function ciIsAffected(appName, ctx) { - const result = await runCommand( - 'node', - ['tools/scripts/ci-is-affected.mjs', `--appName=${appName}`], - { ...ctx, allowFailure: true }, - ); - return result.code === 0; -} - -function logStepSkip(ctx, reason) { - console.log(`[ci:local] ${ctx.jobName} -> Skipped: ${reason}`); -} - function formatExit({ code, signal }) { const parts = []; if (code !== null && code !== undefined) { diff --git a/tools/scripts/copy-dts-to-dmts.mjs b/tools/scripts/copy-dts-to-dmts.mjs new file mode 100644 index 00000000000..be0c8b43c6d --- /dev/null +++ b/tools/scripts/copy-dts-to-dmts.mjs @@ -0,0 +1,25 @@ +import { copyFile, readdir } from 'node:fs/promises'; +import { join } from 'node:path'; + +const targetDir = process.argv[2] || 'dist'; + +async function copyDeclarations(dir) { + const entries = await readdir(dir, { withFileTypes: true }); + + await Promise.all( + entries.map(async (entry) => { + const filePath = join(dir, entry.name); + + if (entry.isDirectory()) { + await copyDeclarations(filePath); + return; + } + + if (entry.isFile() && entry.name.endsWith('.d.ts')) { + await copyFile(filePath, filePath.replace(/\.d\.ts$/, '.d.mts')); + } + }), + ); +} + +await copyDeclarations(targetDir); diff --git a/tools/scripts/prepare-node20-compat-packages.mjs b/tools/scripts/prepare-node20-compat-packages.mjs new file mode 100644 index 00000000000..a4c43de6c9c --- /dev/null +++ b/tools/scripts/prepare-node20-compat-packages.mjs @@ -0,0 +1,56 @@ +import { + existsSync, + mkdirSync, + readFileSync, + readdirSync, + rmSync, +} from 'node:fs'; +import { basename, join, resolve } from 'node:path'; +import { spawnSync } from 'node:child_process'; +import { fileURLToPath } from 'node:url'; + +const ROOT = resolve(fileURLToPath(new URL('../..', import.meta.url))); +const PACKAGES_DIR = join(ROOT, 'packages'); +const OUTPUT_DIR = resolve(ROOT, process.argv[2] || 'artifacts/node20-compat'); + +rmSync(OUTPUT_DIR, { recursive: true, force: true }); +mkdirSync(OUTPUT_DIR, { recursive: true }); + +const packageDirs = readdirSync(PACKAGES_DIR, { withFileTypes: true }) + .filter((entry) => entry.isDirectory()) + .map((entry) => join(PACKAGES_DIR, entry.name)) + .filter((packageDir) => existsSync(join(packageDir, 'package.json'))) + .filter((packageDir) => { + const packageJson = JSON.parse( + readFileSync(join(packageDir, 'package.json'), 'utf8'), + ); + return packageJson.private !== true; + }) + .sort(); + +for (const packageDir of packageDirs) { + const result = spawnSync('pnpm', ['pack', '--pack-destination', OUTPUT_DIR], { + cwd: packageDir, + encoding: 'utf8', + stdio: 'pipe', + }); + + if (result.status !== 0) { + process.stderr.write(result.stdout || ''); + process.stderr.write(result.stderr || ''); + throw new Error(`Failed to pack ${basename(packageDir)}`); + } +} + +const tarballs = readdirSync(OUTPUT_DIR).filter((file) => + file.endsWith('.tgz'), +); +if (tarballs.length !== packageDirs.length) { + throw new Error( + `Expected ${packageDirs.length} tarballs, found ${tarballs.length}`, + ); +} + +console.log( + `[node20-compat] Packed ${tarballs.length} publishable packages into ${OUTPUT_DIR}`, +); diff --git a/tools/scripts/run-bridge-ssr-e2e.mjs b/tools/scripts/run-bridge-ssr-e2e.mjs new file mode 100644 index 00000000000..479bd350c50 --- /dev/null +++ b/tools/scripts/run-bridge-ssr-e2e.mjs @@ -0,0 +1,212 @@ +#!/usr/bin/env node +import { spawn } from 'node:child_process'; +import { + DETACHED_PROCESS_GROUP, + shutdownServe, + spawnWithPromise, +} from './e2e-process-utils.mjs'; + +const viteSmoke = process.env.BRIDGE_SSR_REMOTE_BUNDLER === 'vite'; +const production = process.env.BRIDGE_SSR_MODE === 'production' || viteSmoke; +let stopping = false; + +function startOwned(label, command, args, env) { + const child = spawn(command, args, { + stdio: 'inherit', + detached: true, + env: { ...process.env, ...env }, + }); + child[DETACHED_PROCESS_GROUP] = true; + const exit = new Promise((resolve, reject) => { + child.once('exit', (code, signal) => { + if (stopping) resolve({ code, signal }); + else + reject(new Error(`${label} exited unexpectedly (${signal ?? code})`)); + }); + child.once('error', reject); + }); + return { child, exit }; +} + +async function run(command, args, env) { + await spawnWithPromise(command, args, { + env: { ...process.env, ...env }, + }).promise; +} + +async function build(env) { + if (viteSmoke) { + await run( + 'pnpm', + ['--filter', 'bridge-ssr-remote-vue', 'run', 'build:vite'], + env, + ); + await run( + 'pnpm', + [ + 'exec', + 'turbo', + 'run', + 'build', + '--filter=bridge-ssr-host', + '--force', + '--env-mode=loose', + ], + env, + ); + } else { + await run( + 'pnpm', + [ + 'exec', + 'turbo', + 'run', + 'build', + '--filter=bridge-ssr-host', + '--filter=bridge-ssr-host-vue', + '--filter=bridge-ssr-remote-react', + '--filter=bridge-ssr-remote-vue', + ], + env, + ); + } + await run( + process.execPath, + ['tools/scripts/verify-bridge-ssr-browser-bundles.mjs'], + env, + ); +} + +async function main() { + const env = { + HOST: process.env.HOST ?? 'localhost', + BRIDGE_SSR_REMOTE_BUNDLER: viteSmoke ? 'vite' : 'rsbuild', + ...(production ? { BRIDGE_SSR_MODE: 'production' } : {}), + }; + if (production) await build(env); + + const apps = []; + if (viteSmoke) { + apps.push( + startOwned( + 'Vue Vite remote', + process.execPath, + [ + 'apps/bridge-ssr-demo/shared/serveDist.mjs', + 'apps/bridge-ssr-demo/remote-vue/dist-vite', + '2402', + ], + env, + ), + startOwned( + 'React production host', + 'pnpm', + ['--filter', 'bridge-ssr-host', 'run', 'serve:production'], + env, + ), + ); + } else if (production) { + for (const [framework, port] of [ + ['react', '2301'], + ['vue', '2302'], + ]) { + apps.push( + startOwned( + `${framework} remote`, + process.execPath, + [ + 'apps/bridge-ssr-demo/shared/serveDist.mjs', + `apps/bridge-ssr-demo/remote-${framework}/dist`, + port, + ], + env, + ), + ); + } + apps.push( + startOwned( + 'React production host', + 'pnpm', + ['--filter', 'bridge-ssr-host', 'run', 'serve:production'], + env, + ), + startOwned( + 'Vue production host', + 'pnpm', + ['--filter', 'bridge-ssr-host-vue', 'run', 'serve:production'], + env, + ), + ); + } else { + apps.push( + startOwned( + 'React remote', + 'pnpm', + ['--filter', 'bridge-ssr-remote-react', 'run', 'dev'], + env, + ), + startOwned( + 'Vue remote', + 'pnpm', + ['--filter', 'bridge-ssr-remote-vue', 'run', 'dev'], + env, + ), + startOwned( + 'React host', + 'pnpm', + ['--filter', 'bridge-ssr-host', 'run', 'dev'], + env, + ), + startOwned( + 'Vue host', + 'pnpm', + ['--filter', 'bridge-ssr-host-vue', 'run', 'dev'], + env, + ), + ); + } + + try { + const ports = viteSmoke + ? ['tcp:2300', 'tcp:2402'] + : ['tcp:2300', 'tcp:2301', 'tcp:2302', 'tcp:2303']; + await Promise.race([ + spawnWithPromise('npx', ['wait-on', '--timeout=240000', ...ports]) + .promise, + Promise.race(apps.map((app) => app.exit)), + ]); + await Promise.race([ + run('pnpm', ['--filter', 'bridge-ssr-host', 'run', 'e2e:ssr:ci'], env), + Promise.race(apps.map((app) => app.exit)), + ]); + if (!viteSmoke) { + await Promise.race([ + run( + 'pnpm', + ['--filter', 'bridge-ssr-host-vue', 'run', 'e2e:ssr:ci'], + env, + ), + Promise.race(apps.map((app) => app.exit)), + ]); + } + } finally { + stopping = true; + await Promise.allSettled( + apps.map(({ child, exit }) => shutdownServe(child, exit)), + ); + } +} + +process.on('uncaughtException', (error) => { + console.error('[bridge-ssr-e2e] uncaught exception', error); + process.exitCode = 1; +}); +process.on('unhandledRejection', (error) => { + console.error('[bridge-ssr-e2e] unhandled rejection', error); + process.exitCode = 1; +}); + +main().catch((error) => { + console.error('[bridge-ssr-e2e] failed', error); + process.exitCode = 1; +}); diff --git a/tools/scripts/verify-bridge-ssr-browser-bundles.mjs b/tools/scripts/verify-bridge-ssr-browser-bundles.mjs new file mode 100644 index 00000000000..cd960b67689 --- /dev/null +++ b/tools/scripts/verify-bridge-ssr-browser-bundles.mjs @@ -0,0 +1,49 @@ +#!/usr/bin/env node +import { readFile, readdir, stat } from 'node:fs/promises'; +import path from 'node:path'; + +const roots = + process.env.BRIDGE_SSR_REMOTE_BUNDLER === 'vite' + ? [ + 'apps/bridge-ssr-demo/remote-vue/dist-vite/assets', + 'apps/bridge-ssr-demo/remote-vue/dist-vite/remoteEntry.js', + ] + : [ + 'apps/bridge-ssr-demo/remote-react/dist/static', + 'apps/bridge-ssr-demo/remote-vue/dist/static', + ]; +const forbidden = [ + 'react-dom/server', + '@vue/server-renderer', + 'export-app.server', +]; + +async function files(directory) { + if ((await stat(directory)).isFile()) return [directory]; + const entries = await readdir(directory, { withFileTypes: true }); + return ( + await Promise.all( + entries.map((entry) => { + const target = path.join(directory, entry.name); + return entry.isDirectory() ? files(target) : [target]; + }), + ) + ).flat(); +} + +for (const root of roots) { + for (const file of await files(root)) { + if (!/\.(?:js|mjs|cjs)$/.test(file)) continue; + const source = await readFile(file, 'utf8'); + for (const token of forbidden) { + if (source.includes(token)) { + throw new Error( + `Browser bundle ${file} contains server-only token ${token}`, + ); + } + } + } +} +console.log( + '[bridge-ssr] browser bundles exclude server-only renderers and preparation', +); diff --git a/tools/scripts/verify-node20-compat.mjs b/tools/scripts/verify-node20-compat.mjs new file mode 100644 index 00000000000..d0136826ea2 --- /dev/null +++ b/tools/scripts/verify-node20-compat.mjs @@ -0,0 +1,115 @@ +import { + cpSync, + mkdtempSync, + readFileSync, + readdirSync, + rmSync, + writeFileSync, +} from 'node:fs'; +import { tmpdir } from 'node:os'; +import { basename, join, resolve } from 'node:path'; +import { spawnSync } from 'node:child_process'; +import { fileURLToPath } from 'node:url'; + +const ROOT = resolve(fileURLToPath(new URL('../..', import.meta.url))); +const FIXTURE_DIR = join(ROOT, 'tools/fixtures/node20-compat'); +const TARBALL_DIR = resolve(ROOT, process.argv[2] || 'artifacts/node20-compat'); +const EXPECTED_NODE_VERSION = '20.19.5'; + +if (process.versions.node !== EXPECTED_NODE_VERSION) { + throw new Error( + `This compatibility check must run on Node.js ${EXPECTED_NODE_VERSION}; received ${process.versions.node}`, + ); +} + +const tarballs = readdirSync(TARBALL_DIR) + .filter((file) => file.endsWith('.tgz')) + .map((file) => resolve(TARBALL_DIR, file)); + +if (tarballs.length === 0) { + throw new Error(`No package tarballs found in ${TARBALL_DIR}`); +} + +const consumerDir = mkdtempSync(join(tmpdir(), 'mf-node20-compat-')); + +try { + cpSync(FIXTURE_DIR, consumerDir, { recursive: true }); + + const rootPackageJson = JSON.parse( + readFileSync(join(ROOT, 'package.json'), 'utf8'), + ); + const packageJson = JSON.parse( + readFileSync(join(consumerDir, 'package.json'), 'utf8'), + ); + + packageJson.devDependencies = { + '@rspack/cli': rootPackageJson.devDependencies['@rspack/cli'], + '@rspack/core': rootPackageJson.devDependencies['@rspack/core'], + '@swc/core': rootPackageJson.devDependencies['@swc/core'], + '@types/node': rootPackageJson.devDependencies['@types/node'], + 'swc-loader': rootPackageJson.devDependencies['swc-loader'], + typescript: rootPackageJson.devDependencies.typescript, + webpack: rootPackageJson.devDependencies.webpack, + 'webpack-cli': rootPackageJson.devDependencies['webpack-cli'], + }; + for (const tarball of tarballs) { + const packageJsonOutput = run( + 'tar', + ['-xOf', tarball, 'package/package.json'], + { cwd: consumerDir, printOutput: false }, + ); + const packageName = JSON.parse(packageJsonOutput); + packageJson.dependencies[packageName.name] = `file:${tarball}`; + } + + writeFileSync( + join(consumerDir, 'package.json'), + `${JSON.stringify(packageJson, null, 2)}\n`, + ); + + run('npm', ['install', '--legacy-peer-deps'], { + cwd: consumerDir, + env: { + ...process.env, + npm_config_cache: join(consumerDir, '.npm-cache'), + }, + }); + run('node', ['smoke-cjs.cjs'], { cwd: consumerDir }); + run('node', ['smoke-esm.mjs'], { cwd: consumerDir }); + run('node', ['node_modules/@module-federation/cli/bin/mf.js', '--help'], { + cwd: consumerDir, + }); + run('npm', ['run', 'typecheck'], { cwd: consumerDir }); + run('npm', ['run', 'build:webpack'], { cwd: consumerDir }); + run('npm', ['run', 'build:rspack'], { cwd: consumerDir }); + run('node', ['dist/webpack/main.js'], { cwd: consumerDir }); + run('node', ['dist/rspack/main.js'], { cwd: consumerDir }); + + console.log( + `[node20-compat] Installed and verified ${tarballs.length} package tarballs on Node.js ${process.versions.node}`, + ); +} finally { + rmSync(consumerDir, { recursive: true, force: true }); +} + +function run(command, args, options) { + const { printOutput = true, ...spawnOptions } = options; + const result = spawnSync(command, args, { + ...spawnOptions, + encoding: 'utf8', + stdio: 'pipe', + }); + + if (result.status !== 0) { + process.stderr.write(result.stdout || ''); + process.stderr.write(result.stderr || ''); + throw new Error( + `Command failed: ${command} ${args.map((arg) => basename(arg)).join(' ')}`, + ); + } + + if (printOutput && result.stdout) { + process.stdout.write(result.stdout); + } + return result.stdout.trim(); +} diff --git a/tsconfig.base.json b/tsconfig.base.json index ee9bafae480..b58749e971a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -5,7 +5,6 @@ "sourceMap": true, "esModuleInterop": true, "declaration": false, - "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, "importHelpers": false, @@ -15,7 +14,11 @@ "lib": ["es2021", "dom"], "skipLibCheck": true, "skipDefaultLibCheck": true, - "baseUrl": "." + "paths": { + "*": ["./*"] + }, + "strict": false, + "ignoreDeprecations": "6.0" }, "exclude": [ "node_modules/**", diff --git a/turbo.json b/turbo.json index cf4819cee60..3679f966b78 100644 --- a/turbo.json +++ b/turbo.json @@ -20,7 +20,7 @@ "website-new#build": { "dependsOn": ["^build"], "outputs": ["doc_build/**"], - "env": ["CONTEXT", "DEPLOY_PRIME_URL"] + "env": ["SITE_ORIGIN", "ZE_ENV", "ZE_SECRET_TOKEN"] }, "@module-federation/metro-plugin-rnc-cli#build": { "dependsOn": ["^build"],