@modern-js/runtime 2.65.1 → 2.65.3

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 (98) hide show
  1. package/dist/cjs/cache/index.js +22 -0
  2. package/dist/cjs/cli/code.js +1 -0
  3. package/dist/cjs/cli/ssr/index.js +1 -1
  4. package/dist/cjs/cli/template.js +7 -3
  5. package/dist/cjs/core/browser/index.js +1 -3
  6. package/dist/cjs/core/compat/requestContext.js +48 -0
  7. package/dist/cjs/core/compatible.js +2 -14
  8. package/dist/cjs/core/context/index.js +6 -0
  9. package/dist/cjs/core/context/monitors/default.js +38 -0
  10. package/dist/cjs/core/context/monitors/index.js +31 -0
  11. package/dist/cjs/core/context/monitors/index.server.js +33 -0
  12. package/dist/cjs/core/context/request/index.js +30 -0
  13. package/dist/cjs/core/context/request/index.server.js +32 -0
  14. package/dist/cjs/core/context/response/index.js +43 -0
  15. package/dist/cjs/core/context/response/index.server.js +62 -0
  16. package/dist/cjs/core/plugin/index.js +2 -0
  17. package/dist/cjs/core/server/requestHandler.js +83 -73
  18. package/dist/cjs/core/server/stream/shared.js +40 -45
  19. package/dist/cjs/core/server/string/index.js +50 -55
  20. package/dist/cjs/core/server/string/prefetch.js +47 -52
  21. package/dist/cjs/index.js +13 -0
  22. package/dist/cjs/react-server.js +38 -0
  23. package/dist/cjs/router/cli/code/templates.js +3 -1
  24. package/dist/cjs/router/cli/handler.js +1 -0
  25. package/dist/cjs/router/runtime/plugin.node.js +1 -2
  26. package/dist/cjs/router/runtime/utils.js +4 -6
  27. package/dist/esm/cache/index.js +1 -0
  28. package/dist/esm/cli/code.js +1 -0
  29. package/dist/esm/cli/ssr/index.js +1 -1
  30. package/dist/esm/cli/template.js +4 -4
  31. package/dist/esm/core/browser/index.js +3 -4
  32. package/dist/esm/core/compat/requestContext.js +25 -0
  33. package/dist/esm/core/compatible.js +5 -16
  34. package/dist/esm/core/context/index.js +5 -0
  35. package/dist/esm/core/context/monitors/default.js +20 -0
  36. package/dist/esm/core/context/monitors/index.js +7 -0
  37. package/dist/esm/core/context/monitors/index.server.js +9 -0
  38. package/dist/esm/core/context/request/index.js +6 -0
  39. package/dist/esm/core/context/request/index.server.js +8 -0
  40. package/dist/esm/core/context/response/index.js +16 -0
  41. package/dist/esm/core/context/response/index.server.js +41 -0
  42. package/dist/esm/core/plugin/index.js +3 -1
  43. package/dist/esm/core/server/requestHandler.js +134 -118
  44. package/dist/esm/core/server/stream/shared.js +49 -63
  45. package/dist/esm/core/server/string/index.js +82 -93
  46. package/dist/esm/core/server/string/prefetch.js +83 -94
  47. package/dist/esm/index.js +8 -0
  48. package/dist/esm/react-server.js +10 -0
  49. package/dist/esm/router/cli/code/templates.js +3 -3
  50. package/dist/esm/router/cli/handler.js +1 -0
  51. package/dist/esm/router/runtime/plugin.node.js +1 -2
  52. package/dist/esm/router/runtime/utils.js +4 -6
  53. package/dist/esm-node/cache/index.js +1 -0
  54. package/dist/esm-node/cli/code.js +1 -0
  55. package/dist/esm-node/cli/ssr/index.js +1 -1
  56. package/dist/esm-node/cli/template.js +7 -3
  57. package/dist/esm-node/core/browser/index.js +1 -3
  58. package/dist/esm-node/core/compat/requestContext.js +23 -0
  59. package/dist/esm-node/core/compatible.js +2 -14
  60. package/dist/esm-node/core/context/index.js +5 -0
  61. package/dist/esm-node/core/context/monitors/default.js +14 -0
  62. package/dist/esm-node/core/context/monitors/index.js +7 -0
  63. package/dist/esm-node/core/context/monitors/index.server.js +9 -0
  64. package/dist/esm-node/core/context/request/index.js +6 -0
  65. package/dist/esm-node/core/context/request/index.server.js +8 -0
  66. package/dist/esm-node/core/context/response/index.js +16 -0
  67. package/dist/esm-node/core/context/response/index.server.js +35 -0
  68. package/dist/esm-node/core/plugin/index.js +2 -0
  69. package/dist/esm-node/core/server/requestHandler.js +83 -73
  70. package/dist/esm-node/core/server/stream/shared.js +40 -45
  71. package/dist/esm-node/core/server/string/index.js +50 -55
  72. package/dist/esm-node/core/server/string/prefetch.js +47 -52
  73. package/dist/esm-node/index.js +8 -0
  74. package/dist/esm-node/react-server.js +10 -0
  75. package/dist/esm-node/router/cli/code/templates.js +3 -1
  76. package/dist/esm-node/router/cli/handler.js +1 -0
  77. package/dist/esm-node/router/runtime/plugin.node.js +1 -2
  78. package/dist/esm-node/router/runtime/utils.js +4 -6
  79. package/dist/types/cache/index.d.ts +1 -0
  80. package/dist/types/cli/template.d.ts +2 -1
  81. package/dist/types/core/compat/requestContext.d.ts +27 -0
  82. package/dist/types/core/compatible.d.ts +2 -2
  83. package/dist/types/core/config.d.ts +1 -1
  84. package/dist/types/core/context/index.d.ts +2 -0
  85. package/dist/types/core/context/monitors/default.d.ts +2 -0
  86. package/dist/types/core/context/monitors/index.d.ts +1 -0
  87. package/dist/types/core/context/monitors/index.server.d.ts +2 -0
  88. package/dist/types/core/context/request/index.d.ts +1 -0
  89. package/dist/types/core/context/request/index.server.d.ts +1 -0
  90. package/dist/types/core/context/response/index.d.ts +4 -0
  91. package/dist/types/core/context/response/index.server.d.ts +7 -0
  92. package/dist/types/core/context/runtime.d.ts +1 -0
  93. package/dist/types/core/types.d.ts +4 -17
  94. package/dist/types/index.d.ts +3 -0
  95. package/dist/types/react-server.d.ts +3 -0
  96. package/dist/types/router/cli/code/templates.d.ts +2 -1
  97. package/dist/types/router/runtime/utils.d.ts +3 -5
  98. package/package.json +22 -12
@@ -21,6 +21,7 @@ __export(requestHandler_exports, {
21
21
  createRequestHandler: () => createRequestHandler
22
22
  });
23
23
  module.exports = __toCommonJS(requestHandler_exports);
24
+ var import_node = require("@modern-js/runtime-utils/node");
24
25
  var import_request = require("@modern-js/runtime-utils/universal/request");
25
26
  var import_context = require("../context");
26
27
  var import_runtime = require("../context/runtime");
@@ -67,6 +68,7 @@ function createSSRContext(request, options) {
67
68
  params,
68
69
  headers: headersData,
69
70
  host,
71
+ referer: headers.get("referer"),
70
72
  raw: request
71
73
  },
72
74
  response: {
@@ -74,7 +76,7 @@ function createSSRContext(request, options) {
74
76
  responseProxy.headers[key] = value;
75
77
  },
76
78
  status(code) {
77
- responseProxy.code = code;
79
+ responseProxy.status = code;
78
80
  },
79
81
  locals: locals || {}
80
82
  },
@@ -87,85 +89,93 @@ function createSSRContext(request, options) {
87
89
  }
88
90
  const createRequestHandler = async (handleRequest, createRequestOptions) => {
89
91
  const requestHandler = async (request, options) => {
90
- var _context_routerContext, _context_routerContext1, _context_routerContext2;
91
- const Root = (0, import_react.createRoot)();
92
- const internalRuntimeContext = (0, import_context.getGlobalInternalRuntimeContext)();
93
- const hooks = internalRuntimeContext.hooks;
94
- const { routeManifest } = options.resource;
95
- const context = (0, import_runtime.getInitialContext)(false, routeManifest);
96
- const runBeforeRender = async (context2) => {
97
- const result = await hooks.onBeforeRender.call(context2);
98
- if (typeof Response !== "undefined" && result instanceof Response) {
99
- return result;
100
- }
101
- const init = (0, import_context.getGlobalAppInit)();
102
- return init === null || init === void 0 ? void 0 : init(context2);
103
- };
92
+ const headersData = (0, import_request.parseHeaders)(request);
104
93
  const responseProxy = {
105
94
  headers: {},
106
- code: -1
95
+ status: -1
107
96
  };
108
- const ssrContext = createSSRContext(request, {
109
- ...options,
97
+ return import_node.storage.run({
98
+ headers: headersData,
99
+ request,
100
+ monitors: options.monitors,
110
101
  responseProxy
111
- });
112
- Object.assign(context, {
113
- ssrContext,
114
- isBrowser: false,
115
- loaderManager: (0, import_loaderManager.createLoaderManager)({}, {
116
- skipNonStatic: options.staticGenerate,
117
- // if not static generate, only non-static loader can exec on prod env
118
- skipStatic: process.env.NODE_ENV === "production" && !options.staticGenerate
119
- })
120
- });
121
- const getRedirectResponse = (result) => {
122
- if (typeof Response !== "undefined" && // fix: ssg workflow doesn't inject Web Response
123
- result instanceof Response && result.status >= 300 && result.status <= 399) {
124
- const { status } = result;
125
- const redirectUrl = result.headers.get("Location") || "/";
126
- const { ssrContext: ssrContext2 } = context;
127
- if (ssrContext2) {
128
- return new Response(null, {
129
- status,
130
- headers: {
131
- Location: redirectUrl
132
- }
133
- });
102
+ }, async () => {
103
+ var _context_routerContext, _context_routerContext1, _context_routerContext2;
104
+ const Root = (0, import_react.createRoot)();
105
+ const internalRuntimeContext = (0, import_context.getGlobalInternalRuntimeContext)();
106
+ const hooks = internalRuntimeContext.hooks;
107
+ const { routeManifest } = options.resource;
108
+ const context = (0, import_runtime.getInitialContext)(false, routeManifest);
109
+ const runBeforeRender = async (context2) => {
110
+ const result = await hooks.onBeforeRender.call(context2);
111
+ if (typeof Response !== "undefined" && result instanceof Response) {
112
+ return result;
113
+ }
114
+ const init = (0, import_context.getGlobalAppInit)();
115
+ return init === null || init === void 0 ? void 0 : init(context2);
116
+ };
117
+ const ssrContext = createSSRContext(request, {
118
+ ...options,
119
+ responseProxy
120
+ });
121
+ Object.assign(context, {
122
+ ssrContext,
123
+ isBrowser: false,
124
+ loaderManager: (0, import_loaderManager.createLoaderManager)({}, {
125
+ skipNonStatic: options.staticGenerate,
126
+ // if not static generate, only non-static loader can exec on prod env
127
+ skipStatic: process.env.NODE_ENV === "production" && !options.staticGenerate
128
+ })
129
+ });
130
+ const getRedirectResponse = (result) => {
131
+ if (typeof Response !== "undefined" && // fix: ssg workflow doesn't inject Web Response
132
+ result instanceof Response && result.status >= 300 && result.status <= 399) {
133
+ const { status } = result;
134
+ const redirectUrl = result.headers.get("Location") || "/";
135
+ const { ssrContext: ssrContext2 } = context;
136
+ if (ssrContext2) {
137
+ return new Response(null, {
138
+ status,
139
+ headers: {
140
+ Location: redirectUrl
141
+ }
142
+ });
143
+ }
134
144
  }
145
+ return void 0;
146
+ };
147
+ const initialData = await runBeforeRender(context);
148
+ if (((_context_routerContext = context.routerContext) === null || _context_routerContext === void 0 ? void 0 : _context_routerContext.statusCode) && ((_context_routerContext1 = context.routerContext) === null || _context_routerContext1 === void 0 ? void 0 : _context_routerContext1.statusCode) !== 200) {
149
+ var _context_routerContext3, _context_ssrContext;
150
+ (_context_ssrContext = context.ssrContext) === null || _context_ssrContext === void 0 ? void 0 : _context_ssrContext.response.status((_context_routerContext3 = context.routerContext) === null || _context_routerContext3 === void 0 ? void 0 : _context_routerContext3.statusCode);
135
151
  }
136
- return void 0;
137
- };
138
- const initialData = await runBeforeRender(context);
139
- if (((_context_routerContext = context.routerContext) === null || _context_routerContext === void 0 ? void 0 : _context_routerContext.statusCode) && ((_context_routerContext1 = context.routerContext) === null || _context_routerContext1 === void 0 ? void 0 : _context_routerContext1.statusCode) !== 200) {
140
- var _context_routerContext3, _context_ssrContext;
141
- (_context_ssrContext = context.ssrContext) === null || _context_ssrContext === void 0 ? void 0 : _context_ssrContext.response.status((_context_routerContext3 = context.routerContext) === null || _context_routerContext3 === void 0 ? void 0 : _context_routerContext3.statusCode);
142
- }
143
- const errors = Object.values(((_context_routerContext2 = context.routerContext) === null || _context_routerContext2 === void 0 ? void 0 : _context_routerContext2.errors) || {});
144
- if (errors.length > 0) {
145
- options.onError(errors[0], import_tracer.SSRErrors.LOADER_ERROR);
146
- }
147
- context.initialData = initialData;
148
- const redirectResponse = getRedirectResponse(initialData);
149
- if (redirectResponse) {
150
- return redirectResponse;
151
- }
152
- const { htmlTemplate } = options.resource;
153
- options.resource.htmlTemplate = htmlTemplate.replace("</head>", `${import_constants.CHUNK_CSS_PLACEHOLDER}</head>`);
154
- const response = await handleRequest(request, Root, {
155
- ...options,
156
- runtimeContext: context,
157
- RSCRoot: (createRequestOptions === null || createRequestOptions === void 0 ? void 0 : createRequestOptions.enableRsc) && (0, import_context.getGlobalRSCRoot)()
158
- });
159
- Object.entries(responseProxy.headers).forEach(([key, value]) => {
160
- response.headers.set(key, value);
161
- });
162
- if (responseProxy.code !== -1) {
163
- return new Response(response.body, {
164
- status: responseProxy.code,
165
- headers: response.headers
152
+ const errors = Object.values(((_context_routerContext2 = context.routerContext) === null || _context_routerContext2 === void 0 ? void 0 : _context_routerContext2.errors) || {});
153
+ if (errors.length > 0) {
154
+ options.onError(errors[0], import_tracer.SSRErrors.LOADER_ERROR);
155
+ }
156
+ context.initialData = initialData;
157
+ const redirectResponse = getRedirectResponse(initialData);
158
+ if (redirectResponse) {
159
+ return redirectResponse;
160
+ }
161
+ const { htmlTemplate } = options.resource;
162
+ options.resource.htmlTemplate = htmlTemplate.replace("</head>", `${import_constants.CHUNK_CSS_PLACEHOLDER}</head>`);
163
+ const response = await handleRequest(request, Root, {
164
+ ...options,
165
+ runtimeContext: context,
166
+ RSCRoot: (createRequestOptions === null || createRequestOptions === void 0 ? void 0 : createRequestOptions.enableRsc) && (0, import_context.getGlobalRSCRoot)()
167
+ });
168
+ Object.entries(responseProxy.headers).forEach(([key, value]) => {
169
+ response.headers.set(key, value);
166
170
  });
167
- }
168
- return response;
171
+ if (responseProxy.status !== -1) {
172
+ return new Response(response.body, {
173
+ status: responseProxy.status,
174
+ headers: response.headers
175
+ });
176
+ }
177
+ return response;
178
+ });
169
179
  };
170
180
  return requestHandler;
171
181
  };
@@ -25,9 +25,7 @@ __export(shared_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(shared_exports);
27
27
  var import_jsx_runtime = require("react/jsx-runtime");
28
- var import_node = require("@modern-js/runtime-utils/node");
29
28
  var import_time = require("@modern-js/runtime-utils/time");
30
- var import_request = require("@modern-js/runtime-utils/universal/request");
31
29
  var import_wrapper = require("../../react/wrapper");
32
30
  var import_tracer = require("../tracer");
33
31
  var import_utils = require("../utils");
@@ -58,51 +56,48 @@ function getReadableStreamFromString(content) {
58
56
  function createRenderStreaming(createReadableStreamPromise) {
59
57
  return async (request, serverRoot, options) => {
60
58
  const createReadableStreamFromElement = await createReadableStreamPromise;
61
- const headersData = (0, import_request.parseHeaders)(request);
62
- return (0, import_node.run)(headersData, async () => {
63
- const end = (0, import_time.time)();
64
- const { runtimeContext, config, resource } = options;
65
- const { onError, onTiming } = options;
66
- const { htmlTemplate, entryName } = resource;
67
- const ssrConfig = (0, import_utils.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
68
- const RSCServerRoot = ({ children }) => {
69
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
70
- children
71
- });
72
- };
73
- let rootElement = (0, import_wrapper.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
74
- ssr: true
75
- }));
76
- rootElement = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RSCServerRoot, {
77
- children: rootElement
59
+ const end = (0, import_time.time)();
60
+ const { runtimeContext, config, resource } = options;
61
+ const { onError, onTiming } = options;
62
+ const { htmlTemplate, entryName } = resource;
63
+ const ssrConfig = (0, import_utils.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
64
+ const RSCServerRoot = ({ children }) => {
65
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {
66
+ children
78
67
  });
79
- const stream = await createReadableStreamFromElement(request, rootElement, {
80
- config,
81
- htmlTemplate,
82
- runtimeContext,
83
- ssrConfig,
84
- entryName,
85
- rscClientManifest: options.rscClientManifest,
86
- rscSSRManifest: options.rscSSRManifest,
87
- rscServerManifest: options.rscServerManifest,
88
- rscRoot: options.rscRoot,
89
- onShellReady() {
90
- const cost = end();
91
- onTiming(import_tracer.SSRTimings.RENDER_SHELL, cost);
92
- },
93
- onAllReady() {
94
- const cost = end();
95
- onTiming(import_tracer.SSRTimings.RENDER_HTML, cost);
96
- },
97
- onShellError(error) {
98
- onError(error, import_tracer.SSRErrors.RENDER_SHELL);
99
- },
100
- onError(error) {
101
- onError(error, import_tracer.SSRErrors.RENDER_STREAM);
102
- }
103
- });
104
- return stream;
68
+ };
69
+ let rootElement = (0, import_wrapper.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
70
+ ssr: true
71
+ }));
72
+ rootElement = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RSCServerRoot, {
73
+ children: rootElement
74
+ });
75
+ const stream = await createReadableStreamFromElement(request, rootElement, {
76
+ config,
77
+ htmlTemplate,
78
+ runtimeContext,
79
+ ssrConfig,
80
+ entryName,
81
+ rscClientManifest: options.rscClientManifest,
82
+ rscSSRManifest: options.rscSSRManifest,
83
+ rscServerManifest: options.rscServerManifest,
84
+ rscRoot: options.rscRoot,
85
+ onShellReady() {
86
+ const cost = end();
87
+ onTiming(import_tracer.SSRTimings.RENDER_SHELL, cost);
88
+ },
89
+ onAllReady() {
90
+ const cost = end();
91
+ onTiming(import_tracer.SSRTimings.RENDER_HTML, cost);
92
+ },
93
+ onShellError(error) {
94
+ onError(error, import_tracer.SSRErrors.RENDER_SHELL);
95
+ },
96
+ onError(error) {
97
+ onError(error, import_tracer.SSRErrors.RENDER_STREAM);
98
+ }
105
99
  });
100
+ return stream;
106
101
  };
107
102
  }
108
103
  // Annotate the CommonJS export names for ESM import in node:
@@ -31,9 +31,7 @@ __export(string_exports, {
31
31
  renderString: () => renderString
32
32
  });
33
33
  module.exports = __toCommonJS(string_exports);
34
- var import_node = require("@modern-js/runtime-utils/node");
35
34
  var import_time = require("@modern-js/runtime-utils/time");
36
- var import_request = require("@modern-js/runtime-utils/universal/request");
37
35
  var import_server = __toESM(require("react-dom/server"));
38
36
  var import_react_helmet = __toESM(require("react-helmet"));
39
37
  var import_constants = require("../../constants");
@@ -48,59 +46,56 @@ var import_prefetch = require("./prefetch");
48
46
  var import_ssrData = require("./ssrData");
49
47
  var import_styledComponent = require("./styledComponent");
50
48
  const renderString = async (request, serverRoot, options) => {
51
- const headersData = (0, import_request.parseHeaders)(request);
52
- return (0, import_node.run)(headersData, async () => {
53
- var _runtimeContext_ssrContext;
54
- const { resource, runtimeContext, config, onError, onTiming } = options;
55
- const tracer = {
56
- onError,
57
- onTiming
58
- };
59
- const routerContext = runtimeContext.routerContext;
60
- const { htmlTemplate, entryName, loadableStats, routeManifest } = resource;
61
- const ssrConfig = (0, import_utils.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
62
- const chunkSet = {
63
- renderLevel: import_constants.RenderLevel.CLIENT_RENDER,
64
- ssrScripts: "",
65
- jsChunk: "",
66
- cssChunk: ""
67
- };
68
- let prefetchData = {};
69
- try {
70
- prefetchData = await (0, import_prefetch.prefetch)(serverRoot, request, options, ssrConfig, tracer);
71
- chunkSet.renderLevel = import_constants.RenderLevel.SERVER_PREFETCH;
72
- } catch (e) {
73
- chunkSet.renderLevel = import_constants.RenderLevel.CLIENT_RENDER;
74
- tracer.onError(e, import_tracer.SSRErrors.PRERENDER);
75
- }
76
- const collectors = [
77
- new import_styledComponent.StyledCollector(chunkSet),
78
- new import_loadable.LoadableCollector({
79
- stats: loadableStats,
80
- nonce: config.nonce,
81
- routeManifest,
82
- template: htmlTemplate,
83
- entryName,
84
- chunkSet,
85
- config
86
- }),
87
- new import_ssrData.SSRDataCollector({
88
- request,
89
- prefetchData,
90
- ssrConfig,
91
- ssrContext: runtimeContext.ssrContext,
92
- chunkSet,
93
- routerContext,
94
- nonce: config.nonce,
95
- useJsonScript: config.useJsonScript
96
- })
97
- ];
98
- const rootElement = (0, import_wrapper.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
99
- ssr: true
100
- }));
101
- const html = await generateHtml(rootElement, htmlTemplate, chunkSet, collectors, ((_runtimeContext_ssrContext = runtimeContext.ssrContext) === null || _runtimeContext_ssrContext === void 0 ? void 0 : _runtimeContext_ssrContext.htmlModifiers) || [], tracer);
102
- return html;
103
- });
49
+ var _runtimeContext_ssrContext;
50
+ const { resource, runtimeContext, config, onError, onTiming } = options;
51
+ const tracer = {
52
+ onError,
53
+ onTiming
54
+ };
55
+ const routerContext = runtimeContext.routerContext;
56
+ const { htmlTemplate, entryName, loadableStats, routeManifest } = resource;
57
+ const ssrConfig = (0, import_utils.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
58
+ const chunkSet = {
59
+ renderLevel: import_constants.RenderLevel.CLIENT_RENDER,
60
+ ssrScripts: "",
61
+ jsChunk: "",
62
+ cssChunk: ""
63
+ };
64
+ let prefetchData = {};
65
+ try {
66
+ prefetchData = await (0, import_prefetch.prefetch)(serverRoot, request, options, ssrConfig, tracer);
67
+ chunkSet.renderLevel = import_constants.RenderLevel.SERVER_PREFETCH;
68
+ } catch (e) {
69
+ chunkSet.renderLevel = import_constants.RenderLevel.CLIENT_RENDER;
70
+ tracer.onError(e, import_tracer.SSRErrors.PRERENDER);
71
+ }
72
+ const collectors = [
73
+ new import_styledComponent.StyledCollector(chunkSet),
74
+ new import_loadable.LoadableCollector({
75
+ stats: loadableStats,
76
+ nonce: config.nonce,
77
+ routeManifest,
78
+ template: htmlTemplate,
79
+ entryName,
80
+ chunkSet,
81
+ config
82
+ }),
83
+ new import_ssrData.SSRDataCollector({
84
+ request,
85
+ prefetchData,
86
+ ssrConfig,
87
+ ssrContext: runtimeContext.ssrContext,
88
+ chunkSet,
89
+ routerContext,
90
+ nonce: config.nonce,
91
+ useJsonScript: config.useJsonScript
92
+ })
93
+ ];
94
+ const rootElement = (0, import_wrapper.wrapRuntimeContextProvider)(serverRoot, Object.assign(runtimeContext, {
95
+ ssr: true
96
+ }));
97
+ const html = await generateHtml(rootElement, htmlTemplate, chunkSet, collectors, ((_runtimeContext_ssrContext = runtimeContext.ssrContext) === null || _runtimeContext_ssrContext === void 0 ? void 0 : _runtimeContext_ssrContext.htmlModifiers) || [], tracer);
98
+ return html;
104
99
  };
105
100
  async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifiers, { onError, onTiming }) {
106
101
  let html = "";
@@ -22,75 +22,70 @@ __export(prefetch_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(prefetch_exports);
24
24
  var import_server = require("@loadable/server");
25
- var import_node = require("@modern-js/runtime-utils/node");
26
25
  var import_time = require("@modern-js/runtime-utils/time");
27
- var import_request = require("@modern-js/runtime-utils/universal/request");
28
26
  var import_server2 = require("react-dom/server");
29
27
  var import_wrapper = require("../../react/wrapper");
30
28
  var import_tracer = require("../tracer");
31
29
  const prefetch = async (App, request, options, ssrConfig, { onError, onTiming }) => {
32
- const headersData = (0, import_request.parseHeaders)(request);
30
+ var _context_store;
33
31
  const { runtimeContext: context, resource } = options;
34
32
  const { entryName, loadableStats } = resource;
35
- return (0, import_node.run)(headersData, async () => {
36
- var _context_store;
37
- if (typeof ssrConfig === "boolean" || !ssrConfig.disablePrerender) {
38
- try {
39
- const end = (0, import_time.time)();
40
- if (loadableStats) {
41
- const extractor = new import_server.ChunkExtractor({
42
- stats: loadableStats,
43
- entrypoints: [
44
- entryName
45
- ].filter(Boolean)
46
- });
47
- (0, import_server2.renderToStaticMarkup)(extractor.collectChunks((0, import_wrapper.wrapRuntimeContextProvider)(App, Object.assign(context, {
48
- ssr: false
49
- }))));
50
- } else {
51
- (0, import_server2.renderToStaticMarkup)((0, import_wrapper.wrapRuntimeContextProvider)(App, Object.assign(context, {
52
- ssr: false
53
- })));
54
- }
55
- const cost = end();
56
- onTiming(import_tracer.SSRTimings.PRERENDER, cost);
57
- } catch (e) {
58
- const error = e;
59
- onError(error, import_tracer.SSRErrors.PRERENDER);
60
- throw e;
61
- }
62
- }
63
- if (!context.loaderManager.hasPendingLoaders()) {
64
- return {
65
- initialData: context.initialData,
66
- i18nData: context.__i18nData__
67
- };
68
- }
69
- let loadersData = {};
33
+ if (typeof ssrConfig === "boolean" || !ssrConfig.disablePrerender) {
70
34
  try {
71
35
  const end = (0, import_time.time)();
72
- loadersData = await context.loaderManager.awaitPendingLoaders();
36
+ if (loadableStats) {
37
+ const extractor = new import_server.ChunkExtractor({
38
+ stats: loadableStats,
39
+ entrypoints: [
40
+ entryName
41
+ ].filter(Boolean)
42
+ });
43
+ (0, import_server2.renderToStaticMarkup)(extractor.collectChunks((0, import_wrapper.wrapRuntimeContextProvider)(App, Object.assign(context, {
44
+ ssr: false
45
+ }))));
46
+ } else {
47
+ (0, import_server2.renderToStaticMarkup)((0, import_wrapper.wrapRuntimeContextProvider)(App, Object.assign(context, {
48
+ ssr: false
49
+ })));
50
+ }
73
51
  const cost = end();
74
- onTiming(import_tracer.SSRTimings.USE_LOADER, cost);
52
+ onTiming(import_tracer.SSRTimings.PRERENDER, cost);
75
53
  } catch (e) {
76
- onError(e, import_tracer.SSRErrors.USE_LOADER);
54
+ const error = e;
55
+ onError(error, import_tracer.SSRErrors.PRERENDER);
77
56
  throw e;
78
57
  }
79
- Object.keys(loadersData).forEach((id) => {
80
- const data = loadersData[id];
81
- if (data._error) {
82
- onError(data._error, import_tracer.SSRErrors.USE_LOADER);
83
- delete data._error;
84
- }
85
- });
58
+ }
59
+ if (!context.loaderManager.hasPendingLoaders()) {
86
60
  return {
87
- loadersData,
88
61
  initialData: context.initialData,
89
- i18nData: context.__i18nData__,
90
- // todo: move to plugin state
91
- storeState: context === null || context === void 0 ? void 0 : (_context_store = context.store) === null || _context_store === void 0 ? void 0 : _context_store.getState()
62
+ i18nData: context.__i18nData__
92
63
  };
64
+ }
65
+ let loadersData = {};
66
+ try {
67
+ const end = (0, import_time.time)();
68
+ loadersData = await context.loaderManager.awaitPendingLoaders();
69
+ const cost = end();
70
+ onTiming(import_tracer.SSRTimings.USE_LOADER, cost);
71
+ } catch (e) {
72
+ onError(e, import_tracer.SSRErrors.USE_LOADER);
73
+ throw e;
74
+ }
75
+ Object.keys(loadersData).forEach((id) => {
76
+ const data = loadersData[id];
77
+ if (data._error) {
78
+ onError(data._error, import_tracer.SSRErrors.USE_LOADER);
79
+ delete data._error;
80
+ }
93
81
  });
82
+ return {
83
+ loadersData,
84
+ initialData: context.initialData,
85
+ i18nData: context.__i18nData__,
86
+ // todo: move to plugin state
87
+ storeState: context === null || context === void 0 ? void 0 : (_context_store = context.store) === null || _context_store === void 0 ? void 0 : _context_store.getState()
88
+ };
94
89
  };
95
90
  // Annotate the CommonJS export names for ESM import in node:
96
91
  0 && (module.exports = {
package/dist/cjs/index.js CHANGED
@@ -23,12 +23,20 @@ __export(src_exports, {
23
23
  createApp: () => import_core.createApp,
24
24
  defineConfig: () => import_core.defineConfig,
25
25
  defineRuntimeConfig: () => import_core.defineRuntimeConfig,
26
+ getMonitors: () => import_monitors.getMonitors,
27
+ getRequest: () => import_request.getRequest,
26
28
  isBrowser: () => import_common.isBrowser,
29
+ redirect: () => import_response.redirect,
30
+ setHeaders: () => import_response.setHeaders,
31
+ setStatus: () => import_response.setStatus,
27
32
  useLoader: () => import_core.useLoader,
28
33
  useRuntimeContext: () => import_core.useRuntimeContext
29
34
  });
30
35
  module.exports = __toCommonJS(src_exports);
31
36
  var import_common = require("./common");
37
+ var import_monitors = require("./core/context/monitors");
38
+ var import_request = require("./core/context/request");
39
+ var import_response = require("./core/context/response");
32
40
  var import_core = require("./core");
33
41
  // Annotate the CommonJS export names for ESM import in node:
34
42
  0 && (module.exports = {
@@ -37,7 +45,12 @@ var import_core = require("./core");
37
45
  createApp,
38
46
  defineConfig,
39
47
  defineRuntimeConfig,
48
+ getMonitors,
49
+ getRequest,
40
50
  isBrowser,
51
+ redirect,
52
+ setHeaders,
53
+ setStatus,
41
54
  useLoader,
42
55
  useRuntimeContext
43
56
  });
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var react_server_exports = {};
20
+ __export(react_server_exports, {
21
+ getMonitors: () => import_monitors.getMonitors,
22
+ getRequest: () => import_request.getRequest,
23
+ redirect: () => import_response.redirect,
24
+ setHeaders: () => import_response.setHeaders,
25
+ setStatus: () => import_response.setStatus
26
+ });
27
+ module.exports = __toCommonJS(react_server_exports);
28
+ var import_request = require("./core/context/request");
29
+ var import_monitors = require("./core/context/monitors");
30
+ var import_response = require("./core/context/response");
31
+ // Annotate the CommonJS export names for ESM import in node:
32
+ 0 && (module.exports = {
33
+ getMonitors,
34
+ getRequest,
35
+ redirect,
36
+ setHeaders,
37
+ setStatus
38
+ });
@@ -398,7 +398,7 @@ function ssrLoaderCombinedModule(entrypoints, entrypoint, config, appContext) {
398
398
  }
399
399
  return null;
400
400
  }
401
- const runtimeGlobalContext = async ({ metaName, srcDirectory, nestedRoutesEntry, internalSrcAlias, globalApp }) => {
401
+ const runtimeGlobalContext = async ({ entryName, metaName, srcDirectory, nestedRoutesEntry, internalSrcAlias, globalApp }) => {
402
402
  const imports = [
403
403
  `import { setGlobalContext } from '@${metaName}/runtime/context';`
404
404
  ];
@@ -444,7 +444,9 @@ const runtimeGlobalContext = async ({ metaName, srcDirectory, nestedRoutesEntry,
444
444
 
445
445
  import { routes } from './routes';
446
446
 
447
+ const entryName = '${entryName}';
447
448
  setGlobalContext({
449
+ entryName,
448
450
  layoutApp,
449
451
  routes,
450
452
  appInit,
@@ -54,6 +54,7 @@ async function handleGeneratorEntryCode(api, entrypoints) {
54
54
  if (entrypoint.nestedRoutesEntry || entrypoint.pageRoutesEntry) {
55
55
  var _entrypoint_fileSystemRoutes;
56
56
  generatorRegisterCode(internalDirectory, entrypoint.entryName, await templates.runtimeGlobalContext({
57
+ entryName: entrypoint.entryName,
57
58
  metaName: appContext.metaName,
58
59
  srcDirectory: appContext.srcDirectory,
59
60
  nestedRoutesEntry: entrypoint.nestedRoutesEntry,
@@ -91,8 +91,7 @@ const routerPlugin = (userConfig = {}) => {
91
91
  ssrMode,
92
92
  props: {
93
93
  nonce
94
- },
95
- reporter
94
+ }
96
95
  }));
97
96
  routes = hooks.modifyRoutes.call(routes);
98
97
  const { query } = (0, import_remix_router.createStaticHandler)(routes, {