@modern-js/runtime 2.0.0-beta.0 → 2.0.0-beta.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 (204) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist/js/modern/cli/index.js +3 -5
  3. package/dist/js/modern/core/app-config.js +2 -1
  4. package/dist/js/modern/core/compatible.js +63 -46
  5. package/dist/js/modern/core/index.js +3 -2
  6. package/dist/js/modern/core/loader/loaderManager.js +12 -34
  7. package/dist/js/modern/core/loader/useLoader.js +8 -26
  8. package/dist/js/modern/core/plugin.js +6 -28
  9. package/dist/js/modern/document/Body.js +17 -0
  10. package/dist/js/modern/document/DocumentContext.js +6 -0
  11. package/dist/js/modern/document/DocumentStructrueContext.js +7 -0
  12. package/dist/js/modern/document/Head.js +24 -0
  13. package/dist/js/modern/document/Html.js +92 -0
  14. package/dist/js/modern/document/Root.js +31 -0
  15. package/dist/js/modern/document/Scripts.js +10 -0
  16. package/dist/js/modern/document/cli/index.js +130 -0
  17. package/dist/js/modern/document/constants.js +19 -0
  18. package/dist/js/modern/document/index.js +8 -0
  19. package/dist/js/modern/index.js +1 -1
  20. package/dist/js/modern/router/cli/index.js +0 -16
  21. package/dist/js/modern/router/runtime/plugin.js +0 -9
  22. package/dist/js/modern/router/runtime/plugin.node.js +18 -24
  23. package/dist/js/modern/router/runtime/root/index.js +19 -0
  24. package/dist/js/modern/router/runtime/root/load.js +61 -0
  25. package/dist/js/modern/router/runtime/utils.js +16 -35
  26. package/dist/js/modern/router/runtime/withRouter.js +1 -3
  27. package/dist/js/modern/ssr/cli/index.js +2 -23
  28. package/dist/js/modern/ssr/index.js +23 -34
  29. package/dist/js/modern/ssr/index.node.js +0 -13
  30. package/dist/js/modern/ssr/prefetch.js +0 -7
  31. package/dist/js/modern/ssr/react/prerender/index.js +2 -23
  32. package/dist/js/modern/ssr/react/prerender/util.js +2 -17
  33. package/dist/js/modern/ssr/react/withCallback/index.js +0 -1
  34. package/dist/js/modern/ssr/serverRender/helmet.js +12 -20
  35. package/dist/js/modern/ssr/serverRender/index.js +1 -2
  36. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -5
  37. package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +45 -11
  38. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +6 -39
  39. package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +0 -2
  40. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +26 -15
  41. package/dist/js/modern/ssr/serverRender/renderToStream/template.js +14 -18
  42. package/dist/js/modern/ssr/serverRender/renderToString/entry.js +2 -34
  43. package/dist/js/modern/ssr/serverRender/renderToString/index.js +0 -2
  44. package/dist/js/modern/ssr/serverRender/renderToString/loadable.js +0 -10
  45. package/dist/js/modern/ssr/serverRender/renderToString/reduce.js +0 -2
  46. package/dist/js/modern/ssr/serverRender/renderToString/template.js +0 -15
  47. package/dist/js/modern/ssr/serverRender/renderToString/type.js +0 -1
  48. package/dist/js/modern/ssr/serverRender/utils.js +2 -6
  49. package/dist/js/modern/ssr/utils.js +0 -11
  50. package/dist/js/modern/state/cli/index.js +0 -10
  51. package/dist/js/modern/state/runtime/plugin.js +1 -14
  52. package/dist/js/node/cli/index.js +3 -13
  53. package/dist/js/node/common.js +0 -2
  54. package/dist/js/node/core/app-config.js +2 -5
  55. package/dist/js/node/core/compatible.js +63 -64
  56. package/dist/js/node/core/index.js +0 -16
  57. package/dist/js/node/core/loader/index.js +0 -2
  58. package/dist/js/node/core/loader/loaderManager.js +12 -37
  59. package/dist/js/node/core/loader/useLoader.js +8 -31
  60. package/dist/js/node/core/plugin.js +5 -34
  61. package/dist/js/node/document/Body.js +26 -0
  62. package/dist/js/node/document/DocumentContext.js +14 -0
  63. package/dist/js/node/document/DocumentStructrueContext.js +15 -0
  64. package/dist/js/node/document/Head.js +33 -0
  65. package/dist/js/node/document/Html.js +98 -0
  66. package/dist/js/node/document/Root.js +41 -0
  67. package/dist/js/node/document/Scripts.js +17 -0
  68. package/dist/js/node/document/cli/index.js +140 -0
  69. package/dist/js/node/document/constants.js +36 -0
  70. package/dist/js/node/document/index.js +93 -0
  71. package/dist/js/node/exports/head.js +0 -5
  72. package/dist/js/node/exports/loadable.js +0 -5
  73. package/dist/js/node/exports/server.js +0 -2
  74. package/dist/js/node/exports/styled.js +0 -5
  75. package/dist/js/node/index.js +0 -8
  76. package/dist/js/node/router/cli/index.js +0 -20
  77. package/dist/js/node/router/index.js +0 -4
  78. package/dist/js/node/router/runtime/DefaultNotFound.js +1 -5
  79. package/dist/js/node/router/runtime/index.js +0 -5
  80. package/dist/js/node/router/runtime/plugin.js +0 -17
  81. package/dist/js/node/router/runtime/plugin.node.js +16 -38
  82. package/dist/js/node/router/runtime/root/index.js +26 -0
  83. package/dist/js/node/router/runtime/root/load.js +69 -0
  84. package/dist/js/node/router/runtime/utils.js +16 -44
  85. package/dist/js/node/router/runtime/withRouter.js +0 -9
  86. package/dist/js/node/runtime-context.js +0 -2
  87. package/dist/js/node/ssr/cli/index.js +2 -26
  88. package/dist/js/node/ssr/index.js +23 -45
  89. package/dist/js/node/ssr/index.node.js +0 -23
  90. package/dist/js/node/ssr/prefetch.js +0 -11
  91. package/dist/js/node/ssr/react/index.js +0 -2
  92. package/dist/js/node/ssr/react/nossr/index.js +0 -6
  93. package/dist/js/node/ssr/react/prerender/index.js +2 -30
  94. package/dist/js/node/ssr/react/prerender/util.js +2 -25
  95. package/dist/js/node/ssr/react/withCallback/index.js +1 -4
  96. package/dist/js/node/ssr/serverRender/helmet.js +13 -20
  97. package/dist/js/node/ssr/serverRender/index.js +1 -4
  98. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -9
  99. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +0 -1
  100. package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +43 -15
  101. package/dist/js/node/ssr/serverRender/renderToStream/index.js +6 -48
  102. package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +0 -4
  103. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +26 -17
  104. package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +0 -2
  105. package/dist/js/node/ssr/serverRender/renderToStream/template.js +16 -23
  106. package/dist/js/node/ssr/serverRender/renderToString/entry.js +2 -51
  107. package/dist/js/node/ssr/serverRender/renderToString/index.js +0 -10
  108. package/dist/js/node/ssr/serverRender/renderToString/loadable.js +0 -14
  109. package/dist/js/node/ssr/serverRender/renderToString/reduce.js +0 -3
  110. package/dist/js/node/ssr/serverRender/renderToString/styledComponent.js +0 -3
  111. package/dist/js/node/ssr/serverRender/renderToString/template.js +0 -18
  112. package/dist/js/node/ssr/serverRender/renderToString/type.js +0 -1
  113. package/dist/js/node/ssr/serverRender/types.js +0 -1
  114. package/dist/js/node/ssr/serverRender/utils.js +2 -8
  115. package/dist/js/node/ssr/utils.js +0 -20
  116. package/dist/js/node/state/cli/index.js +0 -15
  117. package/dist/js/node/state/index.js +0 -4
  118. package/dist/js/node/state/plugins.js +0 -11
  119. package/dist/js/node/state/runtime/index.js +0 -7
  120. package/dist/js/node/state/runtime/plugin.js +1 -25
  121. package/dist/js/treeshaking/cli/index.js +3 -3
  122. package/dist/js/treeshaking/core/app-config.js +2 -1
  123. package/dist/js/treeshaking/core/compatible.js +66 -63
  124. package/dist/js/treeshaking/core/index.js +3 -2
  125. package/dist/js/treeshaking/core/loader/loaderManager.js +19 -51
  126. package/dist/js/treeshaking/core/loader/useLoader.js +11 -28
  127. package/dist/js/treeshaking/core/plugin.js +6 -51
  128. package/dist/js/treeshaking/document/Body.js +14 -0
  129. package/dist/js/treeshaking/document/DocumentContext.js +6 -0
  130. package/dist/js/treeshaking/document/DocumentStructrueContext.js +7 -0
  131. package/dist/js/treeshaking/document/Head.js +21 -0
  132. package/dist/js/treeshaking/document/Html.js +104 -0
  133. package/dist/js/treeshaking/document/Root.js +24 -0
  134. package/dist/js/treeshaking/document/Scripts.js +10 -0
  135. package/dist/js/treeshaking/document/cli/index.js +170 -0
  136. package/dist/js/treeshaking/document/constants.js +16 -0
  137. package/dist/js/treeshaking/document/index.js +8 -0
  138. package/dist/js/treeshaking/index.js +1 -1
  139. package/dist/js/treeshaking/router/cli/index.js +6 -18
  140. package/dist/js/treeshaking/router/runtime/plugin.js +5 -13
  141. package/dist/js/treeshaking/router/runtime/plugin.node.js +23 -36
  142. package/dist/js/treeshaking/router/runtime/root/index.js +17 -0
  143. package/dist/js/treeshaking/router/runtime/root/load.js +102 -0
  144. package/dist/js/treeshaking/router/runtime/utils.js +21 -39
  145. package/dist/js/treeshaking/router/runtime/withRouter.js +1 -0
  146. package/dist/js/treeshaking/ssr/cli/index.js +9 -31
  147. package/dist/js/treeshaking/ssr/index.js +26 -40
  148. package/dist/js/treeshaking/ssr/index.node.js +12 -29
  149. package/dist/js/treeshaking/ssr/prefetch.js +0 -13
  150. package/dist/js/treeshaking/ssr/react/nossr/index.js +3 -4
  151. package/dist/js/treeshaking/ssr/react/prerender/index.js +2 -21
  152. package/dist/js/treeshaking/ssr/react/prerender/util.js +3 -20
  153. package/dist/js/treeshaking/ssr/react/withCallback/index.js +1 -2
  154. package/dist/js/treeshaking/ssr/serverRender/helmet.js +12 -11
  155. package/dist/js/treeshaking/ssr/serverRender/index.js +1 -9
  156. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +5 -6
  157. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +46 -15
  158. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +9 -79
  159. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +3 -5
  160. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +46 -35
  161. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +17 -24
  162. package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +20 -73
  163. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +2 -6
  164. package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +5 -16
  165. package/dist/js/treeshaking/ssr/serverRender/renderToString/reduce.js +0 -2
  166. package/dist/js/treeshaking/ssr/serverRender/renderToString/template.js +2 -18
  167. package/dist/js/treeshaking/ssr/serverRender/renderToString/type.js +0 -1
  168. package/dist/js/treeshaking/ssr/serverRender/utils.js +5 -10
  169. package/dist/js/treeshaking/ssr/utils.js +8 -17
  170. package/dist/js/treeshaking/state/cli/index.js +3 -10
  171. package/dist/js/treeshaking/state/runtime/plugin.js +2 -10
  172. package/dist/types/cli/index.d.ts +0 -2
  173. package/dist/types/core/compatible.d.ts +5 -5
  174. package/dist/types/core/index.d.ts +1 -1
  175. package/dist/types/core/loader/loaderManager.d.ts +0 -1
  176. package/dist/types/core/loader/useLoader.d.ts +0 -5
  177. package/dist/types/core/plugin.d.ts +1 -13
  178. package/dist/types/document/Body.d.ts +4 -0
  179. package/dist/types/document/DocumentContext.d.ts +13 -0
  180. package/dist/types/document/DocumentStructrueContext.d.ts +10 -0
  181. package/dist/types/document/Head.d.ts +5 -0
  182. package/dist/types/document/Html.d.ts +4 -0
  183. package/dist/types/document/Root.d.ts +8 -0
  184. package/dist/types/document/Scripts.d.ts +2 -0
  185. package/dist/types/document/cli/index.d.ts +3 -0
  186. package/dist/types/document/constants.d.ts +14 -0
  187. package/dist/types/document/index.d.ts +8 -0
  188. package/dist/types/exports/server.d.ts +3 -3
  189. package/dist/types/index.d.ts +1 -1
  190. package/dist/types/router/cli/index.d.ts +0 -2
  191. package/dist/types/router/runtime/root/index.d.ts +8 -0
  192. package/dist/types/router/runtime/root/load.d.ts +22 -0
  193. package/dist/types/router/runtime/types.d.ts +0 -2
  194. package/dist/types/runtime-context.d.ts +1 -0
  195. package/dist/types/ssr/cli/index.d.ts +0 -2
  196. package/dist/types/ssr/prefetch.d.ts +2 -2
  197. package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +3 -2
  198. package/dist/types/ssr/serverRender/renderToStream/bulidTemplate.before.d.ts +2 -1
  199. package/dist/types/ssr/serverRender/renderToStream/renderToPipe.d.ts +3 -3
  200. package/dist/types/ssr/serverRender/renderToStream/template.d.ts +2 -2
  201. package/dist/types/ssr/serverRender/types.d.ts +1 -4
  202. package/dist/types/state/cli/index.d.ts +0 -2
  203. package/dist/types/state/types.d.ts +0 -1
  204. package/package.json +19 -11
@@ -4,7 +4,6 @@ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
4
4
  import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
5
5
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
6
6
  import invariant from 'invariant';
7
-
8
7
  /**
9
8
  * Calc id from string or object
10
9
  */
@@ -12,28 +11,24 @@ var createGetId = function createGetId() {
12
11
  var idCache = new Map();
13
12
  return function (objectId) {
14
13
  var cachedId = idCache.get(objectId);
15
-
16
14
  if (cachedId) {
17
15
  return cachedId;
18
- } // WARNING: id should be unique after serialize.
19
-
16
+ }
20
17
 
18
+ // WARNING: id should be unique after serialize.
21
19
  var id = JSON.stringify(objectId);
22
20
  invariant(id, 'params should be not null value');
23
21
  idCache.set(objectId, id);
24
22
  return id;
25
23
  };
26
24
  };
27
-
28
25
  export var LoaderStatus;
29
-
30
26
  (function (LoaderStatus) {
31
27
  LoaderStatus[LoaderStatus["idle"] = 0] = "idle";
32
28
  LoaderStatus[LoaderStatus["loading"] = 1] = "loading";
33
29
  LoaderStatus[LoaderStatus["fulfilled"] = 2] = "fulfilled";
34
30
  LoaderStatus[LoaderStatus["rejected"] = 3] = "rejected";
35
31
  })(LoaderStatus || (LoaderStatus = {}));
36
-
37
32
  var createLoader = function createLoader(id) {
38
33
  var initialData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
39
34
  loading: false,
@@ -46,10 +41,9 @@ var createLoader = function createLoader(id) {
46
41
  var promise;
47
42
  var status = LoaderStatus.idle;
48
43
  var data = initialData.data,
49
- error = initialData.error;
44
+ error = initialData.error;
50
45
  var hasLoaded = false;
51
46
  var handlers = new Set();
52
-
53
47
  var load = /*#__PURE__*/function () {
54
48
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
55
49
  return _regeneratorRuntime().wrap(function _callee$(_context) {
@@ -60,17 +54,13 @@ var createLoader = function createLoader(id) {
60
54
  _context.next = 2;
61
55
  break;
62
56
  }
63
-
64
57
  return _context.abrupt("return", promise);
65
-
66
58
  case 2:
67
59
  if (!(status === LoaderStatus.loading)) {
68
60
  _context.next = 4;
69
61
  break;
70
62
  }
71
-
72
63
  return _context.abrupt("return", promise);
73
-
74
64
  case 4:
75
65
  status = LoaderStatus.loading;
76
66
  notify();
@@ -88,7 +78,6 @@ var createLoader = function createLoader(id) {
88
78
  notify();
89
79
  });
90
80
  return _context.abrupt("return", promise);
91
-
92
81
  case 8:
93
82
  case "end":
94
83
  return _context.stop();
@@ -96,12 +85,10 @@ var createLoader = function createLoader(id) {
96
85
  }
97
86
  }, _callee);
98
87
  }));
99
-
100
88
  return function load() {
101
89
  return _ref.apply(this, arguments);
102
90
  };
103
91
  }();
104
-
105
92
  var getResult = function getResult() {
106
93
  return {
107
94
  loading: !hasLoaded && status === LoaderStatus.loading,
@@ -112,35 +99,29 @@ var createLoader = function createLoader(id) {
112
99
  _error: error
113
100
  };
114
101
  };
115
-
116
102
  var notify = function notify() {
117
103
  // don't iterate handlers directly, since it could be modified during iteration
118
104
  _toConsumableArray(handlers).forEach(function (handler) {
119
105
  handler(status, getResult());
120
106
  });
121
107
  };
122
-
123
108
  var onChange = function onChange(handler) {
124
109
  handlers.add(handler);
125
110
  return function () {
126
111
  handlers["delete"](handler);
127
112
  };
128
113
  };
129
-
130
114
  return {
131
115
  get result() {
132
116
  return getResult();
133
117
  },
134
-
135
118
  get promise() {
136
119
  return promise;
137
120
  },
138
-
139
121
  onChange: onChange,
140
122
  load: load
141
123
  };
142
124
  };
143
-
144
125
  /**
145
126
  * Create loaders manager. It's returned instance will add to context
146
127
  * @param initialDataMap used to initialing loader data
@@ -148,48 +129,45 @@ var createLoader = function createLoader(id) {
148
129
  export var createLoaderManager = function createLoaderManager(initialDataMap) {
149
130
  var managerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
150
131
  var _managerOptions$skipS = managerOptions.skipStatic,
151
- skipStatic = _managerOptions$skipS === void 0 ? false : _managerOptions$skipS,
152
- _managerOptions$skipN = managerOptions.skipNonStatic,
153
- skipNonStatic = _managerOptions$skipN === void 0 ? false : _managerOptions$skipN;
132
+ skipStatic = _managerOptions$skipS === void 0 ? false : _managerOptions$skipS,
133
+ _managerOptions$skipN = managerOptions.skipNonStatic,
134
+ skipNonStatic = _managerOptions$skipN === void 0 ? false : _managerOptions$skipN;
154
135
  var loadersMap = new Map();
155
136
  var getId = createGetId();
156
-
157
137
  var add = function add(loaderFn, loaderOptions) {
158
138
  var id = getId(loaderOptions.params);
159
- var loader = loadersMap.get(id); // private property for opting out loader cache, maybe change in future
139
+ var loader = loadersMap.get(id);
160
140
 
141
+ // private property for opting out loader cache, maybe change in future
161
142
  var cache = loaderOptions._cache;
162
-
163
143
  if (!loader || cache === false) {
164
144
  // ignore non-static loader on static phase
165
- var ignoreNonStatic = skipNonStatic && !loaderOptions["static"]; // ignore static loader on non-static phase
145
+ var ignoreNonStatic = skipNonStatic && !loaderOptions["static"];
166
146
 
147
+ // ignore static loader on non-static phase
167
148
  var ignoreStatic = skipStatic && loaderOptions["static"];
168
149
  var skipExec = ignoreNonStatic || ignoreStatic;
169
150
  loader = createLoader(id, typeof initialDataMap[id] !== 'undefined' ? initialDataMap[id] : {
170
151
  data: loaderOptions.initialData
171
- }, loaderFn, // Todo whether static loader is exec when CSR
152
+ }, loaderFn,
153
+ // Todo whether static loader is exec when CSR
172
154
  skipExec);
173
155
  loadersMap.set(id, loader);
174
156
  }
175
-
176
157
  return id;
177
158
  };
178
-
179
159
  var get = function get(id) {
180
160
  return loadersMap.get(id);
181
- }; // check if there has pending loaders
182
-
161
+ };
183
162
 
163
+ // check if there has pending loaders
184
164
  var hasPendingLoaders = function hasPendingLoaders() {
185
165
  var _iterator = _createForOfIteratorHelper(loadersMap.values()),
186
- _step;
187
-
166
+ _step;
188
167
  try {
189
168
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
190
169
  var loader = _step.value;
191
170
  var promise = loader.promise;
192
-
193
171
  if (promise instanceof Promise) {
194
172
  return true;
195
173
  }
@@ -199,27 +177,23 @@ export var createLoaderManager = function createLoaderManager(initialDataMap) {
199
177
  } finally {
200
178
  _iterator.f();
201
179
  }
202
-
203
180
  return false;
204
- }; // waiting for all pending loaders to be settled
205
-
181
+ };
206
182
 
183
+ // waiting for all pending loaders to be settled
207
184
  var awaitPendingLoaders = /*#__PURE__*/function () {
208
185
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
209
186
  var pendingLoaders, _iterator2, _step2, _step2$value, id, loader, promise;
210
-
211
187
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
212
188
  while (1) {
213
189
  switch (_context2.prev = _context2.next) {
214
190
  case 0:
215
191
  pendingLoaders = [];
216
192
  _iterator2 = _createForOfIteratorHelper(loadersMap);
217
-
218
193
  try {
219
194
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
220
195
  _step2$value = _slicedToArray(_step2.value, 2), id = _step2$value[0], loader = _step2$value[1];
221
196
  promise = loader.promise;
222
-
223
197
  if (promise instanceof Promise) {
224
198
  pendingLoaders.push([id, loader]);
225
199
  }
@@ -229,22 +203,18 @@ export var createLoaderManager = function createLoaderManager(initialDataMap) {
229
203
  } finally {
230
204
  _iterator2.f();
231
205
  }
232
-
233
206
  _context2.next = 5;
234
207
  return Promise.all(pendingLoaders.map(function (item) {
235
208
  return item[1].promise;
236
209
  }));
237
-
238
210
  case 5:
239
211
  return _context2.abrupt("return", pendingLoaders.reduce(function (res, _ref3) {
240
212
  var _ref4 = _slicedToArray(_ref3, 2),
241
- id = _ref4[0],
242
- loader = _ref4[1];
243
-
213
+ id = _ref4[0],
214
+ loader = _ref4[1];
244
215
  res[id] = loader.result;
245
216
  return res;
246
217
  }, {}));
247
-
248
218
  case 6:
249
219
  case "end":
250
220
  return _context2.stop();
@@ -252,12 +222,10 @@ export var createLoaderManager = function createLoaderManager(initialDataMap) {
252
222
  }
253
223
  }, _callee2);
254
224
  }));
255
-
256
225
  return function awaitPendingLoaders() {
257
226
  return _ref2.apply(this, arguments);
258
227
  };
259
228
  }();
260
-
261
229
  return {
262
230
  hasPendingLoaders: hasPendingLoaders,
263
231
  awaitPendingLoaders: awaitPendingLoaders,
@@ -4,7 +4,6 @@ import { useContext, useRef, useMemo, useState, useCallback, useEffect } from 'r
4
4
  import invariant from 'invariant';
5
5
  import { RuntimeReactContext } from "../../runtime-context";
6
6
  import { LoaderStatus } from "./loaderManager";
7
-
8
7
  var useLoader = function useLoader(loaderFn) {
9
8
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
10
9
  params: undefined
@@ -13,29 +12,24 @@ var useLoader = function useLoader(loaderFn) {
13
12
  var isSSRRender = Boolean(context.ssr);
14
13
  var loaderManager = context.loaderManager;
15
14
  var loaderRef = useRef();
16
- var unlistenLoaderChangeRef = useRef(null); // SSR render should ignore `_cache` prop
15
+ var unlistenLoaderChangeRef = useRef(null);
17
16
 
17
+ // SSR render should ignore `_cache` prop
18
18
  if (isSSRRender && Object.prototype.hasOwnProperty.call(options, '_cache')) {
19
19
  delete options._cache;
20
20
  }
21
-
22
21
  var load = useCallback(function (params) {
23
22
  var _unlistenLoaderChange, _window, _window$_SSR_DATA, _window$_SSR_DATA$dat, _window$_SSR_DATA$dat2, _loaderRef$current2;
24
-
25
23
  if (typeof params === 'undefined') {
26
24
  var _loaderRef$current;
27
-
28
25
  return (_loaderRef$current = loaderRef.current) === null || _loaderRef$current === void 0 ? void 0 : _loaderRef$current.load();
29
26
  }
30
-
31
27
  var id = loaderManager.add(function () {
32
28
  try {
33
29
  var _res = loaderFn(context, params);
34
-
35
30
  if (_res instanceof Promise) {
36
31
  return _res;
37
32
  }
38
-
39
33
  return Promise.resolve(_res);
40
34
  } catch (e) {
41
35
  return Promise.reject(e);
@@ -43,37 +37,31 @@ var useLoader = function useLoader(loaderFn) {
43
37
  }, _objectSpread(_objectSpread({}, options), {}, {
44
38
  params: params
45
39
  }));
46
- loaderRef.current = loaderManager.get(id); // unsubscribe old loader onChange event
47
-
40
+ loaderRef.current = loaderManager.get(id);
41
+ // unsubscribe old loader onChange event
48
42
  (_unlistenLoaderChange = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChange === void 0 ? void 0 : _unlistenLoaderChange.call(unlistenLoaderChangeRef);
49
-
50
43
  if (isSSRRender) {
51
44
  return undefined;
52
- } // skip this loader, then try to unlisten loader change
53
-
45
+ }
54
46
 
47
+ // skip this loader, then try to unlisten loader change
55
48
  if (options.skip) {
56
49
  return undefined;
57
- } // do not load data again in CSR hydrate stage if SSR data exists
58
-
50
+ }
59
51
 
52
+ // do not load data again in CSR hydrate stage if SSR data exists
60
53
  if (context._hydration && ((_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$dat = _window$_SSR_DATA.data) === null || _window$_SSR_DATA$dat === void 0 ? void 0 : (_window$_SSR_DATA$dat2 = _window$_SSR_DATA$dat.loadersData[id]) === null || _window$_SSR_DATA$dat2 === void 0 ? void 0 : _window$_SSR_DATA$dat2.error) === null) {
61
54
  return undefined;
62
55
  }
63
-
64
56
  var res = loaderRef.current.load();
65
57
  unlistenLoaderChangeRef.current = (_loaderRef$current2 = loaderRef.current) === null || _loaderRef$current2 === void 0 ? void 0 : _loaderRef$current2.onChange(function (_status, _result) {
66
58
  setResult(_result);
67
-
68
59
  if (_status === LoaderStatus.fulfilled) {
69
60
  var _options$onSuccess;
70
-
71
61
  options === null || options === void 0 ? void 0 : (_options$onSuccess = options.onSuccess) === null || _options$onSuccess === void 0 ? void 0 : _options$onSuccess.call(options, _result.data);
72
62
  }
73
-
74
63
  if (_status === LoaderStatus.rejected) {
75
64
  var _options$onError;
76
-
77
65
  options === null || options === void 0 ? void 0 : (_options$onError = options.onError) === null || _options$onError === void 0 ? void 0 : _options$onError.call(options, _result.error);
78
66
  }
79
67
  });
@@ -82,26 +70,21 @@ var useLoader = function useLoader(loaderFn) {
82
70
  useEffect(function () {
83
71
  return function () {
84
72
  var _unlistenLoaderChange2;
85
-
86
73
  (_unlistenLoaderChange2 = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChange2 === void 0 ? void 0 : _unlistenLoaderChange2.call(unlistenLoaderChangeRef);
87
74
  };
88
75
  }, []);
89
76
  useMemo(function () {
90
77
  var _options$params;
91
-
92
78
  var p = (_options$params = options.params) !== null && _options$params !== void 0 ? _options$params : loaderFn.id;
93
79
  invariant(typeof p !== 'undefined' && p !== null, 'Params is required in useLoader');
94
80
  load(p);
95
81
  }, [options.params]);
96
-
97
82
  var _useState = useState(loaderRef.current.result),
98
- _useState2 = _slicedToArray(_useState, 2),
99
- result = _useState2[0],
100
- setResult = _useState2[1];
101
-
83
+ _useState2 = _slicedToArray(_useState, 2),
84
+ result = _useState2[0],
85
+ setResult = _useState2[1];
102
86
  return _objectSpread(_objectSpread({}, result), {}, {
103
87
  reload: load
104
88
  });
105
89
  };
106
-
107
90
  export default useLoader;
@@ -1,9 +1,10 @@
1
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
1
  import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
3
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
3
  import { createManager, createPipeline, createAsyncPipeline } from '@modern-js/plugin';
5
4
  import { createLoaderManager } from "./loader/loaderManager";
6
- var hoc = createPipeline(); // eslint-disable-next-line @typescript-eslint/no-empty-interface
5
+ var hoc = createPipeline();
6
+
7
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
7
8
 
8
9
  var provide = createPipeline();
9
10
  var client = createAsyncPipeline();
@@ -18,18 +19,18 @@ var runtimeHooks = {
18
19
  init: init,
19
20
  pickContext: pickContext
20
21
  };
22
+
21
23
  /** All hooks of runtime plugin. */
22
24
 
23
25
  export var createRuntime = function createRuntime() {
24
26
  return createManager(runtimeHooks);
25
27
  };
28
+
26
29
  /**
27
30
  * register init hook. It would be revoked both ssr and csr.
28
31
  */
29
-
30
32
  var registerInit = function registerInit(App, _init) {
31
33
  var originalInit = App.init;
32
-
33
34
  App.init = /*#__PURE__*/function () {
34
35
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(context) {
35
36
  return _regeneratorRuntime().wrap(function _callee$(_context) {
@@ -39,10 +40,8 @@ var registerInit = function registerInit(App, _init) {
39
40
  if (!context.loaderManager) {
40
41
  context.loaderManager = createLoaderManager({});
41
42
  }
42
-
43
43
  _context.next = 3;
44
44
  return Promise.all([originalInit === null || originalInit === void 0 ? void 0 : originalInit(context), _init === null || _init === void 0 ? void 0 : _init(context)]);
45
-
46
45
  case 3:
47
46
  case "end":
48
47
  return _context.stop();
@@ -50,56 +49,12 @@ var registerInit = function registerInit(App, _init) {
50
49
  }
51
50
  }, _callee);
52
51
  }));
53
-
54
52
  return function (_x) {
55
53
  return _ref.apply(this, arguments);
56
54
  };
57
55
  }();
58
56
  };
59
- /**
60
- * register prefetch hook. It would be revoked both ssr and csr.
61
- * But if ssr success, It wont exec in csr again.
62
- * If ssr prefetch failed, It will fallback to exec in csr.
63
- */
64
-
65
-
66
- var registerPrefetch = function registerPrefetch(App, prefetch) {
67
- var originalPrefetch = App.prefetch;
68
-
69
- App.prefetch = /*#__PURE__*/function () {
70
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(context) {
71
- var originResult, result;
72
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
73
- while (1) {
74
- switch (_context2.prev = _context2.next) {
75
- case 0:
76
- _context2.next = 2;
77
- return originalPrefetch === null || originalPrefetch === void 0 ? void 0 : originalPrefetch(context);
78
-
79
- case 2:
80
- originResult = _context2.sent;
81
- _context2.next = 5;
82
- return prefetch === null || prefetch === void 0 ? void 0 : prefetch(context);
83
-
84
- case 5:
85
- result = _context2.sent;
86
- return _context2.abrupt("return", _objectSpread(_objectSpread({}, originResult), result));
87
-
88
- case 7:
89
- case "end":
90
- return _context2.stop();
91
- }
92
- }
93
- }, _callee2);
94
- }));
95
-
96
- return function (_x2) {
97
- return _ref2.apply(this, arguments);
98
- };
99
- }();
100
- };
101
-
102
57
  export var runtime = createRuntime();
103
58
  var createPlugin = runtime.createPlugin;
104
59
  export { createPlugin };
105
- export { registerInit, registerPrefetch };
60
+ export { registerInit };
@@ -0,0 +1,14 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import React, { useContext } from 'react';
3
+ import { DOCUMENT_CHUNKSMAP_PLACEHOLDER, DOCUMENT_SSRDATASCRIPT_PLACEHOLDER } from "./constants";
4
+ import { DocumentStructrueContext } from "./DocumentStructrueContext";
5
+ import { DefaultRoot } from "./Root";
6
+ import { jsxs as _jsxs } from "react/jsx-runtime";
7
+ export function Body(props) {
8
+ var _useContext = useContext(DocumentStructrueContext),
9
+ hasSetRoot = _useContext.hasSetRoot;
10
+ var children = props.children;
11
+ return /*#__PURE__*/_jsxs("body", {
12
+ children: [hasSetRoot ? null : DefaultRoot, children, "".concat(DOCUMENT_CHUNKSMAP_PLACEHOLDER), "".concat(DOCUMENT_SSRDATASCRIPT_PLACEHOLDER)]
13
+ });
14
+ }
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export var DocumentContext = /*#__PURE__*/React.createContext({
3
+ config: {},
4
+ templateParams: {},
5
+ processEnv: {}
6
+ });
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ export var DocumentStructrueContext = /*#__PURE__*/React.createContext({
3
+ hasSetHead: false,
4
+ hasSetScripts: false,
5
+ hasSetBody: false,
6
+ hasSetRoot: false
7
+ });
@@ -0,0 +1,21 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import React, { useContext } from 'react';
3
+ import { DocumentStructrueContext } from "./DocumentStructrueContext";
4
+ import { Scripts } from "./Scripts";
5
+ import { DOCUMENT_META_PLACEHOLDER } from "./constants";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ import { jsxs as _jsxs } from "react/jsx-runtime";
8
+ export function Head(props) {
9
+ var _useContext = useContext(DocumentStructrueContext),
10
+ hasSetScripts = _useContext.hasSetScripts;
11
+ var children = props.children;
12
+ // todo: verify the children
13
+ return /*#__PURE__*/_jsxs("head", {
14
+ children: ["".concat(DOCUMENT_META_PLACEHOLDER), !hasSetScripts && /*#__PURE__*/_jsx(Scripts, {}), children]
15
+ });
16
+ }
17
+ export function DefaultHead() {
18
+ return /*#__PURE__*/_jsx("head", {
19
+ children: "".concat(DOCUMENT_META_PLACEHOLDER)
20
+ });
21
+ }
@@ -0,0 +1,104 @@
1
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
2
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3
+ import React from 'react';
4
+ import { Body } from "./Body";
5
+ import { DocumentStructrueContext } from "./DocumentStructrueContext";
6
+ import { Head } from "./Head";
7
+
8
+ /**
9
+ * get the directly son element
10
+ */
11
+ import { jsxs as _jsxs } from "react/jsx-runtime";
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ function findTargetChild(tag, children) {
14
+ return children.find(function (item) {
15
+ return getEleType(item) === tag;
16
+ });
17
+ }
18
+
19
+ /**
20
+ * get the type of react element
21
+ */
22
+ function getEleType(ele) {
23
+ // fixme: 非 react 的类型,有点儿问题。
24
+ return typeof (ele === null || ele === void 0 ? void 0 : ele.type) === 'function' ? ele.type.name : ele === null || ele === void 0 ? void 0 : ele.type;
25
+ }
26
+
27
+ /**
28
+ * get the children(grandChild included) with target type
29
+ * @param tag the element type
30
+ * @param children son element
31
+ * @returns target element
32
+ */
33
+ function findTargetElement(tag, children) {
34
+ if (children.length === 0) {
35
+ return null;
36
+ }
37
+ var nextChildren = [];
38
+ var _iterator = _createForOfIteratorHelper(children),
39
+ _step;
40
+ try {
41
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
42
+ var _item$props;
43
+ var item = _step.value;
44
+ if (tag === getEleType(item)) {
45
+ return item;
46
+ }
47
+ if (item !== null && item !== void 0 && (_item$props = item.props) !== null && _item$props !== void 0 && _item$props.children) {
48
+ nextChildren = nextChildren.concat(item.props.children);
49
+ }
50
+ }
51
+ } catch (err) {
52
+ _iterator.e(err);
53
+ } finally {
54
+ _iterator.f();
55
+ }
56
+ return findTargetElement(tag, nextChildren);
57
+ }
58
+ export function Html(props) {
59
+ var children = props.children;
60
+
61
+ // deal with the component with default
62
+ var hasSetHead = Boolean(findTargetChild('Head', children));
63
+ var hasSetScripts = Boolean(findTargetElement('Scripts', children));
64
+ var hasSetBody = Boolean(findTargetChild('Body', children));
65
+ var hasSetRoot = Boolean(findTargetElement('Root', children));
66
+ var notMissMustChild = [hasSetHead, hasSetBody
67
+ // hasSetScripts,
68
+ // hasSetRoot,
69
+ ].every(function (item) {
70
+ return item;
71
+ });
72
+
73
+ // todo: or throw an error
74
+ if (!notMissMustChild) {
75
+ return /*#__PURE__*/_jsx("html", {
76
+ children: /*#__PURE__*/_jsxs("body", {
77
+ style: {
78
+ color: 'red'
79
+ },
80
+ children: ["Miss the ", [hasSetHead, hasSetBody
81
+ // hasSetScripts,
82
+ // hasSetRoot,
83
+ ].map(function (item, index) {
84
+ return item ? null : ['Head', 'Body'
85
+ // 'Scripts',
86
+ // 'Root',
87
+ ][index];
88
+ }), " Element"]
89
+ })
90
+ });
91
+ }
92
+ return /*#__PURE__*/_jsx("html", {
93
+ children: /*#__PURE__*/_jsxs(DocumentStructrueContext.Provider, {
94
+ value: {
95
+ hasSetHead: hasSetHead,
96
+ hasSetScripts: hasSetScripts,
97
+ hasSetRoot: hasSetRoot,
98
+ hasSetBody: hasSetBody,
99
+ docChild: children
100
+ },
101
+ children: [!hasSetHead && /*#__PURE__*/_jsx(Head, {}), !hasSetBody && /*#__PURE__*/_jsx(Body, {}), children]
102
+ })
103
+ });
104
+ }
@@ -0,0 +1,24 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import React, { useContext } from 'react';
3
+ import { DocumentContext } from "./DocumentContext";
4
+ import { DOCUMENT_SSR_PLACEHOLDER } from "./constants";
5
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
+ export function Root(props) {
7
+ var rootId = props.rootId,
8
+ children = props.children;
9
+ var _useContext = useContext(DocumentContext),
10
+ _useContext$templateP = _useContext.templateParams.mountId,
11
+ mountId = _useContext$templateP === void 0 ? 'root' : _useContext$templateP;
12
+ return /*#__PURE__*/_jsxs("div", {
13
+ id: "".concat(rootId || mountId),
14
+ children: ["".concat(DOCUMENT_SSR_PLACEHOLDER), children]
15
+ });
16
+ }
17
+ export function DefaultRoot(props) {
18
+ var _useContext2 = useContext(DocumentContext),
19
+ mountId = _useContext2.templateParams.mountId;
20
+ return /*#__PURE__*/_jsxs("div", {
21
+ id: "".concat(mountId),
22
+ children: ["".concat(DOCUMENT_SSR_PLACEHOLDER), props.children]
23
+ });
24
+ }
@@ -0,0 +1,10 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
+ import React from 'react';
3
+ import { DOCUMENT_SCRIPTS_PLACEHOLDER } from "./constants";
4
+ import { Fragment as _Fragment } from "react/jsx-runtime";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export function Scripts() {
7
+ return /*#__PURE__*/_jsx(_Fragment, {
8
+ children: "".concat(DOCUMENT_SCRIPTS_PLACEHOLDER)
9
+ });
10
+ }