@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
@@ -72,6 +72,7 @@ function _unsupportedIterableToArray(o, minLen) {
72
72
  if (n === "Map" || n === "Set") return Array.from(n);
73
73
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
74
74
  }
75
+ import cookieTool from "cookie";
75
76
  var isReact18 = function() {
76
77
  return process.env.IS_REACT18 === "true";
77
78
  };
@@ -79,6 +80,7 @@ var formatServer = function(request) {
79
80
  var _ref = request.headers || {}, _ref_cookie = _ref.cookie, cookie = _ref_cookie === void 0 ? "" : _ref_cookie, tmp = _ref["user-agent"], userAgent = tmp === void 0 ? "" : tmp, referer = _ref.referer;
80
81
  return _objectSpread({
81
82
  cookie: cookie,
83
+ cookieMap: cookieTool.parse(cookie || "") || {},
82
84
  userAgent: userAgent,
83
85
  referer: referer
84
86
  }, request);
@@ -93,15 +95,15 @@ var getQuery = function() {
93
95
  }, {});
94
96
  };
95
97
  var formatClient = function(request) {
96
- var _request_headers, _request_headers1;
98
+ var _request_headers;
97
99
  return {
98
100
  params: request.params || {},
99
101
  host: request.host || location.host,
100
102
  pathname: request.pathname || location.pathname,
101
103
  headers: request.headers || {},
102
- cookieMap: request.cookieMap || {},
103
- cookie: ((_request_headers = request.headers) === null || _request_headers === void 0 ? void 0 : _request_headers.cookie) || document.cookie,
104
- userAgent: ((_request_headers1 = request.headers) === null || _request_headers1 === void 0 ? void 0 : _request_headers1["user-agent"]) || navigator.userAgent,
104
+ cookieMap: cookieTool.parse(document.cookie || "") || {},
105
+ cookie: document.cookie || "",
106
+ userAgent: ((_request_headers = request.headers) === null || _request_headers === void 0 ? void 0 : _request_headers["user-agent"]) || navigator.userAgent,
105
107
  referer: request.referer || document.referrer,
106
108
  query: request.query || getQuery(),
107
109
  url: location.href
@@ -24,6 +24,11 @@ var cli_default = () => ({
24
24
  runtimeByEntries: {},
25
25
  source: {
26
26
  alias: {
27
+ /**
28
+ * twin.macro inserts styled-components into the code during the compilation process
29
+ * But it will not be installed under the user project.
30
+ * So need to add alias
31
+ */
27
32
  "styled-components": require.resolve("styled-components")
28
33
  },
29
34
  globalVars: {
@@ -1,4 +1,8 @@
1
1
  const isBrowser = () => typeof window !== "undefined" && window.name !== "nodejs";
2
+ const JSX_SHELL_STREAM_END_MARK = "<!--<?- SHELL_STREAM_END ?>-->";
3
+ const ESCAPED_SHELL_STREAM_END_MARK = "&lt;!--&lt;?- SHELL_STREAM_END ?&gt;--&gt;";
2
4
  export {
5
+ ESCAPED_SHELL_STREAM_END_MARK,
6
+ JSX_SHELL_STREAM_END_MARK,
3
7
  isBrowser
4
8
  };
@@ -1,5 +1,9 @@
1
1
  const APP_CONFIG_SYMBOL = "config";
2
- const getConfig = (Component) => Component[APP_CONFIG_SYMBOL];
2
+ const getConfig = (Component) => (
3
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
4
+ // @ts-expect-error
5
+ Component[APP_CONFIG_SYMBOL]
6
+ );
3
7
  const defineConfig = (Component, config) => {
4
8
  Component[APP_CONFIG_SYMBOL] = config;
5
9
  return Component;
@@ -4,7 +4,7 @@ import hoistNonReactStatics from "hoist-non-react-statics";
4
4
  import { ROUTE_MANIFEST } from "@modern-js/utils/constants";
5
5
  import {
6
6
  RuntimeReactContext
7
- } from "../runtime-context";
7
+ } from "../runtimeContext";
8
8
  import { runtime } from "./plugin";
9
9
  import { createLoaderManager } from "./loader/loaderManager";
10
10
  const IS_REACT18 = process.env.IS_REACT18 === "true";
@@ -58,12 +58,7 @@ const createApp = ({ plugins }) => {
58
58
  }
59
59
  );
60
60
  }
61
- return /* @__PURE__ */ jsx(RuntimeReactContext.Provider, {
62
- value: contextValue,
63
- children: /* @__PURE__ */ jsx(App2, {
64
- ...props
65
- })
66
- });
61
+ return /* @__PURE__ */ jsx(RuntimeReactContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(App2, { ...props }) });
67
62
  };
68
63
  return hoistNonReactStatics(WrapComponent, App2);
69
64
  }
@@ -190,12 +185,14 @@ const bootstrap = async (BootApp, id, root, ReactDOM) => {
190
185
  {},
191
186
  {
192
187
  skipNonStatic: id.staticGenerate,
188
+ // if not static generate, only non-static loader can exec on prod env
193
189
  skipStatic: process.env.NODE_ENV === "production" && !id.staticGenerate
194
190
  }
195
191
  )
196
192
  });
197
193
  const isRedirectResponse = (result) => {
198
- if (typeof Response !== "undefined" && result instanceof Response && result.status >= 300 && result.status <= 399) {
194
+ if (typeof Response !== "undefined" && // fix: ssg workflow doesn't inject Web Response
195
+ result instanceof Response && result.status >= 300 && result.status <= 399) {
199
196
  const { status } = result;
200
197
  const redirectUrl = result.headers.get("Location") || "/";
201
198
  const { ssrContext } = context;
@@ -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 {
@@ -59,6 +59,7 @@ const createLoader = (id, initialData = {
59
59
  reloading: hasLoaded && status === 1 /* loading */,
60
60
  data,
61
61
  error: error instanceof Error ? `${error.message}` : error,
62
+ // redundant fields for ssr log
62
63
  _error: error
63
64
  });
64
65
  const notify = () => {
@@ -99,6 +100,7 @@ const createLoaderManager = (initialDataMap, managerOptions = {}) => {
99
100
  id,
100
101
  typeof initialDataMap[id] !== "undefined" ? initialDataMap[id] : { data: loaderOptions.initialData },
101
102
  loaderFn,
103
+ // Todo whether static loader is exec when CSR
102
104
  skipExec
103
105
  );
104
106
  loadersMap.set(id, loader);
@@ -7,7 +7,7 @@ import {
7
7
  useEffect
8
8
  } from "react";
9
9
  import invariant from "invariant";
10
- import { RuntimeReactContext } from "../../runtime-context";
10
+ import { RuntimeReactContext } from "../../runtimeContext";
11
11
  import { LoaderStatus } from "./loaderManager";
12
12
  const useLoader = (loaderFn, options = { params: void 0 }) => {
13
13
  const context = useContext(RuntimeReactContext);
File without changes
@@ -9,14 +9,12 @@ import { DefaultRoot } from "./Root";
9
9
  function Body(props) {
10
10
  const { hasSetRoot } = useContext(DocumentStructureContext);
11
11
  const { children } = props;
12
- return /* @__PURE__ */ jsxs("body", {
13
- children: [
14
- hasSetRoot ? null : /* @__PURE__ */ jsx(DefaultRoot, {}),
15
- children,
16
- `${DOCUMENT_CHUNKSMAP_PLACEHOLDER}`,
17
- `${DOCUMENT_SSRDATASCRIPT_PLACEHOLDER}`
18
- ]
19
- });
12
+ return /* @__PURE__ */ jsxs("body", { children: [
13
+ hasSetRoot ? null : /* @__PURE__ */ jsx(DefaultRoot, {}),
14
+ children,
15
+ `${DOCUMENT_CHUNKSMAP_PLACEHOLDER}`,
16
+ `${DOCUMENT_SSRDATASCRIPT_PLACEHOLDER}`
17
+ ] });
20
18
  }
21
19
  export {
22
20
  Body
@@ -7,19 +7,15 @@ import { DOCUMENT_META_PLACEHOLDER } from "./constants";
7
7
  function Head(props) {
8
8
  const { hasSetScripts, hasSetLinks } = useContext(DocumentStructureContext);
9
9
  const { children } = props;
10
- return /* @__PURE__ */ jsxs("head", {
11
- children: [
12
- `${DOCUMENT_META_PLACEHOLDER}`,
13
- !hasSetLinks && /* @__PURE__ */ jsx(Links, {}),
14
- !hasSetScripts && /* @__PURE__ */ jsx(Scripts, {}),
15
- children
16
- ]
17
- });
10
+ return /* @__PURE__ */ jsxs("head", { children: [
11
+ `${DOCUMENT_META_PLACEHOLDER}`,
12
+ !hasSetLinks && /* @__PURE__ */ jsx(Links, {}),
13
+ !hasSetScripts && /* @__PURE__ */ jsx(Scripts, {}),
14
+ children
15
+ ] });
18
16
  }
19
17
  function DefaultHead() {
20
- return /* @__PURE__ */ jsx("head", {
21
- children: `${DOCUMENT_META_PLACEHOLDER}`
22
- });
18
+ return /* @__PURE__ */ jsx("head", { children: `${DOCUMENT_META_PLACEHOLDER}` });
23
19
  }
24
20
  export {
25
21
  DefaultHead,
@@ -34,29 +34,31 @@ function Html(props) {
34
34
  const notMissMustChild = [
35
35
  hasSetHead,
36
36
  hasSetBody
37
+ // hasSetScripts,
38
+ // hasSetRoot,
37
39
  ].every((item) => item);
38
40
  if (!notMissMustChild) {
39
- return /* @__PURE__ */ jsx("html", {
40
- children: /* @__PURE__ */ jsxs("body", {
41
- style: { color: "red" },
42
- children: [
43
- `Miss the `,
44
- [
45
- hasSetHead,
46
- hasSetBody
47
- ].map((item, index) => {
48
- return item ? null : [
49
- "Head",
50
- "Body"
51
- ][index];
52
- }),
53
- ` Element`
54
- ]
55
- })
56
- });
41
+ return /* @__PURE__ */ jsx("html", { children: /* @__PURE__ */ jsxs("body", { style: { color: "red" }, children: [
42
+ `Miss the `,
43
+ [
44
+ hasSetHead,
45
+ hasSetBody
46
+ // hasSetScripts,
47
+ // hasSetRoot,
48
+ ].map((item, index) => {
49
+ return item ? null : [
50
+ "Head",
51
+ "Body"
52
+ // 'Scripts',
53
+ // 'Root',
54
+ ][index];
55
+ }),
56
+ ` Element`
57
+ ] }) });
57
58
  }
58
- return /* @__PURE__ */ jsx("html", {
59
- children: /* @__PURE__ */ jsxs(DocumentStructureContext.Provider, {
59
+ return /* @__PURE__ */ jsx("html", { children: /* @__PURE__ */ jsxs(
60
+ DocumentStructureContext.Provider,
61
+ {
60
62
  value: {
61
63
  hasSetHead,
62
64
  hasSetScripts,
@@ -70,8 +72,8 @@ function Html(props) {
70
72
  !hasSetBody && /* @__PURE__ */ jsx(Body, {}),
71
73
  children
72
74
  ]
73
- })
74
- });
75
+ }
76
+ ) });
75
77
  }
76
78
  export {
77
79
  Html
@@ -1,9 +1,7 @@
1
1
  import { Fragment, jsx } from "react/jsx-runtime";
2
2
  import { DOCUMENT_LINKS_PLACEHOLDER } from "./constants";
3
3
  function Links() {
4
- return /* @__PURE__ */ jsx(Fragment, {
5
- children: DOCUMENT_LINKS_PLACEHOLDER
6
- });
4
+ return /* @__PURE__ */ jsx(Fragment, { children: DOCUMENT_LINKS_PLACEHOLDER });
7
5
  }
8
6
  export {
9
7
  Links
@@ -7,25 +7,19 @@ function Root(props) {
7
7
  const {
8
8
  templateParams: { mountId = "root" }
9
9
  } = useContext(DocumentContext);
10
- return /* @__PURE__ */ jsxs("div", {
11
- id: `${rootId || mountId}`,
12
- children: [
13
- `${DOCUMENT_SSR_PLACEHOLDER}`,
14
- children
15
- ]
16
- });
10
+ return /* @__PURE__ */ jsxs("div", { id: `${rootId || mountId}`, children: [
11
+ `${DOCUMENT_SSR_PLACEHOLDER}`,
12
+ children
13
+ ] });
17
14
  }
18
15
  function DefaultRoot(props) {
19
16
  const {
20
17
  templateParams: { mountId = "root" }
21
18
  } = useContext(DocumentContext);
22
- return /* @__PURE__ */ jsxs("div", {
23
- id: `${mountId}`,
24
- children: [
25
- `${DOCUMENT_SSR_PLACEHOLDER}`,
26
- props.children
27
- ]
28
- });
19
+ return /* @__PURE__ */ jsxs("div", { id: `${mountId}`, children: [
20
+ `${DOCUMENT_SSR_PLACEHOLDER}`,
21
+ props.children
22
+ ] });
29
23
  }
30
24
  export {
31
25
  DefaultRoot,
@@ -7,13 +7,11 @@ function Script(props) {
7
7
  const { content } = props;
8
8
  const contentStr = content.toString();
9
9
  const contentIIFE = encodeURIComponent(`(${contentStr})()`);
10
- return /* @__PURE__ */ jsxs(Fragment, {
11
- children: [
12
- `${DOCUMENT_SCRIPT_PLACEHOLDER_START}`,
13
- `${contentIIFE}`,
14
- `${DOCUMENT_SCRIPT_PLACEHOLDER_END}`
15
- ]
16
- });
10
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
11
+ `${DOCUMENT_SCRIPT_PLACEHOLDER_START}`,
12
+ `${contentIIFE}`,
13
+ `${DOCUMENT_SCRIPT_PLACEHOLDER_END}`
14
+ ] });
17
15
  }
18
16
  export {
19
17
  Script
@@ -1,9 +1,7 @@
1
1
  import { Fragment, jsx } from "react/jsx-runtime";
2
2
  import { DOCUMENT_SCRIPTS_PLACEHOLDER } from "./constants";
3
3
  function Scripts() {
4
- return /* @__PURE__ */ jsx(Fragment, {
5
- children: `${DOCUMENT_SCRIPTS_PLACEHOLDER}`
6
- });
4
+ return /* @__PURE__ */ jsx(Fragment, { children: `${DOCUMENT_SCRIPTS_PLACEHOLDER}` });
7
5
  }
8
6
  export {
9
7
  Scripts
@@ -60,7 +60,7 @@ var cli_default = () => ({
60
60
  }
61
61
  return async ({ htmlWebpackPlugin }) => {
62
62
  const documentParams = getDocParams({
63
- config: api.useConfigContext(),
63
+ config: api.useResolvedConfigContext(),
64
64
  entryName,
65
65
  templateParameters
66
66
  });
@@ -91,6 +91,7 @@ var cli_default = () => ({
91
91
  entryPoints: [documentFilePath],
92
92
  outfile: htmlOutputFile,
93
93
  platform: "node",
94
+ // change esbuild use the rootDir tsconfig.json as default to tempTsConfigFile
94
95
  tsconfig: tempTsConfigFile,
95
96
  target: "es6",
96
97
  loader: {
@@ -147,7 +148,7 @@ var cli_default = () => ({
147
148
  `${DOCUMENT_SCRIPT_PLACEHOLDER_START}(.*?)${DOCUMENT_SCRIPT_PLACEHOLDER_END}`,
148
149
  "g"
149
150
  ),
150
- (_scriptStr, $1) => `<script>${decodeURIComponent($1)}<\/script>`
151
+ (_scriptStr, $1) => `<script>${decodeURIComponent($1)}</script>`
151
152
  );
152
153
  }
153
154
  const finalHtml = `<!DOCTYPE html>${html}`.replace(DOCUMENT_META_PLACEHOLDER, metas).replace(DOCUMENT_SSR_PLACEHOLDER, HTML_SEPARATOR).replace(DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(DOCUMENT_LINKS_PLACEHOLDER, links).replace(
@@ -173,6 +174,7 @@ var cli_default = () => ({
173
174
  ) : { ...options == null ? void 0 : options.templateParameters };
174
175
  const templateContent = documentEntry(
175
176
  entry.entryName,
177
+ // options,
176
178
  hackParameters
177
179
  );
178
180
  const documentHtmlOptions = templateContent ? {
@@ -1,14 +1,11 @@
1
1
  import {
2
2
  getEntryOptions,
3
3
  createRuntimeExportsUtils,
4
- PLUGIN_SCHEMAS
4
+ PLUGIN_SCHEMAS,
5
+ isRouterV5 as isV5
5
6
  } from "@modern-js/utils";
6
7
  const PLUGIN_IDENTIFIER = "router";
7
8
  const ROUTES_IDENTIFIER = "routes";
8
- const isV5 = (config) => {
9
- var _a, _b;
10
- return ((_b = (_a = config == null ? void 0 : config.runtime) == null ? void 0 : _a.router) == null ? void 0 : _b.mode) === "react-router-5";
11
- };
12
9
  var cli_default = () => ({
13
10
  name: "@modern-js/plugin-router",
14
11
  required: ["@modern-js/runtime"],
@@ -1,14 +1,17 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- const DefaultNotFound = () => /* @__PURE__ */ jsx("div", {
3
- style: {
4
- margin: "150px auto",
5
- textAlign: "center",
6
- display: "flex",
7
- alignItems: "center",
8
- justifyContent: "center"
9
- },
10
- children: "404"
11
- });
2
+ const DefaultNotFound = () => /* @__PURE__ */ jsx(
3
+ "div",
4
+ {
5
+ style: {
6
+ margin: "150px auto",
7
+ textAlign: "center",
8
+ display: "flex",
9
+ alignItems: "center",
10
+ justifyContent: "center"
11
+ },
12
+ children: "404"
13
+ }
14
+ );
12
15
  export {
13
16
  DefaultNotFound
14
17
  };
@@ -0,0 +1,148 @@
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
+ ] });
99
+ };
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
+ export {
147
+ DeferredDataScripts_default as default
148
+ };