@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
@@ -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,116 +16,66 @@ 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, {
30
+ deserializeErrors: () => deserializeErrors,
20
31
  getLocation: () => getLocation,
21
32
  getRouteComponents: () => getRouteComponents,
22
33
  renderRoutes: () => renderRoutes,
34
+ serializeErrors: () => serializeErrors,
23
35
  standardSlash: () => standardSlash,
24
36
  urlJoin: () => urlJoin
25
37
  });
26
38
  module.exports = __toCommonJS(utils_exports);
27
39
  var import_jsx_runtime = require("react/jsx-runtime");
28
- var import_react = require("react");
29
40
  var import_react_router_dom = require("react-router-dom");
41
+ var import_nestedRoutes = require("@modern-js/utils/nestedRoutes");
42
+ var import_remix_router = require("@modern-js/utils/remix-router");
30
43
  var import_DefaultNotFound = require("./DefaultNotFound");
31
- const renderNestedRoute = (nestedRoute, parent) => {
32
- const { children, index, id, component, isRoot } = nestedRoute;
33
- const Component = component;
34
- const routeProps = {
35
- caseSensitive: nestedRoute.caseSensitive,
36
- path: nestedRoute.path,
37
- id: nestedRoute.id,
38
- loader: createLoader(nestedRoute),
39
- action: nestedRoute.action,
40
- hasErrorBoundary: nestedRoute.hasErrorBoundary,
41
- shouldRevalidate: nestedRoute.shouldRevalidate,
42
- handle: nestedRoute.handle,
43
- index: nestedRoute.index,
44
- element: nestedRoute.element,
45
- errorElement: nestedRoute.errorElement
46
- };
47
- if (nestedRoute.error) {
48
- const errorElement = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(nestedRoute.error, {});
49
- routeProps.errorElement = errorElement;
50
- }
51
- let element;
52
- if (Component) {
53
- if (parent == null ? void 0 : parent.loading) {
54
- const Loading = parent.loading;
55
- if (isLoadableComponent(Component)) {
56
- element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {
57
- fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Loading, {})
58
- });
59
- } else {
60
- element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, {
61
- fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Loading, {}),
62
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {})
63
- });
64
- }
65
- } else if (isLoadableComponent(Component) || isRoot) {
66
- element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {});
67
- } else {
68
- element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, {
69
- fallback: null,
70
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {})
71
- });
72
- }
73
- } else {
74
- nestedRoute.loading = parent == null ? void 0 : parent.loading;
75
- }
76
- if (element) {
77
- routeProps.element = element;
78
- }
79
- const childElements = children == null ? void 0 : children.map((childRoute) => {
80
- return renderNestedRoute(childRoute, nestedRoute);
81
- });
82
- const routeElement = index ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, {
83
- ...routeProps,
84
- index: true
85
- }, id) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, {
86
- ...routeProps,
87
- index: false,
88
- children: childElements
89
- }, id);
90
- return routeElement;
91
- };
92
- function getRouteComponents(routes, globalApp) {
44
+ var import_DeferredDataScripts = __toESM(require("./DeferredDataScripts"));
45
+ function getRouteComponents(routes, {
46
+ globalApp,
47
+ ssrMode
48
+ }) {
93
49
  const Layout = ({ Component, ...props }) => {
94
50
  const GlobalLayout = globalApp;
95
51
  if (!GlobalLayout) {
96
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {
97
- ...props
98
- });
52
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ...props });
99
53
  }
100
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GlobalLayout, {
101
- Component,
102
- ...props
103
- });
54
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GlobalLayout, { Component, ...props });
104
55
  };
105
56
  const routeElements = [];
106
57
  for (const route of routes) {
107
58
  if (route.type === "nested") {
108
- const routeElement = renderNestedRoute(route);
59
+ const routeElement = (0, import_nestedRoutes.renderNestedRoute)(route, {
60
+ DeferredDataComponent: ssrMode === "stream" ? import_DeferredDataScripts.default : void 0
61
+ });
109
62
  routeElements.push(routeElement);
110
63
  } else {
111
- const routeElement = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, {
112
- path: route.path,
113
- element: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Layout, {
114
- Component: route.component
115
- })
116
- }, route.path);
64
+ const routeElement = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
65
+ import_react_router_dom.Route,
66
+ {
67
+ path: route.path,
68
+ element: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Layout, { Component: route.component })
69
+ },
70
+ route.path
71
+ );
117
72
  routeElements.push(routeElement);
118
73
  }
119
74
  }
120
- routeElements.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, {
121
- path: "*",
122
- element: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DefaultNotFound.DefaultNotFound, {})
123
- }, "*"));
75
+ routeElements.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, { path: "*", element: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DefaultNotFound.DefaultNotFound, {}) }, "*"));
124
76
  return routeElements;
125
77
  }
126
- function renderRoutes(routesConfig) {
78
+ function renderRoutes(routesConfig, ssrMode) {
127
79
  if (!routesConfig) {
128
80
  return null;
129
81
  }
@@ -131,7 +83,7 @@ function renderRoutes(routesConfig) {
131
83
  if (!routes) {
132
84
  return null;
133
85
  }
134
- const routeElements = getRouteComponents(routes, globalApp);
86
+ const routeElements = getRouteComponents(routes, { globalApp, ssrMode });
135
87
  return routeElements;
136
88
  }
137
89
  function getLocation(serverContext) {
@@ -165,32 +117,58 @@ function standardSlash(str) {
165
117
  }
166
118
  return addr;
167
119
  }
168
- function createLoader(route) {
169
- const { loader } = route;
170
- if (loader) {
171
- return (args) => {
172
- if (typeof route.lazyImport === "function") {
173
- route.lazyImport();
174
- }
175
- return loader(args);
176
- };
177
- } else {
178
- return () => {
179
- if (typeof route.lazyImport === "function") {
180
- route.lazyImport();
181
- }
182
- return null;
183
- };
120
+ function serializeErrors(errors) {
121
+ if (!errors) {
122
+ return null;
184
123
  }
124
+ const entries = Object.entries(errors);
125
+ const serialized = {};
126
+ for (const [key, val] of entries) {
127
+ if ((0, import_remix_router.isRouteErrorResponse)(val)) {
128
+ serialized[key] = { ...val, __type: "RouteErrorResponse" };
129
+ } else if (val instanceof Error) {
130
+ serialized[key] = {
131
+ message: val.message,
132
+ stack: val.stack,
133
+ __type: "Error"
134
+ };
135
+ } else {
136
+ serialized[key] = val;
137
+ }
138
+ }
139
+ return serialized;
185
140
  }
186
- function isLoadableComponent(component) {
187
- return component && component.displayName === "Loadable" && component.preload && typeof component.preload === "function";
141
+ function deserializeErrors(errors) {
142
+ if (!errors) {
143
+ return null;
144
+ }
145
+ const entries = Object.entries(errors);
146
+ const serialized = {};
147
+ for (const [key, val] of entries) {
148
+ if (val && val.__type === "RouteErrorResponse") {
149
+ serialized[key] = new import_remix_router.ErrorResponse(
150
+ val.status,
151
+ val.statusText,
152
+ val.data,
153
+ val.internal === true
154
+ );
155
+ } else if (val && val.__type === "Error") {
156
+ const error = new Error(val.message);
157
+ error.stack = val.stack;
158
+ serialized[key] = error;
159
+ } else {
160
+ serialized[key] = val;
161
+ }
162
+ }
163
+ return serialized;
188
164
  }
189
165
  // Annotate the CommonJS export names for ESM import in node:
190
166
  0 && (module.exports = {
167
+ deserializeErrors,
191
168
  getLocation,
192
169
  getRouteComponents,
193
170
  renderRoutes,
171
+ serializeErrors,
194
172
  standardSlash,
195
173
  urlJoin
196
174
  });
@@ -27,12 +27,15 @@ const withRouter = (Component) => {
27
27
  const location = (0, import_react_router_dom.useLocation)();
28
28
  const params = (0, import_react_router_dom.useParams)();
29
29
  const navigate = (0, import_react_router_dom.useNavigate)();
30
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {
31
- ...props,
32
- location,
33
- params,
34
- navigate
35
- });
30
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
31
+ Component,
32
+ {
33
+ ...props,
34
+ location,
35
+ params,
36
+ navigate
37
+ }
38
+ );
36
39
  };
37
40
  };
38
41
  // Annotate the CommonJS export names for ESM import in node:
@@ -15,12 +15,12 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var runtime_context_exports = {};
19
- __export(runtime_context_exports, {
18
+ var runtimeContext_exports = {};
19
+ __export(runtimeContext_exports, {
20
20
  RuntimeReactContext: () => RuntimeReactContext,
21
21
  ServerRouterContext: () => ServerRouterContext
22
22
  });
23
- module.exports = __toCommonJS(runtime_context_exports);
23
+ module.exports = __toCommonJS(runtimeContext_exports);
24
24
  var import_react = require("react");
25
25
  const RuntimeReactContext = (0, import_react.createContext)({});
26
26
  const ServerRouterContext = (0, import_react.createContext)({});
@@ -13,6 +13,10 @@ var __copyProps = (to, from, except, desc) => {
13
13
  return to;
14
14
  };
15
15
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
16
+ // If the importer is in node compatibility mode or this is not an ESM
17
+ // file that has been converted to a CommonJS file using a Babel-
18
+ // compatible transform (i.e. "__esModule" has not been set), then set
19
+ // "default" to the CommonJS "module.exports" for node compatibility.
16
20
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
17
21
  mod
18
22
  ));
@@ -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
  ));
@@ -60,6 +64,8 @@ var cli_default = () => ({
60
64
  return {
61
65
  source: {
62
66
  alias: {
67
+ // ensure that all packages use the same storage in @modern-js/utils/ssr
68
+ "@modern-js/utils/ssr": require.resolve("@modern-js/utils/ssr"),
63
69
  "@modern-js/runtime/plugins": pluginsExportsUtils.getPath()
64
70
  }
65
71
  },
@@ -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
  ));
@@ -56,51 +60,33 @@ const ssr = (config) => ({
56
60
  return stringSSRHydrate();
57
61
  function stringSSRHydrate() {
58
62
  if (renderLevel === import_types.RenderLevel.CLIENT_RENDER || renderLevel === import_types.RenderLevel.SERVER_PREFETCH) {
59
- ModernRender(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
60
- context
61
- }));
63
+ ModernRender(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { context }));
62
64
  } else if (renderLevel === import_types.RenderLevel.SERVER_RENDER) {
63
65
  if ((0, import_utils.isReact18)()) {
64
66
  (0, import_component.loadableReady)(() => {
65
- let SSRApp = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_withCallback.WithCallback, {
66
- callback,
67
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
68
- context: hydrateContext
69
- })
70
- });
67
+ let SSRApp = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_withCallback.WithCallback, { callback, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { context: hydrateContext }) });
71
68
  SSRApp = (0, import_hoist_non_react_statics.default)(SSRApp, App);
72
69
  ModernHydrate(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SSRApp, {}));
73
70
  });
74
71
  } else {
75
72
  (0, import_component.loadableReady)(() => {
76
- ModernHydrate(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
77
- context: hydrateContext
78
- }), callback);
73
+ ModernHydrate(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { context: hydrateContext }), callback);
79
74
  });
80
75
  }
81
76
  } else {
82
77
  console.warn(
83
78
  `unknow render level: ${renderLevel}, execute render()`
84
79
  );
85
- ModernRender(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
86
- context
87
- }));
80
+ ModernRender(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { context }));
88
81
  }
89
82
  }
90
83
  function streamSSRHydrate() {
91
84
  if (renderLevel === import_types.RenderLevel.SERVER_RENDER) {
92
- let SSRApp = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_withCallback.WithCallback, {
93
- callback,
94
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
95
- context: hydrateContext
96
- })
97
- });
85
+ let SSRApp = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_withCallback.WithCallback, { callback, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { context: hydrateContext }) });
98
86
  SSRApp = (0, import_hoist_non_react_statics.default)(SSRApp, App);
99
87
  ModernHydrate(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SSRApp, {}));
100
88
  } else {
101
- ModernRender(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
102
- context
103
- }));
89
+ ModernRender(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { context }));
104
90
  }
105
91
  }
106
92
  },
@@ -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
  ));
@@ -46,6 +50,7 @@ const ssr = (config = {}) => ({
46
50
  init({ context }, next) {
47
51
  const { request } = context.ssrContext;
48
52
  context.ssrContext.request = (0, import_utils.formatServer)(request);
53
+ context.ssrContext.mode = config.mode;
49
54
  return next({ context });
50
55
  },
51
56
  pickContext: ({ context, pickedContext }, next) => {
@@ -33,13 +33,9 @@ const prefetch = async (App, context) => (0, import_ssr.run)(context.ssrContext.
33
33
  stats: loadableStats,
34
34
  entrypoints: [ssrContext.entryName].filter(Boolean)
35
35
  });
36
- (0, import_server.renderToStaticMarkup)(extractor.collectChunks(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
37
- context
38
- })));
36
+ (0, import_server.renderToStaticMarkup)(extractor.collectChunks(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { context })));
39
37
  } else {
40
- (0, import_server.renderToStaticMarkup)(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
41
- context
42
- }));
38
+ (0, import_server.renderToStaticMarkup)(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { context }));
43
39
  }
44
40
  if (!context.loaderManager.hasPendingLoaders()) {
45
41
  return {
@@ -60,6 +56,7 @@ const prefetch = async (App, context) => (0, import_ssr.run)(context.ssrContext.
60
56
  loadersData,
61
57
  initialData: context.initialData,
62
58
  i18nData: context.__i18nData__,
59
+ // todo: move to plugin state
63
60
  storeState: (_a = context == null ? void 0 : context.store) == null ? void 0 : _a.getState()
64
61
  };
65
62
  });
@@ -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
  ));
@@ -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
  ));
@@ -1,8 +1,6 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __export = (target, all) => {
8
6
  for (var name in all)
@@ -16,17 +14,13 @@ var __copyProps = (to, from, except, desc) => {
16
14
  }
17
15
  return to;
18
16
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
- mod
22
- ));
23
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
18
  var buildTemplate_after_exports = {};
25
19
  __export(buildTemplate_after_exports, {
26
20
  buildShellAfterTemplate: () => buildShellAfterTemplate
27
21
  });
28
22
  module.exports = __toCommonJS(buildTemplate_after_exports);
29
- var import_serialize_javascript = __toESM(require("serialize-javascript"));
23
+ var import_serialize = require("@modern-js/utils/serialize");
30
24
  var import_buildTemplate = require("./buildTemplate.share");
31
25
  function buildShellAfterTemplate(afterAppTemplate, options) {
32
26
  const callbacks = [injectSSRDataScript];
@@ -36,7 +30,10 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
36
30
  return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
37
31
  function buildSSRDataScript() {
38
32
  const { ssrContext, renderLevel } = options;
39
- const { request } = ssrContext;
33
+ const { request, enableUnsafeCtx } = ssrContext;
34
+ const unsafeContext = {
35
+ headers: request.headers
36
+ };
40
37
  const SSRData = {
41
38
  context: {
42
39
  request: {
@@ -45,16 +42,13 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
45
42
  pathname: request.pathname,
46
43
  host: request.host,
47
44
  url: request.url,
48
- headers: request.headers,
49
- cookieMap: request.cookieMap
45
+ ...enableUnsafeCtx ? unsafeContext : {}
50
46
  }
51
47
  },
52
48
  renderLevel
53
49
  };
54
50
  return `
55
- <script>window._SSR_DATA = ${(0, import_serialize_javascript.default)(SSRData, {
56
- isJSON: true
57
- })}<\/script>
51
+ <script>window._SSR_DATA = ${(0, import_serialize.serializeJson)(SSRData)}</script>
58
52
  `;
59
53
  }
60
54
  }
@@ -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
  ));
@@ -37,6 +41,7 @@ function getHeadTemplate(beforeEntryTemplate, context) {
37
41
  const helmetData = import_react_helmet.default.renderStatic();
38
42
  return helmetData ? (0, import_helmet.default)(headTemplate2, helmetData) : headTemplate2;
39
43
  },
44
+ // @TODO: prefetch scripts of lazy component
40
45
  injectCss
41
46
  ];
42
47
  const [headTemplate = ""] = beforeEntryTemplate.match(import_buildTemplate.HEAD_REG_EXP) || [];
@@ -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
  ));
@@ -22,9 +22,16 @@ __export(renderToPipe_exports, {
22
22
  module.exports = __toCommonJS(renderToPipe_exports);
23
23
  var import_stream = require("stream");
24
24
  var import_types = require("../types");
25
+ var import_common = require("../../../common");
25
26
  var import_template = require("./template");
27
+ var ShellChunkStatus = /* @__PURE__ */ ((ShellChunkStatus2) => {
28
+ ShellChunkStatus2[ShellChunkStatus2["IDLE"] = 0] = "IDLE";
29
+ ShellChunkStatus2[ShellChunkStatus2["START"] = 1] = "START";
30
+ ShellChunkStatus2[ShellChunkStatus2["FINIESH"] = 2] = "FINIESH";
31
+ return ShellChunkStatus2;
32
+ })(ShellChunkStatus || {});
26
33
  function renderToPipe(rootElement, context, options) {
27
- let isShellStream = true;
34
+ let shellChunkStatus = 0 /* IDLE */;
28
35
  const { ssrContext } = context;
29
36
  const forUserPipe = (stream) => {
30
37
  return new Promise((resolve) => {
@@ -45,9 +52,20 @@ function renderToPipe(rootElement, context, options) {
45
52
  const injectableTransform = new import_stream.Transform({
46
53
  transform(chunk, _encoding, callback) {
47
54
  try {
48
- if (isShellStream) {
49
- this.push(joinChunk(shellBefore, chunk, shellAfter));
50
- isShellStream = false;
55
+ if (shellChunkStatus !== 2 /* FINIESH */) {
56
+ let concatedChunk = chunk.toString();
57
+ if (shellChunkStatus === 0 /* IDLE */) {
58
+ concatedChunk = `${shellBefore}${concatedChunk}`;
59
+ shellChunkStatus = 1 /* START */;
60
+ }
61
+ if (shellChunkStatus === 1 /* START */ && concatedChunk.endsWith(import_common.ESCAPED_SHELL_STREAM_END_MARK)) {
62
+ concatedChunk = concatedChunk.replace(
63
+ import_common.ESCAPED_SHELL_STREAM_END_MARK,
64
+ shellAfter
65
+ );
66
+ shellChunkStatus = 2 /* FINIESH */;
67
+ }
68
+ this.push(concatedChunk);
51
69
  } else {
52
70
  this.push(chunk);
53
71
  }
@@ -90,9 +108,6 @@ function renderToPipe(rootElement, context, options) {
90
108
  });
91
109
  };
92
110
  return forUserPipe;
93
- function joinChunk(before = "", chunk, after = "") {
94
- return `${before}${chunk.toString()}${after}`;
95
- }
96
111
  }
97
112
  var renderToPipe_default = renderToPipe;
98
113
  // Annotate the CommonJS export names for ESM import in node:
@@ -24,7 +24,7 @@ var import_buildTemplate = require("./buildTemplate.after");
24
24
  var import_bulidTemplate = require("./bulidTemplate.before");
25
25
  const HTML_SEPARATOR = "<!--<?- html ?>-->";
26
26
  const getTemplates = (context, renderLevel) => {
27
- const { ssrContext } = context;
27
+ const { ssrContext, routerContext } = context;
28
28
  const [beforeAppTemplate = "", afterAppHtmlTemplate = ""] = ssrContext.template.split(HTML_SEPARATOR) || [];
29
29
  const builtBeforeTemplate = (0, import_bulidTemplate.buildShellBeforeTemplate)(
30
30
  beforeAppTemplate,
@@ -32,6 +32,7 @@ const getTemplates = (context, renderLevel) => {
32
32
  );
33
33
  const builtAfterTemplate = (0, import_buildTemplate.buildShellAfterTemplate)(afterAppHtmlTemplate, {
34
34
  ssrContext,
35
+ routerContext,
35
36
  renderLevel
36
37
  });
37
38
  return {