@bleedingdev/modern-js-runtime 3.5.0-ultramodern.4 → 3.5.0-ultramodern.41

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 (84) hide show
  1. package/dist/cjs/boundary-debugger/index.js +13 -3
  2. package/dist/cjs/cli/ssr/index.js +1 -2
  3. package/dist/cjs/core/context/public.js +49 -0
  4. package/dist/cjs/core/context/runtime.js +6 -8
  5. package/dist/cjs/core/react/wrapper.js +57 -0
  6. package/dist/cjs/core/server/federatedCss.js +7 -3
  7. package/dist/cjs/core/server/requestHandler.js +15 -45
  8. package/dist/cjs/core/server/requestResponse.js +83 -0
  9. package/dist/cjs/core/server/routerCleanup.js +16 -6
  10. package/dist/cjs/core/server/scriptOrder.js +13 -10
  11. package/dist/cjs/core/server/string/loadable.js +3 -11
  12. package/dist/cjs/index.js +7 -6
  13. package/dist/cjs/router/cli/code/templates.js +3 -2
  14. package/dist/cjs/router/cli/nestedRoutesSpec.js +3 -1
  15. package/dist/cjs/router/runtime/hooks.js +7 -6
  16. package/dist/cjs/router/runtime/provider.js +1 -1
  17. package/dist/esm/boundary-debugger/index.mjs +13 -3
  18. package/dist/esm/cli/code.mjs +12 -12
  19. package/dist/esm/cli/ssr/index.mjs +1 -2
  20. package/dist/esm/core/context/public.mjs +5 -0
  21. package/dist/esm/core/context/runtime.mjs +4 -6
  22. package/dist/esm/core/react/wrapper.mjs +58 -1
  23. package/dist/esm/core/server/federatedCss.mjs +7 -3
  24. package/dist/esm/core/server/requestHandler.mjs +15 -45
  25. package/dist/esm/core/server/requestResponse.mjs +39 -0
  26. package/dist/esm/core/server/routerCleanup.mjs +11 -4
  27. package/dist/esm/core/server/scriptOrder.mjs +11 -8
  28. package/dist/esm/core/server/string/loadable.mjs +3 -8
  29. package/dist/esm/exports/loadable.mjs +3 -3
  30. package/dist/esm/index.mjs +2 -1
  31. package/dist/esm/router/cli/code/index.mjs +5 -5
  32. package/dist/esm/router/cli/code/templates.mjs +3 -2
  33. package/dist/esm/router/cli/handler.mjs +3 -3
  34. package/dist/esm/router/cli/nestedRoutesSpec.mjs +3 -1
  35. package/dist/esm/router/runtime/hooks.mjs +7 -6
  36. package/dist/esm/router/runtime/provider.mjs +1 -1
  37. package/dist/esm-node/boundary-debugger/index.mjs +13 -3
  38. package/dist/esm-node/cli/code.mjs +12 -12
  39. package/dist/esm-node/cli/ssr/index.mjs +1 -2
  40. package/dist/esm-node/core/context/public.mjs +6 -0
  41. package/dist/esm-node/core/context/runtime.mjs +4 -6
  42. package/dist/esm-node/core/react/wrapper.mjs +58 -1
  43. package/dist/esm-node/core/server/federatedCss.mjs +7 -3
  44. package/dist/esm-node/core/server/requestHandler.mjs +15 -45
  45. package/dist/esm-node/core/server/requestResponse.mjs +40 -0
  46. package/dist/esm-node/core/server/routerCleanup.mjs +11 -4
  47. package/dist/esm-node/core/server/scriptOrder.mjs +11 -8
  48. package/dist/esm-node/core/server/string/loadable.mjs +3 -8
  49. package/dist/esm-node/exports/loadable.mjs +3 -3
  50. package/dist/esm-node/index.mjs +2 -1
  51. package/dist/esm-node/router/cli/code/index.mjs +5 -5
  52. package/dist/esm-node/router/cli/code/templates.mjs +3 -2
  53. package/dist/esm-node/router/cli/handler.mjs +3 -3
  54. package/dist/esm-node/router/cli/nestedRoutesSpec.mjs +3 -1
  55. package/dist/esm-node/router/runtime/hooks.mjs +7 -6
  56. package/dist/esm-node/router/runtime/provider.mjs +1 -1
  57. package/dist/types/boundary-debugger/index.d.ts +1 -1
  58. package/dist/types/common.d.ts +8 -1
  59. package/dist/types/core/context/index.d.ts +25 -9
  60. package/dist/types/core/context/monitors/default.d.ts +10 -2
  61. package/dist/types/core/context/monitors/index.d.ts +1 -1
  62. package/dist/types/core/context/monitors/index.server.d.ts +2 -2
  63. package/dist/types/core/context/public.d.ts +27 -0
  64. package/dist/types/core/context/runtime.d.ts +12 -22
  65. package/dist/types/core/react/index.d.ts +1 -1
  66. package/dist/types/core/server/requestResponse.d.ts +15 -0
  67. package/dist/types/core/server/routerCleanup.d.ts +2 -1
  68. package/dist/types/core/server/scriptOrder.d.ts +1 -1
  69. package/dist/types/core/server/stream/shared.d.ts +2 -2
  70. package/dist/types/core/server/string/loadable.d.ts +0 -2
  71. package/dist/types/exports/head.d.ts +1 -1
  72. package/dist/types/index.d.ts +5 -5
  73. package/dist/types/internal.d.ts +0 -1
  74. package/dist/types/router/runtime/hooks.d.ts +10 -6
  75. package/dist/types/router/runtime/internal.d.ts +1 -1
  76. package/dist/types/router/runtime/plugin.d.ts +1 -1
  77. package/dist/types/router/runtime/plugin.node.d.ts +1 -1
  78. package/dist/types/router/runtime/provider.d.ts +1 -1
  79. package/dist/types/router/runtime/types.d.ts +27 -5
  80. package/package.json +17 -24
  81. package/dist/cjs/exports/tanstack-router.js +0 -83
  82. package/dist/esm/exports/tanstack-router.mjs +0 -30
  83. package/dist/esm-node/exports/tanstack-router.mjs +0 -31
  84. package/dist/types/exports/tanstack-router.d.ts +0 -88
@@ -7,7 +7,7 @@ import { resolveSSRMode } from "../../../cli/ssr/mode.mjs";
7
7
  import { FILE_SYSTEM_ROUTES_FILE_NAME } from "../constants.mjs";
8
8
  import { walk } from "./nestedRoutes.mjs";
9
9
  import { getServerCombinedModuleFile, getServerLoadersFile } from "./utils.mjs";
10
- import * as __rspack_external__templates_mjs_4da4c6c8 from "./templates.mjs";
10
+ import * as __rspack_external__templates_mjs_ab577925 from "./templates.mjs";
11
11
  async function generateRoutesForEntry(entrypoint, appContext) {
12
12
  const routes = [];
13
13
  if (entrypoint.nestedRoutesEntry) {
@@ -90,7 +90,7 @@ const generateCode = async (appContext, config, entrypoints, api)=>{
90
90
  }
91
91
  const { code } = await hooks.onBeforeGenerateRoutes.call({
92
92
  entrypoint,
93
- code: await __rspack_external__templates_mjs_4da4c6c8.fileSystemRoutes({
93
+ code: await __rspack_external__templates_mjs_ab577925.fileSystemRoutes({
94
94
  metaName,
95
95
  routes: routes,
96
96
  ssrMode: isUseRsc(config) ? 'stream' : ssrMode,
@@ -107,12 +107,12 @@ const generateCode = async (appContext, config, entrypoints, api)=>{
107
107
  const routesServerFile = getServerLoadersFile(internalDirectory, entryName);
108
108
  const filtedRoutesForServer = filterRoutesForServer(routes);
109
109
  const routesForServerLoaderMatches = filterRoutesLoader(routes);
110
- const code = __rspack_external__templates_mjs_4da4c6c8.routesForServer({
110
+ const code = __rspack_external__templates_mjs_ab577925.routesForServer({
111
111
  routesForServerLoaderMatches
112
112
  });
113
113
  await fs.ensureFile(routesServerFile);
114
114
  await fs.writeFile(routesServerFile, code);
115
- const serverRoutesCode = await __rspack_external__templates_mjs_4da4c6c8.fileSystemRoutes({
115
+ const serverRoutesCode = await __rspack_external__templates_mjs_ab577925.fileSystemRoutes({
116
116
  metaName,
117
117
  routes: filtedRoutesForServer,
118
118
  ssrMode,
@@ -126,7 +126,7 @@ const generateCode = async (appContext, config, entrypoints, api)=>{
126
126
  });
127
127
  await fs.outputFile(path.resolve(internalDirectory, `./${entryName}/routes.server.js`), serverRoutesCode, 'utf8');
128
128
  }
129
- const serverLoaderCombined = __rspack_external__templates_mjs_4da4c6c8.ssrLoaderCombinedModule(entrypoints, entrypoint, config, appContext);
129
+ const serverLoaderCombined = __rspack_external__templates_mjs_ab577925.ssrLoaderCombinedModule(entrypoints, entrypoint, config, appContext);
130
130
  if (serverLoaderCombined) {
131
131
  const serverLoaderFile = getServerCombinedModuleFile(internalDirectory, entryName);
132
132
  await fs.outputFile(serverLoaderFile, serverLoaderCombined);
@@ -184,7 +184,8 @@ const fileSystemRoutes = async ({ metaName, routes, ssrMode, nestedRoutesEntry,
184
184
  component = `component_${components.length - 1}`;
185
185
  }
186
186
  const isClientComponent = 'nested' === route.type && Boolean(route._component) && Boolean(srcDirectory) && Boolean(internalSrcAlias) && await hasUseClientDirective(route._component, srcDirectory, internalSrcAlias);
187
- const shouldIncludeClientBundle = !isRscClientBundle || isClientComponent;
187
+ const shouldHydrateRscRoute = isRscClientBundle && !isClientComponent && !route.loader && !route.data;
188
+ const shouldIncludeClientBundle = !isRscClientBundle || isClientComponent || shouldHydrateRscRoute;
188
189
  const finalRoute = {
189
190
  ...route,
190
191
  loading,
@@ -287,7 +288,7 @@ const fileSystemRoutes = async ({ metaName, routes, ssrMode, nestedRoutesEntry,
287
288
  ${importLazyCode}
288
289
  ${!isRscClientBundle ? importComponentsCode : ''}
289
290
  ${importRuntimeRouterCode}
290
- ${!isRscClientBundle ? rootLayoutCode : ''}
291
+ ${rootLayoutCode}
291
292
  ${importLoadingCode}
292
293
  ${importErrorComponentsCode}
293
294
  ${importLoadersCode}
@@ -4,7 +4,7 @@ import { cloneDeep } from "@modern-js/utils/lodash";
4
4
  import path from "path";
5
5
  import { isPageComponentFile } from "./code/utils.mjs";
6
6
  import { modifyEntrypoints } from "./entry.mjs";
7
- import * as __rspack_external__code_templates_mjs_5e908598 from "./code/templates.mjs";
7
+ import * as __rspack_external__code_templates_mjs_f6c22489 from "./code/templates.mjs";
8
8
  const DEFAULT_ENTRYPOINTS_KEY = '__default_router_entries__';
9
9
  const originEntrypointsByKey = new Map();
10
10
  async function handleModifyEntrypoints(entrypoints, routesDir, options = {}) {
@@ -26,7 +26,7 @@ async function handleGeneratorEntryCode(api, entrypoints, options = {}) {
26
26
  if (entrypoint.nestedRoutesEntry || entrypoint.pageRoutesEntry) {
27
27
  const route = appContext.serverRoutes.find((r)=>r.entryName === entrypoint.entryName);
28
28
  const basename = route?.urlPath || '/';
29
- generatorRegisterCode(internalDirectory, entrypoint.entryName, await __rspack_external__code_templates_mjs_5e908598.runtimeGlobalContext({
29
+ generatorRegisterCode(internalDirectory, entrypoint.entryName, await __rspack_external__code_templates_mjs_f6c22489.runtimeGlobalContext({
30
30
  entryName: entrypoint.entryName,
31
31
  metaName: appContext.metaName,
32
32
  srcDirectory: appContext.srcDirectory,
@@ -36,7 +36,7 @@ async function handleGeneratorEntryCode(api, entrypoints, options = {}) {
36
36
  rscType: enableRsc ? 'client' : void 0,
37
37
  basename
38
38
  }));
39
- if (enableRsc) generatorServerRegisterCode(internalDirectory, entrypoint.entryName, await __rspack_external__code_templates_mjs_5e908598.runtimeGlobalContext({
39
+ if (enableRsc) generatorServerRegisterCode(internalDirectory, entrypoint.entryName, await __rspack_external__code_templates_mjs_f6c22489.runtimeGlobalContext({
40
40
  entryName: entrypoint.entryName,
41
41
  metaName: appContext.metaName,
42
42
  srcDirectory: appContext.srcDirectory,
@@ -2,6 +2,7 @@ import "node:module";
2
2
  import node_path from "node:path";
3
3
  import { setTimeout as promises_setTimeout } from "node:timers/promises";
4
4
  import { fs } from "@modern-js/utils";
5
+ import { cloneDeep } from "@modern-js/utils/lodash";
5
6
  const lockPollIntervalMs = 25;
6
7
  const staleLockAgeMs = 120000;
7
8
  const pendingUpdates = new Map();
@@ -44,6 +45,7 @@ async function writeJSONAtomically(filePath, value) {
44
45
  }
45
46
  async function updateNestedRoutesSpec(specPath, nextRoutes) {
46
47
  const resolvedSpecPath = node_path.resolve(specPath);
48
+ const nextRoutesSnapshot = cloneDeep(nextRoutes);
47
49
  const previousUpdate = pendingUpdates.get(resolvedSpecPath) ?? Promise.resolve();
48
50
  const currentUpdate = previousUpdate.catch(()=>void 0).then(async ()=>{
49
51
  const releaseLock = await acquireSpecLock(resolvedSpecPath);
@@ -51,7 +53,7 @@ async function updateNestedRoutesSpec(specPath, nextRoutes) {
51
53
  const existingRoutes = await fs.pathExists(resolvedSpecPath) ? await fs.readJSON(resolvedSpecPath) : {};
52
54
  await writeJSONAtomically(resolvedSpecPath, {
53
55
  ...existingRoutes,
54
- ...nextRoutes
56
+ ...nextRoutesSnapshot
55
57
  });
56
58
  } finally{
57
59
  await releaseLock();
@@ -1,9 +1,10 @@
1
1
  import "node:module";
2
2
  import { createSyncHook } from "@modern-js/plugin";
3
- const modifyRoutes = createSyncHook();
4
- const onBeforeCreateRoutes = createSyncHook();
5
- const onBeforeCreateRouter = createSyncHook();
6
- const onAfterCreateRouter = createSyncHook();
7
- const onBeforeHydrateRouter = createSyncHook();
8
- const onAfterHydrateRouter = createSyncHook();
3
+ const createRouterSyncHook = ()=>createSyncHook();
4
+ const modifyRoutes = createRouterSyncHook();
5
+ const onBeforeCreateRoutes = createRouterSyncHook();
6
+ const onBeforeCreateRouter = createRouterSyncHook();
7
+ const onAfterCreateRouter = createRouterSyncHook();
8
+ const onBeforeHydrateRouter = createRouterSyncHook();
9
+ const onAfterHydrateRouter = createRouterSyncHook();
9
10
  export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter };
@@ -41,7 +41,7 @@ function registerRouterProvider(name, factory, options = {}) {
41
41
  }
42
42
  function resolveRouterProvider(framework, options = {}) {
43
43
  const registry = getRegistry();
44
- const name = framework || registry.defaultProvider || options.localDefault?.name;
44
+ const name = framework || options.localDefault?.name || registry.defaultProvider;
45
45
  if (void 0 === name) throw new Error('[@modern-js/runtime] No default router provider is registered. This is a bug in the runtime setup.');
46
46
  if (void 0 !== options.localDefault && name === options.localDefault.name) return options.localDefault.factory;
47
47
  const factory = registry.providers.get(name);
@@ -1,4 +1,4 @@
1
- import type { RuntimePlugin } from '../core';
1
+ import type { RuntimePlugin } from '../common';
2
2
  export type BoundaryDebugEntry = {
3
3
  appId: string;
4
4
  color?: string;
@@ -1,5 +1,12 @@
1
- import type { RuntimePlugin } from './core/plugin';
2
1
  export declare const isBrowser: () => boolean;
2
+ export type RuntimePlugin<Extends = unknown> = {
3
+ name?: string;
4
+ registryHooks?: Extends extends {
5
+ extendHooks: infer Hooks;
6
+ } ? Hooks : Record<string, unknown>;
7
+ setup?: (...args: any[]) => unknown;
8
+ [key: string]: unknown;
9
+ };
3
10
  export interface RuntimeConfig {
4
11
  plugins?: RuntimePlugin[];
5
12
  [key: string]: any;
@@ -1,13 +1,29 @@
1
- import type { InternalRuntimeContext } from '@modern-js/plugin';
2
- import type { NestedRoute, PageRoute } from '@modern-js/types';
3
1
  import type React from 'react';
4
- import type { RuntimeExtends } from '../plugin/types';
5
2
  import type { ServerPayload } from './serverPayload/index';
3
+ export type RuntimeRoute = {
4
+ children?: RuntimeRoute[];
5
+ routes?: RuntimeRoute[];
6
+ [key: string]: any;
7
+ };
8
+ type RuntimeHookCaller = {
9
+ call: (...args: any[]) => any;
10
+ [key: string]: unknown;
11
+ };
12
+ type RuntimeHooks = Record<string, RuntimeHookCaller>;
13
+ type RuntimePluginAPI = {
14
+ updateRuntimeContext?: (context: unknown) => unknown;
15
+ [key: string]: any;
16
+ };
17
+ type InternalRuntimeContextLike = {
18
+ hooks: RuntimeHooks;
19
+ pluginAPI?: RuntimePluginAPI;
20
+ [key: string]: any;
21
+ };
6
22
  export { DefaultNotFound } from '../../router/runtime/DefaultNotFound';
7
23
  export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter, type RouterExtendsHooks, } from '../../router/runtime/hooks';
8
24
  export { applyRouterRuntimeState, applyRouterServerPrepareResult, cleanupRouterRuntimeState, createRouterRuntimeState, createRouterServerSnapshot, getRouterHydrationScripts, getRouterMatchedRouteIds, getRouterRuntimeState, getRouterServerSnapshot, type RouterLifecycleContext, type RouterLifecyclePhase, } from '../../router/runtime/lifecycle';
9
25
  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';
26
+ export type { BuiltInRouterFramework, InternalRouterRuntimeState, InternalRouterServerSnapshot, LoaderFunction, LoaderFunctionArgs, ModernRoute, RouterFramework, RouterRouteMatchSnapshot, RouterServerPrepareResult, } from '../../router/runtime/types';
11
27
  export { createRuntimeContextExtension, type RuntimeContextExtension, } from './extensions';
12
28
  export { getInitialContext, InternalRuntimeContext, RuntimeContext, type TInternalRuntimeContext, type TRuntimeContext, } from './runtime';
13
29
  export type { PayloadRoute, ServerPayload } from './serverPayload/index';
@@ -20,7 +36,7 @@ interface GlobalContext {
20
36
  /**
21
37
  * nest router and page router config
22
38
  */
23
- routes?: (NestedRoute | PageRoute)[];
39
+ routes?: RuntimeRoute[];
24
40
  /**
25
41
  * nest router init function
26
42
  */
@@ -33,7 +49,7 @@ interface GlobalContext {
33
49
  * Entry basename for routing
34
50
  */
35
51
  basename?: string;
36
- internalRuntimeContext?: InternalRuntimeContext<RuntimeExtends>;
52
+ internalRuntimeContext?: InternalRuntimeContextLike;
37
53
  /**
38
54
  * RSCRoot
39
55
  */
@@ -48,9 +64,9 @@ export declare function getGlobalEnableRsc(): boolean | undefined;
48
64
  export declare function setGlobalContext(context: Omit<GlobalContext, 'internalRuntimeContext'>): void;
49
65
  export declare function getCurrentEntryName(): string | undefined;
50
66
  export declare function getGlobalRSCRoot(): React.ComponentType<{}> | undefined;
51
- export declare function setGlobalInternalRuntimeContext(context: InternalRuntimeContext<RuntimeExtends>): void;
52
- export declare function getGlobalInternalRuntimeContext(): InternalRuntimeContext<Required<import("@modern-js/plugin").RuntimePluginExtends<import("../plugin/types").RuntimeConfig, import("./runtime").TInternalRuntimeContext, {}, {}>>>;
67
+ export declare function setGlobalInternalRuntimeContext(context: InternalRuntimeContextLike): void;
68
+ export declare function getGlobalInternalRuntimeContext(): InternalRuntimeContextLike;
53
69
  export declare function getGlobalApp(): React.ComponentType<{}> | undefined;
54
- export declare function getGlobalRoutes(): undefined | (NestedRoute | PageRoute)[];
70
+ export declare function getGlobalRoutes(): undefined | RuntimeRoute[];
55
71
  export declare function getGlobalLayoutApp(): React.ComponentType<{}> | undefined;
56
72
  export declare function getGlobalBasename(): string | undefined;
@@ -1,2 +1,10 @@
1
- import type { Monitors } from '@modern-js/types';
2
- export declare const defaultMonitors: Omit<Monitors, 'push'>;
1
+ export type RuntimeMonitors = {
2
+ counter: (name: string, ...args: any[]) => void;
3
+ info: (...args: any[]) => void;
4
+ debug: (...args: any[]) => void;
5
+ trace: (...args: any[]) => void;
6
+ warn: (...args: any[]) => void;
7
+ error: (...args: any[]) => void;
8
+ timing: (name: string, dur: number, ...args: any[]) => void;
9
+ };
10
+ export declare const defaultMonitors: RuntimeMonitors;
@@ -1 +1 @@
1
- export declare const getMonitors: () => Omit<import("@modern-js/types").Monitors, "push">;
1
+ export declare const getMonitors: () => import("./default").RuntimeMonitors;
@@ -1,2 +1,2 @@
1
- import type { Monitors } from '@modern-js/types';
2
- export declare const getMonitors: () => Omit<Monitors, 'push'>;
1
+ import { type RuntimeMonitors } from './default';
2
+ export declare const getMonitors: () => RuntimeMonitors;
@@ -0,0 +1,27 @@
1
+ type RuntimeRequest = Record<string, unknown>;
2
+ type RuntimeResponse = Record<string, unknown>;
3
+ export type RequestContext = {
4
+ request: RuntimeRequest;
5
+ response: RuntimeResponse;
6
+ };
7
+ export interface TRuntimeContext {
8
+ initialData?: Record<string, unknown>;
9
+ isBrowser: boolean;
10
+ routes?: unknown[];
11
+ requestContext: RequestContext;
12
+ /**
13
+ * @deprecated Use `requestContext` instead
14
+ */
15
+ context: RequestContext;
16
+ [key: string]: unknown;
17
+ }
18
+ export declare const RuntimeContext: import("react").Context<TRuntimeContext>;
19
+ /**
20
+ * deprecated, use RuntimeContext instead
21
+ */
22
+ export declare const ReactRuntimeContext: import("react").Context<TRuntimeContext>;
23
+ /**
24
+ * @deprecated use use(RuntimeContext) instead
25
+ */
26
+ export declare const useRuntimeContext: () => TRuntimeContext;
27
+ export {};
@@ -1,36 +1,26 @@
1
1
  import type { RouteObject, StaticHandlerContext } from '@modern-js/runtime-utils/router';
2
+ import type { BaseSSRServerContext } from '@modern-js/types';
2
3
  import type { RouteManifest } from '../../router/runtime/types';
3
- import type { RequestContext, SSRServerContext } from '../types';
4
- export interface TRuntimeContext {
5
- initialData?: Record<string, unknown>;
6
- isBrowser: boolean;
7
- routes?: RouteObject[];
8
- requestContext: RequestContext;
9
- /**
10
- * @deprecated Use `requestContext` instead
11
- */
12
- context: RequestContext;
13
- [key: string]: unknown;
14
- }
4
+ import { type TRuntimeContext } from './public';
5
+ export type InternalSSRContext = {
6
+ request: BaseSSRServerContext['request'] & {
7
+ raw?: Request;
8
+ };
9
+ response: BaseSSRServerContext['response'];
10
+ [key: string]: any;
11
+ };
12
+ export { ReactRuntimeContext, RuntimeContext, type TRuntimeContext, useRuntimeContext, } from './public';
15
13
  /**
16
14
  * InternalRuntimeContext used internally and by plugins
17
15
  */
18
16
  export interface TInternalRuntimeContext extends TRuntimeContext {
19
17
  routeManifest?: RouteManifest;
18
+ routes?: RouteObject[];
20
19
  routerContext?: StaticHandlerContext;
21
20
  unstable_getBlockNavState?: () => boolean;
22
- ssrContext?: SSRServerContext;
21
+ ssrContext?: InternalSSRContext;
23
22
  _internalContext?: any;
24
23
  _internalRouterBaseName?: any;
25
24
  }
26
25
  export declare const InternalRuntimeContext: import("react").Context<TInternalRuntimeContext>;
27
- export declare const RuntimeContext: import("react").Context<TRuntimeContext>;
28
- /**
29
- * deprecated, use RuntimeContext instead
30
- */
31
- export declare const ReactRuntimeContext: import("react").Context<TRuntimeContext>;
32
26
  export declare const getInitialContext: (isBrowser?: boolean, routeManifest?: RouteManifest) => TInternalRuntimeContext;
33
- /**
34
- * @deprecated use use(RuntimeContext) instead
35
- */
36
- export declare const useRuntimeContext: () => TRuntimeContext;
@@ -1,2 +1,2 @@
1
1
  import type React from 'react';
2
- export declare function createRoot(UserApp?: React.ComponentType | null): React.ComponentType<any>;
2
+ export declare function createRoot(UserApp?: React.ComponentType | null): any;
@@ -0,0 +1,15 @@
1
+ import type { OnError } from '@modern-js/app-tools';
2
+ import type { TInternalRuntimeContext } from '../context';
3
+ import type { RouterCleanup } from './routerCleanup';
4
+ export type ResponseProxy = {
5
+ headers: Record<string, string>;
6
+ status: number;
7
+ };
8
+ export type RedirectContext = {
9
+ enableRsc: boolean;
10
+ isRSCNavigation: boolean;
11
+ basename: string;
12
+ };
13
+ export declare const applyRouterSnapshotResult: (context: TInternalRuntimeContext, onError: OnError) => void;
14
+ export declare const createLoaderRedirectResponse: (beforeRenderResult: Response | undefined, redirectCtx: RedirectContext) => Response | undefined;
15
+ export declare const finalizeRenderResponse: (response: Response, responseProxy: ResponseProxy, redirectCtx: RedirectContext, routerCleanup: RouterCleanup) => Response;
@@ -24,5 +24,6 @@ export type RouterCleanup = {
24
24
  */
25
25
  deferUntilBodyDone: (response: Response) => Response;
26
26
  };
27
- export declare function withRouterCleanup<T>(runtimeContext: TInternalRuntimeContext, onError: OnError, callback: (routerCleanup: RouterCleanup) => Promise<T>): Promise<T>;
27
+ export declare function runWithRouterCleanupOnError<T>(routerCleanup: RouterCleanup, callback: () => Promise<T> | T): Promise<T>;
28
+ export declare function finishWithRouterCleanup<T>(routerCleanup: RouterCleanup, callback: () => Promise<T> | T): Promise<T>;
28
29
  export declare function createRouterCleanup(runtimeContext: TInternalRuntimeContext, onError: OnError): RouterCleanup;
@@ -9,7 +9,7 @@ type ScriptChunkLike = {
9
9
  filename?: string;
10
10
  url?: string;
11
11
  };
12
- export declare function getMatchedRouteAssets(runtimeContext: TInternalRuntimeContext, routeManifest?: RouteManifestLike): string[];
12
+ export declare function getMatchedRouteChunks<T>(runtimeContext: TInternalRuntimeContext, routeManifest: RouteManifestLike | undefined, routeAssetToChunk: (asset: string) => T): T[];
13
13
  export declare const orderHydrationScriptChunks: <T extends ScriptChunkLike>({ asyncEntryChunks, collectedChunks, matchedRouteChunks, entryName, }: {
14
14
  asyncEntryChunks: T[];
15
15
  collectedChunks: T[];
@@ -1,7 +1,7 @@
1
1
  import type { OnError } from '@modern-js/app-tools';
2
2
  import type { ClientManifest as RscClientManifest, ServerManifest as RscServerManifest, SSRManifest as RscSSRManifest } from '@modern-js/types/server';
3
3
  import type React from 'react';
4
- import type { TRuntimeContext } from '../../context';
4
+ import type { TInternalRuntimeContext } from '../../context';
5
5
  import type { HandleRequestConfig } from '../requestHandler';
6
6
  import type { RenderStreaming, SSRConfig } from '../shared';
7
7
  export type RscManifest = {
@@ -11,7 +11,7 @@ export type RscManifest = {
11
11
  entryCssFiles?: Record<string, string[]>;
12
12
  };
13
13
  export type CreateReadableStreamFromElementOptions = {
14
- runtimeContext: TRuntimeContext;
14
+ runtimeContext: TInternalRuntimeContext;
15
15
  config: HandleRequestConfig;
16
16
  ssrConfig: SSRConfig;
17
17
  htmlTemplate: string;
@@ -1,7 +1,6 @@
1
1
  import type { ReactElement } from 'react';
2
2
  import type { TInternalRuntimeContext } from '../../context';
3
3
  import type { ChunkSet, Collector } from './types';
4
- export { orderHydrationScriptChunks } from '../scriptOrder';
5
4
  declare module '@loadable/server' {
6
5
  interface ChunkExtractor {
7
6
  chunks: string[];
@@ -30,7 +29,6 @@ export declare class LoadableCollector implements Collector {
30
29
  private options;
31
30
  private extractor?;
32
31
  constructor(options: LoadableCollectorOptions);
33
- private getMatchedRouteChunks;
34
32
  collect(comopnent: ReactElement): ReactElement;
35
33
  effect(): Promise<void>;
36
34
  private emitLoadableScripts;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { Helmet as AsyncHelmet, HelmetData as AsyncHelmetData, type HelmetDatum, type HelmetHTMLBodyDatum, type HelmetHTMLElementDatum, type HelmetProps, HelmetProvider, type HelmetServerState, type HelmetTags } from 'react-helmet-async';
3
3
  export declare const Helmet: (props: React.PropsWithChildren<HelmetProps>) => React.CElement<React.PropsWithChildren<HelmetProps>, AsyncHelmet> | null;
4
4
  declare const head: {
5
- Helmet: (props: React.PropsWithChildren<HelmetProps>) => React.CElement<React.PropsWithChildren<HelmetProps>, AsyncHelmet> | null;
5
+ Helmet: typeof Helmet;
6
6
  HelmetData: typeof AsyncHelmetData;
7
7
  HelmetProvider: typeof HelmetProvider;
8
8
  };
@@ -1,10 +1,10 @@
1
- import type { RouterConfig } from './router/internal';
2
- export type { RuntimeConfig } from './common';
1
+ import type { RouterConfig } from './router/runtime/types';
2
+ export type { RuntimeConfig, RuntimePlugin } from './common';
3
3
  export { isBrowser } from './common';
4
- export type { RuntimePlugin } from './core';
5
- export { defineRuntimeConfig, RuntimeContext, useRuntimeContext, } from './core';
4
+ export { defineRuntimeConfig } from './core/config';
6
5
  export { getMonitors } from './core/context/monitors';
6
+ export type { TRuntimeContext } from './core/context/public';
7
+ export { RuntimeContext, useRuntimeContext, } from './core/context/public';
7
8
  export { getRequest } from './core/context/request';
8
9
  export { redirect, setHeaders, setStatus } from './core/context/response';
9
- export type { TRuntimeContext } from './core/context/runtime';
10
10
  export type { RouterConfig };
@@ -1,2 +1 @@
1
1
  export { InternalRuntimeContext, type TInternalRuntimeContext, } from './core/context/runtime';
2
- export type { SSRServerContext } from './core/types';
@@ -1,12 +1,16 @@
1
1
  import type { RouteObject } from '@modern-js/runtime-utils/router';
2
2
  import type { TRuntimeContext } from '../../core/context/runtime';
3
3
  import type { RouterLifecycleContext } from './lifecycle';
4
- declare const modifyRoutes: import("@modern-js/plugin").SyncHook<(routes: RouteObject[]) => RouteObject[]>;
5
- declare const onBeforeCreateRoutes: import("@modern-js/plugin").SyncHook<(context: TRuntimeContext) => void>;
6
- declare const onBeforeCreateRouter: import("@modern-js/plugin").SyncHook<(context: RouterLifecycleContext) => void>;
7
- declare const onAfterCreateRouter: import("@modern-js/plugin").SyncHook<(context: RouterLifecycleContext) => void>;
8
- declare const onBeforeHydrateRouter: import("@modern-js/plugin").SyncHook<(context: RouterLifecycleContext) => void>;
9
- declare const onAfterHydrateRouter: import("@modern-js/plugin").SyncHook<(context: RouterLifecycleContext) => void>;
4
+ export type RouterSyncHook<Handler extends (...args: any[]) => any> = {
5
+ call: (...args: Parameters<Handler>) => ReturnType<Handler>;
6
+ [key: string]: unknown;
7
+ };
8
+ declare const modifyRoutes: RouterSyncHook<(routes: RouteObject[]) => RouteObject[]>;
9
+ declare const onBeforeCreateRoutes: RouterSyncHook<(context: TRuntimeContext) => void>;
10
+ declare const onBeforeCreateRouter: RouterSyncHook<(context: RouterLifecycleContext) => void>;
11
+ declare const onAfterCreateRouter: RouterSyncHook<(context: RouterLifecycleContext) => void>;
12
+ declare const onBeforeHydrateRouter: RouterSyncHook<(context: RouterLifecycleContext) => void>;
13
+ declare const onAfterHydrateRouter: RouterSyncHook<(context: RouterLifecycleContext) => void>;
10
14
  export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter, };
11
15
  export type RouterExtendsHooks = {
12
16
  modifyRoutes: typeof modifyRoutes;
@@ -1,4 +1,4 @@
1
- import type { RuntimePlugin } from '../../core';
1
+ import type { RuntimePlugin } from '../../common';
2
2
  import type { RouterExtendsHooks } from './hooks';
3
3
  import type { RouterConfig, SingleRouteConfig } from './types';
4
4
  export declare const routerPlugin: (userConfig?: Partial<RouterConfig>) => RuntimePlugin<{
@@ -1,4 +1,4 @@
1
- import { type RuntimePlugin } from '../../core';
1
+ import type { RuntimePlugin } from '../../common';
2
2
  import type { RouterExtendsHooks } from './hooks';
3
3
  import type { RouterConfig, Routes } from './types';
4
4
  export declare let finalRouteConfig: RouterConfig['routesConfig'];
@@ -1,4 +1,4 @@
1
- import type { RuntimePlugin } from '../../core';
1
+ import type { RuntimePlugin } from '../../common';
2
2
  import type { RouterExtendsHooks } from './hooks';
3
3
  import type { RouterConfig } from './types';
4
4
  export declare const routerPlugin: (userConfig?: Partial<RouterConfig>) => RuntimePlugin<{
@@ -11,7 +11,7 @@
11
11
  * - `@modern-js/plugin-tanstack` registers the `tanstack` provider when its
12
12
  * runtime entry is imported.
13
13
  */
14
- import type { RuntimePlugin } from '../../core';
14
+ import type { RuntimePlugin } from '../../common';
15
15
  import type { RouterExtendsHooks } from './hooks';
16
16
  import type { RouterConfig } from './types';
17
17
  /**
@@ -1,6 +1,12 @@
1
- import type { RequestContext } from '@modern-js/runtime-utils/node';
2
1
  import type { Params, RouteObject, RouteProps } from '@modern-js/runtime-utils/router';
3
- import type { NestedRoute, PageRoute } from '@modern-js/types';
2
+ export type ModernRoute = {
3
+ type: 'nested' | 'page';
4
+ path?: string;
5
+ id?: string;
6
+ component?: React.ComponentType | string;
7
+ children?: ModernRoute[];
8
+ [key: string]: any;
9
+ };
4
10
  export type SingleRouteConfig = RouteProps & {
5
11
  redirect?: string;
6
12
  routes?: SingleRouteConfig[];
@@ -19,13 +25,13 @@ export type RouterFramework = BuiltInRouterFramework | (string & {});
19
25
  export type RouterConfig = {
20
26
  /**
21
27
  * Select the router implementation used by Modern.js conventional routing.
22
- * - `react-router` (default): React Router v7 based integration
28
+ * - `react-router` (default): React Router based integration
23
29
  * - `tanstack`: TanStack Router integration
24
30
  */
25
31
  framework?: RouterFramework;
26
32
  routesConfig: {
27
33
  globalApp?: React.ComponentType<any>;
28
- routes?: (NestedRoute | PageRoute)[];
34
+ routes?: ModernRoute[];
29
35
  };
30
36
  /**
31
37
  * You should not use it
@@ -108,12 +114,28 @@ export type ModernRouteObject = RouteObject & {
108
114
  component?: React.ComponentType | LazyComponentDescriptor;
109
115
  entryCssFiles?: string[];
110
116
  };
117
+ type LoaderContextKey<T = unknown> = {
118
+ symbol: symbol;
119
+ getDefaultValue: () => T;
120
+ };
121
+ interface LoaderRequestGet<P extends Record<string, unknown>> {
122
+ <Key extends keyof P>(key: Key): P[Key];
123
+ <T>(key: LoaderContextKey<T>): T;
124
+ }
125
+ interface LoaderRequestSet<P extends Record<string, unknown>> {
126
+ <Key extends keyof P>(key: Key, value: P[Key]): void;
127
+ <T>(key: LoaderContextKey<T>, value: T): void;
128
+ }
129
+ type LoaderRequestContext<P extends Record<string, unknown> = {}> = {
130
+ get: LoaderRequestGet<P & Record<string, unknown>>;
131
+ set: LoaderRequestSet<P & Record<string, unknown>>;
132
+ };
111
133
  interface DataFunctionArgs<D = any> {
112
134
  request: Request;
113
135
  params: Params;
114
136
  context?: D;
115
137
  }
116
- export type LoaderFunctionArgs<P extends Record<string, unknown> = Record<string, unknown>> = DataFunctionArgs<RequestContext<P>>;
138
+ export type LoaderFunctionArgs<P extends Record<string, unknown> = Record<string, unknown>> = DataFunctionArgs<LoaderRequestContext<P>>;
117
139
  declare type DataFunctionValue = Response | NonNullable<unknown> | null;
118
140
  export type LoaderFunction = <P extends Record<string, unknown> = Record<string, unknown>>(args: LoaderFunctionArgs<P>) => Promise<DataFunctionValue> | DataFunctionValue;
119
141
  export {};