@modern-js/runtime 1.3.4 → 1.4.1

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 (156) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/js/modern/cli/index.js +4 -4
  3. package/dist/js/modern/common.js +1 -0
  4. package/dist/js/modern/exports/model.js +2 -1
  5. package/dist/js/modern/exports/router.js +2 -1
  6. package/dist/js/modern/exports/server.js +0 -1
  7. package/dist/js/modern/exports/ssr.js +2 -1
  8. package/dist/js/modern/router/cli/index.js +106 -0
  9. package/dist/js/modern/router/index.js +2 -0
  10. package/dist/js/modern/router/runtime/DefaultNotFound.js +13 -0
  11. package/dist/js/modern/router/runtime/index.js +4 -0
  12. package/dist/js/modern/router/runtime/plugin.js +88 -0
  13. package/dist/js/modern/router/runtime/utils.js +108 -0
  14. package/dist/js/modern/ssr/cli/index.js +120 -0
  15. package/dist/js/modern/ssr/index.js +109 -0
  16. package/dist/js/modern/ssr/index.node.js +78 -0
  17. package/dist/js/modern/ssr/prefetch.js +58 -0
  18. package/dist/js/modern/ssr/react/index.js +2 -0
  19. package/dist/js/modern/ssr/react/nossr/index.js +13 -0
  20. package/dist/js/modern/ssr/react/prerender/index.js +104 -0
  21. package/dist/js/modern/ssr/react/prerender/type.js +0 -0
  22. package/dist/js/modern/ssr/react/prerender/util.js +99 -0
  23. package/dist/js/modern/ssr/serverRender/entry.js +179 -0
  24. package/dist/js/modern/ssr/serverRender/helmet.js +46 -0
  25. package/dist/js/modern/ssr/serverRender/index.js +29 -0
  26. package/dist/js/modern/ssr/serverRender/loadable.js +48 -0
  27. package/dist/js/modern/ssr/serverRender/measure.js +11 -0
  28. package/dist/js/modern/ssr/serverRender/reduce.js +7 -0
  29. package/dist/js/modern/ssr/serverRender/styledComponent.js +8 -0
  30. package/dist/js/modern/ssr/serverRender/template.js +90 -0
  31. package/dist/js/modern/ssr/serverRender/type.js +8 -0
  32. package/dist/js/modern/ssr/utils.js +51 -0
  33. package/dist/js/modern/state/cli/index.js +110 -0
  34. package/dist/js/modern/state/index.js +2 -0
  35. package/dist/js/modern/state/plugins.js +7 -0
  36. package/dist/js/modern/state/runtime/index.js +4 -0
  37. package/dist/js/modern/state/runtime/plugin.js +71 -0
  38. package/dist/js/modern/state/types.js +1 -0
  39. package/dist/js/node/cli/index.js +5 -5
  40. package/dist/js/node/common.js +10 -0
  41. package/dist/js/node/exports/model.js +19 -5
  42. package/dist/js/node/exports/router.js +19 -5
  43. package/dist/js/node/exports/server.js +0 -17
  44. package/dist/js/node/exports/ssr.js +19 -5
  45. package/dist/js/node/router/cli/index.js +122 -0
  46. package/dist/js/node/router/index.js +30 -0
  47. package/dist/js/node/router/runtime/DefaultNotFound.js +26 -0
  48. package/dist/js/node/router/runtime/index.js +39 -0
  49. package/dist/js/node/router/runtime/plugin.js +111 -0
  50. package/dist/js/node/router/runtime/utils.js +128 -0
  51. package/dist/js/node/ssr/cli/index.js +136 -0
  52. package/dist/js/node/ssr/index.js +138 -0
  53. package/dist/js/node/ssr/index.node.js +105 -0
  54. package/dist/js/node/ssr/prefetch.js +75 -0
  55. package/dist/js/node/ssr/react/index.js +21 -0
  56. package/dist/js/node/ssr/react/nossr/index.js +28 -0
  57. package/dist/js/node/ssr/react/prerender/index.js +121 -0
  58. package/dist/js/node/ssr/react/prerender/type.js +0 -0
  59. package/dist/js/node/ssr/react/prerender/util.js +119 -0
  60. package/dist/js/node/ssr/serverRender/entry.js +208 -0
  61. package/dist/js/node/ssr/serverRender/helmet.js +52 -0
  62. package/dist/js/node/ssr/serverRender/index.js +46 -0
  63. package/dist/js/node/ssr/serverRender/loadable.js +60 -0
  64. package/dist/js/node/ssr/serverRender/measure.js +20 -0
  65. package/dist/js/node/ssr/serverRender/reduce.js +14 -0
  66. package/dist/js/node/ssr/serverRender/styledComponent.js +18 -0
  67. package/dist/js/node/ssr/serverRender/template.js +103 -0
  68. package/dist/js/node/ssr/serverRender/type.js +15 -0
  69. package/dist/js/node/ssr/utils.js +65 -0
  70. package/dist/js/node/state/cli/index.js +127 -0
  71. package/dist/js/node/state/index.js +30 -0
  72. package/dist/js/node/state/plugins.js +35 -0
  73. package/dist/js/node/state/runtime/index.js +61 -0
  74. package/dist/js/node/state/runtime/plugin.js +101 -0
  75. package/dist/js/node/state/types.js +5 -0
  76. package/dist/js/treeshaking/cli/index.js +4 -4
  77. package/dist/js/treeshaking/common.js +3 -0
  78. package/dist/js/treeshaking/exports/model.js +2 -1
  79. package/dist/js/treeshaking/exports/router.js +2 -1
  80. package/dist/js/treeshaking/exports/server.js +0 -1
  81. package/dist/js/treeshaking/exports/ssr.js +2 -1
  82. package/dist/js/treeshaking/router/cli/index.js +100 -0
  83. package/dist/js/treeshaking/router/index.js +2 -0
  84. package/dist/js/treeshaking/router/runtime/DefaultNotFound.js +15 -0
  85. package/dist/js/treeshaking/router/runtime/index.js +4 -0
  86. package/dist/js/treeshaking/router/runtime/plugin.js +89 -0
  87. package/dist/js/treeshaking/router/runtime/utils.js +106 -0
  88. package/dist/js/treeshaking/ssr/cli/index.js +113 -0
  89. package/dist/js/treeshaking/ssr/index.js +129 -0
  90. package/dist/js/treeshaking/ssr/index.node.js +100 -0
  91. package/dist/js/treeshaking/ssr/prefetch.js +97 -0
  92. package/dist/js/treeshaking/ssr/react/index.js +2 -0
  93. package/dist/js/treeshaking/ssr/react/nossr/index.js +16 -0
  94. package/dist/js/treeshaking/ssr/react/prerender/index.js +119 -0
  95. package/dist/js/treeshaking/ssr/react/prerender/type.js +0 -0
  96. package/dist/js/treeshaking/ssr/react/prerender/util.js +115 -0
  97. package/dist/js/treeshaking/ssr/serverRender/entry.js +267 -0
  98. package/dist/js/treeshaking/ssr/serverRender/helmet.js +37 -0
  99. package/dist/js/treeshaking/ssr/serverRender/index.js +69 -0
  100. package/dist/js/treeshaking/ssr/serverRender/loadable.js +59 -0
  101. package/dist/js/treeshaking/ssr/serverRender/measure.js +17 -0
  102. package/dist/js/treeshaking/ssr/serverRender/reduce.js +11 -0
  103. package/dist/js/treeshaking/ssr/serverRender/styledComponent.js +8 -0
  104. package/dist/js/treeshaking/ssr/serverRender/template.js +111 -0
  105. package/dist/js/treeshaking/ssr/serverRender/type.js +8 -0
  106. package/dist/js/treeshaking/ssr/utils.js +53 -0
  107. package/dist/js/treeshaking/state/cli/index.js +100 -0
  108. package/dist/js/treeshaking/state/index.js +2 -0
  109. package/dist/js/treeshaking/state/plugins.js +13 -0
  110. package/dist/js/treeshaking/state/runtime/index.js +4 -0
  111. package/dist/js/treeshaking/state/runtime/plugin.js +63 -0
  112. package/dist/js/treeshaking/state/types.js +1 -0
  113. package/dist/types/common.d.ts +1 -0
  114. package/dist/types/exports/model.d.ts +2 -1
  115. package/dist/types/exports/router.d.ts +2 -1
  116. package/dist/types/exports/server.d.ts +0 -1
  117. package/dist/types/exports/ssr.d.ts +2 -1
  118. package/dist/types/index.d.ts +8 -2
  119. package/dist/types/router/cli/index.d.ts +5 -0
  120. package/dist/types/router/index.d.ts +2 -0
  121. package/dist/types/router/runtime/DefaultNotFound.d.ts +2 -0
  122. package/dist/types/router/runtime/index.d.ts +6 -0
  123. package/dist/types/router/runtime/plugin.d.ts +51 -0
  124. package/dist/types/router/runtime/utils.d.ts +6 -0
  125. package/dist/types/ssr/cli/index.d.ts +5 -0
  126. package/dist/types/ssr/index.d.ts +18 -0
  127. package/dist/types/ssr/index.node.d.ts +4 -0
  128. package/dist/types/ssr/prefetch.d.ts +13 -0
  129. package/dist/types/ssr/react/index.d.ts +2 -0
  130. package/dist/types/ssr/react/nossr/index.d.ts +2 -0
  131. package/dist/types/ssr/react/prerender/index.d.ts +1 -0
  132. package/dist/types/ssr/react/prerender/type.d.ts +29 -0
  133. package/dist/types/ssr/react/prerender/util.d.ts +6 -0
  134. package/dist/types/ssr/serverRender/entry.d.ts +20 -0
  135. package/dist/types/ssr/serverRender/helmet.d.ts +2 -0
  136. package/dist/types/ssr/serverRender/index.d.ts +8 -0
  137. package/dist/types/ssr/serverRender/loadable.d.ts +2 -0
  138. package/dist/types/ssr/serverRender/measure.d.ts +1 -0
  139. package/dist/types/ssr/serverRender/reduce.d.ts +3 -0
  140. package/dist/types/ssr/serverRender/styledComponent.d.ts +2 -0
  141. package/dist/types/ssr/serverRender/template.d.ts +14 -0
  142. package/dist/types/ssr/serverRender/type.d.ts +32 -0
  143. package/dist/types/ssr/utils.d.ts +8 -0
  144. package/dist/types/state/cli/index.d.ts +5 -0
  145. package/dist/types/state/index.d.ts +2 -0
  146. package/dist/types/state/plugins.d.ts +4 -0
  147. package/dist/types/state/runtime/index.d.ts +4 -0
  148. package/dist/types/state/runtime/plugin.d.ts +17 -0
  149. package/dist/types/state/types.d.ts +17 -0
  150. package/package.json +36 -20
  151. package/types/model.d.ts +1 -1
  152. package/types/state.d.ts +4 -0
  153. package/dist/js/modern/exports/request.js +0 -1
  154. package/dist/js/node/exports/request.js +0 -13
  155. package/dist/js/treeshaking/exports/request.js +0 -1
  156. package/dist/types/exports/request.d.ts +0 -1
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {};
7
+ exports.default = void 0;
8
+
9
+ var _path = _interopRequireDefault(require("path"));
10
+
11
+ var _runtimeCore = require("@modern-js/runtime-core");
12
+
13
+ var _common = require("../common");
14
+
15
+ var _prefetch = _interopRequireDefault(require("./prefetch"));
16
+
17
+ var _utils = require("./utils");
18
+
19
+ var _react = require("./react");
20
+
21
+ Object.keys(_react).forEach(function (key) {
22
+ if (key === "default" || key === "__esModule") return;
23
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
24
+ if (key in exports && exports[key] === _react[key]) return;
25
+ Object.defineProperty(exports, key, {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _react[key];
29
+ }
30
+ });
31
+ });
32
+
33
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
+
35
+ 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; }
36
+
37
+ 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; }
38
+
39
+ 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; }
40
+
41
+ const registeredApps = new WeakSet();
42
+
43
+ const plugin = () => ({
44
+ name: '@modern-js/plugin-ssr',
45
+ setup: () => {
46
+ return {
47
+ server: async ({
48
+ App,
49
+ context
50
+ }) => {
51
+ if (!registeredApps.has(App)) {
52
+ (0, _runtimeCore.registerPrefetch)(App, _context => (0, _prefetch.default)(App, _context));
53
+ registeredApps.add(App);
54
+ }
55
+
56
+ if (!(0, _common.isBrowser)()) {
57
+ const html = await require("./serverRender").render(context, (context === null || context === void 0 ? void 0 : context.ssrContext.distDir) || _path.default.join(process.cwd(), 'dist'), App);
58
+ return html;
59
+ }
60
+
61
+ return null;
62
+ },
63
+
64
+ init({
65
+ context
66
+ }, next) {
67
+ const {
68
+ request
69
+ } = context.ssrContext;
70
+ context.ssrContext.request = (0, _utils.formatServer)(request);
71
+ return next({
72
+ context
73
+ });
74
+ },
75
+
76
+ pickContext: ({
77
+ context,
78
+ pickedContext
79
+ }, next) => {
80
+ const {
81
+ request,
82
+ response
83
+ } = context === null || context === void 0 ? void 0 : context.ssrContext;
84
+ const {
85
+ initialData
86
+ } = context;
87
+ return next({
88
+ context,
89
+ pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
90
+ initialData,
91
+ request,
92
+ response
93
+ })
94
+ });
95
+ }
96
+ };
97
+ }
98
+ });
99
+
100
+ var _default = plugin;
101
+ /* eslint-enable @typescript-eslint/no-require-imports */
102
+
103
+ /* eslint-enable @typescript-eslint/no-var-requires */
104
+
105
+ exports.default = _default;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _path = _interopRequireDefault(require("path"));
9
+
10
+ var _fs = _interopRequireDefault(require("fs"));
11
+
12
+ var _server = require("react-dom/server");
13
+
14
+ var _ssr = require("@modern-js/utils/ssr");
15
+
16
+ var _constants = require("@modern-js/utils/constants");
17
+
18
+ var _server2 = require("@loadable/server");
19
+
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ // todo: SSRContext
25
+ const prefetch = async (App, context) => (0, _ssr.run)(context.ssrContext.request.headers, async () => {
26
+ var _context$store;
27
+
28
+ const {
29
+ ssrContext
30
+ } = context;
31
+
32
+ const loadablefile = _path.default.resolve(ssrContext.distDir, _constants.LOADABLE_STATS_FILE);
33
+
34
+ if (_fs.default.existsSync(loadablefile)) {
35
+ const extractor = new _server2.ChunkExtractor({
36
+ statsFile: _path.default.resolve(ssrContext.distDir, _constants.LOADABLE_STATS_FILE),
37
+ entrypoints: [ssrContext.entryName].filter(Boolean)
38
+ });
39
+ (0, _server.renderToStaticMarkup)(extractor.collectChunks( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
40
+ context: context
41
+ })));
42
+ } else {
43
+ (0, _server.renderToStaticMarkup)( /*#__PURE__*/(0, _jsxRuntime.jsx)(App, {
44
+ context: context
45
+ }));
46
+ }
47
+
48
+ if (!context.loaderManager.hasPendingLoaders()) {
49
+ return {
50
+ initialData: context.initialData,
51
+ i18nData: context.__i18nData__
52
+ };
53
+ }
54
+
55
+ const loadersData = await context.loaderManager.awaitPendingLoaders();
56
+ Object.keys(loadersData).forEach(id => {
57
+ const data = loadersData[id];
58
+
59
+ if (data._error) {
60
+ ssrContext.logger.error('App Prefetch Loader', data._error);
61
+ ssrContext.metrics.emitCounter('app.prefetch.loader.error', 1);
62
+ delete data._error;
63
+ }
64
+ });
65
+ return {
66
+ loadersData,
67
+ initialData: context.initialData,
68
+ i18nData: context.__i18nData__,
69
+ // todo: move to plugin state
70
+ storeState: context === null || context === void 0 ? void 0 : (_context$store = context.store) === null || _context$store === void 0 ? void 0 : _context$store.getState()
71
+ };
72
+ });
73
+
74
+ var _default = prefetch;
75
+ exports.default = _default;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "NoSSR", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _nossr.NoSSR;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "PreRender", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _prerender.PreRender;
16
+ }
17
+ });
18
+
19
+ var _prerender = require("./prerender");
20
+
21
+ var _nossr = require("./nossr");
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NoSSR = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ 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); }
11
+
12
+ 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; }
13
+
14
+ let csr = false;
15
+
16
+ const NoSSR = props => {
17
+ const [isMounted, setMounted] = (0, _react.useState)(csr);
18
+ (0, _react.useEffect)(() => {
19
+ csr = true;
20
+ setMounted(true);
21
+ });
22
+ const {
23
+ children
24
+ } = props;
25
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isMounted ? children : null);
26
+ };
27
+
28
+ exports.NoSSR = NoSSR;
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PreRender = void 0;
7
+
8
+ var _reactSideEffect = _interopRequireDefault(require("react-side-effect"));
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _util = require("./util");
13
+
14
+ 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); }
15
+
16
+ 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; }
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
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; }
21
+
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; }
23
+
24
+ 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; }
25
+
26
+ const PROP_NAMES = {
27
+ INTERVAL: 'interval',
28
+ STALE_LIMIT: 'staleLimit',
29
+ LEVEL: 'level',
30
+ INCLUDES: 'includes',
31
+ EXCLUDES: 'excludes',
32
+ FALLBACK: 'fallback',
33
+ MATCHES: 'matches'
34
+ };
35
+
36
+ const handleClientStateChange = () => {// not used
37
+ };
38
+
39
+ const mapStateOnServer = reduceProps => {
40
+ const defaultProps = {
41
+ interval: 10,
42
+ staleLimit: false,
43
+ level: 0,
44
+ includes: null,
45
+ excludes: null,
46
+ fallback: false,
47
+ matches: null
48
+ };
49
+ return Object.keys(defaultProps).reduce((props, key) => {
50
+ const propKey = key;
51
+ const reduceProp = reduceProps[propKey];
52
+ let nextProps = props;
53
+
54
+ if ((0, _util.exist)(reduceProp)) {
55
+ nextProps = _objectSpread(_objectSpread({}, props), {}, {
56
+ [propKey]: reduceProp
57
+ });
58
+ }
59
+
60
+ return nextProps;
61
+ }, defaultProps);
62
+ };
63
+
64
+ const reducePropsToState = propsList => {
65
+ const reduceProps = {
66
+ interval: (0, _util.getOutermostProperty)(propsList, PROP_NAMES.INTERVAL),
67
+ staleLimit: (0, _util.getOutermostProperty)(propsList, PROP_NAMES.STALE_LIMIT),
68
+ level: (0, _util.getOutermostProperty)(propsList, PROP_NAMES.LEVEL),
69
+ includes: (0, _util.aggKeysFromPropsList)(propsList, PROP_NAMES.INCLUDES),
70
+ excludes: (0, _util.aggKeysFromPropsList)(propsList, PROP_NAMES.EXCLUDES),
71
+ fallback: (0, _util.getOutermostProperty)(propsList, PROP_NAMES.FALLBACK),
72
+ matches: (0, _util.aggMatchesFromPropsList)(propsList, PROP_NAMES.MATCHES)
73
+ };
74
+ return reduceProps;
75
+ };
76
+
77
+ function factory(Component) {
78
+ class Spr extends _react.default.Component {
79
+ static set canUseDOM(canUseDOM) {
80
+ Component.canUseDOM = canUseDOM;
81
+ }
82
+
83
+ static get canUseDOM() {
84
+ return Component.canUseDOM;
85
+ }
86
+
87
+ verify() {
88
+ return true;
89
+ }
90
+
91
+ render() {
92
+ const newProps = _objectSpread({}, this.props);
93
+
94
+ const validate = this.verify();
95
+
96
+ if (!validate) {
97
+ throw new Error('invalid props, check usage');
98
+ }
99
+
100
+ return /*#__PURE__*/(0, _react.createElement)(Component, _objectSpread({}, newProps));
101
+ }
102
+
103
+ }
104
+
105
+ _defineProperty(Spr, "peek", Component.peek);
106
+
107
+ _defineProperty(Spr, "rewind", Component.rewind);
108
+
109
+ _defineProperty(Spr, "config", () => {
110
+ const mappedState = Component.rewind();
111
+ return mappedState;
112
+ });
113
+
114
+ return Spr;
115
+ }
116
+
117
+ const NullComponent = () => null;
118
+
119
+ const SprSideEffects = (0, _reactSideEffect.default)(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);
120
+ const PreRender = factory(SprSideEffects);
121
+ exports.PreRender = PreRender;
File without changes
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.aggMatchesFromPropsList = exports.aggKeysFromPropsList = void 0;
7
+ exports.exist = exist;
8
+ exports.getOutermostProperty = exports.getInnermostProperty = void 0;
9
+ const REQUEST_META = ['header', 'query'];
10
+
11
+ const getInnermostProperty = function getInnermostProperty(propsList, propName) {
12
+ for (let i = propsList.length - 1; i >= 0; i--) {
13
+ const props = propsList[i];
14
+
15
+ if (props.hasOwnProperty(propName)) {
16
+ return props[propName];
17
+ }
18
+ }
19
+
20
+ return null;
21
+ };
22
+
23
+ exports.getInnermostProperty = getInnermostProperty;
24
+
25
+ const getOutermostProperty = function getOutermostProperty(propsList, propName) {
26
+ for (const props of propsList) {
27
+ if (props.hasOwnProperty(propName)) {
28
+ return props[propName];
29
+ }
30
+ }
31
+
32
+ return null;
33
+ };
34
+
35
+ exports.getOutermostProperty = getOutermostProperty;
36
+
37
+ const aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName) {
38
+ const initResult = REQUEST_META.reduce((result, next) => {
39
+ const key = next;
40
+ result[key] = [];
41
+ return result;
42
+ }, {});
43
+ const res = propsList.filter(props => usefulObject(props[propName])).reduce((result, next) => {
44
+ REQUEST_META.forEach(key => {
45
+ const prop = next[propName];
46
+
47
+ if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulArray(prop[key])) {
48
+ result[key] = unique(result[key].concat(prop[key]));
49
+ }
50
+ });
51
+ return result;
52
+ }, initResult);
53
+ return REQUEST_META.reduce((result, next) => {
54
+ var _result$key;
55
+
56
+ const key = next;
57
+
58
+ if (result[key] && ((_result$key = result[key]) === null || _result$key === void 0 ? void 0 : _result$key.length) === 0) {
59
+ delete result[key];
60
+ }
61
+
62
+ return result;
63
+ }, res);
64
+ };
65
+
66
+ exports.aggKeysFromPropsList = aggKeysFromPropsList;
67
+
68
+ const aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, propName) {
69
+ const initResult = REQUEST_META.reduce((result, next) => {
70
+ const key = next;
71
+ result[key] = {};
72
+ return result;
73
+ }, {});
74
+ const res = propsList.filter(props => usefulObject(props[propName])).reduce((result, next) => {
75
+ REQUEST_META.forEach(key => {
76
+ const prop = next[propName]; // 这边目前是浅拷贝,越后渲染优先级越高
77
+
78
+ if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulObject(prop[key])) {
79
+ result[key] = Object.assign(result[key], prop[key]);
80
+ }
81
+ });
82
+ return result;
83
+ }, initResult);
84
+ return REQUEST_META.reduce((result, next) => {
85
+ const key = next;
86
+
87
+ if (result[key] && Object.keys(result[key]).length === 0) {
88
+ delete result[key];
89
+ }
90
+
91
+ return result;
92
+ }, res);
93
+ };
94
+
95
+ exports.aggMatchesFromPropsList = aggMatchesFromPropsList;
96
+
97
+ function unique(arr) {
98
+ return Array.from(new Set(arr));
99
+ }
100
+
101
+ function usefulObject(target) {
102
+ if (!exist(target)) {
103
+ return false;
104
+ }
105
+
106
+ return target.constructor === Object && Object.keys(target).length > 0;
107
+ }
108
+
109
+ function usefulArray(target) {
110
+ if (!exist(target)) {
111
+ return false;
112
+ }
113
+
114
+ return Array.isArray(target) && target.length > 0;
115
+ }
116
+
117
+ function exist(target) {
118
+ return target != null;
119
+ }
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _path = _interopRequireDefault(require("path"));
9
+
10
+ var _constants = require("@modern-js/utils/constants");
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _server = _interopRequireDefault(require("react-dom/server"));
15
+
16
+ var _serializeJavascript = _interopRequireDefault(require("serialize-javascript"));
17
+
18
+ var _reactHelmet = _interopRequireDefault(require("react-helmet"));
19
+
20
+ var _template = require("./template");
21
+
22
+ var _type = require("./type");
23
+
24
+ var _helmet = _interopRequireDefault(require("./helmet"));
25
+
26
+ var _reduce = require("./reduce");
27
+
28
+ var loadableRenderer = _interopRequireWildcard(require("./loadable"));
29
+
30
+ var styledComponentRenderer = _interopRequireWildcard(require("./styledComponent"));
31
+
32
+ var _measure = require("./measure");
33
+
34
+ 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); }
35
+
36
+ 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; }
37
+
38
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
+
40
+ 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; }
41
+
42
+ const buildTemplateData = (context, data, renderLevel) => {
43
+ const {
44
+ request
45
+ } = context;
46
+ return {
47
+ data,
48
+ context: {
49
+ request: {
50
+ params: request.params,
51
+ query: request.query,
52
+ pathname: request.pathname,
53
+ host: request.host,
54
+ url: request.url,
55
+ headers: request.headers,
56
+ cookieMap: request.cookieMap
57
+ }
58
+ },
59
+ renderLevel
60
+ };
61
+ };
62
+
63
+ class Entry {
64
+ constructor(options) {
65
+ _defineProperty(this, "entryName", void 0);
66
+
67
+ _defineProperty(this, "result", void 0);
68
+
69
+ _defineProperty(this, "metrics", void 0);
70
+
71
+ _defineProperty(this, "logger", void 0);
72
+
73
+ _defineProperty(this, "App", void 0);
74
+
75
+ _defineProperty(this, "fragments", void 0);
76
+
77
+ const {
78
+ ctx
79
+ } = options;
80
+ const {
81
+ entryName,
82
+ template: templateHTML
83
+ } = ctx;
84
+ this.fragments = (0, _template.toFragments)(templateHTML);
85
+ this.entryName = entryName;
86
+ this.App = options.App;
87
+ this.metrics = ctx.metrics;
88
+ this.logger = ctx.logger;
89
+ this.result = {
90
+ renderLevel: _type.RenderLevel.CLIENT_RENDER,
91
+ html: '',
92
+ chunksMap: {
93
+ js: '',
94
+ css: ''
95
+ }
96
+ };
97
+ }
98
+
99
+ async renderToHtml(context) {
100
+ const {
101
+ ssrContext
102
+ } = context;
103
+
104
+ if (ssrContext.redirection.url) {
105
+ return '';
106
+ }
107
+
108
+ const prefetchData = await this.prefetch(context);
109
+
110
+ if (ssrContext.redirection.url) {
111
+ return '';
112
+ }
113
+
114
+ if (this.result.renderLevel >= _type.RenderLevel.SERVER_PREFETCH) {
115
+ this.result.html = this.renderToString(context);
116
+ }
117
+
118
+ if (ssrContext.redirection.url) {
119
+ return '';
120
+ }
121
+
122
+ let html = '';
123
+ const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel);
124
+ const SSRData = this.getSSRDataScript(templateData);
125
+
126
+ for (const fragment of this.fragments) {
127
+ if (fragment.isVariable && fragment.content === 'SSRDataScript') {
128
+ html += fragment.getValue(SSRData);
129
+ } else {
130
+ html += fragment.getValue(this.result);
131
+ }
132
+ }
133
+
134
+ const helmetData = _reactHelmet.default.renderStatic();
135
+
136
+ return helmetData ? (0, _helmet.default)(html, helmetData) : html;
137
+ }
138
+
139
+ async prefetch(context) {
140
+ const {
141
+ App: {
142
+ prefetch
143
+ }
144
+ } = this;
145
+ let prefetchData;
146
+ const end = (0, _measure.time)();
147
+
148
+ try {
149
+ prefetchData = prefetch ? await prefetch(context) : null;
150
+ this.result.renderLevel = _type.RenderLevel.SERVER_PREFETCH;
151
+ const prefetchCost = end();
152
+ this.logger.debug(`App Prefetch cost = %d ms`, prefetchCost);
153
+ this.metrics.emitTimer('app.prefetch.cost', prefetchCost);
154
+ } catch (e) {
155
+ this.result.renderLevel = _type.RenderLevel.CLIENT_RENDER;
156
+ this.logger.error('App Prefetch Render', e);
157
+ this.metrics.emitCounter('app.prefetch.render.error', 1);
158
+ }
159
+
160
+ return prefetchData || {};
161
+ }
162
+
163
+ renderToString(context) {
164
+ let html = '';
165
+ const end = (0, _measure.time)();
166
+ const {
167
+ ssrContext
168
+ } = context;
169
+
170
+ try {
171
+ const App = /*#__PURE__*/_react.default.createElement(this.App, {
172
+ context: Object.assign(context, {
173
+ ssr: true
174
+ })
175
+ }); // Todo render Hook
176
+
177
+
178
+ const renderContext = {
179
+ loadableManifest: _path.default.resolve(ssrContext.distDir, _constants.LOADABLE_STATS_FILE),
180
+ result: this.result,
181
+ entryName: this.entryName
182
+ };
183
+ html = (0, _reduce.reduce)(App, renderContext, [styledComponentRenderer.toHtml, loadableRenderer.toHtml, jsx => _server.default.renderToString(jsx)]);
184
+ const cost = end();
185
+ this.logger.debug('App Render To HTML cost = %d ms', cost);
186
+ this.metrics.emitTimer('app.render.html.cost', cost);
187
+ this.result.renderLevel = _type.RenderLevel.SERVER_RENDER;
188
+ } catch (e) {
189
+ this.logger.error('App Render To HTML', e);
190
+ this.metrics.emitCounter('app.render.html.error', 1);
191
+ }
192
+
193
+ return html;
194
+ }
195
+
196
+ getSSRDataScript(templateData) {
197
+ return {
198
+ SSRDataScript: `
199
+ <script>window._SSR_DATA = ${(0, _serializeJavascript.default)(templateData, {
200
+ isJSON: true
201
+ })}</script>
202
+ `
203
+ };
204
+ }
205
+
206
+ }
207
+
208
+ exports.default = Entry;