@modern-js/runtime 2.8.0 → 2.10.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 +39 -0
- package/dist/cjs/router/runtime/DeferredDataScripts.js +2 -140
- package/dist/cjs/router/runtime/DeferredDataScripts.node.js +165 -0
- package/dist/cjs/ssr/serverRender/index.js +8 -0
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +8 -1
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +2 -2
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +25 -9
- package/dist/cjs/ssr/serverRender/renderToStream/template.js +2 -3
- package/dist/cjs/ssr/serverRender/utils.js +3 -0
- package/dist/esm/router/runtime/DeferredDataScripts.js +2 -164
- package/dist/esm/router/runtime/DeferredDataScripts.node.js +166 -0
- package/dist/esm/ssr/serverRender/index.js +6 -1
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -1
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -1
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +24 -11
- package/dist/esm/ssr/serverRender/renderToStream/template.js +2 -3
- package/dist/esm/ssr/serverRender/utils.js +2 -1
- package/dist/esm-node/router/runtime/DeferredDataScripts.js +2 -144
- package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +148 -0
- package/dist/esm-node/ssr/serverRender/index.js +8 -0
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +8 -1
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -1
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +25 -9
- package/dist/esm-node/ssr/serverRender/renderToStream/template.js +2 -3
- package/dist/esm-node/ssr/serverRender/utils.js +2 -0
- package/dist/types/router/runtime/DeferredDataScripts.d.ts +2 -7
- package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +8 -0
- package/dist/types/router/runtime/index.d.ts +1 -1
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +2 -4
- package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +1 -1
- package/dist/types/ssr/serverRender/utils.d.ts +1 -0
- package/package.json +12 -12
|
@@ -1,166 +1,4 @@
|
|
|
1
|
-
function
|
|
2
|
-
|
|
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
|
-
});
|
|
1
|
+
var DeferredDataScripts_default = function() {
|
|
2
|
+
return null;
|
|
130
3
|
};
|
|
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
4
|
export { DeferredDataScripts_default as default };
|
|
@@ -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.resolve(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_node_default = DeferredDataScripts;
|
|
166
|
+
export { DeferredDataScripts_node_default as default };
|
|
@@ -123,15 +123,20 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
123
123
|
}
|
|
124
124
|
};
|
|
125
125
|
import { isReact18 } from "../utils";
|
|
126
|
+
import { CSS_CHUNKS_PLACEHOLDER } from "./utils";
|
|
126
127
|
function serverRender(options) {
|
|
127
128
|
return _serverRender.apply(this, arguments);
|
|
128
129
|
}
|
|
129
130
|
function _serverRender() {
|
|
130
131
|
_serverRender = _asyncToGenerator(function(options) {
|
|
131
|
-
var pipe, html;
|
|
132
|
+
var _options_context_ssrContext, _options_context_ssrContext1, pipe, html;
|
|
132
133
|
return __generator(this, function(_state) {
|
|
133
134
|
switch(_state.label){
|
|
134
135
|
case 0:
|
|
136
|
+
if ((_options_context_ssrContext = options.context.ssrContext) === null || _options_context_ssrContext === void 0 ? void 0 : _options_context_ssrContext.template) {
|
|
137
|
+
;
|
|
138
|
+
options.context.ssrContext.template = (_options_context_ssrContext1 = options.context.ssrContext) === null || _options_context_ssrContext1 === void 0 ? void 0 : _options_context_ssrContext1.template.replace("</head>", "".concat(CSS_CHUNKS_PLACEHOLDER, "</head>"));
|
|
139
|
+
}
|
|
135
140
|
if (!(isReact18() && options.config.mode === "stream")) return [
|
|
136
141
|
3,
|
|
137
142
|
2
|
|
@@ -33,12 +33,16 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
33
33
|
var ssrDataScript = buildSSRDataScript();
|
|
34
34
|
return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
|
|
35
35
|
function buildSSRDataScript() {
|
|
36
|
-
var
|
|
36
|
+
var _options_context = options.context, ssrContext = _options_context.ssrContext, initialData = _options_context.initialData, __i18nData__ = _options_context.__i18nData__, renderLevel = options.renderLevel;
|
|
37
37
|
var request = ssrContext.request, enableUnsafeCtx = ssrContext.enableUnsafeCtx;
|
|
38
38
|
var unsafeContext = {
|
|
39
39
|
headers: request.headers
|
|
40
40
|
};
|
|
41
41
|
var SSRData = {
|
|
42
|
+
data: {
|
|
43
|
+
initialData: initialData,
|
|
44
|
+
i18nData: __i18nData__
|
|
45
|
+
},
|
|
42
46
|
context: {
|
|
43
47
|
request: _objectSpread({
|
|
44
48
|
params: request.params,
|
|
@@ -59,8 +59,8 @@ function _unsupportedIterableToArray(o, minLen) {
|
|
|
59
59
|
import ReactHelmet from "react-helmet";
|
|
60
60
|
import { matchRoutes } from "react-router-dom";
|
|
61
61
|
import helmetReplace from "../helmet";
|
|
62
|
+
import { CSS_CHUNKS_PLACEHOLDER } from "../utils";
|
|
62
63
|
import { HEAD_REG_EXP, buildTemplate } from "./buildTemplate.share";
|
|
63
|
-
var CSS_CHUNKS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
|
|
64
64
|
function getHeadTemplate(beforeEntryTemplate, context) {
|
|
65
65
|
var injectCss = function injectCss(headTemplate2) {
|
|
66
66
|
return headTemplate2.replace(CSS_CHUNKS_PLACEHOLDER, getCssChunks());
|
|
@@ -175,12 +175,19 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
175
175
|
}
|
|
176
176
|
};
|
|
177
177
|
import { RenderLevel } from "../types";
|
|
178
|
+
import { ESCAPED_SHELL_STREAM_END_MARK } from "../../../common";
|
|
178
179
|
import { getTemplates } from "./template";
|
|
180
|
+
var ShellChunkStatus = /* @__PURE__ */ function(ShellChunkStatus2) {
|
|
181
|
+
ShellChunkStatus2[ShellChunkStatus2["IDLE"] = 0] = "IDLE";
|
|
182
|
+
ShellChunkStatus2[ShellChunkStatus2["START"] = 1] = "START";
|
|
183
|
+
ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 2] = "FINIESH";
|
|
184
|
+
return ShellChunkStatus2;
|
|
185
|
+
}(ShellChunkStatus || {});
|
|
179
186
|
function renderToPipe(rootElement, context, options) {
|
|
180
|
-
var
|
|
187
|
+
var shellChunkStatus = 0 /* IDLE */ ;
|
|
181
188
|
var ssrContext = context.ssrContext;
|
|
182
189
|
var forUserPipe = function() {
|
|
183
|
-
var _ref = _asyncToGenerator(function(
|
|
190
|
+
var _ref = _asyncToGenerator(function() {
|
|
184
191
|
var renderToReadableStream, _getTemplates, shellAfter, shellBefore, readableOriginal, reader, injectableStream, err, _getTemplates1, shellAfter2, shellBefore2, fallbackHtml;
|
|
185
192
|
return __generator(this, function(_state) {
|
|
186
193
|
switch(_state.label){
|
|
@@ -218,7 +225,7 @@ function renderToPipe(rootElement, context, options) {
|
|
|
218
225
|
}
|
|
219
226
|
function _push() {
|
|
220
227
|
_push = _asyncToGenerator(function() {
|
|
221
|
-
var _ref, done, value;
|
|
228
|
+
var _ref, done, value, concatedChunk;
|
|
222
229
|
return __generator(this, function(_state) {
|
|
223
230
|
switch(_state.label){
|
|
224
231
|
case 0:
|
|
@@ -234,11 +241,17 @@ function renderToPipe(rootElement, context, options) {
|
|
|
234
241
|
2
|
|
235
242
|
];
|
|
236
243
|
}
|
|
237
|
-
if (
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
244
|
+
if (shellChunkStatus !== 2 /* FINIESH */ ) {
|
|
245
|
+
concatedChunk = new TextDecoder().decode(value);
|
|
246
|
+
if (shellChunkStatus === 0 /* IDLE */ ) {
|
|
247
|
+
concatedChunk = "".concat(shellBefore).concat(concatedChunk);
|
|
248
|
+
shellChunkStatus = 1 /* START */ ;
|
|
249
|
+
}
|
|
250
|
+
if (shellChunkStatus === 1 /* START */ && concatedChunk.endsWith(ESCAPED_SHELL_STREAM_END_MARK)) {
|
|
251
|
+
concatedChunk = concatedChunk.replace(ESCAPED_SHELL_STREAM_END_MARK, shellAfter);
|
|
252
|
+
shellChunkStatus = 2 /* FINIESH */ ;
|
|
253
|
+
}
|
|
254
|
+
controller.enqueue(encodeForWebStream(concatedChunk));
|
|
242
255
|
} else {
|
|
243
256
|
controller.enqueue(value);
|
|
244
257
|
}
|
|
@@ -256,7 +269,7 @@ function renderToPipe(rootElement, context, options) {
|
|
|
256
269
|
});
|
|
257
270
|
return [
|
|
258
271
|
2,
|
|
259
|
-
|
|
272
|
+
injectableStream
|
|
260
273
|
];
|
|
261
274
|
case 3:
|
|
262
275
|
err = _state.sent();
|
|
@@ -274,11 +287,11 @@ function renderToPipe(rootElement, context, options) {
|
|
|
274
287
|
}
|
|
275
288
|
});
|
|
276
289
|
});
|
|
277
|
-
return function forUserPipe(
|
|
290
|
+
return function forUserPipe() {
|
|
278
291
|
return _ref.apply(this, arguments);
|
|
279
292
|
};
|
|
280
293
|
}();
|
|
281
|
-
return forUserPipe;
|
|
294
|
+
return forUserPipe();
|
|
282
295
|
}
|
|
283
296
|
var encoder;
|
|
284
297
|
function encodeForWebStream(thing) {
|
|
@@ -48,12 +48,11 @@ 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;
|
|
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
|
-
|
|
56
|
-
routerContext: routerContext,
|
|
55
|
+
context: context,
|
|
57
56
|
renderLevel: renderLevel
|
|
58
57
|
});
|
|
59
58
|
return {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var CSS_CHUNKS_PLACEHOLDER = "<!--<?- chunksMap.css ?>-->";
|
|
1
2
|
function getLoadableScripts(extractor) {
|
|
2
3
|
var check = function(scripts2) {
|
|
3
4
|
return (scripts2 || "").includes("__LOADABLE_REQUIRED_CHUNKS___ext");
|
|
@@ -10,4 +11,4 @@ function getLoadableScripts(extractor) {
|
|
|
10
11
|
return "".concat(i, "</script>");
|
|
11
12
|
}).join("");
|
|
12
13
|
}
|
|
13
|
-
export { getLoadableScripts };
|
|
14
|
+
export { CSS_CHUNKS_PLACEHOLDER, getLoadableScripts };
|
|
@@ -1,148 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
Await,
|
|
5
|
-
UNSAFE_DataRouterContext as DataRouterContext,
|
|
6
|
-
useAsyncError
|
|
7
|
-
} from "react-router-dom";
|
|
8
|
-
import { serializeJson } from "@modern-js/utils/serialize";
|
|
9
|
-
import { JSX_SHELL_STREAM_END_MARK } from "../../common";
|
|
10
|
-
import { serializeErrors } from "./utils";
|
|
11
|
-
const 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}}))};`;
|
|
12
|
-
const resolveFnStr = `function r(e,r,o,A){A?_ROUTER_DATA.r[e][r].reject(A):_ROUTER_DATA.r[e][r].resolve(o)};`;
|
|
13
|
-
const preResolvedFnStr = `function p(e,r){return void 0!==r?Promise.reject(new Error(r.message)):Promise.resovle(e)};`;
|
|
14
|
-
const DeferredDataScripts = () => {
|
|
15
|
-
const context = useContext(DataRouterContext);
|
|
16
|
-
const { staticContext } = context || {};
|
|
17
|
-
const hydratedRef = useRef(false);
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
hydratedRef.current = true;
|
|
20
|
-
}, []);
|
|
21
|
-
const deferredScripts = useMemo(() => {
|
|
22
|
-
if (!staticContext) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
const activeDeferreds = staticContext.activeDeferreds || [];
|
|
26
|
-
const _ROUTER_DATA = {
|
|
27
|
-
loaderData: staticContext.loaderData,
|
|
28
|
-
errors: serializeErrors(staticContext.errors)
|
|
29
|
-
};
|
|
30
|
-
let initialScripts = [
|
|
31
|
-
`_ROUTER_DATA = ${serializeJson(_ROUTER_DATA)};`,
|
|
32
|
-
`_ROUTER_DATA.s = ${setupFnStr}`,
|
|
33
|
-
`_ROUTER_DATA.r = ${resolveFnStr}`,
|
|
34
|
-
`_ROUTER_DATA.p = ${preResolvedFnStr}`
|
|
35
|
-
].join("\n");
|
|
36
|
-
const deferredDataScripts = [];
|
|
37
|
-
initialScripts += Object.entries(activeDeferreds).map(([routeId, deferredData]) => {
|
|
38
|
-
const pendingKeys = new Set(deferredData.pendingKeys);
|
|
39
|
-
const { deferredKeys } = deferredData;
|
|
40
|
-
const deferredKeyPromiseStr = deferredKeys.map((key) => {
|
|
41
|
-
if (pendingKeys.has(key)) {
|
|
42
|
-
deferredDataScripts.push(
|
|
43
|
-
/* @__PURE__ */ jsx(
|
|
44
|
-
DeferredDataScript,
|
|
45
|
-
{
|
|
46
|
-
data: deferredData.data[key],
|
|
47
|
-
dataKey: key,
|
|
48
|
-
routeId
|
|
49
|
-
},
|
|
50
|
-
`${routeId} | ${key}`
|
|
51
|
-
)
|
|
52
|
-
);
|
|
53
|
-
return `${JSON.stringify(key)}: _ROUTER_DATA.s(${JSON.stringify(
|
|
54
|
-
routeId
|
|
55
|
-
)},${JSON.stringify(key)}) `;
|
|
56
|
-
} else {
|
|
57
|
-
const trackedPromise = deferredData.data[key];
|
|
58
|
-
if (typeof trackedPromise._error !== "undefined") {
|
|
59
|
-
const error = {
|
|
60
|
-
message: trackedPromise._error.message,
|
|
61
|
-
stack: process.env.NODE_ENV !== "production" ? trackedPromise._error.stack : void 0
|
|
62
|
-
};
|
|
63
|
-
return `${JSON.stringify(
|
|
64
|
-
key
|
|
65
|
-
)}: _ROUTER_DATA.p(${void 0}, ${serializeJson(error)})`;
|
|
66
|
-
} else {
|
|
67
|
-
if (typeof trackedPromise._data === "undefined") {
|
|
68
|
-
throw new Error(
|
|
69
|
-
`The deferred data for ${key} was not resolved, did you forget to return data from a deferred promise`
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
return `${JSON.stringify(key)}: _ROUTER_DATA.p(${serializeJson(
|
|
73
|
-
trackedPromise._data
|
|
74
|
-
)})`;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}).join(",\n");
|
|
78
|
-
return `Object.assign(_ROUTER_DATA.loaderData[${JSON.stringify(
|
|
79
|
-
routeId
|
|
80
|
-
)}], {${deferredKeyPromiseStr}});`;
|
|
81
|
-
}).join("\n");
|
|
82
|
-
return [initialScripts, deferredDataScripts];
|
|
83
|
-
}, []);
|
|
84
|
-
if (!deferredScripts) {
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
88
|
-
!hydratedRef.current && /* @__PURE__ */ jsx(
|
|
89
|
-
"script",
|
|
90
|
-
{
|
|
91
|
-
async: true,
|
|
92
|
-
suppressHydrationWarning: true,
|
|
93
|
-
dangerouslySetInnerHTML: { __html: deferredScripts[0] }
|
|
94
|
-
}
|
|
95
|
-
),
|
|
96
|
-
!hydratedRef.current && deferredScripts[1],
|
|
97
|
-
JSX_SHELL_STREAM_END_MARK
|
|
98
|
-
] });
|
|
1
|
+
var DeferredDataScripts_default = () => {
|
|
2
|
+
return null;
|
|
99
3
|
};
|
|
100
|
-
const DeferredDataScript = ({
|
|
101
|
-
data,
|
|
102
|
-
routeId,
|
|
103
|
-
dataKey
|
|
104
|
-
}) => {
|
|
105
|
-
return /* @__PURE__ */ jsx(Suspense, { children: typeof document === "undefined" && data && dataKey && routeId ? /* @__PURE__ */ jsx(
|
|
106
|
-
Await,
|
|
107
|
-
{
|
|
108
|
-
resolve: data,
|
|
109
|
-
errorElement: /* @__PURE__ */ jsx(ErrorDeferredDataScript, { routeId, dataKey }),
|
|
110
|
-
children: (data2) => /* @__PURE__ */ jsx(
|
|
111
|
-
"script",
|
|
112
|
-
{
|
|
113
|
-
async: true,
|
|
114
|
-
suppressHydrationWarning: true,
|
|
115
|
-
dangerouslySetInnerHTML: {
|
|
116
|
-
__html: `_ROUTER_DATA.r(${JSON.stringify(
|
|
117
|
-
routeId
|
|
118
|
-
)}, ${JSON.stringify(dataKey)}, ${serializeJson(data2)});`
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
)
|
|
122
|
-
}
|
|
123
|
-
) : null });
|
|
124
|
-
};
|
|
125
|
-
const ErrorDeferredDataScript = ({
|
|
126
|
-
routeId,
|
|
127
|
-
dataKey
|
|
128
|
-
}) => {
|
|
129
|
-
const error = useAsyncError();
|
|
130
|
-
return /* @__PURE__ */ jsx(
|
|
131
|
-
"script",
|
|
132
|
-
{
|
|
133
|
-
suppressHydrationWarning: true,
|
|
134
|
-
dangerouslySetInnerHTML: {
|
|
135
|
-
__html: `_ROUTER_DATA.r(${JSON.stringify(routeId)}, ${JSON.stringify(
|
|
136
|
-
dataKey
|
|
137
|
-
)}, ${void 0}, ${serializeJson({
|
|
138
|
-
message: error.message,
|
|
139
|
-
stack: error.stack
|
|
140
|
-
})});`
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
);
|
|
144
|
-
};
|
|
145
|
-
var DeferredDataScripts_default = DeferredDataScripts;
|
|
146
4
|
export {
|
|
147
5
|
DeferredDataScripts_default as default
|
|
148
6
|
};
|