@modern-js/app-tools 2.15.0 → 2.17.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 (268) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/dist/cjs/analyze/constants.js +37 -61
  3. package/dist/cjs/analyze/generateCode.js +102 -127
  4. package/dist/cjs/analyze/getBundleEntry.js +33 -66
  5. package/dist/cjs/analyze/getClientRoutes/getRoutes.js +61 -117
  6. package/dist/cjs/analyze/getClientRoutes/getRoutesLegacy.js +61 -115
  7. package/dist/cjs/analyze/getClientRoutes/index.js +15 -28
  8. package/dist/cjs/analyze/getClientRoutes/utils.js +24 -48
  9. package/dist/cjs/analyze/getFileSystemEntry.js +39 -79
  10. package/dist/cjs/analyze/getHtmlTemplate.js +88 -98
  11. package/dist/cjs/analyze/getServerRoutes.js +67 -110
  12. package/dist/cjs/analyze/index.js +265 -257
  13. package/dist/cjs/analyze/isDefaultExportFunction.js +66 -44
  14. package/dist/cjs/analyze/makeLegalIdentifier.js +7 -25
  15. package/dist/cjs/analyze/nestedRoutes.js +99 -104
  16. package/dist/cjs/analyze/templates.js +49 -110
  17. package/dist/cjs/analyze/utils.js +98 -102
  18. package/dist/cjs/builder/builder-rspack/adapterCopy.js +58 -100
  19. package/dist/cjs/builder/builder-rspack/index.js +14 -30
  20. package/dist/cjs/builder/builder-webpack/adapterModern.js +33 -50
  21. package/dist/cjs/builder/builder-webpack/createCopyPattern.js +16 -32
  22. package/dist/cjs/builder/builder-webpack/index.js +65 -46
  23. package/dist/cjs/builder/generator/createBuilderOptions.js +10 -26
  24. package/dist/cjs/builder/generator/createBuilderProviderConfig.js +11 -27
  25. package/dist/cjs/builder/generator/getBuilderTargets.js +13 -29
  26. package/dist/cjs/builder/generator/index.js +61 -55
  27. package/dist/cjs/builder/index.js +53 -43
  28. package/dist/cjs/builder/shared/builderPlugins/adapterBasic.js +13 -36
  29. package/dist/cjs/builder/shared/builderPlugins/adapterHtml.js +90 -90
  30. package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +108 -111
  31. package/dist/cjs/builder/shared/builderPlugins/index.js +20 -19
  32. package/dist/cjs/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +30 -30
  33. package/dist/cjs/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +32 -38
  34. package/dist/cjs/builder/shared/bundlerPlugins/RouterPlugin.js +86 -116
  35. package/dist/cjs/builder/shared/bundlerPlugins/index.js +20 -19
  36. package/dist/cjs/builder/shared/createCopyInfo.js +16 -42
  37. package/dist/cjs/builder/shared/index.js +20 -19
  38. package/dist/cjs/builder/shared/loaders/serverModuleLoader.js +8 -24
  39. package/dist/cjs/builder/shared/types.js +4 -15
  40. package/dist/cjs/commands/build.js +23 -40
  41. package/dist/cjs/commands/deploy.js +7 -25
  42. package/dist/cjs/commands/dev.js +38 -57
  43. package/dist/cjs/commands/index.js +20 -19
  44. package/dist/cjs/commands/inspect.js +10 -30
  45. package/dist/cjs/commands/serve.js +28 -66
  46. package/dist/cjs/config/default.js +34 -34
  47. package/dist/cjs/config/index.js +20 -19
  48. package/dist/cjs/config/initialize/index.js +11 -29
  49. package/dist/cjs/config/initialize/inits.js +103 -82
  50. package/dist/cjs/config/legacy/createHtmlConfig.js +8 -40
  51. package/dist/cjs/config/legacy/createOutputConfig.js +8 -51
  52. package/dist/cjs/config/legacy/createSourceConfig.js +8 -38
  53. package/dist/cjs/config/legacy/createToolsConfig.js +8 -43
  54. package/dist/cjs/config/legacy/index.js +22 -46
  55. package/dist/cjs/defineConfig.js +16 -31
  56. package/dist/cjs/exports/server.js +7 -25
  57. package/dist/cjs/hooks.js +33 -51
  58. package/dist/cjs/index.js +185 -166
  59. package/dist/cjs/initialize/index.js +84 -100
  60. package/dist/cjs/locale/en.js +13 -27
  61. package/dist/cjs/locale/index.js +18 -28
  62. package/dist/cjs/locale/zh.js +13 -27
  63. package/dist/cjs/schema/Schema.js +27 -31
  64. package/dist/cjs/schema/index.js +141 -71
  65. package/dist/cjs/schema/legacy.js +273 -96
  66. package/dist/cjs/types/config/deploy.js +4 -15
  67. package/dist/cjs/types/config/dev.js +4 -15
  68. package/dist/cjs/types/config/experiments.js +4 -15
  69. package/dist/cjs/types/config/html.js +4 -15
  70. package/dist/cjs/types/config/index.js +18 -17
  71. package/dist/cjs/types/config/output.js +4 -15
  72. package/dist/cjs/types/config/performance.js +4 -15
  73. package/dist/cjs/types/config/security.js +4 -15
  74. package/dist/cjs/types/config/source.js +4 -15
  75. package/dist/cjs/types/config/tools.js +4 -15
  76. package/dist/cjs/types/hooks.js +4 -15
  77. package/dist/cjs/types/index.js +20 -19
  78. package/dist/cjs/types/legacyConfig/deploy.js +4 -15
  79. package/dist/cjs/types/legacyConfig/dev.js +4 -15
  80. package/dist/cjs/types/legacyConfig/index.js +4 -15
  81. package/dist/cjs/types/legacyConfig/output.js +4 -15
  82. package/dist/cjs/types/legacyConfig/source.js +4 -15
  83. package/dist/cjs/types/legacyConfig/tools.js +4 -15
  84. package/dist/cjs/types/utils.js +4 -15
  85. package/dist/cjs/utils/config.js +74 -79
  86. package/dist/cjs/utils/createServer.js +16 -42
  87. package/dist/cjs/utils/env.js +7 -25
  88. package/dist/cjs/utils/generateWatchFiles.js +31 -52
  89. package/dist/cjs/utils/getSelectedEntries.js +13 -35
  90. package/dist/cjs/utils/getServerInternalPlugins.js +8 -29
  91. package/dist/cjs/utils/printInstructions.js +10 -28
  92. package/dist/cjs/utils/restart.js +13 -31
  93. package/dist/cjs/utils/routes.js +18 -39
  94. package/dist/cjs/utils/types.js +4 -15
  95. package/dist/esm/analyze/constants.js +40 -41
  96. package/dist/esm/analyze/generateCode.js +477 -455
  97. package/dist/esm/analyze/getBundleEntry.js +53 -54
  98. package/dist/esm/analyze/getClientRoutes/getRoutes.js +201 -202
  99. package/dist/esm/analyze/getClientRoutes/getRoutesLegacy.js +199 -200
  100. package/dist/esm/analyze/getClientRoutes/index.js +2 -3
  101. package/dist/esm/analyze/getClientRoutes/utils.js +15 -15
  102. package/dist/esm/analyze/getFileSystemEntry.js +86 -87
  103. package/dist/esm/analyze/getHtmlTemplate.js +289 -278
  104. package/dist/esm/analyze/getServerRoutes.js +203 -190
  105. package/dist/esm/analyze/index.js +679 -651
  106. package/dist/esm/analyze/isDefaultExportFunction.js +38 -39
  107. package/dist/esm/analyze/makeLegalIdentifier.js +8 -9
  108. package/dist/esm/analyze/nestedRoutes.js +400 -392
  109. package/dist/esm/analyze/templates.js +536 -509
  110. package/dist/esm/analyze/utils.js +357 -336
  111. package/dist/esm/builder/builder-rspack/adapterCopy.js +347 -330
  112. package/dist/esm/builder/builder-rspack/index.js +8 -9
  113. package/dist/esm/builder/builder-webpack/adapterModern.js +51 -43
  114. package/dist/esm/builder/builder-webpack/createCopyPattern.js +31 -32
  115. package/dist/esm/builder/builder-webpack/index.js +266 -249
  116. package/dist/esm/builder/generator/createBuilderOptions.js +37 -38
  117. package/dist/esm/builder/generator/createBuilderProviderConfig.js +62 -63
  118. package/dist/esm/builder/generator/getBuilderTargets.js +13 -14
  119. package/dist/esm/builder/generator/index.js +203 -196
  120. package/dist/esm/builder/index.js +183 -176
  121. package/dist/esm/builder/shared/builderPlugins/adapterBasic.js +90 -91
  122. package/dist/esm/builder/shared/builderPlugins/adapterHtml.js +300 -291
  123. package/dist/esm/builder/shared/builderPlugins/adapterSSR.js +337 -329
  124. package/dist/esm/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +108 -97
  125. package/dist/esm/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +66 -64
  126. package/dist/esm/builder/shared/bundlerPlugins/RouterPlugin.js +364 -337
  127. package/dist/esm/builder/shared/createCopyInfo.js +9 -10
  128. package/dist/esm/builder/shared/loaders/serverModuleLoader.js +2 -3
  129. package/dist/esm/builder/shared/types.js +1 -1
  130. package/dist/esm/commands/build.js +279 -272
  131. package/dist/esm/commands/deploy.js +150 -144
  132. package/dist/esm/commands/dev.js +296 -289
  133. package/dist/esm/commands/inspect.js +144 -138
  134. package/dist/esm/commands/serve.js +241 -235
  135. package/dist/esm/config/default.js +202 -203
  136. package/dist/esm/config/initialize/index.js +7 -8
  137. package/dist/esm/config/initialize/inits.js +189 -181
  138. package/dist/esm/config/legacy/createHtmlConfig.js +17 -18
  139. package/dist/esm/config/legacy/createOutputConfig.js +41 -42
  140. package/dist/esm/config/legacy/createSourceConfig.js +38 -39
  141. package/dist/esm/config/legacy/createToolsConfig.js +24 -25
  142. package/dist/esm/config/legacy/index.js +31 -32
  143. package/dist/esm/defineConfig.js +52 -53
  144. package/dist/esm/exports/server.js +1 -2
  145. package/dist/esm/hooks.js +26 -27
  146. package/dist/esm/index.js +685 -671
  147. package/dist/esm/initialize/index.js +276 -269
  148. package/dist/esm/locale/en.js +36 -37
  149. package/dist/esm/locale/index.js +2 -2
  150. package/dist/esm/locale/zh.js +36 -37
  151. package/dist/esm/schema/Schema.js +255 -244
  152. package/dist/esm/schema/index.js +165 -165
  153. package/dist/esm/schema/legacy.js +316 -317
  154. package/dist/esm/types/config/deploy.js +1 -1
  155. package/dist/esm/types/config/dev.js +1 -1
  156. package/dist/esm/types/config/experiments.js +1 -1
  157. package/dist/esm/types/config/html.js +1 -1
  158. package/dist/esm/types/config/output.js +1 -1
  159. package/dist/esm/types/config/performance.js +1 -1
  160. package/dist/esm/types/config/security.js +1 -1
  161. package/dist/esm/types/config/source.js +1 -1
  162. package/dist/esm/types/config/tools.js +1 -1
  163. package/dist/esm/types/hooks.js +1 -1
  164. package/dist/esm/types/legacyConfig/deploy.js +1 -1
  165. package/dist/esm/types/legacyConfig/dev.js +1 -1
  166. package/dist/esm/types/legacyConfig/index.js +1 -1
  167. package/dist/esm/types/legacyConfig/output.js +1 -1
  168. package/dist/esm/types/legacyConfig/source.js +1 -1
  169. package/dist/esm/types/legacyConfig/tools.js +1 -1
  170. package/dist/esm/types/utils.js +1 -1
  171. package/dist/esm/utils/config.js +285 -278
  172. package/dist/esm/utils/createServer.js +242 -234
  173. package/dist/esm/utils/env.js +11 -12
  174. package/dist/esm/utils/generateWatchFiles.js +205 -190
  175. package/dist/esm/utils/getSelectedEntries.js +180 -173
  176. package/dist/esm/utils/getServerInternalPlugins.js +197 -191
  177. package/dist/esm/utils/printInstructions.js +147 -141
  178. package/dist/esm/utils/restart.js +179 -173
  179. package/dist/esm/utils/routes.js +146 -139
  180. package/dist/esm/utils/types.js +1 -1
  181. package/dist/esm-node/analyze/constants.js +31 -46
  182. package/dist/esm-node/analyze/generateCode.js +28 -94
  183. package/dist/esm-node/analyze/getBundleEntry.js +8 -27
  184. package/dist/esm-node/analyze/getClientRoutes/getRoutes.js +24 -65
  185. package/dist/esm-node/analyze/getClientRoutes/getRoutesLegacy.js +24 -63
  186. package/dist/esm-node/analyze/getClientRoutes/index.js +2 -6
  187. package/dist/esm-node/analyze/getClientRoutes/utils.js +5 -19
  188. package/dist/esm-node/analyze/getFileSystemEntry.js +10 -37
  189. package/dist/esm-node/analyze/getHtmlTemplate.js +29 -59
  190. package/dist/esm-node/analyze/getServerRoutes.js +43 -75
  191. package/dist/esm-node/analyze/index.js +208 -230
  192. package/dist/esm-node/analyze/isDefaultExportFunction.js +7 -5
  193. package/dist/esm-node/analyze/makeLegalIdentifier.js +1 -4
  194. package/dist/esm-node/analyze/nestedRoutes.js +23 -43
  195. package/dist/esm-node/analyze/templates.js +22 -69
  196. package/dist/esm-node/analyze/utils.js +66 -60
  197. package/dist/esm-node/builder/builder-rspack/adapterCopy.js +40 -62
  198. package/dist/esm-node/builder/builder-rspack/index.js +4 -5
  199. package/dist/esm-node/builder/builder-webpack/adapterModern.js +24 -26
  200. package/dist/esm-node/builder/builder-webpack/createCopyPattern.js +3 -10
  201. package/dist/esm-node/builder/builder-webpack/index.js +13 -11
  202. package/dist/esm-node/builder/generator/createBuilderOptions.js +4 -5
  203. package/dist/esm-node/builder/generator/createBuilderProviderConfig.js +5 -6
  204. package/dist/esm-node/builder/generator/getBuilderTargets.js +5 -11
  205. package/dist/esm-node/builder/generator/index.js +7 -16
  206. package/dist/esm-node/builder/index.js +2 -7
  207. package/dist/esm-node/builder/shared/builderPlugins/adapterBasic.js +2 -6
  208. package/dist/esm-node/builder/shared/builderPlugins/adapterHtml.js +34 -60
  209. package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.js +54 -74
  210. package/dist/esm-node/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +23 -8
  211. package/dist/esm-node/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +25 -16
  212. package/dist/esm-node/builder/shared/bundlerPlugins/RouterPlugin.js +66 -76
  213. package/dist/esm-node/builder/shared/createCopyInfo.js +2 -8
  214. package/dist/esm-node/builder/shared/loaders/serverModuleLoader.js +1 -4
  215. package/dist/esm-node/builder/shared/types.js +1 -0
  216. package/dist/esm-node/commands/build.js +7 -9
  217. package/dist/esm-node/commands/deploy.js +1 -4
  218. package/dist/esm-node/commands/dev.js +19 -27
  219. package/dist/esm-node/commands/inspect.js +3 -8
  220. package/dist/esm-node/commands/serve.js +7 -25
  221. package/dist/esm-node/config/default.js +20 -11
  222. package/dist/esm-node/config/initialize/index.js +1 -4
  223. package/dist/esm-node/config/initialize/inits.js +48 -54
  224. package/dist/esm-node/config/legacy/createHtmlConfig.js +2 -19
  225. package/dist/esm-node/config/legacy/createOutputConfig.js +2 -30
  226. package/dist/esm-node/config/legacy/createSourceConfig.js +2 -17
  227. package/dist/esm-node/config/legacy/createToolsConfig.js +2 -22
  228. package/dist/esm-node/config/legacy/index.js +3 -18
  229. package/dist/esm-node/defineConfig.js +7 -13
  230. package/dist/esm-node/exports/server.js +1 -4
  231. package/dist/esm-node/hooks.js +2 -9
  232. package/dist/esm-node/index.js +95 -120
  233. package/dist/esm-node/initialize/index.js +74 -87
  234. package/dist/esm-node/locale/en.js +7 -6
  235. package/dist/esm-node/locale/index.js +5 -5
  236. package/dist/esm-node/locale/zh.js +7 -6
  237. package/dist/esm-node/schema/Schema.js +19 -8
  238. package/dist/esm-node/schema/index.js +121 -36
  239. package/dist/esm-node/schema/legacy.js +262 -72
  240. package/dist/esm-node/types/config/deploy.js +1 -0
  241. package/dist/esm-node/types/config/dev.js +1 -0
  242. package/dist/esm-node/types/config/experiments.js +1 -0
  243. package/dist/esm-node/types/config/html.js +1 -0
  244. package/dist/esm-node/types/config/output.js +1 -0
  245. package/dist/esm-node/types/config/performance.js +1 -0
  246. package/dist/esm-node/types/config/security.js +1 -0
  247. package/dist/esm-node/types/config/source.js +1 -0
  248. package/dist/esm-node/types/config/tools.js +1 -0
  249. package/dist/esm-node/types/hooks.js +1 -0
  250. package/dist/esm-node/types/legacyConfig/deploy.js +1 -0
  251. package/dist/esm-node/types/legacyConfig/dev.js +1 -0
  252. package/dist/esm-node/types/legacyConfig/index.js +1 -0
  253. package/dist/esm-node/types/legacyConfig/output.js +1 -0
  254. package/dist/esm-node/types/legacyConfig/source.js +1 -0
  255. package/dist/esm-node/types/legacyConfig/tools.js +1 -0
  256. package/dist/esm-node/types/utils.js +1 -0
  257. package/dist/esm-node/utils/config.js +16 -47
  258. package/dist/esm-node/utils/createServer.js +5 -12
  259. package/dist/esm-node/utils/env.js +1 -4
  260. package/dist/esm-node/utils/generateWatchFiles.js +13 -20
  261. package/dist/esm-node/utils/getSelectedEntries.js +2 -9
  262. package/dist/esm-node/utils/getServerInternalPlugins.js +2 -8
  263. package/dist/esm-node/utils/printInstructions.js +1 -4
  264. package/dist/esm-node/utils/restart.js +2 -11
  265. package/dist/esm-node/utils/routes.js +4 -4
  266. package/dist/esm-node/utils/types.js +1 -0
  267. package/dist/types/index.d.ts +2 -2
  268. package/package.json +29 -25
@@ -1,23 +1,14 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
- import {
4
- urlJoin,
5
- isPlainObject,
6
- removeLeadingSlash,
7
- getEntryOptions,
8
- SERVER_BUNDLE_DIRECTORY,
9
- MAIN_ENTRY_NAME,
10
- removeTailSlash,
11
- SERVER_WORKER_BUNDLE_DIRECTORY
12
- } from "@modern-js/utils";
3
+ import { urlJoin, isPlainObject, removeLeadingSlash, getEntryOptions, SERVER_BUNDLE_DIRECTORY, MAIN_ENTRY_NAME, removeTailSlash, SERVER_WORKER_BUNDLE_DIRECTORY } from "@modern-js/utils";
13
4
  import { walkDirectory } from "./utils";
14
5
  const applyBaseUrl = (baseUrl, routes) => {
15
6
  if (baseUrl) {
16
7
  if (Array.isArray(baseUrl)) {
17
- return baseUrl.reduce(
18
- (previous, current) => [...previous, ...applyBaseUrl(current, routes)],
19
- []
20
- );
8
+ return baseUrl.reduce((previous, current) => [
9
+ ...previous,
10
+ ...applyBaseUrl(current, routes)
11
+ ], []);
21
12
  } else {
22
13
  return routes.map((route) => {
23
14
  const urlPath = urlJoin(baseUrl, route.urlPath);
@@ -70,88 +61,65 @@ const applyRouteOptions = (original, routeOptions) => {
70
61
  ];
71
62
  }
72
63
  } else {
73
- routes = [original];
64
+ routes = [
65
+ original
66
+ ];
74
67
  }
75
68
  return routes;
76
69
  };
77
70
  const collectHtmlRoutes = (entrypoints, appContext, config) => {
78
- var _a;
79
- const {
80
- html: { disableHtmlFolder },
81
- output: { distPath: { html: htmlPath } = {} },
82
- server: { baseUrl, routes, ssr, ssrByEntries },
83
- deploy
84
- } = config;
71
+ var _deploy_worker;
72
+ const { html: { disableHtmlFolder }, output: { distPath: { html: htmlPath } = {} }, server: { baseUrl, routes, ssr, ssrByEntries }, deploy } = config;
85
73
  const { packageName } = appContext;
86
- const workerSSR = (_a = deploy == null ? void 0 : deploy.worker) == null ? void 0 : _a.ssr;
87
- let htmlRoutes = entrypoints.reduce(
88
- (previous, { entryName }) => {
89
- const entryOptions = getEntryOptions(
90
- entryName,
91
- ssr,
92
- ssrByEntries,
93
- packageName
94
- );
95
- const isSSR = Boolean(entryOptions);
96
- const isWorker = Boolean(workerSSR);
97
- const { resHeaders } = (routes == null ? void 0 : routes[entryName]) || {};
98
- let route = {
99
- urlPath: `/${entryName === MAIN_ENTRY_NAME ? "" : entryName}`,
100
- entryName,
101
- entryPath: removeLeadingSlash(
102
- path.posix.normalize(
103
- `${htmlPath}/${entryName}${disableHtmlFolder ? ".html" : "/index.html"}`
104
- )
105
- ),
106
- isSPA: true,
107
- isSSR,
108
- responseHeaders: resHeaders,
109
- worker: isWorker ? `${SERVER_WORKER_BUNDLE_DIRECTORY}/${entryName}.js` : void 0,
110
- bundle: isSSR ? `${SERVER_BUNDLE_DIRECTORY}/${entryName}.js` : void 0
74
+ const workerSSR = deploy === null || deploy === void 0 ? void 0 : (_deploy_worker = deploy.worker) === null || _deploy_worker === void 0 ? void 0 : _deploy_worker.ssr;
75
+ let htmlRoutes = entrypoints.reduce((previous, { entryName }) => {
76
+ const entryOptions = getEntryOptions(entryName, ssr, ssrByEntries, packageName);
77
+ const isSSR = Boolean(entryOptions);
78
+ const isWorker = Boolean(workerSSR);
79
+ const { resHeaders } = (routes === null || routes === void 0 ? void 0 : routes[entryName]) || {};
80
+ let route = {
81
+ urlPath: `/${entryName === MAIN_ENTRY_NAME ? "" : entryName}`,
82
+ entryName,
83
+ entryPath: removeLeadingSlash(path.posix.normalize(`${htmlPath}/${entryName}${disableHtmlFolder ? ".html" : "/index.html"}`)),
84
+ isSPA: true,
85
+ isSSR,
86
+ responseHeaders: resHeaders,
87
+ worker: isWorker ? `${SERVER_WORKER_BUNDLE_DIRECTORY}/${entryName}.js` : void 0,
88
+ bundle: isSSR ? `${SERVER_BUNDLE_DIRECTORY}/${entryName}.js` : void 0
89
+ };
90
+ if (routes === null || routes === void 0 ? void 0 : routes.hasOwnProperty(entryName)) {
91
+ const routeOptions = isPlainObject(routes[entryName]) ? routes[entryName] : {
92
+ route: routes[entryName]
111
93
  };
112
- if (routes == null ? void 0 : routes.hasOwnProperty(entryName)) {
113
- const routeOptions = isPlainObject(routes[entryName]) ? routes[entryName] : { route: routes[entryName] };
114
- route = applyRouteOptions(route, routeOptions);
115
- }
116
- return Array.isArray(route) ? [...previous, ...route] : [...previous, route];
117
- },
118
- []
119
- );
94
+ route = applyRouteOptions(route, routeOptions);
95
+ }
96
+ return Array.isArray(route) ? [
97
+ ...previous,
98
+ ...route
99
+ ] : [
100
+ ...previous,
101
+ route
102
+ ];
103
+ }, []);
120
104
  htmlRoutes = applyBaseUrl(baseUrl, htmlRoutes);
121
105
  return htmlRoutes;
122
106
  };
123
107
  const collectStaticRoutes = (appContext, config) => {
124
108
  const { appDirectory } = appContext;
125
- const {
126
- source: { configDir },
127
- server: { publicRoutes = {} }
128
- } = config;
109
+ const { source: { configDir }, server: { publicRoutes = {} } } = config;
129
110
  const publicFolder = path.resolve(appDirectory, configDir || "", "public");
130
111
  return fs.existsSync(publicFolder) ? walkDirectory(publicFolder).map((filePath) => {
131
- const urlPath = `${urlJoin(
132
- toPosix(filePath).slice(toPosix(publicFolder).length)
133
- )}`;
112
+ const urlPath = `${urlJoin(toPosix(filePath).slice(toPosix(publicFolder).length))}`;
134
113
  return {
135
114
  urlPath: publicRoutes[removeLeadingSlash(urlPath)] || urlPath,
136
115
  isSPA: true,
137
116
  isSSR: false,
138
- entryPath: toPosix(
139
- path.relative(
140
- path.resolve(appDirectory, configDir || ""),
141
- filePath
142
- )
143
- )
117
+ entryPath: toPosix(path.relative(path.resolve(appDirectory, configDir || ""), filePath))
144
118
  };
145
119
  }) : [];
146
120
  };
147
- const getServerRoutes = (entrypoints, {
148
- appContext,
149
- config
150
- }) => [
121
+ export const getServerRoutes = (entrypoints, { appContext, config }) => [
151
122
  ...collectHtmlRoutes(entrypoints, appContext, config),
152
123
  ...collectStaticRoutes(appContext, config)
153
124
  ];
154
125
  const toPosix = (pathStr) => pathStr.split(path.sep).join(path.posix.sep);
155
- export {
156
- getServerRoutes
157
- };
@@ -1,14 +1,5 @@
1
1
  import * as path from "path";
2
- import {
3
- createDebugger,
4
- findExists,
5
- fs,
6
- isApiOnly,
7
- minimist,
8
- getCommand,
9
- isDevCommand,
10
- getArgv
11
- } from "@modern-js/utils";
2
+ import { createDebugger, findExists, fs, isApiOnly, minimist, getCommand, isDevCommand, getArgv } from "@modern-js/utils";
12
3
  import { cloneDeep } from "@modern-js/utils/lodash";
13
4
  import { printInstructions } from "../utils/printInstructions";
14
5
  import { generateRoutes } from "../utils/routes";
@@ -17,242 +8,229 @@ import { getSelectedEntries } from "../utils/getSelectedEntries";
17
8
  import { initialNormalizedConfig } from "../config";
18
9
  import { createBuilderGenerator } from "../builder";
19
10
  import { isPageComponentFile, parseModule, replaceWithAlias } from "./utils";
20
- import {
21
- APP_CONFIG_NAME,
22
- APP_INIT_EXPORTED,
23
- APP_INIT_IMPORTED
24
- } from "./constants";
11
+ import { APP_CONFIG_NAME, APP_INIT_EXPORTED, APP_INIT_IMPORTED } from "./constants";
25
12
  const debug = createDebugger("plugin-analyze");
26
- var analyze_default = ({
27
- bundler
28
- }) => ({
29
- name: "@modern-js/plugin-analyze",
30
- setup: (api) => {
31
- let pagesDir = [];
32
- let nestedRouteEntries = [];
33
- let originEntrypoints = [];
34
- return {
35
- async prepare() {
36
- var _a;
37
- let appContext = api.useAppContext();
38
- const resolvedConfig = api.useResolvedConfigContext();
39
- const hookRunners = api.useHookRunners();
40
- try {
41
- fs.emptydirSync(appContext.internalDirectory);
42
- } catch {
43
- }
44
- const apiOnly = await isApiOnly(
45
- appContext.appDirectory,
46
- (_a = resolvedConfig.source) == null ? void 0 : _a.entriesDir
47
- );
48
- await hookRunners.addRuntimeExports();
49
- if (apiOnly) {
50
- const { routes: routes2 } = await hookRunners.modifyServerRoutes({
51
- routes: []
13
+ export default ({ bundler }) => {
14
+ return {
15
+ name: "@modern-js/plugin-analyze",
16
+ setup: (api) => {
17
+ let pagesDir = [];
18
+ let nestedRouteEntries = [];
19
+ let originEntrypoints = [];
20
+ return {
21
+ async prepare() {
22
+ var _resolvedConfig_source;
23
+ let appContext = api.useAppContext();
24
+ const resolvedConfig = api.useResolvedConfigContext();
25
+ const hookRunners = api.useHookRunners();
26
+ try {
27
+ fs.emptydirSync(appContext.internalDirectory);
28
+ } catch {
29
+ }
30
+ const apiOnly = await isApiOnly(appContext.appDirectory, (_resolvedConfig_source = resolvedConfig.source) === null || _resolvedConfig_source === void 0 ? void 0 : _resolvedConfig_source.entriesDir);
31
+ await hookRunners.addRuntimeExports();
32
+ if (apiOnly) {
33
+ const { routes: routes2 } = await hookRunners.modifyServerRoutes({
34
+ routes: []
35
+ });
36
+ debug(`server routes: %o`, routes2);
37
+ appContext = {
38
+ ...appContext,
39
+ apiOnly,
40
+ serverRoutes: routes2
41
+ };
42
+ api.setAppContext(appContext);
43
+ return;
44
+ }
45
+ const [{ getBundleEntry }, { getServerRoutes }, { generateCode }, { getHtmlTemplate }] = await Promise.all([
46
+ import("./getBundleEntry"),
47
+ import("./getServerRoutes"),
48
+ import("./generateCode"),
49
+ import("./getHtmlTemplate")
50
+ ]);
51
+ const entrypoints = getBundleEntry(appContext, resolvedConfig);
52
+ debug(`entrypoints: %o`, entrypoints);
53
+ const initialRoutes = getServerRoutes(entrypoints, {
54
+ appContext,
55
+ config: resolvedConfig
52
56
  });
53
- debug(`server routes: %o`, routes2);
57
+ const { routes } = await hookRunners.modifyServerRoutes({
58
+ routes: initialRoutes
59
+ });
60
+ debug(`server routes: %o`, routes);
54
61
  appContext = {
55
62
  ...appContext,
56
- apiOnly,
57
- serverRoutes: routes2
63
+ entrypoints,
64
+ serverRoutes: routes
58
65
  };
59
66
  api.setAppContext(appContext);
60
- return;
61
- }
62
- const [
63
- { getBundleEntry },
64
- { getServerRoutes },
65
- { generateCode },
66
- { getHtmlTemplate }
67
- ] = await Promise.all([
68
- import("./getBundleEntry"),
69
- import("./getServerRoutes"),
70
- import("./generateCode"),
71
- import("./getHtmlTemplate")
72
- ]);
73
- const entrypoints = getBundleEntry(appContext, resolvedConfig);
74
- debug(`entrypoints: %o`, entrypoints);
75
- const initialRoutes = getServerRoutes(entrypoints, {
76
- appContext,
77
- config: resolvedConfig
78
- });
79
- const { routes } = await hookRunners.modifyServerRoutes({
80
- routes: initialRoutes
81
- });
82
- debug(`server routes: %o`, routes);
83
- appContext = {
84
- ...appContext,
85
- entrypoints,
86
- serverRoutes: routes
87
- };
88
- api.setAppContext(appContext);
89
- nestedRouteEntries = entrypoints.map((point) => point.nestedRoutesEntry).filter(Boolean);
90
- pagesDir = entrypoints.map((point) => point.entry).filter(Boolean).concat(nestedRouteEntries);
91
- originEntrypoints = cloneDeep(entrypoints);
92
- await generateCode(appContext, resolvedConfig, entrypoints, api);
93
- const htmlTemplates = await getHtmlTemplate(entrypoints, api, {
94
- appContext,
95
- config: resolvedConfig
96
- });
97
- debug(`html templates: %o`, htmlTemplates);
98
- await hookRunners.addDefineTypes();
99
- debug(`add Define Types`);
100
- let checkedEntries = entrypoints.map((point) => point.entryName);
101
- if (isDevCommand()) {
102
- const { entry } = minimist(getArgv());
103
- checkedEntries = await getSelectedEntries(
104
- typeof entry === "string" ? entry.split(",") : entry,
105
- entrypoints
106
- );
107
- }
108
- appContext = {
109
- ...appContext,
110
- entrypoints,
111
- checkedEntries,
112
- apiOnly,
113
- serverRoutes: routes,
114
- htmlTemplates
115
- };
116
- api.setAppContext(appContext);
117
- const command = getCommand();
118
- const buildCommands = ["dev", "start", "build", "inspect", "deploy"];
119
- if (buildCommands.includes(command)) {
120
- const normalizedConfig = api.useResolvedConfigContext();
121
- const createBuilderForModern = await createBuilderGenerator(bundler);
122
- const builder = await createBuilderForModern({
123
- normalizedConfig,
67
+ nestedRouteEntries = entrypoints.map((point) => point.nestedRoutesEntry).filter(Boolean);
68
+ pagesDir = entrypoints.map((point) => point.entry).filter(Boolean).concat(nestedRouteEntries);
69
+ originEntrypoints = cloneDeep(entrypoints);
70
+ await generateCode(appContext, resolvedConfig, entrypoints, api);
71
+ const htmlTemplates = await getHtmlTemplate(entrypoints, api, {
124
72
  appContext,
125
- async onBeforeBuild({ bundlerConfigs }) {
126
- const hookRunners2 = api.useHookRunners();
127
- await generateRoutes(appContext);
128
- await hookRunners2.beforeBuild({
129
- bundlerConfigs
130
- });
131
- },
132
- async onAfterBuild({ stats }) {
133
- const hookRunners2 = api.useHookRunners();
134
- await hookRunners2.afterBuild({ stats });
135
- await emitResolvedConfig(
136
- appContext.appDirectory,
137
- normalizedConfig
138
- );
139
- },
140
- async onDevCompileDone({ isFirstCompile }) {
141
- const hookRunners2 = api.useHookRunners();
142
- if (process.stdout.isTTY || isFirstCompile) {
143
- hookRunners2.afterDev();
144
- if (isFirstCompile) {
145
- printInstructions(hookRunners2, appContext, normalizedConfig);
146
- }
147
- }
148
- },
149
- async onBeforeCreateCompiler({ bundlerConfigs }) {
150
- const hookRunners2 = api.useHookRunners();
151
- await hookRunners2.beforeCreateCompiler({
152
- bundlerConfigs
153
- });
154
- },
155
- async onAfterCreateCompiler({ compiler }) {
156
- const hookRunners2 = api.useHookRunners();
157
- await hookRunners2.afterCreateCompiler({
158
- compiler
159
- });
160
- }
73
+ config: resolvedConfig
161
74
  });
162
- builder.addPlugins(resolvedConfig.builderPlugins);
75
+ debug(`html templates: %o`, htmlTemplates);
76
+ await hookRunners.addDefineTypes();
77
+ debug(`add Define Types`);
78
+ let checkedEntries = entrypoints.map((point) => point.entryName);
79
+ if (isDevCommand()) {
80
+ const { entry } = minimist(getArgv());
81
+ checkedEntries = await getSelectedEntries(typeof entry === "string" ? entry.split(",") : entry, entrypoints);
82
+ }
163
83
  appContext = {
164
84
  ...appContext,
165
- builder
85
+ entrypoints,
86
+ checkedEntries,
87
+ apiOnly,
88
+ serverRoutes: routes,
89
+ htmlTemplates
166
90
  };
167
91
  api.setAppContext(appContext);
168
- }
169
- },
170
- watchFiles() {
171
- return pagesDir;
172
- },
173
- resolvedConfig({ resolved }) {
174
- const appContext = api.useAppContext();
175
- const config = initialNormalizedConfig(resolved, appContext, bundler);
176
- return {
177
- resolved: config
178
- };
179
- },
180
- // This logic is not in the router plugin to avoid having to include some dependencies in the utils package
181
- async modifyEntryImports({ entrypoint, imports }) {
182
- const appContext = api.useAppContext();
183
- const { srcDirectory, internalSrcAlias } = appContext;
184
- const { fileSystemRoutes, nestedRoutesEntry } = entrypoint;
185
- if (fileSystemRoutes && nestedRoutesEntry) {
186
- const rootLayoutPath = path.join(nestedRoutesEntry, "layout");
187
- const rootLayoutFile = findExists(
188
- [".js", ".ts", ".jsx", ".tsx"].map(
189
- (ext) => `${rootLayoutPath}${ext}`
190
- )
191
- );
192
- if (rootLayoutFile) {
193
- const rootLayoutBuffer = await fs.readFile(rootLayoutFile);
194
- const rootLayout = rootLayoutBuffer.toString();
195
- const [, moduleExports] = await parseModule({
196
- source: rootLayout.toString(),
197
- filename: rootLayoutFile
92
+ const command = getCommand();
93
+ const buildCommands = [
94
+ "dev",
95
+ "start",
96
+ "build",
97
+ "inspect",
98
+ "deploy"
99
+ ];
100
+ if (buildCommands.includes(command)) {
101
+ const normalizedConfig = api.useResolvedConfigContext();
102
+ const createBuilderForModern = await createBuilderGenerator(bundler);
103
+ const builder = await createBuilderForModern({
104
+ normalizedConfig,
105
+ appContext,
106
+ async onBeforeBuild({ bundlerConfigs }) {
107
+ const hookRunners2 = api.useHookRunners();
108
+ await generateRoutes(appContext);
109
+ await hookRunners2.beforeBuild({
110
+ bundlerConfigs
111
+ });
112
+ },
113
+ async onAfterBuild({ stats }) {
114
+ const hookRunners2 = api.useHookRunners();
115
+ await hookRunners2.afterBuild({
116
+ stats
117
+ });
118
+ await emitResolvedConfig(appContext.appDirectory, normalizedConfig);
119
+ },
120
+ async onDevCompileDone({ isFirstCompile }) {
121
+ const hookRunners2 = api.useHookRunners();
122
+ if (process.stdout.isTTY || isFirstCompile) {
123
+ hookRunners2.afterDev();
124
+ if (isFirstCompile) {
125
+ printInstructions(hookRunners2, appContext, normalizedConfig);
126
+ }
127
+ }
128
+ },
129
+ async onBeforeCreateCompiler({ bundlerConfigs }) {
130
+ const hookRunners2 = api.useHookRunners();
131
+ await hookRunners2.beforeCreateCompiler({
132
+ bundlerConfigs
133
+ });
134
+ },
135
+ async onAfterCreateCompiler({ compiler }) {
136
+ const hookRunners2 = api.useHookRunners();
137
+ await hookRunners2.afterCreateCompiler({
138
+ compiler
139
+ });
140
+ }
198
141
  });
199
- const hasAppConfig = moduleExports.some(
200
- (e) => e.n === APP_CONFIG_NAME
201
- );
202
- const generateLayoutPath = replaceWithAlias(
203
- srcDirectory,
204
- rootLayoutFile,
205
- internalSrcAlias
206
- );
207
- if (hasAppConfig) {
208
- imports.push({
209
- value: generateLayoutPath,
210
- specifiers: [{ imported: APP_CONFIG_NAME }]
211
- });
212
- }
213
- const hasAppInit = moduleExports.some(
214
- (e) => e.n === APP_INIT_EXPORTED
215
- );
216
- if (hasAppInit) {
217
- imports.push({
218
- value: generateLayoutPath,
219
- specifiers: [
220
- { imported: APP_INIT_EXPORTED, local: APP_INIT_IMPORTED }
221
- ]
142
+ builder.addPlugins(resolvedConfig.builderPlugins);
143
+ appContext = {
144
+ ...appContext,
145
+ builder
146
+ };
147
+ api.setAppContext(appContext);
148
+ }
149
+ },
150
+ watchFiles() {
151
+ return pagesDir;
152
+ },
153
+ resolvedConfig({ resolved }) {
154
+ const appContext = api.useAppContext();
155
+ const config = initialNormalizedConfig(resolved, appContext, bundler);
156
+ return {
157
+ resolved: config
158
+ };
159
+ },
160
+ // This logic is not in the router plugin to avoid having to include some dependencies in the utils package
161
+ async modifyEntryImports({ entrypoint, imports }) {
162
+ const appContext = api.useAppContext();
163
+ const { srcDirectory, internalSrcAlias } = appContext;
164
+ const { fileSystemRoutes, nestedRoutesEntry } = entrypoint;
165
+ if (fileSystemRoutes && nestedRoutesEntry) {
166
+ const rootLayoutPath = path.join(nestedRoutesEntry, "layout");
167
+ const rootLayoutFile = findExists([
168
+ ".js",
169
+ ".ts",
170
+ ".jsx",
171
+ ".tsx"
172
+ ].map((ext) => `${rootLayoutPath}${ext}`));
173
+ if (rootLayoutFile) {
174
+ const rootLayoutBuffer = await fs.readFile(rootLayoutFile);
175
+ const rootLayout = rootLayoutBuffer.toString();
176
+ const [, moduleExports] = await parseModule({
177
+ source: rootLayout.toString(),
178
+ filename: rootLayoutFile
222
179
  });
180
+ const hasAppConfig = moduleExports.some((e) => e.n === APP_CONFIG_NAME);
181
+ const generateLayoutPath = replaceWithAlias(srcDirectory, rootLayoutFile, internalSrcAlias);
182
+ if (hasAppConfig) {
183
+ imports.push({
184
+ value: generateLayoutPath,
185
+ specifiers: [
186
+ {
187
+ imported: APP_CONFIG_NAME
188
+ }
189
+ ]
190
+ });
191
+ }
192
+ const hasAppInit = moduleExports.some((e) => e.n === APP_INIT_EXPORTED);
193
+ if (hasAppInit) {
194
+ imports.push({
195
+ value: generateLayoutPath,
196
+ specifiers: [
197
+ {
198
+ imported: APP_INIT_EXPORTED,
199
+ local: APP_INIT_IMPORTED
200
+ }
201
+ ]
202
+ });
203
+ }
223
204
  }
224
205
  }
225
- }
226
- return {
227
- entrypoint,
228
- imports
229
- };
230
- },
231
- validateSchema() {
232
- return {
233
- target: "output.splitRouteChunks",
234
- schema: {
235
- type: "boolean"
206
+ return {
207
+ entrypoint,
208
+ imports
209
+ };
210
+ },
211
+ validateSchema() {
212
+ return {
213
+ target: "output.splitRouteChunks",
214
+ schema: {
215
+ type: "boolean"
216
+ }
217
+ };
218
+ },
219
+ async fileChange(e) {
220
+ const appContext = api.useAppContext();
221
+ const { appDirectory } = appContext;
222
+ const { filename, eventType } = e;
223
+ const isPageFile = (name) => pagesDir.some((pageDir) => name.includes(pageDir));
224
+ const absoluteFilePath = path.resolve(appDirectory, filename);
225
+ const isRouteComponent = isPageFile(absoluteFilePath) && isPageComponentFile(absoluteFilePath);
226
+ if (isRouteComponent && (eventType === "add" || eventType === "unlink")) {
227
+ const resolvedConfig = api.useResolvedConfigContext();
228
+ const { generateCode } = await import("./generateCode");
229
+ const entrypoints = cloneDeep(originEntrypoints);
230
+ generateCode(appContext, resolvedConfig, entrypoints, api);
236
231
  }
237
- };
238
- },
239
- async fileChange(e) {
240
- const appContext = api.useAppContext();
241
- const { appDirectory } = appContext;
242
- const { filename, eventType } = e;
243
- const isPageFile = (name) => pagesDir.some((pageDir) => name.includes(pageDir));
244
- const absoluteFilePath = path.resolve(appDirectory, filename);
245
- const isRouteComponent = isPageFile(absoluteFilePath) && isPageComponentFile(absoluteFilePath);
246
- if (isRouteComponent && (eventType === "add" || eventType === "unlink")) {
247
- const resolvedConfig = api.useResolvedConfigContext();
248
- const { generateCode } = await import("./generateCode");
249
- const entrypoints = cloneDeep(originEntrypoints);
250
- generateCode(appContext, resolvedConfig, entrypoints, api);
251
232
  }
252
- }
253
- };
254
- }
255
- });
256
- export {
257
- analyze_default as default
233
+ };
234
+ }
235
+ };
258
236
  };
@@ -3,7 +3,7 @@ import { parse } from "@babel/parser";
3
3
  import traverse from "@babel/traverse";
4
4
  import * as t from "@babel/types";
5
5
  const isFunction = (node) => t.isFunctionDeclaration(node) || t.isFunctionExpression(node) || t.isArrowFunctionExpression(node);
6
- const isDefaultExportFunction = (file) => {
6
+ export const isDefaultExportFunction = (file) => {
7
7
  if (!file || !fs.existsSync(file)) {
8
8
  return false;
9
9
  }
@@ -19,7 +19,12 @@ const isDefaultExportFunction = (file) => {
19
19
  "decorators-legacy",
20
20
  "functionBind",
21
21
  "classPrivateMethods",
22
- ["pipelineOperator", { proposal: "minimal" }],
22
+ [
23
+ "pipelineOperator",
24
+ {
25
+ proposal: "minimal"
26
+ }
27
+ ],
23
28
  "optionalChaining",
24
29
  "optionalCatchBinding",
25
30
  "objectRestSpread",
@@ -37,6 +42,3 @@ const isDefaultExportFunction = (file) => {
37
42
  });
38
43
  return isExportFunction;
39
44
  };
40
- export {
41
- isDefaultExportFunction
42
- };
@@ -1,13 +1,10 @@
1
1
  const reservedWords = "break case class catch const continue debugger default delete do else export extends finally for function if import in instanceof let new return super switch this throw try typeof var void while with yield enum await implements package protected static interface private public";
2
2
  const builtins = "arguments Infinity NaN undefined null true false eval uneval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Symbol Error EvalError InternalError RangeError ReferenceError SyntaxError TypeError URIError Number Math Date String RegExp Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array Map Set WeakMap WeakSet SIMD ArrayBuffer DataView JSON Promise Generator GeneratorFunction Reflect Proxy Intl";
3
3
  const forbidList = new Set(`${reservedWords} ${builtins}`.split(" "));
4
- function makeLegalIdentifier(str) {
4
+ export function makeLegalIdentifier(str) {
5
5
  const identifier = str.replace(/-(\w)/g, (_, letter) => letter.toUpperCase()).replace(/[^$_a-zA-Z0-9]/g, "_");
6
6
  if (/\d/.test(identifier[0]) || forbidList.has(identifier)) {
7
7
  return `_${identifier}`;
8
8
  }
9
9
  return identifier || "_";
10
10
  }
11
- export {
12
- makeLegalIdentifier
13
- };