diff --git a/.agents/skills/sokra-mode/SKILL.md b/.agents/skills/sokra-mode/SKILL.md new file mode 100644 index 00000000000..c2741845fa4 --- /dev/null +++ b/.agents/skills/sokra-mode/SKILL.md @@ -0,0 +1,15 @@ +--- +name: sokra-mode +description: >- + Apply sokra's webpack design discipline to module-federation/core plugin + architecture, runtime, caching, and reviews when asked for sokra mode or + to review or build something like sokra would. +--- + +# Sokra mode for Codex + +Read and follow the repository's [shared Sokra-mode guidance](../../../.claude/skills/sokra-mode/SKILL.md) before working on the requested task. That file is the source of truth for both Claude and Codex; keep architecture, verification, and review guidance there. + +Resolve the shared skill's relative reference links from its own directory, `.claude/skills/sokra-mode/`. Read its plugin patterns and repository map when the shared guidance calls for them. + +Invoke this skill with `$sokra-mode`. Preserve the existing opt-in behavior through `agents/openai.yaml`; the shared skill's `disable-model-invocation` frontmatter is Claude metadata, not Codex configuration. diff --git a/.agents/skills/sokra-mode/agents/openai.yaml b/.agents/skills/sokra-mode/agents/openai.yaml new file mode 100644 index 00000000000..5b1f887a913 --- /dev/null +++ b/.agents/skills/sokra-mode/agents/openai.yaml @@ -0,0 +1,2 @@ +policy: + allow_implicit_invocation: false diff --git a/.changeset/consume-shared-distinct-ranges.md b/.changeset/consume-shared-distinct-ranges.md new file mode 100644 index 00000000000..75f0b1d3fbe --- /dev/null +++ b/.changeset/consume-shared-distinct-ranges.md @@ -0,0 +1,7 @@ +--- +'@module-federation/enhanced': patch +--- + +Keep one consume-shared module per `requiredVersion` range. Two packages that +require different ranges of the same shared dependency no longer collapse into +one module, so each gets its own version check. diff --git a/.changeset/hoist-inactive-connections.md b/.changeset/hoist-inactive-connections.md new file mode 100644 index 00000000000..90899e9d5aa --- /dev/null +++ b/.changeset/hoist-inactive-connections.md @@ -0,0 +1,5 @@ +--- +'@module-federation/enhanced': patch +--- + +HoistContainerReferencesPlugin no longer hoists modules that webpack already pruned. The module graph walk now skips connections whose active state is false, such as an unused import of a `sideEffects: false` package, so the runtime chunk keeps only modules that are reachable through an active connection. diff --git a/.changeset/runtime-infer-share-coverage.md b/.changeset/runtime-infer-share-coverage.md new file mode 100644 index 00000000000..dabb93f33d5 --- /dev/null +++ b/.changeset/runtime-infer-share-coverage.md @@ -0,0 +1,6 @@ +--- +'@module-federation/runtime-core': patch +'@module-federation/webpack-bundler-runtime': patch +--- + +Fall back to the full shared getter when a `runtime-infer` tree-shaken variant does not cover the consumer's used exports. diff --git a/.changeset/salty-deer-cheat.md b/.changeset/salty-deer-cheat.md deleted file mode 100644 index 1a284e3dc97..00000000000 --- a/.changeset/salty-deer-cheat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@module-federation/nextjs-mf': patch ---- - -Fix server-side onLoad crash when async remote module factories are used during the webpack build/SSR path. Await async factory results before proxy-wrapping, return a wrapper factory for exposeModuleFactory, and preserve class constructor semantics via Proxy apply/construct traps. diff --git a/.changeset/secure-websocket-client.md b/.changeset/secure-websocket-client.md deleted file mode 100644 index 0d2c56790e3..00000000000 --- a/.changeset/secure-websocket-client.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@module-federation/dts-plugin": patch ---- - -Update ws to 8.21.3 to address CVE-2026-62389. diff --git a/.changeset/stable-remote-runtime-order.md b/.changeset/stable-remote-runtime-order.md new file mode 100644 index 00000000000..f3a94876077 --- /dev/null +++ b/.changeset/stable-remote-runtime-order.md @@ -0,0 +1,5 @@ +--- +"@module-federation/enhanced": patch +--- + +Fix remote runtime output ordering for stable build hashes. diff --git a/.changeset/wise-corners-care.md b/.changeset/wise-corners-care.md deleted file mode 100644 index 8b08f7e87f6..00000000000 --- a/.changeset/wise-corners-care.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@module-federation/runtime-core': patch ---- - -Clear rejected remote-entry loading promises from `globalLoading` so a later independent request can start a fresh load. diff --git a/.claude/skills/sokra-mode/SKILL.md b/.claude/skills/sokra-mode/SKILL.md new file mode 100644 index 00000000000..a65cfc968a8 --- /dev/null +++ b/.claude/skills/sokra-mode/SKILL.md @@ -0,0 +1,86 @@ +--- +name: sokra-mode +description: >- + Design, build, and maintain module-federation/core the way sokra (Tobias + Koppers) built webpack 5: plugin architecture, container/sharing, runtime, + caching, and reviews. Use for /sokra-mode, "sokra mode", "do it like sokra", + or "review this like sokra would". +disable-model-invocation: true +--- + +# sokra mode + +This skill applies sokra's webpack design discipline to building and maintaining this repo. `packages/enhanced` is a TypeScript fork of the container and sharing plugins he wrote, so his rules apply there directly. The rules come from his public webpack/webpack record: 739 authored PRs and 717 reviews (2019–2022), and 400 issues plus 49 discussions (2020–2024). His webpack code stops in November 2022. Don't impersonate him: never sign as him, post as him, or claim his approval. Detailed patterns with evidence links are in [references/plugin-patterns.md](references/plugin-patterns.md), and the per-package map of this repo's thirteen plugin packages is in [references/repo-map.md](references/repo-map.md). Read both before writing a new plugin, Module, Dependency, RuntimeModule, or runtime hook. + +## Architecture + +- **Build one feature as a slice of small classes.** Each class has one job and its own file: Plugin (wiring), Dependency plus Template, Module subclass, ModuleFactory, RuntimeModule, and a `RuntimeGlobals` entry. +- **Umbrella plugins only compose.** `ModuleFederationPlugin` → `ContainerPlugin` + `ContainerReferencePlugin` + `SharePlugin` → `ConsumeSharedPlugin` / `ProvideSharedPlugin`. +- **Reuse existing machinery.** Remotes are externals. A container is a normal entry with a `library`. Fallbacks go through `normalModuleFactory`. +- **Connect parts through hooks and requirements, not direct calls.** + - Code declares `runtimeRequirements`, and `runtimeRequirementInTree` adds the modules they need. + - Extension points are `static getCompilationHooks(compilation)` backed by a `WeakMap`. `FederationModulesPlugin` is this repo's example. +- **Put logic where the concern lives.** Loading goes in the loading or runtime plugin. Error text goes in the error. Build-phase work goes in `Module.build`. +- **Keep build and codeGeneration apart.** Never mutate `buildInfo` in codegen. Pass data out through codegen `data` and custom source types. Anything that crosses from build to codegen must be serializable. +- **Keep the core small, and challenge the premise first.** + - Ask for the use case, and check whether an existing option or hook already covers it. + - For rare needs, expose a small override or a replaceable module, not new config. + - Never add globals. + - Don't branch on `target`; gate on environment or feature flags. + +## Discipline + +- **Builds must be deterministic.** Sort every emitted map and key, and use tiebreakers. Output must not depend on build order, the machine, or the Node version. Adding a chunk must not rewrite shared chunks. +- **Caching must be correct by default.** + - Cached classes use `makeSerializable` and serialize every field, including subclass fields. + - Per-compilation state goes in a `WeakMap`. + - Dependency paths are absolute. + - Anything unsafe stays opt-in. +- **Performance is a correctness concern.** Hot paths do one `get` and compare to `undefined`. Avoid throwaway arrays and quadratic scans. Hoist constant `Set`s and comparators. Lazy-require with `memoize`. Measure perf claims. +- **Memory-trading optimizations are not plain wins.** A cache that grows, or that keeps modules which have left the compilation, goes behind `experiments.*` with eviction, or gets reverted ([#14436](https://github.com/webpack/webpack/pull/14436), [#14319](https://github.com/webpack/webpack/pull/14319)). +- **Never break a public or plugin-facing interface in a minor.** New behavior ships behind `experiments.*`. Renames keep a deprecation shim. +- **Report problems as errors when the output can't be correct, otherwise as warnings.** Messages name the cause and the fix. +- **Every option gets a schema and a precise type.** Name options positively. Use the graph APIs (`moduleGraph`, `chunkGraph`), never legacy `module.*` fields. Use `RuntimeGlobals` and `runtimeTemplate.basicFunction`/`returningFunction`, never a literal `__webpack_require__.x`. + +## This repo + +- **Package roles.** Thirteen packages are bundler plugins; [references/repo-map.md](references/repo-map.md) lists each with its hooks and gaps. + - `enhanced` is the webpack plugin layer, and every rule above applies in full. + - `node`, `nextjs-mf`, `dts-plugin`, `manifest`, `utilities`, and the legacy plugins compose on top of it. Same rules: umbrella plugins compose, runtime goes through requirements, assets go through `processAssets` with a named stage, options are validated at the boundary. + - `rspack` and `rsbuild-plugin` wrap rspack's native MF plugin. They shape options; module and dependency internals live in rspack itself. + - `runtime-core` and `webpack-bundler-runtime` hold the runtime logic. + - `sdk` owns the shared option types. +- **Runtime split.** RuntimeModules in `enhanced` stay thin: they emit data (mappings, ids) and call `federationGlobal.bundlerRuntime.*`. Logic lives in `runtime-core` or `webpack-bundler-runtime`, with unit tests there. This is a deliberate MF 2 change to sokra's "generate the runtime" rule. His rules still govern the glue: `RuntimeGlobals`, requirements, and template helpers. +- **Extend at runtime through plugins.** Keep `runtime-core` small. Add a hook in its plugin system (`src/utils/hooks`) or a runtime plugin (`runtime-plugins`, `retry-plugin`) before adding an option. +- **Webpack internals.** + - Load them through `normalizeWebpackPath` (see `AGENTS.md`). + - `makeSerializable` keys are `'enhanced/lib/'`, and there is no `internalSerializables` registry. + - Types are TypeScript. Avoid `any` and unchecked casts where a precise type exists. +- **Options.** Types go in `packages/sdk/src/types/plugins/ModuleFederationPlugin.ts` and schemas in `packages/enhanced/src/schemas`. Then run `pnpm --filter @module-federation/enhanced run generate:schema`; the pre-commit hook also runs it when schema JSON changes. New behavior goes under the plugin's `experiments`. +- **Errors.** Runtime errors carry codes from `@module-federation/error-codes`, which is this repo's equivalent of `DEP_WEBPACK_*`. Build problems go to `compilation.errors` or `compilation.warnings`. +- **Compatibility.** Every package is published. Add a changeset (`pnpm run changeset`) for publishable behavior changes. + +## Verification + +- **Every fix and feature needs a regression test that hits the edge that broke.** + - Build-side: `packages/enhanced/test/configCases//`, or `test/compiler-unit`. Other plugin packages use jest or rstest cases next to the source. + - Runtime: `packages/runtime-core/__tests__/*.spec.ts`. + - E2E: the matching app in `apps/`, via `pnpm run ci:local --only=`. + - Run with `pnpm --filter run test`. + - A PR without a test is blocked. +- **When you fix one path, check its siblings.** Grep every path that emits the same thing. Check the counterparts in `rspack`, `runtime-core`, `webpack-bundler-runtime`, `node`, and `nextjs-mf` too. +- **Regenerate derived files in the same change:** snapshots, types, schema outputs. + +## Reviews + +- **Approve without comment, and put every objection inline.** Prefer a `suggestion` block to a description. +- **Lead with the verdict** ("working as expected", "that's a bug", "not supported"). Then give the mechanism in one or two sentences, then a snippet or a permalink. +- **Keep requests short and imperative:** "Please add a test case", "Use `X` instead". When refusing, give the reason and name the alternative. Reject refactors that bring no concrete benefit. +- **Push guards back to the root cause.** "This should never be undefined" means find where the value is produced. +- **Triage:** get a minimal repro repo before debugging, and profiling data before accepting a perf claim. Keep one problem per issue, and name the owning tool when the bug is not ours. + +## Process + +- **Titles and commits are short imperatives.** Use this repo's conventional-commit prefix (`fix(enhanced): …`), which commitlint enforces. Put regeneration in separate commits (`chore: update snapshots`). +- **Land a feature as one experimental PR, then small single-purpose fix PRs.** Write the PR body the way `AGENTS.md` asks, and say plainly what was not tested. +- **Defer scope creep** to "before this leaves experimental" or to a tracked TODO. Revert quickly when a change costs more than it gives. diff --git a/.claude/skills/sokra-mode/references/plugin-patterns.md b/.claude/skills/sokra-mode/references/plugin-patterns.md new file mode 100644 index 00000000000..051185eb285 --- /dev/null +++ b/.claude/skills/sokra-mode/references/plugin-patterns.md @@ -0,0 +1,107 @@ +# sokra plugin patterns: reference with evidence + +Blob links point at webpack v5.75.0 (`8241da7`), sokra's last release. Later code in webpack HEAD was reshaped by other maintainers. PR and commit links are on webpack/webpack. + +In this repo, translate the webpack mechanics. Require internals through `normalizeWebpackPath`. `makeSerializable` keys are `'enhanced/lib/'`, and there is no `internalSerializables` registry. Use TypeScript types instead of JSDoc. Run `generate:schema` instead of `yarn special-lint-fix`. Put tests in `packages/enhanced/test/configCases`. Runtime logic lives in `runtime-core` and `webpack-bundler-runtime`, behind thin RuntimeModules. + +## Plugin shape + +- **Validate options at module level.** Create the validator with `createSchemaValidation(require("../schemas/plugins/X.check.js"), () => require("../schemas/plugins/X.json"), { name: "X Plugin", baseDataPath: "options" })` and call `validate(options)` in the constructor. [ContainerPlugin.js#L17][v-cp], commit [e21b1d46f](https://github.com/webpack/webpack/commit/e21b1d46f). +- **Normalize options once in the constructor into private fields** (`this._options`, `this._consumes`). `apply` only reads them. For keyed-or-array config, use `parseOptions(opts, fromString, fromObject)`. [ConsumeSharedPlugin.js#L55][v-csp55]. +- **Declare `const PLUGIN_NAME = "XPlugin"`** and use it for every tap. +- **Choose the compilation hook by whether child compilers need it.** Use `thisCompilation` for factory and module wiring that must stay out of child compilers. Use `compilation` for runtime or template wiring that children need too. Destructure `{ normalModuleFactory }` from the hook arguments. [ContainerPlugin.js#L88][v-cp88]. +- **Add entries in `make` with `compilation.addEntry(context, dep, entryOptions, cb)`.** Add forced includes in `finishMake` with `compilation.addInclude`. [ProvideSharedPlugin.js#L189][v-psp189]. +- **Intercept module creation** with `normalModuleFactory.hooks.factorize` (unresolved request) or `createModule` (resolved resource). Return a custom Module. Skip your own dependency types with `instanceof` to avoid recursion. [ConsumeSharedPlugin.js#L254][v-csp254]. +- **Register parser plugins through one `handler(parser, parserOptions)`.** Tap it for `javascript/auto`, `javascript/dynamic`, and `javascript/esm`, and return early when the feature is disabled in `parserOptions`. [APIPlugin.js#L239][v-api239]. +- **Tap with a named stage, never a magic number.** Use `{ name, stage: STAGE_ADVANCED }` or `Compilation.PROCESS_ASSETS_STAGE_*`. [SplitChunksPlugin.js#L798][v-scp798]. +- **Use `compiler.webpack` instead of `require("webpack")`** ([#12606](https://github.com/webpack/webpack/issues/12606)). Do asset work in `processAssets` ([#12486](https://github.com/webpack/webpack/issues/12486)). + +## Dependency, Module, Factory + +- **Map every Dependency class to a factory and a template.** Register `compilation.dependencyFactories.set(Dep, factory)` and `compilation.dependencyTemplates.set(Dep, new Dep.Template())`. [ContainerReferencePlugin.js#L84][v-crp84]. +- **Attach the template as a static class field.** `Dep.Template = class extends NullDependency.Template { apply(dep, source, { runtimeRequirements, initFragments, chunkGraph, module }) }`. In `apply`, add requirements and InitFragments, never inline runtime. [ModuleDecoratorDependency.js#L99][v-mdd99]. +- **Wire parser-created dependencies the same way every time.** In a parser hook: create the dep, set `dep.loc = expr.loc`, call `module.addPresentationalDependency(dep)`, and `return true`. [APIPlugin.js#L177][v-api177]. +- **Custom Modules implement a fixed surface.** + - `identifier()` includes everything that affects output, including the layer. `readableIdentifier()` and `libIdent()` complete the naming methods. + - `needBuild` is `cb(null, !this.buildInfo)`. + - `build()` sets `buildMeta`/`buildInfo`, calls `clearDependenciesAndBlocks()`, then adds dependencies. + - Also implement `size()`, `getSourceTypes()` (returning a hoisted constant Set), and `nameForCondition()`. + - `codeGeneration()` returns `{ sources, data, runtimeRequirements }`. + + See [RemoteModule.js#L39][v-rm39] and [ConsumeSharedModule.js#L60][v-csm60]. +- **Pass module data to the runtime through custom source types or codegen `data`** (`"share-init"`, `"consume-shared"`). Runtime modules read it with `codeGenerationResults.getData`. [RemoteModule.js#L141][v-rm141], [ShareRuntimeModule.js#L41][v-srm41]. + +## Runtime + +- **Emit runtime code only through the requirement pipeline.** Add a `RuntimeGlobals` constant, add it to `runtimeRequirements`, then add the module from `compilation.hooks.runtimeRequirementInTree.for(G).tap(PLUGIN_NAME, (chunk, set) => { set.add(dep); compilation.addRuntimeModule(chunk, new XRuntimeModule()); return true; })`. [RuntimePlugin.js#L142][v-rp142], [ContainerReferencePlugin.js#L127][v-crp127]. +- **Declare transitive runtime needs as data tables** (`TREE_DEPENDENCIES`, `MODULE_DEPENDENCIES`). [RuntimePlugin.js#L75][v-rp75]. +- **Structure RuntimeModules the same way every time.** Call `super("name", RuntimeModule.STAGE_*)` and build `generate()` from `Template.asString`/`Template.indent` and `runtimeTemplate.basicFunction`/`returningFunction`. Read the graph from `this.compilation` and `this.chunkGraph`. Set `fullHash`/`dependentHash` when output depends on hashes. [RemoteRuntimeModule.js#L47][v-rrm47], [RuntimeModule.js#L196][v-rtm196]. +- **Keep large static runtime in `*.runtime.js` files**, loaded with `Template.getFunctionContent(require(...))`. Use this only for chunk loading and HMR; generate everything else. [HotModuleReplacementRuntimeModule.js#L20][v-hmr20]. +- **Keep the runtime free of globals.** Use `RuntimeGlobals.*` rather than literal `__webpack_require__.x` ([#8983](https://github.com/webpack/webpack/pull/8983), [#12887](https://github.com/webpack/webpack/pull/12887)). The script tag is the only shared state allowed ([#9979](https://github.com/webpack/webpack/pull/9979)). + +## Caching, serialization, determinism + +- **Make every cached class serializable.** Call `makeSerializable(Class, "webpack/lib/")` and register the class in `lib/util/internalSerializables.js`. `serialize` writes fields in order and then calls `super.serialize(context)`. `deserialize` reads them in the same order. [RemoteModule.js#L152][v-rm152], [internalSerializables.js#L31][v-is31]. Subclasses must serialize their own new fields ([#10491](https://github.com/webpack/webpack/pull/10491)). +- **Cache plugin results through `compilation.getCache("Plugin|sub")`.** Build the etag with `mergeEtags(getLazyHashedEtag(source), …)` and use `providePromise`. [RealContentHashPlugin.js#L130][v-rch130]. +- **Compute `updateHash` input once** and store it in `this._hashUpdate` ([381614aec](https://github.com/webpack/webpack/commit/381614aec)). Never return an old hash, and skip hashing default values ([#12642](https://github.com/webpack/webpack/pull/12642), [#14857](https://github.com/webpack/webpack/pull/14857)). +- **Sort output deterministically.** Use hoisted comparators (`compareStrings`, `compareModulesByIdentifier`, `concatComparators`). [23f922bed](https://github.com/webpack/webpack/commit/23f922bed) made Module Federation bundles stable. +- **Keep per-compilation state in a `WeakMap`.** `getCompilationHooks` guards its argument with `instanceof Compilation`. [RealContentHashPlugin.js#L95][v-rch95], [224ed2ac0](https://github.com/webpack/webpack/commit/224ed2ac0). Modules must not retain a Compilation ([#13127](https://github.com/webpack/webpack/issues/13127)). +- **Refuse changes that trade away determinism.** An automatic hash-algorithm fallback was rejected for exactly that reason ([#14532](https://github.com/webpack/webpack/issues/14532)). + +## Performance + +- **Lazy-require heavy modules.** Use a module-level `const getX = memoize(() => require("./X"))`, never Proxy tricks, because webpack must be able to bundle itself ([4845915c0](https://github.com/webpack/webpack/commit/4845915c0), [#10070](https://github.com/webpack/webpack/pull/10070)). +- **Keep hot paths lean.** Do a single `get` and compare to `undefined`, build string keys by concatenation, use counting APIs (`getNumberOfModuleChunks(m) > 0`), and keep validation out of per-module paths ([#9984](https://github.com/webpack/webpack/pull/9984), [#10953](https://github.com/webpack/webpack/pull/10953), [#14325](https://github.com/webpack/webpack/pull/14325)). +- **Use lazy and sortable sets.** `LazySet` holds file, context, and missing dependencies, `SortableSet` holds sorted sets, and constant Sets are shared ([522d80f33](https://github.com/webpack/webpack/commit/522d80f33)). +- **Memoize derived data inside hooks** so it is only computed when a branch needs it. [SplitChunksPlugin.js#L847][v-scp847]. +- **Cache derived objects in WeakMaps** keyed by their input (`cachedCleverMerge`), and create RegExps once ([#12927](https://github.com/webpack/webpack/pull/12927), [#14247](https://github.com/webpack/webpack/pull/14247)). +- **Measure performance changes.** "Please measure, when doing performance related changes." ([#8592](https://github.com/webpack/webpack/pull/8592)). Time long phases with `compilation.getLogger("webpack.X").time()`. + +## Options, deprecation, errors + +- **A new option lands as one change** covering the schema with descriptions, defaults (`F()`/`D()` in `lib/config/defaults.js`), normalization, generated declarations and types, the Defaults test, and the CLI snapshot ([16784692d](https://github.com/webpack/webpack/commit/16784692d), [#13925](https://github.com/webpack/webpack/pull/13925)). +- **Deprecate before removing.** Keep a `util.deprecate(fn, msg, "DEP_WEBPACK__")` shim hoisted to module scope, marked `// TODO webpack 6`. [Module.js#L177][v-m177]. Add the replacement option in the same PR ([#12845](https://github.com/webpack/webpack/pull/12845)). +- **Put behavior changes behind flags.** Use `experiments.*` first, then a dedicated "enable by default" PR ([#11413](https://github.com/webpack/webpack/pull/11413)). Breaking defaults go under `futureDefaults` ([#14653](https://github.com/webpack/webpack/pull/14653)). +- **Report diagnostics as `WebpackError` subclasses.** Each sets `name` and `hideStack`/`loc` and is serializable. [ConsumeSharedPlugin.js#L141][v-csp141]. Unsupported syntax gets a warning plus a safe fallback value ([#11075](https://github.com/webpack/webpack/pull/11075)). + +## Module Federation positions + +- **Give every container a distinct `uniqueName`, and run one runtime per page** ([#12194](https://github.com/webpack/webpack/issues/12194), [#13152](https://github.com/webpack/webpack/issues/13152)). +- **Infer `requiredVersion` from the nearest package.json** instead of hardcoding it ([#15971](https://github.com/webpack/webpack/issues/15971)). Treat `eager` as an edge case ([#15164](https://github.com/webpack/webpack/issues/15164)). +- **Remotes change independently of the host.** That is why exposes can't be tree-shaken and why integrity checks happen at runtime ([#14310](https://github.com/webpack/webpack/issues/14310)). +- **To separate sharing, use a different `shareKey`, not another share scope** ([#13834](https://github.com/webpack/webpack/issues/13834)). Lazily loaded remotes call `container.init(__webpack_share_scopes__.default)` ([#13896](https://github.com/webpack/webpack/issues/13896)). +- **Customize through existing runtime hooks** (`__webpack_get_script_filename__`, `__webpack_chunk_load__`) before adding options ([#12834](https://github.com/webpack/webpack/issues/12834), [#13735](https://github.com/webpack/webpack/issues/13735)). + +## Tests + +- **A config case is a directory.** `test/configCases///` holds `webpack.config.js`, typed with `/** @type {import("../../../../").Configuration} */`, and `index.js` with `it(...)` blocks. Add `errors.js`, `warnings.js`, and `deprecations.js` (arrays of regexps) as needed. A feature often lands in one commit with its plugin, module, runtime module, schema, types, and config case ([1b3246361](https://github.com/webpack/webpack/commit/1b3246361)). +- **Tests are blocking.** He blocked PRs that answered "not needed" to the tests question ([#12831](https://github.com/webpack/webpack/pull/12831), [#10646](https://github.com/webpack/webpack/pull/10646)). +- **A fix must cover its siblings.** ExternalModule as well as UMD, every RuntimeModule, and non-main chunks ([#11565](https://github.com/webpack/webpack/pull/11565), [#9119](https://github.com/webpack/webpack/pull/9119), [#11395](https://github.com/webpack/webpack/pull/11395)). + +[v-cp]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/container/ContainerPlugin.js#L17 +[v-cp88]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/container/ContainerPlugin.js#L88 +[v-csp55]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/sharing/ConsumeSharedPlugin.js#L55 +[v-csp141]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/sharing/ConsumeSharedPlugin.js#L141 +[v-csp254]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/sharing/ConsumeSharedPlugin.js#L254 +[v-psp189]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/sharing/ProvideSharedPlugin.js#L189 +[v-api177]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/APIPlugin.js#L177 +[v-api239]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/APIPlugin.js#L239 +[v-scp798]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/optimize/SplitChunksPlugin.js#L798 +[v-scp847]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/optimize/SplitChunksPlugin.js#L847 +[v-crp84]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/container/ContainerReferencePlugin.js#L84 +[v-crp127]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/container/ContainerReferencePlugin.js#L127 +[v-mdd99]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/dependencies/ModuleDecoratorDependency.js#L99 +[v-rm39]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/container/RemoteModule.js#L39 +[v-rm141]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/container/RemoteModule.js#L141 +[v-rm152]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/container/RemoteModule.js#L152 +[v-csm60]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/sharing/ConsumeSharedModule.js#L60 +[v-srm41]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/sharing/ShareRuntimeModule.js#L41 +[v-rp75]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/RuntimePlugin.js#L75 +[v-rp142]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/RuntimePlugin.js#L142 +[v-rrm47]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/container/RemoteRuntimeModule.js#L47 +[v-rtm196]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/RuntimeModule.js#L196 +[v-hmr20]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/hmr/HotModuleReplacementRuntimeModule.js#L20 +[v-is31]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/util/internalSerializables.js#L31 +[v-rch95]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/optimize/RealContentHashPlugin.js#L95 +[v-rch130]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/optimize/RealContentHashPlugin.js#L130 +[v-m177]: https://github.com/webpack/webpack/blob/8241da7f1e75c5581ba535d127fa66aeb9eb2ac8/lib/Module.js#L177 diff --git a/.claude/skills/sokra-mode/references/repo-map.md b/.claude/skills/sokra-mode/references/repo-map.md new file mode 100644 index 00000000000..95bd705cf0f --- /dev/null +++ b/.claude/skills/sokra-mode/references/repo-map.md @@ -0,0 +1,43 @@ +# Plugin packages in this repo + +Thirteen packages ship webpack or rspack plugins. This file says what each one is, which sokra rules bind it, and the gaps a sokra-style review would flag first. Paths are relative to `packages/`. + +## Core plugin layer + +| Package | What it is | Follows sokra's shape? | +| --- | --- | --- | +| `enhanced` | TypeScript fork of webpack's `container/` and `sharing/`, plus `startup/` and `container/runtime/` (FederationRuntimePlugin, EmbedFederationRuntimePlugin, FederationModulesPlugin). | Yes: `createSchemaValidation` in 10 plugins, `getCompilationHooks` + `WeakMap`, `runtimeRequirementInTree`, 7 RuntimeModules, `configCases`. Hold it to the full rule set. | +| `rspack` | Wraps rspack's native `container.ModuleFederationPlugin`. Adds `RemoteEntryPlugin` and `TreeShakingSharedPlugin`, and injects runtime plugins from `afterPlugins`. | Option shaping only. Module and dependency internals live in rspack. Changes here usually need a matching rspack change. | +| `sdk` | Shared option types (`src/types/plugins/ModuleFederationPlugin.ts`), `normalizeWebpackPath`, and the types generated from `enhanced` schemas. | Type source of truth. A new option starts here and in `enhanced/src/schemas`. | + +## Target and framework plugins + +| Package | What it is | Hooks it uses | Gaps to watch | +| --- | --- | --- | --- | +| `node` | Node target: `NodeFederationPlugin`, `UniversalFederationPlugin`, `StreamingTargetPlugin`, `CommonJsChunkLoadingPlugin` with `DynamicFilesystemChunkLoadingRuntimeModule`, `RemotePublicPathRuntimeModule`, `EntryChunkTrackerPlugin`, `ChunkCorrelationPlugin`. | `thisCompilation`, 11 `runtimeRequirementInTree` taps, 2 RuntimeModules, `JavascriptModulesPlugin.getCompilationHooks`. | 2 test files. No schema validation. String tap names instead of `PLUGIN_NAME`. A `// this breaks things` next to a `RuntimeGlobals.publicPath` add in `CommonJsChunkLoadingPlugin.ts` is the kind of unexplained workaround sokra rejects. The `.js` and `.ts` copies of `ChunkCorrelationPlugin` should not both exist. | +| `nextjs-mf` | `NextFederationPlugin` composes `CopyFederationPlugin`, `InvertedContainerPlugin` (+ RuntimeModule), `RemoveEagerModulesFromRuntimePlugin`, `FederatedStatsCompatibilityPlugin`, and `ModuleFederationPlugin`, split by `isServer` into `apply-server-plugins.ts` and `apply-client-plugins.ts`. | `thisCompilation`, `make`, `afterEmit`, `processAssets` (REPORT), `optimizeChunkModules`, `additionalTreeRuntimeRequirements`. | 6 test files. Options are validated by hand in `validate-options.ts`, not a schema. The umbrella composes well, but the server/client split branches on the compiler name, which is this repo's version of "don't switch on `target`"; keep it in one place. | +| `dts-plugin` | `DtsPlugin` composes `DevPlugin`, `GenerateTypesPlugin`, `ConsumeTypesPlugin`. Generates and fetches `.d.ts` archives. | `thisCompilation` → `processAssets` at `OPTIMIZE_TRANSFER`, `afterEmit`, one `WeakMap`. | Best-tested framework plugin (15 files). Heavy async work in `processAssets`, so keep it off the critical path and never block on the network without a timeout. | +| `manifest` | `StatsPlugin` emits `mf-manifest.json` and `mf-stats.json` from `StatsManager` and `ManifestManager`. | `thisCompilation` → `processAssets` at `OPTIMIZE_TRANSFER`, `emitAsset` with `RawSource`. | 2 test files. Output must be deterministic: sort module and asset lists before serializing, since the manifest feeds long-term caching and snapshots. | +| `rsbuild-plugin` | Rsbuild plugin that configures rspack's MF plugin and SSR. | Rsbuild hooks, not compiler hooks. | Option shaping. Validate at the boundary. | +| `utilities` | `DelegateModulesPlugin` and shared helpers. | `thisCompilation`. | Small. Keep it small. | +| `typescript`, `native-federation-typescript`, `native-federation-tests`, `storybook-addon`, `observability-plugin` | Older or peripheral plugins. `typescript` has no tests. | Mixed. | Legacy. Prefer fixing over refactoring, and don't add features here without a use case. | + +## Runtime side (no compiler hooks, same discipline) + +| Package | Role | +| --- | --- | +| `runtime-core` | Runtime logic: share scopes, remotes, snapshot, plugin system in `src/utils/hooks`. Tests in `__tests__`. | +| `runtime` | Public runtime entry over `runtime-core`. | +| `webpack-bundler-runtime` | What `enhanced` RuntimeModules call via `federationGlobal.bundlerRuntime.*`. | +| `runtime-plugins`, `retry-plugin`, `error-codes` | Runtime plugins and the error-code registry. Add a plugin or a hook before adding an option. | + +## Rules that apply to every plugin package + +- **Compose, don't inline.** An umbrella plugin (`NodeFederationPlugin`, `NextFederationPlugin`, `DtsPlugin`) applies sub-plugins from `apply`. Each sub-plugin works on its own. +- **Runtime code goes through requirements.** Add a `RuntimeGlobals` need, tap `runtimeRequirementInTree`, and add a RuntimeModule. Keep RuntimeModules thin and push logic to `runtime-core` or `webpack-bundler-runtime`. +- **Asset emission uses `processAssets` with a named stage.** Use `OPTIMIZE_TRANSFER` for files consumed by other builds (manifest, types) and `REPORT` for stats. +- **Validate options at the boundary.** `enhanced` uses schemas. Every other package should validate with the same rigor before options reach a hook, and fail with a message that names the option and the fix. +- **Cross-package changes are sibling checks.** A change to `enhanced` sharing usually has counterparts in `rspack`, `runtime-core`, `webpack-bundler-runtime`, `node`, and `nextjs-mf`. Grep them before calling the change done. +- **Tests match the layer.** Compiler-driven behavior gets a `configCases` or `compiler-unit` case in `enhanced`, or a jest case in the package. Runtime behavior gets a `runtime-core` spec. E2E lives in `apps/` (`node-host`, `next-app-router`, `3000-home`) and runs through `pnpm run ci:local --only=`. +- **Tap names:** use a `PLUGIN_NAME` constant per plugin, not per-call strings. +- **Unexplained workarounds are blockers.** A comment like "this breaks things" is a request to find out why. diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index ddda12f3d8f..8f5a63b7e08 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -59,8 +59,8 @@ 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: Test CI and release tooling + run: node --test tools/scripts/ci-is-affected.test.mjs tools/scripts/create-release-draft.test.mjs tools/scripts/prepare-browser-release.test.mjs - name: Verify Rslib Template Publint Wiring run: node packages/create-module-federation/scripts/verify-rslib-templates.mjs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index be36ce4f7e6..715f3a93b53 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,9 +15,18 @@ on: description: 'Release Branch (confirm release branch)' required: true default: 'main' + previous_tag: + description: 'Previous release tag for generated notes (empty = GitHub automatic selection)' + required: false + type: string + +# Serialize publishing and draft updates, including dispatches from different refs. +concurrency: + group: mf-release + cancel-in-progress: false permissions: - id-token: write + contents: read jobs: release: @@ -25,6 +34,12 @@ jobs: if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'push' }} runs-on: ubuntu-latest environment: npm + permissions: + contents: read + id-token: write + outputs: + sha: ${{ steps.source.outputs.sha }} + artifact_name: ${{ steps.source.outputs.artifact_name }} steps: - name: Checkout uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 @@ -32,6 +47,12 @@ jobs: fetch-depth: 25 ref: ${{ github.event.inputs.branch }} + - name: Capture release source + id: source + run: | + echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT" + echo "artifact_name=mf-browser-release-${GITHUB_RUN_ATTEMPT}" >> "$GITHUB_OUTPUT" + - name: Cache Tool Downloads uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 with: @@ -72,8 +93,10 @@ jobs: - name: Generate preview version if: github.event.inputs.version == 'next' + env: + RELEASE_BRANCH: ${{ inputs.branch }} run: | - SAFE_BRANCH=$(echo "${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9-]/-/g' | tr '[:upper:]' '[:lower:]') + SAFE_BRANCH=$(echo "$RELEASE_BRANCH" | sed 's/[^a-zA-Z0-9-]/-/g' | tr '[:upper:]' '[:lower:]') npx changeset version --snapshot "$SAFE_BRANCH" - name: Build and test Packages @@ -82,25 +105,89 @@ jobs: pnpm run build:packages ls -l packages/*/dist packages/*/package.json + # Prepare the downloadable extension before npm publishing. Move extension + # output out of dist so the existing npm library tarball is not enlarged. + - name: Build Browser release asset + if: inputs.version == 'latest' + env: + RELEASE_CHANNEL: ${{ inputs.version }} + run: | + pnpm --filter @module-federation/devtools run build:devtool + node tools/scripts/prepare-browser-release.mjs "$RUNNER_TEMP/mf-release-assets" + mkdir -p "$RUNNER_TEMP/mf-extension-build" + mv packages/chrome-devtools/dist/{browser,chrome,.extension-build} "$RUNNER_TEMP/mf-extension-build/" + + - name: Save Browser release asset + if: inputs.version == 'latest' + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: ${{ steps.source.outputs.artifact_name }} + path: ${{ runner.temp }}/mf-release-assets/ + if-no-files-found: error + retention-days: 30 + - name: Publish latest version if: github.event.inputs.version == 'latest' - run: | - pnpm -r publish --tag ${{ github.event.inputs.version }} --publish-branch ${{ github.event.inputs.branch }} + env: + RELEASE_BRANCH: ${{ inputs.branch }} + run: pnpm -r publish --tag latest --publish-branch "$RELEASE_BRANCH" - name: Publish preview version if: github.event.inputs.version == 'next' run: | pnpm -r publish --tag next --no-git-checks - - name: Release summary - if: success() && github.event.inputs.version == 'next' + - name: Latest release summary + if: inputs.version == 'latest' + run: | + node --input-type=module <<'JS' + import { appendFileSync, readFileSync } from 'node:fs'; + const release = JSON.parse(readFileSync(`${process.env.RUNNER_TEMP}/mf-release-assets/release.json`, 'utf8')); + appendFileSync(process.env.GITHUB_STEP_SUMMARY, + `## npm release\n\n- Channel: ${release.channel}\n- Version: ${release.version}\n- Commit: ${release.sha}\n\nThe following job prepares the GitHub Release draft.\n`); + JS + + - name: Preview release summary + if: inputs.version == 'next' run: | VERSION=$(node -p "require('./packages/runtime/package.json').version") { - echo "## Release summary" + echo "## npm preview release" echo "" - echo "- **Tag:** \`next\`" - echo "- **Branch:** \`${{ github.event.inputs.branch }}\`" + echo "- **Channel:** \`next\`" echo "- **Version:** \`$VERSION\`" - echo "- **Commit:** \`${{ github.sha }}\`" + echo "- **Commit:** \`$(git rev-parse HEAD)\`" + echo "" + echo "Preview releases do not create GitHub Release drafts or Browser extension assets." } >> "$GITHUB_STEP_SUMMARY" + + release-draft: + name: Prepare GitHub Release draft + needs: release + if: inputs.version == 'latest' + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout exact published source + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + ref: ${{ needs.release.outputs.sha }} + persist-credentials: false + + - name: Setup Node.js + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 + with: + node-version: 24 + + - name: Download Browser release asset + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + with: + name: ${{ needs.release.outputs.artifact_name }} + path: ${{ runner.temp }}/mf-release-assets + + - name: Create draft and attach Browser extension + env: + GH_TOKEN: ${{ github.token }} + PREVIOUS_TAG: ${{ inputs.previous_tag }} + run: node tools/scripts/create-release-draft.mjs "$RUNNER_TEMP/mf-release-assets" diff --git a/AGENTS.md b/AGENTS.md index ec49d591537..d88d751f195 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -281,6 +281,12 @@ const webpack = require(normalizeWebpackPath('webpack')) as typeof import('webpa - Avoid introducing new direct webpack package imports for internals when the existing module uses normalized `require(...)` conventions. - When editing an existing file, preserve the local webpack-loading style already used there unless there is a deliberate reason to migrate the file consistently. +## Sokra Mode + +When asked to use Sokra mode, invoke `$sokra-mode` from +`.agents/skills/sokra-mode/SKILL.md`. It loads the shared guidance in +`.claude/skills/sokra-mode/SKILL.md`. The skill is opt-in in both clients. + ## Operating Rules - Keep changes minimal and directly scoped to the user request. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f92d287df70..9b46f3cba07 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -156,15 +156,22 @@ Repository maintainers can publish a new version of changed packages to npm. 5. Select `latest` as the release version. 6. Wait reviewers to approve. 7. Merge the release pull request to `main`. -7. Generate the [release notes](https://github.com/module-federation/core/releases) via GitHub, see [Automatically generated release notes](https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes) +8. Open the GitHub Release **draft** linked in the workflow summary. Review the generated notes and the Browser extension ZIP, then click **Publish release**. The optional `previous_tag` workflow input selects the baseline for GitHub's generated notes; leave it empty for automatic selection. + +The workflow builds `module-federation-devtools-browser.zip` before publishing npm packages, then creates the draft only after npm publishing succeeds. The ZIP has `manifest.json` at its root and is attached to the draft's Assets. Notes use `.github/release.yml` and include an installation-guide link and archive checksum. Release tags use `v` plus the published runtime version and target the actual checked-out release commit. + +The separate `Prepare GitHub Release draft` job uses the automatically issued `GITHUB_TOKEN` with `contents: write`; no personal token is required. If that job fails after npm publishing, rerun **failed jobs only** within the artifact's 30-day retention period. Matching drafts and attachments are reused, manual notes are preserved, and published releases or mismatching commits/assets are not overwritten. Inspect conflicting drafts rather than deleting or moving published tags. + +Merge changes to `.github/workflows/` into the default branch before cutting a release branch. GitHub may require `Workflows: write` when creating a release whose target commit changes workflow files relative to the default branch; `GITHUB_TOKEN` cannot hold that permission. If a separate workflow change is unavoidable, use an appropriately scoped GitHub App installation token instead of a personal token. See [GitHub's release API permissions](https://docs.github.com/en/rest/releases/releases#create-a-release). ## Release preview version 1. Make sure your branch has added changeset files before releasing the preview version. 2. Run the [release action](https://github.com/module-federation/core/actions/workflows/release.yml) to publish packages to npm. 3. Select `next` as the release version. -4. Wait reviewers to approve. +4. Wait reviewers to approve. +Preview releases publish packages to the npm `next` channel only. They do not create GitHub Release drafts or Browser extension assets. ## Release the official version @@ -180,6 +187,6 @@ Repository maintainers can publish a new version of changed packages to npm. ![image](https://github.com/module-federation/core/assets/27547179/5c66e9e5-7bd7-4466-a1aa-38420f1dac82) -4. Generate a release note based on the original tag after the release is complete +4. Review the automatically prepared Release draft after npm publication. You can regenerate notes with a different previous tag in GitHub; the Browser ZIP remains in Assets. Publish the draft when ready. ![image](https://github.com/module-federation/core/assets/27547179/accc9626-9ffd-4074-8d47-14372ae77400) diff --git a/apps/manifest-demo/3010-rspack-provider/package.json b/apps/manifest-demo/3010-rspack-provider/package.json index 9bb1ec359bd..00c3f64e610 100644 --- a/apps/manifest-demo/3010-rspack-provider/package.json +++ b/apps/manifest-demo/3010-rspack-provider/package.json @@ -7,7 +7,7 @@ "@pmmmwh/react-refresh-webpack-plugin": "0.5.15", "react-refresh": "0.14.2", "@rspack/plugin-react-refresh": "^0.7.5", - "@rspack/core": "^1.0.2", + "@rspack/core": "2.1.10", "@types/react": "18.3.11", "@types/react-dom": "18.3.0" }, diff --git a/apps/manifest-demo/3010-rspack-provider/rspack.config.js b/apps/manifest-demo/3010-rspack-provider/rspack.config.js index 41bf9cdc6c1..0bdad2ade8f 100644 --- a/apps/manifest-demo/3010-rspack-provider/rspack.config.js +++ b/apps/manifest-demo/3010-rspack-provider/rspack.config.js @@ -60,11 +60,12 @@ module.exports = (_env, argv = {}) => { }, type: 'javascript/auto', }, + { + test: /\.css$/, + type: 'css/auto', + }, ], }, - experiments: { - css: true, - }, plugins: [ new HtmlRspackPlugin({ template: path.resolve(__dirname, 'src/index.html'), @@ -97,6 +98,9 @@ module.exports = (_env, argv = {}) => { }, }), ], + // `rspack serve` enables lazy compilation for web targets; its proxy calls + // back to the page origin, which for a remote is the host, not this server. + lazyCompilation: false, devServer: { host: '::', client: { diff --git a/apps/manifest-demo/3011-rspack-manifest-provider/rspack.config.js b/apps/manifest-demo/3011-rspack-manifest-provider/rspack.config.js index e7bfc567133..3ef1b60d255 100644 --- a/apps/manifest-demo/3011-rspack-manifest-provider/rspack.config.js +++ b/apps/manifest-demo/3011-rspack-manifest-provider/rspack.config.js @@ -98,6 +98,9 @@ module.exports = (_env, argv = {}) => { }, }), ], + // `rspack serve` enables lazy compilation for web targets; its proxy calls + // back to the page origin, which for a remote is the host, not this server. + lazyCompilation: false, devServer: { host: '::', client: { diff --git a/apps/manifest-demo/3012-rspack-js-entry-provider/rspack.config.js b/apps/manifest-demo/3012-rspack-js-entry-provider/rspack.config.js index 5bc91b20d40..c366a006722 100644 --- a/apps/manifest-demo/3012-rspack-js-entry-provider/rspack.config.js +++ b/apps/manifest-demo/3012-rspack-js-entry-provider/rspack.config.js @@ -99,6 +99,9 @@ module.exports = (_env, argv = {}) => { }, }), ], + // `rspack serve` enables lazy compilation for web targets; its proxy calls + // back to the page origin, which for a remote is the host, not this server. + lazyCompilation: false, devServer: { host: '::', client: { diff --git a/apps/modern-component-data-fetch/host/cypress/e2e/csr-with-fetch-data.cy.ts b/apps/modern-component-data-fetch/host/cypress/e2e/csr-with-fetch-data.cy.ts index 4f985780b32..4825c13fab7 100644 --- a/apps/modern-component-data-fetch/host/cypress/e2e/csr-with-fetch-data.cy.ts +++ b/apps/modern-component-data-fetch/host/cypress/e2e/csr-with-fetch-data.cy.ts @@ -24,4 +24,41 @@ describe('csr with fetch data', () => { expect(win.globalThis._mfSSRDowngrade).to.not.exist; }); }); + + it('[ /csr ] - should load a CSR component without a data loader once', () => { + cy.visit('/csr'); + + cy.get('#provider-csr-without-data-loader').should('be.visible'); + cy.window().then((win) => { + const metrics = ( + win as typeof win & { + __MF_NO_DATA_METRICS__: { + loaderCalls: number; + }; + } + ).__MF_NO_DATA_METRICS__; + + expect(metrics.loaderCalls).to.equal(1); + }); + }); + + it('[ /csr ] - should refetch data only after the remote remounts', () => { + cy.visit('/csr'); + + cy.get('#data-loader-request-count') + .should('be.visible') + .invoke('text') + .then((initialText) => { + const initialCount = Number(initialText.match(/\d+/)?.[0]); + + cy.get('#rerender-data-loader-demo').click(); + cy.get('#data-loader-request-count').should('have.text', initialText); + + cy.get('#remount-data-loader-demo').click(); + cy.get('#data-loader-request-count').should(($count) => { + const remountedCount = Number($count.text().match(/\d+/)?.[0]); + expect(remountedCount).to.equal(initialCount + 1); + }); + }); + }); }); diff --git a/apps/modern-component-data-fetch/host/src/routes/csr/page.tsx b/apps/modern-component-data-fetch/host/src/routes/csr/page.tsx index 35835a3b329..1931a3864f7 100644 --- a/apps/modern-component-data-fetch/host/src/routes/csr/page.tsx +++ b/apps/modern-component-data-fetch/host/src/routes/csr/page.tsx @@ -1,5 +1,21 @@ +import { useState } from 'react'; import { getInstance } from '@module-federation/modern-js-v3/runtime'; +type NoDataMetrics = { + loaderCalls: number; +}; + +const loadCsrWithoutData = () => { + const globalWithMetrics = globalThis as typeof globalThis & { + __MF_NO_DATA_METRICS__?: NoDataMetrics; + }; + const metrics = (globalWithMetrics.__MF_NO_DATA_METRICS__ ||= { + loaderCalls: 0, + }); + metrics.loaderCalls += 1; + return import('provider-csr/no-data'); +}; + const CsrWithFetchDataFromServerComponent = getInstance()!.createLazyComponent({ noSSR: true, loader: () => { @@ -17,13 +33,60 @@ const CsrWithFetchDataFromServerComponent = getInstance()!.createLazyComponent({ }, }); +const CsrWithoutDataLoaderComponent = getInstance()!.createLazyComponent({ + noSSR: true, + loader: loadCsrWithoutData, + loading: 'loading...', + export: 'default', + fallback:
fallback
, +}); + +const DataLoaderReloadDemo = getInstance()!.createLazyComponent({ + noSSR: true, + loader: async () => { + const remoteModule = await getInstance()!.loadRemote<{ + default: (props: { + mfData?: { requestCount: number; fetchedAt: string }; + }) => JSX.Element; + }>('provider-csr/reload-demo'); + if (!remoteModule) { + throw new Error('Failed to load provider-csr/reload-demo'); + } + return remoteModule; + }, + loading: null, + export: 'default', + fallback:
reload demo fallback
, +}); + const Index = (): JSX.Element => { + const [rerenderCount, setRerenderCount] = useState(0); + const [mountKey, setMountKey] = useState(0); + return (

The component will be render in csr but fetch data from server

+ +
+

DataLoader rerender and remount behavior

+

Parent rerenders: {rerenderCount}

+ + + +
); }; diff --git a/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts b/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts index e8784e9e8bc..26283c00c31 100644 --- a/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts +++ b/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts @@ -5,6 +5,9 @@ export default createModuleFederationConfig({ filename: 'remoteEntry.js', exposes: { '.': './src/index.tsx', + './no-data': './src/no-data.tsx', + // Used to compare parent rerenders with remote remounts. + './reload-demo': './src/reload-demo.tsx', }, shared: { react: { singleton: true }, diff --git a/apps/modern-component-data-fetch/provider-csr/src/no-data.tsx b/apps/modern-component-data-fetch/provider-csr/src/no-data.tsx new file mode 100644 index 00000000000..4058538d1ff --- /dev/null +++ b/apps/modern-component-data-fetch/provider-csr/src/no-data.tsx @@ -0,0 +1,9 @@ +const ContentWithoutDataLoader = (): JSX.Element => { + return ( +
+ CSR component without data loader +
+ ); +}; + +export default ContentWithoutDataLoader; diff --git a/apps/modern-component-data-fetch/provider-csr/src/reload-demo.data.ts b/apps/modern-component-data-fetch/provider-csr/src/reload-demo.data.ts new file mode 100644 index 00000000000..ae560a57e37 --- /dev/null +++ b/apps/modern-component-data-fetch/provider-csr/src/reload-demo.data.ts @@ -0,0 +1,15 @@ +export type ReloadDemoData = { + requestCount: number; + fetchedAt: string; +}; + +let requestCount = 0; + +export const fetchData = async (): Promise => { + requestCount += 1; + const data = { + requestCount, + fetchedAt: new Date().toISOString(), + }; + return data; +}; diff --git a/apps/modern-component-data-fetch/provider-csr/src/reload-demo.tsx b/apps/modern-component-data-fetch/provider-csr/src/reload-demo.tsx new file mode 100644 index 00000000000..920a5174124 --- /dev/null +++ b/apps/modern-component-data-fetch/provider-csr/src/reload-demo.tsx @@ -0,0 +1,14 @@ +import type { ReloadDemoData } from './reload-demo.data'; + +const ReloadDemo = ({ mfData }: { mfData?: ReloadDemoData }): JSX.Element => ( +
+

+ DataLoader requests: {mfData?.requestCount ?? 0} +

+

+ Fetched at: {mfData?.fetchedAt ?? 'waiting'} +

+
+); + +export default ReloadDemo; diff --git a/apps/node-dynamic-remote-new-version/CHANGELOG.md b/apps/node-dynamic-remote-new-version/CHANGELOG.md index b022e3fe86c..8392cf8dcc0 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.19 + +### Patch Changes + +- @module-federation/node@2.7.52 + +## 1.0.18 + +### Patch Changes + +- @module-federation/node@2.7.51 + ## 1.0.17 ### Patch Changes diff --git a/apps/node-dynamic-remote-new-version/package.json b/apps/node-dynamic-remote-new-version/package.json index e16ed93c680..fbda39eff42 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.17", + "version": "1.0.19", "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 c67b2a23e4d..91532654565 100644 --- a/apps/node-dynamic-remote/CHANGELOG.md +++ b/apps/node-dynamic-remote/CHANGELOG.md @@ -1,5 +1,17 @@ # node-dynamic-remote +## 1.0.19 + +### Patch Changes + +- @module-federation/node@2.7.52 + +## 1.0.18 + +### Patch Changes + +- @module-federation/node@2.7.51 + ## 1.0.17 ### Patch Changes diff --git a/apps/node-dynamic-remote/package.json b/apps/node-dynamic-remote/package.json index a794a0dd779..9497c0c6470 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.17", + "version": "1.0.19", "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/react-ts-remote/rspack.config.js b/apps/react-ts-remote/rspack.config.js index 6a78a1aed06..2608af75992 100644 --- a/apps/react-ts-remote/rspack.config.js +++ b/apps/react-ts-remote/rspack.config.js @@ -102,6 +102,9 @@ module.exports = (_env, argv = {}) => { }, }), ], + // `rspack serve` enables lazy compilation for web targets; its proxy calls + // back to the page origin, which for a remote is the host, not this server. + lazyCompilation: false, devServer: { hot: false, liveReload: false, diff --git a/apps/router-demo/router-remote4-2004/package.json b/apps/router-demo/router-remote4-2004/package.json index fb5c3414bc0..7b6098ebbf3 100644 --- a/apps/router-demo/router-remote4-2004/package.json +++ b/apps/router-demo/router-remote4-2004/package.json @@ -16,7 +16,7 @@ "@module-federation/rsbuild-plugin": "workspace:*", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "6.30.3" + "react-router-dom": "6.30.6" }, "devDependencies": { "@rsbuild/core": "2.1.4", diff --git a/apps/router-demo/router-remote5-2005/CHANGELOG.md b/apps/router-demo/router-remote5-2005/CHANGELOG.md index 9e0dc616493..3ee74c504ba 100644 --- a/apps/router-demo/router-remote5-2005/CHANGELOG.md +++ b/apps/router-demo/router-remote5-2005/CHANGELOG.md @@ -1,5 +1,20 @@ # remote5 +## 2.0.21 + +### Patch Changes + +- Updated dependencies [4364cb6] + - @module-federation/bridge-react@2.9.2 + - @module-federation/rsbuild-plugin@2.9.2 + +## 2.0.20 + +### Patch Changes + +- @module-federation/bridge-react@2.9.1 +- @module-federation/rsbuild-plugin@2.9.1 + ## 2.0.19 ### Patch Changes diff --git a/apps/router-demo/router-remote5-2005/package.json b/apps/router-demo/router-remote5-2005/package.json index 75f4f9cbe67..deafff9f52f 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.19", + "version": "2.0.21", "scripts": { "dev": "rsbuild dev", "build": "rsbuild build", diff --git a/apps/router-demo/router-remote6-2006/CHANGELOG.md b/apps/router-demo/router-remote6-2006/CHANGELOG.md index 735cd9f21f9..5067d8a2fa2 100644 --- a/apps/router-demo/router-remote6-2006/CHANGELOG.md +++ b/apps/router-demo/router-remote6-2006/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 2.0.21 + +### Patch Changes + +- Updated dependencies [4364cb6] + - @module-federation/bridge-react@2.9.2 + - @module-federation/rsbuild-plugin@2.9.2 + +## 2.0.20 + +### Patch Changes + +- @module-federation/bridge-react@2.9.1 +- @module-federation/rsbuild-plugin@2.9.1 + ## 2.0.19 ### Patch Changes diff --git a/apps/router-demo/router-remote6-2006/package.json b/apps/router-demo/router-remote6-2006/package.json index 5afd336b9c9..b8927a9884d 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.19", + "version": "2.0.21", "scripts": { "dev": "rsbuild dev", "build": "rsbuild build", diff --git a/apps/shared-tree-shaking/no-server/host/CHANGELOG.md b/apps/shared-tree-shaking/no-server/host/CHANGELOG.md index 0e1c07c7c7a..96b9e6fab50 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.21 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + +## 1.0.20 + +### Patch Changes + +- @module-federation/enhanced@2.9.1 + ## 1.0.19 ### Patch Changes diff --git a/apps/shared-tree-shaking/no-server/host/package.json b/apps/shared-tree-shaking/no-server/host/package.json index 5d67299ce0e..8219afe9a24 100644 --- a/apps/shared-tree-shaking/no-server/host/package.json +++ b/apps/shared-tree-shaking/no-server/host/package.json @@ -1,7 +1,7 @@ { "name": "shared-tree-shaking-no-server-host", "private": true, - "version": "1.0.19", + "version": "1.0.21", "scripts": { "reset": "npx rimraf ./**/node_modules", "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", diff --git a/apps/shared-tree-shaking/no-server/provider/CHANGELOG.md b/apps/shared-tree-shaking/no-server/provider/CHANGELOG.md index 0e1c07c7c7a..96b9e6fab50 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.21 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + +## 1.0.20 + +### Patch Changes + +- @module-federation/enhanced@2.9.1 + ## 1.0.19 ### Patch Changes diff --git a/apps/shared-tree-shaking/no-server/provider/package.json b/apps/shared-tree-shaking/no-server/provider/package.json index d1fb01153cd..24ef67f8859 100644 --- a/apps/shared-tree-shaking/no-server/provider/package.json +++ b/apps/shared-tree-shaking/no-server/provider/package.json @@ -1,7 +1,7 @@ { "name": "shared-tree-shaking-no-server-provider", "private": true, - "version": "1.0.19", + "version": "1.0.21", "scripts": { "reset": "npx rimraf ./**/node_modules", "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", diff --git a/apps/shared-tree-shaking/with-server/host/CHANGELOG.md b/apps/shared-tree-shaking/with-server/host/CHANGELOG.md index acdf2a5a4d8..f067d6a98bf 100644 --- a/apps/shared-tree-shaking/with-server/host/CHANGELOG.md +++ b/apps/shared-tree-shaking/with-server/host/CHANGELOG.md @@ -1,5 +1,17 @@ # modernjs-ssr-nested-remote +## 1.0.21 + +### Patch Changes + +- @module-federation/modern-js-v3@2.9.2 + +## 1.0.20 + +### Patch Changes + +- @module-federation/modern-js-v3@2.9.1 + ## 1.0.19 ### Patch Changes diff --git a/apps/shared-tree-shaking/with-server/host/package.json b/apps/shared-tree-shaking/with-server/host/package.json index b34046909cf..f13e5301ef4 100644 --- a/apps/shared-tree-shaking/with-server/host/package.json +++ b/apps/shared-tree-shaking/with-server/host/package.json @@ -1,7 +1,7 @@ { "name": "shared-tree-shaking-with-server-host", "private": true, - "version": "1.0.19", + "version": "1.0.21", "scripts": { "reset": "npx rimraf ./**/node_modules", "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", diff --git a/apps/shared-tree-shaking/with-server/provider/CHANGELOG.md b/apps/shared-tree-shaking/with-server/provider/CHANGELOG.md index acdf2a5a4d8..f067d6a98bf 100644 --- a/apps/shared-tree-shaking/with-server/provider/CHANGELOG.md +++ b/apps/shared-tree-shaking/with-server/provider/CHANGELOG.md @@ -1,5 +1,17 @@ # modernjs-ssr-nested-remote +## 1.0.21 + +### Patch Changes + +- @module-federation/modern-js-v3@2.9.2 + +## 1.0.20 + +### Patch Changes + +- @module-federation/modern-js-v3@2.9.1 + ## 1.0.19 ### Patch Changes diff --git a/apps/shared-tree-shaking/with-server/provider/package.json b/apps/shared-tree-shaking/with-server/provider/package.json index c27d6ac8b3f..9893b0f5a08 100644 --- a/apps/shared-tree-shaking/with-server/provider/package.json +++ b/apps/shared-tree-shaking/with-server/provider/package.json @@ -1,7 +1,7 @@ { "name": "shared-tree-shaking-with-server-provider", "private": true, - "version": "1.0.19", + "version": "1.0.21", "scripts": { "reset": "npx rimraf ./**/node_modules", "dev": "TS_NODE_COMPILER=typescript-compiler modern dev", diff --git a/apps/website-new/CHANGELOG.md b/apps/website-new/CHANGELOG.md index 118f8b0f566..5ff5ecfb8b0 100644 --- a/apps/website-new/CHANGELOG.md +++ b/apps/website-new/CHANGELOG.md @@ -1,5 +1,21 @@ # website-new +## 1.3.33 + +### Patch Changes + +- @module-federation/rspress-plugin@2.9.2 +- @module-federation/runtime@2.9.2 +- @module-federation/error-codes@2.9.2 + +## 1.3.32 + +### Patch Changes + +- @module-federation/runtime@2.9.1 +- @module-federation/rspress-plugin@2.9.1 +- @module-federation/error-codes@2.9.1 + ## 1.3.31 ### Patch Changes diff --git a/apps/website-new/docs/en/guide/debug/chrome-devtool.mdx b/apps/website-new/docs/en/guide/debug/chrome-devtool.mdx index c1731f14694..9a0b2070790 100644 --- a/apps/website-new/docs/en/guide/debug/chrome-devtool.mdx +++ b/apps/website-new/docs/en/guide/debug/chrome-devtool.mdx @@ -1,158 +1,154 @@ # Chrome Devtool -The `Micro-frontend` architecture differs from the traditional monolithic application development model. Its characteristics of separate development, deployment, and debugging require a new set of debugging tools to meet new usage scenarios. For example: how to verify the effect of modules in actual projects during development, whether a producer's dependencies are reused with the host environment, which modules are loaded on the current page, and what the dependency relationships and data flow between modules look like. +Module Federation Devtools lets you inspect Federation modules, dependency relationships, and shared dependencies on a page. You can also proxy remote modules to a local or specific version and trace the module loading process. -`Chrome Devtool` provides the following capabilities: +::: tip Requirement -- Supports proxying remote modules from an online page to a local one. -- Switch online remote module versions for quick functional verification. -- Support viewing module dependency information. -- Support filtering specified module dependency information. -- Support Loading Trace for remote, shared, component-ready signals, and failure reports. - -::: tip Limitations of Chrome Devtool - -You must use `mf-manifest.json` to use the visualization and proxy capabilities provided by `Chrome devtool`. +The visualization and proxy features require `mf-manifest.json`. ::: -::: tip Debugging with an AI coding agent +## Use in different browsers -Use [Divebell](/guide/debug/divebell.html) when an agent needs structured -evidence for an MF runtime failure, loading chain, or performance bottleneck. - -::: +Module Federation Devtools is a Chrome extension with two versions for different browser environments. Both versions provide the same debugging features; only their installation and entry points differ: -## Usage Scenarios +| Use case | Extension version | How to open | +| --- | --- | --- | +| Standard desktop Chrome | Desktop Chrome (`dist/chrome`) | Extension side panel or the `Module Federation` panel in Chrome DevTools | +| An AI application's embedded browser that supports Chrome extensions, such as ChatGPT's embedded browser | Embedded browser (`dist/browser`) | Click the extension icon to open the compact popup | -DevTools provides multiple functional panels suitable for different debugging needs in development and production environments: +Both versions support module proxying and version switching, module information, dependency graphs, shared dependencies, React HMR / Fast Refresh, Loading Trace, report export, and WebMCP. -- **Proxy**: Used to proxy modules from online or test environments to the local development environment. - - Supports local service port numbers, e.g., key: appA -> value: `http://localhost:3000/mf-manifest.json`, the page will directly load `Module Federation` content from port 3000. - - Supports using `mf-manifest.json` file address format, e.g., key: appA -> value: `https://xxx/static/mf-manifest.json`, the page will directly load `Module Federation` content from the specified address. +Enable only one version in the same browser to avoid duplicate injection. -- **Module Info**: Used to view detailed information of all Federation modules loaded on the current page, including version, entry address, etc. +::: tip Headless browsers and CI -- **Dependency Graph**: Visually displays the dependency reference relationships between modules, helping to clarify complex micro-frontend architectures. +The two versions above are designed for interactive browser environments. For headless browsers or CI automation, use [Divebell](https://github.com/2heal1/divebell) with its [Module Federation Extension](https://github.com/2heal1/divebell/tree/main/packages/extensions/mf). -- **Shared**: In-depth analysis of Shared Dependencies usage. - - View loaded and unloaded shared dependencies. - - Analyze version reuse of shared dependencies (Loaded / Reused). - - Check the effective status of configurations such as Singleton and Strict Version. +Divebell can load pages through its CLI, collect Module Federation runtime information, and return structured diagnostic results without opening an extension UI. See [Diagnose runtime issues with Divebell](/guide/debug/divebell.html) for installation and usage. -- **Loading Trace**: Records Module Federation loading on the current page. - - Inspect `loadRemote` and `loadShare` start, success, failure, and recovery states. - - See which consumer loaded which remote and expose, and which shared provider/version was selected. - - If the page already uses the [Observability Plugin](/plugin/plugins/observability-plugin.html), the panel reads those reports and shows `CUSTOM`. - - If the page does not use the plugin, click `Observe now` to temporarily inject the Chrome collection plugin for the current tab. +::: -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/shared-overview.png) +## Installation -## How to Install +### Desktop Chrome -1. Open the [Module Federation Plugin Details Page](https://chromewebstore.google.com/detail/module-federation/aeoilchhomapofiopejjlecddfldpeom), click the `Add to Chrome` button. +Open the [Module Federation extension page](https://chromewebstore.google.com/detail/module-federation/aeoilchhomapofiopejjlecddfldpeom) and click `Add to Chrome`. ![](@public/guide/chrome-devtools/chrome-store-add-devtool.png) -## How to Use +### Embedded browser -The plugin provides a Devtools panel. +1. Open [Module Federation Releases](https://github.com/module-federation/core/releases) and download the Browser ZIP from the **Assets** section of a stable release. Do not download GitHub's automatically generated **Source code** archives. +2. Extract the ZIP and load the extracted directory from the embedded browser's extension manager. +3. Open or refresh the target page, then click the extension icon. -- F12 open developer tools, select click `Module Federation` tab, enter the proxy page, and you can debug the dependent modules. -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/launch-devtool.jpg) +Browser assets are published for `latest` stable releases. `next` previews do not create GitHub Releases. If the target release has no Browser asset, run: -## Overall Interaction +```bash +pnpm --filter @module-federation/devtools run build:devtool +``` -As shown below, the proxy page provides options such as `add new proxy module`, `producer selector`, `version or local port or custom entry`, etc. +Then load `packages/chrome-devtools/dist/browser`. After updating the extension, reload it and refresh any open pages. -- Select a module that the target page needs to proxy by selecting `producer selector`; -- Select or enter the specified address (including port number and address ending with `mf-manifest.json`) through `version or local port` for proxy operation; -- If you need to proxy multiple modules at the same time, click the `add new proxy module` area to add the corresponding proxy module. -- **Support Multi-Tab Isolation**: When opening pages using Module Federation in multiple tabs simultaneously, the proxy rules and module information of each tab are independent. Proxy rules set in Tab A will not affect Tab B, and vice versa. This allows you to debug multiple environments or application states simultaneously. +## Features -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/proxy.png) +| Panel | Purpose | +| --- | --- | +| Proxy | Switch a remote module to a local service, a specific version, or a custom `mf-manifest.json` URL | +| Module Info | Inspect the Federation modules loaded on the current page, including their versions and entry URLs | +| Dependency Graph | Inspect and filter dependency relationships between modules | +| Shared | Inspect shared dependency loading, version reuse, and settings such as Singleton and Strict Version | +| Loading Trace | Trace remote, shared, and component loading, diagnose failures, and export reports | + +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/shared-overview.png) -## Loading Trace +## Use the extension -The `Loading Trace` tab answers what actually happened during Module Federation loading. Use it when the page is blank, a component stays in loading, shared versions are unclear, or a producer fails intermittently. +In desktop Chrome, open the target page, press F12, and select `Module Federation` in DevTools. In an embedded browser, click the extension icon. -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-overview-en.png) +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/launch-devtool.jpg) -The top status means: +### Proxy a module -- `OFF`: no readable loading report has been found on the current page. -- `ON`: Chrome collection is enabled for the current tab. -- `CUSTOM`: the inspected page already registered its own observability plugin, and DevTools is reading those reports. +1. Select the module to proxy in the Proxy panel. +2. Select a target version, or enter a local port or full `mf-manifest.json` URL, such as `http://localhost:3000/mf-manifest.json`. +3. To proxy multiple modules, click `add new proxy module` to add another rule. +4. Save the configuration and refresh the page. -Common workflow: +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/proxy.png) -1. Open the target page. -2. Open Chrome DevTools and choose the `Module Federation` panel. -3. Open `Loading Trace`. -4. If the status is `OFF`, click `Observe now`. The page reloads once. -5. Reproduce the issue or trigger the remote component load you want to inspect. -6. Select a report and inspect current loading, previous loading records, the event timeline, and troubleshooting suggestions. -7. Click `Export` to save the full report. +For local development, start the producer first and enter its manifest URL in the proxy rule. The consumer page reloads automatically when you update the producer code. -Report states: +![](@public/guide/chrome-devtools/dev-to-proxy.png) -- `Success`: the MF chain completed. Remote reports show the remote result; shared reports show the selected provider and version. -- `Failed`: the chain failed. Start from the failed phase, error code, and suggested actions. -- `Pending`: a start event was recorded, but no completion, failure, or recovery event was seen yet. -- `Recovered`: loading hit a problem first, then continued through fallback or recovery. -- `Basic observability`: the runtime version is too low or cannot be detected, so detailed phases may be missing. +![](@public/guide/chrome-devtools/proxy-to-local.png) -### Analyze an exported report +### Loading Trace -The exported JSON contains `config`, `scopes`, and `reports`. For each report, start with: +Loading Trace helps diagnose blank pages, components stuck in loading, unexpected shared versions, and producer loading failures. -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-shared-report-en.png) +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-overview-en.png) -- `diagnosis`: the troubleshooting conclusion, facts, and next actions. -- `summary`: the final state, such as `runtime-loaded`, `component-loaded`, `shared-resolved`, `failed`, `recovered`, or `pending`. -- `remote` / `shared`: what was loaded. For shared reports, inspect provider, required version, selected version, and available versions. -- `loadedBefore`: whether the same producer had already been loaded by another consumer. -- `events`: the ordered timeline, useful for finding the phase that got stuck. +Panel states: -You can give the exported report directly to an AI coding agent: +- `OFF`: no readable loading report is available on the current page. +- `ON`: the extension is collecting data for the current tab. +- `CUSTOM`: the page uses the [Observability Plugin](/plugin/plugins/observability-plugin.html), and Devtools is reading its reports. -```text -/mf obs +To trace a load: -I have an MF Loading Trace report exported from Chrome DevTools. -Please tell me whether the load succeeded, where it failed, who likely owns the issue, and how to fix it. +1. Open Loading Trace. If the state is `OFF`, click `Observe now`; the page reloads once. +2. Reproduce the issue or trigger the remote component load you want to inspect. +3. Select a report and inspect the result, event timeline, failure stage, and suggested actions. +4. Click `Export` to save the complete report. - -``` +The main report states are success, failure, pending, and recovered. The exported JSON contains `config`, `scopes`, and `reports`. Focus on: +- `diagnosis`: the conclusion, evidence, and suggested actions. +- `summary`: the final loading state. +- `remote` / `shared`: the loaded target, provider, and version details. +- `loadedBefore`: whether another consumer had already loaded the same producer. +- `events`: the complete event sequence. -## How to Proxy Locally Developed Modules to Online +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-shared-report-en.png) -- First, you need to start the producer locally. +## Work with a coding agent through WebMCP -![](@public/guide/chrome-devtools/dev-to-proxy.png) +::: tip Desktop Chrome release status -- Then enter the successful manifest address into the version selection input box on the proxy page. -- Afterward, adjust the local producer code, and the consumer page will automatically Reload. +WebMCP support for desktop Chrome is currently under review for release on the Chrome Web Store. Until the review is complete, the store version does not support the features described in this section. -![](@public/guide/chrome-devtools/proxy-to-local.png) +::: -## FAQ +Both extension versions automatically register WebMCP tools when the page starts. The extension UI does not need to remain open, and the application does not need an additional WebMCP SDK. -### Does it support multi-tab isolation debugging? +| Tool | Purpose | +| --- | --- | +| `mf_get_state` | Read runtime state, proxy and HMR configuration, and loading reports | +| `mf_get_modules` | Inspect all modules or a specific module | +| `mf_get_dependencies` | Get module dependency relationships | +| `mf_get_shared` | Inspect shared dependency versions and loading state | +| `mf_set_proxy` / `mf_clear_proxy` | Configure or clear module proxies | +| `mf_set_hmr` | Enable or disable React HMR / Fast Refresh | +| `mf_configure_loading_trace` | Configure Loading Trace | +| `mf_get_loading_reports` | Read loading reports | +| `mf_export_snapshot` | Export a diagnostic JSON snapshot | -Yes, when you debug with multiple tabs open simultaneously, the Chrome DevTool plugin automatically identifies the current active tab and stores the proxy rules for each tab in isolation. +For example, ask a WebMCP-capable agent: -- **Independent Storage**: Proxy configuration for Tab A only affects Tab A. After switching to Tab B, the panel automatically loads Tab B's configuration. -- **State Persistence**: Even if multiple tabs load the same URL, their proxy states are physically isolated and do not interfere with each other. -- **Automatic Switching**: Clicking the "Focus Tab" tag in DevTools confirms the target page currently being debugged. +```text +Read the current MF state and preserve the existing proxy rules. +Proxy mf_playground to https://localhost:3006/mf-manifest.json, +enable HMR, reload the page, and verify that the configuration took effect. +``` -### When does the configuration take effect? +`mf_set_proxy` replaces the complete proxy rule list, so read the current state before making changes. Configuration tools return `reloadRequired`; the agent should reload the page based on that result. -- ✅ Matches verification rules -- ✅ Configuration rule is checked -- ✅ Configuration filled in correctly, page displays: Proxy configuration has taken effect, remote module obtained successfully, corresponding page has been automatically refreshed. +Graph layout, filtering, theme, and language remain UI operations. For deeper analysis of runtime errors or performance bottlenecks, use [Divebell](/guide/debug/divebell.html). -### Partial configuration matches rules +## Notes -The plugin will filter out **modules that match the configuration rules** for proxying. +- The extension does not bypass CSP, CORS, or browser network restrictions. Proxying from an HTTPS page to a local HTTP service still requires compatible page policies, protocols, and cross-origin response headers. +- Proxy, HMR, and Loading Trace settings are stored in the page origin's localStorage. Same-origin tabs may share settings. Use different origins or separate browser profiles when you need conflicting configurations. +- If an agent cannot discover the WebMCP tools, reload the extension and refresh the page, then inspect `window.__MF_DEVTOOLS_WEBMCP__` in the console. `registered` means registration succeeded, `unavailable` means the host did not provide a usable API, and `error` contains the specific cause. diff --git a/apps/website-new/docs/pt-BR/guide/debug/chrome-devtool.mdx b/apps/website-new/docs/pt-BR/guide/debug/chrome-devtool.mdx index d670b38dcd2..742cc503b85 100644 --- a/apps/website-new/docs/pt-BR/guide/debug/chrome-devtool.mdx +++ b/apps/website-new/docs/pt-BR/guide/debug/chrome-devtool.mdx @@ -1,159 +1,154 @@ # Chrome Devtool -O `Micro-frontend` architecture differs do traditional monolithic aplicação desenvolvimento model. Its characteristics de separate desenvolvimento, implantação, e debugging require uma nova definir de debugging tools para meet novo uso scenarios. Por exemplo: como para verify o effect de módulos em actual projetos durante o desenvolvimento, whether uma producer's dependências são reused com o host environment, que módulos são carregado no current page, e o que o dependência relationships e dados flow entre módulos look like. +O Module Federation Devtools permite inspecionar os módulos Federation, as relações de dependência e as dependências compartilhadas de uma página. Também é possível redirecionar módulos remotos para uma versão local ou específica e acompanhar o processo de carregamento. -`Chrome Devtool` fornece uma ferramenta seguintes capabilities: +::: tip Requisito -- Suporta proxying módulos remotos de um online page para uma local one. -- Switch online módulo remoto versões for quick functional verification. -- Suporte viewing módulo dependência information. -- Suporte filtering specified módulo dependência information. -- Suporte Carregamento Trace for remote, shared, componente-ready signals, e falha reports. - -::: tip Limitations of Chrome Devtool - -Você deve use `mf-manifest.json` para usar o visualization e proxy capabilities fornecido by `Chrome devtool`. +Os recursos de visualização e proxy exigem o uso de `mf-manifest.json`. ::: -::: tip Depuração com um agente de código +## Uso em diferentes navegadores -Use [Divebell](/guide/debug/divebell.html) quando um agente precisar de -evidências estruturadas para falhas de runtime, carregamento ou performance do -MF. - -::: +O Module Federation Devtools é uma extensão do Chrome disponível em duas versões, adaptadas a ambientes de navegador diferentes. As duas oferecem os mesmos recursos de depuração; apenas a instalação e a forma de acesso são diferentes: -## Uso Scenarios +| Cenário de uso | Versão da extensão | Como abrir | +| --- | --- | --- | +| Chrome padrão para desktop | Chrome para desktop (`dist/chrome`) | Painel lateral da extensão ou painel `Module Federation` no Chrome DevTools | +| Navegador integrado de um aplicativo de IA compatível com extensões do Chrome, como o navegador integrado do ChatGPT | Navegador integrado (`dist/browser`) | Clique no ícone da extensão para abrir o popup compacto | -DevTools fornece multiple functional panels suitable for diferente debugging needs em desenvolvimento e ambiente de produçãos: +As duas versões oferecem proxy e troca de versões de módulos, informações de módulos, grafo de dependências, dependências compartilhadas, React HMR / Fast Refresh, Loading Trace, exportação de relatórios e WebMCP. -- **Proxy**: Usado para proxy módulos de online ou test environments para o local ambiente de desenvolvimento. - - Suporta local service port numbers, e.g., key: appA -> valor: `http://localhost:3000/mf-manifest.json`, o page vai diretamente carregue `Module Federation` content de port 3000. - - Suporta usando `mf-manifest.json` arquivo address format, e.g., key: appA -> valor: `https://xxx/static/mf-manifest.json`, o page vai diretamente carregue `Module Federation` content do specified address. +Ative apenas uma versão no mesmo navegador para evitar injeções duplicadas. -- **Módulo Info**: Usado para view detailed information de all Federation módulos carregado no current page, including versão, entry address, etc. +::: tip Navegadores headless e ambientes de CI -- **Dependência Graph**: Visually displays o dependência reference relationships entre módulos, helping para clarify complex micro-frontend architectures. +As duas versões acima foram desenvolvidas para ambientes de navegador interativos. Para navegadores headless ou automação em CI, use o [Divebell](https://github.com/2heal1/divebell) com sua [Module Federation Extension](https://github.com/2heal1/divebell/tree/main/packages/extensions/mf). -- **Shared**: In-depth analysis de Shared Dependências uso. - - View carregado e unloaded dependências compartilhadas. - - Analyze versão reuse de dependências compartilhadas (Carregado / Reused). - - Check o effective status de configurações such as Singleton e Strict Versão. +O Divebell pode carregar páginas pela CLI, coletar informações do runtime do Module Federation e retornar diagnósticos estruturados sem abrir a interface de uma extensão. Consulte [Diagnosticar problemas de runtime com o Divebell](/guide/debug/divebell.html) para ver como instalar e usar. -- **Carregamento Trace**: Records Module Federation carregamento no current page. - - Inspect `loadRemote` e `loadShare` começa, success, falha, e recovery states. - - See que consumer carregado que remote e exponha, e que shared provider/versão was selected. - - Se o page já usa o [Observability Plugin](/plugin/plugins/observability-plugin.html), o panel reads those reports e shows `CUSTOM`. - - Se o page does não use o plugin, click `Observe now` para temporarily inject o Chrome collection plugin para o current tab. +::: -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/shared-overview.png) +## Instalação -## How para Instale +### Chrome para desktop -1. Open o [Module Federation Plugin Details Page](https://chromewebstore.google.com/detail/module-federation/aeoilchhomapofiopejjlecddfldpeom), click o `Add to Chrome` button. +Abra a [página da extensão Module Federation](https://chromewebstore.google.com/detail/module-federation/aeoilchhomapofiopejjlecddfldpeom) e clique em `Adicionar ao Chrome`. ![](@public/guide/chrome-devtools/chrome-store-add-devtool.png) -## How para Use +### Navegador integrado -O plugin fornece uma Devtools panel. +1. Abra [Module Federation Releases](https://github.com/module-federation/core/releases) e baixe o ZIP da versão Browser na seção **Assets** de uma versão estável. Não baixe os arquivos de **Source code** gerados automaticamente pelo GitHub. +2. Extraia o ZIP e carregue o diretório extraído no gerenciador de extensões do navegador integrado. +3. Abra ou atualize a página de destino e clique no ícone da extensão. -- F12 open developer tools, select click `Module Federation` tab, enter o proxy page, e você pode debug o dependent módulos. -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/launch-devtool.jpg) +Os arquivos da versão Browser são publicados nas versões estáveis `latest`. As prévias `next` não criam GitHub Releases. Se a versão desejada não tiver esse arquivo, execute: -## Overall Interaction +```bash +pnpm --filter @module-federation/devtools run build:devtool +``` -As shown below, o proxy page fornece opções such as `add new proxy module`, `producer selector`, `version or local port or custom entry`, etc. +Em seguida, carregue `packages/chrome-devtools/dist/browser`. Depois de atualizar a extensão, recarregue-a e atualize as páginas abertas. -- Select um módulo esse o target page precisa proxy by selecting `producer selector`; -- Select ou enter o specified address (including port number e address ending com `mf-manifest.json`) por meio de `version or local port` for proxy operation; -- Se você precisa proxy multiple módulos at o mesmo time, click o `add new proxy module` area para adicionar o corresponding proxy módulo. -- **Suporte Multi-Tab Isolation**: Quando opening pages usando Module Federation em multiple tabs simultaneously, o proxy rules e módulo information de each tab são independent. Proxy rules definir em Tab Uma vai não affect Tab B, e vice versa. Este allows você para depurar multiple environments ou aplicação states simultaneously. +## Recursos -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/proxy.png) +| Painel | Finalidade | +| --- | --- | +| Proxy | Redirecionar um módulo remoto para um serviço local, uma versão específica ou uma URL personalizada de `mf-manifest.json` | +| Module Info | Inspecionar os módulos Federation carregados na página atual, incluindo versões e URLs de entrada | +| Dependency Graph | Inspecionar e filtrar as relações de dependência entre módulos | +| Shared | Inspecionar o carregamento e a reutilização de versões das dependências compartilhadas, além de opções como Singleton e Strict Version | +| Loading Trace | Acompanhar o carregamento de remotes, shared e componentes, diagnosticar falhas e exportar relatórios | + +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/shared-overview.png) -## Carregamento Trace +## Usar a extensão -O `Loading Trace` tab answers o que actually happened during Module Federation carregamento. Use it quando o page é blank, um componente stays em carregamento, shared versões são unclear, ou uma producer fails intermittently. +No Chrome para desktop, abra a página de destino, pressione F12 e selecione `Module Federation` no DevTools. Em um navegador integrado, clique no ícone da extensão. -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-overview-en.png) +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/launch-devtool.jpg) -O top status means: +### Configurar o proxy de um módulo -- `OFF`: no readable carregamento report has been encontrada no current page. -- `ON`: Chrome collection é habilitado para o current tab. -- `CUSTOM`: o inspected page já registered its own observability plugin, e DevTools é reading those reports. +1. Selecione o módulo no painel Proxy. +2. Selecione uma versão de destino ou informe uma porta local ou uma URL completa de `mf-manifest.json`, como `http://localhost:3000/mf-manifest.json`. +3. Para redirecionar vários módulos, clique em `add new proxy module` e adicione outra regra. +4. Salve a configuração e atualize a página. -Common fluxo de trabalho: +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/proxy.png) -1. Open o target page. -2. Open Chrome DevTools e choose o `Module Federation` panel. -3. Open `Loading Trace`. -4. Se o status é `OFF`, click `Observe now`. O page reloads once. -5. Reproduce o issue ou trigger o remote componente carregue você quiser inspect. -6. Select uma report e inspect current carregamento, previous carregamento records, o event timeline, e solução de problemas suggestions. -7. Click `Export` para save o full report. +No desenvolvimento local, inicie primeiro o producer e informe a URL do manifest na regra de proxy. A página do consumer é recarregada automaticamente quando o código do producer é alterado. -Report states: +![](@public/guide/chrome-devtools/dev-to-proxy.png) -- `Success`: o MF chain completed. Remote reports show o remote result; shared reports show o selected provider e versão. -- `Failed`: o chain falhou. Start do falhou phase, erro code, e suggested actions. -- `Pending`: uma começa event was recorded, but no completion, falha, ou recovery event was seen yet. -- `Recovered`: carregamento hit uma problem primeiro, then continued por meio de fallback ou recovery. -- `Basic observability`: o runtime versão é too low ou cannot ser detected, so detailed phases may ser missing. +![](@public/guide/chrome-devtools/proxy-to-local.png) -### Analyze um exported report +### Loading Trace -O exported JSON contains `config`, `scopes`, e `reports`. For each report, comece por: +O Loading Trace ajuda a diagnosticar páginas em branco, componentes presos no carregamento, versões inesperadas de dependências compartilhadas e falhas no carregamento de producers. -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-shared-report-en.png) +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-overview-en.png) -- `diagnosis`: o solução de problemas conclusion, facts, e next actions. -- `summary`: o final estado, such as `runtime-loaded`, `component-loaded`, `shared-resolved`, `failed`, `recovered`, ou `pending`. -- `remote` / `shared`: o que was carregado. For shared reports, inspect provider, obrigatório versão, selected versão, e disponível versões. -- `loadedBefore`: whether o mesmo producer had já been carregado by another consumer. -- `events`: o ordered timeline, useful for finding o phase esse got stuck. +Estados do painel: -Você pode forneça o exported report diretamente para um AI coding agente: +- `OFF`: não há um relatório de carregamento disponível na página atual. +- `ON`: a extensão está coletando dados da aba atual. +- `CUSTOM`: a página usa o [Observability Plugin](/plugin/plugins/observability-plugin.html), e o Devtools está lendo seus relatórios. -```text -/mf obs +Para acompanhar um carregamento: -I have an MF Loading Trace report exported from Chrome DevTools. -Please tell me whether the load succeeded, where it failed, who likely owns the issue, and how to fix it. +1. Abra o Loading Trace. Se o estado for `OFF`, clique em `Observe now`; a página será atualizada uma vez. +2. Reproduza o problema ou acione o carregamento do componente remoto que deseja inspecionar. +3. Selecione um relatório e verifique o resultado, a linha do tempo de eventos, a etapa da falha e as ações sugeridas. +4. Clique em `Export` para salvar o relatório completo. - -``` +Os principais estados do relatório são sucesso, falha, em andamento e recuperação. O JSON exportado contém `config`, `scopes` e `reports`. Verifique principalmente: +- `diagnosis`: a conclusão, as evidências e as ações sugeridas. +- `summary`: o estado final do carregamento. +- `remote` / `shared`: o alvo carregado, o provider e os detalhes de versão. +- `loadedBefore`: se outro consumer já havia carregado o mesmo producer. +- `events`: a sequência completa de eventos. -## How para Proxy Locally Developed Módulos para Online +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-shared-report-en.png) -- First, você precisa começa o producer locally. +## Usar o WebMCP com um agente de código -![](@public/guide/chrome-devtools/dev-to-proxy.png) +::: tip Status da versão para Chrome desktop -- Then enter o successful manifest address no versão selection input box no proxy page. -- Afterward, adjust o local producer code, e o consumer page vai automatically Reload. +O suporte a WebMCP no Chrome para desktop está em análise para publicação na Chrome Web Store. Até a conclusão da análise, a versão da loja não oferece os recursos descritos nesta seção. -![](@public/guide/chrome-devtools/proxy-to-local.png) +::: -## FAQ +As duas versões da extensão registram automaticamente as ferramentas WebMCP quando a página é iniciada. A interface da extensão não precisa permanecer aberta, e a aplicação não precisa adicionar um SDK WebMCP. -### Does it suporte multi-tab isolation debugging? +| Ferramenta | Finalidade | +| --- | --- | +| `mf_get_state` | Ler o estado do runtime, as configurações de proxy e HMR e os relatórios de carregamento | +| `mf_get_modules` | Inspecionar todos os módulos ou um módulo específico | +| `mf_get_dependencies` | Obter as relações de dependência entre módulos | +| `mf_get_shared` | Inspecionar as versões e o estado de carregamento das dependências compartilhadas | +| `mf_set_proxy` / `mf_clear_proxy` | Configurar ou remover proxies de módulos | +| `mf_set_hmr` | Ativar ou desativar React HMR / Fast Refresh | +| `mf_configure_loading_trace` | Configurar o Loading Trace | +| `mf_get_loading_reports` | Ler relatórios de carregamento | +| `mf_export_snapshot` | Exportar um snapshot de diagnóstico em JSON | -Yes, quando você debug com multiple tabs open simultaneously, o Chrome DevTool plugin automatically identifies o current active tab e stores o proxy rules for each tab em isolation. +Por exemplo, peça a um agente compatível com WebMCP: -- **Independent Storage**: Proxy configuração for Tab Uma apenas affects Tab Uma. Depois switching para Tab B, o panel automatically carrega Tab B's configuração. -- **Estado Persistence**: Even se multiple tabs carregue o mesmo URL, their proxy states são physically isolated e não interfere com each other. -- **Automatic Switching**: Clicking o "Focus Tab" tag em DevTools confirms o target page currently being debugged. +```text +Leia o estado atual do MF e preserve as regras de proxy existentes. +Redirecione mf_playground para https://localhost:3006/mf-manifest.json, +ative o HMR, atualize a página e verifique se a configuração entrou em vigor. +``` -### Quando does o configuração take effect? +`mf_set_proxy` substitui toda a lista de regras de proxy; portanto, leia o estado atual antes de fazer alterações. As ferramentas de configuração retornam `reloadRequired`, e o agente deve atualizar a página de acordo com esse resultado. -- ✅ Matches verification rules -- ✅ Configuração rule é checked -- ✅ Configuração filled em correctly, page displays: Proxy configuração has taken effect, módulo remoto obtained successfully, corresponding page has been automatically refreshed. +O layout do grafo, os filtros, o tema e o idioma continuam sendo operações da interface. Para uma análise mais detalhada de erros de runtime ou gargalos de desempenho, use o [Divebell](/guide/debug/divebell.html). -### Partial configuração matches rules +## Observações -O plugin vai filter out **módulos esse correspondência o configuração rules** for proxying. +- A extensão não ignora CSP, CORS nem as restrições de rede do navegador. O redirecionamento de uma página HTTPS para um serviço HTTP local ainda exige políticas, protocolos e cabeçalhos de resposta para acesso entre origens compatíveis. +- As configurações de Proxy, HMR e Loading Trace são armazenadas no localStorage da origem da página. Abas da mesma origem podem compartilhar configurações. Use origens diferentes ou perfis de navegador separados quando precisar de configurações conflitantes. +- Se um agente não encontrar as ferramentas WebMCP, recarregue a extensão e atualize a página. Em seguida, verifique `window.__MF_DEVTOOLS_WEBMCP__` no console. `registered` indica que o registro foi concluído, `unavailable` indica que o host não forneceu uma API compatível e `error` contém a causa específica. diff --git a/apps/website-new/docs/zh/guide/debug/chrome-devtool.mdx b/apps/website-new/docs/zh/guide/debug/chrome-devtool.mdx index dc7d156cbd8..61eba6188b1 100644 --- a/apps/website-new/docs/zh/guide/debug/chrome-devtool.mdx +++ b/apps/website-new/docs/zh/guide/debug/chrome-devtool.mdx @@ -1,160 +1,154 @@ # Chrome Devtool -`微前端` 架构不同于传统单体应用的开发模式,其分开开发、部署、调试的特征使其需要一套新的调试工具来满足新的使用场景。例如,在开发时怎么验证模块在实际项目中的效果、某个生产者的依赖是否和宿主环境进行了复用、当前页面加载了哪些模块,模块之间的依赖关系以及数据流转是怎么样的。 +Module Federation Devtools 用于查看页面中的 Federation 模块、依赖关系和共享依赖,也可以将远程模块代理到本地或指定版本,并追踪模块加载过程。 -`Chrome Devtool` 提供了以下能力: +::: tip 使用要求 -- 支持代理功能,将线上页面中的远程模块代理到用户本地 -- 切换线上远程页面模块版本,进行快速的功能验证 -- 支持查看模块依赖信息 -- 支持筛选指定模块依赖信息 -- 支持加载追踪,记录 remote、shared、组件加载信号和失败报告 - -::: tip 关于 Chrome Devtool 的限制 - -必须使用 `mf-manifest.json` 才可以使用 `Chrome devtool` 提供的可视化和代理能力。 +可视化和代理功能依赖 `mf-manifest.json`。 ::: -::: tip 使用 AI Coding Agent 调试 +## 在不同浏览器中使用 -当 Agent 需要结构化定位 MF 运行时错误、加载链路或性能瓶颈时,使用 -[Divebell](/guide/debug/divebell.html)。 - -::: +Module Federation Devtools 是 Chrome 扩展,提供两个适配不同浏览器环境的版本。两个版本的调试功能相同,仅安装方式和打开入口不同: -## 使用场景 +| 使用场景 | 扩展版本 | 打开方式 | +| --- | --- | --- | +| 标准桌面 Chrome | 桌面 Chrome 版(`dist/chrome`) | 扩展侧边栏或 Chrome DevTools 中的 `Module Federation` 面板 | +| 支持 Chrome 扩展的 AI 应用内置浏览器,例如 ChatGPT 内置浏览器 | 内置浏览器版(`dist/browser`) | 点击扩展图标打开紧凑弹窗 | -DevTools 提供了多个功能面板,适用于开发环境以及生产环境的不同调试需求: +两个版本均支持模块代理与版本切换、模块信息、依赖关系图、共享依赖、React HMR / Fast Refresh、加载追踪、报告导出和 WebMCP。 -- **Proxy (代理)**:用于将线上或测试环境的模块代理到本地开发环境。 - - 支持本地服务端口号,例如 key: appA -> value: `http://localhost:3000/mf-manifest.json`,页面将直接加载 3000 端口的 Module Federation 内容。 - - 支持使用 `mf-manifest.json` 文件地址形式,例如:key: appA -> value: `https://xxx/static/mf-manifest.json`, 页面将直接加载指定地址的 Module Federation 内容。 +同一个浏览器中只应启用一个版本,避免重复注入。 -- **Module Info (模块信息)**:用于查看当前页面加载的所有 Federation 模块的详细信息,包括版本、入口地址等。 +::: tip 无头浏览器或 CI 环境 -- **Dependency Graph (依赖关系图)**:以可视化的方式展示模块之间的依赖引用关系,帮助理清复杂的微前端架构。 +以上两个版本适用于可交互的浏览器环境。对于无头浏览器或 CI 自动化,推荐使用 [Divebell](https://github.com/2heal1/divebell) 及其 [Module Federation Extension](https://github.com/2heal1/divebell/tree/main/packages/extensions/mf)。 -- **Shared (共享依赖)**:深入分析 Shared Dependencies 的使用情况。 - - 查看已加载和未加载的共享依赖。 - - 分析共享依赖的版本复用情况(Loaded / Reused)。 - - 检查单例(Singleton)、严格版本(Strict Version)等配置的生效状态。 +Divebell 可以通过 CLI 加载页面、采集 Module Federation 运行时信息并输出结构化诊断结果,无需打开扩展界面。安装和使用方式请参考 [使用 Divebell 排查运行时问题](/guide/debug/divebell.html)。 -- **加载追踪**:记录当前页面的 Module Federation 加载过程。 - - 查看 `loadRemote`、`loadShare` 的开始、成功、失败和恢复状态。 - - 查看当前是谁在加载哪个 remote、哪个 expose,以及 shared 使用了哪个 provider 和版本。 - - 如果页面已经接入 [观测插件](/plugin/plugins/observability-plugin.html),面板会读取页面已有报告,状态显示为 `CUSTOM`。 - - 如果页面没有接入观测插件,可以在面板中点击「开启采集」,Chrome 插件会为当前 Tab 临时注入采集插件。 +::: -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/shared-overview.png) +## 安装 -## 如何安装 +### 桌面 Chrome 版 -1. 打开 [Module Federation 插件详情页](https://chromewebstore.google.com/detail/module-federation/aeoilchhomapofiopejjlecddfldpeom?hl=zh-CN&utm_source=ext_sidebar), 点击 `添加到 Chrome` 按钮 +打开 [Module Federation 插件详情页](https://chromewebstore.google.com/detail/module-federation/aeoilchhomapofiopejjlecddfldpeom?hl=zh-CN&utm_source=ext_sidebar),点击 `添加到 Chrome`。 ![](@public/guide/chrome-devtools/chrome-store-add-devtool.png) -## 如何使用 +### 内置浏览器版 -插件提供了 Devtools 面板 +1. 打开 [Module Federation Releases](https://github.com/module-federation/core/releases),在正式版本的 **Assets** 中下载 Browser 版 ZIP。不要下载 GitHub 自动生成的 **Source code** 压缩包。 +2. 解压 ZIP,在内置浏览器的扩展管理页面中加载解压后的目录。 +3. 打开或刷新目标页面,点击扩展图标。 -- F12 打开开发者工具,选择点击 `Module Federation` tab,进入代理页面,便可对依赖的模块进行代理调试 -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/launch-devtool.jpg) +`latest` 正式版会发布 Browser 版附件,`next` 预览版不创建 GitHub Release。若目标版本没有附件,可以在仓库中执行: -## 整体交互 +```bash +pnpm --filter @module-federation/devtools run build:devtool +``` -如下图所示,代理页面上提供了 `add new proxy module`、`producer selector`、 `version or local port or custom entry` 等选项操作。 +然后加载 `packages/chrome-devtools/dist/browser`。更新插件后,需要重载扩展并刷新已打开的页面。 -- 通过选择 `producer selector` 选择出目标页面需要代理的一个模块; -- 通过 `version or local port` 选择或者输入指定的地址(包括端口号和 `mf-manifest.json` 结尾的地址),进行代理操作; -- 如果需要同时代理多个模块,点击 `add new proxy module` 区域,增加对应的代理模块。 -- **支持多 Tab 隔离**:在多个标签页中同时打开使用了 Module Federation 的页面时,每个 Tab 的代理规则和模块信息都是相互独立的。你在 Tab A 中设置的代理规则不会影响 Tab B,反之亦然。这允许你同时调试多个环境或应用状态。 +## 功能 -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/proxy.png) +| 面板 | 用途 | +| --- | --- | +| Proxy | 将远程模块切换到本地服务、指定版本或自定义 `mf-manifest.json` 地址 | +| Module Info | 查看当前页面加载的 Federation 模块、版本和入口地址 | +| Dependency Graph | 查看和筛选模块之间的依赖关系 | +| Shared | 查看共享依赖的加载状态、复用版本以及 Singleton、Strict Version 等配置 | +| Loading Trace | 追踪 remote、shared 和组件的加载过程,查看失败原因并导出报告 | -## 加载追踪 +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/shared-overview.png) -「加载追踪」Tab 用于回答“当前页面的 MF 加载到底发生了什么”。它适合在页面空白、组件一直 loading、shared 版本不确定、生产者偶发失败时使用。 +## 使用插件 -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-overview.png) +在桌面 Chrome 中,打开目标页面后按 F12,在开发者工具中选择 `Module Federation`。在内置浏览器中,点击扩展图标打开插件。 -面板顶部的状态含义如下: +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/launch-devtool.jpg) -- `OFF`:当前页面还没有可读取的加载报告。 -- `ON`:Chrome 插件已经为当前 Tab 开启采集。 -- `CUSTOM`:当前页面已经自己注册了观测插件,面板正在读取页面已有报告。 +### 代理模块 -常用流程: +1. 在 Proxy 面板中选择要代理的模块。 +2. 选择目标版本,或输入本地端口和完整的 `mf-manifest.json` 地址,例如 `http://localhost:3000/mf-manifest.json`。 +3. 如需代理多个模块,点击 `add new proxy module` 添加规则。 +4. 保存配置并刷新页面。 -1. 打开目标页面。 -2. 打开 Chrome DevTools,进入 `Module Federation` 面板。 -3. 点击「加载追踪」。 -4. 如果状态是 `OFF`,点击「开启采集」,页面会刷新一次。 -5. 复现问题,或者触发需要观察的远程组件加载。 -6. 在报告列表中选择一条记录,查看当前加载、历史加载记录、事件时间线和失败建议。 -7. 点击「导出」保存完整报告。 +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/proxy.png) -报告状态可以这样理解: +本地开发时,先启动生产者,再将其 manifest 地址填入代理规则。修改生产者代码后,消费者页面会自动 Reload。 -- `成功`:这条 MF 链路已经完成。remote 加载成功会显示 remote 结果;shared 解析成功会显示 provider 和版本。 -- `失败`:这条链路出现错误,优先看右侧的失败阶段、错误码和建议。 -- `进行中`:只看到了开始事件,还没有看到完成、失败或恢复事件。 -- `兜底成功`:加载过程中出现过问题,但运行时通过 fallback 或恢复路径继续执行。 -- `基础观测`:当前运行时版本较低或无法识别,只能看到基础事件,细阶段可能缺失。 +![](@public/guide/chrome-devtools/dev-to-proxy.png) -### 导出报告后怎么分析 +![](@public/guide/chrome-devtools/proxy-to-local.png) -导出的 JSON 会包含 `config`、`scopes` 和 `reports`。每条 report 里最重要的是: +### 加载追踪 -![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-shared-report.png) +Loading Trace 用于排查页面空白、组件持续 loading、shared 版本不符合预期或生产者加载失败等问题。 -- `diagnosis`:面向排查的结论、证据和下一步建议。 -- `summary`:最终状态,例如 `runtime-loaded`、`component-loaded`、`shared-resolved`、`failed`、`recovered`、`pending`。 -- `remote` / `shared`:当前加载对象。shared 报告里重点看 provider、要求版本、实际版本和可用版本。 -- `loadedBefore`:同一个生产者之前是否已经被其他消费者加载过。 -- `events`:完整事件顺序,用于确认卡在哪一步。 +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-overview.png) -可以把导出的报告直接交给 AI coding agent: +面板状态: -```text -/mf obs +- `OFF`:当前页面没有可读取的加载报告。 +- `ON`:插件已为当前 Tab 开启采集。 +- `CUSTOM`:页面已接入[观测插件](/plugin/plugins/observability-plugin.html),Devtools 正在读取已有报告。 -我这里有一份 Chrome DevTools 导出的 MF 加载追踪报告。 -请帮我判断这次加载是否成功,失败点在哪里,最可能是谁的问题,以及下一步怎么修。 +使用步骤: -<粘贴导出的 JSON> -``` +1. 打开 Loading Trace;如果状态为 `OFF`,点击「开启采集」,页面会刷新一次。 +2. 复现问题或触发需要观察的远程组件加载。 +3. 选择报告,查看加载结果、事件时间线、失败阶段和处理建议。 +4. 点击「导出」保存完整报告。 +报告中的主要状态包括成功、失败、进行中和兜底成功。导出的 JSON 包含 `config`、`scopes` 和 `reports`,分析时重点关注: -## 如何将本地开发的模块代理到线上 +- `diagnosis`:排查结论、证据和建议。 +- `summary`:最终加载状态。 +- `remote` / `shared`:加载对象、provider 和版本信息。 +- `loadedBefore`:同一生产者此前是否已被其他消费者加载。 +- `events`:完整事件顺序。 -- 首先需要在本地启动生产者 +![](https://module-federation-assest.netlify.app/document/guide/chrome-devtools/loading-trace-shared-report.png) -![](@public/guide/chrome-devtools/dev-to-proxy.png) +## 通过 WebMCP 与 Coding Agent 配合 -- 然后将启动成功的 manifest 地址,输入到代理页面的版本选择输入框内 -- 之后调整本地的生产者代码,消费者页面将会自动 Reload +::: tip 桌面 Chrome 版发布状态 -![](@public/guide/chrome-devtools/proxy-to-local.png) +桌面 Chrome 版的 WebMCP 功能正在 Chrome Web Store 上线审核中。审核通过前,商店版本暂不支持本节介绍的能力。 -## 常见问题 +::: -### 是否支持多 Tab 隔离调试 +两个扩展版本都会在页面启动时自动注册 WebMCP 工具,不需要保持插件界面打开,也不需要业务页面额外接入 WebMCP SDK。 -> 不支持同一域名多个 Tab 同时调试 +| 工具 | 用途 | +| --- | --- | +| `mf_get_state` | 读取运行时、代理、HMR 配置和加载报告 | +| `mf_get_modules` | 查看全部模块或指定模块 | +| `mf_get_dependencies` | 获取模块依赖关系 | +| `mf_get_shared` | 查看共享依赖版本和加载状态 | +| `mf_set_proxy` / `mf_clear_proxy` | 设置或清除模块代理 | +| `mf_set_hmr` | 开启或关闭 React HMR / Fast Refresh | +| `mf_configure_loading_trace` | 配置加载追踪 | +| `mf_get_loading_reports` | 读取加载报告 | +| `mf_export_snapshot` | 导出诊断快照 JSON | -支持,当你同时打开多个标签页(Tabs)进行调试时,Chrome DevTool 插件会自动识别当前的活动 Tab,并隔离存储每个 Tab 的代理规则。 +例如,可以让支持 WebMCP 的 Agent 执行: -- **独立存储**:Tab A 的代理配置仅对 Tab A 生效,切换到 Tab B 后,面板会自动加载 Tab B 的配置。 -- **状态保持**:即使多个 Tab 加载的是同一个 URL,它们的代理状态也是物理隔离的,互不干扰。 -- **自动切换**:点击 DevTools 中的 "Focus Tab" 标签可以确认当前正在调试的目标页面。 +```text +读取当前页面的 MF 状态,保留现有代理规则, +把 mf_playground 代理到 https://localhost:3006/mf-manifest.json, +开启 HMR,刷新页面后检查配置是否生效。 +``` -### 配置何时生效 +`mf_set_proxy` 会替换完整的代理规则列表,因此修改前应先读取现有状态。配置工具会返回 `reloadRequired`,Agent 应根据结果刷新页面。 -- ✅ 符合验证规则 -- ✅ 配置规则被勾选 -- ✅ 配置填写正确,页面显示:代理配置已生效,获取远程模块成功,已自动刷新对应页面 +依赖图布局、筛选、主题和语言等界面操作仍需在 UI 中完成。需要进一步分析运行时错误或性能瓶颈时,可以使用 [Divebell](/guide/debug/divebell.html)。 -### 部分配置符合规则 +## 注意事项 -插件会筛选出**符合配置规则的模块**进行代理 +- 插件不会绕过 CSP、CORS 或浏览器网络限制。HTTPS 页面代理到本地 HTTP 服务时,仍需正确配置页面策略、协议和跨域响应。 +- Proxy、HMR 和 Loading Trace 配置保存在页面 origin 的 localStorage 中,同源标签页可能共享配置。需要同时使用不同配置时,请使用不同 origin 或独立的浏览器配置文件。 +- 如果 Agent 没有发现 WebMCP 工具,请重载扩展并刷新页面,然后在 Console 检查 `window.__MF_DEVTOOLS_WEBMCP__`。`registered` 表示注册成功,`unavailable` 表示宿主没有提供可用 API,`error` 的具体原因记录在 `error` 字段中。 diff --git a/apps/website-new/module-federation.config.ts b/apps/website-new/module-federation.config.ts index b18326d8818..b966a9eebf8 100644 --- a/apps/website-new/module-federation.config.ts +++ b/apps/website-new/module-federation.config.ts @@ -7,9 +7,10 @@ const MF_DOC_PUBLIC_PATH_KEY = '__MF_DOC_PUBLIC_PATH__'; const PLAYGROUND_REMOTE_NAME = 'mf_playground'; const PLAYGROUND_REMOTE_MANIFEST_URL = process.env.NODE_ENV === 'development' - ? 'http://localhost:3006/mf-manifest.json' + ? // ? 'http://localhost:3006/mf-manifest.json' + 'https://unpkg.com/@module-federation/playground@latest/dist/mf/mf-manifest.json' : // : 'https://unpkg.com/@module-federation/playground@latest/dist/mf/mf-manifest.json'; - 'https://unpkg.com/@module-federation/playground@next/dist/mf/mf-manifest.json'; + 'https://unpkg.com/@module-federation/playground@latest/dist/mf/mf-manifest.json'; const exposes = { // basic diff --git a/apps/website-new/package.json b/apps/website-new/package.json index c604b564116..11af4759fd3 100644 --- a/apps/website-new/package.json +++ b/apps/website-new/package.json @@ -1,6 +1,6 @@ { "name": "website-new", - "version": "1.3.31", + "version": "1.3.33", "private": true, "description": "Federation example for website-new", "scripts": { @@ -15,7 +15,6 @@ "@module-federation/runtime": "workspace:*", "@rsbuild/plugin-sass": "^2.0.1", "@rspress/core": "2.0.14", - "framer-motion": "^10.0.0", "react": "19.1.1", "react-dom": "19.1.1", "react-router-dom": "^7.15.1", diff --git a/apps/website-new/rspress.config.ts b/apps/website-new/rspress.config.ts index 7e89042885e..40b85a6ccce 100644 --- a/apps/website-new/rspress.config.ts +++ b/apps/website-new/rspress.config.ts @@ -127,6 +127,11 @@ gtag('config', '${googleAnalyticsMeasurementId}'); writeToDisk: true, lazyCompilation: false, }, + server: { + headers: { + 'Access-Control-Allow-Origin': '*', + }, + }, performance: { buildCache: false, }, @@ -134,6 +139,24 @@ gtag('config', '${googleAnalyticsMeasurementId}'); postcss: (config, { addPlugins }) => { addPlugins([require('tailwindcss/nesting'), require('tailwindcss')]); }, + rspack: (config, { environment }) => { + if ( + environment.name === 'web' && + config.optimization?.splitChunks && + typeof config.optimization.splitChunks === 'object' + ) { + const splitChunks = config.optimization.splitChunks; + splitChunks.cacheGroups ??= {}; + splitChunks.cacheGroups.reactSharedFallback = { + test: /[\\/]node_modules[\\/]\.pnpm[\\/](?:cookie|react(?:-dom|-router(?:-dom)?)?|scheduler|set-cookie-parser)@/, + name: 'react-shared-fallback', + chunks: 'async', + enforce: true, + priority: 50, + reuseExistingChunk: true, + }; + } + }, // rspack: { // optimization: { // minimize: false, diff --git a/apps/website-new/src/components/AnnouncementVideo.module.scss b/apps/website-new/src/components/AnnouncementVideo.module.scss new file mode 100644 index 00000000000..57744fdb9c4 --- /dev/null +++ b/apps/website-new/src/components/AnnouncementVideo.module.scss @@ -0,0 +1,48 @@ +.videoFrame { + position: relative; + max-width: calc(100% - 32px); + aspect-ratio: 16 / 9; + overflow: hidden; + background: #111827; + border-radius: 8px; +} + +.player, +.posterButton { + position: absolute; + inset: 0; + width: 100%; + height: 100%; +} + +.posterButton { + padding: 0; + overflow: hidden; + cursor: pointer; + background: #111827; + border: 0; +} + +.posterButton:focus-visible { + outline: 3px solid var(--rp-c-brand); + outline-offset: 3px; +} + +.poster { + width: 100%; + height: 100%; + object-fit: cover; +} + +.playIcon { + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + border-top: 18px solid transparent; + border-bottom: 18px solid transparent; + border-left: 28px solid #fff; + filter: drop-shadow(0 2px 8px rgb(0 0 0 / 60%)); + transform: translate(-42%, -50%); +} diff --git a/apps/website-new/src/components/AnnouncementVideo.tsx b/apps/website-new/src/components/AnnouncementVideo.tsx index 9e1e129cd64..f79d1da43f9 100644 --- a/apps/website-new/src/components/AnnouncementVideo.tsx +++ b/apps/website-new/src/components/AnnouncementVideo.tsx @@ -1,64 +1,94 @@ -import { useEffect, useLayoutEffect, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { useI18n } from '../../theme/i18n'; -import Player from 'xgplayer'; -import 'xgplayer/dist/index.min.css'; +import styles from './AnnouncementVideo.module.scss'; export default function AnnouncementVideo(props: { customWidthScale?: number; }) { const t = useI18n(); + const containerRef = useRef(null); + const playerRef = useRef<{ destroy: () => void } | null>(null); + const [shouldLoad, setShouldLoad] = useState(false); + const [isReady, setIsReady] = useState(false); + const widthScale = 1 - (props.customWidthScale ?? 0.3); + const videoUrl = t('announcementVideo'); + const posterUrl = t('announcementVideoPoster'); - useEffect(() => { - setTimeout(() => { - new Player({ - id: 'mse-video', - url: t('announcementVideo'), - height: '100%', - width: '100%', - poster: t('announcementVideoPoster'), - }); - }, 500); - }); + const loadPlayer = useCallback(() => { + setShouldLoad(true); + }, []); - function calculatescale(width: number) { - let customWidthScale = props.customWidthScale; - if (!props.customWidthScale) { - customWidthScale = 0.3; + useEffect(() => { + const container = containerRef.current; + if (!container || shouldLoad) { + return; } - return { - width: width - width * customWidthScale, - height: (width - width * customWidthScale) * 0.5625, - }; - } - const [divWidth, setDivWidth] = useState(0); + const observer = new IntersectionObserver( + ([entry]) => { + if (entry.isIntersecting && entry.intersectionRatio >= 0.4) { + setShouldLoad(true); + observer.disconnect(); + } + }, + { threshold: 0.4 }, + ); - // 更新宽度的函数 - const updateWidth = () => { - setDivWidth(window.innerWidth); - }; - - useLayoutEffect(() => { - updateWidth(); - }, []); + observer.observe(container); + return () => observer.disconnect(); + }, [shouldLoad]); useEffect(() => { - window.addEventListener('resize', updateWidth); + if (!shouldLoad) { + return; + } + + let cancelled = false; + + void Promise.all([ + import('xgplayer'), + import('xgplayer/dist/index.min.css'), + ]).then(([{ default: Player }]) => { + if (cancelled || !containerRef.current) { + return; + } + + playerRef.current = new Player({ + el: containerRef.current, + url: videoUrl, + height: '100%', + width: '100%', + poster: posterUrl, + }); + setIsReady(true); + }); return () => { - window.removeEventListener('resize', updateWidth); + cancelled = true; + playerRef.current?.destroy(); + playerRef.current = null; }; - }, []); + }, [posterUrl, shouldLoad, videoUrl]); return (
-
+
+ {!isReady && ( + + )}
); } diff --git a/apps/website-new/theme/components/HomeFeature/index.module.scss b/apps/website-new/theme/components/HomeFeature/index.module.scss index f6d67258eab..5c850a1872c 100644 --- a/apps/website-new/theme/components/HomeFeature/index.module.scss +++ b/apps/website-new/theme/components/HomeFeature/index.module.scss @@ -47,6 +47,10 @@ overflow: hidden; } +.featureItem { + animation: feature-enter 0.5s ease both; +} + .featureCard { padding: 32px; height: 100%; @@ -59,3 +63,21 @@ .featureCard:hover { border: 1px solid var(--rp-c-brand); } + +@keyframes feature-enter { + from { + opacity: 0; + transform: translateY(20px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +@media (prefers-reduced-motion: reduce) { + .featureItem { + animation: none; + } +} diff --git a/apps/website-new/theme/components/HomeFeature/index.tsx b/apps/website-new/theme/components/HomeFeature/index.tsx index 236e3b39802..b9c746ef3ef 100644 --- a/apps/website-new/theme/components/HomeFeature/index.tsx +++ b/apps/website-new/theme/components/HomeFeature/index.tsx @@ -1,5 +1,4 @@ import styles from './index.module.scss'; -import { motion } from 'framer-motion'; const PRESET_COUNT = [2, 3, 4]; const getGridClass = (count?: number): string => { @@ -30,14 +29,12 @@ export function HomeFeature({ features }: { features: Feature[] }) { {features?.map((feature, index) => { const { icon, title, details, link } = feature; return ( -
-
+
); })} diff --git a/apps/website-new/theme/components/HomeFooter/index.tsx b/apps/website-new/theme/components/HomeFooter/index.tsx index 6232f072adf..8f2403d9cd6 100644 --- a/apps/website-new/theme/components/HomeFooter/index.tsx +++ b/apps/website-new/theme/components/HomeFooter/index.tsx @@ -70,7 +70,7 @@ function useFooterData() { export function HomeFooter() { const footerData = useFooterData(); return ( -
+
{footerData.map((item, newKey) => (
@@ -93,6 +93,6 @@ export function HomeFooter() { Reserved.
-
+
); } diff --git a/apps/website-new/theme/components/HomeHero/index.tsx b/apps/website-new/theme/components/HomeHero/index.tsx index 4e454a2f93a..c327374f917 100644 --- a/apps/website-new/theme/components/HomeHero/index.tsx +++ b/apps/website-new/theme/components/HomeHero/index.tsx @@ -23,7 +23,7 @@ export function HomeHero({ hero }: { hero: Hero }) {
@@ -62,7 +62,14 @@ export function HomeHero({ hero }: { hero: Hero }) { {hasImage ? (
- {hero.image?.alt} + {hero.image?.alt}
) : null}
diff --git a/apps/website-new/theme/components/LazySearch/SearchPanel.ts b/apps/website-new/theme/components/LazySearch/SearchPanel.ts new file mode 100644 index 00000000000..308043e98dc --- /dev/null +++ b/apps/website-new/theme/components/LazySearch/SearchPanel.ts @@ -0,0 +1 @@ +export { SearchPanel as default } from '@rspress/core/theme-original'; diff --git a/apps/website-new/theme/components/LazySearch/index.tsx b/apps/website-new/theme/components/LazySearch/index.tsx new file mode 100644 index 00000000000..37d5f1f1958 --- /dev/null +++ b/apps/website-new/theme/components/LazySearch/index.tsx @@ -0,0 +1,46 @@ +import { lazy, Suspense, useEffect, useState } from 'react'; +import { NoSSR } from '@rspress/core/runtime'; +import { SearchButton } from '@rspress/core/theme-original'; + +const loadSearchPanel = () => import('./SearchPanel'); + +const SearchPanel = lazy(loadSearchPanel); + +export function Search() { + const [activated, setActivated] = useState(false); + const [focused, setFocused] = useState(false); + + const openSearch = () => { + setActivated(true); + setFocused(true); + }; + + useEffect(() => { + if (activated) { + return; + } + + const onKeyDown = (event: KeyboardEvent) => { + if (event.code === 'KeyK' && (event.ctrlKey || event.metaKey)) { + event.preventDefault(); + openSearch(); + } + }; + + document.addEventListener('keydown', onKeyDown); + return () => document.removeEventListener('keydown', onKeyDown); + }, [activated]); + + return ( + <> + + {activated ? ( + + + + + + ) : null} + + ); +} diff --git a/apps/website-new/theme/index.tsx b/apps/website-new/theme/index.tsx index 2c7c8cb1c37..bd9c168bf28 100644 --- a/apps/website-new/theme/index.tsx +++ b/apps/website-new/theme/index.tsx @@ -1,5 +1,6 @@ import { HomeLayout } from './pages'; +import { Search } from './components/LazySearch'; import './index.css'; -export { HomeLayout }; +export { HomeLayout, Search }; export * from '@rspress/core/theme-original'; diff --git a/apps/website-new/theme/pages/index.tsx b/apps/website-new/theme/pages/index.tsx index 1b5b29b0d49..9b3b9ef27ec 100644 --- a/apps/website-new/theme/pages/index.tsx +++ b/apps/website-new/theme/pages/index.tsx @@ -12,7 +12,7 @@ export function HomeLayout() { return (
{/* Landing Page */} -
-
+ {/* Benchmark Page */} {/* diff --git a/package.json b/package.json index 31ffc62b07a..1a1084d44d4 100644 --- a/package.json +++ b/package.json @@ -165,7 +165,7 @@ ] }, "dependencies": { - "adm-zip": "0.6.0", + "adm-zip": "^0.6.1", "ansi-colors": "4.1.3", "antd": "5.19.1", "axios": "1.18.0", @@ -177,11 +177,11 @@ "openai": "^6.27.0", "rambda": "11.1.0", "regenerator-runtime": "0.14.1", - "sharp": "^0.35.0", + "sharp": "^0.35.4", "storybook": "8.6.17", "tapable": "2.3.0", "typedoc": "0.28.17", - "undici": "7.29.0", + "undici": "7.29.1", "unplugin": "3.0.0" }, "devDependencies": { @@ -203,9 +203,9 @@ "@rollup/plugin-alias": "5.1.1", "@rollup/plugin-replace": "6.0.1", "@rslib/core": "^0.23.2", - "@rspack/cli": "1.3.9", - "@rspack/core": "1.3.9", - "@rspack/dev-server": "1.1.1", + "@rspack/cli": "2.1.10", + "@rspack/core": "2.1.10", + "@rspack/dev-server": "2.2.1", "@rstest/core": "^0.10.6", "@storybook/addon-docs": "9.0.17", "@storybook/nextjs": "9.0.9", @@ -217,7 +217,7 @@ "@swc/jest": "0.2.36", "@tailwindcss/forms": "0.5.9", "@testing-library/react": "16.1.0", - "@types/adm-zip": "0.5.5", + "@types/adm-zip": "^0.5.5", "@types/chrome": "0.0.277", "@types/download": "8.0.5", "@types/eslint": "~9.6.1", @@ -246,9 +246,9 @@ "eslint": "9.39.3", "eslint-config-prettier": "10.1.5", "eslint-plugin-cypress": "^2.13.4", - "eslint-plugin-import": "2.31.0", + "eslint-plugin-import": "2.32.0", "eslint-plugin-jsx-a11y": "6.10.1", - "eslint-plugin-prettier": "5.2.1", + "eslint-plugin-prettier": "5.5.6", "eslint-plugin-react": "7.37.2", "eslint-plugin-react-hooks": "5.0.0", "eslint-plugin-simple-import-sort": "12.1.1", @@ -259,7 +259,7 @@ "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jiti": "2.6.1", - "js-yaml": "4.3.1", + "js-yaml": "4.3.2", "jsonc-eslint-parser": "^3.1.0", "kill-port": "^2.0.1", "mime-types": "2.1.35", @@ -295,7 +295,7 @@ "url-loader": "4.1.1", "vite": "7.3.5", "vite-tsconfig-paths": "4.2.3", - "vitest": "3.2.6", + "vitest": "4.1.11", "vue-tsc": "^2.2.10", "wait-on": "^7.2.0", "webpack": "5.104.1", diff --git a/packages/bridge/bridge-react-webpack-plugin/CHANGELOG.md b/packages/bridge/bridge-react-webpack-plugin/CHANGELOG.md index b77502e2a0b..4f295ac60bb 100644 --- a/packages/bridge/bridge-react-webpack-plugin/CHANGELOG.md +++ b/packages/bridge/bridge-react-webpack-plugin/CHANGELOG.md @@ -1,5 +1,17 @@ # @module-federation/bridge-react-webpack-plugin +## 2.9.2 + +### Patch Changes + +- @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/bridge/bridge-react-webpack-plugin/package.json b/packages/bridge/bridge-react-webpack-plugin/package.json index 4d9c7268e65..6d4ea656dad 100644 --- a/packages/bridge/bridge-react-webpack-plugin/package.json +++ b/packages/bridge/bridge-react-webpack-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/bridge-react-webpack-plugin", - "version": "2.9.0", + "version": "2.9.2", "publishConfig": { "access": "public" }, diff --git a/packages/bridge/bridge-react/CHANGELOG.md b/packages/bridge/bridge-react/CHANGELOG.md index 43dbdeced83..9cf042c45f2 100644 --- a/packages/bridge/bridge-react/CHANGELOG.md +++ b/packages/bridge/bridge-react/CHANGELOG.md @@ -1,5 +1,19 @@ # @module-federation/bridge-react +## 2.9.2 + +### Patch Changes + +- 4364cb6: Deduplicate module loader calls and keep delayed loading continuous for + client-rendered lazy React components. + - @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/bridge/bridge-react/__tests__/createLazyComponent.spec.tsx b/packages/bridge/bridge-react/__tests__/createLazyComponent.spec.tsx index c351e3c2740..a25f1150404 100644 --- a/packages/bridge/bridge-react/__tests__/createLazyComponent.spec.tsx +++ b/packages/bridge/bridge-react/__tests__/createLazyComponent.spec.tsx @@ -1,10 +1,11 @@ import React, { Suspense } from 'react'; -import { render, screen, waitFor } from '@testing-library/react'; +import { act, render, screen, waitFor } from '@testing-library/react'; import { renderToString } from 'react-dom/server'; import { createLazyComponent, collectSSRAssets, } from '../src/lazy/createLazyComponent'; +import { ERROR_TYPE } from '../src/lazy/constant'; import * as runtime from '@module-federation/runtime'; import * as utils from '../src/lazy/utils'; @@ -16,11 +17,20 @@ const mockGetInstance = runtime.getInstance as jest.Mock; const mockGetLoadedRemoteInfos = utils.getLoadedRemoteInfos as jest.Mock; const mockGetDataFetchMapKey = utils.getDataFetchMapKey as jest.Mock; const mockFetchData = utils.fetchData as jest.Mock; +const mockResetDataFetchResult = utils.resetDataFetchResult as jest.Mock; const MockComponent = () =>
Mock Component
; const LoadingComponent = () =>
Loading...
; const ErrorComponent = () =>
Error!
; +const createDeferred = () => { + let resolve!: (value: T | PromiseLike) => void; + const promise = new Promise((resolvePromise) => { + resolve = resolvePromise; + }); + return { promise, resolve }; +}; + const renderAssetsToFragment = (assets: React.ReactNode[]) => { const template = document.createElement('template'); template.innerHTML = renderToString(<>{assets}); @@ -97,6 +107,230 @@ describe('createLazyComponent', () => { }); }); + it('should load a CSR component without a data loader once', async () => { + mockGetDataFetchMapKey.mockReturnValue(undefined); + const loader = jest.fn().mockResolvedValue({ + default: MockComponent, + [Symbol.for('mf_module_id')]: 'remoteApp/Component', + }); + const LazyComponent = createLazyComponent({ + loader, + instance: mockInstance, + loading: , + fallback: , + noSSR: true, + }); + + render( + }> + + , + ); + + await waitFor(() => { + expect(screen.getByText('Mock Component')).toBeInTheDocument(); + }); + expect(loader).toHaveBeenCalledTimes(1); + expect(mockFetchData).not.toHaveBeenCalled(); + }); + + it('should keep one delayed loading instance while loading module and data', async () => { + const moduleDeferred = createDeferred(); + const dataDeferred = createDeferred<{ message: string }>(); + const loadingMounted = jest.fn(); + const Loading = () => { + React.useEffect(() => { + loadingMounted(); + }, []); + return
Loading continuously...
; + }; + const loader = jest.fn(() => moduleDeferred.promise); + mockFetchData.mockReturnValue(dataDeferred.promise); + + const LazyComponent = createLazyComponent({ + loader, + instance: mockInstance, + loading: , + delayLoading: 10, + fallback: , + noSSR: true, + dataFetchParams: { + query: { source: 'test' }, + isDowngrade: true, + }, + }); + + render(); + + await waitFor(() => { + expect(screen.getByText('Loading continuously...')).toBeInTheDocument(); + }); + + await act(async () => { + moduleDeferred.resolve({ + default: (props: { mfData: { message: string } }) => ( +
{props.mfData.message}
+ ), + [Symbol.for('mf_module_id')]: 'remoteApp/Component', + }); + await moduleDeferred.promise; + }); + + expect(screen.getByText('Loading continuously...')).toBeInTheDocument(); + + await act(async () => { + dataDeferred.resolve({ message: 'Loaded with data' }); + await dataDeferred.promise; + }); + + await waitFor(() => { + expect(screen.getByText('Loaded with data')).toBeInTheDocument(); + }); + expect(loader).toHaveBeenCalledTimes(1); + expect(loadingMounted).toHaveBeenCalledTimes(1); + expect(mockFetchData).toHaveBeenCalledTimes(1); + expect(mockFetchData).toHaveBeenCalledWith( + 'data-fetch-key', + { + query: { source: 'test' }, + isDowngrade: false, + }, + expect.any(Object), + ); + }); + + it('should not fetch data again on a CSR component rerender', async () => { + const dataDeferred = createDeferred<{ message: string }>(); + mockFetchData.mockReturnValue(dataDeferred.promise); + const LazyComponent = createLazyComponent({ + loader: jest.fn().mockResolvedValue({ + default: (props: { mfData: { message: string } }) => ( +
{props.mfData.message}
+ ), + [Symbol.for('mf_module_id')]: 'remoteApp/Component', + }), + instance: mockInstance, + loading: , + fallback: , + noSSR: true, + }); + + const { rerender } = render(); + rerender(); + + await waitFor(() => { + expect(mockFetchData).toHaveBeenCalledTimes(1); + }); + + await act(async () => { + dataDeferred.resolve({ message: 'Rerendered data' }); + await dataDeferred.promise; + }); + + await waitFor(() => { + expect(screen.getByText('Rerendered data')).toBeInTheDocument(); + }); + expect(mockFetchData).toHaveBeenCalledTimes(1); + }); + + it('should reuse the in-flight CSR request when StrictMode replays effects', async () => { + mockFetchData.mockResolvedValue({ message: 'Strict mode data' }); + const loader = jest.fn().mockResolvedValue({ + default: (props: { mfData: { message: string } }) => ( +
{props.mfData.message}
+ ), + [Symbol.for('mf_module_id')]: 'remoteApp/Component', + }); + const LazyComponent = createLazyComponent({ + loader, + instance: mockInstance, + loading: , + fallback: , + noSSR: true, + }); + + render( + + + , + ); + + await waitFor(() => { + expect(screen.getByText('Strict mode data')).toBeInTheDocument(); + }); + expect(loader).toHaveBeenCalledTimes(1); + expect(mockFetchData).toHaveBeenCalledTimes(1); + }); + + it('should fetch data again after the CSR component remounts', async () => { + mockFetchData + .mockResolvedValueOnce({ message: 'First mount' }) + .mockResolvedValueOnce({ message: 'Second mount' }); + const LazyComponent = createLazyComponent({ + loader: jest.fn().mockResolvedValue({ + default: (props: { mfData: { message: string } }) => ( +
{props.mfData.message}
+ ), + [Symbol.for('mf_module_id')]: 'remoteApp/Component', + }), + instance: mockInstance, + loading: , + fallback: , + noSSR: true, + }); + + const firstRender = render(); + await waitFor(() => { + expect(screen.getByText('First mount')).toBeInTheDocument(); + }); + firstRender.unmount(); + + render(); + await waitFor(() => { + expect(screen.getByText('Second mount')).toBeInTheDocument(); + }); + expect(mockFetchData).toHaveBeenCalledTimes(2); + expect(mockResetDataFetchResult).toHaveBeenCalledTimes(2); + expect(mockResetDataFetchResult).toHaveBeenNthCalledWith( + 1, + 'data-fetch-key', + ); + expect(mockResetDataFetchResult).toHaveBeenNthCalledWith( + 2, + 'data-fetch-key', + ); + }); + + it('should preserve load error details in a CSR fallback', async () => { + const fallback = jest.fn(({ error, errorType }) => ( +
+ {errorType}: {error.message} +
+ )); + const LazyComponent = createLazyComponent({ + loader: jest.fn().mockRejectedValue(new Error('Remote unavailable')), + instance: mockInstance, + loading: , + fallback, + noSSR: true, + }); + + render(); + + await waitFor(() => { + expect( + screen.getByText( + `${ERROR_TYPE.LOAD_REMOTE}: Error: Remote unavailable`, + ), + ).toBeInTheDocument(); + }); + expect(fallback).toHaveBeenCalledWith( + expect.objectContaining({ + errorType: ERROR_TYPE.LOAD_REMOTE, + }), + ); + }); + it('should render fallback component on data fetch error', async () => { mockFetchData.mockRejectedValue(new Error('Data fetch failed')); const LazyComponentWithDataFetch = createLazyComponent({ diff --git a/packages/bridge/bridge-react/__tests__/data-fetch-utils.spec.ts b/packages/bridge/bridge-react/__tests__/data-fetch-utils.spec.ts new file mode 100644 index 00000000000..5bed1a17306 --- /dev/null +++ b/packages/bridge/bridge-react/__tests__/data-fetch-utils.spec.ts @@ -0,0 +1,77 @@ +import { MF_DATA_FETCH_STATUS, MF_DATA_FETCH_TYPE } from '../src/lazy/constant'; +import { cache, clearStore } from '../src/lazy/data-fetch/cache'; +import type { DataFetch, MF_DATA_FETCH_MAP } from '../src/lazy/types'; +import { fetchData, resetDataFetchResult } from '../src/lazy/utils'; + +const dataFetchId = 'host:1.0.0:remote/component.data'; + +const setDataFetchItem = ( + dataFetchFn: DataFetch, + dataPromise?: Promise, +) => { + const getDataFetchFn = jest.fn().mockResolvedValue(dataFetchFn); + globalThis.__MF_DATA_FETCH_MAP__ = { + [dataFetchId]: [ + [ + getDataFetchFn, + MF_DATA_FETCH_TYPE.FETCH_CLIENT, + Promise.resolve(dataFetchFn), + ], + dataPromise ? [dataPromise] : undefined, + dataPromise ? MF_DATA_FETCH_STATUS.LOADED : MF_DATA_FETCH_STATUS.AWAIT, + ], + } as MF_DATA_FETCH_MAP; + return getDataFetchFn; +}; + +describe('data fetch result lifecycle', () => { + beforeEach(() => { + globalThis.__MF_DATA_FETCH_MAP__ = undefined; + globalThis.__MF_DATA_FETCH_CACHE__ = undefined; + }); + + afterEach(() => { + clearStore(); + globalThis.__MF_DATA_FETCH_MAP__ = undefined; + }); + + it('consumes injected data once without clearing the DataLoader function', async () => { + const dataFetchFn = jest.fn().mockResolvedValue('fresh data'); + const dataFetchFnPromise = Promise.resolve(dataFetchFn); + const injectedDataPromise = Promise.resolve('injected data'); + setDataFetchItem(dataFetchFn, injectedDataPromise); + const dataFetchItem = globalThis.__MF_DATA_FETCH_MAP__![dataFetchId]; + dataFetchItem[0][2] = dataFetchFnPromise; + + await expect(fetchData(dataFetchId, { isDowngrade: false })).resolves.toBe( + 'injected data', + ); + expect(dataFetchFn).not.toHaveBeenCalled(); + + resetDataFetchResult(dataFetchId); + + expect(dataFetchItem[0][2]).toBe(dataFetchFnPromise); + expect(dataFetchItem[1]).toBeUndefined(); + expect(dataFetchItem[2]).toBe(MF_DATA_FETCH_STATUS.AWAIT); + await expect(fetchData(dataFetchId, { isDowngrade: false })).resolves.toBe( + 'fresh data', + ); + expect(dataFetchFn).toHaveBeenCalledTimes(1); + }); + + it('keeps explicit DataLoader cache entries after resetting transport data', async () => { + const request = jest.fn().mockResolvedValue('cached data'); + const cachedDataFetch = cache(request); + setDataFetchItem(cachedDataFetch); + + await expect(fetchData(dataFetchId, { isDowngrade: false })).resolves.toBe( + 'cached data', + ); + resetDataFetchResult(dataFetchId); + await expect(fetchData(dataFetchId, { isDowngrade: false })).resolves.toBe( + 'cached data', + ); + + expect(request).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/bridge/bridge-react/package.json b/packages/bridge/bridge-react/package.json index 133c02a479d..342c3d6b8a3 100644 --- a/packages/bridge/bridge-react/package.json +++ b/packages/bridge/bridge-react/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/bridge-react", - "version": "2.9.0", + "version": "2.9.2", "sideEffects": false, "publishConfig": { "access": "public" @@ -189,6 +189,6 @@ "vite": "^5.4.21", "@module-federation/runtime": "workspace:*", "@module-federation/runtime-core": "workspace:*", - "hono": "4.13.1" + "hono": "4.13.5" } } diff --git a/packages/bridge/bridge-react/src/lazy/createLazyComponent.tsx b/packages/bridge/bridge-react/src/lazy/createLazyComponent.tsx index c7a561268d4..984ecb198e2 100644 --- a/packages/bridge/bridge-react/src/lazy/createLazyComponent.tsx +++ b/packages/bridge/bridge-react/src/lazy/createLazyComponent.tsx @@ -1,6 +1,6 @@ import type { ModuleFederation, getInstance } from '@module-federation/runtime'; import type { BasicProviderModuleInfo } from '@module-federation/sdk'; -import React, { ReactNode, useState, useEffect } from 'react'; +import React, { ReactNode, useEffect, useRef, useState } from 'react'; import type { ErrorInfo } from './AwaitDataFetch'; import type { DataFetchParams, NoSSRRemoteInfo } from './types'; import { HydratedStylesheetAssets } from './HydratedStylesheetAssets'; @@ -17,6 +17,7 @@ import { getDataFetchMapKey, getDataFetchInfo, getLoadedRemoteInfos, + resetDataFetchResult, setDataFetchItemLoadedStatus, wrapDataFetchId, } from './utils'; @@ -226,17 +227,35 @@ export function createLazyComponent( ? ReactKey : Parameters[0] & ReactKey : ReactKey; + type LoadedModule = Record & Record; + type NoSSRState = + | { status: 'loading' } + | { + status: 'loaded'; + Component: React.FC & { mfData?: unknown }>; + data: unknown; + } + | { status: 'error'; error: ErrorInfo }; + type NoSSRLoadedState = Extract; const exportName = options?.export || 'default'; + let loaderPromise: Promise | undefined; - const callLoader = async () => { - logger.debug('callLoader start', Date.now()); - const m = (await options.loader()) as Record & - Record; - logger.debug('callLoader end', Date.now()); - if (!m) { - throw new Error('load remote failed'); + const callLoader = () => { + if (!loaderPromise) { + logger.debug('callLoader start', Date.now()); + loaderPromise = (async () => { + const m = (await options.loader()) as LoadedModule; + logger.debug('callLoader end', Date.now()); + if (!m) { + throw new Error('load remote failed'); + } + return m; + })().catch((error) => { + loaderPromise = undefined; + throw error; + }); } - return m; + return loaderPromise; }; const getData = async (noSSR?: boolean) => { @@ -287,11 +306,19 @@ export function createLazyComponent( const errMsg = `${DATA_FETCH_ERROR_PREFIX}${wrapDataFetchId(dataFetchMapKey)}${err}`; logger.debug(errMsg); throw new Error(errMsg); + } finally { + if (noSSR && dataFetchMapKey) { + resetDataFetchResult(dataFetchMapKey); + } } }; - const LazyComponent = React.lazy(async () => { - const m = await callLoader(); + const getNoSSRData = () => + getData(true).catch((error) => { + throw error instanceof Error ? error.message : error; + }); + + const createLoadedComponent = (m: LoadedModule) => { const moduleId = m && m[Symbol.for('mf_module_id')]; const loadedRemoteInfo = getLoadedRemoteInfos(moduleId, instance); loadedRemoteInfo?.snapshot; @@ -321,25 +348,23 @@ export function createLazyComponent( const Com = m[exportName] as React.FC; if (exportName in m && typeof Com === 'function') { - return { - default: (props: Omit & { mfData?: unknown }) => ( - <> - {globalThis.FEDERATION_SSR && dataFetchMapKey && ( - - )} - {globalThis.FEDERATION_SSR && assets} - - - ), - }; + }} + > + )} + {globalThis.FEDERATION_SSR && assets} + + + ); // eslint-disable-next-line max-lines } else { throw Error( @@ -348,6 +373,13 @@ export function createLazyComponent( )}`, ); } + }; + + const LazyComponent = React.lazy(async () => { + const m = await callLoader(); + return { + default: createLoadedComponent(m), + }; }); return (props: ComponentType) => { @@ -366,39 +398,41 @@ export function createLazyComponent( ); } else { - // Client-side rendering logic - const [data, setData] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); + const [state, setState] = useState({ status: 'loading' }); + const loadPromiseRef = useRef>(); useEffect(() => { let isMounted = true; - const fetchDataAsync = async () => { - try { - setLoading(true); - const result = await getData(options.noSSR); - if (isMounted) { - setData(result); - } - } catch (e) { + + loadPromiseRef.current ??= (async () => { + const data = await getNoSSRData(); + const m = await callLoader(); + const Component = createLoadedComponent(m); + return { status: 'loaded', Component, data }; + })(); + + loadPromiseRef.current.then( + (loadedState) => { if (isMounted) { - setError(transformError(e as Error)); + setState(loadedState); } - } finally { + }, + (error) => { if (isMounted) { - setLoading(false); + setState({ + status: 'error', + error: transformError(error as Error), + }); } - } - }; - - fetchDataAsync(); + }, + ); return () => { isMounted = false; }; }, []); - if (loading) { + if (typeof window === 'undefined') { return ( {options.loading} @@ -406,17 +440,26 @@ export function createLazyComponent( ); } - if (error) { + if (state.status === 'error') { return ( <> {typeof options.fallback === 'function' - ? options.fallback(error) + ? options.fallback(state.error) : options.fallback} ); } - // @ts-expect-error ignore - return ; + + if (state.status === 'loading') { + return ( + + {options.loading} + + ); + } + + const LoadedComponent = state.Component; + return ; } }; } diff --git a/packages/bridge/bridge-react/src/lazy/utils.ts b/packages/bridge/bridge-react/src/lazy/utils.ts index 40497c4adb8..1db67c8f23e 100644 --- a/packages/bridge/bridge-react/src/lazy/utils.ts +++ b/packages/bridge/bridge-react/src/lazy/utils.ts @@ -110,6 +110,15 @@ export function setDataFetchItemLoadedStatus(id: string) { dataFetchItem[2] = MF_DATA_FETCH_STATUS.LOADED; } +export function resetDataFetchResult(id: string) { + const dataFetchItem = getDataFetchItem(id); + if (!dataFetchItem) { + return; + } + dataFetchItem[1] = undefined; + dataFetchItem[2] = MF_DATA_FETCH_STATUS.AWAIT; +} + export const wrapDataFetchId = (id?: string) => { return `${WRAP_DATA_FETCH_ID_IDENTIFIER}${id}${WRAP_DATA_FETCH_ID_IDENTIFIER}`; }; diff --git a/packages/bridge/bridge-shared/CHANGELOG.md b/packages/bridge/bridge-shared/CHANGELOG.md index ba6807241c2..953f2e67673 100644 --- a/packages/bridge/bridge-shared/CHANGELOG.md +++ b/packages/bridge/bridge-shared/CHANGELOG.md @@ -1,5 +1,9 @@ # @module-federation/bridge-shared +## 2.9.2 + +## 2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/bridge/bridge-shared/package.json b/packages/bridge/bridge-shared/package.json index a0abbb64fd5..2657bc55a71 100644 --- a/packages/bridge/bridge-shared/package.json +++ b/packages/bridge/bridge-shared/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/bridge-shared", - "version": "2.9.0", + "version": "2.9.2", "publishConfig": { "access": "public" }, diff --git a/packages/bridge/vue3-bridge/CHANGELOG.md b/packages/bridge/vue3-bridge/CHANGELOG.md index 16de93f7f63..af3c6a020c4 100644 --- a/packages/bridge/vue3-bridge/CHANGELOG.md +++ b/packages/bridge/vue3-bridge/CHANGELOG.md @@ -1,5 +1,21 @@ # @module-federation/bridge-vue3 +## 2.9.2 + +### Patch Changes + +- @module-federation/runtime@2.9.2 +- @module-federation/sdk@2.9.2 +- @module-federation/bridge-shared@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/runtime@2.9.1 +- @module-federation/sdk@2.9.1 +- @module-federation/bridge-shared@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/bridge/vue3-bridge/package.json b/packages/bridge/vue3-bridge/package.json index 3c0520df79f..8e39ec0f068 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.9.0", + "version": "2.9.2", "publishConfig": { "access": "public" }, diff --git a/packages/chrome-devtools/CHANGELOG.md b/packages/chrome-devtools/CHANGELOG.md index 27237534769..dd59436766c 100644 --- a/packages/chrome-devtools/CHANGELOG.md +++ b/packages/chrome-devtools/CHANGELOG.md @@ -1,5 +1,26 @@ # @module-federation/devtools +## 2.9.2 + +### Patch Changes + +- @module-federation/observability-plugin@2.6.2 +- @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- 35f2119: Add page-level WebMCP tools for Module Federation inspection, proxy rules, HMR and loading traces. Build separate Chrome side-panel and embedded-browser popup extensions, with a compact popup layout and shared page configuration. + + Use pinned umd-react 19.2.4 development builds for React 19 Fast Refresh, including react-dom/client and eager shared dependencies. + + Register WebMCP tools at document start, retry late host API availability, and expose registration diagnostics. + + Support WebMCP hosts that expose registerTool without unregisterTool. + - @module-federation/observability-plugin@2.6.1 + - @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/chrome-devtools/README.md b/packages/chrome-devtools/README.md index a2a19791b8c..974da27ac82 100644 --- a/packages/chrome-devtools/README.md +++ b/packages/chrome-devtools/README.md @@ -9,3 +9,128 @@ loading reports https://module-federation.io/ + +## Extension builds + +From the repository root: + +```sh +pnpm --filter @module-federation/devtools run build:devtool +``` + +One compilation produces two unpacked extensions: + +| Directory | Interface | +| --------------------------------------- | ------------------------------------------------------------------------- | +| `packages/chrome-devtools/dist/chrome` | Chrome side panel and DevTools panel | +| `packages/chrome-devtools/dist/browser` | 800 × 600 popup with fixed navigation/header and a scrolling content area | + +Load the appropriate directory, then reload the page being inspected. Both +variants retain the same `document_start` MAIN-world scripts for proxying, +React Fast Refresh and loading traces. The browser variant omits `sidePanel`, +`side_panel`, and `devtools_page`. It still needs Manifest V3 content scripts, +service workers, storage, tabs and scripting APIs from the host browser. + +`build:devtool:popup` is a compatibility alias that now builds both variants. +`dist/.extension-build` is intermediate output, not an installable extension. +The library `build` command cleans `dist`, so run `build:devtool` afterwards +when you also need the unpacked extensions. Remove the old root-`dist` extension +registration when migrating; do not enable two variants on the same page. + +## WebMCP + +Both extensions register page-scoped tools from a MAIN-world content script at +`document_start`. Tools remain available with the extension UI closed. Registration +uses native `document.modelContext` or the earlier `navigator.modelContext` API. +`registerTool` is required; `unregisterTool` is optional. On hosts without +unregistration, tools live until the document is destroyed; partial registration +failures cannot be rolled back and require a page reload. +The entry retries host API detection every 250 ms for up to 30 seconds. Inspect +`window.__MF_DEVTOOLS_WEBMCP__` in the page console for `waiting`, `registering`, +`registered`, `unavailable` or `error`, tool names, and registration errors. +After installing/reloading the extension, refresh existing pages. If the host API +arrives after the retry window, refresh the page once it is available. +When neither API is available, the extension continues to work normally without +WebMCP. No polyfill is installed: the browser/agent must support discovering and +calling registered tools. A page exposing tools alone does not establish that +an embedded browser exposes them to its agent. + +| Tool | Capability | +| ---------------------------- | ------------------------------------------------------------------------------------------------------ | +| `mf_get_state` | Module snapshots, shared scopes, registered plugins, saved proxy/HMR configuration and loading reports | +| `mf_get_modules` | All module snapshots or one exact `moduleId` | +| `mf_get_dependencies` | Dependency graph source data, consumers and remote IDs | +| `mf_get_shared` | Shared versions and loading state; factories are not executed | +| `mf_set_proxy` | Replace rules, enable/disable individual rules and configure snapshot clipping | +| `mf_clear_proxy` | Clear proxy rules and cached proxy snapshots, preserving HMR/tracing | +| `mf_set_hmr` | Enable/disable development React replacement and Fast Refresh | +| `mf_configure_loading_trace` | Enable/disable tracing; level, event limit, console, browser output, scope, mode and start logging | +| `mf_get_loading_reports` | Current reports across observability scopes | +| `mf_export_snapshot` | Serializable JSON export of the current diagnostic state | + +These tools cover the implemented runtime features. Graph layout, filtering, +module selection, theme and language remain presentation controls in the UI; +an agent receives the underlying structured data. The Performance tab is still +a placeholder and has no performance-analysis tool. Export tools return JSON +rather than silently downloading a file. + +Example tool inputs: + +```json +{ + "rules": [ + { + "key": "mf_playground", + "value": "https://localhost:3006/mf-manifest.json", + "checked": true + } + ], + "clip": false +} +``` + +Pass that object to `mf_set_proxy`. Pass `{ "enabled": true }` to `mf_set_hmr`. +`mf_set_proxy` replaces the complete rule set, so read `mf_get_state` before +editing existing rules. An unchecked rule remains saved but is not applied. + +Configuration tools synchronously persist the inspected origin's localStorage +and return `reloadRequired: true`. They do not reload inside the tool invocation, +which could destroy its response before the agent receives it. The agent should +finish configuration, reload through browser navigation, then call `mf_get_state` +to verify. Saved configuration is distinct from the currently running runtime. +Eager React shares may cause one additional automatic refresh while the existing +Fast Refresh plugin records their version and share scopes. + +React 19 development replacement is pinned to the same pair used by Divebell: +`umd-react@19.2.4/dist/react.development.js` and +`umd-react@19.2.4/dist/react-dom.development.js` from unpkg. All `19.x` React, +ReactDOM and `react-dom/client` registrations use version `19.2.4` while HMR is +enabled. The client entry reuses ReactDOM's development bundle. Both async and +eager loading initialize React before ReactDOM; React 19 eager shares can load +synchronously without the first-discovery refresh. React 17/18 keep their existing +official development UMD URLs. Disabling HMR preserves the application's providers. + +The UI reads the same page configuration; opening it does not replay a stale +global HMR preference or trigger a reload. Open extension views receive a snapshot +notification after a tool changes configuration. Settings are origin-scoped and +persist across navigation; they are not isolated to one tab of the same origin. + +The tools expose only named diagnostic operations, not arbitrary script execution, +arbitrary storage access or extension APIs. Page CSP, CORS and certificate checks +still apply. In particular, HTTPS sites whose CSP excludes local HTTP resources +need a permitted remote endpoint; WebMCP does not bypass that policy. + +## Validation + +```sh +pnpm --filter @module-federation/devtools run test +pnpm --filter @module-federation/devtools run build +pnpm --filter @module-federation/devtools run build:devtool +PLAYWRIGHT_BROWSERS_PATH=0 pnpm --filter @module-federation/devtools exec playwright install chromium +PLAYWRIGHT_BROWSERS_PATH=0 pnpm --filter @module-federation/devtools exec playwright test e2e/webmcp.spec.ts --workers=1 +``` + +The WebMCP E2E fixture loads both real unpacked extensions in Chromium, with a +host-API test double. It verifies early injection, persisted configuration across +reloads, tool execution, and popup layout. It does not claim to validate native +WebMCP discovery in Codex or another embedded browser. diff --git a/packages/chrome-devtools/__tests__/extension-packaging.spec.ts b/packages/chrome-devtools/__tests__/extension-packaging.spec.ts new file mode 100644 index 00000000000..bc5766ec336 --- /dev/null +++ b/packages/chrome-devtools/__tests__/extension-packaging.spec.ts @@ -0,0 +1,75 @@ +import { describe, expect, it } from '@rstest/core'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { execFileSync } from 'node:child_process'; + +describe('extension packaging', () => { + it('produces independent Chrome and browser manifests without changing the source or library output', () => { + const directory = fs.mkdtempSync( + path.join(os.tmpdir(), 'mf-extension-test-'), + ); + try { + const source = path.join(directory, 'dist/.extension-build'); + fs.mkdirSync(source, { recursive: true }); + fs.writeFileSync(path.join(source, 'bundle.js'), 'extension bundle'); + fs.writeFileSync( + path.join(directory, 'dist/library.js'), + 'library bundle', + ); + for (const filename of ['postpack.js', 'package.json', 'manifest.json']) { + fs.copyFileSync( + path.join(process.cwd(), filename), + path.join(directory, filename), + ); + } + const original = fs.readFileSync( + path.join(directory, 'manifest.json'), + 'utf8', + ); + execFileSync(process.execPath, ['postpack.js'], { cwd: directory }); + const read = (variant: string) => + JSON.parse( + fs.readFileSync( + path.join(directory, 'dist', variant, 'manifest.json'), + 'utf8', + ), + ); + const chrome = read('chrome'); + const browser = read('browser'); + expect(chrome.side_panel.default_path).toBe('html/main/index.html'); + expect(chrome.devtools_page).toBeTruthy(); + expect(chrome.permissions).toContain('sidePanel'); + expect(browser.side_panel).toBeUndefined(); + expect(browser.devtools_page).toBeUndefined(); + expect(browser.permissions).not.toContain('sidePanel'); + expect(browser.action.default_popup).toBe( + 'html/main/index.html?view=popup', + ); + expect(browser.content_scripts).toEqual(chrome.content_scripts); + expect( + browser.content_scripts.some( + (script: any) => + script.js.includes('static/js/webmcp.js') && + script.world === 'MAIN' && + script.run_at === 'document_start', + ), + ).toBe(true); + for (const variant of ['chrome', 'browser']) + expect( + fs.readFileSync( + path.join(directory, 'dist', variant, 'bundle.js'), + 'utf8', + ), + ).toBe('extension bundle'); + expect( + fs.readFileSync(path.join(directory, 'dist/library.js'), 'utf8'), + ).toBe('library bundle'); + expect( + fs.readFileSync(path.join(directory, 'manifest.json'), 'utf8'), + ).toBe(original); + } finally { + fs.rmSync(directory, { recursive: true, force: true }); + } + }); +}); diff --git a/packages/chrome-devtools/__tests__/fast-refresh.spec.ts b/packages/chrome-devtools/__tests__/fast-refresh.spec.ts index 042cbadb455..294ce0591ce 100644 --- a/packages/chrome-devtools/__tests__/fast-refresh.spec.ts +++ b/packages/chrome-devtools/__tests__/fast-refresh.spec.ts @@ -5,12 +5,14 @@ import { __ENABLE_FAST_REFRESH__, __FEDERATION_DEVTOOLS__, } from '../src/template/constant'; +import { getUnpkgUrl } from '../src/utils/sdk'; const resetWindowState = () => { localStorage.clear(); const testWindow = window as Record; + delete testWindow.__REACT_DEVTOOLS_GLOBAL_HOOK__; delete testWindow.React; delete testWindow.ReactDOM; delete testWindow.scope_react; @@ -33,6 +35,7 @@ const stubUmdRequest = ({ reactScript?: string; reactDomScript?: string; } = {}) => { + const requests: Array<{ url: string; async: boolean }> = []; class MockXMLHttpRequest { status = 200; responseText = ''; @@ -42,6 +45,7 @@ const stubUmdRequest = ({ onerror: null | (() => void) = null; open(_method: string, url: string, async = true) { + requests.push({ url, async }); this.url = url; this.isAsync = async; } @@ -68,6 +72,7 @@ const stubUmdRequest = ({ } rs.stubGlobal('XMLHttpRequest', MockXMLHttpRequest as typeof XMLHttpRequest); + return requests; }; const getPlugin = async () => { @@ -87,7 +92,7 @@ describe('fast refresh shared scope globals', () => { __FEDERATION_DEVTOOLS__, JSON.stringify({ [__ENABLE_FAST_REFRESH__]: true, - [__EAGER_SHARE__]: ['react', '19.2.0', ['scope']], + [__EAGER_SHARE__]: ['react', '18.3.1', ['scope']], }), ); stubUmdRequest(); @@ -107,7 +112,7 @@ describe('fast refresh shared scope globals', () => { __FEDERATION_DEVTOOLS__, JSON.stringify({ [__ENABLE_FAST_REFRESH__]: true, - [__EAGER_SHARE__]: ['react', '19.2.0', ['scope-a', 'scope-b']], + [__EAGER_SHARE__]: ['react', '18.3.1', ['scope-a', 'scope-b']], }), ); stubUmdRequest(); @@ -131,7 +136,7 @@ describe('fast refresh shared scope globals', () => { __FEDERATION_DEVTOOLS__, JSON.stringify({ [__ENABLE_FAST_REFRESH__]: true, - [__EAGER_SHARE__]: ['react', '19.2.0', ['scope']], + [__EAGER_SHARE__]: ['react', '18.3.1', ['scope']], }), ); stubUmdRequest(); @@ -144,7 +149,7 @@ describe('fast refresh shared scope globals', () => { (window as any).scope_react_dom = { source: 'scope-react-dom' }; const reactShared = { - version: '19.2.0', + version: '18.3.1', scope: ['scope'], shareConfig: { eager: true, @@ -158,7 +163,7 @@ describe('fast refresh shared scope globals', () => { }); const reactDomShared = { - version: '19.2.0', + version: '18.3.1', scope: ['scope'], shareConfig: { eager: true, @@ -191,7 +196,7 @@ describe('fast refresh shared scope globals', () => { const plugin = await getPlugin(); const reactShared: Record = { - version: '19.2.0', + version: '18.3.1', scope: ['scope'], shareConfig: { eager: false, @@ -204,7 +209,7 @@ describe('fast refresh shared scope globals', () => { }); const reactDomShared: Record = { - version: '19.2.0', + version: '18.3.1', scope: ['scope'], shareConfig: { eager: false, @@ -230,3 +235,152 @@ describe('fast refresh shared scope globals', () => { expect(reactDomFactory()).toBe((window as any).scope_react_dom); }); }); + +describe('pinned React 19 development provider', () => { + beforeEach(() => { + rs.resetModules(); + rs.unstubAllGlobals(); + resetWindowState(); + localStorage.setItem( + __FEDERATION_DEVTOOLS__, + JSON.stringify({ [__ENABLE_FAST_REFRESH__]: true }), + ); + }); + + const scripts = { + reactScript: + 'window.React = { version: "19.2.4", createElement: () => Object.freeze({}), source: "dev-react" };', + reactDomScript: + 'window.ReactDOM = { version: "19.2.4", createRoot() {}, react: window.React };', + }; + + it('maps every 19.x request to the pinned development pair, preserving React 18 URLs', () => { + for (const version of ['19.0.0', '19.1.1', '19.2.0', '19.9.0-canary']) { + expect(getUnpkgUrl('react', version)).toBe( + 'https://unpkg.com/umd-react@19.2.4/dist/react.development.js', + ); + for (const pkg of ['react-dom', 'react-dom/client']) + expect(getUnpkgUrl(pkg, version)).toBe( + 'https://unpkg.com/umd-react@19.2.4/dist/react-dom.development.js', + ); + } + expect(getUnpkgUrl('react', '18.3.1')).toBe( + 'https://unpkg.com/react@18.3.1/umd/react.development.js', + ); + expect(getUnpkgUrl('react-dom', '18.3.1')).toBe( + 'https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js', + ); + }); + + it('loads React before client-only async requests and shares the same DOM instance', async () => { + const requests = stubUmdRequest(scripts); + const plugin = await getPlugin(); + const client: any = { + version: '19.0.0', + scope: ['scope'], + shareConfig: {}, + }; + const dom: any = { version: '19.1.1', scope: ['scope'], shareConfig: {} }; + const react: any = { version: '19.2.0', scope: ['scope'], shareConfig: {} }; + for (const [pkgName, shared] of [ + ['react-dom/client', client], + ['react-dom', dom], + ['react', react], + ]) + plugin.beforeRegisterShare({ pkgName, shared, origin: {} }); + const [clientFactory, domFactory] = await Promise.all([ + client.get(), + dom.get(), + ]); + const reactFactory = await react.get(); + expect(clientFactory()).toBe(domFactory()); + expect(clientFactory().react).toBe(reactFactory()); + expect(client.version).toBe('19.2.4'); + expect(dom.version).toBe('19.2.4'); + expect(react.version).toBe('19.2.4'); + expect(requests).toEqual([ + { + url: 'https://unpkg.com/umd-react@19.2.4/dist/react.development.js', + async: true, + }, + { + url: 'https://unpkg.com/umd-react@19.2.4/dist/react-dom.development.js', + async: true, + }, + ]); + }); + + it('loads eager client shares synchronously and saves the pinned version for the next navigation', async () => { + const requests = stubUmdRequest(scripts); + const plugin = await getPlugin(); + const client: any = { + version: '19.1.1', + scope: ['scope'], + shareConfig: { eager: true }, + }; + plugin.beforeRegisterShare({ + pkgName: 'react-dom/client', + shared: client, + origin: {}, + }); + expect(client.lib().version).toBe('19.2.4'); + expect(client.lib().react).toBe((window as any).scope_react); + expect(requests.every((request) => !request.async)).toBe(true); + expect(requests).toHaveLength(2); + expect( + JSON.parse(localStorage.getItem(__FEDERATION_DEVTOOLS__)!)[ + __EAGER_SHARE__ + ][1], + ).toBe('19.2.4'); + expect((await client.get())()).toBe(client.lib()); + }); + + it('hydrates old React 19 eager caches with pinned URLs', async () => { + localStorage.setItem( + __FEDERATION_DEVTOOLS__, + JSON.stringify({ + [__ENABLE_FAST_REFRESH__]: true, + [__EAGER_SHARE__]: ['react', '19.0.0', ['scope']], + }), + ); + const requests = stubUmdRequest(scripts); + await getPlugin(); + expect(requests.map((request) => request.url)).toEqual([ + 'https://unpkg.com/umd-react@19.2.4/dist/react.development.js', + 'https://unpkg.com/umd-react@19.2.4/dist/react-dom.development.js', + ]); + expect((window as any).scope_react_dom.version).toBe('19.2.4'); + }); + + it('preserves an installed DevTools hook and leaves disabled shares untouched', async () => { + const hook = { inject: rs.fn() }; + (window as any).__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook; + localStorage.clear(); + const requests = stubUmdRequest(scripts); + const plugin = await getPlugin(); + const originalGet = rs.fn(); + const shared: any = { version: '19.1.1', get: originalGet }; + plugin.beforeRegisterShare({ + pkgName: 'react-dom/client', + shared, + origin: {}, + }); + expect(shared.get).toBe(originalGet); + expect(shared.version).toBe('19.1.1'); + expect((window as any).__REACT_DEVTOOLS_GLOBAL_HOOK__).toBe(hook); + expect(requests).toHaveLength(0); + }); + + it('rejects an incorrect version or production React instead of returning it', async () => { + stubUmdRequest({ reactScript: 'window.React = { version: "19.0.0" };' }); + const plugin = await getPlugin(); + const shared: any = { version: '19.1.1' }; + plugin.beforeRegisterShare({ pkgName: 'react', shared, origin: {} }); + await expect(shared.get()).rejects.toThrow('19.2.4'); + stubUmdRequest({ + reactScript: + 'window.React = { version: "19.2.4", createElement: () => ({}) };', + }); + await expect(shared.get()).rejects.toThrow('not a development build'); + }); +}); diff --git a/packages/chrome-devtools/__tests__/webmcp.spec.ts b/packages/chrome-devtools/__tests__/webmcp.spec.ts new file mode 100644 index 00000000000..5aae975f6f2 --- /dev/null +++ b/packages/chrome-devtools/__tests__/webmcp.spec.ts @@ -0,0 +1,274 @@ +import { afterEach, beforeEach, describe, expect, it, rs } from '@rstest/core'; +import { + createDevtoolsTools, + startDevtoolsWebMCP, + registerDevtoolsWebMCP, +} from '../src/utils/chrome/webmcp'; +import { OBSERVABILITY_DEVTOOLS_STORAGE_KEY } from '../src/utils/chrome/messages'; + +const call = async (name: string, input = {}) => { + const tool = createDevtoolsTools().find((tool) => tool.name === name)!; + const result = await tool.execute(input); + return { + ...result, + data: result.isError + ? result.content[0].text + : JSON.parse(result.content[0].text), + }; +}; +const config = () => + JSON.parse(localStorage.getItem('__MF_DEVTOOLS__') || '{}'); + +describe('page WebMCP tools', () => { + beforeEach(() => { + localStorage.clear(); + window.__FEDERATION__ = { + moduleInfo: { + host: { + remotesInfo: { remote: { matchedVersion: 'old' } }, + shared: [{}], + modules: [{}], + }, + }, + __SHARE__: {}, + __GLOBAL_PLUGIN__: [], + } as any; + }); + afterEach(() => { + rs.restoreAllMocks(); + localStorage.clear(); + }); + + it('persists proxy rules, disabled rows and clipping without mutating the running snapshot', async () => { + const result = await call('mf_set_proxy', { + rules: [ + { key: 'remote', value: 'https://localhost:3006/mf-manifest.json' }, + { key: 'other', value: 'next', checked: false }, + ], + clip: true, + }); + expect(result.isError).toBeUndefined(); + expect(result.data.reloadRequired).toBe(true); + expect(config().overrides).toEqual({ + remote: 'https://localhost:3006/mf-manifest.json', + }); + expect(config().proxyRules).toHaveLength(2); + const snapshot = JSON.parse( + localStorage.getItem('__MF_DEVTOOLS_MODULE_INFO__')!, + ); + expect(snapshot.host.remotesInfo.remote.matchedVersion).toBe( + 'https://localhost:3006/mf-manifest.json', + ); + expect(snapshot.host.shared).toEqual([]); + expect(window.__FEDERATION__.moduleInfo.host.shared).toEqual([{}]); + }); + + it('clears proxy state without losing HMR, and removes eager metadata when HMR is disabled', async () => { + localStorage.setItem( + '__MF_DEVTOOLS__', + JSON.stringify({ + enableFastRefresh: true, + eagerShare: ['react', '18.3.1'], + }), + ); + await call('mf_set_proxy', { rules: [{ key: 'remote', value: 'next' }] }); + await call('mf_clear_proxy'); + expect(config().overrides).toEqual({}); + expect(config().proxyRules).toEqual([]); + expect(config().enableFastRefresh).toBe(true); + expect(localStorage.getItem('__MF_DEVTOOLS_MODULE_INFO__')).toBeNull(); + expect(localStorage.getItem('MF_ENV')).toBeNull(); + await call('mf_set_hmr', { enabled: false }); + expect(config().enableFastRefresh).toBe(false); + expect(config().eagerShare).toBeUndefined(); + }); + + it('rejects invalid writes without modifying storage', async () => { + localStorage.setItem('__MF_DEVTOOLS__', '{"enableFastRefresh":true}'); + for (const value of [ + 'javascript:alert(1)', + 'file:///tmp/entry.js', + 'https://user:pass@example.com/entry.js', + ]) { + expect( + (await call('mf_set_proxy', { rules: [{ key: 'remote', value }] })) + .isError, + ).toBe(true); + } + expect( + ( + await call('mf_set_proxy', { + rules: [{ key: '__proto__', value: 'next' }], + }) + ).isError, + ).toBe(true); + expect((await call('mf_set_hmr', { enabled: 'true' })).isError).toBe(true); + expect( + (await call('mf_set_hmr', { enabled: true, unexpected: 1 })).isError, + ).toBe(true); + expect(config()).toEqual({ enableFastRefresh: true }); + expect(localStorage.getItem('__MF_DEVTOOLS_MODULE_INFO__')).toBeNull(); + }); + + it('rolls back partial proxy writes on quota failure', async () => { + localStorage.setItem('__MF_DEVTOOLS__', '{"enableFastRefresh":true}'); + const original = Storage.prototype.setItem; + const spy = rs + .spyOn(Storage.prototype, 'setItem') + .mockImplementation(function (this: Storage, key, value) { + if (key === 'MF_ENV') throw new Error('Quota exceeded'); + return original.call(this, key, value); + }); + expect( + ( + await call('mf_set_proxy', { + rules: [{ key: 'remote', value: 'next' }], + }) + ).isError, + ).toBe(true); + spy.mockRestore(); + expect(localStorage.getItem('__MF_DEVTOOLS_MODULE_INFO__')).toBeNull(); + expect(config()).toEqual({ enableFastRefresh: true }); + }); + + it('configures tracing, exports reports, and disables only the extension configuration', async () => { + (window.__FEDERATION__ as any).__OBSERVABILITY__ = { + user: { getReports: () => [{ traceId: 'trace-1' }] }, + }; + const result = await call('mf_configure_loading_trace', { + enabled: true, + level: 'summary', + maxEvents: 20, + console: false, + printStart: false, + }); + expect(result.data.reloadRequired).toBe(true); + expect( + JSON.parse(localStorage.getItem(OBSERVABILITY_DEVTOOLS_STORAGE_KEY)!), + ).toMatchObject({ + enabled: true, + level: 'summary', + maxEvents: 20, + console: false, + trace: { printStart: false }, + }); + expect((await call('mf_get_loading_reports')).data.reports).toEqual([ + { traceId: 'trace-1', __scope: 'user' }, + ]); + expect((await call('mf_export_snapshot')).data.exportedAt).toBeTruthy(); + await call('mf_configure_loading_trace', { enabled: false }); + expect(localStorage.getItem(OBSERVABILITY_DEVTOOLS_STORAGE_KEY)).toBeNull(); + expect((await call('mf_get_loading_reports')).data.reports).toHaveLength(1); + }); + + it('returns serializable shared dependencies without invoking factories', async () => { + const factory = rs.fn(); + const shared: any = { react: { lib: factory } }; + shared.self = shared; + window.__FEDERATION__.__SHARE__ = shared; + const result = await call('mf_get_shared'); + expect(result.isError).toBeUndefined(); + expect(factory).not.toHaveBeenCalled(); + expect(typeof result.data.react.lib).toBe('string'); + expect( + (await call('mf_get_modules', { moduleId: 'missing' })).isError, + ).toBe(true); + expect((await call('mf_get_dependencies')).data.producer).toContain( + 'remote', + ); + }); + + it('registers named tools and cleans up only successful registrations on failure', async () => { + const unregisterTool = rs.fn(); + const registerTool = rs.fn().mockImplementation((tool) => { + if (tool.name === 'mf_get_dependencies') + throw new Error('Host rejected tool'); + }); + await expect( + registerDevtoolsWebMCP({ registerTool, unregisterTool }), + ).rejects.toThrow('Host rejected tool'); + expect(unregisterTool.mock.calls.map((args) => args[0])).toEqual([ + 'mf_get_state', + 'mf_get_modules', + ]); + const context = { registerTool: rs.fn(), unregisterTool: rs.fn() }; + const cleanup = await registerDevtoolsWebMCP(context); + expect(context.registerTool).toHaveBeenCalledTimes(10); + await cleanup(); + await cleanup(); + expect(context.unregisterTool).toHaveBeenCalledTimes(10); + }); + + it('does nothing on a host without WebMCP', async () => { + await expect(registerDevtoolsWebMCP(undefined)).resolves.toBeInstanceOf( + Function, + ); + }); +}); + +describe('WebMCP startup', () => { + afterEach(() => { + delete (document as any).modelContext; + delete (navigator as any).modelContext; + delete (window as any).__MF_DEVTOOLS_WEBMCP__; + rs.restoreAllMocks(); + }); + + it('registers a late host once and reports registered names', async () => { + const stop = startDevtoolsWebMCP(5, 100); + expect((window as any).__MF_DEVTOOLS_WEBMCP__.status).toBe('waiting'); + const context = { registerTool: rs.fn(), unregisterTool: rs.fn() }; + (document as any).modelContext = {}; // An incomplete API must not hide the fallback. + (navigator as any).modelContext = context; + await new Promise((resolve) => setTimeout(resolve, 30)); + expect(context.registerTool).toHaveBeenCalledTimes(10); + expect((window as any).__MF_DEVTOOLS_WEBMCP__).toMatchObject({ + status: 'registered', + tools: createDevtoolsTools().map((t) => t.name), + }); + await new Promise((resolve) => setTimeout(resolve, 15)); + expect(context.registerTool).toHaveBeenCalledTimes(10); + await stop(); + expect(context.unregisterTool).toHaveBeenCalledTimes(10); + }); + + it('registers on a document host without an unregister API', async () => { + const context = { registerTool: rs.fn() }; + (document as any).modelContext = context; + const stop = startDevtoolsWebMCP(); + await new Promise((resolve) => setTimeout(resolve, 0)); + expect(context.registerTool).toHaveBeenCalledTimes(10); + expect((window as any).__MF_DEVTOOLS_WEBMCP__.status).toBe('registered'); + await expect(stop()).resolves.toBeUndefined(); + }); + + it('reports an unavailable host and stops retrying', async () => { + rs.spyOn(console, 'warn').mockImplementation(() => {}); + const stop = startDevtoolsWebMCP(5, 2); + await new Promise((resolve) => setTimeout(resolve, 20)); + expect((window as any).__MF_DEVTOOLS_WEBMCP__).toMatchObject({ + status: 'unavailable', + attempts: 2, + }); + await stop(); + }); + + it('reports registration errors and rolls back without retrying duplicates', async () => { + rs.spyOn(console, 'warn').mockImplementation(() => {}); + const context = { + registerTool: rs.fn(() => { + throw new Error('rejected'); + }), + unregisterTool: rs.fn(), + }; + (document as any).modelContext = context; + const stop = startDevtoolsWebMCP(5, 2); + await new Promise((resolve) => setTimeout(resolve, 20)); + expect((window as any).__MF_DEVTOOLS_WEBMCP__).toMatchObject({ + status: 'error', + error: 'rejected', + }); + expect(context.registerTool).toHaveBeenCalledTimes(1); + await stop(); + }); +}); diff --git a/packages/chrome-devtools/e2e/index.ts b/packages/chrome-devtools/e2e/index.ts index 54715fcf91b..c8b4c0bc0f6 100644 --- a/packages/chrome-devtools/e2e/index.ts +++ b/packages/chrome-devtools/e2e/index.ts @@ -7,7 +7,7 @@ export const test = base.extend<{ }>({ // eslint-disable-next-line no-empty-pattern context: async ({}, use) => { - const pathToExtension = path.resolve(__dirname, '../dist'); + const pathToExtension = path.resolve(__dirname, '../dist/chrome'); const context = await chromium.launchPersistentContext('', { headless: false, devtools: false, diff --git a/packages/chrome-devtools/e2e/webmcp.spec.ts b/packages/chrome-devtools/e2e/webmcp.spec.ts new file mode 100644 index 00000000000..c25835e0c8c --- /dev/null +++ b/packages/chrome-devtools/e2e/webmcp.spec.ts @@ -0,0 +1,173 @@ +import { test, expect, chromium } from '@playwright/test'; +import { createServer } from 'node:http'; +import type { AddressInfo } from 'node:net'; +import path from 'node:path'; + +// This fixture provides the host API contract. It tests the real unpacked +// extension, not native WebMCP discovery in a particular browser product. +const fixture = `MF WebMCP fixture

Module Federation test host

`; + +for (const variant of ['chrome', 'browser']) { + test(`${variant}: page tools, startup state and popup layout`, async ({}, testInfo) => { + const server = createServer((_request, response) => { + response.setHeader('Content-Type', 'text/html'); + response.end( + variant === 'browser' + ? fixture.replace( + 'unregisterTool(name) { window.registeredTools.delete(name); }', + '', + ) + : fixture, + ); + }); + await new Promise((resolve) => + server.listen(0, '127.0.0.1', resolve), + ); + const origin = `http://127.0.0.1:${(server.address() as AddressInfo).port}`; + const extensionPath = path.resolve(__dirname, '../dist', variant); + const context = await chromium.launchPersistentContext('', { + channel: 'chromium', + headless: true, + args: [ + `--disable-extensions-except=${extensionPath}`, + `--load-extension=${extensionPath}`, + ], + viewport: { width: 800, height: 600 }, + }); + try { + const page = await context.newPage(); + await page.goto(origin); + await page.waitForFunction( + () => (window as any).registeredTools?.size === 10, + ); + expect( + await page.evaluate(() => (window as any).__MF_DEVTOOLS_WEBMCP__), + ).toMatchObject({ + status: 'registered', + tools: expect.arrayContaining(['mf_get_state', 'mf_set_hmr']), + }); + const execute = (name: string, input = {}) => + page.evaluate( + async ({ name, input }) => { + const result = await (window as any).registeredTools + .get(name) + .execute(input); + if (result.isError) throw new Error(result.content[0].text); + return JSON.parse(result.content[0].text); + }, + { name, input }, + ); + expect(await page.evaluate(() => (window as any).earlyPlugins)).toContain( + 'mf-fast-refresh-plugin', + ); + expect(await execute('mf_set_hmr', { enabled: true })).toMatchObject({ + saved: true, + reloadRequired: true, + }); + await execute('mf_set_proxy', { + rules: [{ key: 'remote', value: `${origin}/mf-manifest.json` }], + }); + await page.reload(); + await page.waitForFunction( + () => (window as any).registeredTools?.size === 10, + ); + expect( + await page.evaluate(() => (window as any).earlyConfig), + ).toMatchObject({ + enableFastRefresh: true, + overrides: { remote: `${origin}/mf-manifest.json` }, + }); + expect((await execute('mf_get_state')).config.enableFastRefresh).toBe( + true, + ); + await execute('mf_clear_proxy'); + expect((await execute('mf_get_state')).config.overrides).toEqual({}); + + if (variant === 'browser') { + const [worker] = context.serviceWorkers().length + ? context.serviceWorkers() + : [await context.waitForEvent('serviceworker')]; + const extensionId = new URL(worker.url()).host; + const popup = await context.newPage(); + await page.bringToFront(); + const errors: string[] = []; + popup.on('pageerror', (error) => errors.push(error.message)); + await popup.goto( + `chrome-extension://${extensionId}/html/main/index.html?view=popup`, + ); + await expect(popup.locator('html')).toHaveAttribute( + 'data-devtools-view', + 'popup', + ); + await expect(popup.locator('header')).toContainText( + 'MF WebMCP fixture', + ); + await expect(popup.locator('[data-set-e2e=e2eAdd]')).toBeVisible(); + // Opening the UI must not resurrect cleared rules or reset page HMR. + expect((await execute('mf_get_state')).config).toMatchObject({ + enableFastRefresh: true, + overrides: {}, + }); + await execute('mf_set_hmr', { enabled: false }); + await expect(popup.locator('.arco-switch').nth(1)).toHaveAttribute( + 'aria-checked', + 'false', + ); + for (let index = 0; index < 6; index++) + await popup.locator('[data-set-e2e=e2eAdd]').click(); + const content = popup + .locator('section') + .first() + .locator(':scope > div > div'); + expect( + await content.evaluate( + (element) => element.scrollHeight > element.clientHeight, + ), + ).toBe(true); + await content.evaluate((element) => { + element.scrollTop = element.scrollHeight; + }); + await expect(popup.locator('aside')).toBeVisible(); + await expect(popup.locator('header')).toBeVisible(); + await content.evaluate((element) => { + element.scrollTop = 0; + }); + const viewport = await popup.evaluate(() => ({ + height: document.documentElement.scrollHeight, + width: document.documentElement.scrollWidth, + })); + expect(viewport.height).toBeLessThanOrEqual(600); + expect(viewport.width).toBeLessThanOrEqual(800); + await popup.screenshot({ + path: testInfo.outputPath('popup-proxy.png'), + }); + const nav = popup.locator('aside button'); + for (let index = 0; index < 6; index++) { + await nav.nth(index).click(); + await expect(popup.locator('header')).toBeVisible(); + } + expect(errors).toEqual([]); + await popup.close(); + // Tools remain on the inspected page after the popup closes. + expect((await execute('mf_get_modules')).host).toBeTruthy(); + } + } finally { + await context.close(); + await new Promise((resolve, reject) => + server.close((error) => (error ? reject(error) : resolve())), + ); + } + }); +} diff --git a/packages/chrome-devtools/manifest.json b/packages/chrome-devtools/manifest.json index b1440aa3845..a739bc18977 100644 --- a/packages/chrome-devtools/manifest.json +++ b/packages/chrome-devtools/manifest.json @@ -48,6 +48,12 @@ ], "world": "MAIN", "run_at": "document_start" + }, + { + "matches": [""], + "js": ["static/js/webmcp.js"], + "world": "MAIN", + "run_at": "document_start" } ], "background": { diff --git a/packages/chrome-devtools/modern.config.ts b/packages/chrome-devtools/modern.config.ts index 589871c3bf5..c5044ad9a50 100644 --- a/packages/chrome-devtools/modern.config.ts +++ b/packages/chrome-devtools/modern.config.ts @@ -13,6 +13,7 @@ export default defineConfig({ }, }, output: { + distPath: { root: 'dist/.extension-build' }, disableInlineRuntimeChunk: true, disableFilenameHash: true, disableMinimize: true, @@ -33,6 +34,7 @@ export default defineConfig({ webpack: (config: Record) => { config.entry = config.entry || {}; config.entry.worker = './src/worker/index.ts'; + config.entry.webmcp = './src/utils/chrome/webmcp-entry.ts'; config.entry['fast-refresh'] = './src/utils/chrome/fast-refresh.ts'; config.entry['override-remote'] = './src/utils/chrome/override-remote.ts'; config.entry['snapshot-plugin'] = './src/utils/chrome/snapshot-plugin.ts'; diff --git a/packages/chrome-devtools/package.json b/packages/chrome-devtools/package.json index 5c3d4174c87..6f838e0a587 100644 --- a/packages/chrome-devtools/package.json +++ b/packages/chrome-devtools/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/devtools", - "version": "2.9.0", + "version": "2.9.2", "license": "MIT", "repository": { "type": "git", @@ -13,6 +13,7 @@ "reset": "npx rimraf ./**/node_modules", "dev": "modern-app dev", "build:devtool": "modern-app build && node postpack.js", + "build:devtool:popup": "pnpm run build:devtool", "build": "npm run build:lib", "build:debug": "DEBUG=true modern-app build && node postpack.js", "build:lib": "rm -rf dist && modern-module build -c modern.lib.config.ts && tsc -p tsconfig.lib.json", @@ -103,6 +104,6 @@ "prettier": "~3.3.3", "typescript": "7.0.2", "rimraf": "~6.0.1", - "vitest": "3.2.6" + "vitest": "4.1.11" } } diff --git a/packages/chrome-devtools/postpack.js b/packages/chrome-devtools/postpack.js index e351b0d7cf2..47fd0a13643 100644 --- a/packages/chrome-devtools/postpack.js +++ b/packages/chrome-devtools/postpack.js @@ -1,16 +1,29 @@ const fs = require('fs'); const path = require('path'); -const pkg = require(path.resolve(process.cwd(), 'package.json')); - -const manifest = JSON.parse( - fs.readFileSync(path.resolve(process.cwd(), 'manifest.json'), 'utf8'), +const root = process.cwd(); +const pkg = require(path.join(root, 'package.json')); +const source = path.join(root, 'dist/.extension-build'); +const original = JSON.parse( + fs.readFileSync(path.join(root, 'manifest.json'), 'utf8'), ); -pkg.version.includes('-') - ? (manifest.version = '0.0.0') - : (manifest.version = pkg.version); -fs.writeFileSync( - path.resolve(process.cwd(), 'dist/manifest.json'), - JSON.stringify(manifest, null, 2), -); +for (const variant of ['chrome', 'browser']) { + const manifest = structuredClone(original); + manifest.version = pkg.version.includes('-') ? '0.0.0' : pkg.version; + if (variant === 'browser') { + manifest.permissions = manifest.permissions.filter( + (permission) => permission !== 'sidePanel', + ); + delete manifest.side_panel; + delete manifest.devtools_page; + manifest.action.default_popup = 'html/main/index.html?view=popup'; + } + const destination = path.join(root, 'dist', variant); + fs.rmSync(destination, { recursive: true, force: true }); + fs.cpSync(source, destination, { recursive: true }); + fs.writeFileSync( + path.join(destination, 'manifest.json'), + JSON.stringify(manifest, null, 2), + ); +} diff --git a/packages/chrome-devtools/src/App.module.scss b/packages/chrome-devtools/src/App.module.scss index e8c3d4cde08..1ec3a5c5cec 100644 --- a/packages/chrome-devtools/src/App.module.scss +++ b/packages/chrome-devtools/src/App.module.scss @@ -370,3 +370,118 @@ var(--color-bg-2, #020617) 100% ); } + +// The popup has a bounded viewport. Keep navigation and the inspected-page +// header visible while long proxy forms, graphs and traces scroll below them. +:global(html[data-devtools-view='popup']) { + overflow: hidden; + + :global(body) { + margin: 0; + height: 100%; + overflow: hidden; + } + + .shell { + height: 100vh; + min-height: 0; + padding: 10px; + gap: 8px; + flex-direction: column; + background: var(--color-bg-1, #fff); + } + + .sidebar { + flex: 0 0 auto; + width: 100%; + min-width: 0; + padding: 4px; + gap: 2px; + border-radius: 8px; + box-shadow: none; + } + + .tabItem { + padding: 7px 9px; + font-size: 12px; + border-radius: 5px; + letter-spacing: 0; + text-transform: none; + } + + .tabItem:focus-visible { + outline: 2px solid var(--color-primary-6, #165dff); + outline-offset: -2px; + } + + .panel { + flex: 1 1 0; + min-height: 0; + padding: 12px; + gap: 10px; + border-radius: 8px; + box-shadow: none; + overflow: hidden; + } + + .header { + flex: 0 0 auto; + gap: 6px; + } + .logo { + font-size: 16px; + } + .subtitle, + .scopeLabel { + display: none; + } + .headerActions { + display: flex; + align-items: center; + gap: 6px; + } + .meta { + align-items: center; + gap: 8px; + flex-wrap: nowrap; + } + .scope { + min-width: 0; + flex: 1; + overflow: hidden; + } + .scope :global(.arco-tag) { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + } + .stats { + flex: 0 0 auto; + gap: 12px; + width: auto; + } + .statBlock { + padding: 0; + min-width: 0; + flex-direction: row; + align-items: baseline; + gap: 4px; + border: 0; + background: none; + box-shadow: none; + } + .statValue { + font-size: 14px; + } + .statLabel { + font-size: 10px; + text-transform: none; + } + .body { + flex: 1 1 0; + } + .content { + flex: 1 1 0; + overscroll-behavior: contain; + } +} diff --git a/packages/chrome-devtools/src/App.tsx b/packages/chrome-devtools/src/App.tsx index 767bccc85f9..f782125f702 100644 --- a/packages/chrome-devtools/src/App.tsx +++ b/packages/chrome-devtools/src/App.tsx @@ -244,6 +244,7 @@ const InnerApp = (props: RootComponentProps) => { const bootstrap = async () => { const tab = await syncActiveTab(); setInspectedTab(tab || undefined); + if (typeof tab?.id !== 'number') return; const detach = await getGlobalModuleInfo((info) => applyModuleUpdate(info), ); @@ -380,6 +381,9 @@ const InnerApp = (props: RootComponentProps) => { }, [activePanel, applyModuleUpdate]); const renderContent = () => { + if (typeof inspectedTab?.id !== 'number') { + return ; + } switch (activePanel) { case 'moduleInfo': return ( @@ -420,7 +424,7 @@ const InnerApp = (props: RootComponentProps) => { return ( ); diff --git a/packages/chrome-devtools/src/component/Form/index.module.scss b/packages/chrome-devtools/src/component/Form/index.module.scss index cb834c65a11..cfe8da8936b 100644 --- a/packages/chrome-devtools/src/component/Form/index.module.scss +++ b/packages/chrome-devtools/src/component/Form/index.module.scss @@ -225,3 +225,45 @@ justify-content: center; display: flex; } + +:global(html[data-devtools-view='popup']) { + .wrapper, + .rules { + gap: 10px; + } + .sectionHeader { + padding: 8px; + gap: 8px; + flex-wrap: wrap; + } + .titleRow { + font-size: 13px; + flex-wrap: wrap; + gap: 6px; + } + .subtitle { + display: none; + } + .ruleCard { + padding: 10px; + gap: 6px; + border-radius: 6px; + box-shadow: none; + } + .inputs { + gap: 8px; + } + .field { + min-width: 0; + margin-bottom: 0; + } + .field :global(.arco-select-view) { + min-height: 32px; + border-radius: 5px; + padding: 2px 8px; + } + .emptyWrapper { + padding: 16px; + border-radius: 6px; + } +} diff --git a/packages/chrome-devtools/src/component/Layout/index.module.scss b/packages/chrome-devtools/src/component/Layout/index.module.scss index a936b6adce5..cd41c796cd9 100644 --- a/packages/chrome-devtools/src/component/Layout/index.module.scss +++ b/packages/chrome-devtools/src/component/Layout/index.module.scss @@ -66,3 +66,35 @@ border: 1px solid rgba(228, 228, 231, 0.5); background: var(--color-bg-1, rgba(255, 255, 255, 0.9)); } + +:global(html[data-devtools-view='popup']) { + .wrapper { + gap: 10px; + } + .summaryCard { + padding: 10px; + min-height: 0; + gap: 6px; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + } + .summaryHeader { + flex: 1 1 100%; + } + .summaryTitle { + font-size: 13px; + } + .summaryHint { + display: none; + } + .chip, + .moreChip, + .chipPlaceholder { + padding: 3px 7px; + border-radius: 4px; + } + .formSection { + padding: 10px; + } +} diff --git a/packages/chrome-devtools/src/component/Layout/index.tsx b/packages/chrome-devtools/src/component/Layout/index.tsx index 9f4bc41dc38..d6d788133e9 100644 --- a/packages/chrome-devtools/src/component/Layout/index.tsx +++ b/packages/chrome-devtools/src/component/Layout/index.tsx @@ -214,7 +214,8 @@ const Layout = ( if (hadPreviousEffective) { await removeStorage(MODULE_DEVTOOL_IDENTIFIER); await removeStorage(BROWSER_ENV_KEY); - await removeStorageKey(__FEDERATION_DEVTOOLS__, 'overrides'); + await mergeStorage(__FEDERATION_DEVTOOLS__, 'overrides', {}); + await mergeStorage(__FEDERATION_DEVTOOLS__, 'proxyRules', rawRules); await injectScript(reloadPage, false); setCondition(statusInfo.noProxy); lastEffectiveRulesRef.current = ''; @@ -266,6 +267,8 @@ const Layout = ( await setStorage(BROWSER_ENV_KEY); await mergeStorage(__FEDERATION_DEVTOOLS__, 'overrides', overrides); + await mergeStorage(__FEDERATION_DEVTOOLS__, 'proxyRules', rawRules); + await mergeStorage(__FEDERATION_DEVTOOLS__, ENABLE_CLIP, enableClip); await injectScript(reloadPage, false); window.__FEDERATION__.moduleInfo = moduleInfo; @@ -312,6 +315,10 @@ const Layout = ( if (typeof overridesState === 'string' && overridesState) { const parsedState = JSON.parse(overridesState); const overrides = parsedState?.overrides; + setEnableClip(Boolean(parsedState?.[ENABLE_CLIP])); + setEnalbeHMR( + parsedState?.[__ENABLE_FAST_REFRESH__] ? 'enable' : 'disable', + ); if (isObject(overrides)) { const overrideRules = Object.entries(overrides) .map(([key, value]) => ({ @@ -326,13 +333,13 @@ const Layout = ( const filteredRules = producer.length ? overrideRules.filter((rule) => producer.includes(rule.key)) : overrideRules; - if (filteredRules.length) { - storeData = { - ...storeData, - [proxyFormField]: filteredRules, - }; - overridesApplied = true; - } + storeData = { + ...storeData, + [proxyFormField]: Array.isArray(parsedState.proxyRules) + ? parsedState.proxyRules + : filteredRules, + }; + overridesApplied = true; } } } catch (error) { @@ -375,16 +382,27 @@ const Layout = ( return () => { cancelled = true; }; - }, [moduleInfo, producerKey, form]); + }, [moduleInfo, producerKey, form, tabId]); useEffect(() => { - chrome.storage.sync.get([ENABLEHMR]).then((data) => { - const enable = data[ENABLEHMR]; - if (typeof enable === 'boolean') { - onHMRChange(enable); + let cancelled = false; + getStorageValue(__FEDERATION_DEVTOOLS__).then((raw) => { + try { + const config = typeof raw === 'string' ? JSON.parse(raw) : {}; + if (!cancelled) { + setEnalbeHMR( + config?.[__ENABLE_FAST_REFRESH__] ? 'enable' : 'disable', + ); + setEnableClip(Boolean(config?.[ENABLE_CLIP])); + } + } catch { + /* Keep disabled defaults for malformed page storage. */ } }); - }, []); + return () => { + cancelled = true; + }; + }, [tabId]); useEffect(() => { validateForm(form); @@ -433,21 +451,23 @@ const Layout = ( run(formData); }; - const onHMRChange = (on: boolean) => { + const onHMRChange = async (on: boolean) => { setEnalbeHMR(on ? 'enable' : 'disable'); - chrome.storage.sync.set({ + await chrome.storage.sync.set({ [ENABLEHMR]: on, }); if (on) { - mergeStorage(__FEDERATION_DEVTOOLS__, __ENABLE_FAST_REFRESH__, on); + await mergeStorage(__FEDERATION_DEVTOOLS__, __ENABLE_FAST_REFRESH__, on); } else { - removeStorageKey(__FEDERATION_DEVTOOLS__, __ENABLE_FAST_REFRESH__); - removeStorageKey(__FEDERATION_DEVTOOLS__, __EAGER_SHARE__); + await removeStorageKey(__FEDERATION_DEVTOOLS__, __ENABLE_FAST_REFRESH__); + await removeStorageKey(__FEDERATION_DEVTOOLS__, __EAGER_SHARE__); } injectScript(reloadPage, false); }; - const onClipChange = (on: boolean) => { + const onClipChange = async (on: boolean) => { + await mergeStorage(__FEDERATION_DEVTOOLS__, ENABLE_CLIP, on); + lastFormSignatureRef.current = ''; setEnableClip(on); try { if (tabId) { diff --git a/packages/chrome-devtools/src/index.tsx b/packages/chrome-devtools/src/index.tsx index b7c88f8eef2..4a0f4306791 100644 --- a/packages/chrome-devtools/src/index.tsx +++ b/packages/chrome-devtools/src/index.tsx @@ -1,6 +1,12 @@ import { createRoot } from 'react-dom/client'; import App from './App'; +if (new URLSearchParams(window.location.search).get('view') === 'popup') { + document.documentElement.dataset.devtoolsView = 'popup'; + document.documentElement.style.width = '800px'; + document.documentElement.style.height = '600px'; +} + (async () => { if (process.env.NODE_ENV === 'development') { await import('../mock'); diff --git a/packages/chrome-devtools/src/utils/chrome/fast-refresh.ts b/packages/chrome-devtools/src/utils/chrome/fast-refresh.ts index 090d1accc48..0e5392102c7 100644 --- a/packages/chrome-devtools/src/utils/chrome/fast-refresh.ts +++ b/packages/chrome-devtools/src/utils/chrome/fast-refresh.ts @@ -1,5 +1,5 @@ import type { ModuleFederationRuntimePlugin } from '@module-federation/runtime'; -import { getUnpkgUrl } from '../index'; +import { getUnpkgUrl, REACT_19_DEV_VERSION } from '../index'; import { definePropertyGlobalVal } from '../sdk'; import { __FEDERATION_DEVTOOLS__, @@ -253,6 +253,27 @@ const getDevtoolsMessage = () => { }; const devtoolsMessage = getDevtoolsMessage(); +// ReactDOM registers its renderer before the remote's Refresh runtime arrives. +// Preserve a real DevTools hook; otherwise retain renderers for Refresh to find. +if ( + devtoolsMessage?.[__ENABLE_FAST_REFRESH__] && + !(window as any).__REACT_DEVTOOLS_GLOBAL_HOOK__ +) { + let nextId = 0; + const renderers = new Map(); + (window as any).__REACT_DEVTOOLS_GLOBAL_HOOK__ = { + supportsFiber: true, + renderers, + inject(renderer: unknown) { + const id = nextId++; + renderers.set(id, renderer); + return id; + }, + onScheduleFiberRoot() {}, + onCommitFiberRoot() {}, + onCommitFiberUnmount() {}, + }; +} const eagerShareInfo = getEagerShareInfo(devtoolsMessage?.[__EAGER_SHARE__]); if (devtoolsMessage?.[__ENABLE_FAST_REFRESH__] && eagerShareInfo) { const { version, scopes } = eagerShareInfo; @@ -265,6 +286,53 @@ if (devtoolsMessage?.[__ENABLE_FAST_REFRESH__] && eagerShareInfo) { } const fastRefreshPlugin = (): ModuleFederationRuntimePlugin => { + // One pair per share scope, including react-dom/client. ReactDOM must be able + // to load React itself when the client entry is requested before React.get(). + const react19Pending = new Map>(); + const loadReact19 = ( + pkg: SupportPkg, + scopes: string[], + sync = false, + ): any => { + const existing = getScopeGlobal(pkg, scopes); + if (existing?.version === REACT_19_DEV_VERSION) { + return setScopeGlobals(pkg, scopes, existing); + } + const save = (library: any) => { + // A synchronous eager load can win while an async request is in flight. + const cached = getScopeGlobal(pkg, scopes); + if (cached?.version === REACT_19_DEV_VERSION) + return setScopeGlobals(pkg, scopes, cached); + if (library?.version !== REACT_19_DEV_VERSION) + throw new Error(`Expected development ${pkg}@${REACT_19_DEV_VERSION}.`); + if ( + pkg === 'react' && + (typeof library.createElement !== 'function' || + !Object.isFrozen(library.createElement('div'))) + ) + throw new Error('React provider is not a development build.'); + return setScopeGlobals(pkg, scopes, library); + }; + if (sync) { + if (pkg === 'react-dom') loadReact19('react', scopes, true); + return save(loadUmdModuleSync(pkg, REACT_19_DEV_VERSION, scopes)); + } + const key = `${pkg}:${JSON.stringify([...scopes].sort())}`; + let pending = react19Pending.get(key); + if (!pending) { + pending = (async () => { + if (pkg === 'react-dom') await loadReact19('react', scopes); + // Recheck after awaiting React: another request may have filled this scope. + const cached = getScopeGlobal(pkg, scopes); + if (cached?.version === REACT_19_DEV_VERSION) + return setScopeGlobals(pkg, scopes, cached); + return save(await loadUmdModule(pkg, REACT_19_DEV_VERSION, scopes)); + })(); + react19Pending.set(key, pending); + void pending.catch(() => react19Pending.delete(key)); + } + return pending; + }; let orderResolve: (value?: unknown) => void; const orderPromise = new Promise((resolve) => { orderResolve = resolve; @@ -274,10 +342,16 @@ const fastRefreshPlugin = (): ModuleFederationRuntimePlugin => { name: 'mf-fast-refresh-plugin', beforeRegisterShare(args: BeforeRegisterShareArgs) { const { pkgName, shared } = args; - if (!SUPPORT_PKGS.includes(pkgName)) { + const isReact19 = /^19\./.test(shared.version); + if ( + !SUPPORT_PKGS.includes(pkgName) && + !(isReact19 && pkgName === 'react-dom/client') + ) { return args; } - const supportPkgName = pkgName as SupportPkg; + const supportPkgName = ( + pkgName === 'react-dom/client' ? 'react-dom' : pkgName + ) as SupportPkg; const shareScopes = getShareScopes(shared.scope); let enableFastRefresh = false; @@ -299,6 +373,29 @@ const fastRefreshPlugin = (): ModuleFederationRuntimePlugin => { return args; } + if (isReact19) { + shared.version = REACT_19_DEV_VERSION; + shared.get = async () => { + const library = await loadReact19(supportPkgName, shareScopes); + return () => library; + }; + if (shared.shareConfig?.eager || shared.lib) { + const library = loadReact19(supportPkgName, shareScopes, true); + shared.lib = () => library; + updateEagerShareInfo( + devtoolsMessage, + pkgName, + REACT_19_DEV_VERSION, + shareScopes, + ); + localStorage.setItem( + __FEDERATION_DEVTOOLS__, + JSON.stringify(devtoolsMessage), + ); + } + return args; + } + if (shared.shareConfig?.eager || shared.lib) { if (!devtoolsMessage?.[__EAGER_SHARE__]) { const eagerShareInfo = updateEagerShareInfo( diff --git a/packages/chrome-devtools/src/utils/chrome/index.ts b/packages/chrome-devtools/src/utils/chrome/index.ts index d756d9edb2d..eda578c4494 100644 --- a/packages/chrome-devtools/src/utils/chrome/index.ts +++ b/packages/chrome-devtools/src/utils/chrome/index.ts @@ -147,7 +147,12 @@ export const getGlobalModuleInfo = async ( } await sleep(300); - const listener = (message: { origin: string; data: any }) => { + const listener = ( + message: { origin: string; data: any }, + sender?: chrome.runtime.MessageSender, + ) => { + if (sender?.tab?.id !== undefined && sender.tab.id !== getCurrentTabId()) + return; const { data } = message; if (!isModuleInfoSyncMessage(data) || data?.appInfos) { diff --git a/packages/chrome-devtools/src/utils/chrome/observability.ts b/packages/chrome-devtools/src/utils/chrome/observability.ts index 9f5b18c86dc..60568281ee0 100644 --- a/packages/chrome-devtools/src/utils/chrome/observability.ts +++ b/packages/chrome-devtools/src/utils/chrome/observability.ts @@ -146,7 +146,7 @@ const reloadPage = () => { globalThis.location?.reload(); }; -const readSnapshotFromPage = ( +export const readSnapshotFromPage = ( storageKey: string, context?: { chromeScope?: string; diff --git a/packages/chrome-devtools/src/utils/chrome/webmcp-entry.ts b/packages/chrome-devtools/src/utils/chrome/webmcp-entry.ts new file mode 100644 index 00000000000..93ce5f27db0 --- /dev/null +++ b/packages/chrome-devtools/src/utils/chrome/webmcp-entry.ts @@ -0,0 +1,3 @@ +import { startDevtoolsWebMCP } from './webmcp'; + +startDevtoolsWebMCP(); diff --git a/packages/chrome-devtools/src/utils/chrome/webmcp.ts b/packages/chrome-devtools/src/utils/chrome/webmcp.ts new file mode 100644 index 00000000000..17dfdd3295f --- /dev/null +++ b/packages/chrome-devtools/src/utils/chrome/webmcp.ts @@ -0,0 +1,504 @@ +import { MODULE_DEVTOOL_IDENTIFIER } from '@module-federation/sdk'; +import { + BROWSER_ENV_KEY, + __FEDERATION_DEVTOOLS__, + __ENABLE_FAST_REFRESH__, + __EAGER_SHARE__, +} from '../../template/constant'; +import { sanitizePostMessagePayload } from './safe-post-message'; +import { normalizeObservabilityDevtoolsConfig } from './observability-shared'; +import { + OBSERVABILITY_DEVTOOLS_STORAGE_KEY, + OBSERVABILITY_DEVTOOLS_SOURCE, +} from './messages'; +import { readSnapshotFromPage } from './observability'; + +const coreModule = require('../../vendor/basic-proxy-core.js'); +const core = coreModule.default || coreModule; + +type Rule = { key: string; value: string; checked: boolean }; +type Config = Record & { + overrides?: Record; + proxyRules?: Rule[]; + enableClip?: boolean; +}; +type Input = Record; +export interface DevtoolsTool { + name: string; + description: string; + inputSchema: Record; + annotations: { readOnlyHint: boolean }; + execute: (input: Input) => Promise<{ + content: Array<{ type: 'text'; text: string }>; + isError?: boolean; + }>; +} +export interface ModelContext { + registerTool: (tool: DevtoolsTool) => void | Promise; + unregisterTool?: (name: string) => void | Promise; +} + +const isRecord = (value: unknown): value is Input => + value !== null && typeof value === 'object' && !Array.isArray(value); + +const readConfig = (): Config => { + const raw = localStorage.getItem(__FEDERATION_DEVTOOLS__); + const value: unknown = raw ? JSON.parse(raw) : {}; + if (!isRecord(value)) + throw new Error('Invalid devtools configuration in page storage.'); + return value; +}; + +// All page storage writes finish before returning reloadRequired. Roll back if +// storage quota/access errors would otherwise leave a partially applied proxy. +const persist = (values: Record) => { + const previous = Object.fromEntries( + Object.keys(values).map((key) => [key, localStorage.getItem(key)]), + ); + try { + for (const [key, value] of Object.entries(values)) { + if (value === null) localStorage.removeItem(key); + else localStorage.setItem(key, value); + } + } catch (error) { + for (const [key, value] of Object.entries(previous)) { + try { + if (value === null) localStorage.removeItem(key); + else localStorage.setItem(key, value); + } catch { + /* Preserve the original storage error. */ + } + } + throw error; + } + // Reuse the existing read-only page-to-extension snapshot channel so an open + // popup/side panel sees tool changes without granting page code extension APIs. + try { + window.postMessage( + sanitizePostMessagePayload({ + moduleInfo: modules(), + share: federation()?.__SHARE__ || {}, + }), + location.origin, + ); + } catch { + /* UI delivery is best effort; persisted state remains authoritative. */ + } +}; + +const federation = () => window.__FEDERATION__ || (window as any).__VMOK__; +const modules = () => federation()?.moduleInfo || {}; +const reloadResult = () => ({ + saved: true, + reloadRequired: true, + instruction: + 'Reload this page using browser navigation, then call mf_get_state to verify. No navigation has been started by this tool.', +}); +const boolean = (value: unknown, name: string): boolean => { + if (typeof value !== 'boolean') throw new Error(`${name} must be a boolean.`); + return value; +}; +const validateRules = (value: unknown): Rule[] => { + if (!Array.isArray(value) || value.length > 100) + throw new Error('rules must be an array of at most 100 rules.'); + const names = new Set(); + return value.map((rule) => { + if ( + !isRecord(rule) || + typeof rule.key !== 'string' || + !rule.key.trim() || + typeof rule.value !== 'string' || + !rule.value.trim() + ) + throw new Error('Each rule needs a nonempty key and value.'); + const key = rule.key.trim(); + const destination = rule.value.trim(); + if ( + key + .split(':') + .some((part) => + ['__proto__', 'constructor', 'prototype'].includes(part), + ) || + names.has(key) + ) + throw new Error(`Invalid or duplicate remote key: ${key}`); + names.add(key); + // The core supports HTTP(S) manifest/entry URLs and registry versions/tags. + if (/^(?:[a-z][a-z\d+.-]*:|\/\/)/i.test(destination)) { + const url = new URL(destination, location.href); + if ( + !['http:', 'https:'].includes(url.protocol) || + url.username || + url.password + ) + throw new Error( + 'Remote URLs must use HTTP(S), without embedded credentials.', + ); + } else if (!/^[\w.*^~<>=|+ -]+$/.test(destination)) { + throw new Error('Use an absolute HTTP(S) URL or a registry version/tag.'); + } + return { + key, + value: destination, + checked: + rule.checked === undefined ? true : boolean(rule.checked, 'checked'), + }; + }); +}; +const writeProxy = (rules: Rule[], clip: boolean) => { + const active = rules.filter((rule) => rule.checked); + const snapshot = core.getModuleInfo(active, modules()); + if (clip) { + for (const entry of Object.values(snapshot.moduleInfo)) { + if (!isRecord(entry)) continue; + if (entry.modules) entry.modules = []; + if (entry.shared) entry.shared = []; + } + } + persist({ + [MODULE_DEVTOOL_IDENTIFIER]: active.length + ? JSON.stringify(snapshot.moduleInfo) + : null, + [BROWSER_ENV_KEY]: active.length ? 'true' : null, + [__FEDERATION_DEVTOOLS__]: JSON.stringify({ + ...readConfig(), + overrides: snapshot.overrides, + proxyRules: rules, + enableClip: clip, + }), + }); + return { ...reloadResult(), rules, clip }; +}; + +const state = () => ({ + url: location.href, + moduleInfo: modules(), + shared: federation()?.__SHARE__ || {}, + registeredPlugins: (federation()?.__GLOBAL_PLUGIN__ || []).map( + (plugin: any) => plugin.name, + ), + config: readConfig(), + observability: readSnapshotFromPage(OBSERVABILITY_DEVTOOLS_STORAGE_KEY), +}); + +const schema = (properties: Input = {}, required: string[] = []) => ({ + type: 'object', + properties, + required, + additionalProperties: false, +}); +const boolSchema = { type: 'boolean' }; +const ruleSchema = schema( + { + key: { type: 'string', minLength: 1 }, + value: { type: 'string', minLength: 1 }, + checked: boolSchema, + }, + ['key', 'value'], +); + +export const createDevtoolsTools = (): DevtoolsTool[] => { + const tool = ( + name: string, + description: string, + inputSchema: ReturnType, + readOnly: boolean, + execute: (input: Input) => unknown, + ): DevtoolsTool => ({ + name, + description, + inputSchema, + annotations: { readOnlyHint: readOnly }, + execute: async (input = {}) => { + try { + if ( + !isRecord(input) || + Object.keys(input).some( + (key) => !Object.hasOwn(inputSchema.properties, key), + ) + ) + throw new Error('Unexpected tool arguments.'); + const result = await execute(input); + return { + content: [ + { + type: 'text', + text: JSON.stringify(sanitizePostMessagePayload(result)), + }, + ], + }; + } catch (error) { + return { + isError: true, + content: [ + { + type: 'text', + text: error instanceof Error ? error.message : String(error), + }, + ], + }; + } + }, + }); + return [ + tool( + 'mf_get_state', + 'Read Module Federation runtime, proxy/HMR settings and loading reports for this page. Saved settings may require a page reload before taking effect.', + schema(), + true, + state, + ), + tool( + 'mf_get_modules', + 'Read all module snapshots, or one snapshot by its exact module ID.', + schema({ moduleId: { type: 'string' } }), + true, + ({ moduleId }) => { + if (moduleId === undefined) return modules(); + if (typeof moduleId !== 'string' || !Object.hasOwn(modules(), moduleId)) + throw new Error( + 'Unknown module ID. Call mf_get_modules without arguments to list IDs.', + ); + return modules()[moduleId]; + }, + ), + tool( + 'mf_get_dependencies', + 'Read dependency graph data: module snapshots, consumers and remote IDs.', + schema(), + true, + () => ({ modules: modules(), ...core.separateType(modules()) }), + ), + tool( + 'mf_get_shared', + 'Read shared dependency scopes, versions and loaded state. Functions are returned as placeholders and are never invoked.', + schema(), + true, + () => federation()?.__SHARE__ || {}, + ), + tool( + 'mf_set_proxy', + 'Replace all proxy rules on this page. key is a remote name/ID; value is an HTTP(S) manifest/entry URL or registry version. checked=false disables a rule. clip removes module/shared snapshot lists. Returns reloadRequired; CSP/CORS still apply.', + schema( + { + rules: { type: 'array', maxItems: 100, items: ruleSchema }, + clip: boolSchema, + }, + ['rules'], + ), + false, + ({ rules, clip }) => + writeProxy( + validateRules(rules), + clip === undefined + ? Boolean(readConfig().enableClip) + : boolean(clip, 'clip'), + ), + ), + tool( + 'mf_clear_proxy', + 'Clear all proxy rules and injected snapshot data for this page, preserving HMR and tracing settings. Reload afterwards.', + schema(), + false, + () => writeProxy([], Boolean(readConfig().enableClip)), + ), + tool( + 'mf_set_hmr', + 'Enable or disable the extension React Fast Refresh/shared development React replacement for this page. Save first, then reload so document_start scripts apply it before React loads. Eager shares may require an additional automatic reload.', + schema({ enabled: boolSchema }, ['enabled']), + false, + ({ enabled }) => { + const next = { + ...readConfig(), + [__ENABLE_FAST_REFRESH__]: boolean(enabled, 'enabled'), + }; + if (!enabled) delete next[__EAGER_SHARE__]; + persist({ [__FEDERATION_DEVTOOLS__]: JSON.stringify(next) }); + return reloadResult(); + }, + ), + tool( + 'mf_configure_loading_trace', + 'Configure the extension Loading Trace plugin on this page. enabled=false disables it on next reload. Does not disable user-installed observability plugins.', + schema( + { + enabled: boolSchema, + level: { type: 'string', enum: ['error', 'summary', 'verbose'] }, + maxEvents: { type: 'integer', minimum: 10, maximum: 1000 }, + console: boolSchema, + browserEnabled: boolSchema, + scope: { type: 'string', minLength: 1 }, + mode: { type: 'string', enum: ['development', 'production'] }, + printStart: boolSchema, + }, + ['enabled'], + ), + false, + (input) => { + const enabled = boolean(input.enabled, 'enabled'); + for (const key of ['console', 'browserEnabled', 'printStart']) + if (input[key] !== undefined) boolean(input[key], key); + if ( + input.level !== undefined && + !['error', 'summary', 'verbose'].includes(String(input.level)) + ) + throw new Error('Invalid trace level.'); + if ( + input.mode !== undefined && + !['development', 'production'].includes(String(input.mode)) + ) + throw new Error('Invalid trace mode.'); + if ( + input.scope !== undefined && + (typeof input.scope !== 'string' || !input.scope.trim()) + ) + throw new Error('Invalid trace scope.'); + if ( + input.maxEvents !== undefined && + (typeof input.maxEvents !== 'number' || + !Number.isInteger(input.maxEvents) || + input.maxEvents < 10 || + input.maxEvents > 1000) + ) + throw new Error('maxEvents must be an integer between 10 and 1000.'); + const raw = localStorage.getItem(OBSERVABILITY_DEVTOOLS_STORAGE_KEY); + const old = normalizeObservabilityDevtoolsConfig( + raw ? JSON.parse(raw) : undefined, + ); + const config = normalizeObservabilityDevtoolsConfig({ + ...old, + ...input, + enabled, + browser: { + enabled: input.browserEnabled ?? old.browser.enabled, + scope: input.scope ?? old.browser.scope, + mode: input.mode ?? old.browser.mode, + }, + trace: { printStart: input.printStart ?? old.trace.printStart }, + } as any); + persist({ + [OBSERVABILITY_DEVTOOLS_STORAGE_KEY]: enabled + ? JSON.stringify(config) + : null, + }); + window.postMessage( + { + source: OBSERVABILITY_DEVTOOLS_SOURCE, + kind: 'config-saved', + config, + }, + location.origin, + ); + return { ...reloadResult(), config }; + }, + ), + tool( + 'mf_get_loading_reports', + 'Read current loading reports and trace configuration from all available observability scopes.', + schema(), + true, + () => readSnapshotFromPage(OBSERVABILITY_DEVTOOLS_STORAGE_KEY), + ), + tool( + 'mf_export_snapshot', + 'Export a JSON snapshot of modules, shared dependencies, proxy/HMR configuration and loading reports. Returns data without initiating a download.', + schema(), + true, + () => ({ exportedAt: new Date().toISOString(), ...state() }), + ), + ]; +}; + +export const getModelContext = (): ModelContext | undefined => + [(document as any).modelContext, (navigator as any).modelContext].find( + (context) => typeof context?.registerTool === 'function', + ); + +// No polyfill: a JS shim cannot make a browser expose tools to an agent. +// Support current document.modelContext and earlier navigator.modelContext hosts. +export const registerDevtoolsWebMCP = async ( + context: ModelContext | undefined = getModelContext(), +): Promise<() => Promise> => { + if (typeof context?.registerTool !== 'function') return async () => {}; + const registered: string[] = []; + const cleanup = async () => { + for (const name of registered.splice(0)) { + try { + if (typeof context.unregisterTool === 'function') + await context.unregisterTool(name); + } catch { + /* Host may already have disposed the document. */ + } + } + }; + try { + for (const tool of createDevtoolsTools()) { + await context.registerTool(tool); + registered.push(tool.name); + } + } catch (error) { + await cleanup(); + throw error; + } + return cleanup; +}; + +// Start immediately, but allow an asynchronously installed host API to arrive. +// The diagnostic contains no page data and can be inspected from the console. +export const startDevtoolsWebMCP = (retryMs = 250, maxAttempts = 120) => { + const diagnostic = { + status: 'waiting' as + | 'waiting' + | 'registering' + | 'registered' + | 'unavailable' + | 'error', + attempts: 0, + tools: [] as string[], + error: undefined as string | undefined, + }; + (window as any).__MF_DEVTOOLS_WEBMCP__ = diagnostic; + let timer: ReturnType | undefined; + let stopped = false; + let cleanup: (() => Promise) | undefined; + const attempt = async () => { + if (stopped) return; + diagnostic.attempts++; + const context = getModelContext(); + if (!context) { + if (diagnostic.attempts < maxAttempts) { + timer = setTimeout(() => void attempt(), retryMs); + } else { + diagnostic.status = 'unavailable'; + console.warn( + '[Module Federation Devtools] WebMCP host API unavailable', + diagnostic, + ); + } + return; + } + diagnostic.status = 'registering'; + try { + cleanup = await registerDevtoolsWebMCP(context); + if (stopped) { + await cleanup(); + return; + } + diagnostic.tools = createDevtoolsTools().map(({ name }) => name); + diagnostic.status = 'registered'; + } catch (error) { + diagnostic.status = 'error'; + diagnostic.error = error instanceof Error ? error.message : String(error); + console.warn( + '[Module Federation Devtools] WebMCP registration failed', + error, + ); + } + }; + void attempt(); + return async () => { + stopped = true; + clearTimeout(timer); + await cleanup?.(); + }; +}; diff --git a/packages/chrome-devtools/src/utils/sdk/index.ts b/packages/chrome-devtools/src/utils/sdk/index.ts index d039146e91d..11031102c1a 100644 --- a/packages/chrome-devtools/src/utils/sdk/index.ts +++ b/packages/chrome-devtools/src/utils/sdk/index.ts @@ -45,7 +45,16 @@ export const reloadPage = () => { export const validateCustom = (schema: string) => schema?.endsWith('.json'); +export const REACT_19_DEV_VERSION = '19.2.4'; + export const getUnpkgUrl = (pkg: string, version: string) => { + if ( + /^19\./.test(version) && + ['react', 'react-dom', 'react-dom/client'].includes(pkg) + ) { + const name = pkg === 'react' ? 'react' : 'react-dom'; + return `https://unpkg.com/umd-react@${REACT_19_DEV_VERSION}/dist/${name}.development.js`; + } if (pkg === 'react') { return `https://unpkg.com/react@${version}/umd/react.development.js`; } else if (pkg === 'react-dom') { diff --git a/packages/chrome-devtools/src/worker/index.ts b/packages/chrome-devtools/src/worker/index.ts index c4df5f39e21..fc0d4504b9d 100644 --- a/packages/chrome-devtools/src/worker/index.ts +++ b/packages/chrome-devtools/src/worker/index.ts @@ -5,7 +5,10 @@ import { const SIDE_PANEL_PATH = 'html/main/index.html'; -const getSidePanel = () => (chrome as any)?.sidePanel; +const getSidePanel = () => + chrome.runtime.getManifest().side_panel + ? (chrome as any)?.sidePanel + : undefined; const resolveTabId = async (tabId?: number) => { if (typeof tabId === 'number') { diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index ef145410787..c7bd7399f6e 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,22 @@ # @module-federation/cli +## 2.9.2 + +### Patch Changes + +- Updated dependencies [000f3fa] +- Updated dependencies [7f0ac8b] + - @module-federation/dts-plugin@2.9.2 + - @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- Updated dependencies [796d6ad] + - @module-federation/dts-plugin@2.9.1 + - @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index b6e860eebdb..0944cc4c14b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/cli", - "version": "2.9.0", + "version": "2.9.2", "type": "commonjs", "description": "Module Federation CLI", "homepage": "https://module-federation.io", diff --git a/packages/create-module-federation/CHANGELOG.md b/packages/create-module-federation/CHANGELOG.md index db7b371d8a3..55883a6e722 100644 --- a/packages/create-module-federation/CHANGELOG.md +++ b/packages/create-module-federation/CHANGELOG.md @@ -1,5 +1,9 @@ # create-module-federation +## 2.9.2 + +## 2.9.1 + ## 2.9.0 ## 2.8.2 diff --git a/packages/create-module-federation/package.json b/packages/create-module-federation/package.json index c7ee8fdb7cd..0b62e74afc5 100644 --- a/packages/create-module-federation/package.json +++ b/packages/create-module-federation/package.json @@ -3,7 +3,7 @@ "description": "Create a new Module Federation project", "public": true, "sideEffects": false, - "version": "2.9.0", + "version": "2.9.2", "license": "MIT", "repository": { "type": "git", diff --git a/packages/dts-plugin/CHANGELOG.md b/packages/dts-plugin/CHANGELOG.md index a61e824a6c1..444d0c20fc5 100644 --- a/packages/dts-plugin/CHANGELOG.md +++ b/packages/dts-plugin/CHANGELOG.md @@ -1,5 +1,26 @@ # @module-federation/dts-plugin +## 2.9.2 + +### Patch Changes + +- 000f3fa: Addresses CVE-2026-76845 by upgrading `adm-zip` to `0.6.1`. +- 7f0ac8b: Upgrade Undici to 7.29.1 to include the latest 7.x security fixes while preserving Node 20 compatibility. + - @module-federation/sdk@2.9.2 + - @module-federation/managers@2.9.2 + - @module-federation/third-party-dts-extractor@2.9.2 + - @module-federation/error-codes@2.9.2 + +## 2.9.1 + +### Patch Changes + +- 796d6ad: Update ws to 8.21.3 to address CVE-2026-62389. + - @module-federation/sdk@2.9.1 + - @module-federation/managers@2.9.1 + - @module-federation/third-party-dts-extractor@2.9.1 + - @module-federation/error-codes@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/dts-plugin/package.json b/packages/dts-plugin/package.json index afe503a6f7a..b4ec70f2513 100644 --- a/packages/dts-plugin/package.json +++ b/packages/dts-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/dts-plugin", - "version": "2.9.0", + "version": "2.9.2", "author": "hanric ", "main": "./dist/index.js", "module": "./dist/esm/index.mjs", @@ -69,9 +69,9 @@ "@module-federation/managers": "workspace:*", "@module-federation/sdk": "workspace:*", "@module-federation/third-party-dts-extractor": "workspace:*", - "adm-zip": "0.6.0", + "adm-zip": "^0.6.1", "isomorphic-ws": "5.0.0", - "undici": "7.29.0", + "undici": "7.29.1", "ws": "8.21.3" }, "devDependencies": { diff --git a/packages/enhanced/CHANGELOG.md b/packages/enhanced/CHANGELOG.md index ba128b912fe..efcbb57ab30 100644 --- a/packages/enhanced/CHANGELOG.md +++ b/packages/enhanced/CHANGELOG.md @@ -1,5 +1,43 @@ # @module-federation/enhanced +## 2.9.2 + +### Patch Changes + +- 412f62e: Restore BUILD-001 logging and diagnostic context when an expose cannot resolve. Webpack still reports the build error, and `container.get()` rejects the missing expose. +- c130946: An exposed module that fails to resolve no longer exits the Node process during code generation. The build finishes with webpack's "Module not found" error in `compilation.errors`, and the container's `get()` for that expose throws `MODULE_NOT_FOUND`, as in upstream webpack. Watch mode and dev servers keep running. +- 923b55d: Fix the tree-shaking shared entry build finishing its `make` phase before the shared entry module tree was built. Large shared packages with a filesystem cache could crash in `createModuleAssets` or emit a fallback bundle with missing modules, and an entry error was thrown instead of reported. +- Updated dependencies [000f3fa] +- Updated dependencies [7f0ac8b] + - @module-federation/dts-plugin@2.9.2 + - @module-federation/cli@2.9.2 + - @module-federation/manifest@2.9.2 + - @module-federation/rspack@2.9.2 + - @module-federation/runtime-tools@2.9.2 + - @module-federation/webpack-bundler-runtime@2.9.2 + - @module-federation/inject-external-runtime-core-plugin@2.9.2 + - @module-federation/sdk@2.9.2 + - @module-federation/managers@2.9.2 + - @module-federation/bridge-react-webpack-plugin@2.9.2 + - @module-federation/error-codes@2.9.2 + +## 2.9.1 + +### Patch Changes + +- Updated dependencies [796d6ad] + - @module-federation/dts-plugin@2.9.1 + - @module-federation/cli@2.9.1 + - @module-federation/manifest@2.9.1 + - @module-federation/rspack@2.9.1 + - @module-federation/runtime-tools@2.9.1 + - @module-federation/webpack-bundler-runtime@2.9.1 + - @module-federation/inject-external-runtime-core-plugin@2.9.1 + - @module-federation/sdk@2.9.1 + - @module-federation/managers@2.9.1 + - @module-federation/bridge-react-webpack-plugin@2.9.1 + - @module-federation/error-codes@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/enhanced/package.json b/packages/enhanced/package.json index fff9eace0f3..487eb869fa3 100644 --- a/packages/enhanced/package.json +++ b/packages/enhanced/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/enhanced", - "version": "2.9.0", + "version": "2.9.2", "main": "./dist/src/index.js", "types": "./dist/src/index.d.ts", "repository": { diff --git a/packages/enhanced/src/lib/container/ContainerEntryModule.ts b/packages/enhanced/src/lib/container/ContainerEntryModule.ts index bff3fcff1a8..8b9449bf7c1 100644 --- a/packages/enhanced/src/lib/container/ContainerEntryModule.ts +++ b/packages/enhanced/src/lib/container/ContainerEntryModule.ts @@ -8,7 +8,7 @@ import { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-p import { infrastructureLogger as logger } from '@module-federation/sdk'; import { buildDescMap, BUILD_001 } from '@module-federation/error-codes'; import { logAndReport } from '@module-federation/error-codes/node'; -import type { Compilation, Dependency } from 'webpack'; +import type { Compilation, Dependency, Module as WebpackModule } from 'webpack'; import type { InputFileSystem, LibIdentOptions, @@ -207,22 +207,34 @@ class ContainerEntryModule extends Module { for (const block of this.blocks) { const { dependencies } = block; - const modules = dependencies.map((dependency: Dependency) => { + const modules: { + name: string; + module: WebpackModule | null; + request: string; + }[] = []; + let missingModules: typeof modules | undefined; + let requests = ''; + for (const dependency of dependencies) { const dep = dependency as unknown as ContainerExposedDependency; - return { + const exposedModule = { name: dep.exposedName, module: moduleGraph.getModule(dep), request: dep.userRequest, }; - }); + modules.push(exposedModule); + if (!exposedModule.module) { + (missingModules ??= []).push(exposedModule); + } + requests += `${modules.length > 1 ? ', ' : ''}${dep.userRequest}`; + } let str; - if (modules.some((m) => !m.module)) { + if (missingModules) { logAndReport( BUILD_001, buildDescMap, { - exposeModules: modules.filter((m) => !m.module), + exposeModules: missingModules, FEDERATION_WEBPACK_PATH: process.env['FEDERATION_WEBPACK_PATH'], }, logger.error.bind(logger), @@ -240,7 +252,9 @@ class ContainerEntryModule extends Module { }, }, ); - process.exit(1); + str = runtimeTemplate.throwMissingModuleErrorBlock({ + request: requests, + }); } else { str = `return ${runtimeTemplate.blockPromise({ block, diff --git a/packages/enhanced/src/lib/container/HoistContainerReferencesPlugin.ts b/packages/enhanced/src/lib/container/HoistContainerReferencesPlugin.ts index 2e0d3e9fff1..3e0713f3369 100644 --- a/packages/enhanced/src/lib/container/HoistContainerReferencesPlugin.ts +++ b/packages/enhanced/src/lib/container/HoistContainerReferencesPlugin.ts @@ -235,6 +235,12 @@ export function getAllReferencedModules( continue; } + // Connections webpack pruned (an unused import of a sideEffects:false + // package) stay out of the runtime chunk. undefined means any runtime. + if (connection.getActiveState(undefined) === false) { + continue; + } + // Handle 'initial' type (skipping async blocks) if (type === 'initial') { const parentBlock = compilation.moduleGraph.getParentBlock( diff --git a/packages/enhanced/src/lib/container/RemoteRuntimeModule.ts b/packages/enhanced/src/lib/container/RemoteRuntimeModule.ts index 70324273510..c3a6bea5412 100644 --- a/packages/enhanced/src/lib/container/RemoteRuntimeModule.ts +++ b/packages/enhanced/src/lib/container/RemoteRuntimeModule.ts @@ -20,6 +20,9 @@ const extractUrlAndGlobal = require( const { Template, RuntimeModule, RuntimeGlobals } = require( normalizeWebpackPath('webpack'), ) as typeof import('webpack'); +const { compareModulesByIdentifier } = require( + normalizeWebpackPath('webpack/lib/util/comparators'), +) as typeof import('webpack/lib/util/comparators'); class RemoteRuntimeModule extends RuntimeModule { constructor() { @@ -45,9 +48,10 @@ class RemoteRuntimeModule extends RuntimeModule { if (chunk.id === null || chunk.id === undefined) { continue; } - const modules = chunkGraph?.getChunkModulesIterableBySourceType( + const modules = chunkGraph?.getOrderedChunkModulesIterableBySourceType( chunk, 'remote', + compareModulesByIdentifier, ); if (!modules) { continue; diff --git a/packages/enhanced/src/lib/sharing/ConsumeSharedModule.ts b/packages/enhanced/src/lib/sharing/ConsumeSharedModule.ts index fc201fa85f7..f94db538d77 100644 --- a/packages/enhanced/src/lib/sharing/ConsumeSharedModule.ts +++ b/packages/enhanced/src/lib/sharing/ConsumeSharedModule.ts @@ -26,7 +26,7 @@ import { normalizeConsumeShareOptions } from './utils'; import { WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE } from '../Constants'; import type { ConsumeOptions } from '@module-federation/sdk'; -const { rangeToString, stringifyHoley } = require( +const { stringifyHoley } = require( normalizeWebpackPath('webpack/lib/util/semver'), ) as typeof import('webpack/lib/util/semver'); const { AsyncDependenciesBlock, Module, RuntimeGlobals } = require( @@ -45,7 +45,7 @@ const makeSerializable = require( * @property {string=} importResolved resolved fallback request * @property {string} shareKey global share key * @property {string} shareScope share scope - * @property {SemVerRange | false | undefined} requiredVersion version requirement + * @property {string | false | undefined} requiredVersion version requirement * @property {string} packageName package name to determine required version automatically * @property {boolean} strictVersion don't use shared version even if version isn't valid * @property {boolean} singleton use single global version @@ -97,7 +97,7 @@ class ConsumeSharedModule extends Module { : shareScope; return `${WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE}|${normalizedShareScope}|${shareKey}|${ - requiredVersion && rangeToString(requiredVersion) + requiredVersion }|${strictVersion}|${importResolved}|${singleton}|${eager}|${layer}`; } @@ -121,7 +121,7 @@ class ConsumeSharedModule extends Module { : shareScope; return `consume shared module (${normalizedShareScope}) ${shareKey}@${ - requiredVersion ? rangeToString(requiredVersion) : '*' + requiredVersion || '*' }${strictVersion ? ' (strict)' : ''}${singleton ? ' (singleton)' : ''}${ importResolved ? ` (fallback: ${requestShortener.shorten(importResolved)})` diff --git a/packages/enhanced/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedContainerPlugin.ts b/packages/enhanced/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedContainerPlugin.ts index bec7eada206..d2c0b4a33b2 100644 --- a/packages/enhanced/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedContainerPlugin.ts +++ b/packages/enhanced/src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedContainerPlugin.ts @@ -77,7 +77,7 @@ class SharedContainerPlugin { compiler.hooks.make.tapAsync( PLUGIN_NAME, - async ( + ( compilation: Compilation, callback: (error?: WebpackError | null | undefined) => void, ) => { @@ -95,14 +95,8 @@ class SharedContainerPlugin { name: this._globalName, }, }, - (error: WebpackError | null | undefined) => { - if (error) { - throw error; - } - }, + (error: WebpackError | null | undefined) => callback(error), ); - - callback(); }, ); diff --git a/packages/enhanced/test/ConfigTestCases.rstest.ts b/packages/enhanced/test/ConfigTestCases.rstest.ts index 012cf1d1449..bed219954f9 100644 --- a/packages/enhanced/test/ConfigTestCases.rstest.ts +++ b/packages/enhanced/test/ConfigTestCases.rstest.ts @@ -832,7 +832,28 @@ export const describeCases = (config: any) => { { run: 3, options }, ); stderr.reset(); - if (unhandled.length) { + // Focused runs can route this log to Rstest instead of webpack's infrastructure logger. + if ( + unhandled.length && + fs.existsSync( + path.join(testDirectory, 'infrastructure-log.js'), + ) + ) { + checkArrayExpectation( + testDirectory, + { + infrastructureLogs: unhandled.map((message) => ({ + message, + })), + }, + 'infrastructureLog', + 'infrastructure-log', + 'InfrastructureLog', + (e: any) => { + throw e; + }, + ); + } else if (unhandled.length) { throw new Error( 'Errors/Warnings during build:\n' + unhandled.join('\n'), ); diff --git a/packages/enhanced/test/compiler-unit/container/RemoteRuntimeModule.determinism.test.ts b/packages/enhanced/test/compiler-unit/container/RemoteRuntimeModule.determinism.test.ts new file mode 100644 index 00000000000..f845659fdc2 --- /dev/null +++ b/packages/enhanced/test/compiler-unit/container/RemoteRuntimeModule.determinism.test.ts @@ -0,0 +1,99 @@ +// @ts-nocheck + +import ModuleFederationPlugin from '../../../src/lib/container/ModuleFederationPlugin'; +import { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-path'; +import path from 'path'; +import fs from 'fs'; +import os from 'os'; + +const webpack = require( + normalizeWebpackPath('webpack'), +) as typeof import('webpack'); + +// Builds the same host twice. The only difference is the order the entry +// imports its two remotes, which flips the order RemoteModules are added to +// the chunk. The emitted remotes runtime must not depend on that order. +describe('RemoteRuntimeModule output determinism', () => { + let tempDir: string; + + beforeEach(() => { + tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'remote-runtime-order-')); + }); + + afterEach(() => { + fs.rmSync(tempDir, { recursive: true, force: true }); + }); + + const buildRemotesRuntime = async (imports: string[]) => { + const context = fs.mkdtempSync(path.join(tempDir, 'build-')); + // Static remote imports keep both RemoteModules in the main chunk; the + // lazy import makes chunk loading a runtime requirement, which is what + // adds the remotes runtime module. + fs.writeFileSync( + path.join(context, 'main.js'), + [ + ...imports.map((request) => `import '${request}';`), + "import('./lazy.js');", + ].join('\n'), + ); + fs.writeFileSync(path.join(context, 'lazy.js'), 'export default 1;'); + fs.writeFileSync( + path.join(context, 'package.json'), + '{ "name": "host", "version": "1.0.0" }', + ); + + const compiler = webpack({ + mode: 'development', + devtool: false, + context, + entry: { main: './main.js' }, + output: { + path: path.join(context, 'dist'), + uniqueName: 'remote-runtime-order', + publicPath: 'auto', + }, + optimization: { moduleIds: 'named', chunkIds: 'named' }, + plugins: [ + new ModuleFederationPlugin({ + name: 'host', + remotes: { + alpha: 'alpha@http://localhost:3001/remoteEntry.js', + beta: 'beta@http://localhost:3002/remoteEntry.js', + }, + manifest: false, + }), + ], + }); + + const stats = await new Promise((resolve, reject) => { + compiler.run((err, s) => (err ? reject(err) : resolve(s))); + }); + await new Promise((resolve) => compiler.close(() => resolve())); + if (stats.hasErrors()) { + throw new Error(stats.toString({ all: false, errors: true })); + } + + const { compilation } = stats; + const sources: string[] = []; + for (const chunk of compilation.chunks) { + for (const runtimeModule of compilation.chunkGraph.getChunkRuntimeModulesIterable( + chunk, + )) { + if (runtimeModule.name === 'remotes loading') { + sources.push(runtimeModule.getGeneratedCode()); + } + } + } + expect(sources).toHaveLength(1); + return sources[0]; + }; + + it('emits identical remotes runtime code when remote import order changes', async () => { + const alphaFirst = await buildRemotesRuntime(['alpha/one', 'beta/two']); + const betaFirst = await buildRemotesRuntime(['beta/two', 'alpha/one']); + + expect(alphaFirst).toContain('webpack/container/remote/alpha/one'); + expect(alphaFirst).toContain('webpack/container/remote/beta/two'); + expect(betaFirst).toBe(alphaFirst); + }); +}); diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/index.js b/packages/enhanced/test/configCases/container/hoist-inactive-connections/index.js new file mode 100644 index 00000000000..02749e4c3c0 --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/index.js @@ -0,0 +1,12 @@ +/* global __non_webpack_require__, __dirname, it, expect */ +const fs = __non_webpack_require__('fs'); +const path = __non_webpack_require__('path'); + +it('keeps a pruned sideEffects:false import out of the runtime chunk', () => { + const runtime = fs.readFileSync( + path.join(__dirname, 'runtime-hoist_inactive_connections.js'), + 'utf-8', + ); + expect(runtime).toContain('./node_modules/used-pkg/index.js'); + expect(runtime).not.toContain('pruned-pkg'); +}); diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/pruned-pkg/index.js b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/pruned-pkg/index.js new file mode 100644 index 00000000000..364b69cb3ba --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/pruned-pkg/index.js @@ -0,0 +1 @@ +export const pruned = 'pruned-pkg export'; diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/pruned-pkg/package.json b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/pruned-pkg/package.json new file mode 100644 index 00000000000..8743119f063 --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/pruned-pkg/package.json @@ -0,0 +1,6 @@ +{ + "name": "pruned-pkg", + "version": "1.0.0", + "main": "./index.js", + "sideEffects": false +} diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/runtime-specific-pkg/index.js b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/runtime-specific-pkg/index.js new file mode 100644 index 00000000000..96e6ba60a01 --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/runtime-specific-pkg/index.js @@ -0,0 +1 @@ +export const runtimeSpecific = 'runtime-specific-pkg export'; diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/runtime-specific-pkg/package.json b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/runtime-specific-pkg/package.json new file mode 100644 index 00000000000..d44715a4edb --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/runtime-specific-pkg/package.json @@ -0,0 +1,6 @@ +{ + "name": "runtime-specific-pkg", + "version": "1.0.0", + "main": "./index.js", + "sideEffects": false +} diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/used-pkg/index.js b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/used-pkg/index.js new file mode 100644 index 00000000000..8dca28580f9 --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/used-pkg/index.js @@ -0,0 +1 @@ +export const used = 'used-pkg export'; diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/used-pkg/package.json b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/used-pkg/package.json new file mode 100644 index 00000000000..520f9c62a02 --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/node_modules/used-pkg/package.json @@ -0,0 +1,6 @@ +{ + "name": "used-pkg", + "version": "1.0.0", + "main": "./index.js", + "sideEffects": false +} diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/noop.js b/packages/enhanced/test/configCases/container/hoist-inactive-connections/noop.js new file mode 100644 index 00000000000..765fcb49463 --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/noop.js @@ -0,0 +1 @@ +export default 'noop'; diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/runtime-plugin.js b/packages/enhanced/test/configCases/container/hoist-inactive-connections/runtime-plugin.js new file mode 100644 index 00000000000..8022f364fc7 --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/runtime-plugin.js @@ -0,0 +1,17 @@ +import { pruned } from 'pruned-pkg'; +import { runtimeSpecific } from 'runtime-specific-pkg'; +import { used } from 'used-pkg'; + +export function getRuntimeSpecificValue() { + return runtimeSpecific; +} + +export default function () { + return { + name: 'hoist-inactive-connections', + beforeInit(args) { + globalThis.hoistInactiveConnectionsUsed = used; + return args; + }, + }; +} diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/secondary.js b/packages/enhanced/test/configCases/container/hoist-inactive-connections/secondary.js new file mode 100644 index 00000000000..040dce41924 --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/secondary.js @@ -0,0 +1,5 @@ +import { getRuntimeSpecificValue } from './runtime-plugin'; + +it('keeps a dependency used by only one runtime loadable', () => { + expect(getRuntimeSpecificValue()).toBe('runtime-specific-pkg export'); +}); diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/test.config.js b/packages/enhanced/test/configCases/container/hoist-inactive-connections/test.config.js new file mode 100644 index 00000000000..a5a8a41a5d9 --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/test.config.js @@ -0,0 +1,10 @@ +module.exports = { + findBundle: function () { + return [ + './runtime-main.js', + './main.js', + './runtime-secondary.js', + './secondary.js', + ]; + }, +}; diff --git a/packages/enhanced/test/configCases/container/hoist-inactive-connections/webpack.config.js b/packages/enhanced/test/configCases/container/hoist-inactive-connections/webpack.config.js new file mode 100644 index 00000000000..11e7f0cf3ef --- /dev/null +++ b/packages/enhanced/test/configCases/container/hoist-inactive-connections/webpack.config.js @@ -0,0 +1,75 @@ +const { ModuleFederationPlugin } = require('../../../../dist/src'); + +class AssertMixedRuntimeConnectionPlugin { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + 'AssertMixedRuntimeConnectionPlugin', + (compilation) => { + compilation.hooks.optimizeChunks.tap( + { name: 'AssertMixedRuntimeConnectionPlugin', stage: 10 }, + () => { + const runtimePlugin = [...compilation.modules].find((module) => + module.resource?.endsWith('runtime-plugin.js'), + ); + const hasMixedRuntimeConnection = runtimePlugin + ? [ + ...compilation.moduleGraph.getOutgoingConnections( + runtimePlugin, + ), + ].some( + (connection) => + connection.module?.resource?.includes( + 'runtime-specific-pkg', + ) && + connection.getActiveState('runtime-secondary') === true && + connection.getActiveState( + 'runtime-hoist_inactive_connections', + ) === false && + connection.getActiveState(undefined) !== false, + ) + : false; + + if (!hasMixedRuntimeConnection) { + throw new Error( + 'Expected runtime-specific-pkg to have a mixed-runtime connection', + ); + } + }, + ); + }, + ); + } +} + +module.exports = { + entry: { + main: './index.js', + secondary: './secondary.js', + }, + target: 'async-node', + output: { + filename: '[name].js', + publicPath: '/', + }, + optimization: { + runtimeChunk: { + name: (entrypoint) => `runtime-${entrypoint.name}`, + }, + sideEffects: true, + minimize: false, + concatenateModules: false, + chunkIds: 'named', + moduleIds: 'named', + }, + plugins: [ + new AssertMixedRuntimeConnectionPlugin(), + new ModuleFederationPlugin({ + name: 'hoist_inactive_connections', + filename: 'container.js', + exposes: { + './noop': './noop.js', + }, + runtimePlugins: [require.resolve('./runtime-plugin.js')], + }), + ], +}; diff --git a/packages/enhanced/test/configCases/container/missing-expose/errors.js b/packages/enhanced/test/configCases/container/missing-expose/errors.js new file mode 100644 index 00000000000..bf7c4a45eac --- /dev/null +++ b/packages/enhanced/test/configCases/container/missing-expose/errors.js @@ -0,0 +1 @@ +module.exports = [[/Can't resolve '\.\/does-not-exist\.js'/]]; diff --git a/packages/enhanced/test/configCases/container/missing-expose/index.js b/packages/enhanced/test/configCases/container/missing-expose/index.js new file mode 100644 index 00000000000..b60bdc510a6 --- /dev/null +++ b/packages/enhanced/test/configCases/container/missing-expose/index.js @@ -0,0 +1,13 @@ +it('should finish the build and reject get() for an expose that does not resolve', async () => { + const container = __non_webpack_require__('./container-file.js'); + await expect( + Promise.resolve().then(() => container.get('./Missing')), + ).rejects.toEqual( + expect.objectContaining({ + code: 'MODULE_NOT_FOUND', + message: "Cannot find module './test, ./does-not-exist.js'", + }), + ); + const testFactory = await container.get('./test'); + expect(testFactory()).toBe('test'); +}); diff --git a/packages/enhanced/test/configCases/container/missing-expose/infrastructure-log.js b/packages/enhanced/test/configCases/container/missing-expose/infrastructure-log.js new file mode 100644 index 00000000000..82196d5e9e7 --- /dev/null +++ b/packages/enhanced/test/configCases/container/missing-expose/infrastructure-log.js @@ -0,0 +1,5 @@ +module.exports = [ + /Failed to find expose module\. #BUILD-001/, + /"name":"\.\/Missing".*"request":"\.\/does-not-exist\.js"/, + /https:\/\/module-federation\.io\/guide\/troubleshooting\/build#build-001/, +]; diff --git a/packages/enhanced/test/configCases/container/missing-expose/test.config.js b/packages/enhanced/test/configCases/container/missing-expose/test.config.js new file mode 100644 index 00000000000..9e63c48652b --- /dev/null +++ b/packages/enhanced/test/configCases/container/missing-expose/test.config.js @@ -0,0 +1,34 @@ +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const configuredAt = Date.now(); + +module.exports = { + beforeExecute() { + const diagnostic = JSON.parse( + fs.readFileSync( + path.join(process.cwd(), '.mf/diagnostics/latest.json'), + 'utf8', + ), + ); + assert.ok(diagnostic.latestErrorEvent.timestamp >= configuredAt); + assert.equal(diagnostic.latestErrorEvent.code, 'BUILD-001'); + assert.match( + diagnostic.latestErrorEvent.message, + /Failed to find expose module/, + ); + assert.match( + diagnostic.latestErrorEvent.message, + /troubleshooting\/build#build-001/, + ); + assert.equal(diagnostic.bundler.name, 'webpack'); + assert.equal(diagnostic.mfConfig.name, 'container'); + assert.equal( + diagnostic.mfConfig.exposes['./Missing'], + './does-not-exist.js', + ); + assert.deepEqual(diagnostic.latestErrorEvent.args.exposeModules, [ + { name: './Missing', module: null, request: './does-not-exist.js' }, + ]); + }, +}; diff --git a/packages/enhanced/test/configCases/container/missing-expose/test.js b/packages/enhanced/test/configCases/container/missing-expose/test.js new file mode 100644 index 00000000000..37a4648424d --- /dev/null +++ b/packages/enhanced/test/configCases/container/missing-expose/test.js @@ -0,0 +1 @@ +module.exports = 'test'; diff --git a/packages/enhanced/test/configCases/container/missing-expose/webpack.config.js b/packages/enhanced/test/configCases/container/missing-expose/webpack.config.js new file mode 100644 index 00000000000..d92cdcc58b8 --- /dev/null +++ b/packages/enhanced/test/configCases/container/missing-expose/webpack.config.js @@ -0,0 +1,20 @@ +const { ContainerPlugin } = require('../../../../dist/src'); + +module.exports = { + optimization: { emitOnErrors: true }, + plugins: [ + new ContainerPlugin({ + name: 'container', + filename: 'container-file.js', + library: { + type: 'commonjs-module', + }, + exposes: { + './Missing': { + import: ['./test', './does-not-exist.js'], + }, + './test': './test', + }, + }), + ], +}; diff --git a/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/index.js b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/index.js new file mode 100644 index 00000000000..0a9b088e5d9 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/index.js @@ -0,0 +1,18 @@ +it('resolves each consumer against its own requiredVersion range', async () => { + await __webpack_init_sharing__('default'); + __webpack_share_scopes__['default'] = { + 'shared-dep': { + '1.0.5': { + get: () => () => 'shared-dep@1.0.5', + }, + '1.1.0': { + get: () => () => 'shared-dep@1.1.0', + }, + }, + }; + + expect(require('pkg-a')).toBe('shared-dep@1.1.0'); + expect(require('pkg-b')).toBe('shared-dep@1.0.5'); + expect(require('shared-dep-explicit-wide')).toBe('shared-dep@1.1.0'); + expect(require('shared-dep-explicit-narrow')).toBe('shared-dep@1.0.5'); +}); diff --git a/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-a/index.js b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-a/index.js new file mode 100644 index 00000000000..b4d36974c76 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-a/index.js @@ -0,0 +1 @@ +module.exports = require('shared-dep'); diff --git a/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-a/package.json b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-a/package.json new file mode 100644 index 00000000000..881fdb55015 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-a/package.json @@ -0,0 +1,7 @@ +{ + "name": "pkg-a", + "version": "1.0.0", + "dependencies": { + "shared-dep": "^1.0.0" + } +} diff --git a/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-b/index.js b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-b/index.js new file mode 100644 index 00000000000..b4d36974c76 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-b/index.js @@ -0,0 +1 @@ +module.exports = require('shared-dep'); diff --git a/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-b/package.json b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-b/package.json new file mode 100644 index 00000000000..47616d42bc6 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/node_modules/pkg-b/package.json @@ -0,0 +1,7 @@ +{ + "name": "pkg-b", + "version": "1.0.0", + "dependencies": { + "shared-dep": "~1.0.0" + } +} diff --git a/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/package.json b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/package.json new file mode 100644 index 00000000000..76331af049b --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "pkg-a": "1.0.0", + "pkg-b": "1.0.0" + } +} diff --git a/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/webpack.config.js b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/webpack.config.js new file mode 100644 index 00000000000..88c5e47108c --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/consume-distinct-ranges/webpack.config.js @@ -0,0 +1,24 @@ +const { ConsumeSharedPlugin } = require('../../../../dist/src'); + +/** @type {import("../../../../").Configuration} */ +module.exports = { + plugins: [ + new ConsumeSharedPlugin({ + consumes: { + 'shared-dep': { + import: false, + }, + 'shared-dep-explicit-wide': { + import: false, + shareKey: 'shared-dep', + requiredVersion: '^1.0.0', + }, + 'shared-dep-explicit-narrow': { + import: false, + shareKey: 'shared-dep', + requiredVersion: '~1.0.0', + }, + }, + }), + ], +}; diff --git a/packages/enhanced/test/unit/container/RemoteRuntimeModule.test.ts b/packages/enhanced/test/unit/container/RemoteRuntimeModule.test.ts index 9845b437a59..c709a0b1306 100644 --- a/packages/enhanced/test/unit/container/RemoteRuntimeModule.test.ts +++ b/packages/enhanced/test/unit/container/RemoteRuntimeModule.test.ts @@ -105,7 +105,7 @@ describe('RemoteRuntimeModule', () => { let mockChunk: Chunk; let remoteRuntimeModule: InstanceType; let chunkModulesBySourceTypeMock: Mock< - NonNullable + NonNullable >; let moduleIdMock: ModuleIdMock; let moduleGraphGetModuleMock: Mock; @@ -119,8 +119,8 @@ describe('RemoteRuntimeModule', () => { mockRuntimeTemplate = compilationMocks.mockRuntimeTemplate; chunkModulesBySourceTypeMock = - mockChunkGraph.getChunkModulesIterableBySourceType as unknown as Mock< - NonNullable + mockChunkGraph.getOrderedChunkModulesIterableBySourceType as unknown as Mock< + NonNullable >; moduleIdMock = mockChunkGraph.getModuleId as unknown as ModuleIdMock; moduleGraphGetModuleMock = mockModuleGraph.getModule as unknown as Mock< diff --git a/packages/enhanced/test/unit/sharing/tree-shaking/SharedContainerPlugin.test.ts b/packages/enhanced/test/unit/sharing/tree-shaking/SharedContainerPlugin.test.ts new file mode 100644 index 00000000000..7fbc842c218 --- /dev/null +++ b/packages/enhanced/test/unit/sharing/tree-shaking/SharedContainerPlugin.test.ts @@ -0,0 +1,72 @@ +/* + * @rstest-environment node + */ + +import { rs } from '@rstest/core'; +import { AsyncSeriesHook, SyncHook } from 'tapable'; +import type { Compiler } from 'webpack'; +import SharedContainerPlugin from '../../../../src/lib/sharing/tree-shaking/SharedContainerPlugin/SharedContainerPlugin'; + +type EntryCallback = (error?: Error | null) => void; + +const setup = () => { + const compiler = { + options: { output: { enabledLibraryTypes: [] as string[] } }, + hooks: { + make: new AsyncSeriesHook<[unknown]>(['compilation']), + thisCompilation: new SyncHook<[unknown, unknown]>([ + 'compilation', + 'params', + ]), + }, + }; + new SharedContainerPlugin({ + mfName: 'host', + shareName: 'ui-lib', + version: '1.0.0', + request: 'ui-lib', + }).apply(compiler as unknown as Compiler); + + let finishEntry: EntryCallback = () => { + throw new Error('addEntry was not called'); + }; + const compilation = { + options: { context: '/ctx' }, + addEntry: rs.fn( + ( + _context: string, + _dep: unknown, + _options: unknown, + callback: EntryCallback, + ) => { + finishEntry = callback; + }, + ), + }; + const makeDone = rs.fn(); + compiler.hooks.make.callAsync(compilation, makeDone); + expect(compilation.addEntry).toHaveBeenCalledTimes(1); + + return { makeDone, finishEntry: (error?: Error) => finishEntry(error) }; +}; + +describe('SharedContainerPlugin make', () => { + it('finishes make only after addEntry completes', () => { + const { makeDone, finishEntry } = setup(); + + expect(makeDone).not.toHaveBeenCalled(); + + finishEntry(); + expect(makeDone).toHaveBeenCalledTimes(1); + expect(makeDone).toHaveBeenCalledWith(); + }); + + it('reports an addEntry error through the make callback', () => { + const { makeDone, finishEntry } = setup(); + const error = new Error('entry failed'); + + expect(() => finishEntry(error)).not.toThrow(); + expect(makeDone).toHaveBeenCalledTimes(1); + expect(makeDone).toHaveBeenCalledWith(error); + }); +}); diff --git a/packages/error-codes/CHANGELOG.md b/packages/error-codes/CHANGELOG.md index 653f4fe5948..1a9890ba3fb 100644 --- a/packages/error-codes/CHANGELOG.md +++ b/packages/error-codes/CHANGELOG.md @@ -1,5 +1,9 @@ # @module-federation/error-codes +## 2.9.2 + +## 2.9.1 + ## 2.9.0 ## 2.8.2 diff --git a/packages/error-codes/package.json b/packages/error-codes/package.json index 470b215b11d..8fc1d6fe920 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.9.0", + "version": "2.9.2", "license": "MIT", "repository": { "type": "git", diff --git a/packages/esbuild/CHANGELOG.md b/packages/esbuild/CHANGELOG.md index c03d787e044..a6bb0f05856 100644 --- a/packages/esbuild/CHANGELOG.md +++ b/packages/esbuild/CHANGELOG.md @@ -1,5 +1,22 @@ # @module-federation/esbuild +## 0.0.116 + +### Patch Changes + +- 1b4ff2e: Resolve the remote entry, the `mf-manifest.json` output path, and the manifest's shared package versions from esbuild's `absWorkingDir` instead of `process.cwd()`. + - @module-federation/runtime@2.9.2 + - @module-federation/webpack-bundler-runtime@2.9.2 + - @module-federation/sdk@2.9.2 + +## 0.0.115 + +### Patch Changes + +- @module-federation/runtime@2.9.1 +- @module-federation/webpack-bundler-runtime@2.9.1 +- @module-federation/sdk@2.9.1 + ## 0.0.114 ### Patch Changes diff --git a/packages/esbuild/__tests__/abs-working-dir.spec.mjs b/packages/esbuild/__tests__/abs-working-dir.spec.mjs new file mode 100644 index 00000000000..e8bab96b0a6 --- /dev/null +++ b/packages/esbuild/__tests__/abs-working-dir.spec.mjs @@ -0,0 +1,72 @@ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import test from 'node:test'; +import { build } from 'esbuild'; +import { moduleFederationPlugin } from '../dist/plugin.mjs'; + +// esbuild reports metafile paths relative to absWorkingDir. The plugin used to +// resolve them, and the shared package versions, from process.cwd() instead. +test('a build whose absWorkingDir is not the process directory', async () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'mf-esbuild-')); + assert.notEqual(path.resolve(root), process.cwd()); + fs.writeFileSync(path.join(root, 'entry.js'), 'export const host = true;\n'); + fs.writeFileSync(path.join(root, 'value.js'), 'export const value = 42;\n'); + const dep = path.join(root, 'node_modules', 'dep'); + fs.mkdirSync(dep, { recursive: true }); + fs.writeFileSync( + path.join(dep, 'package.json'), + JSON.stringify({ name: 'dep', version: '1.2.3', main: 'index.js' }), + ); + fs.writeFileSync(path.join(dep, 'index.js'), 'module.exports = {};\n'); + + // Where the bug wrote the manifest. + const strayManifest = path.resolve(process.cwd(), 'dist', 'mf-manifest.json'); + fs.rmSync(strayManifest, { force: true }); + + try { + await build({ + absWorkingDir: root, + bundle: true, + entryPoints: ['entry.js'], + external: [ + '@module-federation/error-codes', + '@module-federation/runtime', + '@module-federation/sdk', + '@module-federation/webpack-bundler-runtime', + ], + format: 'esm', + metafile: true, + outdir: 'dist', + plugins: [ + moduleFederationPlugin({ + name: 'esbuild_abs_working_dir_test', + filename: 'remoteEntry.js', + exposes: { './value': './value.js' }, + remotes: {}, + shared: { dep: {} }, + }), + ], + }); + + const remoteEntry = fs.readFileSync( + path.join(root, 'dist', 'remoteEntry.js'), + 'utf-8', + ); + assert.equal(remoteEntry.includes('__MODULE_MAP__'), false); + assert.equal(remoteEntry.includes('"./value"'), true); + + const manifest = JSON.parse( + fs.readFileSync(path.join(root, 'dist', 'mf-manifest.json'), 'utf-8'), + ); + assert.equal(manifest.metaData.remoteEntry.name, 'remoteEntry.js'); + assert.deepEqual( + manifest.shared.map((s) => [s.name, s.version]), + [['dep', '1.2.3']], + ); + assert.equal(fs.existsSync(strayManifest), false); + } finally { + fs.rmSync(root, { recursive: true, force: true }); + } +}); diff --git a/packages/esbuild/package.json b/packages/esbuild/package.json index 24ed6cac7ab..7b6dd4f3338 100644 --- a/packages/esbuild/package.json +++ b/packages/esbuild/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/esbuild", - "version": "0.0.114", + "version": "0.0.116", "author": "Zack Jackson (@ScriptedAlchemy)", "main": "./dist/index.js", "module": "./dist/index.mjs", @@ -69,6 +69,7 @@ "scripts": { "build": "rslib build", "lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\" \"package.json\"", + "test": "node --test __tests__/*.spec.mjs", "build-debug": "FEDERATION_DEBUG=true rslib build", "pre-release": "pnpm run build" } diff --git a/packages/esbuild/src/adapters/lib/manifest.ts b/packages/esbuild/src/adapters/lib/manifest.ts index d890b7f7a87..1c5128d8d24 100644 --- a/packages/esbuild/src/adapters/lib/manifest.ts +++ b/packages/esbuild/src/adapters/lib/manifest.ts @@ -70,7 +70,11 @@ interface Manifest { exposes: ExposeConfig[]; } -export const writeRemoteManifest = async (config: any, result: BuildResult) => { +export const writeRemoteManifest = async ( + config: any, + result: BuildResult, + absWorkingDir: string, +) => { if (result.errors && result.errors.length > 0) { console.warn('Build errors detected, skipping writeRemoteManifest.'); return; @@ -161,7 +165,7 @@ export const writeRemoteManifest = async (config: any, result: BuildResult) => { if (!version) { try { const packageJsonPath = await resolve( - process.cwd(), + absWorkingDir, `${pkg}/package.json`, ); if (packageJsonPath) { @@ -259,7 +263,8 @@ export const writeRemoteManifest = async (config: any, result: BuildResult) => { exposes, }; - const manifestPath = path.join( + const manifestPath = path.resolve( + absWorkingDir, path.dirname(outputMap[containerName].chunk), 'mf-manifest.json', ); diff --git a/packages/esbuild/src/adapters/lib/plugin.ts b/packages/esbuild/src/adapters/lib/plugin.ts index fc70375bc78..d346ad1df6e 100644 --- a/packages/esbuild/src/adapters/lib/plugin.ts +++ b/packages/esbuild/src/adapters/lib/plugin.ts @@ -146,6 +146,8 @@ const linkSharedPlugin = (config: NormalizedFederationConfig): Plugin => ({ export const moduleFederationPlugin = (config: NormalizedFederationConfig) => ({ name: 'module-federation', setup(build: PluginBuild) { + // esbuild reports metafile paths relative to absWorkingDir, which defaults to process.cwd(). + const absWorkingDir = build.initialOptions.absWorkingDir || process.cwd(); build.initialOptions.metafile = true; const externals = getExternals(config); if (build.initialOptions.external) { @@ -233,16 +235,17 @@ export const moduleFederationPlugin = (config: NormalizedFederationConfig) => ({ if (!(value as any).entryPoint.endsWith(remoteFile)) continue; - const container = fs.readFileSync(outputPath, 'utf-8'); + const outputFile = path.resolve(absWorkingDir, outputPath); + const container = fs.readFileSync(outputFile, 'utf-8'); const withExports = container .replace('"__MODULE_MAP__"', `${JSON.stringify(exposedEntries)}`) .replace("'__MODULE_MAP__'", `${JSON.stringify(exposedEntries)}`); - fs.writeFileSync(outputPath, withExports, 'utf-8'); + fs.writeFileSync(outputFile, withExports, 'utf-8'); } } - await writeRemoteManifest(config, result); + await writeRemoteManifest(config, result, absWorkingDir); console.log(`build ended with ${result.errors.length} errors`); }); }, diff --git a/packages/managers/CHANGELOG.md b/packages/managers/CHANGELOG.md index 912e20c73e1..6b82728a32c 100644 --- a/packages/managers/CHANGELOG.md +++ b/packages/managers/CHANGELOG.md @@ -1,5 +1,17 @@ # @module-federation/managers +## 2.9.2 + +### Patch Changes + +- @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/managers/package.json b/packages/managers/package.json index d8d0aeab524..c50fba44113 100644 --- a/packages/managers/package.json +++ b/packages/managers/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/managers", - "version": "2.9.0", + "version": "2.9.2", "license": "MIT", "description": "Provide managers for helping handle mf data .", "keywords": [ diff --git a/packages/manifest/CHANGELOG.md b/packages/manifest/CHANGELOG.md index 5d1d0c1d4f1..a8446c42ccd 100644 --- a/packages/manifest/CHANGELOG.md +++ b/packages/manifest/CHANGELOG.md @@ -1,5 +1,24 @@ # @module-federation/manifest +## 2.9.2 + +### Patch Changes + +- Updated dependencies [000f3fa] +- Updated dependencies [7f0ac8b] + - @module-federation/dts-plugin@2.9.2 + - @module-federation/sdk@2.9.2 + - @module-federation/managers@2.9.2 + +## 2.9.1 + +### Patch Changes + +- Updated dependencies [796d6ad] + - @module-federation/dts-plugin@2.9.1 + - @module-federation/sdk@2.9.1 + - @module-federation/managers@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/manifest/package.json b/packages/manifest/package.json index a4c7a33868f..da61ccbfc96 100644 --- a/packages/manifest/package.json +++ b/packages/manifest/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/manifest", - "version": "2.9.0", + "version": "2.9.2", "license": "MIT", "description": "Provide manifest/stats for webpack/rspack MF project .", "keywords": [ diff --git a/packages/metro-core/CHANGELOG.md b/packages/metro-core/CHANGELOG.md index 23050fdd164..e13904032d3 100644 --- a/packages/metro-core/CHANGELOG.md +++ b/packages/metro-core/CHANGELOG.md @@ -1,5 +1,24 @@ # @module-federation/metro +## 2.9.2 + +### Patch Changes + +- Updated dependencies [000f3fa] +- Updated dependencies [7f0ac8b] + - @module-federation/dts-plugin@2.9.2 + - @module-federation/runtime@2.9.2 + - @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- Updated dependencies [796d6ad] + - @module-federation/dts-plugin@2.9.1 + - @module-federation/runtime@2.9.1 + - @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/metro-core/package.json b/packages/metro-core/package.json index f969a646e09..7721cb605c7 100644 --- a/packages/metro-core/package.json +++ b/packages/metro-core/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/metro", - "version": "2.9.0", + "version": "2.9.2", "description": "Module Federation for Metro bundler", "keywords": [ "module-federation", diff --git a/packages/metro-plugin-rnc-cli/CHANGELOG.md b/packages/metro-plugin-rnc-cli/CHANGELOG.md index 2eb71409267..d3304f8a0ec 100644 --- a/packages/metro-plugin-rnc-cli/CHANGELOG.md +++ b/packages/metro-plugin-rnc-cli/CHANGELOG.md @@ -1,5 +1,17 @@ # @module-federation/metro-plugin-rnc-cli +## 2.9.2 + +### Patch Changes + +- @module-federation/metro@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/metro@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/metro-plugin-rnc-cli/package.json b/packages/metro-plugin-rnc-cli/package.json index 04158d70e86..097833f8fb9 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.9.0", + "version": "2.9.2", "description": "Metro Module Federation plugin for React Native Enterprise Framework (RNEF)", "keywords": [ "rnc", diff --git a/packages/metro-plugin-rnef/CHANGELOG.md b/packages/metro-plugin-rnef/CHANGELOG.md index 770223907f6..75384f8d394 100644 --- a/packages/metro-plugin-rnef/CHANGELOG.md +++ b/packages/metro-plugin-rnef/CHANGELOG.md @@ -1,5 +1,17 @@ # @module-federation/metro-plugin-rnef +## 2.9.2 + +### Patch Changes + +- @module-federation/metro@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/metro@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/metro-plugin-rnef/package.json b/packages/metro-plugin-rnef/package.json index d0af32bf962..561bc9b6545 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.9.0", + "version": "2.9.2", "description": "Metro Module Federation plugin for React Native Enterprise Framework (RNEF). Deprecated: use @module-federation/metro-plugin-rock instead.", "keywords": [ "rnef", diff --git a/packages/metro-plugin-rock/CHANGELOG.md b/packages/metro-plugin-rock/CHANGELOG.md index 7641375ebfd..1c9d44898d6 100644 --- a/packages/metro-plugin-rock/CHANGELOG.md +++ b/packages/metro-plugin-rock/CHANGELOG.md @@ -1,5 +1,17 @@ # @module-federation/metro-plugin-rock +## 2.9.2 + +### Patch Changes + +- @module-federation/metro@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/metro@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/metro-plugin-rock/package.json b/packages/metro-plugin-rock/package.json index 6ed8bf145a9..5e0e8711bf1 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.9.0", + "version": "2.9.2", "description": "Metro Module Federation plugin for Rock", "keywords": [ "rock", diff --git a/packages/modernjs-v3/CHANGELOG.md b/packages/modernjs-v3/CHANGELOG.md index 28d583e54a2..fd1e5b743e4 100644 --- a/packages/modernjs-v3/CHANGELOG.md +++ b/packages/modernjs-v3/CHANGELOG.md @@ -1,5 +1,33 @@ # @module-federation/modern-js-v3 +## 2.9.2 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [4364cb6] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + - @module-federation/bridge-react@2.9.2 + - @module-federation/node@2.7.52 + - @module-federation/rsbuild-plugin@2.9.2 + - @module-federation/runtime@2.9.2 + - @module-federation/cli@2.9.2 + - @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/cli@2.9.1 +- @module-federation/enhanced@2.9.1 +- @module-federation/bridge-react@2.9.1 +- @module-federation/runtime@2.9.1 +- @module-federation/node@2.7.51 +- @module-federation/rsbuild-plugin@2.9.1 +- @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/modernjs-v3/package.json b/packages/modernjs-v3/package.json index 5612e7146b6..b894250cf06 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.9.0", + "version": "2.9.2", "files": [ "dist/", "types.d.ts", diff --git a/packages/modernjs/CHANGELOG.md b/packages/modernjs/CHANGELOG.md index b7dca0975bd..5accccecec1 100644 --- a/packages/modernjs/CHANGELOG.md +++ b/packages/modernjs/CHANGELOG.md @@ -1,5 +1,33 @@ # @module-federation/modern-js +## 2.9.2 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [4364cb6] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + - @module-federation/bridge-react@2.9.2 + - @module-federation/node@2.7.52 + - @module-federation/rsbuild-plugin@2.9.2 + - @module-federation/runtime@2.9.2 + - @module-federation/cli@2.9.2 + - @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/cli@2.9.1 +- @module-federation/enhanced@2.9.1 +- @module-federation/bridge-react@2.9.1 +- @module-federation/runtime@2.9.1 +- @module-federation/node@2.7.51 +- @module-federation/rsbuild-plugin@2.9.1 +- @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/modernjs/package.json b/packages/modernjs/package.json index b5152087921..322fb408ac4 100644 --- a/packages/modernjs/package.json +++ b/packages/modernjs/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/modern-js", - "version": "2.9.0", + "version": "2.9.2", "files": [ "dist/", "types.d.ts", diff --git a/packages/native-federation-tests/CHANGELOG.md b/packages/native-federation-tests/CHANGELOG.md index 6ac4d981a82..d39457c64ad 100644 --- a/packages/native-federation-tests/CHANGELOG.md +++ b/packages/native-federation-tests/CHANGELOG.md @@ -1,5 +1,11 @@ # @module-federation/native-federation-tests +## 0.6.5 + +### Patch Changes + +- 000f3fa: Addresses CVE-2026-76845 by upgrading `adm-zip` to `0.6.1`. + ## 0.6.4 ### Patch Changes diff --git a/packages/native-federation-tests/package.json b/packages/native-federation-tests/package.json index 7987f37ed72..40647e0e14b 100644 --- a/packages/native-federation-tests/package.json +++ b/packages/native-federation-tests/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/native-federation-tests", - "version": "0.6.4", + "version": "0.6.5", "description": "Bundler agnostic unplugin to share federated tests", "publishConfig": { "access": "public" @@ -87,7 +87,7 @@ }, "license": "MIT", "dependencies": { - "adm-zip": "^0.6.0", + "adm-zip": "^0.6.1", "ansi-colors": "^4.1.3", "axios": "1.18.0", "rambda": "^9.2.1", diff --git a/packages/native-federation-typescript/CHANGELOG.md b/packages/native-federation-typescript/CHANGELOG.md index 1dca004578f..cbcbc74a49e 100644 --- a/packages/native-federation-typescript/CHANGELOG.md +++ b/packages/native-federation-typescript/CHANGELOG.md @@ -1,5 +1,11 @@ # @module-federation/native-federation-typescript +## 0.6.5 + +### Patch Changes + +- 000f3fa: Addresses CVE-2026-76845 by upgrading `adm-zip` to `0.6.1`. + ## 0.6.4 ### Patch Changes diff --git a/packages/native-federation-typescript/package.json b/packages/native-federation-typescript/package.json index 4383dee7dea..77d2f0b2c84 100644 --- a/packages/native-federation-typescript/package.json +++ b/packages/native-federation-typescript/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/native-federation-typescript", - "version": "0.6.4", + "version": "0.6.5", "description": "Bundler agnostic unplugin to share federated types", "keywords": [ "module federation", @@ -87,7 +87,7 @@ }, "license": "MIT", "dependencies": { - "adm-zip": "^0.6.0", + "adm-zip": "^0.6.1", "ansi-colors": "^4.1.3", "axios": "1.18.0", "rambda": "^9.2.1", diff --git a/packages/nextjs-mf/CHANGELOG.md b/packages/nextjs-mf/CHANGELOG.md index 10d455b58c7..08906e7e7ab 100644 --- a/packages/nextjs-mf/CHANGELOG.md +++ b/packages/nextjs-mf/CHANGELOG.md @@ -1,5 +1,33 @@ # @module-federation/nextjs-mf +## 8.8.76 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [47d9b46] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + - @module-federation/runtime-core@2.9.2 + - @module-federation/node@2.7.52 + - @module-federation/runtime@2.9.2 + - @module-federation/webpack-bundler-runtime@2.9.2 + - @module-federation/sdk@2.9.2 + +## 8.8.75 + +### Patch Changes + +- 85d78e2: Fix server-side onLoad crash when async remote module factories are used during the webpack build/SSR path. Await async factory results before proxy-wrapping, return a wrapper factory for exposeModuleFactory, and preserve class constructor semantics via Proxy apply/construct traps. +- Updated dependencies [92afef1] + - @module-federation/runtime-core@2.9.1 + - @module-federation/enhanced@2.9.1 + - @module-federation/runtime@2.9.1 + - @module-federation/node@2.7.51 + - @module-federation/webpack-bundler-runtime@2.9.1 + - @module-federation/sdk@2.9.1 + ## 8.8.74 ### Patch Changes diff --git a/packages/nextjs-mf/package.json b/packages/nextjs-mf/package.json index cadb59e46d2..5bffd1da9af 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.74", + "version": "8.8.76", "license": "MIT", "main": "dist/src/index.js", "module": "dist/src/index.mjs", diff --git a/packages/node/CHANGELOG.md b/packages/node/CHANGELOG.md index 74c61856cbd..c2840cd181d 100644 --- a/packages/node/CHANGELOG.md +++ b/packages/node/CHANGELOG.md @@ -1,5 +1,24 @@ # @module-federation/node +## 2.7.52 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + - @module-federation/runtime@2.9.2 + - @module-federation/sdk@2.9.2 + +## 2.7.51 + +### Patch Changes + +- @module-federation/enhanced@2.9.1 +- @module-federation/runtime@2.9.1 +- @module-federation/sdk@2.9.1 + ## 2.7.50 ### Patch Changes diff --git a/packages/node/package.json b/packages/node/package.json index 41d7828b9ba..1ba226cecd4 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,7 +1,7 @@ { "public": true, "name": "@module-federation/node", - "version": "2.7.50", + "version": "2.7.52", "type": "commonjs", "main": "./dist/src/index.js", "module": "./dist/src/index.mjs", diff --git a/packages/observability-plugin/CHANGELOG.md b/packages/observability-plugin/CHANGELOG.md index 71c9dbf4368..5a54a990cf7 100644 --- a/packages/observability-plugin/CHANGELOG.md +++ b/packages/observability-plugin/CHANGELOG.md @@ -1,5 +1,17 @@ # @module-federation/observability-plugin +## 2.6.2 + +### Patch Changes + +- @module-federation/sdk@2.9.2 + +## 2.6.1 + +### Patch Changes + +- @module-federation/sdk@2.9.1 + ## 2.6.0 ### Minor Changes diff --git a/packages/observability-plugin/package.json b/packages/observability-plugin/package.json index c4e1e16c7f9..5466045d57a 100644 --- a/packages/observability-plugin/package.json +++ b/packages/observability-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/observability-plugin", - "version": "2.6.0", + "version": "2.6.2", "author": "module-federation", "main": "./dist/index.js", "module": "./dist/esm/index.js", diff --git a/packages/playground/CHANGELOG.md b/packages/playground/CHANGELOG.md index 95334a07826..5720fbec355 100644 --- a/packages/playground/CHANGELOG.md +++ b/packages/playground/CHANGELOG.md @@ -1,5 +1,22 @@ # @module-federation/playground +## 0.1.2 + +### Patch Changes + +- Updated dependencies [4364cb6] + - @module-federation/bridge-react@2.9.2 + - @module-federation/runtime@2.9.2 + +## 0.1.1 + +### Patch Changes + +- 7ecde91: Defer loading the TypeScript compiler until the sandbox is run and allow the + federated build public path to be overridden for pinned or self-hosted assets. + - @module-federation/bridge-react@2.9.1 + - @module-federation/runtime@2.9.1 + ## 0.1.0 ### Minor Changes diff --git a/packages/playground/package.json b/packages/playground/package.json index 02925b5448f..7c13a99c40f 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/playground", - "version": "0.1.0", + "version": "0.1.2", "description": "Module Federation Playground", "homepage": "https://module-federation.io", "repository": { diff --git a/packages/playground/src/consumerCompiler.ts b/packages/playground/src/consumerCompiler.ts index 5a9edd14a8f..4abb1653d26 100644 --- a/packages/playground/src/consumerCompiler.ts +++ b/packages/playground/src/consumerCompiler.ts @@ -1,6 +1,7 @@ -import * as ts from 'typescript-compiler'; import { BRIDGE_RUNTIME_FILES } from './generated/bridgeRuntimeFiles'; +type TypeScriptCompiler = typeof import('typescript-compiler'); + export type CompilePlaygroundParams = { appCode: string; entryCode: string; @@ -76,7 +77,11 @@ function buildBridgeRuntimeFiles() { }; } -function transpileModule(filename: string, source: string) { +function transpileModule( + ts: TypeScriptCompiler, + filename: string, + source: string, +) { const result = ts.transpileModule(source, { fileName: filename, compilerOptions: { @@ -106,8 +111,12 @@ function transpileModule(filename: string, source: string) { return result.outputText; } -function createModuleFactory(filename: string, source: string) { - return `${JSON.stringify(filename)}: function(require, module, exports) {\n${transpileModule(filename, source)}\n}`; +function createModuleFactory( + ts: TypeScriptCompiler, + filename: string, + source: string, +) { + return `${JSON.stringify(filename)}: function(require, module, exports) {\n${transpileModule(ts, filename, source)}\n}`; } function normalizeRuntimeFileName(value: string) { @@ -205,6 +214,7 @@ function createBridgeRuntimeBootstrap() { export async function compilePlaygroundApp( params: CompilePlaygroundParams, ): Promise { + const ts = await import('typescript-compiler'); void params.rspackConfigCode; const runtimeModuleUrl = params.runtimeModuleUrl.trim(); @@ -219,9 +229,9 @@ export async function compilePlaygroundApp( const runtimePackageName = params.runtimePackageName.trim() || '@module-federation/runtime'; const factories = [ - createModuleFactory(APP_FILE, params.appCode), - createModuleFactory(runtimeFileName, params.mfCode), - createModuleFactory(ENTRY_FILE, params.entryCode), + createModuleFactory(ts, APP_FILE, params.appCode), + createModuleFactory(ts, runtimeFileName, params.mfCode), + createModuleFactory(ts, ENTRY_FILE, params.entryCode), ].join(',\n'); return `(async function() { diff --git a/packages/retry-plugin/CHANGELOG.md b/packages/retry-plugin/CHANGELOG.md index a4d06319705..2b07af96128 100644 --- a/packages/retry-plugin/CHANGELOG.md +++ b/packages/retry-plugin/CHANGELOG.md @@ -1,5 +1,19 @@ # @module-federation/retry-plugin +## 2.9.2 + +### Patch Changes + +- @module-federation/runtime@2.9.2 +- @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/runtime@2.9.1 +- @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/retry-plugin/package.json b/packages/retry-plugin/package.json index 06b7db12a11..b436573f46a 100644 --- a/packages/retry-plugin/package.json +++ b/packages/retry-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/retry-plugin", - "version": "2.9.0", + "version": "2.9.2", "author": "danpeen ", "main": "./dist/index.js", "module": "./dist/esm/index.js", diff --git a/packages/rsbuild-plugin/CHANGELOG.md b/packages/rsbuild-plugin/CHANGELOG.md index 2003b2e59b2..3945f8ca1c9 100644 --- a/packages/rsbuild-plugin/CHANGELOG.md +++ b/packages/rsbuild-plugin/CHANGELOG.md @@ -1,5 +1,24 @@ # @module-federation/rsbuild-plugin +## 2.9.2 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + - @module-federation/node@2.7.52 + - @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/enhanced@2.9.1 +- @module-federation/node@2.7.51 +- @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/rsbuild-plugin/package.json b/packages/rsbuild-plugin/package.json index 09b9302ddf6..5c6363d0cab 100644 --- a/packages/rsbuild-plugin/package.json +++ b/packages/rsbuild-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/rsbuild-plugin", - "version": "2.9.0", + "version": "2.9.2", "description": "Module Federation plugin for Rsbuild", "homepage": "https://module-federation.io", "bugs": { diff --git a/packages/rspack/CHANGELOG.md b/packages/rspack/CHANGELOG.md index c476768caf9..ff1dfc0a715 100644 --- a/packages/rspack/CHANGELOG.md +++ b/packages/rspack/CHANGELOG.md @@ -1,5 +1,32 @@ # @module-federation/rspack +## 2.9.2 + +### Patch Changes + +- Updated dependencies [000f3fa] +- Updated dependencies [7f0ac8b] + - @module-federation/dts-plugin@2.9.2 + - @module-federation/manifest@2.9.2 + - @module-federation/runtime-tools@2.9.2 + - @module-federation/inject-external-runtime-core-plugin@2.9.2 + - @module-federation/sdk@2.9.2 + - @module-federation/managers@2.9.2 + - @module-federation/bridge-react-webpack-plugin@2.9.2 + +## 2.9.1 + +### Patch Changes + +- Updated dependencies [796d6ad] + - @module-federation/dts-plugin@2.9.1 + - @module-federation/manifest@2.9.1 + - @module-federation/runtime-tools@2.9.1 + - @module-federation/inject-external-runtime-core-plugin@2.9.1 + - @module-federation/sdk@2.9.1 + - @module-federation/managers@2.9.1 + - @module-federation/bridge-react-webpack-plugin@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/rspack/package.json b/packages/rspack/package.json index 95091c68580..74454f404da 100644 --- a/packages/rspack/package.json +++ b/packages/rspack/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/rspack", - "version": "2.9.0", + "version": "2.9.2", "license": "MIT", "keywords": [ "Module Federation", @@ -33,7 +33,7 @@ "@module-federation/sdk": "workspace:*" }, "devDependencies": { - "@rspack/core": "^1.0.2", + "@rspack/core": "2.1.10", "typescript": "7.0.2" }, "exports": { diff --git a/packages/rspress-plugin/CHANGELOG.md b/packages/rspress-plugin/CHANGELOG.md index 55f02ada30b..9e4f94f94b2 100644 --- a/packages/rspress-plugin/CHANGELOG.md +++ b/packages/rspress-plugin/CHANGELOG.md @@ -1,5 +1,26 @@ # @module-federation/rspress-plugin +## 2.9.2 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + - @module-federation/rsbuild-plugin@2.9.2 + - @module-federation/sdk@2.9.2 + - @module-federation/error-codes@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/enhanced@2.9.1 +- @module-federation/rsbuild-plugin@2.9.1 +- @module-federation/sdk@2.9.1 +- @module-federation/error-codes@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/rspress-plugin/package.json b/packages/rspress-plugin/package.json index 148f5046080..192fe876d22 100644 --- a/packages/rspress-plugin/package.json +++ b/packages/rspress-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/rspress-plugin", - "version": "2.9.0", + "version": "2.9.2", "type": "module", "description": "Module Federation plugin for Rspress", "keywords": [ diff --git a/packages/rstest/CHANGELOG.md b/packages/rstest/CHANGELOG.md index 614bf1e9e8a..21272635c0f 100644 --- a/packages/rstest/CHANGELOG.md +++ b/packages/rstest/CHANGELOG.md @@ -1,5 +1,24 @@ # @module-federation/rstest +## 2.9.2 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + - @module-federation/node@2.7.52 + - @module-federation/sdk@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/enhanced@2.9.1 +- @module-federation/node@2.7.51 +- @module-federation/sdk@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/rstest/package.json b/packages/rstest/package.json index ebd8e3f05a7..03d794ff596 100644 --- a/packages/rstest/package.json +++ b/packages/rstest/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/rstest", - "version": "2.9.0", + "version": "2.9.2", "description": "Module Federation plugin for Rstest.", "homepage": "https://module-federation.io", "bugs": { diff --git a/packages/runtime-core/CHANGELOG.md b/packages/runtime-core/CHANGELOG.md index d1691473e99..37c1a7ab775 100644 --- a/packages/runtime-core/CHANGELOG.md +++ b/packages/runtime-core/CHANGELOG.md @@ -1,5 +1,23 @@ # @module-federation/runtime +## 2.9.2 + +### Patch Changes + +- 47d9b46: Import `ResourceLoadContext` in the remote handler so the published + `remote/index.d.ts` declares it. Consumers that type-check dependencies with + `skipLibCheck: false` no longer get TS2304. + - @module-federation/sdk@2.9.2 + - @module-federation/error-codes@2.9.2 + +## 2.9.1 + +### Patch Changes + +- 92afef1: Clear rejected remote-entry loading promises from `globalLoading` so a later independent request can start a fresh load. + - @module-federation/sdk@2.9.1 + - @module-federation/error-codes@2.9.1 + ## 2.9.0 ### Minor Changes diff --git a/packages/runtime-core/__tests__/runtime-infer-share-coverage.spec.ts b/packages/runtime-core/__tests__/runtime-infer-share-coverage.spec.ts new file mode 100644 index 00000000000..1feb32dacc1 --- /dev/null +++ b/packages/runtime-core/__tests__/runtime-infer-share-coverage.spec.ts @@ -0,0 +1,246 @@ +import { beforeEach, describe, expect, it } from '@rstest/core'; +import { ModuleFederation } from '../src/core'; +import { resetFederationGlobalInfo } from '../src/global'; +import type { Shared, ShareArgs } from '../src/type'; +import { getRegisteredShare, shouldUseTreeShaking } from '../src/utils/share'; +import { SyncWaterfallHook } from '../src/utils/hooks'; + +type LodashLike = { + chunk?: (...args: unknown[]) => unknown; + debounce?: (...args: unknown[]) => unknown; + __source?: string; +}; + +const SHARED_VERSION = '4.17.21'; +const PKG = 'lodash-es'; + +const chunkFn = () => ['chunked']; +const debounceFn = () => undefined; + +function createShareArgs(options: { + from: string; + usedExports: string[]; + providedExports?: string[]; + omitProviderExports?: boolean; +}): ShareArgs { + const pruned: LodashLike = { __source: `${options.from}:pruned` }; + if (options.usedExports.includes('chunk')) { + pruned.chunk = chunkFn; + } + if (options.usedExports.includes('debounce')) { + pruned.debounce = debounceFn; + } + + const full: LodashLike = { + chunk: chunkFn, + debounce: debounceFn, + __source: `${options.from}:full`, + }; + + return { + version: SHARED_VERSION, + shareConfig: { + requiredVersion: SHARED_VERSION, + singleton: false, + eager: false, + strictVersion: false, + }, + strategy: 'version-first', + get: () => Promise.resolve(() => full), + treeShaking: { + mode: 'runtime-infer', + ...(options.omitProviderExports + ? {} + : { + usedExports: options.usedExports, + providedExports: options.providedExports ?? options.usedExports, + }), + get: () => Promise.resolve(() => pruned), + }, + }; +} + +function createApp( + name: string, + usedExports: string[], + shareOptions?: Partial[0]>, +) { + return new ModuleFederation({ + name, + remotes: [], + shareStrategy: 'version-first', + shared: { + [PKG]: createShareArgs({ + from: name, + usedExports, + ...shareOptions, + }), + }, + }); +} + +async function loadLodash( + mf: ModuleFederation, + usedExports: string[], +): Promise { + const factory = await mf.loadShare(PKG, { + customShareInfo: { + treeShaking: { + usedExports, + }, + }, + }); + expect(factory).toBeTruthy(); + return factory!(); +} + +function assertHasExports(lib: LodashLike, usedExports: string[]) { + for (const exportName of usedExports) { + expect(typeof lib[exportName as keyof LodashLike]).toBe('function'); + } +} + +describe('runtime-infer shared export coverage', () => { + beforeEach(() => { + resetFederationGlobalInfo(); + }); + + it.each([ + { firstName: 'a-host', secondName: 'z-remote' }, + { firstName: 'z-host', secondName: 'a-remote' }, + ])( + 'serves a covering tree-shaken variant or the full fallback regardless of app-name order ($firstName then $secondName)', + async ({ firstName, secondName }) => { + const first = createApp(firstName, ['chunk']); + const second = createApp(secondName, ['debounce']); + + second.initShareScopeMap('default', first.shareScopeMap.default, { + hostShareScopeMap: first.shareScopeMap, + }); + first.initializeSharing('default', { from: 'build' }); + second.initializeSharing('default', { from: 'build' }); + + const firstLib = await loadLodash(first, ['chunk']); + const secondLib = await loadLodash(second, ['debounce']); + + assertHasExports(firstLib, ['chunk']); + assertHasExports(secondLib, ['debounce']); + expect( + firstLib.__source === `${firstName}:pruned` || + firstLib.__source?.endsWith(':full'), + ).toBe(true); + expect( + secondLib.__source === `${secondName}:pruned` || + secondLib.__source?.endsWith(':full'), + ).toBe(true); + }, + ); + + it('falls back to the full getter when the registered provider omits export coverage', async () => { + const host = createApp('a-host', ['chunk'], { omitProviderExports: true }); + const remote = createApp('z-remote', ['debounce'], { + omitProviderExports: true, + }); + + remote.initShareScopeMap('default', host.shareScopeMap.default, { + hostShareScopeMap: host.shareScopeMap, + }); + host.initializeSharing('default', { from: 'build' }); + remote.initializeSharing('default', { from: 'build' }); + + const hostLib = await loadLodash(host, ['chunk']); + const remoteLib = await loadLodash(remote, ['debounce']); + + assertHasExports(hostLib, ['chunk']); + assertHasExports(remoteLib, ['debounce']); + expect(hostLib.__source?.endsWith(':full')).toBe(true); + expect(remoteLib.__source?.endsWith(':full')).toBe(true); + }); + + it('prefers providedExports over usedExports when deciding coverage', () => { + expect( + shouldUseTreeShaking( + { + mode: 'runtime-infer', + usedExports: ['chunk'], + providedExports: ['debounce'], + }, + ['debounce'], + ), + ).toBe(true); + expect( + shouldUseTreeShaking( + { + mode: 'runtime-infer', + usedExports: ['debounce'], + providedExports: ['chunk'], + }, + ['debounce'], + ), + ).toBe(false); + }); + + it('does not select a disjoint tree-shaken factory from getRegisteredShare', () => { + const resolveShare = new SyncWaterfallHook<{ + shareScopeMap: Record; + scope: string; + pkgName: string; + version: string; + shareInfo: Shared; + GlobalFederation: unknown; + resolver: () => { shared: Shared; useTreesShaking: boolean } | undefined; + }>('resolveShare'); + + const winner: Shared = { + version: SHARED_VERSION, + from: 'z-remote', + get: () => + Promise.resolve(() => ({ debounce: debounceFn, __source: 'full' })), + shareConfig: { + requiredVersion: SHARED_VERSION, + singleton: false, + eager: false, + strictVersion: false, + }, + scope: ['default'], + useIn: [], + deps: [], + strategy: 'version-first', + treeShaking: { + mode: 'runtime-infer', + usedExports: ['debounce'], + providedExports: ['debounce'], + get: () => + Promise.resolve(() => ({ + debounce: debounceFn, + __source: 'z-remote:pruned', + })), + }, + }; + + const consumer: Shared = { + ...winner, + from: 'a-host', + treeShaking: { + mode: 'runtime-infer', + usedExports: ['chunk'], + }, + }; + + const result = getRegisteredShare( + { + default: { + [PKG]: { + [SHARED_VERSION]: winner, + }, + }, + }, + PKG, + consumer, + resolveShare as never, + ); + + expect(result?.shared).toBe(winner); + expect(result?.useTreesShaking).toBe(false); + }); +}); diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index d12538df7e8..a9e0649a640 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/runtime-core", - "version": "2.9.0", + "version": "2.9.2", "type": "module", "author": "zhouxiao ", "main": "./dist/index.cjs", diff --git a/packages/runtime-core/src/remote/index.ts b/packages/runtime-core/src/remote/index.ts index 4bb4d3db0fe..e9d4a6ac166 100644 --- a/packages/runtime-core/src/remote/index.ts +++ b/packages/runtime-core/src/remote/index.ts @@ -23,6 +23,7 @@ import { RemoteInfo, RemoteEntryExports, CallFrom, + ResourceLoadContext, } from '../type'; import { ModuleFederation } from '../core'; import { diff --git a/packages/runtime-core/src/shared/index.ts b/packages/runtime-core/src/shared/index.ts index 95e3a33966a..32d11863564 100644 --- a/packages/runtime-core/src/shared/index.ts +++ b/packages/runtime-core/src/shared/index.ts @@ -34,7 +34,8 @@ import { getTargetSharedOptions, getGlobalShareScope, directShare, - shouldUseTreeShaking, + isTreeShakingRequested, + hasDisjointTreeShakenExports, addUseIn, } from '../utils/share'; import { @@ -393,7 +394,7 @@ export class SharedHandler { }); return false; } - const _useTreeShaking = shouldUseTreeShaking( + const _useTreeShaking = isTreeShakingRequested( resolvedShareOptions.treeShaking, ); const targetShared = directShare(resolvedShareOptions, _useTreeShaking); @@ -511,7 +512,8 @@ export class SharedHandler { !activeVersion.loaded && (Boolean(!eager) !== !activeVersionEager ? eager - : hostName > versions[version].from)), + : hostName > versions[version].from) && + !hasDisjointTreeShakenExports(existingShared, shared)), ); if (shouldReplace) { versions[version] = shared; diff --git a/packages/runtime-core/src/type/config.ts b/packages/runtime-core/src/type/config.ts index ae0f26bf8f8..366d9a80c3b 100644 --- a/packages/runtime-core/src/type/config.ts +++ b/packages/runtime-core/src/type/config.ts @@ -67,6 +67,11 @@ export interface SharedConfig { export type TreeShakingArgs = { usedExports?: string[]; + /** + * Exports actually present in the provider's tree-shaken bundle. + * Preferred over `usedExports` when deciding coverage for `runtime-infer`. + */ + providedExports?: string[]; get?: SharedGetter; lib?: () => Module; status?: TreeShakingStatus; diff --git a/packages/runtime-core/src/utils/share.ts b/packages/runtime-core/src/utils/share.ts index d0179294c52..095628ffd4e 100644 --- a/packages/runtime-core/src/utils/share.ts +++ b/packages/runtime-core/src/utils/share.ts @@ -117,6 +117,72 @@ export function formatShareConfigs( return { allShareInfos, newShareInfos }; } +export function isTreeShakingRequested(treeShaking?: TreeShakingArgs): boolean { + if (!treeShaking) { + return false; + } + if (treeShaking.status === TreeShakingStatus.NO_USE) { + return false; + } + if (treeShaking.status === TreeShakingStatus.CALCULATED) { + return true; + } + return treeShaking.mode === 'runtime-infer'; +} + +export function getOfferedExports( + treeShaking?: TreeShakingArgs, +): string[] | undefined { + if (!treeShaking) { + return undefined; + } + if (treeShaking.providedExports && treeShaking.providedExports.length > 0) { + return treeShaking.providedExports; + } + if (treeShaking.usedExports && treeShaking.usedExports.length > 0) { + return treeShaking.usedExports; + } + return undefined; +} + +const isMatchUsedExports = ( + treeShaking?: TreeShakingArgs, + usedExports?: string[], +) => { + if (!treeShaking || !usedExports || usedExports.length === 0) { + return false; + } + + const offeredExports = getOfferedExports(treeShaking); + + if (!offeredExports) { + return false; + } + + return usedExports.every((exportName) => offeredExports.includes(exportName)); +}; + +export function hasDisjointTreeShakenExports( + existing?: Shared, + incoming?: Shared, +): boolean { + if (!existing?.treeShaking || !incoming?.treeShaking) { + return false; + } + const existingOffered = getOfferedExports(existing.treeShaking); + const incomingOffered = getOfferedExports(incoming.treeShaking); + if (!existingOffered || !incomingOffered) { + return false; + } + const incomingCoversExisting = existingOffered.every((exportName) => + incomingOffered.includes(exportName), + ); + const existingCoversIncoming = incomingOffered.every((exportName) => + existingOffered.includes(exportName), + ); + return !incomingCoversExisting && !existingCoversIncoming; +} + export function shouldUseTreeShaking( treeShaking?: TreeShakingArgs, usedExports?: string[], @@ -134,8 +200,8 @@ export function shouldUseTreeShaking( } if (mode === 'runtime-infer') { - if (!usedExports) { - return true; + if (!usedExports || usedExports.length === 0) { + return false; } return isMatchUsedExports(treeShaking, usedExports); } @@ -209,27 +275,6 @@ const isLoading = (shared: { return Boolean(shared.loading); }; -const isMatchUsedExports = ( - treeShaking?: TreeShakingArgs, - usedExports?: string[], -) => { - if (!treeShaking || !usedExports) { - return false; - } - - const { usedExports: treeShakingUsedExports } = treeShaking; - - if (!treeShakingUsedExports) { - return false; - } - - if (usedExports.every((e) => treeShakingUsedExports.includes(e))) { - return true; - } - - return false; -}; - function findSingletonVersionOrderByVersion( shareScopeMap: ShareScopeMap, scope: string, @@ -240,11 +285,22 @@ function findSingletonVersionOrderByVersion( useTreesShaking: boolean; } { const versions = shareScopeMap[scope][pkgName]; + const consumerUsedExports = treeShaking?.usedExports; let version = ''; - let useTreesShaking = shouldUseTreeShaking(treeShaking); + let useTreesShaking = isTreeShakingRequested(treeShaking); + const coversConsumer = (versionKey: string): boolean => + shouldUseTreeShaking( + versions[versionKey]?.treeShaking, + consumerUsedExports, + ); // return false means use prev version const callback = function (prev: string, cur: string): boolean { if (useTreesShaking) { + const prevCovers = coversConsumer(prev); + const curCovers = coversConsumer(cur); + if (prevCovers !== curCovers) { + return curCovers; + } if (!versions[prev].treeShaking) { return true; } @@ -258,7 +314,7 @@ function findSingletonVersionOrderByVersion( if (useTreesShaking) { version = findVersion(shareScopeMap[scope][pkgName], callback); - if (version) { + if (version && coversConsumer(version)) { return { version, useTreesShaking, @@ -291,12 +347,23 @@ function findSingletonVersionOrderByLoaded( useTreesShaking: boolean; } { const versions = shareScopeMap[scope][pkgName]; + const consumerUsedExports = treeShaking?.usedExports; let version = ''; - let useTreesShaking = shouldUseTreeShaking(treeShaking); + let useTreesShaking = isTreeShakingRequested(treeShaking); + const coversConsumer = (versionKey: string): boolean => + shouldUseTreeShaking( + versions[versionKey]?.treeShaking, + consumerUsedExports, + ); // return false means use prev version const callback = function (prev: string, cur: string): boolean { if (useTreesShaking) { + const prevCovers = coversConsumer(prev); + const curCovers = coversConsumer(cur); + if (prevCovers !== curCovers) { + return curCovers; + } if (!versions[prev].treeShaking) { return true; } @@ -330,7 +397,7 @@ function findSingletonVersionOrderByLoaded( if (useTreesShaking) { version = findVersion(shareScopeMap[scope][pkgName], callback); - if (version) { + if (version && coversConsumer(version)) { return { version, useTreesShaking, @@ -387,8 +454,24 @@ export function getRegisteredShare( ) { const { requiredVersion } = shareConfig; const findShareFunction = getFindShareFunction(strategy); - const { version: maxOrSingletonVersion, useTreesShaking } = - findShareFunction(localShareScopeMap, sc, pkgName, treeShaking); + const { version: maxOrSingletonVersion } = findShareFunction( + localShareScopeMap, + sc, + pkgName, + treeShaking, + ); + const consumerUsedExports = treeShaking?.usedExports; + const withCoverage = (shared?: Shared, forceFull = false) => { + if (!shared) { + return; + } + return { + shared, + useTreesShaking: forceFull + ? false + : shouldUseTreeShaking(shared.treeShaking, consumerUsedExports), + }; + }; const defaultResolver = () => { const shared = localShareScopeMap[sc][pkgName][maxOrSingletonVersion]; @@ -409,43 +492,30 @@ export function getRegisteredShare( warn(msg); } } - return { - shared, - useTreesShaking, - }; + return withCoverage(shared); } else { if (requiredVersion === false || requiredVersion === '*') { - return { - shared, - useTreesShaking, - }; + return withCoverage(shared); } if (satisfy(maxOrSingletonVersion, requiredVersion)) { - return { - shared, - useTreesShaking, - }; + return withCoverage(shared); } - const _usedTreeShaking = shouldUseTreeShaking(treeShaking); - if (_usedTreeShaking) { + if (isTreeShakingRequested(treeShaking)) { for (const [versionKey, versionValue] of Object.entries( localShareScopeMap[sc][pkgName], )) { if ( !shouldUseTreeShaking( versionValue.treeShaking, - treeShaking?.usedExports, + consumerUsedExports, ) ) { continue; } if (satisfy(versionKey, requiredVersion)) { - return { - shared: versionValue, - useTreesShaking: _usedTreeShaking, - }; + return withCoverage(versionValue); } } } @@ -453,10 +523,7 @@ export function getRegisteredShare( localShareScopeMap[sc][pkgName], )) { if (satisfy(versionKey, requiredVersion)) { - return { - shared: versionValue, - useTreesShaking: false, - }; + return withCoverage(versionValue, true); } } } @@ -473,7 +540,11 @@ export function getRegisteredShare( loadContext, }; const resolveShared = resolveShare.emit(params) || params; - return resolveShared.resolver(); + const result = resolveShared.resolver(); + if (!result?.shared) { + return result; + } + return withCoverage(result.shared, result.useTreesShaking === false); } } } 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 c201bc179de..6991df7252c 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.9.2 + +### Patch Changes + +- @module-federation/runtime-tools@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/runtime-tools@2.9.1 + ## 2.9.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 05621080157..bbf6324f6a0 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.9.0", + "version": "2.9.2", "type": "module", "license": "MIT", "description": "A sdk for support module federation", diff --git a/packages/runtime-tools/CHANGELOG.md b/packages/runtime-tools/CHANGELOG.md index 65e668f50af..c5400d034fe 100644 --- a/packages/runtime-tools/CHANGELOG.md +++ b/packages/runtime-tools/CHANGELOG.md @@ -1,5 +1,19 @@ # @module-federation/runtime-tools +## 2.9.2 + +### Patch Changes + +- @module-federation/runtime@2.9.2 +- @module-federation/webpack-bundler-runtime@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/runtime@2.9.1 +- @module-federation/webpack-bundler-runtime@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/runtime-tools/package.json b/packages/runtime-tools/package.json index a98c1a0ff4a..5763cf651da 100644 --- a/packages/runtime-tools/package.json +++ b/packages/runtime-tools/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/runtime-tools", - "version": "2.9.0", + "version": "2.9.2", "type": "module", "author": "zhanghang ", "main": "./dist/index.cjs", diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index 0d4a65938a2..eda6ee078b6 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -1,5 +1,23 @@ # @module-federation/runtime +## 2.9.2 + +### Patch Changes + +- Updated dependencies [47d9b46] + - @module-federation/runtime-core@2.9.2 + - @module-federation/sdk@2.9.2 + - @module-federation/error-codes@2.9.2 + +## 2.9.1 + +### Patch Changes + +- Updated dependencies [92afef1] + - @module-federation/runtime-core@2.9.1 + - @module-federation/sdk@2.9.1 + - @module-federation/error-codes@2.9.1 + ## 2.9.0 ### Minor Changes diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 416d46aca70..e06bc59208f 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/runtime", - "version": "2.9.0", + "version": "2.9.2", "type": "module", "author": "zhouxiao ", "main": "./dist/index.cjs", diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index dba8442c251..ab2d92ed795 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -1,5 +1,9 @@ # @module-federation/sdk +## 2.9.2 + +## 2.9.1 + ## 2.9.0 ## 2.8.2 diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 6e4f6928940..b5b8a84030e 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/sdk", - "version": "2.9.0", + "version": "2.9.2", "type": "module", "license": "MIT", "description": "A sdk for support module federation", diff --git a/packages/storybook-addon/CHANGELOG.md b/packages/storybook-addon/CHANGELOG.md index 40f9c8a33b3..a30e9a4d459 100644 --- a/packages/storybook-addon/CHANGELOG.md +++ b/packages/storybook-addon/CHANGELOG.md @@ -1,5 +1,22 @@ # @module-federation/storybook-addon +## 6.0.21 + +### Patch Changes + +- Updated dependencies [412f62e] +- Updated dependencies [c130946] +- Updated dependencies [923b55d] + - @module-federation/enhanced@2.9.2 + - @module-federation/sdk@2.9.2 + +## 6.0.20 + +### Patch Changes + +- @module-federation/enhanced@2.9.1 +- @module-federation/sdk@2.9.1 + ## 6.0.19 ### Patch Changes diff --git a/packages/storybook-addon/package.json b/packages/storybook-addon/package.json index d9040056866..898477b82b1 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.19", + "version": "6.0.21", "description": "Storybook addon to consume remote module federated apps/components", "type": "module", "license": "MIT", @@ -65,7 +65,7 @@ }, "peerDependencies": { "@rsbuild/core": "^1.0.1 || ^2.0.0-0", - "@module-federation/sdk": "^2.9.0", + "@module-federation/sdk": "^2.9.2", "@nx/react": ">= 16.0.0", "@nx/webpack": ">= 16.0.0", "@nx/module-federation": ">= 16.0.0", diff --git a/packages/third-party-dts-extractor/CHANGELOG.md b/packages/third-party-dts-extractor/CHANGELOG.md index e1427990108..ee3ba657ebc 100644 --- a/packages/third-party-dts-extractor/CHANGELOG.md +++ b/packages/third-party-dts-extractor/CHANGELOG.md @@ -1,5 +1,9 @@ # @module-federation/third-party-dts-extractor +## 2.9.2 + +## 2.9.1 + ## 2.9.0 ## 2.8.2 diff --git a/packages/third-party-dts-extractor/package.json b/packages/third-party-dts-extractor/package.json index 4566fda622b..3ff2ce5da6f 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.9.0", + "version": "2.9.2", "files": [ "dist/", "README.md" diff --git a/packages/treeshake-frontend/CHANGELOG.md b/packages/treeshake-frontend/CHANGELOG.md index 2d40b264b55..6a6b0e6f12d 100644 --- a/packages/treeshake-frontend/CHANGELOG.md +++ b/packages/treeshake-frontend/CHANGELOG.md @@ -1,5 +1,9 @@ # @module-federation/treeshake-frontend +## 2.9.2 + +## 2.9.1 + ## 2.9.0 ## 2.8.2 diff --git a/packages/treeshake-frontend/package.json b/packages/treeshake-frontend/package.json index 05029bbe2f1..6911bfaf84b 100644 --- a/packages/treeshake-frontend/package.json +++ b/packages/treeshake-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/treeshake-frontend", - "version": "2.9.0", + "version": "2.9.2", "scripts": { "dev": "rsbuild dev", "build": "rsbuild build && rslib build", diff --git a/packages/treeshake-server/CHANGELOG.md b/packages/treeshake-server/CHANGELOG.md index c7dd5c5cbce..89b660c339d 100644 --- a/packages/treeshake-server/CHANGELOG.md +++ b/packages/treeshake-server/CHANGELOG.md @@ -1,5 +1,13 @@ # @module-federation/treeshake-server +## 2.9.2 + +### Patch Changes + +- 7f0ac8b: Upgrade Undici to 7.29.1 to include the latest 7.x security fixes while preserving Node 20 compatibility. + +## 2.9.1 + ## 2.9.0 ## 2.8.2 diff --git a/packages/treeshake-server/package.json b/packages/treeshake-server/package.json index 2ff147846db..3d44ecab4e0 100644 --- a/packages/treeshake-server/package.json +++ b/packages/treeshake-server/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/treeshake-server", - "version": "2.9.0", + "version": "2.9.2", "description": "Build service powered by Hono that installs dependencies, builds with Rspack, and uploads artifacts.", "main": "dist/index.js", "module": "dist/index.mjs", @@ -35,12 +35,12 @@ "@hono/node-server": "2.0.11", "@hono/zod-validator": "0.7.4", "dotenv": "16.4.5", - "hono": "4.13.1", + "hono": "4.13.5", "json-stable-stringify": "1.3.0", "nanoid": "5.1.16", "p-limit": "7.2.0", "pino": "10.1.0", - "undici": "7.29.0", + "undici": "7.29.1", "zod": "4.1.12" }, "devDependencies": { diff --git a/packages/utilities/CHANGELOG.md b/packages/utilities/CHANGELOG.md index c6a8642e56d..463b9911cc4 100644 --- a/packages/utilities/CHANGELOG.md +++ b/packages/utilities/CHANGELOG.md @@ -1,5 +1,17 @@ # @module-federation/utilities +## 3.1.104 + +### Patch Changes + +- @module-federation/sdk@2.9.2 + +## 3.1.103 + +### Patch Changes + +- @module-federation/sdk@2.9.1 + ## 3.1.102 ### Patch Changes diff --git a/packages/utilities/package.json b/packages/utilities/package.json index acc1661f1c8..6a8ae1a37f8 100644 --- a/packages/utilities/package.json +++ b/packages/utilities/package.json @@ -1,6 +1,6 @@ { "name": "@module-federation/utilities", - "version": "3.1.102", + "version": "3.1.104", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.mjs", "types": "./dist/types/index.d.ts", diff --git a/packages/webpack-bundler-runtime/CHANGELOG.md b/packages/webpack-bundler-runtime/CHANGELOG.md index 58791ac4579..900d049e6b5 100644 --- a/packages/webpack-bundler-runtime/CHANGELOG.md +++ b/packages/webpack-bundler-runtime/CHANGELOG.md @@ -1,5 +1,21 @@ # @module-federation/webpack-bundler-runtime +## 2.9.2 + +### Patch Changes + +- @module-federation/runtime@2.9.2 +- @module-federation/sdk@2.9.2 +- @module-federation/error-codes@2.9.2 + +## 2.9.1 + +### Patch Changes + +- @module-federation/runtime@2.9.1 +- @module-federation/sdk@2.9.1 +- @module-federation/error-codes@2.9.1 + ## 2.9.0 ### Patch Changes diff --git a/packages/webpack-bundler-runtime/package.json b/packages/webpack-bundler-runtime/package.json index 74eedcc8691..c7bd893b871 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.9.0", + "version": "2.9.2", "type": "module", "license": "MIT", "description": "Module Federation Runtime for webpack", diff --git a/packages/webpack-bundler-runtime/src/init.ts b/packages/webpack-bundler-runtime/src/init.ts index d8a7e9e2d7c..363c47ce6a9 100644 --- a/packages/webpack-bundler-runtime/src/init.ts +++ b/packages/webpack-bundler-runtime/src/init.ts @@ -5,6 +5,7 @@ import { } from '@module-federation/runtime'; import { ShareArgs } from '@module-federation/runtime/types'; import helpers from '@module-federation/runtime/helpers'; +import { getUsedExports } from './getUsedExports'; declare const FEDERATION_OPTIMIZE_NO_SHARED: boolean; @@ -45,6 +46,16 @@ export function init({ webpackRequire }: { webpackRequire: WebpackRequire }) { if ('get' in sharedArg) { sharedArg.treeShaking ||= {}; sharedArg.treeShaking.get = sharedArg.get; + const compiledUsedExports = getUsedExports( + webpackRequire, + sharedName, + ); + if ( + compiledUsedExports?.length && + !sharedArg.treeShaking.providedExports?.length + ) { + sharedArg.treeShaking.providedExports = compiledUsedExports; + } sharedArg.get = bundlerRuntime!.getSharedFallbackGetter({ shareKey: sharedName, factory: sharedArg.get, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9b49a93e0a..4302210502d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,8 +20,8 @@ importers: .: dependencies: adm-zip: - specifier: 0.6.0 - version: 0.6.0 + specifier: ^0.6.1 + version: 0.6.1 ansi-colors: specifier: 4.1.3 version: 4.1.3 @@ -56,8 +56,8 @@ importers: specifier: 0.14.1 version: 0.14.1 sharp: - specifier: ^0.35.0 - version: 0.35.0 + specifier: ^0.35.4 + version: 0.35.4(@types/node@20.19.5) storybook: specifier: 8.6.17 version: 8.6.17(prettier@3.8.1) @@ -68,8 +68,8 @@ importers: specifier: 0.28.17 version: 0.28.17(typescript@6.0.3) undici: - specifier: 7.29.0 - version: 7.29.0 + specifier: 7.29.1 + version: 7.29.1 unplugin: specifier: 3.0.0 version: 3.0.0 @@ -127,25 +127,25 @@ importers: version: 6.0.1(rollup@4.62.2) '@rslib/core': 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.2)(core-js@3.36.1)(typescript@6.0.3) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.9.1)(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) + specifier: 2.1.10 + version: 2.1.10(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(@rspack/dev-server@2.2.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(selfsigned@5.5.0)) '@rspack/core': - specifier: 1.3.9 - version: 1.3.9(@swc/helpers@0.5.13) + specifier: 2.1.10 + version: 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13) '@rspack/dev-server': - 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) + specifier: 2.2.1 + version: 2.2.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(selfsigned@5.5.0) '@rstest/core': specifier: ^0.10.6 - version: 0.10.6(@module-federation/runtime-tools@2.8.2)(core-js@3.36.1)(jsdom@20.0.3) + version: 0.10.6(@module-federation/runtime-tools@2.9.1)(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@6.0.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@2.1.10(@module-federation/runtime-tools@2.9.1)(@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@6.0.3) @@ -171,7 +171,7 @@ importers: 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) '@types/adm-zip': - specifier: 0.5.5 + specifier: ^0.5.5 version: 0.5.5 '@types/chrome': specifier: 0.0.277 @@ -238,7 +238,7 @@ importers: version: 11.0.0(webpack@5.104.1) css-loader: specifier: ^6.11.0 - version: 6.11.0(@rspack/core@1.3.9(@swc/helpers@0.5.13))(webpack@5.104.1) + version: 6.11.0(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(webpack@5.104.1) cypress: specifier: 14.3.3 version: 14.3.3 @@ -258,14 +258,14 @@ importers: specifier: ^2.13.4 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@6.0.3))(eslint@9.39.3(jiti@2.6.1)) + specifier: 2.32.0 + version: 2.32.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)) eslint-plugin-prettier: - specifier: 5.2.1 - version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@3.8.1) + specifier: 5.5.6 + version: 5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-react: specifier: 7.37.2 version: 7.37.2(eslint@9.39.3(jiti@2.6.1)) @@ -283,7 +283,7 @@ importers: version: 4.2.11 html-webpack-plugin: specifier: 5.6.2 - version: 5.6.2(@rspack/core@1.3.9(@swc/helpers@0.5.13))(webpack@5.104.1) + version: 5.6.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(webpack@5.104.1) husky: specifier: 8.0.3 version: 8.0.3 @@ -297,8 +297,8 @@ importers: specifier: 2.6.1 version: 2.6.1 js-yaml: - specifier: 4.3.1 - version: 4.3.1 + specifier: 4.3.2 + version: 4.3.2 jsonc-eslint-parser: specifier: ^3.1.0 version: 3.1.0 @@ -355,7 +355,7 @@ importers: 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.2)(core-js@3.36.1)(jsdom@20.0.3)) + version: 0.1.0(@rstest/core@0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.36.1)(jsdom@20.0.3)) serve: specifier: ^14.2.4 version: 14.2.5 @@ -382,7 +382,7 @@ importers: 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.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)) + version: 0.20.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(synckit@0.11.13)(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)) tslib: specifier: 2.8.1 version: 2.8.1 @@ -405,8 +405,8 @@ importers: specifier: 4.2.3 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: 3.2.6 - version: 3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@20.19.5)(jiti@2.6.1)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) + specifier: 4.1.11 + version: 4.1.11(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(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)) vue-tsc: specifier: ^2.2.10 version: 2.2.12(typescript@6.0.3) @@ -688,8 +688,8 @@ importers: specifier: 0.5.15 version: 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)) '@rspack/core': - specifier: ^1.0.2 - version: 1.3.9(@swc/helpers@0.5.23) + specifier: 2.1.10 + version: 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) '@rspack/plugin-react-refresh': specifier: ^0.7.5 version: 0.7.5(react-refresh@0.14.2) @@ -937,7 +937,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@26.2.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.2.0)(typescript@7.0.2)))(prettier@2.8.8)(typescript@7.0.2) + version: 0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(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) @@ -973,7 +973,7 @@ importers: version: 8.57.1 jest: specifier: ^29.6.3 - version: 29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)) + version: 29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) nodemon: specifier: ^3.1.9 version: 3.1.14 @@ -1028,7 +1028,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@26.2.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.2.0)(typescript@7.0.2)))(prettier@2.8.8)(typescript@7.0.2) + version: 0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(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) @@ -1064,7 +1064,7 @@ importers: version: 8.57.1 jest: specifier: ^29.6.3 - version: 29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)) + version: 29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) nodemon: specifier: ^3.1.9 version: 3.1.14 @@ -1091,7 +1091,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -1110,7 +1110,7 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) @@ -1152,7 +1152,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -1171,7 +1171,7 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) @@ -1222,10 +1222,10 @@ importers: version: link:../../../packages/storybook-addon '@rsbuild/plugin-react': specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(webpack-hot-middleware@2.26.1) + version: 1.4.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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.2.0))(typescript@5.9.3) + version: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(typescript@5.9.3) '@types/react': specifier: ^18.3.11 version: 18.3.28 @@ -1249,7 +1249,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -1268,7 +1268,7 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) @@ -1323,10 +1323,10 @@ importers: version: link:../../../packages/rsbuild-plugin '@rsbuild/plugin-react': specifier: ^1.4.5 - version: 1.4.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(webpack-hot-middleware@2.26.1) + version: 1.4.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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.2.0))(typescript@5.9.3) + version: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(typescript@5.9.3) '@types/react': specifier: ^18.3.11 version: 18.3.28 @@ -1341,7 +1341,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -1360,7 +1360,7 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) @@ -1402,7 +1402,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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,7 +1421,7 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) @@ -1463,7 +1463,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -1482,7 +1482,7 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) @@ -1524,7 +1524,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -1543,7 +1543,7 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) @@ -1585,7 +1585,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -1604,7 +1604,7 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) @@ -1880,7 +1880,7 @@ importers: devDependencies: '@rslib/core': specifier: ^0.23.2 - version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2) apps/react-ts-host: dependencies: @@ -2054,10 +2054,10 @@ importers: version: link:../../../packages/rsbuild-plugin '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@types/react': specifier: ^18.2.79 version: 18.3.28 @@ -2066,7 +2066,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.41(@swc/helpers@0.5.23))(@types/node@26.2.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.6.2)(typescript@5.9.3)) typescript: specifier: ^5.4.5 version: 5.9.3 @@ -2103,10 +2103,10 @@ importers: version: link:../../../packages/rsbuild-plugin '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@types/react': specifier: ^18.2.79 version: 18.3.28 @@ -2115,7 +2115,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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) typescript: specifier: 7.0.2 version: 7.0.2 @@ -2140,13 +2140,13 @@ importers: version: link:../../../packages/rsbuild-plugin '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)) + version: 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) typescript: specifier: 7.0.2 version: 7.0.2 @@ -2180,10 +2180,10 @@ importers: version: 1.24.0(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@0.7.5(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(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) @@ -2226,10 +2226,10 @@ importers: devDependencies: '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@types/react': specifier: ^18.2.79 version: 18.3.28 @@ -2257,16 +2257,16 @@ importers: devDependencies: '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)) + version: 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2.0)(typescript@7.0.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) typescript: specifier: 7.0.2 version: 7.0.2 @@ -2295,15 +2295,15 @@ importers: 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) + specifier: 6.30.6 + version: 6.30.6(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.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@types/react': specifier: ^18.2.79 version: 18.3.28 @@ -2340,10 +2340,10 @@ importers: devDependencies: '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@types/react': specifier: ^19.0.0 version: 19.2.14 @@ -2383,10 +2383,10 @@ importers: devDependencies: '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@types/react': specifier: ^18.2.79 version: 18.3.28 @@ -2410,10 +2410,10 @@ importers: version: link:../../packages/storybook-addon '@rsbuild/plugin-react': specifier: ^2.1.0 - version: 2.1.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@rslib/core': specifier: ^0.23.2 - version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2) '@types/react': specifier: ^18.3.11 version: 18.3.28 @@ -2431,10 +2431,10 @@ importers: version: 8.6.17(prettier@3.8.1) storybook-addon-rslib: specifier: ^1.0.1 - version: 1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2))(storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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) + version: 1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2))(storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.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.62.2)(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)) + version: 1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.62.2)(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/rstest-federation-host: devDependencies: @@ -2446,19 +2446,19 @@ importers: version: link:../../packages/rstest '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@rstest/browser': specifier: 0.11.6 - version: 0.11.6(@rstest/core@0.11.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3))(playwright@1.57.0) + version: 0.11.6(@rstest/core@0.11.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3))(playwright@1.57.0) '@rstest/browser-react': specifier: 0.11.6 - version: 0.11.6(@rstest/core@0.11.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 0.11.6(@rstest/core@0.11.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@rstest/core': specifier: 0.11.6 - version: 0.11.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3) + version: 0.11.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) '@testing-library/dom': specifier: 10.4.1 version: 10.4.1 @@ -2503,10 +2503,10 @@ importers: version: link:../../packages/rsbuild-plugin '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@types/react': specifier: 18.3.11 version: 18.3.11 @@ -2533,10 +2533,10 @@ importers: version: link:../../packages/rsbuild-plugin '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@types/react': specifier: 18.3.11 version: 18.3.11 @@ -2684,10 +2684,10 @@ importers: devDependencies: '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) apps/shared-tree-shaking/no-server/host: dependencies: @@ -2696,7 +2696,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -2715,13 +2715,13 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.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.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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.8.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.9.1)(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 @@ -2766,7 +2766,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -2785,13 +2785,13 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) '@modern-js/plugin-server': specifier: 2.68.0 - version: 2.68.0(@babel/traverse@7.29.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.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.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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 @@ -2833,7 +2833,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -2852,16 +2852,16 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) '@modern-js/plugin-server': specifier: 2.68.0 - version: 2.68.0(@babel/traverse@7.29.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.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.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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.8.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.9.1)(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 @@ -2909,7 +2909,7 @@ importers: version: 7.28.2 '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -2928,13 +2928,13 @@ importers: version: 2.59.0(typescript@7.0.2) '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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))) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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@7.0.2) '@modern-js/plugin-server': specifier: 2.68.0 - version: 2.68.0(@babel/traverse@7.29.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.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.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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 @@ -2979,13 +2979,10 @@ importers: version: link:../../packages/runtime '@rsbuild/plugin-sass': specifier: ^2.0.1 - version: 2.0.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) + version: 2.0.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) '@rspress/core': specifier: 2.0.14 - version: 2.0.14(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.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) - framer-motion: - specifier: ^10.0.0 - version: 10.18.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 2.0.14(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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) react: specifier: 19.1.1 version: 19.1.1 @@ -3013,7 +3010,7 @@ importers: version: 19.2.3(@types/react@19.2.14) zephyr-rspress-plugin: specifier: ^1.2.2 - version: 1.2.2(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(@rspress/core@2.0.14(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.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))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)) + version: 1.2.2(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(@rspress/core@2.0.14(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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: @@ -3057,7 +3054,7 @@ importers: version: link:../../runtime-core '@rsbuild/plugin-react': specifier: 2.1.0 - version: 2.1.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + version: 2.1.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) '@testing-library/jest-dom': specifier: 6.6.3 version: 6.6.3 @@ -3072,16 +3069,16 @@ importers: version: 18.3.0 '@vitejs/plugin-react': specifier: ^4.3.3 - version: 4.7.0(vite@5.4.21(@types/node@26.2.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)) + version: 4.7.0(vite@5.4.21(@types/node@26.6.2)(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.2.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)) + version: 5.2.4(vite@5.4.21(@types/node@26.6.2)(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.2.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)) + version: 4.2.0(vite@5.4.21(@types/node@26.6.2)(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.13.1 - version: 4.13.1 + specifier: 4.13.5 + version: 4.13.5 react: specifier: 18.3.1 version: 18.3.1 @@ -3099,7 +3096,7 @@ importers: version: 7.0.2 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@26.2.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + version: 5.4.21(@types/node@26.6.2)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) packages/bridge/bridge-react-webpack-plugin: dependencies: @@ -3112,7 +3109,7 @@ importers: version: 7.0.2 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@26.2.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + version: 5.4.21(@types/node@26.6.2)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) packages/bridge/bridge-shared: devDependencies: @@ -3152,25 +3149,25 @@ importers: devDependencies: '@rsbuild/plugin-babel': specifier: 2.0.1 - version: 2.0.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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)) + version: 2.0.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) + version: 2.0.1(@babel/core@7.29.7)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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.2.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)) + version: 5.2.4(vite@5.4.21(@types/node@26.6.2)(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.2.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)) + version: 4.2.0(vite@5.4.21(@types/node@26.6.2)(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: 7.0.2 version: 7.0.2 vite: specifier: ^5.4.21 - version: 5.4.21(@types/node@26.2.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + version: 5.4.21(@types/node@26.6.2)(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@7.0.2) @@ -3278,8 +3275,8 @@ importers: specifier: 7.0.2 version: 7.0.2 vitest: - specifier: 3.2.6 - version: 3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@20.19.5)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) + specifier: 4.1.11 + version: 4.1.11(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0)) packages/cli: dependencies: @@ -3332,7 +3329,7 @@ importers: devDependencies: '@rslib/core': specifier: ^0.23.2 - version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2) '@types/glob': specifier: 7.2.0 version: 7.2.0 @@ -3358,14 +3355,14 @@ importers: specifier: workspace:* version: link:../third-party-dts-extractor adm-zip: - specifier: 0.6.0 - version: 0.6.0 + specifier: ^0.6.1 + version: 0.6.1 isomorphic-ws: specifier: 5.0.0 version: 5.0.0(ws@8.21.3) undici: - specifier: 7.29.0 - version: 7.29.0 + specifier: 7.29.1 + version: 7.29.1 ws: specifier: 8.21.3 version: 8.21.3 @@ -3375,7 +3372,7 @@ importers: version: link:../runtime '@rstest/core': specifier: ^0.10.6 - version: 0.10.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3) + version: 0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) '@types/ws': specifier: 8.5.12 version: 8.5.12 @@ -3511,7 +3508,7 @@ importers: devDependencies: '@rslib/core': specifier: ^0.23.2 - version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2) typescript: specifier: 7.0.2 version: 7.0.2 @@ -3565,7 +3562,7 @@ importers: devDependencies: '@rslib/core': 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.2)(core-js@3.49.0)(typescript@6.0.3) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@6.0.3) '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -3637,7 +3634,7 @@ importers: version: 0.7.28 '@rslib/core': 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.2)(core-js@3.49.0)(typescript@6.0.3) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@6.0.3) '@types/node': specifier: ^20.0.0 version: 20.19.5 @@ -3664,7 +3661,7 @@ importers: version: 0.13.0 '@rslib/core': 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.2)(core-js@3.49.0)(typescript@6.0.3) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@6.0.3) '@types/node': specifier: ^20.0.0 version: 20.19.5 @@ -3725,10 +3722,10 @@ importers: 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.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.62.2)(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.2.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) + 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.62.2)(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.6.2)(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.2.0)(typescript@7.0.2) + version: 2.70.5(@types/node@26.6.2)(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.41(@swc/helpers@0.5.17))(esbuild@0.25.5)(webpack-cli@5.1.4)))(react@19.2.7) @@ -3746,10 +3743,10 @@ importers: version: 1.4.5(@rsbuild/core@1.3.21)(webpack-hot-middleware@2.26.1) '@rslib/core': specifier: 0.23.2 - version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0)(jsdom@20.0.3) + version: 0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) '@types/react': specifier: ^18.3.11 version: 18.3.28 @@ -3801,34 +3798,34 @@ importers: devDependencies: '@modern-js/app-tools': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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.2)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.2.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)) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.9.1)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.6.2)(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.2.0)(typescript@7.0.2) + version: 2.70.5(@types/node@26.6.2)(typescript@7.0.2) '@modern-js/runtime': specifier: 3.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(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.2)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.9.1)(@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.5.0 - version: 3.5.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.5.0(@module-federation/runtime-tools@2.9.1)(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.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@rsbuild/plugin-react': specifier: 1.4.5 - version: 1.4.5(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.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.9.1)(core-js@3.49.0))(webpack-hot-middleware@2.26.1) '@rslib/core': specifier: 0.23.2 - version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2) '@rspack/core': specifier: 2.0.6 - version: 2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17) + version: 2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17) '@rstest/core': specifier: ^0.10.6 - version: 0.10.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3) + version: 0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) '@types/react': specifier: ^18.3.11 version: 18.3.28 @@ -3848,8 +3845,8 @@ importers: packages/native-federation-tests: dependencies: adm-zip: - specifier: ^0.6.0 - version: 0.6.0 + specifier: ^0.6.1 + version: 0.6.1 ansi-colors: specifier: ^4.1.3 version: 4.1.3 @@ -3861,14 +3858,14 @@ importers: version: 9.2.1 tsdown: specifier: 0.20.3 - version: 0.20.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)) + version: 0.20.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(synckit@0.11.13)(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.2)(core-js@3.49.0)(jsdom@20.0.3) + version: 0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) directory-tree: specifier: 3.5.2 version: 3.5.2 @@ -3879,8 +3876,8 @@ importers: packages/native-federation-typescript: dependencies: adm-zip: - specifier: ^0.6.0 - version: 0.6.0 + specifier: ^0.6.1 + version: 0.6.1 ansi-colors: specifier: ^4.1.3 version: 4.1.3 @@ -3899,7 +3896,7 @@ importers: devDependencies: '@rstest/core': specifier: ^0.10.6 - version: 0.10.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3) + version: 0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) directory-tree: specifier: 3.5.2 version: 3.5.2 @@ -3963,7 +3960,7 @@ importers: version: 18.3.7(@types/react@18.3.28) tsdown: specifier: 0.20.3 - version: 0.20.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@6.0.3)) + version: 0.20.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(synckit@0.11.13)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@6.0.3)) typescript: specifier: 7.0.2 version: 7.0.2 @@ -4088,13 +4085,13 @@ importers: devDependencies: '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@rslib/core': specifier: ^0.23.2 - version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0)(jsdom@20.0.3) + version: 0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) typescript: specifier: 7.0.2 version: 7.0.2 @@ -4127,8 +4124,8 @@ importers: version: 2.2.12(typescript@7.0.2) devDependencies: '@rspack/core': - specifier: ^1.0.2 - version: 1.3.9(@swc/helpers@0.5.23) + specifier: 2.1.10 + version: 2.1.10(@module-federation/runtime-tools@packages+runtime-tools)(@swc/helpers@0.5.23) typescript: specifier: 7.0.2 version: 7.0.2 @@ -4149,7 +4146,7 @@ importers: version: link:../sdk '@rspress/shared': specifier: 2.0.14 - version: 2.0.14(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.0.14(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) cheerio: specifier: 1.0.0-rc.12 version: 1.0.0-rc.12 @@ -4162,10 +4159,10 @@ importers: devDependencies: '@rslib/core': specifier: ^0.23.2 - version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2) '@rspress/core': specifier: 2.0.14 - version: 2.0.14(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.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.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -4196,13 +4193,13 @@ importers: version: link:../rsbuild-plugin '@rsbuild/core': specifier: 2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@rslib/core': specifier: ^0.23.2 - version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@6.0.3) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@6.0.3) '@rstest/core': specifier: 0.11.6 - version: 0.11.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3) + version: 0.11.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) typescript: specifier: 6.0.3 version: 6.0.3 @@ -4262,7 +4259,7 @@ importers: version: link:../sdk '@nx/react': specifier: '>= 16.0.0' - version: 22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.8)(@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.7.0))(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.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@26.2.0)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@7.0.2))(webpack-cli@5.1.4) + version: 22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.8)(@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.7.0))(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.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.11(@edge-runtime/vm@3.2.0)(@types/node@26.6.2)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.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.8)(@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) @@ -4302,7 +4299,7 @@ importers: devDependencies: '@rstest/core': specifier: ^0.10.6 - version: 0.10.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3) + version: 0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) '@types/node': specifier: ^20.19.5 version: 20.19.5 @@ -4489,13 +4486,13 @@ importers: version: 1.57.0 '@rsbuild/core': specifier: ^2.1.4 - version: 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + version: 2.1.4(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17)) + version: 2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17)) '@rslib/core': 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.2)(core-js@3.49.0)(typescript@6.0.3) + version: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@6.0.3) '@rstest/core': specifier: ^0.6.5 version: 0.6.9(jsdom@20.0.3) @@ -4546,16 +4543,16 @@ importers: dependencies: '@hono/node-server': specifier: 2.0.11 - version: 2.0.11(hono@4.13.0) + version: 2.0.11(hono@4.13.5) '@hono/zod-validator': specifier: 0.7.4 - version: 0.7.4(hono@4.13.1)(zod@4.1.12) + version: 0.7.4(hono@4.13.5)(zod@4.1.12) dotenv: specifier: 16.4.5 version: 16.4.5 hono: - specifier: 4.13.1 - version: 4.13.1 + specifier: 4.13.5 + version: 4.13.5 json-stable-stringify: specifier: 1.3.0 version: 1.3.0 @@ -4569,8 +4566,8 @@ importers: specifier: 10.1.0 version: 10.1.0 undici: - specifier: 7.29.0 - version: 7.29.0 + specifier: 7.29.1 + version: 7.29.1 zod: specifier: 4.1.12 version: 4.1.12 @@ -4985,10 +4982,6 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - '@babel/helper-globals@7.29.7': resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} @@ -5074,9 +5067,9 @@ packages: resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@8.0.0-rc.3': - resolution: {integrity: sha512-AmwWFx1m8G/a5cXkxLxTiWl+YEoWuoFLUCwqMlNuWO1tqAYITQAbCRPUkyBHv1VOFgfjVOqEj6L3u15J5ZCzTA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@babel/helper-string-parser@8.0.6': + resolution: {integrity: sha512-+6HYEBnsDRZHJtUTAEfMQd0zMDqdFHS7C+5vAsEZqBUr3vEMWOWlHJ0Jz1gS8jJIlCvLsuA6ivmeoqzH936YcA==} + engines: {node: ^22.18.0 || >=24.11.0} '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} @@ -5120,8 +5113,8 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.29.8': - resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} + '@babel/parser@7.29.9': + resolution: {integrity: sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==} engines: {node: '>=6.0.0'} hasBin: true @@ -6188,36 +6181,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.11.3': resolution: {integrity: sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==} - '@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.11.3': resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} - '@emnapi/runtime@1.9.0': - resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} - - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} - '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@emnapi/wasi-threads@1.2.2': - resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@emnapi/wasi-threads@1.2.3': resolution: {integrity: sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==} @@ -6233,18 +6208,12 @@ packages: '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - '@emotion/is-prop-valid@0.8.8': - resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} - '@emotion/is-prop-valid@1.2.1': resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} '@emotion/is-prop-valid@1.4.0': resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} - '@emotion/memoize@0.7.4': - resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} - '@emotion/memoize@0.8.1': resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} @@ -7529,8 +7498,8 @@ packages: cpu: [arm64] os: [darwin] - '@img/sharp-darwin-arm64@0.35.0': - resolution: {integrity: sha512-ZgaYEwaj+lx/5n4W8GmZ2IYz0PQHjN5eqRcfijWGB+2Aq7ZInZGa0qJyAn6DEtyLuWHRSrmWOqT9q3qqTBvmUQ==} + '@img/sharp-darwin-arm64@0.35.4': + resolution: {integrity: sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [darwin] @@ -7541,14 +7510,14 @@ packages: cpu: [x64] os: [darwin] - '@img/sharp-darwin-x64@0.35.0': - resolution: {integrity: sha512-c1z9LFpKB0slQW3RchwBE8iSVzGp70TNjUUO9k4BZwwW4HH7JBGHeIy4b+kk4n/kcBASb9evKCE3/7Slmslgiw==} + '@img/sharp-darwin-x64@0.35.4': + resolution: {integrity: sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==} engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] - '@img/sharp-freebsd-wasm32@0.35.0': - resolution: {integrity: sha512-Li2KTev0H90kEtnJHkI9xQojXt1AqWmFBMXiPw5kqd1jQgP7gi5HVK/qC5Rmh/59NuAwUuPzzPITmX22NomYYQ==} + '@img/sharp-freebsd-wasm32@0.35.4': + resolution: {integrity: sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==} engines: {node: '>=20.9.0'} os: [freebsd] @@ -7557,8 +7526,8 @@ packages: cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.3.0': - resolution: {integrity: sha512-EKbmBKtyTH+GPFDRw2TgK2oV6hyxxlJVIar4hoTYSNmIwipgMFdxPQqR392GmfdsPGWga0mCFN1cCKjRb9cljw==} + '@img/sharp-libvips-darwin-arm64@1.3.3': + resolution: {integrity: sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==} cpu: [arm64] os: [darwin] @@ -7567,8 +7536,8 @@ packages: cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.3.0': - resolution: {integrity: sha512-Pl2OmOvrJ42adUllESxBsG54PfXLo1OYg9i3c5/5Ln/qJ0gZuTM9YMhQJPIbXqwidLRc/c2zuHt4RsrymmNv7A==} + '@img/sharp-libvips-darwin-x64@1.3.3': + resolution: {integrity: sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==} cpu: [x64] os: [darwin] @@ -7577,8 +7546,8 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm64@1.3.0': - resolution: {integrity: sha512-C0SqjoFKnszqa44EQ7xoaT48nnO0lOyXEULfXMWi8krrjOPGYkeK30Okzla6ATbBYsyZ0ySinK0FVkpv3DwzfQ==} + '@img/sharp-libvips-linux-arm64@1.3.3': + resolution: {integrity: sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==} cpu: [arm64] os: [linux] @@ -7587,8 +7556,8 @@ packages: cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-arm@1.3.0': - resolution: {integrity: sha512-A8UpHoUDW4DwnXoV6+q3C1s7QLRAHtPDEjWuNZjwHMyoCNZnm0GeNN8ls9f/bsEYTRQRW96C/n34XJQHJ2fT7A==} + '@img/sharp-libvips-linux-arm@1.3.3': + resolution: {integrity: sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==} cpu: [arm] os: [linux] @@ -7597,8 +7566,8 @@ packages: cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.3.0': - resolution: {integrity: sha512-WOpkVxAjFd369iaIzEgNRreFD+gWdUMIGD5zplhNKNeqS6mm5dac3q2AFyCBmzYoAdouzZvRBgxy4z8QHZb4/A==} + '@img/sharp-libvips-linux-ppc64@1.3.3': + resolution: {integrity: sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==} cpu: [ppc64] os: [linux] @@ -7607,8 +7576,8 @@ packages: cpu: [riscv64] os: [linux] - '@img/sharp-libvips-linux-riscv64@1.3.0': - resolution: {integrity: sha512-DRWw0mOHusrCCuw2rqP87oLg6PGlkomVDFqw2hIwsSfwWpu4k3XLcBPaKKl6ct/GtL/cwNkgwjV/tc0Mqht3VA==} + '@img/sharp-libvips-linux-riscv64@1.3.3': + resolution: {integrity: sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==} cpu: [riscv64] os: [linux] @@ -7617,8 +7586,8 @@ packages: cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-s390x@1.3.0': - resolution: {integrity: sha512-9APy+nFWhHS+kzLgWZfLcyrUd7YqnAQVa4BPOo4xkoHpdoktOAPG4cEr9+Jpl0TtqfVmcMJimNL5qNTyyOHZNA==} + '@img/sharp-libvips-linux-s390x@1.3.3': + resolution: {integrity: sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==} cpu: [s390x] os: [linux] @@ -7627,8 +7596,8 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-libvips-linux-x64@1.3.0': - resolution: {integrity: sha512-y9RNUYDe2A1UAdhLyfeOodGRszQdaEoe4nfOpp/sNVPl2CWIcUyFaDoCh4vPLPxu19803j2naLqZup2WxDXCLA==} + '@img/sharp-libvips-linux-x64@1.3.3': + resolution: {integrity: sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==} cpu: [x64] os: [linux] @@ -7637,8 +7606,8 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.3.0': - resolution: {integrity: sha512-cC1wkC0Mlucd0KSiGrLkJnB/ZqPvZCntc/Lk7ZnYO5ZSbF2euNek4Xvxafojq+wN1q/W0eprdpUIjUr/EV2PBg==} + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': + resolution: {integrity: sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==} cpu: [arm64] os: [linux] @@ -7647,8 +7616,8 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.3.0': - resolution: {integrity: sha512-LiYMhUZicB1QG//+RvmYZpXJO8fYRENfp+MZUCnG9aw+AKvGAy9gPaCnuwsPcBFs8EV66M0NNxj9VHcNklE8zw==} + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + resolution: {integrity: sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==} cpu: [x64] os: [linux] @@ -7658,8 +7627,8 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-linux-arm64@0.35.0': - resolution: {integrity: sha512-4+4XHLNT5wDT0roYlHTEmH9lDKt0acf9Tv+3hM3iceOirkxrR404/3WjAYZ9F9CkHrxeRcGLJXbi4vluMZ9O+A==} + '@img/sharp-linux-arm64@0.35.4': + resolution: {integrity: sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] @@ -7670,8 +7639,8 @@ packages: cpu: [arm] os: [linux] - '@img/sharp-linux-arm@0.35.0': - resolution: {integrity: sha512-VVlpEWwizEFIOom0zdoeKuO5nuTswzVE5uHcBNvHzmeHUpNFajY3HFfbQ+zIH4E2kVaZ/yVxmsShW56TtEy4uA==} + '@img/sharp-linux-arm@0.35.4': + resolution: {integrity: sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==} engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] @@ -7682,8 +7651,8 @@ packages: cpu: [ppc64] os: [linux] - '@img/sharp-linux-ppc64@0.35.0': - resolution: {integrity: sha512-N3hzbEpUTJC8pWpPVJvgzGxM+so/MAXc8O2s/53B0LL9ZGpfXpME7Wizkc5d/8fRBlBtkDjzoZGDCqqNDHqLEw==} + '@img/sharp-linux-ppc64@0.35.4': + resolution: {integrity: sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==} engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] @@ -7694,8 +7663,8 @@ packages: cpu: [riscv64] os: [linux] - '@img/sharp-linux-riscv64@0.35.0': - resolution: {integrity: sha512-l6vmKVPnbS0RhVMbyxP5meAARsbhCnBN4fy31qz0+3a6Rv4jEqfzDrT89y6ZPkCi0AJGnwp2En528yXo401Hpw==} + '@img/sharp-linux-riscv64@0.35.4': + resolution: {integrity: sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==} engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] @@ -7706,8 +7675,8 @@ packages: cpu: [s390x] os: [linux] - '@img/sharp-linux-s390x@0.35.0': - resolution: {integrity: sha512-MYlMiPFiv/EKPAHnp3yNZ9AAWFsxga9c5Bkc6wkar6bqzHLlkGVJHRm0u1ei+VXnZxp3Mz9MG9ZIsI8vSOf3sQ==} + '@img/sharp-linux-s390x@0.35.4': + resolution: {integrity: sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==} engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] @@ -7718,8 +7687,8 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-linux-x64@0.35.0': - resolution: {integrity: sha512-TYaItB5oj1ioXjhyn2xrR208vf+YuIIcHptQWRRaBmFhvIvL9D72DXN8w75xup0KXA8UdEAhQ9Qb2S49FD/9Cw==} + '@img/sharp-linux-x64@0.35.4': + resolution: {integrity: sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] @@ -7730,8 +7699,8 @@ packages: cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.35.0': - resolution: {integrity: sha512-DSTb6ijQzqe6DdAaOBVqJ/SYf1vO8EW5bK6X6LRXufEBebf2722VCdvBUtZ3rtV0x2ApfPNDy/p7LrrjaWjiyQ==} + '@img/sharp-linuxmusl-arm64@0.35.4': + resolution: {integrity: sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] @@ -7742,8 +7711,8 @@ packages: cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-x64@0.35.0': - resolution: {integrity: sha512-K7ykQ+26Rt6+4BTU80AuGgTPIYX86UxiAKT4rcXX/WNTo7k1ZxpKz+TguHnwVpCqQK3B5PK0vZ0ZBe6nz/ib1w==} + '@img/sharp-linuxmusl-x64@0.35.4': + resolution: {integrity: sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==} engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] @@ -7753,12 +7722,12 @@ packages: engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-wasm32@0.35.0': - resolution: {integrity: sha512-9woLIFORERCr+6cWu87dQ22J34EExkhc73U1kZW0c+RclQqWetoodByp4dWZ/hN8/KVmTRAx2HOnUwib8AwZdA==} + '@img/sharp-wasm32@0.35.4': + resolution: {integrity: sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==} engines: {node: '>=20.9.0'} - '@img/sharp-webcontainers-wasm32@0.35.0': - resolution: {integrity: sha512-t+kie1TOyaDM6Dho+f+y0VqIUNhYQaKCUahuZVi0E0frgdiaOaPsDxDW3wfKacUdaNBCnK/ZDBMg33ydvHj8uA==} + '@img/sharp-webcontainers-wasm32@0.35.4': + resolution: {integrity: sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==} engines: {node: '>=20.9.0'} cpu: [wasm32] @@ -7768,8 +7737,8 @@ packages: cpu: [arm64] os: [win32] - '@img/sharp-win32-arm64@0.35.0': - resolution: {integrity: sha512-M5eKxug0dabbaWgFKvPa3odNs2OpaP+81NASfGKkt4GcYXpNhSu7CaeYxWkLNV6vHmUp4hnCxnxrUyhUJhXbKA==} + '@img/sharp-win32-arm64@0.35.4': + resolution: {integrity: sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==} engines: {node: '>=20.9.0'} cpu: [arm64] os: [win32] @@ -7780,8 +7749,8 @@ packages: cpu: [ia32] os: [win32] - '@img/sharp-win32-ia32@0.35.0': - resolution: {integrity: sha512-z0+pZ03QCDvdVN0Ez9IX/yjWC19ikMlXrmdYMwYNLTh2BLPx3hXWPvyqWfquZ0BTO9O6GVOjIVoTcyyacMnWlQ==} + '@img/sharp-win32-ia32@0.35.4': + resolution: {integrity: sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==} engines: {node: ^20.9.0} cpu: [ia32] os: [win32] @@ -7792,8 +7761,8 @@ packages: cpu: [x64] os: [win32] - '@img/sharp-win32-x64@0.35.0': - resolution: {integrity: sha512-feNnlz5ZHKr0MY1LPHvZQyJeBkbo4ctsn0D8FvA53VTw5TC63rfEL2UrWbkSBR19htSE7Mw78xYVwdJqoMWVHw==} + '@img/sharp-win32-x64@0.35.4': + resolution: {integrity: sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==} engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] @@ -7954,6 +7923,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} @@ -8233,12 +8205,15 @@ packages: resolution: {integrity: sha512-kmnmVs32MFWbV5X6BInC1/TfCs7y1ugwxv1xHsAIj/DyUfoe7vtO0alRUgbQa57+yRGHBBjlNcEk33SCAt5/dA==} hasBin: true - '@microsoft/tsdoc-config@0.18.1': - resolution: {integrity: sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==} + '@microsoft/tsdoc-config@0.18.2': + resolution: {integrity: sha512-4ymuLTQ9lFwJXK15f41iPcNHflymjk02Ltq5f5wo3fA02O1nHIGSc1TIZwzTSQZep+jXHM644jobt4Q8O3vtqg==} '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} + '@microsoft/tsdoc@0.17.0': + resolution: {integrity: sha512-p68VexhnH7ojf3U27RdryUDqnKJgKaWUbCL96vJR7N0mqDuhKG5OIECk3sCPPdynxjk+yoVhRkScqtv5KQjzsw==} + '@modelcontextprotocol/sdk@1.27.1': resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} engines: {node: '>=18'} @@ -8889,8 +8864,8 @@ packages: '@module-federation/error-codes@2.2.2': resolution: {integrity: sha512-e+dxUrqrdRbhfvg8TyG0UQBQAjYZ8pI2b3HWfESLXqWi3xCiivZSnqsPN+zychrQ1hDZAdCheZ9zT91zhMrkxw==} - '@module-federation/error-codes@2.8.2': - resolution: {integrity: sha512-8inlDv48QOjA//CLQ3epjoHEiMQGsz1Pmtu2N+s7gQVggn6AYHpjnMe8AsyGxtpaPg3wbX0HmBZtRFggpXUB9A==} + '@module-federation/error-codes@2.9.1': + resolution: {integrity: sha512-5lqrIZTeMiKdn4uuX/+X8uN/4C0yqI8P3WO42DNRR7B9gCA4HMDCHrrxU8odQup9bzRsN5TJSz3av6d2iNmPgA==} '@module-federation/inject-external-runtime-core-plugin@0.21.6': resolution: {integrity: sha512-DJQne7NQ988AVi3QB8byn12FkNb+C2lBeU1NRf8/WbL0gmHsr6kW8hiEJCm8LYaURwtsQqtsEV7i+8+51qjSmQ==} @@ -8967,8 +8942,8 @@ packages: '@module-federation/runtime-core@2.2.2': resolution: {integrity: sha512-JL+W6Yol1+CPJ662H1SEQLwxfBU2kCKhUcYrMr/X6j0qFWB8x5PBSpQbwAIcJiKfflHgBaJZypmCKmq8qRv3Aw==} - '@module-federation/runtime-core@2.8.2': - resolution: {integrity: sha512-PEkkK9MUp+nUCeQMS4ox3QGZfwwxgfjGA7P4umEnr5c3y8DLNDR+26tyHf/Gkjen2VsjlcyL+mEAQo1Zi4IE3g==} + '@module-federation/runtime-core@2.9.1': + resolution: {integrity: sha512-HMdsiTQoWqOXFr9Boki+U99piC00C7GLBZN05t+sXcutHq99oXZ8ONjvPL/h2pu7VAuPXgCjuCE3iqUQXv54EQ==} '@module-federation/runtime-tools@0.1.6': resolution: {integrity: sha512-7ILVnzMIa0Dlc0Blck5tVZG1tnk1MmLnuZpLOMpbdW+zl+N6wdMjjHMjEZFCUAJh2E5XJ3BREwfX8Ets0nIkLg==} @@ -8997,8 +8972,8 @@ packages: '@module-federation/runtime-tools@2.2.2': resolution: {integrity: sha512-UnlKvy/zrbLTLItrI1tORiS6wdp5pYOCrR2LtDEbjJ2r+avzANSf2vJ7lAIT4SX5Pi9WwY5RhE4Y/BOwhAj4DA==} - '@module-federation/runtime-tools@2.8.2': - resolution: {integrity: sha512-eW/yPvZB2LbpbyPXPTnOeF1ieWl165D9QcPV0y5Bj1QYGDjL2cb+dnzrBp0fmFtJhCYqmAdsVNoYItVa3yuJ3g==} + '@module-federation/runtime-tools@2.9.1': + resolution: {integrity: sha512-K5aYbnSY585RU/pb1Bb+m4cRtqq4KFPiGzxXC6hNgalN8Ny2EVFrDz6rd/uNfomtXfriPEre8W7WHb/Q7DOu8g==} '@module-federation/runtime@0.1.6': resolution: {integrity: sha512-nj6a+yJ+QxmcE89qmrTl4lphBIoAds0PFPVGnqLRWflwAP88jrCcrrTqRhARegkFDL+wE9AE04+h6jzlbIfMKg==} @@ -9027,8 +9002,8 @@ packages: '@module-federation/runtime@2.2.2': resolution: {integrity: sha512-zV6kbAUU1tQZr4KrZXQhzQP3WTb7oMRlIFw4UBhbh2JhAKGYS5CNc/n7+RV+mDxIs//qVmVzdSpJtTOMBLeFCw==} - '@module-federation/runtime@2.8.2': - resolution: {integrity: sha512-SUoP+PD5EjSPSi6FxEPGIZoRkFifxdeYcVQbJE9mO0VEjF51gAk3/TgX8k0vzUryOBPmXekLr9SfQXU6DqUtvA==} + '@module-federation/runtime@2.9.1': + resolution: {integrity: sha512-dRCy2HpUinPnk2b6GB/R6t2iJTHkSFGv83sbrEKylXkR2ATH0V47WpUdoNsZCEUOTQlAIHwZzDCVocA5FbcsBA==} '@module-federation/sdk@0.1.6': resolution: {integrity: sha512-qifXpyYLM7abUeEOIfv0oTkguZgRZuwh89YOAYIZJlkP6QbRG7DJMQvtM8X2yHXm9PTk0IYNnOJH0vNQCo6auQ==} @@ -9062,8 +9037,8 @@ packages: node-fetch: optional: true - '@module-federation/sdk@2.8.2': - resolution: {integrity: sha512-OPS/lbQjraLXoWniQpCwQ/vqgURHTrhsackSNcOPmcJHM3LyR+DabxUc0pl8jAqExsW2l+uepQq7+/Gkei871w==} + '@module-federation/sdk@2.9.1': + resolution: {integrity: sha512-JneBWSHr9ZCZHa5geNUleVK2vBTugWXLIXlV72UAhgHm1cTMYKZljnhRSX59n7Xssz4Yk+m+W3rYg6Eb4ouL8w==} '@module-federation/third-party-dts-extractor@0.21.6': resolution: {integrity: sha512-Il6x4hLsvCgZNk1DFwuMBNeoxD1BsZ5AW2BI/nUgu0k5FiAvfcz1OFawRFEHtaM/kVrCsymMOW7pCao90DaX3A==} @@ -9098,8 +9073,8 @@ packages: '@module-federation/webpack-bundler-runtime@2.2.2': resolution: {integrity: sha512-g5UEn5APnNYvajwWQ0oc3Um+HO1z/jBcBkLSKAoSOCI6XxQk5eAV1PNDuDehAgJEtJw5yFD25kZPW3X7m39y7g==} - '@module-federation/webpack-bundler-runtime@2.8.2': - resolution: {integrity: sha512-g4xQgfgMMCKgJjVMBh7nIYGjLGNDYwSZ4lfpTdkVyWDnxmR3SL6VPQTJEZHRYPyqvrTtZE1zdDhDd++yNRvLdA==} + '@module-federation/webpack-bundler-runtime@2.9.1': + resolution: {integrity: sha512-to/dxVd+N/tDQIOurIijTW3qr9Y8IRuMun1dyDm+0PTLOzKQ1Xid6qnAFsiNhZjK8HCOBlgjJuii7rwoZ90Z9w==} '@monaco-editor/loader@1.7.0': resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} @@ -9720,35 +9695,45 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} engines: {node: '>= 10.0.0'} - '@peculiar/asn1-cms@2.8.0': - resolution: {integrity: sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==} + '@peculiar/asn1-cms@2.9.4': + resolution: {integrity: sha512-cben7oxmQsUGZqotus7yt0srYdncOT6RNWcTQ77T2RFOXejYVYkXadrfePdRcrVpO9K95IRLKKglG2k38jKXuw==} + engines: {node: '>=14'} - '@peculiar/asn1-csr@2.8.0': - resolution: {integrity: sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==} + '@peculiar/asn1-csr@2.9.4': + resolution: {integrity: sha512-xd4YN4vpRjkDAQWVfZZkeu12IEND7DOpkqaHSIHxZl1uggUNa9Ju0QxY2jHvDAS9pP0zhRBytg8ifsnGo3V0jw==} + engines: {node: '>=14'} - '@peculiar/asn1-ecc@2.8.0': - resolution: {integrity: sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==} + '@peculiar/asn1-ecc@2.9.4': + resolution: {integrity: sha512-JJXefFshRAuVAjWQo/39bkg1ywc1VaiO44S8RRC+Ykvf/u2KDmYffoDb0ZBPCR5uJy4AGKQhl8mX+Q8ShcWaXQ==} + engines: {node: '>=14'} - '@peculiar/asn1-pfx@2.8.0': - resolution: {integrity: sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==} + '@peculiar/asn1-pfx@2.9.4': + resolution: {integrity: sha512-khuGzHTzNzk4GDlIBEILyIs6Lce0yn0ZBdoI9v93kmNncfZRhD+AQ5ODFqdhvoE8cMJF/JMTQ8yA+t1D14kqCw==} + engines: {node: '>=14'} - '@peculiar/asn1-pkcs8@2.8.0': - resolution: {integrity: sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==} + '@peculiar/asn1-pkcs8@2.9.4': + resolution: {integrity: sha512-duRdotlUx9eDZe6QrQpQKl61RbWykCHBCkKayP8V8XdEFwlKHZ8qGGDMyS6Pye7OX7nLFttTTpRkJeet78ckwQ==} + engines: {node: '>=14'} - '@peculiar/asn1-pkcs9@2.8.0': - resolution: {integrity: sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==} + '@peculiar/asn1-pkcs9@2.9.4': + resolution: {integrity: sha512-kaL4cNxBpdQE2dKlyZBqz4ygCrwffO+8wfoxTEqM1Z8RadvCeELBRzcv0dzM8aY9azHMwODO5nxU65zXmhToOQ==} + engines: {node: '>=14'} - '@peculiar/asn1-rsa@2.8.0': - resolution: {integrity: sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==} + '@peculiar/asn1-rsa@2.9.4': + resolution: {integrity: sha512-pZ96eD1PptovcWQ/GSmuNFXd/7EQJNlKfDaNCyE2rx3W0v6QFelkzquVqRSRyyDXXCYD69ZXJDzZ8GhIiQzKoA==} + engines: {node: '>=14'} - '@peculiar/asn1-schema@2.8.0': - resolution: {integrity: sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==} + '@peculiar/asn1-schema@2.9.4': + resolution: {integrity: sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==} + engines: {node: '>=14'} - '@peculiar/asn1-x509-attr@2.8.0': - resolution: {integrity: sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==} + '@peculiar/asn1-x509-attr@2.9.4': + resolution: {integrity: sha512-ehQXbpQaQYycgu8OrvigwSPTFfVRcu0ECNYCWw+yzBp02Lw5paRqzzhUpfOgO2K38+WfFZuEz/0RPtam5g0OMg==} + engines: {node: '>=14'} - '@peculiar/asn1-x509@2.8.0': - resolution: {integrity: sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==} + '@peculiar/asn1-x509@2.9.4': + resolution: {integrity: sha512-CxhBo/RdEbMMob7T31ZdQjGuoyRFLVwrDzTn25bihzBasRg9kRm/0IxIPvhgQtcK/9dNcO1XQL2fuPugwELL0Q==} + engines: {node: '>=14'} '@peculiar/utils@2.0.3': resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} @@ -9769,9 +9754,9 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.1.2': - resolution: {integrity: sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@pkgr/core@0.3.6': + resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} + engines: {node: ^14.18.0 || >=16.0.0} '@playwright/test@1.57.0': resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==} @@ -12452,11 +12437,6 @@ packages: cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-arm64@1.3.9': - resolution: {integrity: sha512-lfTmsbUGab9Ak/X6aPLacHLe4MBRra+sLmhoNK8OKEN3qQCjDcomwW5OlmBRV5bcUYWdbK8vgDk2HUUXRuibVg==} - cpu: [arm64] - os: [darwin] - '@rspack/binding-darwin-arm64@1.5.8': resolution: {integrity: sha512-spJfpOSN3f7V90ic45/ET2NKB2ujAViCNmqb0iGurMNQtFRq+7Kd+jvVKKGXKBHBbsQrFhidSWbbqy2PBPGK8g==} cpu: [arm64] @@ -12492,13 +12472,8 @@ 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-arm64@2.1.8': - resolution: {integrity: sha512-kia+eWtyWPvR4ntg1bWYoVU8nLPbUg2fG3zgBEocsTcsh5ZENSiEPxEKymDgMyIMONUqj611E0775cdUBoNmqw==} + '@rspack/binding-darwin-arm64@2.1.10': + resolution: {integrity: sha512-DZlcTpbIb2mjeS1aSG4k01UH33Zj7T+k8ZylPK6HmsKs4JvK4wgpWFC78WVv3p/Aj3MZS6DwtDLwpZ2Ihj/fpg==} cpu: [arm64] os: [darwin] @@ -12522,11 +12497,6 @@ packages: cpu: [x64] os: [darwin] - '@rspack/binding-darwin-x64@1.3.9': - resolution: {integrity: sha512-rYuOUINhnhLDbG5LHHKurRSuKIsw0LKUHcd6AAsFmijo4RMnGBJ4NOI4tOLAQvkoSTQ+HU5wiTGSQOgHVhYreQ==} - cpu: [x64] - os: [darwin] - '@rspack/binding-darwin-x64@1.5.8': resolution: {integrity: sha512-YFOzeL1IBknBcri8vjUp43dfUBylCeQnD+9O9p0wZmLAw7DtpN5JEOe2AkGo8kdTqJjYKI+cczJPKIw6lu1LWw==} cpu: [x64] @@ -12562,13 +12532,8 @@ 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-darwin-x64@2.1.8': - resolution: {integrity: sha512-08pBkFhlD3Y3Qzh94w/Fc3skaIE3e96kl2P14m8+tnYTcglpOfpA2OwS3iHt9fOqy0HjoAVe6/MW3cBgs5iabA==} + '@rspack/binding-darwin-x64@2.1.10': + resolution: {integrity: sha512-my/0h2LwxCRT6cg3oDDC2e0ZOxQLVajAdIcv0fqnQk5JRNvVuL89PuTutitnSqie1A0/JSL8OQz5XHwmoS3kow==} cpu: [x64] os: [darwin] @@ -12592,11 +12557,6 @@ packages: cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-gnu@1.3.9': - resolution: {integrity: sha512-pBKnS2Fbn9cDtWe1KcD1qRjQlJwQhP9pFW2KpxdjE7qXbaO11IHtem6dLZwdpNqbDn9QgyfdVGXBDvBaP1tGwA==} - cpu: [arm64] - os: [linux] - '@rspack/binding-linux-arm64-gnu@1.5.8': resolution: {integrity: sha512-UAWCsOnpkvy8eAVRo0uipbHXDhnoDq5zmqWTMhpga0/a3yzCp2e+fnjZb/qnFNYb5MeL0O1mwMOYgn1M3oHILQ==} cpu: [arm64] @@ -12632,13 +12592,8 @@ 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-gnu@2.1.8': - resolution: {integrity: sha512-KLniMc9GzhKpVqhPzaJo3KJwzdAllXVVqZIk/uL1QipXOxs57fgM4u7IexKPFVla0o/u1PQG/Ah2YLDmda24Ow==} + '@rspack/binding-linux-arm64-gnu@2.1.10': + resolution: {integrity: sha512-laevn9g+E5PAUEGqiKe6Ju5KApsuQYp+bPI17XS3Lkl8eqL5pS/BmHYU7QMlst4GzV8+wlruVTMh//+st6Vqzg==} cpu: [arm64] os: [linux] @@ -12662,11 +12617,6 @@ packages: cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.3.9': - resolution: {integrity: sha512-0B+iiINW0qOEkBE9exsRcdmcHtYIWAoJGnXrz9tUiiewRxX0Cmm0MjD2HAVUAggJZo+9IN8RGz5PopCjJ/dn1g==} - cpu: [arm64] - os: [linux] - '@rspack/binding-linux-arm64-musl@1.5.8': resolution: {integrity: sha512-GnSvGT4GjokPSD45cTtE+g7LgghuxSP1MRmvd+Vp/I8pnxTVSTsebRod4TAqyiv+l11nuS8yqNveK9qiOkBLWw==} cpu: [arm64] @@ -12702,34 +12652,29 @@ 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-arm64-musl@2.1.8': - resolution: {integrity: sha512-yUKAxHNGnICtw5RnxFWu4dHtsz/tdt7rbeFcsINNVre9HcrRxf5XP+FbOGL/SMxd9oM9XCo10paU2WckTKwbEA==} + '@rspack/binding-linux-arm64-musl@2.1.10': + resolution: {integrity: sha512-V71+Qz5G72+ROZXrJn5zxOszdG1AEbO8pcC/itXXtf4yRR6a3bVHKNKGhipBNxb8eI6cnD/01FH1h3ZG655jLw==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-riscv64-gnu@2.1.2': - resolution: {integrity: sha512-uys8Jyw8Z3ralvICbN/L/nZfy5qELIwpOY72rhIqhoDYwFcL4fmMaY7WsvUcJOjCB2rqOcWPaWKuF2oPvo9iDQ==} - cpu: [riscv64] + '@rspack/binding-linux-ppc64-gnu@2.1.10': + resolution: {integrity: sha512-U7HlNzHcDtZ+LYOtOJmtx67kHEybZzUUAaP7aEXjGYO5WTCgh/176sW2UYP0rmZLrgUNFUuzn+B98RLaClNaVg==} + cpu: [ppc64] os: [linux] - '@rspack/binding-linux-riscv64-gnu@2.1.8': - resolution: {integrity: sha512-gg4S1jaitwYPHR9HZ3zNGH1EK2GXINm66p4kEpOP1gbc+akyOouVF/dMcu9NGPlRg58FbEhVRZYKu7Z/zcpKHg==} + '@rspack/binding-linux-riscv64-gnu@2.1.10': + resolution: {integrity: sha512-GMGTJpy9/ecE+5F5IfxZH4bXv0Wx/b2TiehTlCbTksbL+pKpLHYy0rwGdjWDKbmBkhxMMqPiC7PDnn9LbdnnLA==} cpu: [riscv64] os: [linux] - '@rspack/binding-linux-riscv64-musl@2.1.2': - resolution: {integrity: sha512-JYNVQwqCaRGQWvjHQYzZkIzQiwllMaJwh4Rdu3ww6W2OJcJUqT08sL1pkOtU0iCxT4VUYiRRcp93VGTGpHr8fg==} + '@rspack/binding-linux-riscv64-musl@2.1.10': + resolution: {integrity: sha512-rkurnAWc04vIbzG1QCrPBWSJadZvaOt1mazFH3EdiJO8VUiu0I1T9zdiwuDOPrd50lOKIZlcTXbd5aaAkWEnvQ==} cpu: [riscv64] os: [linux] - '@rspack/binding-linux-riscv64-musl@2.1.8': - resolution: {integrity: sha512-b/aU5j1h368SLNyz5u+flqpZVhzSZ1UIslaj9sZJuAvqkGWv3xsjc/28/PTo/RYXCxd0FNVAxTxWHKvRiAAS8w==} - cpu: [riscv64] + '@rspack/binding-linux-s390x-gnu@2.1.10': + resolution: {integrity: sha512-X+DyxkriZEAF/wihI7ERDv+CAS0mbMv36aEuQ+vXzTlvS6cSmpou/r29AHbvIF3NlG1UeAbDVlOs9QrMBZjpUQ==} + cpu: [s390x] os: [linux] '@rspack/binding-linux-x64-gnu@0.7.5': @@ -12752,11 +12697,6 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.3.9': - resolution: {integrity: sha512-82izGJw/qxJ4xaHJy/A4MF7aTRT9tE6VlWoWM4rJmqRszfujN/w54xJRie9jkt041TPvJWGNpYD4Hjpt0/n/oA==} - cpu: [x64] - os: [linux] - '@rspack/binding-linux-x64-gnu@1.5.8': resolution: {integrity: sha512-XLxh5n/pzUfxsugz/8rVBv+Tx2nqEM+9rharK69kfooDsQNKyz7PANllBQ/v4svJ+W0BRHnDL4qXSGdteZeEjA==} cpu: [x64] @@ -12792,13 +12732,8 @@ 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-gnu@2.1.8': - resolution: {integrity: sha512-EyegohSx0BJRqieCg9f/caCqFARRWkqI5hwJt6k530MoOTLeq8I3vsbeg24/2MktwIC1dmJi8bl0+WhPKQs4eQ==} + '@rspack/binding-linux-x64-gnu@2.1.10': + resolution: {integrity: sha512-Fat09V6jUuyo9qG7Wyj9cQ31VDfLmokXyBtGqKxY5OvSWHereB7QUub5btbPXHwbp6Iq4aAQyUbbLTzvR1YaBw==} cpu: [x64] os: [linux] @@ -12822,11 +12757,6 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.3.9': - resolution: {integrity: sha512-V9nDg63iPI6Z7kM11UPV5kBdOdLXPIu3IgI2ObON5Rd4KEZr7RLo/Q4HKzj0IH27Zwl5qeBJdx69zZdu66eOqg==} - 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] @@ -12862,13 +12792,8 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@2.1.2': - resolution: {integrity: sha512-66hWmIGvn4zCKAYXJE9Bp5SNSLYnLFq2Ke/efE+ZtWy43Dd5vk9AAOmThVGBwdwmIxmGtHGCp+cAuS4G0wu0TA==} - cpu: [x64] - os: [linux] - - '@rspack/binding-linux-x64-musl@2.1.8': - resolution: {integrity: sha512-I6E+goN+UQ297q4r1qdbiAyNCI3t0+a5Y0xDIAPOZfRDRxDTnH/LF8/y65gjsJoKRKyn7zxRC0T/NURTkRNQ9A==} + '@rspack/binding-linux-x64-musl@2.1.10': + resolution: {integrity: sha512-lhHOnIJ4ClpIlA1f1L8aoxEZivYLjnjq5A6jKKz7BKsm+cHK8kqqEm6lO5KqA5xQT0Lonq1o28bmKHEj6JHInw==} cpu: [x64] os: [linux] @@ -12900,12 +12825,8 @@ 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-wasm32-wasi@2.1.8': - resolution: {integrity: sha512-om7GAKWAU3lcSvbCon2m7mzw8v9OTrO2LW2MZ1lGe/uVJJmwGGkl9HVoXFyWFLrN6YVFyx8iP+AkN4owDWB9Cw==} + '@rspack/binding-wasm32-wasi@2.1.10': + resolution: {integrity: sha512-KY5YbWbuvYcoaLXnV+vzZOvGRCeb6jt4EpVpKdph1h1IJjwX/ju15EQ+GOe3iecZEdf0OttQcNVcwBkLkFT9ag==} cpu: [wasm32] '@rspack/binding-win32-arm64-msvc@0.7.5': @@ -12928,11 +12849,6 @@ packages: cpu: [arm64] os: [win32] - '@rspack/binding-win32-arm64-msvc@1.3.9': - resolution: {integrity: sha512-owWCJTezFkiBOSRzH+eOTN15H5QYyThHE5crZ0I30UmpoSEchcPSCvddliA0W62ZJIOgG4IUSNamKBiiTwdjLQ==} - cpu: [arm64] - os: [win32] - '@rspack/binding-win32-arm64-msvc@1.5.8': resolution: {integrity: sha512-7i3ZTHFXKfU/9Jm9XhpMkrdkxO7lfeYMNVEGkuU5dyBfRMQj69dRgPL7zJwc2plXiqu9LUOl+TwDNTjap7Q36g==} cpu: [arm64] @@ -12968,13 +12884,8 @@ 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-arm64-msvc@2.1.8': - resolution: {integrity: sha512-WDnsP/SUb9zbxyGX9XjPw5AXrX86u5oidn0MDdfJduOOqdCSpHwmRjlQ8NUJhbBq9WqVJMFlcab7NwZVWX/yyg==} + '@rspack/binding-win32-arm64-msvc@2.1.10': + resolution: {integrity: sha512-z4GWzMLofaDGpAt9Z+MlN88LlUBDm+zM6R2GdOOPM6/4g/h3/+47OP7casmSL3AwTGYBEJqogwt08sRSosB6Cg==} cpu: [arm64] os: [win32] @@ -12998,11 +12909,6 @@ packages: cpu: [ia32] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.3.9': - resolution: {integrity: sha512-YUuNA8lkGSXJ07fOjkX+yuWrWcsU5x5uGFuAYsglw+rDTWCS6m9HSwQjbCp7HUp81qPszjSk+Ore5XVh07FKeQ==} - cpu: [ia32] - os: [win32] - '@rspack/binding-win32-ia32-msvc@1.5.8': resolution: {integrity: sha512-7ZPPWO11J+soea1+mnfaPpQt7GIodBM7A86dx6PbXgVEoZmetcWPrCF2NBfXxQWOKJ9L3RYltC4z+ZyXRgMOrw==} cpu: [ia32] @@ -13038,13 +12944,8 @@ packages: cpu: [ia32] os: [win32] - '@rspack/binding-win32-ia32-msvc@2.1.2': - resolution: {integrity: sha512-OtxkFVz14mVL4QK8QriSELn9B6PaYGHw1jGJwVDEzpu2ZxSHCTQPz9dVE1ekYtREEqZUkRU7Fp7VfhJSmjTt2Q==} - cpu: [ia32] - os: [win32] - - '@rspack/binding-win32-ia32-msvc@2.1.8': - resolution: {integrity: sha512-QiMQMPNDiY3dhhaIdaFPzcPDC06cEYkNY89ea+EmDvNVgZq6V+2mFS/WnzZVMeEbGAYJCjsv/ABhhLT1hlYMvg==} + '@rspack/binding-win32-ia32-msvc@2.1.10': + resolution: {integrity: sha512-7qcWdsZ+GuGtzKjqgy7wTN7Dso/ezIY8yhx1r2yIbcczdmXj4FhaEampMDp/25HwtKwIGBBoh6HHSt3JWxpTUg==} cpu: [ia32] os: [win32] @@ -13068,11 +12969,6 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-win32-x64-msvc@1.3.9': - resolution: {integrity: sha512-E0gtYBVt5vRj0zBeplEf8wsVDPDQ6XBdRiFVUgmgwYUYYkXaalaIvbD1ioB8cA05vfz8HrPGXcMrgletUP4ojA==} - cpu: [x64] - os: [win32] - '@rspack/binding-win32-x64-msvc@1.5.8': resolution: {integrity: sha512-N/zXQgzIxME3YUzXT8qnyzxjqcnXudWOeDh8CAG9zqTCnCiy16SFfQ/cQgEoLlD9geQntV6jx2GbDDI5kpDGMQ==} cpu: [x64] @@ -13108,13 +13004,8 @@ 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-win32-x64-msvc@2.1.8': - resolution: {integrity: sha512-b7sA5eB64vo2mbsuc//MOYzVLeCKHPn0dfP/GmNEoHdWbhRgZ/orZLWurYMQj04ELTLW6YCJEy59g5KRzNYHfw==} + '@rspack/binding-win32-x64-msvc@2.1.10': + resolution: {integrity: sha512-pgp23pLrzfhGnKycxzr7ifP17lAbWZEfnx1bX8gXtYrnpJ66DRNyTKSzxB6sa/HBWjS1L8PX5TjMZ44WfPydqQ==} cpu: [x64] os: [win32] @@ -13130,9 +13021,6 @@ packages: '@rspack/binding@1.3.15': resolution: {integrity: sha512-utNPuJglLO5lW9XbwIqjB7+2ilMo6JkuVLTVdnNVKU94FW7asn9F/qV+d+MgjUVqU1QPCGm0NuGO9xhbgeJ7pg==} - '@rspack/binding@1.3.9': - resolution: {integrity: sha512-3FFen1/0F2aP5uuCm8vPaJOrzM3karCPNMsc5gLCGfEy2rsK38Qinf9W4p1bw7+FhjOTzoSdkX+LFHeMDVxJhw==} - '@rspack/binding@1.5.8': resolution: {integrity: sha512-/91CzhRl9r5BIQCgGsS7jA6MDbw1I2BQpbfcUUdkdKl2P79K3Zo/Mw/TvKzS86catwLaUQEgkGRmYawOfPg7ow==} @@ -13154,17 +13042,18 @@ packages: '@rspack/binding@2.0.8': resolution: {integrity: sha512-3uZ+y8aQxq33ty2srMxg2Nu0XuBI6vVrG50rkDaXqwWqOohfgGUSfFuQK7EnSUNy4aFUQlCG6NHialQHJov0wg==} - '@rspack/binding@2.1.2': - resolution: {integrity: sha512-/mFcRSUW7Pl19KeaBIujJvZYNJQu0wD5D3aa5h+Qcph26v7nmLYlX7eajIHGi8tt2qTZX1lXifw2KLIXKwYaRQ==} - - '@rspack/binding@2.1.8': - resolution: {integrity: sha512-tmAyHzDbPiy8V7HvQqtuPsbs6dPgwV0YjzW5XrPRV9gzf+Hdm7pvsZJKE1QKO9WV5RuvGYav98xIX6O+abZxzQ==} + '@rspack/binding@2.1.10': + resolution: {integrity: sha512-vnu/UP5HnrND15lO9+VeG6eUrbTyycHNQNQ3XEiRiFojuoiGZkIZC3Hbzr8qQH44C6vScPODEPvvIVvLcO2LpQ==} - '@rspack/cli@1.3.9': - resolution: {integrity: sha512-jGsde6kP1S7QntU4TYNv8KAHRwe5lb21rRVVj6qGFOQ7pckxWadyYyowo6Qg43OYlPAc9ZlDlba3Zg3gQoD73g==} + '@rspack/cli@2.1.10': + resolution: {integrity: sha512-qkuQQ3PzD2sTS2tBAWyWNeOeZmPxRBzB+eNDBhCZmbm8DoMPujW2VQj0k9CulrkBq9sBxU8fQ+5Z/ELzbz5S8g==} hasBin: true peerDependencies: - '@rspack/core': ^1.0.0-alpha || ^1.x + '@rspack/core': ^2.0.0-0 + '@rspack/dev-server': ^2.0.0-0 + peerDependenciesMeta: + '@rspack/dev-server': + optional: true '@rspack/core@0.7.5': resolution: {integrity: sha512-zVTe4WCyc3qsLPattosiDYZFeOzaJ32/BYukPP2I1VJtCVFa+PxGVRPVZhSoN6fXw5oy48yHg9W9v1T8CaEFhw==} @@ -13202,15 +13091,6 @@ packages: '@swc/helpers': optional: true - '@rspack/core@1.3.9': - resolution: {integrity: sha512-u7usd9srCBPBfNJCSvsfh14AOPq6LCVna0Vb/aA2nyJTawHqzfAMz1QRb/e27nP3NrV6RPiwx03W494Dd6r6wg==} - 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'} @@ -13283,8 +13163,8 @@ packages: '@swc/helpers': optional: true - '@rspack/core@2.1.2': - resolution: {integrity: sha512-crpNQKhHfnzrIl4Sa4fjH30Ho5aAPgyqpmJZ41SkUFOzyKHdZKYfE5LF3CMh7MiFQFPPxiiKf5BcpxmtZZx4MQ==} + '@rspack/core@2.1.10': + resolution: {integrity: sha512-YSS2/Xxz8uiG/KXDkqOoA3dTetNo/vysk7bAexQOrU8iuq7JuzDTTAwLKvWZnwmvME8M8m5wcM4YvfIwYmidHA==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: '@module-federation/runtime-tools': ^0.24.1 || ^2.0.0 @@ -13295,23 +13175,24 @@ packages: '@swc/helpers': optional: true - '@rspack/core@2.1.8': - resolution: {integrity: sha512-na1kyA6Mj8/LWw9O3A8NsrG9rNKN3Iq2WiXrEuIwsU5r/Nl/evm3hO7bWKHxgsRyydI6W7okwx3MXgf8rzel6g==} + '@rspack/dev-middleware@2.0.4': + resolution: {integrity: sha512-VCdT8hv9YvMPiBohhukD/OkGB+2GJ7mPRbeuDJ/jIT6hv5gvmJCnydMetJVARh6vXoBtfSHEd2gX78Dqaxh1NQ==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - '@module-federation/runtime-tools': ^0.24.1 || ^2.0.0 - '@swc/helpers': ^0.5.23 + '@rspack/core': ^2.0.0 peerDependenciesMeta: - '@module-federation/runtime-tools': - optional: true - '@swc/helpers': + '@rspack/core': optional: true - '@rspack/dev-server@1.1.1': - resolution: {integrity: sha512-9r7vOml2SrFA8cvbcJdSan9wHEo1TPXezF22+s5jvdyAAywg8w7HqDol6TPVv64NUonP1DOdyLxZ+6UW6WZiwg==} - engines: {node: '>= 18.12.0'} + '@rspack/dev-server@2.2.1': + resolution: {integrity: sha512-Il8HbYGK3rH5rM0XmUOsOGZVw69BKRpBZ61P28Fy8ry35CtfniDBWtbo/rvJtIT/sK0qwijmNrhF498ltsV+uA==} + engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - '@rspack/core': '*' + '@rspack/core': ^2.0.0 + selfsigned: ^5.0.0 + peerDependenciesMeta: + selfsigned: + optional: true '@rspack/lite-tapable@1.0.1': resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} @@ -13545,6 +13426,9 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@storybook/addon-docs@8.6.18': resolution: {integrity: sha512-55ADer0yNmmeR928Y3UAv3r4i7bJSd9LwywsQ+lRol/FNe0ZcwLEz31xL+jVsqQFNnDh/imsDIp8aYapGMtfEQ==} peerDependencies: @@ -14702,9 +14586,6 @@ packages: '@types/node-fetch@2.6.11': resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} - '@types/node-forge@1.3.14': - resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} - '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} @@ -14720,8 +14601,8 @@ packages: '@types/node@22.19.15': resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} - '@types/node@26.2.0': - resolution: {integrity: sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg==} + '@types/node@26.6.2': + resolution: {integrity: sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -15454,37 +15335,34 @@ packages: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 - '@vitest/expect@3.2.6': - resolution: {integrity: sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==} + '@vitest/expect@4.1.11': + resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} - '@vitest/mocker@3.2.6': - resolution: {integrity: sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==} + '@vitest/mocker@4.1.11': + resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.2.6': - resolution: {integrity: sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==} - - '@vitest/pretty-format@3.2.7': - resolution: {integrity: sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==} + '@vitest/pretty-format@4.1.11': + resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} - '@vitest/runner@3.2.6': - resolution: {integrity: sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==} + '@vitest/runner@4.1.11': + resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} - '@vitest/snapshot@3.2.6': - resolution: {integrity: sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==} + '@vitest/snapshot@4.1.11': + resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} - '@vitest/spy@3.2.6': - resolution: {integrity: sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==} + '@vitest/spy@4.1.11': + resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} - '@vitest/utils@3.2.6': - resolution: {integrity: sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==} + '@vitest/utils@4.1.11': + resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} '@volar/language-core@1.11.1': resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} @@ -15882,8 +15760,8 @@ packages: resolution: {integrity: sha512-ufJnssQGbxzLNS1Ho9bCtX4rQKCCvoVuDLHoJyc3F9dOGDB4BkWs2Ci0kv53lqocAEQ/Cbi+I2XCsNYGqVYqng==} engines: {node: '>=12.0'} - adm-zip@0.6.0: - resolution: {integrity: sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==} + adm-zip@0.6.1: + resolution: {integrity: sha512-Xwrja8nx9e5o2N1my4DsKCeKpdrnACyr1wtbPxBDgGzKzKyE9kRtBFA8mWldI+RVlD7CBZNWY/wQ2+ydwOR6kQ==} engines: {node: '>=14.0'} agent-base@5.1.1: @@ -16662,14 +16540,14 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} + engines: {node: 20 || >=22} + brace-expansion@5.0.4: resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} engines: {node: 18 || 20 || >=22} - brace-expansion@5.0.9: - resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} - engines: {node: 20 || >=22} - braces@2.3.2: resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} engines: {node: '>=0.10.0'} @@ -16895,8 +16773,8 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} chalk-template@0.4.0: @@ -16969,10 +16847,6 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} - check-error@2.1.3: - resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} - engines: {node: '>= 16'} - check-more-types@2.24.0: resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} engines: {node: '>= 0.8.0'} @@ -18029,9 +17903,6 @@ packages: de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -18107,10 +17978,6 @@ packages: babel-plugin-macros: optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} @@ -18987,13 +18854,13 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-prettier@5.2.1: - resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + eslint-plugin-prettier@5.5.6: + resolution: {integrity: sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' eslint: '>=8.0.0' - eslint-config-prettier: '*' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' prettier: '>=3.0.0' peerDependenciesMeta: '@types/eslint': @@ -19111,6 +18978,7 @@ packages: eslint@9.26.0: resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true peerDependencies: jiti: '*' @@ -19121,6 +18989,7 @@ packages: eslint@9.39.3: resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true peerDependencies: jiti: '*' @@ -19269,10 +19138,6 @@ packages: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} - exit-hook@4.0.0: - resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} - engines: {node: '>=18'} - exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -19683,17 +19548,6 @@ packages: resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} engines: {node: '>=0.10.0'} - framer-motion@10.18.0: - resolution: {integrity: sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - framer-motion@12.15.0: resolution: {integrity: sha512-XKg/LnKExdLGugZrDILV7jZjI599785lDIJZLxMiiIFidCsy0a4R2ZEf+Izm67zyOuJgQYTHOmodi7igQsw3vg==} peerDependencies: @@ -19838,8 +19692,8 @@ packages: resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} - get-east-asian-width@1.6.0: - resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + get-east-asian-width@1.7.0: + resolution: {integrity: sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -20062,10 +19916,6 @@ packages: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true - gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - hachure-fill@0.5.2: resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} @@ -20255,12 +20105,8 @@ packages: resolution: {integrity: sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==} engines: {node: '>=16.0.0'} - hono@4.13.0: - resolution: {integrity: sha512-jhunvfHWxd7J5EFfSgH4xsYJzSe/lfqbUCxiyyeaQasUsXeEHXtzVid+7EOGByc5JnFa23SSFL3Y2RV/z1T+eQ==} - engines: {node: '>=16.9.0'} - - hono@4.13.1: - resolution: {integrity: sha512-kdJoFVv2xmayw6cY09H7AbMJMt8Jn5jdlEdXsP7AGBdF2DIptVlKlOLKXP41yPip4/a3yQPv9gVcJYI8YY04dw==} + hono@4.13.5: + resolution: {integrity: sha512-O6+/eCYRkzzzy0rPWwKLiGBR1nFuUPZynnwjxN1MBA62NNqbT0wQEzQyK2gSO5yDIDB336sXQleAhOHrzlYyKw==} engines: {node: '>=16.9.0'} hookable@6.1.0: @@ -20743,8 +20589,8 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + is-core-module@2.17.0: + resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==} engines: {node: '>= 0.4'} is-data-descriptor@1.0.1: @@ -21367,19 +21213,16 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - - js-yaml@3.15.1: - resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==} + js-yaml@3.15.2: + resolution: {integrity: sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==} hasBin: true js-yaml@4.2.0: resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} hasBin: true - js-yaml@4.3.1: - resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==} + js-yaml@4.3.2: + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} hasBin: true jsbn@0.1.1: @@ -21813,9 +21656,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -22626,6 +22466,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.19: + resolution: {integrity: sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@5.1.16: resolution: {integrity: sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==} engines: {node: ^18 || >=20} @@ -22777,10 +22622,6 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-forge@1.3.3: - resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} - engines: {node: '>= 6.13.0'} - node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -23348,10 +23189,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} @@ -25051,6 +24888,13 @@ packages: react: '>=16.8' react-dom: '>=16.8' + react-router-dom@6.30.6: + resolution: {integrity: sha512-0RHKZz7wwffvkU+2MFVT2NnjK44ssLEV+m0CAJaS2Ksmorrwj7WxH00jO0SOCW26/tINUnJHToXblDs33I38YQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + react-router-dom@7.15.1: resolution: {integrity: sha512-AzF62gjY6U9rkMq4RfP/r2EVtQ7DMfNMjyOp/flLTCrtRylLiK4wT4pSq6O8rOXZ2eXdZYJPEYe+ifomiv+Igg==} engines: {node: '>=20.0.0'} @@ -25081,6 +24925,12 @@ packages: peerDependencies: react: '>=16.8' + react-router@6.30.6: + resolution: {integrity: sha512-5HfK7k5im7LTOB0EqCQmfvy4C13G92Ssj1VTmouTK3AJvyjKTnFuCV0vcMAD/JS+JC4DvDIBRrlAeJIFjh5VWg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-router@7.12.0: resolution: {integrity: sha512-kTPDYPFzDVGIIGNLS5VJykK0HfHLY5MF3b+xj0/tTyNYL1gF1qs7u67Z9jEhQk2sQ98SUaHxlG31g1JtF7IfVw==} engines: {node: '>=20.0.0'} @@ -26164,10 +26014,6 @@ packages: select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - selfsigned@5.5.0: resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} engines: {node: '>=18'} @@ -26302,9 +26148,14 @@ packages: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - sharp@0.35.0: - resolution: {integrity: sha512-BqvG5XbwPZ4NV0DK90d86leEECMsoa8bO0nqnKWlBDYxri4GJ7c4EDInaF6q20lTh/mATmnDIKWJFfXnoVfH5g==} + sharp@0.35.4: + resolution: {integrity: sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==} engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} @@ -26592,6 +26443,9 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.2.0: + resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -26806,9 +26660,6 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - strip-literal@3.1.0: - resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - strnum@1.1.2: resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} @@ -26979,8 +26830,8 @@ packages: synchronous-promise@2.0.17: resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} - synckit@0.9.3: - resolution: {integrity: sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg==} + synckit@0.11.13: + resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} tabbable@6.5.0: @@ -27201,12 +27052,8 @@ packages: resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} engines: {node: ^18.0.0 || >=20.0.0} - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@4.0.4: - resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + tinyrainbow@3.1.1: + resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==} engines: {node: '>=14.0.0'} tldts-core@6.1.86: @@ -27719,15 +27566,15 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@8.3.0: - resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + undici-types@8.9.0: + resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} undici@5.26.5: resolution: {integrity: sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==} engines: {node: '>=14.0'} - undici@7.29.0: - resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} + undici@7.29.1: + resolution: {integrity: sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==} engines: {node: '>=20.18.1'} unhead@2.1.15: @@ -28079,11 +27926,6 @@ packages: victory-vendor@36.9.2: resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - vite-tsconfig-paths@4.2.3: resolution: {integrity: sha512-xVsA2xe6QSlzBujtWF8q2NYexh7PAUYfzJ4C8Axpe/7d2pcERYxuxGgph9F4f0iQO36g5tyGq6eBUYIssdUrVw==} peerDependencies: @@ -28203,26 +28045,39 @@ packages: yaml: optional: true - vitest@3.2.6: - resolution: {integrity: sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.1.11: + resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.6 - '@vitest/ui': 3.2.6 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.11 + '@vitest/browser-preview': 4.1.11 + '@vitest/browser-webdriverio': 4.1.11 + '@vitest/coverage-istanbul': 4.1.11 + '@vitest/coverage-v8': 4.1.11 + '@vitest/ui': 4.1.11 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': optional: true '@vitest/ui': optional: true @@ -28329,11 +28184,6 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} - webpack-bundle-analyzer@4.10.2: - resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} - engines: {node: '>= 10.13.0'} - hasBin: true - webpack-cli@5.1.4: resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} engines: {node: '>=14.15.0'} @@ -28369,19 +28219,6 @@ packages: webpack: optional: true - webpack-dev-server@5.2.0: - resolution: {integrity: sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==} - engines: {node: '>= 18.12.0'} - hasBin: true - peerDependencies: - webpack: ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - webpack-dev-server@5.2.3: resolution: {integrity: sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==} engines: {node: '>= 18.12.0'} @@ -29149,7 +28986,7 @@ snapshots: '@babel/generator': 7.29.8 '@babel/helper-module-transforms': 7.29.7(@babel/core@7.12.9) '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@babel/template': 7.29.7 '@babel/traverse': 7.29.7 '@babel/types': 7.29.8 @@ -29236,15 +29073,15 @@ snapshots: '@babel/generator@7.29.7': dependencies: - '@babel/parser': 7.29.8 - '@babel/types': 7.29.8 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/generator@7.29.8': dependencies: - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@babel/types': 7.29.8 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -29261,7 +29098,7 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.29.8 + '@babel/types': 7.29.0 '@babel/helper-annotate-as-pure@7.29.7': dependencies: @@ -29358,8 +29195,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-globals@7.28.0': {} - '@babel/helper-globals@7.29.7': {} '@babel/helper-member-expression-to-functions@7.28.5': @@ -29379,14 +29214,14 @@ snapshots: '@babel/helper-module-imports@7.28.6': dependencies: '@babel/traverse': 7.29.7 - '@babel/types': 7.29.8 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.28.6(supports-color@5.5.0)': dependencies: '@babel/traverse': 7.29.7(supports-color@5.5.0) - '@babel/types': 7.29.8 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -29517,7 +29352,7 @@ snapshots: '@babel/helper-string-parser@7.29.7': {} - '@babel/helper-string-parser@8.0.0-rc.3': {} + '@babel/helper-string-parser@8.0.6': {} '@babel/helper-validator-identifier@7.28.5': {} @@ -29545,7 +29380,7 @@ snapshots: '@babel/helpers@7.29.7': dependencies: '@babel/template': 7.29.7 - '@babel/types': 7.29.8 + '@babel/types': 7.29.7 '@babel/parser@7.29.2': dependencies: @@ -29555,7 +29390,7 @@ snapshots: dependencies: '@babel/types': 7.29.7 - '@babel/parser@7.29.8': + '@babel/parser@7.29.9': dependencies: '@babel/types': 7.29.8 @@ -31054,14 +30889,14 @@ snapshots: '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@babel/types': 7.29.8 '@babel/traverse@7.29.0': dependencies: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 + '@babel/helper-globals': 7.29.7 '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 @@ -31098,7 +30933,7 @@ snapshots: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.8 '@babel/helper-globals': 7.29.7 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@babel/template': 7.29.7 '@babel/types': 7.29.8 debug: 4.4.3(supports-color@8.1.1) @@ -31122,7 +30957,7 @@ snapshots: '@babel/types@8.0.0-rc.2': dependencies: - '@babel/helper-string-parser': 8.0.0-rc.3 + '@babel/helper-string-parser': 8.0.6 '@babel/helper-validator-identifier': 8.0.0-rc.2 '@base2/pretty-print-object@1.0.1': {} @@ -31221,7 +31056,7 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@changesets/cli@2.30.0(@types/node@26.2.0)': + '@changesets/cli@2.30.0(@types/node@26.6.2)': dependencies: '@changesets/apply-release-plan': 7.1.0 '@changesets/assemble-release-plan': link:packages/assemble-release-plan @@ -31237,7 +31072,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@26.2.0) + '@inquirer/external-editor': 1.0.3(@types/node@26.6.2) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 enquirer: 2.4.1 @@ -31314,7 +31149,7 @@ snapshots: '@changesets/parse@0.4.3': dependencies: '@changesets/types': 6.1.0 - js-yaml: 4.3.1 + js-yaml: 4.3.2 '@changesets/pre@2.0.2': dependencies: @@ -31671,60 +31506,28 @@ snapshots: 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.11.3': dependencies: '@emnapi/wasi-threads': 1.2.3 tslib: 2.8.1 - optional: true - - '@emnapi/core@1.9.0': - dependencies: - '@emnapi/wasi-threads': 1.2.0 - tslib: 2.8.1 - optional: true '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.11.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.11.3': dependencies: tslib: 2.8.1 - '@emnapi/runtime@1.9.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.2.0': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.2': - dependencies: - tslib: 2.8.1 - '@emnapi/wasi-threads@1.2.3': dependencies: tslib: 2.8.1 - optional: true '@emotion/babel-plugin@11.13.5': dependencies: @@ -31754,11 +31557,6 @@ snapshots: '@emotion/hash@0.9.2': {} - '@emotion/is-prop-valid@0.8.8': - dependencies: - '@emotion/memoize': 0.7.4 - optional: true - '@emotion/is-prop-valid@1.2.1': dependencies: '@emotion/memoize': 0.8.1 @@ -31767,9 +31565,6 @@ snapshots: dependencies: '@emotion/memoize': 0.9.0 - '@emotion/memoize@0.7.4': - optional: true - '@emotion/memoize@0.8.1': {} '@emotion/memoize@0.9.0': {} @@ -32431,7 +32226,7 @@ snapshots: globals: 13.24.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.3.1 + js-yaml: 4.3.2 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -32445,7 +32240,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.3.1 + js-yaml: 4.3.2 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -32581,17 +32376,17 @@ snapshots: dependencies: react: 19.0.0-rc-cd22717c-20241013 - '@hono/node-server@1.19.17(hono@4.13.1)': + '@hono/node-server@1.19.17(hono@4.13.5)': dependencies: - hono: 4.13.1 + hono: 4.13.5 - '@hono/node-server@2.0.11(hono@4.13.0)': + '@hono/node-server@2.0.11(hono@4.13.5)': dependencies: - hono: 4.13.1 + hono: 4.13.5 - '@hono/zod-validator@0.7.4(hono@4.13.1)(zod@4.1.12)': + '@hono/zod-validator@0.7.4(hono@4.13.5)(zod@4.1.12)': dependencies: - hono: 4.13.1 + hono: 4.13.5 zod: 4.1.12 '@hookform/resolvers@3.10.0(react-hook-form@7.54.2(react@18.3.1))': @@ -32640,9 +32435,9 @@ snapshots: '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - '@img/sharp-darwin-arm64@0.35.0': + '@img/sharp-darwin-arm64@0.35.4': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.3.0 + '@img/sharp-libvips-darwin-arm64': 1.3.3 optional: true '@img/sharp-darwin-x64@0.34.5': @@ -32650,74 +32445,74 @@ snapshots: '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - '@img/sharp-darwin-x64@0.35.0': + '@img/sharp-darwin-x64@0.35.4': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.3.0 + '@img/sharp-libvips-darwin-x64': 1.3.3 optional: true - '@img/sharp-freebsd-wasm32@0.35.0': + '@img/sharp-freebsd-wasm32@0.35.4': dependencies: - '@img/sharp-wasm32': 0.35.0 + '@img/sharp-wasm32': 0.35.4 optional: true '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - '@img/sharp-libvips-darwin-arm64@1.3.0': + '@img/sharp-libvips-darwin-arm64@1.3.3': optional: true '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - '@img/sharp-libvips-darwin-x64@1.3.0': + '@img/sharp-libvips-darwin-x64@1.3.3': optional: true '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm64@1.3.0': + '@img/sharp-libvips-linux-arm64@1.3.3': optional: true '@img/sharp-libvips-linux-arm@1.2.4': optional: true - '@img/sharp-libvips-linux-arm@1.3.0': + '@img/sharp-libvips-linux-arm@1.3.3': optional: true '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - '@img/sharp-libvips-linux-ppc64@1.3.0': + '@img/sharp-libvips-linux-ppc64@1.3.3': optional: true '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-libvips-linux-riscv64@1.3.0': + '@img/sharp-libvips-linux-riscv64@1.3.3': optional: true '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.3.0': + '@img/sharp-libvips-linux-s390x@1.3.3': optional: true '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.3.0': + '@img/sharp-libvips-linux-x64@1.3.3': optional: true '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.3.0': + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': optional: true '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.3.0': + '@img/sharp-libvips-linuxmusl-x64@1.3.3': optional: true '@img/sharp-linux-arm64@0.34.5': @@ -32725,9 +32520,9 @@ snapshots: '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - '@img/sharp-linux-arm64@0.35.0': + '@img/sharp-linux-arm64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.3.0 + '@img/sharp-libvips-linux-arm64': 1.3.3 optional: true '@img/sharp-linux-arm@0.34.5': @@ -32735,9 +32530,9 @@ snapshots: '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - '@img/sharp-linux-arm@0.35.0': + '@img/sharp-linux-arm@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.3.0 + '@img/sharp-libvips-linux-arm': 1.3.3 optional: true '@img/sharp-linux-ppc64@0.34.5': @@ -32745,9 +32540,9 @@ snapshots: '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - '@img/sharp-linux-ppc64@0.35.0': + '@img/sharp-linux-ppc64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.3.0 + '@img/sharp-libvips-linux-ppc64': 1.3.3 optional: true '@img/sharp-linux-riscv64@0.34.5': @@ -32755,9 +32550,9 @@ snapshots: '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - '@img/sharp-linux-riscv64@0.35.0': + '@img/sharp-linux-riscv64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.3.0 + '@img/sharp-libvips-linux-riscv64': 1.3.3 optional: true '@img/sharp-linux-s390x@0.34.5': @@ -32765,9 +32560,9 @@ snapshots: '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.35.0': + '@img/sharp-linux-s390x@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.3.0 + '@img/sharp-libvips-linux-s390x': 1.3.3 optional: true '@img/sharp-linux-x64@0.34.5': @@ -32775,9 +32570,9 @@ snapshots: '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - '@img/sharp-linux-x64@0.35.0': + '@img/sharp-linux-x64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.3.0 + '@img/sharp-libvips-linux-x64': 1.3.3 optional: true '@img/sharp-linuxmusl-arm64@0.34.5': @@ -32785,9 +32580,9 @@ snapshots: '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.35.0': + '@img/sharp-linuxmusl-arm64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.3.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 optional: true '@img/sharp-linuxmusl-x64@0.34.5': @@ -32795,42 +32590,42 @@ snapshots: '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.35.0': + '@img/sharp-linuxmusl-x64@0.35.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.3.0 + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 optional: true '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.9.0 + '@emnapi/runtime': 1.11.3 optional: true - '@img/sharp-wasm32@0.35.0': + '@img/sharp-wasm32@0.35.4': dependencies: '@emnapi/runtime': 1.11.3 optional: true - '@img/sharp-webcontainers-wasm32@0.35.0': + '@img/sharp-webcontainers-wasm32@0.35.4': dependencies: - '@img/sharp-wasm32': 0.35.0 + '@img/sharp-wasm32': 0.35.4 optional: true '@img/sharp-win32-arm64@0.34.5': optional: true - '@img/sharp-win32-arm64@0.35.0': + '@img/sharp-win32-arm64@0.35.4': optional: true '@img/sharp-win32-ia32@0.34.5': optional: true - '@img/sharp-win32-ia32@0.35.0': + '@img/sharp-win32-ia32@0.35.4': optional: true '@img/sharp-win32-x64@0.34.5': optional: true - '@img/sharp-win32-x64@0.35.0': + '@img/sharp-win32-x64@0.35.4': optional: true '@inquirer/external-editor@1.0.3(@types/node@20.19.5)': @@ -32840,12 +32635,12 @@ snapshots: optionalDependencies: '@types/node': 20.19.5 - '@inquirer/external-editor@1.0.3(@types/node@26.2.0)': + '@inquirer/external-editor@1.0.3(@types/node@26.6.2)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 26.2.0 + '@types/node': 26.6.2 '@internationalized/date@3.12.2': dependencies: @@ -32881,7 +32676,7 @@ snapshots: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 - js-yaml: 3.15.1 + js-yaml: 3.15.2 resolve-from: 5.0.0 '@istanbuljs/schema@0.1.3': {} @@ -32965,7 +32760,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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2))': + '@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.6.2)(typescript@7.0.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -32979,7 +32774,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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2)) + 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.6.2)(typescript@7.0.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -33159,7 +32954,7 @@ snapshots: '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': @@ -33176,6 +32971,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/sourcemap-codec@1.6.0': {} + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -33184,7 +32981,7 @@ snapshots: '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: @@ -33596,7 +33393,7 @@ snapshots: '@microsoft/api-extractor-model@7.33.4(@types/node@20.19.5)': dependencies: '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 + '@microsoft/tsdoc-config': 0.18.2 '@rushstack/node-core-library': 5.20.3(@types/node@20.19.5) transitivePeerDependencies: - '@types/node' @@ -33605,17 +33402,17 @@ snapshots: '@microsoft/api-extractor-model@7.33.4(@types/node@22.19.15)': dependencies: '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 + '@microsoft/tsdoc-config': 0.18.2 '@rushstack/node-core-library': 5.20.3(@types/node@22.19.15) transitivePeerDependencies: - '@types/node' optional: true - '@microsoft/api-extractor-model@7.33.4(@types/node@26.2.0)': + '@microsoft/api-extractor-model@7.33.4(@types/node@26.6.2)': dependencies: '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 - '@rushstack/node-core-library': 5.20.3(@types/node@26.2.0) + '@microsoft/tsdoc-config': 0.18.2 + '@rushstack/node-core-library': 5.20.3(@types/node@26.6.2) transitivePeerDependencies: - '@types/node' optional: true @@ -33624,7 +33421,7 @@ snapshots: dependencies: '@microsoft/api-extractor-model': 7.33.4(@types/node@20.19.5) '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 + '@microsoft/tsdoc-config': 0.18.2 '@rushstack/node-core-library': 5.20.3(@types/node@20.19.5) '@rushstack/rig-package': 0.7.2 '@rushstack/terminal': 0.22.3(@types/node@20.19.5) @@ -33644,7 +33441,7 @@ snapshots: dependencies: '@microsoft/api-extractor-model': 7.33.4(@types/node@22.19.15) '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 + '@microsoft/tsdoc-config': 0.18.2 '@rushstack/node-core-library': 5.20.3(@types/node@22.19.15) '@rushstack/rig-package': 0.7.2 '@rushstack/terminal': 0.22.3(@types/node@22.19.15) @@ -33660,15 +33457,15 @@ snapshots: - '@types/node' optional: true - '@microsoft/api-extractor@7.57.7(@types/node@26.2.0)': + '@microsoft/api-extractor@7.57.7(@types/node@26.6.2)': dependencies: - '@microsoft/api-extractor-model': 7.33.4(@types/node@26.2.0) + '@microsoft/api-extractor-model': 7.33.4(@types/node@26.6.2) '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 - '@rushstack/node-core-library': 5.20.3(@types/node@26.2.0) + '@microsoft/tsdoc-config': 0.18.2 + '@rushstack/node-core-library': 5.20.3(@types/node@26.6.2) '@rushstack/rig-package': 0.7.2 - '@rushstack/terminal': 0.22.3(@types/node@26.2.0) - '@rushstack/ts-command-line': 5.3.3(@types/node@26.2.0) + '@rushstack/terminal': 0.22.3(@types/node@26.6.2) + '@rushstack/ts-command-line': 5.3.3(@types/node@26.6.2) diff: 8.0.4 lodash: 4.17.23 minimatch: 10.2.3 @@ -33680,9 +33477,9 @@ snapshots: - '@types/node' optional: true - '@microsoft/tsdoc-config@0.18.1': + '@microsoft/tsdoc-config@0.18.2': dependencies: - '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc': 0.17.0 ajv: 8.18.0 jju: 1.4.0 resolve: 1.22.12 @@ -33691,9 +33488,12 @@ snapshots: '@microsoft/tsdoc@0.16.0': optional: true + '@microsoft/tsdoc@0.17.0': + optional: true + '@modelcontextprotocol/sdk@1.27.1(zod@3.25.76)': dependencies: - '@hono/node-server': 1.19.17(hono@4.13.1) + '@hono/node-server': 1.19.17(hono@4.13.5) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -33703,7 +33503,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.13.1 + hono: 4.13.5 jose: 6.2.1 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -33785,7 +33585,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.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.62.2)(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.2.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/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.62.2)(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.6.2)(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 @@ -33798,7 +33598,7 @@ snapshots: '@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.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.2.0)(typescript@7.0.2))(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.6.2)(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 @@ -33816,7 +33616,7 @@ snapshots: pkg-types: 1.3.1 std-env: 3.10.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.2.0)(typescript@7.0.2) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.6.2)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@parcel/css' @@ -33909,22 +33709,22 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@modern-js/app-tools@3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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.2)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.2.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/app-tools@3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.9.1)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.6.2)(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.7 '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 - '@modern-js/builder': 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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.2)(@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/builder': 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.9.1)(@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.2)(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.9.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.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.2)(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.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.41(@swc/helpers@0.5.17))(@types/node@26.2.0)(typescript@7.0.2))(tsconfig-paths@4.2.0) - '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.8.2)(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.9.1)(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.9.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.41(@swc/helpers@0.5.17))(@types/node@26.6.2)(typescript@7.0.2))(tsconfig-paths@4.2.0) + '@modern-js/server-core': 3.5.0(@module-federation/runtime-tools@2.9.1)(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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(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 @@ -33935,7 +33735,7 @@ snapshots: pkg-types: 1.3.1 std-env: 3.10.0 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.2.0)(typescript@7.0.2) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.6.2)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -33962,22 +33762,22 @@ snapshots: - utf-8-validate - webpack - '@modern-js/app-tools@3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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/app-tools@3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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.7 '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 - '@modern-js/builder': 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@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/builder': 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@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.2)(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.9.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.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.2)(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.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.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.2)(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.9.1)(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.9.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.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.9.1)(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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(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 @@ -34015,22 +33815,22 @@ snapshots: - utf-8-validate - webpack - '@modern-js/app-tools@3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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/app-tools@3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(rollup@4.62.2)(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.7 '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 - '@modern-js/builder': 3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@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/builder': 3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@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.2)(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.9.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.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.2)(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.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.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.2)(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.9.1)(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.9.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.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.9.1)(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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(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 @@ -34127,7 +33927,7 @@ snapshots: '@babel/preset-env': 7.29.2(@babel/core@7.29.0) '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) '@babel/runtime': 7.28.2 - '@babel/types': 7.29.0 + '@babel/types': 7.29.8 '@rsbuild/plugin-babel': 1.0.1-rc.4(@rsbuild/core@1.0.1-rc.4) '@swc/helpers': 0.5.3 '@types/babel__core': 7.20.5 @@ -34137,7 +33937,7 @@ snapshots: - '@rsbuild/core' - supports-color - '@modern-js/babel-preset@2.68.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@modern-js/babel-preset@2.68.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) @@ -34149,7 +33949,7 @@ snapshots: '@babel/preset-typescript': 7.28.5(@babel/core@7.29.7) '@babel/runtime': 7.28.2 '@babel/types': 7.29.8 - '@rsbuild/plugin-babel': 1.0.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) + '@rsbuild/plugin-babel': 1.0.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) '@swc/helpers': 0.5.17 '@types/babel__core': 7.20.5 babel-plugin-dynamic-import-node: 2.3.3 @@ -34169,7 +33969,7 @@ snapshots: '@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.8 + '@babel/types': 7.29.0 '@rsbuild/plugin-babel': 1.1.0(@rsbuild/core@1.7.3) '@swc/helpers': 0.5.17 '@types/babel__core': 7.20.5 @@ -34190,7 +33990,7 @@ snapshots: '@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.8 + '@babel/types': 7.29.7 '@rsbuild/plugin-babel': 1.1.0(@rsbuild/core@1.7.3) '@swc/helpers': 0.5.17 '@types/babel__core': 7.20.5 @@ -34200,21 +34000,21 @@ snapshots: - '@rsbuild/core' - supports-color - '@modern-js/builder@3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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.2)(@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/builder@3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.9.1)(@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.2)(core-js@3.49.0) - '@rsbuild/plugin-assets-retry': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-check-syntax': 2.0.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-css-minimizer': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(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.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17)) - '@rsbuild/plugin-rem': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-sass': 1.5.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-source-build': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-svgr': 2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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.2)(core-js@3.49.0)) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + '@rsbuild/plugin-assets-retry': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-check-syntax': 2.0.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-css-minimizer': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(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.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17)) + '@rsbuild/plugin-rem': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-sass': 1.5.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-source-build': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-svgr': 2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.9.1)(core-js@3.49.0)) '@swc/core': 1.15.41(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 autoprefixer: 10.4.27(postcss@8.5.23) @@ -34231,8 +34031,8 @@ snapshots: postcss-media-minmax: 5.0.0(postcss@8.5.23) postcss-nesting: 12.1.5(postcss@8.5.23) postcss-page-break: 3.0.4(postcss@8.5.23) - rsbuild-plugin-rsc: 0.1.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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.2)(@swc/helpers@0.5.17)) + rsbuild-plugin-rsc: 0.1.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.9.1)(@swc/helpers@0.5.17)) ts-deepmerge: 7.0.3 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -34252,21 +34052,21 @@ snapshots: - typescript - webpack - '@modern-js/builder@3.5.0(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@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/builder@3.5.0(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) - '@rsbuild/plugin-assets-retry': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-check-syntax': 2.0.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-css-minimizer': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) - '@rsbuild/plugin-rem': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-sass': 1.5.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-source-build': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) - '@rsbuild/plugin-svgr': 2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.2)(core-js@3.49.0)) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + '@rsbuild/plugin-assets-retry': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-check-syntax': 2.0.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-css-minimizer': 2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(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.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) + '@rsbuild/plugin-rem': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-sass': 1.5.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-source-build': 1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) + '@rsbuild/plugin-svgr': 2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.9.1)(core-js@3.49.0)) '@swc/core': 1.15.41(@swc/helpers@0.5.17) '@swc/helpers': 0.5.17 autoprefixer: 10.4.27(postcss@8.5.23) @@ -34283,8 +34083,8 @@ snapshots: postcss-media-minmax: 5.0.0(postcss@8.5.23) postcss-nesting: 12.1.5(postcss@8.5.23) postcss-page-break: 3.0.4(postcss@8.5.23) - rsbuild-plugin-rsc: 0.1.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + rsbuild-plugin-rsc: 0.1.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) ts-deepmerge: 7.0.3 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -34339,7 +34139,7 @@ snapshots: - react - react-dom - '@modern-js/module-tools@2.70.5(@types/node@26.2.0)(typescript@7.0.2)': + '@modern-js/module-tools@2.70.5(@types/node@26.6.2)(typescript@7.0.2)': dependencies: '@ampproject/remapping': 2.3.0 '@ast-grep/napi': 0.35.0 @@ -34347,7 +34147,7 @@ snapshots: '@babel/types': 7.29.0 '@modern-js/core': 2.70.5 '@modern-js/plugin': 2.70.5 - '@modern-js/plugin-changeset': 2.70.5(@types/node@26.2.0) + '@modern-js/plugin-changeset': 2.70.5(@types/node@26.6.2) '@modern-js/plugin-i18n': 2.70.5 '@modern-js/swc-plugins': 0.6.11(@swc/helpers@0.5.17) '@modern-js/types': 2.70.5 @@ -34421,9 +34221,9 @@ snapshots: '@swc/helpers': 0.5.17 esbuild: 0.25.5 - '@modern-js/plugin-changeset@2.70.5(@types/node@26.2.0)': + '@modern-js/plugin-changeset@2.70.5(@types/node@26.6.2)': dependencies: - '@changesets/cli': 2.30.0(@types/node@26.2.0) + '@changesets/cli': 2.30.0(@types/node@26.6.2) '@changesets/git': 2.0.0 '@changesets/read': 0.6.7 '@modern-js/plugin-i18n': 2.70.5 @@ -34495,10 +34295,10 @@ snapshots: '@modern-js/utils': 2.70.8 '@swc/helpers': 0.5.17 - '@modern-js/plugin-server@2.68.0(@babel/traverse@7.29.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.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.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) + '@modern-js/server-utils': 2.68.0(@babel/traverse@7.29.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) '@modern-js/utils': 2.68.0 '@swc/helpers': 0.5.17 transitivePeerDependencies: @@ -34561,12 +34361,12 @@ snapshots: '@modern-js/utils': 2.70.8 '@swc/helpers': 0.5.17 - '@modern-js/plugin@3.0.1(@module-federation/runtime-tools@2.8.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.9.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/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.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.0.0-beta.2(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@swc/helpers': 0.5.17 jiti: 2.6.1 transitivePeerDependencies: @@ -34575,12 +34375,12 @@ snapshots: - react - react-dom - '@modern-js/plugin@3.5.0(@module-federation/runtime-tools@2.8.2)(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.9.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.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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@swc/helpers': 0.5.17 jiti: 2.6.1 transitivePeerDependencies: @@ -34609,10 +34409,10 @@ snapshots: - react - react-dom - '@modern-js/prod-server@3.5.0(@module-federation/runtime-tools@2.8.2)(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.9.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.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.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.9.1)(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: @@ -34639,23 +34439,23 @@ snapshots: 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)) - '@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.2)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@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.9.1)(@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.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-rspack: 0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-server-dom-rspack: 0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))(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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@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.10(@module-federation/runtime-tools@2.9.1)(@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.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-rspack: 0.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-server-dom-rspack: 0.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.41(@swc/helpers@0.5.17))(webpack-cli@5.1.4)': dependencies: @@ -34804,13 +34604,13 @@ snapshots: - react-server-dom-webpack - supports-color - '@modern-js/runtime@3.5.0(@module-federation/runtime-tools@2.8.2)(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.2)(@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@3.5.0(@module-federation/runtime-tools@2.9.1)(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.9.1)(@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.5.0(@module-federation/runtime-tools@2.8.2)(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.9.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.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.2)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@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.9.1)(@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) @@ -34833,13 +34633,13 @@ snapshots: - core-js - react-server-dom-rspack - '@modern-js/runtime@3.5.0(@module-federation/runtime-tools@2.8.2)(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.8(@module-federation/runtime-tools@2.8.2)(@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@3.5.0(@module-federation/runtime-tools@2.9.1)(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.10(@module-federation/runtime-tools@2.9.1)(@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.5.0(@module-federation/runtime-tools@2.8.2)(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.9.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.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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@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.10(@module-federation/runtime-tools@2.9.1)(@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) @@ -34898,9 +34698,9 @@ snapshots: - react - react-dom - '@modern-js/server-core@3.0.1(@module-federation/runtime-tools@2.8.2)(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.9.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(@module-federation/runtime-tools@2.8.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.9.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) '@swc/helpers': 0.5.17 @@ -34909,7 +34709,7 @@ snapshots: '@web-std/stream': 1.0.3 cloneable-readable: 3.0.0 flatted: 3.4.2 - hono: 4.13.1 + hono: 4.13.5 ts-deepmerge: 7.0.3 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -34917,9 +34717,9 @@ snapshots: - react - react-dom - '@modern-js/server-core@3.5.0(@module-federation/runtime-tools@2.8.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.9.1)(core-js@3.49.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@modern-js/plugin': 3.5.0(@module-federation/runtime-tools@2.8.2)(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.9.1)(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 @@ -34928,7 +34728,7 @@ snapshots: '@web-std/stream': 1.0.3 cloneable-readable: 3.0.0 flatted: 3.4.2 - hono: 4.13.1 + hono: 4.13.5 ts-deepmerge: 7.0.3 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -34945,10 +34745,10 @@ snapshots: - react - react-dom - '@modern-js/server-runtime@3.0.1(@module-federation/runtime-tools@2.8.2)(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.9.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(@module-federation/runtime-tools@2.8.2)(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.9.1)(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: @@ -34957,10 +34757,10 @@ snapshots: - react - react-dom - '@modern-js/server-runtime@3.5.0(@module-federation/runtime-tools@2.8.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.9.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.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.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.9.1)(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: @@ -34969,7 +34769,7 @@ snapshots: - react - react-dom - '@modern-js/server-utils@2.68.0(@babel/traverse@7.29.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@modern-js/server-utils@2.68.0(@babel/traverse@7.29.8)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) @@ -34978,7 +34778,7 @@ snapshots: '@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.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) + '@modern-js/babel-preset': 2.68.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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.7)(@babel/traverse@7.29.8) @@ -35031,7 +34831,7 @@ snapshots: - 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.41(@swc/helpers@0.5.17))(@types/node@26.2.0)(typescript@7.0.2))(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.6.2)(typescript@7.0.2))(tsconfig-paths@4.2.0)': dependencies: '@babel/core': 7.29.7 '@babel/register': 7.28.6(@babel/core@7.29.7) @@ -35048,7 +34848,7 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.21.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.2.0)(typescript@7.0.2) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.6.2)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@babel/traverse' @@ -35089,10 +34889,10 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@3.5.0(@module-federation/runtime-tools@2.8.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.41(@swc/helpers@0.5.17))(@types/node@26.2.0)(typescript@7.0.2))(tsconfig-paths@4.2.0)': + '@modern-js/server@3.5.0(@module-federation/runtime-tools@2.9.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.41(@swc/helpers@0.5.17))(@types/node@26.6.2)(typescript@7.0.2))(tsconfig-paths@4.2.0)': dependencies: '@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.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.9.1)(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) @@ -35104,7 +34904,7 @@ snapshots: path-to-regexp: 6.3.0 ws: 8.21.3 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.2.0)(typescript@7.0.2) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.6.2)(typescript@7.0.2) tsconfig-paths: 4.2.0 transitivePeerDependencies: - '@module-federation/runtime-tools' @@ -35116,10 +34916,10 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@3.5.0(@module-federation/runtime-tools@2.8.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.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@3.14.2)': + '@modern-js/server@3.5.0(@module-federation/runtime-tools@2.9.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.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.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.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.9.1)(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) @@ -35143,10 +34943,10 @@ snapshots: - supports-color - utf-8-validate - '@modern-js/server@3.5.0(@module-federation/runtime-tools@2.8.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.41(@swc/helpers@0.5.23))(@types/node@20.19.5)(typescript@7.0.2))(tsconfig-paths@4.2.0)': + '@modern-js/server@3.5.0(@module-federation/runtime-tools@2.9.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.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.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.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.9.1)(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) @@ -35805,7 +35605,7 @@ snapshots: '@module-federation/error-codes@2.2.2': {} - '@module-federation/error-codes@2.8.2': + '@module-federation/error-codes@2.9.1': optional: true '@module-federation/inject-external-runtime-core-plugin@0.21.6(@module-federation/runtime-tools@0.21.6)': @@ -35961,10 +35761,10 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/runtime-core@2.8.2': + '@module-federation/runtime-core@2.9.1': dependencies: - '@module-federation/error-codes': 2.8.2 - '@module-federation/sdk': 2.8.2 + '@module-federation/error-codes': 2.9.1 + '@module-federation/sdk': 2.9.1 optional: true '@module-federation/runtime-tools@0.1.6': @@ -36014,10 +35814,10 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/runtime-tools@2.8.2': + '@module-federation/runtime-tools@2.9.1': dependencies: - '@module-federation/runtime': 2.8.2 - '@module-federation/webpack-bundler-runtime': 2.8.2 + '@module-federation/runtime': 2.9.1 + '@module-federation/webpack-bundler-runtime': 2.9.1 optional: true '@module-federation/runtime@0.1.6': @@ -36072,11 +35872,11 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/runtime@2.8.2': + '@module-federation/runtime@2.9.1': dependencies: - '@module-federation/error-codes': 2.8.2 - '@module-federation/runtime-core': 2.8.2 - '@module-federation/sdk': 2.8.2 + '@module-federation/error-codes': 2.9.1 + '@module-federation/runtime-core': 2.9.1 + '@module-federation/sdk': 2.9.1 optional: true '@module-federation/sdk@0.1.6': {} @@ -36099,7 +35899,7 @@ snapshots: optionalDependencies: node-fetch: 2.7.0(encoding@0.1.13) - '@module-federation/sdk@2.8.2': + '@module-federation/sdk@2.9.1': optional: true '@module-federation/third-party-dts-extractor@0.21.6': @@ -36161,11 +35961,11 @@ snapshots: transitivePeerDependencies: - node-fetch - '@module-federation/webpack-bundler-runtime@2.8.2': + '@module-federation/webpack-bundler-runtime@2.9.1': dependencies: - '@module-federation/error-codes': 2.8.2 - '@module-federation/runtime': 2.8.2 - '@module-federation/sdk': 2.8.2 + '@module-federation/error-codes': 2.9.1 + '@module-federation/runtime': 2.9.1 + '@module-federation/sdk': 2.9.1 optional: true '@monaco-editor/loader@1.7.0': @@ -36319,20 +36119,20 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.9.0 + '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 '@tybys/wasm-util': 0.10.1 optional: true '@napi-rs/wasm-runtime@0.2.4': dependencies: - '@emnapi/core': 1.11.1 + '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 '@tybys/wasm-util': 0.9.0 '@napi-rs/wasm-runtime@1.0.7': dependencies: - '@emnapi/core': 1.11.1 + '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 '@tybys/wasm-util': 0.10.3 optional: true @@ -36344,13 +36144,6 @@ 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 - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': dependencies: '@emnapi/core': 1.11.3 @@ -36572,7 +36365,7 @@ 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.8)(@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.7.0))(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.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@26.2.0)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vue-tsc@2.2.12(typescript@7.0.2))(webpack-cli@5.1.4)': + '@nx/react@22.5.4(@babel/core@7.29.7)(@babel/traverse@7.29.8)(@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.7.0))(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.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.11(@edge-runtime/vm@3.2.0)(@types/node@26.6.2)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.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.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) '@nx/eslint': 22.5.4(@babel/traverse@7.29.8)(@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.7.0))(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))) @@ -36589,7 +36382,7 @@ snapshots: semver: 7.6.3 tslib: 2.8.1 optionalDependencies: - '@nx/vite': 22.5.4(@babel/traverse@7.29.8)(@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.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@26.2.0)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0)) + '@nx/vite': 22.5.4(@babel/traverse@7.29.8)(@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.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.11(@edge-runtime/vm@3.2.0)(@types/node@26.6.2)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))) transitivePeerDependencies: - '@babel/core' - '@babel/traverse' @@ -36646,11 +36439,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.5.4(@babel/traverse@7.29.8)(@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.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@26.2.0)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))': + '@nx/vite@22.5.4(@babel/traverse@7.29.8)(@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.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.11(@edge-runtime/vm@3.2.0)(@types/node@26.6.2)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.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.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) '@nx/js': 22.5.4(@babel/traverse@7.29.8)(@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.8)(@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.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@26.2.0)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0)) + '@nx/vitest': 22.5.4(@babel/traverse@7.29.8)(@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.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.11(@edge-runtime/vm@3.2.0)(@types/node@26.6.2)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))) '@phenomnomnominal/tsquery': 6.1.4(typescript@7.0.2) ajv: 8.18.0 enquirer: 2.3.6 @@ -36658,8 +36451,8 @@ snapshots: semver: 7.8.5 tsconfig-paths: 4.2.0 tslib: 2.8.1 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) - vitest: 3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@26.2.0)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) + vite: 7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) + vitest: 4.1.11(@edge-runtime/vm@3.2.0)(@types/node@26.6.2)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -36671,7 +36464,7 @@ snapshots: - verdaccio optional: true - '@nx/vitest@22.5.4(@babel/traverse@7.29.8)(@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.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@26.2.0)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))': + '@nx/vitest@22.5.4(@babel/traverse@7.29.8)(@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.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))(vitest@4.1.11(@edge-runtime/vm@3.2.0)(@types/node@26.6.2)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.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.27)(typescript@6.0.3))(@swc/core@1.15.41(@swc/helpers@0.5.23))) '@nx/js': 22.5.4(@babel/traverse@7.29.8)(@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))) @@ -36679,8 +36472,8 @@ snapshots: semver: 7.8.5 tslib: 2.8.1 optionalDependencies: - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) - vitest: 3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@26.2.0)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) + vite: 7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) + vitest: 4.1.11(@edge-runtime/vm@3.2.0)(@types/node@26.6.2)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -36883,7 +36676,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.3 + picomatch: 4.0.5 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -36900,78 +36693,78 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true - '@peculiar/asn1-cms@2.8.0': + '@peculiar/asn1-cms@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.8.0 - '@peculiar/asn1-x509': 2.8.0 - '@peculiar/asn1-x509-attr': 2.8.0 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + '@peculiar/asn1-x509-attr': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-csr@2.8.0': + '@peculiar/asn1-csr@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.8.0 - '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-ecc@2.8.0': + '@peculiar/asn1-ecc@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.8.0 - '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-pfx@2.8.0': + '@peculiar/asn1-pfx@2.9.4': dependencies: - '@peculiar/asn1-cms': 2.8.0 - '@peculiar/asn1-pkcs8': 2.8.0 - '@peculiar/asn1-rsa': 2.8.0 - '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-cms': 2.9.4 + '@peculiar/asn1-pkcs8': 2.9.4 + '@peculiar/asn1-rsa': 2.9.4 + '@peculiar/asn1-schema': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-pkcs8@2.8.0': + '@peculiar/asn1-pkcs8@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.8.0 - '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-pkcs9@2.8.0': + '@peculiar/asn1-pkcs9@2.9.4': dependencies: - '@peculiar/asn1-cms': 2.8.0 - '@peculiar/asn1-pfx': 2.8.0 - '@peculiar/asn1-pkcs8': 2.8.0 - '@peculiar/asn1-schema': 2.8.0 - '@peculiar/asn1-x509': 2.8.0 - '@peculiar/asn1-x509-attr': 2.8.0 + '@peculiar/asn1-cms': 2.9.4 + '@peculiar/asn1-pfx': 2.9.4 + '@peculiar/asn1-pkcs8': 2.9.4 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 + '@peculiar/asn1-x509-attr': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-rsa@2.8.0': + '@peculiar/asn1-rsa@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.8.0 - '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-schema@2.8.0': + '@peculiar/asn1-schema@2.9.4': dependencies: '@peculiar/utils': 2.0.3 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-x509-attr@2.8.0': + '@peculiar/asn1-x509-attr@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.8.0 - '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 asn1js: 3.0.10 tslib: 2.8.1 - '@peculiar/asn1-x509@2.8.0': + '@peculiar/asn1-x509@2.9.4': dependencies: - '@peculiar/asn1-schema': 2.8.0 + '@peculiar/asn1-schema': 2.9.4 '@peculiar/utils': 2.0.3 asn1js: 3.0.10 tslib: 2.8.1 @@ -36982,13 +36775,13 @@ snapshots: '@peculiar/x509@1.14.3': dependencies: - '@peculiar/asn1-cms': 2.8.0 - '@peculiar/asn1-csr': 2.8.0 - '@peculiar/asn1-ecc': 2.8.0 - '@peculiar/asn1-pkcs9': 2.8.0 - '@peculiar/asn1-rsa': 2.8.0 - '@peculiar/asn1-schema': 2.8.0 - '@peculiar/asn1-x509': 2.8.0 + '@peculiar/asn1-cms': 2.9.4 + '@peculiar/asn1-csr': 2.9.4 + '@peculiar/asn1-ecc': 2.9.4 + '@peculiar/asn1-pkcs9': 2.9.4 + '@peculiar/asn1-rsa': 2.9.4 + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/asn1-x509': 2.9.4 pvtsutils: 1.3.6 reflect-metadata: 0.2.2 tslib: 2.8.1 @@ -37005,7 +36798,7 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.1.2': {} + '@pkgr/core@0.3.6': {} '@playwright/test@1.57.0': dependencies: @@ -39189,7 +38982,7 @@ snapshots: - supports-color - typescript - '@react-native/eslint-config@0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)))(prettier@2.8.8)(typescript@7.0.2)': + '@react-native/eslint-config@0.80.0(eslint@8.57.1)(jest@29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(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) @@ -39200,7 +38993,7 @@ snapshots: 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@7.0.2))(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(jest@29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)))(typescript@7.0.2) + 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.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(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) @@ -39467,7 +39260,7 @@ snapshots: '@rock-js/tools@0.14.1': dependencies: '@clack/prompts': 0.11.0 - adm-zip: 0.5.18 + adm-zip: 0.5.16 appdirsjs: 1.2.7 fs-fingerprint: 0.11.0 is-unicode-supported: 2.1.0 @@ -39866,9 +39659,9 @@ snapshots: core-js: 3.47.0 jiti: 2.6.1 - '@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)': + '@rsbuild/core@2.0.0-beta.2(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)': dependencies: - '@rspack/core': 2.0.0-beta.0(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.0.0-beta.0(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 jiti: 2.6.1 optionalDependencies: @@ -39876,36 +39669,36 @@ snapshots: transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/core@2.0.15(@module-federation/runtime-tools@2.8.2)(core-js@3.36.1)': + '@rsbuild/core@2.0.15(@module-federation/runtime-tools@2.9.1)(core-js@3.36.1)': dependencies: - '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 optionalDependencies: core-js: 3.36.1 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/core@2.0.15(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)': + '@rsbuild/core@2.0.15(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)': dependencies: - '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.0.8(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 optionalDependencies: core-js: 3.49.0 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)': + '@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)': dependencies: - '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 optionalDependencies: core-js: 3.49.0 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)': + '@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)': dependencies: - '@rspack/core': 2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 optionalDependencies: core-js: 3.49.0 @@ -39914,25 +39707,25 @@ snapshots: '@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) + '@rspack/core': 2.1.10(@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: core-js: 3.49.0 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.36.1)': + '@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.36.1)': dependencies: - '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 optionalDependencies: core-js: 3.36.1 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)': + '@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)': dependencies: - '@rspack/core': 2.1.2(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) '@swc/helpers': 0.5.23 optionalDependencies: core-js: 3.49.0 @@ -39943,9 +39736,9 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-assets-retry@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-assets-retry@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': optionalDependencies: - '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@rsbuild/plugin-babel@1.0.1-rc.4(@rsbuild/core@1.0.1-rc.4)': dependencies: @@ -39961,13 +39754,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@rsbuild/plugin-babel@1.0.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-babel@1.0.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: '@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.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@types/babel__core': 7.20.5 deepmerge: 4.3.1 reduce-configs: 1.1.2 @@ -39989,7 +39782,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@rsbuild/plugin-babel@1.2.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-babel@1.2.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: '@babel/core': 7.29.7 '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.7) @@ -39998,21 +39791,21 @@ snapshots: '@types/babel__core': 7.20.5 reduce-configs: 1.1.2 optionalDependencies: - '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - supports-color - '@rsbuild/plugin-babel@2.0.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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-babel@2.0.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.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.8(@module-federation/runtime-tools@2.8.2)(@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: 10.1.1(@babel/core@7.29.7)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - supports-color @@ -40028,7 +39821,7 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-check-syntax@2.0.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-check-syntax@2.0.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: acorn: 8.17.0 browserslist-to-es-version: 1.4.1 @@ -40036,7 +39829,7 @@ snapshots: picocolors: 1.1.1 source-map: 0.7.6 optionalDependencies: - '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(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.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4))': dependencies: @@ -40083,12 +39876,12 @@ snapshots: - lightningcss - webpack - '@rsbuild/plugin-css-minimizer@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(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-css-minimizer@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(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: 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.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@parcel/css' - '@swc/css' @@ -40098,12 +39891,12 @@ snapshots: - lightningcss - webpack - '@rsbuild/plugin-css-minimizer@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(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-css-minimizer@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(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: 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.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@parcel/css' - '@swc/css' @@ -40119,26 +39912,26 @@ snapshots: deepmerge: 4.3.1 reduce-configs: 1.1.2 - '@rsbuild/plugin-less@1.6.4(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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-less@1.6.4(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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: deepmerge: 4.3.1 less: 4.6.4 - less-loader: 12.3.3(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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)) + less-loader: 12.3.3(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - webpack - '@rsbuild/plugin-less@1.6.4(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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-less@1.6.4(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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: deepmerge: 4.3.1 less: 4.6.4 - less-loader: 12.3.3(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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))) + less-loader: 12.3.3(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - webpack @@ -40224,100 +40017,100 @@ snapshots: transitivePeerDependencies: - webpack-hot-middleware - '@rsbuild/plugin-react@1.4.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': + '@rsbuild/plugin-react@1.4.5(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': dependencies: - '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(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@2.1.4(@module-federation/runtime-tools@2.8.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.9.1)(core-js@3.49.0))(webpack-hot-middleware@2.26.1)': dependencies: - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(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@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))': + '@rsbuild/plugin-react@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))': dependencies: - '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(react-refresh@0.18.0) + '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@rsbuild/plugin-react@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))': + '@rsbuild/plugin-react@2.0.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))': dependencies: - '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-refresh@0.18.0) + '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@rsbuild/plugin-react@2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))': + '@rsbuild/plugin-react@2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))': dependencies: - '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-refresh@0.18.0) + '@rspack/plugin-react-refresh': 2.0.0(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))': dependencies: - '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(react-refresh@0.18.0) + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))': dependencies: - '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-refresh@0.18.0) + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))': dependencies: - '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-refresh@0.18.0) + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-refresh@0.18.0) react-refresh: 0.18.0 optionalDependencies: - '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@0.7.5(@swc/helpers@0.5.23))': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@0.7.5(@swc/helpers@0.5.23))': dependencies: '@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))': dependencies: - '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(react-refresh@0.18.0) + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))(react-refresh@0.18.0) react-refresh: 0.18.0 optionalDependencies: - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))': + '@rsbuild/plugin-react@2.1.0(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))': dependencies: - '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-refresh@0.18.0) + '@rspack/plugin-react-refresh': 2.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' @@ -40328,12 +40121,12 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-rem@1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-rem@1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: deepmerge: 4.3.1 terser: 5.48.0 optionalDependencies: - '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@rsbuild/plugin-sass@1.5.0(@rsbuild/core@1.7.3)': dependencies: @@ -40344,7 +40137,7 @@ snapshots: reduce-configs: 1.1.2 sass-embedded: 1.100.0 - '@rsbuild/plugin-sass@1.5.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-sass@1.5.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: deepmerge: 4.3.1 loader-utils: 2.0.4 @@ -40352,9 +40145,9 @@ snapshots: reduce-configs: 1.1.2 sass-embedded: 1.100.0 optionalDependencies: - '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) - '@rsbuild/plugin-sass@2.0.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-sass@2.0.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: deepmerge: 4.3.1 loader-utils: 2.0.4 @@ -40362,7 +40155,7 @@ snapshots: reduce-configs: 2.0.1 sass-embedded: 1.100.0 optionalDependencies: - '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@rsbuild/plugin-source-build@1.0.4(@rsbuild/core@1.7.3)': dependencies: @@ -40372,13 +40165,13 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-source-build@1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-source-build@1.0.6(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: fast-glob: 3.3.3 json5: 2.2.3 yaml: 2.9.0 optionalDependencies: - '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@rsbuild/plugin-styled-components@1.6.0(@rsbuild/core@1.7.3)': dependencies: @@ -40401,31 +40194,31 @@ snapshots: - typescript - webpack-hot-middleware - '@rsbuild/plugin-svgr@2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(typescript@7.0.2)': + '@rsbuild/plugin-svgr@2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))(typescript@7.0.2)': dependencies: - '@rsbuild/plugin-react': 2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17)) + '@rsbuild/plugin-react': 2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - supports-color - typescript - '@rsbuild/plugin-svgr@2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(typescript@7.0.2)': + '@rsbuild/plugin-svgr@2.0.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(typescript@7.0.2)': dependencies: - '@rsbuild/plugin-react': 2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) + '@rsbuild/plugin-react': 2.1.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - supports-color @@ -40463,40 +40256,40 @@ snapshots: - tslib - typescript - '@rsbuild/plugin-type-check@1.5.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2)': + '@rsbuild/plugin-type-check@1.5.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2 - ts-checker-rspack-plugin: 1.5.1(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2) + ts-checker-rspack-plugin: 1.5.1(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2) optionalDependencies: - '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - tslib - typescript - '@rsbuild/plugin-type-check@1.5.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2)': + '@rsbuild/plugin-type-check@1.5.0(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2 - ts-checker-rspack-plugin: 1.5.1(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2) + ts-checker-rspack-plugin: 1.5.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2) optionalDependencies: - '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - tslib - typescript - '@rsbuild/plugin-type-check@1.5.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2)': + '@rsbuild/plugin-type-check@1.5.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2 - ts-checker-rspack-plugin: 1.5.1(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2) + ts-checker-rspack-plugin: 1.5.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2) optionalDependencies: - '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - tslib @@ -40506,26 +40299,26 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.3 - '@rsbuild/plugin-typed-css-modules@1.2.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-typed-css-modules@1.2.3(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': optionalDependencies: - '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) - '@rsbuild/plugin-vue-jsx@2.0.1(@babel/core@7.29.7)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))': + '@rsbuild/plugin-vue-jsx@2.0.1(@babel/core@7.29.7)(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))': dependencies: - '@rsbuild/plugin-babel': 1.2.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) + '@rsbuild/plugin-babel': 1.2.1(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(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.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@babel/core' - supports-color - '@rsbuild/plugin-vue@2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2))': + '@rsbuild/plugin-vue@2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2))': dependencies: - rspack-vue-loader: 17.5.1(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)) + rspack-vue-loader: 17.5.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)) optionalDependencies: - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) transitivePeerDependencies: - '@rspack/core' - '@vue/compiler-sfc' @@ -40609,10 +40402,10 @@ snapshots: - '@emnapi/core' - '@emnapi/runtime' - '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.8.2)(core-js@3.36.1)(typescript@6.0.3)': + '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.9.1)(core-js@3.36.1)(typescript@6.0.3)': dependencies: - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(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.2)(core-js@3.36.1))(typescript@6.0.3) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(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.9.1)(core-js@3.36.1))(typescript@6.0.3) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) typescript: 6.0.3 @@ -40621,10 +40414,10 @@ snapshots: - '@typescript/native-preview' - core-js - '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@6.0.3)': + '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@20.19.5))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@6.0.3)': dependencies: - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(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.2)(core-js@3.49.0))(typescript@6.0.3) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(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.9.1)(core-js@3.49.0))(typescript@6.0.3) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) typescript: 6.0.3 @@ -40633,10 +40426,10 @@ snapshots: - '@typescript/native-preview' - core-js - '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@6.0.3)': + '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@22.19.15))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@6.0.3)': dependencies: - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(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.2)(core-js@3.49.0))(typescript@6.0.3) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(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.9.1)(core-js@3.49.0))(typescript@6.0.3) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@22.19.15) typescript: 6.0.3 @@ -40645,37 +40438,37 @@ snapshots: - '@typescript/native-preview' - core-js - '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@6.0.3)': + '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@6.0.3)': dependencies: - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) - rsbuild-plugin-dts: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(typescript@6.0.3) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + rsbuild-plugin-dts: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(typescript@6.0.3) optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@26.2.0) + '@microsoft/api-extractor': 7.57.7(@types/node@26.6.2) typescript: 6.0.3 transitivePeerDependencies: - '@module-federation/runtime-tools' - '@typescript/native-preview' - core-js - '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2)': + '@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2)': dependencies: - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) - rsbuild-plugin-dts: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(typescript@7.0.2) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + rsbuild-plugin-dts: 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(typescript@7.0.2) optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@26.2.0) + '@microsoft/api-extractor': 7.57.7(@types/node@26.6.2) 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.2.0))(typescript@5.9.3)': + '@rslib/core@0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(typescript@5.9.3)': dependencies: '@rsbuild/core': 1.4.0-beta.2 - rsbuild-plugin-dts: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@rsbuild/core@1.4.0-beta.2)(typescript@5.9.3) + rsbuild-plugin-dts: 0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@rsbuild/core@1.4.0-beta.2)(typescript@5.9.3) tinyglobby: 0.2.15 optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@26.2.0) + '@microsoft/api-extractor': 7.57.7(@types/node@26.6.2) typescript: 5.9.3 '@rspack/binding-darwin-arm64@0.7.5': @@ -40690,9 +40483,6 @@ snapshots: '@rspack/binding-darwin-arm64@1.3.15': optional: true - '@rspack/binding-darwin-arm64@1.3.9': - optional: true - '@rspack/binding-darwin-arm64@1.5.8': optional: true @@ -40714,10 +40504,7 @@ snapshots: '@rspack/binding-darwin-arm64@2.0.8': optional: true - '@rspack/binding-darwin-arm64@2.1.2': - optional: true - - '@rspack/binding-darwin-arm64@2.1.8': + '@rspack/binding-darwin-arm64@2.1.10': optional: true '@rspack/binding-darwin-x64@0.7.5': @@ -40732,9 +40519,6 @@ snapshots: '@rspack/binding-darwin-x64@1.3.15': optional: true - '@rspack/binding-darwin-x64@1.3.9': - optional: true - '@rspack/binding-darwin-x64@1.5.8': optional: true @@ -40756,10 +40540,7 @@ snapshots: '@rspack/binding-darwin-x64@2.0.8': optional: true - '@rspack/binding-darwin-x64@2.1.2': - optional: true - - '@rspack/binding-darwin-x64@2.1.8': + '@rspack/binding-darwin-x64@2.1.10': optional: true '@rspack/binding-linux-arm64-gnu@0.7.5': @@ -40774,9 +40555,6 @@ snapshots: '@rspack/binding-linux-arm64-gnu@1.3.15': optional: true - '@rspack/binding-linux-arm64-gnu@1.3.9': - optional: true - '@rspack/binding-linux-arm64-gnu@1.5.8': optional: true @@ -40798,10 +40576,7 @@ 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-gnu@2.1.8': + '@rspack/binding-linux-arm64-gnu@2.1.10': optional: true '@rspack/binding-linux-arm64-musl@0.7.5': @@ -40816,9 +40591,6 @@ snapshots: '@rspack/binding-linux-arm64-musl@1.3.15': optional: true - '@rspack/binding-linux-arm64-musl@1.3.9': - optional: true - '@rspack/binding-linux-arm64-musl@1.5.8': optional: true @@ -40840,22 +40612,19 @@ snapshots: '@rspack/binding-linux-arm64-musl@2.0.8': optional: true - '@rspack/binding-linux-arm64-musl@2.1.2': - optional: true - - '@rspack/binding-linux-arm64-musl@2.1.8': + '@rspack/binding-linux-arm64-musl@2.1.10': optional: true - '@rspack/binding-linux-riscv64-gnu@2.1.2': + '@rspack/binding-linux-ppc64-gnu@2.1.10': optional: true - '@rspack/binding-linux-riscv64-gnu@2.1.8': + '@rspack/binding-linux-riscv64-gnu@2.1.10': optional: true - '@rspack/binding-linux-riscv64-musl@2.1.2': + '@rspack/binding-linux-riscv64-musl@2.1.10': optional: true - '@rspack/binding-linux-riscv64-musl@2.1.8': + '@rspack/binding-linux-s390x-gnu@2.1.10': optional: true '@rspack/binding-linux-x64-gnu@0.7.5': @@ -40870,9 +40639,6 @@ snapshots: '@rspack/binding-linux-x64-gnu@1.3.15': optional: true - '@rspack/binding-linux-x64-gnu@1.3.9': - optional: true - '@rspack/binding-linux-x64-gnu@1.5.8': optional: true @@ -40894,10 +40660,7 @@ 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-gnu@2.1.8': + '@rspack/binding-linux-x64-gnu@2.1.10': optional: true '@rspack/binding-linux-x64-musl@0.7.5': @@ -40912,9 +40675,6 @@ snapshots: '@rspack/binding-linux-x64-musl@1.3.15': optional: true - '@rspack/binding-linux-x64-musl@1.3.9': - optional: true - '@rspack/binding-linux-x64-musl@1.5.8': optional: true @@ -40936,10 +40696,7 @@ snapshots: '@rspack/binding-linux-x64-musl@2.0.8': optional: true - '@rspack/binding-linux-x64-musl@2.1.2': - optional: true - - '@rspack/binding-linux-x64-musl@2.1.8': + '@rspack/binding-linux-x64-musl@2.1.10': optional: true '@rspack/binding-wasm32-wasi@1.5.8(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': @@ -40984,14 +40741,7 @@ 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-wasm32-wasi@2.1.8': + '@rspack/binding-wasm32-wasi@2.1.10': dependencies: '@emnapi/core': 1.11.3 '@emnapi/runtime': 1.11.3 @@ -41010,9 +40760,6 @@ snapshots: '@rspack/binding-win32-arm64-msvc@1.3.15': optional: true - '@rspack/binding-win32-arm64-msvc@1.3.9': - optional: true - '@rspack/binding-win32-arm64-msvc@1.5.8': optional: true @@ -41034,10 +40781,7 @@ snapshots: '@rspack/binding-win32-arm64-msvc@2.0.8': optional: true - '@rspack/binding-win32-arm64-msvc@2.1.2': - optional: true - - '@rspack/binding-win32-arm64-msvc@2.1.8': + '@rspack/binding-win32-arm64-msvc@2.1.10': optional: true '@rspack/binding-win32-ia32-msvc@0.7.5': @@ -41052,9 +40796,6 @@ snapshots: '@rspack/binding-win32-ia32-msvc@1.3.15': optional: true - '@rspack/binding-win32-ia32-msvc@1.3.9': - optional: true - '@rspack/binding-win32-ia32-msvc@1.5.8': optional: true @@ -41076,10 +40817,7 @@ snapshots: '@rspack/binding-win32-ia32-msvc@2.0.8': optional: true - '@rspack/binding-win32-ia32-msvc@2.1.2': - optional: true - - '@rspack/binding-win32-ia32-msvc@2.1.8': + '@rspack/binding-win32-ia32-msvc@2.1.10': optional: true '@rspack/binding-win32-x64-msvc@0.7.5': @@ -41094,9 +40832,6 @@ snapshots: '@rspack/binding-win32-x64-msvc@1.3.15': optional: true - '@rspack/binding-win32-x64-msvc@1.3.9': - optional: true - '@rspack/binding-win32-x64-msvc@1.5.8': optional: true @@ -41118,10 +40853,7 @@ snapshots: '@rspack/binding-win32-x64-msvc@2.0.8': optional: true - '@rspack/binding-win32-x64-msvc@2.1.2': - optional: true - - '@rspack/binding-win32-x64-msvc@2.1.8': + '@rspack/binding-win32-x64-msvc@2.1.10': optional: true '@rspack/binding@0.7.5': @@ -41172,18 +40904,6 @@ snapshots: '@rspack/binding-win32-ia32-msvc': 1.3.15 '@rspack/binding-win32-x64-msvc': 1.3.15 - '@rspack/binding@1.3.9': - optionalDependencies: - '@rspack/binding-darwin-arm64': 1.3.9 - '@rspack/binding-darwin-x64': 1.3.9 - '@rspack/binding-linux-arm64-gnu': 1.3.9 - '@rspack/binding-linux-arm64-musl': 1.3.9 - '@rspack/binding-linux-x64-gnu': 1.3.9 - '@rspack/binding-linux-x64-musl': 1.3.9 - '@rspack/binding-win32-arm64-msvc': 1.3.9 - '@rspack/binding-win32-ia32-msvc': 1.3.9 - '@rspack/binding-win32-x64-msvc': 1.3.9 - '@rspack/binding@1.5.8(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)': optionalDependencies: '@rspack/binding-darwin-arm64': 1.5.8 @@ -41278,55 +40998,28 @@ 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/binding@2.1.8': - optionalDependencies: - '@rspack/binding-darwin-arm64': 2.1.8 - '@rspack/binding-darwin-x64': 2.1.8 - '@rspack/binding-linux-arm64-gnu': 2.1.8 - '@rspack/binding-linux-arm64-musl': 2.1.8 - '@rspack/binding-linux-riscv64-gnu': 2.1.8 - '@rspack/binding-linux-riscv64-musl': 2.1.8 - '@rspack/binding-linux-x64-gnu': 2.1.8 - '@rspack/binding-linux-x64-musl': 2.1.8 - '@rspack/binding-wasm32-wasi': 2.1.8 - '@rspack/binding-win32-arm64-msvc': 2.1.8 - '@rspack/binding-win32-ia32-msvc': 2.1.8 - '@rspack/binding-win32-x64-msvc': 2.1.8 - - '@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)': + '@rspack/binding@2.1.10': + optionalDependencies: + '@rspack/binding-darwin-arm64': 2.1.10 + '@rspack/binding-darwin-x64': 2.1.10 + '@rspack/binding-linux-arm64-gnu': 2.1.10 + '@rspack/binding-linux-arm64-musl': 2.1.10 + '@rspack/binding-linux-ppc64-gnu': 2.1.10 + '@rspack/binding-linux-riscv64-gnu': 2.1.10 + '@rspack/binding-linux-riscv64-musl': 2.1.10 + '@rspack/binding-linux-s390x-gnu': 2.1.10 + '@rspack/binding-linux-x64-gnu': 2.1.10 + '@rspack/binding-linux-x64-musl': 2.1.10 + '@rspack/binding-wasm32-wasi': 2.1.10 + '@rspack/binding-win32-arm64-msvc': 2.1.10 + '@rspack/binding-win32-ia32-msvc': 2.1.10 + '@rspack/binding-win32-x64-msvc': 2.1.10 + + '@rspack/cli@2.1.10(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(@rspack/dev-server@2.2.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(selfsigned@5.5.0))': dependencies: - '@discoveryjs/json-ext': 0.5.7 - '@rspack/core': 1.3.9(@swc/helpers@0.5.13) - '@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) - colorette: 2.0.20 - exit-hook: 4.0.0 - interpret: 3.1.1 - rechoir: 0.8.0 - webpack-bundle-analyzer: 4.10.2 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/express' - - bufferutil - - debug - - supports-color - - utf-8-validate - - webpack - - webpack-cli + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13) + optionalDependencies: + '@rspack/dev-server': 2.2.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(selfsigned@5.5.0) '@rspack/core@0.7.5(@swc/helpers@0.5.23)': dependencies: @@ -41364,24 +41057,6 @@ snapshots: optionalDependencies: '@swc/helpers': 0.5.17 - '@rspack/core@1.3.9(@swc/helpers@0.5.13)': - dependencies: - '@module-federation/runtime-tools': 0.13.1 - '@rspack/binding': 1.3.9 - '@rspack/lite-tapable': 1.0.1 - caniuse-lite: 1.0.30001780 - optionalDependencies: - '@swc/helpers': 0.5.13 - - '@rspack/core@1.3.9(@swc/helpers@0.5.23)': - dependencies: - '@module-federation/runtime-tools': 0.13.1 - '@rspack/binding': 1.3.9 - '@rspack/lite-tapable': 1.0.1 - caniuse-lite: 1.0.30001780 - optionalDependencies: - '@swc/helpers': 0.5.23 - '@rspack/core@1.5.8(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(@swc/helpers@0.5.17)': dependencies: '@module-federation/runtime-tools': 0.18.0 @@ -41435,76 +41110,74 @@ snapshots: optionalDependencies: '@swc/helpers': 0.5.23 - '@rspack/core@2.0.0-beta.0(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)': + '@rspack/core@2.0.0-beta.0(@module-federation/runtime-tools@2.9.1)(@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.8.2 + '@module-federation/runtime-tools': 2.9.1 '@swc/helpers': 0.5.23 - '@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17)': + '@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17)': dependencies: '@rspack/binding': 2.0.6 optionalDependencies: - '@module-federation/runtime-tools': 2.8.2 + '@module-federation/runtime-tools': 2.9.1 '@swc/helpers': 0.5.17 - '@rspack/core@2.0.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)': + '@rspack/core@2.0.8(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)': dependencies: '@rspack/binding': 2.0.8 optionalDependencies: - '@module-federation/runtime-tools': 2.8.2 + '@module-federation/runtime-tools': 2.9.1 '@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)': + '@rspack/core@2.1.10(@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 + '@rspack/binding': 2.1.10 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.2)(@swc/helpers@0.5.23)': + '@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13)': dependencies: - '@rspack/binding': 2.1.2 + '@rspack/binding': 2.1.10 optionalDependencies: - '@module-federation/runtime-tools': 2.8.2 - '@swc/helpers': 0.5.23 + '@module-federation/runtime-tools': 2.9.1 + '@swc/helpers': 0.5.13 - '@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17)': + '@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17)': dependencies: - '@rspack/binding': 2.1.8 + '@rspack/binding': 2.1.10 optionalDependencies: - '@module-federation/runtime-tools': 2.8.2 + '@module-federation/runtime-tools': 2.9.1 '@swc/helpers': 0.5.17 optional: true - '@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)': + '@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)': dependencies: - '@rspack/binding': 2.1.8 + '@rspack/binding': 2.1.10 optionalDependencies: - '@module-federation/runtime-tools': 2.8.2 + '@module-federation/runtime-tools': 2.9.1 '@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)': + '@rspack/core@2.1.10(@module-federation/runtime-tools@packages+runtime-tools)(@swc/helpers@0.5.23)': dependencies: - '@rspack/core': 1.3.9(@swc/helpers@0.5.13) - chokidar: 3.6.0 - express: 4.22.1 - http-proxy-middleware: 2.0.9(@types/express@4.17.21) - mime-types: 2.1.35 - p-retry: 6.2.1 - 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)) - webpack-dev-server: 5.2.0(webpack-cli@5.1.4)(webpack@5.104.1) - ws: 8.21.3 - transitivePeerDependencies: - - '@types/express' - - bufferutil - - debug - - supports-color - - utf-8-validate - - webpack - - webpack-cli + '@rspack/binding': 2.1.10 + optionalDependencies: + '@module-federation/runtime-tools': link:packages/runtime-tools + '@swc/helpers': 0.5.23 + + '@rspack/dev-middleware@2.0.4(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))': + optionalDependencies: + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13) + + '@rspack/dev-server@2.2.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(selfsigned@5.5.0)': + dependencies: + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13) + '@rspack/dev-middleware': 2.0.4(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13)) + optionalDependencies: + selfsigned: 5.5.0 '@rspack/lite-tapable@1.0.1': {} @@ -41524,17 +41197,17 @@ snapshots: optionalDependencies: webpack-hot-middleware: 2.26.1 - '@rspack/plugin-react-refresh@2.0.0(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(react-refresh@0.18.0)': + '@rspack/plugin-react-refresh@2.0.0(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2)(@swc/helpers@0.5.17) + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17) - '@rspack/plugin-react-refresh@2.0.0(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-refresh@0.18.0)': + '@rspack/plugin-react-refresh@2.0.0(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-refresh@0.18.0)': dependencies: react-refresh: 0.18.0 optionalDependencies: - '@rspack/core': 2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@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: @@ -41542,31 +41215,31 @@ snapshots: 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.2)(@swc/helpers@0.5.17))(react-refresh@0.18.0)': + '@rspack/plugin-react-refresh@2.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2)(@swc/helpers@0.5.17) + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17) - '@rspack/plugin-react-refresh@2.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(react-refresh@0.18.0)': + '@rspack/plugin-react-refresh@2.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))(react-refresh@0.18.0)': dependencies: react-refresh: 0.18.0 optionalDependencies: - '@rspack/core': 2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17) - '@rspack/plugin-react-refresh@2.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-refresh@0.18.0)': + '@rspack/plugin-react-refresh@2.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-refresh@0.18.0)': dependencies: react-refresh: 0.18.0 optionalDependencies: - '@rspack/core': 2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) - '@rspress/core@2.0.14(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.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.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) - '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) - '@rspress/shared': 2.0.14(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) + '@rspress/shared': 2.0.14(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@shikijs/rehype': 4.2.0 '@types/unist': 3.0.3 '@unhead/react': 2.1.15(react@19.2.7) @@ -41610,13 +41283,13 @@ snapshots: - micromark-util-types - supports-color - '@rspress/core@2.0.14(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.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.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) - '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)) - '@rspress/shared': 2.0.14(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + '@rsbuild/plugin-react': 2.0.1(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)) + '@rspress/shared': 2.0.14(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@shikijs/rehype': 4.2.0 '@types/unist': 3.0.3 '@unhead/react': 2.1.15(react@19.2.7) @@ -41660,25 +41333,25 @@ snapshots: - micromark-util-types - supports-color - '@rspress/shared@2.0.14(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)': + '@rspress/shared@2.0.14(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)': dependencies: - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@shikijs/rehype': 4.2.0 unified: 11.0.5 transitivePeerDependencies: - '@module-federation/runtime-tools' - core-js - '@rstest/browser-react@0.11.6(@rstest/core@0.11.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@rstest/browser-react@0.11.6(@rstest/core@0.11.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@rstest/core': 0.11.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3) + '@rstest/core': 0.11.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@rstest/browser@0.11.6(@rstest/core@0.11.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3))(playwright@1.57.0)': + '@rstest/browser@0.11.6(@rstest/core@0.11.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3))(playwright@1.57.0)': dependencies: '@jridgewell/trace-mapping': 0.3.31 - '@rstest/core': 0.11.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3) + '@rstest/core': 0.11.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3) convert-source-map: 2.0.0 open-editor: 6.0.0 pathe: 2.0.3 @@ -41690,9 +41363,9 @@ snapshots: - bufferutil - utf-8-validate - '@rstest/core@0.10.6(@module-federation/runtime-tools@2.8.2)(core-js@3.36.1)(jsdom@20.0.3)': + '@rstest/core@0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.36.1)(jsdom@20.0.3)': dependencies: - '@rsbuild/core': 2.0.15(@module-federation/runtime-tools@2.8.2)(core-js@3.36.1) + '@rsbuild/core': 2.0.15(@module-federation/runtime-tools@2.9.1)(core-js@3.36.1) '@types/chai': 5.2.3 optionalDependencies: jsdom: 20.0.3 @@ -41700,9 +41373,9 @@ snapshots: - '@module-federation/runtime-tools' - core-js - '@rstest/core@0.10.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3)': + '@rstest/core@0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3)': dependencies: - '@rsbuild/core': 2.0.15(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.0.15(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@types/chai': 5.2.3 optionalDependencies: jsdom: 20.0.3 @@ -41710,9 +41383,9 @@ snapshots: - '@module-federation/runtime-tools' - core-js - '@rstest/core@0.11.6(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(jsdom@20.0.3)': + '@rstest/core@0.11.6(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(jsdom@20.0.3)': dependencies: - '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) '@types/chai': 5.2.3 optionalDependencies: jsdom: 20.0.3 @@ -41758,7 +41431,7 @@ snapshots: '@types/node': 22.19.15 optional: true - '@rushstack/node-core-library@5.20.3(@types/node@26.2.0)': + '@rushstack/node-core-library@5.20.3(@types/node@26.6.2)': dependencies: ajv: 8.18.0 ajv-draft-04: 1.0.0(ajv@8.18.0) @@ -41769,7 +41442,7 @@ snapshots: resolve: 1.22.12 semver: 7.5.4 optionalDependencies: - '@types/node': 26.2.0 + '@types/node': 26.6.2 optional: true '@rushstack/problem-matcher@0.2.1(@types/node@20.19.5)': @@ -41782,9 +41455,9 @@ snapshots: '@types/node': 22.19.15 optional: true - '@rushstack/problem-matcher@0.2.1(@types/node@26.2.0)': + '@rushstack/problem-matcher@0.2.1(@types/node@26.6.2)': optionalDependencies: - '@types/node': 26.2.0 + '@types/node': 26.6.2 optional: true '@rushstack/rig-package@0.7.2': @@ -41811,13 +41484,13 @@ snapshots: '@types/node': 22.19.15 optional: true - '@rushstack/terminal@0.22.3(@types/node@26.2.0)': + '@rushstack/terminal@0.22.3(@types/node@26.6.2)': dependencies: - '@rushstack/node-core-library': 5.20.3(@types/node@26.2.0) - '@rushstack/problem-matcher': 0.2.1(@types/node@26.2.0) + '@rushstack/node-core-library': 5.20.3(@types/node@26.6.2) + '@rushstack/problem-matcher': 0.2.1(@types/node@26.6.2) supports-color: 8.1.1 optionalDependencies: - '@types/node': 26.2.0 + '@types/node': 26.6.2 optional: true '@rushstack/ts-command-line@5.3.3(@types/node@20.19.5)': @@ -41840,9 +41513,9 @@ snapshots: - '@types/node' optional: true - '@rushstack/ts-command-line@5.3.3(@types/node@26.2.0)': + '@rushstack/ts-command-line@5.3.3(@types/node@26.6.2)': dependencies: - '@rushstack/terminal': 0.22.3(@types/node@26.2.0) + '@rushstack/terminal': 0.22.3(@types/node@26.6.2) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -41953,6 +41626,8 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@standard-schema/spec@1.1.0': {} + '@storybook/addon-docs@8.6.18(@types/react@18.3.28)(storybook@8.6.17(prettier@3.8.1))': dependencies: '@mdx-js/react': 3.1.1(@types/react@18.3.28)(react@18.3.1) @@ -42010,15 +41685,15 @@ 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@6.0.3)(webpack-cli@5.1.4)': + '@storybook/builder-webpack5@9.0.9(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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) + css-loader: 6.11.0(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(webpack@5.104.1) es-module-lexer: 1.5.3 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) + html-webpack-plugin: 5.6.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(webpack@5.104.1) magic-string: 0.30.21 storybook: 8.6.17(prettier@3.8.1) style-loader: 3.3.4(webpack@5.104.1) @@ -42297,7 +41972,7 @@ snapshots: '@storybook/csf-tools@7.6.24': dependencies: '@babel/generator': 7.29.8 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@babel/traverse': 7.29.7 '@babel/types': 7.29.8 '@storybook/csf': 0.1.13 @@ -42350,7 +42025,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@6.0.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@2.1.10(@module-federation/runtime-tools@2.9.1)(@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) @@ -42366,20 +42041,20 @@ 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@6.0.3)(webpack-cli@5.1.4) + '@storybook/builder-webpack5': 9.0.9(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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) + css-loader: 6.11.0(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(webpack@5.104.1) image-size: 2.0.2 loader-utils: 3.3.1 node-polyfill-webpack-plugin: 2.0.1(webpack@5.104.1) postcss: 8.5.23 - postcss-loader: 8.2.1(@rspack/core@1.3.9(@swc/helpers@0.5.13))(postcss@8.5.23)(typescript@6.0.3)(webpack@5.104.1) + postcss-loader: 8.2.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(postcss@8.5.23)(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) + sass-loader: 14.2.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(sass-embedded@1.100.0)(sass@1.100.0)(webpack@5.104.1) semver: 7.6.3 storybook: 8.6.17(prettier@3.8.1) style-loader: 3.3.4(webpack@5.104.1) @@ -43232,16 +42907,16 @@ snapshots: '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.29.8 + '@babel/types': 7.29.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.8 - '@babel/types': 7.29.8 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.29.8 + '@babel/types': 7.29.7 '@types/body-parser@1.19.6': dependencies: @@ -43451,7 +43126,7 @@ snapshots: '@types/esquery@1.5.4': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/estree-jsx@1.0.5': dependencies: @@ -43472,7 +43147,7 @@ snapshots: '@types/express-serve-static-core@4.19.9': dependencies: - '@types/node': 26.2.0 + '@types/node': 26.6.2 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -43623,10 +43298,6 @@ snapshots: '@types/node': 20.19.5 form-data: 4.0.5 - '@types/node-forge@1.3.14': - dependencies: - '@types/node': 20.19.5 - '@types/node@12.20.55': {} '@types/node@14.18.33': {} @@ -43643,9 +43314,9 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@26.2.0': + '@types/node@26.6.2': dependencies: - undici-types: 8.3.0 + undici-types: 8.9.0 '@types/normalize-package-data@2.4.4': {} @@ -44567,7 +44238,7 @@ snapshots: glob: 10.5.0 graceful-fs: 4.2.11 node-gyp-build: 4.8.4 - picomatch: 4.0.3 + picomatch: 4.0.5 resolve-from: 5.0.0 transitivePeerDependencies: - encoding @@ -44663,7 +44334,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.2.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0))': + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@26.6.2)(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) @@ -44671,7 +44342,7 @@ 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.2.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vite: 5.4.21(@types/node@26.6.2)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) transitivePeerDependencies: - supports-color @@ -44686,13 +44357,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@4.2.0(vite@5.4.21(@types/node@26.2.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@4.2.0(vite@5.4.21(@types/node@26.6.2)(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.2.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vite: 5.4.21(@types/node@26.6.2)(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 @@ -44702,76 +44373,71 @@ snapshots: 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.2.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@5.2.4(vite@5.4.21(@types/node@26.6.2)(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@26.2.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0) + vite: 5.4.21(@types/node@26.6.2)(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@3.2.6': + '@vitest/expect@4.1.11': dependencies: + '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 3.2.6 - '@vitest/utils': 3.2.6 - chai: 5.3.3 - tinyrainbow: 2.0.0 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + chai: 6.2.2 + tinyrainbow: 3.1.1 - '@vitest/mocker@3.2.6(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@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/mocker@4.1.11(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(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: - '@vitest/spy': 3.2.6 + '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3) - vite: 7.3.6(@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: 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/mocker@3.2.6(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.11(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0))': dependencies: - '@vitest/spy': 3.2.6 + '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3) vite: 7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) - '@vitest/mocker@3.2.6(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.11(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0))': dependencies: - '@vitest/spy': 3.2.6 + '@vitest/spy': 4.1.11 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3) - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) + vite: 7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) optional: true - '@vitest/pretty-format@3.2.6': - dependencies: - tinyrainbow: 2.0.0 - - '@vitest/pretty-format@3.2.7': + '@vitest/pretty-format@4.1.11': dependencies: - tinyrainbow: 2.0.0 + tinyrainbow: 3.1.1 - '@vitest/runner@3.2.6': + '@vitest/runner@4.1.11': dependencies: - '@vitest/utils': 3.2.6 + '@vitest/utils': 4.1.11 pathe: 2.0.3 - strip-literal: 3.1.0 - '@vitest/snapshot@3.2.6': + '@vitest/snapshot@4.1.11': dependencies: - '@vitest/pretty-format': 3.2.6 + '@vitest/pretty-format': 4.1.11 + '@vitest/utils': 4.1.11 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.2.6': - dependencies: - tinyspy: 4.0.4 + '@vitest/spy@4.1.11': {} - '@vitest/utils@3.2.6': + '@vitest/utils@4.1.11': dependencies: - '@vitest/pretty-format': 3.2.6 - loupe: 3.2.1 - tinyrainbow: 2.0.0 + '@vitest/pretty-format': 4.1.11 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.1 '@volar/language-core@1.11.1': dependencies: @@ -44858,7 +44524,7 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@vue/compiler-sfc': 3.5.30 transitivePeerDependencies: - supports-color @@ -44869,7 +44535,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@vue/compiler-sfc': 3.5.30 transitivePeerDependencies: - supports-color @@ -44880,14 +44546,14 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 '@babel/helper-plugin-utils': 7.28.6 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@vue/compiler-sfc': 3.5.30 transitivePeerDependencies: - supports-color '@vue/compiler-core@3.5.30': dependencies: - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@vue/shared': 3.5.30 entities: 7.0.1 estree-walker: 2.0.2 @@ -45266,7 +44932,7 @@ snapshots: '@yarnpkg/parsers@3.0.2': dependencies: - js-yaml: 3.15.1 + js-yaml: 3.15.2 tslib: 2.8.1 '@zeit/schemas@2.36.0': {} @@ -45383,7 +45049,7 @@ snapshots: adm-zip@0.5.18: {} - adm-zip@0.6.0: {} + adm-zip@0.6.1: {} agent-base@5.1.1: {} @@ -46134,7 +45800,7 @@ snapshots: axe-core@4.11.1: {} - axios-retry@4.5.0(axios@1.19.0): + axios-retry@4.5.0(axios@1.19.0(debug@4.4.3)): dependencies: axios: 1.19.0(debug@4.4.3) is-retry-allowed: 2.2.0 @@ -46197,12 +45863,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@10.1.1(@babel/core@7.29.7)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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@10.1.1(@babel/core@7.29.7)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.7 find-up: 5.0.0 optionalDependencies: - '@rspack/core': 2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@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.41(@swc/helpers@0.5.19))(esbuild@0.18.20)(webpack-cli@5.1.4)): @@ -46669,14 +46335,14 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.4: + brace-expansion@5.0.12: dependencies: balanced-match: 4.0.4 + optional: true - brace-expansion@5.0.9: + brace-expansion@5.0.4: dependencies: balanced-match: 4.0.4 - optional: true braces@2.3.2: dependencies: @@ -46943,13 +46609,7 @@ snapshots: ccount@2.0.1: {} - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.3 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 + chai@6.2.2: {} chalk-template@0.4.0: dependencies: @@ -47011,8 +46671,6 @@ snapshots: chardet@2.1.1: {} - check-error@2.1.3: {} - check-more-types@2.24.0: {} cheerio-select@2.1.0: @@ -47468,7 +47126,7 @@ snapshots: constantinople@4.0.1: dependencies: - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@babel/types': 7.29.8 constants-browserify@1.0.0: {} @@ -47631,7 +47289,7 @@ snapshots: dependencies: import-fresh: 2.0.0 is-directory: 0.3.1 - js-yaml: 3.15.1 + js-yaml: 3.15.2 parse-json: 4.0.0 cosmiconfig@7.1.0: @@ -47645,7 +47303,7 @@ snapshots: cosmiconfig@8.3.6(typescript@6.0.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.3.1 + js-yaml: 4.3.2 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -47654,7 +47312,7 @@ snapshots: cosmiconfig@8.3.6(typescript@7.0.2): dependencies: import-fresh: 3.3.1 - js-yaml: 4.3.1 + js-yaml: 4.3.2 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -47664,7 +47322,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.3.1 + js-yaml: 4.3.2 parse-json: 5.2.0 optionalDependencies: typescript: 6.0.3 @@ -47673,7 +47331,7 @@ snapshots: dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 - js-yaml: 4.3.1 + js-yaml: 4.3.2 parse-json: 5.2.0 optionalDependencies: typescript: 7.0.2 @@ -47730,13 +47388,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)): + create-jest@29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(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.2.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.2.0)(typescript@7.0.2)) + jest-config: 29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -47786,7 +47444,7 @@ snapshots: dependencies: postcss: 8.5.23 - css-loader@6.11.0(@rspack/core@1.3.9(@swc/helpers@0.5.13))(webpack@5.104.1): + 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.23) postcss: 8.5.23 @@ -47797,10 +47455,10 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - '@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) + '@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-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-loader@6.11.0(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(webpack@5.104.1): dependencies: icss-utils: 5.1.0(postcss@8.5.23) postcss: 8.5.23 @@ -47811,8 +47469,8 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - '@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) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@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-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: @@ -48345,8 +48003,6 @@ snapshots: de-indent@1.0.2: {} - debounce@1.2.1: {} - debug@2.6.9: dependencies: ms: 2.0.0 @@ -48405,8 +48061,6 @@ snapshots: optionalDependencies: babel-plugin-macros: 3.1.0 - deep-eql@5.0.2: {} - deep-equal@1.0.1: {} deep-extend@0.6.0: {} @@ -49308,7 +48962,7 @@ snapshots: eslint: 9.26.0(jiti@2.7.0) 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.7.0)))(eslint@9.26.0(jiti@2.7.0)) - 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.7.0)))(eslint@9.26.0(jiti@2.7.0)))(eslint@9.26.0(jiti@2.7.0)) + 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@9.26.0(jiti@2.7.0)) eslint-plugin-jsx-a11y: 6.10.1(eslint@9.26.0(jiti@2.7.0)) eslint-plugin-react: 7.37.2(eslint@9.26.0(jiti@2.7.0)) eslint-plugin-react-hooks: 7.0.1(eslint@9.26.0(jiti@2.7.0)) @@ -49346,10 +49000,10 @@ snapshots: get-tsconfig: 4.13.6 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.15 + tinyglobby: 0.2.17 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@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.7.0)))(eslint@9.26.0(jiti@2.7.0)))(eslint@9.26.0(jiti@2.7.0)) + 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@9.26.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color @@ -49445,7 +49099,7 @@ snapshots: - 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@6.0.3))(eslint@9.39.3(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@9.26.0(jiti@2.7.0)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -49454,11 +49108,11 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 9.39.3(jiti@2.6.1) + eslint: 9.26.0(jiti@2.7.0) 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@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 + 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.7.0)))(eslint@9.26.0(jiti@2.7.0)))(eslint@9.26.0(jiti@2.7.0)) + hasown: 2.0.4 + is-core-module: 2.17.0 is-glob: 4.0.3 minimatch: 3.1.5 object.fromentries: 2.0.8 @@ -49474,7 +49128,7 @@ snapshots: - 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@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.7.0)))(eslint@9.26.0(jiti@2.7.0)))(eslint@9.26.0(jiti@2.7.0)): + 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.39.3(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -49483,11 +49137,11 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 9.26.0(jiti@2.7.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@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.7.0)))(eslint@9.26.0(jiti@2.7.0)))(eslint@9.26.0(jiti@2.7.0)) + 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.4 - is-core-module: 2.16.1 + is-core-module: 2.17.0 is-glob: 4.0.3 minimatch: 3.1.5 object.fromentries: 2.0.8 @@ -49514,13 +49168,13 @@ snapshots: - 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@7.0.2))(eslint@8.57.1)(typescript@7.0.2))(eslint@8.57.1)(jest@29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)))(typescript@7.0.2): + 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.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)))(typescript@7.0.2): dependencies: '@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@7.0.2))(eslint@8.57.1)(typescript@7.0.2) - jest: 29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)) + jest: 29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) transitivePeerDependencies: - supports-color - typescript @@ -49583,12 +49237,12 @@ snapshots: optionalDependencies: eslint-config-prettier: 8.10.2(eslint@8.57.1) - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@3.8.1): + eslint-plugin-prettier@5.5.6(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@3.8.1): dependencies: eslint: 9.39.3(jiti@2.6.1) prettier: 3.8.1 prettier-linter-helpers: 1.0.1 - synckit: 0.9.3 + synckit: 0.11.13 optionalDependencies: '@types/eslint': 9.6.1 eslint-config-prettier: 10.1.5(eslint@9.39.3(jiti@2.6.1)) @@ -49616,7 +49270,7 @@ snapshots: eslint-plugin-react-hooks@7.0.1(eslint@9.26.0(jiti@2.7.0)): dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 eslint: 9.26.0(jiti@2.7.0) hermes-parser: 0.25.1 zod: 4.1.12 @@ -49958,7 +49612,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-util-build-jsx@3.0.1: dependencies: @@ -49989,7 +49643,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -50123,8 +49777,6 @@ snapshots: dependencies: pify: 2.3.0 - exit-hook@4.0.0: {} - exit@0.1.2: {} expand-brackets@2.1.4: @@ -50676,14 +50328,6 @@ snapshots: dependencies: map-cache: 0.2.2 - framer-motion@10.18.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): - dependencies: - tslib: 2.8.1 - optionalDependencies: - '@emotion/is-prop-valid': 0.8.8 - react: 19.1.1 - react-dom: 19.1.1(react@19.1.1) - framer-motion@12.15.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 12.38.0 @@ -50702,7 +50346,7 @@ snapshots: front-matter@4.0.2: dependencies: - js-yaml: 3.15.1 + js-yaml: 3.15.2 fs-constants@1.0.0: {} @@ -50838,7 +50482,7 @@ snapshots: get-east-asian-width@1.5.0: {} - get-east-asian-width@1.6.0: {} + get-east-asian-width@1.7.0: {} get-intrinsic@1.3.0: dependencies: @@ -51126,10 +50770,6 @@ snapshots: pumpify: 1.5.1 through2: 2.0.5 - gzip-size@6.0.0: - dependencies: - duplexer: 0.1.2 - hachure-fill@0.5.2: {} handle-thing@2.0.1: {} @@ -51288,7 +50928,7 @@ snapshots: hast-util-to-estree@3.1.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -51440,9 +51080,7 @@ snapshots: hono@3.12.12: {} - hono@4.13.0: {} - - hono@4.13.1: {} + hono@4.13.5: {} hookable@6.1.0: {} @@ -51507,7 +51145,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.2(@rspack/core@1.3.9(@swc/helpers@0.5.13))(webpack@5.104.1): + html-webpack-plugin@5.6.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(webpack@5.104.1): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -51515,7 +51153,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.0 optionalDependencies: - '@rspack/core': 1.3.9(@swc/helpers@0.5.13) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@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.41(@swc/helpers@0.5.23))(esbuild@0.25.5)(webpack-cli@5.1.4)): @@ -51637,18 +51275,6 @@ snapshots: transitivePeerDependencies: - supports-color - http-proxy-middleware@2.0.9(@types/express@4.17.21): - dependencies: - '@types/http-proxy': 1.17.17 - http-proxy: 1.18.1(debug@4.4.3) - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.8 - optionalDependencies: - '@types/express': 4.17.21 - transitivePeerDependencies: - - debug - http-proxy-middleware@2.0.9(@types/express@4.17.25): dependencies: '@types/http-proxy': 1.17.17 @@ -52008,10 +51634,9 @@ snapshots: dependencies: hasown: 2.0.4 - is-core-module@2.16.2: + is-core-module@2.17.0: dependencies: hasown: 2.0.4 - optional: true is-data-descriptor@1.0.1: dependencies: @@ -52174,7 +51799,7 @@ snapshots: is-reference@1.2.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 is-regex@1.2.1: dependencies: @@ -52294,7 +51919,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -52304,7 +51929,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.8.5 @@ -52425,16 +52050,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)): + jest-cli@29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2)) + '@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.6.2)(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.2.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.2.0)(typescript@7.0.2)) + create-jest: 29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)) + jest-config: 29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -52506,7 +52131,7 @@ snapshots: - 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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2)): + 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.6.2)(typescript@7.0.2)): dependencies: '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 @@ -52532,12 +52157,12 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.19.5 - ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)): + jest-config@29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)): dependencies: '@babel/core': 7.29.7 '@jest/test-sequencer': 29.7.0 @@ -52562,8 +52187,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 26.2.0 - ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2) + '@types/node': 26.6.2 + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -52791,7 +52416,7 @@ snapshots: chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 - picomatch: 4.0.3 + picomatch: 4.0.5 jest-validate@29.7.0: dependencies: @@ -52858,12 +52483,12 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)): + jest@29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2)) + '@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.6.2)(typescript@7.0.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@26.2.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.2.0)(typescript@7.0.2)) + jest-cli: 29.7.0(@types/node@26.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -52910,9 +52535,7 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.1: {} - - js-yaml@3.15.1: + js-yaml@3.15.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -52921,7 +52544,7 @@ snapshots: dependencies: argparse: 2.0.1 - js-yaml@4.3.1: + js-yaml@4.3.2: dependencies: argparse: 2.0.1 @@ -52932,7 +52555,7 @@ snapshots: jscodeshift@0.15.2(@babel/preset-env@7.29.2(@babel/core@7.29.7)): dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@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) @@ -53170,18 +52793,18 @@ snapshots: 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) - less-loader@12.3.3(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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)): + less-loader@12.3.3(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2)(@swc/helpers@0.5.17) + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.9.1)(@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.8(@module-federation/runtime-tools@2.8.2)(@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))): + less-loader@12.3.3(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@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: @@ -53447,8 +53070,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.2.1: {} - lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -54032,7 +53653,7 @@ snapshots: metro-source-map@0.83.5: dependencies: '@babel/traverse': 7.29.7 - '@babel/types': 7.29.8 + '@babel/types': 7.29.7 flow-enums-runtime: 0.0.6 invariant: 2.2.4 metro-symbolicate: 0.83.5 @@ -54068,8 +53689,8 @@ snapshots: metro-transform-plugins@0.82.5: dependencies: '@babel/core': 7.29.0 - '@babel/generator': 7.29.7 - '@babel/template': 7.29.7 + '@babel/generator': 7.29.1 + '@babel/template': 7.28.6 '@babel/traverse': 7.29.7 flow-enums-runtime: 0.0.6 nullthrows: 1.1.1 @@ -54079,7 +53700,7 @@ snapshots: metro-transform-plugins@0.83.5: dependencies: '@babel/core': 7.29.7 - '@babel/generator': 7.29.8 + '@babel/generator': 7.29.7 '@babel/template': 7.29.7 '@babel/traverse': 7.29.7 flow-enums-runtime: 0.0.6 @@ -54090,9 +53711,9 @@ snapshots: metro-transform-worker@0.82.5: dependencies: '@babel/core': 7.29.0 - '@babel/generator': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 flow-enums-runtime: 0.0.6 metro: 0.82.5 metro-babel-transformer: 0.82.5 @@ -54110,9 +53731,9 @@ snapshots: metro-transform-worker@0.83.5: dependencies: '@babel/core': 7.29.7 - '@babel/generator': 7.29.8 - '@babel/parser': 7.29.8 - '@babel/types': 7.29.8 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 flow-enums-runtime: 0.0.6 metro: 0.83.5 metro-babel-transformer: 0.83.5 @@ -54338,7 +53959,7 @@ snapshots: micromark-extension-mdx-expression@3.0.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-factory-mdx-expression: 2.0.3 micromark-factory-space: 2.0.1 @@ -54349,7 +53970,7 @@ snapshots: micromark-extension-mdx-jsx@3.0.2: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.3 @@ -54366,7 +53987,7 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-util-character: 2.1.1 @@ -54402,7 +54023,7 @@ snapshots: micromark-factory-mdx-expression@2.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 @@ -54466,7 +54087,7 @@ snapshots: micromark-util-events-to-acorn@2.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 @@ -54617,7 +54238,7 @@ snapshots: minimatch@10.2.3: dependencies: - brace-expansion: 5.0.9 + brace-expansion: 5.0.12 optional: true minimatch@10.2.4: @@ -54810,6 +54431,8 @@ snapshots: nanoid@3.3.18: {} + nanoid@3.3.19: {} + nanoid@5.1.16: {} nanomatch@1.2.13: @@ -55047,8 +54670,6 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-forge@1.3.3: {} - node-gyp-build@4.8.4: {} node-int64@0.4.0: {} @@ -55709,8 +55330,6 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.1: {} - pause-stream@0.0.11: dependencies: through: 2.3.8 @@ -56026,21 +55645,21 @@ snapshots: 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-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.2.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.6.2)(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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(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.2.0)(typescript@7.0.2)): + 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.6.2)(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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2) + ts-node: 10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2) postcss-load-config@4.0.2(postcss@8.5.23)(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: @@ -56082,14 +55701,14 @@ snapshots: semver: 7.8.5 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.23)(typescript@6.0.3)(webpack@5.104.1): + postcss-loader@8.2.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(postcss@8.5.23)(typescript@6.0.3)(webpack@5.104.1): dependencies: cosmiconfig: 9.0.1(typescript@6.0.3) jiti: 2.6.1 postcss: 8.5.23 semver: 7.8.5 optionalDependencies: - '@rspack/core': 1.3.9(@swc/helpers@0.5.13) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@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) transitivePeerDependencies: - typescript @@ -56465,7 +56084,7 @@ snapshots: postcss@8.5.26: dependencies: - nanoid: 3.3.18 + nanoid: 3.3.19 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -58565,6 +58184,13 @@ snapshots: react-dom: 19.2.7(react@19.2.7) react-router: 6.30.3(react@19.2.7) + react-router-dom@6.30.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@remix-run/router': 1.23.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.30.6(react@18.3.1) + react-router-dom@7.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 @@ -58644,6 +58270,11 @@ snapshots: '@remix-run/router': 1.23.2 react: 19.2.7 + react-router@6.30.6(react@18.3.1): + dependencies: + '@remix-run/router': 1.23.2 + react: 18.3.1 + react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: cookie: 1.1.1 @@ -58700,15 +58331,15 @@ snapshots: optionalDependencies: 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.2)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17) + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-server-dom-rspack@0.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-server-dom-rspack@0.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@rspack/core': 2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -58862,7 +58493,7 @@ snapshots: read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 - js-yaml: 3.15.1 + js-yaml: 3.15.2 pify: 4.0.1 strip-bom: 3.0.0 @@ -58959,7 +58590,7 @@ snapshots: recma-parse@1.0.0: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esast-util-from-js: 2.0.1 unified: 11.0.5 vfile: 6.0.3 @@ -59286,7 +58917,7 @@ snapshots: resolve@1.22.12: dependencies: es-errors: 1.3.0 - is-core-module: 2.16.2 + is-core-module: 2.17.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 optional: true @@ -59557,47 +59188,47 @@ snapshots: '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) typescript: 7.0.2 - 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.2)(core-js@3.36.1))(typescript@6.0.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.9.1)(core-js@3.36.1))(typescript@6.0.3): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.36.1) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.36.1) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) typescript: 6.0.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.2)(core-js@3.49.0))(typescript@6.0.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.9.1)(core-js@3.49.0))(typescript@6.0.3): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@20.19.5) typescript: 6.0.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.2)(core-js@3.49.0))(typescript@6.0.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.9.1)(core-js@3.49.0))(typescript@6.0.3): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) optionalDependencies: '@microsoft/api-extractor': 7.57.7(@types/node@22.19.15) typescript: 6.0.3 - rsbuild-plugin-dts@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(typescript@6.0.3): + rsbuild-plugin-dts@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(typescript@6.0.3): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@26.2.0) + '@microsoft/api-extractor': 7.57.7(@types/node@26.6.2) typescript: 6.0.3 - rsbuild-plugin-dts@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(typescript@7.0.2): + rsbuild-plugin-dts@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@rsbuild/core@2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(typescript@7.0.2): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.4(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@26.2.0) + '@microsoft/api-extractor': 7.57.7(@types/node@26.6.2) typescript: 7.0.2 - rsbuild-plugin-dts@0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@rsbuild/core@1.4.0-beta.2)(typescript@5.9.3): + rsbuild-plugin-dts@0.9.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@rsbuild/core@1.4.0-beta.2)(typescript@5.9.3): dependencies: '@ast-grep/napi': 0.37.0 '@rsbuild/core': 1.4.0-beta.2 @@ -59606,15 +59237,15 @@ snapshots: tinyglobby: 0.2.15 tsconfig-paths: 4.2.0 optionalDependencies: - '@microsoft/api-extractor': 7.57.7(@types/node@26.2.0) + '@microsoft/api-extractor': 7.57.7(@types/node@26.6.2) typescript: 5.9.3 - rsbuild-plugin-html-minifier-terser@1.1.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)): + rsbuild-plugin-html-minifier-terser@1.1.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)): dependencies: '@types/html-minifier-terser': 7.0.2 html-minifier-terser: 7.2.0 optionalDependencies: - '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) rsbuild-plugin-publint@0.2.1(@rsbuild/core@1.7.3): dependencies: @@ -59623,15 +59254,15 @@ snapshots: optionalDependencies: '@rsbuild/core': 1.7.3 - rsbuild-plugin-rsc@0.1.1(@rsbuild/core@2.1.0(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@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.9.1)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) - react-server-dom-rspack: 0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + react-server-dom-rspack: 0.0.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(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.9.1)(core-js@3.49.0))(react-server-dom-rspack@0.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.49.0) - react-server-dom-rspack: 0.0.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rsbuild/core': 2.1.0(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + react-server-dom-rspack: 0.0.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rslog@1.2.3: {} @@ -59649,29 +59280,29 @@ snapshots: optionalDependencies: '@rspack/core': 1.7.9(@swc/helpers@0.5.19) - rspack-manifest-plugin@5.2.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17)): + rspack-manifest-plugin@5.2.2(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17)): dependencies: '@rspack/lite-tapable': 1.1.2 optionalDependencies: - '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17) + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17) - rspack-manifest-plugin@5.2.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23)): + rspack-manifest-plugin@5.2.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23)): dependencies: '@rspack/lite-tapable': 1.1.2 optionalDependencies: - '@rspack/core': 2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) - rspack-vue-loader@17.5.1(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)): + rspack-vue-loader@17.5.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(vue@3.5.30(typescript@7.0.2)): dependencies: '@rspack/lite-tapable': 1.1.0 chalk: 4.1.2 optionalDependencies: - '@rspack/core': 2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2)(core-js@3.36.1)(jsdom@20.0.3)): + rstest-fetch-mock@0.1.0(@rstest/core@0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.36.1)(jsdom@20.0.3)): dependencies: - '@rstest/core': 0.10.6(@module-federation/runtime-tools@2.8.2)(core-js@3.36.1)(jsdom@20.0.3) + '@rstest/core': 0.10.6(@module-federation/runtime-tools@2.9.1)(core-js@3.36.1)(jsdom@20.0.3) run-applescript@7.1.0: {} @@ -59898,11 +59529,11 @@ snapshots: sass-embedded-win32-arm64: 1.98.0 sass-embedded-win32-x64: 1.98.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): + sass-loader@14.2.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13))(sass-embedded@1.100.0)(sass@1.100.0)(webpack@5.104.1): dependencies: neo-async: 2.6.2 optionalDependencies: - '@rspack/core': 1.3.9(@swc/helpers@0.5.13) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.13) sass: 1.100.0 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) @@ -60000,11 +59631,6 @@ snapshots: select-hose@2.0.0: {} - selfsigned@2.4.1: - dependencies: - '@types/node-forge': 1.3.14 - node-forge: 1.3.3 - selfsigned@5.5.0: dependencies: '@peculiar/x509': 1.14.3 @@ -60218,37 +59844,38 @@ snapshots: '@img/sharp-win32-x64': 0.34.5 optional: true - sharp@0.35.0: + sharp@0.35.4(@types/node@20.19.5): dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.8.5 optionalDependencies: - '@img/sharp-darwin-arm64': 0.35.0 - '@img/sharp-darwin-x64': 0.35.0 - '@img/sharp-freebsd-wasm32': 0.35.0 - '@img/sharp-libvips-darwin-arm64': 1.3.0 - '@img/sharp-libvips-darwin-x64': 1.3.0 - '@img/sharp-libvips-linux-arm': 1.3.0 - '@img/sharp-libvips-linux-arm64': 1.3.0 - '@img/sharp-libvips-linux-ppc64': 1.3.0 - '@img/sharp-libvips-linux-riscv64': 1.3.0 - '@img/sharp-libvips-linux-s390x': 1.3.0 - '@img/sharp-libvips-linux-x64': 1.3.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.3.0 - '@img/sharp-libvips-linuxmusl-x64': 1.3.0 - '@img/sharp-linux-arm': 0.35.0 - '@img/sharp-linux-arm64': 0.35.0 - '@img/sharp-linux-ppc64': 0.35.0 - '@img/sharp-linux-riscv64': 0.35.0 - '@img/sharp-linux-s390x': 0.35.0 - '@img/sharp-linux-x64': 0.35.0 - '@img/sharp-linuxmusl-arm64': 0.35.0 - '@img/sharp-linuxmusl-x64': 0.35.0 - '@img/sharp-webcontainers-wasm32': 0.35.0 - '@img/sharp-win32-arm64': 0.35.0 - '@img/sharp-win32-ia32': 0.35.0 - '@img/sharp-win32-x64': 0.35.0 + '@img/sharp-darwin-arm64': 0.35.4 + '@img/sharp-darwin-x64': 0.35.4 + '@img/sharp-freebsd-wasm32': 0.35.4 + '@img/sharp-libvips-darwin-arm64': 1.3.3 + '@img/sharp-libvips-darwin-x64': 1.3.3 + '@img/sharp-libvips-linux-arm': 1.3.3 + '@img/sharp-libvips-linux-arm64': 1.3.3 + '@img/sharp-libvips-linux-ppc64': 1.3.3 + '@img/sharp-libvips-linux-riscv64': 1.3.3 + '@img/sharp-libvips-linux-s390x': 1.3.3 + '@img/sharp-libvips-linux-x64': 1.3.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + '@img/sharp-linux-arm': 0.35.4 + '@img/sharp-linux-arm64': 0.35.4 + '@img/sharp-linux-ppc64': 0.35.4 + '@img/sharp-linux-riscv64': 0.35.4 + '@img/sharp-linux-s390x': 0.35.4 + '@img/sharp-linux-x64': 0.35.4 + '@img/sharp-linuxmusl-arm64': 0.35.4 + '@img/sharp-linuxmusl-x64': 0.35.4 + '@img/sharp-webcontainers-wasm32': 0.35.4 + '@img/sharp-win32-arm64': 0.35.4 + '@img/sharp-win32-ia32': 0.35.4 + '@img/sharp-win32-x64': 0.35.4 + '@types/node': 20.19.5 shebang-command@1.2.0: dependencies: @@ -60573,23 +60200,25 @@ snapshots: std-env@3.10.0: {} + std-env@4.2.0: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 internal-slot: 1.1.0 - storybook-addon-rslib@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2))(storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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-addon-rslib@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rslib/core@0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2))(storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) - '@rslib/core': 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.2.0))(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)(typescript@7.0.2) - storybook-builder-rsbuild: 1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + '@rslib/core': 0.23.2(@microsoft/api-extractor@7.57.7(@types/node@26.6.2))(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)(typescript@7.0.2) + storybook-builder-rsbuild: 1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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: 7.0.2 - storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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): + storybook-builder-rsbuild@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) - '@rsbuild/plugin-type-check': 1.5.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) + '@rsbuild/plugin-type-check': 1.5.0(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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 @@ -60601,7 +60230,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.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0)) + rsbuild-plugin-html-minifier-terser: 1.1.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0)) sirv: 2.0.4 storybook: 8.6.17(prettier@3.8.1) ts-dedent: 2.2.0 @@ -60616,10 +60245,10 @@ snapshots: - '@typescript/native-preview' - tslib - storybook-react-rsbuild@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.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.62.2)(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)): + storybook-react-rsbuild@1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.62.2)(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.62.2) - '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(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 @@ -60631,7 +60260,7 @@ snapshots: 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.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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) + storybook-builder-rsbuild: 1.0.3(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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: 7.0.2 @@ -60752,7 +60381,7 @@ snapshots: string-width@8.2.2: dependencies: - get-east-asian-width: 1.6.0 + get-east-asian-width: 1.7.0 strip-ansi: 7.2.0 string.prototype.includes@2.0.1: @@ -60861,10 +60490,6 @@ snapshots: strip-json-comments@5.0.3: {} - strip-literal@3.1.0: - dependencies: - js-tokens: 9.0.1 - strnum@1.1.2: {} strnum@2.2.3: {} @@ -61115,10 +60740,9 @@ snapshots: synchronous-promise@2.0.17: {} - synckit@0.9.3: + synckit@0.11.13: dependencies: - '@pkgr/core': 0.1.2 - tslib: 2.8.1 + '@pkgr/core': 0.3.6 tabbable@6.5.0: {} @@ -61191,7 +60815,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.2.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.6.2)(typescript@5.9.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -61210,7 +60834,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.41(@swc/helpers@0.5.23))(@types/node@26.2.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.6.2)(typescript@5.9.3)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -61218,7 +60842,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2)): + tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -61237,7 +60861,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.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2)) + 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.6.2)(typescript@7.0.2)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -61633,9 +61257,7 @@ snapshots: tinypool@1.1.1: {} - tinyrainbow@2.0.0: {} - - tinyspy@4.0.4: {} + tinyrainbow@3.1.1: {} tldts-core@6.1.86: {} @@ -61774,7 +61396,7 @@ snapshots: transitivePeerDependencies: - tslib - ts-checker-rspack-plugin@1.5.1(@rspack/core@2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2): + ts-checker-rspack-plugin@1.5.1(@rspack/core@2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17))(tslib@2.8.1)(typescript@7.0.2): dependencies: '@rspack/lite-tapable': 1.1.2 chokidar: 3.6.0 @@ -61782,11 +61404,11 @@ snapshots: picocolors: 1.1.1 typescript: 7.0.2 optionalDependencies: - '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.17) + '@rspack/core': 2.0.6(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.17) transitivePeerDependencies: - tslib - ts-checker-rspack-plugin@1.5.1(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2): + ts-checker-rspack-plugin@1.5.1(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(tslib@2.8.1)(typescript@7.0.2): dependencies: '@rspack/lite-tapable': 1.1.2 chokidar: 3.6.0 @@ -61794,7 +61416,7 @@ snapshots: picocolors: 1.1.1 typescript: 7.0.2 optionalDependencies: - '@rspack/core': 2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) transitivePeerDependencies: - tslib @@ -61919,14 +61541,14 @@ snapshots: '@swc/core': 1.15.41(@swc/helpers@0.5.17) optional: true - ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.2.0)(typescript@7.0.2): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.17))(@types/node@26.6.2)(typescript@7.0.2): 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.2.0 + '@types/node': 26.6.2 acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -62001,14 +61623,14 @@ snapshots: optionalDependencies: '@swc/core': 1.15.41(@swc/helpers@0.5.23) - ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(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.2.0 + '@types/node': 26.6.2 acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -62022,14 +61644,14 @@ snapshots: '@swc/core': 1.15.41(@swc/helpers@0.5.23) optional: true - ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.2.0)(typescript@7.0.2): + ts-node@10.9.2(@swc/core@1.15.41(@swc/helpers@0.5.23))(@types/node@26.6.2)(typescript@7.0.2): 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.2.0 + '@types/node': 26.6.2 acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -62084,7 +61706,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsdown@0.20.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)): + tsdown@0.20.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(synckit@0.11.13)(typescript@6.0.3)(vue-tsc@2.2.12(typescript@6.0.3)): dependencies: ansis: 4.2.0 cac: 6.7.14 @@ -62101,7 +61723,7 @@ snapshots: tinyglobby: 0.2.15 tree-kill: 1.2.2 unconfig-core: 7.5.0 - unrun: 0.2.32(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + unrun: 0.2.32(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(synckit@0.11.13) optionalDependencies: publint: 0.3.18 typescript: 6.0.3 @@ -62114,7 +61736,7 @@ snapshots: - synckit - vue-tsc - tsdown@0.20.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@6.0.3)): + tsdown@0.20.3(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(publint@0.3.18)(synckit@0.11.13)(typescript@7.0.2)(vue-tsc@2.2.12(typescript@6.0.3)): dependencies: ansis: 4.2.0 cac: 6.7.14 @@ -62131,7 +61753,7 @@ snapshots: tinyglobby: 0.2.15 tree-kill: 1.2.2 unconfig-core: 7.5.0 - unrun: 0.2.32(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + unrun: 0.2.32(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(synckit@0.11.13) optionalDependencies: publint: 0.3.18 typescript: 7.0.2 @@ -62411,13 +62033,13 @@ snapshots: undici-types@6.21.0: {} - undici-types@8.3.0: {} + undici-types@8.9.0: {} undici@5.26.5: dependencies: '@fastify/busboy': 2.1.1 - undici@7.29.0: {} + undici@7.29.1: {} unhead@2.1.15: dependencies: @@ -62624,9 +62246,11 @@ 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.11.3)(@emnapi/runtime@1.11.3): + unrun@0.2.32(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3)(synckit@0.11.13): dependencies: rolldown: 1.0.0-rc.9(@emnapi/core@1.11.3)(@emnapi/runtime@1.11.3) + optionalDependencies: + synckit: 0.11.13 transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -62891,70 +62515,6 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-node@3.2.4(@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: - cac: 6.7.14 - debug: 4.4.3(supports-color@8.1.1) - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.3.6(@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: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite-node@3.2.4(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0): - dependencies: - cac: 6.7.14 - debug: 4.4.3(supports-color@8.1.1) - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - - vite-node@3.2.4(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0): - dependencies: - cac: 6.7.14 - debug: 4.4.3(supports-color@8.1.1) - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - optional: true - 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) @@ -62979,13 +62539,13 @@ snapshots: sass-embedded: 1.100.0 terser: 5.48.0 - vite@5.4.21(@types/node@26.2.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0): + vite@5.4.21(@types/node@26.6.2)(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 rollup: 4.59.0 optionalDependencies: - '@types/node': 26.2.0 + '@types/node': 26.6.2 fsevents: 2.3.3 less: 4.6.4 sass: 1.100.0 @@ -63010,30 +62570,12 @@ snapshots: terser: 5.48.0 yaml: 2.9.0 - vite@7.3.6(@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.28.1 - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 - postcss: 8.5.23 - rollup: 4.62.2 - tinyglobby: 0.2.17 - optionalDependencies: - '@types/node': 20.19.5 - fsevents: 2.3.3 - jiti: 2.6.1 - less: 4.6.4 - sass: 1.100.0 - sass-embedded: 1.100.0 - terser: 5.48.0 - yaml: 2.9.0 - vite@7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0): dependencies: esbuild: 0.28.1 fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 - postcss: 8.5.23 + postcss: 8.5.24 rollup: 4.62.2 tinyglobby: 0.2.17 optionalDependencies: @@ -63046,16 +62588,16 @@ snapshots: terser: 5.48.0 yaml: 2.9.0 - vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0): + vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0): dependencies: esbuild: 0.28.1 fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 - postcss: 8.5.23 + postcss: 8.5.24 rollup: 4.62.2 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 26.2.0 + '@types/node': 26.6.2 fsevents: 2.3.3 jiti: 2.7.0 less: 4.6.4 @@ -63065,137 +62607,92 @@ snapshots: yaml: 2.9.0 optional: true - vitest@3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@20.19.5)(jiti@2.6.1)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0): + vitest@4.1.11(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(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: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.6 - '@vitest/mocker': 3.2.6(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@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/pretty-format': 3.2.7 - '@vitest/runner': 3.2.6 - '@vitest/snapshot': 3.2.6 - '@vitest/spy': 3.2.6 - '@vitest/utils': 3.2.6 - chai: 5.3.3 - debug: 4.4.3(supports-color@8.1.1) + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(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/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.0.0 expect-type: 1.4.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.5 - std-env: 3.10.0 + std-env: 4.2.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.4 tinyglobby: 0.2.17 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.3.6(@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-node: 3.2.4(@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) + tinyrainbow: 3.1.1 + 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) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 - '@types/debug': 4.1.12 '@types/node': 20.19.5 jsdom: 20.0.3 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@20.19.5)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0): + vitest@4.1.11(@edge-runtime/vm@3.2.0)(@types/node@20.19.5)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0)): dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.6 - '@vitest/mocker': 3.2.6(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0)) - '@vitest/pretty-format': 3.2.7 - '@vitest/runner': 3.2.6 - '@vitest/snapshot': 3.2.6 - '@vitest/spy': 3.2.6 - '@vitest/utils': 3.2.6 - chai: 5.3.3 - debug: 4.4.3(supports-color@8.1.1) + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.0.0 expect-type: 1.4.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.5 - std-env: 3.10.0 + std-env: 4.2.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.4 tinyglobby: 0.2.17 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 + tinyrainbow: 3.1.1 vite: 7.3.6(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) - vite-node: 3.2.4(@types/node@20.19.5)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.100.0)(sass@1.100.0)(terser@5.48.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 - '@types/debug': 4.1.12 '@types/node': 20.19.5 jsdom: 20.0.3 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vitest@3.2.6(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@26.2.0)(jiti@2.7.0)(jsdom@20.0.3)(less@4.6.4)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0): + vitest@4.1.11(@edge-runtime/vm@3.2.0)(@types/node@26.6.2)(jsdom@20.0.3)(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0)): dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.6 - '@vitest/mocker': 3.2.6(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0)) - '@vitest/pretty-format': 3.2.7 - '@vitest/runner': 3.2.6 - '@vitest/snapshot': 3.2.6 - '@vitest/spy': 3.2.6 - '@vitest/utils': 3.2.6 - chai: 5.3.3 - debug: 4.4.3(supports-color@8.1.1) + '@vitest/expect': 4.1.11 + '@vitest/mocker': 4.1.11(msw@1.3.5(@types/node@20.19.5)(encoding@0.1.13)(typescript@6.0.3))(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.11 + '@vitest/runner': 4.1.11 + '@vitest/snapshot': 4.1.11 + '@vitest/spy': 4.1.11 + '@vitest/utils': 4.1.11 + es-module-lexer: 2.0.0 expect-type: 1.4.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.5 - std-env: 3.10.0 + std-env: 4.2.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.4 tinyglobby: 0.2.17 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.3.6(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) - vite-node: 3.2.4(@types/node@26.2.0)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) + tinyrainbow: 3.1.1 + vite: 7.3.6(@types/node@26.6.2)(jiti@2.7.0)(less@4.6.4)(sass-embedded@1.98.0)(sass@1.98.0)(terser@5.48.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@edge-runtime/vm': 3.2.0 - '@types/debug': 4.1.12 - '@types/node': 26.2.0 + '@types/node': 26.6.2 jsdom: 20.0.3 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml optional: true vlq@1.0.1: {} @@ -63329,24 +62826,6 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-bundle-analyzer@4.10.2: - dependencies: - '@discoveryjs/json-ext': 0.5.7 - acorn: 8.17.0 - acorn-walk: 8.3.5 - commander: 7.2.0 - debounce: 1.2.1 - escape-string-regexp: 4.0.0 - gzip-size: 6.0.0 - html-escaper: 2.0.2 - opener: 1.5.2 - picocolors: 1.1.1 - sirv: 2.0.4 - ws: 7.5.11 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - webpack-cli@5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1): dependencies: '@discoveryjs/json-ext': 0.5.7 @@ -63421,44 +62900,7 @@ snapshots: 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) - - webpack-dev-server@5.2.0(webpack-cli@5.1.4)(webpack@5.104.1): - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.10 - '@types/sockjs': 0.3.36 - '@types/ws': 8.5.12 - ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 - chokidar: 3.6.0 - colorette: 2.0.20 - compression: 1.8.1 - connect-history-api-fallback: 2.0.0 - express: 4.22.1 - graceful-fs: 4.2.11 - http-proxy-middleware: 2.0.9(@types/express@4.17.21) - ipaddr.js: 2.3.0 - launch-editor: 2.13.1 - open: 10.2.0 - p-retry: 6.2.1 - schema-utils: 4.3.0 - selfsigned: 2.4.1 - 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.7.26(@swc/helpers@0.5.13))(esbuild@0.28.1)(webpack-cli@5.1.4)) - ws: 8.21.3 - 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-cli: 5.1.4(webpack-dev-server@5.2.3)(webpack@5.104.1) - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate + optional: true 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: @@ -64138,7 +63580,7 @@ snapshots: with@7.0.2: dependencies: - '@babel/parser': 7.29.8 + '@babel/parser': 7.29.9 '@babel/types': 7.29.8 assert-never: 1.4.0 babel-walk: 3.0.0-canary-5 @@ -64360,7 +63802,7 @@ snapshots: dependencies: '@toon-format/toon': 0.9.0 axios: 1.19.0(debug@4.4.3) - axios-retry: 4.5.0(axios@1.19.0) + axios-retry: 4.5.0(axios@1.19.0(debug@4.4.3)) debug: 4.4.3(supports-color@8.1.1) eventsource: 4.1.0 git-url-parse: 16.1.0 @@ -64377,32 +63819,32 @@ snapshots: zephyr-edge-contract@1.2.2: {} - zephyr-rsbuild-plugin@1.2.2(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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-rsbuild-plugin@1.2.2(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0) + '@rsbuild/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0) zephyr-agent: 1.2.2 - zephyr-rspack-plugin: 1.2.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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-rspack-plugin: 1.2.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2.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: - '@rspack/core' - supports-color - webpack - zephyr-rspack-plugin@1.2.2(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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-rspack-plugin@1.2.2(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23) + '@rspack/core': 2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23) zephyr-agent: 1.2.2 zephyr-xpack-internal: 1.2.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.2.2(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@swc/helpers@0.5.23))(@rspress/core@2.0.14(@module-federation/runtime-tools@2.8.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.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))(webpack@5.104.1(@swc/core@1.15.41(@swc/helpers@0.5.23))(esbuild@0.28.1)(webpack-cli@5.1.4)): + zephyr-rspress-plugin@1.2.2(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@swc/helpers@0.5.23))(@rspress/core@2.0.14(@module-federation/runtime-tools@2.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2)(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.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.9.1)(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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) zephyr-agent: 1.2.2 zephyr-edge-contract: 1.2.2 - zephyr-rsbuild-plugin: 1.2.2(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.8.2)(core-js@3.49.0))(@rspack/core@2.1.8(@module-federation/runtime-tools@2.8.2)(@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-rsbuild-plugin: 1.2.2(@rsbuild/core@2.1.10(@module-federation/runtime-tools@2.9.1)(core-js@3.49.0))(@rspack/core@2.1.10(@module-federation/runtime-tools@2.9.1)(@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.2.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' diff --git a/tools/scripts/create-release-draft.mjs b/tools/scripts/create-release-draft.mjs new file mode 100644 index 00000000000..69289ff7768 --- /dev/null +++ b/tools/scripts/create-release-draft.mjs @@ -0,0 +1,207 @@ +import { createHash } from 'node:crypto'; +import { appendFileSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { pathToFileURL } from 'node:url'; +import { assetName } from './prepare-browser-release.mjs'; + +const start = ''; +const end = ''; +const hash = (value) => createHash('sha256').update(value).digest('hex'); + +export function withDownload(body, repository, metadata) { + const section = + `${start}\n## Browser extension\n\n` + + `[Download Browser extension](https://github.com/${repository}/releases/download/${encodeURIComponent(metadata.tag)}/${assetName})\n\n` + + 'For extension-capable embedded browsers. Extract the ZIP, load the directory containing `manifest.json`, and refresh the page.\n\n' + + '[Installation and WebMCP guide](https://module-federation.io/guide/debug/chrome-devtool.html)\n\n' + + `Extension version: \`${metadata.extensionVersion}\`. Source commit: \`${metadata.sha}\`.\n\n` + + `SHA-256: \`${metadata.sha256}\`\n${end}`; + if (body.includes(start) !== body.includes(end)) + throw new Error('Incomplete managed download section'); + if (body.includes(start)) { + const from = body.indexOf(start); + const to = body.indexOf(end, from); + if (to < from) throw new Error('Invalid managed download section'); + return body.slice(0, from) + section + body.slice(to + end.length); + } + return `${body.trimEnd()}\n\n${section}`.trimStart(); +} + +// request is injected in tests; no GitHub writes are made by local validation. +export async function createReleaseDraft({ + request, + repository, + metadata, + archive, + previousTag = '', +}) { + if ( + !/^[\w.-]+\/[\w.-]+$/.test(repository) || + !/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(metadata.version) || + metadata.tag !== `v${metadata.version}` || + !/^[a-f0-9]{40}$/.test(metadata.sha) || + metadata.channel !== 'latest' || + metadata.asset !== assetName || + !/^[a-f0-9]{64}$/.test(metadata.sha256) || + hash(archive) !== metadata.sha256 + ) + throw new Error('Invalid release metadata or archive checksum'); + if (metadata.version.includes('-')) + throw new Error( + 'GitHub Release drafts are only created for stable latest versions', + ); + const base = `/repos/${repository}`; + const tag = encodeURIComponent(metadata.tag); + const ref = await request(`${base}/git/ref/tags/${tag}`, { allow404: true }); + if (ref) { + let object = ref.object; + while (object.type === 'tag') + object = (await request(`${base}/git/tags/${object.sha}`)).object; + if (object.type !== 'commit' || object.sha !== metadata.sha) + throw new Error( + 'Existing tag points to a different commit; refusing to move it', + ); + } + + // Listing includes drafts; the get-by-tag endpoint is for published releases. + let release; + for (let page = 1; ; page++) { + const releases = await request( + `${base}/releases?per_page=100&page=${page}`, + ); + release = releases.find((item) => item.tag_name === metadata.tag); + if (release || releases.length < 100) break; + } + if (release) { + if (!release.draft || release.immutable) + throw new Error('Release is already published; refusing to modify it'); + // Without a tag, target_commitish may still be a mutable branch name. + if (!ref) { + const target = await request( + `${base}/commits/${encodeURIComponent(release.target_commitish)}`, + ); + if (target.sha !== metadata.sha) + throw new Error('Existing draft targets a different commit'); + } + if (release.prerelease) + throw new Error('Existing draft has a different release channel'); + } else { + const notes = await request(`${base}/releases/generate-notes`, { + method: 'POST', + body: { + tag_name: metadata.tag, + target_commitish: metadata.sha, + ...(previousTag ? { previous_tag_name: previousTag } : {}), + configuration_file_path: '.github/release.yml', + }, + }); + release = await request(`${base}/releases`, { + method: 'POST', + body: { + tag_name: metadata.tag, + target_commitish: metadata.sha, + name: metadata.tag, + draft: true, + prerelease: false, + body: notes.body, + }, + }); + } + + const assets = []; + for (let page = 1; ; page++) { + const batch = await request( + `${base}/releases/${release.id}/assets?per_page=100&page=${page}`, + ); + assets.push(...batch); + if (batch.length < 100) break; + } + const existing = assets.find((asset) => asset.name === assetName); + if (existing) { + const digest = + existing.digest || + `sha256:${hash(await request(`${base}/releases/assets/${existing.id}`, { binary: true }))}`; + if (existing.state !== 'uploaded' || digest !== `sha256:${metadata.sha256}`) + throw new Error( + 'Existing Browser asset differs or is incomplete; inspect the draft before replacing it', + ); + } else { + await request( + `https://uploads.github.com${base}/releases/${release.id}/assets?name=${assetName}`, + { + method: 'POST', + upload: archive, + }, + ); + } + const body = withDownload(release.body || '', repository, metadata); + if (body !== release.body) + await request(`${base}/releases/${release.id}`, { + method: 'PATCH', + body: { body, target_commitish: metadata.sha }, + }); + return release.html_url; +} + +export function githubRequest(token) { + if (!token) throw new Error('GH_TOKEN is required'); + return async ( + route, + { method = 'GET', body, upload, binary = false, allow404 = false } = {}, + ) => { + const url = route.startsWith('/') + ? `https://api.github.com${route}` + : route; + if ( + !['https://api.github.com', 'https://uploads.github.com'].includes( + new URL(url).origin, + ) + ) + throw new Error('Unexpected GitHub API origin'); + const response = await fetch(url, { + method, + headers: { + Authorization: `Bearer ${token}`, + Accept: binary + ? 'application/octet-stream' + : 'application/vnd.github+json', + 'X-GitHub-Api-Version': '2022-11-28', + ...(upload + ? { 'Content-Type': 'application/zip' } + : body + ? { 'Content-Type': 'application/json' } + : {}), + }, + body: upload || (body ? JSON.stringify(body) : undefined), + }); + if (allow404 && response.status === 404) return null; + if (!response.ok) + throw new Error( + `GitHub ${method} ${route}: HTTP ${response.status}. Check job permissions and release/tag rules. For workflow changes, merge them into the default branch first.`, + ); + return binary ? Buffer.from(await response.arrayBuffer()) : response.json(); + }; +} + +if ( + process.argv[1] && + import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href +) { + const directory = path.resolve(process.argv[2]); + const metadata = JSON.parse( + readFileSync(path.join(directory, 'release.json'), 'utf8'), + ); + const url = await createReleaseDraft({ + request: githubRequest(process.env.GH_TOKEN), + repository: process.env.GITHUB_REPOSITORY, + metadata, + archive: readFileSync(path.join(directory, assetName)), + previousTag: process.env.PREVIOUS_TAG, + }); + if (process.env.GITHUB_STEP_SUMMARY) + appendFileSync( + process.env.GITHUB_STEP_SUMMARY, + `## GitHub Release draft\n\n[Review and publish ${metadata.tag}](${url})\n\nBrowser ZIP attached. The release remains a draft until you publish it.\n\nSource commit: \`${metadata.sha}\`\n`, + ); + console.log(`Release draft: ${url}`); +} diff --git a/tools/scripts/create-release-draft.test.mjs b/tools/scripts/create-release-draft.test.mjs new file mode 100644 index 00000000000..c433d0d0a51 --- /dev/null +++ b/tools/scripts/create-release-draft.test.mjs @@ -0,0 +1,236 @@ +import assert from 'node:assert/strict'; +import { createHash } from 'node:crypto'; +import { test } from 'node:test'; +import { + createReleaseDraft, + withDownload, + githubRequest, +} from './create-release-draft.mjs'; +import { assetName } from './prepare-browser-release.mjs'; + +const archive = Buffer.from('browser extension ZIP fixture'); +const metadata = { + tag: 'v2.10.0', + version: '2.10.0', + extensionVersion: '2.10.0', + sha: 'a'.repeat(40), + channel: 'latest', + asset: assetName, + sha256: createHash('sha256').update(archive).digest('hex'), +}; +const repository = 'module-federation/core'; +const base = `/repos/${repository}`; +function host({ + existing = null, + ref = null, + target = metadata.sha, + failUpload = false, + assets = [], + annotated = null, +} = {}) { + const calls = []; + let release = existing && structuredClone(existing); + const request = async (route, options = {}) => { + calls.push({ route, ...options }); + const requestUrl = new URL(route, 'https://api.github.com'); + if (route.includes('/git/ref/tags/')) return ref; + if (route.includes('/git/tags/')) return { object: annotated }; + if (route.includes('/commits/')) return { sha: target }; + if (route === `${base}/releases?per_page=100&page=1`) + return release ? [release] : []; + if (route === `${base}/releases/generate-notes`) + return { body: '## Changes\nGenerated by GitHub' }; + if (route === `${base}/releases` && options.method === 'POST') { + release = { + id: 12, + html_url: + 'https://github.com/module-federation/core/releases/tag/untagged-draft', + ...options.body, + }; + return release; + } + if (route === `${base}/releases/12/assets?per_page=100&page=1`) + return assets; + if (route === `${base}/releases/assets/77`) return archive; + if ( + requestUrl.origin === 'https://uploads.github.com' && + requestUrl.pathname === `${base}/releases/12/assets` && + requestUrl.searchParams.get('name') === assetName + ) { + if (failUpload) throw new Error('Upload interrupted'); + assets.push({ + id: 77, + name: assetName, + state: 'uploaded', + digest: `sha256:${metadata.sha256}`, + }); + return assets.at(-1); + } + if (route === `${base}/releases/12` && options.method === 'PATCH') { + Object.assign(release, options.body); + return release; + } + throw new Error(`Unexpected request: ${route}`); + }; + return { + request, + calls, + get release() { + return release; + }, + assets, + }; +} +const draft = () => ({ + id: 12, + html_url: 'https://github.com/draft', + tag_name: metadata.tag, + target_commitish: metadata.sha, + body: 'Hand-edited notes', + draft: true, + prerelease: false, +}); +const run = (api, overrides = {}) => + createReleaseDraft({ + request: api.request, + repository, + metadata, + archive, + ...overrides, + }); +const mutations = (api) => + api.calls.filter((c) => c.method && c.method !== 'GET'); + +test('creates a draft with GitHub notes, explicit previous tag and exact source; attaches before linking', async () => { + const api = host(); + await run(api, { previousTag: 'v2.9.0' }); + const notes = api.calls.find((c) => c.route.endsWith('/generate-notes')); + assert.equal(notes.body.previous_tag_name, 'v2.9.0'); + assert.equal(notes.body.target_commitish, metadata.sha); + assert.equal(notes.body.configuration_file_path, '.github/release.yml'); + assert.equal(api.release.draft, true); + assert.equal(api.release.prerelease, false); + assert.match(api.release.body, /Generated by GitHub/); + assert.match( + api.release.body, + /releases\/download\/v2.10.0\/module-federation-devtools-browser.zip/, + ); + const writes = mutations(api); + assert.ok( + writes.findIndex((c) => c.upload) < + writes.findIndex((c) => c.method === 'PATCH'), + ); + assert.ok(writes.every((c) => c.body?.draft !== false)); +}); + +test('next metadata is rejected before any GitHub request', async () => { + const api = host(); + await assert.rejects( + run(api, { + metadata: { + ...metadata, + version: '0.0.0-next-123', + tag: 'v0.0.0-next-123', + channel: 'next', + }, + }), + /Invalid release metadata|only created for stable/, + ); + assert.equal(api.calls.length, 0); +}); + +test('rerun preserves manual notes and matching assets without regenerating or uploading', async () => { + const api = host(); + await run(api); + api.release.body = 'Maintainer edits\n\n' + api.release.body; + api.calls.length = 0; + await run(api); + assert.match(api.release.body, /^Maintainer edits/); + assert.equal(mutations(api).length, 0); + assert.equal(api.assets.length, 1); +}); + +test('upload failure leaves a draft which a retry resumes', async () => { + const failed = host({ failUpload: true }); + await assert.rejects(run(failed), /Upload interrupted/); + assert.equal(failed.release.draft, true); + assert.doesNotMatch(failed.release.body, /Download Browser/); + const retry = host({ existing: failed.release }); + await run(retry); + assert.ok(!retry.calls.some((c) => c.route.endsWith('/generate-notes'))); + assert.match(retry.release.body, /Download Browser/); +}); + +test('published releases and mismatching tags/draft targets are never modified', async () => { + for (const options of [ + { existing: { ...draft(), draft: false } }, + { existing: { ...draft(), immutable: true } }, + { ref: { object: { type: 'commit', sha: 'b'.repeat(40) } } }, + { existing: draft(), target: 'b'.repeat(40) }, + { existing: { ...draft(), prerelease: true } }, + ]) { + const api = host(options); + await assert.rejects(run(api)); + assert.equal(mutations(api).length, 0); + } +}); + +test('checks the underlying commit of annotated tags', async () => { + const api = host({ + ref: { object: { type: 'tag', sha: 'c'.repeat(40) } }, + annotated: { type: 'commit', sha: metadata.sha }, + }); + await run(api); + assert.equal(api.release.target_commitish, metadata.sha); +}); + +test('verifies existing assets, downloading older assets without server digests', async () => { + const api = host({ + existing: draft(), + assets: [{ id: 77, name: assetName, state: 'uploaded' }], + }); + await run(api); + assert.ok(api.calls.some((c) => c.binary)); + assert.ok(!api.calls.some((c) => c.upload)); + const wrong = host({ + existing: draft(), + assets: [{ name: assetName, state: 'uploaded', digest: 'sha256:wrong' }], + }); + await assert.rejects(run(wrong), /differs/); + assert.equal(mutations(wrong).length, 0); +}); + +test('corrupt local archive is rejected before any request', async () => { + const api = host(); + await assert.rejects( + run(api, { archive: Buffer.from('corrupted') }), + /checksum/, + ); + assert.equal(api.calls.length, 0); +}); + +test('managed download section is updated without duplicating or losing surrounding notes', () => { + const body = withDownload('Hand-edited', repository, metadata) + '\nFooter'; + const updated = withDownload(body, repository, { + ...metadata, + extensionVersion: '2.10.1', + }); + assert.match(updated, /^Hand-edited/); + assert.match(updated, /Footer$/); + assert.equal(updated.split('## Browser extension').length, 2); + assert.match(updated, /2.10.1/); + assert.throws(() => + withDownload('', repository, metadata), + ); +}); + +test('API transport rejects foreign origins before transmitting credentials', async () => { + await Promise.all( + [ + 'https://example.com/upload', + 'https://uploads.github.com.evil.example/upload', + ].map((url) => + assert.rejects(githubRequest('test-only-token')(url), /origin/), + ), + ); +}); diff --git a/tools/scripts/prepare-browser-release.mjs b/tools/scripts/prepare-browser-release.mjs new file mode 100644 index 00000000000..6cbc2fa0d4d --- /dev/null +++ b/tools/scripts/prepare-browser-release.mjs @@ -0,0 +1,78 @@ +import { createHash } from 'node:crypto'; +import { execFileSync } from 'node:child_process'; +import { mkdirSync, readFileSync, writeFileSync, existsSync } from 'node:fs'; +import path from 'node:path'; +import { pathToFileURL } from 'node:url'; + +export const assetName = 'module-federation-devtools-browser.zip'; + +export function prepareBrowserRelease({ root, destination, channel }) { + if (!['latest', 'next'].includes(channel)) + throw new Error('Invalid release channel'); + const read = (file) => + JSON.parse(readFileSync(path.join(root, file), 'utf8')); + const version = read('packages/runtime/package.json').version; + const extensionVersion = read( + 'packages/chrome-devtools/package.json', + ).version; + if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(version)) + throw new Error('Invalid release version'); + if (channel === 'latest' && version.includes('-')) + throw new Error('latest must use a stable version'); + if (channel === 'next' && !version.includes('-')) + throw new Error('next must use a snapshot version'); + const directory = path.join(root, 'packages/chrome-devtools/dist/browser'); + const manifest = read('packages/chrome-devtools/dist/browser/manifest.json'); + if ( + manifest.side_panel || + manifest.devtools_page || + manifest.permissions?.includes('sidePanel') || + manifest.action?.default_popup !== 'html/main/index.html?view=popup' || + manifest.version !== + (extensionVersion.includes('-') ? '0.0.0' : extensionVersion) || + !manifest.content_scripts?.some( + (script) => + script.world === 'MAIN' && + script.run_at === 'document_start' && + script.js.includes('static/js/webmcp.js'), + ) || + !existsSync(path.join(directory, 'static/js/webmcp.js')) + ) + throw new Error( + 'Expected the built Browser extension, not the Chrome variant', + ); + const sha = execFileSync('git', ['rev-parse', 'HEAD'], { + cwd: root, + encoding: 'utf8', + }).trim(); + mkdirSync(destination, { recursive: true }); + const archive = path.join(destination, assetName); + if (existsSync(archive)) throw new Error('Release archive already exists'); + execFileSync('zip', ['-q', '-r', '-X', archive, '.'], { cwd: directory }); + const metadata = { + tag: `v${version}`, + version, + extensionVersion, + sha, + channel, + asset: assetName, + sha256: createHash('sha256').update(readFileSync(archive)).digest('hex'), + }; + writeFileSync( + path.join(destination, 'release.json'), + JSON.stringify(metadata, null, 2) + '\n', + ); + return metadata; +} + +if ( + process.argv[1] && + import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href +) { + const metadata = prepareBrowserRelease({ + root: process.cwd(), + destination: path.resolve(process.argv[2]), + channel: process.env.RELEASE_CHANNEL, + }); + console.log(`Prepared ${metadata.tag} from ${metadata.sha}`); +} diff --git a/tools/scripts/prepare-browser-release.test.mjs b/tools/scripts/prepare-browser-release.test.mjs new file mode 100644 index 00000000000..3ced4e4ade6 --- /dev/null +++ b/tools/scripts/prepare-browser-release.test.mjs @@ -0,0 +1,118 @@ +import assert from 'node:assert/strict'; +import { execFileSync } from 'node:child_process'; +import { + mkdtempSync, + mkdirSync, + writeFileSync, + rmSync, + readFileSync, +} from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { test } from 'node:test'; +import { + prepareBrowserRelease, + assetName, +} from './prepare-browser-release.mjs'; + +test('packages a loadable Browser archive at its root with matching metadata', () => { + const root = mkdtempSync(path.join(os.tmpdir(), 'mf-release-')); + try { + const write = (name, contents) => { + const file = path.join(root, name); + mkdirSync(path.dirname(file), { recursive: true }); + writeFileSync( + file, + typeof contents === 'string' ? contents : JSON.stringify(contents), + ); + }; + execFileSync('git', ['init', '-q'], { cwd: root }); + execFileSync( + 'git', + [ + '-c', + 'user.name=Release Test', + '-c', + 'user.email=test@example.com', + '-c', + 'core.hooksPath=/dev/null', + 'commit', + '-q', + '--allow-empty', + '-m', + 'test', + ], + { cwd: root }, + ); + write('packages/runtime/package.json', { version: '2.10.0' }); + write('packages/chrome-devtools/package.json', { version: '2.10.0' }); + const manifest = { + version: '2.10.0', + action: { default_popup: 'html/main/index.html?view=popup' }, + content_scripts: [ + { + world: 'MAIN', + run_at: 'document_start', + js: ['static/js/webmcp.js'], + }, + ], + }; + const manifestPath = 'packages/chrome-devtools/dist/browser/manifest.json'; + write(manifestPath, manifest); + write( + 'packages/chrome-devtools/dist/browser/static/js/webmcp.js', + '/* fixture */', + ); + write( + 'packages/chrome-devtools/dist/browser/html/main/index.html', + '', + ); + const destination = path.join(root, 'assets'); + const result = prepareBrowserRelease({ + root, + destination, + channel: 'latest', + }); + assert.equal(result.tag, 'v2.10.0'); + assert.match(result.sha, /^[a-f0-9]{40}$/); + const names = execFileSync( + 'unzip', + ['-Z1', path.join(destination, assetName)], + { encoding: 'utf8' }, + ).split('\n'); + assert.ok(names.includes('manifest.json')); + assert.ok(names.includes('static/js/webmcp.js')); + assert.ok(!names.includes('browser/manifest.json')); + assert.deepEqual( + JSON.parse(readFileSync(path.join(destination, 'release.json'), 'utf8')), + result, + ); + assert.throws( + () => prepareBrowserRelease({ root, destination, channel: 'latest' }), + /already exists/, + ); + assert.throws( + () => prepareBrowserRelease({ root, destination, channel: 'next' }), + /snapshot/, + ); + write(manifestPath, { ...manifest, side_panel: {} }); + assert.throws( + () => prepareBrowserRelease({ root, destination, channel: 'latest' }), + /Browser extension/, + ); + write('packages/runtime/package.json', { version: '0.0.0-next-123' }); + write('packages/chrome-devtools/package.json', { + version: '0.0.0-next-123', + }); + write(manifestPath, { ...manifest, version: '0.0.0' }); + const next = prepareBrowserRelease({ + root, + destination: path.join(root, 'next'), + channel: 'next', + }); + assert.equal(next.tag, 'v0.0.0-next-123'); + assert.equal(next.extensionVersion, '0.0.0-next-123'); + } finally { + rmSync(root, { recursive: true, force: true }); + } +});