@modern-js/runtime 2.5.0 → 2.7.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/CHANGELOG.md +55 -0
- package/dist/cjs/cli/index.js +9 -0
- package/dist/cjs/common.js +6 -0
- package/dist/cjs/core/{app-config.js → appConfig.js} +8 -4
- package/dist/cjs/core/compatible.js +11 -10
- package/dist/cjs/core/index.js +6 -6
- package/dist/cjs/core/loader/index.js +4 -0
- package/dist/cjs/core/loader/loaderManager.js +6 -0
- package/dist/cjs/core/loader/useLoader.js +6 -2
- package/dist/cjs/core/types.js +15 -0
- package/dist/cjs/document/Body.js +6 -8
- package/dist/cjs/document/DocumentContext.js +4 -0
- package/dist/cjs/document/DocumentStructureContext.js +4 -0
- package/dist/cjs/document/Head.js +7 -11
- package/dist/cjs/document/Html.js +24 -22
- package/dist/cjs/document/Links.js +1 -3
- package/dist/cjs/document/Root.js +8 -14
- package/dist/cjs/document/Script.js +5 -7
- package/dist/cjs/document/Scripts.js +1 -3
- package/dist/cjs/document/cli/index.js +8 -2
- package/dist/cjs/exports/head.js +4 -0
- package/dist/cjs/exports/loadable.js +4 -0
- package/dist/cjs/exports/styled.js +4 -0
- package/dist/cjs/router/cli/index.js +3 -7
- package/dist/cjs/router/index.js +4 -0
- package/dist/cjs/router/runtime/DefaultNotFound.js +13 -10
- package/dist/cjs/router/runtime/DeferredDataScripts.js +165 -0
- package/dist/cjs/router/runtime/index.js +116 -3
- package/dist/cjs/router/runtime/plugin.js +18 -6
- package/dist/cjs/router/runtime/plugin.node.js +16 -49
- package/dist/cjs/router/runtime/utils.js +79 -101
- package/dist/cjs/router/runtime/withRouter.js +9 -6
- package/dist/cjs/{runtime-context.js → runtimeContext.js} +3 -3
- package/dist/cjs/ssr/cli/babel-plugin-ssr-loader-id.js +4 -0
- package/dist/cjs/ssr/cli/index.js +6 -0
- package/dist/cjs/ssr/index.js +10 -24
- package/dist/cjs/ssr/index.node.js +5 -0
- package/dist/cjs/ssr/prefetch.js +3 -6
- package/dist/cjs/ssr/react/nossr/index.js +4 -0
- package/dist/cjs/ssr/react/prerender/index.js +4 -0
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +7 -13
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +5 -0
- package/dist/cjs/ssr/serverRender/renderToStream/index.js +4 -0
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +22 -7
- package/dist/cjs/ssr/serverRender/renderToStream/template.js +2 -1
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +28 -11
- package/dist/cjs/ssr/serverRender/renderToString/index.js +4 -0
- package/dist/cjs/ssr/serverRender/renderToString/loadable.js +1 -1
- package/dist/cjs/ssr/serverRender/time.worker.js +1 -1
- package/dist/cjs/ssr/serverRender/utils.js +1 -1
- package/dist/cjs/ssr/utils.js +16 -4
- package/dist/cjs/state/index.js +4 -0
- package/dist/cjs/state/plugins.js +4 -0
- package/dist/cjs/state/runtime/index.js +4 -0
- package/dist/cjs/state/runtime/plugin.js +5 -7
- package/dist/esm/cli/index.js +5 -1
- package/dist/esm/common.js +3 -1
- package/dist/esm/core/{app-config.js → appConfig.js} +3 -1
- package/dist/esm/core/compatible.js +4 -2
- package/dist/esm/core/index.js +2 -2
- package/dist/esm/core/loader/loaderManager.js +3 -1
- package/dist/esm/core/loader/useLoader.js +1 -1
- package/dist/esm/core/types.js +1 -0
- package/dist/esm/document/cli/index.js +4 -2
- package/dist/esm/router/cli/index.js +1 -5
- package/dist/esm/router/runtime/DeferredDataScripts.js +166 -0
- package/dist/esm/router/runtime/index.js +3 -2
- package/dist/esm/router/runtime/plugin.js +11 -3
- package/dist/esm/router/runtime/plugin.node.js +11 -68
- package/dist/esm/router/runtime/utils.js +138 -81
- package/dist/esm/ssr/cli/index.js +2 -0
- package/dist/esm/ssr/index.node.js +1 -0
- package/dist/esm/ssr/prefetch.js +1 -0
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +37 -10
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -0
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +19 -8
- package/dist/esm/ssr/serverRender/renderToStream/template.js +2 -1
- package/dist/esm/ssr/serverRender/renderToString/entry.js +37 -13
- package/dist/esm/ssr/serverRender/time.worker.js +1 -1
- package/dist/esm/ssr/utils.js +6 -4
- package/dist/esm-node/cli/index.js +5 -0
- package/dist/esm-node/common.js +4 -0
- package/dist/esm-node/core/{app-config.js → appConfig.js} +5 -1
- package/dist/esm-node/core/compatible.js +5 -8
- package/dist/esm-node/core/index.js +2 -2
- package/dist/esm-node/core/loader/loaderManager.js +2 -0
- package/dist/esm-node/core/loader/useLoader.js +1 -1
- package/dist/esm-node/core/types.js +0 -0
- package/dist/esm-node/document/Body.js +6 -8
- package/dist/esm-node/document/Head.js +7 -11
- package/dist/esm-node/document/Html.js +24 -22
- package/dist/esm-node/document/Links.js +1 -3
- package/dist/esm-node/document/Root.js +8 -14
- package/dist/esm-node/document/Script.js +5 -7
- package/dist/esm-node/document/Scripts.js +1 -3
- package/dist/esm-node/document/cli/index.js +4 -2
- package/dist/esm-node/router/cli/index.js +2 -5
- package/dist/esm-node/router/runtime/DefaultNotFound.js +13 -10
- package/dist/esm-node/router/runtime/DeferredDataScripts.js +148 -0
- package/dist/esm-node/router/runtime/index.js +113 -2
- package/dist/esm-node/router/runtime/plugin.js +15 -7
- package/dist/esm-node/router/runtime/plugin.node.js +12 -52
- package/dist/esm-node/router/runtime/utils.js +70 -101
- package/dist/esm-node/router/runtime/withRouter.js +9 -6
- package/dist/esm-node/ssr/cli/index.js +2 -0
- package/dist/esm-node/ssr/index.js +6 -24
- package/dist/esm-node/ssr/index.node.js +1 -0
- package/dist/esm-node/ssr/prefetch.js +3 -6
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +7 -7
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -0
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +22 -7
- package/dist/esm-node/ssr/serverRender/renderToStream/template.js +2 -1
- package/dist/esm-node/ssr/serverRender/renderToString/entry.js +24 -11
- package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +1 -1
- package/dist/esm-node/ssr/serverRender/time.worker.js +1 -1
- package/dist/esm-node/ssr/serverRender/utils.js +1 -1
- package/dist/esm-node/ssr/utils.js +6 -4
- package/dist/esm-node/state/runtime/plugin.js +1 -7
- package/dist/types/common.d.ts +3 -1
- package/dist/types/core/compatible.d.ts +1 -1
- package/dist/types/core/index.d.ts +4 -3
- package/dist/types/core/loader/index.d.ts +1 -2
- package/dist/types/core/loader/useLoader.d.ts +1 -15
- package/dist/types/core/plugin.d.ts +15 -15
- package/dist/types/core/types.d.ts +22 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/router/runtime/DeferredDataScripts.d.ts +8 -0
- package/dist/types/router/runtime/index.d.ts +4 -2
- package/dist/types/router/runtime/utils.d.ts +23 -4
- package/dist/types/{runtime-context.d.ts → runtimeContext.d.ts} +2 -0
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +2 -0
- package/dist/types/ssr/serverRender/renderToString/type.d.ts +1 -0
- package/package.json +14 -15
- package/dist/cjs/ssr/prefetch.worker.js +0 -67
- package/dist/cjs/ssr/serverRender/renderToStream/index.worker.js +0 -64
- package/dist/cjs/ssr/serverRender/renderToString/index.worker.js +0 -58
- package/dist/esm/ssr/prefetch.worker.js +0 -191
- package/dist/esm/ssr/serverRender/renderToStream/index.worker.js +0 -32
- package/dist/esm/ssr/serverRender/renderToString/index.worker.js +0 -167
- package/dist/esm-node/ssr/prefetch.worker.js +0 -46
- package/dist/esm-node/ssr/serverRender/renderToStream/index.worker.js +0 -35
- package/dist/esm-node/ssr/serverRender/renderToString/index.worker.js +0 -29
- package/dist/types/ssr/prefetch.worker.d.ts +0 -13
- package/dist/types/ssr/serverRender/renderToStream/index.worker.d.ts +0 -6
- package/dist/types/ssr/serverRender/renderToString/index.worker.d.ts +0 -6
- /package/dist/esm/{runtime-context.js → runtimeContext.js} +0 -0
- /package/dist/esm-node/{runtime-context.js → runtimeContext.js} +0 -0
- /package/dist/types/core/{app-config.d.ts → appConfig.d.ts} +0 -0
|
@@ -227,10 +227,9 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
227
227
|
};
|
|
228
228
|
}
|
|
229
229
|
};
|
|
230
|
-
import { jsx
|
|
230
|
+
import { jsx } from "react/jsx-runtime";
|
|
231
231
|
import { useContext } from "react";
|
|
232
|
-
import
|
|
233
|
-
import { createStaticHandler, isRouteErrorResponse } from "@remix-run/router";
|
|
232
|
+
import { createStaticHandler } from "@modern-js/utils/remix-router";
|
|
234
233
|
import { createStaticRouter, StaticRouterProvider } from "react-router-dom/server";
|
|
235
234
|
import hoistNonReactStatics from "hoist-non-react-statics";
|
|
236
235
|
import { createRoutesFromElements } from "react-router-dom";
|
|
@@ -298,45 +297,6 @@ function createFetchHeaders(requestHeaders) {
|
|
|
298
297
|
}
|
|
299
298
|
return headers;
|
|
300
299
|
}
|
|
301
|
-
function serializeErrors(errors) {
|
|
302
|
-
if (!errors) {
|
|
303
|
-
return null;
|
|
304
|
-
}
|
|
305
|
-
var entries = Object.entries(errors);
|
|
306
|
-
var serialized = {};
|
|
307
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
308
|
-
try {
|
|
309
|
-
for(var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
310
|
-
var _step_value = _slicedToArray(_step.value, 2), key = _step_value[0], val = _step_value[1];
|
|
311
|
-
if (isRouteErrorResponse(val)) {
|
|
312
|
-
serialized[key] = _objectSpreadProps(_objectSpread({}, val), {
|
|
313
|
-
__type: "RouteErrorResponse"
|
|
314
|
-
});
|
|
315
|
-
} else if (_instanceof(val, Error)) {
|
|
316
|
-
serialized[key] = {
|
|
317
|
-
message: val.message,
|
|
318
|
-
__type: "Error"
|
|
319
|
-
};
|
|
320
|
-
} else {
|
|
321
|
-
serialized[key] = val;
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
} catch (err) {
|
|
325
|
-
_didIteratorError = true;
|
|
326
|
-
_iteratorError = err;
|
|
327
|
-
} finally{
|
|
328
|
-
try {
|
|
329
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
330
|
-
_iterator.return();
|
|
331
|
-
}
|
|
332
|
-
} finally{
|
|
333
|
-
if (_didIteratorError) {
|
|
334
|
-
throw _iteratorError;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
return serialized;
|
|
339
|
-
}
|
|
340
300
|
var routerPlugin = function(param) {
|
|
341
301
|
var _param_basename = param.basename, basename = _param_basename === void 0 ? "" : _param_basename, routesConfig = param.routesConfig, createRoutes = param.createRoutes;
|
|
342
302
|
return {
|
|
@@ -346,7 +306,7 @@ var routerPlugin = function(param) {
|
|
|
346
306
|
init: function init(param, next) {
|
|
347
307
|
var context = param.context;
|
|
348
308
|
return _asyncToGenerator(function() {
|
|
349
|
-
var request, baseUrl, _basename, routes, query, remixRequest, routerContext, router;
|
|
309
|
+
var _context_ssrContext, request, ssrMode, baseUrl, _basename, routes, query, remixRequest, routerContext, router;
|
|
350
310
|
return __generator(this, function(_state) {
|
|
351
311
|
switch(_state.label){
|
|
352
312
|
case 0:
|
|
@@ -358,10 +318,10 @@ var routerPlugin = function(param) {
|
|
|
358
318
|
})
|
|
359
319
|
];
|
|
360
320
|
}
|
|
361
|
-
|
|
321
|
+
_context_ssrContext = context.ssrContext, request = _context_ssrContext.request, ssrMode = _context_ssrContext.mode;
|
|
362
322
|
baseUrl = request.baseUrl;
|
|
363
323
|
_basename = baseUrl === "/" ? urlJoin(baseUrl, basename) : baseUrl;
|
|
364
|
-
routes = createRoutes ? createRoutes() : createRoutesFromElements(renderRoutes(routesConfig));
|
|
324
|
+
routes = createRoutes ? createRoutes() : createRoutesFromElements(renderRoutes(routesConfig, ssrMode));
|
|
365
325
|
query = createStaticHandler(routes, {
|
|
366
326
|
basename: _basename
|
|
367
327
|
}).query;
|
|
@@ -403,29 +363,12 @@ var routerPlugin = function(param) {
|
|
|
403
363
|
var getRouteApp = function() {
|
|
404
364
|
return function(props) {
|
|
405
365
|
var _useContext = useContext(RuntimeReactContext), router = _useContext.router, routerContext = _useContext.routerContext;
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
isJSON: true
|
|
413
|
-
}), ";");
|
|
414
|
-
return /* @__PURE__ */ jsxs(App, _objectSpreadProps(_objectSpread({}, props), {
|
|
415
|
-
children: [
|
|
416
|
-
/* @__PURE__ */ jsx(StaticRouterProvider, {
|
|
417
|
-
router: router,
|
|
418
|
-
context: routerContext,
|
|
419
|
-
hydrate: false
|
|
420
|
-
}),
|
|
421
|
-
/* @__PURE__ */ jsx("script", {
|
|
422
|
-
suppressHydrationWarning: true,
|
|
423
|
-
id: "the-nonce",
|
|
424
|
-
dangerouslySetInnerHTML: {
|
|
425
|
-
__html: hydrateScript
|
|
426
|
-
}
|
|
427
|
-
})
|
|
428
|
-
]
|
|
366
|
+
return /* @__PURE__ */ jsx(App, _objectSpreadProps(_objectSpread({}, props), {
|
|
367
|
+
children: /* @__PURE__ */ jsx(StaticRouterProvider, {
|
|
368
|
+
router: router,
|
|
369
|
+
context: routerContext,
|
|
370
|
+
hydrate: false
|
|
371
|
+
})
|
|
429
372
|
}));
|
|
430
373
|
};
|
|
431
374
|
};
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
function _arrayLikeToArray(arr, len) {
|
|
2
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
+
return arr2;
|
|
5
|
+
}
|
|
6
|
+
function _arrayWithHoles(arr) {
|
|
7
|
+
if (Array.isArray(arr)) return arr;
|
|
8
|
+
}
|
|
1
9
|
function _defineProperty(obj, key, value) {
|
|
2
10
|
if (key in obj) {
|
|
3
11
|
Object.defineProperty(obj, key, {
|
|
@@ -11,6 +19,40 @@ function _defineProperty(obj, key, value) {
|
|
|
11
19
|
}
|
|
12
20
|
return obj;
|
|
13
21
|
}
|
|
22
|
+
function _instanceof(left, right) {
|
|
23
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
24
|
+
return !!right[Symbol.hasInstance](left);
|
|
25
|
+
} else {
|
|
26
|
+
return left instanceof right;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function _iterableToArrayLimit(arr, i) {
|
|
30
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
31
|
+
if (_i == null) return;
|
|
32
|
+
var _arr = [];
|
|
33
|
+
var _n = true;
|
|
34
|
+
var _d = false;
|
|
35
|
+
var _s, _e;
|
|
36
|
+
try {
|
|
37
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
38
|
+
_arr.push(_s.value);
|
|
39
|
+
if (i && _arr.length === i) break;
|
|
40
|
+
}
|
|
41
|
+
} catch (err) {
|
|
42
|
+
_d = true;
|
|
43
|
+
_e = err;
|
|
44
|
+
} finally{
|
|
45
|
+
try {
|
|
46
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
47
|
+
} finally{
|
|
48
|
+
if (_d) throw _e;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return _arr;
|
|
52
|
+
}
|
|
53
|
+
function _nonIterableRest() {
|
|
54
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
55
|
+
}
|
|
14
56
|
function _objectSpread(target) {
|
|
15
57
|
for(var i = 1; i < arguments.length; i++){
|
|
16
58
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
@@ -77,70 +119,25 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
77
119
|
}
|
|
78
120
|
return target;
|
|
79
121
|
}
|
|
122
|
+
function _slicedToArray(arr, i) {
|
|
123
|
+
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
124
|
+
}
|
|
125
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
126
|
+
if (!o) return;
|
|
127
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
128
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
129
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
130
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
131
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
132
|
+
}
|
|
80
133
|
import { jsx } from "react/jsx-runtime";
|
|
81
|
-
import { Suspense } from "react";
|
|
82
134
|
import { Route } from "react-router-dom";
|
|
135
|
+
import { renderNestedRoute } from "@modern-js/utils/nestedRoutes";
|
|
136
|
+
import { ErrorResponse, isRouteErrorResponse } from "@modern-js/utils/remix-router";
|
|
83
137
|
import { DefaultNotFound } from "./DefaultNotFound";
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
var
|
|
87
|
-
var routeProps = {
|
|
88
|
-
caseSensitive: nestedRoute.caseSensitive,
|
|
89
|
-
path: nestedRoute.path,
|
|
90
|
-
id: nestedRoute.id,
|
|
91
|
-
loader: createLoader(nestedRoute),
|
|
92
|
-
action: nestedRoute.action,
|
|
93
|
-
hasErrorBoundary: nestedRoute.hasErrorBoundary,
|
|
94
|
-
shouldRevalidate: nestedRoute.shouldRevalidate,
|
|
95
|
-
handle: nestedRoute.handle,
|
|
96
|
-
index: nestedRoute.index,
|
|
97
|
-
element: nestedRoute.element,
|
|
98
|
-
errorElement: nestedRoute.errorElement
|
|
99
|
-
};
|
|
100
|
-
if (nestedRoute.error) {
|
|
101
|
-
var errorElement = /* @__PURE__ */ jsx(nestedRoute.error, {});
|
|
102
|
-
routeProps.errorElement = errorElement;
|
|
103
|
-
}
|
|
104
|
-
var element;
|
|
105
|
-
if (Component) {
|
|
106
|
-
if (parent === null || parent === void 0 ? void 0 : parent.loading) {
|
|
107
|
-
var Loading = parent.loading;
|
|
108
|
-
if (isLoadableComponent(Component)) {
|
|
109
|
-
element = /* @__PURE__ */ jsx(Component, {
|
|
110
|
-
fallback: /* @__PURE__ */ jsx(Loading, {})
|
|
111
|
-
});
|
|
112
|
-
} else {
|
|
113
|
-
element = /* @__PURE__ */ jsx(Suspense, {
|
|
114
|
-
fallback: /* @__PURE__ */ jsx(Loading, {}),
|
|
115
|
-
children: /* @__PURE__ */ jsx(Component, {})
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
} else if (isLoadableComponent(Component) || isRoot) {
|
|
119
|
-
element = /* @__PURE__ */ jsx(Component, {});
|
|
120
|
-
} else {
|
|
121
|
-
element = /* @__PURE__ */ jsx(Suspense, {
|
|
122
|
-
fallback: null,
|
|
123
|
-
children: /* @__PURE__ */ jsx(Component, {})
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
} else {
|
|
127
|
-
nestedRoute.loading = parent === null || parent === void 0 ? void 0 : parent.loading;
|
|
128
|
-
}
|
|
129
|
-
if (element) {
|
|
130
|
-
routeProps.element = element;
|
|
131
|
-
}
|
|
132
|
-
var childElements = children === null || children === void 0 ? void 0 : children.map(function(childRoute) {
|
|
133
|
-
return renderNestedRoute(childRoute, nestedRoute);
|
|
134
|
-
});
|
|
135
|
-
var routeElement = index ? /* @__PURE__ */ jsx(Route, _objectSpreadProps(_objectSpread({}, routeProps), {
|
|
136
|
-
index: true
|
|
137
|
-
}), id) : /* @__PURE__ */ jsx(Route, _objectSpreadProps(_objectSpread({}, routeProps), {
|
|
138
|
-
index: false,
|
|
139
|
-
children: childElements
|
|
140
|
-
}), id);
|
|
141
|
-
return routeElement;
|
|
142
|
-
};
|
|
143
|
-
function getRouteComponents(routes, globalApp) {
|
|
138
|
+
import DeferredDataScripts from "./DeferredDataScripts";
|
|
139
|
+
function getRouteComponents(routes, param) {
|
|
140
|
+
var globalApp = param.globalApp, ssrMode = param.ssrMode;
|
|
144
141
|
var Layout = function(_param) {
|
|
145
142
|
var Component = _param.Component, props = _objectWithoutProperties(_param, [
|
|
146
143
|
"Component"
|
|
@@ -159,7 +156,9 @@ function getRouteComponents(routes, globalApp) {
|
|
|
159
156
|
for(var _iterator = routes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
160
157
|
var route = _step.value;
|
|
161
158
|
if (route.type === "nested") {
|
|
162
|
-
var routeElement = renderNestedRoute(route
|
|
159
|
+
var routeElement = renderNestedRoute(route, {
|
|
160
|
+
DeferredDataComponent: ssrMode === "stream" ? DeferredDataScripts : void 0
|
|
161
|
+
});
|
|
163
162
|
routeElements.push(routeElement);
|
|
164
163
|
} else {
|
|
165
164
|
var routeElement1 = /* @__PURE__ */ jsx(Route, {
|
|
@@ -191,7 +190,7 @@ function getRouteComponents(routes, globalApp) {
|
|
|
191
190
|
}, "*"));
|
|
192
191
|
return routeElements;
|
|
193
192
|
}
|
|
194
|
-
function renderRoutes(routesConfig) {
|
|
193
|
+
function renderRoutes(routesConfig, ssrMode) {
|
|
195
194
|
if (!routesConfig) {
|
|
196
195
|
return null;
|
|
197
196
|
}
|
|
@@ -199,7 +198,10 @@ function renderRoutes(routesConfig) {
|
|
|
199
198
|
if (!routes) {
|
|
200
199
|
return null;
|
|
201
200
|
}
|
|
202
|
-
var routeElements = getRouteComponents(routes,
|
|
201
|
+
var routeElements = getRouteComponents(routes, {
|
|
202
|
+
globalApp: globalApp,
|
|
203
|
+
ssrMode: ssrMode
|
|
204
|
+
});
|
|
203
205
|
return routeElements;
|
|
204
206
|
}
|
|
205
207
|
function getLocation(serverContext) {
|
|
@@ -236,25 +238,80 @@ function standardSlash(str) {
|
|
|
236
238
|
}
|
|
237
239
|
return addr;
|
|
238
240
|
}
|
|
239
|
-
function
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
241
|
+
function serializeErrors(errors) {
|
|
242
|
+
if (!errors) {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
var entries = Object.entries(errors);
|
|
246
|
+
var serialized = {};
|
|
247
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
248
|
+
try {
|
|
249
|
+
for(var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
250
|
+
var _step_value = _slicedToArray(_step.value, 2), key = _step_value[0], val = _step_value[1];
|
|
251
|
+
if (isRouteErrorResponse(val)) {
|
|
252
|
+
serialized[key] = _objectSpreadProps(_objectSpread({}, val), {
|
|
253
|
+
__type: "RouteErrorResponse"
|
|
254
|
+
});
|
|
255
|
+
} else if (_instanceof(val, Error)) {
|
|
256
|
+
serialized[key] = {
|
|
257
|
+
message: val.message,
|
|
258
|
+
stack: val.stack,
|
|
259
|
+
__type: "Error"
|
|
260
|
+
};
|
|
261
|
+
} else {
|
|
262
|
+
serialized[key] = val;
|
|
245
263
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
264
|
+
}
|
|
265
|
+
} catch (err) {
|
|
266
|
+
_didIteratorError = true;
|
|
267
|
+
_iteratorError = err;
|
|
268
|
+
} finally{
|
|
269
|
+
try {
|
|
270
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
271
|
+
_iterator.return();
|
|
272
|
+
}
|
|
273
|
+
} finally{
|
|
274
|
+
if (_didIteratorError) {
|
|
275
|
+
throw _iteratorError;
|
|
252
276
|
}
|
|
253
|
-
|
|
254
|
-
};
|
|
277
|
+
}
|
|
255
278
|
}
|
|
279
|
+
return serialized;
|
|
256
280
|
}
|
|
257
|
-
function
|
|
258
|
-
|
|
281
|
+
function deserializeErrors(errors) {
|
|
282
|
+
if (!errors) {
|
|
283
|
+
return null;
|
|
284
|
+
}
|
|
285
|
+
var entries = Object.entries(errors);
|
|
286
|
+
var serialized = {};
|
|
287
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
288
|
+
try {
|
|
289
|
+
for(var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
290
|
+
var _step_value = _slicedToArray(_step.value, 2), key = _step_value[0], val = _step_value[1];
|
|
291
|
+
if (val && val.__type === "RouteErrorResponse") {
|
|
292
|
+
serialized[key] = new ErrorResponse(val.status, val.statusText, val.data, val.internal === true);
|
|
293
|
+
} else if (val && val.__type === "Error") {
|
|
294
|
+
var error = new Error(val.message);
|
|
295
|
+
error.stack = val.stack;
|
|
296
|
+
serialized[key] = error;
|
|
297
|
+
} else {
|
|
298
|
+
serialized[key] = val;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
} catch (err) {
|
|
302
|
+
_didIteratorError = true;
|
|
303
|
+
_iteratorError = err;
|
|
304
|
+
} finally{
|
|
305
|
+
try {
|
|
306
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
307
|
+
_iterator.return();
|
|
308
|
+
}
|
|
309
|
+
} finally{
|
|
310
|
+
if (_didIteratorError) {
|
|
311
|
+
throw _iteratorError;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return serialized;
|
|
259
316
|
}
|
|
260
|
-
export { getLocation, getRouteComponents, renderRoutes, standardSlash, urlJoin };
|
|
317
|
+
export { deserializeErrors, getLocation, getRouteComponents, renderRoutes, serializeErrors, standardSlash, urlJoin };
|
|
@@ -113,6 +113,8 @@ var cli_default = function() {
|
|
|
113
113
|
return {
|
|
114
114
|
source: {
|
|
115
115
|
alias: {
|
|
116
|
+
// ensure that all packages use the same storage in @modern-js/utils/ssr
|
|
117
|
+
"@modern-js/utils/ssr": require.resolve("@modern-js/utils/ssr"),
|
|
116
118
|
"@modern-js/runtime/plugins": pluginsExportsUtils.getPath()
|
|
117
119
|
}
|
|
118
120
|
},
|
package/dist/esm/ssr/prefetch.js
CHANGED
|
@@ -182,6 +182,7 @@ var prefetch = function() {
|
|
|
182
182
|
loadersData: loadersData,
|
|
183
183
|
initialData: context.initialData,
|
|
184
184
|
i18nData: context.__i18nData__,
|
|
185
|
+
// todo: move to plugin state
|
|
185
186
|
storeState: context === null || context === void 0 ? void 0 : (_context_store = context.store) === null || _context_store === void 0 ? void 0 : _context_store.getState()
|
|
186
187
|
}
|
|
187
188
|
];
|
|
@@ -1,4 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
function _defineProperty(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _objectSpread(target) {
|
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
+
var ownKeys = Object.keys(source);
|
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
ownKeys.forEach(function(key) {
|
|
24
|
+
_defineProperty(target, key, source[key]);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
import { serializeJson } from "@modern-js/utils/serialize";
|
|
2
30
|
import { buildTemplate } from "./buildTemplate.share";
|
|
3
31
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
4
32
|
var injectSSRDataScript = function injectSSRDataScript(template) {
|
|
@@ -6,24 +34,23 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
6
34
|
return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
|
|
7
35
|
function buildSSRDataScript() {
|
|
8
36
|
var ssrContext = options.ssrContext, renderLevel = options.renderLevel;
|
|
9
|
-
var request = ssrContext.request;
|
|
37
|
+
var request = ssrContext.request, enableUnsafeCtx = ssrContext.enableUnsafeCtx;
|
|
38
|
+
var unsafeContext = {
|
|
39
|
+
headers: request.headers
|
|
40
|
+
};
|
|
10
41
|
var SSRData = {
|
|
11
42
|
context: {
|
|
12
|
-
request: {
|
|
43
|
+
request: _objectSpread({
|
|
13
44
|
params: request.params,
|
|
14
45
|
query: request.query,
|
|
15
46
|
pathname: request.pathname,
|
|
16
47
|
host: request.host,
|
|
17
|
-
url: request.url
|
|
18
|
-
|
|
19
|
-
cookieMap: request.cookieMap
|
|
20
|
-
}
|
|
48
|
+
url: request.url
|
|
49
|
+
}, enableUnsafeCtx ? unsafeContext : {})
|
|
21
50
|
},
|
|
22
51
|
renderLevel: renderLevel
|
|
23
52
|
};
|
|
24
|
-
return "\n <script>window._SSR_DATA = ".concat(
|
|
25
|
-
isJSON: true
|
|
26
|
-
}), "</script>\n ");
|
|
53
|
+
return "\n <script>window._SSR_DATA = ".concat(serializeJson(SSRData), "</script>\n ");
|
|
27
54
|
}
|
|
28
55
|
};
|
|
29
56
|
var callbacks = [
|
|
@@ -100,6 +100,7 @@ function getHeadTemplate(beforeEntryTemplate, context) {
|
|
|
100
100
|
var helmetData = ReactHelmet.renderStatic();
|
|
101
101
|
return helmetData ? helmetReplace(headTemplate2, helmetData) : headTemplate2;
|
|
102
102
|
},
|
|
103
|
+
// @TODO: prefetch scripts of lazy component
|
|
103
104
|
injectCss
|
|
104
105
|
];
|
|
105
106
|
var _ref = _slicedToArray(beforeEntryTemplate.match(HEAD_REG_EXP) || [], 1), tmp = _ref[0], headTemplate = tmp === void 0 ? "" : tmp;
|
|
@@ -59,13 +59,16 @@ function _objectSpreadProps(target, source) {
|
|
|
59
59
|
}
|
|
60
60
|
import { Transform } from "stream";
|
|
61
61
|
import { RenderLevel } from "../types";
|
|
62
|
+
import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
|
|
62
63
|
import { getTemplates } from "./template";
|
|
64
|
+
var ShellChunkStatus = /* @__PURE__ */ function(ShellChunkStatus2) {
|
|
65
|
+
ShellChunkStatus2[ShellChunkStatus2["IDLE"] = 0] = "IDLE";
|
|
66
|
+
ShellChunkStatus2[ShellChunkStatus2["START"] = 1] = "START";
|
|
67
|
+
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 2] = "FINIESH";
|
|
68
|
+
return ShellChunkStatus2;
|
|
69
|
+
}(ShellChunkStatus || {});
|
|
63
70
|
function renderToPipe(rootElement, context, options) {
|
|
64
|
-
var
|
|
65
|
-
var before = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", chunk = arguments.length > 1 ? arguments[1] : void 0, after = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "";
|
|
66
|
-
return "".concat(before).concat(chunk.toString()).concat(after);
|
|
67
|
-
};
|
|
68
|
-
var isShellStream = true;
|
|
71
|
+
var shellChunkStatus = 0 /* IDLE */ ;
|
|
69
72
|
var ssrContext = context.ssrContext;
|
|
70
73
|
var forUserPipe = function(stream) {
|
|
71
74
|
return new Promise(function(resolve) {
|
|
@@ -81,9 +84,17 @@ function renderToPipe(rootElement, context, options) {
|
|
|
81
84
|
var injectableTransform = new Transform({
|
|
82
85
|
transform: function transform(chunk, _encoding, callback) {
|
|
83
86
|
try {
|
|
84
|
-
if (
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
if (shellChunkStatus !== 2 /* FINIESH */ ) {
|
|
88
|
+
var concatedChunk = chunk.toString();
|
|
89
|
+
if (shellChunkStatus === 0 /* IDLE */ ) {
|
|
90
|
+
concatedChunk = "".concat(shellBefore).concat(concatedChunk);
|
|
91
|
+
shellChunkStatus = 1 /* START */ ;
|
|
92
|
+
}
|
|
93
|
+
if (shellChunkStatus === 1 /* START */ && concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
94
|
+
concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, shellAfter);
|
|
95
|
+
shellChunkStatus = 2 /* FINIESH */ ;
|
|
96
|
+
}
|
|
97
|
+
this.push(concatedChunk);
|
|
87
98
|
} else {
|
|
88
99
|
this.push(chunk);
|
|
89
100
|
}
|
|
@@ -48,11 +48,12 @@ import { buildShellAfterTemplate } from "./buildTemplate.after";
|
|
|
48
48
|
import { buildShellBeforeTemplate } from "./bulidTemplate.before";
|
|
49
49
|
var HTML_SEPARATOR = "<!--<?- html ?>-->";
|
|
50
50
|
var getTemplates = function(context, renderLevel) {
|
|
51
|
-
var ssrContext = context.ssrContext;
|
|
51
|
+
var ssrContext = context.ssrContext, routerContext = context.routerContext;
|
|
52
52
|
var _ref = _slicedToArray(ssrContext.template.split(HTML_SEPARATOR) || [], 2), tmp = _ref[0], beforeAppTemplate = tmp === void 0 ? "" : tmp, tmp1 = _ref[1], afterAppHtmlTemplate = tmp1 === void 0 ? "" : tmp1;
|
|
53
53
|
var builtBeforeTemplate = buildShellBeforeTemplate(beforeAppTemplate, context);
|
|
54
54
|
var builtAfterTemplate = buildShellAfterTemplate(afterAppHtmlTemplate, {
|
|
55
55
|
ssrContext: ssrContext,
|
|
56
|
+
routerContext: routerContext,
|
|
56
57
|
renderLevel: renderLevel
|
|
57
58
|
});
|
|
58
59
|
return {
|
|
@@ -59,6 +59,21 @@ function _defineProperty(obj, key, value) {
|
|
|
59
59
|
}
|
|
60
60
|
return obj;
|
|
61
61
|
}
|
|
62
|
+
function _objectSpread(target) {
|
|
63
|
+
for(var i = 1; i < arguments.length; i++){
|
|
64
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
65
|
+
var ownKeys = Object.keys(source);
|
|
66
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
67
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
68
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
ownKeys.forEach(function(key) {
|
|
72
|
+
_defineProperty(target, key, source[key]);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return target;
|
|
76
|
+
}
|
|
62
77
|
var __generator = this && this.__generator || function(thisArg, body) {
|
|
63
78
|
var f, y, t, g, _ = {
|
|
64
79
|
label: 0,
|
|
@@ -156,8 +171,9 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
156
171
|
};
|
|
157
172
|
import React from "react";
|
|
158
173
|
import ReactDomServer from "react-dom/server";
|
|
159
|
-
import
|
|
174
|
+
import { serializeJson } from "@modern-js/utils/serialize";
|
|
160
175
|
import ReactHelmet from "react-helmet";
|
|
176
|
+
import { serializeErrors } from "../../../router/runtime/utils";
|
|
161
177
|
import helmetReplace from "../helmet";
|
|
162
178
|
import { RenderLevel } from "../types";
|
|
163
179
|
import { time } from "../time";
|
|
@@ -167,19 +183,20 @@ import { reduce } from "./reduce";
|
|
|
167
183
|
import * as loadableRenderer from "./loadable";
|
|
168
184
|
import * as styledComponentRenderer from "./styledComponent";
|
|
169
185
|
var buildTemplateData = function(context, data, renderLevel) {
|
|
170
|
-
var request = context.request;
|
|
186
|
+
var request = context.request, enableUnsafeCtx = context.enableUnsafeCtx;
|
|
187
|
+
var unsafeContext = {
|
|
188
|
+
headers: request.headers
|
|
189
|
+
};
|
|
171
190
|
return {
|
|
172
191
|
data: data,
|
|
173
192
|
context: {
|
|
174
|
-
request: {
|
|
193
|
+
request: _objectSpread({
|
|
175
194
|
params: request.params,
|
|
176
195
|
query: request.query,
|
|
177
196
|
pathname: request.pathname,
|
|
178
197
|
host: request.host,
|
|
179
|
-
url: request.url
|
|
180
|
-
|
|
181
|
-
cookieMap: request.cookieMap
|
|
182
|
-
}
|
|
198
|
+
url: request.url
|
|
199
|
+
}, enableUnsafeCtx ? unsafeContext : {})
|
|
183
200
|
},
|
|
184
201
|
renderLevel: renderLevel
|
|
185
202
|
};
|
|
@@ -220,7 +237,7 @@ var Entry = /*#__PURE__*/ function() {
|
|
|
220
237
|
value: function renderToHtml(context) {
|
|
221
238
|
var _this = this;
|
|
222
239
|
return _asyncToGenerator(function() {
|
|
223
|
-
var _ssrContext_redirection, _ssrContext_redirection1, _ssrContext_redirection2, ssrContext, prefetchData, html, templateData, SSRData, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, fragment, helmetData;
|
|
240
|
+
var _ssrContext_redirection, _ssrContext_redirection1, _ssrContext_redirection2, ssrContext, prefetchData, routerContext, routerData, html, templateData, SSRData, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, fragment, helmetData;
|
|
224
241
|
return __generator(this, function(_state) {
|
|
225
242
|
switch(_state.label){
|
|
226
243
|
case 0:
|
|
@@ -252,9 +269,14 @@ var Entry = /*#__PURE__*/ function() {
|
|
|
252
269
|
""
|
|
253
270
|
];
|
|
254
271
|
}
|
|
272
|
+
routerContext = context.routerContext;
|
|
273
|
+
routerData = routerContext ? {
|
|
274
|
+
loaderData: routerContext.loaderData,
|
|
275
|
+
errors: serializeErrors(routerContext.errors)
|
|
276
|
+
} : void 0;
|
|
255
277
|
html = "";
|
|
256
278
|
templateData = buildTemplateData(ssrContext, prefetchData, _this.result.renderLevel);
|
|
257
|
-
SSRData = _this.getSSRDataScript(templateData);
|
|
279
|
+
SSRData = _this.getSSRDataScript(templateData, routerData);
|
|
258
280
|
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
259
281
|
try {
|
|
260
282
|
for(_iterator = _this.fragments[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
@@ -379,11 +401,13 @@ var Entry = /*#__PURE__*/ function() {
|
|
|
379
401
|
},
|
|
380
402
|
{
|
|
381
403
|
key: "getSSRDataScript",
|
|
382
|
-
value: function getSSRDataScript(templateData) {
|
|
404
|
+
value: function getSSRDataScript(templateData, routerData) {
|
|
405
|
+
var ssrDataScripts = "<script>window._SSR_DATA = ".concat(serializeJson(templateData), "</script>");
|
|
406
|
+
if (routerData) {
|
|
407
|
+
ssrDataScripts += "\n<script>window._ROUTER_DATA = ".concat(serializeJson(routerData), "</script>");
|
|
408
|
+
}
|
|
383
409
|
return {
|
|
384
|
-
SSRDataScript:
|
|
385
|
-
isJSON: true
|
|
386
|
-
}), "</script>\n ")
|
|
410
|
+
SSRDataScript: ssrDataScripts
|
|
387
411
|
};
|
|
388
412
|
}
|
|
389
413
|
}
|
|
@@ -45,7 +45,7 @@ function _unsupportedIterableToArray(o, minLen) {
|
|
|
45
45
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
46
46
|
}
|
|
47
47
|
function processHrtime(previousTimestamp) {
|
|
48
|
-
var now = new Date().getTime();
|
|
48
|
+
var now = /* @__PURE__ */ new Date().getTime();
|
|
49
49
|
var clocktime = now * 1e-3;
|
|
50
50
|
var seconds = Math.floor(clocktime);
|
|
51
51
|
var nanoseconds = Math.floor(clocktime % 1 * 1e9);
|