@tramvai/cli 2.63.0 → 2.65.9

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 (416) hide show
  1. package/README.md +46 -38
  2. package/lib/api/analyze/providers/shared.js +1 -1
  3. package/lib/api/analyze/providers/shared.js.map +1 -1
  4. package/lib/api/benchmark/index.d.ts +1 -1
  5. package/lib/api/build/child-app.js +3 -2
  6. package/lib/api/build/child-app.js.map +1 -1
  7. package/lib/api/build/module.js +1 -2
  8. package/lib/api/build/module.js.map +1 -1
  9. package/lib/api/build/providers/shared.js +1 -1
  10. package/lib/api/build/providers/shared.js.map +1 -1
  11. package/lib/api/index.d.ts +6 -2
  12. package/lib/api/index.js +3 -3
  13. package/lib/api/index.js.map +1 -1
  14. package/lib/api/shared/types/withConfig.d.ts +3 -2
  15. package/lib/api/start/providers/application/shared.js +1 -1
  16. package/lib/api/start/providers/application/shared.js.map +1 -1
  17. package/lib/api/start/providers/child-app/shared.js +8 -7
  18. package/lib/api/start/providers/child-app/shared.js.map +1 -1
  19. package/lib/api/start/providers/module/shared.js +14 -13
  20. package/lib/api/start/providers/module/shared.js.map +1 -1
  21. package/lib/api/start/utils/banner.js +3 -2
  22. package/lib/api/start/utils/banner.js.map +1 -1
  23. package/lib/api/start/utils/tips/tips.js +10 -8
  24. package/lib/api/start/utils/tips/tips.js.map +1 -1
  25. package/lib/api/start-prod/providers/application.js +5 -5
  26. package/lib/api/start-prod/providers/application.js.map +1 -1
  27. package/lib/api/start-prod/providers/child-app.js +2 -2
  28. package/lib/api/start-prod/providers/child-app.js.map +1 -1
  29. package/lib/api/start-prod/providers/shared.js +3 -3
  30. package/lib/api/start-prod/providers/shared.js.map +1 -1
  31. package/lib/builder/webpack/devServer/client.js +18 -15
  32. package/lib/builder/webpack/devServer/client.js.map +1 -1
  33. package/lib/builder/webpack/devServer/notifier.d.ts +2 -2
  34. package/lib/builder/webpack/devServer/notifier.js +3 -3
  35. package/lib/builder/webpack/devServer/notifier.js.map +1 -1
  36. package/lib/builder/webpack/devServer/pool/process/pool.js +3 -2
  37. package/lib/builder/webpack/devServer/pool/process/pool.js.map +1 -1
  38. package/lib/builder/webpack/devServer/pool/thread/pool.js +7 -0
  39. package/lib/builder/webpack/devServer/pool/thread/pool.js.map +1 -1
  40. package/lib/builder/webpack/devServer/server.js +7 -2
  41. package/lib/builder/webpack/devServer/server.js.map +1 -1
  42. package/lib/builder/webpack/providers/analyze/shared.js +3 -3
  43. package/lib/builder/webpack/providers/analyze/shared.js.map +1 -1
  44. package/lib/builder/webpack/providers/build/application/server.js.map +1 -1
  45. package/lib/builder/webpack/providers/build/client.js +3 -3
  46. package/lib/builder/webpack/providers/build/client.js.map +1 -1
  47. package/lib/builder/webpack/providers/build/server.js +1 -1
  48. package/lib/builder/webpack/providers/build/server.js.map +1 -1
  49. package/lib/builder/webpack/tokens.d.ts +313 -3
  50. package/lib/builder/webpack/tokens.js.map +1 -1
  51. package/lib/builder/webpack/utils/copyBuildFile.d.ts +2 -1
  52. package/lib/builder/webpack/utils/copyBuildFile.js +2 -3
  53. package/lib/builder/webpack/utils/copyBuildFile.js.map +1 -1
  54. package/lib/builder/webpack/utils/copyStatsJsonFile.d.ts +2 -1
  55. package/lib/builder/webpack/utils/copyStatsJsonFile.js +1 -1
  56. package/lib/builder/webpack/utils/copyStatsJsonFile.js.map +1 -1
  57. package/lib/cli/CLI.d.ts +2 -2
  58. package/lib/cli/CLI.js +2 -2
  59. package/lib/cli/CLI.js.map +1 -1
  60. package/lib/cli/index.js.map +1 -1
  61. package/lib/commands/analyze/command.d.ts +1 -1
  62. package/lib/commands/analyze/command.js.map +1 -1
  63. package/lib/commands/benchmark/command.d.ts +1 -1
  64. package/lib/commands/benchmark/command.js.map +1 -1
  65. package/lib/commands/build/command.d.ts +1 -1
  66. package/lib/commands/build/command.js.map +1 -1
  67. package/lib/commands/new/new.js +0 -1
  68. package/lib/commands/new/new.js.map +1 -1
  69. package/lib/commands/new/questions/packageManager.d.ts +1 -1
  70. package/lib/commands/new/questions/packageManager.js.map +1 -1
  71. package/lib/commands/new/questions/template.d.ts +1 -1
  72. package/lib/commands/new/questions/template.js.map +1 -1
  73. package/lib/commands/new/questions/testingFramework.d.ts +1 -1
  74. package/lib/commands/new/questions/testingFramework.js.map +1 -1
  75. package/lib/commands/new/questions/type.d.ts +1 -1
  76. package/lib/commands/new/questions/type.js.map +1 -1
  77. package/lib/commands/new/steps/initializationGit.d.ts +1 -1
  78. package/lib/commands/new/steps/initializationGit.js.map +1 -1
  79. package/lib/commands/start/command.d.ts +1 -1
  80. package/lib/commands/start/command.js.map +1 -1
  81. package/lib/commands/start-prod/command.d.ts +1 -1
  82. package/lib/commands/start-prod/command.js.map +1 -1
  83. package/lib/commands/static/application.js +4 -4
  84. package/lib/commands/static/application.js.map +1 -1
  85. package/lib/commands/static/command.d.ts +1 -1
  86. package/lib/commands/static/command.js.map +1 -1
  87. package/lib/commands/static/generate.js +2 -2
  88. package/lib/commands/static/generate.js.map +1 -1
  89. package/lib/commands/static/server.d.ts +2 -1
  90. package/lib/commands/static/server.js +1 -1
  91. package/lib/commands/static/server.js.map +1 -1
  92. package/lib/commands/static/staticServer.d.ts +2 -1
  93. package/lib/commands/static/staticServer.js +1 -1
  94. package/lib/commands/static/staticServer.js.map +1 -1
  95. package/lib/commands/update/updatePackageJson.js +3 -0
  96. package/lib/commands/update/updatePackageJson.js.map +1 -1
  97. package/lib/config/configManager.d.ts +12 -73
  98. package/lib/config/configManager.js +61 -92
  99. package/lib/config/configManager.js.map +1 -1
  100. package/lib/config/showConfig.d.ts +1 -1
  101. package/lib/config/showConfig.js +1 -1
  102. package/lib/config/showConfig.js.map +1 -1
  103. package/lib/config/validate.d.ts +5 -4
  104. package/lib/config/validate.js +2 -9
  105. package/lib/config/validate.js.map +1 -1
  106. package/lib/di/tokens/config.d.ts +106 -1
  107. package/lib/di/tokens/config.js.map +1 -1
  108. package/lib/external/config.d.ts +2 -2
  109. package/lib/library/babel/index.js +1 -0
  110. package/lib/library/babel/index.js.map +1 -1
  111. package/lib/library/swc/index.js +1 -1
  112. package/lib/library/swc/index.js.map +1 -1
  113. package/lib/library/webpack/application/client/common.js +6 -4
  114. package/lib/library/webpack/application/client/common.js.map +1 -1
  115. package/lib/library/webpack/application/client/dev.js +9 -8
  116. package/lib/library/webpack/application/client/dev.js.map +1 -1
  117. package/lib/library/webpack/application/client/prod/optimization/splitChunks.js +40 -39
  118. package/lib/library/webpack/application/client/prod/optimization/splitChunks.js.map +1 -1
  119. package/lib/library/webpack/application/client/prod.js +3 -4
  120. package/lib/library/webpack/application/client/prod.js.map +1 -1
  121. package/lib/library/webpack/application/server/common.js +5 -5
  122. package/lib/library/webpack/application/server/common.js.map +1 -1
  123. package/lib/library/webpack/application/server/dev.js +3 -6
  124. package/lib/library/webpack/application/server/dev.js.map +1 -1
  125. package/lib/library/webpack/application/server/prod.js +3 -4
  126. package/lib/library/webpack/application/server/prod.js.map +1 -1
  127. package/lib/library/webpack/blocks/apiResolve.js +1 -1
  128. package/lib/library/webpack/blocks/apiResolve.js.map +1 -1
  129. package/lib/library/webpack/blocks/configResolve.js +2 -2
  130. package/lib/library/webpack/blocks/configResolve.js.map +1 -1
  131. package/lib/library/webpack/blocks/configToEnv.js +5 -2
  132. package/lib/library/webpack/blocks/configToEnv.js.map +1 -1
  133. package/lib/library/webpack/blocks/css.d.ts +3 -1
  134. package/lib/library/webpack/blocks/css.js +17 -6
  135. package/lib/library/webpack/blocks/css.js.map +1 -1
  136. package/lib/library/webpack/blocks/extractCssPlugin.d.ts +4 -3
  137. package/lib/library/webpack/blocks/extractCssPlugin.js +4 -6
  138. package/lib/library/webpack/blocks/extractCssPlugin.js.map +1 -1
  139. package/lib/library/webpack/blocks/filesClient.d.ts +3 -2
  140. package/lib/library/webpack/blocks/filesClient.js +7 -7
  141. package/lib/library/webpack/blocks/filesClient.js.map +1 -1
  142. package/lib/library/webpack/blocks/filesServer.d.ts +2 -1
  143. package/lib/library/webpack/blocks/filesServer.js +3 -3
  144. package/lib/library/webpack/blocks/filesServer.js.map +1 -1
  145. package/lib/library/webpack/blocks/js.d.ts +2 -1
  146. package/lib/library/webpack/blocks/js.js +1 -1
  147. package/lib/library/webpack/blocks/js.js.map +1 -1
  148. package/lib/library/webpack/blocks/nodeClient.d.ts +2 -1
  149. package/lib/library/webpack/blocks/nodeClient.js +2 -2
  150. package/lib/library/webpack/blocks/nodeClient.js.map +1 -1
  151. package/lib/library/webpack/blocks/optimize.d.ts +2 -1
  152. package/lib/library/webpack/blocks/optimize.js +3 -3
  153. package/lib/library/webpack/blocks/optimize.js.map +1 -1
  154. package/lib/library/webpack/blocks/pagesResolve.js +1 -1
  155. package/lib/library/webpack/blocks/pagesResolve.js.map +1 -1
  156. package/lib/library/webpack/blocks/postcssAssets.d.ts +2 -1
  157. package/lib/library/webpack/blocks/postcssAssets.js +2 -2
  158. package/lib/library/webpack/blocks/postcssAssets.js.map +1 -1
  159. package/lib/library/webpack/blocks/serverInline.d.ts +2 -1
  160. package/lib/library/webpack/blocks/serverInline.js.map +1 -1
  161. package/lib/library/webpack/blocks/ts.d.ts +2 -1
  162. package/lib/library/webpack/blocks/ts.js.map +1 -1
  163. package/lib/library/webpack/child-app/client/common.d.ts +2 -2
  164. package/lib/library/webpack/child-app/client/common.js +1 -1
  165. package/lib/library/webpack/child-app/client/common.js.map +1 -1
  166. package/lib/library/webpack/child-app/client/dev.d.ts +2 -2
  167. package/lib/library/webpack/child-app/client/dev.js +6 -5
  168. package/lib/library/webpack/child-app/client/dev.js.map +1 -1
  169. package/lib/library/webpack/child-app/client/prod.d.ts +2 -2
  170. package/lib/library/webpack/child-app/client/prod.js.map +1 -1
  171. package/lib/library/webpack/child-app/common.d.ts +2 -2
  172. package/lib/library/webpack/child-app/common.js.map +1 -1
  173. package/lib/library/webpack/child-app/server/common.d.ts +2 -2
  174. package/lib/library/webpack/child-app/server/common.js +1 -1
  175. package/lib/library/webpack/child-app/server/common.js.map +1 -1
  176. package/lib/library/webpack/child-app/server/dev.d.ts +2 -2
  177. package/lib/library/webpack/child-app/server/dev.js.map +1 -1
  178. package/lib/library/webpack/child-app/server/prod.d.ts +2 -2
  179. package/lib/library/webpack/child-app/server/prod.js.map +1 -1
  180. package/lib/library/webpack/common/client/prod.d.ts +2 -1
  181. package/lib/library/webpack/common/client/prod.js +4 -5
  182. package/lib/library/webpack/common/client/prod.js.map +1 -1
  183. package/lib/library/webpack/common/main.d.ts +2 -1
  184. package/lib/library/webpack/common/main.js +3 -3
  185. package/lib/library/webpack/common/main.js.map +1 -1
  186. package/lib/library/webpack/common/server/prod.d.ts +2 -1
  187. package/lib/library/webpack/common/server/prod.js +4 -5
  188. package/lib/library/webpack/common/server/prod.js.map +1 -1
  189. package/lib/library/webpack/index.js +1 -2
  190. package/lib/library/webpack/index.js.map +1 -1
  191. package/lib/library/webpack/loaders/image-loader/index.d.ts +2 -1
  192. package/lib/library/webpack/loaders/image-loader/index.js.map +1 -1
  193. package/lib/library/webpack/loaders/pagesResolve.d.ts +10 -1
  194. package/lib/library/webpack/loaders/pagesResolve.js +4 -3
  195. package/lib/library/webpack/loaders/pagesResolve.js.map +1 -1
  196. package/lib/library/webpack/loaders/replaceContent.d.ts +6 -1
  197. package/lib/library/webpack/loaders/replaceContent.js +4 -3
  198. package/lib/library/webpack/loaders/replaceContent.js.map +1 -1
  199. package/lib/library/webpack/module/client/common.js +1 -1
  200. package/lib/library/webpack/module/client/common.js.map +1 -1
  201. package/lib/library/webpack/module/externals.d.ts +1 -1
  202. package/lib/library/webpack/module/externals.js.map +1 -1
  203. package/lib/library/webpack/module/resolveExternal.d.ts +1 -1
  204. package/lib/library/webpack/module/resolveExternal.js.map +1 -1
  205. package/lib/library/webpack/module/server/common.js +1 -1
  206. package/lib/library/webpack/module/server/common.js.map +1 -1
  207. package/lib/library/webpack/plugins/LazyModuleInitialization.d.ts +2 -2
  208. package/lib/library/webpack/plugins/LazyModuleInitialization.js +1 -0
  209. package/lib/library/webpack/plugins/LazyModuleInitialization.js.map +1 -1
  210. package/lib/library/webpack/plugins/WebpackBar/utils/index.d.ts +7 -7
  211. package/lib/library/webpack/plugins/WebpackBar/utils/index.js.map +1 -1
  212. package/lib/library/webpack/plugins/WebpackBar/utils/webpack.d.ts +2 -2
  213. package/lib/library/webpack/plugins/WebpackBar/utils/webpack.js.map +1 -1
  214. package/lib/library/webpack/types/webpack.d.ts +2 -2
  215. package/lib/library/webpack/utils/files.d.ts +4 -3
  216. package/lib/library/webpack/utils/files.js +2 -2
  217. package/lib/library/webpack/utils/files.js.map +1 -1
  218. package/lib/library/webpack/utils/transpiler.d.ts +3 -2
  219. package/lib/library/webpack/utils/transpiler.js +2 -2
  220. package/lib/library/webpack/utils/transpiler.js.map +1 -1
  221. package/lib/library/webpack/utils/workersPool.d.ts +3 -6
  222. package/lib/library/webpack/utils/workersPool.js +1 -1
  223. package/lib/library/webpack/utils/workersPool.js.map +1 -1
  224. package/lib/models/config.d.ts +2 -3
  225. package/lib/models/config.js +32 -3
  226. package/lib/models/config.js.map +1 -1
  227. package/lib/schema/ConfigSchema.d.ts +13 -4
  228. package/lib/schema/autogeneratedSchema.json +1808 -2074
  229. package/lib/typings/configEntry/application.d.ts +81 -86
  230. package/lib/typings/configEntry/child-app.d.ts +10 -29
  231. package/lib/typings/configEntry/cli.d.ts +254 -0
  232. package/lib/typings/configEntry/{CheckAsyncTsConfig.js → cli.js} +1 -1
  233. package/lib/typings/configEntry/cli.js.map +1 -0
  234. package/lib/typings/configEntry/common.d.ts +16 -276
  235. package/lib/typings/configEntry/common.js +15 -0
  236. package/lib/typings/configEntry/common.js.map +1 -1
  237. package/lib/typings/configEntry/module.d.ts +10 -29
  238. package/lib/typings/configEntry/package.d.ts +2 -1
  239. package/lib/ui/commander.js +1 -1
  240. package/lib/ui/commander.js.map +1 -1
  241. package/lib/utils/applyTemplate.js.map +1 -1
  242. package/lib/utils/safeRequire.js +5 -1
  243. package/lib/utils/safeRequire.js.map +1 -1
  244. package/lib/utils/webpackBuild.d.ts +2 -1
  245. package/lib/utils/webpackBuild.js +3 -3
  246. package/lib/utils/webpackBuild.js.map +1 -1
  247. package/package.json +13 -9
  248. package/schema.json +1802 -2068
  249. package/src/api/analyze/providers/shared.ts +3 -2
  250. package/src/api/benchmark/__integration__/__fixtures__/tramvai.json +1 -8
  251. package/src/api/benchmark/index.ts +1 -1
  252. package/src/api/build/__integration__/__fixtures__/app/App.tsx +0 -1
  253. package/src/api/build/__integration__/__fixtures__/app/index.tsx +14 -8
  254. package/src/api/build/__integration__/__fixtures__/app/server.tsx +0 -1
  255. package/src/api/build/__integration__/__fixtures__/tramvai.json +1 -10
  256. package/src/api/build/__integration__/build.test.ts +4 -13
  257. package/src/api/build/child-app.ts +4 -4
  258. package/src/api/build/module.ts +2 -4
  259. package/src/api/build/providers/shared.ts +2 -2
  260. package/src/api/index.ts +6 -2
  261. package/src/api/shared/types/withConfig.ts +5 -6
  262. package/src/api/start/__integration__/__fixtures__/app/index.tsx +11 -7
  263. package/src/api/start/__integration__/__fixtures__/tramvai.json +6 -17
  264. package/src/api/start/__integration__/start.test.ts +1 -12
  265. package/src/api/start/providers/application/shared.ts +2 -2
  266. package/src/api/start/providers/child-app/shared.ts +9 -14
  267. package/src/api/start/providers/module/shared.ts +19 -30
  268. package/src/api/start/utils/banner.ts +3 -2
  269. package/src/api/start/utils/tips/tips.ts +11 -8
  270. package/src/api/start-prod/providers/application.ts +10 -14
  271. package/src/api/start-prod/providers/child-app.ts +4 -5
  272. package/src/api/start-prod/providers/shared.ts +4 -8
  273. package/src/builder/webpack/devServer/client.ts +22 -15
  274. package/src/builder/webpack/devServer/notifier.ts +6 -6
  275. package/src/builder/webpack/devServer/pool/process/pool.ts +3 -3
  276. package/src/builder/webpack/devServer/pool/thread/pool.ts +7 -0
  277. package/src/builder/webpack/devServer/server.ts +13 -6
  278. package/src/builder/webpack/providers/analyze/shared.ts +3 -2
  279. package/src/builder/webpack/providers/build/application/server.ts +5 -1
  280. package/src/builder/webpack/providers/build/client.ts +3 -2
  281. package/src/builder/webpack/providers/build/server.ts +1 -1
  282. package/src/builder/webpack/tokens.ts +4 -3
  283. package/src/builder/webpack/utils/copyBuildFile.ts +4 -5
  284. package/src/builder/webpack/utils/copyStatsJsonFile.ts +5 -2
  285. package/src/cli/CLI.ts +6 -6
  286. package/src/cli/index.ts +1 -1
  287. package/src/commands/analyze/command.ts +1 -1
  288. package/src/commands/benchmark/command.ts +1 -1
  289. package/src/commands/build/command.ts +2 -2
  290. package/src/commands/new/new.ts +0 -1
  291. package/src/commands/new/questions/packageManager.ts +1 -1
  292. package/src/commands/new/questions/template.ts +1 -1
  293. package/src/commands/new/questions/testingFramework.ts +1 -1
  294. package/src/commands/new/questions/type.ts +1 -1
  295. package/src/commands/new/steps/initializationGit.ts +1 -1
  296. package/src/commands/new/templates/app/monorepo/tramvai.json.hbs +6 -32
  297. package/src/commands/new/templates/app/multirepo/tramvai.json.hbs +6 -23
  298. package/src/commands/new/templates/child-app/monorepo/tramvai.json.hbs +3 -18
  299. package/src/commands/new/templates/child-app/multirepo/tramvai.json.hbs +3 -9
  300. package/src/commands/start/command.ts +2 -2
  301. package/src/commands/start-prod/command.ts +2 -2
  302. package/src/commands/static/application.ts +5 -14
  303. package/src/commands/static/command.ts +1 -1
  304. package/src/commands/static/generate.ts +2 -2
  305. package/src/commands/static/server.ts +5 -2
  306. package/src/commands/static/staticServer.ts +6 -3
  307. package/src/commands/update/updatePackageJson.ts +6 -2
  308. package/src/config/configManager.spec.ts +49 -0
  309. package/src/config/configManager.ts +123 -197
  310. package/src/config/showConfig.ts +2 -2
  311. package/src/config/validate.ts +14 -25
  312. package/src/di/tokens/config.ts +2 -1
  313. package/src/library/babel/index.ts +1 -0
  314. package/src/library/swc/__integration__/swc.build.test.ts +3 -21
  315. package/src/library/swc/__integration__/swc.start.test.ts +3 -21
  316. package/src/library/swc/index.ts +1 -1
  317. package/src/library/webpack/application/client/common.ts +7 -7
  318. package/src/library/webpack/application/client/dev.ts +9 -9
  319. package/src/library/webpack/application/client/prod/optimization/splitChunks.ts +43 -44
  320. package/src/library/webpack/application/client/prod.ts +3 -5
  321. package/src/library/webpack/application/server/common.ts +5 -8
  322. package/src/library/webpack/application/server/dev.ts +5 -6
  323. package/src/library/webpack/application/server/prod.ts +3 -9
  324. package/src/library/webpack/blocks/apiResolve.ts +1 -1
  325. package/src/library/webpack/blocks/configResolve.ts +2 -2
  326. package/src/library/webpack/blocks/configToEnv.ts +5 -2
  327. package/src/library/webpack/blocks/css.ts +26 -17
  328. package/src/library/webpack/blocks/extractCssPlugin.ts +11 -10
  329. package/src/library/webpack/blocks/filesClient.ts +52 -50
  330. package/src/library/webpack/blocks/filesServer.ts +4 -3
  331. package/src/library/webpack/blocks/js.ts +3 -2
  332. package/src/library/webpack/blocks/nodeClient.ts +4 -3
  333. package/src/library/webpack/blocks/optimize.ts +5 -6
  334. package/src/library/webpack/blocks/pagesResolve.ts +1 -1
  335. package/src/library/webpack/blocks/postcssAssets.ts +6 -7
  336. package/src/library/webpack/blocks/serverInline.ts +2 -1
  337. package/src/library/webpack/blocks/ts.ts +2 -1
  338. package/src/library/webpack/child-app/client/common.ts +3 -3
  339. package/src/library/webpack/child-app/client/dev.ts +8 -8
  340. package/src/library/webpack/child-app/client/prod.ts +2 -2
  341. package/src/library/webpack/child-app/common.ts +2 -2
  342. package/src/library/webpack/child-app/server/common.ts +3 -3
  343. package/src/library/webpack/child-app/server/dev.ts +2 -2
  344. package/src/library/webpack/child-app/server/prod.ts +2 -2
  345. package/src/library/webpack/common/client/prod.ts +10 -6
  346. package/src/library/webpack/common/main.ts +9 -4
  347. package/src/library/webpack/common/server/prod.ts +10 -6
  348. package/src/library/webpack/index.ts +2 -3
  349. package/src/library/webpack/loaders/image-loader/index.ts +2 -1
  350. package/src/library/webpack/loaders/pagesResolve.ts +17 -5
  351. package/src/library/webpack/loaders/replaceContent.ts +11 -2
  352. package/src/library/webpack/module/client/common.ts +1 -1
  353. package/src/library/webpack/module/externals.ts +1 -1
  354. package/src/library/webpack/module/resolveExternal.ts +1 -1
  355. package/src/library/webpack/module/server/common.ts +1 -1
  356. package/src/library/webpack/plugins/LazyModuleInitialization.ts +6 -1
  357. package/src/library/webpack/plugins/WebpackBar/utils/index.ts +8 -8
  358. package/src/library/webpack/plugins/WebpackBar/utils/webpack.ts +1 -1
  359. package/src/library/webpack/types/webpack.ts +2 -2
  360. package/src/library/webpack/utils/files.ts +4 -3
  361. package/src/library/webpack/utils/transpiler.ts +6 -11
  362. package/src/library/webpack/utils/workersPool.ts +6 -9
  363. package/src/models/config.spec.ts +352 -0
  364. package/src/models/config.ts +41 -9
  365. package/src/schema/ConfigSchema.ts +15 -4
  366. package/src/schema/autogeneratedSchema.json +1808 -2074
  367. package/src/schema/tramvai.spec.ts +89 -184
  368. package/src/typings/configEntry/application.ts +85 -87
  369. package/src/typings/configEntry/child-app.ts +10 -30
  370. package/src/typings/configEntry/cli.ts +271 -0
  371. package/src/typings/configEntry/common.ts +26 -278
  372. package/src/typings/configEntry/module.ts +11 -30
  373. package/src/typings/configEntry/package.ts +3 -1
  374. package/src/ui/commander.ts +1 -1
  375. package/src/utils/applyTemplate.ts +2 -2
  376. package/src/utils/safeRequire.ts +6 -1
  377. package/src/utils/webpackBuild.ts +4 -3
  378. package/lib/library/webpack/plugins/DedupePlugin/DedupePlugin.d.ts +0 -37
  379. package/lib/library/webpack/plugins/DedupePlugin/DedupePlugin.js +0 -241
  380. package/lib/library/webpack/plugins/DedupePlugin/DedupePlugin.js.map +0 -1
  381. package/lib/library/webpack/plugins/DedupePlugin/index.d.ts +0 -1
  382. package/lib/library/webpack/plugins/DedupePlugin/index.js +0 -6
  383. package/lib/library/webpack/plugins/DedupePlugin/index.js.map +0 -1
  384. package/lib/typings/configEntry/CheckAsyncTsConfig.d.ts +0 -13
  385. package/lib/typings/configEntry/CheckAsyncTsConfig.js.map +0 -1
  386. package/src/library/webpack/plugins/DedupePlugin/DedupePlugin.spec.ts +0 -95
  387. package/src/library/webpack/plugins/DedupePlugin/DedupePlugin.ts +0 -307
  388. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/index.js +0 -3
  389. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/node_modules/package-dep/index.js +0 -1
  390. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/node_modules/package-dep/package.json +0 -7
  391. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/package.json +0 -7
  392. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/index.js +0 -3
  393. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/node_modules/package-dep/index.js +0 -1
  394. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/node_modules/package-dep/package.json +0 -7
  395. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/package.json +0 -7
  396. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/index.js +0 -3
  397. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/node_modules/package-dep/index.js +0 -1
  398. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/node_modules/package-dep/package.json +0 -7
  399. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/package.json +0 -7
  400. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-dep/index.js +0 -1
  401. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-dep/package.json +0 -7
  402. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/index.js +0 -3
  403. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/node_modules/package-esm-dep/index.js +0 -1
  404. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/node_modules/package-esm-dep/package.json +0 -8
  405. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/package.json +0 -8
  406. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/index.js +0 -3
  407. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/node_modules/package-esm-dep/index.js +0 -1
  408. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/node_modules/package-esm-dep/package.json +0 -8
  409. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/package.json +0 -8
  410. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/package-lock.json +0 -0
  411. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/package.json +0 -14
  412. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/src/index.js +0 -9
  413. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/tramvai.json +0 -67
  414. package/src/library/webpack/plugins/DedupePlugin/__integration__/DedupePlugin.test.ts +0 -90
  415. package/src/library/webpack/plugins/DedupePlugin/index.ts +0 -1
  416. package/src/typings/configEntry/CheckAsyncTsConfig.ts +0 -15
@@ -5,15 +5,9 @@
5
5
  "name": "{{configEntry.name}}",
6
6
  "root": "src",
7
7
  "type": "child-app",
8
- "commands": {
9
- "build": {
10
- "configurations": {
11
- "postcss": {
12
- "config": "src/postcss"
13
- },
14
- }
15
- }
16
- }
8
+ "postcss": {
9
+ "config": "src/postcss"
10
+ },
17
11
  }
18
12
  }
19
13
  }
@@ -83,7 +83,7 @@ export class StartCommand extends CLICommand<Params> {
83
83
  {
84
84
  name: '--rs, --resolveSymlinks',
85
85
  value: '[resolveSymlinks]',
86
- transformer: (value) => value !== 'false',
86
+ transformer: (value: string) => value !== 'false',
87
87
  description:
88
88
  'Pass value to `resolve.symlinks` in webpack (https://webpack.js.org/configuration/resolve/#resolve-symlinks)`',
89
89
  },
@@ -102,7 +102,7 @@ export class StartCommand extends CLICommand<Params> {
102
102
  {
103
103
  name: '--fileCache',
104
104
  value: '[fileCache]',
105
- transformer: (value) => value !== 'false',
105
+ transformer: (value: string) => value !== 'false',
106
106
  description: 'Enable/disable persistent file cache for used cli builder',
107
107
  },
108
108
  {
@@ -34,7 +34,7 @@ export class StartProdCommand extends CLICommand<Params> {
34
34
  {
35
35
  name: '--rs, --resolveSymlinks',
36
36
  value: '[resolveSymlinks]',
37
- transformer: (value) => value !== 'false',
37
+ transformer: (value: string) => value !== 'false',
38
38
  description:
39
39
  'Pass value to `resolve.symlinks` in webpack (https://webpack.js.org/configuration/resolve/#resolve-symlinks)`',
40
40
  },
@@ -76,7 +76,7 @@ export class StartProdCommand extends CLICommand<Params> {
76
76
  {
77
77
  name: '--fileCache',
78
78
  value: '[fileCache]',
79
- transformer: (value) => value !== 'false',
79
+ transformer: (value: string) => value !== 'false',
80
80
  description: 'Enable/disable persistent file cache for used cli builder',
81
81
  },
82
82
  {
@@ -11,7 +11,7 @@ import { webpackServerConfig } from '../../library/webpack/application/server/pr
11
11
  import type { CommandResult } from '../../models/command';
12
12
  import type { ApplicationConfigEntry } from '../../typings/configEntry/application';
13
13
  import type { Params } from './command';
14
- import { ConfigManager } from '../../config/configManager';
14
+ import { createConfigManager } from '../../config/configManager';
15
15
  import { request } from './request';
16
16
  import { generateStatic } from './generate';
17
17
  import { toWebpackConfig } from '../../library/webpack/utils/toWebpackConfig';
@@ -27,7 +27,7 @@ export const staticApp = async (
27
27
  configEntry: ApplicationConfigEntry,
28
28
  options: Params
29
29
  ): Promise<CommandResult> => {
30
- const clientConfigManager = new ConfigManager(configEntry, {
30
+ const clientConfigManager = createConfigManager(configEntry, {
31
31
  env: 'production',
32
32
  ...options,
33
33
  buildType: 'client',
@@ -46,17 +46,8 @@ export const staticApp = async (
46
46
  });
47
47
  }
48
48
 
49
- const {
50
- name,
51
- host,
52
- port,
53
- staticPort,
54
- staticHost,
55
- build: {
56
- options: { outputClient },
57
- },
58
- } = serverConfigManager;
59
- const root = serverConfigManager.getBuildPath();
49
+ const { name, host, port, staticPort, staticHost, output } = serverConfigManager;
50
+ const root = serverConfigManager.buildPath;
60
51
 
61
52
  context.logger.event({
62
53
  type: 'debug',
@@ -76,7 +67,7 @@ export const staticApp = async (
76
67
  PORT_SERVER: `${port}`,
77
68
  ASSETS_PREFIX:
78
69
  process.env.ASSETS_PREFIX ??
79
- `http://${staticHost}:${staticPort}/${outputClient.replace(/\/$/, '')}/`,
70
+ `http://${staticHost}:${staticPort}/${output.client.replace(/\/$/, '')}/`,
80
71
  },
81
72
  });
82
73
 
@@ -44,7 +44,7 @@ export class StaticCommand extends CLICommand<Params> {
44
44
  {
45
45
  name: '--fileCache',
46
46
  value: '[fileCache]',
47
- transformer: (value) => value !== 'false',
47
+ transformer: (value: string) => value !== 'false',
48
48
  description: 'Enable/disable persistent file cache for used cli builder',
49
49
  },
50
50
  {
@@ -17,8 +17,8 @@ export const generateStatic = async (
17
17
  const q = new PQueue(MAX_CONCURRENT);
18
18
  const promises = [];
19
19
 
20
- const { host, port, rootDir, build } = configManager;
21
- const staticPath = resolve(rootDir, build.options.outputStatic);
20
+ const { host, port, rootDir, output } = configManager;
21
+ const staticPath = resolve(rootDir, output.static);
22
22
  const serverPath = `http://${host}:${port}`;
23
23
 
24
24
  for (const path of paths) {
@@ -3,8 +3,11 @@ import express from 'express';
3
3
  import compression from 'compression';
4
4
  import zlib from 'zlib';
5
5
  import type { ConfigManager } from '../../config/configManager';
6
+ import type { ApplicationConfigEntry } from '../../typings/configEntry/application';
6
7
 
7
- export const startServer = (configManager: ConfigManager): Promise<Server> => {
8
+ export const startServer = (
9
+ configManager: ConfigManager<ApplicationConfigEntry>
10
+ ): Promise<Server> => {
8
11
  const { port } = configManager;
9
12
  const app = express();
10
13
 
@@ -22,7 +25,7 @@ export const startServer = (configManager: ConfigManager): Promise<Server> => {
22
25
  next();
23
26
  });
24
27
 
25
- app.use('/', express.static(configManager.build.options.outputStatic));
28
+ app.use('/', express.static(configManager.output.static));
26
29
 
27
30
  return new Promise((resolve) => {
28
31
  const server = app.listen(port, () => {
@@ -3,8 +3,11 @@ import express from 'express';
3
3
  import compression from 'compression';
4
4
  import zlib from 'zlib';
5
5
  import type { ConfigManager } from '../../config/configManager';
6
+ import type { ApplicationConfigEntry } from '../../typings/configEntry/application';
6
7
 
7
- export const startStaticServer = (configManager: ConfigManager): Promise<Server> => {
8
+ export const startStaticServer = (
9
+ configManager: ConfigManager<ApplicationConfigEntry>
10
+ ): Promise<Server> => {
8
11
  const { staticHost, staticPort } = configManager;
9
12
  const app = express();
10
13
 
@@ -23,8 +26,8 @@ export const startStaticServer = (configManager: ConfigManager): Promise<Server>
23
26
  });
24
27
 
25
28
  app.use(
26
- `/${configManager.build.options.outputClient.replace(/\/$/, '')}/`,
27
- express.static(configManager.getBuildPath())
29
+ `/${configManager.output.client.replace(/\/$/, '')}/`,
30
+ express.static(configManager.buildPath)
28
31
  );
29
32
 
30
33
  return new Promise((resolve) => {
@@ -8,14 +8,14 @@ const isUnifiedVersion = (name: string) => {
8
8
  return name.startsWith('@tramvai');
9
9
  };
10
10
 
11
- const getVersionFromDep = (dep) => parse(dep)?.version || minVersion(dep)?.version;
11
+ const getVersionFromDep = (dep: string) => parse(dep)?.version || minVersion(dep)?.version;
12
12
 
13
13
  const updateEntry = async (
14
14
  deps: Record<string, any>,
15
15
  dep: string,
16
16
  { currentVersion, version }: { currentVersion: string; version: string }
17
17
  ) => {
18
- let nextVersion: string;
18
+ let nextVersion: string | undefined;
19
19
 
20
20
  if (isUnifiedVersion(dep) && getVersionFromDep(deps[dep]) === currentVersion) {
21
21
  nextVersion = version;
@@ -66,6 +66,10 @@ export const updatePackageJson = async (version: string) => {
66
66
  const content = JSON.parse(file.toString());
67
67
  const currentVersion = getVersionFromDep(content.dependencies['@tramvai/core']);
68
68
 
69
+ if (!currentVersion) {
70
+ throw new Error("Couldn't resolve current tramvai version");
71
+ }
72
+
69
73
  if (currentVersion === version) {
70
74
  console.error('The installed version is equal to the current version, no update is required.');
71
75
  process.exit(0);
@@ -0,0 +1,49 @@
1
+ import type { ConfigEntry } from '../typings/configEntry/common';
2
+ import { createConfigManager } from './configManager';
3
+
4
+ jest.mock('./validate', () => {
5
+ const original = jest.requireActual('./validate');
6
+
7
+ return { ...original, validate: () => true };
8
+ });
9
+
10
+ const configEntry: ConfigEntry & Record<string, any> = {
11
+ name: 'test',
12
+ root: 'src',
13
+ type: 'package',
14
+ optionBoolean: false,
15
+ optionString: 'str',
16
+ optionOverride: {
17
+ development: '123',
18
+ production: '456',
19
+ },
20
+ } as const;
21
+
22
+ it('should pass configEntry options', () => {
23
+ const configManager = createConfigManager(configEntry, {});
24
+
25
+ expect(configManager.optionBoolean).toBe(false);
26
+ expect(configManager.optionString).toBe('str');
27
+ });
28
+
29
+ describe('should resolve settings depending on env', () => {
30
+ it('development', () => {
31
+ const configManager = createConfigManager(configEntry, { env: 'development' });
32
+
33
+ expect(configManager.optionOverride).toEqual('123');
34
+ });
35
+
36
+ it('production', () => {
37
+ const configManager = createConfigManager(configEntry, { env: 'production' });
38
+
39
+ expect(configManager.optionOverride).toBe('456');
40
+ });
41
+ });
42
+
43
+ it('hydration', () => {
44
+ const configManager = createConfigManager(configEntry, {});
45
+
46
+ const rehydrated = createConfigManager(...configManager.dehydrate());
47
+
48
+ expect(JSON.stringify(rehydrated)).toEqual(JSON.stringify(configManager));
49
+ });
@@ -1,16 +1,20 @@
1
1
  import isNil from '@tinkoff/utils/is/nil';
2
+ import isArray from '@tinkoff/utils/is/array';
3
+ import isObject from '@tinkoff/utils/is/object';
2
4
  import prop from '@tinkoff/utils/object/prop';
5
+ import mapObj from '@tinkoff/utils/object/map';
3
6
  import { resolve } from 'path';
4
- import type { ProjectType, BuildType } from '../typings/projectType';
7
+ import type { BuildType } from '../typings/projectType';
5
8
  import type { Env } from '../typings/Env';
6
- import type { ConfigEntry } from '../typings/configEntry/common';
7
- import { validate } from './validate';
9
+ import type { ConfigEntry, OverridableOption } from '../typings/configEntry/common';
10
+ import { isOverridableOption } from '../typings/configEntry/common';
11
+ import { isApplication, isChildApp, isModule, validate } from './validate';
8
12
  import moduleVersion from '../utils/moduleVersion';
9
13
  import { packageVersion } from '../utils/packageVersion';
10
- import type { DeduplicateStrategy } from '../library/webpack/plugins/DedupePlugin';
11
14
  import { showConfig } from './showConfig';
12
15
  import type { Target } from '../typings/target';
13
16
 
17
+ // @TODO: maybe split settings depending on env?
14
18
  export interface Settings<E extends Env> {
15
19
  env?: E;
16
20
  rootDir?: string;
@@ -18,7 +22,6 @@ export interface Settings<E extends Env> {
18
22
  buildType?: BuildType;
19
23
  debug?: boolean;
20
24
  trace?: boolean;
21
- removeTypeofWindow?: boolean;
22
25
  sourceMap?: boolean;
23
26
  host?: string;
24
27
  port?: number;
@@ -37,7 +40,7 @@ export interface Settings<E extends Env> {
37
40
  csr?: boolean;
38
41
  }
39
42
 
40
- const getOption = <T>(optionName: string, cfgs: any[], dflt?: T): T => {
43
+ const getOption = <T>(optionName: string, cfgs: any[], dflt: T): T => {
41
44
  const getter = prop(optionName);
42
45
 
43
46
  for (let i = 0; i < cfgs.length; i++) {
@@ -51,207 +54,130 @@ const getOption = <T>(optionName: string, cfgs: any[], dflt?: T): T => {
51
54
  return dflt;
52
55
  };
53
56
 
54
- export class ConfigManager<T extends ConfigEntry = ConfigEntry, E extends Env = any>
55
- implements Required<Settings<E>>
56
- {
57
- private configEntry: T;
58
-
59
- public name: string;
60
-
61
- public type: ProjectType;
62
-
63
- public root: string;
64
-
65
- public build: T['commands']['build'];
66
-
67
- public serve: T['commands']['serve'];
68
-
69
- private settings: Settings<E>;
70
-
71
- public version: string;
72
-
73
- public env: E;
74
-
75
- public buildType: BuildType;
76
-
77
- public rootDir: string;
78
-
79
- public debug: boolean;
80
-
81
- public trace: boolean;
82
-
83
- public sourceMap: boolean;
84
-
85
- public host: string;
86
-
87
- public port: number;
88
-
89
- public staticHost: string;
90
-
91
- public staticPort: number;
92
-
93
- public profile: boolean;
94
-
95
- public noServerRebuild: boolean;
96
-
97
- public noClientRebuild: boolean;
98
-
99
- public modern: boolean;
100
-
101
- public dedupe: DeduplicateStrategy | false;
102
-
103
- public dedupeIgnore?: RegExp[];
104
-
105
- public removeTypeofWindow: boolean;
106
-
107
- public resolveSymlinks: boolean;
108
-
109
- public hotRefresh: boolean;
110
-
111
- public disableProdOptimization: boolean;
112
-
113
- public target: Target;
114
-
115
- public fileCache: boolean;
116
-
117
- public experiments: T['commands'][E extends 'development'
118
- ? 'serve'
119
- : 'build']['configurations']['experiments'];
120
-
121
- public showConfig: boolean;
122
-
123
- public csr: boolean;
124
-
125
- // eslint-disable-next-line complexity,max-statements
126
- constructor(configEntry: T, settings: Settings<E>) {
127
- this.configEntry = configEntry;
128
- this.name = configEntry.name;
129
- this.type = configEntry.type;
130
- this.root = configEntry.root;
131
- this.build = configEntry.commands.build || {};
132
- this.serve = configEntry.commands.serve || {};
133
-
134
- this.settings = settings;
135
- this.env = settings.env || ('development' as E);
136
- this.rootDir = settings.rootDir || process.cwd();
137
- this.version =
138
- settings.version ||
139
- (this.type === 'module' ? moduleVersion(configEntry) : '') ||
140
- (this.type === 'child-app' ? packageVersion(configEntry, this.env, this.rootDir) : '');
141
- this.buildType = settings.buildType || 'client';
142
- this.debug = settings.debug || false;
143
- this.trace = settings.trace || false;
144
- this.sourceMap =
145
- this.buildType === 'server' && this.debug
146
- ? true
147
- : getOption(
148
- 'sourceMap',
149
- [
150
- settings,
151
- this.env === 'development' ? this.serve.configurations : this.build.configurations,
152
- ],
153
- false
154
- );
155
- this.host = settings.host || '0.0.0.0';
156
- this.port = Number(settings.port ?? 3000);
157
- this.staticHost = settings.staticHost || 'localhost';
158
- this.staticPort = Number(settings.staticPort ?? (this.type === 'module' ? 4040 : 4000));
159
- this.profile = settings.profile || false;
160
- this.noServerRebuild = settings.noServerRebuild || false;
161
- this.noClientRebuild = settings.noClientRebuild || false;
162
- this.modern = getOption(
163
- 'modern',
164
- [
165
- settings,
166
- this.env === 'development' ? this.serve.configurations : this.build.configurations,
167
- ],
168
- true
169
- );
170
- this.dedupe = this.build.configurations?.dedupe;
171
- this.dedupeIgnore = this.build.configurations?.dedupeIgnore?.map(
172
- (ignore) => new RegExp(`^${ignore}`)
173
- );
174
- this.removeTypeofWindow = this.build.configurations?.removeTypeofWindow;
175
- this.resolveSymlinks = settings.resolveSymlinks ?? true;
176
- this.hotRefresh = this.env === 'development' && this.serve.configurations?.hotRefresh;
177
- this.disableProdOptimization = settings.disableProdOptimization ?? false;
178
- this.onlyBundles = settings.onlyBundles;
179
- this.target = this.resolveTarget();
180
- // according to measures fileCache in webpack doesn't affect
181
- // performance much so enable it by default as it always was before
182
- this.fileCache = settings.fileCache ?? true;
183
- this.experiments =
184
- (this.env === 'development'
185
- ? this.serve.configurations?.experiments
186
- : this.build.configurations?.experiments) ?? {};
187
- this.showConfig = settings.showConfig ?? false;
188
- this.csr = settings.csr ?? false;
57
+ type OmitOverridable<T extends Record<string, any>> = {
58
+ [key in keyof T]: T[key] extends OverridableOption<infer U>
59
+ ? U
60
+ : T[key] extends Record<string, any>
61
+ ? OmitOverridable<T[key]>
62
+ : T[key];
63
+ };
189
64
 
190
- if (this.showConfig) {
191
- showConfig(this);
65
+ const omitEnvOptions = <T extends Record<string, any>>(
66
+ env: Env,
67
+ options: T
68
+ ): OmitOverridable<T> => {
69
+ return mapObj((value) => {
70
+ if (isOverridableOption(value)) {
71
+ return value[env];
192
72
  }
193
73
 
194
- validate(this);
195
- }
196
-
197
- public onlyBundles: string[];
198
-
199
- getBuildPath() {
200
- switch (this.type) {
201
- case 'application':
202
- return resolve(
203
- this.rootDir,
204
- this.buildType === 'server'
205
- ? this.build.options.outputServer
206
- : this.build.options.outputClient
207
- );
208
- case 'module':
209
- return resolve(
210
- this.rootDir,
211
- ...this.build.options.output.split('/'),
212
- this.name,
213
- this.version
214
- );
215
- case 'child-app':
216
- return resolve(this.rootDir, ...this.build.options.output.split('/'));
74
+ if (isObject(value) && !isArray(value)) {
75
+ return omitEnvOptions(env, value);
217
76
  }
218
77
 
219
- throw new Error('projectType not supported');
220
- }
78
+ return value;
79
+ }, options);
80
+ };
221
81
 
222
- withSettings(settings: Settings<E>) {
223
- return new ConfigManager(this.configEntry, {
224
- ...this.settings,
225
- ...settings,
226
- });
82
+ export type ConfigManager<
83
+ C extends ConfigEntry = ConfigEntry,
84
+ E extends Env = Env
85
+ > = OmitOverridable<C> &
86
+ Required<Settings<E>> & {
87
+ target: Target;
88
+ buildPath: string;
89
+ withSettings(settings: Settings<E>): ConfigManager<C, E>;
90
+ dehydrate(): [C, Settings<E>];
91
+ };
92
+
93
+ export const createConfigManager = <C extends ConfigEntry = ConfigEntry, E extends Env = Env>(
94
+ configEntry: C,
95
+ settings: Settings<E>
96
+ ): ConfigManager<C, E> => {
97
+ const env: E = settings.env ?? ('development' as E);
98
+ const normalizedConfigEntry = omitEnvOptions(env, configEntry);
99
+
100
+ const { type } = configEntry;
101
+ const rootDir = settings.rootDir ?? process.cwd();
102
+ const debug = settings.debug ?? false;
103
+ const modern = getOption('modern', [settings, configEntry], true);
104
+ const buildType = settings.buildType ?? 'client';
105
+ let target: Target = 'defaults';
106
+
107
+ if (buildType === 'server') {
108
+ target = 'node';
109
+ } else if (modern) {
110
+ target = 'modern';
227
111
  }
228
112
 
229
- dehydrate() {
230
- return {
231
- configEntry: this.configEntry,
232
- settings: {
233
- ...this.settings,
234
- rootDir: this.rootDir,
235
- // drop options that couldn't be serialized
236
- stdout: undefined,
237
- stderr: undefined,
238
- },
239
- };
113
+ const config: ConfigManager<C, E> = {
114
+ ...normalizedConfigEntry,
115
+ version:
116
+ (type === 'module' ? moduleVersion(configEntry) : '') ||
117
+ (type === 'child-app' ? packageVersion(configEntry, env, rootDir) : ''),
118
+ trace: false,
119
+ host: '0.0.0.0',
120
+ staticHost: 'localhost',
121
+ profile: false,
122
+ noClientRebuild: false,
123
+ noServerRebuild: false,
124
+ resolveSymlinks: true,
125
+ disableProdOptimization: false,
126
+ onlyBundles: [],
127
+ // according to measures fileCache in webpack doesn't affect
128
+ // performance much so enable it by default as it always was before
129
+ fileCache: true,
130
+ showConfig: false,
131
+ csr: false,
132
+ ...settings,
133
+ env,
134
+ rootDir,
135
+ buildType,
136
+ debug,
137
+ port: Number(settings.port ?? 3000),
138
+ staticPort: Number(settings.staticPort ?? (type === 'module' ? 4040 : 4000)),
139
+ modern,
140
+ sourceMap:
141
+ buildType === 'server' && debug
142
+ ? true
143
+ : getOption('sourceMap', [settings, normalizedConfigEntry], false),
144
+ target,
145
+ buildPath: '',
146
+ withSettings(overrideSettings) {
147
+ return createConfigManager(configEntry, {
148
+ ...settings,
149
+ ...overrideSettings,
150
+ });
151
+ },
152
+ dehydrate() {
153
+ return [
154
+ configEntry,
155
+ {
156
+ ...settings,
157
+ // drop options that couldn't be serialized
158
+ stdout: undefined,
159
+ stderr: undefined,
160
+ },
161
+ ];
162
+ },
163
+ };
164
+
165
+ if (isApplication(config)) {
166
+ config.buildPath = resolve(
167
+ rootDir,
168
+ buildType === 'server' ? config.output.server : config.output.client
169
+ );
170
+ } else if (isChildApp(config)) {
171
+ config.buildPath = resolve(rootDir, ...config.output.split('/'));
172
+ } else if (isModule(config)) {
173
+ config.buildPath = resolve(rootDir, ...config.output.split('/'), config.name, config.version);
240
174
  }
241
175
 
242
- static rehydrate(state: ReturnType<ConfigManager['dehydrate']>) {
243
- return new ConfigManager(state.configEntry, state.settings);
176
+ if (config.showConfig) {
177
+ showConfig(config);
244
178
  }
245
179
 
246
- private resolveTarget(): Target {
247
- if (this.buildType === 'server') {
248
- return 'node';
249
- }
250
-
251
- if (this.modern) {
252
- return 'modern';
253
- }
180
+ validate(config);
254
181
 
255
- return 'defaults';
256
- }
257
- }
182
+ return config;
183
+ };
@@ -4,8 +4,8 @@ import chalk from 'chalk';
4
4
  import type { ConfigManager } from './configManager';
5
5
  import { box } from '../utils/formatting';
6
6
 
7
- export const showConfig = (configManager: ConfigManager) => {
8
- const configStr = prettyoutput(omit(['configEntry'], configManager), {
7
+ export const showConfig = (configManager: ConfigManager<any, any>) => {
8
+ const configStr = prettyoutput(omit(['options'], configManager), {
9
9
  hideUndefined: true,
10
10
  maxDepth: Infinity,
11
11
  });