@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.
Files changed (37) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +2 -2
  3. package/dist/cjs/cli/index.js +4 -3
  4. package/dist/cjs/router/runtime/DeferredDataScripts.js +2 -140
  5. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +165 -0
  6. package/dist/cjs/ssr/cli/index.js +1 -2
  7. package/dist/cjs/ssr/serverRender/index.js +8 -0
  8. package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +7 -3
  9. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.worker.js +25 -9
  10. package/dist/cjs/ssr/serverRender/utils.js +3 -0
  11. package/dist/cjs/state/runtime/index.js +2 -8
  12. package/dist/esm/cli/index.js +4 -3
  13. package/dist/esm/router/runtime/DeferredDataScripts.js +2 -164
  14. package/dist/esm/router/runtime/DeferredDataScripts.node.js +166 -0
  15. package/dist/esm/ssr/cli/index.js +2 -3
  16. package/dist/esm/ssr/serverRender/index.js +6 -1
  17. package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +2 -2
  18. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.worker.js +24 -11
  19. package/dist/esm/ssr/serverRender/utils.js +2 -1
  20. package/dist/esm/state/runtime/index.js +1 -2
  21. package/dist/esm-node/cli/index.js +4 -3
  22. package/dist/esm-node/router/runtime/DeferredDataScripts.js +2 -144
  23. package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +148 -0
  24. package/dist/esm-node/ssr/cli/index.js +2 -3
  25. package/dist/esm-node/ssr/serverRender/index.js +8 -0
  26. package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +6 -2
  27. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.worker.js +25 -9
  28. package/dist/esm-node/ssr/serverRender/utils.js +2 -0
  29. package/dist/esm-node/state/runtime/index.js +1 -4
  30. package/dist/types/router/runtime/DeferredDataScripts.d.ts +2 -7
  31. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +8 -0
  32. package/dist/types/router/runtime/index.d.ts +1 -1
  33. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.worker.d.ts +1 -1
  34. package/dist/types/ssr/serverRender/utils.d.ts +1 -0
  35. package/dist/types/state/runtime/index.d.ts +0 -1
  36. package/package.json +12 -12
  37. package/types/router.d.ts +1 -1
@@ -1,166 +1,4 @@
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
- });
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, isSingleEntry } from "@modern-js/utils";
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 ssgConfig = userConfig.output.ssg;
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 isShellStream = true;
187
+ var shellChunkStatus = 0 /* IDLE */ ;
181
188
  var ssrContext = context.ssrContext;
182
189
  var forUserPipe = function() {
183
- var _ref = _asyncToGenerator(function(stream) {
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 (isShellStream) {
238
- controller.enqueue(encodeForWebStream(shellBefore));
239
- controller.enqueue(value);
240
- controller.enqueue(encodeForWebStream(shellAfter));
241
- isShellStream = false;
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
- readableOriginal(injectableStream).readableOriginal(stream)
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(stream) {
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 { createStore, default2 as default, model };
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
- usePlugins: [PluginState(), PluginSSR(), PluginRouter(), Document()],
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
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
- import { Suspense, useEffect, useRef, useMemo, useContext } from "react";
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
  };