@tramvai/cli 2.64.0 → 2.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) 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/server.js +11 -18
  16. package/lib/api/start/providers/application/server.js.map +1 -1
  17. package/lib/api/start/providers/application/shared.js +17 -25
  18. package/lib/api/start/providers/application/shared.js.map +1 -1
  19. package/lib/api/start/providers/child-app/shared.js +19 -25
  20. package/lib/api/start/providers/child-app/shared.js.map +1 -1
  21. package/lib/api/start/providers/module/shared.js +18 -24
  22. package/lib/api/start/providers/module/shared.js.map +1 -1
  23. package/lib/api/start/utils/banner.js +3 -2
  24. package/lib/api/start/utils/banner.js.map +1 -1
  25. package/lib/api/start/utils/listenServer.js +3 -2
  26. package/lib/api/start/utils/listenServer.js.map +1 -1
  27. package/lib/api/start/utils/tips/tips.js +10 -8
  28. package/lib/api/start/utils/tips/tips.js.map +1 -1
  29. package/lib/api/start-prod/providers/application.js +6 -5
  30. package/lib/api/start-prod/providers/application.js.map +1 -1
  31. package/lib/api/start-prod/providers/child-app.js +3 -2
  32. package/lib/api/start-prod/providers/child-app.js.map +1 -1
  33. package/lib/api/start-prod/providers/shared.js +5 -13
  34. package/lib/api/start-prod/providers/shared.js.map +1 -1
  35. package/lib/builder/webpack/devServer/client.js +18 -15
  36. package/lib/builder/webpack/devServer/client.js.map +1 -1
  37. package/lib/builder/webpack/devServer/notifier.d.ts +2 -2
  38. package/lib/builder/webpack/devServer/notifier.js +3 -3
  39. package/lib/builder/webpack/devServer/notifier.js.map +1 -1
  40. package/lib/builder/webpack/devServer/pool/process/pool.js +3 -2
  41. package/lib/builder/webpack/devServer/pool/process/pool.js.map +1 -1
  42. package/lib/builder/webpack/devServer/pool/thread/pool.js +7 -0
  43. package/lib/builder/webpack/devServer/pool/thread/pool.js.map +1 -1
  44. package/lib/builder/webpack/devServer/server.js +7 -2
  45. package/lib/builder/webpack/devServer/server.js.map +1 -1
  46. package/lib/builder/webpack/providers/analyze/shared.js +3 -3
  47. package/lib/builder/webpack/providers/analyze/shared.js.map +1 -1
  48. package/lib/builder/webpack/providers/build/application/server.js.map +1 -1
  49. package/lib/builder/webpack/providers/build/client.js +3 -3
  50. package/lib/builder/webpack/providers/build/client.js.map +1 -1
  51. package/lib/builder/webpack/providers/build/server.js +1 -1
  52. package/lib/builder/webpack/providers/build/server.js.map +1 -1
  53. package/lib/builder/webpack/tokens.d.ts +313 -3
  54. package/lib/builder/webpack/tokens.js.map +1 -1
  55. package/lib/builder/webpack/utils/copyBuildFile.d.ts +2 -1
  56. package/lib/builder/webpack/utils/copyBuildFile.js +2 -3
  57. package/lib/builder/webpack/utils/copyBuildFile.js.map +1 -1
  58. package/lib/builder/webpack/utils/copyStatsJsonFile.d.ts +2 -1
  59. package/lib/builder/webpack/utils/copyStatsJsonFile.js +1 -1
  60. package/lib/builder/webpack/utils/copyStatsJsonFile.js.map +1 -1
  61. package/lib/cli/CLI.d.ts +2 -2
  62. package/lib/cli/CLI.js +2 -2
  63. package/lib/cli/CLI.js.map +1 -1
  64. package/lib/cli/index.js.map +1 -1
  65. package/lib/commands/analyze/command.d.ts +1 -1
  66. package/lib/commands/analyze/command.js.map +1 -1
  67. package/lib/commands/benchmark/command.d.ts +1 -1
  68. package/lib/commands/benchmark/command.js.map +1 -1
  69. package/lib/commands/build/command.d.ts +1 -1
  70. package/lib/commands/build/command.js.map +1 -1
  71. package/lib/commands/new/new.js +0 -1
  72. package/lib/commands/new/new.js.map +1 -1
  73. package/lib/commands/new/questions/packageManager.d.ts +1 -1
  74. package/lib/commands/new/questions/packageManager.js.map +1 -1
  75. package/lib/commands/new/questions/template.d.ts +1 -1
  76. package/lib/commands/new/questions/template.js.map +1 -1
  77. package/lib/commands/new/questions/testingFramework.d.ts +1 -1
  78. package/lib/commands/new/questions/testingFramework.js.map +1 -1
  79. package/lib/commands/new/questions/type.d.ts +1 -1
  80. package/lib/commands/new/questions/type.js.map +1 -1
  81. package/lib/commands/new/steps/initializationGit.d.ts +1 -1
  82. package/lib/commands/new/steps/initializationGit.js.map +1 -1
  83. package/lib/commands/start/command.d.ts +1 -1
  84. package/lib/commands/start/command.js.map +1 -1
  85. package/lib/commands/start-prod/command.d.ts +1 -1
  86. package/lib/commands/start-prod/command.js.map +1 -1
  87. package/lib/commands/static/application.js +4 -4
  88. package/lib/commands/static/application.js.map +1 -1
  89. package/lib/commands/static/command.d.ts +1 -1
  90. package/lib/commands/static/command.js.map +1 -1
  91. package/lib/commands/static/generate.js +2 -2
  92. package/lib/commands/static/generate.js.map +1 -1
  93. package/lib/commands/static/server.d.ts +2 -1
  94. package/lib/commands/static/server.js +1 -1
  95. package/lib/commands/static/server.js.map +1 -1
  96. package/lib/commands/static/staticServer.d.ts +2 -1
  97. package/lib/commands/static/staticServer.js +1 -1
  98. package/lib/commands/static/staticServer.js.map +1 -1
  99. package/lib/commands/update/updatePackageJson.js +3 -0
  100. package/lib/commands/update/updatePackageJson.js.map +1 -1
  101. package/lib/config/configManager.d.ts +15 -73
  102. package/lib/config/configManager.js +64 -92
  103. package/lib/config/configManager.js.map +1 -1
  104. package/lib/config/showConfig.d.ts +1 -1
  105. package/lib/config/showConfig.js +1 -1
  106. package/lib/config/showConfig.js.map +1 -1
  107. package/lib/config/validate.d.ts +5 -4
  108. package/lib/config/validate.js +2 -9
  109. package/lib/config/validate.js.map +1 -1
  110. package/lib/di/tokens/config.d.ts +106 -1
  111. package/lib/di/tokens/config.js.map +1 -1
  112. package/lib/external/config.d.ts +2 -2
  113. package/lib/library/babel/index.js +1 -0
  114. package/lib/library/babel/index.js.map +1 -1
  115. package/lib/library/swc/index.js +1 -1
  116. package/lib/library/swc/index.js.map +1 -1
  117. package/lib/library/webpack/application/client/common.js +6 -4
  118. package/lib/library/webpack/application/client/common.js.map +1 -1
  119. package/lib/library/webpack/application/client/dev.js +9 -8
  120. package/lib/library/webpack/application/client/dev.js.map +1 -1
  121. package/lib/library/webpack/application/client/prod/optimization/splitChunks.js +40 -39
  122. package/lib/library/webpack/application/client/prod/optimization/splitChunks.js.map +1 -1
  123. package/lib/library/webpack/application/client/prod.js +3 -4
  124. package/lib/library/webpack/application/client/prod.js.map +1 -1
  125. package/lib/library/webpack/application/server/common.js +5 -5
  126. package/lib/library/webpack/application/server/common.js.map +1 -1
  127. package/lib/library/webpack/application/server/dev.js +3 -6
  128. package/lib/library/webpack/application/server/dev.js.map +1 -1
  129. package/lib/library/webpack/application/server/prod.js +3 -4
  130. package/lib/library/webpack/application/server/prod.js.map +1 -1
  131. package/lib/library/webpack/blocks/apiResolve.js +1 -1
  132. package/lib/library/webpack/blocks/apiResolve.js.map +1 -1
  133. package/lib/library/webpack/blocks/configResolve.js +2 -2
  134. package/lib/library/webpack/blocks/configResolve.js.map +1 -1
  135. package/lib/library/webpack/blocks/configToEnv.js +5 -2
  136. package/lib/library/webpack/blocks/configToEnv.js.map +1 -1
  137. package/lib/library/webpack/blocks/css.d.ts +3 -1
  138. package/lib/library/webpack/blocks/css.js +17 -6
  139. package/lib/library/webpack/blocks/css.js.map +1 -1
  140. package/lib/library/webpack/blocks/extractCssPlugin.d.ts +4 -3
  141. package/lib/library/webpack/blocks/extractCssPlugin.js +4 -6
  142. package/lib/library/webpack/blocks/extractCssPlugin.js.map +1 -1
  143. package/lib/library/webpack/blocks/filesClient.d.ts +3 -2
  144. package/lib/library/webpack/blocks/filesClient.js +7 -7
  145. package/lib/library/webpack/blocks/filesClient.js.map +1 -1
  146. package/lib/library/webpack/blocks/filesServer.d.ts +2 -1
  147. package/lib/library/webpack/blocks/filesServer.js +3 -3
  148. package/lib/library/webpack/blocks/filesServer.js.map +1 -1
  149. package/lib/library/webpack/blocks/js.d.ts +2 -1
  150. package/lib/library/webpack/blocks/js.js +1 -1
  151. package/lib/library/webpack/blocks/js.js.map +1 -1
  152. package/lib/library/webpack/blocks/nodeClient.d.ts +2 -1
  153. package/lib/library/webpack/blocks/nodeClient.js +2 -2
  154. package/lib/library/webpack/blocks/nodeClient.js.map +1 -1
  155. package/lib/library/webpack/blocks/optimize.d.ts +2 -1
  156. package/lib/library/webpack/blocks/optimize.js +3 -3
  157. package/lib/library/webpack/blocks/optimize.js.map +1 -1
  158. package/lib/library/webpack/blocks/pagesResolve.js +1 -1
  159. package/lib/library/webpack/blocks/pagesResolve.js.map +1 -1
  160. package/lib/library/webpack/blocks/postcssAssets.d.ts +2 -1
  161. package/lib/library/webpack/blocks/postcssAssets.js +2 -2
  162. package/lib/library/webpack/blocks/postcssAssets.js.map +1 -1
  163. package/lib/library/webpack/blocks/serverInline.d.ts +2 -1
  164. package/lib/library/webpack/blocks/serverInline.js.map +1 -1
  165. package/lib/library/webpack/blocks/ts.d.ts +2 -1
  166. package/lib/library/webpack/blocks/ts.js.map +1 -1
  167. package/lib/library/webpack/child-app/client/common.d.ts +2 -2
  168. package/lib/library/webpack/child-app/client/common.js +1 -1
  169. package/lib/library/webpack/child-app/client/common.js.map +1 -1
  170. package/lib/library/webpack/child-app/client/dev.d.ts +2 -2
  171. package/lib/library/webpack/child-app/client/dev.js +6 -5
  172. package/lib/library/webpack/child-app/client/dev.js.map +1 -1
  173. package/lib/library/webpack/child-app/client/prod.d.ts +2 -2
  174. package/lib/library/webpack/child-app/client/prod.js.map +1 -1
  175. package/lib/library/webpack/child-app/common.d.ts +2 -2
  176. package/lib/library/webpack/child-app/common.js.map +1 -1
  177. package/lib/library/webpack/child-app/server/common.d.ts +2 -2
  178. package/lib/library/webpack/child-app/server/common.js +1 -1
  179. package/lib/library/webpack/child-app/server/common.js.map +1 -1
  180. package/lib/library/webpack/child-app/server/dev.d.ts +2 -2
  181. package/lib/library/webpack/child-app/server/dev.js.map +1 -1
  182. package/lib/library/webpack/child-app/server/prod.d.ts +2 -2
  183. package/lib/library/webpack/child-app/server/prod.js.map +1 -1
  184. package/lib/library/webpack/common/client/prod.d.ts +2 -1
  185. package/lib/library/webpack/common/client/prod.js +4 -5
  186. package/lib/library/webpack/common/client/prod.js.map +1 -1
  187. package/lib/library/webpack/common/main.d.ts +2 -1
  188. package/lib/library/webpack/common/main.js +3 -3
  189. package/lib/library/webpack/common/main.js.map +1 -1
  190. package/lib/library/webpack/common/server/prod.d.ts +2 -1
  191. package/lib/library/webpack/common/server/prod.js +4 -5
  192. package/lib/library/webpack/common/server/prod.js.map +1 -1
  193. package/lib/library/webpack/index.js +1 -2
  194. package/lib/library/webpack/index.js.map +1 -1
  195. package/lib/library/webpack/loaders/image-loader/index.d.ts +2 -1
  196. package/lib/library/webpack/loaders/image-loader/index.js.map +1 -1
  197. package/lib/library/webpack/loaders/pagesResolve.d.ts +10 -1
  198. package/lib/library/webpack/loaders/pagesResolve.js +4 -3
  199. package/lib/library/webpack/loaders/pagesResolve.js.map +1 -1
  200. package/lib/library/webpack/loaders/replaceContent.d.ts +6 -1
  201. package/lib/library/webpack/loaders/replaceContent.js +4 -3
  202. package/lib/library/webpack/loaders/replaceContent.js.map +1 -1
  203. package/lib/library/webpack/module/client/common.js +1 -1
  204. package/lib/library/webpack/module/client/common.js.map +1 -1
  205. package/lib/library/webpack/module/externals.d.ts +1 -1
  206. package/lib/library/webpack/module/externals.js.map +1 -1
  207. package/lib/library/webpack/module/resolveExternal.d.ts +1 -1
  208. package/lib/library/webpack/module/resolveExternal.js.map +1 -1
  209. package/lib/library/webpack/module/server/common.js +1 -1
  210. package/lib/library/webpack/module/server/common.js.map +1 -1
  211. package/lib/library/webpack/plugins/LazyModuleInitialization.d.ts +2 -2
  212. package/lib/library/webpack/plugins/LazyModuleInitialization.js +1 -0
  213. package/lib/library/webpack/plugins/LazyModuleInitialization.js.map +1 -1
  214. package/lib/library/webpack/plugins/WebpackBar/utils/index.d.ts +7 -7
  215. package/lib/library/webpack/plugins/WebpackBar/utils/index.js.map +1 -1
  216. package/lib/library/webpack/plugins/WebpackBar/utils/webpack.d.ts +2 -2
  217. package/lib/library/webpack/plugins/WebpackBar/utils/webpack.js.map +1 -1
  218. package/lib/library/webpack/types/webpack.d.ts +2 -2
  219. package/lib/library/webpack/utils/files.d.ts +4 -3
  220. package/lib/library/webpack/utils/files.js +2 -2
  221. package/lib/library/webpack/utils/files.js.map +1 -1
  222. package/lib/library/webpack/utils/transpiler.d.ts +3 -2
  223. package/lib/library/webpack/utils/transpiler.js +2 -2
  224. package/lib/library/webpack/utils/transpiler.js.map +1 -1
  225. package/lib/library/webpack/utils/workersPool.d.ts +3 -6
  226. package/lib/library/webpack/utils/workersPool.js +1 -1
  227. package/lib/library/webpack/utils/workersPool.js.map +1 -1
  228. package/lib/models/config.d.ts +2 -3
  229. package/lib/models/config.js +32 -3
  230. package/lib/models/config.js.map +1 -1
  231. package/lib/schema/ConfigSchema.d.ts +13 -4
  232. package/lib/schema/autogeneratedSchema.json +1808 -2074
  233. package/lib/typings/configEntry/application.d.ts +81 -86
  234. package/lib/typings/configEntry/child-app.d.ts +10 -29
  235. package/lib/typings/configEntry/cli.d.ts +254 -0
  236. package/lib/typings/configEntry/{CheckAsyncTsConfig.js → cli.js} +1 -1
  237. package/lib/typings/configEntry/cli.js.map +1 -0
  238. package/lib/typings/configEntry/common.d.ts +16 -276
  239. package/lib/typings/configEntry/common.js +15 -0
  240. package/lib/typings/configEntry/common.js.map +1 -1
  241. package/lib/typings/configEntry/module.d.ts +10 -29
  242. package/lib/typings/configEntry/package.d.ts +2 -1
  243. package/lib/ui/commander.js +1 -1
  244. package/lib/ui/commander.js.map +1 -1
  245. package/lib/utils/applyTemplate.js.map +1 -1
  246. package/lib/utils/detectPortSync.d.ts +1 -0
  247. package/lib/utils/detectPortSync.js +10 -0
  248. package/lib/utils/detectPortSync.js.map +1 -0
  249. package/lib/utils/safeRequire.js +5 -1
  250. package/lib/utils/safeRequire.js.map +1 -1
  251. package/lib/utils/webpackBuild.d.ts +2 -1
  252. package/lib/utils/webpackBuild.js +3 -3
  253. package/lib/utils/webpackBuild.js.map +1 -1
  254. package/package.json +14 -9
  255. package/schema.json +1802 -2068
  256. package/src/api/analyze/providers/shared.ts +3 -2
  257. package/src/api/benchmark/__integration__/__fixtures__/tramvai.json +1 -8
  258. package/src/api/benchmark/index.ts +1 -1
  259. package/src/api/build/__integration__/__fixtures__/app/App.tsx +0 -1
  260. package/src/api/build/__integration__/__fixtures__/app/index.tsx +14 -8
  261. package/src/api/build/__integration__/__fixtures__/app/server.tsx +0 -1
  262. package/src/api/build/__integration__/__fixtures__/tramvai.json +1 -10
  263. package/src/api/build/__integration__/build.test.ts +4 -13
  264. package/src/api/build/child-app.ts +4 -4
  265. package/src/api/build/module.ts +2 -4
  266. package/src/api/build/providers/shared.ts +2 -2
  267. package/src/api/index.ts +6 -2
  268. package/src/api/shared/types/withConfig.ts +5 -6
  269. package/src/api/start/__integration__/__fixtures__/app/index.tsx +11 -7
  270. package/src/api/start/__integration__/__fixtures__/tramvai.json +6 -17
  271. package/src/api/start/__integration__/start.test.ts +38 -13
  272. package/src/api/start/providers/application/server.ts +14 -23
  273. package/src/api/start/providers/application/shared.ts +26 -52
  274. package/src/api/start/providers/child-app/shared.ts +23 -46
  275. package/src/api/start/providers/module/shared.ts +24 -47
  276. package/src/api/start/utils/banner.ts +3 -2
  277. package/src/api/start/utils/listenServer.ts +2 -1
  278. package/src/api/start/utils/tips/tips.ts +11 -8
  279. package/src/api/start-prod/providers/application.ts +19 -19
  280. package/src/api/start-prod/providers/child-app.ts +7 -8
  281. package/src/api/start-prod/providers/shared.ts +6 -20
  282. package/src/builder/webpack/devServer/client.ts +22 -15
  283. package/src/builder/webpack/devServer/notifier.ts +6 -6
  284. package/src/builder/webpack/devServer/pool/process/pool.ts +3 -3
  285. package/src/builder/webpack/devServer/pool/thread/pool.ts +7 -0
  286. package/src/builder/webpack/devServer/server.ts +13 -6
  287. package/src/builder/webpack/providers/analyze/shared.ts +3 -2
  288. package/src/builder/webpack/providers/build/application/server.ts +5 -1
  289. package/src/builder/webpack/providers/build/client.ts +2 -2
  290. package/src/builder/webpack/providers/build/server.ts +1 -1
  291. package/src/builder/webpack/tokens.ts +4 -3
  292. package/src/builder/webpack/utils/copyBuildFile.ts +4 -5
  293. package/src/builder/webpack/utils/copyStatsJsonFile.ts +5 -2
  294. package/src/cli/CLI.ts +6 -6
  295. package/src/cli/index.ts +1 -1
  296. package/src/commands/analyze/command.ts +1 -1
  297. package/src/commands/benchmark/command.ts +1 -1
  298. package/src/commands/build/command.ts +2 -2
  299. package/src/commands/new/new.ts +0 -1
  300. package/src/commands/new/questions/packageManager.ts +1 -1
  301. package/src/commands/new/questions/template.ts +1 -1
  302. package/src/commands/new/questions/testingFramework.ts +1 -1
  303. package/src/commands/new/questions/type.ts +1 -1
  304. package/src/commands/new/steps/initializationGit.ts +1 -1
  305. package/src/commands/new/templates/app/monorepo/tramvai.json.hbs +6 -32
  306. package/src/commands/new/templates/app/multirepo/tramvai.json.hbs +6 -23
  307. package/src/commands/new/templates/child-app/monorepo/tramvai.json.hbs +3 -18
  308. package/src/commands/new/templates/child-app/multirepo/tramvai.json.hbs +3 -9
  309. package/src/commands/start/command.ts +2 -2
  310. package/src/commands/start-prod/command.ts +2 -2
  311. package/src/commands/static/application.ts +5 -14
  312. package/src/commands/static/command.ts +1 -1
  313. package/src/commands/static/generate.ts +2 -2
  314. package/src/commands/static/server.ts +5 -2
  315. package/src/commands/static/staticServer.ts +6 -3
  316. package/src/commands/update/updatePackageJson.ts +6 -2
  317. package/src/config/configManager.spec.ts +49 -0
  318. package/src/config/configManager.ts +129 -197
  319. package/src/config/showConfig.ts +2 -2
  320. package/src/config/validate.ts +14 -25
  321. package/src/di/tokens/config.ts +2 -1
  322. package/src/library/babel/index.ts +1 -0
  323. package/src/library/swc/__integration__/swc.build.test.ts +3 -21
  324. package/src/library/swc/__integration__/swc.start.test.ts +3 -21
  325. package/src/library/swc/index.ts +1 -1
  326. package/src/library/webpack/application/client/common.ts +7 -7
  327. package/src/library/webpack/application/client/dev.ts +9 -9
  328. package/src/library/webpack/application/client/prod/optimization/splitChunks.ts +43 -44
  329. package/src/library/webpack/application/client/prod.ts +3 -5
  330. package/src/library/webpack/application/server/common.ts +5 -8
  331. package/src/library/webpack/application/server/dev.ts +5 -6
  332. package/src/library/webpack/application/server/prod.ts +3 -9
  333. package/src/library/webpack/blocks/apiResolve.ts +1 -1
  334. package/src/library/webpack/blocks/configResolve.ts +2 -2
  335. package/src/library/webpack/blocks/configToEnv.ts +5 -2
  336. package/src/library/webpack/blocks/css.ts +26 -17
  337. package/src/library/webpack/blocks/extractCssPlugin.ts +11 -10
  338. package/src/library/webpack/blocks/filesClient.ts +52 -50
  339. package/src/library/webpack/blocks/filesServer.ts +4 -3
  340. package/src/library/webpack/blocks/js.ts +3 -2
  341. package/src/library/webpack/blocks/nodeClient.ts +4 -3
  342. package/src/library/webpack/blocks/optimize.ts +5 -6
  343. package/src/library/webpack/blocks/pagesResolve.ts +1 -1
  344. package/src/library/webpack/blocks/postcssAssets.ts +6 -7
  345. package/src/library/webpack/blocks/serverInline.ts +2 -1
  346. package/src/library/webpack/blocks/ts.ts +2 -1
  347. package/src/library/webpack/child-app/client/common.ts +3 -3
  348. package/src/library/webpack/child-app/client/dev.ts +8 -8
  349. package/src/library/webpack/child-app/client/prod.ts +2 -2
  350. package/src/library/webpack/child-app/common.ts +2 -2
  351. package/src/library/webpack/child-app/server/common.ts +3 -3
  352. package/src/library/webpack/child-app/server/dev.ts +2 -2
  353. package/src/library/webpack/child-app/server/prod.ts +2 -2
  354. package/src/library/webpack/common/client/prod.ts +10 -6
  355. package/src/library/webpack/common/main.ts +9 -4
  356. package/src/library/webpack/common/server/prod.ts +10 -6
  357. package/src/library/webpack/index.ts +2 -3
  358. package/src/library/webpack/loaders/image-loader/index.ts +2 -1
  359. package/src/library/webpack/loaders/pagesResolve.ts +17 -5
  360. package/src/library/webpack/loaders/replaceContent.ts +11 -2
  361. package/src/library/webpack/module/client/common.ts +1 -1
  362. package/src/library/webpack/module/externals.ts +1 -1
  363. package/src/library/webpack/module/resolveExternal.ts +1 -1
  364. package/src/library/webpack/module/server/common.ts +1 -1
  365. package/src/library/webpack/plugins/LazyModuleInitialization.ts +6 -1
  366. package/src/library/webpack/plugins/WebpackBar/utils/index.ts +8 -8
  367. package/src/library/webpack/plugins/WebpackBar/utils/webpack.ts +1 -1
  368. package/src/library/webpack/types/webpack.ts +2 -2
  369. package/src/library/webpack/utils/files.ts +4 -3
  370. package/src/library/webpack/utils/transpiler.ts +6 -11
  371. package/src/library/webpack/utils/workersPool.ts +6 -9
  372. package/src/models/config.spec.ts +352 -0
  373. package/src/models/config.ts +41 -9
  374. package/src/schema/ConfigSchema.ts +15 -4
  375. package/src/schema/autogeneratedSchema.json +1808 -2074
  376. package/src/schema/tramvai.spec.ts +89 -184
  377. package/src/typings/configEntry/application.ts +85 -87
  378. package/src/typings/configEntry/child-app.ts +10 -30
  379. package/src/typings/configEntry/cli.ts +271 -0
  380. package/src/typings/configEntry/common.ts +26 -278
  381. package/src/typings/configEntry/module.ts +11 -30
  382. package/src/typings/configEntry/package.ts +3 -1
  383. package/src/ui/commander.ts +1 -1
  384. package/src/utils/applyTemplate.ts +2 -2
  385. package/src/utils/detectPortSync.ts +7 -0
  386. package/src/utils/safeRequire.ts +6 -1
  387. package/src/utils/webpackBuild.ts +4 -3
  388. package/lib/library/webpack/plugins/DedupePlugin/DedupePlugin.d.ts +0 -37
  389. package/lib/library/webpack/plugins/DedupePlugin/DedupePlugin.js +0 -241
  390. package/lib/library/webpack/plugins/DedupePlugin/DedupePlugin.js.map +0 -1
  391. package/lib/library/webpack/plugins/DedupePlugin/index.d.ts +0 -1
  392. package/lib/library/webpack/plugins/DedupePlugin/index.js +0 -6
  393. package/lib/library/webpack/plugins/DedupePlugin/index.js.map +0 -1
  394. package/lib/typings/configEntry/CheckAsyncTsConfig.d.ts +0 -13
  395. package/lib/typings/configEntry/CheckAsyncTsConfig.js.map +0 -1
  396. package/src/library/webpack/plugins/DedupePlugin/DedupePlugin.spec.ts +0 -95
  397. package/src/library/webpack/plugins/DedupePlugin/DedupePlugin.ts +0 -307
  398. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/index.js +0 -3
  399. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/node_modules/package-dep/index.js +0 -1
  400. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/node_modules/package-dep/package.json +0 -7
  401. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/package.json +0 -7
  402. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/index.js +0 -3
  403. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/node_modules/package-dep/index.js +0 -1
  404. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/node_modules/package-dep/package.json +0 -7
  405. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/package.json +0 -7
  406. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/index.js +0 -3
  407. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/node_modules/package-dep/index.js +0 -1
  408. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/node_modules/package-dep/package.json +0 -7
  409. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/package.json +0 -7
  410. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-dep/index.js +0 -1
  411. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-dep/package.json +0 -7
  412. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/index.js +0 -3
  413. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/node_modules/package-esm-dep/index.js +0 -1
  414. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/node_modules/package-esm-dep/package.json +0 -8
  415. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/package.json +0 -8
  416. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/index.js +0 -3
  417. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/node_modules/package-esm-dep/index.js +0 -1
  418. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/node_modules/package-esm-dep/package.json +0 -8
  419. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/package.json +0 -8
  420. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/package-lock.json +0 -0
  421. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/package.json +0 -14
  422. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/src/index.js +0 -9
  423. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/tramvai.json +0 -67
  424. package/src/library/webpack/plugins/DedupePlugin/__integration__/DedupePlugin.test.ts +0 -90
  425. package/src/library/webpack/plugins/DedupePlugin/index.ts +0 -1
  426. package/src/typings/configEntry/CheckAsyncTsConfig.ts +0 -15
@@ -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')
@@ -1,29 +1,30 @@
1
1
  import type Config from 'webpack-chain';
2
+ import type { PluginOptions } from 'mini-css-extract-plugin';
2
3
  import ExtractCssPlugin from 'mini-css-extract-plugin';
3
4
  import type { ConfigManager } from '../../../config/configManager';
5
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
4
6
 
5
7
  interface Options {
6
- filename?: string;
7
- chunkFilename?: string;
8
+ filename?: string | null;
9
+ chunkFilename?: string | null;
8
10
  }
9
11
 
10
12
  export const extractCssPluginFactory =
11
- (configManager: ConfigManager, options: Options = {}) =>
13
+ (configManager: ConfigManager<CliConfigEntry>, options: Options = {}) =>
12
14
  (config: Config) => {
13
15
  const { filename = '[name].css', chunkFilename = '[name].chunk.css' } = options;
14
16
 
15
- const pluginOptions = {
16
- filename,
17
- chunkFilename,
17
+ const pluginOptions: PluginOptions = {
18
18
  ignoreOrder: true,
19
19
  experimentalUseImportModule: !!configManager.experiments.minicss?.useImportModule,
20
20
  };
21
21
 
22
- if (filename === null) {
23
- delete pluginOptions.filename;
22
+ if (filename !== null) {
23
+ pluginOptions.filename = filename;
24
24
  }
25
- if (chunkFilename === null) {
26
- delete pluginOptions.chunkFilename;
25
+
26
+ if (chunkFilename !== null) {
27
+ pluginOptions.chunkFilename = chunkFilename;
27
28
  }
28
29
 
29
30
  config.plugin('extract-css').use(ExtractCssPlugin, [pluginOptions]);
@@ -3,55 +3,57 @@ import type Config from 'webpack-chain';
3
3
  import SparkMD5 from 'spark-md5';
4
4
  import type { ConfigManager } from '../../../config/configManager';
5
5
  import { addSvgrLoader, getSvgoOptions } from '../utils/files';
6
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
7
+
8
+ export const filesClientWebpackRulesFactory =
9
+ (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
10
+ const svgoOptions = getSvgoOptions(configManager);
11
+
12
+ config.module
13
+ .rule('woff')
14
+ .test(/\.woff2?$/)
15
+ .set('type', 'asset');
16
+
17
+ addSvgrLoader(configManager, config, svgoOptions);
18
+
19
+ config.module
20
+ .rule('svg')
21
+ .test(/\.svg$/)
22
+ .set('resourceQuery', { not: /react/ })
23
+ .set('type', 'asset/resource')
24
+ .set('generator', {
25
+ filename: (pathInfo) => {
26
+ // hash computation exactly how it is working in react-ui-kit
27
+ // TODO: it leads to high coherence with ui-kit, better change it to some other method
28
+ return `${SparkMD5.hash(pathInfo.module.originalSource().source().toString())}.svg`;
29
+ },
30
+ })
31
+ .use('svg')
32
+ .loader('svgo-loader')
33
+ .options(svgoOptions);
34
+
35
+ config.module
36
+ .rule('tramvai-image')
37
+ .test(/\.(png|jpe?g|gif|webp)$/)
38
+ .use('file')
39
+ .loader(path.resolve(__dirname, '../loaders/image-loader'))
40
+ .end();
6
41
 
7
- export const filesClientWebackRulesFactory = (configManager: ConfigManager) => (config: Config) => {
8
- const svgoOptions = getSvgoOptions(configManager);
9
-
10
- config.module
11
- .rule('woff')
12
- .test(/\.woff2?$/)
13
- .set('type', 'asset');
14
-
15
- addSvgrLoader(configManager, config, svgoOptions);
16
-
17
- config.module
18
- .rule('svg')
19
- .test(/\.svg$/)
20
- .set('resourceQuery', { not: /react/ })
21
- .set('type', 'asset/resource')
22
- .set('generator', {
23
- filename: (pathInfo) => {
24
- // hash computation exactly how it is working in react-ui-kit
25
- // TODO: it leads to high coherence with ui-kit, better change it to some other method
26
- return `${SparkMD5.hash(pathInfo.module.originalSource().source().toString())}.svg`;
27
- },
28
- })
29
- .use('svg')
30
- .loader('svgo-loader')
31
- .options(svgoOptions);
32
-
33
- config.module
34
- .rule('tramvai-image')
35
- .test(/\.(png|jpe?g|gif|webp)$/)
36
- .use('file')
37
- .loader(path.resolve(__dirname, '../loaders/image-loader'))
38
- .end();
39
-
40
- config.module
41
- .rule('video')
42
- .test(/\.(mp4|webm|avif)$/)
43
- .set('type', 'asset/resource');
44
-
45
- if (configManager.build?.configurations?.imageOptimization?.enabled) {
46
42
  config.module
47
- .rule('image-optimization')
48
- .test(/\.(gif|png|jpe?g|svg)$/)
49
- .use('image')
50
- .loader('image-webpack-loader')
51
- .options({ ...configManager.build?.configurations?.imageOptimization?.options })
52
- .end()
53
- .enforce('pre');
54
- }
55
- };
56
-
57
- export default filesClientWebackRulesFactory;
43
+ .rule('video')
44
+ .test(/\.(mp4|webm|avif)$/)
45
+ .set('type', 'asset/resource');
46
+
47
+ if (configManager.imageOptimization?.enabled) {
48
+ config.module
49
+ .rule('image-optimization')
50
+ .test(/\.(gif|png|jpe?g|svg)$/)
51
+ .use('image')
52
+ .loader('image-webpack-loader')
53
+ .options({ ...(configManager.imageOptimization?.options as any) })
54
+ .end()
55
+ .enforce('pre');
56
+ }
57
+ };
58
+
59
+ export default filesClientWebpackRulesFactory;
@@ -1,9 +1,10 @@
1
1
  import path from 'path';
2
2
  import type Config from 'webpack-chain';
3
3
  import type { ConfigManager } from '../../../config/configManager';
4
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
4
5
  import { addSvgrLoader, getSvgoOptions } from '../utils/files';
5
6
 
6
- export default (configManager: ConfigManager) => (config: Config) => {
7
+ export default (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
7
8
  const svgoOptions = getSvgoOptions(configManager);
8
9
 
9
10
  config.module
@@ -43,13 +44,13 @@ export default (configManager: ConfigManager) => (config: Config) => {
43
44
  emit: false,
44
45
  });
45
46
 
46
- if (configManager.build?.configurations?.imageOptimization?.enabled) {
47
+ if (configManager.imageOptimization?.enabled) {
47
48
  config.module
48
49
  .rule('image-optimization')
49
50
  .test(/\.(gif|png|jpe?g|svg)$/)
50
51
  .use('image')
51
52
  .loader('image-webpack-loader')
52
- .options({ ...configManager.build?.configurations?.imageOptimization?.options })
53
+ .options({ ...(configManager.imageOptimization?.options as Record<string, any>) })
53
54
  .end()
54
55
  .enforce('pre');
55
56
  }
@@ -4,10 +4,11 @@ import { createWorkerPoolTranspiler } from '../utils/workersPool';
4
4
  import type { ConfigManager } from '../../../config/configManager';
5
5
  import type { TranspilerConfig } from '../utils/transpiler';
6
6
  import { getTranspilerConfig, addTranspilerLoader } from '../utils/transpiler';
7
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
7
8
 
8
9
  // eslint-disable-next-line import/no-default-export
9
- export default (configManager: ConfigManager) => (config: Config) => {
10
- const { transpileOnlyModernLibs } = configManager.build.configurations;
10
+ export default (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
11
+ const { transpileOnlyModernLibs } = configManager;
11
12
 
12
13
  const jsRule = (transpilerConfig: TranspilerConfig) => (rule: Config.Rule) => {
13
14
  const cfg = rule
@@ -1,13 +1,14 @@
1
1
  import webpack from 'webpack';
2
2
  import type Config from 'webpack-chain';
3
3
  import type { ConfigManager } from '../../../config/configManager';
4
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
4
5
 
5
- export default (configManager: ConfigManager) => (config: Config) => {
6
+ export default (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
6
7
  // webpack 5 больше не добавляет полифиллы для node-библиотек
7
8
  // поэтому если они всё же где-то используются на клиенте их надо добавить явно
8
9
  config.resolve.alias.set('path', 'path-browserify').set('vm', false);
9
10
 
10
- const browserifyPolyfills = configManager.build.configurations.webpackResolveAlias;
11
+ const browserifyPolyfills = configManager.webpack.resolveAlias;
11
12
  if (browserifyPolyfills) {
12
13
  Object.entries(browserifyPolyfills).forEach(([key, value]) => {
13
14
  config.resolve.alias.set(key, value);
@@ -17,7 +18,7 @@ export default (configManager: ConfigManager) => (config: Config) => {
17
18
  config.plugin('provide').use(webpack.ProvidePlugin, [
18
19
  {
19
20
  process: 'process',
20
- ...configManager.build.configurations.webpackProvide,
21
+ ...(configManager.webpack.provide as Record<string, any>),
21
22
  },
22
23
  ]);
23
24
  };