@modern-js/runtime 1.3.5 → 1.4.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 (156) hide show
  1. package/CHANGELOG.md +46 -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 +2 -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 +37 -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,129 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
+ import ReactDOM from 'react-dom';
5
+ import { loadableReady } from '@loadable/component';
6
+ import { RenderLevel } from "./serverRender/type";
7
+ import { formatClient, mockResponse } from "./utils";
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+
10
+ var ssr = function ssr() {
11
+ return {
12
+ name: '@modern-js/plugin-ssr',
13
+ setup: function setup() {
14
+ var mockResp = mockResponse();
15
+ return {
16
+ client: function () {
17
+ var _client = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
18
+ var _window, _window$_SSR_DATA;
19
+
20
+ var App, context, rootElement, renderLevel, _prefetch, _ref2;
21
+
22
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
23
+ while (1) {
24
+ switch (_context.prev = _context.next) {
25
+ case 0:
26
+ App = _ref.App, context = _ref.context, rootElement = _ref.rootElement;
27
+ renderLevel = (_window = window) === null || _window === void 0 ? void 0 : (_window$_SSR_DATA = _window._SSR_DATA) === null || _window$_SSR_DATA === void 0 ? void 0 : _window$_SSR_DATA.renderLevel;
28
+
29
+ if (!(renderLevel === RenderLevel.CLIENT_RENDER)) {
30
+ _context.next = 8;
31
+ break;
32
+ }
33
+
34
+ _context.next = 5;
35
+ return App === null || App === void 0 ? void 0 : (_prefetch = (_ref2 = App).prefetch) === null || _prefetch === void 0 ? void 0 : _prefetch.call(_ref2, context);
36
+
37
+ case 5:
38
+ ReactDOM.render( /*#__PURE__*/_jsx(App, {
39
+ context: context
40
+ }), rootElement);
41
+ _context.next = 9;
42
+ break;
43
+
44
+ case 8:
45
+ if (renderLevel === RenderLevel.SERVER_RENDER) {
46
+ loadableReady(function () {
47
+ var hydrateContext = _objectSpread(_objectSpread({}, context), {}, {
48
+ _hydration: true
49
+ });
50
+
51
+ ReactDOM.hydrate( /*#__PURE__*/_jsx(App, {
52
+ context: hydrateContext
53
+ }), rootElement, function () {
54
+ // won't cause component re-render because context's reference identity doesn't change
55
+ delete hydrateContext._hydration;
56
+ });
57
+ });
58
+ } else {
59
+ // unknown renderlevel or renderlevel is server prefetch.
60
+ ReactDOM.render( /*#__PURE__*/_jsx(App, {
61
+ context: context
62
+ }), rootElement);
63
+ }
64
+
65
+ case 9:
66
+ case "end":
67
+ return _context.stop();
68
+ }
69
+ }
70
+ }, _callee);
71
+ }));
72
+
73
+ function client(_x) {
74
+ return _client.apply(this, arguments);
75
+ }
76
+
77
+ return client;
78
+ }(),
79
+ init: function init(_ref3, next) {
80
+ var _window2, _window2$_SSR_DATA, _window2$_SSR_DATA$co;
81
+
82
+ var context = _ref3.context;
83
+ var request = (_window2 = window) === null || _window2 === void 0 ? void 0 : (_window2$_SSR_DATA = _window2._SSR_DATA) === null || _window2$_SSR_DATA === void 0 ? void 0 : (_window2$_SSR_DATA$co = _window2$_SSR_DATA.context) === null || _window2$_SSR_DATA$co === void 0 ? void 0 : _window2$_SSR_DATA$co.request;
84
+
85
+ if (!request) {
86
+ return next({
87
+ context: context
88
+ });
89
+ }
90
+
91
+ context.ssrContext.response = mockResp;
92
+ context.ssrContext.request = formatClient(request);
93
+ return next({
94
+ context: context
95
+ });
96
+ },
97
+ pickContext: function pickContext(_ref4, next) {
98
+ var _window3, _window3$_SSR_DATA, _window3$_SSR_DATA$co;
99
+
100
+ var context = _ref4.context,
101
+ pickedContext = _ref4.pickedContext;
102
+ var request = (_window3 = window) === null || _window3 === void 0 ? void 0 : (_window3$_SSR_DATA = _window3._SSR_DATA) === null || _window3$_SSR_DATA === void 0 ? void 0 : (_window3$_SSR_DATA$co = _window3$_SSR_DATA.context) === null || _window3$_SSR_DATA$co === void 0 ? void 0 : _window3$_SSR_DATA$co.request;
103
+ var initialData = context.initialData;
104
+
105
+ if (!request) {
106
+ return next({
107
+ context: context,
108
+ pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
109
+ initialData: initialData
110
+ })
111
+ });
112
+ }
113
+
114
+ return next({
115
+ context: context,
116
+ pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
117
+ initialData: initialData,
118
+ request: request,
119
+ response: mockResp
120
+ })
121
+ });
122
+ }
123
+ };
124
+ }
125
+ };
126
+ };
127
+
128
+ export default ssr;
129
+ export * from "./react";
@@ -0,0 +1,100 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
+
5
+ /* eslint-disable @typescript-eslint/no-var-requires */
6
+
7
+ /* eslint-disable @typescript-eslint/no-require-imports */
8
+ import path from 'path';
9
+ import { registerPrefetch } from '@modern-js/runtime-core';
10
+ import { isBrowser } from "../common";
11
+ import prefetch from "./prefetch";
12
+ import { formatServer } from "./utils";
13
+ var registeredApps = new WeakSet();
14
+
15
+ var plugin = function plugin() {
16
+ return {
17
+ name: '@modern-js/plugin-ssr',
18
+ setup: function setup() {
19
+ return {
20
+ server: function () {
21
+ var _server = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
22
+ var App, context, html;
23
+ return _regeneratorRuntime().wrap(function _callee$(_context2) {
24
+ while (1) {
25
+ switch (_context2.prev = _context2.next) {
26
+ case 0:
27
+ App = _ref.App, context = _ref.context;
28
+
29
+ if (!registeredApps.has(App)) {
30
+ registerPrefetch(App, function (_context) {
31
+ return prefetch(App, _context);
32
+ });
33
+ registeredApps.add(App);
34
+ }
35
+
36
+ if (isBrowser()) {
37
+ _context2.next = 7;
38
+ break;
39
+ }
40
+
41
+ _context2.next = 5;
42
+ return require("./serverRender").render(context, (context === null || context === void 0 ? void 0 : context.ssrContext.distDir) || path.join(process.cwd(), 'dist'), App);
43
+
44
+ case 5:
45
+ html = _context2.sent;
46
+ return _context2.abrupt("return", html);
47
+
48
+ case 7:
49
+ return _context2.abrupt("return", null);
50
+
51
+ case 8:
52
+ case "end":
53
+ return _context2.stop();
54
+ }
55
+ }
56
+ }, _callee);
57
+ }));
58
+
59
+ function server(_x) {
60
+ return _server.apply(this, arguments);
61
+ }
62
+
63
+ return server;
64
+ }(),
65
+ init: function init(_ref2, next) {
66
+ var context = _ref2.context;
67
+ var request = context.ssrContext.request;
68
+ context.ssrContext.request = formatServer(request);
69
+ return next({
70
+ context: context
71
+ });
72
+ },
73
+ pickContext: function pickContext(_ref3, next) {
74
+ var context = _ref3.context,
75
+ pickedContext = _ref3.pickedContext;
76
+
77
+ var _context$ssrContext = context === null || context === void 0 ? void 0 : context.ssrContext,
78
+ request = _context$ssrContext.request,
79
+ response = _context$ssrContext.response;
80
+
81
+ var initialData = context.initialData;
82
+ return next({
83
+ context: context,
84
+ pickedContext: _objectSpread(_objectSpread({}, pickedContext), {}, {
85
+ initialData: initialData,
86
+ request: request,
87
+ response: response
88
+ })
89
+ });
90
+ }
91
+ };
92
+ }
93
+ };
94
+ };
95
+
96
+ export default plugin;
97
+ export * from "./react";
98
+ /* eslint-enable @typescript-eslint/no-require-imports */
99
+
100
+ /* eslint-enable @typescript-eslint/no-var-requires */
@@ -0,0 +1,97 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import path from 'path';
4
+ import fs from 'fs';
5
+ import { renderToStaticMarkup } from 'react-dom/server';
6
+ import { run } from '@modern-js/utils/ssr';
7
+ import { LOADABLE_STATS_FILE } from '@modern-js/utils/constants';
8
+ import { ChunkExtractor } from '@loadable/server'; // todo: SSRContext
9
+
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+
12
+ var prefetch = /*#__PURE__*/function () {
13
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(App, context) {
14
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
15
+ while (1) {
16
+ switch (_context2.prev = _context2.next) {
17
+ case 0:
18
+ return _context2.abrupt("return", run(context.ssrContext.request.headers, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
19
+ var _context$store;
20
+
21
+ var ssrContext, loadablefile, extractor, loadersData;
22
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
23
+ while (1) {
24
+ switch (_context.prev = _context.next) {
25
+ case 0:
26
+ ssrContext = context.ssrContext;
27
+ loadablefile = path.resolve(ssrContext.distDir, LOADABLE_STATS_FILE);
28
+
29
+ if (fs.existsSync(loadablefile)) {
30
+ extractor = new ChunkExtractor({
31
+ statsFile: path.resolve(ssrContext.distDir, LOADABLE_STATS_FILE),
32
+ entrypoints: [ssrContext.entryName].filter(Boolean)
33
+ });
34
+ renderToStaticMarkup(extractor.collectChunks( /*#__PURE__*/_jsx(App, {
35
+ context: context
36
+ })));
37
+ } else {
38
+ renderToStaticMarkup( /*#__PURE__*/_jsx(App, {
39
+ context: context
40
+ }));
41
+ }
42
+
43
+ if (context.loaderManager.hasPendingLoaders()) {
44
+ _context.next = 5;
45
+ break;
46
+ }
47
+
48
+ return _context.abrupt("return", {
49
+ initialData: context.initialData,
50
+ i18nData: context.__i18nData__
51
+ });
52
+
53
+ case 5:
54
+ _context.next = 7;
55
+ return context.loaderManager.awaitPendingLoaders();
56
+
57
+ case 7:
58
+ loadersData = _context.sent;
59
+ Object.keys(loadersData).forEach(function (id) {
60
+ var data = loadersData[id];
61
+
62
+ if (data._error) {
63
+ ssrContext.logger.error('App Prefetch Loader', data._error);
64
+ ssrContext.metrics.emitCounter('app.prefetch.loader.error', 1);
65
+ delete data._error;
66
+ }
67
+ });
68
+ return _context.abrupt("return", {
69
+ loadersData: loadersData,
70
+ initialData: context.initialData,
71
+ i18nData: context.__i18nData__,
72
+ // todo: move to plugin state
73
+ storeState: context === null || context === void 0 ? void 0 : (_context$store = context.store) === null || _context$store === void 0 ? void 0 : _context$store.getState()
74
+ });
75
+
76
+ case 10:
77
+ case "end":
78
+ return _context.stop();
79
+ }
80
+ }
81
+ }, _callee);
82
+ }))));
83
+
84
+ case 1:
85
+ case "end":
86
+ return _context2.stop();
87
+ }
88
+ }
89
+ }, _callee2);
90
+ }));
91
+
92
+ return function prefetch(_x, _x2) {
93
+ return _ref.apply(this, arguments);
94
+ };
95
+ }();
96
+
97
+ export default prefetch;
@@ -0,0 +1,2 @@
1
+ export { PreRender } from "./prerender";
2
+ export { NoSSR } from "./nossr";
@@ -0,0 +1,16 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { useEffect, useState } from 'react';
3
+ var csr = false;
4
+ export var NoSSR = function NoSSR(props) {
5
+ var _useState = useState(csr),
6
+ _useState2 = _slicedToArray(_useState, 2),
7
+ isMounted = _useState2[0],
8
+ setMounted = _useState2[1];
9
+
10
+ useEffect(function () {
11
+ csr = true;
12
+ setMounted(true);
13
+ });
14
+ var children = props.children;
15
+ return /*#__PURE__*/React.createElement(React.Fragment, null, isMounted ? children : null);
16
+ };
@@ -0,0 +1,119 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
4
+ import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
6
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
7
+ import withSideEffect from 'react-side-effect';
8
+ import React, { createElement } from 'react';
9
+ import { getOutermostProperty, aggKeysFromPropsList, exist, aggMatchesFromPropsList } from "./util";
10
+ var PROP_NAMES = {
11
+ INTERVAL: 'interval',
12
+ STALE_LIMIT: 'staleLimit',
13
+ LEVEL: 'level',
14
+ INCLUDES: 'includes',
15
+ EXCLUDES: 'excludes',
16
+ FALLBACK: 'fallback',
17
+ MATCHES: 'matches'
18
+ };
19
+
20
+ var handleClientStateChange = function handleClientStateChange() {// not used
21
+ };
22
+
23
+ var mapStateOnServer = function mapStateOnServer(reduceProps) {
24
+ var defaultProps = {
25
+ interval: 10,
26
+ staleLimit: false,
27
+ level: 0,
28
+ includes: null,
29
+ excludes: null,
30
+ fallback: false,
31
+ matches: null
32
+ };
33
+ return Object.keys(defaultProps).reduce(function (props, key) {
34
+ var propKey = key;
35
+ var reduceProp = reduceProps[propKey];
36
+ var nextProps = props;
37
+
38
+ if (exist(reduceProp)) {
39
+ nextProps = _objectSpread(_objectSpread({}, props), {}, _defineProperty({}, propKey, reduceProp));
40
+ }
41
+
42
+ return nextProps;
43
+ }, defaultProps);
44
+ };
45
+
46
+ var reducePropsToState = function reducePropsToState(propsList) {
47
+ var reduceProps = {
48
+ interval: getOutermostProperty(propsList, PROP_NAMES.INTERVAL),
49
+ staleLimit: getOutermostProperty(propsList, PROP_NAMES.STALE_LIMIT),
50
+ level: getOutermostProperty(propsList, PROP_NAMES.LEVEL),
51
+ includes: aggKeysFromPropsList(propsList, PROP_NAMES.INCLUDES),
52
+ excludes: aggKeysFromPropsList(propsList, PROP_NAMES.EXCLUDES),
53
+ fallback: getOutermostProperty(propsList, PROP_NAMES.FALLBACK),
54
+ matches: aggMatchesFromPropsList(propsList, PROP_NAMES.MATCHES)
55
+ };
56
+ return reduceProps;
57
+ };
58
+
59
+ function factory(Component) {
60
+ var Spr = /*#__PURE__*/function (_React$Component) {
61
+ _inherits(Spr, _React$Component);
62
+
63
+ var _super = _createSuper(Spr);
64
+
65
+ function Spr() {
66
+ _classCallCheck(this, Spr);
67
+
68
+ return _super.apply(this, arguments);
69
+ }
70
+
71
+ _createClass(Spr, [{
72
+ key: "verify",
73
+ value: function verify() {
74
+ return true;
75
+ }
76
+ }, {
77
+ key: "render",
78
+ value: function render() {
79
+ var newProps = _objectSpread({}, this.props);
80
+
81
+ var validate = this.verify();
82
+
83
+ if (!validate) {
84
+ throw new Error('invalid props, check usage');
85
+ }
86
+
87
+ return /*#__PURE__*/createElement(Component, _objectSpread({}, newProps));
88
+ }
89
+ }], [{
90
+ key: "canUseDOM",
91
+ get: function get() {
92
+ return Component.canUseDOM;
93
+ },
94
+ set: function set(canUseDOM) {
95
+ Component.canUseDOM = canUseDOM;
96
+ }
97
+ }]);
98
+
99
+ return Spr;
100
+ }(React.Component);
101
+
102
+ _defineProperty(Spr, "peek", Component.peek);
103
+
104
+ _defineProperty(Spr, "rewind", Component.rewind);
105
+
106
+ _defineProperty(Spr, "config", function () {
107
+ var mappedState = Component.rewind();
108
+ return mappedState;
109
+ });
110
+
111
+ return Spr;
112
+ }
113
+
114
+ var NullComponent = function NullComponent() {
115
+ return null;
116
+ };
117
+
118
+ var SprSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);
119
+ export var PreRender = factory(SprSideEffects);
@@ -0,0 +1,115 @@
1
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
2
+ var REQUEST_META = ['header', 'query'];
3
+ export var getInnermostProperty = function getInnermostProperty(propsList, propName) {
4
+ for (var i = propsList.length - 1; i >= 0; i--) {
5
+ var props = propsList[i];
6
+
7
+ if (props.hasOwnProperty(propName)) {
8
+ return props[propName];
9
+ }
10
+ }
11
+
12
+ return null;
13
+ };
14
+ export var getOutermostProperty = function getOutermostProperty(propsList, propName) {
15
+ var _iterator = _createForOfIteratorHelper(propsList),
16
+ _step;
17
+
18
+ try {
19
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
20
+ var props = _step.value;
21
+
22
+ if (props.hasOwnProperty(propName)) {
23
+ return props[propName];
24
+ }
25
+ }
26
+ } catch (err) {
27
+ _iterator.e(err);
28
+ } finally {
29
+ _iterator.f();
30
+ }
31
+
32
+ return null;
33
+ };
34
+ export var aggKeysFromPropsList = function aggKeysFromPropsList(propsList, propName) {
35
+ var initResult = REQUEST_META.reduce(function (result, next) {
36
+ var key = next;
37
+ result[key] = [];
38
+ return result;
39
+ }, {});
40
+ var res = propsList.filter(function (props) {
41
+ return usefulObject(props[propName]);
42
+ }).reduce(function (result, next) {
43
+ REQUEST_META.forEach(function (key) {
44
+ var prop = next[propName];
45
+
46
+ if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulArray(prop[key])) {
47
+ result[key] = unique(result[key].concat(prop[key]));
48
+ }
49
+ });
50
+ return result;
51
+ }, initResult);
52
+ return REQUEST_META.reduce(function (result, next) {
53
+ var _result$key;
54
+
55
+ var key = next;
56
+
57
+ if (result[key] && ((_result$key = result[key]) === null || _result$key === void 0 ? void 0 : _result$key.length) === 0) {
58
+ delete result[key];
59
+ }
60
+
61
+ return result;
62
+ }, res);
63
+ };
64
+ export var aggMatchesFromPropsList = function aggMatchesFromPropsList(propsList, propName) {
65
+ var initResult = REQUEST_META.reduce(function (result, next) {
66
+ var key = next;
67
+ result[key] = {};
68
+ return result;
69
+ }, {});
70
+ var res = propsList.filter(function (props) {
71
+ return usefulObject(props[propName]);
72
+ }).reduce(function (result, next) {
73
+ REQUEST_META.forEach(function (key) {
74
+ var prop = next[propName]; // 这边目前是浅拷贝,越后渲染优先级越高
75
+
76
+ if (prop !== null && prop !== void 0 && prop.hasOwnProperty(key) && usefulObject(prop[key])) {
77
+ result[key] = Object.assign(result[key], prop[key]);
78
+ }
79
+ });
80
+ return result;
81
+ }, initResult);
82
+ return REQUEST_META.reduce(function (result, next) {
83
+ var key = next;
84
+
85
+ if (result[key] && Object.keys(result[key]).length === 0) {
86
+ delete result[key];
87
+ }
88
+
89
+ return result;
90
+ }, res);
91
+ };
92
+
93
+ function unique(arr) {
94
+ return Array.from(new Set(arr));
95
+ }
96
+
97
+ function usefulObject(target) {
98
+ if (!exist(target)) {
99
+ return false;
100
+ }
101
+
102
+ return target.constructor === Object && Object.keys(target).length > 0;
103
+ }
104
+
105
+ function usefulArray(target) {
106
+ if (!exist(target)) {
107
+ return false;
108
+ }
109
+
110
+ return Array.isArray(target) && target.length > 0;
111
+ }
112
+
113
+ export function exist(target) {
114
+ return target != null;
115
+ }