@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
@@ -0,0 +1,24 @@
1
+ export function getLoadableScripts(extractor) {
2
+ const check = scripts => (scripts || '').includes('__LOADABLE_REQUIRED_CHUNKS___ext');
3
+
4
+ const scripts = extractor.getScriptTags();
5
+
6
+ if (!check(scripts)) {
7
+ return '';
8
+ }
9
+
10
+ return scripts.split('</script>') // 前两个 script为 loadable 必须的 script
11
+ .slice(0, 2).map(i => `${i}</script>`).join('');
12
+ }
13
+
14
+ const getLatency = hrtime => {
15
+ const [s, ns] = process.hrtime(hrtime);
16
+ return s * 1e3 + ns / 1e6;
17
+ };
18
+
19
+ export const time = () => {
20
+ const hrtime = process.hrtime();
21
+ return () => {
22
+ return getLatency(hrtime);
23
+ };
24
+ };
@@ -4,6 +4,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
4
4
 
5
5
  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; }
6
6
 
7
+ export const isReact18 = () => process.env.IS_REACT18 === 'true';
7
8
  export const formatServer = request => {
8
9
  const {
9
10
  cookie = '',
@@ -46,16 +47,21 @@ export const formatClient = request => {
46
47
  export const mockResponse = () => {
47
48
  return {
48
49
  setHeader() {
49
- console.info('setHeader can only be used in the server side');
50
+ console.warn('response.setHeader() can only be used in the server side');
50
51
  },
51
52
 
52
53
  status() {
53
- console.info('status can only be used in the server side');
54
+ console.warn('response.status() can only be used in the server side');
55
+ },
56
+
57
+ get locals() {
58
+ console.warn('response.locals can only be used in the server side');
59
+ return {};
54
60
  }
55
61
 
56
62
  };
57
63
  };
58
- export const isCrossOrigin = (url, base) => {
64
+ export const isCrossOrigin = (url = '', base) => {
59
65
  if (url.startsWith('/') || url.startsWith('./')) {
60
66
  return false;
61
67
  } else if (!url.includes(base)) {
@@ -20,7 +20,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
20
20
  var _default = () => ({
21
21
  name: '@modern-js/runtime',
22
22
  post: ['@modern-js/plugin-router', '@modern-js/plugin-ssr', '@modern-js/plugin-state', '@modern-js/plugin-design-token'],
23
- usePlugins: [(0, _cli.default)(), (0, _cli3.default)(), (0, _cli2.default)()],
23
+ usePlugins: [(0, _cli.default)(), (0, _cli2.default)(), (0, _cli3.default)()],
24
24
  setup: api => {
25
25
  return {
26
26
  config() {
@@ -11,7 +11,8 @@ var _exportNames = {
11
11
  registerPrefetch: true,
12
12
  defineConfig: true,
13
13
  getConfig: true,
14
- RuntimeReactContext: true
14
+ RuntimeReactContext: true,
15
+ ServerRouterContext: true
15
16
  };
16
17
  Object.defineProperty(exports, "RuntimeReactContext", {
17
18
  enumerable: true,
@@ -19,6 +20,12 @@ Object.defineProperty(exports, "RuntimeReactContext", {
19
20
  return _runtimeContext.RuntimeReactContext;
20
21
  }
21
22
  });
23
+ Object.defineProperty(exports, "ServerRouterContext", {
24
+ enumerable: true,
25
+ get: function () {
26
+ return _runtimeContext.ServerRouterContext;
27
+ }
28
+ });
22
29
  Object.defineProperty(exports, "createPlugin", {
23
30
  enumerable: true,
24
31
  get: function () {
@@ -33,6 +33,12 @@ Object.defineProperty(exports, "defineConfig", {
33
33
  return _core.defineConfig;
34
34
  }
35
35
  });
36
+ Object.defineProperty(exports, "isBrowser", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _common.isBrowser;
40
+ }
41
+ });
36
42
  Object.defineProperty(exports, "registerInit", {
37
43
  enumerable: true,
38
44
  get: function () {
@@ -58,4 +64,6 @@ Object.defineProperty(exports, "useRuntimeContext", {
58
64
  }
59
65
  });
60
66
 
67
+ var _common = require("./common");
68
+
61
69
  var _core = require("./core");
@@ -43,11 +43,14 @@ var _default = () => ({
43
43
  entrypoint,
44
44
  imports
45
45
  }) {
46
+ var _userConfig$runtime, _userConfig$runtime$r;
47
+
46
48
  const {
47
49
  entryName,
48
50
  fileSystemRoutes
49
51
  } = entrypoint;
50
52
  const userConfig = api.useResolvedConfigContext();
53
+ const isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime = userConfig.runtime) === null || _userConfig$runtime === void 0 ? void 0 : (_userConfig$runtime$r = _userConfig$runtime.router) === null || _userConfig$runtime$r === void 0 ? void 0 : _userConfig$runtime$r.legacy);
51
54
  const {
52
55
  packageName
53
56
  } = api.useAppContext();
@@ -55,12 +58,14 @@ var _default = () => ({
55
58
  runtimeConfigMap.set(entryName, runtimeConfig);
56
59
 
57
60
  if (runtimeConfig !== null && runtimeConfig !== void 0 && runtimeConfig.router) {
58
- imports.push({
59
- value: '@modern-js/runtime/plugins',
60
- specifiers: [{
61
- imported: PLUGIN_IDENTIFIER
62
- }]
63
- });
61
+ if (!isLegacy) {
62
+ imports.push({
63
+ value: '@modern-js/runtime/plugins',
64
+ specifiers: [{
65
+ imported: PLUGIN_IDENTIFIER
66
+ }]
67
+ });
68
+ }
64
69
  } else if (fileSystemRoutes) {
65
70
  throw new Error(`should enable runtime.router for entry ${entryName}`);
66
71
  }
@@ -75,6 +80,8 @@ var _default = () => ({
75
80
  entrypoint,
76
81
  plugins
77
82
  }) {
83
+ var _userConfig$runtime2, _userConfig$runtime2$;
84
+
78
85
  const {
79
86
  entryName,
80
87
  fileSystemRoutes
@@ -82,9 +89,11 @@ var _default = () => ({
82
89
  const {
83
90
  serverRoutes
84
91
  } = api.useAppContext();
92
+ const userConfig = api.useResolvedConfigContext();
93
+ const isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime2 = userConfig.runtime) === null || _userConfig$runtime2 === void 0 ? void 0 : (_userConfig$runtime2$ = _userConfig$runtime2.router) === null || _userConfig$runtime2$ === void 0 ? void 0 : _userConfig$runtime2$.legacy);
85
94
  const runtimeConfig = runtimeConfigMap.get(entryName);
86
95
 
87
- if (runtimeConfig.router) {
96
+ if (runtimeConfig.router && !isLegacy) {
88
97
  // Todo: plugin-router best to only handle manage client route.
89
98
  // here support base server route usage, part for compatibility
90
99
  const serverBase = serverRoutes.filter(route => route.entryName === entryName).map(route => route.urlPath).sort((a, b) => a.length - b.length > 0 ? -1 : 1);
@@ -105,7 +114,14 @@ var _default = () => ({
105
114
  },
106
115
 
107
116
  addRuntimeExports() {
108
- pluginsExportsUtils.addExport(`export { default as router } from '@modern-js/runtime/router'`);
117
+ var _userConfig$runtime3, _userConfig$runtime3$;
118
+
119
+ const userConfig = api.useResolvedConfigContext();
120
+ const isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime3 = userConfig.runtime) === null || _userConfig$runtime3 === void 0 ? void 0 : (_userConfig$runtime3$ = _userConfig$runtime3.router) === null || _userConfig$runtime3$ === void 0 ? void 0 : _userConfig$runtime3$.legacy);
121
+
122
+ if (!isLegacy) {
123
+ pluginsExportsUtils.addExport(`export { default as router } from '@modern-js/runtime/router'`);
124
+ }
109
125
  }
110
126
 
111
127
  };
@@ -22,16 +22,16 @@ Object.keys(_reactRouterDom).forEach(function (key) {
22
22
  });
23
23
  });
24
24
 
25
- var _history = require("history");
25
+ var _withRouter = require("./withRouter");
26
26
 
27
- Object.keys(_history).forEach(function (key) {
27
+ Object.keys(_withRouter).forEach(function (key) {
28
28
  if (key === "default" || key === "__esModule") return;
29
29
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
30
- if (key in exports && exports[key] === _history[key]) return;
30
+ if (key in exports && exports[key] === _withRouter[key]) return;
31
31
  Object.defineProperty(exports, key, {
32
32
  enumerable: true,
33
33
  get: function () {
34
- return _history[key];
34
+ return _withRouter[key];
35
35
  }
36
36
  });
37
37
  });
@@ -5,28 +5,18 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.routerPlugin = void 0;
7
7
 
8
- var _react = _interopRequireWildcard(require("react"));
9
-
10
- var _history = require("history");
8
+ var _react = _interopRequireDefault(require("react"));
11
9
 
12
10
  var _reactRouterDom = require("react-router-dom");
13
11
 
14
12
  var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
15
13
 
16
- var _core = require("../../core");
17
-
18
- var _common = require("../../common");
19
-
20
14
  var _utils = require("./utils");
21
15
 
22
16
  var _jsxRuntime = require("react/jsx-runtime");
23
17
 
24
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
19
 
26
- 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); }
27
-
28
- 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; }
29
-
30
20
  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; }
31
21
 
32
22
  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; }
@@ -35,13 +25,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
35
25
 
36
26
  const routerPlugin = ({
37
27
  serverBase: _serverBase = [],
38
- history: customHistory,
39
28
  supportHtml5History: _supportHtml5History = true,
40
29
  routesConfig,
41
- historyOptions: _historyOptions = {}
30
+ createRoutes
42
31
  }) => {
43
- const isBrow = (0, _common.isBrowser)();
44
-
45
32
  const select = pathname => _serverBase.find(baseUrl => pathname.search(baseUrl) === 0) || '/';
46
33
 
47
34
  return {
@@ -51,49 +38,37 @@ const routerPlugin = ({
51
38
  hoc: ({
52
39
  App
53
40
  }, next) => {
41
+ // can not get routes config, skip wrapping React Router.
42
+ // e.g. App.tsx as the entrypoint
43
+ if (!routesConfig) {
44
+ return next({
45
+ App
46
+ });
47
+ }
48
+
54
49
  const getRouteApp = () => {
55
- if (isBrow) {
50
+ return props => {
56
51
  var _window$_SERVER_DATA;
57
52
 
53
+ const routeElements = (0, _utils.renderRoutes)(routesConfig);
54
+ const routes = createRoutes ? createRoutes() : (0, _reactRouterDom.createRoutesFromElements)(routeElements);
58
55
  const baseUrl = ((_window$_SERVER_DATA = window._SERVER_DATA) === null || _window$_SERVER_DATA === void 0 ? void 0 : _window$_SERVER_DATA.router.baseUrl) || select(location.pathname);
59
- _historyOptions.basename = baseUrl === '/' ? (0, _utils.urlJoin)(baseUrl, _historyOptions.basename) : baseUrl;
60
- const history = customHistory || (_supportHtml5History ? (0, _history.createBrowserHistory)(_historyOptions) : (0, _history.createHashHistory)(_historyOptions));
61
- return props => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Router, {
62
- history: history,
63
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, _objectSpread(_objectSpread({}, props), {}, {
64
- children: routesConfig ? (0, _utils.renderRoutes)(routesConfig, props) : null
65
- }))
66
- });
67
- }
68
-
69
- return props => {
70
- const runtimeContext = (0, _react.useContext)(_core.RuntimeReactContext);
71
- const {
72
- ssrContext
73
- } = runtimeContext;
74
- const location = (0, _utils.getLocation)(ssrContext);
75
- const routerContext = (ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.redirection) || {};
76
- const request = ssrContext === null || ssrContext === void 0 ? void 0 : ssrContext.request;
77
- const baseUrl = request === null || request === void 0 ? void 0 : request.baseUrl;
78
- const basename = baseUrl === '/' ? (0, _utils.urlJoin)(baseUrl, _historyOptions.basename) : baseUrl;
79
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.StaticRouter, {
80
- basename: basename === '/' ? '' : basename,
81
- location: location,
82
- context: routerContext,
83
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(App, _objectSpread(_objectSpread({}, props), {}, {
84
- children: routesConfig ? (0, _utils.renderRoutes)(routesConfig, props) : null
85
- }))
56
+ const router = _supportHtml5History ? (0, _reactRouterDom.createBrowserRouter)(routes, {
57
+ basename: baseUrl
58
+ }) : (0, _reactRouterDom.createHashRouter)(routes, {
59
+ basename: baseUrl
86
60
  });
61
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(App, _objectSpread(_objectSpread({}, props), {}, {
62
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.RouterProvider, {
63
+ router: router
64
+ })
65
+ }));
87
66
  };
88
67
  };
89
68
 
90
- let RouteApp = getRouteApp();
91
-
92
- if (App) {
93
- RouteApp = (0, _hoistNonReactStatics.default)(RouteApp, App);
94
- }
69
+ const RouteApp = getRouteApp();
95
70
 
96
- if (routesConfig !== null && routesConfig !== void 0 && routesConfig.globalApp) {
71
+ if (routesConfig.globalApp) {
97
72
  return next({
98
73
  App: (0, _hoistNonReactStatics.default)(RouteApp, routesConfig.globalApp)
99
74
  });
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createFetchHeaders = createFetchHeaders;
7
+ exports.routerPlugin = void 0;
8
+
9
+ var _react = _interopRequireWildcard(require("react"));
10
+
11
+ var _router = require("@remix-run/router");
12
+
13
+ var _server = require("react-router-dom/server");
14
+
15
+ var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
16
+
17
+ var _node = require("@remix-run/node");
18
+
19
+ var _reactRouterDom = require("react-router-dom");
20
+
21
+ var _core = require("../../core");
22
+
23
+ var _utils = require("./utils");
24
+
25
+ var _jsxRuntime = require("react/jsx-runtime");
26
+
27
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
+
29
+ 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); }
30
+
31
+ 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; }
32
+
33
+ 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; }
34
+
35
+ 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; }
36
+
37
+ 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; }
38
+
39
+ // Polyfill Web Fetch API
40
+ (0, _node.installGlobals)(); // TODO: polish
41
+
42
+ function createFetchRequest(req) {
43
+ // const origin = `${req.protocol}://${req.get('host')}`;
44
+ const origin = `${req.protocol}://${req.host}`; // Note: This had to take originalUrl into account for presumably vite's proxying
45
+
46
+ const url = new URL(req.originalUrl || req.url, origin);
47
+ const controller = new AbortController(); // req.on('close', () => {
48
+ // controller.abort();
49
+ // });
50
+
51
+ const init = {
52
+ method: req.method,
53
+ headers: createFetchHeaders(req.headers),
54
+ signal: controller.signal
55
+ }; // if (req.method !== 'GET' && req.method !== 'HEAD') {
56
+ // init.body = req.body;
57
+ // }
58
+
59
+ return new Request(url.href, init);
60
+ }
61
+
62
+ function createFetchHeaders(requestHeaders) {
63
+ const headers = new Headers();
64
+
65
+ for (const [key, values] of Object.entries(requestHeaders)) {
66
+ if (values) {
67
+ if (Array.isArray(values)) {
68
+ for (const value of values) {
69
+ headers.append(key, value);
70
+ }
71
+ } else {
72
+ headers.set(key, values);
73
+ }
74
+ }
75
+ }
76
+
77
+ return headers;
78
+ }
79
+
80
+ const routerPlugin = ({
81
+ routesConfig,
82
+ createRoutes
83
+ }) => {
84
+ return {
85
+ name: '@modern-js/plugin-router',
86
+ setup: () => {
87
+ return {
88
+ async init({
89
+ context
90
+ }, next) {
91
+ // can not get routes config, skip wrapping React Router.
92
+ // e.g. App.tsx as the entrypoint
93
+ if (!routesConfig) {
94
+ return next({
95
+ context
96
+ });
97
+ }
98
+
99
+ const {
100
+ request
101
+ } = context.ssrContext;
102
+ const routeElements = (0, _utils.renderRoutes)(routesConfig);
103
+ const routes = createRoutes ? createRoutes() : (0, _reactRouterDom.createRoutesFromElements)(routeElements);
104
+ const {
105
+ query
106
+ } = (0, _router.unstable_createStaticHandler)(routes);
107
+ const remixRequest = createFetchRequest(request);
108
+ const routerContext = await query(remixRequest);
109
+
110
+ if (routerContext instanceof Response) {
111
+ // TODO: resolve repsonse ?
112
+ return next({
113
+ context
114
+ });
115
+ }
116
+
117
+ const router = (0, _server.unstable_createStaticRouter)(routes, routerContext);
118
+ context.router = router;
119
+ context.routerContext = routerContext;
120
+ return next({
121
+ context
122
+ });
123
+ },
124
+
125
+ hoc: ({
126
+ App
127
+ }, next) => {
128
+ // can not get routes config, skip wrapping React Router.
129
+ // e.g. App.tsx as the entrypoint
130
+ if (!routesConfig) {
131
+ return next({
132
+ App
133
+ });
134
+ }
135
+
136
+ const getRouteApp = () => {
137
+ return props => {
138
+ const {
139
+ router,
140
+ routerContext
141
+ } = (0, _react.useContext)(_core.RuntimeReactContext);
142
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(App, _objectSpread(_objectSpread({}, props), {}, {
143
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_server.unstable_StaticRouterProvider, {
144
+ router: router,
145
+ context: routerContext,
146
+ nonce: "the-nonce"
147
+ })
148
+ }));
149
+ };
150
+ };
151
+
152
+ const RouteApp = getRouteApp();
153
+
154
+ if (routesConfig.globalApp) {
155
+ return next({
156
+ App: (0, _hoistNonReactStatics.default)(RouteApp, routesConfig.globalApp)
157
+ });
158
+ }
159
+
160
+ return next({
161
+ App: RouteApp
162
+ });
163
+ }
164
+ };
165
+ }
166
+ };
167
+ };
168
+
169
+ exports.routerPlugin = routerPlugin;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });