@modern-js/app-tools 1.22.1 → 2.0.0-alpha.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 (325) hide show
  1. package/CHANGELOG.md +1383 -87
  2. package/bin/modern.js +13 -1
  3. package/dist/js/modern/analyze/Builder.js +39 -0
  4. package/dist/js/modern/analyze/constants.js +48 -15
  5. package/dist/js/modern/analyze/generateCode.js +286 -133
  6. package/dist/js/modern/analyze/getBundleEntry.js +39 -41
  7. package/dist/js/modern/analyze/getClientRoutes/getRoutes.js +220 -0
  8. package/dist/js/modern/analyze/getClientRoutes/getRoutesLegacy.js +216 -0
  9. package/dist/js/modern/analyze/getClientRoutes/index.js +6 -0
  10. package/dist/js/modern/analyze/getClientRoutes/utils.js +31 -0
  11. package/dist/js/modern/analyze/getFileSystemEntry.js +74 -39
  12. package/dist/js/modern/analyze/getHtmlTemplate.js +90 -57
  13. package/dist/js/modern/analyze/getServerRoutes.js +123 -140
  14. package/dist/js/modern/analyze/index.js +220 -133
  15. package/dist/js/modern/analyze/isDefaultExportFunction.js +30 -20
  16. package/dist/js/modern/analyze/makeLegalIdentifier.js +10 -13
  17. package/dist/js/modern/analyze/nestedRoutes.js +166 -0
  18. package/dist/js/modern/analyze/templates.js +289 -29
  19. package/dist/js/modern/analyze/utils.js +128 -58
  20. package/dist/js/modern/builder/builderPlugins/compatModern.js +233 -0
  21. package/dist/js/modern/builder/index.js +154 -0
  22. package/dist/js/modern/builder/loaders/routerLoader.js +17 -0
  23. package/dist/js/modern/builder/loaders/serverModuleLoader.js +7 -0
  24. package/dist/js/modern/builder/share.js +46 -0
  25. package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +30 -0
  26. package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +37 -0
  27. package/dist/js/modern/builder/webpackPlugins/routerPlugin.js +113 -0
  28. package/dist/js/modern/commands/build.js +75 -138
  29. package/dist/js/modern/commands/deploy.js +27 -4
  30. package/dist/js/modern/commands/dev.js +102 -66
  31. package/dist/js/modern/commands/index.js +1 -1
  32. package/dist/js/modern/commands/inspect.js +33 -64
  33. package/dist/js/modern/commands/serve.js +54 -0
  34. package/dist/js/modern/config/default.js +173 -0
  35. package/dist/js/modern/config/index.js +8 -0
  36. package/dist/js/modern/config/initial/createHtmlConfig.js +35 -0
  37. package/dist/js/modern/config/initial/createOutputConfig.js +68 -0
  38. package/dist/js/modern/config/initial/createSourceConfig.js +39 -0
  39. package/dist/js/modern/config/initial/createToolsConfig.js +42 -0
  40. package/dist/js/modern/config/initial/index.js +16 -0
  41. package/dist/js/modern/config/initial/inits.js +153 -0
  42. package/dist/js/modern/config/initial/transformNormalizedConfig.js +47 -0
  43. package/dist/js/modern/defineConfig.js +27 -0
  44. package/dist/js/modern/exports/server.js +4 -1
  45. package/dist/js/modern/hooks.js +37 -21
  46. package/dist/js/modern/index.js +185 -94
  47. package/dist/js/modern/initialize/index.js +120 -0
  48. package/dist/js/modern/locale/en.js +20 -22
  49. package/dist/js/modern/locale/index.js +6 -6
  50. package/dist/js/modern/locale/zh.js +21 -23
  51. package/dist/js/modern/schema/Schema.js +40 -0
  52. package/dist/js/modern/schema/index.js +88 -0
  53. package/dist/js/modern/schema/legacy.js +148 -0
  54. package/dist/js/modern/types/config/deploy.js +0 -0
  55. package/dist/js/modern/types/config/dev.js +0 -0
  56. package/dist/js/modern/types/config/experiments.js +0 -0
  57. package/dist/js/modern/types/config/html.js +0 -0
  58. package/dist/js/modern/types/config/index.js +1 -0
  59. package/dist/js/modern/types/config/output.js +0 -0
  60. package/dist/js/modern/types/config/performance.js +0 -0
  61. package/dist/js/modern/types/config/security.js +0 -0
  62. package/dist/js/modern/types/config/source.js +0 -0
  63. package/dist/js/modern/types/config/tools.js +0 -0
  64. package/dist/js/modern/types/hooks.js +0 -0
  65. package/dist/js/modern/types/index.js +3 -0
  66. package/dist/js/modern/types/legacyConfig/deploy.js +0 -0
  67. package/dist/js/modern/types/legacyConfig/dev.js +0 -0
  68. package/dist/js/modern/types/legacyConfig/index.js +0 -0
  69. package/dist/js/modern/types/legacyConfig/output.js +0 -0
  70. package/dist/js/modern/types/legacyConfig/source.js +0 -0
  71. package/dist/js/modern/types/legacyConfig/tools.js +0 -0
  72. package/dist/js/modern/utils/commands.js +13 -0
  73. package/dist/js/modern/utils/config.js +102 -52
  74. package/dist/js/modern/utils/createFileWatcher.js +115 -0
  75. package/dist/js/modern/utils/createServer.js +67 -10
  76. package/dist/js/modern/utils/getServerInternalPlugins.js +58 -0
  77. package/dist/js/modern/utils/getSpecifiedEntries.js +46 -25
  78. package/dist/js/modern/utils/language.js +6 -3
  79. package/dist/js/modern/utils/printInstructions.js +29 -9
  80. package/dist/js/modern/utils/restart.js +44 -0
  81. package/dist/js/modern/utils/routes.js +29 -14
  82. package/dist/js/node/analyze/Builder.js +64 -0
  83. package/dist/js/node/analyze/constants.js +86 -33
  84. package/dist/js/node/analyze/generateCode.js +305 -163
  85. package/dist/js/node/analyze/getBundleEntry.js +66 -58
  86. package/dist/js/node/analyze/getClientRoutes/getRoutes.js +242 -0
  87. package/dist/js/node/analyze/getClientRoutes/getRoutesLegacy.js +238 -0
  88. package/dist/js/node/analyze/getClientRoutes/index.js +30 -0
  89. package/dist/js/node/analyze/getClientRoutes/utils.js +58 -0
  90. package/dist/js/node/analyze/getFileSystemEntry.js +99 -58
  91. package/dist/js/node/analyze/getHtmlTemplate.js +121 -83
  92. package/dist/js/node/analyze/getServerRoutes.js +146 -160
  93. package/dist/js/node/analyze/index.js +243 -161
  94. package/dist/js/node/analyze/isDefaultExportFunction.js +59 -38
  95. package/dist/js/node/analyze/makeLegalIdentifier.js +31 -19
  96. package/dist/js/node/analyze/nestedRoutes.js +193 -0
  97. package/dist/js/node/analyze/templates.js +316 -43
  98. package/dist/js/node/analyze/utils.js +158 -78
  99. package/dist/js/node/builder/builderPlugins/compatModern.js +258 -0
  100. package/dist/js/node/builder/index.js +177 -0
  101. package/dist/js/node/builder/loaders/routerLoader.js +38 -0
  102. package/dist/js/node/builder/loaders/serverModuleLoader.js +28 -0
  103. package/dist/js/node/builder/share.js +75 -0
  104. package/dist/js/node/builder/webpackPlugins/htmlAsyncChunkPlugin.js +53 -0
  105. package/dist/js/node/builder/webpackPlugins/htmlBottomTemplate.js +60 -0
  106. package/dist/js/node/builder/webpackPlugins/routerPlugin.js +135 -0
  107. package/dist/js/node/commands/build.js +97 -159
  108. package/dist/js/node/commands/deploy.js +49 -12
  109. package/dist/js/node/commands/dev.js +121 -93
  110. package/dist/js/node/commands/index.js +19 -44
  111. package/dist/js/node/commands/inspect.js +56 -93
  112. package/dist/js/node/commands/serve.js +83 -0
  113. package/dist/js/node/config/default.js +195 -0
  114. package/dist/js/node/config/index.js +34 -0
  115. package/dist/js/node/config/initial/createHtmlConfig.js +58 -0
  116. package/dist/js/node/config/initial/createOutputConfig.js +91 -0
  117. package/dist/js/node/config/initial/createSourceConfig.js +62 -0
  118. package/dist/js/node/config/initial/createToolsConfig.js +65 -0
  119. package/dist/js/node/config/initial/index.js +41 -0
  120. package/dist/js/node/config/initial/inits.js +176 -0
  121. package/dist/js/node/config/initial/transformNormalizedConfig.js +70 -0
  122. package/dist/js/node/defineConfig.js +49 -0
  123. package/dist/js/node/exports/server.js +25 -11
  124. package/dist/js/node/hooks.js +53 -36
  125. package/dist/js/node/index.js +216 -128
  126. package/dist/js/node/initialize/index.js +135 -0
  127. package/dist/js/node/locale/en.js +40 -26
  128. package/dist/js/node/locale/index.js +31 -18
  129. package/dist/js/node/locale/zh.js +41 -27
  130. package/dist/js/node/schema/Schema.js +63 -0
  131. package/dist/js/node/schema/index.js +118 -0
  132. package/dist/js/node/schema/legacy.js +169 -0
  133. package/dist/js/node/types/config/deploy.js +15 -0
  134. package/dist/js/node/types/config/dev.js +15 -0
  135. package/dist/js/node/types/config/experiments.js +15 -0
  136. package/dist/js/node/types/config/html.js +15 -0
  137. package/dist/js/node/types/config/index.js +17 -0
  138. package/dist/js/node/types/config/output.js +15 -0
  139. package/dist/js/node/types/config/performance.js +15 -0
  140. package/dist/js/node/types/config/security.js +15 -0
  141. package/dist/js/node/types/config/source.js +15 -0
  142. package/dist/js/node/types/config/tools.js +15 -0
  143. package/dist/js/node/types/hooks.js +15 -0
  144. package/dist/js/node/types/index.js +19 -0
  145. package/dist/js/node/types/legacyConfig/deploy.js +15 -0
  146. package/dist/js/node/types/legacyConfig/dev.js +15 -0
  147. package/dist/js/node/types/legacyConfig/index.js +15 -0
  148. package/dist/js/node/types/legacyConfig/output.js +15 -0
  149. package/dist/js/node/types/legacyConfig/source.js +15 -0
  150. package/dist/js/node/types/legacyConfig/tools.js +15 -0
  151. package/dist/js/node/utils/commands.js +37 -0
  152. package/dist/js/node/utils/config.js +125 -75
  153. package/dist/js/node/utils/createFileWatcher.js +139 -0
  154. package/dist/js/node/utils/createServer.js +96 -25
  155. package/dist/js/node/utils/getServerInternalPlugins.js +79 -0
  156. package/dist/js/node/utils/getSpecifiedEntries.js +68 -34
  157. package/dist/js/node/utils/language.js +28 -10
  158. package/dist/js/node/utils/printInstructions.js +51 -19
  159. package/dist/js/node/utils/restart.js +67 -0
  160. package/dist/js/node/utils/routes.js +58 -24
  161. package/dist/js/node/utils/types.js +15 -0
  162. package/dist/js/treeshaking/analyze/Builder.js +199 -0
  163. package/dist/js/treeshaking/analyze/constants.js +37 -0
  164. package/dist/js/treeshaking/analyze/generateCode.js +615 -0
  165. package/dist/js/treeshaking/analyze/getBundleEntry.js +64 -0
  166. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +233 -0
  167. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +231 -0
  168. package/dist/js/treeshaking/analyze/getClientRoutes/index.js +3 -0
  169. package/dist/js/treeshaking/analyze/getClientRoutes/utils.js +23 -0
  170. package/dist/js/treeshaking/analyze/getFileSystemEntry.js +107 -0
  171. package/dist/js/treeshaking/analyze/getHtmlTemplate.js +302 -0
  172. package/dist/js/treeshaking/analyze/getServerRoutes.js +222 -0
  173. package/dist/js/treeshaking/analyze/index.js +589 -0
  174. package/dist/js/treeshaking/analyze/isDefaultExportFunction.js +47 -0
  175. package/dist/js/treeshaking/analyze/makeLegalIdentifier.js +13 -0
  176. package/dist/js/treeshaking/analyze/nestedRoutes.js +426 -0
  177. package/dist/js/treeshaking/analyze/templates.js +446 -0
  178. package/dist/js/treeshaking/analyze/utils.js +390 -0
  179. package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +304 -0
  180. package/dist/js/treeshaking/builder/index.js +374 -0
  181. package/dist/js/treeshaking/builder/loaders/routerLoader.js +13 -0
  182. package/dist/js/treeshaking/builder/loaders/serverModuleLoader.js +5 -0
  183. package/dist/js/treeshaking/builder/share.js +40 -0
  184. package/dist/js/treeshaking/builder/webpackPlugins/htmlAsyncChunkPlugin.js +110 -0
  185. package/dist/js/treeshaking/builder/webpackPlugins/htmlBottomTemplate.js +72 -0
  186. package/dist/js/treeshaking/builder/webpackPlugins/routerPlugin.js +343 -0
  187. package/dist/js/treeshaking/commands/build.js +291 -0
  188. package/dist/js/treeshaking/commands/deploy.js +154 -0
  189. package/dist/js/treeshaking/commands/dev.js +319 -0
  190. package/dist/js/treeshaking/commands/index.js +3 -0
  191. package/dist/js/treeshaking/commands/inspect.js +149 -0
  192. package/dist/js/treeshaking/commands/serve.js +199 -0
  193. package/dist/js/treeshaking/config/default.js +208 -0
  194. package/dist/js/treeshaking/config/index.js +3 -0
  195. package/dist/js/treeshaking/config/initial/createHtmlConfig.js +19 -0
  196. package/dist/js/treeshaking/config/initial/createOutputConfig.js +41 -0
  197. package/dist/js/treeshaking/config/initial/createSourceConfig.js +42 -0
  198. package/dist/js/treeshaking/config/initial/createToolsConfig.js +23 -0
  199. package/dist/js/treeshaking/config/initial/index.js +12 -0
  200. package/dist/js/treeshaking/config/initial/inits.js +213 -0
  201. package/dist/js/treeshaking/config/initial/transformNormalizedConfig.js +35 -0
  202. package/dist/js/treeshaking/defineConfig.js +61 -0
  203. package/dist/js/treeshaking/exports/server.js +2 -0
  204. package/dist/js/treeshaking/hooks.js +31 -0
  205. package/dist/js/treeshaking/index.js +694 -0
  206. package/dist/js/treeshaking/initialize/index.js +300 -0
  207. package/dist/js/treeshaking/locale/en.js +35 -0
  208. package/dist/js/treeshaking/locale/index.js +9 -0
  209. package/dist/js/treeshaking/locale/zh.js +35 -0
  210. package/dist/js/treeshaking/schema/Schema.js +273 -0
  211. package/dist/js/treeshaking/schema/index.js +181 -0
  212. package/dist/js/treeshaking/schema/legacy.js +337 -0
  213. package/dist/js/treeshaking/types/config/deploy.js +1 -0
  214. package/dist/js/treeshaking/types/config/dev.js +1 -0
  215. package/dist/js/treeshaking/types/config/experiments.js +1 -0
  216. package/dist/js/treeshaking/types/config/html.js +1 -0
  217. package/dist/js/treeshaking/types/config/index.js +1 -0
  218. package/dist/js/treeshaking/types/config/output.js +1 -0
  219. package/dist/js/treeshaking/types/config/performance.js +1 -0
  220. package/dist/js/treeshaking/types/config/security.js +1 -0
  221. package/dist/js/treeshaking/types/config/source.js +1 -0
  222. package/dist/js/treeshaking/types/config/tools.js +1 -0
  223. package/dist/js/treeshaking/types/hooks.js +1 -0
  224. package/dist/js/treeshaking/types/index.js +3 -0
  225. package/dist/js/treeshaking/types/legacyConfig/deploy.js +1 -0
  226. package/dist/js/treeshaking/types/legacyConfig/dev.js +1 -0
  227. package/dist/js/treeshaking/types/legacyConfig/index.js +1 -0
  228. package/dist/js/treeshaking/types/legacyConfig/output.js +1 -0
  229. package/dist/js/treeshaking/types/legacyConfig/source.js +1 -0
  230. package/dist/js/treeshaking/types/legacyConfig/tools.js +1 -0
  231. package/dist/js/treeshaking/utils/commands.js +10 -0
  232. package/dist/js/treeshaking/utils/config.js +302 -0
  233. package/dist/js/treeshaking/utils/createFileWatcher.js +283 -0
  234. package/dist/js/treeshaking/utils/createServer.js +258 -0
  235. package/dist/js/treeshaking/utils/getServerInternalPlugins.js +210 -0
  236. package/dist/js/treeshaking/utils/getSpecifiedEntries.js +185 -0
  237. package/dist/js/treeshaking/utils/language.js +6 -0
  238. package/dist/js/treeshaking/utils/printInstructions.js +152 -0
  239. package/dist/js/treeshaking/utils/restart.js +187 -0
  240. package/dist/js/treeshaking/utils/routes.js +153 -0
  241. package/dist/js/treeshaking/utils/types.js +1 -0
  242. package/dist/types/analyze/Builder.d.ts +8 -0
  243. package/dist/types/analyze/constants.d.ts +13 -1
  244. package/dist/types/analyze/generateCode.d.ts +3 -2
  245. package/dist/types/analyze/getBundleEntry.d.ts +2 -2
  246. package/dist/types/analyze/{getClientRoutes.d.ts → getClientRoutes/getRoutes.d.ts} +2 -7
  247. package/dist/types/analyze/getClientRoutes/getRoutesLegacy.d.ts +15 -0
  248. package/dist/types/analyze/getClientRoutes/index.d.ts +2 -0
  249. package/dist/types/analyze/getClientRoutes/utils.d.ts +5 -0
  250. package/dist/types/analyze/getFileSystemEntry.d.ts +2 -2
  251. package/dist/types/analyze/getHtmlTemplate.d.ts +3 -3
  252. package/dist/types/analyze/getServerRoutes.d.ts +3 -2
  253. package/dist/types/analyze/index.d.ts +3 -40
  254. package/dist/types/analyze/nestedRoutes.d.ts +5 -0
  255. package/dist/types/analyze/templates.d.ts +24 -5
  256. package/dist/types/analyze/utils.d.ts +12 -2
  257. package/dist/types/builder/builderPlugins/compatModern.d.ts +14 -0
  258. package/dist/types/builder/index.d.ts +18 -0
  259. package/dist/types/builder/loaders/routerLoader.d.ts +3 -0
  260. package/dist/types/builder/loaders/serverModuleLoader.d.ts +3 -0
  261. package/dist/types/builder/share.d.ts +26 -0
  262. package/dist/types/builder/webpackPlugins/htmlAsyncChunkPlugin.d.ts +8 -0
  263. package/dist/types/builder/webpackPlugins/htmlBottomTemplate.d.ts +10 -0
  264. package/dist/types/builder/webpackPlugins/routerPlugin.d.ts +4 -0
  265. package/dist/types/commands/build.d.ts +2 -1
  266. package/dist/types/commands/deploy.d.ts +2 -1
  267. package/dist/types/commands/dev.d.ts +2 -1
  268. package/dist/types/commands/index.d.ts +1 -1
  269. package/dist/types/commands/inspect.d.ts +10 -6
  270. package/dist/types/commands/serve.d.ts +3 -0
  271. package/dist/types/config/default.d.ts +3 -0
  272. package/dist/types/config/index.d.ts +2 -0
  273. package/dist/types/config/initial/createHtmlConfig.d.ts +2 -0
  274. package/dist/types/config/initial/createOutputConfig.d.ts +2 -0
  275. package/dist/types/config/initial/createSourceConfig.d.ts +2 -0
  276. package/dist/types/config/initial/createToolsConfig.d.ts +2 -0
  277. package/dist/types/config/initial/index.d.ts +4 -0
  278. package/dist/types/config/initial/inits.d.ts +4 -0
  279. package/dist/types/config/initial/transformNormalizedConfig.d.ts +2 -0
  280. package/dist/types/defineConfig.d.ts +8 -0
  281. package/dist/types/hooks.d.ts +2 -37
  282. package/dist/types/index.d.ts +9 -3
  283. package/dist/types/initialize/index.d.ts +5 -0
  284. package/dist/types/locale/en.d.ts +1 -2
  285. package/dist/types/locale/index.d.ts +2 -4
  286. package/dist/types/locale/zh.d.ts +1 -2
  287. package/dist/types/schema/Schema.d.ts +14 -0
  288. package/dist/types/schema/index.d.ts +4 -0
  289. package/dist/types/schema/legacy.d.ts +3 -0
  290. package/dist/types/types/config/deploy.d.ts +9 -0
  291. package/dist/types/types/config/dev.d.ts +13 -0
  292. package/dist/types/types/config/experiments.d.ts +4 -0
  293. package/dist/types/types/config/html.d.ts +4 -0
  294. package/dist/types/types/config/index.d.ts +66 -0
  295. package/dist/types/types/config/output.d.ts +22 -0
  296. package/dist/types/types/config/performance.d.ts +4 -0
  297. package/dist/types/types/config/security.d.ts +4 -0
  298. package/dist/types/types/config/source.d.ts +24 -0
  299. package/dist/types/types/config/tools.d.ts +24 -0
  300. package/dist/types/types/hooks.d.ts +89 -0
  301. package/dist/types/types/index.d.ts +23 -0
  302. package/dist/types/types/legacyConfig/deploy.d.ts +8 -0
  303. package/dist/types/types/legacyConfig/dev.d.ts +13 -0
  304. package/dist/types/types/legacyConfig/index.d.ts +33 -0
  305. package/dist/types/types/legacyConfig/output.d.ts +51 -0
  306. package/dist/types/types/legacyConfig/source.d.ts +25 -0
  307. package/dist/types/types/legacyConfig/tools.d.ts +17 -0
  308. package/dist/types/utils/commands.d.ts +2 -0
  309. package/dist/types/utils/config.d.ts +2 -2
  310. package/dist/types/utils/createFileWatcher.d.ts +4 -0
  311. package/dist/types/utils/createServer.d.ts +9 -1
  312. package/dist/types/utils/getServerInternalPlugins.d.ts +2 -0
  313. package/dist/types/utils/printInstructions.d.ts +3 -2
  314. package/dist/types/utils/restart.d.ts +3 -0
  315. package/dist/types/utils/types.d.ts +2 -3
  316. package/lib/types.d.ts +1 -1
  317. package/package.json +37 -46
  318. package/dist/js/modern/analyze/getClientRoutes.js +0 -219
  319. package/dist/js/modern/commands/start.js +0 -31
  320. package/dist/js/modern/utils/createCompiler.js +0 -61
  321. package/dist/js/node/analyze/getClientRoutes.js +0 -241
  322. package/dist/js/node/commands/start.js +0 -47
  323. package/dist/js/node/utils/createCompiler.js +0 -81
  324. package/dist/types/commands/start.d.ts +0 -2
  325. package/dist/types/utils/createCompiler.d.ts +0 -13
@@ -1,75 +1,73 @@
1
- import path from 'path';
2
- import { ensureAbsolutePath, fs, findExists, MAIN_ENTRY_NAME } from '@modern-js/utils';
1
+ import path from "path";
2
+ import {
3
+ ensureAbsolutePath,
4
+ fs,
5
+ findExists,
6
+ MAIN_ENTRY_NAME
7
+ } from "@modern-js/utils";
3
8
  import { getFileSystemEntry } from "./getFileSystemEntry";
4
9
  import { JS_EXTENSIONS } from "./constants";
5
-
6
- const ensureExtensions = file => {
10
+ const ensureExtensions = (file) => {
7
11
  if (!path.extname(file)) {
8
- return findExists(JS_EXTENSIONS.map(ext => `${file}${ext}`)) || file;
12
+ return findExists(JS_EXTENSIONS.map((ext) => `${file}${ext}`)) || file;
9
13
  }
10
-
11
14
  return file;
12
15
  };
13
-
14
- const ifAlreadyExists = (entrypoints, checked) => entrypoints.some(entrypoint => {
16
+ const ifAlreadyExists = (entrypoints, checked) => entrypoints.some((entrypoint) => {
15
17
  if (ensureExtensions(entrypoint.entry) === ensureExtensions(checked.entry)) {
16
- // reset entryName
17
18
  checked.entryName = entrypoint.entryName;
18
19
  return true;
19
- } // filesystem routes entrypoint conflict with normal entrypoint.
20
-
21
-
20
+ }
22
21
  if (entrypoint.entry.startsWith(checked.entry) || checked.entry.startsWith(entrypoint.entry)) {
23
- throw new Error(`Entry configuration conflicts\n Your configuration: ${checked.entry}.\n Default entrypoint: ${entrypoint.entry}\n Please reset source.entries or set source.disableDefaultEntries to disable the default entry rules.`);
22
+ throw new Error(
23
+ `Entry configuration conflicts
24
+ Your configuration: ${checked.entry}.
25
+ Default entrypoint: ${entrypoint.entry}
26
+ Please reset source.entries or set source.disableDefaultEntries to disable the default entry rules.`
27
+ );
24
28
  }
25
-
26
29
  return false;
27
30
  });
28
-
29
- export const getBundleEntry = (appContext, config) => {
30
- const {
31
- appDirectory,
32
- packageName
33
- } = appContext;
31
+ const getBundleEntry = (appContext, config) => {
32
+ const { appDirectory, packageName } = appContext;
34
33
  const {
35
- source: {
36
- disableDefaultEntries,
37
- entries,
38
- entriesDir
39
- }
34
+ source: { disableDefaultEntries, entries, entriesDir }
40
35
  } = config;
41
- const defaults = disableDefaultEntries ? [] : getFileSystemEntry(appContext, config); // merge entrypoints from user config with directory convention.
42
-
36
+ const defaults = disableDefaultEntries ? [] : getFileSystemEntry(appContext, config);
37
+ console.log("defaults", defaults, entries);
43
38
  if (entries) {
44
- Object.keys(entries).forEach(name => {
39
+ Object.keys(entries).forEach((name) => {
45
40
  const value = entries[name];
46
- const entrypoint = typeof value === 'string' ? {
41
+ const entrypoint = typeof value === "string" ? {
47
42
  entryName: name,
48
43
  entry: ensureAbsolutePath(appDirectory, value),
49
44
  isAutoMount: true,
50
- fileSystemRoutes: fs.statSync(ensureAbsolutePath(appDirectory, value)).isDirectory() ? {} : undefined
45
+ fileSystemRoutes: fs.statSync(ensureAbsolutePath(appDirectory, value)).isDirectory() ? {} : void 0
51
46
  } : {
52
47
  entryName: name,
53
48
  entry: ensureAbsolutePath(appDirectory, value.entry),
54
49
  isAutoMount: !value.disableMount,
55
- fileSystemRoutes: value.enableFileSystemRoutes ? {} : undefined
50
+ customBootstrap: value.customBootstrap && ensureAbsolutePath(appDirectory, value.customBootstrap),
51
+ fileSystemRoutes: fs.statSync(ensureAbsolutePath(appDirectory, value.entry)).isDirectory() ? {} : void 0
56
52
  };
57
-
53
+ if (entrypoint.fileSystemRoutes) {
54
+ entrypoint.nestedRoutesEntry = entrypoint.entry;
55
+ }
58
56
  if (!ifAlreadyExists(defaults, entrypoint)) {
59
57
  defaults.push(entrypoint);
60
58
  }
61
59
  });
62
60
  }
63
-
64
61
  if (!disableDefaultEntries) {
65
- // find main entry point which server route is '/'.
66
- const entriesDirAbs = ensureAbsolutePath(appDirectory, entriesDir);
67
- const found = defaults.find(({
68
- entryName,
69
- entry
70
- }) => entryName === packageName || path.dirname(entry) === entriesDirAbs);
62
+ const entriesDirAbs = ensureAbsolutePath(appDirectory, entriesDir || "");
63
+ const found = defaults.find(
64
+ ({ entryName, entry, nestedRoutesEntry = "" }) => entryName === packageName || path.dirname(entry) === entriesDirAbs || path.dirname(nestedRoutesEntry) === entriesDirAbs
65
+ );
71
66
  found && (found.entryName = MAIN_ENTRY_NAME);
72
67
  }
73
-
68
+ console.log("22222222222222", defaults);
74
69
  return defaults;
75
- };
70
+ };
71
+ export {
72
+ getBundleEntry
73
+ };
@@ -0,0 +1,220 @@
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 path from "path";
21
+ import { fs } from "@modern-js/utils";
22
+ import { makeLegalIdentifier } from "../makeLegalIdentifier";
23
+ import {
24
+ FILE_SYSTEM_ROUTES_COMPONENTS_DIR,
25
+ FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP,
26
+ FILE_SYSTEM_ROUTES_INDEX,
27
+ FILE_SYSTEM_ROUTES_LAYOUT
28
+ } from "../constants";
29
+ import { replaceWithAlias } from "../utils";
30
+ import { debug, findLayout, shouldSkip, getRouteWeight } from "./utils";
31
+ const compName = (srcDirectory, filePath) => {
32
+ const legalCompName = makeLegalIdentifier(
33
+ path.relative(srcDirectory, filePath)
34
+ );
35
+ return `Comp_${legalCompName}`;
36
+ };
37
+ const layoutNameAbbr = (filePath) => {
38
+ const prefix = "L_";
39
+ const dirName = path.dirname(filePath).split("/").pop() || "";
40
+ return `${prefix}${makeLegalIdentifier(dirName)}`;
41
+ };
42
+ const parents = [];
43
+ const recursiveReadDir = ({
44
+ dir,
45
+ routes,
46
+ basePath = "/",
47
+ srcDirectory,
48
+ srcAlias
49
+ }) => {
50
+ let hasDynamicRoute = false;
51
+ let resetParent = false;
52
+ let parent = parents[parents.length - 1];
53
+ const layout = findLayout(dir);
54
+ if (layout) {
55
+ if (basePath === "/") {
56
+ throw new Error(`should use _app instead of _layout in ${dir}`);
57
+ } else {
58
+ const alias = replaceWithAlias(srcDirectory, layout, srcAlias);
59
+ const componentName = compName(srcDirectory, layout);
60
+ const route = {
61
+ path: `${basePath.substring(0, basePath.length - 1)}`,
62
+ children: [],
63
+ _component: alias,
64
+ component: componentName,
65
+ parent,
66
+ type: "page"
67
+ };
68
+ parent = route;
69
+ resetParent = true;
70
+ routes.push(route);
71
+ parents.push(route);
72
+ routes = route.children;
73
+ }
74
+ }
75
+ for (const relative of fs.readdirSync(dir)) {
76
+ const filePath = path.join(dir, relative);
77
+ if (!shouldSkip(filePath)) {
78
+ const filename = path.basename(filePath, path.extname(filePath));
79
+ const alias = replaceWithAlias(srcDirectory, filePath, srcAlias);
80
+ const componentName = compName(srcDirectory, filePath);
81
+ const dynamicRouteMatched = FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP.exec(filename);
82
+ if (dynamicRouteMatched) {
83
+ if (hasDynamicRoute) {
84
+ throw new Error(
85
+ `Can't set two dynamic route in one directory: ${dir}`
86
+ );
87
+ } else {
88
+ hasDynamicRoute = true;
89
+ }
90
+ }
91
+ const route = {
92
+ path: `${basePath}${dynamicRouteMatched ? `:${dynamicRouteMatched[1]}${dynamicRouteMatched[2]}` : filename}`,
93
+ _component: alias,
94
+ component: componentName,
95
+ parent,
96
+ type: "page"
97
+ };
98
+ if (fs.statSync(filePath).isDirectory()) {
99
+ recursiveReadDir({
100
+ dir: filePath,
101
+ routes,
102
+ basePath: `${route.path}/`,
103
+ srcDirectory,
104
+ srcAlias
105
+ });
106
+ continue;
107
+ }
108
+ if (filename === FILE_SYSTEM_ROUTES_LAYOUT) {
109
+ continue;
110
+ }
111
+ if (filename === FILE_SYSTEM_ROUTES_INDEX) {
112
+ route.path = basePath === "/" ? basePath : `${basePath.substring(0, basePath.length - 1)}`;
113
+ }
114
+ if (filename === "404" && basePath === "/") {
115
+ route.path = "*";
116
+ }
117
+ routes.push(route);
118
+ }
119
+ }
120
+ if (resetParent) {
121
+ parents.pop();
122
+ }
123
+ };
124
+ const normalizeNestedRoutes = (nested, internalComponentsDir, internalDirectory, internalDirAlias) => {
125
+ const flat = (routes) => routes.reduce(
126
+ (memo, route) => memo.concat(
127
+ Array.isArray(route.children) ? flat(route.children) : [route]
128
+ ),
129
+ []
130
+ );
131
+ const generate = (route) => {
132
+ const codes = [];
133
+ let lastComponent = route.component;
134
+ const imports = [
135
+ `import React from 'react';`,
136
+ `import ${lastComponent} from '${route._component}'`
137
+ ];
138
+ while (route = route.parent) {
139
+ const layoutComponent = route.component;
140
+ const layoutComponentAbbr = layoutNameAbbr(route._component);
141
+ imports.push(`import ${layoutComponent} from '${route._component}';`);
142
+ const currentComponent = `${layoutComponentAbbr}_${lastComponent}`;
143
+ codes.push(
144
+ `const ${currentComponent} = props => <${layoutComponent} Component={${lastComponent}} {...props} />;`
145
+ );
146
+ lastComponent = currentComponent;
147
+ }
148
+ const file = path.resolve(internalComponentsDir, `${lastComponent}.jsx`);
149
+ fs.outputFileSync(
150
+ file,
151
+ `${imports.join("\n")}
152
+ ${codes.join(
153
+ "\n"
154
+ )}
155
+ export default ${lastComponent}`
156
+ );
157
+ return {
158
+ component: lastComponent,
159
+ _component: replaceWithAlias(internalDirectory, file, internalDirAlias)
160
+ };
161
+ };
162
+ const normalized = flat(nested).map(
163
+ (route) => route.parent ? __spreadProps(__spreadValues(__spreadValues({}, route), generate(route)), { parent: void 0 }) : __spreadProps(__spreadValues({}, route), { parent: void 0 })
164
+ );
165
+ return normalized;
166
+ };
167
+ const getClientRoutes = ({
168
+ entrypoint,
169
+ srcDirectory,
170
+ srcAlias,
171
+ internalDirectory,
172
+ internalDirAlias
173
+ }) => {
174
+ const { entryName, pageRoutesEntry } = entrypoint;
175
+ if (!pageRoutesEntry) {
176
+ return [];
177
+ }
178
+ if (!fs.existsSync(pageRoutesEntry)) {
179
+ throw new Error(
180
+ `generate file system routes error, ${pageRoutesEntry} directory not found.`
181
+ );
182
+ }
183
+ if (!(fs.existsSync(pageRoutesEntry) && fs.statSync(pageRoutesEntry).isDirectory())) {
184
+ throw new Error(
185
+ `generate file system routes error, ${pageRoutesEntry} should be directory.`
186
+ );
187
+ }
188
+ let routes = [];
189
+ recursiveReadDir({
190
+ dir: pageRoutesEntry,
191
+ routes,
192
+ basePath: "/",
193
+ srcDirectory,
194
+ srcAlias
195
+ });
196
+ const internalComponentsDir = path.resolve(
197
+ internalDirectory,
198
+ `${entryName}/${FILE_SYSTEM_ROUTES_COMPONENTS_DIR}`
199
+ );
200
+ fs.emptyDirSync(internalComponentsDir);
201
+ routes = normalizeNestedRoutes(
202
+ routes,
203
+ internalComponentsDir,
204
+ internalDirectory,
205
+ internalDirAlias
206
+ );
207
+ parents.length = 0;
208
+ routes.sort((a, b) => {
209
+ const delta = getRouteWeight(a.path) - getRouteWeight(b.path);
210
+ if (delta === 0) {
211
+ return a.path.length - b.path.length;
212
+ }
213
+ return delta;
214
+ });
215
+ debug(`fileSystem routes: %o`, routes);
216
+ return routes;
217
+ };
218
+ export {
219
+ getClientRoutes
220
+ };
@@ -0,0 +1,216 @@
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 path from "path";
21
+ import { fs } from "@modern-js/utils";
22
+ import { makeLegalIdentifier } from "../makeLegalIdentifier";
23
+ import {
24
+ FILE_SYSTEM_ROUTES_COMPONENTS_DIR,
25
+ FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP,
26
+ FILE_SYSTEM_ROUTES_INDEX,
27
+ FILE_SYSTEM_ROUTES_LAYOUT
28
+ } from "../constants";
29
+ import { replaceWithAlias } from "../utils";
30
+ import { debug, findLayout, shouldSkip, getRouteWeight } from "./utils";
31
+ const compName = (srcDirectory, filePath) => {
32
+ const legalCompName = makeLegalIdentifier(
33
+ path.relative(srcDirectory, filePath)
34
+ );
35
+ return `Comp_${legalCompName}`;
36
+ };
37
+ const layoutNameAbbr = (filePath) => {
38
+ const prefix = "L_";
39
+ const dirName = path.dirname(filePath).split("/").pop() || "";
40
+ return `${prefix}${makeLegalIdentifier(dirName)}`;
41
+ };
42
+ const parents = [];
43
+ const recursiveReadDirLegacy = ({
44
+ dir,
45
+ routes,
46
+ basePath = "/",
47
+ srcDirectory,
48
+ srcAlias
49
+ }) => {
50
+ let hasDynamicRoute = false;
51
+ let resetParent = false;
52
+ let parent = parents[parents.length - 1];
53
+ const layout = findLayout(dir);
54
+ if (layout) {
55
+ if (basePath === "/") {
56
+ throw new Error(`should use _app instead of _layout in ${dir}`);
57
+ } else {
58
+ const alias = replaceWithAlias(srcDirectory, layout, srcAlias);
59
+ const componentName = compName(srcDirectory, layout);
60
+ const route = {
61
+ path: `${basePath.substring(0, basePath.length - 1)}`,
62
+ exact: false,
63
+ routes: [],
64
+ _component: alias,
65
+ component: componentName,
66
+ parent
67
+ };
68
+ parent = route;
69
+ resetParent = true;
70
+ routes.push(route);
71
+ parents.push(route);
72
+ routes = route.routes;
73
+ }
74
+ }
75
+ for (const relative of fs.readdirSync(dir)) {
76
+ const filePath = path.join(dir, relative);
77
+ if (!shouldSkip(filePath)) {
78
+ const filename = path.basename(filePath, path.extname(filePath));
79
+ const alias = replaceWithAlias(srcDirectory, filePath, srcAlias);
80
+ const componentName = compName(srcDirectory, filePath);
81
+ const dynamicRouteMatched = FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP.exec(filename);
82
+ if (dynamicRouteMatched) {
83
+ if (hasDynamicRoute) {
84
+ throw new Error(
85
+ `Can't set two dynamic route in one directory: ${dir}`
86
+ );
87
+ } else {
88
+ hasDynamicRoute = true;
89
+ }
90
+ }
91
+ const route = {
92
+ path: `${basePath}${dynamicRouteMatched ? `:${dynamicRouteMatched[1]}${dynamicRouteMatched[2]}` : filename}`,
93
+ _component: alias,
94
+ component: componentName,
95
+ exact: true,
96
+ parent
97
+ };
98
+ if (fs.statSync(filePath).isDirectory()) {
99
+ recursiveReadDirLegacy({
100
+ dir: filePath,
101
+ routes,
102
+ basePath: `${route.path}/`,
103
+ srcDirectory,
104
+ srcAlias
105
+ });
106
+ continue;
107
+ }
108
+ if (filename === FILE_SYSTEM_ROUTES_LAYOUT) {
109
+ continue;
110
+ }
111
+ if (filename === FILE_SYSTEM_ROUTES_INDEX) {
112
+ route.path = basePath === "/" ? basePath : `${basePath.substring(0, basePath.length - 1)}`;
113
+ }
114
+ if (filename === "404" && basePath === "/") {
115
+ route.path = "*";
116
+ route.exact = false;
117
+ }
118
+ routes.push(route);
119
+ }
120
+ }
121
+ if (resetParent) {
122
+ parents.pop();
123
+ }
124
+ };
125
+ const normalizeNestedRoutes = (nested, internalComponentsDir, internalDirectory, internalDirAlias) => {
126
+ const flat = (routes) => routes.reduce(
127
+ (memo, route) => memo.concat(Array.isArray(route.routes) ? flat(route.routes) : [route]),
128
+ []
129
+ );
130
+ const generate = (route) => {
131
+ const codes = [];
132
+ let lastComponent = route.component;
133
+ const imports = [
134
+ `import React from 'react';`,
135
+ `import ${lastComponent} from '${route._component}'`
136
+ ];
137
+ while (route = route.parent) {
138
+ const layoutComponent = route.component;
139
+ const layoutComponentAbbr = layoutNameAbbr(route._component);
140
+ imports.push(`import ${layoutComponent} from '${route._component}';`);
141
+ const currentComponent = `${layoutComponentAbbr}_${lastComponent}`;
142
+ codes.push(
143
+ `const ${currentComponent} = props => <${layoutComponent} Component={${lastComponent}} {...props} />;`
144
+ );
145
+ lastComponent = currentComponent;
146
+ }
147
+ const file = path.resolve(internalComponentsDir, `${lastComponent}.jsx`);
148
+ fs.outputFileSync(
149
+ file,
150
+ `${imports.join("\n")}
151
+ ${codes.join(
152
+ "\n"
153
+ )}
154
+ export default ${lastComponent}`
155
+ );
156
+ return {
157
+ component: lastComponent,
158
+ _component: replaceWithAlias(internalDirectory, file, internalDirAlias)
159
+ };
160
+ };
161
+ const normalized = flat(nested).map(
162
+ (route) => route.parent ? __spreadProps(__spreadValues(__spreadValues({}, route), generate(route)), { parent: void 0 }) : __spreadProps(__spreadValues({}, route), { parent: void 0 })
163
+ );
164
+ return normalized;
165
+ };
166
+ const getClientRoutes = ({
167
+ entrypoint,
168
+ srcDirectory,
169
+ srcAlias,
170
+ internalDirectory,
171
+ internalDirAlias
172
+ }) => {
173
+ const { entry, entryName } = entrypoint;
174
+ if (!fs.existsSync(entry)) {
175
+ throw new Error(
176
+ `generate file system routes error, ${entry} directory not found.`
177
+ );
178
+ }
179
+ if (!(fs.existsSync(entry) && fs.statSync(entry).isDirectory())) {
180
+ throw new Error(
181
+ `generate file system routes error, ${entry} should be directory.`
182
+ );
183
+ }
184
+ let routes = [];
185
+ recursiveReadDirLegacy({
186
+ dir: entry,
187
+ routes,
188
+ basePath: "/",
189
+ srcDirectory,
190
+ srcAlias
191
+ });
192
+ const internalComponentsDir = path.resolve(
193
+ internalDirectory,
194
+ `${entryName}/${FILE_SYSTEM_ROUTES_COMPONENTS_DIR}`
195
+ );
196
+ fs.emptyDirSync(internalComponentsDir);
197
+ routes = normalizeNestedRoutes(
198
+ routes,
199
+ internalComponentsDir,
200
+ internalDirectory,
201
+ internalDirAlias
202
+ );
203
+ parents.length = 0;
204
+ routes.sort((a, b) => {
205
+ const delta = getRouteWeight(a.path) - getRouteWeight(b.path);
206
+ if (delta === 0) {
207
+ return a.path.length - b.path.length;
208
+ }
209
+ return delta;
210
+ });
211
+ debug(`fileSystem routes: %o`, routes);
212
+ return routes;
213
+ };
214
+ export {
215
+ getClientRoutes
216
+ };
@@ -0,0 +1,6 @@
1
+ import { getClientRoutes } from "./getRoutes";
2
+ import { getClientRoutes as getClientRoutes2 } from "./getRoutesLegacy";
3
+ export {
4
+ getClientRoutes,
5
+ getClientRoutes2 as getClientRoutesLegacy
6
+ };
@@ -0,0 +1,31 @@
1
+ import path from "path";
2
+ import { createDebugger, findExists, fs } from "@modern-js/utils";
3
+ import {
4
+ JS_EXTENSIONS,
5
+ FILE_SYSTEM_ROUTES_LAYOUT,
6
+ FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT,
7
+ FILE_SYSTEM_ROUTES_IGNORED_REGEX
8
+ } from "../constants";
9
+ const debug = createDebugger("get-client-routes");
10
+ const findLayout = (dir) => findExists(
11
+ JS_EXTENSIONS.map(
12
+ (ext) => path.resolve(dir, `${FILE_SYSTEM_ROUTES_LAYOUT}${ext}`)
13
+ )
14
+ );
15
+ const getRouteWeight = (route) => route === "*" ? 999 : route.split(":").length - 1;
16
+ const shouldSkip = (file) => {
17
+ if (fs.statSync(file).isDirectory()) {
18
+ return false;
19
+ }
20
+ const ext = path.extname(file);
21
+ if (FILE_SYSTEM_ROUTES_IGNORED_REGEX.test(file) || !JS_EXTENSIONS.includes(ext) || FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT === path.basename(file, ext)) {
22
+ return true;
23
+ }
24
+ return false;
25
+ };
26
+ export {
27
+ debug,
28
+ findLayout,
29
+ getRouteWeight,
30
+ shouldSkip
31
+ };