@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
@@ -0,0 +1,170 @@
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
+ import path from 'path';
5
+ import React from 'react';
6
+ import ReactDomServer from 'react-dom/server';
7
+ import { build } from 'esbuild';
8
+ import { createDebugger, findExists } from '@modern-js/utils';
9
+ import { DocumentContext } from "../DocumentContext";
10
+ import { DOCUMENT_SCRIPTS_PLACEHOLDER, DOCUMENT_FILE_NAME, DOCUMENT_META_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP, DOC_EXT, DOCUMENT_SSR_PLACEHOLDER, DOCUMENT_CHUNKSMAP_PLACEHOLDER, DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, HTML_SEPARATOR } from "../constants";
11
+ var debug = createDebugger('html_genarate');
12
+ var getDocumenByEntryName = function getDocumenByEntryName(entrypoints, entryName) {
13
+ var _entrypoints$find;
14
+ var entryDir = (_entrypoints$find = entrypoints.find(function (item) {
15
+ return item.entryName === entryName;
16
+ })) === null || _entrypoints$find === void 0 ? void 0 : _entrypoints$find.absoluteEntryDir;
17
+ var docFile = findExists(DOC_EXT.map(function (item) {
18
+ return "".concat(entryDir).concat(path.sep).concat(DOCUMENT_FILE_NAME, ".").concat(item);
19
+ }));
20
+ return docFile || undefined;
21
+ };
22
+ export default (function () {
23
+ return {
24
+ name: '@modern-js/plugin-document',
25
+ pre: ['@modern-js/plugin-analyze'],
26
+ setup: function () {
27
+ var _setup = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(api) {
28
+ var getDocParams, documentEntry;
29
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
30
+ while (1) {
31
+ switch (_context2.prev = _context2.next) {
32
+ case 0:
33
+ getDocParams = function _getDocParams(params) {
34
+ var config = params.config,
35
+ templateParameters = params.templateParameters,
36
+ entryName = params.entryName;
37
+ // for enough params, devide as:process, config, templateParams
38
+ return {
39
+ processEnv: process.env,
40
+ config: {
41
+ output: config.output
42
+ },
43
+ entryName: entryName,
44
+ templateParams: templateParameters
45
+ };
46
+ };
47
+ documentEntry = function documentEntry(entryName, templateParameters) {
48
+ var _api$useAppContext = api.useAppContext(),
49
+ entrypoints = _api$useAppContext.entrypoints,
50
+ internalDirectory = _api$useAppContext.internalDirectory;
51
+ // search the document.[tsx|jsx|js|ts] under entry
52
+ // if not, use main as default
53
+ var documentFilePath = getDocumenByEntryName(entrypoints, entryName);
54
+ if (!documentFilePath) {
55
+ documentFilePath = getDocumenByEntryName(entrypoints, 'main');
56
+ }
57
+ // if no document file, do nothing as default
58
+ if (!documentFilePath) {
59
+ return null;
60
+ }
61
+ return /*#__PURE__*/function () {
62
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
63
+ var htmlWebpackPlugin, documentParams, htmlOutputFile, Document, HTMLElement, html, scripts, metas;
64
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
65
+ while (1) {
66
+ switch (_context.prev = _context.next) {
67
+ case 0:
68
+ htmlWebpackPlugin = _ref.htmlWebpackPlugin;
69
+ documentParams = getDocParams({
70
+ config: api.useConfigContext(),
71
+ entryName: entryName,
72
+ templateParameters: templateParameters
73
+ });
74
+ htmlOutputFile = path.join(internalDirectory, "./document/_".concat(entryName, ".html.js")); // transform document file to html string
75
+ _context.next = 5;
76
+ return build({
77
+ entryPoints: [documentFilePath],
78
+ // write: false,
79
+ outfile: htmlOutputFile,
80
+ platform: 'node',
81
+ target: 'es6',
82
+ loader: {
83
+ '.ts': 'ts',
84
+ '.tsx': 'tsx'
85
+ },
86
+ bundle: true,
87
+ plugins: [{
88
+ name: 'make-all-packages-external',
89
+ setup: function setup(build) {
90
+ // https://github.com/evanw/esbuild/issues/619#issuecomment-751995294
91
+ build.onResolve({
92
+ filter: /^[^./]|^\.[^./]|^\.\.[^/]/
93
+ }, function (args) {
94
+ var external = true;
95
+ // FIXME: windows external entrypoint
96
+ if (args.kind === 'entry-point') {
97
+ external = false;
98
+ }
99
+ return {
100
+ path: args.path,
101
+ external: external
102
+ };
103
+ });
104
+ }
105
+ }]
106
+ });
107
+ case 5:
108
+ _context.next = 7;
109
+ return import(htmlOutputFile);
110
+ case 7:
111
+ Document = _context.sent["default"];
112
+ HTMLElement = /*#__PURE__*/React.createElement(DocumentContext.Provider, {
113
+ value: documentParams
114
+ }, /*#__PURE__*/React.createElement(Document, null));
115
+ html = ReactDomServer.renderToStaticMarkup(HTMLElement);
116
+ debug("entry %s's document jsx rendered html: %o", entryName, html);
117
+ scripts = [htmlWebpackPlugin.tags.headTags.filter(function (item) {
118
+ return item.tagName === 'script';
119
+ }).join(''), htmlWebpackPlugin.tags.bodyTags.toString()].join('');
120
+ metas = [templateParameters.meta, htmlWebpackPlugin.tags.headTags.filter(function (item) {
121
+ return item.tagName !== 'script';
122
+ }).join('')].join(''); // replace the html placeholder while transfer string to jsx component is not a easy way
123
+ return _context.abrupt("return", "<!DOCTYPE html>".concat(html).replace(DOCUMENT_META_PLACEHOLDER, metas).replace(DOCUMENT_SSR_PLACEHOLDER, HTML_SEPARATOR).replace(DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(DOCUMENT_CHUNKSMAP_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP[DOCUMENT_CHUNKSMAP_PLACEHOLDER]).replace(DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, PLACEHOLDER_REPLACER_MAP[DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]));
124
+ case 14:
125
+ case "end":
126
+ return _context.stop();
127
+ }
128
+ }
129
+ }, _callee);
130
+ }));
131
+ return function (_x2) {
132
+ return _ref2.apply(this, arguments);
133
+ };
134
+ }();
135
+ };
136
+ return _context2.abrupt("return", {
137
+ config: function config() {
138
+ return {
139
+ tools: {
140
+ htmlPlugin: function htmlPlugin(options, entry) {
141
+ // just for reuse the baseParames calculate by builder:
142
+ // https://github.com/modern-js-dev/modern.js/blob/1abb452a87ae1adbcf8da47d62c05da39cbe4d69/packages/builder/builder-webpack-provider/src/plugins/html.ts#L69-L103
143
+ var hackParameters = typeof (options === null || options === void 0 ? void 0 : options.templateParameters) === 'function' ? options === null || options === void 0 ? void 0 : options.templateParameters({}, {}, {}, {}) : _objectSpread({}, options === null || options === void 0 ? void 0 : options.templateParameters);
144
+ var templateContent = documentEntry(entry.entryName,
145
+ // options,
146
+ hackParameters);
147
+ var documentHtmlOptions = templateContent ? {
148
+ templateContent: templateContent,
149
+ inject: false
150
+ } : {};
151
+ return _objectSpread(_objectSpread({}, options), documentHtmlOptions);
152
+ }
153
+ }
154
+ };
155
+ }
156
+ });
157
+ case 3:
158
+ case "end":
159
+ return _context2.stop();
160
+ }
161
+ }
162
+ }, _callee2);
163
+ }));
164
+ function setup(_x) {
165
+ return _setup.apply(this, arguments);
166
+ }
167
+ return setup;
168
+ }()
169
+ };
170
+ });
@@ -0,0 +1,16 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ var _PLACEHOLDER_REPLACER;
3
+ export var DOC_EXT = ['jsx', 'tsx', 'ts', 'js'];
4
+ export var DOCUMENT_META_PLACEHOLDER = encodeURIComponent('<%= meta %>');
5
+ export var HTML_SEPARATOR = '<!--<?- html ?>-->';
6
+ export var HTML_CHUNKSMAP_SEPARATOR = '<!--<?- chunksMap.js ?>-->';
7
+ export var HTML_SSRDATASCRIPT_SEPARATOR = '<!--<?- SSRDataScript ?>-->';
8
+ // export const HTML_BOTTOMTPL_SEPARATOR = '<!--<?- bottomTemplate ?>-->'; // document jsx not need bottom
9
+
10
+ export var DOCUMENT_SSR_PLACEHOLDER = encodeURIComponent(HTML_SEPARATOR);
11
+ export var DOCUMENT_CHUNKSMAP_PLACEHOLDER = encodeURIComponent(HTML_CHUNKSMAP_SEPARATOR);
12
+ export var DOCUMENT_SSRDATASCRIPT_PLACEHOLDER = encodeURIComponent(HTML_SSRDATASCRIPT_SEPARATOR);
13
+ export var DOCUMENT_FILE_NAME = 'document';
14
+ export var DOCUMENT_SCRIPTS_PLACEHOLDER = encodeURIComponent('<!-- chunk scripts placeholder -->');
15
+ export var DOCUMENT_NO_SCRIPTE_PLACEHOLDER = encodeURIComponent('<!-- no-script -->');
16
+ export var PLACEHOLDER_REPLACER_MAP = (_PLACEHOLDER_REPLACER = {}, _defineProperty(_PLACEHOLDER_REPLACER, DOCUMENT_NO_SCRIPTE_PLACEHOLDER, "We're sorry but react app doesn't work properly without JavaScript enabled. Please enable it to continue."), _defineProperty(_PLACEHOLDER_REPLACER, DOCUMENT_SSR_PLACEHOLDER, HTML_SEPARATOR), _defineProperty(_PLACEHOLDER_REPLACER, DOCUMENT_CHUNKSMAP_PLACEHOLDER, HTML_CHUNKSMAP_SEPARATOR), _defineProperty(_PLACEHOLDER_REPLACER, DOCUMENT_SSRDATASCRIPT_PLACEHOLDER, HTML_SSRDATASCRIPT_SEPARATOR), _PLACEHOLDER_REPLACER);
@@ -0,0 +1,8 @@
1
+ export * from "./Html";
2
+ export * from "./DocumentContext";
3
+ export * from "./DocumentStructrueContext";
4
+ export * from "./Head";
5
+ export * from "./Body";
6
+ export * from "./Root";
7
+ export * from "./Scripts";
8
+ export * from "./constants";
@@ -1,2 +1,2 @@
1
1
  export { isBrowser } from "./common";
2
- export { createApp, createPlugin, useLoader, bootstrap, RuntimeReactContext, registerPrefetch, defineConfig, registerInit, useRuntimeContext } from "./core";
2
+ export { createApp, createPlugin, useLoader, bootstrap, RuntimeReactContext, defineConfig, registerInit, useRuntimeContext } from "./core";
@@ -26,20 +26,16 @@ export default (function () {
26
26
  },
27
27
  modifyEntryImports: function modifyEntryImports(_ref) {
28
28
  var _userConfig$runtime, _userConfig$runtime$r;
29
-
30
29
  var entrypoint = _ref.entrypoint,
31
- imports = _ref.imports;
30
+ imports = _ref.imports;
32
31
  var entryName = entrypoint.entryName,
33
- fileSystemRoutes = entrypoint.fileSystemRoutes;
32
+ fileSystemRoutes = entrypoint.fileSystemRoutes;
34
33
  var userConfig = api.useResolvedConfigContext();
35
34
  var isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime = userConfig.runtime) === null || _userConfig$runtime === void 0 ? void 0 : (_userConfig$runtime$r = _userConfig$runtime.router) === null || _userConfig$runtime$r === void 0 ? void 0 : _userConfig$runtime$r.legacy);
36
-
37
35
  var _api$useAppContext = api.useAppContext(),
38
- packageName = _api$useAppContext.packageName;
39
-
36
+ packageName = _api$useAppContext.packageName;
40
37
  var runtimeConfig = getEntryOptions(entryName, userConfig.runtime, userConfig.runtimeByEntries, packageName);
41
38
  runtimeConfigMap.set(entryName, runtimeConfig);
42
-
43
39
  if (runtimeConfig !== null && runtimeConfig !== void 0 && runtimeConfig.router) {
44
40
  if (!isLegacy) {
45
41
  imports.push({
@@ -52,7 +48,6 @@ export default (function () {
52
48
  } else if (fileSystemRoutes) {
53
49
  throw new Error("should enable runtime.router for entry ".concat(entryName));
54
50
  }
55
-
56
51
  return {
57
52
  entrypoint: entrypoint,
58
53
  imports: imports
@@ -60,19 +55,15 @@ export default (function () {
60
55
  },
61
56
  modifyEntryRuntimePlugins: function modifyEntryRuntimePlugins(_ref2) {
62
57
  var _userConfig$runtime2, _userConfig$runtime2$;
63
-
64
58
  var entrypoint = _ref2.entrypoint,
65
- plugins = _ref2.plugins;
59
+ plugins = _ref2.plugins;
66
60
  var entryName = entrypoint.entryName,
67
- fileSystemRoutes = entrypoint.fileSystemRoutes;
68
-
61
+ fileSystemRoutes = entrypoint.fileSystemRoutes;
69
62
  var _api$useAppContext2 = api.useAppContext(),
70
- serverRoutes = _api$useAppContext2.serverRoutes;
71
-
63
+ serverRoutes = _api$useAppContext2.serverRoutes;
72
64
  var userConfig = api.useResolvedConfigContext();
73
65
  var isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime2 = userConfig.runtime) === null || _userConfig$runtime2 === void 0 ? void 0 : (_userConfig$runtime2$ = _userConfig$runtime2.router) === null || _userConfig$runtime2$ === void 0 ? void 0 : _userConfig$runtime2$.legacy);
74
66
  var runtimeConfig = runtimeConfigMap.get(entryName);
75
-
76
67
  if (runtimeConfig.router && !isLegacy) {
77
68
  // Todo: plugin-router best to only handle manage client route.
78
69
  // here support base server route usage, part for compatibility
@@ -92,7 +83,6 @@ export default (function () {
92
83
  })).replace(/"routesConfig"\s*:\s*"((\S|\s)+)"/g, '"routesConfig": $1,')
93
84
  });
94
85
  }
95
-
96
86
  return {
97
87
  entrypoint: entrypoint,
98
88
  plugins: plugins
@@ -100,10 +90,8 @@ export default (function () {
100
90
  },
101
91
  addRuntimeExports: function addRuntimeExports() {
102
92
  var _userConfig$runtime3, _userConfig$runtime3$;
103
-
104
93
  var userConfig = api.useResolvedConfigContext();
105
94
  var isLegacy = Boolean(userConfig === null || userConfig === void 0 ? void 0 : (_userConfig$runtime3 = userConfig.runtime) === null || _userConfig$runtime3 === void 0 ? void 0 : (_userConfig$runtime3$ = _userConfig$runtime3.router) === null || _userConfig$runtime3$ === void 0 ? void 0 : _userConfig$runtime3$.legacy);
106
-
107
95
  if (!isLegacy) {
108
96
  pluginsExportsUtils.addExport("export { default as router } from '@modern-js/runtime/router'");
109
97
  }
@@ -6,25 +6,22 @@ import { renderRoutes } from "./utils";
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
7
  export var routerPlugin = function routerPlugin(_ref) {
8
8
  var _ref$serverBase = _ref.serverBase,
9
- serverBase = _ref$serverBase === void 0 ? [] : _ref$serverBase,
10
- _ref$supportHtml5Hist = _ref.supportHtml5History,
11
- supportHtml5History = _ref$supportHtml5Hist === void 0 ? true : _ref$supportHtml5Hist,
12
- routesConfig = _ref.routesConfig,
13
- createRoutes = _ref.createRoutes;
14
-
9
+ serverBase = _ref$serverBase === void 0 ? [] : _ref$serverBase,
10
+ _ref$supportHtml5Hist = _ref.supportHtml5History,
11
+ supportHtml5History = _ref$supportHtml5Hist === void 0 ? true : _ref$supportHtml5Hist,
12
+ routesConfig = _ref.routesConfig,
13
+ createRoutes = _ref.createRoutes;
15
14
  var select = function select(pathname) {
16
15
  return serverBase.find(function (baseUrl) {
17
16
  return pathname.search(baseUrl) === 0;
18
17
  }) || '/';
19
18
  };
20
-
21
19
  return {
22
20
  name: '@modern-js/plugin-router',
23
21
  setup: function setup() {
24
22
  return {
25
23
  hoc: function hoc(_ref2, next) {
26
24
  var App = _ref2.App;
27
-
28
25
  // can not get routes config, skip wrapping React Router.
29
26
  // e.g. App.tsx as the entrypoint
30
27
  if (!routesConfig) {
@@ -32,11 +29,9 @@ export var routerPlugin = function routerPlugin(_ref) {
32
29
  App: App
33
30
  });
34
31
  }
35
-
36
32
  var getRouteApp = function getRouteApp() {
37
33
  return function (props) {
38
34
  var _window$_SERVER_DATA;
39
-
40
35
  var routeElements = renderRoutes(routesConfig);
41
36
  var routes = createRoutes ? createRoutes() : createRoutesFromElements(routeElements);
42
37
  var baseUrl = ((_window$_SERVER_DATA = window._SERVER_DATA) === null || _window$_SERVER_DATA === void 0 ? void 0 : _window$_SERVER_DATA.router.baseUrl) || select(location.pathname);
@@ -52,15 +47,12 @@ export var routerPlugin = function routerPlugin(_ref) {
52
47
  }));
53
48
  };
54
49
  };
55
-
56
50
  var RouteApp = getRouteApp();
57
-
58
51
  if (routesConfig.globalApp) {
59
52
  return next({
60
53
  App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
61
54
  });
62
55
  }
63
-
64
56
  return next({
65
57
  App: RouteApp
66
58
  });
@@ -10,17 +10,21 @@ import hoistNonReactStatics from 'hoist-non-react-statics';
10
10
  import { installGlobals } from '@remix-run/node';
11
11
  import { createRoutesFromElements } from 'react-router-dom';
12
12
  import { RuntimeReactContext } from "../../core";
13
- import { renderRoutes } from "./utils"; // Polyfill Web Fetch API
13
+ import { renderRoutes } from "./utils";
14
14
 
15
+ // Polyfill Web Fetch API
15
16
  import { jsx as _jsx } from "react/jsx-runtime";
16
- installGlobals(); // TODO: polish
17
+ installGlobals();
17
18
 
19
+ // TODO: polish
18
20
  function createFetchRequest(req) {
19
21
  // const origin = `${req.protocol}://${req.get('host')}`;
20
- var origin = "".concat(req.protocol, "://").concat(req.host); // Note: This had to take originalUrl into account for presumably vite's proxying
21
-
22
+ var origin = "".concat(req.protocol, "://").concat(req.host);
23
+ // Note: This had to take originalUrl into account for presumably vite's proxying
22
24
  var url = new URL(req.originalUrl || req.url, origin);
23
- var controller = new AbortController(); // req.on('close', () => {
25
+ var controller = new AbortController();
26
+
27
+ // req.on('close', () => {
24
28
  // controller.abort();
25
29
  // });
26
30
 
@@ -28,26 +32,24 @@ function createFetchRequest(req) {
28
32
  method: req.method,
29
33
  headers: createFetchHeaders(req.headers),
30
34
  signal: controller.signal
31
- }; // if (req.method !== 'GET' && req.method !== 'HEAD') {
35
+ };
36
+
37
+ // if (req.method !== 'GET' && req.method !== 'HEAD') {
32
38
  // init.body = req.body;
33
39
  // }
34
40
 
35
41
  return new Request(url.href, init);
36
42
  }
37
-
38
43
  export function createFetchHeaders(requestHeaders) {
39
44
  var headers = new Headers();
40
-
41
45
  for (var _i = 0, _Object$entries = Object.entries(requestHeaders); _i < _Object$entries.length; _i++) {
42
46
  var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
43
- key = _Object$entries$_i[0],
44
- values = _Object$entries$_i[1];
45
-
47
+ key = _Object$entries$_i[0],
48
+ values = _Object$entries$_i[1];
46
49
  if (values) {
47
50
  if (Array.isArray(values)) {
48
51
  var _iterator = _createForOfIteratorHelper(values),
49
- _step;
50
-
52
+ _step;
51
53
  try {
52
54
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
53
55
  var value = _step.value;
@@ -63,12 +65,11 @@ export function createFetchHeaders(requestHeaders) {
63
65
  }
64
66
  }
65
67
  }
66
-
67
68
  return headers;
68
69
  }
69
70
  export var routerPlugin = function routerPlugin(_ref) {
70
71
  var routesConfig = _ref.routesConfig,
71
- createRoutes = _ref.createRoutes;
72
+ createRoutes = _ref.createRoutes;
72
73
  return {
73
74
  name: '@modern-js/plugin-router',
74
75
  setup: function setup() {
@@ -76,22 +77,18 @@ export var routerPlugin = function routerPlugin(_ref) {
76
77
  init: function init(_ref2, next) {
77
78
  return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
78
79
  var context, _ref3, request, routeElements, routes, _createStaticHandler, query, remixRequest, routerContext, router;
79
-
80
80
  return _regeneratorRuntime().wrap(function _callee$(_context) {
81
81
  while (1) {
82
82
  switch (_context.prev = _context.next) {
83
83
  case 0:
84
84
  context = _ref2.context;
85
-
86
85
  if (routesConfig) {
87
86
  _context.next = 3;
88
87
  break;
89
88
  }
90
-
91
89
  return _context.abrupt("return", next({
92
90
  context: context
93
91
  }));
94
-
95
92
  case 3:
96
93
  _ref3 = context.ssrContext, request = _ref3.request;
97
94
  routeElements = renderRoutes(routesConfig);
@@ -100,28 +97,24 @@ export var routerPlugin = function routerPlugin(_ref) {
100
97
  remixRequest = createFetchRequest(request);
101
98
  _context.next = 10;
102
99
  return query(remixRequest);
103
-
104
100
  case 10:
105
101
  routerContext = _context.sent;
106
-
107
102
  if (!(routerContext instanceof Response)) {
108
103
  _context.next = 13;
109
104
  break;
110
105
  }
111
-
112
- return _context.abrupt("return", next({
113
- context: context
114
- }));
115
-
106
+ return _context.abrupt("return", routerContext);
116
107
  case 13:
117
108
  router = createStaticRouter(routes, routerContext);
118
109
  context.router = router;
119
110
  context.routerContext = routerContext;
111
+ context.routes = routes;
112
+ // set routeManifest in context to be consistent with csr context
113
+ context.routeManifest = context.ssrContext.routeManifest;
120
114
  return _context.abrupt("return", next({
121
115
  context: context
122
116
  }));
123
-
124
- case 17:
117
+ case 19:
125
118
  case "end":
126
119
  return _context.stop();
127
120
  }
@@ -131,7 +124,6 @@ export var routerPlugin = function routerPlugin(_ref) {
131
124
  },
132
125
  hoc: function hoc(_ref4, next) {
133
126
  var App = _ref4.App;
134
-
135
127
  // can not get routes config, skip wrapping React Router.
136
128
  // e.g. App.tsx as the entrypoint
137
129
  if (!routesConfig) {
@@ -139,13 +131,11 @@ export var routerPlugin = function routerPlugin(_ref) {
139
131
  App: App
140
132
  });
141
133
  }
142
-
143
134
  var getRouteApp = function getRouteApp() {
144
135
  return function (props) {
145
136
  var _useContext = useContext(RuntimeReactContext),
146
- router = _useContext.router,
147
- routerContext = _useContext.routerContext;
148
-
137
+ router = _useContext.router,
138
+ routerContext = _useContext.routerContext;
149
139
  return /*#__PURE__*/_jsx(App, _objectSpread(_objectSpread({}, props), {}, {
150
140
  children: /*#__PURE__*/_jsx(StaticRouterProvider, {
151
141
  router: router,
@@ -155,15 +145,12 @@ export var routerPlugin = function routerPlugin(_ref) {
155
145
  }));
156
146
  };
157
147
  };
158
-
159
148
  var RouteApp = getRouteApp();
160
-
161
149
  if (routesConfig.globalApp) {
162
150
  return next({
163
151
  App: hoistNonReactStatics(RouteApp, routesConfig.globalApp)
164
152
  });
165
153
  }
166
-
167
154
  return next({
168
155
  App: RouteApp
169
156
  });
@@ -0,0 +1,17 @@
1
+ import React, { useContext, useEffect } from 'react';
2
+ import { useLocation } from 'react-router-dom';
3
+ import { RuntimeReactContext } from "../../../core";
4
+ import { handleLoad } from "./load";
5
+ import { Fragment as _Fragment } from "react/jsx-runtime";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export function RootLayout(props) {
8
+ var location = useLocation();
9
+ var context = useContext(RuntimeReactContext);
10
+ useEffect(function () {
11
+ var routes = props.routes;
12
+ handleLoad(routes, location, context.routeManifest);
13
+ }, [location]);
14
+ return /*#__PURE__*/_jsx(_Fragment, {
15
+ children: props.children
16
+ });
17
+ }
@@ -0,0 +1,102 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
4
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
5
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
6
+ import { matchRoutes } from 'react-router-dom';
7
+ var Logger = /*#__PURE__*/function () {
8
+ function Logger(options) {
9
+ _classCallCheck(this, Logger);
10
+ _defineProperty(this, "enableLogging", void 0);
11
+ this.enableLogging = options.enableLogging;
12
+ }
13
+ _createClass(Logger, [{
14
+ key: "log",
15
+ value: function log() {
16
+ if (this.enableLogging) {
17
+ var _console;
18
+ // eslint-disable-next-line no-console
19
+ (_console = console).log.apply(_console, arguments);
20
+ }
21
+ }
22
+ }], [{
23
+ key: "getLogger",
24
+ value: function getLogger(options) {
25
+ if (this.logger) {
26
+ return this.logger;
27
+ }
28
+ this.logger = new Logger(options);
29
+ return this.logger;
30
+ }
31
+ }]);
32
+ return Logger;
33
+ }();
34
+ _defineProperty(Logger, "logger", void 0);
35
+ export function handleLoad(routes, location, routeManifest) {
36
+ if (!routeManifest || !routeManifest.enableFetchParallel === false) {
37
+ return;
38
+ }
39
+ var routeAssets = routeManifest.routeAssets;
40
+ Logger.getLogger({
41
+ enableLogging: routeManifest.enableLogging
42
+ }).log('handle page load');
43
+ var matches = matchClientRoutes(routes, location);
44
+ matches === null || matches === void 0 ? void 0 : matches.forEach(function (match) {
45
+ return loadRouteModule(match.route, routeAssets);
46
+ });
47
+ }
48
+ export function matchClientRoutes(routes, location) {
49
+ var matches = matchRoutes(routes, location);
50
+ return matches;
51
+ }
52
+ export function loadRouteModule(_x, _x2) {
53
+ return _loadRouteModule.apply(this, arguments);
54
+ }
55
+ function _loadRouteModule() {
56
+ _loadRouteModule = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(route, routeAssets) {
57
+ var routeId, chunkIds;
58
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
59
+ while (1) {
60
+ switch (_context.prev = _context.next) {
61
+ case 0:
62
+ routeId = route.id;
63
+ if (routeId) {
64
+ _context.next = 3;
65
+ break;
66
+ }
67
+ return _context.abrupt("return");
68
+ case 3:
69
+ if (routeAssets[routeId]) {
70
+ _context.next = 5;
71
+ break;
72
+ }
73
+ return _context.abrupt("return");
74
+ case 5:
75
+ chunkIds = routeAssets[routeId].chunkIds;
76
+ if (chunkIds) {
77
+ _context.next = 8;
78
+ break;
79
+ }
80
+ return _context.abrupt("return");
81
+ case 8:
82
+ _context.prev = 8;
83
+ _context.next = 11;
84
+ return Promise.all(chunkIds.map(function (chunkId) {
85
+ return __webpack_chunk_load__(String(chunkId));
86
+ }));
87
+ case 11:
88
+ _context.next = 16;
89
+ break;
90
+ case 13:
91
+ _context.prev = 13;
92
+ _context.t0 = _context["catch"](8);
93
+ console.error(_context.t0);
94
+ case 16:
95
+ case "end":
96
+ return _context.stop();
97
+ }
98
+ }
99
+ }, _callee, null, [[8, 13]]);
100
+ }));
101
+ return _loadRouteModule.apply(this, arguments);
102
+ }