@modern-js/app-tools 2.0.0-beta.3 → 2.0.0-beta.6

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