@modern-js/runtime 2.4.0 → 2.4.1-alpha.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/js/modern/core/compatible.js +1 -0
- package/dist/js/modern/router/runtime/fetch.js +5 -0
- package/dist/js/modern/router/runtime/fetch.node.js +4 -0
- package/dist/js/modern/router/runtime/fetch.worker.js +5 -0
- package/dist/js/modern/router/runtime/plugin.node.js +50 -10
- package/dist/js/modern/ssr/cli/index.js +2 -2
- package/dist/js/modern/ssr/prefetch.worker.js +66 -0
- package/dist/js/modern/ssr/react/nossr/index.js +6 -2
- package/dist/js/modern/ssr/serverRender/renderToStream/index.js +1 -1
- package/dist/js/modern/ssr/serverRender/renderToStream/index.worker.js +35 -0
- package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.worker.js +110 -0
- package/dist/js/modern/ssr/serverRender/renderToString/entry.js +5 -4
- package/dist/js/modern/ssr/serverRender/renderToString/index.js +1 -1
- package/dist/js/modern/ssr/serverRender/renderToString/index.worker.js +49 -0
- package/dist/js/modern/ssr/serverRender/time.js +13 -0
- package/dist/js/modern/ssr/serverRender/time.worker.js +28 -0
- package/dist/js/modern/ssr/serverRender/utils.js +1 -12
- package/dist/js/node/core/compatible.js +1 -0
- package/dist/js/node/router/runtime/fetch.js +28 -0
- package/dist/js/node/router/runtime/fetch.node.js +27 -0
- package/dist/js/node/router/runtime/fetch.worker.js +28 -0
- package/dist/js/node/router/runtime/plugin.node.js +46 -9
- package/dist/js/node/ssr/cli/index.js +2 -2
- package/dist/js/node/ssr/prefetch.worker.js +87 -0
- package/dist/js/node/ssr/react/nossr/index.js +6 -2
- package/dist/js/node/ssr/serverRender/renderToStream/index.js +2 -2
- package/dist/js/node/ssr/serverRender/renderToStream/index.worker.js +64 -0
- package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.worker.js +129 -0
- package/dist/js/node/ssr/serverRender/renderToString/entry.js +7 -6
- package/dist/js/node/ssr/serverRender/renderToString/index.js +2 -2
- package/dist/js/node/ssr/serverRender/renderToString/index.worker.js +78 -0
- package/dist/js/node/ssr/serverRender/time.js +36 -0
- package/dist/js/node/ssr/serverRender/time.worker.js +51 -0
- package/dist/js/node/ssr/serverRender/utils.js +2 -14
- package/dist/js/treeshaking/core/compatible.js +8 -7
- package/dist/js/treeshaking/core/loader/loaderManager.js +3 -3
- package/dist/js/treeshaking/core/loader/useLoader.js +15 -15
- package/dist/js/treeshaking/document/Head.js +1 -1
- package/dist/js/treeshaking/document/Html.js +2 -2
- package/dist/js/treeshaking/document/Root.js +2 -2
- package/dist/js/treeshaking/document/cli/index.js +4 -4
- package/dist/js/treeshaking/router/cli/index.js +2 -2
- package/dist/js/treeshaking/router/runtime/fetch.js +2 -0
- package/dist/js/treeshaking/router/runtime/fetch.node.js +2 -0
- package/dist/js/treeshaking/router/runtime/fetch.worker.js +2 -0
- package/dist/js/treeshaking/router/runtime/plugin.js +3 -3
- package/dist/js/treeshaking/router/runtime/plugin.node.js +70 -13
- package/dist/js/treeshaking/router/runtime/utils.js +3 -3
- package/dist/js/treeshaking/ssr/cli/index.js +5 -5
- package/dist/js/treeshaking/ssr/index.js +6 -6
- package/dist/js/treeshaking/ssr/index.node.js +1 -1
- package/dist/js/treeshaking/ssr/prefetch.js +2 -2
- package/dist/js/treeshaking/ssr/prefetch.worker.js +191 -0
- package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -3
- package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -2
- package/dist/js/treeshaking/ssr/react/prerender/util.js +2 -2
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +2 -2
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +1 -1
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.worker.js +32 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +1 -1
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +8 -8
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.worker.js +280 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +1 -1
- package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +5 -5
- package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +1 -1
- package/dist/js/treeshaking/ssr/serverRender/renderToString/index.worker.js +167 -0
- package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +1 -1
- package/dist/js/treeshaking/ssr/serverRender/time.js +57 -0
- package/dist/js/treeshaking/ssr/serverRender/time.worker.js +75 -0
- package/dist/js/treeshaking/ssr/serverRender/utils.js +1 -57
- package/dist/js/treeshaking/ssr/utils.js +5 -5
- package/dist/js/treeshaking/state/cli/index.js +2 -2
- package/dist/js/treeshaking/state/runtime/plugin.js +3 -3
- package/dist/types/router/runtime/fetch.d.ts +2 -0
- package/dist/types/router/runtime/fetch.node.d.ts +2 -0
- package/dist/types/router/runtime/fetch.worker.d.ts +2 -0
- package/dist/types/ssr/prefetch.worker.d.ts +13 -0
- package/dist/types/ssr/react/nossr/index.d.ts +4 -2
- package/dist/types/ssr/serverRender/renderToStream/index.worker.d.ts +6 -0
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +8 -0
- package/dist/types/ssr/serverRender/renderToString/index.worker.d.ts +6 -0
- package/dist/types/ssr/serverRender/time.d.ts +1 -0
- package/dist/types/ssr/serverRender/time.worker.d.ts +1 -0
- package/dist/types/ssr/serverRender/utils.d.ts +2 -3
- package/package.json +36 -23
|
@@ -67,14 +67,15 @@ __export(plugin_node_exports, {
|
|
|
67
67
|
module.exports = __toCommonJS(plugin_node_exports);
|
|
68
68
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
69
69
|
var import_react = require("react");
|
|
70
|
+
var import_serialize_javascript = __toESM(require("serialize-javascript"));
|
|
70
71
|
var import_router = require("@remix-run/router");
|
|
71
72
|
var import_server = require("react-router-dom/server");
|
|
72
73
|
var import_hoist_non_react_statics = __toESM(require("hoist-non-react-statics"));
|
|
73
|
-
var import_node = require("@remix-run/node");
|
|
74
74
|
var import_react_router_dom = require("react-router-dom");
|
|
75
75
|
var import_core = require("../../core");
|
|
76
76
|
var import_utils = require("./utils");
|
|
77
|
-
|
|
77
|
+
var import_fetch = require("./fetch");
|
|
78
|
+
(0, import_fetch.installGlobals)();
|
|
78
79
|
function createFetchRequest(req) {
|
|
79
80
|
const origin = `${req.protocol}://${req.host}`;
|
|
80
81
|
const url = new URL(req.originalUrl || req.url, origin);
|
|
@@ -88,7 +89,7 @@ function createFetchRequest(req) {
|
|
|
88
89
|
}
|
|
89
90
|
function createFetchHeaders(requestHeaders) {
|
|
90
91
|
const headers = new Headers();
|
|
91
|
-
for (const [key, values] of Object.entries(requestHeaders)) {
|
|
92
|
+
for (const [key, values] of Object.entries(requestHeaders || {})) {
|
|
92
93
|
if (values) {
|
|
93
94
|
if (Array.isArray(values)) {
|
|
94
95
|
for (const value of values) {
|
|
@@ -101,6 +102,26 @@ function createFetchHeaders(requestHeaders) {
|
|
|
101
102
|
}
|
|
102
103
|
return headers;
|
|
103
104
|
}
|
|
105
|
+
function serializeErrors(errors) {
|
|
106
|
+
if (!errors) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
const entries = Object.entries(errors);
|
|
110
|
+
const serialized = {};
|
|
111
|
+
for (const [key, val] of entries) {
|
|
112
|
+
if ((0, import_router.isRouteErrorResponse)(val)) {
|
|
113
|
+
serialized[key] = __spreadProps(__spreadValues({}, val), { __type: "RouteErrorResponse" });
|
|
114
|
+
} else if (val instanceof Error) {
|
|
115
|
+
serialized[key] = {
|
|
116
|
+
message: val.message,
|
|
117
|
+
__type: "Error"
|
|
118
|
+
};
|
|
119
|
+
} else {
|
|
120
|
+
serialized[key] = val;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return serialized;
|
|
124
|
+
}
|
|
104
125
|
const routerPlugin = ({
|
|
105
126
|
basename = "",
|
|
106
127
|
routesConfig,
|
|
@@ -142,12 +163,28 @@ const routerPlugin = ({
|
|
|
142
163
|
const getRouteApp = () => {
|
|
143
164
|
return (props) => {
|
|
144
165
|
const { router, routerContext } = (0, import_react.useContext)(import_core.RuntimeReactContext);
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
166
|
+
const data = {
|
|
167
|
+
loaderData: routerContext.loaderData,
|
|
168
|
+
actionData: routerContext.actionData,
|
|
169
|
+
errors: serializeErrors(routerContext.errors)
|
|
170
|
+
};
|
|
171
|
+
const hydrateScript = `window.__staticRouterHydrationData = ${(0, import_serialize_javascript.default)(
|
|
172
|
+
data,
|
|
173
|
+
{ isJSON: true }
|
|
174
|
+
)};`;
|
|
175
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(App, __spreadProps(__spreadValues({}, props), {
|
|
176
|
+
children: [
|
|
177
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_server.StaticRouterProvider, {
|
|
178
|
+
router,
|
|
179
|
+
context: routerContext,
|
|
180
|
+
hydrate: false
|
|
181
|
+
}),
|
|
182
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("script", {
|
|
183
|
+
suppressHydrationWarning: true,
|
|
184
|
+
id: "the-nonce",
|
|
185
|
+
dangerouslySetInnerHTML: { __html: hydrateScript }
|
|
186
|
+
})
|
|
187
|
+
]
|
|
151
188
|
}));
|
|
152
189
|
};
|
|
153
190
|
};
|
|
@@ -78,7 +78,7 @@ var cli_default = () => ({
|
|
|
78
78
|
}
|
|
79
79
|
},
|
|
80
80
|
tools: {
|
|
81
|
-
webpackChain: (chain, { name, isServer, CHAIN_ID }) => {
|
|
81
|
+
webpackChain: (chain, { name, isServer, isServiceWorker, CHAIN_ID }) => {
|
|
82
82
|
const userConfig = api.useResolvedConfigContext();
|
|
83
83
|
if ((0, import_utils.isUseSSRBundle)(userConfig) && name !== "server" && hasStringSSREntry(userConfig)) {
|
|
84
84
|
const LoadableWebpackPlugin = require("@loadable/webpack-plugin");
|
|
@@ -88,7 +88,7 @@ var cli_default = () => ({
|
|
|
88
88
|
}
|
|
89
89
|
const modernVars = {
|
|
90
90
|
[`process.env.MODERN_TARGET`]: JSON.stringify(
|
|
91
|
-
isServer ? "node" : "browser"
|
|
91
|
+
isServer || isServiceWorker ? "node" : "browser"
|
|
92
92
|
)
|
|
93
93
|
};
|
|
94
94
|
chain.plugin(CHAIN_ID.PLUGIN.DEFINE).tap((args) => {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var __async = (__this, __arguments, generator) => {
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
var fulfilled = (value) => {
|
|
21
|
+
try {
|
|
22
|
+
step(generator.next(value));
|
|
23
|
+
} catch (e) {
|
|
24
|
+
reject(e);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
var rejected = (value) => {
|
|
28
|
+
try {
|
|
29
|
+
step(generator.throw(value));
|
|
30
|
+
} catch (e) {
|
|
31
|
+
reject(e);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
35
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
var prefetch_worker_exports = {};
|
|
39
|
+
__export(prefetch_worker_exports, {
|
|
40
|
+
default: () => prefetch_worker_default
|
|
41
|
+
});
|
|
42
|
+
module.exports = __toCommonJS(prefetch_worker_exports);
|
|
43
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
44
|
+
var import_server = require("react-dom/server");
|
|
45
|
+
var import_server2 = require("@loadable/server");
|
|
46
|
+
const prefetch = (App, context) => __async(void 0, null, function* () {
|
|
47
|
+
var _a;
|
|
48
|
+
const { ssrContext } = context;
|
|
49
|
+
const { loadableStats } = ssrContext;
|
|
50
|
+
if (loadableStats) {
|
|
51
|
+
const extractor = new import_server2.ChunkExtractor({
|
|
52
|
+
stats: loadableStats,
|
|
53
|
+
entrypoints: [ssrContext.entryName].filter(Boolean)
|
|
54
|
+
});
|
|
55
|
+
(0, import_server.renderToStaticMarkup)(extractor.collectChunks(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
|
|
56
|
+
context
|
|
57
|
+
})));
|
|
58
|
+
} else {
|
|
59
|
+
(0, import_server.renderToStaticMarkup)(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
|
|
60
|
+
context
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
if (!context.loaderManager.hasPendingLoaders()) {
|
|
64
|
+
return {
|
|
65
|
+
initialData: context.initialData,
|
|
66
|
+
i18nData: context.__i18nData__
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const loadersData = yield context.loaderManager.awaitPendingLoaders();
|
|
70
|
+
Object.keys(loadersData).forEach((id) => {
|
|
71
|
+
const data = loadersData[id];
|
|
72
|
+
if (data._error) {
|
|
73
|
+
ssrContext.logger.error("App Prefetch Loader", data._error);
|
|
74
|
+
ssrContext.metrics.emitCounter("app.prefetch.loader.error", 1);
|
|
75
|
+
delete data._error;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
loadersData,
|
|
80
|
+
initialData: context.initialData,
|
|
81
|
+
i18nData: context.__i18nData__,
|
|
82
|
+
storeState: (_a = context == null ? void 0 : context.store) == null ? void 0 : _a.getState()
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
var prefetch_worker_default = prefetch;
|
|
86
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
87
|
+
0 && (module.exports = {});
|
|
@@ -34,8 +34,12 @@ const NoSSR = (props) => {
|
|
|
34
34
|
csr = true;
|
|
35
35
|
setMounted(true);
|
|
36
36
|
});
|
|
37
|
-
const { children } = props;
|
|
38
|
-
return import_react.default.createElement(
|
|
37
|
+
const { children, fallback = null } = props;
|
|
38
|
+
return import_react.default.createElement(
|
|
39
|
+
import_react.default.Fragment,
|
|
40
|
+
null,
|
|
41
|
+
isMounted ? children : fallback
|
|
42
|
+
);
|
|
39
43
|
};
|
|
40
44
|
// Annotate the CommonJS export names for ESM import in node:
|
|
41
45
|
0 && (module.exports = {
|
|
@@ -49,7 +49,7 @@ module.exports = __toCommonJS(renderToStream_exports);
|
|
|
49
49
|
var import_react = require("react");
|
|
50
50
|
var import_ssr = require("@modern-js/utils/ssr");
|
|
51
51
|
var import_prerender = require("../../react/prerender");
|
|
52
|
-
var
|
|
52
|
+
var import_time = require("../time");
|
|
53
53
|
var import_renderToPipe = __toESM(require("./renderToPipe"));
|
|
54
54
|
const render = ({ App, context }) => {
|
|
55
55
|
const { ssrContext } = context;
|
|
@@ -59,7 +59,7 @@ const render = ({ App, context }) => {
|
|
|
59
59
|
);
|
|
60
60
|
}
|
|
61
61
|
return (0, import_ssr.run)(ssrContext.request.headers, () => __async(void 0, null, function* () {
|
|
62
|
-
const end = (0,
|
|
62
|
+
const end = (0, import_time.time)();
|
|
63
63
|
const rootElement = (0, import_react.createElement)(App, {
|
|
64
64
|
context: Object.assign(context || {}, {
|
|
65
65
|
ssr: true
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var index_worker_exports = {};
|
|
25
|
+
__export(index_worker_exports, {
|
|
26
|
+
render: () => render
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(index_worker_exports);
|
|
29
|
+
var import_react = require("react");
|
|
30
|
+
var import_prerender = require("../../react/prerender");
|
|
31
|
+
var import_time = require("../time");
|
|
32
|
+
var import_renderToPipe = __toESM(require("./renderToPipe"));
|
|
33
|
+
const render = ({ App, context }) => {
|
|
34
|
+
const { ssrContext } = context;
|
|
35
|
+
if (!ssrContext) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
'The "ssrContext" must not be undefined, but received undefined'
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
const end = (0, import_time.time)();
|
|
41
|
+
const rootElement = (0, import_react.createElement)(App, {
|
|
42
|
+
context: Object.assign(context || {}, {
|
|
43
|
+
ssr: true
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
const pipe = (0, import_renderToPipe.default)(rootElement, context, {
|
|
47
|
+
onShellReady() {
|
|
48
|
+
const cacheConfig = import_prerender.PreRender.config();
|
|
49
|
+
if (cacheConfig) {
|
|
50
|
+
ssrContext.cacheConfig = cacheConfig;
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
onAllReady() {
|
|
54
|
+
const cost = end();
|
|
55
|
+
ssrContext.logger.debug("App Render To HTML cost = %d ms", cost);
|
|
56
|
+
ssrContext.metrics.emitTimer("app.render.html.cost", cost);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return pipe;
|
|
60
|
+
};
|
|
61
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
62
|
+
0 && (module.exports = {
|
|
63
|
+
render
|
|
64
|
+
});
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
9
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
+
var __spreadValues = (a, b) => {
|
|
11
|
+
for (var prop in b || (b = {}))
|
|
12
|
+
if (__hasOwnProp.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
if (__getOwnPropSymbols)
|
|
15
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
+
if (__propIsEnum.call(b, prop))
|
|
17
|
+
__defNormalProp(a, prop, b[prop]);
|
|
18
|
+
}
|
|
19
|
+
return a;
|
|
20
|
+
};
|
|
21
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
22
|
+
var __export = (target, all) => {
|
|
23
|
+
for (var name in all)
|
|
24
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
25
|
+
};
|
|
26
|
+
var __copyProps = (to, from, except, desc) => {
|
|
27
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
28
|
+
for (let key of __getOwnPropNames(from))
|
|
29
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
30
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
31
|
+
}
|
|
32
|
+
return to;
|
|
33
|
+
};
|
|
34
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
35
|
+
var __async = (__this, __arguments, generator) => {
|
|
36
|
+
return new Promise((resolve, reject) => {
|
|
37
|
+
var fulfilled = (value) => {
|
|
38
|
+
try {
|
|
39
|
+
step(generator.next(value));
|
|
40
|
+
} catch (e) {
|
|
41
|
+
reject(e);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var rejected = (value) => {
|
|
45
|
+
try {
|
|
46
|
+
step(generator.throw(value));
|
|
47
|
+
} catch (e) {
|
|
48
|
+
reject(e);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
52
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
var renderToPipe_worker_exports = {};
|
|
56
|
+
__export(renderToPipe_worker_exports, {
|
|
57
|
+
default: () => renderToPipe_worker_default
|
|
58
|
+
});
|
|
59
|
+
module.exports = __toCommonJS(renderToPipe_worker_exports);
|
|
60
|
+
var import_types = require("../types");
|
|
61
|
+
var import_template = require("./template");
|
|
62
|
+
function renderToPipe(rootElement, context, options) {
|
|
63
|
+
let isShellStream = true;
|
|
64
|
+
const { ssrContext } = context;
|
|
65
|
+
const forUserPipe = (stream) => __async(this, null, function* () {
|
|
66
|
+
let renderToReadableStream;
|
|
67
|
+
try {
|
|
68
|
+
({ renderToReadableStream } = require("react-dom/server"));
|
|
69
|
+
} catch (e) {
|
|
70
|
+
}
|
|
71
|
+
const { shellAfter, shellBefore } = (0, import_template.getTemplates)(
|
|
72
|
+
context,
|
|
73
|
+
import_types.RenderLevel.SERVER_RENDER
|
|
74
|
+
);
|
|
75
|
+
try {
|
|
76
|
+
let _a;
|
|
77
|
+
const readableOriginal = yield renderToReadableStream(rootElement, __spreadProps(__spreadValues({}, options), {
|
|
78
|
+
onError(error) {
|
|
79
|
+
var _a2;
|
|
80
|
+
ssrContext.logger.error(
|
|
81
|
+
"An error occurs during streaming SSR",
|
|
82
|
+
error
|
|
83
|
+
);
|
|
84
|
+
ssrContext.metrics.emitCounter("app.render.streaming.error", 1);
|
|
85
|
+
(_a2 = options == null ? void 0 : options.onError) == null ? void 0 : _a2.call(options, error);
|
|
86
|
+
}
|
|
87
|
+
}));
|
|
88
|
+
const reader = readableOriginal.getReader();
|
|
89
|
+
const injectableStream = new ReadableStream({
|
|
90
|
+
start(controller) {
|
|
91
|
+
return __async(this, null, function* () {
|
|
92
|
+
const { value } = yield reader.read();
|
|
93
|
+
if (isShellStream) {
|
|
94
|
+
controller.enqueue(encodeForWebStream(shellBefore));
|
|
95
|
+
controller.enqueue(value);
|
|
96
|
+
controller.enqueue(encodeForWebStream(shellAfter));
|
|
97
|
+
isShellStream = false;
|
|
98
|
+
} else {
|
|
99
|
+
controller.enqueue(value);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return readableOriginal(injectableStream).readableOriginal(stream);
|
|
105
|
+
} catch (err) {
|
|
106
|
+
ssrContext.metrics.emitCounter("app.render.streaming.shell.error", 1);
|
|
107
|
+
const { shellAfter: shellAfter2, shellBefore: shellBefore2 } = (0, import_template.getTemplates)(
|
|
108
|
+
context,
|
|
109
|
+
import_types.RenderLevel.CLIENT_RENDER
|
|
110
|
+
);
|
|
111
|
+
const fallbackHtml = `${shellBefore2}${shellAfter2}`;
|
|
112
|
+
return fallbackHtml;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return forUserPipe;
|
|
116
|
+
}
|
|
117
|
+
let encoder;
|
|
118
|
+
function encodeForWebStream(thing) {
|
|
119
|
+
if (!encoder) {
|
|
120
|
+
encoder = new TextEncoder();
|
|
121
|
+
}
|
|
122
|
+
if (typeof thing === "string") {
|
|
123
|
+
return encoder.encode(thing);
|
|
124
|
+
}
|
|
125
|
+
return thing;
|
|
126
|
+
}
|
|
127
|
+
var renderToPipe_worker_default = renderToPipe;
|
|
128
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
129
|
+
0 && (module.exports = {});
|
|
@@ -52,7 +52,7 @@ var import_serialize_javascript = __toESM(require("serialize-javascript"));
|
|
|
52
52
|
var import_react_helmet = __toESM(require("react-helmet"));
|
|
53
53
|
var import_helmet = __toESM(require("../helmet"));
|
|
54
54
|
var import_types = require("../types");
|
|
55
|
-
var
|
|
55
|
+
var import_time = require("../time");
|
|
56
56
|
var import_prefetch = __toESM(require("../../prefetch"));
|
|
57
57
|
var import_template = require("./template");
|
|
58
58
|
var import_reduce = require("./reduce");
|
|
@@ -102,18 +102,19 @@ class Entry {
|
|
|
102
102
|
}
|
|
103
103
|
renderToHtml(context) {
|
|
104
104
|
return __async(this, null, function* () {
|
|
105
|
+
var _a, _b, _c;
|
|
105
106
|
const ssrContext = context.ssrContext;
|
|
106
|
-
if (ssrContext.redirection.url) {
|
|
107
|
+
if ((_a = ssrContext.redirection) == null ? void 0 : _a.url) {
|
|
107
108
|
return "";
|
|
108
109
|
}
|
|
109
110
|
const prefetchData = yield this.prefetch(context);
|
|
110
|
-
if (ssrContext.redirection.url) {
|
|
111
|
+
if ((_b = ssrContext.redirection) == null ? void 0 : _b.url) {
|
|
111
112
|
return "";
|
|
112
113
|
}
|
|
113
114
|
if (this.result.renderLevel >= import_types.RenderLevel.SERVER_PREFETCH) {
|
|
114
115
|
this.result.html = this.renderToString(context);
|
|
115
116
|
}
|
|
116
|
-
if (ssrContext.redirection.url) {
|
|
117
|
+
if ((_c = ssrContext.redirection) == null ? void 0 : _c.url) {
|
|
117
118
|
return "";
|
|
118
119
|
}
|
|
119
120
|
let html = "";
|
|
@@ -137,7 +138,7 @@ class Entry {
|
|
|
137
138
|
prefetch(context) {
|
|
138
139
|
return __async(this, null, function* () {
|
|
139
140
|
let prefetchData;
|
|
140
|
-
const end = (0,
|
|
141
|
+
const end = (0, import_time.time)();
|
|
141
142
|
try {
|
|
142
143
|
prefetchData = yield (0, import_prefetch.default)(this.App, context);
|
|
143
144
|
this.result.renderLevel = import_types.RenderLevel.SERVER_PREFETCH;
|
|
@@ -154,7 +155,7 @@ class Entry {
|
|
|
154
155
|
}
|
|
155
156
|
renderToString(context) {
|
|
156
157
|
let html = "";
|
|
157
|
-
const end = (0,
|
|
158
|
+
const end = (0, import_time.time)();
|
|
158
159
|
const { ssrContext } = context;
|
|
159
160
|
try {
|
|
160
161
|
const App = import_react.default.createElement(this.App, {
|
|
@@ -48,7 +48,7 @@ __export(renderToString_exports, {
|
|
|
48
48
|
module.exports = __toCommonJS(renderToString_exports);
|
|
49
49
|
var import_ssr = require("@modern-js/utils/ssr");
|
|
50
50
|
var import_prerender = require("../../react/prerender");
|
|
51
|
-
var
|
|
51
|
+
var import_time = require("../time");
|
|
52
52
|
var import_entry = __toESM(require("./entry"));
|
|
53
53
|
const render = ({
|
|
54
54
|
App,
|
|
@@ -63,7 +63,7 @@ const render = ({
|
|
|
63
63
|
config
|
|
64
64
|
});
|
|
65
65
|
entry.metrics.emitCounter("app.visit.count", 1);
|
|
66
|
-
const end = (0,
|
|
66
|
+
const end = (0, import_time.time)();
|
|
67
67
|
const html = yield entry.renderToHtml(context);
|
|
68
68
|
const cost = end();
|
|
69
69
|
entry.logger.info("App Render Total cost = %d ms", cost);
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var __async = (__this, __arguments, generator) => {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
var fulfilled = (value) => {
|
|
27
|
+
try {
|
|
28
|
+
step(generator.next(value));
|
|
29
|
+
} catch (e) {
|
|
30
|
+
reject(e);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
var rejected = (value) => {
|
|
34
|
+
try {
|
|
35
|
+
step(generator.throw(value));
|
|
36
|
+
} catch (e) {
|
|
37
|
+
reject(e);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
41
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var index_worker_exports = {};
|
|
45
|
+
__export(index_worker_exports, {
|
|
46
|
+
render: () => render
|
|
47
|
+
});
|
|
48
|
+
module.exports = __toCommonJS(index_worker_exports);
|
|
49
|
+
var import_prerender = require("../../react/prerender");
|
|
50
|
+
var import_time = require("../time");
|
|
51
|
+
var import_entry = __toESM(require("./entry"));
|
|
52
|
+
const render = (_0) => __async(void 0, [_0], function* ({
|
|
53
|
+
App,
|
|
54
|
+
context,
|
|
55
|
+
config
|
|
56
|
+
}) {
|
|
57
|
+
const ssrContext = context.ssrContext;
|
|
58
|
+
const entry = new import_entry.default({
|
|
59
|
+
ctx: ssrContext,
|
|
60
|
+
App,
|
|
61
|
+
config
|
|
62
|
+
});
|
|
63
|
+
entry.metrics.emitCounter("app.visit.count", 1);
|
|
64
|
+
const end = (0, import_time.time)();
|
|
65
|
+
const html = yield entry.renderToHtml(context);
|
|
66
|
+
const cost = end();
|
|
67
|
+
entry.logger.info("App Render Total cost = %d ms", cost);
|
|
68
|
+
entry.metrics.emitTimer("app.render.cost", cost);
|
|
69
|
+
const cacheConfig = import_prerender.PreRender.config();
|
|
70
|
+
if (cacheConfig) {
|
|
71
|
+
context.ssrContext.cacheConfig = cacheConfig;
|
|
72
|
+
}
|
|
73
|
+
return html;
|
|
74
|
+
});
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
render
|
|
78
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var time_exports = {};
|
|
19
|
+
__export(time_exports, {
|
|
20
|
+
time: () => time
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(time_exports);
|
|
23
|
+
const getLatency = (hrtime) => {
|
|
24
|
+
const [s, ns] = process.hrtime(hrtime);
|
|
25
|
+
return s * 1e3 + ns / 1e6;
|
|
26
|
+
};
|
|
27
|
+
const time = () => {
|
|
28
|
+
const hrtime = process.hrtime();
|
|
29
|
+
return () => {
|
|
30
|
+
return getLatency(hrtime);
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
time
|
|
36
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var time_worker_exports = {};
|
|
19
|
+
__export(time_worker_exports, {
|
|
20
|
+
time: () => time
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(time_worker_exports);
|
|
23
|
+
function processHrtime(previousTimestamp) {
|
|
24
|
+
const now = new Date().getTime();
|
|
25
|
+
const clocktime = now * 1e-3;
|
|
26
|
+
let seconds = Math.floor(clocktime);
|
|
27
|
+
let nanoseconds = Math.floor(clocktime % 1 * 1e9);
|
|
28
|
+
if (previousTimestamp) {
|
|
29
|
+
seconds -= previousTimestamp[0];
|
|
30
|
+
nanoseconds -= previousTimestamp[1];
|
|
31
|
+
if (nanoseconds < 0) {
|
|
32
|
+
seconds--;
|
|
33
|
+
nanoseconds += 1e9;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return [seconds, nanoseconds];
|
|
37
|
+
}
|
|
38
|
+
const getLatency = (hrtime) => {
|
|
39
|
+
const [s, ns] = processHrtime(hrtime);
|
|
40
|
+
return s * 1e3 + ns / 1e6;
|
|
41
|
+
};
|
|
42
|
+
const time = () => {
|
|
43
|
+
const hrtime = processHrtime();
|
|
44
|
+
return () => {
|
|
45
|
+
return getLatency(hrtime);
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
49
|
+
0 && (module.exports = {
|
|
50
|
+
time
|
|
51
|
+
});
|