@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
@@ -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);
@@ -1,14 +1,24 @@
1
1
  import path from 'path';
2
2
  import readDir from 'fs-readdir-recursive';
3
3
  import fs from 'fs';
4
+ import type { LoaderDefinitionFunction } from 'webpack';
5
+ import type { ApplicationConfigEntry } from '../../../api';
4
6
 
5
7
  const LAYOUT_FILENAME = '_layout.tsx';
6
8
  const ERROR_BOUNDARY_FILENAME = '_error.tsx';
7
9
 
8
- export default function () {
10
+ interface Options {
11
+ rootDir: string;
12
+ root: string;
13
+ extensions: string[];
14
+ fileSystemPages: ApplicationConfigEntry['fileSystemPages'];
15
+ }
16
+
17
+ // eslint-disable-next-line func-style
18
+ const pagesResolve: LoaderDefinitionFunction<Options> = function () {
9
19
  const { fileSystemPages, rootDir, root, extensions } = this.getOptions();
10
- const fsLayouts = [];
11
- const fsErrorBoundaries = [];
20
+ const fsLayouts: string[] = [];
21
+ const fsErrorBoundaries: string[] = [];
12
22
 
13
23
  this.cacheable(false);
14
24
 
@@ -24,7 +34,7 @@ export default function () {
24
34
  this.addContextDependency(pagesDir);
25
35
 
26
36
  // skip files whose name starts with dot or underscore symbols
27
- const pagesFiles = readDir(pagesDir, (name) => name[0] !== '.' && name[0] !== '_');
37
+ const pagesFiles = readDir(pagesDir, (name: string) => name[0] !== '.' && name[0] !== '_');
28
38
  const fsPages = [];
29
39
 
30
40
  for (const file of pagesFiles) {
@@ -103,4 +113,6 @@ export default function () {
103
113
  }`;
104
114
 
105
115
  return code;
106
- }
116
+ };
117
+
118
+ export default pagesResolve;
@@ -1,4 +1,11 @@
1
- export default function () {
1
+ import type { LoaderDefinition } from 'webpack';
2
+
3
+ interface Options {
4
+ code: string;
5
+ }
6
+
7
+ // eslint-disable-next-line func-style
8
+ const replaceContent: LoaderDefinition<Options> = function () {
2
9
  const { code } = this.getOptions();
3
10
 
4
11
  // выставляем флаг, что данный модуль не кешируется т.к. в контенте могут быть данные которые будут меняться от сборки к сборке,
@@ -6,4 +13,6 @@ export default function () {
6
13
  this.cacheable(false);
7
14
 
8
15
  return code;
9
- }
16
+ };
17
+
18
+ export default replaceContent;
@@ -20,7 +20,7 @@ export default (configManager: ConfigManager<ModuleConfigEntry>) => (config: Con
20
20
  config.target(['web', 'es5']);
21
21
 
22
22
  config.output
23
- .path(configManager.getBuildPath())
23
+ .path(configManager.buildPath)
24
24
  .publicPath('')
25
25
  .library(configManager.name)
26
26
  .libraryTarget('lazy')
@@ -14,4 +14,4 @@ export default modules.reduce((acc, name) => {
14
14
  };
15
15
 
16
16
  return acc;
17
- }, {});
17
+ }, {} as Record<string, {}>);
@@ -1 +1 @@
1
- export default (name) => ['__externals', name];
1
+ export default (name: string) => ['__externals', name];
@@ -15,7 +15,7 @@ export default (configManager: ConfigManager<ModuleConfigEntry>) => (config: Con
15
15
  config.target('node');
16
16
 
17
17
  config.output
18
- .path(configManager.getBuildPath())
18
+ .path(configManager.buildPath)
19
19
  .publicPath('')
20
20
  .filename('[name]_server.js')
21
21
  .chunkFilename('[name]_server.chunk.js')
@@ -1,5 +1,6 @@
1
1
  import type { Compiler, LibraryOptions } from 'webpack';
2
2
  import { library, sources } from 'webpack';
3
+ // @ts-ignore
3
4
  // eslint-disable-next-line no-restricted-imports
4
5
  import ExportPropertyLibraryPlugin from 'webpack/lib/library/ExportPropertyLibraryPlugin';
5
6
 
@@ -35,7 +36,11 @@ export default class LazyModuleInitialization extends library.AbstractLibraryPlu
35
36
  };
36
37
  }
37
38
 
38
- render(source: sources.Source, context, { options: { name } }) {
39
+ render(
40
+ source: sources.Source,
41
+ context: unknown,
42
+ { options: { name } }: { options: { name: string } }
43
+ ) {
39
44
  // оборачиваем код модуля в lazy-обёртку
40
45
  return new sources.ConcatSource(
41
46
  'window.__externals = window.__externals || {};\n',
@@ -1,35 +1,35 @@
1
1
  import { sep } from 'path';
2
2
 
3
- export function first(arr) {
3
+ export function first<T>(arr: T[]): T {
4
4
  return arr[0];
5
5
  }
6
6
 
7
- export function last(arr) {
7
+ export function last<T>(arr: T[]): T | null {
8
8
  return arr.length ? arr[arr.length - 1] : null;
9
9
  }
10
10
 
11
- export function startCase(str) {
11
+ export function startCase(str: string) {
12
12
  return str[0].toUpperCase() + str.substr(1);
13
13
  }
14
14
 
15
- export function firstMatch(regex, str) {
15
+ export function firstMatch(regex: RegExp, str: string) {
16
16
  const m = regex.exec(str);
17
17
  return m ? m[0] : null;
18
18
  }
19
19
 
20
- export function hasValue(s) {
20
+ export function hasValue(s: any) {
21
21
  return s && s.length;
22
22
  }
23
23
 
24
- export function removeAfter(delimiter, str) {
24
+ export function removeAfter(delimiter: string, str: string) {
25
25
  return first(str.split(delimiter)) || '';
26
26
  }
27
27
 
28
- export function removeBefore(delimiter, str) {
28
+ export function removeBefore(delimiter: string, str: string) {
29
29
  return last(str.split(delimiter)) || '';
30
30
  }
31
31
 
32
- export function range(len) {
32
+ export function range(len: number) {
33
33
  const arr = [];
34
34
  for (let i = 0; i < len; i++) {
35
35
  arr.push(i);
@@ -4,7 +4,7 @@ import { nodeModules, NEXT } from './consts';
4
4
 
5
5
  import { removeAfter, removeBefore, hasValue, firstMatch } from '.';
6
6
 
7
- export const parseRequest = (requestStr) => {
7
+ export const parseRequest = (requestStr: string) => {
8
8
  const parts = (requestStr || '').split('!');
9
9
 
10
10
  const file = path.relative(
@@ -6,7 +6,7 @@ export type ModuleFederationPluginOptions = ConstructorParameters<
6
6
 
7
7
  export type ModuleFederationSharedObject = Record<
8
8
  string,
9
- Exclude<Exclude<ModuleFederationPluginOptions['shared'], any[]>[string], string>
9
+ Exclude<Exclude<Required<ModuleFederationPluginOptions>['shared'], any[]>[string], string>
10
10
  >;
11
11
 
12
- export type SplitChunksOptions = Configuration['optimization']['splitChunks'];
12
+ export type SplitChunksOptions = Required<Required<Configuration>['optimization']>['splitChunks'];
@@ -1,9 +1,10 @@
1
1
  import type Config from 'webpack-chain';
2
2
  import type { ConfigManager } from '../../../config/configManager';
3
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
3
4
  import { addTranspilerLoader, getTranspilerConfig } from './transpiler';
4
5
 
5
6
  export const addSvgrLoader = (
6
- configManager: ConfigManager,
7
+ configManager: ConfigManager<CliConfigEntry>,
7
8
  config: Config,
8
9
  svgoOptions: Record<string, any>
9
10
  ) => {
@@ -23,9 +24,9 @@ export const addSvgrLoader = (
23
24
  svgrConfig.use('svgr').loader('@svgr/webpack').options({ babel: false, svgo: svgoOptions }).end();
24
25
  };
25
26
 
26
- export const getSvgoOptions = (configManager: ConfigManager) => {
27
+ export const getSvgoOptions = (configManager: ConfigManager<CliConfigEntry>) => {
27
28
  return {
28
- plugins: configManager.build?.configurations?.svgo?.plugins ?? [
29
+ plugins: configManager.svgo?.plugins ?? [
29
30
  {
30
31
  cleanupIDs: false,
31
32
  },