@modern-js/app-tools 2.0.0-beta.2 → 2.0.0-canary.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 (231) hide show
  1. package/CHANGELOG.md +251 -0
  2. package/bin/modern.js +10 -1
  3. package/dist/js/modern/analyze/constants.js +38 -16
  4. package/dist/js/modern/analyze/generateCode.js +271 -211
  5. package/dist/js/modern/analyze/getBundleEntry.js +31 -32
  6. package/dist/js/modern/analyze/getClientRoutes/getRoutes.js +93 -49
  7. package/dist/js/modern/analyze/getClientRoutes/getRoutesLegacy.js +89 -47
  8. package/dist/js/modern/analyze/getClientRoutes/index.js +6 -2
  9. package/dist/js/modern/analyze/getClientRoutes/utils.js +23 -10
  10. package/dist/js/modern/analyze/getFileSystemEntry.js +43 -22
  11. package/dist/js/modern/analyze/getHtmlTemplate.js +89 -49
  12. package/dist/js/modern/analyze/getServerRoutes.js +122 -126
  13. package/dist/js/modern/analyze/index.js +193 -159
  14. package/dist/js/modern/analyze/isDefaultExportFunction.js +30 -16
  15. package/dist/js/modern/analyze/makeLegalIdentifier.js +10 -11
  16. package/dist/js/modern/analyze/nestedRoutes.js +110 -53
  17. package/dist/js/modern/analyze/templates.js +190 -77
  18. package/dist/js/modern/analyze/utils.js +98 -51
  19. package/dist/js/modern/builder/builderPlugins/compatModern.js +124 -107
  20. package/dist/js/modern/builder/index.js +123 -86
  21. package/dist/js/modern/builder/loaders/routerLoader.js +17 -0
  22. package/dist/js/modern/builder/loaders/serverModuleLoader.js +7 -0
  23. package/dist/js/modern/builder/share.js +22 -20
  24. package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +23 -22
  25. package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +31 -27
  26. package/dist/js/modern/builder/webpackPlugins/routerPlugin.js +98 -84
  27. package/dist/js/modern/commands/build.js +67 -42
  28. package/dist/js/modern/commands/deploy.js +27 -4
  29. package/dist/js/modern/commands/dev.js +93 -47
  30. package/dist/js/modern/commands/index.js +1 -1
  31. package/dist/js/modern/commands/inspect.js +30 -5
  32. package/dist/js/modern/commands/start.js +37 -16
  33. package/dist/js/modern/config/default.js +103 -114
  34. package/dist/js/modern/config/index.js +8 -2
  35. package/dist/js/modern/config/initial/createHtmlConfig.js +5 -2
  36. package/dist/js/modern/config/initial/createOutputConfig.js +11 -9
  37. package/dist/js/modern/config/initial/createSourceConfig.js +5 -2
  38. package/dist/js/modern/config/initial/createToolsConfig.js +7 -6
  39. package/dist/js/modern/config/initial/index.js +9 -4
  40. package/dist/js/modern/config/initial/inits.js +109 -73
  41. package/dist/js/modern/config/initial/transformNormalizedConfig.js +6 -3
  42. package/dist/js/modern/defineConfig.js +26 -11
  43. package/dist/js/modern/exports/server.js +4 -1
  44. package/dist/js/modern/hooks.js +10 -3
  45. package/dist/js/modern/index.js +140 -89
  46. package/dist/js/modern/initialize/index.js +98 -51
  47. package/dist/js/modern/locale/en.js +20 -21
  48. package/dist/js/modern/locale/index.js +6 -6
  49. package/dist/js/modern/locale/zh.js +21 -22
  50. package/dist/js/modern/schema/Schema.js +6 -5
  51. package/dist/js/modern/schema/index.js +51 -100
  52. package/dist/js/modern/schema/legacy.js +96 -231
  53. package/dist/js/modern/types/config/index.js +0 -1
  54. package/dist/js/modern/types/index.js +0 -1
  55. package/dist/js/modern/types/legacyConfig/output.js +0 -1
  56. package/dist/js/modern/utils/commands.js +5 -2
  57. package/dist/js/modern/utils/config.js +102 -41
  58. package/dist/js/modern/utils/createFileWatcher.js +84 -51
  59. package/dist/js/modern/utils/createServer.js +63 -17
  60. package/dist/js/modern/utils/getSpecifiedEntries.js +46 -19
  61. package/dist/js/modern/utils/language.js +6 -3
  62. package/dist/js/modern/utils/printInstructions.js +27 -8
  63. package/dist/js/modern/utils/restart.js +43 -16
  64. package/dist/js/modern/utils/routes.js +29 -12
  65. package/dist/js/node/analyze/constants.js +54 -35
  66. package/dist/js/node/analyze/generateCode.js +290 -228
  67. package/dist/js/node/analyze/getBundleEntry.js +55 -44
  68. package/dist/js/node/analyze/getClientRoutes/getRoutes.js +132 -76
  69. package/dist/js/node/analyze/getClientRoutes/getRoutesLegacy.js +128 -74
  70. package/dist/js/node/analyze/getClientRoutes/index.js +23 -17
  71. package/dist/js/node/analyze/getClientRoutes/utils.js +44 -21
  72. package/dist/js/node/analyze/getFileSystemEntry.js +70 -39
  73. package/dist/js/node/analyze/getHtmlTemplate.js +116 -61
  74. package/dist/js/node/analyze/getServerRoutes.js +143 -137
  75. package/dist/js/node/analyze/index.js +240 -174
  76. package/dist/js/node/analyze/isDefaultExportFunction.js +55 -26
  77. package/dist/js/node/analyze/makeLegalIdentifier.js +27 -15
  78. package/dist/js/node/analyze/nestedRoutes.js +140 -67
  79. package/dist/js/node/analyze/templates.js +211 -84
  80. package/dist/js/node/analyze/utils.js +123 -62
  81. package/dist/js/node/builder/builderPlugins/compatModern.js +152 -120
  82. package/dist/js/node/builder/index.js +151 -95
  83. package/dist/js/node/builder/loaders/routerLoader.js +36 -0
  84. package/dist/js/node/builder/loaders/serverModuleLoader.js +26 -0
  85. package/dist/js/node/builder/share.js +45 -25
  86. package/dist/js/node/builder/webpackPlugins/htmlAsyncChunkPlugin.js +39 -26
  87. package/dist/js/node/builder/webpackPlugins/htmlBottomTemplate.js +47 -31
  88. package/dist/js/node/builder/webpackPlugins/routerPlugin.js +116 -90
  89. package/dist/js/node/commands/build.js +89 -52
  90. package/dist/js/node/commands/deploy.js +45 -10
  91. package/dist/js/node/commands/dev.js +115 -61
  92. package/dist/js/node/commands/index.js +19 -38
  93. package/dist/js/node/commands/inspect.js +48 -11
  94. package/dist/js/node/commands/start.js +65 -27
  95. package/dist/js/node/config/default.js +119 -118
  96. package/dist/js/node/config/index.js +25 -29
  97. package/dist/js/node/config/initial/createHtmlConfig.js +22 -6
  98. package/dist/js/node/config/initial/createOutputConfig.js +28 -13
  99. package/dist/js/node/config/initial/createSourceConfig.js +22 -6
  100. package/dist/js/node/config/initial/createToolsConfig.js +24 -10
  101. package/dist/js/node/config/initial/index.js +28 -17
  102. package/dist/js/node/config/initial/inits.js +126 -81
  103. package/dist/js/node/config/initial/transformNormalizedConfig.js +31 -15
  104. package/dist/js/node/defineConfig.js +43 -17
  105. package/dist/js/node/exports/server.js +21 -10
  106. package/dist/js/node/hooks.js +44 -29
  107. package/dist/js/node/index.js +190 -130
  108. package/dist/js/node/initialize/index.js +116 -61
  109. package/dist/js/node/locale/en.js +36 -25
  110. package/dist/js/node/locale/index.js +27 -15
  111. package/dist/js/node/locale/zh.js +37 -26
  112. package/dist/js/node/schema/Schema.js +23 -10
  113. package/dist/js/node/schema/index.js +77 -114
  114. package/dist/js/node/schema/legacy.js +117 -240
  115. package/dist/js/node/types/config/index.js +17 -16
  116. package/dist/js/node/types/index.js +19 -38
  117. package/dist/js/node/types/legacyConfig/output.js +0 -5
  118. package/dist/js/node/utils/commands.js +21 -6
  119. package/dist/js/node/utils/config.js +120 -51
  120. package/dist/js/node/utils/createFileWatcher.js +104 -60
  121. package/dist/js/node/utils/createServer.js +86 -25
  122. package/dist/js/node/utils/getSpecifiedEntries.js +64 -25
  123. package/dist/js/node/utils/language.js +24 -8
  124. package/dist/js/node/utils/printInstructions.js +47 -16
  125. package/dist/js/node/utils/restart.js +61 -21
  126. package/dist/js/node/utils/routes.js +53 -18
  127. package/dist/js/treeshaking/analyze/constants.js +28 -16
  128. package/dist/js/treeshaking/analyze/generateCode.js +604 -355
  129. package/dist/js/treeshaking/analyze/getBundleEntry.js +52 -63
  130. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +214 -168
  131. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +215 -169
  132. package/dist/js/treeshaking/analyze/getClientRoutes/index.js +3 -2
  133. package/dist/js/treeshaking/analyze/getClientRoutes/utils.js +19 -20
  134. package/dist/js/treeshaking/analyze/getFileSystemEntry.js +89 -86
  135. package/dist/js/treeshaking/analyze/getHtmlTemplate.js +298 -125
  136. package/dist/js/treeshaking/analyze/getServerRoutes.js +210 -146
  137. package/dist/js/treeshaking/analyze/index.js +558 -303
  138. package/dist/js/treeshaking/analyze/isDefaultExportFunction.js +45 -26
  139. package/dist/js/treeshaking/analyze/makeLegalIdentifier.js +13 -16
  140. package/dist/js/treeshaking/analyze/nestedRoutes.js +414 -160
  141. package/dist/js/treeshaking/analyze/templates.js +432 -161
  142. package/dist/js/treeshaking/analyze/utils.js +361 -80
  143. package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +281 -195
  144. package/dist/js/treeshaking/builder/index.js +371 -165
  145. package/dist/js/treeshaking/builder/loaders/routerLoader.js +13 -0
  146. package/dist/js/treeshaking/builder/loaders/serverModuleLoader.js +5 -0
  147. package/dist/js/treeshaking/builder/share.js +41 -44
  148. package/dist/js/treeshaking/builder/webpackPlugins/htmlAsyncChunkPlugin.js +108 -44
  149. package/dist/js/treeshaking/builder/webpackPlugins/htmlBottomTemplate.js +70 -39
  150. package/dist/js/treeshaking/builder/webpackPlugins/routerPlugin.js +332 -112
  151. package/dist/js/treeshaking/commands/build.js +286 -88
  152. package/dist/js/treeshaking/commands/deploy.js +153 -25
  153. package/dist/js/treeshaking/commands/dev.js +318 -132
  154. package/dist/js/treeshaking/commands/index.js +1 -1
  155. package/dist/js/treeshaking/commands/inspect.js +147 -32
  156. package/dist/js/treeshaking/commands/start.js +190 -68
  157. package/dist/js/treeshaking/config/default.js +210 -199
  158. package/dist/js/treeshaking/config/index.js +3 -2
  159. package/dist/js/treeshaking/config/initial/createHtmlConfig.js +19 -31
  160. package/dist/js/treeshaking/config/initial/createOutputConfig.js +43 -67
  161. package/dist/js/treeshaking/config/initial/createSourceConfig.js +37 -40
  162. package/dist/js/treeshaking/config/initial/createToolsConfig.js +23 -38
  163. package/dist/js/treeshaking/config/initial/index.js +10 -9
  164. package/dist/js/treeshaking/config/initial/inits.js +205 -106
  165. package/dist/js/treeshaking/config/initial/transformNormalizedConfig.js +27 -34
  166. package/dist/js/treeshaking/defineConfig.js +60 -13
  167. package/dist/js/treeshaking/exports/server.js +2 -1
  168. package/dist/js/treeshaking/hooks.js +26 -25
  169. package/dist/js/treeshaking/index.js +465 -257
  170. package/dist/js/treeshaking/initialize/index.js +290 -112
  171. package/dist/js/treeshaking/locale/en.js +34 -33
  172. package/dist/js/treeshaking/locale/index.js +5 -5
  173. package/dist/js/treeshaking/locale/zh.js +34 -33
  174. package/dist/js/treeshaking/schema/Schema.js +267 -69
  175. package/dist/js/treeshaking/schema/index.js +165 -121
  176. package/dist/js/treeshaking/schema/legacy.js +323 -256
  177. package/dist/js/treeshaking/types/config/deploy.js +1 -0
  178. package/dist/js/treeshaking/types/config/dev.js +1 -0
  179. package/dist/js/treeshaking/types/config/experiments.js +1 -0
  180. package/dist/js/treeshaking/types/config/html.js +1 -0
  181. package/dist/js/treeshaking/types/config/index.js +0 -1
  182. package/dist/js/treeshaking/types/config/output.js +1 -0
  183. package/dist/js/treeshaking/types/config/performance.js +1 -0
  184. package/dist/js/treeshaking/types/config/security.js +1 -0
  185. package/dist/js/treeshaking/types/config/source.js +1 -0
  186. package/dist/js/treeshaking/types/config/tools.js +1 -0
  187. package/dist/js/treeshaking/types/hooks.js +1 -0
  188. package/dist/js/treeshaking/types/index.js +0 -1
  189. package/dist/js/treeshaking/types/legacyConfig/deploy.js +1 -0
  190. package/dist/js/treeshaking/types/legacyConfig/dev.js +1 -0
  191. package/dist/js/treeshaking/types/legacyConfig/index.js +1 -0
  192. package/dist/js/treeshaking/types/legacyConfig/output.js +1 -1
  193. package/dist/js/treeshaking/types/legacyConfig/source.js +1 -0
  194. package/dist/js/treeshaking/types/legacyConfig/tools.js +1 -0
  195. package/dist/js/treeshaking/utils/commands.js +6 -5
  196. package/dist/js/treeshaking/utils/config.js +295 -117
  197. package/dist/js/treeshaking/utils/createFileWatcher.js +278 -118
  198. package/dist/js/treeshaking/utils/createServer.js +252 -67
  199. package/dist/js/treeshaking/utils/getSpecifiedEntries.js +182 -55
  200. package/dist/js/treeshaking/utils/language.js +6 -5
  201. package/dist/js/treeshaking/utils/printInstructions.js +151 -29
  202. package/dist/js/treeshaking/utils/restart.js +184 -42
  203. package/dist/js/treeshaking/utils/routes.js +151 -27
  204. package/dist/js/treeshaking/utils/types.js +1 -0
  205. package/dist/types/analyze/constants.d.ts +2 -0
  206. package/dist/types/analyze/index.d.ts +2 -0
  207. package/dist/types/analyze/templates.d.ts +8 -7
  208. package/dist/types/analyze/utils.d.ts +9 -1
  209. package/dist/types/builder/builderPlugins/compatModern.d.ts +2 -1
  210. package/dist/types/builder/index.d.ts +2 -2
  211. package/dist/types/builder/loaders/routerLoader.d.ts +3 -0
  212. package/dist/types/builder/loaders/serverModuleLoader.d.ts +3 -0
  213. package/dist/types/builder/webpackPlugins/routerPlugin.d.ts +1 -7
  214. package/dist/types/defineConfig.d.ts +1 -0
  215. package/dist/types/index.d.ts +2 -0
  216. package/dist/types/initialize/index.d.ts +2 -0
  217. package/dist/types/types/config/index.d.ts +1 -0
  218. package/dist/types/types/config/output.d.ts +0 -1
  219. package/dist/types/types/config/source.d.ts +1 -0
  220. package/dist/types/types/config/tools.d.ts +10 -1
  221. package/dist/types/types/hooks.d.ts +2 -1
  222. package/dist/types/types/legacyConfig/dev.d.ts +1 -0
  223. package/dist/types/types/legacyConfig/output.d.ts +1 -1
  224. package/dist/types/types/legacyConfig/source.d.ts +1 -0
  225. package/dist/types/types/legacyConfig/tools.d.ts +1 -0
  226. package/dist/types/utils/config.d.ts +1 -0
  227. package/dist/types/utils/createFileWatcher.d.ts +2 -1
  228. package/dist/types/utils/createServer.d.ts +1 -0
  229. package/dist/types/utils/restart.d.ts +1 -1
  230. package/lib/types.d.ts +1 -1
  231. package/package.json +27 -23
@@ -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,57 @@
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 }) => {
34
45
  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');
46
+ if (target === "node") {
47
+ chain.name("server");
48
+ } else if (target === "modern-web") {
49
+ chain.name("modern");
40
50
  } else {
41
- chain.name('client');
51
+ chain.name("client");
42
52
  }
43
- chain.resolve.modules.add('node_modules').add(join(api.context.rootPath, 'node_modules'));
44
-
45
- // apply node compat
46
- if (target === 'node') {
53
+ chain.resolve.modules.add("node_modules").add(join(api.context.rootPath, "node_modules"));
54
+ if (target === "node") {
47
55
  applyNodeCompat(chain, modernConfig, isProd);
48
56
  }
49
57
  if (isHtmlEnabled(builderNormalizedConfig, target)) {
@@ -60,27 +68,38 @@ export const PluginCompatModern = (appContext, modernConfig, options) => ({
60
68
  modernConfig
61
69
  });
62
70
  }
63
-
64
- // apply copy plugin
65
71
  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
- }];
72
+ const defaultCopyPattern = createCopyPattern(
73
+ appContext,
74
+ modernConfig,
75
+ "public",
76
+ chain
77
+ );
78
+ chain.plugin(CHAIN_ID.PLUGIN.COPY).tap((args) => {
79
+ var _a;
80
+ return [
81
+ {
82
+ patterns: [...((_a = args[0]) == null ? void 0 : _a.patterns) || [], defaultCopyPattern]
83
+ }
84
+ ];
72
85
  });
73
86
  }
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';
87
+ const { entrypoints } = appContext;
88
+ const existNestedRoutes = entrypoints.some(
89
+ (entrypoint) => entrypoint.nestedRoutesEntry
90
+ );
91
+ const routerManifest = Boolean(modernConfig.runtime.router.minifest);
92
+ if (existNestedRoutes || routerManifest) {
93
+ chain.plugin("route-plugin").use(RouterPlugin);
94
+ }
95
+ if (target !== "node") {
96
+ const bareServerModuleReg = /\.(server|node)\.[tj]sx?$/;
97
+ chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(bareServerModuleReg);
98
+ chain.module.rule("bare-server-module").test(bareServerModuleReg).use("server-module-loader").loader(require.resolve("../loaders/serverModuleLoader"));
99
+ }
100
+ function isHtmlEnabled(config, target2) {
101
+ var _a;
102
+ return ((_a = config.tools) == null ? void 0 : _a.htmlPlugin) !== false && target2 !== "node" && target2 !== "web-worker";
84
103
  }
85
104
  });
86
105
  if (options) {
@@ -88,10 +107,6 @@ export const PluginCompatModern = (appContext, modernConfig, options) => ({
88
107
  }
89
108
  }
90
109
  });
91
-
92
- /**
93
- * register builder hooks callback
94
- */
95
110
  function applyCallbacks(api, options) {
96
111
  options.onAfterBuild && api.onAfterBuild(options.onAfterBuild);
97
112
  options.onAfterCreateCompiler && api.onAfterCreateCompiler(options.onAfterCreateCompiler);
@@ -102,60 +117,52 @@ function applyCallbacks(api, options) {
102
117
  options.onDevCompileDone && api.onDevCompileDone(options.onDevCompileDone);
103
118
  options.onExit && api.onExit(options.onExit);
104
119
  }
105
-
106
- /**
107
- * compat some config, if target is `node`
108
- */
109
120
  function applyNodeCompat(chain, modernConfig, isProd) {
110
- // apply node resolve extensions
111
- for (const ext of ['.node.js', '.node.jsx', '.node.ts', '.node.tsx']) {
121
+ for (const ext of [
122
+ ".node.js",
123
+ ".node.jsx",
124
+ ".node.ts",
125
+ ".node.tsx",
126
+ ".server.js",
127
+ ".server.ts",
128
+ ".server.ts",
129
+ ".server.tsx"
130
+ ]) {
112
131
  chain.resolve.extensions.prepend(ext);
113
132
  }
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')) {
133
+ filterEntriesBySSRConfig(
134
+ isProd,
135
+ chain,
136
+ modernConfig.server,
137
+ modernConfig.output
138
+ );
139
+ function filterEntriesBySSRConfig(isProd2, chain2, serverConfig, outputConfig) {
140
+ var _a;
141
+ const entries = chain2.entryPoints.entries();
142
+ if (isProd2 && ((outputConfig == null ? void 0 : outputConfig.ssg) === true || typeof ((_a = outputConfig == null ? void 0 : outputConfig.ssg) == null ? void 0 : _a[0]) === "function")) {
122
143
  return;
123
144
  }
124
-
125
- // if single entry has ssg config
126
- // `ssg: {}` is not allowed if multi entry
127
145
  const entryNames = Object.keys(entries);
128
- if (isProd && entryNames.length === 1 && outputConfig !== null && outputConfig !== void 0 && outputConfig.ssg) {
146
+ if (isProd2 && entryNames.length === 1 && (outputConfig == null ? void 0 : outputConfig.ssg)) {
129
147
  return;
130
148
  }
131
-
132
- // collect all ssg entries
133
149
  const ssgEntries = [];
134
- if (isProd && outputConfig !== null && outputConfig !== void 0 && outputConfig.ssg) {
135
- const {
136
- ssg
137
- } = outputConfig;
138
- entryNames.forEach(name => {
150
+ if (isProd2 && (outputConfig == null ? void 0 : outputConfig.ssg)) {
151
+ const { ssg } = outputConfig;
152
+ entryNames.forEach((name) => {
139
153
  if (ssg[name]) {
140
154
  ssgEntries.push(name);
141
155
  }
142
156
  });
143
157
  }
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);
158
+ const { ssr, ssrByEntries } = serverConfig || {};
159
+ entryNames.forEach((name) => {
160
+ if (!ssgEntries.includes(name) && (ssr && (ssrByEntries == null ? void 0 : ssrByEntries[name]) === false || !ssr && !(ssrByEntries == null ? void 0 : ssrByEntries[name]))) {
161
+ chain2.entryPoints.delete(name);
151
162
  }
152
163
  });
153
164
  }
154
165
  }
155
-
156
- /**
157
- * inject bottom template
158
- */
159
166
  function applyBottomHtmlWebpackPlugin({
160
167
  api,
161
168
  chain,
@@ -163,33 +170,40 @@ function applyBottomHtmlWebpackPlugin({
163
170
  appContext,
164
171
  CHAIN_ID
165
172
  }) {
166
- // inject bottomTemplate into html-webpack-plugin
167
173
  for (const entryName of Object.keys(api.context.entry)) {
168
- // FIXME: the only need necessary
169
- const baseTemplateParams = _objectSpread({
174
+ const baseTemplateParams = __spreadValues({
170
175
  entryName,
171
- title: getEntryOptions(entryName, modernConfig.html.title, modernConfig.html.titleByEntries, appContext.packageName),
176
+ title: getEntryOptions(
177
+ entryName,
178
+ modernConfig.html.title,
179
+ modernConfig.html.titleByEntries,
180
+ appContext.packageName
181
+ ),
172
182
  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
- })]);
183
+ }, getEntryOptions(
184
+ entryName,
185
+ modernConfig.html.templateParameters,
186
+ modernConfig.html.templateParametersByEntries,
187
+ appContext.packageName
188
+ ));
189
+ chain.plugin(`${CHAIN_ID.PLUGIN.HTML}-${entryName}`).tap((args) => [
190
+ __spreadProps(__spreadValues({}, args[0] || {}), {
191
+ __internal__: true,
192
+ bottomTemplate: appContext.htmlTemplates[`__${entryName}-bottom__`] && lodashTemplate(appContext.htmlTemplates[`__${entryName}-bottom__`])(
193
+ baseTemplateParams
194
+ )
195
+ })
196
+ ]);
178
197
  }
179
198
  chain.plugin(CHAIN_ID.PLUGIN.BOTTOM_TEMPLATE).use(BottomTemplatePlugin, [HtmlWebpackPlugin]);
180
199
  }
181
- const isStreamingSSR = userConfig => {
182
- const isStreaming = ssr => ssr && typeof ssr === 'object' && ssr.mode === 'stream';
183
- const {
184
- server
185
- } = userConfig;
200
+ const isStreamingSSR = (userConfig) => {
201
+ const isStreaming = (ssr) => ssr && typeof ssr === "object" && ssr.mode === "stream";
202
+ const { server } = userConfig;
186
203
  if (isStreaming(server.ssr)) {
187
204
  return true;
188
205
  }
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') {
206
+ if ((server == null ? void 0 : server.ssrByEntries) && typeof server.ssrByEntries === "object") {
193
207
  for (const name of Object.keys(server.ssrByEntries)) {
194
208
  if (isStreaming(server.ssrByEntries[name])) {
195
209
  return true;
@@ -206,4 +220,7 @@ function applyAsyncChunkHtmlPlugin({
206
220
  if (isStreamingSSR(modernConfig)) {
207
221
  chain.plugin(CHAIN_ID.PLUGIN.HTML_ASYNC_CHUNK).use(HtmlAsyncChunkPlugin, [HtmlWebpackPlugin]);
208
222
  }
209
- }
223
+ }
224
+ export {
225
+ PluginCompatModern
226
+ };