@modern-js/runtime 1.21.2 → 2.0.0-beta.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 +52 -0
  2. package/dist/js/modern/cli/index.js +1 -1
  3. package/dist/js/modern/core/index.js +1 -1
  4. package/dist/js/modern/index.js +1 -0
  5. package/dist/js/modern/router/cli/index.js +24 -8
  6. package/dist/js/modern/router/runtime/index.js +1 -1
  7. package/dist/js/modern/router/runtime/plugin.js +26 -44
  8. package/dist/js/modern/router/runtime/plugin.node.js +143 -0
  9. package/dist/js/modern/router/runtime/types.js +1 -0
  10. package/dist/js/modern/router/runtime/utils.js +97 -37
  11. package/dist/js/modern/router/runtime/withRouter.js +22 -0
  12. package/dist/js/modern/runtime-context.js +2 -1
  13. package/dist/js/modern/ssr/cli/index.js +44 -5
  14. package/dist/js/modern/ssr/index.js +67 -43
  15. package/dist/js/modern/ssr/index.node.js +6 -2
  16. package/dist/js/modern/ssr/serverRender/index.js +12 -26
  17. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +38 -0
  18. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.share.js +5 -0
  19. package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +24 -0
  20. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +73 -0
  21. package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +26 -0
  22. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +61 -0
  23. package/dist/js/modern/ssr/serverRender/renderToStream/styledComponent.js +11 -0
  24. package/dist/js/modern/ssr/serverRender/renderToStream/template.js +22 -0
  25. package/dist/js/modern/ssr/serverRender/renderToStream/type.js +0 -0
  26. package/dist/js/modern/ssr/serverRender/{entry.js → renderToString/entry.js} +4 -6
  27. package/dist/js/modern/ssr/serverRender/renderToString/index.js +31 -0
  28. package/dist/js/modern/ssr/serverRender/{loadable.js → renderToString/loadable.js} +5 -13
  29. package/dist/js/modern/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -0
  30. package/dist/js/modern/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
  31. package/dist/js/modern/ssr/serverRender/{template.js → renderToString/template.js} +0 -0
  32. package/dist/js/modern/ssr/serverRender/{type.js → renderToString/type.js} +0 -1
  33. package/dist/js/modern/ssr/serverRender/types.js +2 -0
  34. package/dist/js/modern/ssr/serverRender/utils.js +24 -0
  35. package/dist/js/modern/ssr/utils.js +9 -3
  36. package/dist/js/node/cli/index.js +1 -1
  37. package/dist/js/node/core/index.js +8 -1
  38. package/dist/js/node/index.js +8 -0
  39. package/dist/js/node/router/cli/index.js +24 -8
  40. package/dist/js/node/router/runtime/index.js +4 -4
  41. package/dist/js/node/router/runtime/plugin.js +24 -49
  42. package/dist/js/node/router/runtime/plugin.node.js +169 -0
  43. package/dist/js/node/router/runtime/types.js +5 -0
  44. package/dist/js/node/router/runtime/utils.js +97 -35
  45. package/dist/js/node/router/runtime/withRouter.js +35 -0
  46. package/dist/js/node/runtime-context.js +4 -2
  47. package/dist/js/node/ssr/cli/index.js +43 -5
  48. package/dist/js/node/ssr/index.js +66 -43
  49. package/dist/js/node/ssr/index.node.js +7 -3
  50. package/dist/js/node/ssr/serverRender/index.js +13 -35
  51. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +49 -0
  52. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +14 -0
  53. package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +37 -0
  54. package/dist/js/node/ssr/serverRender/renderToStream/index.js +90 -0
  55. package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +34 -0
  56. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +70 -0
  57. package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +19 -0
  58. package/dist/js/node/ssr/serverRender/renderToStream/template.js +32 -0
  59. package/dist/js/node/ssr/serverRender/renderToStream/type.js +0 -0
  60. package/dist/js/node/ssr/serverRender/{entry.js → renderToString/entry.js} +13 -15
  61. package/dist/js/node/ssr/serverRender/renderToString/index.js +47 -0
  62. package/dist/js/node/ssr/serverRender/{loadable.js → renderToString/loadable.js} +7 -14
  63. package/dist/js/node/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -0
  64. package/dist/js/node/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
  65. package/dist/js/node/ssr/serverRender/{template.js → renderToString/template.js} +0 -0
  66. package/dist/js/node/ssr/serverRender/{type.js → renderToString/type.js} +0 -1
  67. package/dist/js/node/ssr/serverRender/types.js +13 -0
  68. package/dist/js/node/ssr/serverRender/utils.js +34 -0
  69. package/dist/js/node/ssr/utils.js +13 -4
  70. package/dist/js/treeshaking/cli/index.js +1 -1
  71. package/dist/js/treeshaking/core/index.js +1 -1
  72. package/dist/js/treeshaking/index.js +1 -0
  73. package/dist/js/treeshaking/router/cli/index.js +24 -8
  74. package/dist/js/treeshaking/router/runtime/index.js +1 -1
  75. package/dist/js/treeshaking/router/runtime/plugin.js +25 -43
  76. package/dist/js/treeshaking/router/runtime/plugin.node.js +174 -0
  77. package/dist/js/treeshaking/router/runtime/types.js +1 -0
  78. package/dist/js/treeshaking/router/runtime/utils.js +100 -36
  79. package/dist/js/treeshaking/router/runtime/withRouter.js +17 -0
  80. package/dist/js/treeshaking/runtime-context.js +2 -1
  81. package/dist/js/treeshaking/ssr/cli/index.js +47 -5
  82. package/dist/js/treeshaking/ssr/index.js +74 -45
  83. package/dist/js/treeshaking/ssr/index.node.js +6 -2
  84. package/dist/js/treeshaking/ssr/serverRender/index.js +41 -55
  85. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +33 -0
  86. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.share.js +7 -0
  87. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +29 -0
  88. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +120 -0
  89. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +24 -0
  90. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +57 -0
  91. package/dist/js/treeshaking/ssr/serverRender/renderToStream/styledComponent.js +10 -0
  92. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +29 -0
  93. package/dist/js/treeshaking/ssr/serverRender/renderToStream/type.js +0 -0
  94. package/dist/js/treeshaking/ssr/serverRender/{entry.js → renderToString/entry.js} +3 -3
  95. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +48 -0
  96. package/dist/js/treeshaking/ssr/serverRender/{loadable.js → renderToString/loadable.js} +5 -17
  97. package/dist/js/treeshaking/ssr/serverRender/{reduce.js → renderToString/reduce.js} +0 -0
  98. package/dist/js/treeshaking/ssr/serverRender/{styledComponent.js → renderToString/styledComponent.js} +0 -0
  99. package/dist/js/treeshaking/ssr/serverRender/{template.js → renderToString/template.js} +0 -0
  100. package/dist/js/treeshaking/ssr/serverRender/{type.js → renderToString/type.js} +0 -1
  101. package/dist/js/treeshaking/ssr/serverRender/types.js +2 -0
  102. package/dist/js/treeshaking/ssr/serverRender/{measure.js → utils.js} +16 -0
  103. package/dist/js/treeshaking/ssr/utils.js +15 -3
  104. package/dist/types/common.d.ts +0 -2
  105. package/dist/types/core/index.d.ts +1 -1
  106. package/dist/types/core/plugin.d.ts +1 -1
  107. package/dist/types/exports/server.d.ts +21 -1
  108. package/dist/types/index.d.ts +1 -0
  109. package/dist/types/router/runtime/DefaultNotFound.d.ts +1 -0
  110. package/dist/types/router/runtime/index.d.ts +3 -3
  111. package/dist/types/router/runtime/plugin.d.ts +2 -45
  112. package/dist/types/router/runtime/plugin.node.d.ts +8 -0
  113. package/dist/types/router/runtime/types.d.ts +38 -0
  114. package/dist/types/router/runtime/utils.d.ts +5 -2
  115. package/dist/types/router/runtime/withRouter.d.ts +8 -0
  116. package/dist/types/runtime-context.d.ts +2 -1
  117. package/dist/types/ssr/index.d.ts +2 -2
  118. package/dist/types/ssr/index.node.d.ts +1 -1
  119. package/dist/types/ssr/react/nossr/index.d.ts +3 -1
  120. package/dist/types/ssr/serverRender/index.d.ts +2 -3
  121. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +6 -0
  122. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.share.d.ts +3 -0
  123. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +1 -0
  124. package/dist/types/ssr/serverRender/renderToStream/index.d.ts +6 -0
  125. package/dist/types/ssr/serverRender/renderToStream/loadable.d.ts +16 -0
  126. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +8 -0
  127. package/dist/types/ssr/serverRender/renderToStream/styledComponent.d.ts +12 -0
  128. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +3 -0
  129. package/dist/types/ssr/serverRender/renderToStream/type.d.ts +4 -0
  130. package/dist/types/ssr/serverRender/{entry.d.ts → renderToString/entry.d.ts} +2 -2
  131. package/dist/types/ssr/serverRender/renderToString/index.d.ts +6 -0
  132. package/dist/types/ssr/serverRender/{loadable.d.ts → renderToString/loadable.d.ts} +0 -0
  133. package/dist/types/ssr/serverRender/{reduce.d.ts → renderToString/reduce.d.ts} +0 -0
  134. package/dist/types/ssr/serverRender/{styledComponent.d.ts → renderToString/styledComponent.d.ts} +0 -0
  135. package/dist/types/ssr/serverRender/{template.d.ts → renderToString/template.d.ts} +0 -0
  136. package/dist/types/ssr/serverRender/{type.d.ts → renderToString/type.d.ts} +1 -8
  137. package/dist/types/ssr/serverRender/types.d.ts +18 -0
  138. package/dist/types/ssr/serverRender/utils.d.ts +3 -0
  139. package/dist/types/ssr/utils.d.ts +4 -2
  140. package/dist/types/state/runtime/plugin.d.ts +1 -1
  141. package/package.json +57 -73
  142. package/types/index.d.ts +13 -0
  143. package/types/router.d.ts +14 -0
  144. package/dist/js/modern/ssr/serverRender/measure.js +0 -11
  145. package/dist/js/node/ssr/serverRender/measure.js +0 -20
  146. package/dist/types/ssr/serverRender/measure.d.ts +0 -1
  147. package/lib/types.d.ts +0 -10
  148. package/type.d.ts +0 -5
@@ -4,11 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getLocation = getLocation;
7
+ exports.getRouteComponents = getRouteComponents;
7
8
  exports.renderRoutes = renderRoutes;
8
9
  exports.standardSlash = standardSlash;
9
10
  exports.urlJoin = void 0;
10
11
 
11
- var _react = _interopRequireDefault(require("react"));
12
+ var _react = _interopRequireWildcard(require("react"));
12
13
 
13
14
  var _reactRouterDom = require("react-router-dom");
14
15
 
@@ -18,7 +19,13 @@ var _jsxRuntime = require("react/jsx-runtime");
18
19
 
19
20
  const _excluded = ["Component"];
20
21
 
21
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
27
+
28
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
22
29
 
23
30
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
24
31
 
@@ -26,18 +33,65 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
26
33
 
27
34
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
28
35
 
29
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
36
+ const renderNestedRoute = (nestedRoute, parent) => {
37
+ const {
38
+ children,
39
+ index,
40
+ id,
41
+ component: Component
42
+ } = nestedRoute;
43
+ const childElements = children === null || children === void 0 ? void 0 : children.map(childRoute => {
44
+ return renderNestedRoute(childRoute, nestedRoute);
45
+ });
46
+ const routeProps = {
47
+ caseSensitive: nestedRoute.caseSensitive,
48
+ path: nestedRoute.path,
49
+ id: nestedRoute.id,
50
+ loader: nestedRoute.loader,
51
+ action: nestedRoute.action,
52
+ hasErrorBoundary: nestedRoute.hasErrorBoundary,
53
+ shouldRevalidate: nestedRoute.shouldRevalidate,
54
+ handle: nestedRoute.handle,
55
+ index: nestedRoute.index,
56
+ errorElement: nestedRoute.errorElement
57
+ };
30
58
 
31
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
59
+ if (nestedRoute.error) {
60
+ const errorElement = /*#__PURE__*/(0, _jsxRuntime.jsx)(nestedRoute.error, {});
61
+ routeProps.errorElement = errorElement;
62
+ }
63
+
64
+ if (Component) {
65
+ if (parent !== null && parent !== void 0 && parent.loading) {
66
+ const Loading = parent.loading;
67
+ routeProps.element = /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Suspense, {
68
+ fallback: /*#__PURE__*/(0, _jsxRuntime.jsx)(Loading, {}),
69
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {})
70
+ });
71
+ } else {
72
+ routeProps.element = /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Suspense, {
73
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {})
74
+ });
75
+ }
76
+ }
32
77
 
33
- function renderRoutes(routesConfig, extraProps = {}) {
78
+ const routeElement = index ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, _objectSpread(_objectSpread({}, routeProps), {}, {
79
+ index: true
80
+ }), id) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, _objectSpread(_objectSpread({}, routeProps), {}, {
81
+ index: false,
82
+ children: childElements
83
+ }), id);
84
+ return routeElement;
85
+ };
86
+
87
+ function getRouteComponents(routes, globalApp) {
34
88
  const Layout = _ref => {
35
89
  let {
36
90
  Component
37
91
  } = _ref,
38
92
  props = _objectWithoutProperties(_ref, _excluded);
39
93
 
40
- const GlobalLayout = routesConfig === null || routesConfig === void 0 ? void 0 : routesConfig.globalApp;
94
+ const GlobalLayout = globalApp;
41
95
 
42
96
  if (!GlobalLayout) {
43
97
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, _objectSpread({}, props));
@@ -48,38 +102,46 @@ function renderRoutes(routesConfig, extraProps = {}) {
48
102
  }, props));
49
103
  };
50
104
 
51
- const findMatchedRoute = pathname => {
52
- var _routesConfig$routes;
105
+ const routeElements = [];
53
106
 
54
- return routesConfig === null || routesConfig === void 0 ? void 0 : (_routesConfig$routes = routesConfig.routes) === null || _routesConfig$routes === void 0 ? void 0 : _routesConfig$routes.find(route => {
55
- const info = (0, _reactRouterDom.matchPath)(pathname, {
107
+ for (const route of routes) {
108
+ if (route.type === 'nested') {
109
+ const routeElement = renderNestedRoute(route);
110
+ routeElements.push(routeElement);
111
+ } else {
112
+ const routeElement = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
56
113
  path: route.path,
57
- exact: route.exact,
58
- sensitive: route.sensitive
59
- });
60
- return Boolean(info);
61
- });
62
- };
63
-
64
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
65
- path: "/",
66
- render: props => {
67
- const matchedRoute = findMatchedRoute(props.location.pathname);
68
-
69
- if (!matchedRoute) {
70
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DefaultNotFound.DefaultNotFound, {});
71
- }
72
-
73
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
74
- path: matchedRoute.path,
75
- exact: matchedRoute.exact,
76
- sensitive: matchedRoute.sensitive,
77
- render: routeProps => /*#__PURE__*/(0, _jsxRuntime.jsx)(Layout, _objectSpread(_objectSpread({
78
- Component: matchedRoute.component
79
- }, routeProps), extraProps))
80
- });
114
+ element: /*#__PURE__*/(0, _jsxRuntime.jsx)(Layout, {
115
+ Component: route.component
116
+ })
117
+ }, route.path);
118
+ routeElements.push(routeElement);
81
119
  }
82
- });
120
+ }
121
+
122
+ routeElements.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Route, {
123
+ path: "*",
124
+ element: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DefaultNotFound.DefaultNotFound, {})
125
+ }, "*"));
126
+ return routeElements;
127
+ }
128
+
129
+ function renderRoutes(routesConfig) {
130
+ if (!routesConfig) {
131
+ return null;
132
+ }
133
+
134
+ const {
135
+ routes,
136
+ globalApp
137
+ } = routesConfig;
138
+
139
+ if (!routes) {
140
+ return null;
141
+ }
142
+
143
+ const routeElements = getRouteComponents(routes, globalApp);
144
+ return routeElements;
83
145
  }
84
146
 
85
147
  function getLocation(serverContext) {
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.withRouter = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactRouterDom = require("react-router-dom");
11
+
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+
18
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19
+
20
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
+
22
+ const withRouter = Component => {
23
+ return props => {
24
+ const location = (0, _reactRouterDom.useLocation)();
25
+ const params = (0, _reactRouterDom.useParams)();
26
+ const navigate = (0, _reactRouterDom.useNavigate)();
27
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, _objectSpread(_objectSpread({}, props), {}, {
28
+ location: location,
29
+ params: params,
30
+ navigate: navigate
31
+ }));
32
+ };
33
+ };
34
+
35
+ exports.withRouter = withRouter;
@@ -3,9 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.RuntimeReactContext = void 0;
6
+ exports.ServerRouterContext = exports.RuntimeReactContext = void 0;
7
7
 
8
8
  var _react = require("react");
9
9
 
10
10
  const RuntimeReactContext = /*#__PURE__*/(0, _react.createContext)({});
11
- exports.RuntimeReactContext = RuntimeReactContext;
11
+ exports.RuntimeReactContext = RuntimeReactContext;
12
+ const ServerRouterContext = /*#__PURE__*/(0, _react.createContext)({});
13
+ exports.ServerRouterContext = ServerRouterContext;
@@ -9,6 +9,28 @@ var _utils = require("@modern-js/utils");
9
9
 
10
10
  const PLUGIN_IDENTIFIER = 'ssr';
11
11
 
12
+ const hasStringSSREntry = userConfig => {
13
+ const isStreaming = ssr => ssr && typeof ssr === 'object' && ssr.mode === 'stream';
14
+
15
+ const {
16
+ server
17
+ } = userConfig;
18
+
19
+ if (server !== null && server !== void 0 && server.ssr && !isStreaming(server.ssr)) {
20
+ return true;
21
+ }
22
+
23
+ if (server !== null && server !== void 0 && server.ssrByEntries && typeof server.ssrByEntries === 'object') {
24
+ for (const name of Object.keys(server.ssrByEntries)) {
25
+ if (!isStreaming(server.ssrByEntries[name])) {
26
+ return true;
27
+ }
28
+ }
29
+ }
30
+
31
+ return false;
32
+ };
33
+
12
34
  var _default = () => ({
13
35
  name: '@modern-js/plugin-ssr',
14
36
  required: ['@modern-js/runtime'],
@@ -32,9 +54,9 @@ var _default = () => ({
32
54
  }) => {
33
55
  const userConfig = api.useResolvedConfigContext();
34
56
 
35
- if ((0, _utils.isUseSSRBundle)(userConfig) && name !== 'server') {
57
+ if ((0, _utils.isUseSSRBundle)(userConfig) && name !== 'server' && hasStringSSREntry(userConfig)) {
36
58
  // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
37
- const LoadableWebpackPlugin = require('@modern-js/webpack/@loadable/webpack-plugin');
59
+ const LoadableWebpackPlugin = require('@loadable/webpack-plugin');
38
60
 
39
61
  chain.plugin(CHAIN_ID.PLUGIN.LOADABLE).use(LoadableWebpackPlugin, [{
40
62
  filename: _utils.LOADABLE_STATS_FILE
@@ -44,7 +66,7 @@ var _default = () => ({
44
66
  babel: config => {
45
67
  const userConfig = api.useResolvedConfigContext();
46
68
 
47
- if ((0, _utils.isUseSSRBundle)(userConfig)) {
69
+ if ((0, _utils.isUseSSRBundle)(userConfig) && hasStringSSREntry(userConfig)) {
48
70
  config.plugins.push(require.resolve('@loadable/babel-plugin'));
49
71
  }
50
72
  }
@@ -57,7 +79,8 @@ var _default = () => ({
57
79
  imports
58
80
  }) {
59
81
  const {
60
- entryName
82
+ entryName,
83
+ fileSystemRoutes
61
84
  } = entrypoint;
62
85
  const userConfig = api.useResolvedConfigContext();
63
86
  const {
@@ -67,6 +90,21 @@ var _default = () => ({
67
90
  pluginsExportsUtils.addExport(`export { default as ssr } from '@modern-js/runtime/ssr'`); // if use ssg then set ssr config to true
68
91
 
69
92
  const ssrConfig = (0, _utils.getEntryOptions)(entryName, userConfig.server.ssr, userConfig.server.ssrByEntries, packageName);
93
+
94
+ if (typeof ssrConfig === 'object' && ssrConfig.mode === 'stream') {
95
+ var _runtimeConfig$router;
96
+
97
+ const runtimeConfig = (0, _utils.getEntryOptions)(entryName, userConfig.runtime, userConfig.runtimeByEntries, packageName);
98
+
99
+ if (runtimeConfig !== null && runtimeConfig !== void 0 && (_runtimeConfig$router = runtimeConfig.router) !== null && _runtimeConfig$router !== void 0 && _runtimeConfig$router.legacy) {
100
+ throw new Error(`Legacy router plugin doesn't support streaming SSR, check your config 'runtime.router'`);
101
+ }
102
+
103
+ if (fileSystemRoutes && !entrypoint.nestedRoutesEntry) {
104
+ throw new Error(`You should switch to file-system based router to support streaming SSR.`);
105
+ }
106
+ }
107
+
70
108
  const ssgConfig = userConfig.output.ssg;
71
109
  const useSSG = (0, _utils.isSingleEntry)(entrypoints) ? Boolean(ssgConfig) : ssgConfig === true || typeof (ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[0]) === 'function' || Boolean(ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[entryName]);
72
110
  ssrConfigMap.set(entryName, ssrConfig || useSSG);
@@ -93,7 +131,7 @@ var _default = () => ({
93
131
  if (ssrConfigMap.get(entrypoint.entryName)) {
94
132
  plugins.push({
95
133
  name: PLUGIN_IDENTIFIER,
96
- options: ssrConfigMap.get(entrypoint.entryName)
134
+ options: JSON.stringify(ssrConfigMap.get(entrypoint.entryName))
97
135
  });
98
136
  }
99
137
 
@@ -12,7 +12,7 @@ var _component = require("@loadable/component");
12
12
 
13
13
  var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
14
14
 
15
- var _type = require("./serverRender/type");
15
+ var _types = require("./serverRender/types");
16
16
 
17
17
  var _withCallback = require("./react/withCallback");
18
18
 
@@ -42,9 +42,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
42
42
 
43
43
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
44
44
 
45
- const IS_REACT18 = process.env.IS_REACT18 === 'true';
46
-
47
- const ssr = _ => ({
45
+ const ssr = config => ({
48
46
  name: '@modern-js/plugin-ssr',
49
47
  setup: () => {
50
48
  const mockResp = (0, _utils.mockResponse)();
@@ -55,49 +53,74 @@ const ssr = _ => ({
55
53
  ModernRender,
56
54
  ModernHydrate
57
55
  }) => {
58
- var _window, _window$_SSR_DATA;
59
-
60
- // if render level not exist, use client render
61
- const renderLevel = ((_window = window) === null || _window === void 0 ? void 0 : (_window$_SSR_DATA = _window._SSR_DATA) === null || _window$_SSR_DATA === void 0 ? void 0 : _window$_SSR_DATA.renderLevel) || _type.RenderLevel.CLIENT_RENDER; // client render and server prefetch use same logic
62
-
63
- if (renderLevel === _type.RenderLevel.CLIENT_RENDER || renderLevel === _type.RenderLevel.SERVER_PREFETCH) {
64
- ModernRender( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
65
- context: context
66
- }));
67
- } else if (renderLevel === _type.RenderLevel.SERVER_RENDER) {
68
- (0, _component.loadableReady)(() => {
69
- const hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
70
- _hydration: true
71
- });
72
-
73
- const callback = () => {
74
- // won't cause component re-render because context's reference identity doesn't change
75
- delete hydrateContext._hydration;
76
- }; // callback: https://github.com/reactwg/react-18/discussions/5
77
-
78
-
79
- if (IS_REACT18) {
80
- let SSRApp = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_withCallback.WithCallback, {
81
- callback: callback,
82
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
83
- context: hydrateContext
84
- })
85
- });
56
+ const hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
57
+ _hydration: true
58
+ });
59
+
60
+ const callback = () => {
61
+ // won't cause component re-render because context's reference identity doesn't change
62
+ delete hydrateContext._hydration;
63
+ }; // react streamSSR hydrate
64
+
65
+
66
+ if ((0, _utils.isReact18)() && config.mode === 'stream') {
67
+ return streamSSRHydrate();
68
+ } // react stringSSR hydrate
69
+
70
+
71
+ return stringSSRHydrate();
72
+
73
+ function stringSSRHydrate() {
74
+ var _window, _window$_SSR_DATA;
86
75
 
87
- SSRApp = (0, _hoistNonReactStatics.default)(SSRApp, App);
88
- ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(SSRApp, {}));
76
+ // if render level not exist, use client render
77
+ const renderLevel = ((_window = window) === null || _window === void 0 ? void 0 : (_window$_SSR_DATA = _window._SSR_DATA) === null || _window$_SSR_DATA === void 0 ? void 0 : _window$_SSR_DATA.renderLevel) || _types.RenderLevel.CLIENT_RENDER; // client render and server prefetch use same logic
78
+
79
+ if (renderLevel === _types.RenderLevel.CLIENT_RENDER || renderLevel === _types.RenderLevel.SERVER_PREFETCH) {
80
+ ModernRender( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
81
+ context: context
82
+ }));
83
+ } else if (renderLevel === _types.RenderLevel.SERVER_RENDER) {
84
+ if ((0, _utils.isReact18)()) {
85
+ (0, _component.loadableReady)(() => {
86
+ // callback: https://github.com/reactwg/react-18/discussions/5
87
+ let SSRApp = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_withCallback.WithCallback, {
88
+ callback: callback,
89
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
90
+ context: hydrateContext
91
+ })
92
+ });
93
+
94
+ SSRApp = (0, _hoistNonReactStatics.default)(SSRApp, App);
95
+ ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(SSRApp, {}));
96
+ });
89
97
  } else {
90
- ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
91
- context: hydrateContext
92
- }), callback);
98
+ (0, _component.loadableReady)(() => {
99
+ ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
100
+ context: hydrateContext
101
+ }), callback);
102
+ });
93
103
  }
104
+ } else {
105
+ // unknown renderlevel or renderlevel is server prefetch.
106
+ console.warn(`unknow render level: ${renderLevel}, execute render()`);
107
+ ModernRender( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
108
+ context: context
109
+ }));
110
+ }
111
+ }
112
+
113
+ function streamSSRHydrate() {
114
+ // callback: https://github.com/reactwg/react-18/discussions/5
115
+ let SSRApp = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_withCallback.WithCallback, {
116
+ callback: callback,
117
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
118
+ context: hydrateContext
119
+ })
94
120
  });
95
- } else {
96
- // unknown renderlevel or renderlevel is server prefetch.
97
- console.warn(`unknow render level: ${renderLevel}, execute render()`);
98
- ModernRender( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
99
- context: context
100
- }));
121
+
122
+ SSRApp = (0, _hoistNonReactStatics.default)(SSRApp, App);
123
+ ModernHydrate( /*#__PURE__*/(0, _jsxRuntime.jsx)(SSRApp, {}));
101
124
  }
102
125
  },
103
126
 
@@ -10,12 +10,12 @@ exports.ssr = exports.default = void 0;
10
10
 
11
11
  var _core = require("../core");
12
12
 
13
- var _serverRender = require("./serverRender");
14
-
15
13
  var _prefetch = _interopRequireDefault(require("./prefetch"));
16
14
 
17
15
  var _utils = require("./utils");
18
16
 
17
+ var _serverRender = _interopRequireDefault(require("./serverRender"));
18
+
19
19
  var _react = require("./react");
20
20
 
21
21
  Object.keys(_react).forEach(function (key) {
@@ -53,7 +53,11 @@ const ssr = (config = {}) => ({
53
53
  registeredApps.add(App);
54
54
  }
55
55
 
56
- const html = await (0, _serverRender.render)(context, config, App);
56
+ const html = await (0, _serverRender.default)({
57
+ context: context,
58
+ App: App,
59
+ config
60
+ });
57
61
  return html;
58
62
  },
59
63
 
@@ -3,43 +3,21 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.render = void 0;
6
+ exports.default = serverRender;
7
7
 
8
- var _ssr = require("@modern-js/utils/ssr");
8
+ var _utils = require("../utils");
9
9
 
10
- var _prerender = require("../react/prerender");
10
+ /* eslint-disable eslint-comments/disable-enable-pair */
11
11
 
12
- var _entry = _interopRequireDefault(require("./entry"));
13
-
14
- var _measure = require("./measure");
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- const render = async (ctx, config, App) => {
19
- const {
20
- ssrContext
21
- } = ctx;
22
- return (0, _ssr.run)(ssrContext.request.headers, async () => {
23
- const entry = new _entry.default({
24
- ctx: ssrContext,
25
- App,
26
- config
27
- });
28
- entry.metrics.emitCounter('app.visit.count', 1);
29
- const end = (0, _measure.time)();
30
- const html = await entry.renderToHtml(ctx);
31
- const cost = end();
32
- entry.logger.info('App Render Total cost = %d ms', cost);
33
- entry.metrics.emitTimer('app.render.cost', cost);
34
-
35
- const cacheConfig = _prerender.PreRender.config();
36
-
37
- if (cacheConfig) {
38
- ctx.ssrContext.cacheConfig = cacheConfig;
39
- }
12
+ /* eslint-disable @typescript-eslint/no-var-requires */
40
13
 
14
+ /* eslint-disable @typescript-eslint/no-require-imports */
15
+ async function serverRender(options) {
16
+ if ((0, _utils.isReact18)() && options.config.mode === 'stream') {
17
+ const pipe = await require("./renderToStream").render(options);
18
+ return pipe;
19
+ } else {
20
+ const html = await require("./renderToString").render(options);
41
21
  return html;
42
- });
43
- };
44
-
45
- exports.render = render;
22
+ }
23
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildShellAfterTemplate = buildShellAfterTemplate;
7
+
8
+ var _serializeJavascript = _interopRequireDefault(require("serialize-javascript"));
9
+
10
+ var _buildTemplate = require("./buildTemplate.share");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function buildShellAfterTemplate(afterAppTemplate, options) {
15
+ const callbacks = [injectSSRDataScript];
16
+ return (0, _buildTemplate.buildTemplate)(afterAppTemplate, callbacks);
17
+
18
+ function injectSSRDataScript(template) {
19
+ const ssrDataScript = buildSSRDataScript();
20
+ return template.replace('<!--<?- SSRDataScript ?>-->', ssrDataScript);
21
+
22
+ function buildSSRDataScript() {
23
+ const {
24
+ ssrContext
25
+ } = options.context;
26
+ const {
27
+ request
28
+ } = ssrContext;
29
+ const SSRData = {
30
+ context: {
31
+ request: {
32
+ params: request.params,
33
+ query: request.query,
34
+ pathname: request.pathname,
35
+ host: request.host,
36
+ url: request.url,
37
+ headers: request.headers,
38
+ cookieMap: request.cookieMap
39
+ }
40
+ }
41
+ };
42
+ return `
43
+ <script>window._SSR_DATA = ${(0, _serializeJavascript.default)(SSRData, {
44
+ isJSON: true
45
+ })}</script>
46
+ `;
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.HEAD_REG_EXP = void 0;
7
+ exports.buildTemplate = buildTemplate;
8
+ // share script
9
+ const HEAD_REG_EXP = /<head(.|\n)*>(.|\n)*<\/head>/;
10
+ exports.HEAD_REG_EXP = HEAD_REG_EXP;
11
+
12
+ function buildTemplate(template, callbacks) {
13
+ return callbacks.reduce((template, buildTemplateCb) => buildTemplateCb(template), template);
14
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildShellBeforeTemplate = buildShellBeforeTemplate;
7
+
8
+ var _reactHelmet = _interopRequireDefault(require("react-helmet"));
9
+
10
+ var _helmet = _interopRequireDefault(require("../helmet"));
11
+
12
+ var _buildTemplate = require("./buildTemplate.share");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ // build head template
17
+ function getHeadTemplate(beforeEntryTemplate) {
18
+ const callbacks = [headTemplate => {
19
+ const helmetData = _reactHelmet.default.renderStatic();
20
+
21
+ return helmetData ? (0, _helmet.default)(headTemplate, helmetData) : headTemplate;
22
+ }];
23
+ const [headTemplate = ''] = beforeEntryTemplate.match(_buildTemplate.HEAD_REG_EXP) || [];
24
+
25
+ if (!headTemplate.length) {
26
+ return '';
27
+ }
28
+
29
+ return (0, _buildTemplate.buildTemplate)(headTemplate, callbacks); // @TODO: inject css chunks of lazy components
30
+ // @TODO: prefetch scripts of lazy component
31
+ } // build script
32
+
33
+
34
+ function buildShellBeforeTemplate(beforeAppTemplate) {
35
+ const headTemplate = getHeadTemplate(beforeAppTemplate);
36
+ return beforeAppTemplate.replace(_buildTemplate.HEAD_REG_EXP, headTemplate);
37
+ }