@modern-js/runtime 2.39.2 → 2.41.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 +0 -23
- package/dist/cjs/core/loader/loaderManager.js +7 -7
- package/dist/cjs/router/cli/index.js +0 -13
- package/dist/cjs/ssr/prefetch.js +37 -16
- package/dist/cjs/ssr/serverRender/renderToStream/index.js +2 -2
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +3 -3
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +5 -8
- package/dist/cjs/ssr/serverRender/renderToString/index.js +0 -5
- package/dist/cjs/ssr/serverRender/renderToString/loadable.js +14 -9
- package/dist/cjs/ssr/serverRender/tracker.js +33 -28
- package/dist/cjs/state/cli/index.js +0 -13
- package/dist/esm/cli/index.js +1 -23
- package/dist/esm/core/loader/loaderManager.js +7 -7
- package/dist/esm/router/cli/index.js +0 -13
- package/dist/esm/ssr/cli/babel-plugin-ssr-loader-id.js +3 -3
- package/dist/esm/ssr/prefetch.js +51 -18
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +6 -6
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +14 -14
- package/dist/esm/ssr/serverRender/renderToStream/index.js +2 -2
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +3 -3
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
- package/dist/esm/ssr/serverRender/renderToString/entry.js +13 -18
- package/dist/esm/ssr/serverRender/renderToString/index.js +1 -6
- package/dist/esm/ssr/serverRender/renderToString/loadable.js +68 -63
- package/dist/esm/ssr/serverRender/tracker.js +31 -27
- package/dist/esm/state/cli/index.js +0 -13
- package/dist/esm-node/cli/index.js +1 -24
- package/dist/esm-node/core/loader/loaderManager.js +7 -7
- package/dist/esm-node/router/cli/index.js +0 -13
- package/dist/esm-node/ssr/prefetch.js +37 -16
- package/dist/esm-node/ssr/serverRender/renderToStream/index.js +2 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +3 -3
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +3 -3
- package/dist/esm-node/ssr/serverRender/renderToString/entry.js +5 -8
- package/dist/esm-node/ssr/serverRender/renderToString/index.js +0 -5
- package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +14 -9
- package/dist/esm-node/ssr/serverRender/tracker.js +33 -28
- package/dist/esm-node/state/cli/index.js +0 -13
- package/dist/types/ssr/prefetch.d.ts +4 -2
- package/dist/types/ssr/serverRender/tracker.d.ts +9 -8
- package/package.json +11 -11
|
@@ -26,7 +26,7 @@ const createLoader = (id, initialData = {
|
|
|
26
26
|
error: void 0
|
|
27
27
|
}, loaderFn, skip = false) => {
|
|
28
28
|
let promise;
|
|
29
|
-
let status =
|
|
29
|
+
let status = 0;
|
|
30
30
|
let { data, error } = initialData;
|
|
31
31
|
let hasLoaded = false;
|
|
32
32
|
const handlers = /* @__PURE__ */ new Set();
|
|
@@ -34,19 +34,19 @@ const createLoader = (id, initialData = {
|
|
|
34
34
|
if (skip) {
|
|
35
35
|
return promise;
|
|
36
36
|
}
|
|
37
|
-
if (status ===
|
|
37
|
+
if (status === 1) {
|
|
38
38
|
return promise;
|
|
39
39
|
}
|
|
40
|
-
status =
|
|
40
|
+
status = 1;
|
|
41
41
|
notify();
|
|
42
42
|
promise = loaderFn().then((value) => {
|
|
43
43
|
data = value;
|
|
44
44
|
error = null;
|
|
45
|
-
status =
|
|
45
|
+
status = 2;
|
|
46
46
|
}).catch((e) => {
|
|
47
47
|
error = e;
|
|
48
48
|
data = null;
|
|
49
|
-
status =
|
|
49
|
+
status = 3;
|
|
50
50
|
}).finally(() => {
|
|
51
51
|
promise = null;
|
|
52
52
|
hasLoaded = true;
|
|
@@ -55,8 +55,8 @@ const createLoader = (id, initialData = {
|
|
|
55
55
|
return promise;
|
|
56
56
|
};
|
|
57
57
|
const getResult = () => ({
|
|
58
|
-
loading: !hasLoaded && status ===
|
|
59
|
-
reloading: hasLoaded && status ===
|
|
58
|
+
loading: !hasLoaded && status === 1,
|
|
59
|
+
reloading: hasLoaded && status === 1,
|
|
60
60
|
data,
|
|
61
61
|
error: error instanceof Error ? `${error.message}` : error,
|
|
62
62
|
// redundant fields for ssr log
|
|
@@ -29,19 +29,6 @@ const routerPlugin = () => ({
|
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
},
|
|
32
|
-
validateSchema() {
|
|
33
|
-
return [
|
|
34
|
-
{
|
|
35
|
-
target: "runtime.router",
|
|
36
|
-
schema: {
|
|
37
|
-
type: [
|
|
38
|
-
"boolean",
|
|
39
|
-
"object"
|
|
40
|
-
]
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
];
|
|
44
|
-
},
|
|
45
32
|
modifyEntryImports({ entrypoint, imports }) {
|
|
46
33
|
const { entryName, isMainEntry, fileSystemRoutes } = entrypoint;
|
|
47
34
|
const userConfig = api.useResolvedConfigContext();
|
|
@@ -2,25 +2,36 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { renderToStaticMarkup } from "react-dom/server";
|
|
3
3
|
import { run } from "@modern-js/runtime-utils/node";
|
|
4
4
|
import { ChunkExtractor } from "@loadable/server";
|
|
5
|
-
|
|
5
|
+
import { time } from "@modern-js/runtime-utils/time";
|
|
6
|
+
import { SSRTimings, SSRErrors } from "./serverRender/tracker";
|
|
7
|
+
const prefetch = async (App, context, config, tracker) => run(context.ssrContext.request.headers, async () => {
|
|
6
8
|
var _context_store;
|
|
7
9
|
const { ssrContext } = context;
|
|
8
10
|
const { loadableStats } = ssrContext;
|
|
9
11
|
if (!config.disablePrerender) {
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
try {
|
|
13
|
+
const end = time();
|
|
14
|
+
if (loadableStats) {
|
|
15
|
+
const extractor = new ChunkExtractor({
|
|
16
|
+
stats: loadableStats,
|
|
17
|
+
entrypoints: [
|
|
18
|
+
ssrContext.entryName
|
|
19
|
+
].filter(Boolean)
|
|
20
|
+
});
|
|
21
|
+
renderToStaticMarkup(extractor.collectChunks(/* @__PURE__ */ _jsx(App, {
|
|
22
|
+
context
|
|
23
|
+
})));
|
|
24
|
+
} else {
|
|
25
|
+
renderToStaticMarkup(/* @__PURE__ */ _jsx(App, {
|
|
26
|
+
context
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
const cost = end();
|
|
30
|
+
tracker.trackTiming(SSRTimings.PRERENDER, cost);
|
|
31
|
+
} catch (e) {
|
|
32
|
+
const error = e;
|
|
33
|
+
tracker.trackError(SSRErrors.PRERENDER, error);
|
|
34
|
+
throw e;
|
|
24
35
|
}
|
|
25
36
|
}
|
|
26
37
|
if (!context.loaderManager.hasPendingLoaders()) {
|
|
@@ -29,7 +40,17 @@ const prefetch = async (App, context, config) => run(context.ssrContext.request.
|
|
|
29
40
|
i18nData: context.__i18nData__
|
|
30
41
|
};
|
|
31
42
|
}
|
|
32
|
-
|
|
43
|
+
let loadersData = {};
|
|
44
|
+
try {
|
|
45
|
+
const end = time();
|
|
46
|
+
loadersData = await context.loaderManager.awaitPendingLoaders();
|
|
47
|
+
const cost = end();
|
|
48
|
+
tracker.trackTiming(SSRTimings.USE_LOADER, cost);
|
|
49
|
+
} catch (e) {
|
|
50
|
+
const error = e;
|
|
51
|
+
tracker.trackError(SSRErrors.USE_LOADER, error);
|
|
52
|
+
throw e;
|
|
53
|
+
}
|
|
33
54
|
Object.keys(loadersData).forEach((id) => {
|
|
34
55
|
const data = loadersData[id];
|
|
35
56
|
if (data._error) {
|
|
@@ -24,11 +24,11 @@ const render = ({ App, context }) => {
|
|
|
24
24
|
ssrContext.cacheConfig = cacheConfig;
|
|
25
25
|
}
|
|
26
26
|
const cost = end();
|
|
27
|
-
tracker.trackTiming(SSRTimings.
|
|
27
|
+
tracker.trackTiming(SSRTimings.RENDER_SHELL, cost);
|
|
28
28
|
},
|
|
29
29
|
onAllReady() {
|
|
30
30
|
const cost = end();
|
|
31
|
-
tracker.trackTiming(SSRTimings.
|
|
31
|
+
tracker.trackTiming(SSRTimings.RENDER_HTML, cost);
|
|
32
32
|
},
|
|
33
33
|
onShellError(e) {
|
|
34
34
|
tracker.trackError(SSRErrors.RENDER_SHELL, e);
|
|
@@ -8,7 +8,7 @@ var ShellChunkStatus;
|
|
|
8
8
|
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
|
|
9
9
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
10
10
|
function renderToPipe(rootElement, context, options) {
|
|
11
|
-
let shellChunkStatus =
|
|
11
|
+
let shellChunkStatus = 0;
|
|
12
12
|
const { ssrContext } = context;
|
|
13
13
|
const chunkVec = [];
|
|
14
14
|
const forUserPipe = (stream) => {
|
|
@@ -28,12 +28,12 @@ function renderToPipe(rootElement, context, options) {
|
|
|
28
28
|
const injectableTransform = new Transform({
|
|
29
29
|
transform(chunk, _encoding, callback) {
|
|
30
30
|
try {
|
|
31
|
-
if (shellChunkStatus !==
|
|
31
|
+
if (shellChunkStatus !== 1) {
|
|
32
32
|
chunkVec.push(chunk.toString());
|
|
33
33
|
let concatedChunk = chunkVec.join("");
|
|
34
34
|
if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
35
35
|
concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
|
|
36
|
-
shellChunkStatus =
|
|
36
|
+
shellChunkStatus = 1;
|
|
37
37
|
this.push(`${shellBefore}${concatedChunk}${shellAfter}`);
|
|
38
38
|
}
|
|
39
39
|
} else {
|
|
@@ -8,7 +8,7 @@ var ShellChunkStatus;
|
|
|
8
8
|
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 1] = "FINIESH";
|
|
9
9
|
})(ShellChunkStatus || (ShellChunkStatus = {}));
|
|
10
10
|
function renderToPipe(rootElement, context, options) {
|
|
11
|
-
let shellChunkStatus =
|
|
11
|
+
let shellChunkStatus = 0;
|
|
12
12
|
const chunkVec = [];
|
|
13
13
|
const { ssrContext } = context;
|
|
14
14
|
const forUserPipe = async () => {
|
|
@@ -36,13 +36,13 @@ function renderToPipe(rootElement, context, options) {
|
|
|
36
36
|
controller.close();
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
|
-
if (shellChunkStatus !==
|
|
39
|
+
if (shellChunkStatus !== 1) {
|
|
40
40
|
const chunk = new TextDecoder().decode(value);
|
|
41
41
|
chunkVec.push(chunk);
|
|
42
42
|
let concatedChunk = chunkVec.join("");
|
|
43
43
|
if (concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
44
44
|
concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, "");
|
|
45
|
-
shellChunkStatus =
|
|
45
|
+
shellChunkStatus = 1;
|
|
46
46
|
controller.enqueue(encodeForWebStream(`${shellBefore}${concatedChunk}${shellAfter}`));
|
|
47
47
|
}
|
|
48
48
|
} else {
|
|
@@ -36,7 +36,8 @@ const buildTemplateData = (context, data, renderLevel, tracker) => {
|
|
|
36
36
|
renderLevel
|
|
37
37
|
};
|
|
38
38
|
};
|
|
39
|
-
|
|
39
|
+
var Entry;
|
|
40
|
+
Entry = class Entry2 {
|
|
40
41
|
async renderToHtml(context) {
|
|
41
42
|
var _ssrContext_redirection, _ssrContext_redirection1, _ssrContext_redirection2;
|
|
42
43
|
const ssrContext = context.ssrContext;
|
|
@@ -72,15 +73,11 @@ class Entry {
|
|
|
72
73
|
}
|
|
73
74
|
async prefetch(context) {
|
|
74
75
|
let prefetchData;
|
|
75
|
-
const end = time();
|
|
76
76
|
try {
|
|
77
|
-
prefetchData = await prefetch(this.App, context, this.pluginConfig);
|
|
77
|
+
prefetchData = await prefetch(this.App, context, this.pluginConfig, this.tracker);
|
|
78
78
|
this.result.renderLevel = RenderLevel.SERVER_PREFETCH;
|
|
79
|
-
const prefetchCost = end();
|
|
80
|
-
this.tracker.trackTiming(SSRTimings.SSR_PREFETCH, prefetchCost);
|
|
81
79
|
} catch (e) {
|
|
82
80
|
this.result.renderLevel = RenderLevel.CLIENT_RENDER;
|
|
83
|
-
this.tracker.trackError(SSRErrors.PREFETCH, e);
|
|
84
81
|
}
|
|
85
82
|
return prefetchData || {};
|
|
86
83
|
}
|
|
@@ -104,7 +101,7 @@ class Entry {
|
|
|
104
101
|
routeManifest: this.routeManifest
|
|
105
102
|
})).finish();
|
|
106
103
|
const cost = end();
|
|
107
|
-
this.tracker.trackTiming(SSRTimings.
|
|
104
|
+
this.tracker.trackTiming(SSRTimings.RENDER_HTML, cost);
|
|
108
105
|
this.result.renderLevel = RenderLevel.SERVER_RENDER;
|
|
109
106
|
} catch (e) {
|
|
110
107
|
this.tracker.trackError(SSRErrors.RENDER_HTML, e);
|
|
@@ -157,7 +154,7 @@ class Entry {
|
|
|
157
154
|
}
|
|
158
155
|
};
|
|
159
156
|
}
|
|
160
|
-
}
|
|
157
|
+
};
|
|
161
158
|
export {
|
|
162
159
|
Entry as default
|
|
163
160
|
};
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { run } from "@modern-js/runtime-utils/node";
|
|
2
|
-
import { time } from "@modern-js/runtime-utils/time";
|
|
3
2
|
import { PreRender } from "../../react/prerender";
|
|
4
|
-
import { SSRTimings } from "../tracker";
|
|
5
3
|
import SSREntry from "./entry";
|
|
6
4
|
const render = ({ App, context, config }) => {
|
|
7
5
|
const ssrContext = context.ssrContext;
|
|
@@ -12,10 +10,7 @@ const render = ({ App, context, config }) => {
|
|
|
12
10
|
config
|
|
13
11
|
});
|
|
14
12
|
entry.metrics.emitCounter("app.visit.count", 1);
|
|
15
|
-
const end = time();
|
|
16
13
|
const html = await entry.renderToHtml(context);
|
|
17
|
-
const cost = end();
|
|
18
|
-
entry.tracker.trackTiming(SSRTimings.SSR_RENDER_TOTAL, cost);
|
|
19
14
|
const cacheConfig = PreRender.config();
|
|
20
15
|
if (cacheConfig) {
|
|
21
16
|
context.ssrContext.cacheConfig = cacheConfig;
|
|
@@ -19,6 +19,12 @@ const checkIsInline = (chunk, enableInline) => {
|
|
|
19
19
|
return false;
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
+
const readAsset = async (chunk) => {
|
|
23
|
+
const fs = await import("fs/promises");
|
|
24
|
+
const path = await import("path");
|
|
25
|
+
const filepath = path.resolve(__dirname, chunk.filename);
|
|
26
|
+
return fs.readFile(filepath, "utf-8");
|
|
27
|
+
};
|
|
22
28
|
const checkIsNode = () => {
|
|
23
29
|
var _process_release;
|
|
24
30
|
return typeof process !== "undefined" && ((_process_release = process.release) === null || _process_release === void 0 ? void 0 : _process_release.name) === "node";
|
|
@@ -81,14 +87,13 @@ class LoadableCollector {
|
|
|
81
87
|
const jsChunkReg = new RegExp(`<script .*src="${chunk.url}".*>`);
|
|
82
88
|
return !jsChunkReg.test(template) && !((_this_existsAssets = this.existsAssets) === null || _this_existsAssets === void 0 ? void 0 : _this_existsAssets.includes(chunk.path));
|
|
83
89
|
}).map(async (chunk) => {
|
|
90
|
+
const script = `<script${attributes} src="${chunk.url}"></script>`;
|
|
84
91
|
if (checkIsInline(chunk, enableInlineScripts) && checkIsNode()) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return fs.readFile(filepath, "utf-8").then((content) => `<script>${content}</script>`).catch((_) => {
|
|
88
|
-
return "";
|
|
92
|
+
return readAsset(chunk).then((content) => `<script>${content}</script>`).catch((_) => {
|
|
93
|
+
return script;
|
|
89
94
|
});
|
|
90
95
|
} else {
|
|
91
|
-
return
|
|
96
|
+
return script;
|
|
92
97
|
}
|
|
93
98
|
}));
|
|
94
99
|
chunksMap.js += scripts.filter((script) => Boolean(script)).join("");
|
|
@@ -101,13 +106,13 @@ class LoadableCollector {
|
|
|
101
106
|
const cssChunkReg = new RegExp(`<link .*href="${chunk.url}".*>`);
|
|
102
107
|
return !cssChunkReg.test(template) && !((_this_existsAssets = this.existsAssets) === null || _this_existsAssets === void 0 ? void 0 : _this_existsAssets.includes(chunk.path));
|
|
103
108
|
}).map(async (chunk) => {
|
|
109
|
+
const link = `<link${atrributes} href="${chunk.url}" rel="stylesheet" />`;
|
|
104
110
|
if (checkIsInline(chunk, enableInlineStyles) && checkIsNode()) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return "";
|
|
111
|
+
return readAsset(chunk).then((content) => `<style>${content}</style>`).catch((_) => {
|
|
112
|
+
return link;
|
|
108
113
|
});
|
|
109
114
|
} else {
|
|
110
|
-
return
|
|
115
|
+
return link;
|
|
111
116
|
}
|
|
112
117
|
}));
|
|
113
118
|
chunksMap.css += css.filter((css2) => Boolean(css2)).join("");
|
|
@@ -1,58 +1,63 @@
|
|
|
1
1
|
var SSRTimings;
|
|
2
2
|
(function(SSRTimings2) {
|
|
3
|
-
SSRTimings2[SSRTimings2["
|
|
4
|
-
SSRTimings2[SSRTimings2["
|
|
5
|
-
SSRTimings2[SSRTimings2["
|
|
6
|
-
SSRTimings2[SSRTimings2["
|
|
3
|
+
SSRTimings2[SSRTimings2["PRERENDER"] = 0] = "PRERENDER";
|
|
4
|
+
SSRTimings2[SSRTimings2["RENDER_HTML"] = 1] = "RENDER_HTML";
|
|
5
|
+
SSRTimings2[SSRTimings2["RENDER_SHELL"] = 2] = "RENDER_SHELL";
|
|
6
|
+
SSRTimings2[SSRTimings2["USE_LOADER"] = 3] = "USE_LOADER";
|
|
7
7
|
})(SSRTimings || (SSRTimings = {}));
|
|
8
8
|
var SSRErrors;
|
|
9
9
|
(function(SSRErrors2) {
|
|
10
|
-
SSRErrors2[SSRErrors2["
|
|
11
|
-
SSRErrors2[SSRErrors2["
|
|
12
|
-
SSRErrors2[SSRErrors2["
|
|
13
|
-
SSRErrors2[SSRErrors2["
|
|
10
|
+
SSRErrors2[SSRErrors2["PRERENDER"] = 0] = "PRERENDER";
|
|
11
|
+
SSRErrors2[SSRErrors2["USE_LOADER"] = 1] = "USE_LOADER";
|
|
12
|
+
SSRErrors2[SSRErrors2["RENDER_HTML"] = 2] = "RENDER_HTML";
|
|
13
|
+
SSRErrors2[SSRErrors2["RENDER_STREAM"] = 3] = "RENDER_STREAM";
|
|
14
|
+
SSRErrors2[SSRErrors2["RENDER_SHELL"] = 4] = "RENDER_SHELL";
|
|
14
15
|
})(SSRErrors || (SSRErrors = {}));
|
|
15
16
|
const errors = {
|
|
16
|
-
[
|
|
17
|
-
reporter: "SSR Error - App
|
|
18
|
-
logger: "App
|
|
19
|
-
metrics: "app.
|
|
17
|
+
[0]: {
|
|
18
|
+
reporter: "SSR Error - App Prerender",
|
|
19
|
+
logger: "App Prerender",
|
|
20
|
+
metrics: "app.prerender.error"
|
|
20
21
|
},
|
|
21
|
-
[
|
|
22
|
+
[1]: {
|
|
23
|
+
reporter: "SSR Error - App run useLoader",
|
|
24
|
+
logger: "App run useLoader",
|
|
25
|
+
metrics: "app.useloader.error"
|
|
26
|
+
},
|
|
27
|
+
[2]: {
|
|
22
28
|
reporter: "SSR Error - App Render To HTML",
|
|
23
29
|
logger: "App Render To HTML",
|
|
24
30
|
metrics: "app.render.html.error"
|
|
25
31
|
},
|
|
26
|
-
[
|
|
32
|
+
[3]: {
|
|
27
33
|
reporter: "SSR Error - App Render To Streaming",
|
|
28
34
|
logger: "An error occurs during streaming SSR",
|
|
29
35
|
metrics: "app.render.streaming.error"
|
|
30
36
|
},
|
|
31
|
-
[
|
|
37
|
+
[4]: {
|
|
32
38
|
metrics: "app.render.streaming.shell.error"
|
|
33
39
|
}
|
|
34
40
|
};
|
|
35
41
|
const timings = {
|
|
36
|
-
[
|
|
37
|
-
reporter: "ssr-
|
|
38
|
-
serverTiming: "ssr-
|
|
39
|
-
metrics: "app.
|
|
40
|
-
logger: "App
|
|
42
|
+
[0]: {
|
|
43
|
+
reporter: "ssr-prerender",
|
|
44
|
+
serverTiming: "ssr-prerender",
|
|
45
|
+
metrics: "app.prerender.cost",
|
|
46
|
+
logger: "App Prerender cost = %d ms"
|
|
41
47
|
},
|
|
42
|
-
[
|
|
48
|
+
[1]: {
|
|
43
49
|
reporter: "ssr-render-html",
|
|
44
50
|
serverTiming: "ssr-render-html",
|
|
45
51
|
metrics: "app.render.html.cost",
|
|
46
52
|
logger: "App Render To HTML cost = %d ms"
|
|
47
53
|
},
|
|
48
|
-
[
|
|
49
|
-
reporter: "ssr-render-total",
|
|
50
|
-
serverTiming: "ssr-render-total",
|
|
51
|
-
metrics: "app.render.cost",
|
|
52
|
-
logger: "App Render Total cost = %d ms"
|
|
53
|
-
},
|
|
54
|
-
[SSRTimings.SSR_RENDER_SHELL]: {
|
|
54
|
+
[2]: {
|
|
55
55
|
reporter: "ssr-render-shell"
|
|
56
|
+
},
|
|
57
|
+
[3]: {
|
|
58
|
+
reporter: "use-loader",
|
|
59
|
+
serverTiming: "use-loader",
|
|
60
|
+
logger: "App run useLoader cost = %d ms"
|
|
56
61
|
}
|
|
57
62
|
};
|
|
58
63
|
function createSSRTracker({ reporter, serverTiming, metrics, logger }) {
|
|
@@ -55,19 +55,6 @@ const statePlugin = () => ({
|
|
|
55
55
|
plugins
|
|
56
56
|
};
|
|
57
57
|
},
|
|
58
|
-
validateSchema() {
|
|
59
|
-
return [
|
|
60
|
-
{
|
|
61
|
-
target: "runtime.state",
|
|
62
|
-
schema: {
|
|
63
|
-
type: [
|
|
64
|
-
"boolean",
|
|
65
|
-
"object"
|
|
66
|
-
]
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
];
|
|
70
|
-
},
|
|
71
58
|
addRuntimeExports() {
|
|
72
59
|
pluginsExportsUtils.addExport(`export { default as state } from '@modern-js/runtime/model'`);
|
|
73
60
|
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { RuntimeContext } from '../core';
|
|
2
|
+
import { LoaderResult } from '../core/loader/loaderManager';
|
|
2
3
|
import { SSRPluginConfig } from './serverRender/types';
|
|
3
|
-
|
|
4
|
+
import { SSRTracker } from './serverRender/tracker';
|
|
5
|
+
declare const prefetch: (App: React.ComponentType<any>, context: RuntimeContext, config: SSRPluginConfig, tracker: SSRTracker) => Promise<{
|
|
4
6
|
initialData: Record<string, unknown> | undefined;
|
|
5
7
|
i18nData: any;
|
|
6
8
|
loadersData?: undefined;
|
|
7
9
|
storeState?: undefined;
|
|
8
10
|
} | {
|
|
9
|
-
loadersData: Record<string,
|
|
11
|
+
loadersData: Record<string, LoaderResult>;
|
|
10
12
|
initialData: Record<string, unknown> | undefined;
|
|
11
13
|
i18nData: any;
|
|
12
14
|
storeState: any;
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import type { BaseSSRServerContext } from '@modern-js/types';
|
|
2
2
|
export type SSRTracker = ReturnType<typeof createSSRTracker>;
|
|
3
3
|
export declare enum SSRTimings {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
PRERENDER = 0,
|
|
5
|
+
RENDER_HTML = 1,
|
|
6
|
+
RENDER_SHELL = 2,
|
|
7
|
+
USE_LOADER = 3,
|
|
8
8
|
}
|
|
9
9
|
export declare enum SSRErrors {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
PRERENDER = 0,
|
|
11
|
+
USE_LOADER = 1,
|
|
12
|
+
RENDER_HTML = 2,
|
|
13
|
+
RENDER_STREAM = 3,
|
|
14
|
+
RENDER_SHELL = 4,
|
|
14
15
|
}
|
|
15
16
|
export declare function createSSRTracker({
|
|
16
17
|
reporter,
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.41.0",
|
|
19
19
|
"engines": {
|
|
20
20
|
"node": ">=14.17.6"
|
|
21
21
|
},
|
|
@@ -170,11 +170,11 @@
|
|
|
170
170
|
"react-is": "^18",
|
|
171
171
|
"react-side-effect": "^2.1.1",
|
|
172
172
|
"styled-components": "^5.3.1",
|
|
173
|
-
"@swc/helpers": "0.5.
|
|
174
|
-
"@modern-js/plugin": "2.
|
|
175
|
-
"@modern-js/
|
|
176
|
-
"@modern-js/
|
|
177
|
-
"@modern-js/
|
|
173
|
+
"@swc/helpers": "0.5.3",
|
|
174
|
+
"@modern-js/plugin": "2.41.0",
|
|
175
|
+
"@modern-js/types": "2.41.0",
|
|
176
|
+
"@modern-js/utils": "2.41.0",
|
|
177
|
+
"@modern-js/runtime-utils": "2.41.0"
|
|
178
178
|
},
|
|
179
179
|
"peerDependencies": {
|
|
180
180
|
"react": ">=17",
|
|
@@ -195,11 +195,11 @@
|
|
|
195
195
|
"ts-jest": "^29.1.0",
|
|
196
196
|
"typescript": "^5",
|
|
197
197
|
"webpack": "^5.88.1",
|
|
198
|
-
"@modern-js/
|
|
199
|
-
"@
|
|
200
|
-
"@
|
|
201
|
-
"@modern-js/
|
|
202
|
-
"@scripts/jest-config": "2.
|
|
198
|
+
"@modern-js/core": "2.41.0",
|
|
199
|
+
"@scripts/build": "2.41.0",
|
|
200
|
+
"@modern-js/server-core": "2.41.0",
|
|
201
|
+
"@modern-js/app-tools": "2.41.0",
|
|
202
|
+
"@scripts/jest-config": "2.41.0"
|
|
203
203
|
},
|
|
204
204
|
"sideEffects": false,
|
|
205
205
|
"publishConfig": {
|