@modern-js/runtime 2.5.0-alpha.0 → 2.6.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 (135) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/cjs/cli/index.js +9 -0
  3. package/dist/cjs/common.js +0 -6
  4. package/dist/cjs/core/app-config.js +5 -1
  5. package/dist/cjs/core/compatible.js +8 -7
  6. package/dist/cjs/core/loader/index.js +4 -0
  7. package/dist/cjs/core/loader/loaderManager.js +6 -0
  8. package/dist/cjs/core/loader/useLoader.js +4 -0
  9. package/dist/cjs/document/Body.js +6 -8
  10. package/dist/cjs/document/DocumentContext.js +4 -0
  11. package/dist/cjs/document/DocumentStructureContext.js +4 -0
  12. package/dist/cjs/document/Head.js +7 -11
  13. package/dist/cjs/document/Html.js +24 -22
  14. package/dist/cjs/document/Links.js +1 -3
  15. package/dist/cjs/document/Root.js +8 -14
  16. package/dist/cjs/document/Script.js +5 -7
  17. package/dist/cjs/document/Scripts.js +1 -3
  18. package/dist/cjs/document/cli/index.js +7 -1
  19. package/dist/cjs/exports/head.js +4 -0
  20. package/dist/cjs/exports/loadable.js +4 -0
  21. package/dist/cjs/exports/styled.js +4 -0
  22. package/dist/cjs/router/cli/index.js +3 -7
  23. package/dist/cjs/router/index.js +4 -0
  24. package/dist/cjs/router/runtime/DefaultNotFound.js +13 -10
  25. package/dist/cjs/router/runtime/index.js +3 -52
  26. package/dist/cjs/router/runtime/plugin.js +6 -14
  27. package/dist/cjs/router/runtime/plugin.node.js +54 -10
  28. package/dist/cjs/router/runtime/utils.js +80 -28
  29. package/dist/cjs/router/runtime/withRouter.js +9 -6
  30. package/dist/cjs/ssr/cli/babel-plugin-ssr-loader-id.js +4 -0
  31. package/dist/cjs/ssr/cli/index.js +4 -0
  32. package/dist/cjs/ssr/index.js +10 -24
  33. package/dist/cjs/ssr/index.node.js +4 -0
  34. package/dist/cjs/ssr/prefetch.js +3 -6
  35. package/dist/cjs/ssr/react/nossr/index.js +4 -0
  36. package/dist/cjs/ssr/react/prerender/index.js +4 -0
  37. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +19 -5
  38. package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +5 -0
  39. package/dist/cjs/ssr/serverRender/renderToStream/index.js +4 -0
  40. package/dist/cjs/ssr/serverRender/renderToStream/renderToPipe.js +7 -22
  41. package/dist/cjs/ssr/serverRender/renderToStream/template.js +1 -2
  42. package/dist/cjs/ssr/serverRender/renderToString/entry.js +14 -12
  43. package/dist/cjs/ssr/serverRender/renderToString/index.js +4 -0
  44. package/dist/cjs/ssr/serverRender/renderToString/loadable.js +1 -1
  45. package/dist/cjs/ssr/serverRender/time.worker.js +1 -1
  46. package/dist/cjs/ssr/serverRender/utils.js +1 -1
  47. package/dist/cjs/ssr/utils.js +16 -4
  48. package/dist/cjs/state/index.js +4 -0
  49. package/dist/cjs/state/plugins.js +4 -0
  50. package/dist/cjs/state/runtime/index.js +4 -0
  51. package/dist/cjs/state/runtime/plugin.js +5 -7
  52. package/dist/esm/cli/index.js +5 -1
  53. package/dist/esm/common.js +1 -3
  54. package/dist/esm/core/app-config.js +3 -1
  55. package/dist/esm/core/compatible.js +3 -1
  56. package/dist/esm/core/loader/loaderManager.js +3 -1
  57. package/dist/esm/document/cli/index.js +3 -1
  58. package/dist/esm/router/cli/index.js +1 -5
  59. package/dist/esm/router/runtime/index.js +2 -3
  60. package/dist/esm/router/runtime/plugin.js +2 -5
  61. package/dist/esm/router/runtime/plugin.node.js +65 -8
  62. package/dist/esm/router/runtime/utils.js +106 -5
  63. package/dist/esm/ssr/prefetch.js +1 -0
  64. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +39 -8
  65. package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -0
  66. package/dist/esm/ssr/serverRender/renderToStream/renderToPipe.js +8 -19
  67. package/dist/esm/ssr/serverRender/renderToStream/template.js +1 -2
  68. package/dist/esm/ssr/serverRender/renderToString/entry.js +29 -16
  69. package/dist/esm/ssr/serverRender/time.worker.js +1 -1
  70. package/dist/esm/ssr/utils.js +6 -4
  71. package/dist/esm-node/cli/index.js +5 -0
  72. package/dist/esm-node/common.js +0 -4
  73. package/dist/esm-node/core/app-config.js +5 -1
  74. package/dist/esm-node/core/compatible.js +4 -7
  75. package/dist/esm-node/core/loader/loaderManager.js +2 -0
  76. package/dist/esm-node/document/Body.js +6 -8
  77. package/dist/esm-node/document/Head.js +7 -11
  78. package/dist/esm-node/document/Html.js +24 -22
  79. package/dist/esm-node/document/Links.js +1 -3
  80. package/dist/esm-node/document/Root.js +8 -14
  81. package/dist/esm-node/document/Script.js +5 -7
  82. package/dist/esm-node/document/Scripts.js +1 -3
  83. package/dist/esm-node/document/cli/index.js +3 -1
  84. package/dist/esm-node/router/cli/index.js +2 -5
  85. package/dist/esm-node/router/runtime/DefaultNotFound.js +13 -10
  86. package/dist/esm-node/router/runtime/index.js +2 -51
  87. package/dist/esm-node/router/runtime/plugin.js +2 -14
  88. package/dist/esm-node/router/runtime/plugin.node.js +53 -10
  89. package/dist/esm-node/router/runtime/utils.js +80 -22
  90. package/dist/esm-node/router/runtime/withRouter.js +9 -6
  91. package/dist/esm-node/ssr/index.js +6 -24
  92. package/dist/esm-node/ssr/prefetch.js +3 -6
  93. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +9 -5
  94. package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +1 -0
  95. package/dist/esm-node/ssr/serverRender/renderToStream/renderToPipe.js +7 -22
  96. package/dist/esm-node/ssr/serverRender/renderToStream/template.js +1 -2
  97. package/dist/esm-node/ssr/serverRender/renderToString/entry.js +10 -12
  98. package/dist/esm-node/ssr/serverRender/renderToString/loadable.js +1 -1
  99. package/dist/esm-node/ssr/serverRender/time.worker.js +1 -1
  100. package/dist/esm-node/ssr/serverRender/utils.js +1 -1
  101. package/dist/esm-node/ssr/utils.js +6 -4
  102. package/dist/esm-node/state/runtime/plugin.js +1 -7
  103. package/dist/types/common.d.ts +1 -3
  104. package/dist/types/core/index.d.ts +0 -1
  105. package/dist/types/core/loader/index.d.ts +2 -1
  106. package/dist/types/core/loader/useLoader.d.ts +15 -1
  107. package/dist/types/router/runtime/index.d.ts +2 -4
  108. package/dist/types/runtime-context.d.ts +0 -2
  109. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +0 -2
  110. package/dist/types/ssr/serverRender/renderToString/type.d.ts +1 -0
  111. package/package.json +17 -12
  112. package/dist/cjs/core/types.js +0 -15
  113. package/dist/cjs/router/index.node.js +0 -31
  114. package/dist/cjs/router/runtime/DeferredDataScripts.js +0 -148
  115. package/dist/cjs/ssr/prefetch.worker.js +0 -67
  116. package/dist/cjs/ssr/serverRender/renderToStream/index.worker.js +0 -64
  117. package/dist/cjs/ssr/serverRender/renderToString/index.worker.js +0 -58
  118. package/dist/esm/core/types.js +0 -1
  119. package/dist/esm/router/index.node.js +0 -4
  120. package/dist/esm/router/runtime/DeferredDataScripts.js +0 -158
  121. package/dist/esm/ssr/prefetch.worker.js +0 -191
  122. package/dist/esm/ssr/serverRender/renderToStream/index.worker.js +0 -32
  123. package/dist/esm/ssr/serverRender/renderToString/index.worker.js +0 -167
  124. package/dist/esm-node/core/types.js +0 -0
  125. package/dist/esm-node/router/index.node.js +0 -7
  126. package/dist/esm-node/router/runtime/DeferredDataScripts.js +0 -131
  127. package/dist/esm-node/ssr/prefetch.worker.js +0 -46
  128. package/dist/esm-node/ssr/serverRender/renderToStream/index.worker.js +0 -35
  129. package/dist/esm-node/ssr/serverRender/renderToString/index.worker.js +0 -29
  130. package/dist/types/core/types.d.ts +0 -21
  131. package/dist/types/router/index.node.d.ts +0 -3
  132. package/dist/types/router/runtime/DeferredDataScripts.d.ts +0 -8
  133. package/dist/types/ssr/prefetch.worker.d.ts +0 -13
  134. package/dist/types/ssr/serverRender/renderToStream/index.worker.d.ts +0 -6
  135. package/dist/types/ssr/serverRender/renderToString/index.worker.d.ts +0 -6
@@ -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
  ));
@@ -79,20 +83,8 @@ const routerPlugin = ({
79
83
  const routes = createRoutes ? createRoutes() : (0, import_react_router_dom.createRoutesFromElements)((0, import_utils.renderRoutes)(finalRouteConfig));
80
84
  const baseUrl = ((_a = window._SERVER_DATA) == null ? void 0 : _a.router.baseUrl) || select(location.pathname);
81
85
  const _basename = baseUrl === "/" ? (0, import_utils.urlJoin)(baseUrl, basename) : baseUrl;
82
- const hydrationData = window._ROUTER_DATA;
83
- const router = supportHtml5History ? (0, import_react_router_dom.createBrowserRouter)(routes, {
84
- basename: _basename,
85
- hydrationData
86
- }) : (0, import_react_router_dom.createHashRouter)(routes, {
87
- basename: _basename,
88
- hydrationData
89
- });
90
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
91
- ...props,
92
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.RouterProvider, {
93
- router
94
- })
95
- });
86
+ const router = supportHtml5History ? (0, import_react_router_dom.createBrowserRouter)(routes, { basename: _basename }) : (0, import_react_router_dom.createHashRouter)(routes, { basename: _basename });
87
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.RouterProvider, { router }) });
96
88
  };
97
89
  };
98
90
  const RouteApp = getRouteApp();
@@ -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
  ));
@@ -30,7 +34,8 @@ __export(plugin_node_exports, {
30
34
  module.exports = __toCommonJS(plugin_node_exports);
31
35
  var import_jsx_runtime = require("react/jsx-runtime");
32
36
  var import_react = require("react");
33
- var import_remix_router = require("@modern-js/utils/remix-router");
37
+ var import_serialize_javascript = __toESM(require("serialize-javascript"));
38
+ var import_router = require("@remix-run/router");
34
39
  var import_server = require("react-router-dom/server");
35
40
  var import_hoist_non_react_statics = __toESM(require("hoist-non-react-statics"));
36
41
  var import_react_router_dom = require("react-router-dom");
@@ -64,6 +69,26 @@ function createFetchHeaders(requestHeaders) {
64
69
  }
65
70
  return headers;
66
71
  }
72
+ function serializeErrors(errors) {
73
+ if (!errors) {
74
+ return null;
75
+ }
76
+ const entries = Object.entries(errors);
77
+ const serialized = {};
78
+ for (const [key, val] of entries) {
79
+ if ((0, import_router.isRouteErrorResponse)(val)) {
80
+ serialized[key] = { ...val, __type: "RouteErrorResponse" };
81
+ } else if (val instanceof Error) {
82
+ serialized[key] = {
83
+ message: val.message,
84
+ __type: "Error"
85
+ };
86
+ } else {
87
+ serialized[key] = val;
88
+ }
89
+ }
90
+ return serialized;
91
+ }
67
92
  const routerPlugin = ({
68
93
  basename = "",
69
94
  routesConfig,
@@ -81,7 +106,7 @@ const routerPlugin = ({
81
106
  const baseUrl = request.baseUrl;
82
107
  const _basename = baseUrl === "/" ? (0, import_utils.urlJoin)(baseUrl, basename) : baseUrl;
83
108
  const routes = createRoutes ? createRoutes() : (0, import_react_router_dom.createRoutesFromElements)((0, import_utils.renderRoutes)(routesConfig));
84
- const { query } = (0, import_remix_router.createStaticHandler)(routes, {
109
+ const { query } = (0, import_router.createStaticHandler)(routes, {
85
110
  basename: _basename
86
111
  });
87
112
  const remixRequest = createFetchRequest(request);
@@ -103,14 +128,33 @@ const routerPlugin = ({
103
128
  const getRouteApp = () => {
104
129
  return (props) => {
105
130
  const { router, routerContext } = (0, import_react.useContext)(import_core.RuntimeReactContext);
106
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(App, {
107
- ...props,
108
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_server.StaticRouterProvider, {
109
- router,
110
- context: routerContext,
111
- hydrate: false
112
- })
113
- });
131
+ const data = {
132
+ loaderData: routerContext.loaderData,
133
+ actionData: routerContext.actionData,
134
+ errors: serializeErrors(routerContext.errors)
135
+ };
136
+ const hydrateScript = `window.__staticRouterHydrationData = ${(0, import_serialize_javascript.default)(
137
+ data,
138
+ { isJSON: true }
139
+ )};`;
140
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(App, { ...props, children: [
141
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
142
+ import_server.StaticRouterProvider,
143
+ {
144
+ router,
145
+ context: routerContext,
146
+ hydrate: false
147
+ }
148
+ ),
149
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
150
+ "script",
151
+ {
152
+ suppressHydrationWarning: true,
153
+ id: "the-nonce",
154
+ dangerouslySetInnerHTML: { __html: hydrateScript }
155
+ }
156
+ )
157
+ ] });
114
158
  };
115
159
  };
116
160
  const RouteApp = getRouteApp();
@@ -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,10 +14,6 @@ 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 utils_exports = {};
25
19
  __export(utils_exports, {
@@ -31,44 +25,81 @@ __export(utils_exports, {
31
25
  });
32
26
  module.exports = __toCommonJS(utils_exports);
33
27
  var import_jsx_runtime = require("react/jsx-runtime");
28
+ var import_react = require("react");
34
29
  var import_react_router_dom = require("react-router-dom");
35
- var import_nestedRoutes = require("@modern-js/utils/nestedRoutes");
36
30
  var import_DefaultNotFound = require("./DefaultNotFound");
37
- var import_DeferredDataScripts = __toESM(require("./DeferredDataScripts"));
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, { fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Loading, {}) });
57
+ } else {
58
+ element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Loading, {}), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}) });
59
+ }
60
+ } else if (isLoadableComponent(Component) || isRoot) {
61
+ element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {});
62
+ } else {
63
+ element = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, { fallback: null, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}) });
64
+ }
65
+ } else {
66
+ nestedRoute.loading = parent == null ? void 0 : parent.loading;
67
+ }
68
+ if (element) {
69
+ routeProps.element = element;
70
+ }
71
+ const childElements = children == null ? void 0 : children.map((childRoute) => {
72
+ return renderNestedRoute(childRoute, nestedRoute);
73
+ });
74
+ const routeElement = index ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, { ...routeProps, index: true }, id) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, { ...routeProps, index: false, children: childElements }, id);
75
+ return routeElement;
76
+ };
38
77
  function getRouteComponents(routes, globalApp) {
39
78
  const Layout = ({ Component, ...props }) => {
40
79
  const GlobalLayout = globalApp;
41
80
  if (!GlobalLayout) {
42
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {
43
- ...props
44
- });
81
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ...props });
45
82
  }
46
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GlobalLayout, {
47
- Component,
48
- ...props
49
- });
83
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GlobalLayout, { Component, ...props });
50
84
  };
51
85
  const routeElements = [];
52
86
  for (const route of routes) {
53
87
  if (route.type === "nested") {
54
- const routeElement = (0, import_nestedRoutes.renderNestedRoute)(route, {
55
- DeferredDataComponent: import_DeferredDataScripts.default
56
- });
88
+ const routeElement = renderNestedRoute(route);
57
89
  routeElements.push(routeElement);
58
90
  } else {
59
- const routeElement = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, {
60
- path: route.path,
61
- element: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Layout, {
62
- Component: route.component
63
- })
64
- }, route.path);
91
+ const routeElement = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
92
+ import_react_router_dom.Route,
93
+ {
94
+ path: route.path,
95
+ element: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Layout, { Component: route.component })
96
+ },
97
+ route.path
98
+ );
65
99
  routeElements.push(routeElement);
66
100
  }
67
101
  }
68
- routeElements.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, {
69
- path: "*",
70
- element: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DefaultNotFound.DefaultNotFound, {})
71
- }, "*"));
102
+ routeElements.push(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.Route, { path: "*", element: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DefaultNotFound.DefaultNotFound, {}) }, "*"));
72
103
  return routeElements;
73
104
  }
74
105
  function renderRoutes(routesConfig) {
@@ -113,6 +144,27 @@ function standardSlash(str) {
113
144
  }
114
145
  return addr;
115
146
  }
147
+ function createLoader(route) {
148
+ const { loader } = route;
149
+ if (loader) {
150
+ return (args) => {
151
+ if (typeof route.lazyImport === "function") {
152
+ route.lazyImport();
153
+ }
154
+ return loader(args);
155
+ };
156
+ } else {
157
+ return () => {
158
+ if (typeof route.lazyImport === "function") {
159
+ route.lazyImport();
160
+ }
161
+ return null;
162
+ };
163
+ }
164
+ }
165
+ function isLoadableComponent(component) {
166
+ return component && component.displayName === "Loadable" && component.preload && typeof component.preload === "function";
167
+ }
116
168
  // Annotate the CommonJS export names for ESM import in node:
117
169
  0 && (module.exports = {
118
170
  getLocation,
@@ -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:
@@ -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
  ));
@@ -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
  ));
@@ -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,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,13 +16,21 @@ 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 buildTemplate_after_exports = {};
19
29
  __export(buildTemplate_after_exports, {
20
30
  buildShellAfterTemplate: () => buildShellAfterTemplate
21
31
  });
22
32
  module.exports = __toCommonJS(buildTemplate_after_exports);
23
- var import_serialize = require("@modern-js/utils/serialize");
33
+ var import_serialize_javascript = __toESM(require("serialize-javascript"));
24
34
  var import_buildTemplate = require("./buildTemplate.share");
25
35
  function buildShellAfterTemplate(afterAppTemplate, options) {
26
36
  const callbacks = [injectSSRDataScript];
@@ -30,7 +40,10 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
30
40
  return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
31
41
  function buildSSRDataScript() {
32
42
  const { ssrContext, renderLevel } = options;
33
- const { request } = ssrContext;
43
+ const { request, enableUnsafeCtx } = ssrContext;
44
+ const unsafeContext = {
45
+ headers: request.headers
46
+ };
34
47
  const SSRData = {
35
48
  context: {
36
49
  request: {
@@ -39,14 +52,15 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
39
52
  pathname: request.pathname,
40
53
  host: request.host,
41
54
  url: request.url,
42
- headers: request.headers,
43
- cookieMap: request.cookieMap
55
+ ...enableUnsafeCtx ? unsafeContext : {}
44
56
  }
45
57
  },
46
58
  renderLevel
47
59
  };
48
60
  return `
49
- <script>window._SSR_DATA = ${(0, import_serialize.serializeJson)(SSRData)}<\/script>
61
+ <script>window._SSR_DATA = ${(0, import_serialize_javascript.default)(SSRData, {
62
+ isJSON: true
63
+ })}</script>
50
64
  `;
51
65
  }
52
66
  }
@@ -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,16 +22,9 @@ __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");
26
25
  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 || {});
33
26
  function renderToPipe(rootElement, context, options) {
34
- let shellChunkStatus = 0 /* IDLE */;
27
+ let isShellStream = true;
35
28
  const { ssrContext } = context;
36
29
  const forUserPipe = (stream) => {
37
30
  return new Promise((resolve) => {
@@ -52,20 +45,9 @@ function renderToPipe(rootElement, context, options) {
52
45
  const injectableTransform = new import_stream.Transform({
53
46
  transform(chunk, _encoding, callback) {
54
47
  try {
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);
48
+ if (isShellStream) {
49
+ this.push(joinChunk(shellBefore, chunk, shellAfter));
50
+ isShellStream = false;
69
51
  } else {
70
52
  this.push(chunk);
71
53
  }
@@ -108,6 +90,9 @@ function renderToPipe(rootElement, context, options) {
108
90
  });
109
91
  };
110
92
  return forUserPipe;
93
+ function joinChunk(before = "", chunk, after = "") {
94
+ return `${before}${chunk.toString()}${after}`;
95
+ }
111
96
  }
112
97
  var renderToPipe_default = renderToPipe;
113
98
  // 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, routerContext } = context;
27
+ const { ssrContext } = context;
28
28
  const [beforeAppTemplate = "", afterAppHtmlTemplate = ""] = ssrContext.template.split(HTML_SEPARATOR) || [];
29
29
  const builtBeforeTemplate = (0, import_bulidTemplate.buildShellBeforeTemplate)(
30
30
  beforeAppTemplate,
@@ -32,7 +32,6 @@ const getTemplates = (context, renderLevel) => {
32
32
  );
33
33
  const builtAfterTemplate = (0, import_buildTemplate.buildShellAfterTemplate)(afterAppHtmlTemplate, {
34
34
  ssrContext,
35
- routerContext,
36
35
  renderLevel
37
36
  });
38
37
  return {