@modern-js/runtime 3.0.5 → 3.1.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 (76) hide show
  1. package/dist/cjs/cli/code.js +9 -8
  2. package/dist/cjs/cli/template.js +46 -8
  3. package/dist/cjs/core/browser/index.js +4 -1
  4. package/dist/cjs/core/server/stream/createReadableStream.js +2 -0
  5. package/dist/cjs/core/server/string/index.js +4 -1
  6. package/dist/cjs/router/cli/code/index.js +1 -1
  7. package/dist/cjs/router/cli/code/utils.js +5 -5
  8. package/dist/cjs/router/runtime/PrefetchLink.js +1 -4
  9. package/dist/esm/cli/code.mjs +9 -8
  10. package/dist/esm/cli/index.mjs +2 -1
  11. package/dist/esm/cli/ssr/index.mjs +2 -1
  12. package/dist/esm/cli/ssr/loadable-bundler-plugin.mjs +1 -1
  13. package/dist/esm/cli/template.mjs +48 -10
  14. package/dist/esm/core/browser/index.mjs +4 -1
  15. package/dist/esm/core/constants.mjs +1 -1
  16. package/dist/esm/core/context/index.mjs +3 -3
  17. package/dist/esm/core/index.mjs +2 -3
  18. package/dist/esm/core/server/index.mjs +3 -2
  19. package/dist/esm/core/server/react/index.mjs +2 -3
  20. package/dist/esm/core/server/server.mjs +3 -4
  21. package/dist/esm/core/server/stream/createReadableStream.mjs +2 -0
  22. package/dist/esm/core/server/stream/shared.mjs +1 -1
  23. package/dist/esm/core/server/string/index.mjs +4 -1
  24. package/dist/esm/document/cli/index.mjs +2 -1
  25. package/dist/esm/exports/head.mjs +2 -1
  26. package/dist/esm/exports/loadable.mjs +2 -2
  27. package/dist/esm/index.mjs +5 -6
  28. package/dist/esm/internal.mjs +1 -2
  29. package/dist/esm/react-server.mjs +3 -4
  30. package/dist/esm/router/cli/code/getClientRoutes/index.mjs +1 -2
  31. package/dist/esm/router/cli/code/index.mjs +2 -2
  32. package/dist/esm/router/cli/code/utils.mjs +2 -2
  33. package/dist/esm/router/cli/index.mjs +2 -1
  34. package/dist/esm/router/internal.mjs +1 -2
  35. package/dist/esm/router/runtime/DeferredDataScripts.mjs +1 -1
  36. package/dist/esm/router/runtime/DeferredDataScripts.node.mjs +1 -1
  37. package/dist/esm/router/runtime/PrefetchLink.mjs +1 -5
  38. package/dist/esm/router/runtime/index.mjs +3 -3
  39. package/dist/esm/router/runtime/internal.mjs +3 -2
  40. package/dist/esm/router/runtime/plugin.mjs +1 -1
  41. package/dist/esm-node/cli/code.mjs +9 -8
  42. package/dist/esm-node/cli/index.mjs +2 -1
  43. package/dist/esm-node/cli/ssr/index.mjs +2 -1
  44. package/dist/esm-node/cli/ssr/loadable-bundler-plugin.mjs +1 -1
  45. package/dist/esm-node/cli/template.mjs +48 -10
  46. package/dist/esm-node/core/browser/index.mjs +4 -1
  47. package/dist/esm-node/core/constants.mjs +1 -1
  48. package/dist/esm-node/core/context/index.mjs +3 -3
  49. package/dist/esm-node/core/index.mjs +2 -3
  50. package/dist/esm-node/core/server/index.mjs +3 -2
  51. package/dist/esm-node/core/server/react/index.mjs +2 -3
  52. package/dist/esm-node/core/server/server.mjs +3 -4
  53. package/dist/esm-node/core/server/stream/createReadableStream.mjs +2 -0
  54. package/dist/esm-node/core/server/stream/shared.mjs +1 -1
  55. package/dist/esm-node/core/server/string/index.mjs +4 -1
  56. package/dist/esm-node/document/cli/index.mjs +2 -1
  57. package/dist/esm-node/exports/head.mjs +2 -1
  58. package/dist/esm-node/exports/loadable.mjs +2 -2
  59. package/dist/esm-node/index.mjs +5 -6
  60. package/dist/esm-node/internal.mjs +1 -2
  61. package/dist/esm-node/react-server.mjs +3 -4
  62. package/dist/esm-node/router/cli/code/getClientRoutes/index.mjs +1 -2
  63. package/dist/esm-node/router/cli/code/index.mjs +2 -2
  64. package/dist/esm-node/router/cli/code/utils.mjs +2 -2
  65. package/dist/esm-node/router/cli/index.mjs +2 -1
  66. package/dist/esm-node/router/internal.mjs +1 -2
  67. package/dist/esm-node/router/runtime/DeferredDataScripts.mjs +1 -1
  68. package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +1 -1
  69. package/dist/esm-node/router/runtime/PrefetchLink.mjs +1 -5
  70. package/dist/esm-node/router/runtime/index.mjs +3 -3
  71. package/dist/esm-node/router/runtime/internal.mjs +3 -2
  72. package/dist/esm-node/router/runtime/plugin.mjs +1 -1
  73. package/dist/types/cli/template.d.ts +2 -1
  74. package/dist/types/router/cli/code/utils.d.ts +1 -1
  75. package/package.json +11 -11
  76. package/{rstest.config.ts → rstest.config.mts} +0 -6
@@ -2,11 +2,11 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import { merge } from "@modern-js/runtime-utils/merge";
3
3
  import { RouterProvider, createBrowserRouter, createHashRouter, createRoutesFromElements, useHref, useLocation, useMatches } from "@modern-js/runtime-utils/router";
4
4
  import { normalizePathname } from "@modern-js/runtime-utils/url";
5
+ import * as __rspack_external_react from "react";
5
6
  import { InternalRuntimeContext, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRoutes } from "../../core/context/index.mjs";
6
7
  import { modifyRoutes, onBeforeCreateRoutes } from "./hooks.mjs";
7
8
  import { createClientRouterFromPayload } from "./rsc-router.mjs";
8
9
  import { createRouteObjectsFromConfig, deserializeErrors, renderRoutes, urlJoin } from "./utils.mjs";
9
- import * as __rspack_external_react from "react";
10
10
  let finalRouteConfig = {
11
11
  routes: []
12
12
  };
@@ -22,13 +22,7 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
22
22
  nestedRoutesEntry
23
23
  });
24
24
  let indexCode = '';
25
- indexCode = !ssrMode && config.server.rsc ? entryForCSRWithRSC({
26
- metaName,
27
- entryName,
28
- mountId,
29
- urlPath: serverRoutes.find((route)=>route.entryName === entryName)?.urlPath,
30
- isNestedRouter: entrypoint.nestedRoutesEntry
31
- }) : index({
25
+ indexCode = ssrMode || !config.server.rsc || customEntry ? index({
32
26
  srcDirectory,
33
27
  internalSrcAlias,
34
28
  metaName,
@@ -38,6 +32,12 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
38
32
  mountId,
39
33
  enableRsc: config.server.rsc,
40
34
  isNestedRouter: !!entrypoint.nestedRoutesEntry
35
+ }) : entryForCSRWithRSC({
36
+ metaName,
37
+ entryName,
38
+ mountId,
39
+ urlPath: serverRoutes.find((route)=>route.entryName === entryName)?.urlPath,
40
+ isNestedRouter: entrypoint.nestedRoutesEntry
41
41
  });
42
42
  const indexFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_POINT_FILE_NAME}`);
43
43
  await fs.outputFile(indexFile, indexCode, 'utf8');
@@ -104,7 +104,8 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
104
104
  });
105
105
  await fs.outputFile(AppProxyPath, appProxyCode);
106
106
  contextCode = runtimeGlobalContextForRSCClient({
107
- metaName
107
+ metaName,
108
+ customEntry
108
109
  });
109
110
  const contextServerCode = runtimeGlobalContextForRSCServer({
110
111
  metaName
@@ -91,4 +91,5 @@ const runtimePlugin = (params)=>({
91
91
  }
92
92
  });
93
93
  const cli = runtimePlugin;
94
- export { cli as default, documentPlugin, isRuntimeEntry, routerPlugin, runtimePlugin, ssrPlugin };
94
+ export default cli;
95
+ export { documentPlugin, isRuntimeEntry, routerPlugin, runtimePlugin, ssrPlugin };
@@ -107,4 +107,5 @@ const ssrPlugin = ()=>({
107
107
  }
108
108
  });
109
109
  const cli_ssr = ssrPlugin;
110
- export { cli_ssr as default, ssrPlugin };
110
+ export default cli_ssr;
111
+ export { ssrPlugin };
@@ -74,4 +74,4 @@ class LoadablePlugin {
74
74
  }
75
75
  }
76
76
  const loadable_bundler_plugin = LoadablePlugin;
77
- export { loadable_bundler_plugin as default };
77
+ export default loadable_bundler_plugin;
@@ -153,16 +153,54 @@ const runtimeGlobalContextForRSCServer = ({ metaName })=>`
153
153
  App: DefaultRoot,
154
154
  RSCRoot: AppProxy,
155
155
  });`;
156
- const runtimeGlobalContextForRSCClient = ({ metaName })=>`
157
- import { createElement, Fragment } from 'react';
158
- import { setGlobalContext } from '@${metaName}/runtime/context';
159
-
160
- const DefaultRoot = ({ children }: { children?: ReactNode }) =>
161
- createElement(Fragment, null, children);
162
-
163
- setGlobalContext({
164
- App: DefaultRoot
165
- });`;
156
+ const runtimeGlobalContextForRSCClient = ({ metaName, customEntry })=>`
157
+ ${customEntry ? `import {
158
+ RscClientRoot,
159
+ createFromFetch,
160
+ createFromReadableStream,
161
+ isRedirectResponse,
162
+ rscStream,
163
+ callServer,
164
+ setServerCallback,
165
+ } from '@${metaName}/runtime/rsc/client';` : ''}
166
+ import { createElement, Fragment } from 'react';
167
+ import { setGlobalContext } from '@${metaName}/runtime/context';
168
+
169
+ ${customEntry ? 'setServerCallback(callServer);' : ''}
170
+
171
+ ${customEntry ? `const handleRedirectResponse = (res: Response) => {
172
+ const { headers } = res;
173
+ const location = headers.get('X-Modernjs-Redirect');
174
+ const baseUrl = headers.get('X-Modernjs-BaseUrl');
175
+ if (location) {
176
+ if (baseUrl && baseUrl !== '/') {
177
+ window.location.replace(baseUrl + location);
178
+ } else {
179
+ window.location.replace(location);
180
+ }
181
+ return res;
182
+ }
183
+ return res;
184
+ };
185
+
186
+ const data = ${process.env.MODERN_DISABLE_INJECT_RSC_DATA ? `createFromFetch(
187
+ fetch(location.pathname, {
188
+ headers: {
189
+ 'x-rsc-tree': 'true',
190
+ },
191
+ }).then(handleRedirectResponse),
192
+ )` : `createFromReadableStream(rscStream, {
193
+ callServer: callServer,
194
+ })`};` : ''}
195
+
196
+ const DefaultRoot = ({ children }: { children?: ReactNode }) =>
197
+ createElement(Fragment, null, children);
198
+
199
+ ${customEntry ? 'const RSCRoot = () => createElement(RscClientRoot, { rscPayload: data });' : ''}
200
+
201
+ setGlobalContext({
202
+ App: ${customEntry ? 'RSCRoot' : 'DefaultRoot'}
203
+ });`;
166
204
  const AppProxyForRSC = ({ srcDirectory, internalSrcAlias, entry, customEntry })=>`
167
205
  import App from '${formatImportPath(customEntry ? entry.replace(/entry\.[tj]sx/, 'App').replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias).replace('.tsx', ''))}';
168
206
  import React from 'react';
@@ -1,4 +1,5 @@
1
1
  import "node:module";
2
+ import { SSR_HYDRATION_ID_PREFIX } from "@modern-js/utils/universal/constants";
2
3
  import cookie from "cookie";
3
4
  import { getGlobalInternalRuntimeContext } from "../context/index.mjs";
4
5
  import { getInitialContext } from "../context/runtime.mjs";
@@ -87,7 +88,9 @@ async function renderWithReact17(App, rootElement) {
87
88
  }
88
89
  async function hydrateWithReact18(App, rootElement) {
89
90
  const ReactDOM = await import("react-dom/client");
90
- const root = ReactDOM.hydrateRoot(rootElement, App);
91
+ const root = ReactDOM.hydrateRoot(rootElement, App, {
92
+ identifierPrefix: SSR_HYDRATION_ID_PREFIX
93
+ });
91
94
  return root;
92
95
  }
93
96
  async function hydrateWithReact17(App, rootElement, callback) {
@@ -6,4 +6,4 @@ var constants_RenderLevel = /*#__PURE__*/ function(RenderLevel) {
6
6
  }({});
7
7
  const SSR_DATA_JSON_ID = '__MODERN_SSR_DATA__';
8
8
  const ROUTER_DATA_JSON_ID = '__MODERN_ROUTER_DATA__';
9
- export { ROUTER_DATA_JSON_ID, constants_RenderLevel as RenderLevel, SSR_DATA_JSON_ID };
9
+ export { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID, constants_RenderLevel as RenderLevel };
@@ -1,6 +1,4 @@
1
1
  import "node:module";
2
- import { InternalRuntimeContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
3
- import { getServerPayload, setServerPayload } from "./serverPayload/index.mjs";
4
2
  const globalContext = {};
5
3
  function getGlobalIsRscClient() {
6
4
  return globalContext.isRscClient;
@@ -43,4 +41,6 @@ function getGlobalLayoutApp() {
43
41
  function getGlobalBasename() {
44
42
  return globalContext.basename;
45
43
  }
46
- export { InternalRuntimeContext, RuntimeContext, getCurrentEntryName, getGlobalApp, getGlobalBasename, getGlobalEnableRsc, getGlobalInternalRuntimeContext, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRSCRoot, getGlobalRoutes, getInitialContext, getServerPayload, setGlobalContext, setGlobalInternalRuntimeContext, setServerPayload };
44
+ export { InternalRuntimeContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
45
+ export { getServerPayload, setServerPayload } from "./serverPayload/index.mjs";
46
+ export { getCurrentEntryName, getGlobalApp, getGlobalBasename, getGlobalEnableRsc, getGlobalInternalRuntimeContext, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRSCRoot, getGlobalRoutes, setGlobalContext, setGlobalInternalRuntimeContext };
@@ -1,4 +1,3 @@
1
1
  import "node:module";
2
- import { defineRuntimeConfig } from "./config.mjs";
3
- import { RuntimeContext, useRuntimeContext } from "./context/runtime.mjs";
4
- export { RuntimeContext, defineRuntimeConfig, useRuntimeContext };
2
+ export { defineRuntimeConfig } from "./config.mjs";
3
+ export { RuntimeContext, useRuntimeContext } from "./context/runtime.mjs";
@@ -1,8 +1,9 @@
1
1
  import "node:module";
2
- import { NoSSR, NoSSRCache } from "./react/index.mjs";
3
2
  const ssr = (_config)=>({
4
3
  name: '@modern-js/plugin-ssr',
5
4
  setup: (_api)=>{}
6
5
  });
7
6
  const server = ssr;
8
- export { NoSSR, NoSSRCache, server as default, ssr };
7
+ export { NoSSR, NoSSRCache } from "./react/index.mjs";
8
+ export default server;
9
+ export { ssr };
@@ -1,4 +1,3 @@
1
1
  import "node:module";
2
- import { NoSSR } from "./nossr/index.mjs";
3
- import { NoSSRCache } from "./no-ssr-cache/index.mjs";
4
- export { NoSSR, NoSSRCache };
2
+ export { NoSSR } from "./nossr/index.mjs";
3
+ export { NoSSRCache } from "./no-ssr-cache/index.mjs";
@@ -1,5 +1,4 @@
1
1
  import "node:module";
2
- import { renderString } from "./string/index.mjs";
3
- import { renderStreaming } from "./stream/index.mjs";
4
- import { createRequestHandler } from "./requestHandler.mjs";
5
- export { createRequestHandler, renderStreaming, renderString };
2
+ export { renderString } from "./string/index.mjs";
3
+ export { renderStreaming } from "./stream/index.mjs";
4
+ export { createRequestHandler } from "./requestHandler.mjs";
@@ -1,6 +1,7 @@
1
1
  import "node:module";
2
2
  import { PassThrough, Readable, Transform } from "stream";
3
3
  import { storage } from "@modern-js/runtime-utils/node";
4
+ import { SSR_HYDRATION_ID_PREFIX } from "@modern-js/utils/universal/constants";
4
5
  import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common.mjs";
5
6
  import { RenderLevel } from "../../constants.mjs";
6
7
  import { getGlobalInternalRuntimeContext } from "../../context/index.mjs";
@@ -38,6 +39,7 @@ const createReadableStreamFromElement = async (request, rootElement, options)=>{
38
39
  return new Promise((resolve)=>{
39
40
  const { pipe: reactStreamingPipe } = renderToPipeableStream(processedRootElement, {
40
41
  nonce: config.nonce,
42
+ identifierPrefix: SSR_HYDRATION_ID_PREFIX,
41
43
  [onReady] () {
42
44
  let styledComponentsStyleTags = '';
43
45
  extenders.forEach((extender)=>{
@@ -106,4 +106,4 @@ function createRenderStreaming(createReadableStreamPromise) {
106
106
  return stream;
107
107
  };
108
108
  }
109
- export { shared_ShellChunkStatus as ShellChunkStatus, createRenderStreaming, encodeForWebStream, getReadableStreamFromString, resolveStreamingMode };
109
+ export { createRenderStreaming, encodeForWebStream, getReadableStreamFromString, resolveStreamingMode, shared_ShellChunkStatus as ShellChunkStatus };
@@ -1,5 +1,6 @@
1
1
  import "node:module";
2
2
  import { time } from "@modern-js/runtime-utils/time";
3
+ import { SSR_HYDRATION_ID_PREFIX } from "@modern-js/utils/universal/constants";
3
4
  import server from "react-dom/server";
4
5
  import react_helmet from "react-helmet";
5
6
  import { RenderLevel } from "../../constants.mjs";
@@ -66,7 +67,9 @@ async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifie
66
67
  const finalApp = collectors.reduce((pre, creator)=>creator.collect?.(pre) || pre, App);
67
68
  try {
68
69
  const end = time();
69
- html = server.renderToString(finalApp);
70
+ html = server.renderToString(finalApp, {
71
+ identifierPrefix: SSR_HYDRATION_ID_PREFIX
72
+ });
70
73
  chunkSet.renderLevel = RenderLevel.SERVER_RENDER;
71
74
  helmetData = react_helmet.renderStatic();
72
75
  const cost = end();
@@ -349,4 +349,5 @@ const documentPlugin = ()=>({
349
349
  }
350
350
  });
351
351
  const cli = documentPlugin;
352
- export { cli as default, documentPlugin, getDocumentByEntryName };
352
+ export default cli;
353
+ export { documentPlugin, getDocumentByEntryName };
@@ -2,4 +2,5 @@ import "node:module";
2
2
  "use client";
3
3
  import react_helmet, { Helmet } from "react-helmet";
4
4
  const head = react_helmet;
5
- export { Helmet, head as default };
5
+ export default head;
6
+ export { Helmet };
@@ -1,5 +1,5 @@
1
1
  import "node:module";
2
- import component from "@loadable/component";
3
2
  export * from "@loadable/component";
3
+ import component from "@loadable/component";
4
4
  const loadable = component;
5
- export { loadable as default };
5
+ export default loadable;
@@ -1,7 +1,6 @@
1
1
  import "node:module";
2
- import { isBrowser } from "./common.mjs";
3
- import { getMonitors } from "./core/context/monitors/index.mjs";
4
- import { getRequest } from "./core/context/request/index.mjs";
5
- import { redirect, setHeaders, setStatus } from "./core/context/response/index.mjs";
6
- import { RuntimeContext, defineRuntimeConfig, useRuntimeContext } from "./core/index.mjs";
7
- export { RuntimeContext, defineRuntimeConfig, getMonitors, getRequest, isBrowser, redirect, setHeaders, setStatus, useRuntimeContext };
2
+ export { isBrowser } from "./common.mjs";
3
+ export { getMonitors } from "./core/context/monitors/index.mjs";
4
+ export { getRequest } from "./core/context/request/index.mjs";
5
+ export { redirect, setHeaders, setStatus } from "./core/context/response/index.mjs";
6
+ export { RuntimeContext, defineRuntimeConfig, useRuntimeContext } from "./core/index.mjs";
@@ -1,3 +1,2 @@
1
1
  import "node:module";
2
- import { InternalRuntimeContext } from "./core/context/runtime.mjs";
3
- export { InternalRuntimeContext };
2
+ export { InternalRuntimeContext } from "./core/context/runtime.mjs";
@@ -1,5 +1,4 @@
1
1
  import "node:module";
2
- import { getRequest } from "./core/context/request/index.mjs";
3
- import { getMonitors } from "./core/context/monitors/index.mjs";
4
- import { redirect, setHeaders, setStatus } from "./core/context/response/index.mjs";
5
- export { getMonitors, getRequest, redirect, setHeaders, setStatus };
2
+ export { getRequest } from "./core/context/request/index.mjs";
3
+ export { getMonitors } from "./core/context/monitors/index.mjs";
4
+ export { redirect, setHeaders, setStatus } from "./core/context/response/index.mjs";
@@ -1,3 +1,2 @@
1
1
  import "node:module";
2
- import { getClientRoutes } from "./getRoutes.mjs";
3
- export { getClientRoutes };
2
+ export { getClientRoutes } from "./getRoutes.mjs";
@@ -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 { fileSystemRoutes, routesForServer, ssrLoaderCombinedModule } from "./templates.mjs";
10
- import { getServerCombinedModueFile, getServerLoadersFile } from "./utils.mjs";
10
+ import { getServerCombinedModuleFile, getServerLoadersFile } from "./utils.mjs";
11
11
  async function generateRoutesForEntry(entrypoint, appContext) {
12
12
  const routes = [];
13
13
  if (entrypoint.nestedRoutesEntry) {
@@ -120,7 +120,7 @@ const generateCode = async (appContext, config, entrypoints, api)=>{
120
120
  }
121
121
  const serverLoaderCombined = ssrLoaderCombinedModule(entrypoints, entrypoint, config, appContext);
122
122
  if (serverLoaderCombined) {
123
- const serverLoaderFile = getServerCombinedModueFile(internalDirectory, entryName);
123
+ const serverLoaderFile = getServerCombinedModuleFile(internalDirectory, entryName);
124
124
  await fs.outputFile(serverLoaderFile, serverLoaderCombined);
125
125
  }
126
126
  await fs.outputFile(path.resolve(internalDirectory, `./${entryName}/${FILE_SYSTEM_ROUTES_FILE_NAME}`), code, 'utf8');
@@ -66,9 +66,9 @@ const hasAction = async (filename, source)=>{
66
66
  return false;
67
67
  };
68
68
  const getServerLoadersFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'route-server-loaders.js');
69
- const getServerCombinedModueFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'server-loader-combined.js');
69
+ const getServerCombinedModuleFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'server-loader-combined.js');
70
70
  const getPathWithoutExt = (filename)=>{
71
71
  const extname = path.extname(filename);
72
72
  return extname ? filename.slice(0, -extname.length) : filename;
73
73
  };
74
- export { getPathWithoutExt, getServerCombinedModueFile, getServerLoadersFile, hasAction, hasLoader, isPageComponentFile, parseModule, replaceWithAlias, walkDirectory };
74
+ export { getPathWithoutExt, getServerCombinedModuleFile, getServerLoadersFile, hasAction, hasLoader, isPageComponentFile, parseModule, replaceWithAlias, walkDirectory };
@@ -81,4 +81,5 @@ const routerPlugin = ()=>({
81
81
  }
82
82
  });
83
83
  const cli = routerPlugin;
84
- export { cli as default, handleFileChange, handleModifyEntrypoints, isRouteEntry, routerPlugin };
84
+ export default cli;
85
+ export { handleFileChange, handleModifyEntrypoints, isRouteEntry, routerPlugin };
@@ -1,4 +1,3 @@
1
1
  import "node:module";
2
- import { routerPlugin } from "./runtime/internal.mjs";
3
2
  export * from "./runtime/internal.mjs";
4
- export { routerPlugin as default };
3
+ export { routerPlugin as default } from "./runtime/internal.mjs";
@@ -1,3 +1,3 @@
1
1
  import "node:module";
2
2
  const DeferredDataScripts = ()=>null;
3
- export { DeferredDataScripts as default };
3
+ export default DeferredDataScripts;
@@ -118,4 +118,4 @@ const DeferredDataScripts = (props)=>{
118
118
  });
119
119
  };
120
120
  const DeferredDataScripts_node = DeferredDataScripts;
121
- export { DeferredDataScripts_node as default };
121
+ export default DeferredDataScripts_node;
@@ -4,10 +4,6 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Link as router_Link, NavLink, matchRoutes, useHref, useMatches, useResolvedPath } from "@modern-js/runtime-utils/router";
5
5
  import react, { useContext, useMemo } from "react";
6
6
  import { InternalRuntimeContext } from "../../core/context/index.mjs";
7
- var __webpack_require__ = {};
8
- (()=>{
9
- __webpack_require__.e = ()=>Promise.resolve();
10
- })();
11
7
  function composeEventHandlers(theirHandler, ourHandler) {
12
8
  return (event)=>{
13
9
  theirHandler?.(event);
@@ -146,7 +142,7 @@ const createPrefetchLink = (Link)=>/*#__PURE__*/ react.forwardRef(({ to, prefetc
146
142
  ...props,
147
143
  ...prefetchHandlers
148
144
  }),
149
- shouldPrefetch && __webpack_require__.e && !isAbsolute ? /*#__PURE__*/ jsx(PrefetchPageLinks, {
145
+ shouldPrefetch && __webpack_chunk_load__ && !isAbsolute ? /*#__PURE__*/ jsx(PrefetchPageLinks, {
150
146
  path: resolvedPath
151
147
  }) : null
152
148
  ]
@@ -1,10 +1,10 @@
1
1
  import "node:module";
2
- import { useRouteLoaderData } from "@modern-js/runtime-utils/router";
3
- import { Link, NavLink } from "./PrefetchLink.mjs";
4
2
  export * from "@modern-js/runtime-utils/router";
5
3
  export * from "./withRouter.mjs";
4
+ import { useRouteLoaderData } from "@modern-js/runtime-utils/router";
6
5
  const runtime_useRouteLoaderData = (routeId)=>{
7
6
  const realRouteId = routeId.replace(/\[(.*?)\]/g, '($1)');
8
7
  return useRouteLoaderData(realRouteId);
9
8
  };
10
- export { Link, NavLink, runtime_useRouteLoaderData as useRouteLoaderData };
9
+ export { Link, NavLink } from "./PrefetchLink.mjs";
10
+ export { runtime_useRouteLoaderData as useRouteLoaderData };
@@ -1,5 +1,6 @@
1
1
  import "node:module";
2
2
  import { modifyRoutes, routerPlugin } from "./plugin.mjs";
3
- import { renderRoutes } from "./utils.mjs";
4
3
  const internal = routerPlugin;
5
- export { internal as default, modifyRoutes, renderRoutes, routerPlugin };
4
+ export { renderRoutes } from "./utils.mjs";
5
+ export default internal;
6
+ export { modifyRoutes, routerPlugin };
@@ -3,11 +3,11 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { merge } from "@modern-js/runtime-utils/merge";
4
4
  import { RouterProvider, createBrowserRouter, createHashRouter, createRoutesFromElements, useHref, useLocation, useMatches } from "@modern-js/runtime-utils/router";
5
5
  import { normalizePathname } from "@modern-js/runtime-utils/url";
6
+ import * as __rspack_external_react from "react";
6
7
  import { InternalRuntimeContext, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRoutes } from "../../core/context/index.mjs";
7
8
  import { modifyRoutes, onBeforeCreateRoutes } from "./hooks.mjs";
8
9
  import { createClientRouterFromPayload } from "./rsc-router.mjs";
9
10
  import { createRouteObjectsFromConfig, deserializeErrors, renderRoutes, urlJoin } from "./utils.mjs";
10
- import * as __rspack_external_react from "react";
11
11
  let finalRouteConfig = {
12
12
  routes: []
13
13
  };
@@ -38,8 +38,9 @@ export declare const runtimeGlobalContext: ({ entryName, srcDirectory, internalS
38
38
  export declare const runtimeGlobalContextForRSCServer: ({ metaName, }: {
39
39
  metaName: string;
40
40
  }) => string;
41
- export declare const runtimeGlobalContextForRSCClient: ({ metaName, }: {
41
+ export declare const runtimeGlobalContextForRSCClient: ({ metaName, customEntry, }: {
42
42
  metaName: string;
43
+ customEntry?: boolean;
43
44
  }) => string;
44
45
  export declare const AppProxyForRSC: ({ srcDirectory, internalSrcAlias, entry, customEntry, }: {
45
46
  srcDirectory: string;
@@ -8,5 +8,5 @@ export declare const parseModule: ({ source, filename, }: {
8
8
  export declare const hasLoader: (filename: string, source?: string) => Promise<boolean>;
9
9
  export declare const hasAction: (filename: string, source?: string) => Promise<boolean>;
10
10
  export declare const getServerLoadersFile: (internalDirectory: string, entryName: string) => string;
11
- export declare const getServerCombinedModueFile: (internalDirectory: string, entryName: string) => string;
11
+ export declare const getServerCombinedModuleFile: (internalDirectory: string, entryName: string) => string;
12
12
  export declare const getPathWithoutExt: (filename: string) => string;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "3.0.5",
18
+ "version": "3.1.1",
19
19
  "engines": {
20
20
  "node": ">=20"
21
21
  },
@@ -215,12 +215,12 @@
215
215
  "isbot": "3.8.0",
216
216
  "react-helmet": "^6.1.0",
217
217
  "react-is": "^18.3.1",
218
- "@modern-js/plugin": "3.0.5",
219
- "@modern-js/plugin-data-loader": "3.0.5",
220
- "@modern-js/render": "3.0.5",
221
- "@modern-js/types": "3.0.5",
222
- "@modern-js/runtime-utils": "3.0.5",
223
- "@modern-js/utils": "3.0.5"
218
+ "@modern-js/plugin-data-loader": "3.1.1",
219
+ "@modern-js/render": "3.1.1",
220
+ "@modern-js/plugin": "3.1.1",
221
+ "@modern-js/runtime-utils": "3.1.1",
222
+ "@modern-js/types": "3.1.1",
223
+ "@modern-js/utils": "3.1.1"
224
224
  },
225
225
  "peerDependencies": {
226
226
  "react": ">=17.0.2",
@@ -229,7 +229,7 @@
229
229
  "devDependencies": {
230
230
  "@remix-run/web-fetch": "^4.1.3",
231
231
  "@rsbuild/core": "2.0.0-beta.4",
232
- "@rslib/core": "0.19.6",
232
+ "@rslib/core": "0.20.0",
233
233
  "@testing-library/dom": "^10.4.1",
234
234
  "@testing-library/react": "^16.3.2",
235
235
  "@types/cookie": "0.6.0",
@@ -240,9 +240,9 @@
240
240
  "react-dom": "^19.2.4",
241
241
  "ts-node": "^10.9.2",
242
242
  "typescript": "^5",
243
- "@modern-js/app-tools": "3.0.5",
244
- "@modern-js/rslib": "2.68.10",
245
- "@scripts/rstest-config": "2.66.0"
243
+ "@modern-js/app-tools": "3.1.1",
244
+ "@scripts/rstest-config": "2.66.0",
245
+ "@modern-js/rslib": "2.68.10"
246
246
  },
247
247
  "sideEffects": false,
248
248
  "publishConfig": {
@@ -5,12 +5,6 @@ const commonConfig: ProjectConfig = {
5
5
  setupFiles: ['@scripts/rstest-config/setup.ts'],
6
6
  globals: true,
7
7
  tools: {
8
- rspack: {
9
- optimization: {
10
- // Disable tree shaking to avoid issues with rstest mocking '@modern-js/utils'.
11
- providedExports: false,
12
- },
13
- },
14
8
  swc: {
15
9
  jsc: {
16
10
  transform: {