@modern-js/runtime 2.5.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/cjs/cli/index.js +9 -0
  3. package/dist/cjs/common.js +6 -0
  4. package/dist/cjs/core/{app-config.js → appConfig.js} +8 -4
  5. package/dist/cjs/core/compatible.js +11 -10
  6. package/dist/cjs/core/index.js +6 -6
  7. package/dist/cjs/core/loader/index.js +4 -0
  8. package/dist/cjs/core/loader/loaderManager.js +6 -0
  9. package/dist/cjs/core/loader/useLoader.js +6 -2
  10. package/dist/cjs/core/types.js +15 -0
  11. package/dist/cjs/document/Body.js +6 -8
  12. package/dist/cjs/document/DocumentContext.js +4 -0
  13. package/dist/cjs/document/DocumentStructureContext.js +4 -0
  14. package/dist/cjs/document/Head.js +7 -11
  15. package/dist/cjs/document/Html.js +24 -22
  16. package/dist/cjs/document/Links.js +1 -3
  17. package/dist/cjs/document/Root.js +8 -14
  18. package/dist/cjs/document/Script.js +5 -7
  19. package/dist/cjs/document/Scripts.js +1 -3
  20. package/dist/cjs/document/cli/index.js +8 -2
  21. package/dist/cjs/exports/head.js +4 -0
  22. package/dist/cjs/exports/loadable.js +4 -0
  23. package/dist/cjs/exports/styled.js +4 -0
  24. package/dist/cjs/router/cli/index.js +3 -7
  25. package/dist/cjs/router/index.js +4 -0
  26. package/dist/cjs/router/runtime/DefaultNotFound.js +13 -10
  27. package/dist/cjs/router/runtime/DeferredDataScripts.js +165 -0
  28. package/dist/cjs/router/runtime/index.js +116 -3
  29. package/dist/cjs/router/runtime/plugin.js +18 -6
  30. package/dist/cjs/router/runtime/plugin.node.js +16 -49
  31. package/dist/cjs/router/runtime/utils.js +79 -101
  32. package/dist/cjs/router/runtime/withRouter.js +9 -6
  33. package/dist/cjs/{runtime-context.js → runtimeContext.js} +3 -3
  34. package/dist/cjs/ssr/cli/babel-plugin-ssr-loader-id.js +4 -0
  35. package/dist/cjs/ssr/cli/index.js +6 -0
  36. package/dist/cjs/ssr/index.js +10 -24
  37. package/dist/cjs/ssr/index.node.js +5 -0
  38. package/dist/cjs/ssr/prefetch.js +3 -6
  39. package/dist/cjs/ssr/react/nossr/index.js +4 -0
  40. package/dist/cjs/ssr/react/prerender/index.js +4 -0
  41. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +7 -13
  42. package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +5 -0
  43. package/dist/cjs/ssr/serverRender/renderToStream/index.js +4 -0
  44. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +22 -7
  45. package/dist/cjs/ssr/serverRender/renderToStream/template.js +2 -1
  46. package/dist/cjs/ssr/serverRender/renderToString/entry.js +28 -11
  47. package/dist/cjs/ssr/serverRender/renderToString/index.js +4 -0
  48. package/dist/cjs/ssr/serverRender/renderToString/loadable.js +1 -1
  49. package/dist/cjs/ssr/serverRender/time.worker.js +1 -1
  50. package/dist/cjs/ssr/serverRender/utils.js +1 -1
  51. package/dist/cjs/ssr/utils.js +16 -4
  52. package/dist/cjs/state/index.js +4 -0
  53. package/dist/cjs/state/plugins.js +4 -0
  54. package/dist/cjs/state/runtime/index.js +4 -0
  55. package/dist/cjs/state/runtime/plugin.js +5 -7
  56. package/dist/esm/cli/index.js +5 -1
  57. package/dist/esm/common.js +3 -1
  58. package/dist/esm/core/{app-config.js → appConfig.js} +3 -1
  59. package/dist/esm/core/compatible.js +4 -2
  60. package/dist/esm/core/index.js +2 -2
  61. package/dist/esm/core/loader/loaderManager.js +3 -1
  62. package/dist/esm/core/loader/useLoader.js +1 -1
  63. package/dist/esm/core/types.js +1 -0
  64. package/dist/esm/document/cli/index.js +4 -2
  65. package/dist/esm/router/cli/index.js +1 -5
  66. package/dist/esm/router/runtime/DeferredDataScripts.js +166 -0
  67. package/dist/esm/router/runtime/index.js +3 -2
  68. package/dist/esm/router/runtime/plugin.js +11 -3
  69. package/dist/esm/router/runtime/plugin.node.js +11 -68
  70. package/dist/esm/router/runtime/utils.js +138 -81
  71. package/dist/esm/ssr/cli/index.js +2 -0
  72. package/dist/esm/ssr/index.node.js +1 -0
  73. package/dist/esm/ssr/prefetch.js +1 -0
  74. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +37 -10
  75. package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -0
  76. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +19 -8
  77. package/dist/esm/ssr/serverRender/renderToStream/template.js +2 -1
  78. package/dist/esm/ssr/serverRender/renderToString/entry.js +37 -13
  79. package/dist/esm/ssr/serverRender/time.worker.js +1 -1
  80. package/dist/esm/ssr/utils.js +6 -4
  81. package/dist/esm-node/cli/index.js +5 -0
  82. package/dist/esm-node/common.js +4 -0
  83. package/dist/esm-node/core/{app-config.js → appConfig.js} +5 -1
  84. package/dist/esm-node/core/compatible.js +5 -8
  85. package/dist/esm-node/core/index.js +2 -2
  86. package/dist/esm-node/core/loader/loaderManager.js +2 -0
  87. package/dist/esm-node/core/loader/useLoader.js +1 -1
  88. package/dist/esm-node/core/types.js +0 -0
  89. package/dist/esm-node/document/Body.js +6 -8
  90. package/dist/esm-node/document/Head.js +7 -11
  91. package/dist/esm-node/document/Html.js +24 -22
  92. package/dist/esm-node/document/Links.js +1 -3
  93. package/dist/esm-node/document/Root.js +8 -14
  94. package/dist/esm-node/document/Script.js +5 -7
  95. package/dist/esm-node/document/Scripts.js +1 -3
  96. package/dist/esm-node/document/cli/index.js +4 -2
  97. package/dist/esm-node/router/cli/index.js +2 -5
  98. package/dist/esm-node/router/runtime/DefaultNotFound.js +13 -10
  99. package/dist/esm-node/router/runtime/DeferredDataScripts.js +148 -0
  100. package/dist/esm-node/router/runtime/index.js +113 -2
  101. package/dist/esm-node/router/runtime/plugin.js +15 -7
  102. package/dist/esm-node/router/runtime/plugin.node.js +12 -52
  103. package/dist/esm-node/router/runtime/utils.js +70 -101
  104. package/dist/esm-node/router/runtime/withRouter.js +9 -6
  105. package/dist/esm-node/ssr/cli/index.js +2 -0
  106. package/dist/esm-node/ssr/index.js +6 -24
  107. package/dist/esm-node/ssr/index.node.js +1 -0
  108. package/dist/esm-node/ssr/prefetch.js +3 -6
  109. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +7 -7
  110. package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -0
  111. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +22 -7
  112. package/dist/esm-node/ssr/serverRender/renderToStream/template.js +2 -1
  113. package/dist/esm-node/ssr/serverRender/renderToString/entry.js +24 -11
  114. package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +1 -1
  115. package/dist/esm-node/ssr/serverRender/time.worker.js +1 -1
  116. package/dist/esm-node/ssr/serverRender/utils.js +1 -1
  117. package/dist/esm-node/ssr/utils.js +6 -4
  118. package/dist/esm-node/state/runtime/plugin.js +1 -7
  119. package/dist/types/common.d.ts +3 -1
  120. package/dist/types/core/compatible.d.ts +1 -1
  121. package/dist/types/core/index.d.ts +4 -3
  122. package/dist/types/core/loader/index.d.ts +1 -2
  123. package/dist/types/core/loader/useLoader.d.ts +1 -15
  124. package/dist/types/core/plugin.d.ts +15 -15
  125. package/dist/types/core/types.d.ts +22 -0
  126. package/dist/types/index.d.ts +1 -1
  127. package/dist/types/router/runtime/DeferredDataScripts.d.ts +8 -0
  128. package/dist/types/router/runtime/index.d.ts +4 -2
  129. package/dist/types/router/runtime/utils.d.ts +23 -4
  130. package/dist/types/{runtime-context.d.ts → runtimeContext.d.ts} +2 -0
  131. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +2 -0
  132. package/dist/types/ssr/serverRender/renderToString/type.d.ts +1 -0
  133. package/package.json +14 -15
  134. package/dist/cjs/ssr/prefetch.worker.js +0 -67
  135. package/dist/cjs/ssr/serverRender/renderToStream/index.worker.js +0 -64
  136. package/dist/cjs/ssr/serverRender/renderToString/index.worker.js +0 -58
  137. package/dist/esm/ssr/prefetch.worker.js +0 -191
  138. package/dist/esm/ssr/serverRender/renderToStream/index.worker.js +0 -32
  139. package/dist/esm/ssr/serverRender/renderToString/index.worker.js +0 -167
  140. package/dist/esm-node/ssr/prefetch.worker.js +0 -46
  141. package/dist/esm-node/ssr/serverRender/renderToStream/index.worker.js +0 -35
  142. package/dist/esm-node/ssr/serverRender/renderToString/index.worker.js +0 -29
  143. package/dist/types/ssr/prefetch.worker.d.ts +0 -13
  144. package/dist/types/ssr/serverRender/renderToStream/index.worker.d.ts +0 -6
  145. package/dist/types/ssr/serverRender/renderToString/index.worker.d.ts +0 -6
  146. /package/dist/esm/{runtime-context.js → runtimeContext.js} +0 -0
  147. /package/dist/esm-node/{runtime-context.js → runtimeContext.js} +0 -0
  148. /package/dist/types/core/{app-config.d.ts → appConfig.d.ts} +0 -0
@@ -17,6 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  return to;
18
18
  };
19
19
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
20
24
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
25
  mod
22
26
  ));
@@ -28,8 +32,9 @@ __export(entry_exports, {
28
32
  module.exports = __toCommonJS(entry_exports);
29
33
  var import_react = __toESM(require("react"));
30
34
  var import_server = __toESM(require("react-dom/server"));
31
- var import_serialize_javascript = __toESM(require("serialize-javascript"));
35
+ var import_serialize = require("@modern-js/utils/serialize");
32
36
  var import_react_helmet = __toESM(require("react-helmet"));
37
+ var import_utils = require("../../../router/runtime/utils");
33
38
  var import_helmet = __toESM(require("../helmet"));
34
39
  var import_types = require("../types");
35
40
  var import_time = require("../time");
@@ -39,7 +44,10 @@ var import_reduce = require("./reduce");
39
44
  var loadableRenderer = __toESM(require("./loadable"));
40
45
  var styledComponentRenderer = __toESM(require("./styledComponent"));
41
46
  const buildTemplateData = (context, data, renderLevel) => {
42
- const { request } = context;
47
+ const { request, enableUnsafeCtx } = context;
48
+ const unsafeContext = {
49
+ headers: request.headers
50
+ };
43
51
  return {
44
52
  data,
45
53
  context: {
@@ -49,8 +57,7 @@ const buildTemplateData = (context, data, renderLevel) => {
49
57
  pathname: request.pathname,
50
58
  host: request.host,
51
59
  url: request.url,
52
- headers: request.headers,
53
- cookieMap: request.cookieMap
60
+ ...enableUnsafeCtx ? unsafeContext : {}
54
61
  }
55
62
  },
56
63
  renderLevel
@@ -96,13 +103,18 @@ class Entry {
96
103
  if ((_c = ssrContext.redirection) == null ? void 0 : _c.url) {
97
104
  return "";
98
105
  }
106
+ const { routerContext } = context;
107
+ const routerData = routerContext ? {
108
+ loaderData: routerContext.loaderData,
109
+ errors: (0, import_utils.serializeErrors)(routerContext.errors)
110
+ } : void 0;
99
111
  let html = "";
100
112
  const templateData = buildTemplateData(
101
113
  ssrContext,
102
114
  prefetchData,
103
115
  this.result.renderLevel
104
116
  );
105
- const SSRData = this.getSSRDataScript(templateData);
117
+ const SSRData = this.getSSRDataScript(templateData, routerData);
106
118
  for (const fragment of this.fragments) {
107
119
  if (fragment.isVariable && fragment.content === "SSRDataScript") {
108
120
  html += fragment.getValue(SSRData);
@@ -159,13 +171,18 @@ class Entry {
159
171
  }
160
172
  return html;
161
173
  }
162
- getSSRDataScript(templateData) {
174
+ getSSRDataScript(templateData, routerData) {
175
+ let ssrDataScripts = `<script>window._SSR_DATA = ${(0, import_serialize.serializeJson)(
176
+ templateData
177
+ )}</script>`;
178
+ if (routerData) {
179
+ ssrDataScripts += `
180
+ <script>window._ROUTER_DATA = ${(0, import_serialize.serializeJson)(
181
+ routerData
182
+ )}</script>`;
183
+ }
163
184
  return {
164
- SSRDataScript: `
165
- <script>window._SSR_DATA = ${(0, import_serialize_javascript.default)(templateData, {
166
- isJSON: true
167
- })}<\/script>
168
- `
185
+ SSRDataScript: ssrDataScripts
169
186
  };
170
187
  }
171
188
  }
@@ -17,6 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  return to;
18
18
  };
19
19
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
20
24
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
25
  mod
22
26
  ));
@@ -58,7 +58,7 @@ const toHtml = (jsx, renderer, next) => {
58
58
  }
59
59
  chunksMap[fileType] += `<script src="${v.url}" ${props.join(
60
60
  " "
61
- )}><\/script>`;
61
+ )}></script>`;
62
62
  } else if (fileType === "css") {
63
63
  chunksMap[fileType] += `<link href="${v.url}" rel="stylesheet" />`;
64
64
  }
@@ -21,7 +21,7 @@ __export(time_worker_exports, {
21
21
  });
22
22
  module.exports = __toCommonJS(time_worker_exports);
23
23
  function processHrtime(previousTimestamp) {
24
- const now = new Date().getTime();
24
+ const now = (/* @__PURE__ */ new Date()).getTime();
25
25
  const clocktime = now * 1e-3;
26
26
  let seconds = Math.floor(clocktime);
27
27
  let nanoseconds = Math.floor(clocktime % 1 * 1e9);
@@ -26,7 +26,7 @@ function getLoadableScripts(extractor) {
26
26
  if (!check(scripts)) {
27
27
  return "";
28
28
  }
29
- return scripts.split("<\/script>").slice(0, 2).map((i) => `${i}<\/script>`).join("");
29
+ return scripts.split("</script>").slice(0, 2).map((i) => `${i}</script>`).join("");
30
30
  }
31
31
  // Annotate the CommonJS export names for ESM import in node:
32
32
  0 && (module.exports = {
@@ -1,6 +1,8 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __export = (target, all) => {
6
8
  for (var name in all)
@@ -14,6 +16,14 @@ var __copyProps = (to, from, except, desc) => {
14
16
  }
15
17
  return to;
16
18
  };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
17
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
28
  var utils_exports = {};
19
29
  __export(utils_exports, {
@@ -24,6 +34,7 @@ __export(utils_exports, {
24
34
  mockResponse: () => mockResponse
25
35
  });
26
36
  module.exports = __toCommonJS(utils_exports);
37
+ var import_cookie = __toESM(require("cookie"));
27
38
  const isReact18 = () => process.env.IS_REACT18 === "true";
28
39
  const formatServer = (request) => {
29
40
  const {
@@ -33,6 +44,7 @@ const formatServer = (request) => {
33
44
  } = request.headers || {};
34
45
  return {
35
46
  cookie,
47
+ cookieMap: import_cookie.default.parse(cookie || "") || {},
36
48
  userAgent,
37
49
  referer,
38
50
  ...request
@@ -46,15 +58,15 @@ const getQuery = () => window.location.search.substring(1).split("&").reduce((re
46
58
  return res;
47
59
  }, {});
48
60
  const formatClient = (request) => {
49
- var _a, _b;
61
+ var _a;
50
62
  return {
51
63
  params: request.params || {},
52
64
  host: request.host || location.host,
53
65
  pathname: request.pathname || location.pathname,
54
66
  headers: request.headers || {},
55
- cookieMap: request.cookieMap || {},
56
- cookie: ((_a = request.headers) == null ? void 0 : _a.cookie) || document.cookie,
57
- userAgent: ((_b = request.headers) == null ? void 0 : _b["user-agent"]) || navigator.userAgent,
67
+ cookieMap: import_cookie.default.parse(document.cookie || "") || {},
68
+ cookie: document.cookie || "",
69
+ userAgent: ((_a = request.headers) == null ? void 0 : _a["user-agent"]) || navigator.userAgent,
58
70
  referer: request.referer || document.referrer,
59
71
  query: request.query || getQuery(),
60
72
  url: location.href
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  };
19
19
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -17,6 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  return to;
18
18
  };
19
19
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
20
24
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
25
  mod
22
26
  ));
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  };
19
19
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  };
19
19
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -70,13 +74,7 @@ const state = (config) => ({
70
74
  hoc({ App }, next) {
71
75
  const getStateApp = (props) => {
72
76
  const context = (0, import_react.useContext)(import_core.RuntimeReactContext);
73
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react2.Provider, {
74
- store: context.store,
75
- config: storeConfig,
76
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
77
- ...props
78
- })
79
- });
77
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react2.Provider, { store: context.store, config: storeConfig, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { ...props }) });
80
78
  };
81
79
  return next({
82
80
  App: (0, import_hoist_non_react_statics.default)(getStateApp, App)
@@ -154,7 +154,11 @@ var cli_default = function() {
154
154
  runtimeByEntries: {},
155
155
  source: {
156
156
  alias: {
157
- "styled-components": require.resolve("styled-components")
157
+ /**
158
+ * twin.macro inserts styled-components into the code during the compilation process
159
+ * But it will not be installed under the user project.
160
+ * So need to add alias
161
+ */ "styled-components": require.resolve("styled-components")
158
162
  },
159
163
  globalVars: {
160
164
  "process.env.IS_REACT18": process.env.IS_REACT18
@@ -1,4 +1,6 @@
1
1
  var isBrowser = function() {
2
2
  return typeof window !== "undefined" && window.name !== "nodejs";
3
3
  };
4
- export { isBrowser };
4
+ var JSX_SHELL_STREAM_END_MARK = "<!--<?- SHELL_STREAM_END ?>-->";
5
+ var ESCAPED_SHELL_STREAM_END_MARK = "&lt;!--&lt;?- SHELL_STREAM_END ?&gt;--&gt;";
6
+ export { ESCAPED_SHELL_STREAM_END_MARK, JSX_SHELL_STREAM_END_MARK, isBrowser };
@@ -1,6 +1,8 @@
1
1
  var APP_CONFIG_SYMBOL = "config";
2
2
  var getConfig = function(Component) {
3
- return Component[APP_CONFIG_SYMBOL];
3
+ return(// eslint-disable-next-line @typescript-eslint/ban-ts-comment
4
+ // @ts-expect-error
5
+ Component[APP_CONFIG_SYMBOL]);
4
6
  };
5
7
  var defineConfig = function(Component, config) {
6
8
  Component[APP_CONFIG_SYMBOL] = config;
@@ -213,7 +213,7 @@ import { jsx } from "react/jsx-runtime";
213
213
  import React, { useContext, useMemo } from "react";
214
214
  import hoistNonReactStatics from "hoist-non-react-statics";
215
215
  import { ROUTE_MANIFEST } from "@modern-js/utils/constants";
216
- import { RuntimeReactContext } from "../runtime-context";
216
+ import { RuntimeReactContext } from "../runtimeContext";
217
217
  import { runtime } from "./plugin";
218
218
  import { createLoaderManager } from "./loader/loaderManager";
219
219
  var IS_REACT18 = process.env.IS_REACT18 === "true";
@@ -419,11 +419,13 @@ var bootstrap = function() {
419
419
  isBrowser: false,
420
420
  loaderManager: createLoaderManager({}, {
421
421
  skipNonStatic: id.staticGenerate,
422
+ // if not static generate, only non-static loader can exec on prod env
422
423
  skipStatic: process.env.NODE_ENV === "production" && !id.staticGenerate
423
424
  })
424
425
  });
425
426
  isRedirectResponse = function(result) {
426
- if (typeof Response !== "undefined" && _instanceof(result, Response) && result.status >= 300 && result.status <= 399) {
427
+ if (typeof Response !== "undefined" && // fix: ssg workflow doesn't inject Web Response
428
+ _instanceof(result, Response) && result.status >= 300 && result.status <= 399) {
427
429
  var status = result.status;
428
430
  var redirectUrl = result.headers.get("Location") || "/";
429
431
  var ssrContext = context.ssrContext;
@@ -1,7 +1,7 @@
1
1
  import { createPlugin, createRuntime, runtime, registerInit } from "./plugin";
2
- import { defineConfig, getConfig } from "./app-config";
2
+ import { defineConfig, getConfig } from "./appConfig";
3
3
  export * from "./compatible";
4
- import { RuntimeReactContext, ServerRouterContext } from "../runtime-context";
4
+ import { RuntimeReactContext, ServerRouterContext } from "../runtimeContext";
5
5
  export * from "./loader";
6
6
  export * from "@modern-js/plugin";
7
7
  export { RuntimeReactContext, ServerRouterContext, createPlugin, createRuntime, defineConfig, getConfig, registerInit, runtime };
@@ -266,6 +266,7 @@ var createLoader = function(id) {
266
266
  reloading: hasLoaded && status === 1 /* loading */ ,
267
267
  data: data,
268
268
  error: _instanceof(error, Error) ? "".concat(error.message) : error,
269
+ // redundant fields for ssr log
269
270
  _error: error
270
271
  };
271
272
  };
@@ -306,7 +307,8 @@ var createLoaderManager = function(initialDataMap) {
306
307
  var skipExec = ignoreNonStatic || ignoreStatic;
307
308
  loader = createLoader(id, typeof initialDataMap[id] !== "undefined" ? initialDataMap[id] : {
308
309
  data: loaderOptions.initialData
309
- }, loaderFn, skipExec);
310
+ }, loaderFn, // Todo whether static loader is exec when CSR
311
+ skipExec);
310
312
  loadersMap.set(id, loader);
311
313
  }
312
314
  return id;
@@ -105,7 +105,7 @@ function _unsupportedIterableToArray(o, minLen) {
105
105
  }
106
106
  import { useContext, useRef, useMemo, useState, useCallback, useEffect } from "react";
107
107
  import invariant from "invariant";
108
- import { RuntimeReactContext } from "../../runtime-context";
108
+ import { RuntimeReactContext } from "../../runtimeContext";
109
109
  import { LoaderStatus } from "./loaderManager";
110
110
  var useLoader = function(loaderFn) {
111
111
  var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {
@@ -0,0 +1 @@
1
+ "use strict";
@@ -236,7 +236,7 @@ var cli_default = function() {
236
236
  case 0:
237
237
  htmlWebpackPlugin = param.htmlWebpackPlugin;
238
238
  documentParams = getDocParams({
239
- config: api.useConfigContext(),
239
+ config: api.useResolvedConfigContext(),
240
240
  entryName: entryName,
241
241
  templateParameters: templateParameters
242
242
  });
@@ -285,6 +285,7 @@ var cli_default = function() {
285
285
  ],
286
286
  outfile: htmlOutputFile,
287
287
  platform: "node",
288
+ // change esbuild use the rootDir tsconfig.json as default to tempTsConfigFile
288
289
  tsconfig: tempTsConfigFile,
289
290
  target: "es6",
290
291
  loader: {
@@ -370,7 +371,8 @@ var cli_default = function() {
370
371
  tools: {
371
372
  htmlPlugin: function(options, entry) {
372
373
  var hackParameters = typeof (options === null || options === void 0 ? void 0 : options.templateParameters) === "function" ? options === null || options === void 0 ? void 0 : options.templateParameters({}, {}, {}, {}) : _objectSpread({}, options === null || options === void 0 ? void 0 : options.templateParameters);
373
- var templateContent = documentEntry(entry.entryName, hackParameters);
374
+ var templateContent = documentEntry(entry.entryName, // options,
375
+ hackParameters);
374
376
  var documentHtmlOptions = templateContent ? {
375
377
  templateContent: templateContent,
376
378
  inject: false
@@ -50,13 +50,9 @@ function _objectSpreadProps(target, source) {
50
50
  }
51
51
  return target;
52
52
  }
53
- import { getEntryOptions, createRuntimeExportsUtils, PLUGIN_SCHEMAS } from "@modern-js/utils";
53
+ import { getEntryOptions, createRuntimeExportsUtils, PLUGIN_SCHEMAS, isRouterV5 as isV5 } from "@modern-js/utils";
54
54
  var PLUGIN_IDENTIFIER = "router";
55
55
  var ROUTES_IDENTIFIER = "routes";
56
- var isV5 = function(config) {
57
- var _config_runtime, _config_runtime_router;
58
- return (config === null || config === void 0 ? void 0 : (_config_runtime = config.runtime) === null || _config_runtime === void 0 ? void 0 : (_config_runtime_router = _config_runtime.router) === null || _config_runtime_router === void 0 ? void 0 : _config_runtime_router.mode) === "react-router-5";
59
- };
60
56
  var cli_default = function() {
61
57
  return {
62
58
  name: "@modern-js/plugin-router",
@@ -0,0 +1,166 @@
1
+ function _arrayLikeToArray(arr, len) {
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
+ return arr2;
5
+ }
6
+ function _arrayWithHoles(arr) {
7
+ if (Array.isArray(arr)) return arr;
8
+ }
9
+ function _iterableToArrayLimit(arr, i) {
10
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
11
+ if (_i == null) return;
12
+ var _arr = [];
13
+ var _n = true;
14
+ var _d = false;
15
+ var _s, _e;
16
+ try {
17
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
18
+ _arr.push(_s.value);
19
+ if (i && _arr.length === i) break;
20
+ }
21
+ } catch (err) {
22
+ _d = true;
23
+ _e = err;
24
+ } finally{
25
+ try {
26
+ if (!_n && _i["return"] != null) _i["return"]();
27
+ } finally{
28
+ if (_d) throw _e;
29
+ }
30
+ }
31
+ return _arr;
32
+ }
33
+ function _nonIterableRest() {
34
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
35
+ }
36
+ function _slicedToArray(arr, i) {
37
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
38
+ }
39
+ function _unsupportedIterableToArray(o, minLen) {
40
+ if (!o) return;
41
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
42
+ var n = Object.prototype.toString.call(o).slice(8, -1);
43
+ if (n === "Object" && o.constructor) n = o.constructor.name;
44
+ if (n === "Map" || n === "Set") return Array.from(n);
45
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
46
+ }
47
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
48
+ import { Suspense, useEffect, useRef, useMemo, useContext } from "react";
49
+ import { Await, UNSAFE_DataRouterContext as DataRouterContext, useAsyncError } from "react-router-dom";
50
+ import { serializeJson } from "@modern-js/utils/serialize";
51
+ import { JSX_SHELL_STREAM_END_MARK } from "../../common";
52
+ import { serializeErrors } from "./utils";
53
+ var setupFnStr = "function s(r,e){_ROUTER_DATA.r=_ROUTER_DATA.r||{},_ROUTER_DATA.r[r]=_ROUTER_DATA.r[r]||{};return new Promise((function(A,R){_ROUTER_DATA.r[r][e]={resolve:A,reject:R}}))};";
54
+ var resolveFnStr = "function r(e,r,o,A){A?_ROUTER_DATA.r[e][r].reject(A):_ROUTER_DATA.r[e][r].resolve(o)};";
55
+ var preResolvedFnStr = "function p(e,r){return void 0!==r?Promise.reject(new Error(r.message)):Promise.resovle(e)};";
56
+ var DeferredDataScripts = function() {
57
+ var context = useContext(DataRouterContext);
58
+ var staticContext = (context || {}).staticContext;
59
+ var hydratedRef = useRef(false);
60
+ useEffect(function() {
61
+ hydratedRef.current = true;
62
+ }, []);
63
+ var deferredScripts = useMemo(function() {
64
+ if (!staticContext) {
65
+ return null;
66
+ }
67
+ var activeDeferreds = staticContext.activeDeferreds || [];
68
+ var _ROUTER_DATA = {
69
+ loaderData: staticContext.loaderData,
70
+ errors: serializeErrors(staticContext.errors)
71
+ };
72
+ var initialScripts = [
73
+ "_ROUTER_DATA = ".concat(serializeJson(_ROUTER_DATA), ";"),
74
+ "_ROUTER_DATA.s = ".concat(setupFnStr),
75
+ "_ROUTER_DATA.r = ".concat(resolveFnStr),
76
+ "_ROUTER_DATA.p = ".concat(preResolvedFnStr)
77
+ ].join("\n");
78
+ var deferredDataScripts = [];
79
+ initialScripts += Object.entries(activeDeferreds).map(function(param) {
80
+ var _param = _slicedToArray(param, 2), routeId = _param[0], deferredData = _param[1];
81
+ var pendingKeys = new Set(deferredData.pendingKeys);
82
+ var deferredKeys = deferredData.deferredKeys;
83
+ var deferredKeyPromiseStr = deferredKeys.map(function(key) {
84
+ if (pendingKeys.has(key)) {
85
+ deferredDataScripts.push(/* @__PURE__ */ jsx(DeferredDataScript, {
86
+ data: deferredData.data[key],
87
+ dataKey: key,
88
+ routeId: routeId
89
+ }, "".concat(routeId, " | ").concat(key)));
90
+ return "".concat(JSON.stringify(key), ": _ROUTER_DATA.s(").concat(JSON.stringify(routeId), ",").concat(JSON.stringify(key), ") ");
91
+ } else {
92
+ var trackedPromise = deferredData.data[key];
93
+ if (typeof trackedPromise._error !== "undefined") {
94
+ var error = {
95
+ message: trackedPromise._error.message,
96
+ stack: process.env.NODE_ENV !== "production" ? trackedPromise._error.stack : void 0
97
+ };
98
+ return "".concat(JSON.stringify(key), ": _ROUTER_DATA.p(").concat(void 0, ", ").concat(serializeJson(error), ")");
99
+ } else {
100
+ if (typeof trackedPromise._data === "undefined") {
101
+ throw new Error("The deferred data for ".concat(key, " was not resolved, did you forget to return data from a deferred promise"));
102
+ }
103
+ return "".concat(JSON.stringify(key), ": _ROUTER_DATA.p(").concat(serializeJson(trackedPromise._data), ")");
104
+ }
105
+ }
106
+ }).join(",\n");
107
+ return "Object.assign(_ROUTER_DATA.loaderData[".concat(JSON.stringify(routeId), "], {").concat(deferredKeyPromiseStr, "});");
108
+ }).join("\n");
109
+ return [
110
+ initialScripts,
111
+ deferredDataScripts
112
+ ];
113
+ }, []);
114
+ if (!deferredScripts) {
115
+ return null;
116
+ }
117
+ return /* @__PURE__ */ jsxs(Fragment, {
118
+ children: [
119
+ !hydratedRef.current && /* @__PURE__ */ jsx("script", {
120
+ async: true,
121
+ suppressHydrationWarning: true,
122
+ dangerouslySetInnerHTML: {
123
+ __html: deferredScripts[0]
124
+ }
125
+ }),
126
+ !hydratedRef.current && deferredScripts[1],
127
+ JSX_SHELL_STREAM_END_MARK
128
+ ]
129
+ });
130
+ };
131
+ var DeferredDataScript = function(param) {
132
+ var data = param.data, routeId = param.routeId, dataKey = param.dataKey;
133
+ return /* @__PURE__ */ jsx(Suspense, {
134
+ children: typeof document === "undefined" && data && dataKey && routeId ? /* @__PURE__ */ jsx(Await, {
135
+ resolve: data,
136
+ errorElement: /* @__PURE__ */ jsx(ErrorDeferredDataScript, {
137
+ routeId: routeId,
138
+ dataKey: dataKey
139
+ }),
140
+ children: function(data2) {
141
+ return /* @__PURE__ */ jsx("script", {
142
+ async: true,
143
+ suppressHydrationWarning: true,
144
+ dangerouslySetInnerHTML: {
145
+ __html: "_ROUTER_DATA.r(".concat(JSON.stringify(routeId), ", ").concat(JSON.stringify(dataKey), ", ").concat(serializeJson(data2), ");")
146
+ }
147
+ });
148
+ }
149
+ }) : null
150
+ });
151
+ };
152
+ var ErrorDeferredDataScript = function(param) {
153
+ var routeId = param.routeId, dataKey = param.dataKey;
154
+ var error = useAsyncError();
155
+ return /* @__PURE__ */ jsx("script", {
156
+ suppressHydrationWarning: true,
157
+ dangerouslySetInnerHTML: {
158
+ __html: "_ROUTER_DATA.r(".concat(JSON.stringify(routeId), ", ").concat(JSON.stringify(dataKey), ", ").concat(void 0, ", ").concat(serializeJson({
159
+ message: error.message,
160
+ stack: error.stack
161
+ }), ");")
162
+ }
163
+ });
164
+ };
165
+ var DeferredDataScripts_default = DeferredDataScripts;
166
+ export { DeferredDataScripts_default as default };
@@ -1,6 +1,7 @@
1
1
  import { routerPlugin } from "./plugin";
2
2
  var runtime_default = routerPlugin;
3
3
  import { modifyRoutes } from "./plugin";
4
- export * from "react-router-dom";
5
4
  export * from "./withRouter";
6
- export { runtime_default as default, modifyRoutes };
5
+ import { createBrowserRouter, createHashRouter, createMemoryRouter, RouterProvider, BrowserRouter, HashRouter, MemoryRouter, Router, Await, Form, Link, NavLink, Navigate, Outlet, Route, Routes, ScrollRestoration, useActionData, useAsyncError, useAsyncValue, useBeforeUnload, useFetcher, useFetchers, useFormAction, useHref, useInRouterContext, useLinkClickHandler, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, useSearchParams, useSubmit, createRoutesFromChildren, createRoutesFromElements, createSearchParams, generatePath, isRouteErrorResponse, matchPath, matchRoutes, renderMatches, resolvePath } from "react-router-dom";
6
+ import { defer, json, redirect } from "@modern-js/utils/remix-router";
7
+ export { Await, BrowserRouter, Form, HashRouter, Link, MemoryRouter, NavLink, Navigate, Outlet, Route, Router, RouterProvider, Routes, ScrollRestoration, createBrowserRouter, createHashRouter, createMemoryRouter, createRoutesFromChildren, createRoutesFromElements, createSearchParams, runtime_default as default, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, modifyRoutes, redirect, renderMatches, resolvePath, useActionData, useAsyncError, useAsyncValue, useBeforeUnload, useFetcher, useFetchers, useFormAction, useHref, useInRouterContext, useLinkClickHandler, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, useSearchParams, useSubmit };
@@ -53,7 +53,7 @@ function _objectSpreadProps(target, source) {
53
53
  import { jsx } from "react/jsx-runtime";
54
54
  import { createBrowserRouter, createHashRouter, RouterProvider, createRoutesFromElements, useMatches, useLocation } from "react-router-dom";
55
55
  import hoistNonReactStatics from "hoist-non-react-statics";
56
- import { renderRoutes, urlJoin } from "./utils";
56
+ import { deserializeErrors, renderRoutes, urlJoin } from "./utils";
57
57
  var finalRouteConfig = {
58
58
  routes: []
59
59
  };
@@ -103,10 +103,18 @@ var routerPlugin = function(param) {
103
103
  var routes = createRoutes ? createRoutes() : createRoutesFromElements(renderRoutes(finalRouteConfig));
104
104
  var baseUrl = ((_window__SERVER_DATA = window._SERVER_DATA) === null || _window__SERVER_DATA === void 0 ? void 0 : _window__SERVER_DATA.router.baseUrl) || select(location.pathname);
105
105
  var _basename = baseUrl === "/" ? urlJoin(baseUrl, basename) : baseUrl;
106
+ var hydrationData = window._ROUTER_DATA;
107
+ if (hydrationData === null || hydrationData === void 0 ? void 0 : hydrationData.errors) {
108
+ hydrationData = _objectSpreadProps(_objectSpread({}, hydrationData), {
109
+ errors: deserializeErrors(hydrationData.errors)
110
+ });
111
+ }
106
112
  var router = supportHtml5History ? createBrowserRouter(routes, {
107
- basename: _basename
113
+ basename: _basename,
114
+ hydrationData: hydrationData
108
115
  }) : createHashRouter(routes, {
109
- basename: _basename
116
+ basename: _basename,
117
+ hydrationData: hydrationData
110
118
  });
111
119
  return /* @__PURE__ */ jsx(App, _objectSpreadProps(_objectSpread({}, props), {
112
120
  children: /* @__PURE__ */ jsx(RouterProvider, {