@modern-js/runtime 2.42.2 → 2.44.0
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/index.js +2 -3
- package/dist/cjs/ssr/cli/index.js +6 -4
- package/dist/cjs/ssr/index.js +11 -3
- package/dist/cjs/ssr/react/prerender/index.js +1 -0
- package/dist/cjs/ssr/serverRender/{renderToString/type.js → constants.js} +21 -11
- package/dist/cjs/ssr/serverRender/helmet.js +5 -4
- package/dist/cjs/ssr/serverRender/index.js +2 -2
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -1
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.share.js +1 -1
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +37 -10
- package/dist/cjs/ssr/serverRender/renderToStream/index.js +2 -7
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +32 -30
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
- package/dist/cjs/ssr/serverRender/renderToStream/template.js +3 -3
- package/dist/cjs/ssr/serverRender/renderToString/buildHtml.js +6 -12
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +14 -12
- package/dist/cjs/ssr/serverRender/renderToString/index.js +0 -5
- package/dist/cjs/ssr/serverRender/renderToString/loadable.js +2 -6
- package/dist/cjs/ssr/serverRender/types.js +7 -2
- package/dist/cjs/ssr/serverRender/utils.js +13 -11
- package/dist/esm/cli/index.js +2 -3
- package/dist/esm/ssr/cli/index.js +6 -4
- package/dist/esm/ssr/index.js +10 -2
- package/dist/esm/ssr/react/prerender/index.js +1 -0
- package/dist/esm/ssr/serverRender/constants.js +14 -0
- package/dist/esm/ssr/serverRender/helmet.js +5 -4
- package/dist/esm/ssr/serverRender/index.js +2 -2
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +3 -2
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -3
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +169 -33
- package/dist/esm/ssr/serverRender/renderToStream/index.js +2 -7
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +34 -30
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +23 -13
- package/dist/esm/ssr/serverRender/renderToStream/template.js +37 -11
- package/dist/esm/ssr/serverRender/renderToString/buildHtml.js +6 -13
- package/dist/esm/ssr/serverRender/renderToString/entry.js +19 -13
- package/dist/esm/ssr/serverRender/renderToString/index.js +1 -6
- package/dist/esm/ssr/serverRender/renderToString/loadable.js +3 -7
- package/dist/esm/ssr/serverRender/types.js +6 -1
- package/dist/esm/ssr/serverRender/utils.js +12 -7
- package/dist/esm-node/cli/index.js +2 -3
- package/dist/esm-node/ssr/cli/index.js +6 -4
- package/dist/esm-node/ssr/index.js +9 -1
- package/dist/esm-node/ssr/react/prerender/index.js +1 -0
- package/dist/esm-node/ssr/serverRender/constants.js +14 -0
- package/dist/esm-node/ssr/serverRender/helmet.js +5 -4
- package/dist/esm-node/ssr/serverRender/index.js +2 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +3 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.share.js +1 -1
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +38 -11
- package/dist/esm-node/ssr/serverRender/renderToStream/index.js +2 -7
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +32 -30
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
- package/dist/esm-node/ssr/serverRender/renderToStream/template.js +3 -3
- package/dist/esm-node/ssr/serverRender/renderToString/buildHtml.js +6 -12
- package/dist/esm-node/ssr/serverRender/renderToString/entry.js +13 -11
- package/dist/esm-node/ssr/serverRender/renderToString/index.js +0 -5
- package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +3 -7
- package/dist/esm-node/ssr/serverRender/types.js +6 -1
- package/dist/esm-node/ssr/serverRender/utils.js +10 -7
- package/dist/types/exports/server.d.ts +1 -0
- package/dist/types/ssr/react/prerender/index.d.ts +4 -0
- package/dist/types/ssr/serverRender/constants.d.ts +6 -0
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +1 -1
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/index.d.ts +1 -1
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
- package/dist/types/ssr/serverRender/renderToString/entry.d.ts +1 -2
- package/dist/types/ssr/serverRender/renderToString/loadable.d.ts +1 -2
- package/dist/types/ssr/serverRender/renderToString/styledComponent.d.ts +1 -1
- package/dist/types/ssr/serverRender/types.d.ts +15 -2
- package/dist/types/ssr/serverRender/utils.d.ts +8 -3
- package/package.json +12 -12
- package/dist/esm/ssr/serverRender/renderToString/type.js +0 -9
- package/dist/esm-node/ssr/serverRender/renderToString/type.js +0 -9
- package/dist/types/ssr/serverRender/renderToString/type.d.ts +0 -13
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { createElement } from "react";
|
|
2
2
|
import { run } from "@modern-js/runtime-utils/node";
|
|
3
3
|
import { time } from "@modern-js/runtime-utils/time";
|
|
4
|
-
import { PreRender } from "../../react/prerender";
|
|
5
4
|
import { SSRErrors, SSRTimings } from "../tracker";
|
|
6
5
|
import renderToPipe from "./renderToPipe";
|
|
7
|
-
const render = ({ App, context }) => {
|
|
6
|
+
const render = ({ App, context, config }) => {
|
|
8
7
|
const { ssrContext } = context;
|
|
9
8
|
if (!ssrContext) {
|
|
10
9
|
throw new Error('The "ssrContext" must not be undefined, but received undefined');
|
|
@@ -17,12 +16,8 @@ const render = ({ App, context }) => {
|
|
|
17
16
|
})
|
|
18
17
|
});
|
|
19
18
|
const { tracker } = ssrContext;
|
|
20
|
-
const pipe = renderToPipe(rootElement, context, {
|
|
19
|
+
const pipe = renderToPipe(rootElement, context, config, {
|
|
21
20
|
onShellReady() {
|
|
22
|
-
const cacheConfig = PreRender.config();
|
|
23
|
-
if (cacheConfig) {
|
|
24
|
-
ssrContext.cacheConfig = cacheConfig;
|
|
25
|
-
}
|
|
26
21
|
const cost = end();
|
|
27
22
|
tracker.trackTiming(SSRTimings.RENDER_SHELL, cost);
|
|
28
23
|
},
|
|
@@ -7,7 +7,7 @@ var ShellChunkStatus;
|
|
|
7
7
|
ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
|
|
8
8
|
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
|
|
9
9
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
10
|
-
function renderToPipe(rootElement, context, options) {
|
|
10
|
+
function renderToPipe(rootElement, context, pluginConfig, options) {
|
|
11
11
|
let shellChunkStatus = 0;
|
|
12
12
|
const { ssrContext } = context;
|
|
13
13
|
const chunkVec = [];
|
|
@@ -22,41 +22,43 @@ function renderToPipe(rootElement, context, options) {
|
|
|
22
22
|
...options,
|
|
23
23
|
nonce: ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.nonce,
|
|
24
24
|
onShellReady() {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
getTemplates(context, RenderLevel.SERVER_RENDER, pluginConfig).then(({ shellAfter, shellBefore }) => {
|
|
26
|
+
var _options_onShellReady;
|
|
27
|
+
options === null || options === void 0 ? void 0 : (_options_onShellReady = options.onShellReady) === null || _options_onShellReady === void 0 ? void 0 : _options_onShellReady.call(options);
|
|
28
|
+
const injectableTransform = new Transform({
|
|
29
|
+
transform(chunk, _encoding, callback) {
|
|
30
|
+
try {
|
|
31
|
+
if (shellChunkStatus !== 1) {
|
|
32
|
+
chunkVec.push(chunk.toString());
|
|
33
|
+
let concatedChunk = chunkVec.join("");
|
|
34
|
+
if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
35
|
+
concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
|
|
36
|
+
shellChunkStatus = 1;
|
|
37
|
+
this.push(`${shellBefore}${concatedChunk}${shellAfter}`);
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
this.push(chunk);
|
|
41
|
+
}
|
|
42
|
+
callback();
|
|
43
|
+
} catch (e) {
|
|
44
|
+
if (e instanceof Error) {
|
|
45
|
+
callback(e);
|
|
46
|
+
} else {
|
|
47
|
+
callback(new Error("Received unkown error when streaming"));
|
|
38
48
|
}
|
|
39
|
-
} else {
|
|
40
|
-
this.push(chunk);
|
|
41
|
-
}
|
|
42
|
-
callback();
|
|
43
|
-
} catch (e) {
|
|
44
|
-
if (e instanceof Error) {
|
|
45
|
-
callback(e);
|
|
46
|
-
} else {
|
|
47
|
-
callback(new Error("Received unkown error when streaming"));
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
|
-
}
|
|
51
|
+
});
|
|
52
|
+
resolve(pipe(injectableTransform).pipe(stream));
|
|
51
53
|
});
|
|
52
|
-
resolve(pipe(injectableTransform).pipe(stream));
|
|
53
54
|
},
|
|
54
55
|
onShellError(error) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
getTemplates(context, RenderLevel.CLIENT_RENDER, pluginConfig).then(({ shellAfter, shellBefore }) => {
|
|
57
|
+
var _options_onShellError;
|
|
58
|
+
const fallbackHtml = `${shellBefore}${shellAfter}`;
|
|
59
|
+
resolve(fallbackHtml);
|
|
60
|
+
options === null || options === void 0 ? void 0 : (_options_onShellError = options.onShellError) === null || _options_onShellError === void 0 ? void 0 : _options_onShellError.call(options, error);
|
|
61
|
+
});
|
|
60
62
|
}
|
|
61
63
|
});
|
|
62
64
|
});
|
|
@@ -7,7 +7,7 @@ var ShellChunkStatus;
|
|
|
7
7
|
ShellChunkStatus2[ShellChunkStatus2["START"] = 0] = "START";
|
|
8
8
|
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
|
|
9
9
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
10
|
-
function renderToPipe(rootElement, context, options) {
|
|
10
|
+
function renderToPipe(rootElement, context, pluginConfig, options) {
|
|
11
11
|
let shellChunkStatus = 0;
|
|
12
12
|
const chunkVec = [];
|
|
13
13
|
const { ssrContext } = context;
|
|
@@ -17,7 +17,7 @@ function renderToPipe(rootElement, context, options) {
|
|
|
17
17
|
({ renderToReadableStream } = require("react-dom/server"));
|
|
18
18
|
} catch (e) {
|
|
19
19
|
}
|
|
20
|
-
const { shellAfter, shellBefore } = getTemplates(context, RenderLevel.SERVER_RENDER);
|
|
20
|
+
const { shellAfter, shellBefore } = await getTemplates(context, RenderLevel.SERVER_RENDER, pluginConfig);
|
|
21
21
|
try {
|
|
22
22
|
const readableOriginal = await renderToReadableStream(rootElement, {
|
|
23
23
|
...options,
|
|
@@ -56,7 +56,7 @@ function renderToPipe(rootElement, context, options) {
|
|
|
56
56
|
return injectableStream;
|
|
57
57
|
} catch (err) {
|
|
58
58
|
ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.tracker.trackError(SSRErrors.RENDER_SHELL, err);
|
|
59
|
-
const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = getTemplates(context, RenderLevel.CLIENT_RENDER);
|
|
59
|
+
const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = await getTemplates(context, RenderLevel.CLIENT_RENDER, pluginConfig);
|
|
60
60
|
const fallbackHtml = `${shellBefore2}${shellAfter2}`;
|
|
61
61
|
return fallbackHtml;
|
|
62
62
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { buildShellAfterTemplate } from "./buildTemplate.after";
|
|
2
2
|
import { buildShellBeforeTemplate } from "./bulidTemplate.before";
|
|
3
3
|
const HTML_SEPARATOR = "<!--<?- html ?>-->";
|
|
4
|
-
const getTemplates = (context, renderLevel) => {
|
|
4
|
+
const getTemplates = async (context, renderLevel, pluginConfig) => {
|
|
5
5
|
const { ssrContext } = context;
|
|
6
6
|
const [beforeAppTemplate = "", afterAppHtmlTemplate = ""] = ssrContext.template.split(HTML_SEPARATOR) || [];
|
|
7
|
-
const builtBeforeTemplate = buildShellBeforeTemplate(beforeAppTemplate, context);
|
|
8
|
-
const builtAfterTemplate = buildShellAfterTemplate(afterAppHtmlTemplate, {
|
|
7
|
+
const builtBeforeTemplate = await buildShellBeforeTemplate(beforeAppTemplate, context, pluginConfig);
|
|
8
|
+
const builtAfterTemplate = await buildShellAfterTemplate(afterAppHtmlTemplate, {
|
|
9
9
|
context,
|
|
10
10
|
renderLevel
|
|
11
11
|
});
|
|
@@ -1,25 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return s1 + replaceValue + s2;
|
|
4
|
-
}
|
|
1
|
+
import { safeReplace } from "../utils";
|
|
2
|
+
import { HTML_PLACEHOLDER, SSR_DATA_PLACEHOLDER, CHUNK_JS_PLACEHOLDER, CHUNK_CSS_PLACEHOLDER } from "../constants";
|
|
5
3
|
function buildHtml(template, callbacks) {
|
|
6
4
|
return callbacks.reduce((tmp, cb) => cb(tmp), template);
|
|
7
5
|
}
|
|
8
6
|
function createReplaceHtml(html) {
|
|
9
|
-
|
|
10
|
-
return (template) => unsafeReplace(template, HTML_REMARK, html);
|
|
7
|
+
return (template) => safeReplace(template, HTML_PLACEHOLDER, html);
|
|
11
8
|
}
|
|
12
9
|
function createReplaceSSRDataScript(data) {
|
|
13
|
-
|
|
14
|
-
return (template) => unsafeReplace(template, SSR_DATA_REMARK, data);
|
|
10
|
+
return (template) => safeReplace(template, SSR_DATA_PLACEHOLDER, data);
|
|
15
11
|
}
|
|
16
12
|
function createReplaceChunkJs(js) {
|
|
17
|
-
|
|
18
|
-
return (template) => unsafeReplace(template, CHUNK_JS_REMARK, js);
|
|
13
|
+
return (template) => safeReplace(template, CHUNK_JS_PLACEHOLDER, js);
|
|
19
14
|
}
|
|
20
15
|
function createReplaceChunkCss(css) {
|
|
21
|
-
|
|
22
|
-
return (template) => unsafeReplace(template, CHUNK_CSS_REG, css);
|
|
16
|
+
return (template) => safeReplace(template, CHUNK_CSS_PLACEHOLDER, css);
|
|
23
17
|
}
|
|
24
18
|
export {
|
|
25
19
|
buildHtml,
|
|
@@ -7,17 +7,20 @@ import { serializeErrors } from "../../../router/runtime/utils";
|
|
|
7
7
|
import helmetReplace from "../helmet";
|
|
8
8
|
import { RenderLevel } from "../types";
|
|
9
9
|
import prefetch from "../../prefetch";
|
|
10
|
-
import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID
|
|
10
|
+
import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID } from "../constants";
|
|
11
|
+
import { attributesToString } from "../utils";
|
|
11
12
|
import { SSRErrors, SSRTimings } from "../tracker";
|
|
12
13
|
import { createLoadableCollector } from "./loadable";
|
|
13
14
|
import { createRender } from "./render";
|
|
14
15
|
import { createStyledCollector } from "./styledComponent";
|
|
15
16
|
import { buildHtml, createReplaceChunkCss, createReplaceChunkJs, createReplaceHtml, createReplaceSSRDataScript } from "./buildHtml";
|
|
16
|
-
const buildTemplateData = (context, data, renderLevel, tracker) => {
|
|
17
|
-
const { request
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const buildTemplateData = (context, data, renderLevel, tracker, config) => {
|
|
18
|
+
const { request } = context;
|
|
19
|
+
const { unsafeHeaders } = config;
|
|
20
|
+
const headers = unsafeHeaders ? Object.fromEntries(Object.entries(request.headers).filter(([key, _]) => {
|
|
21
|
+
var _unsafeHeaders_map;
|
|
22
|
+
return unsafeHeaders === null || unsafeHeaders === void 0 ? void 0 : (_unsafeHeaders_map = unsafeHeaders.map((header) => header.toLowerCase())) === null || _unsafeHeaders_map === void 0 ? void 0 : _unsafeHeaders_map.includes(key.toLowerCase());
|
|
23
|
+
})) : void 0;
|
|
21
24
|
return {
|
|
22
25
|
data,
|
|
23
26
|
context: {
|
|
@@ -27,7 +30,7 @@ const buildTemplateData = (context, data, renderLevel, tracker) => {
|
|
|
27
30
|
pathname: request.pathname,
|
|
28
31
|
host: request.host,
|
|
29
32
|
url: request.url,
|
|
30
|
-
|
|
33
|
+
headers
|
|
31
34
|
},
|
|
32
35
|
reporter: {
|
|
33
36
|
sessionId: tracker.sessionId
|
|
@@ -36,8 +39,7 @@ const buildTemplateData = (context, data, renderLevel, tracker) => {
|
|
|
36
39
|
renderLevel
|
|
37
40
|
};
|
|
38
41
|
};
|
|
39
|
-
|
|
40
|
-
Entry = class Entry2 {
|
|
42
|
+
class Entry {
|
|
41
43
|
async renderToHtml(context) {
|
|
42
44
|
var _ssrContext_redirection, _ssrContext_redirection1, _ssrContext_redirection2;
|
|
43
45
|
const ssrContext = context.ssrContext;
|
|
@@ -59,7 +61,7 @@ Entry = class Entry2 {
|
|
|
59
61
|
loaderData: routerContext.loaderData,
|
|
60
62
|
errors: serializeErrors(routerContext.errors)
|
|
61
63
|
} : void 0;
|
|
62
|
-
const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel, this.tracker);
|
|
64
|
+
const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel, this.tracker, this.pluginConfig);
|
|
63
65
|
const ssrDataScripts = this.getSSRDataScript(templateData, routerData);
|
|
64
66
|
const html = buildHtml(this.template, [
|
|
65
67
|
createReplaceChunkCss(this.result.chunksMap.css),
|
|
@@ -154,7 +156,7 @@ Entry = class Entry2 {
|
|
|
154
156
|
}
|
|
155
157
|
};
|
|
156
158
|
}
|
|
157
|
-
}
|
|
159
|
+
}
|
|
158
160
|
export {
|
|
159
161
|
Entry as default
|
|
160
162
|
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { run } from "@modern-js/runtime-utils/node";
|
|
2
|
-
import { PreRender } from "../../react/prerender";
|
|
3
2
|
import SSREntry from "./entry";
|
|
4
3
|
const render = ({ App, context, config }) => {
|
|
5
4
|
const ssrContext = context.ssrContext;
|
|
@@ -11,10 +10,6 @@ const render = ({ App, context, config }) => {
|
|
|
11
10
|
});
|
|
12
11
|
entry.metrics.emitCounter("app.visit.count", 1);
|
|
13
12
|
const html = await entry.renderToHtml(context);
|
|
14
|
-
const cacheConfig = PreRender.config();
|
|
15
|
-
if (cacheConfig) {
|
|
16
|
-
context.ssrContext.cacheConfig = cacheConfig;
|
|
17
|
-
}
|
|
18
13
|
return html;
|
|
19
14
|
});
|
|
20
15
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
2
|
import { ChunkExtractor } from "@loadable/server";
|
|
3
|
-
import { attributesToString } from "../utils";
|
|
3
|
+
import { attributesToString, checkIsNode } from "../utils";
|
|
4
4
|
const extname = (uri) => {
|
|
5
5
|
if (typeof uri !== "string" || !uri.includes(".")) {
|
|
6
6
|
return "";
|
|
@@ -25,10 +25,6 @@ const readAsset = async (chunk) => {
|
|
|
25
25
|
const filepath = path.resolve(__dirname, chunk.filename);
|
|
26
26
|
return fs.readFile(filepath, "utf-8");
|
|
27
27
|
};
|
|
28
|
-
const checkIsNode = () => {
|
|
29
|
-
var _process_release;
|
|
30
|
-
return typeof process !== "undefined" && ((_process_release = process.release) === null || _process_release === void 0 ? void 0 : _process_release.name) === "node";
|
|
31
|
-
};
|
|
32
28
|
class LoadableCollector {
|
|
33
29
|
get existsAssets() {
|
|
34
30
|
var _routeManifest_routeAssets_entryName, _routeManifest_routeAssets;
|
|
@@ -88,7 +84,7 @@ class LoadableCollector {
|
|
|
88
84
|
return !jsChunkReg.test(template) && !((_this_existsAssets = this.existsAssets) === null || _this_existsAssets === void 0 ? void 0 : _this_existsAssets.includes(chunk.path));
|
|
89
85
|
}).map(async (chunk) => {
|
|
90
86
|
const script = `<script${attributes} src="${chunk.url}"></script>`;
|
|
91
|
-
if (checkIsInline(chunk, enableInlineScripts)
|
|
87
|
+
if (checkIsNode() && checkIsInline(chunk, enableInlineScripts)) {
|
|
92
88
|
return readAsset(chunk).then((content) => `<script>${content}</script>`).catch((_) => {
|
|
93
89
|
return script;
|
|
94
90
|
});
|
|
@@ -107,7 +103,7 @@ class LoadableCollector {
|
|
|
107
103
|
return !cssChunkReg.test(template) && !((_this_existsAssets = this.existsAssets) === null || _this_existsAssets === void 0 ? void 0 : _this_existsAssets.includes(chunk.path));
|
|
108
104
|
}).map(async (chunk) => {
|
|
109
105
|
const link = `<link${atrributes} href="${chunk.url}" rel="stylesheet" />`;
|
|
110
|
-
if (checkIsInline(chunk, enableInlineStyles)
|
|
106
|
+
if (checkIsNode() && checkIsInline(chunk, enableInlineStyles)) {
|
|
111
107
|
return readAsset(chunk).then((content) => `<style>${content}</style>`).catch((_) => {
|
|
112
108
|
return link;
|
|
113
109
|
});
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
var RenderLevel;
|
|
2
|
+
(function(RenderLevel2) {
|
|
3
|
+
RenderLevel2[RenderLevel2["CLIENT_RENDER"] = 0] = "CLIENT_RENDER";
|
|
4
|
+
RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
|
|
5
|
+
RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
|
|
6
|
+
})(RenderLevel || (RenderLevel = {}));
|
|
2
7
|
export {
|
|
3
8
|
RenderLevel
|
|
4
9
|
};
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
const CSS_CHUNKS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
|
|
2
|
-
const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
|
|
3
|
-
const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
|
|
4
1
|
function attributesToString(attributes) {
|
|
5
2
|
return Object.entries(attributes).reduce((str, [key, value]) => {
|
|
6
3
|
return value === void 0 ? str : `${str} ${key}="${value}"`;
|
|
7
4
|
}, "");
|
|
8
5
|
}
|
|
6
|
+
function safeReplace(source, searchValue, replaceValue) {
|
|
7
|
+
return source.replace(searchValue, () => replaceValue);
|
|
8
|
+
}
|
|
9
|
+
function checkIsNode() {
|
|
10
|
+
var _process_release;
|
|
11
|
+
return typeof process !== "undefined" && ((_process_release = process.release) === null || _process_release === void 0 ? void 0 : _process_release.name) === "node";
|
|
12
|
+
}
|
|
9
13
|
export {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
attributesToString
|
|
14
|
+
attributesToString,
|
|
15
|
+
checkIsNode,
|
|
16
|
+
safeReplace
|
|
14
17
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AfterMatchContext, AfterRenderContext, MiddlewareContext, NextFunction } from '@modern-js/types';
|
|
2
|
+
export type { Container, CacheControl, CacheOptionProvider, CacheOption, } from '@modern-js/types';
|
|
2
3
|
export declare const hook: (attacher: ({ addMiddleware, afterMatch, afterRender, }: {
|
|
3
4
|
addMiddleware: (mid: Middleware) => void;
|
|
4
5
|
afterRender: (hook: AfterRenderHook) => void;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const HTML_PLACEHOLDER = "<!--<?- html ?>-->";
|
|
2
|
+
export declare const SSR_DATA_PLACEHOLDER = "<!--<?- SSRDataScript ?>-->";
|
|
3
|
+
export declare const CHUNK_JS_PLACEHOLDER = "<!--<?- chunksMap.js ?>-->";
|
|
4
|
+
export declare const CHUNK_CSS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
|
|
5
|
+
export declare const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
|
|
6
|
+
export declare const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
|
|
@@ -3,5 +3,5 @@ type BuildShellAfterTemplateOptions = {
|
|
|
3
3
|
context: RuntimeContext;
|
|
4
4
|
renderLevel: RenderLevel;
|
|
5
5
|
};
|
|
6
|
-
export declare function buildShellAfterTemplate(afterAppTemplate: string, options: BuildShellAfterTemplateOptions): string
|
|
6
|
+
export declare function buildShellAfterTemplate(afterAppTemplate: string, options: BuildShellAfterTemplateOptions): Promise<string>;
|
|
7
7
|
export {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare const HEAD_REG_EXP: RegExp;
|
|
2
|
-
export type BuildTemplateCb = (headTemplate: string) => string
|
|
3
|
-
export declare function buildTemplate(template: string, callbacks: BuildTemplateCb[]): string
|
|
2
|
+
export type BuildTemplateCb = (headTemplate: string) => string | Promise<string>;
|
|
3
|
+
export declare function buildTemplate(template: string, callbacks: BuildTemplateCb[]): Promise<string>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { RuntimeContext } from '../types';
|
|
2
|
-
export declare function buildShellBeforeTemplate(beforeAppTemplate: string, context: RuntimeContext): string
|
|
1
|
+
import { RuntimeContext, SSRPluginConfig } from '../types';
|
|
2
|
+
export declare function buildShellBeforeTemplate(beforeAppTemplate: string, context: RuntimeContext, pluginConfig: SSRPluginConfig): Promise<string>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { ServerRenderOptions } from '../types';
|
|
3
|
-
export declare const render: ({ App, context }: ServerRenderOptions) => Promise<import("./renderToPipe").Pipe<import("stream").Writable>>;
|
|
3
|
+
export declare const render: ({ App, context, config }: ServerRenderOptions) => Promise<import("./renderToPipe").Pipe<import("stream").Writable>>;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// <reference types="react" />
|
|
3
3
|
import { Writable } from 'stream';
|
|
4
4
|
import type { RenderToPipeableStreamOptions } from 'react-dom/server';
|
|
5
|
-
import { RuntimeContext } from '../types';
|
|
5
|
+
import { RuntimeContext, SSRPluginConfig } from '../types';
|
|
6
6
|
export type Pipe<T extends Writable> = (output: T) => Promise<T | string>;
|
|
7
|
-
declare function renderToPipe(rootElement: React.ReactElement, context: RuntimeContext, options?: RenderToPipeableStreamOptions): Pipe<Writable>;
|
|
7
|
+
declare function renderToPipe(rootElement: React.ReactElement, context: RuntimeContext, pluginConfig: SSRPluginConfig, options?: RenderToPipeableStreamOptions): Pipe<Writable>;
|
|
8
8
|
export default renderToPipe;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// <reference types="react" />
|
|
3
3
|
import type { Writable } from 'stream';
|
|
4
4
|
import type { RenderToReadableStreamOptions } from 'react-dom/server';
|
|
5
|
-
import { RuntimeContext } from '../types';
|
|
5
|
+
import { RuntimeContext, SSRPluginConfig } from '../types';
|
|
6
6
|
export type Pipe<T extends Writable> = (output: T) => Promise<T | string>;
|
|
7
|
-
declare function renderToPipe(rootElement: React.ReactElement, context: RuntimeContext, options?: RenderToReadableStreamOptions): Promise<string | ReadableStream<any>>;
|
|
7
|
+
declare function renderToPipe(rootElement: React.ReactElement, context: RuntimeContext, pluginConfig: SSRPluginConfig, options?: RenderToReadableStreamOptions): Promise<string | ReadableStream<any>>;
|
|
8
8
|
export default renderToPipe;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { RenderLevel, RuntimeContext } from '../types';
|
|
1
|
+
import { RenderLevel, RuntimeContext, SSRPluginConfig } from '../types';
|
|
2
2
|
export type InjectTemplate = {
|
|
3
3
|
shellBefore: string;
|
|
4
4
|
shellAfter: string;
|
|
5
5
|
};
|
|
6
|
-
export declare const getTemplates: (context: RuntimeContext, renderLevel: RenderLevel) => InjectTemplate
|
|
6
|
+
export declare const getTemplates: (context: RuntimeContext, renderLevel: RenderLevel, pluginConfig: SSRPluginConfig) => Promise<InjectTemplate>;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { RuntimeContext, ModernSSRReactComponent, SSRPluginConfig, SSRServerContext } from '../types';
|
|
1
|
+
import { RuntimeContext, ModernSSRReactComponent, SSRPluginConfig, SSRServerContext, RenderResult } from '../types';
|
|
2
2
|
import { SSRTracker } from '../tracker';
|
|
3
|
-
import { RenderResult } from './type';
|
|
4
3
|
type EntryOptions = {
|
|
5
4
|
ctx: SSRServerContext;
|
|
6
5
|
App: ModernSSRReactComponent;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
|
-
import { SSRPluginConfig } from '../types';
|
|
3
|
-
import { RenderResult } from './type';
|
|
2
|
+
import { SSRPluginConfig, RenderResult } from '../types';
|
|
4
3
|
import type { Collector } from './render';
|
|
5
4
|
declare class LoadableCollector implements Collector {
|
|
6
5
|
private options;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ServerStyleSheet } from 'styled-components';
|
|
2
2
|
import { ReactElement } from 'react';
|
|
3
|
-
import type { RenderResult } from '
|
|
3
|
+
import type { RenderResult } from '../types';
|
|
4
4
|
import type { Collector } from './render';
|
|
5
5
|
declare class StyledCollector implements Collector {
|
|
6
6
|
sheet: ServerStyleSheet;
|
|
@@ -2,9 +2,21 @@
|
|
|
2
2
|
import { ServerUserConfig } from '@modern-js/app-tools';
|
|
3
3
|
import type { BaseSSRServerContext } from '@modern-js/types';
|
|
4
4
|
import type { RuntimeContext } from '../../core';
|
|
5
|
-
import { RenderLevel } from './renderToString/type';
|
|
6
5
|
import type { BuildHtmlCb } from './renderToString/buildHtml';
|
|
7
6
|
import type { SSRTracker } from './tracker';
|
|
7
|
+
export declare enum RenderLevel {
|
|
8
|
+
CLIENT_RENDER = 0,
|
|
9
|
+
SERVER_PREFETCH = 1,
|
|
10
|
+
SERVER_RENDER = 2
|
|
11
|
+
}
|
|
12
|
+
export type RenderResult = {
|
|
13
|
+
renderLevel: RenderLevel;
|
|
14
|
+
html?: string;
|
|
15
|
+
chunksMap: {
|
|
16
|
+
js: string;
|
|
17
|
+
css: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
8
20
|
export type SSRServerContext = BaseSSRServerContext & {
|
|
9
21
|
request: BaseSSRServerContext['request'] & {
|
|
10
22
|
userAgent: string;
|
|
@@ -15,7 +27,7 @@ export type SSRServerContext = BaseSSRServerContext & {
|
|
|
15
27
|
tracker: SSRTracker;
|
|
16
28
|
};
|
|
17
29
|
export type ModernSSRReactComponent = React.ComponentType<any>;
|
|
18
|
-
export { RuntimeContext
|
|
30
|
+
export { RuntimeContext };
|
|
19
31
|
export type SSRPluginConfig = {
|
|
20
32
|
crossorigin?: boolean | 'anonymous' | 'use-credentials';
|
|
21
33
|
scriptLoading?: 'defer' | 'blocking' | 'module';
|
|
@@ -23,6 +35,7 @@ export type SSRPluginConfig = {
|
|
|
23
35
|
enableInlineScripts?: boolean | RegExp;
|
|
24
36
|
disablePrerender?: boolean;
|
|
25
37
|
chunkLoadingGlobal?: string;
|
|
38
|
+
unsafeHeaders?: string[];
|
|
26
39
|
} & Exclude<ServerUserConfig['ssr'], boolean>;
|
|
27
40
|
export type ServerRenderOptions = {
|
|
28
41
|
App: ModernSSRReactComponent;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
export declare const CSS_CHUNKS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
|
|
2
|
-
export declare const SSR_DATA_JSON_ID = "__MODERN_SSR_DATA__";
|
|
3
|
-
export declare const ROUTER_DATA_JSON_ID = "__MODERN_ROUTER_DATA__";
|
|
4
1
|
export declare function attributesToString(attributes: Record<string, any>): string;
|
|
2
|
+
/**
|
|
3
|
+
* @param source
|
|
4
|
+
* @param searchValue
|
|
5
|
+
* @param replaceValue
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
export declare function safeReplace(source: string, searchValue: string | RegExp, replaceValue: string): string;
|
|
9
|
+
export declare function checkIsNode(): boolean;
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.44.0",
|
|
19
19
|
"engines": {
|
|
20
20
|
"node": ">=14.17.6"
|
|
21
21
|
},
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
},
|
|
148
148
|
"dependencies": {
|
|
149
149
|
"@babel/core": "^7.23.2",
|
|
150
|
-
"@babel/types": "^7.
|
|
150
|
+
"@babel/types": "^7.23.0",
|
|
151
151
|
"cookie": "0.5.0",
|
|
152
152
|
"@loadable/babel-plugin": "5.15.3",
|
|
153
153
|
"@loadable/component": "5.15.3",
|
|
@@ -171,10 +171,10 @@
|
|
|
171
171
|
"react-side-effect": "^2.1.1",
|
|
172
172
|
"styled-components": "^5.3.1",
|
|
173
173
|
"@swc/helpers": "0.5.3",
|
|
174
|
-
"@modern-js/types": "2.
|
|
175
|
-
"@modern-js/
|
|
176
|
-
"@modern-js/runtime-utils": "2.
|
|
177
|
-
"@modern-js/
|
|
174
|
+
"@modern-js/types": "2.44.0",
|
|
175
|
+
"@modern-js/utils": "2.44.0",
|
|
176
|
+
"@modern-js/runtime-utils": "2.44.0",
|
|
177
|
+
"@modern-js/plugin": "2.44.0"
|
|
178
178
|
},
|
|
179
179
|
"peerDependencies": {
|
|
180
180
|
"react": ">=17",
|
|
@@ -194,12 +194,12 @@
|
|
|
194
194
|
"react-dom": "^18",
|
|
195
195
|
"ts-jest": "^29.1.0",
|
|
196
196
|
"typescript": "^5",
|
|
197
|
-
"webpack": "^5.
|
|
198
|
-
"@modern-js/
|
|
199
|
-
"@modern-js/
|
|
200
|
-
"@
|
|
201
|
-
"@scripts/
|
|
202
|
-
"@
|
|
197
|
+
"webpack": "^5.89.0",
|
|
198
|
+
"@modern-js/app-tools": "2.44.0",
|
|
199
|
+
"@modern-js/core": "2.44.0",
|
|
200
|
+
"@modern-js/server-core": "2.44.0",
|
|
201
|
+
"@scripts/build": "2.44.0",
|
|
202
|
+
"@scripts/jest-config": "2.44.0"
|
|
203
203
|
},
|
|
204
204
|
"sideEffects": false,
|
|
205
205
|
"publishConfig": {
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
var RenderLevel;
|
|
2
|
-
(function(RenderLevel2) {
|
|
3
|
-
RenderLevel2[RenderLevel2["CLIENT_RENDER"] = 0] = "CLIENT_RENDER";
|
|
4
|
-
RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
|
|
5
|
-
RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
|
|
6
|
-
})(RenderLevel || (RenderLevel = {}));
|
|
7
|
-
export {
|
|
8
|
-
RenderLevel
|
|
9
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
var RenderLevel;
|
|
2
|
-
(function(RenderLevel2) {
|
|
3
|
-
RenderLevel2[RenderLevel2["CLIENT_RENDER"] = 0] = "CLIENT_RENDER";
|
|
4
|
-
RenderLevel2[RenderLevel2["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
|
|
5
|
-
RenderLevel2[RenderLevel2["SERVER_RENDER"] = 2] = "SERVER_RENDER";
|
|
6
|
-
})(RenderLevel || (RenderLevel = {}));
|
|
7
|
-
export {
|
|
8
|
-
RenderLevel
|
|
9
|
-
};
|