@modern-js/runtime 2.7.0 → 2.9.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 +43 -0
- package/README.md +2 -2
- package/dist/cjs/cli/index.js +4 -3
- package/dist/cjs/router/runtime/DeferredDataScripts.js +2 -140
- package/dist/cjs/router/runtime/DeferredDataScripts.node.js +165 -0
- package/dist/cjs/ssr/cli/index.js +1 -2
- package/dist/cjs/ssr/serverRender/index.js +8 -0
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +7 -3
- package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +25 -9
- package/dist/cjs/ssr/serverRender/utils.js +3 -0
- package/dist/cjs/state/runtime/index.js +2 -8
- package/dist/esm/cli/index.js +4 -3
- package/dist/esm/router/runtime/DeferredDataScripts.js +2 -164
- package/dist/esm/router/runtime/DeferredDataScripts.node.js +166 -0
- package/dist/esm/ssr/cli/index.js +2 -3
- package/dist/esm/ssr/serverRender/index.js +6 -1
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +2 -2
- package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +24 -11
- package/dist/esm/ssr/serverRender/utils.js +2 -1
- package/dist/esm/state/runtime/index.js +1 -2
- package/dist/esm-node/cli/index.js +4 -3
- 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/cli/index.js +2 -3
- package/dist/esm-node/ssr/serverRender/index.js +8 -0
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +6 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +25 -9
- package/dist/esm-node/ssr/serverRender/utils.js +2 -0
- package/dist/esm-node/state/runtime/index.js +1 -4
- 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/renderToPipe.worker.d.ts +1 -1
- package/dist/types/ssr/serverRender/utils.d.ts +1 -0
- package/dist/types/state/runtime/index.d.ts +0 -1
- package/package.json +12 -12
- package/types/router.d.ts +1 -1
|
@@ -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.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_node_default = DeferredDataScripts;
|
|
166
|
+
export { DeferredDataScripts_node_default as default };
|
|
@@ -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) {
|
|
@@ -165,8 +165,7 @@ var cli_default = function() {
|
|
|
165
165
|
throw new Error("You should switch to file-system based router to support streaming SSR.");
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
|
-
var
|
|
169
|
-
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);
|
|
170
169
|
ssrConfigMap.set(entryName, ssrConfig || useSSG);
|
|
171
170
|
if (ssrConfig || useSSG) {
|
|
172
171
|
imports.push({
|
|
@@ -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
|
|
@@ -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());
|
|
@@ -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;
|
|
@@ -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) {
|
|
@@ -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,5 +1,4 @@
|
|
|
1
1
|
export * from "@modern-js-reduck/react";
|
|
2
|
-
import { model, createStore } from "@modern-js-reduck/store";
|
|
3
2
|
import { default as default2 } from "./plugin";
|
|
4
3
|
export * from "./plugin";
|
|
5
|
-
export {
|
|
4
|
+
export { default2 as default };
|
|
@@ -7,13 +7,14 @@ import Document from "../document/cli";
|
|
|
7
7
|
var cli_default = () => ({
|
|
8
8
|
name: "@modern-js/runtime",
|
|
9
9
|
post: [
|
|
10
|
-
"@modern-js/plugin-router",
|
|
11
10
|
"@modern-js/plugin-ssr",
|
|
12
|
-
"@modern-js/plugin-document",
|
|
13
11
|
"@modern-js/plugin-state",
|
|
12
|
+
"@modern-js/plugin-router",
|
|
13
|
+
"@modern-js/plugin-document",
|
|
14
14
|
"@modern-js/plugin-design-token"
|
|
15
15
|
],
|
|
16
|
-
|
|
16
|
+
// the order of runtime plugins is affected by runtime hooks, mainly `init` and `hoc` hooks
|
|
17
|
+
usePlugins: [PluginSSR(), PluginState(), PluginRouter(), Document()],
|
|
17
18
|
setup: (api) => {
|
|
18
19
|
return {
|
|
19
20
|
config() {
|
|
@@ -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
|
};
|