@modern-js/app-tools 2.5.0 → 2.5.1-alpha.1

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 (274) hide show
  1. package/dist/cjs/commands/dev.js +6 -0
  2. package/dist/cjs/commands/serve.js +17 -0
  3. package/dist/esm/commands/dev.js +6 -0
  4. package/dist/esm/commands/serve.js +6 -1
  5. package/dist/esm-node/commands/dev.js +6 -0
  6. package/dist/esm-node/commands/serve.js +18 -1
  7. package/dist/js/modern/analyze/constants.js +56 -0
  8. package/dist/js/modern/analyze/generateCode.js +247 -0
  9. package/dist/js/modern/analyze/getBundleEntry.js +71 -0
  10. package/dist/js/modern/analyze/getClientRoutes/getRoutes.js +220 -0
  11. package/dist/js/modern/analyze/getClientRoutes/getRoutesLegacy.js +216 -0
  12. package/dist/js/modern/analyze/getClientRoutes/index.js +6 -0
  13. package/dist/js/modern/analyze/getClientRoutes/utils.js +31 -0
  14. package/dist/js/modern/analyze/getFileSystemEntry.js +109 -0
  15. package/dist/js/modern/analyze/getHtmlTemplate.js +115 -0
  16. package/dist/js/modern/analyze/getServerRoutes.js +178 -0
  17. package/dist/js/modern/analyze/index.js +333 -0
  18. package/dist/js/modern/analyze/isDefaultExportFunction.js +42 -0
  19. package/dist/js/modern/analyze/makeLegalIdentifier.js +13 -0
  20. package/dist/js/modern/analyze/nestedRoutes.js +186 -0
  21. package/dist/js/modern/analyze/templates.js +328 -0
  22. package/dist/js/modern/analyze/utils.js +141 -0
  23. package/dist/js/modern/builder/builder-rspack/index.js +8 -0
  24. package/dist/js/modern/builder/builder-webpack/builderPlugins/compatModern.js +41 -0
  25. package/dist/js/modern/builder/builder-webpack/index.js +93 -0
  26. package/dist/js/modern/builder/builder-webpack/webpackPlugins/RouterPlugin.js +116 -0
  27. package/dist/js/modern/builder/builder-webpack/webpackPlugins/index.js +1 -0
  28. package/dist/js/modern/builder/generator/createBuilderOptions.js +24 -0
  29. package/dist/js/modern/builder/generator/createBuilderProviderConfig.js +39 -0
  30. package/dist/js/modern/builder/generator/getBuilderTargets.js +21 -0
  31. package/dist/js/modern/builder/generator/index.js +53 -0
  32. package/dist/js/modern/builder/index.js +39 -0
  33. package/dist/js/modern/builder/shared/builderPlugins/adapterModern.js +219 -0
  34. package/dist/js/modern/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +27 -0
  35. package/dist/js/modern/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +34 -0
  36. package/dist/js/modern/builder/shared/createCopyPattern.js +46 -0
  37. package/dist/js/modern/builder/shared/index.js +3 -0
  38. package/dist/js/modern/builder/shared/loaders/serverModuleLoader.js +7 -0
  39. package/dist/js/modern/builder/shared/types.js +0 -0
  40. package/dist/js/modern/commands/build.js +91 -0
  41. package/dist/js/modern/commands/deploy.js +28 -0
  42. package/dist/js/modern/commands/dev.js +109 -0
  43. package/dist/js/modern/commands/index.js +3 -0
  44. package/dist/js/modern/commands/inspect.js +38 -0
  45. package/dist/js/modern/commands/serve.js +54 -0
  46. package/dist/js/modern/config/default.js +175 -0
  47. package/dist/js/modern/config/index.js +3 -0
  48. package/dist/js/modern/config/initialize/index.js +12 -0
  49. package/dist/js/modern/config/initialize/inits.js +154 -0
  50. package/dist/js/modern/config/legacy/createHtmlConfig.js +35 -0
  51. package/dist/js/modern/config/legacy/createOutputConfig.js +68 -0
  52. package/dist/js/modern/config/legacy/createSourceConfig.js +39 -0
  53. package/dist/js/modern/config/legacy/createToolsConfig.js +42 -0
  54. package/dist/js/modern/config/legacy/index.js +51 -0
  55. package/dist/js/modern/defineConfig.js +27 -0
  56. package/dist/js/modern/exports/server.js +4 -0
  57. package/dist/js/modern/hooks.js +35 -0
  58. package/dist/js/modern/index.js +221 -0
  59. package/dist/js/modern/initialize/index.js +132 -0
  60. package/dist/js/modern/locale/en.js +36 -0
  61. package/dist/js/modern/locale/index.js +9 -0
  62. package/dist/js/modern/locale/zh.js +36 -0
  63. package/dist/js/modern/schema/Schema.js +40 -0
  64. package/dist/js/modern/schema/index.js +88 -0
  65. package/dist/js/modern/schema/legacy.js +148 -0
  66. package/dist/js/modern/types/config/deploy.js +0 -0
  67. package/dist/js/modern/types/config/dev.js +0 -0
  68. package/dist/js/modern/types/config/experiments.js +0 -0
  69. package/dist/js/modern/types/config/html.js +0 -0
  70. package/dist/js/modern/types/config/index.js +1 -0
  71. package/dist/js/modern/types/config/output.js +0 -0
  72. package/dist/js/modern/types/config/performance.js +0 -0
  73. package/dist/js/modern/types/config/security.js +0 -0
  74. package/dist/js/modern/types/config/source.js +0 -0
  75. package/dist/js/modern/types/config/tools.js +0 -0
  76. package/dist/js/modern/types/hooks.js +0 -0
  77. package/dist/js/modern/types/index.js +3 -0
  78. package/dist/js/modern/types/legacyConfig/deploy.js +0 -0
  79. package/dist/js/modern/types/legacyConfig/dev.js +0 -0
  80. package/dist/js/modern/types/legacyConfig/index.js +0 -0
  81. package/dist/js/modern/types/legacyConfig/output.js +0 -0
  82. package/dist/js/modern/types/legacyConfig/source.js +0 -0
  83. package/dist/js/modern/types/legacyConfig/tools.js +0 -0
  84. package/dist/js/modern/types/utils.js +0 -0
  85. package/dist/js/modern/utils/config.js +128 -0
  86. package/dist/js/modern/utils/createServer.js +75 -0
  87. package/dist/js/modern/utils/env.js +15 -0
  88. package/dist/js/modern/utils/generateWatchFiles.js +55 -0
  89. package/dist/js/modern/utils/getSelectedEntries.js +58 -0
  90. package/dist/js/modern/utils/getServerInternalPlugins.js +58 -0
  91. package/dist/js/modern/utils/language.js +8 -0
  92. package/dist/js/modern/utils/printInstructions.js +31 -0
  93. package/dist/js/modern/utils/restart.js +44 -0
  94. package/dist/js/modern/utils/routes.js +30 -0
  95. package/dist/js/modern/utils/types.js +0 -0
  96. package/dist/js/node/analyze/constants.js +100 -0
  97. package/dist/js/node/analyze/generateCode.js +271 -0
  98. package/dist/js/node/analyze/getBundleEntry.js +95 -0
  99. package/dist/js/node/analyze/getClientRoutes/getRoutes.js +242 -0
  100. package/dist/js/node/analyze/getClientRoutes/getRoutesLegacy.js +238 -0
  101. package/dist/js/node/analyze/getClientRoutes/index.js +30 -0
  102. package/dist/js/node/analyze/getClientRoutes/utils.js +58 -0
  103. package/dist/js/node/analyze/getFileSystemEntry.js +131 -0
  104. package/dist/js/node/analyze/getHtmlTemplate.js +144 -0
  105. package/dist/js/node/analyze/getServerRoutes.js +196 -0
  106. package/dist/js/node/analyze/index.js +340 -0
  107. package/dist/js/node/analyze/isDefaultExportFunction.js +71 -0
  108. package/dist/js/node/analyze/makeLegalIdentifier.js +36 -0
  109. package/dist/js/node/analyze/nestedRoutes.js +213 -0
  110. package/dist/js/node/analyze/templates.js +359 -0
  111. package/dist/js/node/analyze/utils.js +172 -0
  112. package/dist/js/node/builder/builder-rspack/index.js +31 -0
  113. package/dist/js/node/builder/builder-webpack/builderPlugins/compatModern.js +64 -0
  114. package/dist/js/node/builder/builder-webpack/index.js +118 -0
  115. package/dist/js/node/builder/builder-webpack/webpackPlugins/RouterPlugin.js +140 -0
  116. package/dist/js/node/builder/builder-webpack/webpackPlugins/index.js +17 -0
  117. package/dist/js/node/builder/generator/createBuilderOptions.js +47 -0
  118. package/dist/js/node/builder/generator/createBuilderProviderConfig.js +60 -0
  119. package/dist/js/node/builder/generator/getBuilderTargets.js +39 -0
  120. package/dist/js/node/builder/generator/index.js +82 -0
  121. package/dist/js/node/builder/index.js +68 -0
  122. package/dist/js/node/builder/shared/builderPlugins/adapterModern.js +245 -0
  123. package/dist/js/node/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +50 -0
  124. package/dist/js/node/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +57 -0
  125. package/dist/js/node/builder/shared/createCopyPattern.js +75 -0
  126. package/dist/js/node/builder/shared/index.js +19 -0
  127. package/dist/js/node/builder/shared/loaders/serverModuleLoader.js +28 -0
  128. package/dist/js/node/builder/shared/types.js +15 -0
  129. package/dist/js/node/commands/build.js +112 -0
  130. package/dist/js/node/commands/deploy.js +51 -0
  131. package/dist/js/node/commands/dev.js +126 -0
  132. package/dist/js/node/commands/index.js +19 -0
  133. package/dist/js/node/commands/inspect.js +61 -0
  134. package/dist/js/node/commands/serve.js +83 -0
  135. package/dist/js/node/config/default.js +197 -0
  136. package/dist/js/node/config/index.js +19 -0
  137. package/dist/js/node/config/initialize/index.js +35 -0
  138. package/dist/js/node/config/initialize/inits.js +177 -0
  139. package/dist/js/node/config/legacy/createHtmlConfig.js +58 -0
  140. package/dist/js/node/config/legacy/createOutputConfig.js +91 -0
  141. package/dist/js/node/config/legacy/createSourceConfig.js +62 -0
  142. package/dist/js/node/config/legacy/createToolsConfig.js +65 -0
  143. package/dist/js/node/config/legacy/index.js +75 -0
  144. package/dist/js/node/defineConfig.js +49 -0
  145. package/dist/js/node/exports/server.js +27 -0
  146. package/dist/js/node/hooks.js +54 -0
  147. package/dist/js/node/index.js +245 -0
  148. package/dist/js/node/initialize/index.js +141 -0
  149. package/dist/js/node/locale/en.js +59 -0
  150. package/dist/js/node/locale/index.js +33 -0
  151. package/dist/js/node/locale/zh.js +59 -0
  152. package/dist/js/node/schema/Schema.js +63 -0
  153. package/dist/js/node/schema/index.js +118 -0
  154. package/dist/js/node/schema/legacy.js +169 -0
  155. package/dist/js/node/types/config/deploy.js +15 -0
  156. package/dist/js/node/types/config/dev.js +15 -0
  157. package/dist/js/node/types/config/experiments.js +15 -0
  158. package/dist/js/node/types/config/html.js +15 -0
  159. package/dist/js/node/types/config/index.js +17 -0
  160. package/dist/js/node/types/config/output.js +15 -0
  161. package/dist/js/node/types/config/performance.js +15 -0
  162. package/dist/js/node/types/config/security.js +15 -0
  163. package/dist/js/node/types/config/source.js +15 -0
  164. package/dist/js/node/types/config/tools.js +15 -0
  165. package/dist/js/node/types/hooks.js +15 -0
  166. package/dist/js/node/types/index.js +19 -0
  167. package/dist/js/node/types/legacyConfig/deploy.js +15 -0
  168. package/dist/js/node/types/legacyConfig/dev.js +15 -0
  169. package/dist/js/node/types/legacyConfig/index.js +15 -0
  170. package/dist/js/node/types/legacyConfig/output.js +15 -0
  171. package/dist/js/node/types/legacyConfig/source.js +15 -0
  172. package/dist/js/node/types/legacyConfig/tools.js +15 -0
  173. package/dist/js/node/types/utils.js +15 -0
  174. package/dist/js/node/utils/config.js +153 -0
  175. package/dist/js/node/utils/createServer.js +106 -0
  176. package/dist/js/node/utils/env.js +38 -0
  177. package/dist/js/node/utils/generateWatchFiles.js +85 -0
  178. package/dist/js/node/utils/getSelectedEntries.js +81 -0
  179. package/dist/js/node/utils/getServerInternalPlugins.js +79 -0
  180. package/dist/js/node/utils/language.js +31 -0
  181. package/dist/js/node/utils/printInstructions.js +54 -0
  182. package/dist/js/node/utils/restart.js +67 -0
  183. package/dist/js/node/utils/routes.js +59 -0
  184. package/dist/js/node/utils/types.js +15 -0
  185. package/dist/js/treeshaking/analyze/constants.js +42 -0
  186. package/dist/js/treeshaking/analyze/generateCode.js +485 -0
  187. package/dist/js/treeshaking/analyze/getBundleEntry.js +62 -0
  188. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +233 -0
  189. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +231 -0
  190. package/dist/js/treeshaking/analyze/getClientRoutes/index.js +3 -0
  191. package/dist/js/treeshaking/analyze/getClientRoutes/utils.js +23 -0
  192. package/dist/js/treeshaking/analyze/getFileSystemEntry.js +107 -0
  193. package/dist/js/treeshaking/analyze/getHtmlTemplate.js +302 -0
  194. package/dist/js/treeshaking/analyze/getServerRoutes.js +224 -0
  195. package/dist/js/treeshaking/analyze/index.js +702 -0
  196. package/dist/js/treeshaking/analyze/isDefaultExportFunction.js +47 -0
  197. package/dist/js/treeshaking/analyze/makeLegalIdentifier.js +13 -0
  198. package/dist/js/treeshaking/analyze/nestedRoutes.js +409 -0
  199. package/dist/js/treeshaking/analyze/templates.js +465 -0
  200. package/dist/js/treeshaking/analyze/utils.js +374 -0
  201. package/dist/js/treeshaking/builder/builder-rspack/index.js +6 -0
  202. package/dist/js/treeshaking/builder/builder-webpack/builderPlugins/compatModern.js +64 -0
  203. package/dist/js/treeshaking/builder/builder-webpack/index.js +301 -0
  204. package/dist/js/treeshaking/builder/builder-webpack/webpackPlugins/RouterPlugin.js +346 -0
  205. package/dist/js/treeshaking/builder/builder-webpack/webpackPlugins/index.js +1 -0
  206. package/dist/js/treeshaking/builder/generator/createBuilderOptions.js +41 -0
  207. package/dist/js/treeshaking/builder/generator/createBuilderProviderConfig.js +70 -0
  208. package/dist/js/treeshaking/builder/generator/getBuilderTargets.js +16 -0
  209. package/dist/js/treeshaking/builder/generator/index.js +199 -0
  210. package/dist/js/treeshaking/builder/index.js +175 -0
  211. package/dist/js/treeshaking/builder/shared/builderPlugins/adapterModern.js +300 -0
  212. package/dist/js/treeshaking/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +110 -0
  213. package/dist/js/treeshaking/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +72 -0
  214. package/dist/js/treeshaking/builder/shared/createCopyPattern.js +40 -0
  215. package/dist/js/treeshaking/builder/shared/index.js +3 -0
  216. package/dist/js/treeshaking/builder/shared/loaders/serverModuleLoader.js +5 -0
  217. package/dist/js/treeshaking/builder/shared/types.js +1 -0
  218. package/dist/js/treeshaking/commands/build.js +291 -0
  219. package/dist/js/treeshaking/commands/deploy.js +154 -0
  220. package/dist/js/treeshaking/commands/dev.js +301 -0
  221. package/dist/js/treeshaking/commands/index.js +3 -0
  222. package/dist/js/treeshaking/commands/inspect.js +149 -0
  223. package/dist/js/treeshaking/commands/serve.js +199 -0
  224. package/dist/js/treeshaking/config/default.js +210 -0
  225. package/dist/js/treeshaking/config/index.js +3 -0
  226. package/dist/js/treeshaking/config/initialize/index.js +10 -0
  227. package/dist/js/treeshaking/config/initialize/inits.js +211 -0
  228. package/dist/js/treeshaking/config/legacy/createHtmlConfig.js +19 -0
  229. package/dist/js/treeshaking/config/legacy/createOutputConfig.js +41 -0
  230. package/dist/js/treeshaking/config/legacy/createSourceConfig.js +42 -0
  231. package/dist/js/treeshaking/config/legacy/createToolsConfig.js +23 -0
  232. package/dist/js/treeshaking/config/legacy/index.js +38 -0
  233. package/dist/js/treeshaking/defineConfig.js +61 -0
  234. package/dist/js/treeshaking/exports/server.js +2 -0
  235. package/dist/js/treeshaking/hooks.js +29 -0
  236. package/dist/js/treeshaking/index.js +713 -0
  237. package/dist/js/treeshaking/initialize/index.js +284 -0
  238. package/dist/js/treeshaking/locale/en.js +38 -0
  239. package/dist/js/treeshaking/locale/index.js +9 -0
  240. package/dist/js/treeshaking/locale/zh.js +38 -0
  241. package/dist/js/treeshaking/schema/Schema.js +273 -0
  242. package/dist/js/treeshaking/schema/index.js +181 -0
  243. package/dist/js/treeshaking/schema/legacy.js +337 -0
  244. package/dist/js/treeshaking/types/config/deploy.js +1 -0
  245. package/dist/js/treeshaking/types/config/dev.js +1 -0
  246. package/dist/js/treeshaking/types/config/experiments.js +1 -0
  247. package/dist/js/treeshaking/types/config/html.js +1 -0
  248. package/dist/js/treeshaking/types/config/index.js +1 -0
  249. package/dist/js/treeshaking/types/config/output.js +1 -0
  250. package/dist/js/treeshaking/types/config/performance.js +1 -0
  251. package/dist/js/treeshaking/types/config/security.js +1 -0
  252. package/dist/js/treeshaking/types/config/source.js +1 -0
  253. package/dist/js/treeshaking/types/config/tools.js +1 -0
  254. package/dist/js/treeshaking/types/hooks.js +1 -0
  255. package/dist/js/treeshaking/types/index.js +3 -0
  256. package/dist/js/treeshaking/types/legacyConfig/deploy.js +1 -0
  257. package/dist/js/treeshaking/types/legacyConfig/dev.js +1 -0
  258. package/dist/js/treeshaking/types/legacyConfig/index.js +1 -0
  259. package/dist/js/treeshaking/types/legacyConfig/output.js +1 -0
  260. package/dist/js/treeshaking/types/legacyConfig/source.js +1 -0
  261. package/dist/js/treeshaking/types/legacyConfig/tools.js +1 -0
  262. package/dist/js/treeshaking/types/utils.js +1 -0
  263. package/dist/js/treeshaking/utils/config.js +302 -0
  264. package/dist/js/treeshaking/utils/createServer.js +258 -0
  265. package/dist/js/treeshaking/utils/env.js +13 -0
  266. package/dist/js/treeshaking/utils/generateWatchFiles.js +214 -0
  267. package/dist/js/treeshaking/utils/getSelectedEntries.js +186 -0
  268. package/dist/js/treeshaking/utils/getServerInternalPlugins.js +210 -0
  269. package/dist/js/treeshaking/utils/language.js +6 -0
  270. package/dist/js/treeshaking/utils/printInstructions.js +152 -0
  271. package/dist/js/treeshaking/utils/restart.js +187 -0
  272. package/dist/js/treeshaking/utils/routes.js +153 -0
  273. package/dist/js/treeshaking/utils/types.js +1 -0
  274. package/package.json +13 -13
@@ -61,6 +61,12 @@ const dev = async (api, options) => {
61
61
  https: normalizedConfig.dev.https,
62
62
  ...(_a = normalizedConfig.tools) == null ? void 0 : _a.devServer
63
63
  },
64
+ appContext: {
65
+ appDirectory: appContext.appDirectory,
66
+ sharedDirectory: appContext.sharedDirectory,
67
+ apiDirectory: appContext.apiDirectory,
68
+ lambdaDirectory: appContext.lambdaDirectory
69
+ },
64
70
  pwd: appDirectory,
65
71
  config: normalizedConfig,
66
72
  serverConfigFile,
@@ -46,6 +46,23 @@ const start = async (api) => {
46
46
  const app = await (0, import_prod_server.default)({
47
47
  pwd: appDirectory,
48
48
  config: userConfig,
49
+ appContext: {
50
+ sharedDirectory: (0, import_utils.getTargetDir)(
51
+ appContext.sharedDirectory,
52
+ appContext.appDirectory,
53
+ appContext.distDirectory
54
+ ),
55
+ apiDirectory: (0, import_utils.getTargetDir)(
56
+ appContext.apiDirectory,
57
+ appContext.appDirectory,
58
+ appContext.distDirectory
59
+ ),
60
+ lambdaDirectory: (0, import_utils.getTargetDir)(
61
+ appContext.lambdaDirectory,
62
+ appContext.appDirectory,
63
+ appContext.distDirectory
64
+ )
65
+ },
49
66
  serverConfigFile,
50
67
  internalPlugins: (0, import_createServer.injectDataLoaderPlugin)(serverInternalPlugins),
51
68
  apiOnly
@@ -238,6 +238,12 @@ var dev = function() {
238
238
  port: port,
239
239
  https: normalizedConfig.dev.https
240
240
  }, (_normalizedConfig_tools = normalizedConfig.tools) === null || _normalizedConfig_tools === void 0 ? void 0 : _normalizedConfig_tools.devServer),
241
+ appContext: {
242
+ appDirectory: appContext.appDirectory,
243
+ sharedDirectory: appContext.sharedDirectory,
244
+ apiDirectory: appContext.apiDirectory,
245
+ lambdaDirectory: appContext.lambdaDirectory
246
+ },
241
247
  pwd: appDirectory,
242
248
  config: normalizedConfig,
243
249
  serverConfigFile: serverConfigFile,
@@ -122,7 +122,7 @@ var __generator = this && this.__generator || function(thisArg, body) {
122
122
  };
123
123
  }
124
124
  };
125
- import { logger, chalk, isApiOnly } from "@modern-js/utils";
125
+ import { logger, chalk, isApiOnly, getTargetDir } from "@modern-js/utils";
126
126
  import server from "@modern-js/prod-server";
127
127
  import { printInstructions } from "../utils/printInstructions";
128
128
  import { injectDataLoaderPlugin } from "../utils/createServer";
@@ -155,6 +155,11 @@ var start = function() {
155
155
  server({
156
156
  pwd: appDirectory,
157
157
  config: userConfig,
158
+ appContext: {
159
+ sharedDirectory: getTargetDir(appContext.sharedDirectory, appContext.appDirectory, appContext.distDirectory),
160
+ apiDirectory: getTargetDir(appContext.apiDirectory, appContext.appDirectory, appContext.distDirectory),
161
+ lambdaDirectory: getTargetDir(appContext.lambdaDirectory, appContext.appDirectory, appContext.distDirectory)
162
+ },
158
163
  serverConfigFile: serverConfigFile,
159
164
  internalPlugins: injectDataLoaderPlugin(serverInternalPlugins),
160
165
  apiOnly: apiOnly
@@ -43,6 +43,12 @@ const dev = async (api, options) => {
43
43
  https: normalizedConfig.dev.https,
44
44
  ...(_a = normalizedConfig.tools) == null ? void 0 : _a.devServer
45
45
  },
46
+ appContext: {
47
+ appDirectory: appContext.appDirectory,
48
+ sharedDirectory: appContext.sharedDirectory,
49
+ apiDirectory: appContext.apiDirectory,
50
+ lambdaDirectory: appContext.lambdaDirectory
51
+ },
46
52
  pwd: appDirectory,
47
53
  config: normalizedConfig,
48
54
  serverConfigFile,
@@ -1,4 +1,4 @@
1
- import { logger, chalk, isApiOnly } from "@modern-js/utils";
1
+ import { logger, chalk, isApiOnly, getTargetDir } from "@modern-js/utils";
2
2
  import server from "@modern-js/prod-server";
3
3
  import { printInstructions } from "../utils/printInstructions";
4
4
  import { injectDataLoaderPlugin } from "../utils/createServer";
@@ -18,6 +18,23 @@ const start = async (api) => {
18
18
  const app = await server({
19
19
  pwd: appDirectory,
20
20
  config: userConfig,
21
+ appContext: {
22
+ sharedDirectory: getTargetDir(
23
+ appContext.sharedDirectory,
24
+ appContext.appDirectory,
25
+ appContext.distDirectory
26
+ ),
27
+ apiDirectory: getTargetDir(
28
+ appContext.apiDirectory,
29
+ appContext.appDirectory,
30
+ appContext.distDirectory
31
+ ),
32
+ lambdaDirectory: getTargetDir(
33
+ appContext.lambdaDirectory,
34
+ appContext.appDirectory,
35
+ appContext.distDirectory
36
+ )
37
+ },
21
38
  serverConfigFile,
22
39
  internalPlugins: injectDataLoaderPlugin(serverInternalPlugins),
23
40
  apiOnly
@@ -0,0 +1,56 @@
1
+ const JS_EXTENSIONS = [".js", ".ts", ".jsx", ".tsx"];
2
+ const INDEX_FILE_NAME = "index";
3
+ const APP_FILE_NAME = "App";
4
+ const PAGES_DIR_NAME = "pages";
5
+ const NESTED_ROUTES_DIR = "routes";
6
+ const FILE_SYSTEM_ROUTES_FILE_NAME = "routes.js";
7
+ const LOADER_EXPORT_NAME = "loader";
8
+ const TEMP_LOADERS_DIR = "__loaders__";
9
+ const ENTRY_POINT_FILE_NAME = "index.js";
10
+ const ENTRY_BOOTSTRAP_FILE_NAME = "bootstrap.js";
11
+ const FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP = /^\[(\S+)\]([*+?]?)$/;
12
+ const FILE_SYSTEM_ROUTES_LAYOUT = "_layout";
13
+ const FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT = "_app";
14
+ const FILE_SYSTEM_ROUTES_INDEX = "index";
15
+ const FILE_SYSTEM_ROUTES_IGNORED_REGEX = /\.(d|test|spec|e2e)\.(js|jsx|ts|tsx)$/;
16
+ const HTML_PARTIALS_FOLDER = "html";
17
+ const HTML_PARTIALS_EXTENSIONS = [".htm", ".html", ".ejs"];
18
+ const FILE_SYSTEM_ROUTES_COMPONENTS_DIR = "internal_components";
19
+ const NESTED_ROUTE = {
20
+ LAYOUT_FILE: "layout",
21
+ LAYOUT_LOADER_FILE: "layout.loader",
22
+ PAGE_FILE: "page",
23
+ PAGE_LOADER_FILE: "page.loader",
24
+ LOADING_FILE: "loading",
25
+ ERROR_FILE: "error",
26
+ LOADER_FILE: "loader",
27
+ SPLATE_FILE: "$",
28
+ SPLATE_LOADER_FILE: "$.loader"
29
+ };
30
+ const APP_CONFIG_NAME = "config";
31
+ const APP_INIT_EXPORTED = "init";
32
+ const APP_INIT_IMPORTED = "appInit";
33
+ export {
34
+ APP_CONFIG_NAME,
35
+ APP_FILE_NAME,
36
+ APP_INIT_EXPORTED,
37
+ APP_INIT_IMPORTED,
38
+ ENTRY_BOOTSTRAP_FILE_NAME,
39
+ ENTRY_POINT_FILE_NAME,
40
+ FILE_SYSTEM_ROUTES_COMPONENTS_DIR,
41
+ FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP,
42
+ FILE_SYSTEM_ROUTES_FILE_NAME,
43
+ FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT,
44
+ FILE_SYSTEM_ROUTES_IGNORED_REGEX,
45
+ FILE_SYSTEM_ROUTES_INDEX,
46
+ FILE_SYSTEM_ROUTES_LAYOUT,
47
+ HTML_PARTIALS_EXTENSIONS,
48
+ HTML_PARTIALS_FOLDER,
49
+ INDEX_FILE_NAME,
50
+ JS_EXTENSIONS,
51
+ LOADER_EXPORT_NAME,
52
+ NESTED_ROUTE,
53
+ NESTED_ROUTES_DIR,
54
+ PAGES_DIR_NAME,
55
+ TEMP_LOADERS_DIR
56
+ };
@@ -0,0 +1,247 @@
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 path from "path";
22
+ import { fs, getEntryOptions, logger } from "@modern-js/utils";
23
+ import {
24
+ useResolvedConfigContext
25
+ } from "@modern-js/core";
26
+ import * as templates from "./templates";
27
+ import { getClientRoutes, getClientRoutesLegacy } from "./getClientRoutes";
28
+ import {
29
+ FILE_SYSTEM_ROUTES_FILE_NAME,
30
+ ENTRY_POINT_FILE_NAME,
31
+ ENTRY_BOOTSTRAP_FILE_NAME
32
+ } from "./constants";
33
+ import { getDefaultImports, getServerLoadersFile } from "./utils";
34
+ import { walk } from "./nestedRoutes";
35
+ const createImportSpecifier = (specifiers) => {
36
+ let defaults = "";
37
+ const named = [];
38
+ for (const { local, imported } of specifiers) {
39
+ if (local && imported) {
40
+ named.push(`${imported} as ${local}`);
41
+ } else if (local) {
42
+ defaults = local;
43
+ } else {
44
+ named.push(imported);
45
+ }
46
+ }
47
+ if (defaults && named.length) {
48
+ return `${defaults}, { ${named.join(", ")} }`;
49
+ } else if (defaults) {
50
+ return defaults;
51
+ } else {
52
+ return `{ ${named.join(", ")} }`;
53
+ }
54
+ };
55
+ const createImportStatements = (statements) => {
56
+ var _a, _b;
57
+ const deDuplicated = [];
58
+ const seen = /* @__PURE__ */ new Map();
59
+ for (const { value, specifiers, initialize } of statements) {
60
+ if (!seen.has(value)) {
61
+ deDuplicated.push({
62
+ value,
63
+ specifiers,
64
+ initialize
65
+ });
66
+ seen.set(value, specifiers);
67
+ } else {
68
+ seen.get(value).push(...specifiers);
69
+ const modifyIndex = deDuplicated.findIndex((v) => v.value === value);
70
+ const originInitialize = (_b = (_a = deDuplicated[modifyIndex]) == null ? void 0 : _a.initialize) != null ? _b : "";
71
+ deDuplicated[modifyIndex].initialize = originInitialize.concat(
72
+ `
73
+ ${initialize || ""}`
74
+ );
75
+ }
76
+ }
77
+ return deDuplicated.map(
78
+ ({ value, specifiers, initialize }) => `import ${createImportSpecifier(specifiers)} from '${value}';
79
+ ${initialize || ""}`
80
+ ).join("\n");
81
+ };
82
+ const generateCode = (appContext, config, entrypoints, api) => __async(void 0, null, function* () {
83
+ var _a, _b, _c;
84
+ const {
85
+ internalDirectory,
86
+ srcDirectory,
87
+ internalDirAlias,
88
+ internalSrcAlias,
89
+ packageName
90
+ } = appContext;
91
+ const hookRunners = api.useHookRunners();
92
+ const isV5 = typeof ((_a = config.runtime) == null ? void 0 : _a.router) !== "boolean" && ((_c = (_b = config == null ? void 0 : config.runtime) == null ? void 0 : _b.router) == null ? void 0 : _c.mode) === "react-router-5";
93
+ const { mountId } = config.html;
94
+ const getRoutes = isV5 ? getClientRoutesLegacy : getClientRoutes;
95
+ yield Promise.all(entrypoints.map(generateEntryCode));
96
+ function generateEntryCode(entrypoint) {
97
+ return __async(this, null, function* () {
98
+ const { entryName, isAutoMount, customBootstrap, fileSystemRoutes } = entrypoint;
99
+ if (isAutoMount) {
100
+ if (fileSystemRoutes) {
101
+ let initialRoutes = [];
102
+ let nestedRoute = null;
103
+ if (entrypoint.entry) {
104
+ initialRoutes = getRoutes({
105
+ entrypoint,
106
+ srcDirectory,
107
+ srcAlias: internalSrcAlias,
108
+ internalDirectory,
109
+ internalDirAlias
110
+ });
111
+ }
112
+ if (entrypoint.nestedRoutesEntry) {
113
+ if (!isV5) {
114
+ nestedRoute = yield walk(
115
+ entrypoint.nestedRoutesEntry,
116
+ entrypoint.nestedRoutesEntry,
117
+ {
118
+ name: internalSrcAlias,
119
+ basename: srcDirectory
120
+ },
121
+ entrypoint.entryName
122
+ );
123
+ if (nestedRoute) {
124
+ initialRoutes.unshift(nestedRoute);
125
+ }
126
+ } else {
127
+ logger.error("Nested routes is not supported in legacy mode.");
128
+ process.exit(1);
129
+ }
130
+ }
131
+ const { routes } = yield hookRunners.modifyFileSystemRoutes({
132
+ entrypoint,
133
+ routes: initialRoutes
134
+ });
135
+ const config2 = useResolvedConfigContext();
136
+ const ssr = getEntryOptions(
137
+ entryName,
138
+ config2.server.ssr,
139
+ config2.server.ssrByEntries,
140
+ packageName
141
+ );
142
+ let mode;
143
+ if (ssr) {
144
+ mode = typeof ssr === "object" ? ssr.mode || "string" : "string";
145
+ } else {
146
+ mode = false;
147
+ }
148
+ if (mode === "stream") {
149
+ const hasPageRoute = routes.some(
150
+ (route) => "type" in route && route.type === "page"
151
+ );
152
+ if (hasPageRoute) {
153
+ logger.error(
154
+ "Streaming ssr is not supported when pages dir exists"
155
+ );
156
+ process.exit(1);
157
+ }
158
+ }
159
+ const { code: code2 } = yield hookRunners.beforeGenerateRoutes({
160
+ entrypoint,
161
+ code: yield templates.fileSystemRoutes({
162
+ routes,
163
+ ssrMode: mode,
164
+ nestedRoutesEntry: entrypoint.nestedRoutesEntry,
165
+ entryName: entrypoint.entryName,
166
+ internalDirectory
167
+ })
168
+ });
169
+ if (entrypoint.nestedRoutesEntry && mode) {
170
+ const routesServerFile = getServerLoadersFile(
171
+ internalDirectory,
172
+ entryName
173
+ );
174
+ const code3 = templates.routesForServer({
175
+ routes
176
+ });
177
+ yield fs.ensureFile(routesServerFile);
178
+ yield fs.writeFile(routesServerFile, code3);
179
+ }
180
+ fs.outputFileSync(
181
+ path.resolve(
182
+ internalDirectory,
183
+ `./${entryName}/${FILE_SYSTEM_ROUTES_FILE_NAME}`
184
+ ),
185
+ code2,
186
+ "utf8"
187
+ );
188
+ }
189
+ const { imports: importStatements } = yield hookRunners.modifyEntryImports({
190
+ entrypoint,
191
+ imports: getDefaultImports({
192
+ entrypoint,
193
+ srcDirectory,
194
+ internalSrcAlias,
195
+ internalDirAlias,
196
+ internalDirectory
197
+ })
198
+ });
199
+ const { plugins } = yield hookRunners.modifyEntryRuntimePlugins({
200
+ entrypoint,
201
+ plugins: []
202
+ });
203
+ const { code: renderFunction } = yield hookRunners.modifyEntryRenderFunction({
204
+ entrypoint,
205
+ code: templates.renderFunction({
206
+ plugins,
207
+ customBootstrap,
208
+ fileSystemRoutes
209
+ })
210
+ });
211
+ const { exportStatement } = yield hookRunners.modifyEntryExport({
212
+ entrypoint,
213
+ exportStatement: "export default AppWrapper;"
214
+ });
215
+ const code = templates.index({
216
+ mountId,
217
+ imports: createImportStatements(importStatements),
218
+ renderFunction,
219
+ exportStatement
220
+ });
221
+ const entryFile = path.resolve(
222
+ internalDirectory,
223
+ `./${entryName}/${ENTRY_POINT_FILE_NAME}`
224
+ );
225
+ entrypoint.entry = entryFile;
226
+ if (config.source.enableAsyncEntry) {
227
+ const { code: asyncEntryCode } = yield hookRunners.modifyAsyncEntry({
228
+ entrypoint,
229
+ code: `import('./${ENTRY_BOOTSTRAP_FILE_NAME}');`
230
+ });
231
+ fs.outputFileSync(entryFile, asyncEntryCode, "utf8");
232
+ const bootstrapFile = path.resolve(
233
+ internalDirectory,
234
+ `./${entryName}/${ENTRY_BOOTSTRAP_FILE_NAME}`
235
+ );
236
+ fs.outputFileSync(bootstrapFile, code, "utf8");
237
+ } else {
238
+ fs.outputFileSync(entryFile, code, "utf8");
239
+ }
240
+ }
241
+ });
242
+ }
243
+ });
244
+ export {
245
+ createImportStatements,
246
+ generateCode
247
+ };
@@ -0,0 +1,71 @@
1
+ import path from "path";
2
+ import {
3
+ ensureAbsolutePath,
4
+ fs,
5
+ findExists,
6
+ MAIN_ENTRY_NAME
7
+ } from "@modern-js/utils";
8
+ import { getFileSystemEntry } from "./getFileSystemEntry";
9
+ import { JS_EXTENSIONS } from "./constants";
10
+ const ensureExtensions = (file) => {
11
+ if (!path.extname(file)) {
12
+ return findExists(JS_EXTENSIONS.map((ext) => `${file}${ext}`)) || file;
13
+ }
14
+ return file;
15
+ };
16
+ const ifAlreadyExists = (entrypoints, checked) => entrypoints.some((entrypoint) => {
17
+ if (ensureExtensions(entrypoint.entry) === ensureExtensions(checked.entry)) {
18
+ checked.entryName = entrypoint.entryName;
19
+ return true;
20
+ }
21
+ if (entrypoint.entry.startsWith(checked.entry) || checked.entry.startsWith(entrypoint.entry)) {
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
+ );
28
+ }
29
+ return false;
30
+ });
31
+ const getBundleEntry = (appContext, config) => {
32
+ const { appDirectory, packageName } = appContext;
33
+ const {
34
+ source: { disableDefaultEntries, entries, entriesDir }
35
+ } = config;
36
+ const defaults = disableDefaultEntries ? [] : getFileSystemEntry(appContext, config);
37
+ if (entries) {
38
+ Object.keys(entries).forEach((name) => {
39
+ const value = entries[name];
40
+ const entrypoint = typeof value === "string" ? {
41
+ entryName: name,
42
+ entry: ensureAbsolutePath(appDirectory, value),
43
+ isAutoMount: true,
44
+ fileSystemRoutes: fs.statSync(ensureAbsolutePath(appDirectory, value)).isDirectory() ? {} : void 0
45
+ } : {
46
+ entryName: name,
47
+ entry: ensureAbsolutePath(appDirectory, value.entry),
48
+ isAutoMount: !value.disableMount,
49
+ customBootstrap: value.customBootstrap && ensureAbsolutePath(appDirectory, value.customBootstrap),
50
+ fileSystemRoutes: fs.statSync(ensureAbsolutePath(appDirectory, value.entry)).isDirectory() ? {} : void 0
51
+ };
52
+ if (entrypoint.fileSystemRoutes) {
53
+ entrypoint.nestedRoutesEntry = entrypoint.entry;
54
+ }
55
+ if (!ifAlreadyExists(defaults, entrypoint)) {
56
+ defaults.push(entrypoint);
57
+ }
58
+ });
59
+ }
60
+ if (!disableDefaultEntries) {
61
+ const entriesDirAbs = ensureAbsolutePath(appDirectory, entriesDir || "");
62
+ const found = defaults.find(
63
+ ({ entryName, entry, nestedRoutesEntry = "" }) => entryName === packageName || path.dirname(entry) === entriesDirAbs || path.dirname(nestedRoutesEntry) === entriesDirAbs
64
+ );
65
+ found && (found.entryName = MAIN_ENTRY_NAME);
66
+ }
67
+ return defaults;
68
+ };
69
+ export {
70
+ getBundleEntry
71
+ };