@bleedingdev/modern-js-runtime 3.5.0-ultramodern.98 → 3.8.1-ultramodern.1

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 (86) hide show
  1. package/dist/cjs/cli/index.js +1 -11
  2. package/dist/cjs/cli/ssr/index.js +1 -0
  3. package/dist/cjs/core/browser/hydrate.js +31 -27
  4. package/dist/cjs/core/browser/index.js +4 -15
  5. package/dist/cjs/core/react/wrapper.js +23 -28
  6. package/dist/cjs/core/server/requestResponse.js +5 -5
  7. package/dist/cjs/core/server/scriptOrder.js +1 -1
  8. package/dist/cjs/core/server/stream/beforeTemplate.worker.js +1 -10
  9. package/dist/cjs/core/server/string/index.js +3 -3
  10. package/dist/cjs/core/server/utils.js +3 -3
  11. package/dist/cjs/document/cli/index.js +5 -2
  12. package/dist/cjs/module-federation/distributed-ssr.js +13 -12
  13. package/dist/cjs/module-federation/last-known-good.js +1 -1
  14. package/dist/cjs/module-federation/manifest-recovery-runtime-plugin.js +27 -38
  15. package/dist/cjs/router/cli/code/index.js +16 -9
  16. package/dist/cjs/router/cli/code/templates.js +36 -27
  17. package/dist/cjs/router/cli/handler.js +7 -1
  18. package/dist/cjs/router/runtime/plugin.js +22 -17
  19. package/dist/cjs/router/runtime/plugin.node.js +11 -3
  20. package/dist/cjs/router/runtime/provider.js +2 -2
  21. package/dist/cjs/router/runtime/redirect.js +51 -0
  22. package/dist/cjs/router/runtime/routerHelper.js +4 -0
  23. package/dist/cjs/router/runtime/rsc-router.js +2 -13
  24. package/dist/cjs/router/runtime/utils.js +3 -2
  25. package/dist/esm/cli/index.mjs +2 -12
  26. package/dist/esm/cli/ssr/index.mjs +1 -0
  27. package/dist/esm/core/browser/hydrate.mjs +30 -22
  28. package/dist/esm/core/browser/index.mjs +5 -13
  29. package/dist/esm/core/react/wrapper.mjs +23 -28
  30. package/dist/esm/core/server/requestResponse.mjs +4 -4
  31. package/dist/esm/core/server/scriptOrder.mjs +1 -1
  32. package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +1 -10
  33. package/dist/esm/core/server/string/index.mjs +3 -3
  34. package/dist/esm/core/server/utils.mjs +1 -1
  35. package/dist/esm/document/cli/index.mjs +1 -1
  36. package/dist/esm/module-federation/distributed-ssr.mjs +13 -12
  37. package/dist/esm/module-federation/last-known-good.mjs +1 -1
  38. package/dist/esm/module-federation/manifest-recovery-runtime-plugin.mjs +22 -33
  39. package/dist/esm/router/cli/code/index.mjs +16 -9
  40. package/dist/esm/router/cli/code/templates.mjs +36 -27
  41. package/dist/esm/router/cli/handler.mjs +7 -1
  42. package/dist/esm/router/runtime/plugin.mjs +24 -19
  43. package/dist/esm/router/runtime/plugin.node.mjs +12 -4
  44. package/dist/esm/router/runtime/provider.mjs +2 -2
  45. package/dist/esm/router/runtime/redirect.mjs +13 -0
  46. package/dist/esm/router/runtime/routerHelper.mjs +2 -1
  47. package/dist/esm/router/runtime/rsc-router.mjs +2 -13
  48. package/dist/esm/router/runtime/utils.mjs +2 -1
  49. package/dist/esm-node/cli/index.mjs +2 -12
  50. package/dist/esm-node/cli/ssr/index.mjs +1 -0
  51. package/dist/esm-node/core/browser/hydrate.mjs +30 -22
  52. package/dist/esm-node/core/browser/index.mjs +5 -13
  53. package/dist/esm-node/core/react/wrapper.mjs +23 -28
  54. package/dist/esm-node/core/server/requestResponse.mjs +4 -4
  55. package/dist/esm-node/core/server/scriptOrder.mjs +1 -1
  56. package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +1 -10
  57. package/dist/esm-node/core/server/string/index.mjs +3 -3
  58. package/dist/esm-node/core/server/utils.mjs +1 -1
  59. package/dist/esm-node/document/cli/index.mjs +1 -1
  60. package/dist/esm-node/module-federation/distributed-ssr.mjs +13 -12
  61. package/dist/esm-node/module-federation/last-known-good.mjs +1 -1
  62. package/dist/esm-node/module-federation/manifest-recovery-runtime-plugin.mjs +22 -33
  63. package/dist/esm-node/router/cli/code/index.mjs +16 -9
  64. package/dist/esm-node/router/cli/code/templates.mjs +36 -27
  65. package/dist/esm-node/router/cli/handler.mjs +7 -1
  66. package/dist/esm-node/router/runtime/plugin.mjs +24 -19
  67. package/dist/esm-node/router/runtime/plugin.node.mjs +12 -4
  68. package/dist/esm-node/router/runtime/provider.mjs +2 -2
  69. package/dist/esm-node/router/runtime/redirect.mjs +14 -0
  70. package/dist/esm-node/router/runtime/routerHelper.mjs +2 -1
  71. package/dist/esm-node/router/runtime/rsc-router.mjs +2 -13
  72. package/dist/esm-node/router/runtime/utils.mjs +2 -1
  73. package/dist/types/core/browser/hydrate.d.ts +0 -1
  74. package/dist/types/core/browser/index.d.ts +0 -1
  75. package/dist/types/core/server/utils.d.ts +1 -1
  76. package/dist/types/document/cli/index.d.ts +1 -0
  77. package/dist/types/module-federation/distributed-ssr.d.ts +3 -3
  78. package/dist/types/module-federation/manifest-recovery-runtime-plugin.d.ts +1 -1
  79. package/dist/types/router/cli/code/index.d.ts +6 -1
  80. package/dist/types/router/cli/code/templates.d.ts +8 -3
  81. package/dist/types/router/cli/handler.d.ts +4 -0
  82. package/dist/types/router/runtime/redirect.d.ts +1 -0
  83. package/dist/types/router/runtime/routerHelper.d.ts +7 -0
  84. package/dist/types/router/runtime/rsc-router.d.ts +1 -2
  85. package/package.json +15 -14
  86. package/rstest.config.mts +2 -0
@@ -23,11 +23,11 @@ export type DistributedSsrFragmentContext = {
23
23
  required: true;
24
24
  resolve?: (remote: string, expose: string, props: Record<string, unknown>) => DistributedSsrFragmentResult | PromiseLike<DistributedSsrFragmentResult>;
25
25
  };
26
- export type DistributedSsrBoundaryProps = {
26
+ export type DistributedSsrBoundaryProps<Props extends object = Record<string, unknown>> = {
27
27
  children: ReactNode;
28
28
  expose: string;
29
29
  fallback: ReactNode;
30
- fragmentProps?: Record<string, unknown>;
30
+ fragmentProps?: Props;
31
31
  remote: string;
32
32
  };
33
33
  export type CreateDistributedSsrComponentOptions<Props extends object> = {
@@ -49,7 +49,7 @@ export declare function useDistributedSsrFragmentProps<Props extends object>({ b
49
49
  * Node SSR has no distributed-fragment context and therefore renders the
50
50
  * child normally, preserving Module Federation's in-process SSR path.
51
51
  */
52
- export declare function DistributedSsrBoundary({ children, expose, fallback, fragmentProps, remote, }: DistributedSsrBoundaryProps): import("react").JSX.Element;
52
+ export declare function DistributedSsrBoundary<Props extends object = Record<string, unknown>>({ children, expose, fallback, fragmentProps, remote, }: DistributedSsrBoundaryProps<Props>): import("react").JSX.Element;
53
53
  /**
54
54
  * Defers creation of the native Module Federation component until React
55
55
  * actually renders that child. A workerd request with a verified distributed
@@ -20,6 +20,6 @@ export type ModuleFederationManifestRecoveryPluginOptions = {
20
20
  */
21
21
  export declare const createModuleFederationManifestRecoveryPlugin: (options?: ModuleFederationManifestRecoveryPluginOptions) => {
22
22
  name: string;
23
- errorLoadRemote(args: ErrorLoadRemoteArgs): Promise<any>;
23
+ errorLoadRemote(args: ErrorLoadRemoteArgs): Promise<unknown>;
24
24
  };
25
25
  export default createModuleFederationManifestRecoveryPlugin;
@@ -5,6 +5,11 @@ 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>) => Promise<Record<string, (NestedRouteForCli | PageRoute)[]>>;
8
+ export declare const generateCode: (appContext: AppToolsContext, config: AppNormalizedConfig, entrypoints: Entrypoint[], api: CLIPluginAPI<AppTools>, options?: {
9
+ hydrateRscClientRoutes?: boolean;
10
+ includeRouteServerLoadersInSsrEntry?: boolean;
11
+ isolateRouteDataInRscLayer?: boolean;
12
+ serverRoutesFileName?: string;
13
+ }) => Promise<Record<string, (NestedRouteForCli | PageRoute)[]>>;
9
14
  export declare function generatorRegisterCode(internalDirectory: string, entryName: string, code: string): void;
10
15
  export declare function generatorServerRegisterCode(internalDirectory: string, entryName: string, code: string): void;
@@ -3,7 +3,7 @@ import type { Entrypoint, NestedRouteForCli, PageRoute, RouteLegacy, SSRMode } f
3
3
  export declare const routesForServer: ({ routesForServerLoaderMatches, }: {
4
4
  routesForServerLoaderMatches: (NestedRouteForCli | PageRoute)[];
5
5
  }) => string;
6
- export declare const fileSystemRoutes: ({ metaName, routes, ssrMode, nestedRoutesEntry, entryName, internalDirectory, splitRouteChunks, isRscClientBundle, srcDirectory, internalSrcAlias, }: {
6
+ export declare const fileSystemRoutes: ({ metaName, routes, ssrMode, nestedRoutesEntry, entryName, internalDirectory, splitRouteChunks, isRscClientBundle, hydrateRscClientRoutes, isolateRouteDataInRscLayer, srcDirectory, internalSrcAlias, }: {
7
7
  metaName: string;
8
8
  routes: RouteLegacy[] | (NestedRouteForCli | PageRoute)[];
9
9
  ssrMode?: SSRMode;
@@ -12,11 +12,15 @@ export declare const fileSystemRoutes: ({ metaName, routes, ssrMode, nestedRoute
12
12
  internalDirectory: string;
13
13
  splitRouteChunks?: boolean;
14
14
  isRscClientBundle?: boolean;
15
+ hydrateRscClientRoutes?: boolean;
16
+ isolateRouteDataInRscLayer?: boolean;
15
17
  srcDirectory?: string;
16
18
  internalSrcAlias?: string;
17
19
  }) => Promise<string>;
18
- export declare function ssrLoaderCombinedModule(entrypoints: Entrypoint[], entrypoint: Entrypoint, config: AppNormalizedConfig, appContext: AppToolsContext): string | null;
19
- export declare const runtimeGlobalContext: ({ entryName, metaName, srcDirectory, nestedRoutesEntry, internalSrcAlias, globalApp, rscType, basename, }: {
20
+ export declare function ssrLoaderCombinedModule(entrypoints: Entrypoint[], entrypoint: Entrypoint, config: AppNormalizedConfig, appContext: AppToolsContext, options?: {
21
+ includeRouteServerLoaders?: boolean;
22
+ }): string | null;
23
+ export declare const runtimeGlobalContext: ({ entryName, metaName, srcDirectory, nestedRoutesEntry, internalSrcAlias, globalApp, rscType, routesImportPath, basename, }: {
20
24
  entryName: string;
21
25
  metaName: string;
22
26
  srcDirectory: string;
@@ -24,5 +28,6 @@ export declare const runtimeGlobalContext: ({ entryName, metaName, srcDirectory,
24
28
  internalSrcAlias: string;
25
29
  globalApp?: string | false;
26
30
  rscType?: 'server' | 'client' | false;
31
+ routesImportPath?: string;
27
32
  basename?: string;
28
33
  }) => Promise<string>;
@@ -10,6 +10,10 @@ type RegenerateRoutesFn = (params: {
10
10
  }) => Promise<void>;
11
11
  type HandleGeneratorEntryCodeOptions = {
12
12
  entrypointsKey?: string;
13
+ hydrateRscClientRoutes?: boolean;
14
+ includeRouteServerLoadersInSsrEntry?: boolean;
15
+ isolateRouteDataInRscLayer?: boolean;
16
+ serverRoutesFileName?: string;
13
17
  };
14
18
  type HandleFileChangeOptions = {
15
19
  includeEntry?: (entrypoint: Entrypoint) => boolean;
@@ -0,0 +1 @@
1
+ export declare const handleRSCRedirect: (headers: Headers, basename: string, status: number) => Response;
@@ -1,5 +1,12 @@
1
1
  import type { ShouldRevalidateFunction } from '@modern-js/runtime-utils/router';
2
2
  import type { ElementType } from 'react';
3
+ export type ModernRouteErrorResponse = {
4
+ status: number;
5
+ statusText: string;
6
+ internal: boolean;
7
+ data: unknown;
8
+ };
9
+ export declare const isRouteErrorResponse: (error: unknown) => error is ModernRouteErrorResponse;
3
10
  export declare const createShouldRevalidate: (routeId: string) => ShouldRevalidateFunction;
4
11
  export declare const resolveRouteComponent: (routeModule: unknown) => ElementType<Record<string, unknown>>;
5
12
  export declare const handleRouteModule: (routeModule: unknown, routeId: string) => unknown;
@@ -2,6 +2,7 @@ import { type RouteObject, type StaticHandlerContext } from '@modern-js/runtime-
2
2
  import React from 'react';
3
3
  import type { ServerPayload } from '../../core/context';
4
4
  import type { RouteManifest } from './types';
5
+ export { handleRSCRedirect } from './redirect';
5
6
  declare global {
6
7
  interface Window {
7
8
  _MODERNJS_ROUTE_MANIFEST?: RouteManifest;
@@ -9,7 +10,6 @@ declare global {
9
10
  }
10
11
  }
11
12
  export declare const createServerPayload: (routerContext: StaticHandlerContext, routes: RouteObject[]) => ServerPayload;
12
- export declare const handleRSCRedirect: (headers: Headers, basename: string, status: number) => Response;
13
13
  export declare const prepareRSCRoutes: (routes: RouteObject[]) => Promise<void>;
14
14
  export declare const createClientRouterFromPayload: (payload: ServerPayload, originalRoutes: RouteObject[], basename?: string) => import("react-router").DataRouter;
15
15
  interface RSCStaticRouterProps {
@@ -17,4 +17,3 @@ interface RSCStaticRouterProps {
17
17
  useJsonScript?: boolean;
18
18
  }
19
19
  export declare const RSCStaticRouter: React.FC<RSCStaticRouterProps>;
20
- export {};
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "modern",
18
18
  "modern.js"
19
19
  ],
20
- "version": "3.5.0-ultramodern.98",
20
+ "version": "3.8.1-ultramodern.1",
21
21
  "engines": {
22
22
  "node": ">=20"
23
23
  },
@@ -246,12 +246,12 @@
246
246
  "dependencies": {
247
247
  "@loadable/component": "5.16.7",
248
248
  "@loadable/server": "5.16.7",
249
- "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.5.0-ultramodern.98",
250
- "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.5.0-ultramodern.98",
251
- "@modern-js/render": "npm:@bleedingdev/modern-js-render@3.5.0-ultramodern.98",
252
- "@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.5.0-ultramodern.98",
253
- "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.5.0-ultramodern.98",
254
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.5.0-ultramodern.98",
249
+ "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.8.1-ultramodern.1",
250
+ "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.8.1-ultramodern.1",
251
+ "@modern-js/render": "npm:@bleedingdev/modern-js-render@3.8.1-ultramodern.1",
252
+ "@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.8.1-ultramodern.1",
253
+ "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.1-ultramodern.1",
254
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.1-ultramodern.1",
255
255
  "@swc/core": "1.15.43",
256
256
  "@swc/helpers": "^0.5.23",
257
257
  "@swc/plugin-loadable-components": "^11.15.0",
@@ -265,26 +265,27 @@
265
265
  "isbot": "5.2.0",
266
266
  "react-helmet": "^6.1.0",
267
267
  "react-helmet-async": "3.0.0",
268
- "react-is": "^19.2.7"
268
+ "react-is": "^19.2.8"
269
269
  },
270
270
  "peerDependencies": {
271
- "react": "^19.2.7",
272
- "react-dom": "^19.2.7"
271
+ "react": "^19.2.8",
272
+ "react-dom": "^19.2.8"
273
273
  },
274
274
  "devDependencies": {
275
- "@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.5.0-ultramodern.98",
275
+ "@modern-js/app-tools": "npm:@bleedingdev/modern-js-app-tools@3.8.1-ultramodern.1",
276
276
  "@remix-run/web-fetch": "^4.4.2",
277
277
  "@rsbuild/core": "2.1.5",
278
278
  "@rslib/core": "0.23.2",
279
279
  "@scripts/rstest-config": "2.66.0",
280
280
  "@testing-library/dom": "^10.4.1",
281
281
  "@testing-library/react": "^16.3.2",
282
+ "@types/cookie": "0.6.0",
282
283
  "@types/invariant": "^2.2.37",
283
284
  "@types/loadable__server": "5.12.11",
284
- "@types/node": "^26.1.1",
285
+ "@types/node": "^26.2.0",
285
286
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
286
- "react": "^19.2.7",
287
- "react-dom": "^19.2.7",
287
+ "react": "^19.2.8",
288
+ "react-dom": "^19.2.8",
288
289
  "ts-node": "^10.9.2",
289
290
  "typescript": "^7.0.2"
290
291
  },
package/rstest.config.mts CHANGED
@@ -24,6 +24,7 @@ export default {
24
24
  testEnvironment: 'node',
25
25
  exclude: [
26
26
  'tests/boundary-debugger/client.test.tsx',
27
+ 'tests/router/plugin.client.test.tsx',
27
28
  'tests/router/prefetch.test.tsx',
28
29
  ],
29
30
  extends: commonConfig,
@@ -51,6 +52,7 @@ export default {
51
52
  testEnvironment: 'happy-dom',
52
53
  include: [
53
54
  'tests/boundary-debugger/client.test.tsx',
55
+ 'tests/router/plugin.client.test.tsx',
54
56
  'tests/router/prefetch.test.tsx',
55
57
  ],
56
58
  extends: commonConfig,