@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.
- package/dist/cjs/cache/index.js +22 -0
- package/dist/cjs/cli/code.js +1 -0
- package/dist/cjs/cli/ssr/index.js +1 -1
- package/dist/cjs/cli/template.js +7 -3
- package/dist/cjs/core/browser/index.js +1 -3
- package/dist/cjs/core/compat/requestContext.js +48 -0
- package/dist/cjs/core/compatible.js +2 -14
- package/dist/cjs/core/context/index.js +6 -0
- package/dist/cjs/core/context/monitors/default.js +38 -0
- package/dist/cjs/core/context/monitors/index.js +31 -0
- package/dist/cjs/core/context/monitors/index.server.js +33 -0
- package/dist/cjs/core/context/request/index.js +30 -0
- package/dist/cjs/core/context/request/index.server.js +32 -0
- package/dist/cjs/core/context/response/index.js +43 -0
- package/dist/cjs/core/context/response/index.server.js +62 -0
- package/dist/cjs/core/plugin/index.js +2 -0
- package/dist/cjs/core/server/requestHandler.js +83 -73
- package/dist/cjs/core/server/stream/shared.js +40 -45
- package/dist/cjs/core/server/string/index.js +50 -55
- package/dist/cjs/core/server/string/prefetch.js +47 -52
- package/dist/cjs/index.js +13 -0
- package/dist/cjs/react-server.js +38 -0
- package/dist/cjs/router/cli/code/templates.js +3 -1
- package/dist/cjs/router/cli/handler.js +1 -0
- package/dist/cjs/router/runtime/plugin.node.js +1 -2
- package/dist/cjs/router/runtime/utils.js +4 -6
- package/dist/esm/cache/index.js +1 -0
- package/dist/esm/cli/code.js +1 -0
- package/dist/esm/cli/ssr/index.js +1 -1
- package/dist/esm/cli/template.js +4 -4
- package/dist/esm/core/browser/index.js +3 -4
- package/dist/esm/core/compat/requestContext.js +25 -0
- package/dist/esm/core/compatible.js +5 -16
- package/dist/esm/core/context/index.js +5 -0
- package/dist/esm/core/context/monitors/default.js +20 -0
- package/dist/esm/core/context/monitors/index.js +7 -0
- package/dist/esm/core/context/monitors/index.server.js +9 -0
- package/dist/esm/core/context/request/index.js +6 -0
- package/dist/esm/core/context/request/index.server.js +8 -0
- package/dist/esm/core/context/response/index.js +16 -0
- package/dist/esm/core/context/response/index.server.js +41 -0
- package/dist/esm/core/plugin/index.js +3 -1
- package/dist/esm/core/server/requestHandler.js +134 -118
- package/dist/esm/core/server/stream/shared.js +49 -63
- package/dist/esm/core/server/string/index.js +82 -93
- package/dist/esm/core/server/string/prefetch.js +83 -94
- package/dist/esm/index.js +8 -0
- package/dist/esm/react-server.js +10 -0
- package/dist/esm/router/cli/code/templates.js +3 -3
- package/dist/esm/router/cli/handler.js +1 -0
- package/dist/esm/router/runtime/plugin.node.js +1 -2
- package/dist/esm/router/runtime/utils.js +4 -6
- package/dist/esm-node/cache/index.js +1 -0
- package/dist/esm-node/cli/code.js +1 -0
- package/dist/esm-node/cli/ssr/index.js +1 -1
- package/dist/esm-node/cli/template.js +7 -3
- package/dist/esm-node/core/browser/index.js +1 -3
- package/dist/esm-node/core/compat/requestContext.js +23 -0
- package/dist/esm-node/core/compatible.js +2 -14
- package/dist/esm-node/core/context/index.js +5 -0
- package/dist/esm-node/core/context/monitors/default.js +14 -0
- package/dist/esm-node/core/context/monitors/index.js +7 -0
- package/dist/esm-node/core/context/monitors/index.server.js +9 -0
- package/dist/esm-node/core/context/request/index.js +6 -0
- package/dist/esm-node/core/context/request/index.server.js +8 -0
- package/dist/esm-node/core/context/response/index.js +16 -0
- package/dist/esm-node/core/context/response/index.server.js +35 -0
- package/dist/esm-node/core/plugin/index.js +2 -0
- package/dist/esm-node/core/server/requestHandler.js +83 -73
- package/dist/esm-node/core/server/stream/shared.js +40 -45
- package/dist/esm-node/core/server/string/index.js +50 -55
- package/dist/esm-node/core/server/string/prefetch.js +47 -52
- package/dist/esm-node/index.js +8 -0
- package/dist/esm-node/react-server.js +10 -0
- package/dist/esm-node/router/cli/code/templates.js +3 -1
- package/dist/esm-node/router/cli/handler.js +1 -0
- package/dist/esm-node/router/runtime/plugin.node.js +1 -2
- package/dist/esm-node/router/runtime/utils.js +4 -6
- package/dist/types/cache/index.d.ts +1 -0
- package/dist/types/cli/template.d.ts +2 -1
- package/dist/types/core/compat/requestContext.d.ts +27 -0
- package/dist/types/core/compatible.d.ts +2 -2
- package/dist/types/core/config.d.ts +1 -1
- package/dist/types/core/context/index.d.ts +2 -0
- package/dist/types/core/context/monitors/default.d.ts +2 -0
- package/dist/types/core/context/monitors/index.d.ts +1 -0
- package/dist/types/core/context/monitors/index.server.d.ts +2 -0
- package/dist/types/core/context/request/index.d.ts +1 -0
- package/dist/types/core/context/request/index.server.d.ts +1 -0
- package/dist/types/core/context/response/index.d.ts +4 -0
- package/dist/types/core/context/response/index.server.d.ts +7 -0
- package/dist/types/core/context/runtime.d.ts +1 -0
- package/dist/types/core/types.d.ts +4 -17
- package/dist/types/index.d.ts +3 -0
- package/dist/types/react-server.d.ts +3 -0
- package/dist/types/router/cli/code/templates.d.ts +2 -1
- package/dist/types/router/runtime/utils.d.ts +3 -5
- 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.
|
|
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
|
-
|
|
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
|
-
|
|
95
|
+
status: -1
|
|
107
96
|
};
|
|
108
|
-
|
|
109
|
-
|
|
97
|
+
return import_node.storage.run({
|
|
98
|
+
headers: headersData,
|
|
99
|
+
request,
|
|
100
|
+
monitors: options.monitors,
|
|
110
101
|
responseProxy
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
options.
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
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
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
30
|
+
var _context_store;
|
|
33
31
|
const { runtimeContext: context, resource } = options;
|
|
34
32
|
const { entryName, loadableStats } = resource;
|
|
35
|
-
|
|
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
|
-
|
|
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.
|
|
52
|
+
onTiming(import_tracer.SSRTimings.PRERENDER, cost);
|
|
75
53
|
} catch (e) {
|
|
76
|
-
|
|
54
|
+
const error = e;
|
|
55
|
+
onError(error, import_tracer.SSRErrors.PRERENDER);
|
|
77
56
|
throw e;
|
|
78
57
|
}
|
|
79
|
-
|
|
80
|
-
|
|
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,
|