@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
@@ -5,6 +5,7 @@ import { getSwcOptions } from '../../swc';
5
5
  import babelConfig from '../../babel';
6
6
  import type { Env } from '../../../typings/Env';
7
7
  import type { Target } from '../../../typings/target';
8
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
8
9
 
9
10
  export type TranspilerConfig = {
10
11
  env: Env;
@@ -25,7 +26,7 @@ export type TranspilerConfig = {
25
26
  };
26
27
 
27
28
  export const addTranspilerLoader = (
28
- configManager: ConfigManager,
29
+ configManager: ConfigManager<CliConfigEntry>,
29
30
  rule: Config.Use,
30
31
  transpilerConfig: TranspilerConfig
31
32
  ) => {
@@ -49,16 +50,10 @@ Please run "tramvai add --dev @tramvai/swc-integration" to fix the problem
49
50
  };
50
51
 
51
52
  export const getTranspilerConfig = (
52
- configManager: ConfigManager,
53
+ configManager: ConfigManager<CliConfigEntry>,
53
54
  overrideOptions: Partial<TranspilerConfig> = {}
54
55
  ): TranspilerConfig => {
55
- const {
56
- generateDataQaTag,
57
- alias,
58
- removeTypeofWindow,
59
- enableFillActionNamePlugin,
60
- excludesPresetEnv,
61
- } = configManager.build.configurations;
56
+ const { generateDataQaTag, alias, enableFillActionNamePlugin, excludesPresetEnv } = configManager;
62
57
  const { env, modern } = configManager;
63
58
 
64
59
  return {
@@ -68,8 +63,8 @@ export const getTranspilerConfig = (
68
63
  modern,
69
64
  alias,
70
65
  tramvai: true,
71
- removeTypeofWindow,
72
- hot: configManager.hotRefresh,
66
+ removeTypeofWindow: true,
67
+ hot: !!configManager.hotRefresh.enabled,
73
68
  excludesPresetEnv,
74
69
  enableFillActionNamePlugin,
75
70
  rootDir: configManager.rootDir,
@@ -2,6 +2,7 @@ import * as threadLoader from 'thread-loader';
2
2
  import { getPool } from 'thread-loader/dist/workerPools';
3
3
  import os from 'os';
4
4
  import type { ConfigManager } from '../../../config/configManager';
5
+ import type { CliConfigEntry } from '../../../typings/configEntry/cli';
5
6
 
6
7
  // fork https://github.com/webpack-contrib/thread-loader/blob/76535bfaafd70bd1ec50e66541d2ad8a64175880/src/workerPools.js#L6
7
8
  function getCpuNumber() {
@@ -15,17 +16,13 @@ function calculateNumberOfWorkers() {
15
16
  return Math.max(1, cpus / 2 - 1);
16
17
  }
17
18
 
18
- const getCustomConfig = (configManager: ConfigManager) => {
19
- const {
20
- build: {
21
- configurations: { threadLoader: additionalConfig },
22
- },
23
- } = configManager;
19
+ const getCustomConfig = (configManager: ConfigManager<CliConfigEntry>): any => {
20
+ const { threadLoader: additionalConfig } = configManager;
24
21
 
25
22
  return additionalConfig || {};
26
23
  };
27
24
 
28
- const createTranspilerConfig = (configManager: ConfigManager) => {
25
+ const createTranspilerConfig = (configManager: ConfigManager<CliConfigEntry>) => {
29
26
  return {
30
27
  name: 'transpiler',
31
28
  poolTimeout: configManager.env === 'development' ? Infinity : undefined,
@@ -34,7 +31,7 @@ const createTranspilerConfig = (configManager: ConfigManager) => {
34
31
  };
35
32
  };
36
33
 
37
- export const createWorkerPoolTranspiler = (configManager: ConfigManager) => {
34
+ export const createWorkerPoolTranspiler = (configManager: ConfigManager<CliConfigEntry>) => {
38
35
  const config = createTranspilerConfig(configManager);
39
36
 
40
37
  if (!(createWorkerPoolTranspiler as any).warmup) {
@@ -56,6 +53,6 @@ export const createWorkerPoolTranspiler = (configManager: ConfigManager) => {
56
53
  return config;
57
54
  };
58
55
 
59
- export const closeWorkerPoolTranspiler = (configManager: ConfigManager) => {
56
+ export const closeWorkerPoolTranspiler = (configManager: ConfigManager<CliConfigEntry>) => {
60
57
  getPool(createTranspilerConfig(configManager))?.disposeWorkers();
61
58
  };
@@ -0,0 +1,352 @@
1
+ import { ConfigManager } from './config';
2
+
3
+ const syncConfigFile = jest.fn();
4
+
5
+ it('should populate defaults for config', () => {
6
+ const config: any = {
7
+ projects: {
8
+ app: {
9
+ name: 'test-app',
10
+ root: 'src',
11
+ type: 'application',
12
+ },
13
+ 'child-app': {
14
+ name: 'test-child-app',
15
+ root: 'packages/child-app',
16
+ type: 'child-app',
17
+ },
18
+ },
19
+ };
20
+
21
+ const configManager = new ConfigManager({ config, syncConfigFile });
22
+
23
+ expect(configManager.config).toMatchInlineSnapshot(`
24
+ {
25
+ "projects": {
26
+ "app": {
27
+ "checkAsyncTs": false,
28
+ "cssMinimize": "css-minimizer",
29
+ "dedupe": {
30
+ "enabled": true,
31
+ "strategy": "equality",
32
+ },
33
+ "define": {
34
+ "development": {},
35
+ "production": {},
36
+ "shared": {},
37
+ },
38
+ "enableFillActionNamePlugin": false,
39
+ "experiments": {
40
+ "minicss": {
41
+ "useImportModule": true,
42
+ },
43
+ "serverRunner": "process",
44
+ "transpilation": {
45
+ "loader": "babel",
46
+ },
47
+ "webpack": {
48
+ "backCompat": false,
49
+ "cacheUnaffected": true,
50
+ },
51
+ },
52
+ "externals": [],
53
+ "fileSystemPages": {
54
+ "enabled": false,
55
+ "pagesDir": "pages",
56
+ "routesDir": "routes",
57
+ },
58
+ "generateDataQaTag": false,
59
+ "hotRefresh": {
60
+ "enabled": true,
61
+ },
62
+ "modern": true,
63
+ "name": "test-app",
64
+ "notifications": {},
65
+ "output": {
66
+ "client": "dist/client",
67
+ "server": "dist/server",
68
+ "static": "dist/static",
69
+ },
70
+ "postcss": {},
71
+ "root": "src",
72
+ "serverApiDir": "src/api",
73
+ "sourceMap": false,
74
+ "splitChunks": {
75
+ "commonChunkSplitNumber": 3,
76
+ "granularChunksMinSize": 20000,
77
+ "granularChunksSplitNumber": 2,
78
+ "mode": "granularChunks",
79
+ },
80
+ "terser": {
81
+ "parallel": true,
82
+ },
83
+ "transpileOnlyModernLibs": true,
84
+ "type": "application",
85
+ "webpack": {},
86
+ },
87
+ "child-app": {
88
+ "cssMinimize": "css-minimizer",
89
+ "dedupe": {
90
+ "enabled": true,
91
+ "strategy": "equality",
92
+ },
93
+ "define": {
94
+ "development": {},
95
+ "production": {},
96
+ "shared": {},
97
+ },
98
+ "enableFillActionNamePlugin": false,
99
+ "experiments": {
100
+ "minicss": {
101
+ "useImportModule": true,
102
+ },
103
+ "transpilation": {
104
+ "loader": "babel",
105
+ },
106
+ "webpack": {
107
+ "backCompat": false,
108
+ "cacheUnaffected": true,
109
+ },
110
+ },
111
+ "generateDataQaTag": false,
112
+ "hotRefresh": {
113
+ "enabled": true,
114
+ },
115
+ "name": "test-child-app",
116
+ "notifications": {},
117
+ "output": "dist/child-app",
118
+ "postcss": {
119
+ "cssLocalIdentName": "[hash:base64:5]",
120
+ },
121
+ "root": "packages/child-app",
122
+ "sourceMap": false,
123
+ "terser": {
124
+ "parallel": true,
125
+ },
126
+ "transpileOnlyModernLibs": true,
127
+ "type": "child-app",
128
+ "webpack": {},
129
+ },
130
+ },
131
+ }
132
+ `);
133
+ });
134
+
135
+ it('should populate defaults for overridable options', () => {
136
+ const config: any = {
137
+ projects: {
138
+ app: {
139
+ name: 'test-app',
140
+ root: 'src',
141
+ type: 'application',
142
+ output: {
143
+ client: 'assets/compiled',
144
+ },
145
+ sourceMap: false,
146
+ externals: ['test'],
147
+ fileSystemPages: { enabled: true },
148
+ experiments: {
149
+ webpack: {
150
+ backCompat: true,
151
+ },
152
+ transpilation: {
153
+ loader: {
154
+ development: 'swc',
155
+ },
156
+ },
157
+ },
158
+ dedupe: {
159
+ strategy: 'semver',
160
+ },
161
+ define: {
162
+ shared: {
163
+ 'process.env.APP_ID': 'app',
164
+ },
165
+ },
166
+ svgo: {
167
+ plugins: [
168
+ {
169
+ 'test-plugin': true,
170
+ },
171
+ ],
172
+ },
173
+ },
174
+ 'child-app': {
175
+ name: 'test-child-app',
176
+ root: 'packages/child-app',
177
+ type: 'child-app',
178
+ sourceMap: {
179
+ development: true,
180
+ },
181
+ experiments: {
182
+ transpilation: {
183
+ loader: {},
184
+ },
185
+ },
186
+ define: {
187
+ shared: {
188
+ commonProp: 'unknown',
189
+ },
190
+ production: {
191
+ 'process.env.PROD': 'true',
192
+ },
193
+ },
194
+ webpack: {
195
+ resolveAlias: {
196
+ stream: 'browser-stream',
197
+ },
198
+ provide: {
199
+ Buffer: ['buffer', 'Buffer'],
200
+ },
201
+ },
202
+ },
203
+ },
204
+ };
205
+
206
+ const configManager = new ConfigManager({ config, syncConfigFile });
207
+
208
+ expect(configManager.config).toMatchInlineSnapshot(`
209
+ {
210
+ "projects": {
211
+ "app": {
212
+ "checkAsyncTs": false,
213
+ "cssMinimize": "css-minimizer",
214
+ "dedupe": {
215
+ "enabled": true,
216
+ "strategy": "semver",
217
+ },
218
+ "define": {
219
+ "development": {},
220
+ "production": {},
221
+ "shared": {
222
+ "process.env.APP_ID": "app",
223
+ },
224
+ },
225
+ "enableFillActionNamePlugin": false,
226
+ "experiments": {
227
+ "minicss": {
228
+ "useImportModule": true,
229
+ },
230
+ "serverRunner": "process",
231
+ "transpilation": {
232
+ "loader": {
233
+ "development": "swc",
234
+ "production": "babel",
235
+ },
236
+ },
237
+ "webpack": {
238
+ "backCompat": true,
239
+ "cacheUnaffected": true,
240
+ },
241
+ },
242
+ "externals": [
243
+ "test",
244
+ ],
245
+ "fileSystemPages": {
246
+ "enabled": true,
247
+ "pagesDir": "pages",
248
+ "routesDir": "routes",
249
+ },
250
+ "generateDataQaTag": false,
251
+ "hotRefresh": {
252
+ "enabled": true,
253
+ },
254
+ "modern": true,
255
+ "name": "test-app",
256
+ "notifications": {},
257
+ "output": {
258
+ "client": "assets/compiled",
259
+ "server": "dist/server",
260
+ "static": "dist/static",
261
+ },
262
+ "postcss": {},
263
+ "root": "src",
264
+ "serverApiDir": "src/api",
265
+ "sourceMap": false,
266
+ "splitChunks": {
267
+ "commonChunkSplitNumber": 3,
268
+ "granularChunksMinSize": 20000,
269
+ "granularChunksSplitNumber": 2,
270
+ "mode": "granularChunks",
271
+ },
272
+ "svgo": {
273
+ "plugins": [
274
+ {
275
+ "test-plugin": true,
276
+ },
277
+ ],
278
+ },
279
+ "terser": {
280
+ "parallel": true,
281
+ },
282
+ "transpileOnlyModernLibs": true,
283
+ "type": "application",
284
+ "webpack": {},
285
+ },
286
+ "child-app": {
287
+ "cssMinimize": "css-minimizer",
288
+ "dedupe": {
289
+ "enabled": true,
290
+ "strategy": "equality",
291
+ },
292
+ "define": {
293
+ "development": {},
294
+ "production": {
295
+ "process.env.PROD": "true",
296
+ },
297
+ "shared": {
298
+ "commonProp": "unknown",
299
+ },
300
+ },
301
+ "enableFillActionNamePlugin": false,
302
+ "experiments": {
303
+ "minicss": {
304
+ "useImportModule": true,
305
+ },
306
+ "transpilation": {
307
+ "loader": {
308
+ "development": "babel",
309
+ "production": "babel",
310
+ },
311
+ },
312
+ "webpack": {
313
+ "backCompat": false,
314
+ "cacheUnaffected": true,
315
+ },
316
+ },
317
+ "generateDataQaTag": false,
318
+ "hotRefresh": {
319
+ "enabled": true,
320
+ },
321
+ "name": "test-child-app",
322
+ "notifications": {},
323
+ "output": "dist/child-app",
324
+ "postcss": {
325
+ "cssLocalIdentName": "[hash:base64:5]",
326
+ },
327
+ "root": "packages/child-app",
328
+ "sourceMap": {
329
+ "development": true,
330
+ "production": false,
331
+ },
332
+ "terser": {
333
+ "parallel": true,
334
+ },
335
+ "transpileOnlyModernLibs": true,
336
+ "type": "child-app",
337
+ "webpack": {
338
+ "provide": {
339
+ "Buffer": [
340
+ "buffer",
341
+ "Buffer",
342
+ ],
343
+ },
344
+ "resolveAlias": {
345
+ "stream": "browser-stream",
346
+ },
347
+ },
348
+ },
349
+ },
350
+ }
351
+ `);
352
+ });
@@ -1,19 +1,20 @@
1
1
  import Ajv from 'ajv';
2
+ import isObject from '@tinkoff/utils/is/object';
3
+ import isEmpty from '@tinkoff/utils/is/empty';
2
4
  import clone from '@tinkoff/utils/clone';
3
5
  import type { Config, SyncJsonFile } from '../typings/projectType';
4
6
  import type { ConfigEntry } from '../typings/configEntry/common';
7
+ import { isOverridableOption } from '../typings/configEntry/common';
5
8
  import { getTramvaiConfig } from '../utils/getTramvaiConfig';
6
9
  import { merge } from '../utils/merge';
7
10
  import { schema } from '../schema/tramvai';
8
11
 
9
12
  export class ConfigManager {
10
- private readonly defaultConfigFileName = 'platform.json';
11
-
12
13
  config: Config;
13
14
 
14
15
  syncConfigFile: SyncJsonFile;
15
16
 
16
- constructor({ config, syncConfigFile }) {
17
+ constructor({ config, syncConfigFile }: { config: Config; syncConfigFile: SyncJsonFile }) {
17
18
  this.config = config;
18
19
  this.syncConfigFile = syncConfigFile;
19
20
 
@@ -53,7 +54,7 @@ export class ConfigManager {
53
54
  }
54
55
 
55
56
  private updateConfig(config: Config): Promise<void> {
56
- const { path, configName: configFileName = this.defaultConfigFileName } = getTramvaiConfig();
57
+ const { path } = getTramvaiConfig();
57
58
 
58
59
  return this.syncConfigFile({ path, newContent: config }).then(() => {
59
60
  this.set(config);
@@ -77,14 +78,45 @@ export class ConfigManager {
77
78
  Object.keys(configParameters.projects).forEach((projectName) => {
78
79
  const entry = configParameters.projects[projectName];
79
80
 
80
- configParameters.projects[projectName] = merge(
81
- projectsConfig,
82
- projectsConfig[entry.type],
83
- entry
84
- );
81
+ configParameters.projects[projectName] = merge(projectsConfig, entry);
85
82
  });
86
83
 
87
84
  const ajv = new Ajv({ useDefaults: true });
85
+
86
+ ajv.addKeyword('cli_overridable', {
87
+ modifying: true,
88
+ errors: false,
89
+ validate(schemaValue, currentValue, propSchema) {
90
+ const defaultValue = (propSchema as any).default;
91
+
92
+ if (!isObject(currentValue)) {
93
+ return true;
94
+ }
95
+
96
+ let defaultDev = defaultValue;
97
+ let defaultProd = defaultValue;
98
+
99
+ if (isOverridableOption(defaultValue)) {
100
+ defaultDev = defaultValue.development;
101
+ defaultProd = defaultValue.production;
102
+ }
103
+
104
+ if (isOverridableOption(currentValue) || isEmpty(currentValue)) {
105
+ if (!currentValue.development) {
106
+ // eslint-disable-next-line no-param-reassign
107
+ currentValue.development = defaultDev;
108
+ }
109
+
110
+ if (!currentValue.production) {
111
+ // eslint-disable-next-line no-param-reassign
112
+ currentValue.production = defaultProd;
113
+ }
114
+ }
115
+
116
+ return true;
117
+ },
118
+ });
119
+
88
120
  const validate = ajv.compile(schema);
89
121
  const valid = validate(configParameters);
90
122
 
@@ -2,6 +2,17 @@ import type { ModuleConfigEntry } from '../typings/configEntry/module';
2
2
  import type { ApplicationConfigEntry } from '../typings/configEntry/application';
3
3
  import type { PackageConfigEntry } from '../typings/configEntry/package';
4
4
  import type { ChildAppConfigEntry } from '../typings/configEntry/child-app';
5
+ import type { ConfigEntry, OverridableOption } from '../typings/configEntry/common';
6
+
7
+ type ConvertOptionsToSchema<T> = T extends OverridableOption<infer U>
8
+ ? { development?: U; production?: U } | U
9
+ : T extends Record<string, any>
10
+ ? {
11
+ [key in keyof T]?: ConvertOptionsToSchema<T[key]>;
12
+ }
13
+ : T;
14
+
15
+ export type ConvertToSchema<T extends ConfigEntry> = ConfigEntry & ConvertOptionsToSchema<T>;
5
16
 
6
17
  /**
7
18
  * Исходный интерфейс для генерации JSON Schema файла конфигурации.
@@ -14,8 +25,8 @@ import type { ChildAppConfigEntry } from '../typings/configEntry/child-app';
14
25
  * которые можно использовать как угодно, в том числе внутри conditional веток с ключевыми словами `if`, `then`, `else`
15
26
  */
16
27
  export type ConfigSchema = {
17
- application: ApplicationConfigEntry;
18
- module: ModuleConfigEntry;
19
- 'child-app': ChildAppConfigEntry;
20
- package: PackageConfigEntry;
28
+ application: ConvertToSchema<ApplicationConfigEntry>;
29
+ module: ConvertToSchema<ModuleConfigEntry>;
30
+ 'child-app': ConvertToSchema<ChildAppConfigEntry>;
31
+ package: ConvertToSchema<PackageConfigEntry>;
21
32
  };