@modern-js/runtime 2.6.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 +28 -0
- package/dist/cjs/common.js +6 -0
- package/dist/cjs/core/{app-config.js → appConfig.js} +3 -3
- package/dist/cjs/core/compatible.js +4 -4
- package/dist/cjs/core/index.js +6 -6
- package/dist/cjs/core/loader/useLoader.js +2 -2
- package/dist/cjs/core/types.js +15 -0
- 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 +14 -1
- package/dist/cjs/router/runtime/plugin.node.js +12 -52
- package/dist/cjs/router/runtime/utils.js +68 -69
- package/dist/cjs/{runtime-context.js → runtimeContext.js} +3 -3
- package/dist/cjs/ssr/cli/index.js +2 -0
- package/dist/cjs/ssr/index.node.js +1 -0
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -14
- 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 +19 -8
- package/dist/esm/common.js +3 -1
- package/dist/esm/core/compatible.js +1 -1
- package/dist/esm/core/index.js +2 -2
- package/dist/esm/core/loader/useLoader.js +1 -1
- package/dist/esm/core/types.js +1 -0
- 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/serverRender/renderToStream/buildTemplate.after.js +2 -4
- 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 +15 -7
- package/dist/esm-node/common.js +4 -0
- package/dist/esm-node/core/compatible.js +1 -1
- package/dist/esm-node/core/index.js +2 -2
- package/dist/esm-node/core/loader/useLoader.js +1 -1
- package/dist/esm-node/core/types.js +0 -0
- 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 -2
- package/dist/esm-node/router/runtime/plugin.node.js +12 -55
- package/dist/esm-node/router/runtime/utils.js +59 -69
- package/dist/esm-node/ssr/cli/index.js +2 -0
- package/dist/esm-node/ssr/index.node.js +1 -0
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +2 -4
- 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 +19 -8
- 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/package.json +12 -15
- /package/dist/esm/core/{app-config.js → appConfig.js} +0 -0
- /package/dist/esm/{runtime-context.js → runtimeContext.js} +0 -0
- /package/dist/esm-node/core/{app-config.js → appConfig.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
|
},
|
|
@@ -26,7 +26,7 @@ function _objectSpread(target) {
|
|
|
26
26
|
}
|
|
27
27
|
return target;
|
|
28
28
|
}
|
|
29
|
-
import
|
|
29
|
+
import { serializeJson } from "@modern-js/utils/serialize";
|
|
30
30
|
import { buildTemplate } from "./buildTemplate.share";
|
|
31
31
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
32
32
|
var injectSSRDataScript = function injectSSRDataScript(template) {
|
|
@@ -50,9 +50,7 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
50
50
|
},
|
|
51
51
|
renderLevel: renderLevel
|
|
52
52
|
};
|
|
53
|
-
return "\n <script>window._SSR_DATA = ".concat(
|
|
54
|
-
isJSON: true
|
|
55
|
-
}), "</script>\n ");
|
|
53
|
+
return "\n <script>window._SSR_DATA = ".concat(serializeJson(SSRData), "</script>\n ");
|
|
56
54
|
}
|
|
57
55
|
};
|
|
58
56
|
var callbacks = [
|
|
@@ -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 {
|
|
@@ -171,8 +171,9 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
171
171
|
};
|
|
172
172
|
import React from "react";
|
|
173
173
|
import ReactDomServer from "react-dom/server";
|
|
174
|
-
import
|
|
174
|
+
import { serializeJson } from "@modern-js/utils/serialize";
|
|
175
175
|
import ReactHelmet from "react-helmet";
|
|
176
|
+
import { serializeErrors } from "../../../router/runtime/utils";
|
|
176
177
|
import helmetReplace from "../helmet";
|
|
177
178
|
import { RenderLevel } from "../types";
|
|
178
179
|
import { time } from "../time";
|
|
@@ -236,7 +237,7 @@ var Entry = /*#__PURE__*/ function() {
|
|
|
236
237
|
value: function renderToHtml(context) {
|
|
237
238
|
var _this = this;
|
|
238
239
|
return _asyncToGenerator(function() {
|
|
239
|
-
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;
|
|
240
241
|
return __generator(this, function(_state) {
|
|
241
242
|
switch(_state.label){
|
|
242
243
|
case 0:
|
|
@@ -268,9 +269,14 @@ var Entry = /*#__PURE__*/ function() {
|
|
|
268
269
|
""
|
|
269
270
|
];
|
|
270
271
|
}
|
|
272
|
+
routerContext = context.routerContext;
|
|
273
|
+
routerData = routerContext ? {
|
|
274
|
+
loaderData: routerContext.loaderData,
|
|
275
|
+
errors: serializeErrors(routerContext.errors)
|
|
276
|
+
} : void 0;
|
|
271
277
|
html = "";
|
|
272
278
|
templateData = buildTemplateData(ssrContext, prefetchData, _this.result.renderLevel);
|
|
273
|
-
SSRData = _this.getSSRDataScript(templateData);
|
|
279
|
+
SSRData = _this.getSSRDataScript(templateData, routerData);
|
|
274
280
|
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
275
281
|
try {
|
|
276
282
|
for(_iterator = _this.fragments[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
@@ -395,11 +401,13 @@ var Entry = /*#__PURE__*/ function() {
|
|
|
395
401
|
},
|
|
396
402
|
{
|
|
397
403
|
key: "getSSRDataScript",
|
|
398
|
-
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
|
+
}
|
|
399
409
|
return {
|
|
400
|
-
SSRDataScript:
|
|
401
|
-
isJSON: true
|
|
402
|
-
}), "</script>\n ")
|
|
410
|
+
SSRDataScript: ssrDataScripts
|
|
403
411
|
};
|
|
404
412
|
}
|
|
405
413
|
}
|
package/dist/esm-node/common.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
const isBrowser = () => typeof window !== "undefined" && window.name !== "nodejs";
|
|
2
|
+
const JSX_SHELL_STREAM_END_MARK = "<!--<?- SHELL_STREAM_END ?>-->";
|
|
3
|
+
const ESCAPED_SHELL_STREAM_END_MARK = "<!--<?- SHELL_STREAM_END ?>-->";
|
|
2
4
|
export {
|
|
5
|
+
ESCAPED_SHELL_STREAM_END_MARK,
|
|
6
|
+
JSX_SHELL_STREAM_END_MARK,
|
|
3
7
|
isBrowser
|
|
4
8
|
};
|
|
@@ -4,7 +4,7 @@ import hoistNonReactStatics from "hoist-non-react-statics";
|
|
|
4
4
|
import { ROUTE_MANIFEST } from "@modern-js/utils/constants";
|
|
5
5
|
import {
|
|
6
6
|
RuntimeReactContext
|
|
7
|
-
} from "../
|
|
7
|
+
} from "../runtimeContext";
|
|
8
8
|
import { runtime } from "./plugin";
|
|
9
9
|
import { createLoaderManager } from "./loader/loaderManager";
|
|
10
10
|
const IS_REACT18 = process.env.IS_REACT18 === "true";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createPlugin, createRuntime, runtime, registerInit } from "./plugin";
|
|
2
|
-
import { defineConfig, getConfig } from "./
|
|
2
|
+
import { defineConfig, getConfig } from "./appConfig";
|
|
3
3
|
export * from "./compatible";
|
|
4
|
-
import { RuntimeReactContext, ServerRouterContext } from "../
|
|
4
|
+
import { RuntimeReactContext, ServerRouterContext } from "../runtimeContext";
|
|
5
5
|
export * from "./loader";
|
|
6
6
|
export * from "@modern-js/plugin";
|
|
7
7
|
export {
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
useEffect
|
|
8
8
|
} from "react";
|
|
9
9
|
import invariant from "invariant";
|
|
10
|
-
import { RuntimeReactContext } from "../../
|
|
10
|
+
import { RuntimeReactContext } from "../../runtimeContext";
|
|
11
11
|
import { LoaderStatus } from "./loaderManager";
|
|
12
12
|
const useLoader = (loaderFn, options = { params: void 0 }) => {
|
|
13
13
|
const context = useContext(RuntimeReactContext);
|
|
File without changes
|