@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,90 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.render = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _ssr = require("@modern-js/utils/ssr");
11
+
12
+ var _prerender = require("../../react/prerender");
13
+
14
+ var _utils = require("../utils");
15
+
16
+ var _template = require("./template");
17
+
18
+ var _renderToPipe = _interopRequireDefault(require("./renderToPipe"));
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ const render = ({
23
+ App,
24
+ context
25
+ }) => {
26
+ const {
27
+ ssrContext
28
+ } = context;
29
+
30
+ if (!ssrContext) {
31
+ throw new Error('The "ssrContext" must not be undefined, but received undefined');
32
+ }
33
+
34
+ return (0, _ssr.run)(ssrContext.request.headers, async () => {
35
+ const end_all = (0, _utils.time)();
36
+ const rootElement = /*#__PURE__*/(0, _react.createElement)(App, {
37
+ context: Object.assign(context || {}, {
38
+ ssr: true
39
+ })
40
+ });
41
+ const getTemplates = (0, _template.createTemplates)(context);
42
+ const end = (0, _utils.time)();
43
+ const pipe = (0, _renderToPipe.default)(rootElement, getTemplates, {
44
+ onShellReady() {
45
+ // set cacheConfig
46
+ const cacheConfig = _prerender.PreRender.config();
47
+
48
+ if (cacheConfig) {
49
+ context.ssrContext.cacheConfig = cacheConfig;
50
+ }
51
+ },
52
+
53
+ onAllReady() {
54
+ // computed render html cost
55
+ const cost = end();
56
+ ssrContext.logger.debug('App Render To HTML cost = %d ms', cost);
57
+ ssrContext.metrics.emitTimer('app.render.html.cost', cost); // computed all ssr const
58
+
59
+ const cost_all = end_all();
60
+ ssrContext.logger.info('App Render Total cost = %d ms', cost_all);
61
+ ssrContext.metrics.emitTimer('app.render.cost', cost_all);
62
+ }
63
+
64
+ });
65
+ return pipe;
66
+ }); // eslint-disable-next-line @typescript-eslint/no-unused-vars
67
+
68
+ async function prefetch(App, context) {
69
+ const {
70
+ prefetch
71
+ } = App;
72
+ const ssrContext = context.ssrContext;
73
+ let prefetchData;
74
+ const end = (0, _utils.time)();
75
+
76
+ try {
77
+ prefetchData = prefetch ? await prefetch(context) : null;
78
+ const prefetchCost = end();
79
+ ssrContext.logger.debug(`App Prefetch cost = %d ms`, prefetchCost);
80
+ ssrContext.metrics.emitTimer('app.prefetch.cost', prefetchCost);
81
+ } catch (e) {
82
+ ssrContext.logger.error('App Prefetch Render', e);
83
+ ssrContext.metrics.emitCounter('app.prefetch.render.error', 1);
84
+ }
85
+
86
+ return prefetchData || {};
87
+ }
88
+ };
89
+
90
+ exports.render = render;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getLoadableChunks = getLoadableChunks;
7
+
8
+ var _server = require("@loadable/server");
9
+
10
+ function getLoadableChunks({
11
+ context,
12
+ jsx
13
+ }) {
14
+ const {
15
+ loadableStats,
16
+ entryName
17
+ } = context.ssrContext;
18
+
19
+ if (!loadableStats) {
20
+ return {
21
+ jsx
22
+ };
23
+ }
24
+
25
+ const extractor = new _server.ChunkExtractor({
26
+ stats: loadableStats,
27
+ entrypoints: [entryName]
28
+ });
29
+ const collectedJsx = extractor.collectChunks(jsx);
30
+ return {
31
+ jsx: collectedJsx,
32
+ chunkExtractor: extractor
33
+ };
34
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _stream = require("stream");
9
+
10
+ var _server = require("react-dom/server");
11
+
12
+ 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; }
13
+
14
+ 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; }
15
+
16
+ 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; }
17
+
18
+ function renderToPipe(rootElement, getTemplates, options) {
19
+ let isShellStream = true;
20
+
21
+ const forUserPipe = stream => {
22
+ return new Promise(resolve => {
23
+ const {
24
+ pipe
25
+ } = (0, _server.renderToPipeableStream)(rootElement, _objectSpread(_objectSpread({}, options), {}, {
26
+ onShellReady() {
27
+ var _options$onShellReady;
28
+
29
+ options === null || options === void 0 ? void 0 : (_options$onShellReady = options.onShellReady) === null || _options$onShellReady === void 0 ? void 0 : _options$onShellReady.call(options);
30
+ const {
31
+ shellAfter,
32
+ shellBefore
33
+ } = getTemplates();
34
+ const injectableTransform = new _stream.Transform({
35
+ transform(chunk, _encoding, callback) {
36
+ try {
37
+ if (isShellStream) {
38
+ this.push(joinChunk(shellBefore, chunk, shellAfter));
39
+ isShellStream = false;
40
+ } else {
41
+ this.push(chunk);
42
+ }
43
+
44
+ callback();
45
+ } catch (e) {
46
+ if (e instanceof Error) {
47
+ callback(e);
48
+ } else {
49
+ callback(new Error('Received unkown error when streaming'));
50
+ }
51
+ }
52
+ }
53
+
54
+ });
55
+ resolve(pipe(injectableTransform).pipe(stream));
56
+ }
57
+
58
+ }));
59
+ });
60
+ };
61
+
62
+ return forUserPipe;
63
+
64
+ function joinChunk(before = '', chunk, after = '') {
65
+ return `${before}${chunk.toString()}${after}`;
66
+ }
67
+ }
68
+
69
+ var _default = renderToPipe;
70
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getStyledComponentCss = getStyledComponentCss;
7
+
8
+ var _styledComponents = require("styled-components");
9
+
10
+ function getStyledComponentCss({
11
+ jsx
12
+ }) {
13
+ const sheet = new _styledComponents.ServerStyleSheet();
14
+ const collectedJsx = sheet.collectStyles(jsx);
15
+ return {
16
+ styleSheet: sheet,
17
+ jsx: collectedJsx
18
+ };
19
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createTemplates = createTemplates;
7
+
8
+ var _buildTemplate = require("./buildTemplate.after");
9
+
10
+ var _bulidTemplate = require("./bulidTemplate.before");
11
+
12
+ const HTML_SEPARATOR = '<!--<?- html ?>-->';
13
+
14
+ function createTemplates(context) {
15
+ const getTemplates = () => {
16
+ const {
17
+ template
18
+ } = context.ssrContext;
19
+ const [beforeAppTemplate = '', afterAppHtmlTemplate = ''] = template.split(HTML_SEPARATOR) || []; // templates injected some variables
20
+
21
+ const builtBeforeTemplate = (0, _bulidTemplate.buildShellBeforeTemplate)(beforeAppTemplate);
22
+ const builtAfterTemplate = (0, _buildTemplate.buildShellAfterTemplate)(afterAppHtmlTemplate, {
23
+ context
24
+ });
25
+ return {
26
+ shellBefore: builtBeforeTemplate,
27
+ shellAfter: builtAfterTemplate
28
+ };
29
+ };
30
+
31
+ return getTemplates;
32
+ }
@@ -13,11 +13,13 @@ var _serializeJavascript = _interopRequireDefault(require("serialize-javascript"
13
13
 
14
14
  var _reactHelmet = _interopRequireDefault(require("react-helmet"));
15
15
 
16
- var _template = require("./template");
16
+ var _helmet = _interopRequireDefault(require("../helmet"));
17
+
18
+ var _types = require("../types");
17
19
 
18
- var _type = require("./type");
20
+ var _utils = require("../utils");
19
21
 
20
- var _helmet = _interopRequireDefault(require("./helmet"));
22
+ var _template = require("./template");
21
23
 
22
24
  var _reduce = require("./reduce");
23
25
 
@@ -25,8 +27,6 @@ var loadableRenderer = _interopRequireWildcard(require("./loadable"));
25
27
 
26
28
  var styledComponentRenderer = _interopRequireWildcard(require("./styledComponent"));
27
29
 
28
- var _measure = require("./measure");
29
-
30
30
  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); }
31
31
 
32
32
  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; }
@@ -93,7 +93,7 @@ class Entry {
93
93
  this.metrics = ctx.metrics;
94
94
  this.logger = ctx.logger;
95
95
  this.result = {
96
- renderLevel: _type.RenderLevel.CLIENT_RENDER,
96
+ renderLevel: _types.RenderLevel.CLIENT_RENDER,
97
97
  html: '',
98
98
  chunksMap: {
99
99
  js: '',
@@ -103,9 +103,7 @@ class Entry {
103
103
  }
104
104
 
105
105
  async renderToHtml(context) {
106
- const {
107
- ssrContext
108
- } = context;
106
+ const ssrContext = context.ssrContext;
109
107
 
110
108
  if (ssrContext.redirection.url) {
111
109
  return '';
@@ -117,7 +115,7 @@ class Entry {
117
115
  return '';
118
116
  }
119
117
 
120
- if (this.result.renderLevel >= _type.RenderLevel.SERVER_PREFETCH) {
118
+ if (this.result.renderLevel >= _types.RenderLevel.SERVER_PREFETCH) {
121
119
  this.result.html = this.renderToString(context);
122
120
  }
123
121
 
@@ -149,16 +147,16 @@ class Entry {
149
147
  }
150
148
  } = this;
151
149
  let prefetchData;
152
- const end = (0, _measure.time)();
150
+ const end = (0, _utils.time)();
153
151
 
154
152
  try {
155
153
  prefetchData = prefetch ? await prefetch(context) : null;
156
- this.result.renderLevel = _type.RenderLevel.SERVER_PREFETCH;
154
+ this.result.renderLevel = _types.RenderLevel.SERVER_PREFETCH;
157
155
  const prefetchCost = end();
158
156
  this.logger.debug(`App Prefetch cost = %d ms`, prefetchCost);
159
157
  this.metrics.emitTimer('app.prefetch.cost', prefetchCost);
160
158
  } catch (e) {
161
- this.result.renderLevel = _type.RenderLevel.CLIENT_RENDER;
159
+ this.result.renderLevel = _types.RenderLevel.CLIENT_RENDER;
162
160
  this.logger.error('App Prefetch Render', e);
163
161
  this.metrics.emitCounter('app.prefetch.render.error', 1);
164
162
  }
@@ -168,7 +166,7 @@ class Entry {
168
166
 
169
167
  renderToString(context) {
170
168
  let html = '';
171
- const end = (0, _measure.time)();
169
+ const end = (0, _utils.time)();
172
170
  const {
173
171
  ssrContext
174
172
  } = context;
@@ -191,7 +189,7 @@ class Entry {
191
189
  const cost = end();
192
190
  this.logger.debug('App Render To HTML cost = %d ms', cost);
193
191
  this.metrics.emitTimer('app.render.html.cost', cost);
194
- this.result.renderLevel = _type.RenderLevel.SERVER_RENDER;
192
+ this.result.renderLevel = _types.RenderLevel.SERVER_RENDER;
195
193
  } catch (e) {
196
194
  this.logger.error('App Render To HTML', e);
197
195
  this.metrics.emitCounter('app.render.html.error', 1);
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.render = void 0;
7
+
8
+ var _ssr = require("@modern-js/utils/ssr");
9
+
10
+ var _prerender = require("../../react/prerender");
11
+
12
+ var _utils = require("../utils");
13
+
14
+ var _entry = _interopRequireDefault(require("./entry"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ const render = ({
19
+ App,
20
+ context,
21
+ config
22
+ }) => {
23
+ const ssrContext = context.ssrContext;
24
+ return (0, _ssr.run)(ssrContext.request.headers, async () => {
25
+ const entry = new _entry.default({
26
+ ctx: ssrContext,
27
+ App,
28
+ config
29
+ });
30
+ entry.metrics.emitCounter('app.visit.count', 1);
31
+ const end = (0, _utils.time)();
32
+ const html = await entry.renderToHtml(context);
33
+ const cost = end();
34
+ entry.logger.info('App Render Total cost = %d ms', cost);
35
+ entry.metrics.emitTimer('app.render.cost', cost);
36
+
37
+ const cacheConfig = _prerender.PreRender.config();
38
+
39
+ if (cacheConfig) {
40
+ context.ssrContext.cacheConfig = cacheConfig;
41
+ }
42
+
43
+ return html;
44
+ });
45
+ };
46
+
47
+ exports.render = render;
@@ -7,24 +7,17 @@ exports.toHtml = void 0;
7
7
 
8
8
  var _server = require("@loadable/server");
9
9
 
10
- var _utils = require("../utils");
10
+ var _utils = require("../../utils");
11
11
 
12
- const extname = uri => {
13
- return uri.match(/\.[^.]+$/) || '';
14
- };
15
-
16
- function getLoadableScripts(extractor) {
17
- const check = scripts => (scripts || '').includes('__LOADABLE_REQUIRED_CHUNKS___ext');
12
+ var _utils2 = require("../utils");
18
13
 
19
- const scripts = extractor.getScriptTags();
20
-
21
- if (!check(scripts)) {
14
+ const extname = uri => {
15
+ if (typeof uri !== 'string' || !uri.includes('.')) {
22
16
  return '';
23
17
  }
24
18
 
25
- return scripts.split('</script>') // 前两个 script为 loadable 必须的 script
26
- .slice(0, 2).map(i => `${i}</script>`).join('');
27
- }
19
+ return `.${uri === null || uri === void 0 ? void 0 : uri.split('.').pop()}` || '';
20
+ };
28
21
 
29
22
  const toHtml = (jsx, renderer, next) => {
30
23
  const {
@@ -46,7 +39,7 @@ const toHtml = (jsx, renderer, next) => {
46
39
  });
47
40
  const html = next(extractor.collectChunks(jsx));
48
41
  const chunks = extractor.getChunkAssets(extractor.chunks);
49
- chunksMap.js = (chunksMap.js || '') + getLoadableScripts(extractor);
42
+ chunksMap.js = (chunksMap.js || '') + (0, _utils2.getLoadableScripts)(extractor);
50
43
 
51
44
  for (const v of chunks) {
52
45
  const fileType = extname(v.url).slice(1);
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.RenderLevel = void 0;
7
- // import { IncomingHttpHeaders } from 'http';
8
7
  let RenderLevel;
9
8
  exports.RenderLevel = RenderLevel;
10
9
 
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "RenderLevel", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _type.RenderLevel;
10
+ }
11
+ });
12
+
13
+ var _type = require("./renderToString/type");
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getLoadableScripts = getLoadableScripts;
7
+ exports.time = void 0;
8
+
9
+ function getLoadableScripts(extractor) {
10
+ const check = scripts => (scripts || '').includes('__LOADABLE_REQUIRED_CHUNKS___ext');
11
+
12
+ const scripts = extractor.getScriptTags();
13
+
14
+ if (!check(scripts)) {
15
+ return '';
16
+ }
17
+
18
+ return scripts.split('</script>') // 前两个 script为 loadable 必须的 script
19
+ .slice(0, 2).map(i => `${i}</script>`).join('');
20
+ }
21
+
22
+ const getLatency = hrtime => {
23
+ const [s, ns] = process.hrtime(hrtime);
24
+ return s * 1e3 + ns / 1e6;
25
+ };
26
+
27
+ const time = () => {
28
+ const hrtime = process.hrtime();
29
+ return () => {
30
+ return getLatency(hrtime);
31
+ };
32
+ };
33
+
34
+ exports.time = time;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.mockResponse = exports.isCrossOrigin = exports.formatServer = exports.formatClient = void 0;
6
+ exports.mockResponse = exports.isReact18 = exports.isCrossOrigin = exports.formatServer = exports.formatClient = void 0;
7
7
 
8
8
  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; }
9
9
 
@@ -11,6 +11,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
11
11
 
12
12
  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; }
13
13
 
14
+ const isReact18 = () => process.env.IS_REACT18 === 'true';
15
+
16
+ exports.isReact18 = isReact18;
17
+
14
18
  const formatServer = request => {
15
19
  const {
16
20
  cookie = '',
@@ -58,11 +62,16 @@ exports.formatClient = formatClient;
58
62
  const mockResponse = () => {
59
63
  return {
60
64
  setHeader() {
61
- console.info('setHeader can only be used in the server side');
65
+ console.warn('response.setHeader() can only be used in the server side');
62
66
  },
63
67
 
64
68
  status() {
65
- console.info('status can only be used in the server side');
69
+ console.warn('response.status() can only be used in the server side');
70
+ },
71
+
72
+ get locals() {
73
+ console.warn('response.locals can only be used in the server side');
74
+ return {};
66
75
  }
67
76
 
68
77
  };
@@ -70,7 +79,7 @@ const mockResponse = () => {
70
79
 
71
80
  exports.mockResponse = mockResponse;
72
81
 
73
- const isCrossOrigin = (url, base) => {
82
+ const isCrossOrigin = (url = '', base) => {
74
83
  if (url.startsWith('/') || url.startsWith('./')) {
75
84
  return false;
76
85
  } else if (!url.includes(base)) {
@@ -9,7 +9,7 @@ export default (function () {
9
9
  return {
10
10
  name: '@modern-js/runtime',
11
11
  post: ['@modern-js/plugin-router', '@modern-js/plugin-ssr', '@modern-js/plugin-state', '@modern-js/plugin-design-token'],
12
- usePlugins: [PluginState(), PluginRouter(), PluginSSR()],
12
+ usePlugins: [PluginState(), PluginSSR(), PluginRouter()],
13
13
  setup: function setup(api) {
14
14
  return {
15
15
  config: function config() {
@@ -2,6 +2,6 @@ export { createPlugin, createRuntime, runtime, registerInit, registerPrefetch }
2
2
  export { defineConfig, getConfig } from "./app-config"; // compatible
3
3
 
4
4
  export * from "./compatible";
5
- export { RuntimeReactContext } from "../runtime-context";
5
+ export { RuntimeReactContext, ServerRouterContext } from "../runtime-context";
6
6
  export * from "./loader";
7
7
  export * from '@modern-js/plugin';
@@ -1 +1,2 @@
1
+ export { isBrowser } from "./common";
1
2
  export { createApp, createPlugin, useLoader, bootstrap, RuntimeReactContext, registerPrefetch, defineConfig, registerInit, useRuntimeContext } from "./core";
@@ -25,11 +25,14 @@ export default (function () {
25
25
  return PLUGIN_SCHEMAS['@modern-js/plugin-router'];
26
26
  },
27
27
  modifyEntryImports: function modifyEntryImports(_ref) {
28
+ var _userConfig$runtime, _userConfig$runtime$r;
29
+
28
30
  var entrypoint = _ref.entrypoint,
29
31
  imports = _ref.imports;
30
32
  var entryName = entrypoint.entryName,
31
33
  fileSystemRoutes = entrypoint.fileSystemRoutes;
32
34
  var userConfig = api.useResolvedConfigContext();
35
+ var 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);
33
36
 
34
37
  var _api$useAppContext = api.useAppContext(),
35
38
  packageName = _api$useAppContext.packageName;
@@ -38,12 +41,14 @@ export default (function () {
38
41
  runtimeConfigMap.set(entryName, runtimeConfig);
39
42
 
40
43
  if (runtimeConfig !== null && runtimeConfig !== void 0 && runtimeConfig.router) {
41
- imports.push({
42
- value: '@modern-js/runtime/plugins',
43
- specifiers: [{
44
- imported: PLUGIN_IDENTIFIER
45
- }]
46
- });
44
+ if (!isLegacy) {
45
+ imports.push({
46
+ value: '@modern-js/runtime/plugins',
47
+ specifiers: [{
48
+ imported: PLUGIN_IDENTIFIER
49
+ }]
50
+ });
51
+ }
47
52
  } else if (fileSystemRoutes) {
48
53
  throw new Error("should enable runtime.router for entry ".concat(entryName));
49
54
  }
@@ -54,6 +59,8 @@ export default (function () {
54
59
  };
55
60
  },
56
61
  modifyEntryRuntimePlugins: function modifyEntryRuntimePlugins(_ref2) {
62
+ var _userConfig$runtime2, _userConfig$runtime2$;
63
+
57
64
  var entrypoint = _ref2.entrypoint,
58
65
  plugins = _ref2.plugins;
59
66
  var entryName = entrypoint.entryName,
@@ -62,9 +69,11 @@ export default (function () {
62
69
  var _api$useAppContext2 = api.useAppContext(),
63
70
  serverRoutes = _api$useAppContext2.serverRoutes;
64
71
 
72
+ var userConfig = api.useResolvedConfigContext();
73
+ var 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);
65
74
  var runtimeConfig = runtimeConfigMap.get(entryName);
66
75
 
67
- if (runtimeConfig.router) {
76
+ if (runtimeConfig.router && !isLegacy) {
68
77
  // Todo: plugin-router best to only handle manage client route.
69
78
  // here support base server route usage, part for compatibility
70
79
  var serverBase = serverRoutes.filter(function (route) {
@@ -90,7 +99,14 @@ export default (function () {
90
99
  };
91
100
  },
92
101
  addRuntimeExports: function addRuntimeExports() {
93
- pluginsExportsUtils.addExport("export { default as router } from '@modern-js/runtime/router'");
102
+ var _userConfig$runtime3, _userConfig$runtime3$;
103
+
104
+ var userConfig = api.useResolvedConfigContext();
105
+ var 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);
106
+
107
+ if (!isLegacy) {
108
+ pluginsExportsUtils.addExport("export { default as router } from '@modern-js/runtime/router'");
109
+ }
94
110
  }
95
111
  };
96
112
  }
@@ -1,4 +1,4 @@
1
1
  import { routerPlugin } from "./plugin";
2
2
  export default routerPlugin;
3
3
  export * from 'react-router-dom';
4
- export * from 'history';
4
+ export * from "./withRouter";