@modern-js/runtime 2.6.0 → 2.8.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 +53 -0
- package/README.md +2 -2
- package/dist/cjs/cli/index.js +4 -3
- 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 +3 -2
- 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/bulidTemplate.before.js +5 -1
- 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/cjs/state/runtime/index.js +2 -8
- package/dist/esm/cli/index.js +4 -3
- 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 +4 -3
- 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/bulidTemplate.before.js +1 -1
- 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/state/runtime/index.js +1 -2
- package/dist/esm-node/cli/index.js +4 -3
- 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 +4 -3
- 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/bulidTemplate.before.js +5 -1
- 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/esm-node/state/runtime/index.js +1 -4
- 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/state/runtime/index.d.ts +0 -1
- package/package.json +15 -18
- package/types/router.d.ts +1 -1
- /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
|
@@ -0,0 +1,166 @@
|
|
|
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
|
+
}
|
|
9
|
+
function _iterableToArrayLimit(arr, i) {
|
|
10
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
11
|
+
if (_i == null) return;
|
|
12
|
+
var _arr = [];
|
|
13
|
+
var _n = true;
|
|
14
|
+
var _d = false;
|
|
15
|
+
var _s, _e;
|
|
16
|
+
try {
|
|
17
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
18
|
+
_arr.push(_s.value);
|
|
19
|
+
if (i && _arr.length === i) break;
|
|
20
|
+
}
|
|
21
|
+
} catch (err) {
|
|
22
|
+
_d = true;
|
|
23
|
+
_e = err;
|
|
24
|
+
} finally{
|
|
25
|
+
try {
|
|
26
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
27
|
+
} finally{
|
|
28
|
+
if (_d) throw _e;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return _arr;
|
|
32
|
+
}
|
|
33
|
+
function _nonIterableRest() {
|
|
34
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
35
|
+
}
|
|
36
|
+
function _slicedToArray(arr, i) {
|
|
37
|
+
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
38
|
+
}
|
|
39
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
40
|
+
if (!o) return;
|
|
41
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
42
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
43
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
44
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
45
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
46
|
+
}
|
|
47
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
48
|
+
import { Suspense, useEffect, useRef, useMemo, useContext } from "react";
|
|
49
|
+
import { Await, UNSAFE_DataRouterContext as DataRouterContext, useAsyncError } from "react-router-dom";
|
|
50
|
+
import { serializeJson } from "@modern-js/utils/serialize";
|
|
51
|
+
import { JSX_SHELL_STREAM_END_MARK } from "../../common";
|
|
52
|
+
import { serializeErrors } from "./utils";
|
|
53
|
+
var setupFnStr = "function s(r,e){_ROUTER_DATA.r=_ROUTER_DATA.r||{},_ROUTER_DATA.r[r]=_ROUTER_DATA.r[r]||{};return new Promise((function(A,R){_ROUTER_DATA.r[r][e]={resolve:A,reject:R}}))};";
|
|
54
|
+
var resolveFnStr = "function r(e,r,o,A){A?_ROUTER_DATA.r[e][r].reject(A):_ROUTER_DATA.r[e][r].resolve(o)};";
|
|
55
|
+
var preResolvedFnStr = "function p(e,r){return void 0!==r?Promise.reject(new Error(r.message)):Promise.resovle(e)};";
|
|
56
|
+
var DeferredDataScripts = function() {
|
|
57
|
+
var context = useContext(DataRouterContext);
|
|
58
|
+
var staticContext = (context || {}).staticContext;
|
|
59
|
+
var hydratedRef = useRef(false);
|
|
60
|
+
useEffect(function() {
|
|
61
|
+
hydratedRef.current = true;
|
|
62
|
+
}, []);
|
|
63
|
+
var deferredScripts = useMemo(function() {
|
|
64
|
+
if (!staticContext) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
var activeDeferreds = staticContext.activeDeferreds || [];
|
|
68
|
+
var _ROUTER_DATA = {
|
|
69
|
+
loaderData: staticContext.loaderData,
|
|
70
|
+
errors: serializeErrors(staticContext.errors)
|
|
71
|
+
};
|
|
72
|
+
var initialScripts = [
|
|
73
|
+
"_ROUTER_DATA = ".concat(serializeJson(_ROUTER_DATA), ";"),
|
|
74
|
+
"_ROUTER_DATA.s = ".concat(setupFnStr),
|
|
75
|
+
"_ROUTER_DATA.r = ".concat(resolveFnStr),
|
|
76
|
+
"_ROUTER_DATA.p = ".concat(preResolvedFnStr)
|
|
77
|
+
].join("\n");
|
|
78
|
+
var deferredDataScripts = [];
|
|
79
|
+
initialScripts += Object.entries(activeDeferreds).map(function(param) {
|
|
80
|
+
var _param = _slicedToArray(param, 2), routeId = _param[0], deferredData = _param[1];
|
|
81
|
+
var pendingKeys = new Set(deferredData.pendingKeys);
|
|
82
|
+
var deferredKeys = deferredData.deferredKeys;
|
|
83
|
+
var deferredKeyPromiseStr = deferredKeys.map(function(key) {
|
|
84
|
+
if (pendingKeys.has(key)) {
|
|
85
|
+
deferredDataScripts.push(/* @__PURE__ */ jsx(DeferredDataScript, {
|
|
86
|
+
data: deferredData.data[key],
|
|
87
|
+
dataKey: key,
|
|
88
|
+
routeId: routeId
|
|
89
|
+
}, "".concat(routeId, " | ").concat(key)));
|
|
90
|
+
return "".concat(JSON.stringify(key), ": _ROUTER_DATA.s(").concat(JSON.stringify(routeId), ",").concat(JSON.stringify(key), ") ");
|
|
91
|
+
} else {
|
|
92
|
+
var trackedPromise = deferredData.data[key];
|
|
93
|
+
if (typeof trackedPromise._error !== "undefined") {
|
|
94
|
+
var error = {
|
|
95
|
+
message: trackedPromise._error.message,
|
|
96
|
+
stack: process.env.NODE_ENV !== "production" ? trackedPromise._error.stack : void 0
|
|
97
|
+
};
|
|
98
|
+
return "".concat(JSON.stringify(key), ": _ROUTER_DATA.p(").concat(void 0, ", ").concat(serializeJson(error), ")");
|
|
99
|
+
} else {
|
|
100
|
+
if (typeof trackedPromise._data === "undefined") {
|
|
101
|
+
throw new Error("The deferred data for ".concat(key, " was not resolved, did you forget to return data from a deferred promise"));
|
|
102
|
+
}
|
|
103
|
+
return "".concat(JSON.stringify(key), ": _ROUTER_DATA.p(").concat(serializeJson(trackedPromise._data), ")");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}).join(",\n");
|
|
107
|
+
return "Object.assign(_ROUTER_DATA.loaderData[".concat(JSON.stringify(routeId), "], {").concat(deferredKeyPromiseStr, "});");
|
|
108
|
+
}).join("\n");
|
|
109
|
+
return [
|
|
110
|
+
initialScripts,
|
|
111
|
+
deferredDataScripts
|
|
112
|
+
];
|
|
113
|
+
}, []);
|
|
114
|
+
if (!deferredScripts) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return /* @__PURE__ */ jsxs(Fragment, {
|
|
118
|
+
children: [
|
|
119
|
+
!hydratedRef.current && /* @__PURE__ */ jsx("script", {
|
|
120
|
+
async: true,
|
|
121
|
+
suppressHydrationWarning: true,
|
|
122
|
+
dangerouslySetInnerHTML: {
|
|
123
|
+
__html: deferredScripts[0]
|
|
124
|
+
}
|
|
125
|
+
}),
|
|
126
|
+
!hydratedRef.current && deferredScripts[1],
|
|
127
|
+
JSX_SHELL_STREAM_END_MARK
|
|
128
|
+
]
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
var DeferredDataScript = function(param) {
|
|
132
|
+
var data = param.data, routeId = param.routeId, dataKey = param.dataKey;
|
|
133
|
+
return /* @__PURE__ */ jsx(Suspense, {
|
|
134
|
+
children: typeof document === "undefined" && data && dataKey && routeId ? /* @__PURE__ */ jsx(Await, {
|
|
135
|
+
resolve: data,
|
|
136
|
+
errorElement: /* @__PURE__ */ jsx(ErrorDeferredDataScript, {
|
|
137
|
+
routeId: routeId,
|
|
138
|
+
dataKey: dataKey
|
|
139
|
+
}),
|
|
140
|
+
children: function(data2) {
|
|
141
|
+
return /* @__PURE__ */ jsx("script", {
|
|
142
|
+
async: true,
|
|
143
|
+
suppressHydrationWarning: true,
|
|
144
|
+
dangerouslySetInnerHTML: {
|
|
145
|
+
__html: "_ROUTER_DATA.r(".concat(JSON.stringify(routeId), ", ").concat(JSON.stringify(dataKey), ", ").concat(serializeJson(data2), ");")
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}) : null
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
var ErrorDeferredDataScript = function(param) {
|
|
153
|
+
var routeId = param.routeId, dataKey = param.dataKey;
|
|
154
|
+
var error = useAsyncError();
|
|
155
|
+
return /* @__PURE__ */ jsx("script", {
|
|
156
|
+
suppressHydrationWarning: true,
|
|
157
|
+
dangerouslySetInnerHTML: {
|
|
158
|
+
__html: "_ROUTER_DATA.r(".concat(JSON.stringify(routeId), ", ").concat(JSON.stringify(dataKey), ", ").concat(void 0, ", ").concat(serializeJson({
|
|
159
|
+
message: error.message,
|
|
160
|
+
stack: error.stack
|
|
161
|
+
}), ");")
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
var DeferredDataScripts_default = DeferredDataScripts;
|
|
166
|
+
export { DeferredDataScripts_default as default };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { routerPlugin } from "./plugin";
|
|
2
2
|
var runtime_default = routerPlugin;
|
|
3
3
|
import { modifyRoutes } from "./plugin";
|
|
4
|
-
export * from "react-router-dom";
|
|
5
4
|
export * from "./withRouter";
|
|
6
|
-
|
|
5
|
+
import { createBrowserRouter, createHashRouter, createMemoryRouter, RouterProvider, BrowserRouter, HashRouter, MemoryRouter, Router, Await, Form, Link, NavLink, Navigate, Outlet, Route, Routes, ScrollRestoration, useActionData, useAsyncError, useAsyncValue, useBeforeUnload, useFetcher, useFetchers, useFormAction, useHref, useInRouterContext, useLinkClickHandler, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, useSearchParams, useSubmit, createRoutesFromChildren, createRoutesFromElements, createSearchParams, generatePath, isRouteErrorResponse, matchPath, matchRoutes, renderMatches, resolvePath } from "react-router-dom";
|
|
6
|
+
import { defer, json, redirect } from "@modern-js/utils/remix-router";
|
|
7
|
+
export { Await, BrowserRouter, Form, HashRouter, Link, MemoryRouter, NavLink, Navigate, Outlet, Route, Router, RouterProvider, Routes, ScrollRestoration, createBrowserRouter, createHashRouter, createMemoryRouter, createRoutesFromChildren, createRoutesFromElements, createSearchParams, runtime_default as default, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, modifyRoutes, redirect, renderMatches, resolvePath, useActionData, useAsyncError, useAsyncValue, useBeforeUnload, useFetcher, useFetchers, useFormAction, useHref, useInRouterContext, useLinkClickHandler, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, useSearchParams, useSubmit };
|
|
@@ -53,7 +53,7 @@ function _objectSpreadProps(target, source) {
|
|
|
53
53
|
import { jsx } from "react/jsx-runtime";
|
|
54
54
|
import { createBrowserRouter, createHashRouter, RouterProvider, createRoutesFromElements, useMatches, useLocation } from "react-router-dom";
|
|
55
55
|
import hoistNonReactStatics from "hoist-non-react-statics";
|
|
56
|
-
import { renderRoutes, urlJoin } from "./utils";
|
|
56
|
+
import { deserializeErrors, renderRoutes, urlJoin } from "./utils";
|
|
57
57
|
var finalRouteConfig = {
|
|
58
58
|
routes: []
|
|
59
59
|
};
|
|
@@ -103,10 +103,18 @@ var routerPlugin = function(param) {
|
|
|
103
103
|
var routes = createRoutes ? createRoutes() : createRoutesFromElements(renderRoutes(finalRouteConfig));
|
|
104
104
|
var baseUrl = ((_window__SERVER_DATA = window._SERVER_DATA) === null || _window__SERVER_DATA === void 0 ? void 0 : _window__SERVER_DATA.router.baseUrl) || select(location.pathname);
|
|
105
105
|
var _basename = baseUrl === "/" ? urlJoin(baseUrl, basename) : baseUrl;
|
|
106
|
+
var hydrationData = window._ROUTER_DATA;
|
|
107
|
+
if (hydrationData === null || hydrationData === void 0 ? void 0 : hydrationData.errors) {
|
|
108
|
+
hydrationData = _objectSpreadProps(_objectSpread({}, hydrationData), {
|
|
109
|
+
errors: deserializeErrors(hydrationData.errors)
|
|
110
|
+
});
|
|
111
|
+
}
|
|
106
112
|
var router = supportHtml5History ? createBrowserRouter(routes, {
|
|
107
|
-
basename: _basename
|
|
113
|
+
basename: _basename,
|
|
114
|
+
hydrationData: hydrationData
|
|
108
115
|
}) : createHashRouter(routes, {
|
|
109
|
-
basename: _basename
|
|
116
|
+
basename: _basename,
|
|
117
|
+
hydrationData: hydrationData
|
|
110
118
|
});
|
|
111
119
|
return /* @__PURE__ */ jsx(App, _objectSpreadProps(_objectSpread({}, props), {
|
|
112
120
|
children: /* @__PURE__ */ jsx(RouterProvider, {
|
|
@@ -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 };
|
|
@@ -61,7 +61,7 @@ function _unsupportedIterableToArray(o, minLen) {
|
|
|
61
61
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
62
62
|
}
|
|
63
63
|
import path from "path";
|
|
64
|
-
import { getEntryOptions, SERVER_RENDER_FUNCTION_NAME, LOADABLE_STATS_FILE, isUseSSRBundle, createRuntimeExportsUtils,
|
|
64
|
+
import { getEntryOptions, SERVER_RENDER_FUNCTION_NAME, LOADABLE_STATS_FILE, isUseSSRBundle, createRuntimeExportsUtils, isSSGEntry } from "@modern-js/utils";
|
|
65
65
|
var PLUGIN_IDENTIFIER = "ssr";
|
|
66
66
|
var hasStringSSREntry = function(userConfig) {
|
|
67
67
|
var isStreaming = function(ssr) {
|
|
@@ -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
|
},
|
|
@@ -163,8 +165,7 @@ var cli_default = function() {
|
|
|
163
165
|
throw new Error("You should switch to file-system based router to support streaming SSR.");
|
|
164
166
|
}
|
|
165
167
|
}
|
|
166
|
-
var
|
|
167
|
-
var useSSG = isSingleEntry(entrypoints) ? Boolean(ssgConfig) : ssgConfig === true || typeof (ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[0]) === "function" || Boolean(ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[entryName]);
|
|
168
|
+
var useSSG = isSSGEntry(userConfig, entryName, entrypoints);
|
|
168
169
|
ssrConfigMap.set(entryName, ssrConfig || useSSG);
|
|
169
170
|
if (ssrConfig || useSSG) {
|
|
170
171
|
imports.push({
|
|
@@ -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 = [
|
|
@@ -71,7 +71,7 @@ function getHeadTemplate(beforeEntryTemplate, context) {
|
|
|
71
71
|
}
|
|
72
72
|
var routeAssets = routeManifest.routeAssets;
|
|
73
73
|
var cssChunks = [];
|
|
74
|
-
var matches = matchRoutes(routes, routerContext.location);
|
|
74
|
+
var matches = matchRoutes(routes, routerContext.location, routerContext.basename);
|
|
75
75
|
matches === null || matches === void 0 ? void 0 : matches.forEach(function(match, index) {
|
|
76
76
|
if (!index) {
|
|
77
77
|
return;
|