@modern-js/runtime 2.48.2 → 2.48.4-alpha.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 (232) hide show
  1. package/dist/cjs/ssr/index.js +1 -1
  2. package/dist/esm/ssr/index.js +1 -1
  3. package/dist/esm-node/ssr/index.js +1 -1
  4. package/dist/js/modern/cli/index.js +72 -0
  5. package/dist/js/modern/common.js +4 -0
  6. package/dist/js/modern/config.js +0 -0
  7. package/dist/js/modern/core/app-config.js +10 -0
  8. package/dist/js/modern/core/compatible.js +285 -0
  9. package/dist/js/modern/core/index.js +16 -0
  10. package/dist/js/modern/core/loader/index.js +4 -0
  11. package/dist/js/modern/core/loader/loaderManager.js +165 -0
  12. package/dist/js/modern/core/loader/useLoader.js +114 -0
  13. package/dist/js/modern/core/plugin.js +58 -0
  14. package/dist/js/modern/document/Body.js +23 -0
  15. package/dist/js/modern/document/DocumentContext.js +9 -0
  16. package/dist/js/modern/document/DocumentStructrueContext.js +11 -0
  17. package/dist/js/modern/document/Head.js +27 -0
  18. package/dist/js/modern/document/Html.js +78 -0
  19. package/dist/js/modern/document/Links.js +10 -0
  20. package/dist/js/modern/document/Root.js +33 -0
  21. package/dist/js/modern/document/Script.js +20 -0
  22. package/dist/js/modern/document/Scripts.js +10 -0
  23. package/dist/js/modern/document/cli/index.js +228 -0
  24. package/dist/js/modern/document/constants.js +49 -0
  25. package/dist/js/modern/document/index.js +10 -0
  26. package/dist/js/modern/exports/head.js +6 -0
  27. package/dist/js/modern/exports/loadable.js +6 -0
  28. package/dist/js/modern/exports/server.js +4 -0
  29. package/dist/js/modern/exports/styled.js +6 -0
  30. package/dist/js/modern/index.js +22 -0
  31. package/dist/js/modern/router/cli/index.js +120 -0
  32. package/dist/js/modern/router/index.js +7 -0
  33. package/dist/js/modern/router/runtime/DefaultNotFound.js +14 -0
  34. package/dist/js/modern/router/runtime/index.js +9 -0
  35. package/dist/js/modern/router/runtime/plugin.js +104 -0
  36. package/dist/js/modern/router/runtime/plugin.node.js +149 -0
  37. package/dist/js/modern/router/runtime/server.js +1 -0
  38. package/dist/js/modern/router/runtime/types.js +0 -0
  39. package/dist/js/modern/router/runtime/utils.js +196 -0
  40. package/dist/js/modern/router/runtime/withRouter.js +36 -0
  41. package/dist/js/modern/runtime-context.js +7 -0
  42. package/dist/js/modern/ssr/cli/babel-plugin-ssr-loader-id.js +130 -0
  43. package/dist/js/modern/ssr/cli/index.js +172 -0
  44. package/dist/js/modern/ssr/index.js +159 -0
  45. package/dist/js/modern/ssr/index.node.js +79 -0
  46. package/dist/js/modern/ssr/prefetch.js +69 -0
  47. package/dist/js/modern/ssr/react/index.js +6 -0
  48. package/dist/js/modern/ssr/react/nossr/index.js +14 -0
  49. package/dist/js/modern/ssr/react/prerender/index.js +108 -0
  50. package/dist/js/modern/ssr/react/prerender/type.js +0 -0
  51. package/dist/js/modern/ssr/react/prerender/util.js +96 -0
  52. package/dist/js/modern/ssr/react/withCallback/index.js +15 -0
  53. package/dist/js/modern/ssr/serverRender/helmet.js +44 -0
  54. package/dist/js/modern/ssr/serverRender/index.js +35 -0
  55. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.after.js +36 -0
  56. package/dist/js/modern/ssr/serverRender/renderToStream/buildTemplate.share.js +11 -0
  57. package/dist/js/modern/ssr/serverRender/renderToStream/bulidTemplate.before.js +61 -0
  58. package/dist/js/modern/ssr/serverRender/renderToStream/index.js +58 -0
  59. package/dist/js/modern/ssr/serverRender/renderToStream/loadable.js +24 -0
  60. package/dist/js/modern/ssr/serverRender/renderToStream/renderToPipe.js +94 -0
  61. package/dist/js/modern/ssr/serverRender/renderToStream/styledComponent.js +12 -0
  62. package/dist/js/modern/ssr/serverRender/renderToStream/template.js +22 -0
  63. package/dist/js/modern/ssr/serverRender/renderToStream/type.js +0 -0
  64. package/dist/js/modern/ssr/serverRender/renderToString/entry.js +171 -0
  65. package/dist/js/modern/ssr/serverRender/renderToString/index.js +52 -0
  66. package/dist/js/modern/ssr/serverRender/renderToString/loadable.js +48 -0
  67. package/dist/js/modern/ssr/serverRender/renderToString/reduce.js +8 -0
  68. package/dist/js/modern/ssr/serverRender/renderToString/styledComponent.js +11 -0
  69. package/dist/js/modern/ssr/serverRender/renderToString/template.js +58 -0
  70. package/dist/js/modern/ssr/serverRender/renderToString/type.js +9 -0
  71. package/dist/js/modern/ssr/serverRender/types.js +4 -0
  72. package/dist/js/modern/ssr/serverRender/utils.js +22 -0
  73. package/dist/js/modern/ssr/utils.js +81 -0
  74. package/dist/js/modern/state/cli/index.js +83 -0
  75. package/dist/js/modern/state/index.js +7 -0
  76. package/dist/js/modern/state/plugins.js +13 -0
  77. package/dist/js/modern/state/runtime/index.js +9 -0
  78. package/dist/js/modern/state/runtime/plugin.js +97 -0
  79. package/dist/js/modern/state/types.js +0 -0
  80. package/dist/js/node/cli/index.js +99 -0
  81. package/dist/js/node/common.js +27 -0
  82. package/dist/js/node/config.js +15 -0
  83. package/dist/js/node/core/app-config.js +34 -0
  84. package/dist/js/node/core/compatible.js +312 -0
  85. package/dist/js/node/core/index.js +47 -0
  86. package/dist/js/node/core/loader/index.js +33 -0
  87. package/dist/js/node/core/loader/loaderManager.js +195 -0
  88. package/dist/js/node/core/loader/useLoader.js +132 -0
  89. package/dist/js/node/core/plugin.js +80 -0
  90. package/dist/js/node/document/Body.js +43 -0
  91. package/dist/js/node/document/DocumentContext.js +38 -0
  92. package/dist/js/node/document/DocumentStructrueContext.js +40 -0
  93. package/dist/js/node/document/Head.js +51 -0
  94. package/dist/js/node/document/Html.js +101 -0
  95. package/dist/js/node/document/Links.js +33 -0
  96. package/dist/js/node/document/Root.js +57 -0
  97. package/dist/js/node/document/Script.js +40 -0
  98. package/dist/js/node/document/Scripts.js +33 -0
  99. package/dist/js/node/document/cli/index.js +240 -0
  100. package/dist/js/node/document/constants.js +86 -0
  101. package/dist/js/node/document/index.js +26 -0
  102. package/dist/js/node/exports/head.js +34 -0
  103. package/dist/js/node/exports/loadable.js +34 -0
  104. package/dist/js/node/exports/server.js +27 -0
  105. package/dist/js/node/exports/styled.js +34 -0
  106. package/dist/js/node/index.js +44 -0
  107. package/dist/js/node/router/cli/index.js +135 -0
  108. package/dist/js/node/router/index.js +37 -0
  109. package/dist/js/node/router/runtime/DefaultNotFound.js +37 -0
  110. package/dist/js/node/router/runtime/index.js +33 -0
  111. package/dist/js/node/router/runtime/plugin.js +127 -0
  112. package/dist/js/node/router/runtime/plugin.node.js +175 -0
  113. package/dist/js/node/router/runtime/server.js +17 -0
  114. package/dist/js/node/router/runtime/types.js +15 -0
  115. package/dist/js/node/router/runtime/utils.js +221 -0
  116. package/dist/js/node/router/runtime/withRouter.js +57 -0
  117. package/dist/js/node/runtime-context.js +31 -0
  118. package/dist/js/node/ssr/cli/babel-plugin-ssr-loader-id.js +139 -0
  119. package/dist/js/node/ssr/cli/index.js +190 -0
  120. package/dist/js/node/ssr/index.js +185 -0
  121. package/dist/js/node/ssr/index.node.js +107 -0
  122. package/dist/js/node/ssr/prefetch.js +90 -0
  123. package/dist/js/node/ssr/react/index.js +30 -0
  124. package/dist/js/node/ssr/react/nossr/index.js +43 -0
  125. package/dist/js/node/ssr/react/prerender/index.js +130 -0
  126. package/dist/js/node/ssr/react/prerender/type.js +15 -0
  127. package/dist/js/node/ssr/react/prerender/util.js +123 -0
  128. package/dist/js/node/ssr/react/withCallback/index.js +38 -0
  129. package/dist/js/node/ssr/serverRender/helmet.js +65 -0
  130. package/dist/js/node/ssr/serverRender/index.js +56 -0
  131. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.after.js +65 -0
  132. package/dist/js/node/ssr/serverRender/renderToStream/buildTemplate.share.js +35 -0
  133. package/dist/js/node/ssr/serverRender/renderToStream/bulidTemplate.before.js +87 -0
  134. package/dist/js/node/ssr/serverRender/renderToStream/index.js +87 -0
  135. package/dist/js/node/ssr/serverRender/renderToStream/loadable.js +47 -0
  136. package/dist/js/node/ssr/serverRender/renderToStream/renderToPipe.js +111 -0
  137. package/dist/js/node/ssr/serverRender/renderToStream/styledComponent.js +35 -0
  138. package/dist/js/node/ssr/serverRender/renderToStream/template.js +45 -0
  139. package/dist/js/node/ssr/serverRender/renderToStream/type.js +15 -0
  140. package/dist/js/node/ssr/serverRender/renderToString/entry.js +196 -0
  141. package/dist/js/node/ssr/serverRender/renderToString/index.js +81 -0
  142. package/dist/js/node/ssr/serverRender/renderToString/loadable.js +71 -0
  143. package/dist/js/node/ssr/serverRender/renderToString/reduce.js +31 -0
  144. package/dist/js/node/ssr/serverRender/renderToString/styledComponent.js +34 -0
  145. package/dist/js/node/ssr/serverRender/renderToString/template.js +82 -0
  146. package/dist/js/node/ssr/serverRender/renderToString/type.js +32 -0
  147. package/dist/js/node/ssr/serverRender/types.js +27 -0
  148. package/dist/js/node/ssr/serverRender/utils.js +46 -0
  149. package/dist/js/node/ssr/utils.js +106 -0
  150. package/dist/js/node/state/cli/index.js +100 -0
  151. package/dist/js/node/state/index.js +37 -0
  152. package/dist/js/node/state/plugins.js +45 -0
  153. package/dist/js/node/state/runtime/index.js +40 -0
  154. package/dist/js/node/state/runtime/plugin.js +121 -0
  155. package/dist/js/node/state/types.js +15 -0
  156. package/dist/js/treeshaking/cli/index.js +186 -0
  157. package/dist/js/treeshaking/common.js +4 -0
  158. package/dist/js/treeshaking/config.js +1 -0
  159. package/dist/js/treeshaking/core/app-config.js +9 -0
  160. package/dist/js/treeshaking/core/compatible.js +485 -0
  161. package/dist/js/treeshaking/core/index.js +7 -0
  162. package/dist/js/treeshaking/core/loader/index.js +2 -0
  163. package/dist/js/treeshaking/core/loader/loaderManager.js +406 -0
  164. package/dist/js/treeshaking/core/loader/useLoader.js +188 -0
  165. package/dist/js/treeshaking/core/plugin.js +176 -0
  166. package/dist/js/treeshaking/document/Body.js +18 -0
  167. package/dist/js/treeshaking/document/DocumentContext.js +7 -0
  168. package/dist/js/treeshaking/document/DocumentStructrueContext.js +9 -0
  169. package/dist/js/treeshaking/document/Head.js +24 -0
  170. package/dist/js/treeshaking/document/Html.js +99 -0
  171. package/dist/js/treeshaking/document/Links.js +8 -0
  172. package/dist/js/treeshaking/document/Root.js +26 -0
  173. package/dist/js/treeshaking/document/Script.js +15 -0
  174. package/dist/js/treeshaking/document/Scripts.js +8 -0
  175. package/dist/js/treeshaking/document/cli/index.js +393 -0
  176. package/dist/js/treeshaking/document/constants.js +35 -0
  177. package/dist/js/treeshaking/document/index.js +10 -0
  178. package/dist/js/treeshaking/exports/head.js +4 -0
  179. package/dist/js/treeshaking/exports/loadable.js +4 -0
  180. package/dist/js/treeshaking/exports/server.js +4 -0
  181. package/dist/js/treeshaking/exports/styled.js +4 -0
  182. package/dist/js/treeshaking/index.js +3 -0
  183. package/dist/js/treeshaking/router/cli/index.js +148 -0
  184. package/dist/js/treeshaking/router/index.js +4 -0
  185. package/dist/js/treeshaking/router/runtime/DefaultNotFound.js +14 -0
  186. package/dist/js/treeshaking/router/runtime/index.js +6 -0
  187. package/dist/js/treeshaking/router/runtime/plugin.js +132 -0
  188. package/dist/js/treeshaking/router/runtime/plugin.node.js +390 -0
  189. package/dist/js/treeshaking/router/runtime/server.js +1 -0
  190. package/dist/js/treeshaking/router/runtime/types.js +1 -0
  191. package/dist/js/treeshaking/router/runtime/utils.js +260 -0
  192. package/dist/js/treeshaking/router/runtime/withRouter.js +67 -0
  193. package/dist/js/treeshaking/runtime-context.js +4 -0
  194. package/dist/js/treeshaking/ssr/cli/babel-plugin-ssr-loader-id.js +122 -0
  195. package/dist/js/treeshaking/ssr/cli/index.js +217 -0
  196. package/dist/js/treeshaking/ssr/index.js +315 -0
  197. package/dist/js/treeshaking/ssr/index.node.js +240 -0
  198. package/dist/js/treeshaking/ssr/prefetch.js +199 -0
  199. package/dist/js/treeshaking/ssr/react/index.js +3 -0
  200. package/dist/js/treeshaking/ssr/react/nossr/index.js +58 -0
  201. package/dist/js/treeshaking/ssr/react/prerender/index.js +237 -0
  202. package/dist/js/treeshaking/ssr/react/prerender/type.js +1 -0
  203. package/dist/js/treeshaking/ssr/react/prerender/util.js +108 -0
  204. package/dist/js/treeshaking/ssr/react/withCallback/index.js +16 -0
  205. package/dist/js/treeshaking/ssr/serverRender/helmet.js +42 -0
  206. package/dist/js/treeshaking/ssr/serverRender/index.js +169 -0
  207. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.after.js +34 -0
  208. package/dist/js/treeshaking/ssr/serverRender/renderToStream/buildTemplate.share.js +7 -0
  209. package/dist/js/treeshaking/ssr/serverRender/renderToStream/bulidTemplate.before.js +115 -0
  210. package/dist/js/treeshaking/ssr/serverRender/renderToStream/index.js +165 -0
  211. package/dist/js/treeshaking/ssr/serverRender/renderToStream/loadable.js +22 -0
  212. package/dist/js/treeshaking/ssr/serverRender/renderToStream/renderToPipe.js +119 -0
  213. package/dist/js/treeshaking/ssr/serverRender/renderToStream/styledComponent.js +11 -0
  214. package/dist/js/treeshaking/ssr/serverRender/renderToStream/template.js +63 -0
  215. package/dist/js/treeshaking/ssr/serverRender/renderToStream/type.js +1 -0
  216. package/dist/js/treeshaking/ssr/serverRender/renderToString/entry.js +393 -0
  217. package/dist/js/treeshaking/ssr/serverRender/renderToString/index.js +165 -0
  218. package/dist/js/treeshaking/ssr/serverRender/renderToString/loadable.js +56 -0
  219. package/dist/js/treeshaking/ssr/serverRender/renderToString/reduce.js +10 -0
  220. package/dist/js/treeshaking/ssr/serverRender/renderToString/styledComponent.js +9 -0
  221. package/dist/js/treeshaking/ssr/serverRender/renderToString/template.js +156 -0
  222. package/dist/js/treeshaking/ssr/serverRender/renderToString/type.js +7 -0
  223. package/dist/js/treeshaking/ssr/serverRender/types.js +2 -0
  224. package/dist/js/treeshaking/ssr/serverRender/utils.js +69 -0
  225. package/dist/js/treeshaking/ssr/utils.js +134 -0
  226. package/dist/js/treeshaking/state/cli/index.js +71 -0
  227. package/dist/js/treeshaking/state/index.js +4 -0
  228. package/dist/js/treeshaking/state/plugins.js +14 -0
  229. package/dist/js/treeshaking/state/runtime/index.js +5 -0
  230. package/dist/js/treeshaking/state/runtime/plugin.js +198 -0
  231. package/dist/js/treeshaking/state/types.js +1 -0
  232. package/package.json +10 -10
@@ -0,0 +1,114 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import {
21
+ useContext,
22
+ useRef,
23
+ useMemo,
24
+ useState,
25
+ useCallback,
26
+ useEffect
27
+ } from "react";
28
+ import invariant from "invariant";
29
+ import { RuntimeReactContext } from "../../runtime-context";
30
+ import { LoaderStatus } from "./loaderManager";
31
+ const useLoader = (loaderFn, options = { params: void 0 }) => {
32
+ const context = useContext(RuntimeReactContext);
33
+ const isSSRRender = Boolean(context.ssr);
34
+ const { loaderManager } = context;
35
+ const loaderRef = useRef();
36
+ const unlistenLoaderChangeRef = useRef(null);
37
+ if (isSSRRender && Object.prototype.hasOwnProperty.call(options, "_cache")) {
38
+ delete options._cache;
39
+ }
40
+ const load = useCallback(
41
+ (params) => {
42
+ var _a, _b, _c, _d, _e, _f;
43
+ if (typeof params === "undefined") {
44
+ return (_a = loaderRef.current) == null ? void 0 : _a.load();
45
+ }
46
+ const id = loaderManager.add(
47
+ () => {
48
+ try {
49
+ const res2 = loaderFn(context, params);
50
+ if (res2 instanceof Promise) {
51
+ return res2;
52
+ }
53
+ return Promise.resolve(res2);
54
+ } catch (e) {
55
+ return Promise.reject(e);
56
+ }
57
+ },
58
+ __spreadProps(__spreadValues({}, options), {
59
+ params
60
+ })
61
+ );
62
+ loaderRef.current = loaderManager.get(id);
63
+ (_b = unlistenLoaderChangeRef.current) == null ? void 0 : _b.call(unlistenLoaderChangeRef);
64
+ if (isSSRRender) {
65
+ return void 0;
66
+ }
67
+ if (options.skip) {
68
+ return void 0;
69
+ }
70
+ if (context._hydration && ((_e = (_d = (_c = window == null ? void 0 : window._SSR_DATA) == null ? void 0 : _c.data) == null ? void 0 : _d.loadersData[id]) == null ? void 0 : _e.error) === null) {
71
+ return void 0;
72
+ }
73
+ const res = loaderRef.current.load();
74
+ unlistenLoaderChangeRef.current = (_f = loaderRef.current) == null ? void 0 : _f.onChange(
75
+ (_status, _result) => {
76
+ var _a2, _b2;
77
+ setResult(_result);
78
+ if (_status === LoaderStatus.fulfilled) {
79
+ (_a2 = options == null ? void 0 : options.onSuccess) == null ? void 0 : _a2.call(options, _result.data);
80
+ }
81
+ if (_status === LoaderStatus.rejected) {
82
+ (_b2 = options == null ? void 0 : options.onError) == null ? void 0 : _b2.call(options, _result.error);
83
+ }
84
+ }
85
+ );
86
+ return res;
87
+ },
88
+ [options.skip]
89
+ );
90
+ useEffect(
91
+ () => () => {
92
+ var _a;
93
+ (_a = unlistenLoaderChangeRef.current) == null ? void 0 : _a.call(unlistenLoaderChangeRef);
94
+ },
95
+ []
96
+ );
97
+ useMemo(() => {
98
+ var _a;
99
+ const p = (_a = options.params) != null ? _a : loaderFn.id;
100
+ invariant(
101
+ typeof p !== "undefined" && p !== null,
102
+ "Params is required in useLoader"
103
+ );
104
+ load(p);
105
+ }, [options.params]);
106
+ const [result, setResult] = useState(loaderRef.current.result);
107
+ return __spreadProps(__spreadValues({}, result), {
108
+ reload: load
109
+ });
110
+ };
111
+ var useLoader_default = useLoader;
112
+ export {
113
+ useLoader_default as default
114
+ };
@@ -0,0 +1,58 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import {
22
+ createManager,
23
+ createPipeline,
24
+ createAsyncPipeline
25
+ } from "@modern-js/plugin";
26
+ import { createLoaderManager } from "./loader/loaderManager";
27
+ const hoc = createPipeline();
28
+ const provide = createPipeline();
29
+ const client = createAsyncPipeline();
30
+ const server = createAsyncPipeline();
31
+ const init = createAsyncPipeline();
32
+ const pickContext = createPipeline();
33
+ const runtimeHooks = {
34
+ hoc,
35
+ provide,
36
+ client,
37
+ server,
38
+ init,
39
+ pickContext
40
+ };
41
+ const createRuntime = () => createManager(runtimeHooks);
42
+ const registerInit = (App, _init) => {
43
+ const originalInit = App.init;
44
+ App.init = (context) => __async(void 0, null, function* () {
45
+ if (!context.loaderManager) {
46
+ context.loaderManager = createLoaderManager({});
47
+ }
48
+ yield Promise.all([originalInit == null ? void 0 : originalInit(context), _init == null ? void 0 : _init(context)]);
49
+ });
50
+ };
51
+ const runtime = createRuntime();
52
+ const { createPlugin } = runtime;
53
+ export {
54
+ createPlugin,
55
+ createRuntime,
56
+ registerInit,
57
+ runtime
58
+ };
@@ -0,0 +1,23 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useContext } from "react";
3
+ import {
4
+ DOCUMENT_CHUNKSMAP_PLACEHOLDER,
5
+ DOCUMENT_SSRDATASCRIPT_PLACEHOLDER
6
+ } from "./constants";
7
+ import { DocumentStructrueContext } from "./DocumentStructrueContext";
8
+ import { DefaultRoot } from "./Root";
9
+ function Body(props) {
10
+ const { hasSetRoot } = useContext(DocumentStructrueContext);
11
+ const { children } = props;
12
+ return /* @__PURE__ */ jsxs("body", {
13
+ children: [
14
+ hasSetRoot ? null : /* @__PURE__ */ jsx(DefaultRoot, {}),
15
+ children,
16
+ `${DOCUMENT_CHUNKSMAP_PLACEHOLDER}`,
17
+ `${DOCUMENT_SSRDATASCRIPT_PLACEHOLDER}`
18
+ ]
19
+ });
20
+ }
21
+ export {
22
+ Body
23
+ };
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ const DocumentContext = React.createContext({
3
+ config: {},
4
+ templateParams: {},
5
+ processEnv: {}
6
+ });
7
+ export {
8
+ DocumentContext
9
+ };
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ const DocumentStructrueContext = React.createContext({
3
+ hasSetHead: false,
4
+ hasSetScripts: false,
5
+ hasSetBody: false,
6
+ hasSetRoot: false,
7
+ hasSetLinks: false
8
+ });
9
+ export {
10
+ DocumentStructrueContext
11
+ };
@@ -0,0 +1,27 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useContext } from "react";
3
+ import { DocumentStructrueContext } from "./DocumentStructrueContext";
4
+ import { Scripts } from "./Scripts";
5
+ import { Links } from "./Links";
6
+ import { DOCUMENT_META_PLACEHOLDER } from "./constants";
7
+ function Head(props) {
8
+ const { hasSetScripts, hasSetLinks } = useContext(DocumentStructrueContext);
9
+ const { children } = props;
10
+ return /* @__PURE__ */ jsxs("head", {
11
+ children: [
12
+ `${DOCUMENT_META_PLACEHOLDER}`,
13
+ !hasSetLinks && /* @__PURE__ */ jsx(Links, {}),
14
+ !hasSetScripts && /* @__PURE__ */ jsx(Scripts, {}),
15
+ children
16
+ ]
17
+ });
18
+ }
19
+ function DefaultHead() {
20
+ return /* @__PURE__ */ jsx("head", {
21
+ children: `${DOCUMENT_META_PLACEHOLDER}`
22
+ });
23
+ }
24
+ export {
25
+ DefaultHead,
26
+ Head
27
+ };
@@ -0,0 +1,78 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Body } from "./Body";
3
+ import { DocumentStructrueContext } from "./DocumentStructrueContext";
4
+ import { Head } from "./Head";
5
+ function findTargetChild(tag, children) {
6
+ return children.find((item) => getEleType(item) === tag);
7
+ }
8
+ function getEleType(ele) {
9
+ return typeof (ele == null ? void 0 : ele.type) === "function" ? ele.type.name : ele == null ? void 0 : ele.type;
10
+ }
11
+ function findTargetElement(tag, children) {
12
+ var _a;
13
+ if (children.length === 0) {
14
+ return null;
15
+ }
16
+ let nextChildren = [];
17
+ for (const item of children) {
18
+ if (tag === getEleType(item)) {
19
+ return item;
20
+ }
21
+ if ((_a = item == null ? void 0 : item.props) == null ? void 0 : _a.children) {
22
+ nextChildren = nextChildren.concat(item.props.children);
23
+ }
24
+ }
25
+ return findTargetElement(tag, nextChildren);
26
+ }
27
+ function Html(props) {
28
+ const { children } = props;
29
+ const hasSetHead = Boolean(findTargetChild("Head", children));
30
+ const hasSetScripts = Boolean(findTargetElement("Scripts", children));
31
+ const hasSetLinks = Boolean(findTargetElement("Links", children));
32
+ const hasSetBody = Boolean(findTargetChild("Body", children));
33
+ const hasSetRoot = Boolean(findTargetElement("Root", children));
34
+ const notMissMustChild = [
35
+ hasSetHead,
36
+ hasSetBody
37
+ ].every((item) => item);
38
+ if (!notMissMustChild) {
39
+ return /* @__PURE__ */ jsx("html", {
40
+ children: /* @__PURE__ */ jsxs("body", {
41
+ style: { color: "red" },
42
+ children: [
43
+ `Miss the `,
44
+ [
45
+ hasSetHead,
46
+ hasSetBody
47
+ ].map((item, index) => {
48
+ return item ? null : [
49
+ "Head",
50
+ "Body"
51
+ ][index];
52
+ }),
53
+ ` Element`
54
+ ]
55
+ })
56
+ });
57
+ }
58
+ return /* @__PURE__ */ jsx("html", {
59
+ children: /* @__PURE__ */ jsxs(DocumentStructrueContext.Provider, {
60
+ value: {
61
+ hasSetHead,
62
+ hasSetScripts,
63
+ hasSetLinks,
64
+ hasSetRoot,
65
+ hasSetBody,
66
+ docChild: children
67
+ },
68
+ children: [
69
+ !hasSetHead && /* @__PURE__ */ jsx(Head, {}),
70
+ !hasSetBody && /* @__PURE__ */ jsx(Body, {}),
71
+ children
72
+ ]
73
+ })
74
+ });
75
+ }
76
+ export {
77
+ Html
78
+ };
@@ -0,0 +1,10 @@
1
+ import { Fragment, jsx } from "react/jsx-runtime";
2
+ import { DOCUMENT_LINKS_PLACEHOLDER } from "./constants";
3
+ function Links() {
4
+ return /* @__PURE__ */ jsx(Fragment, {
5
+ children: DOCUMENT_LINKS_PLACEHOLDER
6
+ });
7
+ }
8
+ export {
9
+ Links
10
+ };
@@ -0,0 +1,33 @@
1
+ import { jsxs } from "react/jsx-runtime";
2
+ import { useContext } from "react";
3
+ import { DocumentContext } from "./DocumentContext";
4
+ import { DOCUMENT_SSR_PLACEHOLDER } from "./constants";
5
+ function Root(props) {
6
+ const { rootId, children } = props;
7
+ const {
8
+ templateParams: { mountId = "root" }
9
+ } = useContext(DocumentContext);
10
+ return /* @__PURE__ */ jsxs("div", {
11
+ id: `${rootId || mountId}`,
12
+ children: [
13
+ `${DOCUMENT_SSR_PLACEHOLDER}`,
14
+ children
15
+ ]
16
+ });
17
+ }
18
+ function DefaultRoot(props) {
19
+ const {
20
+ templateParams: { mountId = "root" }
21
+ } = useContext(DocumentContext);
22
+ return /* @__PURE__ */ jsxs("div", {
23
+ id: `${mountId}`,
24
+ children: [
25
+ `${DOCUMENT_SSR_PLACEHOLDER}`,
26
+ props.children
27
+ ]
28
+ });
29
+ }
30
+ export {
31
+ DefaultRoot,
32
+ Root
33
+ };
@@ -0,0 +1,20 @@
1
+ import { Fragment, jsxs } from "react/jsx-runtime";
2
+ import {
3
+ DOCUMENT_SCRIPT_PLACEHOLDER_START,
4
+ DOCUMENT_SCRIPT_PLACEHOLDER_END
5
+ } from "./constants";
6
+ function Script(props) {
7
+ const { content } = props;
8
+ const contentStr = content.toString();
9
+ const contentIIFE = encodeURIComponent(`(${contentStr})()`);
10
+ return /* @__PURE__ */ jsxs(Fragment, {
11
+ children: [
12
+ `${DOCUMENT_SCRIPT_PLACEHOLDER_START}`,
13
+ `${contentIIFE}`,
14
+ `${DOCUMENT_SCRIPT_PLACEHOLDER_END}`
15
+ ]
16
+ });
17
+ }
18
+ export {
19
+ Script
20
+ };
@@ -0,0 +1,10 @@
1
+ import { Fragment, jsx } from "react/jsx-runtime";
2
+ import { DOCUMENT_SCRIPTS_PLACEHOLDER } from "./constants";
3
+ function Scripts() {
4
+ return /* @__PURE__ */ jsx(Fragment, {
5
+ children: `${DOCUMENT_SCRIPTS_PLACEHOLDER}`
6
+ });
7
+ }
8
+ export {
9
+ Scripts
10
+ };
@@ -0,0 +1,228 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __async = (__this, __arguments, generator) => {
18
+ return new Promise((resolve, reject) => {
19
+ var fulfilled = (value) => {
20
+ try {
21
+ step(generator.next(value));
22
+ } catch (e) {
23
+ reject(e);
24
+ }
25
+ };
26
+ var rejected = (value) => {
27
+ try {
28
+ step(generator.throw(value));
29
+ } catch (e) {
30
+ reject(e);
31
+ }
32
+ };
33
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
34
+ step((generator = generator.apply(__this, __arguments)).next());
35
+ });
36
+ };
37
+ import path from "path";
38
+ import React from "react";
39
+ import ReactDomServer from "react-dom/server";
40
+ import { build } from "esbuild";
41
+ import { createDebugger, findExists, fs } from "@modern-js/utils";
42
+ import { DocumentContext } from "../DocumentContext";
43
+ import {
44
+ DOCUMENT_SCRIPTS_PLACEHOLDER,
45
+ DOCUMENT_LINKS_PLACEHOLDER,
46
+ DOCUMENT_FILE_NAME,
47
+ DOCUMENT_META_PLACEHOLDER,
48
+ PLACEHOLDER_REPLACER_MAP,
49
+ DOC_EXT,
50
+ DOCUMENT_SSR_PLACEHOLDER,
51
+ DOCUMENT_CHUNKSMAP_PLACEHOLDER,
52
+ DOCUMENT_SSRDATASCRIPT_PLACEHOLDER,
53
+ DOCUMENT_SCRIPT_PLACEHOLDER_START,
54
+ DOCUMENT_SCRIPT_PLACEHOLDER_END,
55
+ HTML_SEPARATOR
56
+ } from "../constants";
57
+ const debug = createDebugger("html_genarate");
58
+ const getDocumenByEntryName = function(entrypoints, entryName, fallbackDir) {
59
+ var _a;
60
+ const entryDir = (_a = entrypoints.find(
61
+ (item) => item.entryName === entryName
62
+ )) == null ? void 0 : _a.absoluteEntryDir;
63
+ const entryDirs = DOC_EXT.map(
64
+ (item) => `${entryDir}${path.sep}${DOCUMENT_FILE_NAME}.${item}`
65
+ );
66
+ const fallbackDirs = fallbackDir ? DOC_EXT.map(
67
+ (item) => [fallbackDir, "src", `${DOCUMENT_FILE_NAME}.${item}`].join(path.sep)
68
+ ) : [];
69
+ const docFile = findExists([...entryDirs, ...fallbackDirs]);
70
+ return docFile || void 0;
71
+ };
72
+ var cli_default = () => ({
73
+ name: "@modern-js/plugin-document",
74
+ pre: ["@modern-js/plugin-analyze"],
75
+ setup: (api) => __async(void 0, null, function* () {
76
+ function getDocParams(params) {
77
+ const { config, templateParameters, entryName } = params;
78
+ return {
79
+ processEnv: process.env,
80
+ config: {
81
+ output: config.output
82
+ },
83
+ entryName,
84
+ templateParams: templateParameters
85
+ };
86
+ }
87
+ const documentEntry = (entryName, templateParameters) => {
88
+ const { entrypoints, internalDirectory, appDirectory } = api.useAppContext();
89
+ const documentFilePath = getDocumenByEntryName(
90
+ entrypoints,
91
+ entryName,
92
+ appDirectory
93
+ );
94
+ if (!documentFilePath) {
95
+ return null;
96
+ }
97
+ return (_0) => __async(void 0, [_0], function* ({ htmlWebpackPlugin }) {
98
+ const documentParams = getDocParams({
99
+ config: api.useConfigContext(),
100
+ entryName,
101
+ templateParameters
102
+ });
103
+ const tempTsConfigFile = path.join(
104
+ internalDirectory,
105
+ `./document/_tempTsconfig.json`
106
+ );
107
+ const userTsConfigFilePath = path.join(appDirectory, "tsconfig.json");
108
+ let tsConfig;
109
+ try {
110
+ tsConfig = yield require(userTsConfigFilePath);
111
+ } catch (err) {
112
+ tsConfig = {};
113
+ }
114
+ if (tsConfig == null ? void 0 : tsConfig.compilerOptions) {
115
+ tsConfig.compilerOptions.jsx = "react-jsx";
116
+ } else {
117
+ tsConfig.compilerOptions = {
118
+ jsx: "react-jsx"
119
+ };
120
+ }
121
+ fs.outputFileSync(tempTsConfigFile, JSON.stringify(tsConfig));
122
+ const htmlOutputFile = path.join(
123
+ internalDirectory,
124
+ `./document/_${entryName}.html.js`
125
+ );
126
+ yield build({
127
+ entryPoints: [documentFilePath],
128
+ outfile: htmlOutputFile,
129
+ platform: "node",
130
+ tsconfig: tempTsConfigFile,
131
+ target: "es6",
132
+ loader: {
133
+ ".ts": "ts",
134
+ ".tsx": "tsx"
135
+ },
136
+ bundle: true,
137
+ plugins: [
138
+ {
139
+ name: "make-all-packages-external",
140
+ setup(build2) {
141
+ build2.onResolve(
142
+ { filter: /^[^./]|^\.[^./]|^\.\.[^/]/ },
143
+ (args) => {
144
+ let external = true;
145
+ if (args.kind === "entry-point") {
146
+ external = false;
147
+ }
148
+ return {
149
+ path: args.path,
150
+ external
151
+ };
152
+ }
153
+ );
154
+ }
155
+ }
156
+ ]
157
+ });
158
+ delete require.cache[require.resolve(htmlOutputFile)];
159
+ const Document = (yield require(htmlOutputFile)).default;
160
+ const HTMLElement = React.createElement(
161
+ DocumentContext.Provider,
162
+ { value: documentParams },
163
+ React.createElement(Document, null)
164
+ );
165
+ let html = ReactDomServer.renderToStaticMarkup(HTMLElement);
166
+ debug("entry %s's document jsx rendered html: %o", entryName, html);
167
+ const scripts = [
168
+ htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName === "script").join(""),
169
+ htmlWebpackPlugin.tags.bodyTags.toString()
170
+ ].join("");
171
+ const links = [
172
+ htmlWebpackPlugin.tags.headTags.filter((item) => item.tagName === "link").join("")
173
+ ].join("");
174
+ const metas = [
175
+ templateParameters.meta,
176
+ htmlWebpackPlugin.tags.headTags.filter(
177
+ (item) => item.tagName !== "script" && item.tagName !== "link"
178
+ ).join("")
179
+ ].join("");
180
+ if (html.includes(DOCUMENT_SCRIPT_PLACEHOLDER_START) && html.includes(DOCUMENT_SCRIPT_PLACEHOLDER_END)) {
181
+ html = html.replaceAll(
182
+ new RegExp(
183
+ `${DOCUMENT_SCRIPT_PLACEHOLDER_START}(.*?)${DOCUMENT_SCRIPT_PLACEHOLDER_END}`,
184
+ "g"
185
+ ),
186
+ (_scriptStr, $1) => `<script>${decodeURIComponent($1)}<\/script>`
187
+ );
188
+ }
189
+ const finalHtml = `<!DOCTYPE html>${html}`.replace(DOCUMENT_META_PLACEHOLDER, metas).replace(DOCUMENT_SSR_PLACEHOLDER, HTML_SEPARATOR).replace(DOCUMENT_SCRIPTS_PLACEHOLDER, scripts).replace(DOCUMENT_LINKS_PLACEHOLDER, links).replace(
190
+ DOCUMENT_CHUNKSMAP_PLACEHOLDER,
191
+ PLACEHOLDER_REPLACER_MAP[DOCUMENT_CHUNKSMAP_PLACEHOLDER]
192
+ ).replace(
193
+ DOCUMENT_SSRDATASCRIPT_PLACEHOLDER,
194
+ PLACEHOLDER_REPLACER_MAP[DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]
195
+ );
196
+ return finalHtml;
197
+ });
198
+ };
199
+ return {
200
+ config: () => {
201
+ return {
202
+ tools: {
203
+ htmlPlugin: (options, entry) => {
204
+ const hackParameters = typeof (options == null ? void 0 : options.templateParameters) === "function" ? options == null ? void 0 : options.templateParameters(
205
+ {},
206
+ {},
207
+ {},
208
+ {}
209
+ ) : __spreadValues({}, options == null ? void 0 : options.templateParameters);
210
+ const templateContent = documentEntry(
211
+ entry.entryName,
212
+ hackParameters
213
+ );
214
+ const documentHtmlOptions = templateContent ? {
215
+ templateContent,
216
+ inject: false
217
+ } : {};
218
+ return __spreadValues(__spreadValues({}, options), documentHtmlOptions);
219
+ }
220
+ }
221
+ };
222
+ }
223
+ };
224
+ })
225
+ });
226
+ export {
227
+ cli_default as default
228
+ };
@@ -0,0 +1,49 @@
1
+ const DOC_EXT = ["jsx", "tsx", "ts", "js"];
2
+ const DOCUMENT_META_PLACEHOLDER = encodeURIComponent("<%= meta %>");
3
+ const HTML_SEPARATOR = "<!--<?- html ?>-->";
4
+ const HTML_CHUNKSMAP_SEPARATOR = "<!--<?- chunksMap.js ?>-->";
5
+ const HTML_SSRDATASCRIPT_SEPARATOR = "<!--<?- SSRDataScript ?>-->";
6
+ const DOCUMENT_SSR_PLACEHOLDER = encodeURIComponent(HTML_SEPARATOR);
7
+ const DOCUMENT_CHUNKSMAP_PLACEHOLDER = encodeURIComponent(
8
+ HTML_CHUNKSMAP_SEPARATOR
9
+ );
10
+ const DOCUMENT_SSRDATASCRIPT_PLACEHOLDER = encodeURIComponent(
11
+ HTML_SSRDATASCRIPT_SEPARATOR
12
+ );
13
+ const DOCUMENT_FILE_NAME = "Document";
14
+ const DOCUMENT_SCRIPTS_PLACEHOLDER = encodeURIComponent(
15
+ "<!-- chunk scripts placeholder -->"
16
+ );
17
+ const DOCUMENT_LINKS_PLACEHOLDER = encodeURIComponent(
18
+ "<!-- chunk links placeholder -->"
19
+ );
20
+ const DOCUMENT_NO_SCRIPTE_PLACEHOLDER = encodeURIComponent("<!-- no-script -->");
21
+ const DOCUMENT_SCRIPT_PLACEHOLDER_START = encodeURIComponent(
22
+ "<!-- script-start -->"
23
+ );
24
+ const DOCUMENT_SCRIPT_PLACEHOLDER_END = encodeURIComponent(
25
+ "<!-- script-end -->"
26
+ );
27
+ const PLACEHOLDER_REPLACER_MAP = {
28
+ [DOCUMENT_NO_SCRIPTE_PLACEHOLDER]: `We're sorry but react app doesn't work properly without JavaScript enabled. Please enable it to continue.`,
29
+ [DOCUMENT_SSR_PLACEHOLDER]: HTML_SEPARATOR,
30
+ [DOCUMENT_CHUNKSMAP_PLACEHOLDER]: HTML_CHUNKSMAP_SEPARATOR,
31
+ [DOCUMENT_SSRDATASCRIPT_PLACEHOLDER]: HTML_SSRDATASCRIPT_SEPARATOR
32
+ };
33
+ export {
34
+ DOCUMENT_CHUNKSMAP_PLACEHOLDER,
35
+ DOCUMENT_FILE_NAME,
36
+ DOCUMENT_LINKS_PLACEHOLDER,
37
+ DOCUMENT_META_PLACEHOLDER,
38
+ DOCUMENT_NO_SCRIPTE_PLACEHOLDER,
39
+ DOCUMENT_SCRIPTS_PLACEHOLDER,
40
+ DOCUMENT_SCRIPT_PLACEHOLDER_END,
41
+ DOCUMENT_SCRIPT_PLACEHOLDER_START,
42
+ DOCUMENT_SSRDATASCRIPT_PLACEHOLDER,
43
+ DOCUMENT_SSR_PLACEHOLDER,
44
+ DOC_EXT,
45
+ HTML_CHUNKSMAP_SEPARATOR,
46
+ HTML_SEPARATOR,
47
+ HTML_SSRDATASCRIPT_SEPARATOR,
48
+ PLACEHOLDER_REPLACER_MAP
49
+ };
@@ -0,0 +1,10 @@
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 "./Links";
8
+ export * from "./Scripts";
9
+ export * from "./Script";
10
+ export * from "./constants";