@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.
- package/dist/cjs/cli/code.js +9 -8
- package/dist/cjs/cli/template.js +46 -8
- package/dist/cjs/core/browser/index.js +4 -1
- package/dist/cjs/core/server/stream/createReadableStream.js +2 -0
- package/dist/cjs/core/server/string/index.js +4 -1
- package/dist/cjs/router/cli/code/index.js +1 -1
- package/dist/cjs/router/cli/code/utils.js +5 -5
- package/dist/cjs/router/runtime/PrefetchLink.js +1 -4
- package/dist/esm/cli/code.mjs +9 -8
- package/dist/esm/cli/index.mjs +2 -1
- package/dist/esm/cli/ssr/index.mjs +2 -1
- package/dist/esm/cli/ssr/loadable-bundler-plugin.mjs +1 -1
- package/dist/esm/cli/template.mjs +48 -10
- package/dist/esm/core/browser/index.mjs +4 -1
- package/dist/esm/core/constants.mjs +1 -1
- package/dist/esm/core/context/index.mjs +3 -3
- package/dist/esm/core/index.mjs +2 -3
- package/dist/esm/core/server/index.mjs +3 -2
- package/dist/esm/core/server/react/index.mjs +2 -3
- package/dist/esm/core/server/server.mjs +3 -4
- package/dist/esm/core/server/stream/createReadableStream.mjs +2 -0
- package/dist/esm/core/server/stream/shared.mjs +1 -1
- package/dist/esm/core/server/string/index.mjs +4 -1
- package/dist/esm/document/cli/index.mjs +2 -1
- package/dist/esm/exports/head.mjs +2 -1
- package/dist/esm/exports/loadable.mjs +2 -2
- package/dist/esm/index.mjs +5 -6
- package/dist/esm/internal.mjs +1 -2
- package/dist/esm/react-server.mjs +3 -4
- package/dist/esm/router/cli/code/getClientRoutes/index.mjs +1 -2
- package/dist/esm/router/cli/code/index.mjs +2 -2
- package/dist/esm/router/cli/code/utils.mjs +2 -2
- package/dist/esm/router/cli/index.mjs +2 -1
- package/dist/esm/router/internal.mjs +1 -2
- package/dist/esm/router/runtime/DeferredDataScripts.mjs +1 -1
- package/dist/esm/router/runtime/DeferredDataScripts.node.mjs +1 -1
- package/dist/esm/router/runtime/PrefetchLink.mjs +1 -5
- package/dist/esm/router/runtime/index.mjs +3 -3
- package/dist/esm/router/runtime/internal.mjs +3 -2
- package/dist/esm/router/runtime/plugin.mjs +1 -1
- package/dist/esm-node/cli/code.mjs +9 -8
- package/dist/esm-node/cli/index.mjs +2 -1
- package/dist/esm-node/cli/ssr/index.mjs +2 -1
- package/dist/esm-node/cli/ssr/loadable-bundler-plugin.mjs +1 -1
- package/dist/esm-node/cli/template.mjs +48 -10
- package/dist/esm-node/core/browser/index.mjs +4 -1
- package/dist/esm-node/core/constants.mjs +1 -1
- package/dist/esm-node/core/context/index.mjs +3 -3
- package/dist/esm-node/core/index.mjs +2 -3
- package/dist/esm-node/core/server/index.mjs +3 -2
- package/dist/esm-node/core/server/react/index.mjs +2 -3
- package/dist/esm-node/core/server/server.mjs +3 -4
- package/dist/esm-node/core/server/stream/createReadableStream.mjs +2 -0
- package/dist/esm-node/core/server/stream/shared.mjs +1 -1
- package/dist/esm-node/core/server/string/index.mjs +4 -1
- package/dist/esm-node/document/cli/index.mjs +2 -1
- package/dist/esm-node/exports/head.mjs +2 -1
- package/dist/esm-node/exports/loadable.mjs +2 -2
- package/dist/esm-node/index.mjs +5 -6
- package/dist/esm-node/internal.mjs +1 -2
- package/dist/esm-node/react-server.mjs +3 -4
- package/dist/esm-node/router/cli/code/getClientRoutes/index.mjs +1 -2
- package/dist/esm-node/router/cli/code/index.mjs +2 -2
- package/dist/esm-node/router/cli/code/utils.mjs +2 -2
- package/dist/esm-node/router/cli/index.mjs +2 -1
- package/dist/esm-node/router/internal.mjs +1 -2
- package/dist/esm-node/router/runtime/DeferredDataScripts.mjs +1 -1
- package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +1 -1
- package/dist/esm-node/router/runtime/PrefetchLink.mjs +1 -5
- package/dist/esm-node/router/runtime/index.mjs +3 -3
- package/dist/esm-node/router/runtime/internal.mjs +3 -2
- package/dist/esm-node/router/runtime/plugin.mjs +1 -1
- package/dist/types/cli/template.d.ts +2 -1
- package/dist/types/router/cli/code/utils.d.ts +1 -1
- package/package.json +11 -11
- package/{rstest.config.ts → rstest.config.mts} +0 -6
package/dist/cjs/cli/code.js
CHANGED
|
@@ -59,13 +59,7 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
|
|
|
59
59
|
nestedRoutesEntry
|
|
60
60
|
});
|
|
61
61
|
let indexCode = '';
|
|
62
|
-
indexCode =
|
|
63
|
-
metaName,
|
|
64
|
-
entryName,
|
|
65
|
-
mountId,
|
|
66
|
-
urlPath: serverRoutes.find((route)=>route.entryName === entryName)?.urlPath,
|
|
67
|
-
isNestedRouter: entrypoint.nestedRoutesEntry
|
|
68
|
-
}) : external_template_js_namespaceObject.index({
|
|
62
|
+
indexCode = ssrMode || !config.server.rsc || customEntry ? external_template_js_namespaceObject.index({
|
|
69
63
|
srcDirectory,
|
|
70
64
|
internalSrcAlias,
|
|
71
65
|
metaName,
|
|
@@ -75,6 +69,12 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
|
|
|
75
69
|
mountId,
|
|
76
70
|
enableRsc: config.server.rsc,
|
|
77
71
|
isNestedRouter: !!entrypoint.nestedRoutesEntry
|
|
72
|
+
}) : external_template_js_namespaceObject.entryForCSRWithRSC({
|
|
73
|
+
metaName,
|
|
74
|
+
entryName,
|
|
75
|
+
mountId,
|
|
76
|
+
urlPath: serverRoutes.find((route)=>route.entryName === entryName)?.urlPath,
|
|
77
|
+
isNestedRouter: entrypoint.nestedRoutesEntry
|
|
78
78
|
});
|
|
79
79
|
const indexFile = external_path_default().resolve(internalDirectory, `./${entryName}/${external_constants_js_namespaceObject.ENTRY_POINT_FILE_NAME}`);
|
|
80
80
|
await utils_namespaceObject.fs.outputFile(indexFile, indexCode, 'utf8');
|
|
@@ -141,7 +141,8 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
|
|
|
141
141
|
});
|
|
142
142
|
await utils_namespaceObject.fs.outputFile(AppProxyPath, appProxyCode);
|
|
143
143
|
contextCode = external_template_js_namespaceObject.runtimeGlobalContextForRSCClient({
|
|
144
|
-
metaName
|
|
144
|
+
metaName,
|
|
145
|
+
customEntry
|
|
145
146
|
});
|
|
146
147
|
const contextServerCode = external_template_js_namespaceObject.runtimeGlobalContextForRSCServer({
|
|
147
148
|
metaName
|
package/dist/cjs/cli/template.js
CHANGED
|
@@ -197,16 +197,54 @@ const runtimeGlobalContextForRSCServer = ({ metaName })=>`
|
|
|
197
197
|
App: DefaultRoot,
|
|
198
198
|
RSCRoot: AppProxy,
|
|
199
199
|
});`;
|
|
200
|
-
const runtimeGlobalContextForRSCClient = ({ metaName })=>`
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
const runtimeGlobalContextForRSCClient = ({ metaName, customEntry })=>`
|
|
201
|
+
${customEntry ? `import {
|
|
202
|
+
RscClientRoot,
|
|
203
|
+
createFromFetch,
|
|
204
|
+
createFromReadableStream,
|
|
205
|
+
isRedirectResponse,
|
|
206
|
+
rscStream,
|
|
207
|
+
callServer,
|
|
208
|
+
setServerCallback,
|
|
209
|
+
} from '@${metaName}/runtime/rsc/client';` : ''}
|
|
210
|
+
import { createElement, Fragment } from 'react';
|
|
211
|
+
import { setGlobalContext } from '@${metaName}/runtime/context';
|
|
203
212
|
|
|
204
|
-
|
|
205
|
-
createElement(Fragment, null, children);
|
|
213
|
+
${customEntry ? 'setServerCallback(callServer);' : ''}
|
|
206
214
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
215
|
+
${customEntry ? `const handleRedirectResponse = (res: Response) => {
|
|
216
|
+
const { headers } = res;
|
|
217
|
+
const location = headers.get('X-Modernjs-Redirect');
|
|
218
|
+
const baseUrl = headers.get('X-Modernjs-BaseUrl');
|
|
219
|
+
if (location) {
|
|
220
|
+
if (baseUrl && baseUrl !== '/') {
|
|
221
|
+
window.location.replace(baseUrl + location);
|
|
222
|
+
} else {
|
|
223
|
+
window.location.replace(location);
|
|
224
|
+
}
|
|
225
|
+
return res;
|
|
226
|
+
}
|
|
227
|
+
return res;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
const data = ${process.env.MODERN_DISABLE_INJECT_RSC_DATA ? `createFromFetch(
|
|
231
|
+
fetch(location.pathname, {
|
|
232
|
+
headers: {
|
|
233
|
+
'x-rsc-tree': 'true',
|
|
234
|
+
},
|
|
235
|
+
}).then(handleRedirectResponse),
|
|
236
|
+
)` : `createFromReadableStream(rscStream, {
|
|
237
|
+
callServer: callServer,
|
|
238
|
+
})`};` : ''}
|
|
239
|
+
|
|
240
|
+
const DefaultRoot = ({ children }: { children?: ReactNode }) =>
|
|
241
|
+
createElement(Fragment, null, children);
|
|
242
|
+
|
|
243
|
+
${customEntry ? 'const RSCRoot = () => createElement(RscClientRoot, { rscPayload: data });' : ''}
|
|
244
|
+
|
|
245
|
+
setGlobalContext({
|
|
246
|
+
App: ${customEntry ? 'RSCRoot' : 'DefaultRoot'}
|
|
247
|
+
});`;
|
|
210
248
|
const AppProxyForRSC = ({ srcDirectory, internalSrcAlias, entry, customEntry })=>`
|
|
211
249
|
import App from '${(0, utils_namespaceObject.formatImportPath)(customEntry ? entry.replace(/entry\.[tj]sx/, 'App').replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias).replace('.tsx', ''))}';
|
|
212
250
|
import React from 'react';
|
|
@@ -39,6 +39,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
39
39
|
renderWithReact18: ()=>renderWithReact18,
|
|
40
40
|
renderWithReact17: ()=>renderWithReact17
|
|
41
41
|
});
|
|
42
|
+
const constants_namespaceObject = require("@modern-js/utils/universal/constants");
|
|
42
43
|
const external_cookie_namespaceObject = require("cookie");
|
|
43
44
|
var external_cookie_default = /*#__PURE__*/ __webpack_require__.n(external_cookie_namespaceObject);
|
|
44
45
|
const index_js_namespaceObject = require("../context/index.js");
|
|
@@ -128,7 +129,9 @@ async function renderWithReact17(App, rootElement) {
|
|
|
128
129
|
}
|
|
129
130
|
async function hydrateWithReact18(App, rootElement) {
|
|
130
131
|
const ReactDOM = await import("react-dom/client");
|
|
131
|
-
const root = ReactDOM.hydrateRoot(rootElement, App
|
|
132
|
+
const root = ReactDOM.hydrateRoot(rootElement, App, {
|
|
133
|
+
identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX
|
|
134
|
+
});
|
|
132
135
|
return root;
|
|
133
136
|
}
|
|
134
137
|
async function hydrateWithReact17(App, rootElement, callback) {
|
|
@@ -28,6 +28,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
28
28
|
});
|
|
29
29
|
const external_stream_namespaceObject = require("stream");
|
|
30
30
|
const node_namespaceObject = require("@modern-js/runtime-utils/node");
|
|
31
|
+
const constants_namespaceObject = require("@modern-js/utils/universal/constants");
|
|
31
32
|
const external_common_js_namespaceObject = require("../../../common.js");
|
|
32
33
|
const external_constants_js_namespaceObject = require("../../constants.js");
|
|
33
34
|
const index_js_namespaceObject = require("../../context/index.js");
|
|
@@ -65,6 +66,7 @@ const createReadableStreamFromElement = async (request, rootElement, options)=>{
|
|
|
65
66
|
return new Promise((resolve)=>{
|
|
66
67
|
const { pipe: reactStreamingPipe } = renderToPipeableStream(processedRootElement, {
|
|
67
68
|
nonce: config.nonce,
|
|
69
|
+
identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX,
|
|
68
70
|
[onReady] () {
|
|
69
71
|
let styledComponentsStyleTags = '';
|
|
70
72
|
extenders.forEach((extender)=>{
|
|
@@ -36,6 +36,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
36
36
|
renderString: ()=>renderString
|
|
37
37
|
});
|
|
38
38
|
const time_namespaceObject = require("@modern-js/runtime-utils/time");
|
|
39
|
+
const constants_namespaceObject = require("@modern-js/utils/universal/constants");
|
|
39
40
|
const server_namespaceObject = require("react-dom/server");
|
|
40
41
|
var server_default = /*#__PURE__*/ __webpack_require__.n(server_namespaceObject);
|
|
41
42
|
const external_react_helmet_namespaceObject = require("react-helmet");
|
|
@@ -104,7 +105,9 @@ async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifie
|
|
|
104
105
|
const finalApp = collectors.reduce((pre, creator)=>creator.collect?.(pre) || pre, App);
|
|
105
106
|
try {
|
|
106
107
|
const end = (0, time_namespaceObject.time)();
|
|
107
|
-
html = server_default().renderToString(finalApp
|
|
108
|
+
html = server_default().renderToString(finalApp, {
|
|
109
|
+
identifierPrefix: constants_namespaceObject.SSR_HYDRATION_ID_PREFIX
|
|
110
|
+
});
|
|
108
111
|
chunkSet.renderLevel = external_constants_js_namespaceObject.RenderLevel.SERVER_RENDER;
|
|
109
112
|
helmetData = external_react_helmet_default().renderStatic();
|
|
110
113
|
const cost = end();
|
|
@@ -160,7 +160,7 @@ const generateCode = async (appContext, config, entrypoints, api)=>{
|
|
|
160
160
|
}
|
|
161
161
|
const serverLoaderCombined = external_templates_js_namespaceObject.ssrLoaderCombinedModule(entrypoints, entrypoint, config, appContext);
|
|
162
162
|
if (serverLoaderCombined) {
|
|
163
|
-
const serverLoaderFile = (0, external_utils_js_namespaceObject.
|
|
163
|
+
const serverLoaderFile = (0, external_utils_js_namespaceObject.getServerCombinedModuleFile)(internalDirectory, entryName);
|
|
164
164
|
await utils_namespaceObject.fs.outputFile(serverLoaderFile, serverLoaderCombined);
|
|
165
165
|
}
|
|
166
166
|
await utils_namespaceObject.fs.outputFile(external_path_default().resolve(internalDirectory, `./${entryName}/${external_constants_js_namespaceObject.FILE_SYSTEM_ROUTES_FILE_NAME}`), code, 'utf8');
|
|
@@ -34,10 +34,10 @@ var __webpack_exports__ = {};
|
|
|
34
34
|
__webpack_require__.r(__webpack_exports__);
|
|
35
35
|
__webpack_require__.d(__webpack_exports__, {
|
|
36
36
|
parseModule: ()=>parseModule,
|
|
37
|
+
getServerCombinedModuleFile: ()=>getServerCombinedModuleFile,
|
|
37
38
|
hasLoader: ()=>hasLoader,
|
|
38
|
-
isPageComponentFile: ()=>isPageComponentFile,
|
|
39
39
|
getPathWithoutExt: ()=>getPathWithoutExt,
|
|
40
|
-
|
|
40
|
+
isPageComponentFile: ()=>isPageComponentFile,
|
|
41
41
|
getServerLoadersFile: ()=>getServerLoadersFile,
|
|
42
42
|
walkDirectory: ()=>walkDirectory,
|
|
43
43
|
hasAction: ()=>hasAction,
|
|
@@ -112,13 +112,13 @@ const hasAction = async (filename, source)=>{
|
|
|
112
112
|
return false;
|
|
113
113
|
};
|
|
114
114
|
const getServerLoadersFile = (internalDirectory, entryName)=>external_path_default().join(internalDirectory, entryName, 'route-server-loaders.js');
|
|
115
|
-
const
|
|
115
|
+
const getServerCombinedModuleFile = (internalDirectory, entryName)=>external_path_default().join(internalDirectory, entryName, 'server-loader-combined.js');
|
|
116
116
|
const getPathWithoutExt = (filename)=>{
|
|
117
117
|
const extname = external_path_default().extname(filename);
|
|
118
118
|
return extname ? filename.slice(0, -extname.length) : filename;
|
|
119
119
|
};
|
|
120
120
|
exports.getPathWithoutExt = __webpack_exports__.getPathWithoutExt;
|
|
121
|
-
exports.
|
|
121
|
+
exports.getServerCombinedModuleFile = __webpack_exports__.getServerCombinedModuleFile;
|
|
122
122
|
exports.getServerLoadersFile = __webpack_exports__.getServerLoadersFile;
|
|
123
123
|
exports.hasAction = __webpack_exports__.hasAction;
|
|
124
124
|
exports.hasLoader = __webpack_exports__.hasLoader;
|
|
@@ -128,7 +128,7 @@ exports.replaceWithAlias = __webpack_exports__.replaceWithAlias;
|
|
|
128
128
|
exports.walkDirectory = __webpack_exports__.walkDirectory;
|
|
129
129
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
130
130
|
"getPathWithoutExt",
|
|
131
|
-
"
|
|
131
|
+
"getServerCombinedModuleFile",
|
|
132
132
|
"getServerLoadersFile",
|
|
133
133
|
"hasAction",
|
|
134
134
|
"hasLoader",
|
|
@@ -18,9 +18,6 @@ var __webpack_require__ = {};
|
|
|
18
18
|
});
|
|
19
19
|
};
|
|
20
20
|
})();
|
|
21
|
-
(()=>{
|
|
22
|
-
__webpack_require__.e = ()=>Promise.resolve();
|
|
23
|
-
})();
|
|
24
21
|
(()=>{
|
|
25
22
|
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
26
23
|
})();
|
|
@@ -183,7 +180,7 @@ const createPrefetchLink = (Link)=>/*#__PURE__*/ external_react_default().forwar
|
|
|
183
180
|
...props,
|
|
184
181
|
...prefetchHandlers
|
|
185
182
|
}),
|
|
186
|
-
shouldPrefetch &&
|
|
183
|
+
shouldPrefetch && __webpack_chunk_load__ && !isAbsolute ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(PrefetchPageLinks, {
|
|
187
184
|
path: resolvedPath
|
|
188
185
|
}) : null
|
|
189
186
|
]
|
package/dist/esm/cli/code.mjs
CHANGED
|
@@ -21,13 +21,7 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
|
|
|
21
21
|
nestedRoutesEntry
|
|
22
22
|
});
|
|
23
23
|
let indexCode = '';
|
|
24
|
-
indexCode =
|
|
25
|
-
metaName,
|
|
26
|
-
entryName,
|
|
27
|
-
mountId,
|
|
28
|
-
urlPath: serverRoutes.find((route)=>route.entryName === entryName)?.urlPath,
|
|
29
|
-
isNestedRouter: entrypoint.nestedRoutesEntry
|
|
30
|
-
}) : index({
|
|
24
|
+
indexCode = ssrMode || !config.server.rsc || customEntry ? index({
|
|
31
25
|
srcDirectory,
|
|
32
26
|
internalSrcAlias,
|
|
33
27
|
metaName,
|
|
@@ -37,6 +31,12 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
|
|
|
37
31
|
mountId,
|
|
38
32
|
enableRsc: config.server.rsc,
|
|
39
33
|
isNestedRouter: !!entrypoint.nestedRoutesEntry
|
|
34
|
+
}) : entryForCSRWithRSC({
|
|
35
|
+
metaName,
|
|
36
|
+
entryName,
|
|
37
|
+
mountId,
|
|
38
|
+
urlPath: serverRoutes.find((route)=>route.entryName === entryName)?.urlPath,
|
|
39
|
+
isNestedRouter: entrypoint.nestedRoutesEntry
|
|
40
40
|
});
|
|
41
41
|
const indexFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_POINT_FILE_NAME}`);
|
|
42
42
|
await fs.outputFile(indexFile, indexCode, 'utf8');
|
|
@@ -103,7 +103,8 @@ const generateCode = async (entrypoints, appContext, config, hooks)=>{
|
|
|
103
103
|
});
|
|
104
104
|
await fs.outputFile(AppProxyPath, appProxyCode);
|
|
105
105
|
contextCode = runtimeGlobalContextForRSCClient({
|
|
106
|
-
metaName
|
|
106
|
+
metaName,
|
|
107
|
+
customEntry
|
|
107
108
|
});
|
|
108
109
|
const contextServerCode = runtimeGlobalContextForRSCServer({
|
|
109
110
|
metaName
|
package/dist/esm/cli/index.mjs
CHANGED
|
@@ -89,4 +89,5 @@ const runtimePlugin = (params)=>({
|
|
|
89
89
|
}
|
|
90
90
|
});
|
|
91
91
|
const cli = runtimePlugin;
|
|
92
|
-
export
|
|
92
|
+
export default cli;
|
|
93
|
+
export { documentPlugin, isRuntimeEntry, routerPlugin, runtimePlugin, ssrPlugin };
|
|
@@ -152,16 +152,54 @@ const runtimeGlobalContextForRSCServer = ({ metaName })=>`
|
|
|
152
152
|
App: DefaultRoot,
|
|
153
153
|
RSCRoot: AppProxy,
|
|
154
154
|
});`;
|
|
155
|
-
const runtimeGlobalContextForRSCClient = ({ metaName })=>`
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
155
|
+
const runtimeGlobalContextForRSCClient = ({ metaName, customEntry })=>`
|
|
156
|
+
${customEntry ? `import {
|
|
157
|
+
RscClientRoot,
|
|
158
|
+
createFromFetch,
|
|
159
|
+
createFromReadableStream,
|
|
160
|
+
isRedirectResponse,
|
|
161
|
+
rscStream,
|
|
162
|
+
callServer,
|
|
163
|
+
setServerCallback,
|
|
164
|
+
} from '@${metaName}/runtime/rsc/client';` : ''}
|
|
165
|
+
import { createElement, Fragment } from 'react';
|
|
166
|
+
import { setGlobalContext } from '@${metaName}/runtime/context';
|
|
167
|
+
|
|
168
|
+
${customEntry ? 'setServerCallback(callServer);' : ''}
|
|
169
|
+
|
|
170
|
+
${customEntry ? `const handleRedirectResponse = (res: Response) => {
|
|
171
|
+
const { headers } = res;
|
|
172
|
+
const location = headers.get('X-Modernjs-Redirect');
|
|
173
|
+
const baseUrl = headers.get('X-Modernjs-BaseUrl');
|
|
174
|
+
if (location) {
|
|
175
|
+
if (baseUrl && baseUrl !== '/') {
|
|
176
|
+
window.location.replace(baseUrl + location);
|
|
177
|
+
} else {
|
|
178
|
+
window.location.replace(location);
|
|
179
|
+
}
|
|
180
|
+
return res;
|
|
181
|
+
}
|
|
182
|
+
return res;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const data = ${process.env.MODERN_DISABLE_INJECT_RSC_DATA ? `createFromFetch(
|
|
186
|
+
fetch(location.pathname, {
|
|
187
|
+
headers: {
|
|
188
|
+
'x-rsc-tree': 'true',
|
|
189
|
+
},
|
|
190
|
+
}).then(handleRedirectResponse),
|
|
191
|
+
)` : `createFromReadableStream(rscStream, {
|
|
192
|
+
callServer: callServer,
|
|
193
|
+
})`};` : ''}
|
|
194
|
+
|
|
195
|
+
const DefaultRoot = ({ children }: { children?: ReactNode }) =>
|
|
196
|
+
createElement(Fragment, null, children);
|
|
197
|
+
|
|
198
|
+
${customEntry ? 'const RSCRoot = () => createElement(RscClientRoot, { rscPayload: data });' : ''}
|
|
199
|
+
|
|
200
|
+
setGlobalContext({
|
|
201
|
+
App: ${customEntry ? 'RSCRoot' : 'DefaultRoot'}
|
|
202
|
+
});`;
|
|
165
203
|
const AppProxyForRSC = ({ srcDirectory, internalSrcAlias, entry, customEntry })=>`
|
|
166
204
|
import App from '${formatImportPath(customEntry ? entry.replace(/entry\.[tj]sx/, 'App').replace(srcDirectory, internalSrcAlias) : entry.replace(srcDirectory, internalSrcAlias).replace('.tsx', ''))}';
|
|
167
205
|
import React from 'react';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SSR_HYDRATION_ID_PREFIX } from "@modern-js/utils/universal/constants";
|
|
1
2
|
import cookie from "cookie";
|
|
2
3
|
import { getGlobalInternalRuntimeContext } from "../context/index.mjs";
|
|
3
4
|
import { getInitialContext } from "../context/runtime.mjs";
|
|
@@ -86,7 +87,9 @@ async function renderWithReact17(App, rootElement) {
|
|
|
86
87
|
}
|
|
87
88
|
async function hydrateWithReact18(App, rootElement) {
|
|
88
89
|
const ReactDOM = await import("react-dom/client");
|
|
89
|
-
const root = ReactDOM.hydrateRoot(rootElement, App
|
|
90
|
+
const root = ReactDOM.hydrateRoot(rootElement, App, {
|
|
91
|
+
identifierPrefix: SSR_HYDRATION_ID_PREFIX
|
|
92
|
+
});
|
|
90
93
|
return root;
|
|
91
94
|
}
|
|
92
95
|
async function hydrateWithReact17(App, rootElement, callback) {
|
|
@@ -5,4 +5,4 @@ var constants_RenderLevel = /*#__PURE__*/ function(RenderLevel) {
|
|
|
5
5
|
}({});
|
|
6
6
|
const SSR_DATA_JSON_ID = '__MODERN_SSR_DATA__';
|
|
7
7
|
const ROUTER_DATA_JSON_ID = '__MODERN_ROUTER_DATA__';
|
|
8
|
-
export { ROUTER_DATA_JSON_ID, constants_RenderLevel as RenderLevel
|
|
8
|
+
export { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID, constants_RenderLevel as RenderLevel };
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { InternalRuntimeContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
|
|
2
|
-
import { getServerPayload, setServerPayload } from "./serverPayload/index.mjs";
|
|
3
1
|
const globalContext = {};
|
|
4
2
|
function getGlobalIsRscClient() {
|
|
5
3
|
return globalContext.isRscClient;
|
|
@@ -42,4 +40,6 @@ function getGlobalLayoutApp() {
|
|
|
42
40
|
function getGlobalBasename() {
|
|
43
41
|
return globalContext.basename;
|
|
44
42
|
}
|
|
45
|
-
export { InternalRuntimeContext, RuntimeContext,
|
|
43
|
+
export { InternalRuntimeContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
|
|
44
|
+
export { getServerPayload, setServerPayload } from "./serverPayload/index.mjs";
|
|
45
|
+
export { getCurrentEntryName, getGlobalApp, getGlobalBasename, getGlobalEnableRsc, getGlobalInternalRuntimeContext, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRSCRoot, getGlobalRoutes, setGlobalContext, setGlobalInternalRuntimeContext };
|
package/dist/esm/core/index.mjs
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export { RuntimeContext, defineRuntimeConfig, useRuntimeContext };
|
|
1
|
+
export { defineRuntimeConfig } from "./config.mjs";
|
|
2
|
+
export { RuntimeContext, useRuntimeContext } from "./context/runtime.mjs";
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { NoSSR, NoSSRCache } from "./react/index.mjs";
|
|
2
1
|
const ssr = (_config)=>({
|
|
3
2
|
name: '@modern-js/plugin-ssr',
|
|
4
3
|
setup: (_api)=>{}
|
|
5
4
|
});
|
|
6
5
|
const server = ssr;
|
|
7
|
-
export { NoSSR, NoSSRCache
|
|
6
|
+
export { NoSSR, NoSSRCache } from "./react/index.mjs";
|
|
7
|
+
export default server;
|
|
8
|
+
export { ssr };
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export { NoSSR, NoSSRCache };
|
|
1
|
+
export { NoSSR } from "./nossr/index.mjs";
|
|
2
|
+
export { NoSSRCache } from "./no-ssr-cache/index.mjs";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export { createRequestHandler, renderStreaming, renderString };
|
|
1
|
+
export { renderString } from "./string/index.mjs";
|
|
2
|
+
export { renderStreaming } from "./stream/index.mjs";
|
|
3
|
+
export { createRequestHandler } from "./requestHandler.mjs";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PassThrough, Readable, Transform } from "stream";
|
|
2
2
|
import { storage } from "@modern-js/runtime-utils/node";
|
|
3
|
+
import { SSR_HYDRATION_ID_PREFIX } from "@modern-js/utils/universal/constants";
|
|
3
4
|
import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common.mjs";
|
|
4
5
|
import { RenderLevel } from "../../constants.mjs";
|
|
5
6
|
import { getGlobalInternalRuntimeContext } from "../../context/index.mjs";
|
|
@@ -37,6 +38,7 @@ const createReadableStreamFromElement = async (request, rootElement, options)=>{
|
|
|
37
38
|
return new Promise((resolve)=>{
|
|
38
39
|
const { pipe: reactStreamingPipe } = renderToPipeableStream(processedRootElement, {
|
|
39
40
|
nonce: config.nonce,
|
|
41
|
+
identifierPrefix: SSR_HYDRATION_ID_PREFIX,
|
|
40
42
|
[onReady] () {
|
|
41
43
|
let styledComponentsStyleTags = '';
|
|
42
44
|
extenders.forEach((extender)=>{
|
|
@@ -105,4 +105,4 @@ function createRenderStreaming(createReadableStreamPromise) {
|
|
|
105
105
|
return stream;
|
|
106
106
|
};
|
|
107
107
|
}
|
|
108
|
-
export {
|
|
108
|
+
export { createRenderStreaming, encodeForWebStream, getReadableStreamFromString, resolveStreamingMode, shared_ShellChunkStatus as ShellChunkStatus };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { time } from "@modern-js/runtime-utils/time";
|
|
2
|
+
import { SSR_HYDRATION_ID_PREFIX } from "@modern-js/utils/universal/constants";
|
|
2
3
|
import server from "react-dom/server";
|
|
3
4
|
import react_helmet from "react-helmet";
|
|
4
5
|
import { RenderLevel } from "../../constants.mjs";
|
|
@@ -65,7 +66,9 @@ async function generateHtml(App, htmlTemplate, chunkSet, collectors, htmlModifie
|
|
|
65
66
|
const finalApp = collectors.reduce((pre, creator)=>creator.collect?.(pre) || pre, App);
|
|
66
67
|
try {
|
|
67
68
|
const end = time();
|
|
68
|
-
html = server.renderToString(finalApp
|
|
69
|
+
html = server.renderToString(finalApp, {
|
|
70
|
+
identifierPrefix: SSR_HYDRATION_ID_PREFIX
|
|
71
|
+
});
|
|
69
72
|
chunkSet.renderLevel = RenderLevel.SERVER_RENDER;
|
|
70
73
|
helmetData = react_helmet.renderStatic();
|
|
71
74
|
const cost = end();
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export { RuntimeContext, defineRuntimeConfig, getMonitors, getRequest, isBrowser, redirect, setHeaders, setStatus, useRuntimeContext };
|
|
1
|
+
export { isBrowser } from "./common.mjs";
|
|
2
|
+
export { getMonitors } from "./core/context/monitors/index.mjs";
|
|
3
|
+
export { getRequest } from "./core/context/request/index.mjs";
|
|
4
|
+
export { redirect, setHeaders, setStatus } from "./core/context/response/index.mjs";
|
|
5
|
+
export { RuntimeContext, defineRuntimeConfig, useRuntimeContext } from "./core/index.mjs";
|
package/dist/esm/internal.mjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { InternalRuntimeContext };
|
|
1
|
+
export { InternalRuntimeContext } from "./core/context/runtime.mjs";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export { getMonitors, getRequest, redirect, setHeaders, setStatus };
|
|
1
|
+
export { getRequest } from "./core/context/request/index.mjs";
|
|
2
|
+
export { getMonitors } from "./core/context/monitors/index.mjs";
|
|
3
|
+
export { redirect, setHeaders, setStatus } from "./core/context/response/index.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { getClientRoutes };
|
|
1
|
+
export { getClientRoutes } from "./getRoutes.mjs";
|
|
@@ -6,7 +6,7 @@ import { resolveSSRMode } from "../../../cli/ssr/mode.mjs";
|
|
|
6
6
|
import { FILE_SYSTEM_ROUTES_FILE_NAME } from "../constants.mjs";
|
|
7
7
|
import { walk } from "./nestedRoutes.mjs";
|
|
8
8
|
import { fileSystemRoutes, routesForServer, ssrLoaderCombinedModule } from "./templates.mjs";
|
|
9
|
-
import {
|
|
9
|
+
import { getServerCombinedModuleFile, getServerLoadersFile } from "./utils.mjs";
|
|
10
10
|
async function generateRoutesForEntry(entrypoint, appContext) {
|
|
11
11
|
const routes = [];
|
|
12
12
|
if (entrypoint.nestedRoutesEntry) {
|
|
@@ -119,7 +119,7 @@ const generateCode = async (appContext, config, entrypoints, api)=>{
|
|
|
119
119
|
}
|
|
120
120
|
const serverLoaderCombined = ssrLoaderCombinedModule(entrypoints, entrypoint, config, appContext);
|
|
121
121
|
if (serverLoaderCombined) {
|
|
122
|
-
const serverLoaderFile =
|
|
122
|
+
const serverLoaderFile = getServerCombinedModuleFile(internalDirectory, entryName);
|
|
123
123
|
await fs.outputFile(serverLoaderFile, serverLoaderCombined);
|
|
124
124
|
}
|
|
125
125
|
await fs.outputFile(path.resolve(internalDirectory, `./${entryName}/${FILE_SYSTEM_ROUTES_FILE_NAME}`), code, 'utf8');
|
|
@@ -65,9 +65,9 @@ const hasAction = async (filename, source)=>{
|
|
|
65
65
|
return false;
|
|
66
66
|
};
|
|
67
67
|
const getServerLoadersFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'route-server-loaders.js');
|
|
68
|
-
const
|
|
68
|
+
const getServerCombinedModuleFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'server-loader-combined.js');
|
|
69
69
|
const getPathWithoutExt = (filename)=>{
|
|
70
70
|
const extname = path.extname(filename);
|
|
71
71
|
return extname ? filename.slice(0, -extname.length) : filename;
|
|
72
72
|
};
|
|
73
|
-
export { getPathWithoutExt,
|
|
73
|
+
export { getPathWithoutExt, getServerCombinedModuleFile, getServerLoadersFile, hasAction, hasLoader, isPageComponentFile, parseModule, replaceWithAlias, walkDirectory };
|
|
@@ -77,4 +77,5 @@ const routerPlugin = ()=>({
|
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
79
|
const cli = routerPlugin;
|
|
80
|
-
export
|
|
80
|
+
export default cli;
|
|
81
|
+
export { handleFileChange, handleModifyEntrypoints, isRouteEntry, routerPlugin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const DeferredDataScripts = ()=>null;
|
|
2
|
-
export
|
|
2
|
+
export default DeferredDataScripts;
|
|
@@ -3,10 +3,6 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { Link as router_Link, NavLink, matchRoutes, useHref, useMatches, useResolvedPath } from "@modern-js/runtime-utils/router";
|
|
4
4
|
import react, { useContext, useMemo } from "react";
|
|
5
5
|
import { InternalRuntimeContext } from "../../core/context/index.mjs";
|
|
6
|
-
var __webpack_require__ = {};
|
|
7
|
-
(()=>{
|
|
8
|
-
__webpack_require__.e = ()=>Promise.resolve();
|
|
9
|
-
})();
|
|
10
6
|
function composeEventHandlers(theirHandler, ourHandler) {
|
|
11
7
|
return (event)=>{
|
|
12
8
|
theirHandler?.(event);
|
|
@@ -145,7 +141,7 @@ const createPrefetchLink = (Link)=>/*#__PURE__*/ react.forwardRef(({ to, prefetc
|
|
|
145
141
|
...props,
|
|
146
142
|
...prefetchHandlers
|
|
147
143
|
}),
|
|
148
|
-
shouldPrefetch &&
|
|
144
|
+
shouldPrefetch && __webpack_chunk_load__ && !isAbsolute ? /*#__PURE__*/ jsx(PrefetchPageLinks, {
|
|
149
145
|
path: resolvedPath
|
|
150
146
|
}) : null
|
|
151
147
|
]
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { useRouteLoaderData } from "@modern-js/runtime-utils/router";
|
|
2
|
-
import { Link, NavLink } from "./PrefetchLink.mjs";
|
|
3
1
|
export * from "@modern-js/runtime-utils/router";
|
|
4
2
|
export * from "./withRouter.mjs";
|
|
3
|
+
import { useRouteLoaderData } from "@modern-js/runtime-utils/router";
|
|
5
4
|
const runtime_useRouteLoaderData = (routeId)=>{
|
|
6
5
|
const realRouteId = routeId.replace(/\[(.*?)\]/g, '($1)');
|
|
7
6
|
return useRouteLoaderData(realRouteId);
|
|
8
7
|
};
|
|
9
|
-
export { Link, NavLink
|
|
8
|
+
export { Link, NavLink } from "./PrefetchLink.mjs";
|
|
9
|
+
export { runtime_useRouteLoaderData as useRouteLoaderData };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { modifyRoutes, routerPlugin } from "./plugin.mjs";
|
|
2
|
-
import { renderRoutes } from "./utils.mjs";
|
|
3
2
|
const internal = routerPlugin;
|
|
4
|
-
export {
|
|
3
|
+
export { renderRoutes } from "./utils.mjs";
|
|
4
|
+
export default internal;
|
|
5
|
+
export { modifyRoutes, routerPlugin };
|