@modern-js/runtime 1.21.3 → 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 +48 -4
  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
@@ -1,22 +1,16 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
- import React, { useContext } from 'react';
3
- import { createBrowserHistory, createHashHistory } from 'history';
4
- import { Router, StaticRouter } from 'react-router-dom';
2
+ import React from 'react';
3
+ import { createBrowserRouter, createHashRouter, RouterProvider, createRoutesFromElements } from 'react-router-dom';
5
4
  import hoistNonReactStatics from 'hoist-non-react-statics';
6
- import { RuntimeReactContext } from "../../core";
7
- import { isBrowser } from "../../common";
8
- import { renderRoutes, getLocation, urlJoin } from "./utils";
5
+ import { renderRoutes } from "./utils";
9
6
  import { jsx as _jsx } from "react/jsx-runtime";
10
7
  export var routerPlugin = function routerPlugin(_ref) {
11
8
  var _ref$serverBase = _ref.serverBase,
12
9
  serverBase = _ref$serverBase === void 0 ? [] : _ref$serverBase,
13
- customHistory = _ref.history,
14
10
  _ref$supportHtml5Hist = _ref.supportHtml5History,
15
11
  supportHtml5History = _ref$supportHtml5Hist === void 0 ? true : _ref$supportHtml5Hist,
16
12
  routesConfig = _ref.routesConfig,
17
- _ref$historyOptions = _ref.historyOptions,
18
- historyOptions = _ref$historyOptions === void 0 ? {} : _ref$historyOptions;
19
- var isBrow = isBrowser();
13
+ createRoutes = _ref.createRoutes;
20
14
 
21
15
  var select = function select(pathname) {
22
16
  return serverBase.find(function (baseUrl) {
@@ -31,49 +25,37 @@ export var routerPlugin = function routerPlugin(_ref) {
31
25
  hoc: function hoc(_ref2, next) {
32
26
  var App = _ref2.App;
33
27
 
28
+ // can not get routes config, skip wrapping React Router.
29
+ // e.g. App.tsx as the entrypoint
30
+ if (!routesConfig) {
31
+ return next({
32
+ App: App
33
+ });
34
+ }
35
+
34
36
  var getRouteApp = function getRouteApp() {
35
- if (isBrow) {
37
+ return function (props) {
36
38
  var _window$_SERVER_DATA;
37
39
 
40
+ var routeElements = renderRoutes(routesConfig);
41
+ var routes = createRoutes ? createRoutes() : createRoutesFromElements(routeElements);
38
42
  var baseUrl = ((_window$_SERVER_DATA = window._SERVER_DATA) === null || _window$_SERVER_DATA === void 0 ? void 0 : _window$_SERVER_DATA.router.baseUrl) || select(location.pathname);
39
- historyOptions.basename = baseUrl === '/' ? urlJoin(baseUrl, historyOptions.basename) : baseUrl;
40
- var history = customHistory || (supportHtml5History ? createBrowserHistory(historyOptions) : createHashHistory(historyOptions));
41
- return function (props) {
42
- return /*#__PURE__*/_jsx(Router, {
43
- history: history,
44
- children: /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
45
- children: routesConfig ? renderRoutes(routesConfig, props) : null
46
- }))
47
- });
48
- };
49
- }
50
-
51
- return function (props) {
52
- var runtimeContext = useContext(RuntimeReactContext);
53
- var ssrContext = runtimeContext.ssrContext;
54
- var location = getLocation(ssrContext);
55
- var routerContext = (ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.redirection) || {};
56
- var request = ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.request;
57
- var baseUrl = request === null || request === void 0 ? void 0 : request.baseUrl;
58
- var basename = baseUrl === '/' ? urlJoin(baseUrl, historyOptions.basename) : baseUrl;
59
- return /*#__PURE__*/_jsx(StaticRouter, {
60
- basename: basename === '/' ? '' : basename,
61
- location: location,
62
- context: routerContext,
63
- children: /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
64
- children: routesConfig ? renderRoutes(routesConfig, props) : null
65
- }))
43
+ var router = supportHtml5History ? createBrowserRouter(routes, {
44
+ basename: baseUrl
45
+ }) : createHashRouter(routes, {
46
+ basename: baseUrl
66
47
  });
48
+ return /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
49
+ children: /*#__PURE__*/_jsx(RouterProvider, {
50
+ router: router
51
+ })
52
+ }));
67
53
  };
68
54
  };
69
55
 
70
56
  var RouteApp = getRouteApp();
71
57
 
72
- if (App) {
73
- RouteApp = hoistNonReactStatics(RouteApp, App);
74
- }
75
-
76
- if (routesConfig !== null && routesConfig !== void 0 && routesConfig.globalApp) {
58
+ if (routesConfig.globalApp) {
77
59
  return next({
78
60
  App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
79
61
  });
@@ -0,0 +1,174 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
5
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
6
+ import React, { useContext } from 'react';
7
+ import { unstable_createStaticHandler as createStaticHandler } from '@remix-run/router';
8
+ import { unstable_createStaticRouter as createStaticRouter, unstable_StaticRouterProvider as StaticRouterProvider } from 'react-router-dom/server';
9
+ import hoistNonReactStatics from 'hoist-non-react-statics';
10
+ import { installGlobals } from '@remix-run/node';
11
+ import { createRoutesFromElements } from 'react-router-dom';
12
+ import { RuntimeReactContext } from "../../core";
13
+ import { renderRoutes } from "./utils"; // Polyfill Web Fetch API
14
+
15
+ import { jsx as _jsx } from "react/jsx-runtime";
16
+ installGlobals(); // TODO: polish
17
+
18
+ function createFetchRequest(req) {
19
+ // const origin = `${req.protocol}://${req.get('host')}`;
20
+ var origin = "".concat(req.protocol, "://").concat(req.host); // Note: This had to take originalUrl into account for presumably vite's proxying
21
+
22
+ var url = new URL(req.originalUrl || req.url, origin);
23
+ var controller = new AbortController(); // req.on('close', () => {
24
+ // controller.abort();
25
+ // });
26
+
27
+ var init = {
28
+ method: req.method,
29
+ headers: createFetchHeaders(req.headers),
30
+ signal: controller.signal
31
+ }; // if (req.method !== 'GET' && req.method !== 'HEAD') {
32
+ // init.body = req.body;
33
+ // }
34
+
35
+ return new Request(url.href, init);
36
+ }
37
+
38
+ export function createFetchHeaders(requestHeaders) {
39
+ var headers = new Headers();
40
+
41
+ for (var _i = 0, _Object$entries = Object.entries(requestHeaders); _i < _Object$entries.length; _i++) {
42
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
43
+ key = _Object$entries$_i[0],
44
+ values = _Object$entries$_i[1];
45
+
46
+ if (values) {
47
+ if (Array.isArray(values)) {
48
+ var _iterator = _createForOfIteratorHelper(values),
49
+ _step;
50
+
51
+ try {
52
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
53
+ var value = _step.value;
54
+ headers.append(key, value);
55
+ }
56
+ } catch (err) {
57
+ _iterator.e(err);
58
+ } finally {
59
+ _iterator.f();
60
+ }
61
+ } else {
62
+ headers.set(key, values);
63
+ }
64
+ }
65
+ }
66
+
67
+ return headers;
68
+ }
69
+ export var routerPlugin = function routerPlugin(_ref) {
70
+ var routesConfig = _ref.routesConfig,
71
+ createRoutes = _ref.createRoutes;
72
+ return {
73
+ name: '@modern-js/plugin-router',
74
+ setup: function setup() {
75
+ return {
76
+ init: function init(_ref2, next) {
77
+ return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
78
+ var context, _ref3, request, routeElements, routes, _createStaticHandler, query, remixRequest, routerContext, router;
79
+
80
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
81
+ while (1) {
82
+ switch (_context.prev = _context.next) {
83
+ case 0:
84
+ context = _ref2.context;
85
+
86
+ if (routesConfig) {
87
+ _context.next = 3;
88
+ break;
89
+ }
90
+
91
+ return _context.abrupt("return", next({
92
+ context: context
93
+ }));
94
+
95
+ case 3:
96
+ _ref3 = context.ssrContext, request = _ref3.request;
97
+ routeElements = renderRoutes(routesConfig);
98
+ routes = createRoutes ? createRoutes() : createRoutesFromElements(routeElements);
99
+ _createStaticHandler = createStaticHandler(routes), query = _createStaticHandler.query;
100
+ remixRequest = createFetchRequest(request);
101
+ _context.next = 10;
102
+ return query(remixRequest);
103
+
104
+ case 10:
105
+ routerContext = _context.sent;
106
+
107
+ if (!(routerContext instanceof Response)) {
108
+ _context.next = 13;
109
+ break;
110
+ }
111
+
112
+ return _context.abrupt("return", next({
113
+ context: context
114
+ }));
115
+
116
+ case 13:
117
+ router = createStaticRouter(routes, routerContext);
118
+ context.router = router;
119
+ context.routerContext = routerContext;
120
+ return _context.abrupt("return", next({
121
+ context: context
122
+ }));
123
+
124
+ case 17:
125
+ case "end":
126
+ return _context.stop();
127
+ }
128
+ }
129
+ }, _callee);
130
+ }))();
131
+ },
132
+ hoc: function hoc(_ref4, next) {
133
+ var App = _ref4.App;
134
+
135
+ // can not get routes config, skip wrapping React Router.
136
+ // e.g. App.tsx as the entrypoint
137
+ if (!routesConfig) {
138
+ return next({
139
+ App: App
140
+ });
141
+ }
142
+
143
+ var getRouteApp = function getRouteApp() {
144
+ return function (props) {
145
+ var _useContext = useContext(RuntimeReactContext),
146
+ router = _useContext.router,
147
+ routerContext = _useContext.routerContext;
148
+
149
+ return /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
150
+ children: /*#__PURE__*/_jsx(StaticRouterProvider, {
151
+ router: router,
152
+ context: routerContext,
153
+ nonce: "the-nonce"
154
+ })
155
+ }));
156
+ };
157
+ };
158
+
159
+ var RouteApp = getRouteApp();
160
+
161
+ if (routesConfig.globalApp) {
162
+ return next({
163
+ App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
164
+ });
165
+ }
166
+
167
+ return next({
168
+ App: RouteApp
169
+ });
170
+ }
171
+ };
172
+ }
173
+ };
174
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,19 +1,68 @@
1
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
1
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
4
  var _excluded = ["Component"];
4
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
5
- import React from 'react';
6
- import { Route, matchPath } from 'react-router-dom';
5
+ import React, { Suspense } from 'react';
6
+ import { Route } from 'react-router-dom';
7
7
  import { DefaultNotFound } from "./DefaultNotFound";
8
8
  import { jsx as _jsx } from "react/jsx-runtime";
9
- export function renderRoutes(routesConfig) {
10
- var extraProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
11
9
 
10
+ var renderNestedRoute = function renderNestedRoute(nestedRoute, parent) {
11
+ var children = nestedRoute.children,
12
+ index = nestedRoute.index,
13
+ id = nestedRoute.id,
14
+ Component = nestedRoute.component;
15
+ var childElements = children === null || children === void 0 ? void 0 : children.map(function (childRoute) {
16
+ return renderNestedRoute(childRoute, nestedRoute);
17
+ });
18
+ var routeProps = {
19
+ caseSensitive: nestedRoute.caseSensitive,
20
+ path: nestedRoute.path,
21
+ id: nestedRoute.id,
22
+ loader: nestedRoute.loader,
23
+ action: nestedRoute.action,
24
+ hasErrorBoundary: nestedRoute.hasErrorBoundary,
25
+ shouldRevalidate: nestedRoute.shouldRevalidate,
26
+ handle: nestedRoute.handle,
27
+ index: nestedRoute.index,
28
+ errorElement: nestedRoute.errorElement
29
+ };
30
+
31
+ if (nestedRoute.error) {
32
+ var errorElement = /*#__PURE__*/_jsx(nestedRoute.error, {});
33
+
34
+ routeProps.errorElement = errorElement;
35
+ }
36
+
37
+ if (Component) {
38
+ if (parent !== null && parent !== void 0 && parent.loading) {
39
+ var Loading = parent.loading;
40
+ routeProps.element = /*#__PURE__*/_jsx(Suspense, {
41
+ fallback: /*#__PURE__*/_jsx(Loading, {}),
42
+ children: /*#__PURE__*/_jsx(Component, {})
43
+ });
44
+ } else {
45
+ routeProps.element = /*#__PURE__*/_jsx(Suspense, {
46
+ children: /*#__PURE__*/_jsx(Component, {})
47
+ });
48
+ }
49
+ }
50
+
51
+ var routeElement = index ? /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
52
+ index: true
53
+ }), id) : /*#__PURE__*/_jsx(Route, _objectSpread(_objectSpread({}, routeProps), {}, {
54
+ index: false,
55
+ children: childElements
56
+ }), id);
57
+ return routeElement;
58
+ };
59
+
60
+ export function getRouteComponents(routes, globalApp) {
12
61
  var Layout = function Layout(_ref) {
13
62
  var Component = _ref.Component,
14
63
  props = _objectWithoutProperties(_ref, _excluded);
15
64
 
16
- var GlobalLayout = routesConfig === null || routesConfig === void 0 ? void 0 : routesConfig.globalApp;
65
+ var GlobalLayout = globalApp;
17
66
 
18
67
  if (!GlobalLayout) {
19
68
  return /*#__PURE__*/_jsx(Component, _objectSpread({}, props));
@@ -24,40 +73,55 @@ export function renderRoutes(routesConfig) {
24
73
  }, props));
25
74
  };
26
75
 
27
- var findMatchedRoute = function findMatchedRoute(pathname) {
28
- var _routesConfig$routes;
76
+ var routeElements = [];
29
77
 
30
- return routesConfig === null || routesConfig === void 0 ? void 0 : (_routesConfig$routes = routesConfig.routes) === null || _routesConfig$routes === void 0 ? void 0 : _routesConfig$routes.find(function (route) {
31
- var info = matchPath(pathname, {
32
- path: route.path,
33
- exact: route.exact,
34
- sensitive: route.sensitive
35
- });
36
- return Boolean(info);
37
- });
38
- };
78
+ var _iterator = _createForOfIteratorHelper(routes),
79
+ _step;
39
80
 
40
- return /*#__PURE__*/_jsx(Route, {
41
- path: "/",
42
- render: function render(props) {
43
- var matchedRoute = findMatchedRoute(props.location.pathname);
81
+ try {
82
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
83
+ var route = _step.value;
44
84
 
45
- if (!matchedRoute) {
46
- return /*#__PURE__*/_jsx(DefaultNotFound, {});
47
- }
85
+ if (route.type === 'nested') {
86
+ var routeElement = renderNestedRoute(route);
87
+ routeElements.push(routeElement);
88
+ } else {
89
+ var _routeElement = /*#__PURE__*/_jsx(Route, {
90
+ path: route.path,
91
+ element: /*#__PURE__*/_jsx(Layout, {
92
+ Component: route.component
93
+ })
94
+ }, route.path);
48
95
 
49
- return /*#__PURE__*/_jsx(Route, {
50
- path: matchedRoute.path,
51
- exact: matchedRoute.exact,
52
- sensitive: matchedRoute.sensitive,
53
- render: function render(routeProps) {
54
- return /*#__PURE__*/_jsx(Layout, _objectSpread(_objectSpread({
55
- Component: matchedRoute.component
56
- }, routeProps), extraProps));
57
- }
58
- });
96
+ routeElements.push(_routeElement);
97
+ }
59
98
  }
60
- });
99
+ } catch (err) {
100
+ _iterator.e(err);
101
+ } finally {
102
+ _iterator.f();
103
+ }
104
+
105
+ routeElements.push( /*#__PURE__*/_jsx(Route, {
106
+ path: "*",
107
+ element: /*#__PURE__*/_jsx(DefaultNotFound, {})
108
+ }, "*"));
109
+ return routeElements;
110
+ }
111
+ export function renderRoutes(routesConfig) {
112
+ if (!routesConfig) {
113
+ return null;
114
+ }
115
+
116
+ var routes = routesConfig.routes,
117
+ globalApp = routesConfig.globalApp;
118
+
119
+ if (!routes) {
120
+ return null;
121
+ }
122
+
123
+ var routeElements = getRouteComponents(routes, globalApp);
124
+ return routeElements;
61
125
  }
62
126
  export function getLocation(serverContext) {
63
127
  var _url$replace;
@@ -0,0 +1,17 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ // legacy withRouter
3
+ import React from 'react';
4
+ import { useLocation, useNavigate, useParams } from 'react-router-dom';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export var withRouter = function withRouter(Component) {
7
+ return function (props) {
8
+ var location = useLocation();
9
+ var params = useParams();
10
+ var navigate = useNavigate();
11
+ return /*#__PURE__*/_jsx(Component, _objectSpread(_objectSpread({}, props), {}, {
12
+ location: location,
13
+ params: params,
14
+ navigate: navigate
15
+ }));
16
+ };
17
+ };
@@ -1,2 +1,3 @@
1
1
  import { createContext } from 'react';
2
- export var RuntimeReactContext = /*#__PURE__*/createContext({});
2
+ export var RuntimeReactContext = /*#__PURE__*/createContext({});
3
+ export var ServerRouterContext = /*#__PURE__*/createContext({});
@@ -1,5 +1,31 @@
1
+ import _typeof from "@babel/runtime/helpers/esm/typeof";
1
2
  import { getEntryOptions, SERVER_RENDER_FUNCTION_NAME, LOADABLE_STATS_FILE, isUseSSRBundle, createRuntimeExportsUtils, isSingleEntry } from '@modern-js/utils';
2
3
  var PLUGIN_IDENTIFIER = 'ssr';
4
+
5
+ var hasStringSSREntry = function hasStringSSREntry(userConfig) {
6
+ var isStreaming = function isStreaming(ssr) {
7
+ return ssr && _typeof(ssr) === 'object' && ssr.mode === 'stream';
8
+ };
9
+
10
+ var server = userConfig.server;
11
+
12
+ if (server !== null && server !== void 0 && server.ssr && !isStreaming(server.ssr)) {
13
+ return true;
14
+ }
15
+
16
+ if (server !== null && server !== void 0 && server.ssrByEntries && _typeof(server.ssrByEntries) === 'object') {
17
+ for (var _i = 0, _Object$keys = Object.keys(server.ssrByEntries); _i < _Object$keys.length; _i++) {
18
+ var name = _Object$keys[_i];
19
+
20
+ if (!isStreaming(server.ssrByEntries[name])) {
21
+ return true;
22
+ }
23
+ }
24
+ }
25
+
26
+ return false;
27
+ };
28
+
3
29
  export default (function () {
4
30
  return {
5
31
  name: '@modern-js/plugin-ssr',
@@ -23,9 +49,9 @@ export default (function () {
23
49
  CHAIN_ID = _ref.CHAIN_ID;
24
50
  var userConfig = api.useResolvedConfigContext();
25
51
 
26
- if (isUseSSRBundle(userConfig) && name !== 'server') {
52
+ if (isUseSSRBundle(userConfig) && name !== 'server' && hasStringSSREntry(userConfig)) {
27
53
  // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
28
- var LoadableWebpackPlugin = require('@modern-js/webpack/@loadable/webpack-plugin');
54
+ var LoadableWebpackPlugin = require('@loadable/webpack-plugin');
29
55
 
30
56
  chain.plugin(CHAIN_ID.PLUGIN.LOADABLE).use(LoadableWebpackPlugin, [{
31
57
  filename: LOADABLE_STATS_FILE
@@ -35,7 +61,7 @@ export default (function () {
35
61
  babel: function babel(config) {
36
62
  var userConfig = api.useResolvedConfigContext();
37
63
 
38
- if (isUseSSRBundle(userConfig)) {
64
+ if (isUseSSRBundle(userConfig) && hasStringSSREntry(userConfig)) {
39
65
  config.plugins.push(require.resolve('@loadable/babel-plugin'));
40
66
  }
41
67
  }
@@ -45,7 +71,8 @@ export default (function () {
45
71
  modifyEntryImports: function modifyEntryImports(_ref2) {
46
72
  var entrypoint = _ref2.entrypoint,
47
73
  imports = _ref2.imports;
48
- var entryName = entrypoint.entryName;
74
+ var entryName = entrypoint.entryName,
75
+ fileSystemRoutes = entrypoint.fileSystemRoutes;
49
76
  var userConfig = api.useResolvedConfigContext();
50
77
 
51
78
  var _api$useAppContext = api.useAppContext(),
@@ -55,6 +82,21 @@ export default (function () {
55
82
  pluginsExportsUtils.addExport("export { default as ssr } from '@modern-js/runtime/ssr'"); // if use ssg then set ssr config to true
56
83
 
57
84
  var ssrConfig = getEntryOptions(entryName, userConfig.server.ssr, userConfig.server.ssrByEntries, packageName);
85
+
86
+ if (_typeof(ssrConfig) === 'object' && ssrConfig.mode === 'stream') {
87
+ var _runtimeConfig$router;
88
+
89
+ var runtimeConfig = getEntryOptions(entryName, userConfig.runtime, userConfig.runtimeByEntries, packageName);
90
+
91
+ if (runtimeConfig !== null && runtimeConfig !== void 0 && (_runtimeConfig$router = runtimeConfig.router) !== null && _runtimeConfig$router !== void 0 && _runtimeConfig$router.legacy) {
92
+ throw new Error("Legacy router plugin doesn't support streaming SSR, check your config 'runtime.router'");
93
+ }
94
+
95
+ if (fileSystemRoutes && !entrypoint.nestedRoutesEntry) {
96
+ throw new Error("You should switch to file-system based router to support streaming SSR.");
97
+ }
98
+ }
99
+
58
100
  var ssgConfig = userConfig.output.ssg;
59
101
  var useSSG = 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]);
60
102
  ssrConfigMap.set(entryName, ssrConfig || useSSG);
@@ -80,7 +122,7 @@ export default (function () {
80
122
  if (ssrConfigMap.get(entrypoint.entryName)) {
81
123
  plugins.push({
82
124
  name: PLUGIN_IDENTIFIER,
83
- options: ssrConfigMap.get(entrypoint.entryName)
125
+ options: JSON.stringify(ssrConfigMap.get(entrypoint.entryName))
84
126
  });
85
127
  }
86
128