@modern-js/runtime 2.58.0 → 2.58.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 +1 -1
- package/dist/cjs/cli/template.js +4 -1
- package/dist/cjs/core/server/requestHandler.js +7 -3
- package/dist/cjs/core/server/stream/afterTemplate.js +20 -3
- package/dist/cjs/core/server/stream/beforeTemplate.js +18 -11
- package/dist/cjs/core/server/stream/createReadableStream.js +3 -1
- package/dist/cjs/core/server/stream/createReadableStream.worker.js +3 -2
- package/dist/cjs/core/server/stream/shared.js +1 -0
- package/dist/cjs/core/server/string/ssrData.js +1 -1
- package/dist/esm/cli/code.js +1 -1
- package/dist/esm/cli/template.js +2 -1
- package/dist/esm/core/server/requestHandler.js +7 -3
- package/dist/esm/core/server/stream/afterTemplate.js +41 -3
- package/dist/esm/core/server/stream/beforeTemplate.js +20 -17
- package/dist/esm/core/server/stream/createReadableStream.js +4 -2
- package/dist/esm/core/server/stream/createReadableStream.worker.js +4 -3
- package/dist/esm/core/server/stream/shared.js +1 -0
- package/dist/esm/core/server/string/ssrData.js +1 -1
- package/dist/esm-node/cli/code.js +1 -1
- package/dist/esm-node/cli/template.js +4 -1
- package/dist/esm-node/core/server/requestHandler.js +7 -3
- package/dist/esm-node/core/server/stream/afterTemplate.js +20 -3
- package/dist/esm-node/core/server/stream/beforeTemplate.js +18 -11
- package/dist/esm-node/core/server/stream/createReadableStream.js +3 -1
- package/dist/esm-node/core/server/stream/createReadableStream.worker.js +3 -2
- package/dist/esm-node/core/server/stream/shared.js +1 -0
- package/dist/esm-node/core/server/string/ssrData.js +1 -1
- package/dist/types/core/server/stream/afterTemplate.d.ts +1 -0
- package/dist/types/core/server/stream/beforeTemplate.d.ts +1 -0
- package/dist/types/core/server/stream/shared.d.ts +1 -0
- package/package.json +17 -17
package/dist/cjs/cli/code.js
CHANGED
|
@@ -78,7 +78,7 @@ const generateCode = async (entrypoints, appContext, config, onCollectRuntimePlu
|
|
|
78
78
|
const ssrMode = getSSRMode(entryName, config);
|
|
79
79
|
if (enableAsyncEntry) {
|
|
80
80
|
const bootstrapFile = import_path.default.resolve(internalDirectory, `./${entryName}/${import_constants.ENTRY_BOOTSTRAP_FILE_NAME}`);
|
|
81
|
-
import_utils.fs.outputFileSync(bootstrapFile, `import('./${import_constants.INDEX_FILE_NAME}');`, "utf8");
|
|
81
|
+
import_utils.fs.outputFileSync(bootstrapFile, `import(/* webpackChunkName: "async-${entryName}" */ './${import_constants.INDEX_FILE_NAME}');`, "utf8");
|
|
82
82
|
const bootstrapServerFile = import_path.default.resolve(internalDirectory, `./${entryName}/${import_constants.ENTRY_SERVER_BOOTSTRAP_FILE_NAME}`);
|
|
83
83
|
if (ssrMode) {
|
|
84
84
|
import_utils.fs.outputFileSync(bootstrapServerFile, `export const requestHandler = import('./${import_constants.SERVER_ENTRY_POINT_FILE_NAME}').then((m) => m.requestHandler)`, "utf8");
|
package/dist/cjs/cli/template.js
CHANGED
|
@@ -69,7 +69,10 @@ const getImportRuntimeConfigCode = (srcDirectory, internalSrcAlias, runtimeConfi
|
|
|
69
69
|
}
|
|
70
70
|
return `let runtimeConfig;`;
|
|
71
71
|
};
|
|
72
|
-
const getRegisterRuntimePluginCode = (entryName, name, config) =>
|
|
72
|
+
const getRegisterRuntimePluginCode = (entryName, name, config) => {
|
|
73
|
+
const configName = name === "garfish" ? "masterApp" : name;
|
|
74
|
+
return `plugins.push(${name}Plugin(mergeConfig(${JSON.stringify(config)}, (runtimeConfig || {})['${configName}'], ((runtimeConfig || {})['${configName}ByEntries'] || {})['${entryName}'], (getGlobalAppConfig() || {})['${configName}'])));`;
|
|
75
|
+
};
|
|
73
76
|
const runtimeRegister = ({ entryName, srcDirectory, internalSrcAlias, metaName, runtimeConfigFile, runtimePlugins }) => `import { registerPlugin, mergeConfig } from '@${metaName}/runtime/plugin';
|
|
74
77
|
import { getGlobalAppConfig, getGlobalLayoutApp } from '@${metaName}/runtime/context';
|
|
75
78
|
${getImportRuntimeConfigCode(srcDirectory, internalSrcAlias, runtimeConfigFile)}
|
|
@@ -33,12 +33,15 @@ function createSSRContext(request, options) {
|
|
|
33
33
|
const { config, loaderContext, onError, onTiming, locals, resource, params, responseProxy, logger, metrics, reporter } = options;
|
|
34
34
|
const { nonce } = config;
|
|
35
35
|
const { entryName, route } = resource;
|
|
36
|
-
const
|
|
36
|
+
const { headers } = request;
|
|
37
|
+
const cookie = headers.get("cookie") || "";
|
|
37
38
|
const cookieMap = (0, import_request.parseCookie)(request);
|
|
38
39
|
const pathname = (0, import_request.getPathname)(request);
|
|
39
40
|
const query = (0, import_request.parseQuery)(request);
|
|
40
41
|
const headersData = (0, import_request.parseHeaders)(request);
|
|
41
42
|
const url = new URL(request.url);
|
|
43
|
+
const host = headers.get("X-Forwarded-Host") || headers.get("host") || url.host;
|
|
44
|
+
const protocal = `${headers.get("X-Forwarded-Proto") || url.protocol || "http"}:`;
|
|
42
45
|
const ssrConfig = (0, import_utils.getSSRConfigByEntry)(entryName, config.ssr, config.ssrByEntries);
|
|
43
46
|
const ssrMode = (0, import_utils.getSSRMode)(ssrConfig);
|
|
44
47
|
const loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
|
|
@@ -50,15 +53,16 @@ function createSSRContext(request, options) {
|
|
|
50
53
|
logger,
|
|
51
54
|
metrics,
|
|
52
55
|
request: {
|
|
56
|
+
url: request.url.replace(url.host, host).replace(url.protocol, protocal),
|
|
53
57
|
baseUrl: route.urlPath,
|
|
54
|
-
userAgent:
|
|
58
|
+
userAgent: headers.get("user-agent"),
|
|
55
59
|
cookie,
|
|
56
60
|
cookieMap,
|
|
57
61
|
pathname,
|
|
58
62
|
query,
|
|
59
63
|
params,
|
|
60
64
|
headers: headersData,
|
|
61
|
-
host
|
|
65
|
+
host,
|
|
62
66
|
raw: request
|
|
63
67
|
},
|
|
64
68
|
response: {
|
|
@@ -26,7 +26,7 @@ var import_utils = require("../utils");
|
|
|
26
26
|
var import_constants = require("../constants");
|
|
27
27
|
var import_shared = require("../shared");
|
|
28
28
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
29
|
-
const { request, config, ssrConfig, runtimeContext, renderLevel } = options;
|
|
29
|
+
const { request, config, ssrConfig, runtimeContext, renderLevel, entryName } = options;
|
|
30
30
|
const callbacks = [
|
|
31
31
|
createReplaceSSRData({
|
|
32
32
|
request,
|
|
@@ -34,8 +34,25 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
34
34
|
nonce: config.nonce,
|
|
35
35
|
runtimeContext,
|
|
36
36
|
renderLevel
|
|
37
|
-
})
|
|
37
|
+
}),
|
|
38
|
+
(template) => injectJs(template, entryName, config.nonce)
|
|
38
39
|
];
|
|
40
|
+
async function injectJs(template, entryName2, nonce) {
|
|
41
|
+
const { routeManifest } = runtimeContext;
|
|
42
|
+
const { routeAssets } = routeManifest;
|
|
43
|
+
const asyncEntry = routeAssets[`async-${entryName2}`];
|
|
44
|
+
if (asyncEntry) {
|
|
45
|
+
var _assets_filter;
|
|
46
|
+
const { assets } = asyncEntry;
|
|
47
|
+
const jsChunkStr = assets === null || assets === void 0 ? void 0 : (_assets_filter = assets.filter((asset) => asset.endsWith(".js"))) === null || _assets_filter === void 0 ? void 0 : _assets_filter.map((asset) => {
|
|
48
|
+
return `<script src=${asset} nonce="${nonce}"></script>`;
|
|
49
|
+
}).join(" ");
|
|
50
|
+
if (jsChunkStr) {
|
|
51
|
+
return (0, import_utils.safeReplace)(template, "<!--<?- chunksMap.js ?>-->", jsChunkStr);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return template;
|
|
55
|
+
}
|
|
39
56
|
return (0, import_shared.buildHtml)(afterAppTemplate, callbacks);
|
|
40
57
|
}
|
|
41
58
|
function createReplaceSSRData(options) {
|
|
@@ -59,7 +76,7 @@ function createReplaceSSRData(options) {
|
|
|
59
76
|
params: request.params,
|
|
60
77
|
pathname: request.pathname,
|
|
61
78
|
host: request.host,
|
|
62
|
-
url: request.
|
|
79
|
+
url: request.url,
|
|
63
80
|
headers
|
|
64
81
|
}
|
|
65
82
|
},
|
|
@@ -55,15 +55,15 @@ const checkIsInline = (chunk, enableInline) => {
|
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
57
|
async function buildShellBeforeTemplate(beforeAppTemplate, options) {
|
|
58
|
-
const { config, runtimeContext, styledComponentsStyleTags } = options;
|
|
58
|
+
const { config, runtimeContext, styledComponentsStyleTags, entryName } = options;
|
|
59
59
|
const helmetData = import_react_helmet.default.renderStatic();
|
|
60
60
|
const callbacks = [
|
|
61
61
|
(0, import_helmet.createReplaceHelemt)(helmetData),
|
|
62
62
|
// @TODO: prefetch scripts of lazy component
|
|
63
|
-
(template) => injectCss(template, styledComponentsStyleTags)
|
|
63
|
+
(template) => injectCss(template, entryName, styledComponentsStyleTags)
|
|
64
64
|
];
|
|
65
65
|
return (0, import_shared.buildHtml)(beforeAppTemplate, callbacks);
|
|
66
|
-
async function injectCss(template, styledComponentsStyleTags2) {
|
|
66
|
+
async function injectCss(template, entryName2, styledComponentsStyleTags2) {
|
|
67
67
|
let css = await getCssChunks();
|
|
68
68
|
if (styledComponentsStyleTags2) {
|
|
69
69
|
css += styledComponentsStyleTags2;
|
|
@@ -75,22 +75,29 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
|
|
|
75
75
|
return "";
|
|
76
76
|
}
|
|
77
77
|
const { routeAssets } = routeManifest;
|
|
78
|
-
const cssChunks = [];
|
|
79
78
|
const matches = (0, import_router.matchRoutes)(routes, routerContext.location, routerContext.basename);
|
|
80
|
-
matches === null || matches === void 0 ? void 0 : matches.
|
|
79
|
+
const matchedRouteManifests = matches === null || matches === void 0 ? void 0 : matches.map((match, index) => {
|
|
81
80
|
if (!index) {
|
|
82
81
|
return;
|
|
83
82
|
}
|
|
84
83
|
const routeId = match.route.id;
|
|
85
84
|
if (routeId) {
|
|
86
85
|
const routeManifest2 = routeAssets[routeId];
|
|
87
|
-
|
|
88
|
-
const { referenceCssAssets = [] } = routeManifest2;
|
|
89
|
-
const _cssChunks = referenceCssAssets.filter((asset) => (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset));
|
|
90
|
-
cssChunks.push(..._cssChunks);
|
|
91
|
-
}
|
|
86
|
+
return routeManifest2;
|
|
92
87
|
}
|
|
93
|
-
});
|
|
88
|
+
}).filter(Boolean);
|
|
89
|
+
const asyncEntry = routeAssets[`async-${entryName2}`];
|
|
90
|
+
if (asyncEntry) {
|
|
91
|
+
matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.push(asyncEntry);
|
|
92
|
+
}
|
|
93
|
+
const cssChunks = matchedRouteManifests ? matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.reduce((chunks, routeManifest2) => {
|
|
94
|
+
const { referenceCssAssets = [] } = routeManifest2;
|
|
95
|
+
const _cssChunks = referenceCssAssets.filter((asset) => (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset));
|
|
96
|
+
return [
|
|
97
|
+
...chunks,
|
|
98
|
+
..._cssChunks
|
|
99
|
+
];
|
|
100
|
+
}, []) : [];
|
|
94
101
|
const { enableInlineStyles } = config;
|
|
95
102
|
const styles = await Promise.all(cssChunks.map(async (chunk) => {
|
|
96
103
|
const link = `<link href="${chunk}" rel="stylesheet" />`;
|
|
@@ -41,7 +41,7 @@ var import_template = require("./template");
|
|
|
41
41
|
var import_shared = require("./shared");
|
|
42
42
|
const createReadableStreamFromElement = async (request, rootElement, options) => {
|
|
43
43
|
const { renderToPipeableStream } = await Promise.resolve().then(() => __toESM(require("react-dom/server")));
|
|
44
|
-
const { runtimeContext, htmlTemplate, config, ssrConfig } = options;
|
|
44
|
+
const { runtimeContext, htmlTemplate, config, ssrConfig, entryName } = options;
|
|
45
45
|
let shellChunkStatus = import_shared.ShellChunkStatus.START;
|
|
46
46
|
let renderLevel = import_constants.RenderLevel.SERVER_RENDER;
|
|
47
47
|
const forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
|
|
@@ -63,6 +63,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
63
63
|
renderLevel,
|
|
64
64
|
runtimeContext,
|
|
65
65
|
config,
|
|
66
|
+
entryName,
|
|
66
67
|
styledComponentsStyleTags
|
|
67
68
|
}).then(({ shellAfter, shellBefore }) => {
|
|
68
69
|
const body = new import_stream.Transform({
|
|
@@ -101,6 +102,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
101
102
|
ssrConfig,
|
|
102
103
|
renderLevel,
|
|
103
104
|
runtimeContext,
|
|
105
|
+
entryName,
|
|
104
106
|
config
|
|
105
107
|
}).then(({ shellAfter, shellBefore }) => {
|
|
106
108
|
var _options_onShellError;
|
|
@@ -40,13 +40,14 @@ var import_template = require("./template");
|
|
|
40
40
|
const createReadableStreamFromElement = async (request, rootElement, options) => {
|
|
41
41
|
let shellChunkStatus = import_shared.ShellChunkStatus.START;
|
|
42
42
|
const chunkVec = [];
|
|
43
|
-
const { htmlTemplate, runtimeContext, config, ssrConfig } = options;
|
|
43
|
+
const { htmlTemplate, runtimeContext, config, ssrConfig, entryName } = options;
|
|
44
44
|
const { shellBefore, shellAfter } = await (0, import_template.getTemplates)(htmlTemplate, {
|
|
45
45
|
renderLevel: import_constants.RenderLevel.SERVER_RENDER,
|
|
46
46
|
runtimeContext,
|
|
47
47
|
ssrConfig,
|
|
48
48
|
request,
|
|
49
|
-
config
|
|
49
|
+
config,
|
|
50
|
+
entryName
|
|
50
51
|
});
|
|
51
52
|
try {
|
|
52
53
|
var _options_onShellReady;
|
package/dist/esm/cli/code.js
CHANGED
|
@@ -65,7 +65,7 @@ var generateCode = function() {
|
|
|
65
65
|
ssrMode = getSSRMode(entryName, config);
|
|
66
66
|
if (enableAsyncEntry) {
|
|
67
67
|
bootstrapFile = path.resolve(internalDirectory, "./".concat(entryName, "/").concat(ENTRY_BOOTSTRAP_FILE_NAME));
|
|
68
|
-
fs.outputFileSync(bootstrapFile,
|
|
68
|
+
fs.outputFileSync(bootstrapFile, 'import(/* webpackChunkName: "async-'.concat(entryName, `" */ './`).concat(INDEX_FILE_NAME, "');"), "utf8");
|
|
69
69
|
bootstrapServerFile = path.resolve(internalDirectory, "./".concat(entryName, "/").concat(ENTRY_SERVER_BOOTSTRAP_FILE_NAME));
|
|
70
70
|
if (ssrMode) {
|
|
71
71
|
fs.outputFileSync(bootstrapServerFile, "export const requestHandler = import('./".concat(SERVER_ENTRY_POINT_FILE_NAME, "').then((m) => m.requestHandler)"), "utf8");
|
package/dist/esm/cli/template.js
CHANGED
|
@@ -32,7 +32,8 @@ var getImportRuntimeConfigCode = function(srcDirectory, internalSrcAlias, runtim
|
|
|
32
32
|
return "let runtimeConfig;";
|
|
33
33
|
};
|
|
34
34
|
var getRegisterRuntimePluginCode = function(entryName, name, config) {
|
|
35
|
-
|
|
35
|
+
var configName = name === "garfish" ? "masterApp" : name;
|
|
36
|
+
return "plugins.push(".concat(name, "Plugin(mergeConfig(").concat(JSON.stringify(config), ", (runtimeConfig || {})['").concat(configName, "'], ((runtimeConfig || {})['").concat(configName, "ByEntries'] || {})['").concat(entryName, "'], (getGlobalAppConfig() || {})['").concat(configName, "'])));");
|
|
36
37
|
};
|
|
37
38
|
var runtimeRegister = function(param) {
|
|
38
39
|
var entryName = param.entryName, srcDirectory = param.srcDirectory, internalSrcAlias = param.internalSrcAlias, metaName = param.metaName, runtimeConfigFile = param.runtimeConfigFile, runtimePlugins = param.runtimePlugins;
|
|
@@ -16,12 +16,15 @@ function createSSRContext(request, options) {
|
|
|
16
16
|
var config = options.config, loaderContext = options.loaderContext, onError = options.onError, onTiming = options.onTiming, locals = options.locals, resource = options.resource, params = options.params, responseProxy = options.responseProxy, logger = options.logger, metrics = options.metrics, reporter = options.reporter;
|
|
17
17
|
var nonce = config.nonce;
|
|
18
18
|
var entryName = resource.entryName, route = resource.route;
|
|
19
|
-
var
|
|
19
|
+
var headers = request.headers;
|
|
20
|
+
var cookie = headers.get("cookie") || "";
|
|
20
21
|
var cookieMap = parseCookie(request);
|
|
21
22
|
var pathname = getPathname(request);
|
|
22
23
|
var query = parseQuery(request);
|
|
23
24
|
var headersData = parseHeaders(request);
|
|
24
25
|
var url = new URL(request.url);
|
|
26
|
+
var host = headers.get("X-Forwarded-Host") || headers.get("host") || url.host;
|
|
27
|
+
var protocal = "".concat(headers.get("X-Forwarded-Proto") || url.protocol || "http", ":");
|
|
25
28
|
var ssrConfig = getSSRConfigByEntry(entryName, config.ssr, config.ssrByEntries);
|
|
26
29
|
var ssrMode = getSSRMode(ssrConfig);
|
|
27
30
|
var loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
|
|
@@ -33,15 +36,16 @@ function createSSRContext(request, options) {
|
|
|
33
36
|
logger,
|
|
34
37
|
metrics,
|
|
35
38
|
request: {
|
|
39
|
+
url: request.url.replace(url.host, host).replace(url.protocol, protocal),
|
|
36
40
|
baseUrl: route.urlPath,
|
|
37
|
-
userAgent:
|
|
41
|
+
userAgent: headers.get("user-agent"),
|
|
38
42
|
cookie,
|
|
39
43
|
cookieMap,
|
|
40
44
|
pathname,
|
|
41
45
|
query,
|
|
42
46
|
params,
|
|
43
47
|
headers: headersData,
|
|
44
|
-
host
|
|
48
|
+
host,
|
|
45
49
|
raw: request
|
|
46
50
|
},
|
|
47
51
|
response: {
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
1
2
|
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
3
|
+
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
2
4
|
import { serializeJson } from "@modern-js/runtime-utils/node";
|
|
3
5
|
import { attributesToString, safeReplace } from "../utils";
|
|
4
6
|
import { SSR_DATA_PLACEHOLDER } from "../constants";
|
|
5
7
|
import { buildHtml } from "../shared";
|
|
6
8
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
7
|
-
var request = options.request, config = options.config, ssrConfig = options.ssrConfig, runtimeContext = options.runtimeContext, renderLevel = options.renderLevel;
|
|
9
|
+
var request = options.request, config = options.config, ssrConfig = options.ssrConfig, runtimeContext = options.runtimeContext, renderLevel = options.renderLevel, entryName = options.entryName;
|
|
8
10
|
var callbacks = [
|
|
9
11
|
createReplaceSSRData({
|
|
10
12
|
request,
|
|
@@ -12,8 +14,44 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
12
14
|
nonce: config.nonce,
|
|
13
15
|
runtimeContext,
|
|
14
16
|
renderLevel
|
|
15
|
-
})
|
|
17
|
+
}),
|
|
18
|
+
function(template) {
|
|
19
|
+
return injectJs(template, entryName, config.nonce);
|
|
20
|
+
}
|
|
16
21
|
];
|
|
22
|
+
function injectJs(template, entryName2, nonce) {
|
|
23
|
+
return _injectJs.apply(this, arguments);
|
|
24
|
+
}
|
|
25
|
+
function _injectJs() {
|
|
26
|
+
_injectJs = _async_to_generator(function(template, entryName2, nonce) {
|
|
27
|
+
var routeManifest, routeAssets, asyncEntry, _assets_filter, assets, jsChunkStr;
|
|
28
|
+
return _ts_generator(this, function(_state) {
|
|
29
|
+
routeManifest = runtimeContext.routeManifest;
|
|
30
|
+
routeAssets = routeManifest.routeAssets;
|
|
31
|
+
asyncEntry = routeAssets["async-".concat(entryName2)];
|
|
32
|
+
if (asyncEntry) {
|
|
33
|
+
;
|
|
34
|
+
assets = asyncEntry.assets;
|
|
35
|
+
jsChunkStr = assets === null || assets === void 0 ? void 0 : (_assets_filter = assets.filter(function(asset) {
|
|
36
|
+
return asset.endsWith(".js");
|
|
37
|
+
})) === null || _assets_filter === void 0 ? void 0 : _assets_filter.map(function(asset) {
|
|
38
|
+
return "<script src=".concat(asset, ' nonce="').concat(nonce, '"></script>');
|
|
39
|
+
}).join(" ");
|
|
40
|
+
if (jsChunkStr) {
|
|
41
|
+
return [
|
|
42
|
+
2,
|
|
43
|
+
safeReplace(template, "<!--<?- chunksMap.js ?>-->", jsChunkStr)
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return [
|
|
48
|
+
2,
|
|
49
|
+
template
|
|
50
|
+
];
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
return _injectJs.apply(this, arguments);
|
|
54
|
+
}
|
|
17
55
|
return buildHtml(afterAppTemplate, callbacks);
|
|
18
56
|
}
|
|
19
57
|
function createReplaceSSRData(options) {
|
|
@@ -40,7 +78,7 @@ function createReplaceSSRData(options) {
|
|
|
40
78
|
params: request.params,
|
|
41
79
|
pathname: request.pathname,
|
|
42
80
|
host: request.host,
|
|
43
|
-
url: request.
|
|
81
|
+
url: request.url,
|
|
44
82
|
headers
|
|
45
83
|
}
|
|
46
84
|
},
|
|
@@ -54,19 +54,19 @@ function buildShellBeforeTemplate(beforeAppTemplate, options) {
|
|
|
54
54
|
}
|
|
55
55
|
function _buildShellBeforeTemplate() {
|
|
56
56
|
_buildShellBeforeTemplate = _async_to_generator(function(beforeAppTemplate, options) {
|
|
57
|
-
var config, runtimeContext, styledComponentsStyleTags, helmetData, callbacks;
|
|
58
|
-
function injectCss(template, styledComponentsStyleTags2) {
|
|
57
|
+
var config, runtimeContext, styledComponentsStyleTags, entryName, helmetData, callbacks;
|
|
58
|
+
function injectCss(template, entryName2, styledComponentsStyleTags2) {
|
|
59
59
|
return _injectCss.apply(this, arguments);
|
|
60
60
|
}
|
|
61
61
|
function _injectCss() {
|
|
62
|
-
_injectCss = _async_to_generator(function(template, styledComponentsStyleTags2) {
|
|
62
|
+
_injectCss = _async_to_generator(function(template, entryName2, styledComponentsStyleTags2) {
|
|
63
63
|
var css;
|
|
64
64
|
function getCssChunks() {
|
|
65
65
|
return _getCssChunks.apply(this, arguments);
|
|
66
66
|
}
|
|
67
67
|
function _getCssChunks() {
|
|
68
68
|
_getCssChunks = _async_to_generator(function() {
|
|
69
|
-
var routeManifest, routerContext, routes, routeAssets,
|
|
69
|
+
var routeManifest, routerContext, routes, routeAssets, matches, matchedRouteManifests, asyncEntry, cssChunks, enableInlineStyles, styles;
|
|
70
70
|
return _ts_generator(this, function(_state) {
|
|
71
71
|
switch (_state.label) {
|
|
72
72
|
case 0:
|
|
@@ -78,25 +78,28 @@ function _buildShellBeforeTemplate() {
|
|
|
78
78
|
];
|
|
79
79
|
}
|
|
80
80
|
routeAssets = routeManifest.routeAssets;
|
|
81
|
-
cssChunks = [];
|
|
82
81
|
matches = matchRoutes(routes, routerContext.location, routerContext.basename);
|
|
83
|
-
matches === null || matches === void 0 ? void 0 : matches.
|
|
82
|
+
matchedRouteManifests = matches === null || matches === void 0 ? void 0 : matches.map(function(match, index) {
|
|
84
83
|
if (!index) {
|
|
85
84
|
return;
|
|
86
85
|
}
|
|
87
86
|
var routeId = match.route.id;
|
|
88
87
|
if (routeId) {
|
|
89
88
|
var routeManifest2 = routeAssets[routeId];
|
|
90
|
-
|
|
91
|
-
var _cssChunks;
|
|
92
|
-
var _routeManifest_referenceCssAssets = routeManifest2.referenceCssAssets, referenceCssAssets = _routeManifest_referenceCssAssets === void 0 ? [] : _routeManifest_referenceCssAssets;
|
|
93
|
-
var _cssChunks1 = referenceCssAssets.filter(function(asset) {
|
|
94
|
-
return (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset);
|
|
95
|
-
});
|
|
96
|
-
(_cssChunks = cssChunks).push.apply(_cssChunks, _to_consumable_array(_cssChunks1));
|
|
97
|
-
}
|
|
89
|
+
return routeManifest2;
|
|
98
90
|
}
|
|
99
|
-
});
|
|
91
|
+
}).filter(Boolean);
|
|
92
|
+
asyncEntry = routeAssets["async-".concat(entryName2)];
|
|
93
|
+
if (asyncEntry) {
|
|
94
|
+
matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.push(asyncEntry);
|
|
95
|
+
}
|
|
96
|
+
cssChunks = matchedRouteManifests ? matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.reduce(function(chunks, routeManifest2) {
|
|
97
|
+
var _routeManifest_referenceCssAssets = routeManifest2.referenceCssAssets, referenceCssAssets = _routeManifest_referenceCssAssets === void 0 ? [] : _routeManifest_referenceCssAssets;
|
|
98
|
+
var _cssChunks = referenceCssAssets.filter(function(asset) {
|
|
99
|
+
return (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset);
|
|
100
|
+
});
|
|
101
|
+
return _to_consumable_array(chunks).concat(_to_consumable_array(_cssChunks));
|
|
102
|
+
}, []) : [];
|
|
100
103
|
enableInlineStyles = config.enableInlineStyles;
|
|
101
104
|
return [
|
|
102
105
|
4,
|
|
@@ -163,13 +166,13 @@ function _buildShellBeforeTemplate() {
|
|
|
163
166
|
return _injectCss.apply(this, arguments);
|
|
164
167
|
}
|
|
165
168
|
return _ts_generator(this, function(_state) {
|
|
166
|
-
config = options.config, runtimeContext = options.runtimeContext, styledComponentsStyleTags = options.styledComponentsStyleTags;
|
|
169
|
+
config = options.config, runtimeContext = options.runtimeContext, styledComponentsStyleTags = options.styledComponentsStyleTags, entryName = options.entryName;
|
|
167
170
|
helmetData = ReactHelmet.renderStatic();
|
|
168
171
|
callbacks = [
|
|
169
172
|
createReplaceHelemt(helmetData),
|
|
170
173
|
// @TODO: prefetch scripts of lazy component
|
|
171
174
|
function(template) {
|
|
172
|
-
return injectCss(template, styledComponentsStyleTags);
|
|
175
|
+
return injectCss(template, entryName, styledComponentsStyleTags);
|
|
173
176
|
}
|
|
174
177
|
];
|
|
175
178
|
return [
|
|
@@ -12,7 +12,7 @@ import { getTemplates } from "./template";
|
|
|
12
12
|
import { ShellChunkStatus, getReadableStreamFromString } from "./shared";
|
|
13
13
|
var createReadableStreamFromElement = function() {
|
|
14
14
|
var _ref = _async_to_generator(function(request, rootElement, options) {
|
|
15
|
-
var renderToPipeableStream, runtimeContext, htmlTemplate, config, ssrConfig, shellChunkStatus, renderLevel, forceStream2String, isbot, onReady, sheet, chunkVec, root;
|
|
15
|
+
var renderToPipeableStream, runtimeContext, htmlTemplate, config, ssrConfig, entryName, shellChunkStatus, renderLevel, forceStream2String, isbot, onReady, sheet, chunkVec, root;
|
|
16
16
|
return _ts_generator(this, function(_state) {
|
|
17
17
|
switch (_state.label) {
|
|
18
18
|
case 0:
|
|
@@ -22,7 +22,7 @@ var createReadableStreamFromElement = function() {
|
|
|
22
22
|
];
|
|
23
23
|
case 1:
|
|
24
24
|
renderToPipeableStream = _state.sent().renderToPipeableStream;
|
|
25
|
-
runtimeContext = options.runtimeContext, htmlTemplate = options.htmlTemplate, config = options.config, ssrConfig = options.ssrConfig;
|
|
25
|
+
runtimeContext = options.runtimeContext, htmlTemplate = options.htmlTemplate, config = options.config, ssrConfig = options.ssrConfig, entryName = options.entryName;
|
|
26
26
|
shellChunkStatus = ShellChunkStatus.START;
|
|
27
27
|
renderLevel = RenderLevel.SERVER_RENDER;
|
|
28
28
|
forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
|
|
@@ -47,6 +47,7 @@ var createReadableStreamFromElement = function() {
|
|
|
47
47
|
renderLevel,
|
|
48
48
|
runtimeContext,
|
|
49
49
|
config,
|
|
50
|
+
entryName,
|
|
50
51
|
styledComponentsStyleTags
|
|
51
52
|
}).then(function(param) {
|
|
52
53
|
var shellAfter = param.shellAfter, shellBefore = param.shellBefore;
|
|
@@ -85,6 +86,7 @@ var createReadableStreamFromElement = function() {
|
|
|
85
86
|
ssrConfig,
|
|
86
87
|
renderLevel,
|
|
87
88
|
runtimeContext,
|
|
89
|
+
entryName,
|
|
88
90
|
config
|
|
89
91
|
}).then(function(param) {
|
|
90
92
|
var shellAfter = param.shellAfter, shellBefore = param.shellBefore;
|
|
@@ -8,13 +8,13 @@ import { ShellChunkStatus, encodeForWebStream, getReadableStreamFromString } fro
|
|
|
8
8
|
import { getTemplates } from "./template";
|
|
9
9
|
var createReadableStreamFromElement = function() {
|
|
10
10
|
var _ref = _async_to_generator(function(request, rootElement, options) {
|
|
11
|
-
var shellChunkStatus, chunkVec, htmlTemplate, runtimeContext, config, ssrConfig, _ref2, shellBefore, shellAfter, _options_onShellReady, readableOriginal, isbot, reader, stream, e, fallbackHtml, stream1;
|
|
11
|
+
var shellChunkStatus, chunkVec, htmlTemplate, runtimeContext, config, ssrConfig, entryName, _ref2, shellBefore, shellAfter, _options_onShellReady, readableOriginal, isbot, reader, stream, e, fallbackHtml, stream1;
|
|
12
12
|
return _ts_generator(this, function(_state) {
|
|
13
13
|
switch (_state.label) {
|
|
14
14
|
case 0:
|
|
15
15
|
shellChunkStatus = ShellChunkStatus.START;
|
|
16
16
|
chunkVec = [];
|
|
17
|
-
htmlTemplate = options.htmlTemplate, runtimeContext = options.runtimeContext, config = options.config, ssrConfig = options.ssrConfig;
|
|
17
|
+
htmlTemplate = options.htmlTemplate, runtimeContext = options.runtimeContext, config = options.config, ssrConfig = options.ssrConfig, entryName = options.entryName;
|
|
18
18
|
return [
|
|
19
19
|
4,
|
|
20
20
|
getTemplates(htmlTemplate, {
|
|
@@ -22,7 +22,8 @@ var createReadableStreamFromElement = function() {
|
|
|
22
22
|
runtimeContext,
|
|
23
23
|
ssrConfig,
|
|
24
24
|
request,
|
|
25
|
-
config
|
|
25
|
+
config,
|
|
26
|
+
entryName
|
|
26
27
|
})
|
|
27
28
|
];
|
|
28
29
|
case 1:
|
|
@@ -45,7 +45,7 @@ const generateCode = async (entrypoints, appContext, config, onCollectRuntimePlu
|
|
|
45
45
|
const ssrMode = getSSRMode(entryName, config);
|
|
46
46
|
if (enableAsyncEntry) {
|
|
47
47
|
const bootstrapFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_BOOTSTRAP_FILE_NAME}`);
|
|
48
|
-
fs.outputFileSync(bootstrapFile, `import('./${INDEX_FILE_NAME}');`, "utf8");
|
|
48
|
+
fs.outputFileSync(bootstrapFile, `import(/* webpackChunkName: "async-${entryName}" */ './${INDEX_FILE_NAME}');`, "utf8");
|
|
49
49
|
const bootstrapServerFile = path.resolve(internalDirectory, `./${entryName}/${ENTRY_SERVER_BOOTSTRAP_FILE_NAME}`);
|
|
50
50
|
if (ssrMode) {
|
|
51
51
|
fs.outputFileSync(bootstrapServerFile, `export const requestHandler = import('./${SERVER_ENTRY_POINT_FILE_NAME}').then((m) => m.requestHandler)`, "utf8");
|
|
@@ -33,7 +33,10 @@ const getImportRuntimeConfigCode = (srcDirectory, internalSrcAlias, runtimeConfi
|
|
|
33
33
|
}
|
|
34
34
|
return `let runtimeConfig;`;
|
|
35
35
|
};
|
|
36
|
-
const getRegisterRuntimePluginCode = (entryName, name, config) =>
|
|
36
|
+
const getRegisterRuntimePluginCode = (entryName, name, config) => {
|
|
37
|
+
const configName = name === "garfish" ? "masterApp" : name;
|
|
38
|
+
return `plugins.push(${name}Plugin(mergeConfig(${JSON.stringify(config)}, (runtimeConfig || {})['${configName}'], ((runtimeConfig || {})['${configName}ByEntries'] || {})['${entryName}'], (getGlobalAppConfig() || {})['${configName}'])));`;
|
|
39
|
+
};
|
|
37
40
|
const runtimeRegister = ({ entryName, srcDirectory, internalSrcAlias, metaName, runtimeConfigFile, runtimePlugins }) => `import { registerPlugin, mergeConfig } from '@${metaName}/runtime/plugin';
|
|
38
41
|
import { getGlobalAppConfig, getGlobalLayoutApp } from '@${metaName}/runtime/context';
|
|
39
42
|
${getImportRuntimeConfigCode(srcDirectory, internalSrcAlias, runtimeConfigFile)}
|
|
@@ -10,12 +10,15 @@ function createSSRContext(request, options) {
|
|
|
10
10
|
const { config, loaderContext, onError, onTiming, locals, resource, params, responseProxy, logger, metrics, reporter } = options;
|
|
11
11
|
const { nonce } = config;
|
|
12
12
|
const { entryName, route } = resource;
|
|
13
|
-
const
|
|
13
|
+
const { headers } = request;
|
|
14
|
+
const cookie = headers.get("cookie") || "";
|
|
14
15
|
const cookieMap = parseCookie(request);
|
|
15
16
|
const pathname = getPathname(request);
|
|
16
17
|
const query = parseQuery(request);
|
|
17
18
|
const headersData = parseHeaders(request);
|
|
18
19
|
const url = new URL(request.url);
|
|
20
|
+
const host = headers.get("X-Forwarded-Host") || headers.get("host") || url.host;
|
|
21
|
+
const protocal = `${headers.get("X-Forwarded-Proto") || url.protocol || "http"}:`;
|
|
19
22
|
const ssrConfig = getSSRConfigByEntry(entryName, config.ssr, config.ssrByEntries);
|
|
20
23
|
const ssrMode = getSSRMode(ssrConfig);
|
|
21
24
|
const loaderFailureMode = typeof ssrConfig === "object" ? ssrConfig.loaderFailureMode : void 0;
|
|
@@ -27,15 +30,16 @@ function createSSRContext(request, options) {
|
|
|
27
30
|
logger,
|
|
28
31
|
metrics,
|
|
29
32
|
request: {
|
|
33
|
+
url: request.url.replace(url.host, host).replace(url.protocol, protocal),
|
|
30
34
|
baseUrl: route.urlPath,
|
|
31
|
-
userAgent:
|
|
35
|
+
userAgent: headers.get("user-agent"),
|
|
32
36
|
cookie,
|
|
33
37
|
cookieMap,
|
|
34
38
|
pathname,
|
|
35
39
|
query,
|
|
36
40
|
params,
|
|
37
41
|
headers: headersData,
|
|
38
|
-
host
|
|
42
|
+
host,
|
|
39
43
|
raw: request
|
|
40
44
|
},
|
|
41
45
|
response: {
|
|
@@ -3,7 +3,7 @@ import { attributesToString, safeReplace } from "../utils";
|
|
|
3
3
|
import { SSR_DATA_PLACEHOLDER } from "../constants";
|
|
4
4
|
import { buildHtml } from "../shared";
|
|
5
5
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
6
|
-
const { request, config, ssrConfig, runtimeContext, renderLevel } = options;
|
|
6
|
+
const { request, config, ssrConfig, runtimeContext, renderLevel, entryName } = options;
|
|
7
7
|
const callbacks = [
|
|
8
8
|
createReplaceSSRData({
|
|
9
9
|
request,
|
|
@@ -11,8 +11,25 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
11
11
|
nonce: config.nonce,
|
|
12
12
|
runtimeContext,
|
|
13
13
|
renderLevel
|
|
14
|
-
})
|
|
14
|
+
}),
|
|
15
|
+
(template) => injectJs(template, entryName, config.nonce)
|
|
15
16
|
];
|
|
17
|
+
async function injectJs(template, entryName2, nonce) {
|
|
18
|
+
const { routeManifest } = runtimeContext;
|
|
19
|
+
const { routeAssets } = routeManifest;
|
|
20
|
+
const asyncEntry = routeAssets[`async-${entryName2}`];
|
|
21
|
+
if (asyncEntry) {
|
|
22
|
+
var _assets_filter;
|
|
23
|
+
const { assets } = asyncEntry;
|
|
24
|
+
const jsChunkStr = assets === null || assets === void 0 ? void 0 : (_assets_filter = assets.filter((asset) => asset.endsWith(".js"))) === null || _assets_filter === void 0 ? void 0 : _assets_filter.map((asset) => {
|
|
25
|
+
return `<script src=${asset} nonce="${nonce}"></script>`;
|
|
26
|
+
}).join(" ");
|
|
27
|
+
if (jsChunkStr) {
|
|
28
|
+
return safeReplace(template, "<!--<?- chunksMap.js ?>-->", jsChunkStr);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return template;
|
|
32
|
+
}
|
|
16
33
|
return buildHtml(afterAppTemplate, callbacks);
|
|
17
34
|
}
|
|
18
35
|
function createReplaceSSRData(options) {
|
|
@@ -36,7 +53,7 @@ function createReplaceSSRData(options) {
|
|
|
36
53
|
params: request.params,
|
|
37
54
|
pathname: request.pathname,
|
|
38
55
|
host: request.host,
|
|
39
|
-
url: request.
|
|
56
|
+
url: request.url,
|
|
40
57
|
headers
|
|
41
58
|
}
|
|
42
59
|
},
|
|
@@ -22,15 +22,15 @@ const checkIsInline = (chunk, enableInline) => {
|
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
24
|
async function buildShellBeforeTemplate(beforeAppTemplate, options) {
|
|
25
|
-
const { config, runtimeContext, styledComponentsStyleTags } = options;
|
|
25
|
+
const { config, runtimeContext, styledComponentsStyleTags, entryName } = options;
|
|
26
26
|
const helmetData = ReactHelmet.renderStatic();
|
|
27
27
|
const callbacks = [
|
|
28
28
|
createReplaceHelemt(helmetData),
|
|
29
29
|
// @TODO: prefetch scripts of lazy component
|
|
30
|
-
(template) => injectCss(template, styledComponentsStyleTags)
|
|
30
|
+
(template) => injectCss(template, entryName, styledComponentsStyleTags)
|
|
31
31
|
];
|
|
32
32
|
return buildHtml(beforeAppTemplate, callbacks);
|
|
33
|
-
async function injectCss(template, styledComponentsStyleTags2) {
|
|
33
|
+
async function injectCss(template, entryName2, styledComponentsStyleTags2) {
|
|
34
34
|
let css = await getCssChunks();
|
|
35
35
|
if (styledComponentsStyleTags2) {
|
|
36
36
|
css += styledComponentsStyleTags2;
|
|
@@ -42,22 +42,29 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
|
|
|
42
42
|
return "";
|
|
43
43
|
}
|
|
44
44
|
const { routeAssets } = routeManifest;
|
|
45
|
-
const cssChunks = [];
|
|
46
45
|
const matches = matchRoutes(routes, routerContext.location, routerContext.basename);
|
|
47
|
-
matches === null || matches === void 0 ? void 0 : matches.
|
|
46
|
+
const matchedRouteManifests = matches === null || matches === void 0 ? void 0 : matches.map((match, index) => {
|
|
48
47
|
if (!index) {
|
|
49
48
|
return;
|
|
50
49
|
}
|
|
51
50
|
const routeId = match.route.id;
|
|
52
51
|
if (routeId) {
|
|
53
52
|
const routeManifest2 = routeAssets[routeId];
|
|
54
|
-
|
|
55
|
-
const { referenceCssAssets = [] } = routeManifest2;
|
|
56
|
-
const _cssChunks = referenceCssAssets.filter((asset) => (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset));
|
|
57
|
-
cssChunks.push(..._cssChunks);
|
|
58
|
-
}
|
|
53
|
+
return routeManifest2;
|
|
59
54
|
}
|
|
60
|
-
});
|
|
55
|
+
}).filter(Boolean);
|
|
56
|
+
const asyncEntry = routeAssets[`async-${entryName2}`];
|
|
57
|
+
if (asyncEntry) {
|
|
58
|
+
matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.push(asyncEntry);
|
|
59
|
+
}
|
|
60
|
+
const cssChunks = matchedRouteManifests ? matchedRouteManifests === null || matchedRouteManifests === void 0 ? void 0 : matchedRouteManifests.reduce((chunks, routeManifest2) => {
|
|
61
|
+
const { referenceCssAssets = [] } = routeManifest2;
|
|
62
|
+
const _cssChunks = referenceCssAssets.filter((asset) => (asset === null || asset === void 0 ? void 0 : asset.endsWith(".css")) && !template.includes(asset));
|
|
63
|
+
return [
|
|
64
|
+
...chunks,
|
|
65
|
+
..._cssChunks
|
|
66
|
+
];
|
|
67
|
+
}, []) : [];
|
|
61
68
|
const { enableInlineStyles } = config;
|
|
62
69
|
const styles = await Promise.all(cssChunks.map(async (chunk) => {
|
|
63
70
|
const link = `<link href="${chunk}" rel="stylesheet" />`;
|
|
@@ -8,7 +8,7 @@ import { getTemplates } from "./template";
|
|
|
8
8
|
import { ShellChunkStatus, getReadableStreamFromString } from "./shared";
|
|
9
9
|
const createReadableStreamFromElement = async (request, rootElement, options) => {
|
|
10
10
|
const { renderToPipeableStream } = await import("react-dom/server");
|
|
11
|
-
const { runtimeContext, htmlTemplate, config, ssrConfig } = options;
|
|
11
|
+
const { runtimeContext, htmlTemplate, config, ssrConfig, entryName } = options;
|
|
12
12
|
let shellChunkStatus = ShellChunkStatus.START;
|
|
13
13
|
let renderLevel = RenderLevel.SERVER_RENDER;
|
|
14
14
|
const forceStream2String = Boolean(process.env.MODERN_JS_STREAM_TO_STRING);
|
|
@@ -30,6 +30,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
30
30
|
renderLevel,
|
|
31
31
|
runtimeContext,
|
|
32
32
|
config,
|
|
33
|
+
entryName,
|
|
33
34
|
styledComponentsStyleTags
|
|
34
35
|
}).then(({ shellAfter, shellBefore }) => {
|
|
35
36
|
const body = new Transform({
|
|
@@ -68,6 +69,7 @@ const createReadableStreamFromElement = async (request, rootElement, options) =>
|
|
|
68
69
|
ssrConfig,
|
|
69
70
|
renderLevel,
|
|
70
71
|
runtimeContext,
|
|
72
|
+
entryName,
|
|
71
73
|
config
|
|
72
74
|
}).then(({ shellAfter, shellBefore }) => {
|
|
73
75
|
var _options_onShellError;
|
|
@@ -7,13 +7,14 @@ import { getTemplates } from "./template";
|
|
|
7
7
|
const createReadableStreamFromElement = async (request, rootElement, options) => {
|
|
8
8
|
let shellChunkStatus = ShellChunkStatus.START;
|
|
9
9
|
const chunkVec = [];
|
|
10
|
-
const { htmlTemplate, runtimeContext, config, ssrConfig } = options;
|
|
10
|
+
const { htmlTemplate, runtimeContext, config, ssrConfig, entryName } = options;
|
|
11
11
|
const { shellBefore, shellAfter } = await getTemplates(htmlTemplate, {
|
|
12
12
|
renderLevel: RenderLevel.SERVER_RENDER,
|
|
13
13
|
runtimeContext,
|
|
14
14
|
ssrConfig,
|
|
15
15
|
request,
|
|
16
|
-
config
|
|
16
|
+
config,
|
|
17
|
+
entryName
|
|
17
18
|
});
|
|
18
19
|
try {
|
|
19
20
|
var _options_onShellReady;
|
|
@@ -7,6 +7,7 @@ export type BuildShellAfterTemplateOptions = {
|
|
|
7
7
|
renderLevel: RenderLevel;
|
|
8
8
|
ssrConfig: SSRConfig;
|
|
9
9
|
request: Request;
|
|
10
|
+
entryName: string;
|
|
10
11
|
config: HandleRequestConfig;
|
|
11
12
|
};
|
|
12
13
|
export declare function buildShellAfterTemplate(afterAppTemplate: string, options: BuildShellAfterTemplateOptions): Promise<string>;
|
|
@@ -2,6 +2,7 @@ import { RuntimeContext } from '../../context';
|
|
|
2
2
|
import { HandleRequestConfig } from '../requestHandler';
|
|
3
3
|
export interface BuildShellBeforeTemplateOptions {
|
|
4
4
|
runtimeContext: RuntimeContext;
|
|
5
|
+
entryName: string;
|
|
5
6
|
config: HandleRequestConfig;
|
|
6
7
|
styledComponentsStyleTags?: string;
|
|
7
8
|
}
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.58.
|
|
18
|
+
"version": "2.58.1",
|
|
19
19
|
"engines": {
|
|
20
20
|
"node": ">=14.17.6"
|
|
21
21
|
},
|
|
@@ -177,8 +177,6 @@
|
|
|
177
177
|
"dependencies": {
|
|
178
178
|
"@babel/core": "^7.24.7",
|
|
179
179
|
"@babel/types": "^7.24.7",
|
|
180
|
-
"cookie": "0.5.0",
|
|
181
|
-
"isbot": "3.7.1",
|
|
182
180
|
"@loadable/babel-plugin": "5.15.3",
|
|
183
181
|
"@loadable/component": "5.15.3",
|
|
184
182
|
"@loadable/server": "5.15.3",
|
|
@@ -188,35 +186,37 @@
|
|
|
188
186
|
"@modern-js-reduck/plugin-immutable": "^1.1.10",
|
|
189
187
|
"@modern-js-reduck/react": "^1.1.10",
|
|
190
188
|
"@modern-js-reduck/store": "^1.1.10",
|
|
189
|
+
"@swc/helpers": "0.5.3",
|
|
191
190
|
"@types/loadable__component": "^5.13.4",
|
|
192
191
|
"@types/react-helmet": "^6.1.2",
|
|
193
192
|
"@types/styled-components": "^5.1.14",
|
|
194
|
-
"
|
|
193
|
+
"cookie": "0.5.0",
|
|
195
194
|
"es-module-lexer": "^1.1.0",
|
|
195
|
+
"esbuild": "0.17.19",
|
|
196
196
|
"invariant": "^2.2.4",
|
|
197
|
+
"isbot": "3.7.1",
|
|
197
198
|
"react-helmet": "^6.1.0",
|
|
198
199
|
"react-is": "^18",
|
|
199
200
|
"react-side-effect": "^2.1.1",
|
|
200
201
|
"styled-components": "^5.3.1",
|
|
201
|
-
"@
|
|
202
|
-
"@modern-js/
|
|
203
|
-
"@modern-js/plugin": "2.58.
|
|
204
|
-
"@modern-js/
|
|
205
|
-
"@modern-js/
|
|
206
|
-
"@modern-js/runtime-utils": "2.58.0"
|
|
202
|
+
"@modern-js/plugin": "2.58.1",
|
|
203
|
+
"@modern-js/runtime-utils": "2.58.1",
|
|
204
|
+
"@modern-js/plugin-data-loader": "2.58.1",
|
|
205
|
+
"@modern-js/types": "2.58.1",
|
|
206
|
+
"@modern-js/utils": "2.58.1"
|
|
207
207
|
},
|
|
208
208
|
"peerDependencies": {
|
|
209
209
|
"react": ">=17",
|
|
210
210
|
"react-dom": ">=17"
|
|
211
211
|
},
|
|
212
212
|
"devDependencies": {
|
|
213
|
-
"@rsbuild/core": "1.0.1-beta.9",
|
|
214
|
-
"@types/cookie": "0.5.1",
|
|
215
213
|
"@remix-run/web-fetch": "^4.1.3",
|
|
214
|
+
"@rsbuild/core": "1.0.1-beta.13",
|
|
216
215
|
"@testing-library/react": "^13.4.0",
|
|
216
|
+
"@types/cookie": "0.5.1",
|
|
217
217
|
"@types/invariant": "^2.2.30",
|
|
218
|
-
"@types/loadable__server": "5.12.11",
|
|
219
218
|
"@types/jest": "^29",
|
|
219
|
+
"@types/loadable__server": "5.12.11",
|
|
220
220
|
"@types/loadable__webpack-plugin": "^5.7.3",
|
|
221
221
|
"@types/node": "^14",
|
|
222
222
|
"@types/react-side-effect": "^1.1.1",
|
|
@@ -226,10 +226,10 @@
|
|
|
226
226
|
"ts-jest": "^29.1.0",
|
|
227
227
|
"typescript": "^5",
|
|
228
228
|
"webpack": "^5.93.0",
|
|
229
|
-
"@modern-js/app-tools": "2.58.
|
|
230
|
-
"@modern-js/core": "2.58.
|
|
231
|
-
"@scripts/
|
|
232
|
-
"@scripts/
|
|
229
|
+
"@modern-js/app-tools": "2.58.1",
|
|
230
|
+
"@modern-js/core": "2.58.1",
|
|
231
|
+
"@scripts/build": "2.58.1",
|
|
232
|
+
"@scripts/jest-config": "2.58.1"
|
|
233
233
|
},
|
|
234
234
|
"sideEffects": false,
|
|
235
235
|
"publishConfig": {
|