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