@tramvai/cli 2.64.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
@@ -3,24 +3,25 @@ import { sync as requireResolve } from 'resolve';
3
3
  import type { ConfigManager } from './configManager';
4
4
  import type { ApplicationConfigEntry } from '../typings/configEntry/application';
5
5
  import type { ModuleConfigEntry } from '../typings/configEntry/module';
6
- import { extensions } from './constants';
7
6
  import type { ChildAppConfigEntry } from '../typings/configEntry/child-app';
7
+ import { extensions } from './constants';
8
+ import type { Env } from '../typings/Env';
8
9
 
9
- export const isApplication = (
10
- configManager: ConfigManager
11
- ): configManager is ConfigManager<ApplicationConfigEntry> => {
10
+ export const isApplication = <E extends Env>(
11
+ configManager: ConfigManager<any, E>
12
+ ): configManager is ConfigManager<ApplicationConfigEntry, E> => {
12
13
  return configManager.type === 'application';
13
14
  };
14
15
 
15
- export const isModule = (
16
- configManager: ConfigManager
17
- ): configManager is ConfigManager<ModuleConfigEntry> => {
16
+ export const isModule = <E extends Env>(
17
+ configManager: ConfigManager<any, E>
18
+ ): configManager is ConfigManager<ModuleConfigEntry, E> => {
18
19
  return configManager.type === 'module';
19
20
  };
20
21
 
21
- export const isChildApp = (
22
- configManager: ConfigManager
23
- ): configManager is ConfigManager<ChildAppConfigEntry> => {
22
+ export const isChildApp = <E extends Env>(
23
+ configManager: ConfigManager<any, E>
24
+ ): configManager is ConfigManager<ChildAppConfigEntry, E> => {
24
25
  return configManager.type === 'child-app';
25
26
  };
26
27
 
@@ -28,7 +29,7 @@ const throwErrorMissing = (config: string, path: string) => {
28
29
  throw new Error(`Can not resolve '${path}', check your configuration: '${config}'`);
29
30
  };
30
31
 
31
- export const validate = (configManager: ConfigManager) => {
32
+ export const validate = (configManager: ConfigManager<any, any>) => {
32
33
  const { rootDir } = configManager;
33
34
 
34
35
  const isMissing = (path: string) => {
@@ -43,27 +44,15 @@ export const validate = (configManager: ConfigManager) => {
43
44
  };
44
45
 
45
46
  if (isApplication(configManager)) {
46
- const {
47
- root,
48
- buildType,
49
- build: { options },
50
- } = configManager;
47
+ const { root, buildType, polyfill } = configManager;
51
48
 
52
49
  if (buildType === 'client') {
53
- const { polyfill } = options;
54
-
55
50
  if (isMissing(root)) {
56
51
  throwErrorMissing('root', `${root}/index`);
57
52
  }
58
53
 
59
54
  if (polyfill && isMissing(polyfill)) {
60
- throwErrorMissing('commands.build.options.polyfill', polyfill);
61
- }
62
- } else {
63
- const { server } = options;
64
-
65
- if (isMissing(server)) {
66
- throwErrorMissing('commands.build.options.server', server);
55
+ throwErrorMissing('polyfill', polyfill);
67
56
  }
68
57
  }
69
58
  } else if (isModule(configManager)) {
@@ -2,10 +2,11 @@ import { createToken } from '@tinkoff/dippy';
2
2
  import type { ConfigEntry } from '../../typings/configEntry/common';
3
3
  import type { ConfigManager } from '../../config/configManager';
4
4
  import type { Env } from '../../typings/Env';
5
+ import type { CliConfigEntry } from '../../typings/configEntry/cli';
5
6
 
6
7
  export const CLI_ROOT_DIR_TOKEN = createToken<string>('cli rootDir');
7
8
  export const CONFIG_ROOT_DIR_TOKEN = createToken<string>('config rootDir');
8
9
 
9
10
  export const CONFIG_ENV_TOKEN = createToken<Env>('config env');
10
11
  export const CONFIG_ENTRY_TOKEN = createToken<ConfigEntry>('config entry');
11
- export const CONFIG_MANAGER_TOKEN = createToken<ConfigManager>('config manager');
12
+ export const CONFIG_MANAGER_TOKEN = createToken<ConfigManager<CliConfigEntry>>('config manager');
@@ -144,6 +144,7 @@ export const babelConfigFactory = ({
144
144
  ],
145
145
  tramvai && env === 'development' && path.resolve(__dirname, './plugins/provider-stack'),
146
146
  !isServer &&
147
+ env === 'development' &&
147
148
  hot && ['react-refresh/babel', { skipEnvCheck: process.env.NODE_ENV === 'test' }],
148
149
  ]
149
150
  .concat(cfg.plugins || [])
@@ -26,27 +26,9 @@ beforeAll(async () => {
26
26
  name: 'swc-app',
27
27
  type: 'application',
28
28
  root: './',
29
- commands: {
30
- build: {
31
- options: {
32
- server: 'index.ts',
33
- },
34
- configurations: {
35
- experiments: {
36
- transpilation: {
37
- loader: 'swc',
38
- },
39
- },
40
- },
41
- },
42
- serve: {
43
- configurations: {
44
- experiments: {
45
- transpilation: {
46
- loader: 'swc',
47
- },
48
- },
49
- },
29
+ experiments: {
30
+ transpilation: {
31
+ loader: 'swc',
50
32
  },
51
33
  },
52
34
  },
@@ -37,27 +37,9 @@ beforeAll(async () => {
37
37
  name: 'swc-app',
38
38
  type: 'application',
39
39
  root: './',
40
- commands: {
41
- build: {
42
- options: {
43
- server: 'index.ts',
44
- },
45
- configurations: {
46
- experiments: {
47
- transpilation: {
48
- loader: 'swc',
49
- },
50
- },
51
- },
52
- },
53
- serve: {
54
- configurations: {
55
- experiments: {
56
- transpilation: {
57
- loader: 'swc',
58
- },
59
- },
60
- },
40
+ experiments: {
41
+ transpilation: {
42
+ loader: 'swc',
61
43
  },
62
44
  },
63
45
  },
@@ -123,7 +123,7 @@ Having swc config may conflict with @tramvai/cli configuration`
123
123
  react: {
124
124
  runtime: hasJsxRuntime() ? 'automatic' : 'classic',
125
125
  development: env === 'development',
126
- refresh: hot && !isServer,
126
+ refresh: hot && env === 'development' && !isServer,
127
127
  },
128
128
  optimizer: {
129
129
  globals: {
@@ -18,12 +18,10 @@ import nodeClient from '../../blocks/nodeClient';
18
18
  import { pagesResolve } from '../../blocks/pagesResolve';
19
19
  import { DEFAULT_STATS_OPTIONS, DEFAULT_STATS_FIELDS } from '../../constants/stats';
20
20
  import { configToEnv } from '../../blocks/configToEnv';
21
+ import { safeRequireResolve } from '../../../../utils/safeRequire';
21
22
 
22
23
  export default (configManager: ConfigManager<ApplicationConfigEntry>) => (config: Config) => {
23
- const {
24
- options: { polyfill = '' } = {},
25
- configurations: { fileSystemPages },
26
- } = configManager.build;
24
+ const { polyfill, fileSystemPages } = configManager;
27
25
 
28
26
  config.name('client');
29
27
 
@@ -31,7 +29,7 @@ export default (configManager: ConfigManager<ApplicationConfigEntry>) => (config
31
29
  config.batch(commonApplication(configManager));
32
30
  config.batch(files(configManager));
33
31
 
34
- if (fileSystemPages.enable) {
32
+ if (fileSystemPages.enabled) {
35
33
  config.batch(pagesResolve(configManager));
36
34
  }
37
35
 
@@ -56,8 +54,10 @@ export default (configManager: ConfigManager<ApplicationConfigEntry>) => (config
56
54
  ])
57
55
  .end();
58
56
 
59
- if (polyfill) {
60
- config.entry('polyfill').add(path.resolve(configManager.rootDir, polyfill));
57
+ const polyfillPath = path.resolve(configManager.rootDir, polyfill ?? 'src/polyfill');
58
+
59
+ if (safeRequireResolve(polyfillPath, typeof polyfill === 'undefined')) {
60
+ config.entry('polyfill').add(polyfillPath);
61
61
  }
62
62
 
63
63
  const statsFileName = configManager.modern ? 'stats.modern.json' : 'stats.json';
@@ -57,11 +57,11 @@ export const webpackClientConfig = ({
57
57
  }
58
58
 
59
59
  config.output
60
- .path(configManager.getBuildPath())
60
+ .path(configManager.buildPath)
61
61
  .publicPath(
62
62
  `http://${configManager.staticHost}:${
63
63
  configManager.staticPort
64
- }/${configManager.build.options.outputClient.replace(/\/$/, '')}/`
64
+ }/${configManager.output.client.replace(/\/$/, '')}/`
65
65
  )
66
66
  .filename('[name].js')
67
67
  .chunkFilename('[name].chunk.js')
@@ -88,7 +88,7 @@ export const webpackClientConfig = ({
88
88
  }
89
89
  }
90
90
 
91
- const { checkAsyncTs } = configManager.build.configurations;
91
+ const { checkAsyncTs } = configManager;
92
92
 
93
93
  if (checkAsyncTs) {
94
94
  const additionalOptions = isObject(checkAsyncTs) ? checkAsyncTs.pluginOptions || {} : {};
@@ -129,9 +129,9 @@ export const webpackClientConfig = ({
129
129
  },
130
130
  ]);
131
131
 
132
- if (configManager.hotRefresh) {
133
- const { configurations: { hotRefreshOptions = {} } = {} } = configManager.serve;
132
+ const { hotRefresh } = configManager;
134
133
 
134
+ if (hotRefresh?.enabled) {
135
135
  const splitChunks: SplitChunksOptions = {
136
136
  cacheGroups: {
137
137
  default: false,
@@ -156,12 +156,12 @@ export const webpackClientConfig = ({
156
156
  config.plugin('hot-module').use(webpack.HotModuleReplacementPlugin);
157
157
  config.plugin('react-refresh').use(ReactRefreshPlugin, [
158
158
  {
159
- ...hotRefreshOptions,
159
+ ...hotRefresh.options,
160
160
  overlay:
161
- typeof hotRefreshOptions.overlay === 'boolean'
162
- ? hotRefreshOptions.overlay
161
+ typeof hotRefresh.options?.overlay === 'boolean'
162
+ ? hotRefresh.options.overlay
163
163
  : {
164
- ...hotRefreshOptions.overlay,
164
+ ...hotRefresh.options?.overlay,
165
165
  },
166
166
  },
167
167
  ]);
@@ -57,14 +57,11 @@ const resolveFrameworksPaths = (rootDir: string, frameworksList: string[]) => {
57
57
  // eslint-disable-next-line max-statements
58
58
  export const splitChunksConfig =
59
59
  (configManager: ConfigManager<ApplicationConfigEntry>) => (config: Config) => {
60
- const {
61
- rootDir,
62
- build: { configurations },
63
- } = configManager;
60
+ const { rootDir, splitChunks } = configManager;
64
61
 
65
62
  const topLevelFrameworkPaths = resolveFrameworksPaths(rootDir, ['react', 'react-dom']);
66
63
 
67
- const reachCacheGroup: Exclude<SplitChunksOptions, boolean>['cacheGroups'][string] = {
64
+ const reactCacheGroup: Exclude<Required<SplitChunksOptions>, boolean>['cacheGroups'][string] = {
68
65
  chunks: 'all',
69
66
  name: 'react',
70
67
  // This regex ignores nested copies of framework libraries so they're bundled with their issuer.
@@ -82,51 +79,53 @@ export const splitChunksConfig =
82
79
  // Don't let webpack eliminate this chunk (prevents this chunk from becoming a part of the commons chunk)
83
80
  enforce: true,
84
81
  };
85
- let splitChunks: SplitChunksOptions = false;
86
-
87
- if (configurations.granularChunks) {
88
- splitChunks = {
89
- chunks: 'all',
90
- maxInitialRequests: 10,
91
- maxAsyncRequests: 20,
92
- cacheGroups: {
93
- default: false,
94
- defaultVendors: false,
95
- reachCacheGroup,
96
- shared: {
97
- chunks: 'async',
98
- minChunks: configurations.granularChunksSplitNumber,
99
- minSize: configurations.granularChunksMinSize,
100
- reuseExistingChunk: true,
101
- name(module, chunks) {
102
- return crypto
103
- .createHash('sha1')
104
- .update(
105
- chunks.reduce((acc: string, chunk: webpack.Chunk) => {
106
- return acc + chunk.name;
107
- }, '')
108
- )
109
- .digest('hex');
82
+ let webpackSplitChunks: SplitChunksOptions = false;
83
+
84
+ switch (splitChunks.mode) {
85
+ case 'granularChunks':
86
+ webpackSplitChunks = {
87
+ chunks: 'all',
88
+ maxInitialRequests: 10,
89
+ maxAsyncRequests: 20,
90
+ cacheGroups: {
91
+ default: false,
92
+ defaultVendors: false,
93
+ reactCacheGroup,
94
+ shared: {
95
+ chunks: 'async',
96
+ minChunks: splitChunks.granularChunksSplitNumber,
97
+ minSize: splitChunks.granularChunksMinSize,
98
+ reuseExistingChunk: true,
99
+ name(module: any, chunks: webpack.Chunk[]) {
100
+ return crypto
101
+ .createHash('sha1')
102
+ .update(
103
+ chunks.reduce((acc: string, chunk: webpack.Chunk) => {
104
+ return acc + chunk.name;
105
+ }, '')
106
+ )
107
+ .digest('hex');
108
+ },
110
109
  },
111
110
  },
112
- },
113
- };
114
- } else if (configurations.commonChunk) {
115
- splitChunks = {
116
- cacheGroups: {
117
- default: false,
118
- defaultVendors: false,
119
- reachCacheGroup,
120
- commons: {
121
- name: 'common-chunk',
122
- minChunks: configurations.commonChunkSplitNumber,
111
+ };
112
+ // eslint-disable-next-line no-fallthrough
113
+ case 'commonChunk':
114
+ webpackSplitChunks = {
115
+ cacheGroups: {
116
+ default: false,
117
+ defaultVendors: false,
118
+ reactCacheGroup,
119
+ commons: {
120
+ name: 'common-chunk',
121
+ minChunks: splitChunks.commonChunkSplitNumber,
122
+ },
123
123
  },
124
- },
125
- };
124
+ };
126
125
  }
127
126
 
128
127
  config.optimization
129
- .splitChunks(splitChunks)
128
+ .splitChunks(webpackSplitChunks)
130
129
  // namedChunks должно быть включено, чтобы webpack-flush-chunks смог определить имена чанков от которых зависит чанк бандла после обработчки через splitChunks
131
130
  .set('chunkIds', 'named');
132
131
 
@@ -27,15 +27,13 @@ export const webpackClientConfig = ({
27
27
  }) => {
28
28
  const config = new Config();
29
29
 
30
- const { configurations } = configManager.build;
31
-
32
30
  config.batch(common(configManager));
33
31
  config.batch(commonProd(configManager));
34
32
 
35
33
  config.bail(true);
36
34
 
37
35
  config.output
38
- .path(configManager.getBuildPath())
36
+ .path(configManager.buildPath)
39
37
  .publicPath('')
40
38
  .filename('[name].[contenthash].js')
41
39
  .chunkFilename('[name].[contenthash].chunk.js')
@@ -73,7 +71,7 @@ export const webpackClientConfig = ({
73
71
 
74
72
  config.batch(optimize(configManager));
75
73
 
76
- const { checkAsyncTs } = configManager.build.configurations;
74
+ const { checkAsyncTs, debug, sourceMap } = configManager;
77
75
 
78
76
  if (isObject(checkAsyncTs) && checkAsyncTs.failOnBuild) {
79
77
  const additionalOptions = isObject(checkAsyncTs) ? checkAsyncTs.pluginOptions || {} : {};
@@ -96,7 +94,7 @@ export const webpackClientConfig = ({
96
94
  config.plugin('fork-ts-checker').use(require('fork-ts-checker-webpack-plugin'), [options]);
97
95
  }
98
96
 
99
- if (configurations.sourceMap || configManager.debug) {
97
+ if (sourceMap || debug) {
100
98
  config.batch(sourcemaps(configManager));
101
99
  }
102
100
 
@@ -20,10 +20,7 @@ import { extractCssPluginFactory } from '../../blocks/extractCssPlugin';
20
20
 
21
21
  // eslint-disable-next-line import/no-default-export
22
22
  export default (configManager: ConfigManager<ApplicationConfigEntry>) => (config: Config) => {
23
- const {
24
- options: { server = '', outputServer = '' } = {},
25
- configurations: { fileSystemPages },
26
- } = configManager.build;
23
+ const { output, fileSystemPages } = configManager;
27
24
 
28
25
  config.name('server');
29
26
 
@@ -32,7 +29,7 @@ export default (configManager: ConfigManager<ApplicationConfigEntry>) => (config
32
29
  config.batch(files(configManager));
33
30
  config.batch(apiResolve(configManager));
34
31
 
35
- if (fileSystemPages.enable) {
32
+ if (fileSystemPages.enabled) {
36
33
  config.batch(pagesResolve(configManager));
37
34
  }
38
35
 
@@ -43,13 +40,13 @@ export default (configManager: ConfigManager<ApplicationConfigEntry>) => (config
43
40
 
44
41
  config
45
42
  .entry('server')
46
- .add(path.resolve(configManager.rootDir, server))
43
+ .add(path.resolve(configManager.rootDir, `${configManager.root}/index`))
47
44
  .end()
48
45
  .resolve.extensions.merge(['.node']);
49
46
 
50
47
  config.output
51
- .path(configManager.getBuildPath())
52
- .publicPath(path.posix.join('/', outputServer))
48
+ .path(configManager.buildPath)
49
+ .publicPath(path.posix.join('/', output.server))
53
50
  .filename('server.js');
54
51
 
55
52
  config.optimization.splitChunks(false).removeAvailableModules(false);
@@ -21,14 +21,13 @@ export const webpackServerConfig = ({
21
21
  configManager: ConfigManager<ApplicationConfigEntry>;
22
22
  showProgress: typeof UI_SHOW_PROGRESS_TOKEN | null;
23
23
  }) => {
24
- const { options: { server = '' } = {} } = configManager.build;
25
24
  const config = new Config();
26
25
 
27
26
  config.batch(common(configManager));
28
27
  config.batch(commonDev());
29
28
  config.batch(
30
29
  commonApplicationDev({
31
- entry: path.resolve(configManager.rootDir, server),
30
+ entry: path.resolve(configManager.rootDir, `${configManager.root}/index`),
32
31
  onlyBundles: configManager.onlyBundles,
33
32
  })
34
33
  );
@@ -47,9 +46,9 @@ export const webpackServerConfig = ({
47
46
  }
48
47
 
49
48
  config.externals(
50
- (configManager.build.configurations.externals || [])
51
- .concat(configManager.serve.configurations.externals || [])
52
- .map((s) => new RegExp(`^${s}`))
49
+ ['react$', 'react-dom', 'prop-types', 'fastify', 'core-js', ...configManager.externals].map(
50
+ (s) => new RegExp(`^${s}`)
51
+ )
53
52
  );
54
53
 
55
54
  config.optimization.set('emitOnErrors', false);
@@ -85,7 +84,7 @@ export const webpackServerConfig = ({
85
84
  process.env.ASSETS_PREFIX ??
86
85
  `"http://${configManager.staticHost}:${
87
86
  configManager.staticPort
88
- }/${configManager.build.options.outputClient.replace(/\/$/, '')}/"`,
87
+ }/${configManager.output.client.replace(/\/$/, '')}/"`,
89
88
  },
90
89
  ]);
91
90
 
@@ -15,20 +15,14 @@ export const webpackServerConfig = ({
15
15
  configManager: ConfigManager<ApplicationConfigEntry>;
16
16
  }) => {
17
17
  const config = new Config();
18
- const { debug } = configManager;
19
-
20
- const {
21
- configurations: { sourceMapServer },
22
- } = configManager.build;
18
+ const { debug, sourceMap } = configManager;
23
19
 
24
20
  config.batch(common(configManager));
25
21
  config.batch(commonProd(configManager));
26
22
 
27
23
  config.bail(true);
28
24
 
29
- config.externals(
30
- (configManager.build.configurations.externals || []).map((s) => new RegExp(`^${s}`))
31
- );
25
+ config.externals(configManager.externals.map((s) => new RegExp(`^${s}`)));
32
26
 
33
27
  if (configManager.disableProdOptimization) {
34
28
  // with this option for id of module path to file will be used
@@ -63,7 +57,7 @@ export const webpackServerConfig = ({
63
57
  },
64
58
  ]);
65
59
 
66
- if (sourceMapServer || debug) {
60
+ if (sourceMap || debug) {
67
61
  config.batch(sourcemaps(configManager));
68
62
  }
69
63
 
@@ -6,7 +6,7 @@ import type { ApplicationConfigEntry } from '../../../typings/configEntry/applic
6
6
 
7
7
  // eslint-disable-next-line import/no-default-export
8
8
  export default (configManager: ConfigManager<ApplicationConfigEntry>) => (config: Config) => {
9
- const dir = path.resolve(configManager.rootDir, configManager.build.options.serverApiDir);
9
+ const dir = path.resolve(configManager.rootDir, configManager.serverApiDir);
10
10
  const files = readDir(dir);
11
11
 
12
12
  if (!files.length) {
@@ -14,9 +14,9 @@ export default (configManager: ConfigManager) => (config: Config) => {
14
14
  .loader(path.resolve(__dirname, '../loaders/replaceContent'))
15
15
  .options({
16
16
  code: `
17
- import { ConfigManager } from '@tramvai/cli/lib/config/configManager';
17
+ import { createConfigManager } from '@tramvai/cli/lib/config/configManager';
18
18
 
19
- const appConfig = ConfigManager.rehydrate(${JSON.stringify(configManager.dehydrate())});
19
+ const appConfig = createConfigManager(...${JSON.stringify(configManager.dehydrate())});
20
20
  const moduleConfig = appConfig;
21
21
 
22
22
  export { appConfig, moduleConfig };
@@ -1,16 +1,19 @@
1
1
  import type Config from 'webpack-chain';
2
2
  import type { ConfigManager } from '../../../config/configManager';
3
+ import { isApplication } from '../../../config/validate';
3
4
  import type { ConfigEntry } from '../../../typings/configEntry/common';
4
5
  import { shouldUseReactRoot } from '../../../utils/shouldUseReactRoot';
5
6
 
6
7
  export const configToEnv = (configManager: ConfigManager<ConfigEntry>) => (config: Config) => {
7
- const { fileSystemPages } = configManager.build.configurations;
8
+ const { fileSystemPages } = isApplication(configManager)
9
+ ? configManager
10
+ : { fileSystemPages: { enabled: false, routesDir: false, pagesDir: false } };
8
11
 
9
12
  config.plugin('define').tap((args) => [
10
13
  {
11
14
  ...args[0],
12
15
  'process.env.__TRAMVAI_EXPERIMENTAL_ENABLE_FILE_SYSTEM_PAGES': JSON.stringify(
13
- fileSystemPages.enable
16
+ fileSystemPages.enabled
14
17
  ),
15
18
  'process.env.__TRAMVAI_EXPERIMENTAL_FILE_SYSTEM_ROUTES_DIR': JSON.stringify(
16
19
  fileSystemPages.routesDir
@@ -5,29 +5,33 @@ import ExtractCssChunks from 'mini-css-extract-plugin';
5
5
  import { createGenerator } from '@tinkoff/minicss-class-generator';
6
6
  import { safeRequire } from '../../../utils/safeRequire';
7
7
  import type { ConfigManager } from '../../../config/configManager';
8
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
8
9
 
9
10
  const cssLocalIdentNameDevDefault = '[name]__[local]_[minicss]';
10
11
  const cssLocalIdentNameProdDefault = '[minicss]';
11
12
 
13
+ export const getPostcssConfigPath = (configManager: ConfigManager<CliConfigEntry>) => {
14
+ return configManager.postcss.config ?? 'postcss.config';
15
+ };
16
+
12
17
  interface Options {
13
18
  localIdentName?: string;
14
19
  }
15
20
 
16
21
  export const cssWebpackRulesFactory =
17
- (configManager: ConfigManager, options: Options = {}) =>
22
+ (configManager: ConfigManager<CliConfigEntry>, options: Options = {}) =>
18
23
  (config: Config) => {
24
+ const { env, sourceMap } = configManager;
19
25
  const {
20
26
  postcss: {
21
- config: postcssConfig = '',
22
- cssLocalIdentName = null,
23
- cssLocalIdentNameDev = cssLocalIdentName ?? cssLocalIdentNameDevDefault,
24
- cssLocalIdentNameProd = cssLocalIdentName ?? cssLocalIdentNameProdDefault,
25
- } = {},
26
- } = configManager.build.configurations;
27
- const { env, sourceMap } = configManager;
28
- const localIdentName =
29
- options.localIdentName ??
30
- (env === 'production' ? cssLocalIdentNameProd : cssLocalIdentNameDev);
27
+ config: postcssConfig,
28
+ cssLocalIdentName = env === 'production'
29
+ ? cssLocalIdentNameProdDefault
30
+ : cssLocalIdentNameDevDefault,
31
+ cssModulePattern,
32
+ },
33
+ } = configManager;
34
+ const localIdentName = options.localIdentName ?? cssLocalIdentName;
31
35
 
32
36
  const configCssLoader = (cfg) => {
33
37
  cfg.use('extract-css').loader(ExtractCssChunks.loader).options({ esModule: false });
@@ -36,6 +40,10 @@ export const cssWebpackRulesFactory =
36
40
  localIdentName,
37
41
  };
38
42
 
43
+ if (cssModulePattern) {
44
+ cssModulesOptions.auto = new RegExp(cssModulePattern);
45
+ }
46
+
39
47
  // TODO: можно будет избавиться от проверки и сотавить всё в minicss-плагине, когда зарелизят эти изменения
40
48
  // https://github.com/webpack-contrib/css-loader/blob/master/src/utils.js#L310
41
49
  if (/\[minicss]/.test(localIdentName)) {
@@ -50,12 +58,13 @@ export const cssWebpackRulesFactory =
50
58
  });
51
59
  };
52
60
 
53
- const postcssCfg = postcssConfig
54
- ? safeRequire(
55
- path.resolve(configManager.rootDir, postcssConfig),
56
- process.env.NODE_ENV === 'test'
57
- ) ?? {}
58
- : {};
61
+ const postcssCfg =
62
+ safeRequire(
63
+ path.resolve(configManager.rootDir, getPostcssConfigPath(configManager)),
64
+ // ignore missed file if users haven't provided any value
65
+ // in case the path was provided it should exist
66
+ typeof postcssConfig === 'undefined'
67
+ ) ?? {};
59
68
 
60
69
  config.module
61
70
  .rule('css')