@bleedingdev/modern-js-runtime 3.2.0-ultramodern.120 → 3.2.0-ultramodern.121

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/dist/cjs/boundary-debugger/index.js +4 -0
  2. package/dist/cjs/cli/index.js +11 -0
  3. package/dist/cjs/{router/runtime/tanstack/rsc/ClientSlot.js → core/context/extensions.js} +33 -21
  4. package/dist/cjs/{router/runtime/tanstack/rsc/SlotContext.js → core/context/helmetContext.js} +16 -20
  5. package/dist/cjs/core/context/index.js +65 -0
  6. package/dist/cjs/core/react/wrapper.js +6 -4
  7. package/dist/cjs/core/server/helmet.js +2 -1
  8. package/dist/cjs/core/server/requestHandler.js +42 -29
  9. package/dist/cjs/core/server/routerCleanup.js +110 -0
  10. package/dist/cjs/core/server/scriptOrder.js +75 -4
  11. package/dist/cjs/core/server/stream/afterTemplate.js +6 -18
  12. package/dist/cjs/core/server/stream/deferredScript.js +4 -1
  13. package/dist/cjs/core/server/string/index.js +1 -7
  14. package/dist/cjs/core/server/string/loadable.js +13 -40
  15. package/dist/cjs/core/server/string/ssrData.js +1 -1
  16. package/dist/cjs/core/server/utils.js +31 -8
  17. package/dist/cjs/exports/head.js +135 -74
  18. package/dist/cjs/exports/tanstack-router.js +36 -305
  19. package/dist/cjs/module-federation/index.js +178 -0
  20. package/dist/cjs/router/cli/code/index.js +1 -47
  21. package/dist/cjs/router/cli/code/templates.js +1 -14
  22. package/dist/cjs/router/cli/handler.js +1 -1
  23. package/dist/cjs/router/cli/index.js +2 -23
  24. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +16 -4
  25. package/dist/cjs/router/runtime/PrefetchLink.js +2 -3
  26. package/dist/cjs/router/runtime/internal.js +20 -13
  27. package/dist/cjs/router/runtime/lifecycle.js +37 -22
  28. package/dist/cjs/router/runtime/plugin.js +2 -9
  29. package/dist/cjs/router/runtime/plugin.node.js +2 -7
  30. package/dist/cjs/router/runtime/provider.js +107 -0
  31. package/dist/cjs/router/runtime/utils.js +35 -9
  32. package/dist/esm/boundary-debugger/index.mjs +4 -0
  33. package/dist/esm/cli/index.mjs +4 -2
  34. package/dist/esm/core/context/extensions.mjs +28 -0
  35. package/dist/esm/core/context/helmetContext.mjs +13 -0
  36. package/dist/esm/core/context/index.mjs +5 -0
  37. package/dist/esm/core/react/wrapper.mjs +6 -4
  38. package/dist/esm/core/server/helmet.mjs +2 -1
  39. package/dist/esm/core/server/requestHandler.mjs +43 -30
  40. package/dist/esm/core/server/routerCleanup.mjs +66 -0
  41. package/dist/esm/core/server/scriptOrder.mjs +60 -1
  42. package/dist/esm/core/server/stream/afterTemplate.mjs +8 -20
  43. package/dist/esm/core/server/stream/deferredScript.mjs +4 -1
  44. package/dist/esm/core/server/string/index.mjs +3 -9
  45. package/dist/esm/core/server/string/loadable.mjs +11 -38
  46. package/dist/esm/core/server/string/ssrData.mjs +2 -2
  47. package/dist/esm/core/server/utils.mjs +31 -8
  48. package/dist/esm/exports/head.mjs +135 -74
  49. package/dist/esm/exports/tanstack-router.mjs +30 -4
  50. package/dist/esm/module-federation/index.mjs +109 -0
  51. package/dist/esm/router/cli/code/index.mjs +1 -47
  52. package/dist/esm/router/cli/code/templates.mjs +1 -14
  53. package/dist/esm/router/cli/handler.mjs +1 -1
  54. package/dist/esm/router/cli/index.mjs +3 -24
  55. package/dist/esm/router/runtime/DeferredDataScripts.node.mjs +16 -4
  56. package/dist/esm/router/runtime/PrefetchLink.mjs +2 -3
  57. package/dist/esm/router/runtime/internal.mjs +16 -15
  58. package/dist/esm/router/runtime/lifecycle.mjs +22 -13
  59. package/dist/esm/router/runtime/plugin.mjs +4 -11
  60. package/dist/esm/router/runtime/plugin.node.mjs +4 -9
  61. package/dist/esm/router/runtime/provider.mjs +57 -0
  62. package/dist/esm/router/runtime/utils.mjs +35 -9
  63. package/dist/esm-node/boundary-debugger/index.mjs +4 -0
  64. package/dist/esm-node/cli/index.mjs +4 -2
  65. package/dist/esm-node/core/context/extensions.mjs +29 -0
  66. package/dist/esm-node/core/context/helmetContext.mjs +14 -0
  67. package/dist/esm-node/core/context/index.mjs +5 -0
  68. package/dist/esm-node/core/react/wrapper.mjs +6 -4
  69. package/dist/esm-node/core/server/helmet.mjs +2 -1
  70. package/dist/esm-node/core/server/requestHandler.mjs +43 -30
  71. package/dist/esm-node/core/server/routerCleanup.mjs +67 -0
  72. package/dist/esm-node/core/server/scriptOrder.mjs +60 -1
  73. package/dist/esm-node/core/server/stream/afterTemplate.mjs +8 -20
  74. package/dist/esm-node/core/server/stream/deferredScript.mjs +4 -1
  75. package/dist/esm-node/core/server/string/index.mjs +3 -9
  76. package/dist/esm-node/core/server/string/loadable.mjs +11 -38
  77. package/dist/esm-node/core/server/string/ssrData.mjs +2 -2
  78. package/dist/esm-node/core/server/utils.mjs +31 -8
  79. package/dist/esm-node/exports/head.mjs +135 -74
  80. package/dist/esm-node/exports/tanstack-router.mjs +30 -4
  81. package/dist/esm-node/module-federation/index.mjs +110 -0
  82. package/dist/esm-node/router/cli/code/index.mjs +1 -47
  83. package/dist/esm-node/router/cli/code/templates.mjs +1 -14
  84. package/dist/esm-node/router/cli/handler.mjs +1 -1
  85. package/dist/esm-node/router/cli/index.mjs +3 -24
  86. package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +16 -4
  87. package/dist/esm-node/router/runtime/PrefetchLink.mjs +2 -3
  88. package/dist/esm-node/router/runtime/internal.mjs +16 -15
  89. package/dist/esm-node/router/runtime/lifecycle.mjs +22 -13
  90. package/dist/esm-node/router/runtime/plugin.mjs +4 -11
  91. package/dist/esm-node/router/runtime/plugin.node.mjs +4 -9
  92. package/dist/esm-node/router/runtime/provider.mjs +58 -0
  93. package/dist/esm-node/router/runtime/utils.mjs +35 -9
  94. package/dist/types/cli/index.d.ts +3 -1
  95. package/dist/types/core/context/extensions.d.ts +37 -0
  96. package/dist/types/core/context/helmetContext.d.ts +10 -0
  97. package/dist/types/core/context/index.d.ts +6 -0
  98. package/dist/types/core/context/runtime.d.ts +1 -11
  99. package/dist/types/core/server/routerCleanup.d.ts +28 -0
  100. package/dist/types/core/server/scriptOrder.d.ts +24 -0
  101. package/dist/types/core/server/string/loadable.d.ts +1 -7
  102. package/dist/types/core/server/utils.d.ts +1 -0
  103. package/dist/types/exports/tanstack-router.d.ts +88 -7
  104. package/dist/types/module-federation/index.d.ts +65 -0
  105. package/dist/types/router/cli/code/index.d.ts +1 -3
  106. package/dist/types/router/cli/handler.d.ts +0 -3
  107. package/dist/types/router/runtime/internal.d.ts +1 -0
  108. package/dist/types/router/runtime/lifecycle.d.ts +2 -0
  109. package/dist/types/router/runtime/plugin.d.ts +1 -1
  110. package/dist/types/router/runtime/plugin.node.d.ts +1 -1
  111. package/dist/types/router/runtime/provider.d.ts +61 -0
  112. package/package.json +15 -11
  113. package/rstest.config.mts +2 -4
  114. package/dist/cjs/router/cli/code/tanstackTypes.js +0 -447
  115. package/dist/cjs/router/runtime/tanstack/basepathRewrite.js +0 -66
  116. package/dist/cjs/router/runtime/tanstack/dataMutation.js +0 -349
  117. package/dist/cjs/router/runtime/tanstack/hydrationBoundary.js +0 -48
  118. package/dist/cjs/router/runtime/tanstack/outlet.js +0 -58
  119. package/dist/cjs/router/runtime/tanstack/plugin.js +0 -342
  120. package/dist/cjs/router/runtime/tanstack/plugin.node.js +0 -272
  121. package/dist/cjs/router/runtime/tanstack/prefetchLink.js +0 -59
  122. package/dist/cjs/router/runtime/tanstack/routeTree.js +0 -525
  123. package/dist/cjs/router/runtime/tanstack/rsc/CompositeComponent.js +0 -79
  124. package/dist/cjs/router/runtime/tanstack/rsc/ReplayableStream.js +0 -146
  125. package/dist/cjs/router/runtime/tanstack/rsc/RscNodeRenderer.js +0 -69
  126. package/dist/cjs/router/runtime/tanstack/rsc/client.js +0 -97
  127. package/dist/cjs/router/runtime/tanstack/rsc/createRscProxy.js +0 -145
  128. package/dist/cjs/router/runtime/tanstack/rsc/index.js +0 -46
  129. package/dist/cjs/router/runtime/tanstack/rsc/server.js +0 -250
  130. package/dist/cjs/router/runtime/tanstack/rsc/slotUsageSanitizer.js +0 -69
  131. package/dist/cjs/router/runtime/tanstack/rsc/symbols.js +0 -77
  132. package/dist/cjs/ssr/index.node.js +0 -125
  133. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -88
  134. package/dist/cjs/ssr/serverRender/renderToString/entry.js +0 -200
  135. package/dist/cjs/ssr/serverRender/types.js +0 -40
  136. package/dist/esm/router/cli/code/tanstackTypes.mjs +0 -396
  137. package/dist/esm/router/runtime/tanstack/basepathRewrite.mjs +0 -28
  138. package/dist/esm/router/runtime/tanstack/dataMutation.mjs +0 -305
  139. package/dist/esm/router/runtime/tanstack/hydrationBoundary.mjs +0 -10
  140. package/dist/esm/router/runtime/tanstack/outlet.mjs +0 -17
  141. package/dist/esm/router/runtime/tanstack/plugin.mjs +0 -304
  142. package/dist/esm/router/runtime/tanstack/plugin.node.mjs +0 -234
  143. package/dist/esm/router/runtime/tanstack/prefetchLink.mjs +0 -18
  144. package/dist/esm/router/runtime/tanstack/routeTree.mjs +0 -481
  145. package/dist/esm/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -19
  146. package/dist/esm/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -41
  147. package/dist/esm/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -104
  148. package/dist/esm/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -31
  149. package/dist/esm/router/runtime/tanstack/rsc/SlotContext.mjs +0 -17
  150. package/dist/esm/router/runtime/tanstack/rsc/client.mjs +0 -53
  151. package/dist/esm/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -107
  152. package/dist/esm/router/runtime/tanstack/rsc/index.mjs +0 -1
  153. package/dist/esm/router/runtime/tanstack/rsc/server.mjs +0 -200
  154. package/dist/esm/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -31
  155. package/dist/esm/router/runtime/tanstack/rsc/symbols.mjs +0 -17
  156. package/dist/esm/ssr/index.node.mjs +0 -44
  157. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -50
  158. package/dist/esm/ssr/serverRender/renderToString/entry.mjs +0 -151
  159. package/dist/esm/ssr/serverRender/types.mjs +0 -1
  160. package/dist/esm-node/router/cli/code/tanstackTypes.mjs +0 -397
  161. package/dist/esm-node/router/runtime/tanstack/basepathRewrite.mjs +0 -29
  162. package/dist/esm-node/router/runtime/tanstack/dataMutation.mjs +0 -306
  163. package/dist/esm-node/router/runtime/tanstack/hydrationBoundary.mjs +0 -11
  164. package/dist/esm-node/router/runtime/tanstack/outlet.mjs +0 -18
  165. package/dist/esm-node/router/runtime/tanstack/plugin.mjs +0 -305
  166. package/dist/esm-node/router/runtime/tanstack/plugin.node.mjs +0 -235
  167. package/dist/esm-node/router/runtime/tanstack/prefetchLink.mjs +0 -19
  168. package/dist/esm-node/router/runtime/tanstack/routeTree.mjs +0 -482
  169. package/dist/esm-node/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -20
  170. package/dist/esm-node/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -42
  171. package/dist/esm-node/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -105
  172. package/dist/esm-node/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -32
  173. package/dist/esm-node/router/runtime/tanstack/rsc/SlotContext.mjs +0 -18
  174. package/dist/esm-node/router/runtime/tanstack/rsc/client.mjs +0 -54
  175. package/dist/esm-node/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -108
  176. package/dist/esm-node/router/runtime/tanstack/rsc/index.mjs +0 -2
  177. package/dist/esm-node/router/runtime/tanstack/rsc/server.mjs +0 -201
  178. package/dist/esm-node/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -32
  179. package/dist/esm-node/router/runtime/tanstack/rsc/symbols.mjs +0 -18
  180. package/dist/esm-node/ssr/index.node.mjs +0 -45
  181. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -51
  182. package/dist/esm-node/ssr/serverRender/renderToString/entry.mjs +0 -152
  183. package/dist/esm-node/ssr/serverRender/types.mjs +0 -2
  184. package/dist/types/router/cli/code/tanstackTypes.d.ts +0 -10
  185. package/dist/types/router/runtime/tanstack/basepathRewrite.d.ts +0 -8
  186. package/dist/types/router/runtime/tanstack/dataMutation.d.ts +0 -29
  187. package/dist/types/router/runtime/tanstack/hydrationBoundary.d.ts +0 -2
  188. package/dist/types/router/runtime/tanstack/outlet.d.ts +0 -2
  189. package/dist/types/router/runtime/tanstack/plugin.d.ts +0 -6
  190. package/dist/types/router/runtime/tanstack/plugin.node.d.ts +0 -6
  191. package/dist/types/router/runtime/tanstack/prefetchLink.d.ts +0 -11
  192. package/dist/types/router/runtime/tanstack/routeTree.d.ts +0 -8
  193. package/dist/types/router/runtime/tanstack/rsc/ClientSlot.d.ts +0 -5
  194. package/dist/types/router/runtime/tanstack/rsc/CompositeComponent.d.ts +0 -3
  195. package/dist/types/router/runtime/tanstack/rsc/ReplayableStream.d.ts +0 -24
  196. package/dist/types/router/runtime/tanstack/rsc/RscNodeRenderer.d.ts +0 -5
  197. package/dist/types/router/runtime/tanstack/rsc/SlotContext.d.ts +0 -11
  198. package/dist/types/router/runtime/tanstack/rsc/client.d.ts +0 -11
  199. package/dist/types/router/runtime/tanstack/rsc/createRscProxy.d.ts +0 -7
  200. package/dist/types/router/runtime/tanstack/rsc/index.d.ts +0 -2
  201. package/dist/types/router/runtime/tanstack/rsc/server.d.ts +0 -14
  202. package/dist/types/router/runtime/tanstack/rsc/slotUsageSanitizer.d.ts +0 -2
  203. package/dist/types/router/runtime/tanstack/rsc/symbols.d.ts +0 -46
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Fork-owned runtime-context extension mechanism.
3
+ *
4
+ * Plugins must not add ad-hoc fields to `TRuntimeContext` /
5
+ * `TInternalRuntimeContext`. Instead they store state in a single internal
6
+ * slot (a `Map` keyed by symbol) attached to the context object under a
7
+ * symbol property, so nothing leaks into string-key enumeration
8
+ * (`Object.keys`, `JSON.stringify`, `{ ...context }` rest patterns over
9
+ * named keys).
10
+ *
11
+ * `Symbol.for` is used for both the slot and the extension keys so that the
12
+ * mechanism stays coherent even if this module is instantiated twice
13
+ * (e.g. esm/cjs interop in test runners).
14
+ */
15
+ export interface RuntimeContextExtension<T> {
16
+ /** Stable identity of this extension. */
17
+ readonly key: symbol;
18
+ get(context: object): T | undefined;
19
+ set(context: object, value: T): void;
20
+ remove(context: object): void;
21
+ }
22
+ /**
23
+ * Removes the extension slot from a context object.
24
+ *
25
+ * The slot is an enumerable symbol-keyed property, so object spreads copy it
26
+ * onto derived objects. Call this on *copies* that form the public
27
+ * `RuntimeContext` value to keep internal state (router instances, helmet
28
+ * state, ...) unreachable from the public context object.
29
+ */
30
+ export declare function stripRuntimeContextExtensions(context: object): void;
31
+ /**
32
+ * Creates a typed accessor pair over the shared extension slot.
33
+ *
34
+ * The `id` must be globally unique (it is interned via `Symbol.for`); use a
35
+ * package-prefixed name such as `@modern-js/plugin-tanstack:router-state`.
36
+ */
37
+ export declare function createRuntimeContextExtension<T>(id: string): RuntimeContextExtension<T>;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Fork-owned helmet state, stored via the runtime-context extension slot
3
+ * instead of an ad-hoc `_helmetContext` field on `TInternalRuntimeContext`.
4
+ */
5
+ import type { HelmetServerState } from 'react-helmet-async';
6
+ export interface HelmetContextSlot {
7
+ helmet?: HelmetServerState | null;
8
+ }
9
+ export declare function getHelmetContext(context: object): HelmetContextSlot | undefined;
10
+ export declare function ensureHelmetContext(context: object): HelmetContextSlot;
@@ -3,6 +3,12 @@ import type { NestedRoute, PageRoute } from '@modern-js/types';
3
3
  import type React from 'react';
4
4
  import type { RuntimeExtends } from '../plugin/types';
5
5
  import type { ServerPayload } from './serverPayload/index';
6
+ export { DefaultNotFound } from '../../router/runtime/DefaultNotFound';
7
+ export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter, type RouterExtendsHooks, } from '../../router/runtime/hooks';
8
+ export { applyRouterRuntimeState, applyRouterServerPrepareResult, cleanupRouterRuntimeState, createRouterRuntimeState, createRouterServerSnapshot, getRouterHydrationScripts, getRouterMatchedRouteIds, getRouterRuntimeState, getRouterServerSnapshot, type RouterLifecycleContext, type RouterLifecyclePhase, } from '../../router/runtime/lifecycle';
9
+ export { type RouterProviderFactory, type RouterProviderPlugin, registerRouterProvider, resolveRouterProvider, routerProviderRegistryHooks, } from '../../router/runtime/provider';
10
+ export type { BuiltInRouterFramework, InternalRouterRuntimeState, InternalRouterServerSnapshot, RouterFramework, RouterRouteMatchSnapshot, RouterServerPrepareResult, } from '../../router/runtime/types';
11
+ export { createRuntimeContextExtension, type RuntimeContextExtension, } from './extensions';
6
12
  export { getInitialContext, InternalRuntimeContext, RuntimeContext, type TInternalRuntimeContext, type TRuntimeContext, } from './runtime';
7
13
  export type { PayloadRoute, ServerPayload } from './serverPayload/index';
8
14
  interface GlobalContext {
@@ -1,12 +1,10 @@
1
1
  import type { RouteObject, StaticHandlerContext } from '@modern-js/runtime-utils/router';
2
- import type { HelmetServerState } from 'react-helmet-async';
3
- import type { InternalRouterRuntimeState, InternalRouterServerSnapshot, RouteManifest, RouterFramework } from '../../router/runtime/types';
2
+ import type { RouteManifest } from '../../router/runtime/types';
4
3
  import type { RequestContext, SSRServerContext } from '../types';
5
4
  export interface TRuntimeContext {
6
5
  initialData?: Record<string, unknown>;
7
6
  isBrowser: boolean;
8
7
  routes?: RouteObject[];
9
- routerFramework?: RouterFramework;
10
8
  requestContext: RequestContext;
11
9
  /**
12
10
  * @deprecated Use `requestContext` instead
@@ -19,19 +17,11 @@ export interface TRuntimeContext {
19
17
  */
20
18
  export interface TInternalRuntimeContext extends TRuntimeContext {
21
19
  routeManifest?: RouteManifest;
22
- routerRuntime?: InternalRouterRuntimeState;
23
- routerInstance?: unknown;
24
- routerHydrationScript?: string;
25
- routerMatchedRouteIds?: string[];
26
- routerServerSnapshot?: InternalRouterServerSnapshot;
27
20
  routerContext?: StaticHandlerContext;
28
21
  unstable_getBlockNavState?: () => boolean;
29
22
  ssrContext?: SSRServerContext;
30
23
  _internalContext?: any;
31
24
  _internalRouterBaseName?: any;
32
- _helmetContext?: {
33
- helmet?: HelmetServerState | null;
34
- };
35
25
  }
36
26
  export declare const InternalRuntimeContext: import("react").Context<TInternalRuntimeContext>;
37
27
  export declare const RuntimeContext: import("react").Context<TRuntimeContext>;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Fork-owned helper for the per-request router runtime cleanup.
3
+ *
4
+ * Router providers (react-router, @modern-js/plugin-tanstack, ...) register a
5
+ * `cleanup` callback in the router runtime state. For streamed SSR the
6
+ * Response is returned at shell-ready while React is still rendering into the
7
+ * body, so the cleanup must not run until the body finishes — otherwise it
8
+ * can dispose router state that the in-flight render is still using. Cleanup
9
+ * failures are reported through the request's `onError` instead of being
10
+ * swallowed.
11
+ */
12
+ import type { OnError } from '@modern-js/app-tools';
13
+ import type { TInternalRuntimeContext } from '../context';
14
+ export declare const ROUTER_CLEANUP_ERROR = "An error occurs during router runtime cleanup";
15
+ export type RouterCleanup = {
16
+ /** True once the cleanup has been tied to a streamed response body. */
17
+ readonly deferred: boolean;
18
+ /** Runs the router cleanup at most once; reports failures via `onError`. */
19
+ run: () => Promise<void>;
20
+ /**
21
+ * Ties the cleanup to the completion (close, error or cancellation) of the
22
+ * response body when it is a stream. Responses without a streaming body are
23
+ * returned as-is and the caller is expected to invoke `run()` itself.
24
+ */
25
+ deferUntilBodyDone: (response: Response) => Response;
26
+ };
27
+ export declare function withRouterCleanup<T>(runtimeContext: TInternalRuntimeContext, onError: OnError, callback: (routerCleanup: RouterCleanup) => Promise<T>): Promise<T>;
28
+ export declare function createRouterCleanup(runtimeContext: TInternalRuntimeContext, onError: OnError): RouterCleanup;
@@ -1 +1,25 @@
1
+ import type { TInternalRuntimeContext } from '../context';
2
+ type RouteAssetManifest = {
3
+ assets?: string[];
4
+ };
5
+ type RouteManifestLike = {
6
+ routeAssets?: Record<string, RouteAssetManifest | undefined>;
7
+ };
8
+ type ScriptChunkLike = {
9
+ filename?: string;
10
+ url?: string;
11
+ };
12
+ export declare function getMatchedRouteAssets(runtimeContext: TInternalRuntimeContext, routeManifest?: RouteManifestLike): string[];
13
+ export declare const orderHydrationScriptChunks: <T extends ScriptChunkLike>({ asyncEntryChunks, collectedChunks, matchedRouteChunks, entryName, }: {
14
+ asyncEntryChunks: T[];
15
+ collectedChunks: T[];
16
+ matchedRouteChunks: T[];
17
+ entryName: string;
18
+ }) => T[];
1
19
  export declare function injectBeforeHydrationEntryScript(template: string, scripts: string, entryName?: string): string;
20
+ export declare function replaceChunkJsPlaceholder(template: string, scripts: string, entryName?: string, placeholder?: string): string;
21
+ export declare function createRouteHydrationScriptTags(runtimeContext: TInternalRuntimeContext, entryName: string, options?: {
22
+ nonce?: string;
23
+ template?: string;
24
+ }): string;
25
+ export {};
@@ -1,19 +1,13 @@
1
- import { type Chunk } from '@loadable/server';
2
1
  import type { ReactElement } from 'react';
3
2
  import type { TInternalRuntimeContext } from '../../context';
4
3
  import type { ChunkSet, Collector } from './types';
4
+ export { orderHydrationScriptChunks } from '../scriptOrder';
5
5
  declare module '@loadable/server' {
6
6
  interface ChunkExtractor {
7
7
  chunks: string[];
8
8
  getChunkAssets: (chunks: string[]) => Chunk[];
9
9
  }
10
10
  }
11
- export declare const orderHydrationScriptChunks: ({ asyncEntryChunks, collectedChunks, matchedRouteChunks, entryName, }: {
12
- asyncEntryChunks: Chunk[];
13
- collectedChunks: Chunk[];
14
- matchedRouteChunks: Chunk[];
15
- entryName: string;
16
- }) => Chunk[];
17
11
  export interface LoadableCollectorOptions {
18
12
  nonce?: string;
19
13
  stats?: Record<string, any>;
@@ -24,6 +24,7 @@ export declare function getSSRConfigByEntry(entryName: string, ssr?: ServerUserC
24
24
  inlineScript?: boolean;
25
25
  disablePrerender?: boolean;
26
26
  unsafeHeaders?: string[];
27
+ loaderFailureMode?: 'clientRender' | 'errorBoundary';
27
28
  moduleFederationAppSSR?: boolean;
28
29
  };
29
30
  export declare function getSSRMode(ssrConfig?: SSRConfig): 'string' | 'stream' | false;
@@ -1,7 +1,88 @@
1
- export type * from '@tanstack/react-router';
2
- export { Asset, Await, Block, CatchBoundary, CatchNotFound, ClientOnly, cleanPath, composeRewrites, createBrowserHistory, createControlledPromise, createFileRoute, createHashHistory, createHistory, createLazyFileRoute, createLazyRoute, createLink, createMemoryHistory, createRootRoute, createRootRouteWithContext, createRoute, createRouteMask, createRouter, createRouterConfig, createSerializationAdapter, DEFAULT_PROTOCOL_ALLOWLIST, DefaultGlobalNotFound, deepEqual, defaultParseSearch, defaultStringifySearch, defer, ErrorComponent, FileRoute, FileRouteLoader, functionalUpdate, getRouteApi, HeadContent, interpolatePath, isMatch, isNotFound, isPlainArray, isPlainObject, isRedirect, joinPaths, LazyRoute, lazyFn, lazyRouteComponent, linkOptions, Match, Matches, MatchRoute, Navigate, NotFoundRoute, notFound, parseSearchWith, RootRoute, Route, RouteApi, Router, RouterContextProvider, RouterProvider, reactUse, redirect, replaceEqualDeep, resolvePath, retainSearchParams, rootRouteId, rootRouteWithContext, ScriptOnce, Scripts, ScrollRestoration, SearchParamError, stringifySearchWith, stripSearchParams, trimPath, trimPathLeft, trimPathRight, useAwaited, useBlocker, useCanGoBack, useChildMatches, useElementScrollRestoration, useHydrated, useLayoutEffect, useLinkProps, useLoaderData, useLoaderDeps, useLocation, useMatch, useMatches, useMatchRoute, useNavigate, useParams, useParentMatches, useRouteContext, useRouter, useRouterState, useSearch, useTags, } from '@tanstack/react-router';
3
- export type { Fetcher, FetcherState, FetcherSubmitOptions, FormProps, SubmitOptions, } from '../router/runtime/tanstack/dataMutation';
4
- export { Form, RouteActionResponseError, useFetcher, } from '../router/runtime/tanstack/dataMutation';
5
- export { Outlet } from '../router/runtime/tanstack/outlet';
6
- export type { LinkProps, NavLinkProps, PrefetchBehavior, } from '../router/runtime/tanstack/prefetchLink';
7
- export { Link, NavLink } from '../router/runtime/tanstack/prefetchLink';
1
+ /**
2
+ * @deprecated Legacy alias kept so the published `@modern-js/runtime/tanstack-router`
3
+ * subpath keeps resolving. Use `@modern-js/plugin-tanstack/runtime` instead.
4
+ *
5
+ * Only the Modern.js specific `Link`, `NavLink`, `Outlet`, `Form`,
6
+ * `useFetcher` and `RouteActionResponseError` bindings are still exported from
7
+ * here for compatibility. They are thin delegates: the real implementations
8
+ * live in `@modern-js/plugin-tanstack` and are looked up at use time through a
9
+ * `Symbol.for` slot that '@modern-js/plugin-tanstack/runtime' populates on
10
+ * import. (`@modern-js/runtime` cannot import `@modern-js/plugin-tanstack`
11
+ * directly — the package dependency points the other way.)
12
+ */
13
+ import type React from 'react';
14
+ export type PrefetchBehavior = 'intent' | 'render' | 'viewport' | 'none';
15
+ export type LinkProps<_TRouter = unknown, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.'> = Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> & {
16
+ prefetch?: PrefetchBehavior;
17
+ from?: TFrom;
18
+ mask?: {
19
+ from?: TMaskFrom;
20
+ to?: TMaskTo;
21
+ };
22
+ params?: unknown;
23
+ search?: unknown;
24
+ to?: TTo;
25
+ };
26
+ export type NavLinkProps<TRouter = unknown, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.'> = LinkProps<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>;
27
+ type LinkComponent = <TRouter = unknown, const TFrom extends string = string, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = ''>(props: LinkProps<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => React.ReactElement;
28
+ export type SubmitOptions = {
29
+ action?: string;
30
+ method?: string;
31
+ encType?: string;
32
+ };
33
+ export type FetcherState = 'idle' | 'submitting' | 'loading';
34
+ export type FetcherSubmitOptions = SubmitOptions;
35
+ export type FormProps = Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit' | 'action'> & {
36
+ action?: string;
37
+ onSubmit?: React.FormEventHandler<HTMLFormElement>;
38
+ reloadDocument?: boolean;
39
+ };
40
+ type SubmitTarget = HTMLFormElement | FormData | URLSearchParams | Record<string, string | number | boolean | null | undefined>;
41
+ export type Fetcher = {
42
+ state: FetcherState;
43
+ data: unknown;
44
+ error: unknown;
45
+ Form: React.ComponentType<FormProps>;
46
+ submit: (target: SubmitTarget, options?: FetcherSubmitOptions) => Promise<void>;
47
+ };
48
+ export interface RouteActionResponseError<TData = unknown> extends Error {
49
+ readonly response: Response;
50
+ readonly data: TData;
51
+ }
52
+ interface RouteActionResponseErrorConstructor {
53
+ new <TData = unknown>(response: Response, data: TData): RouteActionResponseError<TData>;
54
+ readonly prototype: RouteActionResponseError<unknown>;
55
+ }
56
+ /**
57
+ * @deprecated Import `Link` from `@modern-js/plugin-tanstack/runtime` instead.
58
+ */
59
+ export declare const Link: LinkComponent;
60
+ /**
61
+ * @deprecated Import `NavLink` from `@modern-js/plugin-tanstack/runtime` instead.
62
+ */
63
+ export declare const NavLink: LinkComponent;
64
+ /**
65
+ * @deprecated Import `Outlet` from `@modern-js/plugin-tanstack/runtime` instead.
66
+ */
67
+ export declare const Outlet: React.ComponentType;
68
+ /**
69
+ * @deprecated Import `Form` from `@modern-js/plugin-tanstack/runtime` instead.
70
+ */
71
+ export declare const Form: React.ComponentType<FormProps>;
72
+ /**
73
+ * @deprecated Import `useFetcher` from `@modern-js/plugin-tanstack/runtime`
74
+ * instead.
75
+ */
76
+ export declare function useFetcher(): Fetcher;
77
+ /**
78
+ * @deprecated Import `RouteActionResponseError` from
79
+ * `@modern-js/plugin-tanstack/runtime` instead.
80
+ *
81
+ * Delegates to the real class registered by '@modern-js/plugin-tanstack/runtime'
82
+ * so that `instanceof` checks observe the same class identity. Before the
83
+ * registration happens no instance can exist, so `instanceof` is gracefully
84
+ * `false`; constructing without @modern-js/plugin-tanstack installed throws an
85
+ * actionable error.
86
+ */
87
+ export declare const RouteActionResponseError: RouteActionResponseErrorConstructor;
88
+ export {};
@@ -0,0 +1,65 @@
1
+ export declare const MODULE_FEDERATION_FALLBACK_SIGNAL_EVENT = "modernjs:mf-runtime-fallback";
2
+ export declare const MODULE_FEDERATION_RECOVERY_SIGNAL_EVENT = "modernjs:mf-runtime-recovery";
3
+ export declare const DEFAULT_RUNTIME_FALLBACK_SIGNAL_ENDPOINT = "/_modern/contract-gates/runtime-fallback";
4
+ export declare const DEFAULT_RUNTIME_FALLBACK_SIGNAL_AUTH_HEADER = "x-modernjs-runtime-signal-token";
5
+ export type ModuleFederationFallbackClassification = 'timeout' | 'network' | 'contract' | 'version-skew' | 'remote-unavailable';
6
+ export type ModuleFederationFallbackStatus = 'degraded' | 'failed' | 'recovered';
7
+ export type ModuleFederationFallbackTelemetryInput = {
8
+ appName: string;
9
+ classification: ModuleFederationFallbackClassification;
10
+ entry?: string;
11
+ error?: unknown;
12
+ eventName?: string;
13
+ exportName?: string;
14
+ metadata?: Record<string, unknown>;
15
+ phase: 'discovery' | 'load' | 'mount' | 'hydrate' | 'recover';
16
+ remote: string;
17
+ runtimeDigest?: string;
18
+ status?: ModuleFederationFallbackStatus;
19
+ };
20
+ export type ModuleFederationFallbackTelemetryPayload = {
21
+ appName: string;
22
+ entry?: string;
23
+ eventName: string;
24
+ phase: ModuleFederationFallbackTelemetryInput['phase'];
25
+ reason: ModuleFederationFallbackClassification;
26
+ runtimeDigest?: string;
27
+ schemaVersion: 1;
28
+ metadata: {
29
+ classification: ModuleFederationFallbackClassification;
30
+ errorMessage?: string;
31
+ errorName?: string;
32
+ exportName?: string;
33
+ remote: string;
34
+ runtimeDigest?: string;
35
+ status: ModuleFederationFallbackStatus;
36
+ } & Record<string, unknown>;
37
+ };
38
+ export type ModuleFederationFallbackTelemetryEmitOptions = {
39
+ authHeaderName?: string;
40
+ authToken?: string;
41
+ endpoint?: string;
42
+ fetchImpl?: typeof fetch;
43
+ postSignal?: boolean;
44
+ };
45
+ export type ModuleFederationFallbackTelemetryEmitResult = {
46
+ dispatched: boolean;
47
+ posted: boolean;
48
+ postStatus?: number;
49
+ };
50
+ export declare class ModuleFederationRemoteLoadTimeoutError extends Error {
51
+ constructor(remote: string, timeoutMs: number);
52
+ }
53
+ export declare class ModuleFederationRemoteLoadError extends Error {
54
+ readonly remote: string;
55
+ readonly attempts: number;
56
+ readonly causeError: Error;
57
+ constructor(remote: string, attempts: number, causeError: Error);
58
+ }
59
+ export declare class ModuleFederationRemoteComponentContractError extends Error {
60
+ constructor(remote: string, exportName: string);
61
+ }
62
+ export declare function classifyModuleFederationFallback(error: unknown): ModuleFederationFallbackClassification;
63
+ export declare function createModuleFederationFallbackTelemetry(input: ModuleFederationFallbackTelemetryInput): ModuleFederationFallbackTelemetryPayload;
64
+ export declare function toModuleFederationFallbackAttributes(payload: ModuleFederationFallbackTelemetryPayload): Record<string, string>;
65
+ export declare function emitModuleFederationFallbackTelemetry(input: ModuleFederationFallbackTelemetryInput, options?: ModuleFederationFallbackTelemetryEmitOptions): Promise<ModuleFederationFallbackTelemetryEmitResult>;
@@ -5,8 +5,6 @@ import type { Entrypoint, NestedRouteForCli, PageRoute } from '@modern-js/types'
5
5
  * Generate routing information for a single entry point (can be reused by the routes inspect feature)
6
6
  */
7
7
  export declare function generateRoutesForEntry(entrypoint: Entrypoint, appContext: AppToolsContext): Promise<NestedRouteForCli[]>;
8
- export declare const generateCode: (appContext: AppToolsContext, config: AppNormalizedConfig, entrypoints: Entrypoint[], api: CLIPluginAPI<AppTools>, options?: {
9
- enableTanstackTypes?: boolean;
10
- }) => Promise<Record<string, (NestedRouteForCli | PageRoute)[]>>;
8
+ export declare const generateCode: (appContext: AppToolsContext, config: AppNormalizedConfig, entrypoints: Entrypoint[], api: CLIPluginAPI<AppTools>) => Promise<Record<string, (NestedRouteForCli | PageRoute)[]>>;
11
9
  export declare function generatorRegisterCode(internalDirectory: string, entryName: string, code: string): void;
12
10
  export declare function generatorServerRegisterCode(internalDirectory: string, entryName: string, code: string): void;
@@ -10,9 +10,6 @@ type RegenerateRoutesFn = (params: {
10
10
  }) => Promise<void>;
11
11
  type HandleGeneratorEntryCodeOptions = {
12
12
  entrypointsKey?: string;
13
- generateCodeOptions?: {
14
- enableTanstackTypes?: boolean;
15
- };
16
13
  };
17
14
  type HandleFileChangeOptions = {
18
15
  includeEntry?: (entrypoint: Entrypoint) => boolean;
@@ -7,5 +7,6 @@ export declare const routerPlugin: (userConfig?: Partial<RouterConfig>) => Runti
7
7
  export default routerPlugin;
8
8
  export type { RouterExtendsHooks } from './hooks';
9
9
  export { modifyRoutes } from './plugin';
10
+ export { type RouterProviderFactory, type RouterProviderPlugin, registerRouterProvider, resolveRouterProvider, } from './provider';
10
11
  export { renderRoutes } from './utils';
11
12
  export type { RouterConfig, SingleRouteConfig };
@@ -1,6 +1,8 @@
1
1
  import type { RouteObject } from '@modern-js/runtime-utils/router';
2
2
  import type { TInternalRuntimeContext } from '../../core/context/runtime';
3
3
  import type { InternalRouterRuntimeState, InternalRouterServerSnapshot, RouterFramework, RouterRouteMatchSnapshot, RouterServerPrepareResult } from './types';
4
+ export declare function getRouterRuntimeState(runtimeContext: object): InternalRouterRuntimeState | undefined;
5
+ export declare function getRouterServerSnapshot(runtimeContext: object): InternalRouterServerSnapshot | undefined;
4
6
  export type RouterLifecyclePhase = 'ssr-prepare' | 'client-create' | 'hydrate';
5
7
  export type RouterLifecycleContext = {
6
8
  framework: RouterFramework;
@@ -1,5 +1,5 @@
1
1
  import { type RuntimePlugin } from '../../core';
2
- import { type RouterExtendsHooks } from './hooks';
2
+ import type { RouterExtendsHooks } from './hooks';
3
3
  import type { RouterConfig, Routes } from './types';
4
4
  export declare let finalRouteConfig: RouterConfig['routesConfig'];
5
5
  export declare let beforeCreateRouter: boolean;
@@ -1,5 +1,5 @@
1
1
  import type { RuntimePlugin } from '../../core';
2
- import { type RouterExtendsHooks } from './hooks';
2
+ import type { RouterExtendsHooks } from './hooks';
3
3
  import type { RouterConfig } from './types';
4
4
  export declare const routerPlugin: (userConfig?: Partial<RouterConfig>) => RuntimePlugin<{
5
5
  extendHooks: RouterExtendsHooks;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Fork-owned router-provider registry.
3
+ *
4
+ * `runtime.router.framework` selects the router implementation used by the
5
+ * built-in router runtime plugin (`@modern-js/runtime/router/internal`).
6
+ * Instead of hardcoding every implementation there, providers register
7
+ * themselves here:
8
+ *
9
+ * - `react-router` registers itself as the default provider when the
10
+ * built-in router plugin module is loaded.
11
+ * - `@modern-js/plugin-tanstack` registers the `tanstack` provider when its
12
+ * runtime entry is imported.
13
+ */
14
+ import type { RuntimePlugin } from '../../core';
15
+ import type { RouterExtendsHooks } from './hooks';
16
+ import type { RouterConfig } from './types';
17
+ /**
18
+ * The single declaration source for the router hook registry. Every router
19
+ * provider (built-in react-router, @modern-js/plugin-tanstack, ...) and the
20
+ * framework-resolving wrapper plugin register exactly these instances, so the
21
+ * hook set is defined once and providers cannot drift apart.
22
+ */
23
+ export declare const routerProviderRegistryHooks: RouterExtendsHooks;
24
+ export type RouterProviderPlugin = RuntimePlugin<{
25
+ extendHooks: RouterExtendsHooks;
26
+ }>;
27
+ /**
28
+ * Guard for the wrapper plugin (`router/internal`): a resolved provider is
29
+ * only invoked through `setup`, so registry hooks outside the canonical
30
+ * router hook contract cannot be registered for it. Returns the offending
31
+ * hook names and warns once so they are surfaced instead of silently dropped.
32
+ */
33
+ export declare function reportUnsupportedProviderRegistryHooks(providerPlugin: {
34
+ name?: string;
35
+ registryHooks?: Record<string, unknown>;
36
+ }): string[];
37
+ export type RouterProviderFactory = (userConfig: Partial<RouterConfig>) => RouterProviderPlugin;
38
+ export declare function registerRouterProvider(name: string, factory: RouterProviderFactory, options?: {
39
+ isDefault?: boolean;
40
+ }): void;
41
+ export declare function resolveRouterProvider(framework?: RouterConfig['framework'], options?: {
42
+ /**
43
+ * The resolving module's own copy of a provider. The registry is
44
+ * realm-global with keep-first semantics, so in a page hosting several
45
+ * independent Modern.js apps (Module Federation app-level remotes) the
46
+ * first-loaded copy of a provider would otherwise win for *every* app —
47
+ * a foreign factory closes over the foreign app's global context (routes,
48
+ * App, runtime hooks) and renders the wrong app inside the resolving one.
49
+ * When the resolved name matches `localDefault.name`, the local factory
50
+ * is returned instead of whatever copy registered first.
51
+ */
52
+ localDefault?: {
53
+ name: string;
54
+ factory: RouterProviderFactory;
55
+ };
56
+ }): RouterProviderFactory;
57
+ /**
58
+ * Test-only escape hatch: the registry lives on `globalThis`, so unit tests
59
+ * need a way to restore a pristine state between cases.
60
+ */
61
+ export declare function unsafe_resetRouterProvidersForTesting(): void;
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "modern",
18
18
  "modern.js"
19
19
  ],
20
- "version": "3.2.0-ultramodern.120",
20
+ "version": "3.2.0-ultramodern.121",
21
21
  "engines": {
22
22
  "node": ">=20"
23
23
  },
@@ -67,6 +67,10 @@
67
67
  "types": "./dist/types/boundary-debugger/index.d.ts",
68
68
  "default": "./dist/esm/boundary-debugger/index.mjs"
69
69
  },
70
+ "./module-federation": {
71
+ "types": "./dist/types/module-federation/index.d.ts",
72
+ "default": "./dist/esm/module-federation/index.mjs"
73
+ },
70
74
  "./ssr": {
71
75
  "types": "./dist/types/core/server/index.d.ts",
72
76
  "default": "./dist/esm/core/server/index.mjs"
@@ -175,6 +179,9 @@
175
179
  "boundary-debugger": [
176
180
  "./dist/types/boundary-debugger/index.d.ts"
177
181
  ],
182
+ "module-federation": [
183
+ "./dist/types/module-federation/index.d.ts"
184
+ ],
178
185
  "document": [
179
186
  "./dist/types/document/index.d.ts"
180
187
  ],
@@ -222,8 +229,6 @@
222
229
  "@swc/core": "1.15.41",
223
230
  "@swc/helpers": "^0.5.23",
224
231
  "@swc/plugin-loadable-components": "^11.12.0",
225
- "@tanstack/react-router": "1.170.15",
226
- "@tanstack/router-core": "1.171.13",
227
232
  "@types/loadable__component": "^5.13.10",
228
233
  "cookie": "1.1.1",
229
234
  "entities": "^8.0.0",
@@ -233,12 +238,12 @@
233
238
  "isbot": "5.1.42",
234
239
  "react-helmet-async": "3.0.0",
235
240
  "react-is": "^19.2.7",
236
- "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.2.0-ultramodern.120",
237
- "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.2.0-ultramodern.120",
238
- "@modern-js/render": "npm:@bleedingdev/modern-js-render@3.2.0-ultramodern.120",
239
- "@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.2.0-ultramodern.120",
240
- "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.2.0-ultramodern.120",
241
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.2.0-ultramodern.120"
241
+ "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.2.0-ultramodern.121",
242
+ "@modern-js/render": "npm:@bleedingdev/modern-js-render@3.2.0-ultramodern.121",
243
+ "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.2.0-ultramodern.121",
244
+ "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.2.0-ultramodern.121",
245
+ "@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.2.0-ultramodern.121",
246
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.2.0-ultramodern.121"
242
247
  },
243
248
  "peerDependencies": {
244
249
  "react": "^19.2.7",
@@ -248,7 +253,6 @@
248
253
  "@remix-run/web-fetch": "^4.4.2",
249
254
  "@rsbuild/core": "2.0.11",
250
255
  "@rslib/core": "0.22.0",
251
- "@tanstack/history": "1.162.0",
252
256
  "@testing-library/dom": "^10.4.1",
253
257
  "@testing-library/react": "^16.3.2",
254
258
  "@types/invariant": "^2.2.37",
@@ -257,7 +261,7 @@
257
261
  "@typescript/native-preview": "7.0.0-dev.20260610.1",
258
262
  "react": "^19.2.7",
259
263
  "react-dom": "^19.2.7",
260
- "@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.2.0-ultramodern.120",
264
+ "@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.2.0-ultramodern.121",
261
265
  "@scripts/rstest-config": "2.66.0"
262
266
  },
263
267
  "sideEffects": false,
package/rstest.config.mts CHANGED
@@ -23,9 +23,8 @@ export default {
23
23
  name: 'plugin-runtime-node',
24
24
  testEnvironment: 'node',
25
25
  exclude: [
26
+ 'tests/boundary-debugger/client.test.tsx',
26
27
  'tests/router/prefetch.test.tsx',
27
- 'tests/router/tanstackPrefetchLink.test.tsx',
28
- 'tests/router/dataMutation.test.tsx',
29
28
  ],
30
29
  extends: commonConfig,
31
30
  plugins: [
@@ -51,9 +50,8 @@ export default {
51
50
  name: 'plugin-runtime-client',
52
51
  testEnvironment: 'happy-dom',
53
52
  include: [
53
+ 'tests/boundary-debugger/client.test.tsx',
54
54
  'tests/router/prefetch.test.tsx',
55
- 'tests/router/tanstackPrefetchLink.test.tsx',
56
- 'tests/router/dataMutation.test.tsx',
57
55
  ],
58
56
  extends: commonConfig,
59
57
  plugins: [