@tramvai/cli 2.63.0 → 2.65.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/README.md +46 -38
  2. package/lib/api/analyze/providers/shared.js +1 -1
  3. package/lib/api/analyze/providers/shared.js.map +1 -1
  4. package/lib/api/benchmark/index.d.ts +1 -1
  5. package/lib/api/build/child-app.js +3 -2
  6. package/lib/api/build/child-app.js.map +1 -1
  7. package/lib/api/build/module.js +1 -2
  8. package/lib/api/build/module.js.map +1 -1
  9. package/lib/api/build/providers/shared.js +1 -1
  10. package/lib/api/build/providers/shared.js.map +1 -1
  11. package/lib/api/index.d.ts +6 -2
  12. package/lib/api/index.js +3 -3
  13. package/lib/api/index.js.map +1 -1
  14. package/lib/api/shared/types/withConfig.d.ts +3 -2
  15. package/lib/api/start/providers/application/shared.js +1 -1
  16. package/lib/api/start/providers/application/shared.js.map +1 -1
  17. package/lib/api/start/providers/child-app/shared.js +8 -7
  18. package/lib/api/start/providers/child-app/shared.js.map +1 -1
  19. package/lib/api/start/providers/module/shared.js +14 -13
  20. package/lib/api/start/providers/module/shared.js.map +1 -1
  21. package/lib/api/start/utils/banner.js +3 -2
  22. package/lib/api/start/utils/banner.js.map +1 -1
  23. package/lib/api/start/utils/tips/tips.js +10 -8
  24. package/lib/api/start/utils/tips/tips.js.map +1 -1
  25. package/lib/api/start-prod/providers/application.js +5 -5
  26. package/lib/api/start-prod/providers/application.js.map +1 -1
  27. package/lib/api/start-prod/providers/child-app.js +2 -2
  28. package/lib/api/start-prod/providers/child-app.js.map +1 -1
  29. package/lib/api/start-prod/providers/shared.js +3 -3
  30. package/lib/api/start-prod/providers/shared.js.map +1 -1
  31. package/lib/builder/webpack/devServer/client.js +18 -15
  32. package/lib/builder/webpack/devServer/client.js.map +1 -1
  33. package/lib/builder/webpack/devServer/notifier.d.ts +2 -2
  34. package/lib/builder/webpack/devServer/notifier.js +3 -3
  35. package/lib/builder/webpack/devServer/notifier.js.map +1 -1
  36. package/lib/builder/webpack/devServer/pool/process/pool.js +3 -2
  37. package/lib/builder/webpack/devServer/pool/process/pool.js.map +1 -1
  38. package/lib/builder/webpack/devServer/pool/thread/pool.js +7 -0
  39. package/lib/builder/webpack/devServer/pool/thread/pool.js.map +1 -1
  40. package/lib/builder/webpack/devServer/server.js +7 -2
  41. package/lib/builder/webpack/devServer/server.js.map +1 -1
  42. package/lib/builder/webpack/providers/analyze/shared.js +3 -3
  43. package/lib/builder/webpack/providers/analyze/shared.js.map +1 -1
  44. package/lib/builder/webpack/providers/build/application/server.js.map +1 -1
  45. package/lib/builder/webpack/providers/build/client.js +3 -3
  46. package/lib/builder/webpack/providers/build/client.js.map +1 -1
  47. package/lib/builder/webpack/providers/build/server.js +1 -1
  48. package/lib/builder/webpack/providers/build/server.js.map +1 -1
  49. package/lib/builder/webpack/tokens.d.ts +313 -3
  50. package/lib/builder/webpack/tokens.js.map +1 -1
  51. package/lib/builder/webpack/utils/copyBuildFile.d.ts +2 -1
  52. package/lib/builder/webpack/utils/copyBuildFile.js +2 -3
  53. package/lib/builder/webpack/utils/copyBuildFile.js.map +1 -1
  54. package/lib/builder/webpack/utils/copyStatsJsonFile.d.ts +2 -1
  55. package/lib/builder/webpack/utils/copyStatsJsonFile.js +1 -1
  56. package/lib/builder/webpack/utils/copyStatsJsonFile.js.map +1 -1
  57. package/lib/cli/CLI.d.ts +2 -2
  58. package/lib/cli/CLI.js +2 -2
  59. package/lib/cli/CLI.js.map +1 -1
  60. package/lib/cli/index.js.map +1 -1
  61. package/lib/commands/analyze/command.d.ts +1 -1
  62. package/lib/commands/analyze/command.js.map +1 -1
  63. package/lib/commands/benchmark/command.d.ts +1 -1
  64. package/lib/commands/benchmark/command.js.map +1 -1
  65. package/lib/commands/build/command.d.ts +1 -1
  66. package/lib/commands/build/command.js.map +1 -1
  67. package/lib/commands/new/new.js +0 -1
  68. package/lib/commands/new/new.js.map +1 -1
  69. package/lib/commands/new/questions/packageManager.d.ts +1 -1
  70. package/lib/commands/new/questions/packageManager.js.map +1 -1
  71. package/lib/commands/new/questions/template.d.ts +1 -1
  72. package/lib/commands/new/questions/template.js.map +1 -1
  73. package/lib/commands/new/questions/testingFramework.d.ts +1 -1
  74. package/lib/commands/new/questions/testingFramework.js.map +1 -1
  75. package/lib/commands/new/questions/type.d.ts +1 -1
  76. package/lib/commands/new/questions/type.js.map +1 -1
  77. package/lib/commands/new/steps/initializationGit.d.ts +1 -1
  78. package/lib/commands/new/steps/initializationGit.js.map +1 -1
  79. package/lib/commands/start/command.d.ts +1 -1
  80. package/lib/commands/start/command.js.map +1 -1
  81. package/lib/commands/start-prod/command.d.ts +1 -1
  82. package/lib/commands/start-prod/command.js.map +1 -1
  83. package/lib/commands/static/application.js +4 -4
  84. package/lib/commands/static/application.js.map +1 -1
  85. package/lib/commands/static/command.d.ts +1 -1
  86. package/lib/commands/static/command.js.map +1 -1
  87. package/lib/commands/static/generate.js +2 -2
  88. package/lib/commands/static/generate.js.map +1 -1
  89. package/lib/commands/static/server.d.ts +2 -1
  90. package/lib/commands/static/server.js +1 -1
  91. package/lib/commands/static/server.js.map +1 -1
  92. package/lib/commands/static/staticServer.d.ts +2 -1
  93. package/lib/commands/static/staticServer.js +1 -1
  94. package/lib/commands/static/staticServer.js.map +1 -1
  95. package/lib/commands/update/updatePackageJson.js +3 -0
  96. package/lib/commands/update/updatePackageJson.js.map +1 -1
  97. package/lib/config/configManager.d.ts +12 -73
  98. package/lib/config/configManager.js +61 -92
  99. package/lib/config/configManager.js.map +1 -1
  100. package/lib/config/showConfig.d.ts +1 -1
  101. package/lib/config/showConfig.js +1 -1
  102. package/lib/config/showConfig.js.map +1 -1
  103. package/lib/config/validate.d.ts +5 -4
  104. package/lib/config/validate.js +2 -9
  105. package/lib/config/validate.js.map +1 -1
  106. package/lib/di/tokens/config.d.ts +106 -1
  107. package/lib/di/tokens/config.js.map +1 -1
  108. package/lib/external/config.d.ts +2 -2
  109. package/lib/library/babel/index.js +1 -0
  110. package/lib/library/babel/index.js.map +1 -1
  111. package/lib/library/swc/index.js +1 -1
  112. package/lib/library/swc/index.js.map +1 -1
  113. package/lib/library/webpack/application/client/common.js +6 -4
  114. package/lib/library/webpack/application/client/common.js.map +1 -1
  115. package/lib/library/webpack/application/client/dev.js +9 -8
  116. package/lib/library/webpack/application/client/dev.js.map +1 -1
  117. package/lib/library/webpack/application/client/prod/optimization/splitChunks.js +40 -39
  118. package/lib/library/webpack/application/client/prod/optimization/splitChunks.js.map +1 -1
  119. package/lib/library/webpack/application/client/prod.js +3 -4
  120. package/lib/library/webpack/application/client/prod.js.map +1 -1
  121. package/lib/library/webpack/application/server/common.js +5 -5
  122. package/lib/library/webpack/application/server/common.js.map +1 -1
  123. package/lib/library/webpack/application/server/dev.js +3 -6
  124. package/lib/library/webpack/application/server/dev.js.map +1 -1
  125. package/lib/library/webpack/application/server/prod.js +3 -4
  126. package/lib/library/webpack/application/server/prod.js.map +1 -1
  127. package/lib/library/webpack/blocks/apiResolve.js +1 -1
  128. package/lib/library/webpack/blocks/apiResolve.js.map +1 -1
  129. package/lib/library/webpack/blocks/configResolve.js +2 -2
  130. package/lib/library/webpack/blocks/configResolve.js.map +1 -1
  131. package/lib/library/webpack/blocks/configToEnv.js +5 -2
  132. package/lib/library/webpack/blocks/configToEnv.js.map +1 -1
  133. package/lib/library/webpack/blocks/css.d.ts +3 -1
  134. package/lib/library/webpack/blocks/css.js +17 -6
  135. package/lib/library/webpack/blocks/css.js.map +1 -1
  136. package/lib/library/webpack/blocks/extractCssPlugin.d.ts +4 -3
  137. package/lib/library/webpack/blocks/extractCssPlugin.js +4 -6
  138. package/lib/library/webpack/blocks/extractCssPlugin.js.map +1 -1
  139. package/lib/library/webpack/blocks/filesClient.d.ts +3 -2
  140. package/lib/library/webpack/blocks/filesClient.js +7 -7
  141. package/lib/library/webpack/blocks/filesClient.js.map +1 -1
  142. package/lib/library/webpack/blocks/filesServer.d.ts +2 -1
  143. package/lib/library/webpack/blocks/filesServer.js +3 -3
  144. package/lib/library/webpack/blocks/filesServer.js.map +1 -1
  145. package/lib/library/webpack/blocks/js.d.ts +2 -1
  146. package/lib/library/webpack/blocks/js.js +1 -1
  147. package/lib/library/webpack/blocks/js.js.map +1 -1
  148. package/lib/library/webpack/blocks/nodeClient.d.ts +2 -1
  149. package/lib/library/webpack/blocks/nodeClient.js +2 -2
  150. package/lib/library/webpack/blocks/nodeClient.js.map +1 -1
  151. package/lib/library/webpack/blocks/optimize.d.ts +2 -1
  152. package/lib/library/webpack/blocks/optimize.js +3 -3
  153. package/lib/library/webpack/blocks/optimize.js.map +1 -1
  154. package/lib/library/webpack/blocks/pagesResolve.js +1 -1
  155. package/lib/library/webpack/blocks/pagesResolve.js.map +1 -1
  156. package/lib/library/webpack/blocks/postcssAssets.d.ts +2 -1
  157. package/lib/library/webpack/blocks/postcssAssets.js +2 -2
  158. package/lib/library/webpack/blocks/postcssAssets.js.map +1 -1
  159. package/lib/library/webpack/blocks/serverInline.d.ts +2 -1
  160. package/lib/library/webpack/blocks/serverInline.js.map +1 -1
  161. package/lib/library/webpack/blocks/ts.d.ts +2 -1
  162. package/lib/library/webpack/blocks/ts.js.map +1 -1
  163. package/lib/library/webpack/child-app/client/common.d.ts +2 -2
  164. package/lib/library/webpack/child-app/client/common.js +1 -1
  165. package/lib/library/webpack/child-app/client/common.js.map +1 -1
  166. package/lib/library/webpack/child-app/client/dev.d.ts +2 -2
  167. package/lib/library/webpack/child-app/client/dev.js +6 -5
  168. package/lib/library/webpack/child-app/client/dev.js.map +1 -1
  169. package/lib/library/webpack/child-app/client/prod.d.ts +2 -2
  170. package/lib/library/webpack/child-app/client/prod.js.map +1 -1
  171. package/lib/library/webpack/child-app/common.d.ts +2 -2
  172. package/lib/library/webpack/child-app/common.js.map +1 -1
  173. package/lib/library/webpack/child-app/server/common.d.ts +2 -2
  174. package/lib/library/webpack/child-app/server/common.js +1 -1
  175. package/lib/library/webpack/child-app/server/common.js.map +1 -1
  176. package/lib/library/webpack/child-app/server/dev.d.ts +2 -2
  177. package/lib/library/webpack/child-app/server/dev.js.map +1 -1
  178. package/lib/library/webpack/child-app/server/prod.d.ts +2 -2
  179. package/lib/library/webpack/child-app/server/prod.js.map +1 -1
  180. package/lib/library/webpack/common/client/prod.d.ts +2 -1
  181. package/lib/library/webpack/common/client/prod.js +4 -5
  182. package/lib/library/webpack/common/client/prod.js.map +1 -1
  183. package/lib/library/webpack/common/main.d.ts +2 -1
  184. package/lib/library/webpack/common/main.js +3 -3
  185. package/lib/library/webpack/common/main.js.map +1 -1
  186. package/lib/library/webpack/common/server/prod.d.ts +2 -1
  187. package/lib/library/webpack/common/server/prod.js +4 -5
  188. package/lib/library/webpack/common/server/prod.js.map +1 -1
  189. package/lib/library/webpack/index.js +1 -2
  190. package/lib/library/webpack/index.js.map +1 -1
  191. package/lib/library/webpack/loaders/image-loader/index.d.ts +2 -1
  192. package/lib/library/webpack/loaders/image-loader/index.js.map +1 -1
  193. package/lib/library/webpack/loaders/pagesResolve.d.ts +10 -1
  194. package/lib/library/webpack/loaders/pagesResolve.js +4 -3
  195. package/lib/library/webpack/loaders/pagesResolve.js.map +1 -1
  196. package/lib/library/webpack/loaders/replaceContent.d.ts +6 -1
  197. package/lib/library/webpack/loaders/replaceContent.js +4 -3
  198. package/lib/library/webpack/loaders/replaceContent.js.map +1 -1
  199. package/lib/library/webpack/module/client/common.js +1 -1
  200. package/lib/library/webpack/module/client/common.js.map +1 -1
  201. package/lib/library/webpack/module/externals.d.ts +1 -1
  202. package/lib/library/webpack/module/externals.js.map +1 -1
  203. package/lib/library/webpack/module/resolveExternal.d.ts +1 -1
  204. package/lib/library/webpack/module/resolveExternal.js.map +1 -1
  205. package/lib/library/webpack/module/server/common.js +1 -1
  206. package/lib/library/webpack/module/server/common.js.map +1 -1
  207. package/lib/library/webpack/plugins/LazyModuleInitialization.d.ts +2 -2
  208. package/lib/library/webpack/plugins/LazyModuleInitialization.js +1 -0
  209. package/lib/library/webpack/plugins/LazyModuleInitialization.js.map +1 -1
  210. package/lib/library/webpack/plugins/WebpackBar/utils/index.d.ts +7 -7
  211. package/lib/library/webpack/plugins/WebpackBar/utils/index.js.map +1 -1
  212. package/lib/library/webpack/plugins/WebpackBar/utils/webpack.d.ts +2 -2
  213. package/lib/library/webpack/plugins/WebpackBar/utils/webpack.js.map +1 -1
  214. package/lib/library/webpack/types/webpack.d.ts +2 -2
  215. package/lib/library/webpack/utils/files.d.ts +4 -3
  216. package/lib/library/webpack/utils/files.js +2 -2
  217. package/lib/library/webpack/utils/files.js.map +1 -1
  218. package/lib/library/webpack/utils/transpiler.d.ts +3 -2
  219. package/lib/library/webpack/utils/transpiler.js +2 -2
  220. package/lib/library/webpack/utils/transpiler.js.map +1 -1
  221. package/lib/library/webpack/utils/workersPool.d.ts +3 -6
  222. package/lib/library/webpack/utils/workersPool.js +1 -1
  223. package/lib/library/webpack/utils/workersPool.js.map +1 -1
  224. package/lib/models/config.d.ts +2 -3
  225. package/lib/models/config.js +32 -3
  226. package/lib/models/config.js.map +1 -1
  227. package/lib/schema/ConfigSchema.d.ts +13 -4
  228. package/lib/schema/autogeneratedSchema.json +1808 -2074
  229. package/lib/typings/configEntry/application.d.ts +81 -86
  230. package/lib/typings/configEntry/child-app.d.ts +10 -29
  231. package/lib/typings/configEntry/cli.d.ts +254 -0
  232. package/lib/typings/configEntry/{CheckAsyncTsConfig.js → cli.js} +1 -1
  233. package/lib/typings/configEntry/cli.js.map +1 -0
  234. package/lib/typings/configEntry/common.d.ts +16 -276
  235. package/lib/typings/configEntry/common.js +15 -0
  236. package/lib/typings/configEntry/common.js.map +1 -1
  237. package/lib/typings/configEntry/module.d.ts +10 -29
  238. package/lib/typings/configEntry/package.d.ts +2 -1
  239. package/lib/ui/commander.js +1 -1
  240. package/lib/ui/commander.js.map +1 -1
  241. package/lib/utils/applyTemplate.js.map +1 -1
  242. package/lib/utils/safeRequire.js +5 -1
  243. package/lib/utils/safeRequire.js.map +1 -1
  244. package/lib/utils/webpackBuild.d.ts +2 -1
  245. package/lib/utils/webpackBuild.js +3 -3
  246. package/lib/utils/webpackBuild.js.map +1 -1
  247. package/package.json +13 -9
  248. package/schema.json +1802 -2068
  249. package/src/api/analyze/providers/shared.ts +3 -2
  250. package/src/api/benchmark/__integration__/__fixtures__/tramvai.json +1 -8
  251. package/src/api/benchmark/index.ts +1 -1
  252. package/src/api/build/__integration__/__fixtures__/app/App.tsx +0 -1
  253. package/src/api/build/__integration__/__fixtures__/app/index.tsx +14 -8
  254. package/src/api/build/__integration__/__fixtures__/app/server.tsx +0 -1
  255. package/src/api/build/__integration__/__fixtures__/tramvai.json +1 -10
  256. package/src/api/build/__integration__/build.test.ts +4 -13
  257. package/src/api/build/child-app.ts +4 -4
  258. package/src/api/build/module.ts +2 -4
  259. package/src/api/build/providers/shared.ts +2 -2
  260. package/src/api/index.ts +6 -2
  261. package/src/api/shared/types/withConfig.ts +5 -6
  262. package/src/api/start/__integration__/__fixtures__/app/index.tsx +11 -7
  263. package/src/api/start/__integration__/__fixtures__/tramvai.json +6 -17
  264. package/src/api/start/__integration__/start.test.ts +1 -12
  265. package/src/api/start/providers/application/shared.ts +2 -2
  266. package/src/api/start/providers/child-app/shared.ts +9 -14
  267. package/src/api/start/providers/module/shared.ts +19 -30
  268. package/src/api/start/utils/banner.ts +3 -2
  269. package/src/api/start/utils/tips/tips.ts +11 -8
  270. package/src/api/start-prod/providers/application.ts +10 -14
  271. package/src/api/start-prod/providers/child-app.ts +4 -5
  272. package/src/api/start-prod/providers/shared.ts +4 -8
  273. package/src/builder/webpack/devServer/client.ts +22 -15
  274. package/src/builder/webpack/devServer/notifier.ts +6 -6
  275. package/src/builder/webpack/devServer/pool/process/pool.ts +3 -3
  276. package/src/builder/webpack/devServer/pool/thread/pool.ts +7 -0
  277. package/src/builder/webpack/devServer/server.ts +13 -6
  278. package/src/builder/webpack/providers/analyze/shared.ts +3 -2
  279. package/src/builder/webpack/providers/build/application/server.ts +5 -1
  280. package/src/builder/webpack/providers/build/client.ts +3 -2
  281. package/src/builder/webpack/providers/build/server.ts +1 -1
  282. package/src/builder/webpack/tokens.ts +4 -3
  283. package/src/builder/webpack/utils/copyBuildFile.ts +4 -5
  284. package/src/builder/webpack/utils/copyStatsJsonFile.ts +5 -2
  285. package/src/cli/CLI.ts +6 -6
  286. package/src/cli/index.ts +1 -1
  287. package/src/commands/analyze/command.ts +1 -1
  288. package/src/commands/benchmark/command.ts +1 -1
  289. package/src/commands/build/command.ts +2 -2
  290. package/src/commands/new/new.ts +0 -1
  291. package/src/commands/new/questions/packageManager.ts +1 -1
  292. package/src/commands/new/questions/template.ts +1 -1
  293. package/src/commands/new/questions/testingFramework.ts +1 -1
  294. package/src/commands/new/questions/type.ts +1 -1
  295. package/src/commands/new/steps/initializationGit.ts +1 -1
  296. package/src/commands/new/templates/app/monorepo/tramvai.json.hbs +6 -32
  297. package/src/commands/new/templates/app/multirepo/tramvai.json.hbs +6 -23
  298. package/src/commands/new/templates/child-app/monorepo/tramvai.json.hbs +3 -18
  299. package/src/commands/new/templates/child-app/multirepo/tramvai.json.hbs +3 -9
  300. package/src/commands/start/command.ts +2 -2
  301. package/src/commands/start-prod/command.ts +2 -2
  302. package/src/commands/static/application.ts +5 -14
  303. package/src/commands/static/command.ts +1 -1
  304. package/src/commands/static/generate.ts +2 -2
  305. package/src/commands/static/server.ts +5 -2
  306. package/src/commands/static/staticServer.ts +6 -3
  307. package/src/commands/update/updatePackageJson.ts +6 -2
  308. package/src/config/configManager.spec.ts +49 -0
  309. package/src/config/configManager.ts +123 -197
  310. package/src/config/showConfig.ts +2 -2
  311. package/src/config/validate.ts +14 -25
  312. package/src/di/tokens/config.ts +2 -1
  313. package/src/library/babel/index.ts +1 -0
  314. package/src/library/swc/__integration__/swc.build.test.ts +3 -21
  315. package/src/library/swc/__integration__/swc.start.test.ts +3 -21
  316. package/src/library/swc/index.ts +1 -1
  317. package/src/library/webpack/application/client/common.ts +7 -7
  318. package/src/library/webpack/application/client/dev.ts +9 -9
  319. package/src/library/webpack/application/client/prod/optimization/splitChunks.ts +43 -44
  320. package/src/library/webpack/application/client/prod.ts +3 -5
  321. package/src/library/webpack/application/server/common.ts +5 -8
  322. package/src/library/webpack/application/server/dev.ts +5 -6
  323. package/src/library/webpack/application/server/prod.ts +3 -9
  324. package/src/library/webpack/blocks/apiResolve.ts +1 -1
  325. package/src/library/webpack/blocks/configResolve.ts +2 -2
  326. package/src/library/webpack/blocks/configToEnv.ts +5 -2
  327. package/src/library/webpack/blocks/css.ts +26 -17
  328. package/src/library/webpack/blocks/extractCssPlugin.ts +11 -10
  329. package/src/library/webpack/blocks/filesClient.ts +52 -50
  330. package/src/library/webpack/blocks/filesServer.ts +4 -3
  331. package/src/library/webpack/blocks/js.ts +3 -2
  332. package/src/library/webpack/blocks/nodeClient.ts +4 -3
  333. package/src/library/webpack/blocks/optimize.ts +5 -6
  334. package/src/library/webpack/blocks/pagesResolve.ts +1 -1
  335. package/src/library/webpack/blocks/postcssAssets.ts +6 -7
  336. package/src/library/webpack/blocks/serverInline.ts +2 -1
  337. package/src/library/webpack/blocks/ts.ts +2 -1
  338. package/src/library/webpack/child-app/client/common.ts +3 -3
  339. package/src/library/webpack/child-app/client/dev.ts +8 -8
  340. package/src/library/webpack/child-app/client/prod.ts +2 -2
  341. package/src/library/webpack/child-app/common.ts +2 -2
  342. package/src/library/webpack/child-app/server/common.ts +3 -3
  343. package/src/library/webpack/child-app/server/dev.ts +2 -2
  344. package/src/library/webpack/child-app/server/prod.ts +2 -2
  345. package/src/library/webpack/common/client/prod.ts +10 -6
  346. package/src/library/webpack/common/main.ts +9 -4
  347. package/src/library/webpack/common/server/prod.ts +10 -6
  348. package/src/library/webpack/index.ts +2 -3
  349. package/src/library/webpack/loaders/image-loader/index.ts +2 -1
  350. package/src/library/webpack/loaders/pagesResolve.ts +17 -5
  351. package/src/library/webpack/loaders/replaceContent.ts +11 -2
  352. package/src/library/webpack/module/client/common.ts +1 -1
  353. package/src/library/webpack/module/externals.ts +1 -1
  354. package/src/library/webpack/module/resolveExternal.ts +1 -1
  355. package/src/library/webpack/module/server/common.ts +1 -1
  356. package/src/library/webpack/plugins/LazyModuleInitialization.ts +6 -1
  357. package/src/library/webpack/plugins/WebpackBar/utils/index.ts +8 -8
  358. package/src/library/webpack/plugins/WebpackBar/utils/webpack.ts +1 -1
  359. package/src/library/webpack/types/webpack.ts +2 -2
  360. package/src/library/webpack/utils/files.ts +4 -3
  361. package/src/library/webpack/utils/transpiler.ts +6 -11
  362. package/src/library/webpack/utils/workersPool.ts +6 -9
  363. package/src/models/config.spec.ts +352 -0
  364. package/src/models/config.ts +41 -9
  365. package/src/schema/ConfigSchema.ts +15 -4
  366. package/src/schema/autogeneratedSchema.json +1808 -2074
  367. package/src/schema/tramvai.spec.ts +89 -184
  368. package/src/typings/configEntry/application.ts +85 -87
  369. package/src/typings/configEntry/child-app.ts +10 -30
  370. package/src/typings/configEntry/cli.ts +271 -0
  371. package/src/typings/configEntry/common.ts +26 -278
  372. package/src/typings/configEntry/module.ts +11 -30
  373. package/src/typings/configEntry/package.ts +3 -1
  374. package/src/ui/commander.ts +1 -1
  375. package/src/utils/applyTemplate.ts +2 -2
  376. package/src/utils/safeRequire.ts +6 -1
  377. package/src/utils/webpackBuild.ts +4 -3
  378. package/lib/library/webpack/plugins/DedupePlugin/DedupePlugin.d.ts +0 -37
  379. package/lib/library/webpack/plugins/DedupePlugin/DedupePlugin.js +0 -241
  380. package/lib/library/webpack/plugins/DedupePlugin/DedupePlugin.js.map +0 -1
  381. package/lib/library/webpack/plugins/DedupePlugin/index.d.ts +0 -1
  382. package/lib/library/webpack/plugins/DedupePlugin/index.js +0 -6
  383. package/lib/library/webpack/plugins/DedupePlugin/index.js.map +0 -1
  384. package/lib/typings/configEntry/CheckAsyncTsConfig.d.ts +0 -13
  385. package/lib/typings/configEntry/CheckAsyncTsConfig.js.map +0 -1
  386. package/src/library/webpack/plugins/DedupePlugin/DedupePlugin.spec.ts +0 -95
  387. package/src/library/webpack/plugins/DedupePlugin/DedupePlugin.ts +0 -307
  388. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/index.js +0 -3
  389. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/node_modules/package-dep/index.js +0 -1
  390. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/node_modules/package-dep/package.json +0 -7
  391. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-1/package.json +0 -7
  392. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/index.js +0 -3
  393. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/node_modules/package-dep/index.js +0 -1
  394. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/node_modules/package-dep/package.json +0 -7
  395. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-2/package.json +0 -7
  396. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/index.js +0 -3
  397. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/node_modules/package-dep/index.js +0 -1
  398. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/node_modules/package-dep/package.json +0 -7
  399. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-3/package.json +0 -7
  400. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-dep/index.js +0 -1
  401. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-dep/package.json +0 -7
  402. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/index.js +0 -3
  403. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/node_modules/package-esm-dep/index.js +0 -1
  404. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/node_modules/package-esm-dep/package.json +0 -8
  405. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-1/package.json +0 -8
  406. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/index.js +0 -3
  407. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/node_modules/package-esm-dep/index.js +0 -1
  408. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/node_modules/package-esm-dep/package.json +0 -8
  409. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/node_modules/package-esm-2/package.json +0 -8
  410. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/package-lock.json +0 -0
  411. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/package.json +0 -14
  412. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/src/index.js +0 -9
  413. package/src/library/webpack/plugins/DedupePlugin/__fixtures__/dedupe/tramvai.json +0 -67
  414. package/src/library/webpack/plugins/DedupePlugin/__integration__/DedupePlugin.test.ts +0 -90
  415. package/src/library/webpack/plugins/DedupePlugin/index.ts +0 -1
  416. package/src/typings/configEntry/CheckAsyncTsConfig.ts +0 -15
@@ -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
  };
@@ -3,8 +3,9 @@ import TerserPlugin from 'terser-webpack-plugin';
3
3
  import CssMinimizer from 'css-minimizer-webpack-plugin';
4
4
  import CssoWebpackPlugin from 'csso-webpack-plugin';
5
5
  import type { ConfigManager } from '../../../config/configManager';
6
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
6
7
 
7
- export default (configManager: ConfigManager) => (config: Config) => {
8
+ export default (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
8
9
  const { modern, debug, disableProdOptimization } = configManager;
9
10
 
10
11
  if (disableProdOptimization) {
@@ -33,14 +34,12 @@ export default (configManager: ConfigManager) => (config: Config) => {
33
34
  return;
34
35
  }
35
36
 
36
- const {
37
- configurations: { terserParallel },
38
- } = configManager.build;
37
+ const { terser } = configManager;
39
38
 
40
39
  config.plugin('terser').use(TerserPlugin, [
41
40
  {
42
41
  extractComments: false,
43
- parallel: terserParallel,
42
+ parallel: terser.parallel,
44
43
  terserOptions: {
45
44
  ecma: modern ? 6 : 5,
46
45
  mangle: {
@@ -59,7 +58,7 @@ export default (configManager: ConfigManager) => (config: Config) => {
59
58
  },
60
59
  ]);
61
60
 
62
- if (configManager.build.configurations.cssMinimize === 'csso') {
61
+ if (configManager.cssMinimize === 'csso') {
63
62
  config.plugin('csso').use(CssoWebpackPlugin as any, [{ restructure: false }]);
64
63
  } else {
65
64
  config.plugin('css-minimizer').use(CssMinimizer);
@@ -5,7 +5,7 @@ import type { ApplicationConfigEntry } from '../../../typings/configEntry/applic
5
5
 
6
6
  export const pagesResolve =
7
7
  (configManager: ConfigManager<ApplicationConfigEntry>) => (config: Config) => {
8
- const { fileSystemPages } = configManager.build.configurations;
8
+ const { fileSystemPages } = configManager;
9
9
 
10
10
  config.module
11
11
  .rule('file-system-pages')
@@ -4,17 +4,16 @@ import PostcssAssetsPlugin from 'postcss-assets-webpack-plugin';
4
4
  import type { ConfigManager } from '../../../config/configManager';
5
5
 
6
6
  import { safeRequire } from '../../../utils/safeRequire';
7
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
7
8
 
8
9
  export const postcssAssetsWebpackRulesFactory =
9
- (configManager: ConfigManager) => (config: Config) => {
10
- const { postcss: { assetsConfig: postcssAssetsConfigPath = '' } = {} } =
11
- configManager.build.configurations;
10
+ (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
11
+ const {
12
+ postcss: { assetsConfig: postcssAssetsConfigPath = '' },
13
+ } = configManager;
12
14
 
13
15
  const postcssAssetsConfig = postcssAssetsConfigPath
14
- ? safeRequire(
15
- path.resolve(configManager.rootDir, postcssAssetsConfigPath),
16
- process.env.NODE_ENV === 'test'
17
- ) ?? {
16
+ ? safeRequire(path.resolve(configManager.rootDir, postcssAssetsConfigPath)) ?? {
18
17
  plugins: [],
19
18
  }
20
19
  : { plugins: [] };
@@ -1,9 +1,10 @@
1
1
  import Config from 'webpack-chain';
2
2
  import type { ConfigManager } from '../../../config/configManager';
3
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
3
4
  import js from './js';
4
5
  import ts from './ts';
5
6
 
6
- export const serverInline = (configManager: ConfigManager) => (config: Config) => {
7
+ export const serverInline = (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
7
8
  // создаём клиентский конфиг и отключаем modern режим
8
9
  const clientConfigManager = configManager.withSettings({ buildType: 'client', modern: false });
9
10
 
@@ -2,8 +2,9 @@ import type Config from 'webpack-chain';
2
2
  import { createWorkerPoolTranspiler } from '../utils/workersPool';
3
3
  import type { ConfigManager } from '../../../config/configManager';
4
4
  import { addTranspilerLoader, getTranspilerConfig } from '../utils/transpiler';
5
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
5
6
 
6
- export default (configManager: ConfigManager) => (config: Config) => {
7
+ export default (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
7
8
  const transpilerConfig = getTranspilerConfig(configManager, { typescript: true });
8
9
 
9
10
  const cfg = config.module
@@ -2,7 +2,6 @@ import type Config from 'webpack-chain';
2
2
 
3
3
  import { StatsWriterPlugin } from 'webpack-stats-plugin';
4
4
  import type { ConfigManager } from '../../../../config/configManager';
5
- import type { ModuleConfigEntry } from '../../../../typings/configEntry/module';
6
5
 
7
6
  import common from '../common';
8
7
  import files from '../../blocks/filesClient';
@@ -12,8 +11,9 @@ import type { LazyLibraryOptions } from '../../plugins/LazyLibraryInitialization
12
11
  import { LazyLibraryInitialization } from '../../plugins/LazyLibraryInitialization';
13
12
  import { DEFAULT_STATS_FIELDS, DEFAULT_STATS_OPTIONS } from '../../constants/stats';
14
13
  import { extractCssPluginFactory } from '../../blocks/extractCssPlugin';
14
+ import type { ChildAppConfigEntry } from '../../../../typings/configEntry/child-app';
15
15
 
16
- export default (configManager: ConfigManager<ModuleConfigEntry>) => (config: Config) => {
16
+ export default (configManager: ConfigManager<ChildAppConfigEntry>) => (config: Config) => {
17
17
  const { name, version } = configManager;
18
18
  config.name('client');
19
19
 
@@ -22,7 +22,7 @@ export default (configManager: ConfigManager<ModuleConfigEntry>) => (config: Con
22
22
  config.target(['web', 'es5']);
23
23
 
24
24
  config.output
25
- .path(configManager.getBuildPath())
25
+ .path(configManager.buildPath)
26
26
  .publicPath('auto')
27
27
  .library(configManager.name)
28
28
  .filename(`[name]_client@${version}.js`)
@@ -3,17 +3,17 @@ import WebpackBar from 'webpackbar';
3
3
  import webpack from 'webpack';
4
4
  import ReactRefreshPlugin from '@pmmmwh/react-refresh-webpack-plugin';
5
5
  import type { ConfigManager } from '../../../../config/configManager';
6
- import type { ModuleConfigEntry } from '../../../../typings/configEntry/module';
7
6
  import common from './common';
8
7
  import commonDev from '../../common/dev';
9
8
  import type { UI_SHOW_PROGRESS_TOKEN } from '../../../../di/tokens';
10
9
  import { extendEntry } from '../../utils/extendEntry';
10
+ import type { ChildAppConfigEntry } from '../../../../typings/configEntry/child-app';
11
11
 
12
12
  export const webpackClientConfig = ({
13
13
  configManager,
14
14
  showProgress,
15
15
  }: {
16
- configManager: ConfigManager<ModuleConfigEntry>;
16
+ configManager: ConfigManager<ChildAppConfigEntry>;
17
17
  showProgress: typeof UI_SHOW_PROGRESS_TOKEN | null;
18
18
  }) => {
19
19
  const config = new Config();
@@ -38,18 +38,18 @@ export const webpackClientConfig = ({
38
38
  },
39
39
  ]);
40
40
 
41
- if (configManager.hotRefresh) {
42
- const { configurations: { hotRefreshOptions = {} } = {} } = configManager.serve;
41
+ const { hotRefresh } = configManager;
43
42
 
43
+ if (hotRefresh?.enabled) {
44
44
  config.plugin('hot-module').use(webpack.HotModuleReplacementPlugin);
45
45
  config.plugin('react-refresh').use(ReactRefreshPlugin, [
46
46
  {
47
- ...hotRefreshOptions,
47
+ ...hotRefresh.options,
48
48
  overlay:
49
- typeof hotRefreshOptions.overlay === 'boolean'
50
- ? hotRefreshOptions.overlay
49
+ typeof hotRefresh.options?.overlay === 'boolean'
50
+ ? hotRefresh.options.overlay
51
51
  : {
52
- ...hotRefreshOptions.overlay,
52
+ ...hotRefresh.options?.overlay,
53
53
  },
54
54
  },
55
55
  ]);
@@ -1,14 +1,14 @@
1
1
  import Config from 'webpack-chain';
2
2
  import type { ConfigManager } from '../../../../config/configManager';
3
- import type { ModuleConfigEntry } from '../../../../typings/configEntry/module';
4
3
  import common from './common';
5
4
  import optimize from '../../blocks/optimize';
6
5
  import commonProd from '../../common/client/prod';
6
+ import type { ChildAppConfigEntry } from '../../../../typings/configEntry/child-app';
7
7
 
8
8
  export const webpackClientConfig = ({
9
9
  configManager,
10
10
  }: {
11
- configManager: ConfigManager<ModuleConfigEntry>;
11
+ configManager: ConfigManager<ChildAppConfigEntry>;
12
12
  }) => {
13
13
  const config = new Config();
14
14
 
@@ -4,7 +4,6 @@ import path from 'path';
4
4
  import common from '../common/main';
5
5
 
6
6
  import type { ConfigManager } from '../../../config/configManager';
7
- import type { ModuleConfigEntry } from '../../../typings/configEntry/module';
8
7
 
9
8
  import ts from '../blocks/ts';
10
9
  import js from '../blocks/js';
@@ -14,8 +13,9 @@ import type { ModuleFederationPluginOptions } from '../types/webpack';
14
13
  import { getSharedModules } from './moduleFederationShared';
15
14
  import { configToEnv } from '../blocks/configToEnv';
16
15
  import sourcemaps from '../blocks/sourcemaps';
16
+ import type { ChildAppConfigEntry } from '../../../typings/configEntry/child-app';
17
17
 
18
- export default (configManager: ConfigManager<ModuleConfigEntry>) => (config: Config) => {
18
+ export default (configManager: ConfigManager<ChildAppConfigEntry>) => (config: Config) => {
19
19
  const { name, root, sourceMap } = configManager;
20
20
 
21
21
  const cssLocalIdentName =
@@ -1,14 +1,14 @@
1
1
  import type Config from 'webpack-chain';
2
2
 
3
3
  import type { ConfigManager } from '../../../../config/configManager';
4
- import type { ModuleConfigEntry } from '../../../../typings/configEntry/module';
5
4
 
6
5
  import common from '../common';
7
6
  import files from '../../blocks/filesServer';
8
7
  import RuntimePathPlugin from '../../plugins/RuntimePathPlugin';
9
8
  import { extractCssPluginFactory } from '../../blocks/extractCssPlugin';
9
+ import type { ChildAppConfigEntry } from '../../../../typings/configEntry/child-app';
10
10
 
11
- export default (configManager: ConfigManager<ModuleConfigEntry>) => (config: Config) => {
11
+ export default (configManager: ConfigManager<ChildAppConfigEntry>) => (config: Config) => {
12
12
  config.name('server');
13
13
 
14
14
  config.batch(common(configManager));
@@ -16,7 +16,7 @@ export default (configManager: ConfigManager<ModuleConfigEntry>) => (config: Con
16
16
  config.target('node');
17
17
 
18
18
  config.output
19
- .path(configManager.getBuildPath())
19
+ .path(configManager.buildPath)
20
20
  .publicPath('')
21
21
  .filename(`[name]_server@${configManager.version}.js`)
22
22
  .chunkFilename('[name]_server.chunk.[hash].js');
@@ -1,16 +1,16 @@
1
1
  import Config from 'webpack-chain';
2
2
  import WebpackBar from 'webpackbar';
3
3
  import type { ConfigManager } from '../../../../config/configManager';
4
- import type { ModuleConfigEntry } from '../../../../typings/configEntry/module';
5
4
  import common from './common';
6
5
  import commonDev from '../../common/dev';
7
6
  import type { UI_SHOW_PROGRESS_TOKEN } from '../../../../di/tokens';
7
+ import type { ChildAppConfigEntry } from '../../../../typings/configEntry/child-app';
8
8
 
9
9
  export const webpackServerConfig = ({
10
10
  configManager,
11
11
  showProgress,
12
12
  }: {
13
- configManager: ConfigManager<ModuleConfigEntry>;
13
+ configManager: ConfigManager<ChildAppConfigEntry>;
14
14
  showProgress: typeof UI_SHOW_PROGRESS_TOKEN | null;
15
15
  }) => {
16
16
  const config = new Config();
@@ -1,14 +1,14 @@
1
1
  import Config from 'webpack-chain';
2
2
  import type { ConfigManager } from '../../../../config/configManager';
3
- import type { ModuleConfigEntry } from '../../../../typings/configEntry/module';
4
3
  import common from './common';
5
4
  import optimize from '../../blocks/optimize';
6
5
  import commonProd from '../../common/server/prod';
6
+ import type { ChildAppConfigEntry } from '../../../../typings/configEntry/child-app';
7
7
 
8
8
  export const webpackServerConfig = ({
9
9
  configManager,
10
10
  }: {
11
- configManager: ConfigManager<ModuleConfigEntry>;
11
+ configManager: ConfigManager<ChildAppConfigEntry>;
12
12
  }) => {
13
13
  const config = new Config();
14
14
 
@@ -1,9 +1,10 @@
1
1
  import type Config from 'webpack-chain';
2
2
  import { DuplicatesPlugin } from 'inspectpack/plugin';
3
- import { createDedupePlugin } from '../../plugins/DedupePlugin';
3
+ import { createDedupePlugin } from '@tinkoff/webpack-dedupe-plugin';
4
4
  import type { ConfigManager } from '../../../../config/configManager';
5
+ import type { CliConfigEntry } from '../../../../typings/configEntry/cli';
5
6
 
6
- export default (configManager: ConfigManager) => (config: Config) => {
7
+ export default (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
7
8
  config.mode('production');
8
9
 
9
10
  config.plugin('define').tap((args) => [
@@ -13,10 +14,13 @@ export default (configManager: ConfigManager) => (config: Config) => {
13
14
  },
14
15
  ]);
15
16
 
16
- if (configManager.dedupe) {
17
- config
18
- .plugin('dedupe-plugin')
19
- .use(createDedupePlugin(configManager.dedupe, configManager.dedupeIgnore));
17
+ if (configManager.dedupe.enabled) {
18
+ config.plugin('dedupe-plugin').use(
19
+ createDedupePlugin(
20
+ configManager.dedupe.strategy,
21
+ configManager.dedupe.ignore?.map((ignore) => new RegExp(`^${ignore}`))
22
+ )
23
+ );
20
24
  } else {
21
25
  config.plugin('duplicates-plugin').use(DuplicatesPlugin, [
22
26
  {
@@ -7,6 +7,8 @@ import resolve from '../blocks/resolve';
7
7
  import ignoreLocales from '../blocks/ignoreLocales';
8
8
  import type { ConfigManager } from '../../../config/configManager';
9
9
  import { safeRequireResolve } from '../../../utils/safeRequire';
10
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
11
+ import { getPostcssConfigPath } from '../blocks/css';
10
12
 
11
13
  const filterNonExisted = (filePaths: string[]) => {
12
14
  return filePaths.filter((filePath) => {
@@ -15,9 +17,8 @@ const filterNonExisted = (filePaths: string[]) => {
15
17
  };
16
18
 
17
19
  // eslint-disable-next-line import/no-default-export
18
- export default (configManager: ConfigManager) => (config: Config) => {
20
+ export default (configManager: ConfigManager<CliConfigEntry>) => (config: Config) => {
19
21
  const env = configManager.env === 'development' ? 'dev' : 'prod';
20
- const { postcss: { config: postcssConfig } = {} } = configManager.build.configurations;
21
22
 
22
23
  config.context(path.resolve(__dirname, '..', '..', '..', '..'));
23
24
  config.batch(resolve(configManager));
@@ -62,7 +63,10 @@ export default (configManager: ConfigManager) => (config: Config) => {
62
63
  // It may be missing in cases when cli is running programmaticaly
63
64
  config: filterNonExisted([path.resolve(configManager.rootDir, 'tramvai.json')]),
64
65
  css: filterNonExisted([
65
- postcssConfig && safeRequireResolve(path.resolve(configManager.rootDir, postcssConfig)),
66
+ safeRequireResolve(
67
+ path.resolve(configManager.rootDir, getPostcssConfigPath(configManager)),
68
+ true
69
+ ),
66
70
  ]),
67
71
  },
68
72
  });
@@ -84,7 +88,8 @@ export default (configManager: ConfigManager) => (config: Config) => {
84
88
  .plugin('define')
85
89
  .use(webpack.DefinePlugin, [
86
90
  {
87
- ...configManager.build.configurations.definePlugin[env],
91
+ ...configManager.define.shared,
92
+ ...configManager.define[configManager.env],
88
93
 
89
94
  'process.env.APP_ID': JSON.stringify(configManager.name || 'common'),
90
95
  'process.env.APP_VERSION': JSON.stringify(process.env.APP_VERSION),
@@ -1,8 +1,9 @@
1
1
  import type Config from 'webpack-chain';
2
- import { createDedupePlugin } from '../../plugins/DedupePlugin';
2
+ import { createDedupePlugin } from '@tinkoff/webpack-dedupe-plugin';
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
  config.mode('production');
7
8
 
8
9
  config.plugin('define').tap((args) => [
@@ -12,9 +13,12 @@ export default (configManager: ConfigManager) => (config: Config) => {
12
13
  },
13
14
  ]);
14
15
 
15
- if (configManager.dedupe) {
16
- config
17
- .plugin('dedupe-plugin')
18
- .use(createDedupePlugin(configManager.dedupe, configManager.dedupeIgnore));
16
+ if (configManager.dedupe.enabled) {
17
+ config.plugin('dedupe-plugin').use(
18
+ createDedupePlugin(
19
+ configManager.dedupe.strategy,
20
+ configManager.dedupe.ignore?.map((ignore) => new RegExp(`^${ignore}`))
21
+ )
22
+ );
19
23
  }
20
24
  };
@@ -1,15 +1,14 @@
1
1
  import Config from 'webpack-chain';
2
- import { ConfigManager } from '../../config/configManager';
2
+ import { createConfigManager } from '../../config/configManager';
3
3
  import { toWebpackConfig } from './utils/toWebpackConfig';
4
4
  import resolve from './blocks/resolve';
5
5
 
6
6
  const config = new Config();
7
- const configManager = new ConfigManager(
7
+ const configManager = createConfigManager(
8
8
  {
9
9
  name: 'platform-cli',
10
10
  root: __dirname,
11
11
  type: 'package',
12
- commands: {},
13
12
  },
14
13
  {}
15
14
  );
@@ -1,9 +1,10 @@
1
1
  import sizeOf from 'image-size';
2
+ import type { LoaderContext } from 'webpack';
2
3
 
3
4
  /**
4
5
  * Reuse file-loader logic, but return a object with src and size of image
5
6
  */
6
- export default function (content) {
7
+ export default function (this: LoaderContext<{}>, content: string) {
7
8
  const result = require('file-loader').call(this, content);
8
9
 
9
10
  const dimensions = sizeOf(this.resourcePath);