@modern-js/app-tools 2.0.0-beta.2 → 2.0.0-beta.4

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 (236) hide show
  1. package/CHANGELOG.md +556 -0
  2. package/bin/modern.js +11 -1
  3. package/dist/js/modern/analyze/Builder.js +39 -0
  4. package/dist/js/modern/analyze/constants.js +38 -16
  5. package/dist/js/modern/analyze/generateCode.js +272 -211
  6. package/dist/js/modern/analyze/getBundleEntry.js +34 -32
  7. package/dist/js/modern/analyze/getClientRoutes/getRoutes.js +93 -49
  8. package/dist/js/modern/analyze/getClientRoutes/getRoutesLegacy.js +89 -47
  9. package/dist/js/modern/analyze/getClientRoutes/index.js +6 -2
  10. package/dist/js/modern/analyze/getClientRoutes/utils.js +23 -10
  11. package/dist/js/modern/analyze/getFileSystemEntry.js +43 -22
  12. package/dist/js/modern/analyze/getHtmlTemplate.js +89 -49
  13. package/dist/js/modern/analyze/getServerRoutes.js +122 -126
  14. package/dist/js/modern/analyze/index.js +201 -160
  15. package/dist/js/modern/analyze/isDefaultExportFunction.js +30 -16
  16. package/dist/js/modern/analyze/makeLegalIdentifier.js +10 -11
  17. package/dist/js/modern/analyze/nestedRoutes.js +110 -53
  18. package/dist/js/modern/analyze/templates.js +191 -77
  19. package/dist/js/modern/analyze/utils.js +98 -51
  20. package/dist/js/modern/builder/builderPlugins/compatModern.js +125 -107
  21. package/dist/js/modern/builder/index.js +124 -89
  22. package/dist/js/modern/builder/loaders/routerLoader.js +17 -0
  23. package/dist/js/modern/builder/loaders/serverModuleLoader.js +7 -0
  24. package/dist/js/modern/builder/share.js +23 -21
  25. package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +23 -22
  26. package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +31 -27
  27. package/dist/js/modern/builder/webpackPlugins/routerPlugin.js +100 -84
  28. package/dist/js/modern/commands/build.js +67 -42
  29. package/dist/js/modern/commands/deploy.js +27 -4
  30. package/dist/js/modern/commands/dev.js +93 -47
  31. package/dist/js/modern/commands/index.js +1 -1
  32. package/dist/js/modern/commands/inspect.js +30 -5
  33. package/dist/js/modern/commands/start.js +37 -16
  34. package/dist/js/modern/config/default.js +103 -114
  35. package/dist/js/modern/config/index.js +8 -2
  36. package/dist/js/modern/config/initial/createHtmlConfig.js +5 -2
  37. package/dist/js/modern/config/initial/createOutputConfig.js +11 -9
  38. package/dist/js/modern/config/initial/createSourceConfig.js +5 -2
  39. package/dist/js/modern/config/initial/createToolsConfig.js +7 -6
  40. package/dist/js/modern/config/initial/index.js +9 -4
  41. package/dist/js/modern/config/initial/inits.js +109 -73
  42. package/dist/js/modern/config/initial/transformNormalizedConfig.js +6 -3
  43. package/dist/js/modern/defineConfig.js +26 -11
  44. package/dist/js/modern/exports/server.js +4 -1
  45. package/dist/js/modern/hooks.js +15 -4
  46. package/dist/js/modern/index.js +178 -90
  47. package/dist/js/modern/initialize/index.js +98 -51
  48. package/dist/js/modern/locale/en.js +20 -21
  49. package/dist/js/modern/locale/index.js +6 -6
  50. package/dist/js/modern/locale/zh.js +21 -22
  51. package/dist/js/modern/schema/Schema.js +6 -5
  52. package/dist/js/modern/schema/index.js +51 -100
  53. package/dist/js/modern/schema/legacy.js +96 -231
  54. package/dist/js/modern/types/config/index.js +0 -1
  55. package/dist/js/modern/types/index.js +0 -1
  56. package/dist/js/modern/types/legacyConfig/output.js +0 -1
  57. package/dist/js/modern/utils/commands.js +5 -2
  58. package/dist/js/modern/utils/config.js +102 -41
  59. package/dist/js/modern/utils/createFileWatcher.js +84 -51
  60. package/dist/js/modern/utils/createServer.js +63 -17
  61. package/dist/js/modern/utils/getSpecifiedEntries.js +46 -19
  62. package/dist/js/modern/utils/language.js +6 -3
  63. package/dist/js/modern/utils/printInstructions.js +27 -8
  64. package/dist/js/modern/utils/restart.js +43 -16
  65. package/dist/js/modern/utils/routes.js +29 -12
  66. package/dist/js/node/analyze/Builder.js +58 -0
  67. package/dist/js/node/analyze/constants.js +54 -35
  68. package/dist/js/node/analyze/generateCode.js +291 -228
  69. package/dist/js/node/analyze/getBundleEntry.js +58 -44
  70. package/dist/js/node/analyze/getClientRoutes/getRoutes.js +132 -76
  71. package/dist/js/node/analyze/getClientRoutes/getRoutesLegacy.js +128 -74
  72. package/dist/js/node/analyze/getClientRoutes/index.js +23 -17
  73. package/dist/js/node/analyze/getClientRoutes/utils.js +44 -21
  74. package/dist/js/node/analyze/getFileSystemEntry.js +70 -39
  75. package/dist/js/node/analyze/getHtmlTemplate.js +116 -61
  76. package/dist/js/node/analyze/getServerRoutes.js +143 -137
  77. package/dist/js/node/analyze/index.js +247 -174
  78. package/dist/js/node/analyze/isDefaultExportFunction.js +55 -26
  79. package/dist/js/node/analyze/makeLegalIdentifier.js +27 -15
  80. package/dist/js/node/analyze/nestedRoutes.js +140 -67
  81. package/dist/js/node/analyze/templates.js +212 -84
  82. package/dist/js/node/analyze/utils.js +123 -62
  83. package/dist/js/node/builder/builderPlugins/compatModern.js +153 -120
  84. package/dist/js/node/builder/index.js +152 -98
  85. package/dist/js/node/builder/loaders/routerLoader.js +36 -0
  86. package/dist/js/node/builder/loaders/serverModuleLoader.js +26 -0
  87. package/dist/js/node/builder/share.js +46 -26
  88. package/dist/js/node/builder/webpackPlugins/htmlAsyncChunkPlugin.js +39 -26
  89. package/dist/js/node/builder/webpackPlugins/htmlBottomTemplate.js +47 -31
  90. package/dist/js/node/builder/webpackPlugins/routerPlugin.js +118 -90
  91. package/dist/js/node/commands/build.js +89 -52
  92. package/dist/js/node/commands/deploy.js +45 -10
  93. package/dist/js/node/commands/dev.js +115 -61
  94. package/dist/js/node/commands/index.js +19 -38
  95. package/dist/js/node/commands/inspect.js +48 -11
  96. package/dist/js/node/commands/start.js +65 -27
  97. package/dist/js/node/config/default.js +119 -118
  98. package/dist/js/node/config/index.js +25 -29
  99. package/dist/js/node/config/initial/createHtmlConfig.js +22 -6
  100. package/dist/js/node/config/initial/createOutputConfig.js +28 -13
  101. package/dist/js/node/config/initial/createSourceConfig.js +22 -6
  102. package/dist/js/node/config/initial/createToolsConfig.js +24 -10
  103. package/dist/js/node/config/initial/index.js +28 -17
  104. package/dist/js/node/config/initial/inits.js +126 -81
  105. package/dist/js/node/config/initial/transformNormalizedConfig.js +31 -15
  106. package/dist/js/node/defineConfig.js +43 -17
  107. package/dist/js/node/exports/server.js +21 -10
  108. package/dist/js/node/hooks.js +48 -29
  109. package/dist/js/node/index.js +225 -128
  110. package/dist/js/node/initialize/index.js +116 -61
  111. package/dist/js/node/locale/en.js +36 -25
  112. package/dist/js/node/locale/index.js +27 -15
  113. package/dist/js/node/locale/zh.js +37 -26
  114. package/dist/js/node/schema/Schema.js +23 -10
  115. package/dist/js/node/schema/index.js +77 -114
  116. package/dist/js/node/schema/legacy.js +117 -240
  117. package/dist/js/node/types/config/index.js +17 -16
  118. package/dist/js/node/types/index.js +19 -38
  119. package/dist/js/node/types/legacyConfig/output.js +0 -5
  120. package/dist/js/node/utils/commands.js +21 -6
  121. package/dist/js/node/utils/config.js +120 -51
  122. package/dist/js/node/utils/createFileWatcher.js +104 -60
  123. package/dist/js/node/utils/createServer.js +86 -25
  124. package/dist/js/node/utils/getSpecifiedEntries.js +64 -25
  125. package/dist/js/node/utils/language.js +24 -8
  126. package/dist/js/node/utils/printInstructions.js +47 -16
  127. package/dist/js/node/utils/restart.js +61 -21
  128. package/dist/js/node/utils/routes.js +53 -18
  129. package/dist/js/treeshaking/analyze/Builder.js +199 -0
  130. package/dist/js/treeshaking/analyze/constants.js +28 -16
  131. package/dist/js/treeshaking/analyze/generateCode.js +605 -355
  132. package/dist/js/treeshaking/analyze/getBundleEntry.js +55 -63
  133. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +214 -168
  134. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +215 -169
  135. package/dist/js/treeshaking/analyze/getClientRoutes/index.js +3 -2
  136. package/dist/js/treeshaking/analyze/getClientRoutes/utils.js +19 -20
  137. package/dist/js/treeshaking/analyze/getFileSystemEntry.js +89 -86
  138. package/dist/js/treeshaking/analyze/getHtmlTemplate.js +298 -125
  139. package/dist/js/treeshaking/analyze/getServerRoutes.js +210 -146
  140. package/dist/js/treeshaking/analyze/index.js +571 -304
  141. package/dist/js/treeshaking/analyze/isDefaultExportFunction.js +45 -26
  142. package/dist/js/treeshaking/analyze/makeLegalIdentifier.js +13 -16
  143. package/dist/js/treeshaking/analyze/nestedRoutes.js +414 -160
  144. package/dist/js/treeshaking/analyze/templates.js +432 -161
  145. package/dist/js/treeshaking/analyze/utils.js +361 -80
  146. package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +282 -195
  147. package/dist/js/treeshaking/builder/index.js +371 -167
  148. package/dist/js/treeshaking/builder/loaders/routerLoader.js +13 -0
  149. package/dist/js/treeshaking/builder/loaders/serverModuleLoader.js +5 -0
  150. package/dist/js/treeshaking/builder/share.js +38 -44
  151. package/dist/js/treeshaking/builder/webpackPlugins/htmlAsyncChunkPlugin.js +108 -44
  152. package/dist/js/treeshaking/builder/webpackPlugins/htmlBottomTemplate.js +70 -39
  153. package/dist/js/treeshaking/builder/webpackPlugins/routerPlugin.js +334 -112
  154. package/dist/js/treeshaking/commands/build.js +286 -88
  155. package/dist/js/treeshaking/commands/deploy.js +153 -25
  156. package/dist/js/treeshaking/commands/dev.js +318 -132
  157. package/dist/js/treeshaking/commands/index.js +1 -1
  158. package/dist/js/treeshaking/commands/inspect.js +147 -32
  159. package/dist/js/treeshaking/commands/start.js +190 -68
  160. package/dist/js/treeshaking/config/default.js +210 -199
  161. package/dist/js/treeshaking/config/index.js +3 -2
  162. package/dist/js/treeshaking/config/initial/createHtmlConfig.js +19 -31
  163. package/dist/js/treeshaking/config/initial/createOutputConfig.js +43 -67
  164. package/dist/js/treeshaking/config/initial/createSourceConfig.js +37 -40
  165. package/dist/js/treeshaking/config/initial/createToolsConfig.js +23 -38
  166. package/dist/js/treeshaking/config/initial/index.js +10 -9
  167. package/dist/js/treeshaking/config/initial/inits.js +205 -106
  168. package/dist/js/treeshaking/config/initial/transformNormalizedConfig.js +27 -34
  169. package/dist/js/treeshaking/defineConfig.js +60 -13
  170. package/dist/js/treeshaking/exports/server.js +2 -1
  171. package/dist/js/treeshaking/hooks.js +30 -25
  172. package/dist/js/treeshaking/index.js +681 -256
  173. package/dist/js/treeshaking/initialize/index.js +290 -112
  174. package/dist/js/treeshaking/locale/en.js +34 -33
  175. package/dist/js/treeshaking/locale/index.js +5 -5
  176. package/dist/js/treeshaking/locale/zh.js +34 -33
  177. package/dist/js/treeshaking/schema/Schema.js +267 -69
  178. package/dist/js/treeshaking/schema/index.js +165 -121
  179. package/dist/js/treeshaking/schema/legacy.js +323 -256
  180. package/dist/js/treeshaking/types/config/deploy.js +1 -0
  181. package/dist/js/treeshaking/types/config/dev.js +1 -0
  182. package/dist/js/treeshaking/types/config/experiments.js +1 -0
  183. package/dist/js/treeshaking/types/config/html.js +1 -0
  184. package/dist/js/treeshaking/types/config/index.js +0 -1
  185. package/dist/js/treeshaking/types/config/output.js +1 -0
  186. package/dist/js/treeshaking/types/config/performance.js +1 -0
  187. package/dist/js/treeshaking/types/config/security.js +1 -0
  188. package/dist/js/treeshaking/types/config/source.js +1 -0
  189. package/dist/js/treeshaking/types/config/tools.js +1 -0
  190. package/dist/js/treeshaking/types/hooks.js +1 -0
  191. package/dist/js/treeshaking/types/index.js +0 -1
  192. package/dist/js/treeshaking/types/legacyConfig/deploy.js +1 -0
  193. package/dist/js/treeshaking/types/legacyConfig/dev.js +1 -0
  194. package/dist/js/treeshaking/types/legacyConfig/index.js +1 -0
  195. package/dist/js/treeshaking/types/legacyConfig/output.js +1 -1
  196. package/dist/js/treeshaking/types/legacyConfig/source.js +1 -0
  197. package/dist/js/treeshaking/types/legacyConfig/tools.js +1 -0
  198. package/dist/js/treeshaking/utils/commands.js +6 -5
  199. package/dist/js/treeshaking/utils/config.js +295 -117
  200. package/dist/js/treeshaking/utils/createFileWatcher.js +278 -118
  201. package/dist/js/treeshaking/utils/createServer.js +252 -67
  202. package/dist/js/treeshaking/utils/getSpecifiedEntries.js +182 -55
  203. package/dist/js/treeshaking/utils/language.js +6 -5
  204. package/dist/js/treeshaking/utils/printInstructions.js +151 -29
  205. package/dist/js/treeshaking/utils/restart.js +184 -42
  206. package/dist/js/treeshaking/utils/routes.js +151 -27
  207. package/dist/js/treeshaking/utils/types.js +1 -0
  208. package/dist/types/analyze/Builder.d.ts +8 -0
  209. package/dist/types/analyze/constants.d.ts +2 -0
  210. package/dist/types/analyze/index.d.ts +2 -0
  211. package/dist/types/analyze/templates.d.ts +10 -7
  212. package/dist/types/analyze/utils.d.ts +9 -1
  213. package/dist/types/builder/builderPlugins/compatModern.d.ts +2 -1
  214. package/dist/types/builder/index.d.ts +3 -3
  215. package/dist/types/builder/loaders/routerLoader.d.ts +3 -0
  216. package/dist/types/builder/loaders/serverModuleLoader.d.ts +3 -0
  217. package/dist/types/builder/webpackPlugins/routerPlugin.d.ts +1 -7
  218. package/dist/types/defineConfig.d.ts +1 -0
  219. package/dist/types/index.d.ts +6 -1
  220. package/dist/types/initialize/index.d.ts +2 -0
  221. package/dist/types/types/config/dev.d.ts +2 -2
  222. package/dist/types/types/config/index.d.ts +1 -0
  223. package/dist/types/types/config/output.d.ts +0 -1
  224. package/dist/types/types/config/source.d.ts +1 -0
  225. package/dist/types/types/config/tools.d.ts +10 -1
  226. package/dist/types/types/hooks.d.ts +7 -1
  227. package/dist/types/types/legacyConfig/dev.d.ts +1 -0
  228. package/dist/types/types/legacyConfig/output.d.ts +1 -1
  229. package/dist/types/types/legacyConfig/source.d.ts +1 -0
  230. package/dist/types/types/legacyConfig/tools.d.ts +1 -0
  231. package/dist/types/utils/config.d.ts +1 -0
  232. package/dist/types/utils/createFileWatcher.d.ts +2 -1
  233. package/dist/types/utils/createServer.d.ts +1 -0
  234. package/dist/types/utils/restart.d.ts +1 -1
  235. package/lib/types.d.ts +1 -1
  236. package/package.json +26 -22
@@ -1,8 +1,30 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { isReact18, normalizeToPosixPath } from '@modern-js/utils';
4
- import { FILE_SYSTEM_ROUTES_FILE_NAME } from "./constants";
5
- export const walkDirectory = dir => fs.readdirSync(dir).reduce((previous, filename) => {
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 fs from "fs";
22
+ import path from "path";
23
+ import { isReact18, normalizeToPosixPath, fs as fse } from "@modern-js/utils";
24
+ import { transform } from "esbuild";
25
+ import { parse } from "es-module-lexer";
26
+ import { FILE_SYSTEM_ROUTES_FILE_NAME, LOADER_EXPORT_NAME } from "./constants";
27
+ const walkDirectory = (dir) => fs.readdirSync(dir).reduce((previous, filename) => {
6
28
  const filePath = path.join(dir, filename);
7
29
  if (fs.statSync(filePath).isDirectory()) {
8
30
  return [...previous, ...walkDirectory(filePath)];
@@ -10,77 +32,102 @@ export const walkDirectory = dir => fs.readdirSync(dir).reduce((previous, filena
10
32
  return [...previous, filePath];
11
33
  }
12
34
  }, []);
13
- export const getDefaultImports = ({
35
+ const getDefaultImports = ({
14
36
  entrypoint,
15
37
  srcDirectory,
16
38
  internalSrcAlias,
17
39
  internalDirAlias,
18
40
  internalDirectory
19
41
  }) => {
20
- const {
21
- entryName,
22
- fileSystemRoutes,
23
- customBootstrap,
24
- entry
25
- } = entrypoint;
26
- const imports = [{
27
- specifiers: [{
28
- local: 'React'
29
- }],
30
- value: 'react'
31
- }, {
32
- specifiers: [{
33
- local: 'ReactDOM'
34
- }],
35
- value: isReact18(path.join(internalDirectory, '../../')) ? 'react-dom/client' : 'react-dom'
36
- }, {
37
- specifiers: [{
38
- imported: 'createApp'
39
- }, {
40
- imported: 'bootstrap'
41
- }],
42
- value: '@modern-js/runtime'
43
- }, customBootstrap && {
44
- specifiers: [{
45
- local: 'customBootstrap'
46
- }],
47
- value: normalizeToPosixPath(customBootstrap.replace(srcDirectory, internalSrcAlias))
48
- }].filter(Boolean);
42
+ const { entryName, fileSystemRoutes, customBootstrap, entry } = entrypoint;
43
+ const imports = [
44
+ {
45
+ specifiers: [{ local: "React" }],
46
+ value: "react"
47
+ },
48
+ {
49
+ specifiers: [{ local: "ReactDOM" }],
50
+ value: isReact18(path.join(internalDirectory, "../../")) ? "react-dom/client" : "react-dom"
51
+ },
52
+ {
53
+ specifiers: [{ imported: "createApp" }, { imported: "bootstrap" }],
54
+ value: "@modern-js/runtime"
55
+ },
56
+ customBootstrap && {
57
+ specifiers: [{ local: "customBootstrap" }],
58
+ value: normalizeToPosixPath(
59
+ customBootstrap.replace(srcDirectory, internalSrcAlias)
60
+ )
61
+ }
62
+ ].filter(Boolean);
49
63
  if (fileSystemRoutes) {
50
64
  const route = {
51
- specifiers: [{
52
- imported: 'routes'
53
- }],
54
- value: normalizeToPosixPath(`${internalDirAlias}/${entryName}/${FILE_SYSTEM_ROUTES_FILE_NAME}`)
65
+ specifiers: [{ imported: "routes" }],
66
+ value: normalizeToPosixPath(
67
+ `${internalDirAlias}/${entryName}/${FILE_SYSTEM_ROUTES_FILE_NAME.replace(
68
+ ".js",
69
+ ""
70
+ )}`
71
+ )
55
72
  };
56
73
  if (fileSystemRoutes.globalApp) {
57
74
  imports.push({
58
- specifiers: [{
59
- local: 'App'
60
- }],
61
- value: normalizeToPosixPath(fileSystemRoutes.globalApp.replace(srcDirectory, internalSrcAlias))
75
+ specifiers: [{ local: "App" }],
76
+ value: normalizeToPosixPath(
77
+ fileSystemRoutes.globalApp.replace(srcDirectory, internalSrcAlias)
78
+ )
62
79
  });
63
80
  } else {
64
- route.initialize = 'const App = false;';
81
+ route.initialize = "const App = false;";
65
82
  }
66
83
  imports.push(route);
67
84
  } else {
68
85
  imports.push({
69
- specifiers: [{
70
- local: 'App'
71
- }],
72
- value: normalizeToPosixPath(entry.replace(srcDirectory, internalSrcAlias))
86
+ specifiers: [{ local: "App" }],
87
+ value: normalizeToPosixPath(
88
+ entry.replace(srcDirectory, internalSrcAlias)
89
+ )
73
90
  });
74
91
  }
75
92
  return imports;
76
93
  };
77
- export const isRouteComponentFile = filePath => {
94
+ const isRouteComponentFile = (filePath) => {
78
95
  if (/\.(d|test|spec|e2e)\.(js|jsx|ts|tsx)$/.test(filePath)) {
79
96
  return false;
80
97
  }
81
- if (['.js', '.jsx', '.ts', '.tsx'].includes(path.extname(filePath))) {
98
+ if ([".js", ".jsx", ".ts", ".tsx"].includes(path.extname(filePath))) {
82
99
  return true;
83
100
  }
84
101
  return false;
85
102
  };
86
- export const replaceWithAlias = (base, filePath, alias) => normalizeToPosixPath(path.join(alias, path.relative(base, filePath)));
103
+ const replaceWithAlias = (base, filePath, alias) => normalizeToPosixPath(path.join(alias, path.relative(base, filePath)));
104
+ const parseModule = (_0) => __async(void 0, [_0], function* ({
105
+ source,
106
+ filename
107
+ }) {
108
+ let content = source;
109
+ if (filename.endsWith(".tsx") || filename.endsWith(".jsx")) {
110
+ const result = yield transform(content, {
111
+ loader: path.extname(filename).slice(1),
112
+ format: "esm"
113
+ });
114
+ content = result.code;
115
+ }
116
+ return yield parse(content);
117
+ });
118
+ const hasLoader = (filename) => __async(void 0, null, function* () {
119
+ const source = yield fse.readFile(filename);
120
+ const [, moduleExports] = yield parseModule({
121
+ source: source.toString(),
122
+ filename
123
+ });
124
+ return moduleExports.some((e) => e.n === LOADER_EXPORT_NAME);
125
+ });
126
+ export {
127
+ getDefaultImports,
128
+ hasLoader,
129
+ isRouteComponentFile,
130
+ parseModule,
131
+ replaceWithAlias,
132
+ walkDirectory
133
+ };
@@ -1,49 +1,58 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- import { join } from 'path';
5
- import { mergeBuilderConfig } from '@modern-js/builder-shared';
6
- import { template as lodashTemplate } from '@modern-js/utils/lodash';
7
- import HtmlWebpackPlugin from '@modern-js/builder-webpack-provider/html-webpack-plugin';
8
- import { getEntryOptions } from '@modern-js/utils';
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 { join } from "path";
21
+ import {
22
+ mergeBuilderConfig
23
+ } from "@modern-js/builder-shared";
24
+ import { template as lodashTemplate } from "@modern-js/utils/lodash";
25
+ import HtmlWebpackPlugin from "@modern-js/builder-webpack-provider/html-webpack-plugin";
26
+ import { getEntryOptions } from "@modern-js/utils";
9
27
  import { BottomTemplatePlugin } from "../webpackPlugins/htmlBottomTemplate";
10
28
  import { HtmlAsyncChunkPlugin } from "../webpackPlugins/htmlAsyncChunkPlugin";
11
29
  import { createCopyPattern } from "../share";
12
30
  import RouterPlugin from "../webpackPlugins/routerPlugin";
13
- /**
14
- * Provides default configuration consistent with `@modern-js/webpack`
15
- */
16
- export const PluginCompatModern = (appContext, modernConfig, options) => ({
17
- name: 'builder-plugin-compat-modern',
31
+ const PluginCompatModern = (appContext, modernConfig, options) => ({
32
+ name: "builder-plugin-compat-modern",
18
33
  setup(api) {
19
- api.modifyBuilderConfig(config => {
34
+ api.modifyBuilderConfig((config) => {
20
35
  if (isStreamingSSR(modernConfig)) {
21
36
  return mergeBuilderConfig(config, {
22
37
  html: {
23
- inject: 'body'
38
+ inject: "body"
24
39
  }
25
40
  });
26
41
  }
27
42
  return config;
28
43
  });
29
- api.modifyWebpackChain((chain, {
30
- target,
31
- CHAIN_ID,
32
- isProd
33
- }) => {
44
+ api.modifyWebpackChain((chain, { target, CHAIN_ID, isProd }) => {
45
+ var _a, _b;
34
46
  const builderNormalizedConfig = api.getNormalizedConfig();
35
- // set webpack config name
36
- if (target === 'node') {
37
- chain.name('server');
38
- } else if (target === 'modern-web') {
39
- chain.name('modern');
47
+ if (target === "node") {
48
+ chain.name("server");
49
+ } else if (target === "modern-web") {
50
+ chain.name("modern");
40
51
  } else {
41
- chain.name('client');
52
+ chain.name("client");
42
53
  }
43
- chain.resolve.modules.add('node_modules').add(join(api.context.rootPath, 'node_modules'));
44
-
45
- // apply node compat
46
- if (target === 'node') {
54
+ chain.resolve.modules.add("node_modules").add(join(api.context.rootPath, "node_modules"));
55
+ if (target === "node") {
47
56
  applyNodeCompat(chain, modernConfig, isProd);
48
57
  }
49
58
  if (isHtmlEnabled(builderNormalizedConfig, target)) {
@@ -60,27 +69,38 @@ export const PluginCompatModern = (appContext, modernConfig, options) => ({
60
69
  modernConfig
61
70
  });
62
71
  }
63
-
64
- // apply copy plugin
65
72
  if (chain.plugins.has(CHAIN_ID.PLUGIN.COPY)) {
66
- const defaultCopyPattern = createCopyPattern(appContext, modernConfig, 'public', chain);
67
- chain.plugin(CHAIN_ID.PLUGIN.COPY).tap(args => {
68
- var _args$;
69
- return [{
70
- patterns: [...(((_args$ = args[0]) === null || _args$ === void 0 ? void 0 : _args$.patterns) || []), defaultCopyPattern]
71
- }];
73
+ const defaultCopyPattern = createCopyPattern(
74
+ appContext,
75
+ modernConfig,
76
+ "public",
77
+ chain
78
+ );
79
+ chain.plugin(CHAIN_ID.PLUGIN.COPY).tap((args) => {
80
+ var _a2;
81
+ return [
82
+ {
83
+ patterns: [...((_a2 = args[0]) == null ? void 0 : _a2.patterns) || [], defaultCopyPattern]
84
+ }
85
+ ];
72
86
  });
73
87
  }
74
- const {
75
- entrypoints
76
- } = appContext;
77
- const existNestedRoutes = entrypoints.some(entrypoint => entrypoint.nestedRoutesEntry);
78
- chain.plugin('route-plugin').use(RouterPlugin, [{
79
- existNestedRoutes
80
- }]);
81
- function isHtmlEnabled(config, target) {
82
- var _config$tools;
83
- return ((_config$tools = config.tools) === null || _config$tools === void 0 ? void 0 : _config$tools.htmlPlugin) !== false && target !== 'node' && target !== 'web-worker';
88
+ const { entrypoints } = appContext;
89
+ const existNestedRoutes = entrypoints.some(
90
+ (entrypoint) => entrypoint.nestedRoutesEntry
91
+ );
92
+ const routerManifest = Boolean((_b = (_a = modernConfig == null ? void 0 : modernConfig.runtime) == null ? void 0 : _a.router) == null ? void 0 : _b.manifest);
93
+ if (existNestedRoutes || routerManifest) {
94
+ chain.plugin("route-plugin").use(RouterPlugin);
95
+ }
96
+ if (target !== "node") {
97
+ const bareServerModuleReg = /\.(server|node)\.[tj]sx?$/;
98
+ chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(bareServerModuleReg);
99
+ chain.module.rule("bare-server-module").test(bareServerModuleReg).use("server-module-loader").loader(require.resolve("../loaders/serverModuleLoader"));
100
+ }
101
+ function isHtmlEnabled(config, target2) {
102
+ var _a2;
103
+ return ((_a2 = config.tools) == null ? void 0 : _a2.htmlPlugin) !== false && target2 !== "node" && target2 !== "web-worker";
84
104
  }
85
105
  });
86
106
  if (options) {
@@ -88,10 +108,6 @@ export const PluginCompatModern = (appContext, modernConfig, options) => ({
88
108
  }
89
109
  }
90
110
  });
91
-
92
- /**
93
- * register builder hooks callback
94
- */
95
111
  function applyCallbacks(api, options) {
96
112
  options.onAfterBuild && api.onAfterBuild(options.onAfterBuild);
97
113
  options.onAfterCreateCompiler && api.onAfterCreateCompiler(options.onAfterCreateCompiler);
@@ -102,60 +118,52 @@ function applyCallbacks(api, options) {
102
118
  options.onDevCompileDone && api.onDevCompileDone(options.onDevCompileDone);
103
119
  options.onExit && api.onExit(options.onExit);
104
120
  }
105
-
106
- /**
107
- * compat some config, if target is `node`
108
- */
109
121
  function applyNodeCompat(chain, modernConfig, isProd) {
110
- // apply node resolve extensions
111
- for (const ext of ['.node.js', '.node.jsx', '.node.ts', '.node.tsx']) {
122
+ for (const ext of [
123
+ ".node.js",
124
+ ".node.jsx",
125
+ ".node.ts",
126
+ ".node.tsx",
127
+ ".server.js",
128
+ ".server.ts",
129
+ ".server.ts",
130
+ ".server.tsx"
131
+ ]) {
112
132
  chain.resolve.extensions.prepend(ext);
113
133
  }
114
-
115
- // apply filterEntriesBySSRConfig
116
- filterEntriesBySSRConfig(isProd, chain, modernConfig.server, modernConfig.output);
117
- function filterEntriesBySSRConfig(isProd, chain, serverConfig, outputConfig) {
118
- var _outputConfig$ssg;
119
- const entries = chain.entryPoints.entries();
120
- // if prod and ssg config is true or function
121
- if (isProd && ((outputConfig === null || outputConfig === void 0 ? void 0 : outputConfig.ssg) === true || typeof (outputConfig === null || outputConfig === void 0 ? void 0 : (_outputConfig$ssg = outputConfig.ssg) === null || _outputConfig$ssg === void 0 ? void 0 : _outputConfig$ssg[0]) === 'function')) {
134
+ filterEntriesBySSRConfig(
135
+ isProd,
136
+ chain,
137
+ modernConfig.server,
138
+ modernConfig.output
139
+ );
140
+ function filterEntriesBySSRConfig(isProd2, chain2, serverConfig, outputConfig) {
141
+ var _a;
142
+ const entries = chain2.entryPoints.entries();
143
+ if (isProd2 && ((outputConfig == null ? void 0 : outputConfig.ssg) === true || typeof ((_a = outputConfig == null ? void 0 : outputConfig.ssg) == null ? void 0 : _a[0]) === "function")) {
122
144
  return;
123
145
  }
124
-
125
- // if single entry has ssg config
126
- // `ssg: {}` is not allowed if multi entry
127
146
  const entryNames = Object.keys(entries);
128
- if (isProd && entryNames.length === 1 && outputConfig !== null && outputConfig !== void 0 && outputConfig.ssg) {
147
+ if (isProd2 && entryNames.length === 1 && (outputConfig == null ? void 0 : outputConfig.ssg)) {
129
148
  return;
130
149
  }
131
-
132
- // collect all ssg entries
133
150
  const ssgEntries = [];
134
- if (isProd && outputConfig !== null && outputConfig !== void 0 && outputConfig.ssg) {
135
- const {
136
- ssg
137
- } = outputConfig;
138
- entryNames.forEach(name => {
151
+ if (isProd2 && (outputConfig == null ? void 0 : outputConfig.ssg)) {
152
+ const { ssg } = outputConfig;
153
+ entryNames.forEach((name) => {
139
154
  if (ssg[name]) {
140
155
  ssgEntries.push(name);
141
156
  }
142
157
  });
143
158
  }
144
- const {
145
- ssr,
146
- ssrByEntries
147
- } = serverConfig || {};
148
- entryNames.forEach(name => {
149
- if (!ssgEntries.includes(name) && (ssr && (ssrByEntries === null || ssrByEntries === void 0 ? void 0 : ssrByEntries[name]) === false || !ssr && !(ssrByEntries !== null && ssrByEntries !== void 0 && ssrByEntries[name]))) {
150
- chain.entryPoints.delete(name);
159
+ const { ssr, ssrByEntries } = serverConfig || {};
160
+ entryNames.forEach((name) => {
161
+ if (!ssgEntries.includes(name) && (ssr && (ssrByEntries == null ? void 0 : ssrByEntries[name]) === false || !ssr && !(ssrByEntries == null ? void 0 : ssrByEntries[name]))) {
162
+ chain2.entryPoints.delete(name);
151
163
  }
152
164
  });
153
165
  }
154
166
  }
155
-
156
- /**
157
- * inject bottom template
158
- */
159
167
  function applyBottomHtmlWebpackPlugin({
160
168
  api,
161
169
  chain,
@@ -163,33 +171,40 @@ function applyBottomHtmlWebpackPlugin({
163
171
  appContext,
164
172
  CHAIN_ID
165
173
  }) {
166
- // inject bottomTemplate into html-webpack-plugin
167
174
  for (const entryName of Object.keys(api.context.entry)) {
168
- // FIXME: the only need necessary
169
- const baseTemplateParams = _objectSpread({
175
+ const baseTemplateParams = __spreadValues({
170
176
  entryName,
171
- title: getEntryOptions(entryName, modernConfig.html.title, modernConfig.html.titleByEntries, appContext.packageName),
177
+ title: getEntryOptions(
178
+ entryName,
179
+ modernConfig.html.title,
180
+ modernConfig.html.titleByEntries,
181
+ appContext.packageName
182
+ ),
172
183
  mountId: modernConfig.html.mountId
173
- }, getEntryOptions(entryName, modernConfig.html.templateParameters, modernConfig.html.templateParametersByEntries, appContext.packageName));
174
- chain.plugin(`${CHAIN_ID.PLUGIN.HTML}-${entryName}`).tap(args => [_objectSpread(_objectSpread({}, args[0] || {}), {}, {
175
- __internal__: true,
176
- bottomTemplate: appContext.htmlTemplates[`__${entryName}-bottom__`] && lodashTemplate(appContext.htmlTemplates[`__${entryName}-bottom__`])(baseTemplateParams)
177
- })]);
184
+ }, getEntryOptions(
185
+ entryName,
186
+ modernConfig.html.templateParameters,
187
+ modernConfig.html.templateParametersByEntries,
188
+ appContext.packageName
189
+ ));
190
+ chain.plugin(`${CHAIN_ID.PLUGIN.HTML}-${entryName}`).tap((args) => [
191
+ __spreadProps(__spreadValues({}, args[0] || {}), {
192
+ __internal__: true,
193
+ bottomTemplate: appContext.htmlTemplates[`__${entryName}-bottom__`] && lodashTemplate(appContext.htmlTemplates[`__${entryName}-bottom__`])(
194
+ baseTemplateParams
195
+ )
196
+ })
197
+ ]);
178
198
  }
179
199
  chain.plugin(CHAIN_ID.PLUGIN.BOTTOM_TEMPLATE).use(BottomTemplatePlugin, [HtmlWebpackPlugin]);
180
200
  }
181
- const isStreamingSSR = userConfig => {
182
- const isStreaming = ssr => ssr && typeof ssr === 'object' && ssr.mode === 'stream';
183
- const {
184
- server
185
- } = userConfig;
201
+ const isStreamingSSR = (userConfig) => {
202
+ const isStreaming = (ssr) => ssr && typeof ssr === "object" && ssr.mode === "stream";
203
+ const { server } = userConfig;
186
204
  if (isStreaming(server.ssr)) {
187
205
  return true;
188
206
  }
189
-
190
- // Since we cannot apply different plugins for different entries,
191
- // we regard the whole app as streaming ssr only if one entry meets the requirement.
192
- if (server !== null && server !== void 0 && server.ssrByEntries && typeof server.ssrByEntries === 'object') {
207
+ if ((server == null ? void 0 : server.ssrByEntries) && typeof server.ssrByEntries === "object") {
193
208
  for (const name of Object.keys(server.ssrByEntries)) {
194
209
  if (isStreaming(server.ssrByEntries[name])) {
195
210
  return true;
@@ -206,4 +221,7 @@ function applyAsyncChunkHtmlPlugin({
206
221
  if (isStreamingSSR(modernConfig)) {
207
222
  chain.plugin(CHAIN_ID.PLUGIN.HTML_ASYNC_CHUNK).use(HtmlAsyncChunkPlugin, [HtmlWebpackPlugin]);
208
223
  }
209
- }
224
+ }
225
+ export {
226
+ PluginCompatModern
227
+ };