@tramvai/cli 5.50.0 → 5.53.78

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 (423) hide show
  1. package/__migrations__/d2023-02-01b-tramvai-config-refactoring.js +78 -80
  2. package/__migrations__/d2025-04-11b-tramvai-config-remove-modern.js +13 -0
  3. package/bin/spawn.js +69 -3
  4. package/lib/api/analyze/index.d.ts +0 -1
  5. package/lib/api/analyze/index.d.ts.map +1 -1
  6. package/lib/api/analyze/index.js +2 -2
  7. package/lib/api/analyze/index.js.map +1 -1
  8. package/lib/api/build/application.d.ts.map +1 -1
  9. package/lib/api/build/application.js +2 -5
  10. package/lib/api/build/application.js.map +1 -1
  11. package/lib/api/build/child-app.d.ts.map +1 -1
  12. package/lib/api/build/child-app.js +1 -5
  13. package/lib/api/build/child-app.js.map +1 -1
  14. package/lib/api/build/index.d.ts +0 -2
  15. package/lib/api/build/index.d.ts.map +1 -1
  16. package/lib/api/build/index.js.map +1 -1
  17. package/lib/api/build/module.d.ts.map +1 -1
  18. package/lib/api/build/module.js +1 -3
  19. package/lib/api/build/module.js.map +1 -1
  20. package/lib/api/index.d.ts.map +1 -1
  21. package/lib/api/index.js +0 -4
  22. package/lib/api/index.js.map +1 -1
  23. package/lib/api/start/index.d.ts +0 -1
  24. package/lib/api/start/index.d.ts.map +1 -1
  25. package/lib/api/start/index.js.map +1 -1
  26. package/lib/api/start/utils/banner.d.ts.map +1 -1
  27. package/lib/api/start/utils/banner.js +0 -1
  28. package/lib/api/start/utils/banner.js.map +1 -1
  29. package/lib/api/start/utils/tips/tips.d.ts.map +1 -1
  30. package/lib/api/start/utils/tips/tips.js +0 -8
  31. package/lib/api/start/utils/tips/tips.js.map +1 -1
  32. package/lib/builder/webpack/devServer/pool/process/pool.d.ts.map +1 -1
  33. package/lib/builder/webpack/devServer/pool/process/pool.js +0 -2
  34. package/lib/builder/webpack/devServer/pool/process/pool.js.map +1 -1
  35. package/lib/builder/webpack/devServer/server.d.ts.map +1 -1
  36. package/lib/builder/webpack/devServer/server.js +4 -0
  37. package/lib/builder/webpack/devServer/server.js.map +1 -1
  38. package/lib/builder/webpack/index.d.ts.map +1 -1
  39. package/lib/builder/webpack/index.js +3 -5
  40. package/lib/builder/webpack/index.js.map +1 -1
  41. package/lib/builder/webpack/providers/build/client.d.ts.map +1 -1
  42. package/lib/builder/webpack/providers/build/client.js +0 -1
  43. package/lib/builder/webpack/providers/build/client.js.map +1 -1
  44. package/lib/builder/webpack/providers/build/clientShared.d.ts.map +1 -1
  45. package/lib/builder/webpack/providers/build/clientShared.js +4 -6
  46. package/lib/builder/webpack/providers/build/clientShared.js.map +1 -1
  47. package/lib/builder/webpack/providers/client.d.ts.map +1 -1
  48. package/lib/builder/webpack/providers/client.js +0 -13
  49. package/lib/builder/webpack/providers/client.js.map +1 -1
  50. package/lib/builder/webpack/providers/shared.d.ts.map +1 -1
  51. package/lib/builder/webpack/providers/shared.js +2 -8
  52. package/lib/builder/webpack/providers/shared.js.map +1 -1
  53. package/lib/builder/webpack/tokens.d.ts +4 -139
  54. package/lib/builder/webpack/tokens.d.ts.map +1 -1
  55. package/lib/builder/webpack/tokens.js +1 -4
  56. package/lib/builder/webpack/tokens.js.map +1 -1
  57. package/lib/builder/webpack/utils/copyStatsJsonFile.d.ts.map +1 -1
  58. package/lib/builder/webpack/utils/copyStatsJsonFile.js +0 -11
  59. package/lib/builder/webpack/utils/copyStatsJsonFile.js.map +1 -1
  60. package/lib/cli/CLI.d.ts +2 -2
  61. package/lib/cli/CLI.d.ts.map +1 -1
  62. package/lib/cli/CLI.js +2 -2
  63. package/lib/cli/CLI.js.map +1 -1
  64. package/lib/cli/index.d.ts.map +1 -1
  65. package/lib/cli/index.js +28 -7
  66. package/lib/cli/index.js.map +1 -1
  67. package/lib/cli/runCLI.d.ts +3 -0
  68. package/lib/cli/runCLI.d.ts.map +1 -1
  69. package/lib/cli/runCLI.js +18 -6
  70. package/lib/cli/runCLI.js.map +1 -1
  71. package/lib/commands/build/command.d.ts +1 -1
  72. package/lib/commands/build/command.d.ts.map +1 -1
  73. package/lib/commands/build/command.js +41 -13
  74. package/lib/commands/build/command.js.map +1 -1
  75. package/lib/commands/createApp.d.ts.map +1 -1
  76. package/lib/commands/createApp.js +0 -1
  77. package/lib/commands/createApp.js.map +1 -1
  78. package/lib/commands/new/new.d.ts.map +1 -1
  79. package/lib/commands/new/new.js +28 -3
  80. package/lib/commands/new/new.js.map +1 -1
  81. package/lib/commands/start/command.d.ts +1 -1
  82. package/lib/commands/start/command.d.ts.map +1 -1
  83. package/lib/commands/start/command.js +39 -7
  84. package/lib/commands/start/command.js.map +1 -1
  85. package/lib/commands/start/start.d.ts +1 -1
  86. package/lib/commands/start/start.d.ts.map +1 -1
  87. package/lib/commands/start/start.js +2 -1
  88. package/lib/commands/start/start.js.map +1 -1
  89. package/lib/commands/static/application.d.ts.map +1 -1
  90. package/lib/commands/static/application.js +0 -1
  91. package/lib/commands/static/application.js.map +1 -1
  92. package/lib/commands/update/command.d.ts +6 -1
  93. package/lib/commands/update/command.d.ts.map +1 -1
  94. package/lib/commands/update/command.js +8 -1
  95. package/lib/commands/update/command.js.map +1 -1
  96. package/lib/commands/update/dependantLibs.d.ts +2 -1
  97. package/lib/commands/update/dependantLibs.d.ts.map +1 -1
  98. package/lib/commands/update/dependantLibs.js +17 -4
  99. package/lib/commands/update/dependantLibs.js.map +1 -1
  100. package/lib/commands/update/update.d.ts +2 -1
  101. package/lib/commands/update/update.d.ts.map +1 -1
  102. package/lib/commands/update/update.js +6 -6
  103. package/lib/commands/update/update.js.map +1 -1
  104. package/lib/commands/update/updatePackageJson.d.ts +1 -1
  105. package/lib/commands/update/updatePackageJson.d.ts.map +1 -1
  106. package/lib/commands/update/updatePackageJson.js +10 -14
  107. package/lib/commands/update/updatePackageJson.js.map +1 -1
  108. package/lib/config/configManager.d.ts +0 -1
  109. package/lib/config/configManager.d.ts.map +1 -1
  110. package/lib/config/configManager.js +2 -17
  111. package/lib/config/configManager.js.map +1 -1
  112. package/lib/config/validate.d.ts.map +1 -1
  113. package/lib/config/validate.js +8 -1
  114. package/lib/config/validate.js.map +1 -1
  115. package/lib/di/providers/index.d.ts +0 -1
  116. package/lib/di/providers/index.d.ts.map +1 -1
  117. package/lib/di/providers/index.js +0 -1
  118. package/lib/di/providers/index.js.map +1 -1
  119. package/lib/di/tokens/config.d.ts +2 -0
  120. package/lib/di/tokens/config.d.ts.map +1 -1
  121. package/lib/di/tokens/index.d.ts +0 -1
  122. package/lib/di/tokens/index.d.ts.map +1 -1
  123. package/lib/di/tokens/index.js +0 -1
  124. package/lib/di/tokens/index.js.map +1 -1
  125. package/lib/library/babel/index.d.ts +0 -44
  126. package/lib/library/babel/index.d.ts.map +1 -1
  127. package/lib/library/babel/index.js +6 -13
  128. package/lib/library/babel/index.js.map +1 -1
  129. package/lib/library/swc/index.js +1 -1
  130. package/lib/library/swc/index.js.map +1 -1
  131. package/lib/library/typescript/index.d.ts +0 -23
  132. package/lib/library/typescript/index.d.ts.map +1 -1
  133. package/lib/library/typescript/index.js +1 -2
  134. package/lib/library/typescript/index.js.map +1 -1
  135. package/lib/library/webpack/application/client/common.d.ts.map +1 -1
  136. package/lib/library/webpack/application/client/common.js +40 -6
  137. package/lib/library/webpack/application/client/common.js.map +1 -1
  138. package/lib/library/webpack/application/client/dev.js +2 -2
  139. package/lib/library/webpack/application/client/dev.js.map +1 -1
  140. package/lib/library/webpack/application/client/prod.d.ts.map +1 -1
  141. package/lib/library/webpack/application/client/prod.js +1 -2
  142. package/lib/library/webpack/application/client/prod.js.map +1 -1
  143. package/lib/library/webpack/application/common.js +1 -1
  144. package/lib/library/webpack/application/common.js.map +1 -1
  145. package/lib/library/webpack/application/server/common.js +1 -1
  146. package/lib/library/webpack/application/server/common.js.map +1 -1
  147. package/lib/library/webpack/application/server/dev.js +1 -1
  148. package/lib/library/webpack/application/server/dev.js.map +1 -1
  149. package/lib/library/webpack/application/server/prod.js +1 -1
  150. package/lib/library/webpack/application/server/prod.js.map +1 -1
  151. package/lib/library/webpack/blocks/css.d.ts.map +1 -1
  152. package/lib/library/webpack/blocks/css.js +15 -11
  153. package/lib/library/webpack/blocks/css.js.map +1 -1
  154. package/lib/library/webpack/blocks/optimize.js +2 -2
  155. package/lib/library/webpack/blocks/optimize.js.map +1 -1
  156. package/lib/library/webpack/blocks/pwa/client.d.ts.map +1 -1
  157. package/lib/library/webpack/blocks/pwa/client.js +2 -5
  158. package/lib/library/webpack/blocks/pwa/client.js.map +1 -1
  159. package/lib/library/webpack/blocks/pwa/shared.d.ts.map +1 -1
  160. package/lib/library/webpack/blocks/pwa/shared.js +2 -3
  161. package/lib/library/webpack/blocks/pwa/shared.js.map +1 -1
  162. package/lib/library/webpack/blocks/resolve.js +2 -2
  163. package/lib/library/webpack/blocks/resolve.js.map +1 -1
  164. package/lib/library/webpack/blocks/serverInline.d.ts.map +1 -1
  165. package/lib/library/webpack/blocks/serverInline.js +1 -2
  166. package/lib/library/webpack/blocks/serverInline.js.map +1 -1
  167. package/lib/library/webpack/blocks/sourcemaps.d.ts +1 -1
  168. package/lib/library/webpack/blocks/sourcemaps.d.ts.map +1 -1
  169. package/lib/library/webpack/blocks/sourcemaps.js +4 -2
  170. package/lib/library/webpack/blocks/sourcemaps.js.map +1 -1
  171. package/lib/library/webpack/child-app/client/common.d.ts.map +1 -1
  172. package/lib/library/webpack/child-app/client/common.js +8 -3
  173. package/lib/library/webpack/child-app/client/common.js.map +1 -1
  174. package/lib/library/webpack/child-app/client/dev.d.ts.map +1 -1
  175. package/lib/library/webpack/child-app/client/dev.js +5 -1
  176. package/lib/library/webpack/child-app/client/dev.js.map +1 -1
  177. package/lib/library/webpack/child-app/client/prod.d.ts.map +1 -1
  178. package/lib/library/webpack/child-app/client/prod.js +4 -0
  179. package/lib/library/webpack/child-app/client/prod.js.map +1 -1
  180. package/lib/library/webpack/child-app/common.d.ts.map +1 -1
  181. package/lib/library/webpack/child-app/common.js +1 -5
  182. package/lib/library/webpack/child-app/common.js.map +1 -1
  183. package/lib/library/webpack/child-app/server/dev.d.ts.map +1 -1
  184. package/lib/library/webpack/child-app/server/dev.js +4 -0
  185. package/lib/library/webpack/child-app/server/dev.js.map +1 -1
  186. package/lib/library/webpack/child-app/server/prod.d.ts.map +1 -1
  187. package/lib/library/webpack/child-app/server/prod.js +4 -0
  188. package/lib/library/webpack/child-app/server/prod.js.map +1 -1
  189. package/lib/library/webpack/common/client/prod.js +1 -1
  190. package/lib/library/webpack/common/client/prod.js.map +1 -1
  191. package/lib/library/webpack/common/main.d.ts.map +1 -1
  192. package/lib/library/webpack/common/main.js +1 -2
  193. package/lib/library/webpack/common/main.js.map +1 -1
  194. package/lib/library/webpack/constants/stats.d.ts.map +1 -1
  195. package/lib/library/webpack/constants/stats.js +2 -0
  196. package/lib/library/webpack/constants/stats.js.map +1 -1
  197. package/lib/library/webpack/loaders/image-loader/getImageMiniatureURL.js +1 -1
  198. package/lib/library/webpack/loaders/image-loader/getImageMiniatureURL.js.map +1 -1
  199. package/lib/library/webpack/module/client/common.js +1 -1
  200. package/lib/library/webpack/module/client/common.js.map +1 -1
  201. package/lib/library/webpack/module/externals.js +1 -1
  202. package/lib/library/webpack/module/externals.js.map +1 -1
  203. package/lib/library/webpack/module/server/common.js +1 -1
  204. package/lib/library/webpack/module/server/common.js.map +1 -1
  205. package/lib/library/webpack/plugins/AssetsIntegritiesPlugin.d.ts +8 -0
  206. package/lib/library/webpack/plugins/AssetsIntegritiesPlugin.d.ts.map +1 -0
  207. package/lib/library/webpack/plugins/AssetsIntegritiesPlugin.js +29 -0
  208. package/lib/library/webpack/plugins/AssetsIntegritiesPlugin.js.map +1 -0
  209. package/lib/library/webpack/plugins/PurifyStatsPlugin.d.ts +15 -0
  210. package/lib/library/webpack/plugins/PurifyStatsPlugin.d.ts.map +1 -0
  211. package/lib/library/webpack/plugins/PurifyStatsPlugin.js +47 -0
  212. package/lib/library/webpack/plugins/PurifyStatsPlugin.js.map +1 -0
  213. package/lib/library/webpack/plugins/RuntimePathPlugin.d.ts.map +1 -1
  214. package/lib/library/webpack/plugins/RuntimePathPlugin.js +7 -3
  215. package/lib/library/webpack/plugins/RuntimePathPlugin.js.map +1 -1
  216. package/lib/library/webpack/utils/transpiler.d.ts +0 -1
  217. package/lib/library/webpack/utils/transpiler.d.ts.map +1 -1
  218. package/lib/library/webpack/utils/transpiler.js +1 -5
  219. package/lib/library/webpack/utils/transpiler.js.map +1 -1
  220. package/lib/models/analytics/analytics.d.ts +156 -0
  221. package/lib/models/analytics/analytics.d.ts.map +1 -0
  222. package/lib/models/analytics/analytics.js +259 -0
  223. package/lib/models/analytics/analytics.js.map +1 -0
  224. package/lib/models/analytics/analytics.worker.d.ts +5 -0
  225. package/lib/models/analytics/analytics.worker.d.ts.map +1 -0
  226. package/lib/models/analytics/analytics.worker.js +87 -0
  227. package/lib/models/analytics/analytics.worker.js.map +1 -0
  228. package/lib/models/analytics/utils.d.ts +15 -0
  229. package/lib/models/analytics/utils.d.ts.map +1 -0
  230. package/lib/models/analytics/utils.js +85 -0
  231. package/lib/models/analytics/utils.js.map +1 -0
  232. package/lib/models/command.d.ts.map +1 -1
  233. package/lib/models/command.js +1 -7
  234. package/lib/models/command.js.map +1 -1
  235. package/lib/models/context.d.ts +4 -4
  236. package/lib/models/context.d.ts.map +1 -1
  237. package/lib/models/context.js +3 -2
  238. package/lib/models/context.js.map +1 -1
  239. package/lib/models/logger.d.ts +1 -0
  240. package/lib/models/logger.d.ts.map +1 -1
  241. package/lib/models/logger.js +2 -1
  242. package/lib/models/logger.js.map +1 -1
  243. package/lib/models/task.d.ts.map +1 -1
  244. package/lib/models/task.js +1 -7
  245. package/lib/models/task.js.map +1 -1
  246. package/lib/schema/autogeneratedSchema.json +161 -20
  247. package/lib/schema/topLevelSchema.d.ts +14 -0
  248. package/lib/schema/topLevelSchema.d.ts.map +1 -1
  249. package/lib/schema/topLevelSchema.js +14 -0
  250. package/lib/schema/topLevelSchema.js.map +1 -1
  251. package/lib/typings/build/Builder.d.ts +2 -6
  252. package/lib/typings/build/Builder.d.ts.map +1 -1
  253. package/lib/typings/configEntry/application.d.ts +10 -5
  254. package/lib/typings/configEntry/application.d.ts.map +1 -1
  255. package/lib/typings/configEntry/cli.d.ts +13 -0
  256. package/lib/typings/configEntry/cli.d.ts.map +1 -1
  257. package/lib/typings/projectType.d.ts +5 -0
  258. package/lib/typings/projectType.d.ts.map +1 -1
  259. package/lib/typings/target.d.ts +1 -1
  260. package/lib/typings/target.d.ts.map +1 -1
  261. package/lib/utils/commands/dependencies/findTramvaiVersion.d.ts +1 -1
  262. package/lib/utils/commands/dependencies/findTramvaiVersion.d.ts.map +1 -1
  263. package/lib/utils/commands/dependencies/findTramvaiVersion.js +4 -11
  264. package/lib/utils/commands/dependencies/findTramvaiVersion.js.map +1 -1
  265. package/lib/utils/commands/dependencies/getLatestPackageVersion.d.ts +1 -1
  266. package/lib/utils/commands/dependencies/getLatestPackageVersion.d.ts.map +1 -1
  267. package/lib/utils/commands/dependencies/getLatestPackageVersion.js +7 -3
  268. package/lib/utils/commands/dependencies/getLatestPackageVersion.js.map +1 -1
  269. package/lib/utils/cpu-profile.d.ts +3 -0
  270. package/lib/utils/cpu-profile.d.ts.map +1 -1
  271. package/lib/utils/cpu-profile.js +8 -3
  272. package/lib/utils/cpu-profile.js.map +1 -1
  273. package/lib/utils/errors.d.ts +7 -0
  274. package/lib/utils/errors.d.ts.map +1 -0
  275. package/lib/utils/errors.js +43 -0
  276. package/lib/utils/errors.js.map +1 -0
  277. package/lib/utils/memoryUsage.d.ts +20 -0
  278. package/lib/utils/memoryUsage.d.ts.map +1 -0
  279. package/lib/utils/memoryUsage.js +51 -0
  280. package/lib/utils/memoryUsage.js.map +1 -0
  281. package/lib/utils/safeRequire.d.ts +1 -1
  282. package/lib/utils/safeRequire.d.ts.map +1 -1
  283. package/lib/utils/safeRequire.js +13 -3
  284. package/lib/utils/safeRequire.js.map +1 -1
  285. package/package.json +13 -15
  286. package/schema.json +175 -20
  287. package/src/api/analyze/index.ts +2 -3
  288. package/src/api/benchmark/__integration__/__fixtures__/tramvai.json +3 -0
  289. package/src/api/build/__integration__/__fixtures__/tramvai.json +4 -2
  290. package/src/api/build/__integration__/build.test.ts +0 -1
  291. package/src/api/build/application.ts +2 -5
  292. package/src/api/build/child-app.ts +1 -5
  293. package/src/api/build/index.ts +0 -2
  294. package/src/api/build/module.ts +1 -3
  295. package/src/api/index.ts +1 -10
  296. package/src/api/start/__integration__/__fixtures__/app/server.tsx +1 -0
  297. package/src/api/start/__integration__/__fixtures__/package.json +0 -3
  298. package/src/api/start/__integration__/__fixtures__/tramvai.json +3 -0
  299. package/src/api/start/__integration__/start.test.ts +2 -1
  300. package/src/api/start/index.ts +0 -1
  301. package/src/api/start/utils/banner.ts +0 -1
  302. package/src/api/start/utils/tips/tips.ts +0 -9
  303. package/src/builder/webpack/devServer/pool/process/pool.ts +0 -2
  304. package/src/builder/webpack/devServer/server.ts +5 -0
  305. package/src/builder/webpack/index.ts +3 -5
  306. package/src/builder/webpack/providers/build/client.ts +0 -1
  307. package/src/builder/webpack/providers/build/clientShared.ts +5 -11
  308. package/src/builder/webpack/providers/client.ts +1 -19
  309. package/src/builder/webpack/providers/shared.ts +2 -9
  310. package/src/builder/webpack/tokens.ts +0 -9
  311. package/src/builder/webpack/utils/copyStatsJsonFile.ts +0 -17
  312. package/src/cli/CLI.ts +6 -4
  313. package/src/cli/index.ts +33 -8
  314. package/src/cli/runCLI.ts +26 -5
  315. package/src/commands/build/command.ts +45 -13
  316. package/src/commands/createApp.ts +0 -2
  317. package/src/commands/new/new.ts +39 -7
  318. package/src/commands/new/templates/packageManagerConfig/yarnPackageManagerConfig/_yarnrc.yml.hbs +9 -0
  319. package/src/commands/new/templates/shared/_gitignore.hbs +10 -0
  320. package/src/commands/new/templates/shared/package.json.hbs +5 -1
  321. package/src/commands/start/command.ts +42 -7
  322. package/src/commands/start/start.ts +7 -1
  323. package/src/commands/static/application.ts +0 -1
  324. package/src/commands/update/command.ts +9 -1
  325. package/src/commands/update/dependantLibs.ts +23 -8
  326. package/src/commands/update/update.ts +7 -6
  327. package/src/commands/update/updatePackageJson.spec.ts +66 -3
  328. package/src/commands/update/updatePackageJson.ts +28 -16
  329. package/src/config/__integration__/__fixtures__/relative/src/index.ts +0 -0
  330. package/src/config/__integration__/__fixtures__/relative/src/polyfill.ts +0 -0
  331. package/src/config/__integration__/validate.test.ts +94 -0
  332. package/src/config/configManager.ts +2 -19
  333. package/src/config/validate.ts +8 -1
  334. package/src/di/providers/index.ts +0 -1
  335. package/src/di/tokens/index.ts +0 -1
  336. package/src/library/babel/index.ts +8 -14
  337. package/src/library/babel/plugins/__snapshots__/create-token-pure.spec.ts.snap +6 -6
  338. package/src/library/babel/plugins/__snapshots__/fill-declare-action-name.spec.ts.snap +24 -26
  339. package/src/library/babel/plugins/__snapshots__/provider-stack.spec.ts.snap +40 -59
  340. package/src/library/babel/plugins/lazy-component/lazy-component.spec.ts +0 -1
  341. package/src/library/babel/plugins/lazy-component/legacy-universal-replace.spec.ts +0 -1
  342. package/src/library/swc/__integration__/__snapshots__/swc.build.test.ts.snap +15 -208
  343. package/src/library/swc/__integration__/__snapshots__/swc.start.test.ts.snap +7 -10
  344. package/src/library/swc/__integration__/swc.build.test.ts +1 -13
  345. package/src/library/swc/__integration__/swc.start.test.ts +3 -0
  346. package/src/library/swc/index.ts +1 -1
  347. package/src/library/typescript/index.ts +1 -3
  348. package/src/library/webpack/application/client/common.ts +63 -6
  349. package/src/library/webpack/application/client/dev.ts +2 -2
  350. package/src/library/webpack/application/client/prod.ts +1 -2
  351. package/src/library/webpack/application/common.ts +1 -1
  352. package/src/library/webpack/application/server/common.ts +1 -1
  353. package/src/library/webpack/application/server/dev.ts +1 -1
  354. package/src/library/webpack/application/server/prod.ts +1 -1
  355. package/src/library/webpack/blocks/css.ts +17 -11
  356. package/src/library/webpack/blocks/optimize.ts +2 -2
  357. package/src/library/webpack/blocks/pwa/client.ts +1 -6
  358. package/src/library/webpack/blocks/pwa/shared.ts +1 -3
  359. package/src/library/webpack/blocks/resolve.ts +2 -2
  360. package/src/library/webpack/blocks/serverInline.ts +1 -2
  361. package/src/library/webpack/blocks/sourcemaps.ts +4 -2
  362. package/src/library/webpack/child-app/client/common.ts +9 -3
  363. package/src/library/webpack/child-app/client/dev.ts +6 -1
  364. package/src/library/webpack/child-app/client/prod.ts +5 -0
  365. package/src/library/webpack/child-app/common.ts +1 -7
  366. package/src/library/webpack/child-app/server/dev.ts +5 -0
  367. package/src/library/webpack/child-app/server/prod.ts +5 -0
  368. package/src/library/webpack/common/client/prod.ts +1 -1
  369. package/src/library/webpack/common/main.ts +1 -5
  370. package/src/library/webpack/constants/stats.ts +2 -0
  371. package/src/library/webpack/loaders/image-loader/getImageMiniatureURL.ts +1 -1
  372. package/src/library/webpack/module/client/common.ts +1 -1
  373. package/src/library/webpack/module/externals.ts +1 -1
  374. package/src/library/webpack/module/server/common.ts +1 -1
  375. package/src/library/webpack/plugins/AssetsIntegritiesPlugin.ts +34 -0
  376. package/src/library/webpack/plugins/PurifyStatsPlugin.ts +57 -0
  377. package/src/library/webpack/plugins/RuntimePathPlugin.ts +8 -3
  378. package/src/library/webpack/utils/polyfills/__integration__/__snapshots__/condition.test.ts.snap +16 -16
  379. package/src/library/webpack/utils/transpiler.ts +1 -5
  380. package/src/models/analytics/analytics.ts +488 -0
  381. package/src/models/analytics/analytics.worker.ts +102 -0
  382. package/src/models/analytics/utils.ts +122 -0
  383. package/src/models/command.ts +1 -8
  384. package/src/models/config.spec.ts +6 -2
  385. package/src/models/context.ts +4 -5
  386. package/src/models/logger.ts +2 -0
  387. package/src/models/task.ts +1 -7
  388. package/src/schema/autogeneratedSchema.json +161 -20
  389. package/src/schema/topLevelSchema.js +14 -0
  390. package/src/schema/tramvai.spec.ts +3 -1
  391. package/src/typings/build/Builder.ts +3 -8
  392. package/src/typings/configEntry/application.ts +11 -6
  393. package/src/typings/configEntry/cli.ts +14 -0
  394. package/src/typings/projectType.ts +5 -0
  395. package/src/typings/target.ts +1 -1
  396. package/src/utils/commands/dependencies/findTramvaiVersion.ts +5 -12
  397. package/src/utils/commands/dependencies/getLatestPackageVersion.ts +11 -3
  398. package/src/utils/cpu-profile.ts +14 -3
  399. package/src/utils/errors.ts +39 -0
  400. package/src/utils/memoryUsage.ts +58 -0
  401. package/src/utils/safeRequire.spec.ts +36 -0
  402. package/src/utils/safeRequire.ts +12 -3
  403. package/lib/builder/webpack/providers/build/clientModern.d.ts +0 -3
  404. package/lib/builder/webpack/providers/build/clientModern.d.ts.map +0 -1
  405. package/lib/builder/webpack/providers/build/clientModern.js +0 -60
  406. package/lib/builder/webpack/providers/build/clientModern.js.map +0 -1
  407. package/lib/di/providers/analytics.d.ts +0 -3
  408. package/lib/di/providers/analytics.d.ts.map +0 -1
  409. package/lib/di/providers/analytics.js +0 -20
  410. package/lib/di/providers/analytics.js.map +0 -1
  411. package/lib/di/tokens/analytics.d.ts +0 -14
  412. package/lib/di/tokens/analytics.d.ts.map +0 -1
  413. package/lib/di/tokens/analytics.js +0 -8
  414. package/lib/di/tokens/analytics.js.map +0 -1
  415. package/lib/models/analytics.d.ts +0 -31
  416. package/lib/models/analytics.d.ts.map +0 -1
  417. package/lib/models/analytics.js +0 -79
  418. package/lib/models/analytics.js.map +0 -1
  419. package/src/builder/webpack/providers/build/clientModern.ts +0 -64
  420. package/src/di/providers/analytics.ts +0 -22
  421. package/src/di/tokens/analytics.ts +0 -8
  422. package/src/models/analytics.ts +0 -116
  423. /package/src/commands/new/templates/{shared → packageManagerConfig/defaultPackageManagerConfig}/_npmrc.hbs +0 -0
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "$schema": "../../../../../schema.json",
3
+ "analytics": {
4
+ "enabled": false
5
+ },
3
6
  "projects": {
4
7
  "app": {
5
8
  "name": "app",
6
9
  "root": "app",
7
- "type": "application",
8
- "modern": false
10
+ "type": "application"
9
11
  },
10
12
  "module": {
11
13
  "name": "module",
@@ -54,7 +54,6 @@ describe('@tramvai/cli build command', () => {
54
54
  name: 'app',
55
55
  type: 'application',
56
56
  root: resolve(FIXTURES_DIR, 'app'),
57
- modern: false,
58
57
  define: {
59
58
  development: {
60
59
  IS_REACT_APP: 'true',
@@ -10,7 +10,7 @@ import { registerProviders } from '../../utils/di';
10
10
 
11
11
  export const buildApplication = async (di: Container): Result => {
12
12
  const options = di.get(COMMAND_PARAMETERS_TOKEN as Params);
13
- const { buildType = 'all', onlyModern } = options;
13
+ const { buildType = 'all' } = options;
14
14
 
15
15
  const shouldBuildClient = buildType === 'client' || buildType === 'all';
16
16
  const shouldBuildServer = buildType === 'server' || buildType === 'all';
@@ -24,13 +24,10 @@ export const buildApplication = async (di: Container): Result => {
24
24
  options: {
25
25
  shouldBuildClient,
26
26
  shouldBuildServer,
27
- onlyModern,
28
27
  },
29
28
  });
30
29
 
31
- const builderBuild = await builder.build({
32
- modern: configManager.modern,
33
- });
30
+ const builderBuild = await builder.build();
34
31
 
35
32
  return {
36
33
  builder,
@@ -15,11 +15,7 @@ export const buildChildApp = async (di: Container): Result => {
15
15
  },
16
16
  });
17
17
 
18
- const builderBuild = await builder.build({
19
- // child-app either should be built for legacy code always
20
- // or should be smart loaded depending on browser capabilities
21
- modern: false,
22
- });
18
+ const builderBuild = await builder.build();
23
19
 
24
20
  return {
25
21
  builder,
@@ -11,11 +11,9 @@ import type { Builder } from '../../typings/build/Builder';
11
11
 
12
12
  export type Params = WithConfig<{
13
13
  buildType?: 'server' | 'client' | 'all' | 'none';
14
- onlyModern?: boolean;
15
14
  debug?: boolean;
16
15
  verboseWebpack?: boolean;
17
16
  profile?: boolean;
18
- modern?: boolean;
19
17
  sourceMap?: boolean;
20
18
  resolveSymlinks?: boolean;
21
19
  disableProdOptimization?: boolean;
@@ -15,9 +15,7 @@ export const buildModule = async (di: Container): Result => {
15
15
  },
16
16
  });
17
17
 
18
- const builderBuild = await builder.build({
19
- modern: false,
20
- });
18
+ const builderBuild = await builder.build();
21
19
 
22
20
  return {
23
21
  builder,
package/src/api/index.ts CHANGED
@@ -1,12 +1,7 @@
1
1
  import '../typings/application';
2
2
 
3
3
  import { writableNoopStream } from 'noop-stream';
4
- import {
5
- ANALYTICS_PACKAGE_INFO_TOKEN,
6
- COMMAND_PARAMETERS_TOKEN,
7
- STDERR_TOKEN,
8
- STDOUT_TOKEN,
9
- } from '../di/tokens';
4
+ import { COMMAND_PARAMETERS_TOKEN, STDERR_TOKEN, STDOUT_TOKEN } from '../di/tokens';
10
5
  import { createApp } from '../commands/createApp';
11
6
 
12
7
  import type { StartCommand } from './start';
@@ -43,10 +38,6 @@ const app = createApp({
43
38
  'start-prod': () => import('./start-prod'),
44
39
  },
45
40
  providers: [
46
- {
47
- provide: ANALYTICS_PACKAGE_INFO_TOKEN,
48
- useValue: { name: '@tramvai/cli-api', version: '0.1.0' },
49
- },
50
41
  {
51
42
  provide: STDOUT_TOKEN,
52
43
  useFactory: ({ params }) => {
@@ -55,6 +55,7 @@ app.get<{ Querystring: Querystring }>(
55
55
  return `<html>
56
56
  <head>
57
57
  <link rel="stylesheet" href="http://localhost:${appConfig.staticPort}/dist/client/platform.css">
58
+ <script src="http://localhost:${appConfig.staticPort}/dist/client/runtime.js" defer></script>
58
59
  <script src="http://localhost:${appConfig.staticPort}/dist/client/react.js" defer></script>
59
60
  <script src="http://localhost:${appConfig.staticPort}/dist/client/hmr.js" defer></script>
60
61
  <script src="http://localhost:${appConfig.staticPort}/dist/client/platform.js" defer></script>
@@ -3,9 +3,6 @@
3
3
  "private": true,
4
4
  "license": "Apache-2.0",
5
5
  "browserslist": {
6
- "modern": [
7
- "chrome > 100"
8
- ],
9
6
  "node": [
10
7
  "extends @tinkoff/browserslist-config"
11
8
  ],
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "$schema": "../../../../../schema.json",
3
+ "analytics": {
4
+ "enabled": false
5
+ },
3
6
  "projects": {
4
7
  "app": {
5
8
  "name": "app",
@@ -67,6 +67,7 @@ describe('@tramvai/cli start command', () => {
67
67
 
68
68
  expect(responseServer.text)
69
69
  .toMatch(`<link rel="stylesheet" href="http://localhost:${staticServerPort}/dist/client/platform.css">
70
+ <script src="http://localhost:${staticServerPort}/dist/client/runtime.js" defer></script>
70
71
  <script src="http://localhost:${staticServerPort}/dist/client/react.js" defer></script>
71
72
  <script src="http://localhost:${staticServerPort}/dist/client/hmr.js" defer></script>
72
73
  <script src="http://localhost:${staticServerPort}/dist/client/platform.js" defer></script>`);
@@ -94,7 +95,6 @@ describe('@tramvai/cli start command', () => {
94
95
  .expect(200);
95
96
 
96
97
  expect(browserslistConfig).toMatchObject({
97
- modern: ['chrome > 100'],
98
98
  node: ['Node >= 18'],
99
99
  defaults: expect.arrayContaining(['chrome > 27']),
100
100
  });
@@ -170,6 +170,7 @@ describe('@tramvai/cli start command', () => {
170
170
 
171
171
  expect(responseServer.text)
172
172
  .toMatch(`<link rel="stylesheet" href="http://localhost:${staticServerPort}/dist/client/platform.css">
173
+ <script src="http://localhost:${staticServerPort}/dist/client/runtime.js" defer></script>
173
174
  <script src="http://localhost:${staticServerPort}/dist/client/react.js" defer></script>
174
175
  <script src="http://localhost:${staticServerPort}/dist/client/hmr.js" defer></script>
175
176
  <script src="http://localhost:${staticServerPort}/dist/client/platform.js" defer></script>`);
@@ -22,7 +22,6 @@ export type Params = WithConfig<{
22
22
  trace?: boolean;
23
23
  verboseWebpack?: boolean;
24
24
  profile?: boolean;
25
- modern?: boolean;
26
25
  sourceMap?: boolean;
27
26
  noServerRebuild?: boolean;
28
27
  noClientRebuild?: boolean;
@@ -25,7 +25,6 @@ export function showBanner(di: Container) {
25
25
  if (config.type !== 'application') {
26
26
  titleLines.push(`${label('Type')} ${config.type}`);
27
27
  }
28
- titleLines.push(`${label('Modern')} ${config.modern}`);
29
28
  titleLines.push(`${label('ReactRefresh')} ${config.hotRefresh.enabled}`);
30
29
 
31
30
  if (isApplication(config) && config.fileSystemPages.enabled) {
@@ -26,15 +26,6 @@ Consider to test out swc support.`,
26
26
  return configManager.experiments?.transpilation?.loader !== 'swc';
27
27
  },
28
28
  },
29
- {
30
- text: `Ship modern code to browser`,
31
- docLink: 'how-to/how-enable-modern',
32
- isApplicable(di) {
33
- const configManager = di.get(CONFIG_MANAGER_TOKEN);
34
-
35
- return configManager.modern !== true;
36
- },
37
- },
38
29
  {
39
30
  text: `Forget about reloading page with hotRefresh cli option`,
40
31
  docLink: 'references/cli/start/#react-hot-refresh',
@@ -28,8 +28,6 @@ export const ProcessWorkerBridge: WorkerBridgeFactory<Worker> = (di) => {
28
28
  getDebugArg(configManager.debug),
29
29
  configManager.trace ? TRACE_ARGV : []
30
30
  ),
31
- // устанавливаем в качестве дебага дефолтный порт мастера, т.к. у нас и так один процесс может работать
32
- inspectPort: process.debugPort,
33
31
  silent: true,
34
32
  // @ts-ignore
35
33
  cwd: di.get(CONFIG_ROOT_DIR_TOKEN),
@@ -241,6 +241,11 @@ export const serverRunner = ({
241
241
 
242
242
  // Проксируем также и веб-сокеты
243
243
  server.on('upgrade', (req, socket, head) => {
244
+ // prevent uncaughtException when WS is not supported in application server
245
+ socket.on('error', (err) => {
246
+ console.error('[dev-server-error] websocket proxy error', err.message);
247
+ });
248
+
244
249
  proxy.ws(req, socket, { target: `http://localhost:${workerPort}` });
245
250
  });
246
251
 
@@ -24,7 +24,6 @@ import { resolveDone } from './utils/resolveDone';
24
24
  import { registerProviders } from '../../utils/di';
25
25
  import { buildClientSharedProviders } from './providers/build/clientShared';
26
26
  import { buildClientProviders } from './providers/build/client';
27
- import { buildClientModernProviders } from './providers/build/clientModern';
28
27
  import { buildServerProviders } from './providers/build/server';
29
28
  import { CONFIG_MANAGER_TOKEN } from '../../di/tokens';
30
29
  import { buildApplicationServerProviders } from './providers/build/application/server';
@@ -38,7 +37,7 @@ export const webpackProviders: Provider[] = [
38
37
  useFactory: ({ di }) => {
39
38
  return {
40
39
  name: BUILDER_NAME,
41
- createBuilder({ options: { shouldBuildClient, shouldBuildServer, onlyModern } }) {
40
+ createBuilder({ options: { shouldBuildClient, shouldBuildServer } }) {
42
41
  registerProviders(di, [
43
42
  ...sharedProviders,
44
43
  ...(shouldBuildClient ? clientProviders : []),
@@ -83,11 +82,10 @@ export const webpackProviders: Provider[] = [
83
82
  getBuildStats,
84
83
  };
85
84
  },
86
- async build({ modern }) {
85
+ async build() {
87
86
  registerProviders(di, [
88
87
  ...(shouldBuildClient ? buildClientSharedProviders : []),
89
- ...(shouldBuildClient && !onlyModern ? buildClientProviders : []),
90
- ...(shouldBuildClient && modern ? buildClientModernProviders : []),
88
+ ...(shouldBuildClient ? buildClientProviders : []),
91
89
  ...(shouldBuildServer ? buildServerProviders : []),
92
90
  ]);
93
91
 
@@ -19,7 +19,6 @@ export const buildClientProviders: Provider[] = [
19
19
  useFactory: ({ configManager }) => {
20
20
  return configManager.withSettings({
21
21
  buildType: 'client',
22
- modern: false,
23
22
  });
24
23
  },
25
24
  deps: {
@@ -4,32 +4,27 @@ import { provide } from '@tinkoff/dippy';
4
4
  import rimraf from 'rimraf';
5
5
  import { CLI_PACKAGE_MANAGER, CLI_ROOT_DIR_TOKEN } from '../../../../di/tokens';
6
6
  import { npmRequire } from '../../../../utils/npmRequire';
7
- import {
8
- CLIENT_CONFIG_MANAGER_TOKEN,
9
- CLIENT_MODERN_CONFIG_MANAGER_TOKEN,
10
- INIT_HANDLER_TOKEN,
11
- } from '../../tokens';
7
+ import { CLIENT_CONFIG_MANAGER_TOKEN, INIT_HANDLER_TOKEN } from '../../tokens';
12
8
 
13
9
  export const buildClientSharedProviders: Provider[] = [
14
10
  provide({
15
11
  provide: INIT_HANDLER_TOKEN,
16
12
  multi: true,
17
- useFactory: ({ configManager, modernConfigManager }) => {
13
+ useFactory: ({ configManager }) => {
18
14
  return function clearBuildDir() {
19
- return rimraf.sync(`${(configManager || modernConfigManager).buildPath}/**`, {});
15
+ return rimraf.sync(`${configManager.buildPath}/**`, {});
20
16
  };
21
17
  },
22
18
  deps: {
23
19
  configManager: optional(CLIENT_CONFIG_MANAGER_TOKEN),
24
- modernConfigManager: optional(CLIENT_MODERN_CONFIG_MANAGER_TOKEN),
25
20
  },
26
21
  }),
27
22
  provide({
28
23
  provide: INIT_HANDLER_TOKEN,
29
24
  multi: true,
30
- useFactory: ({ configManager, modernConfigManager, rootDir, packageManager }) => {
25
+ useFactory: ({ configManager, rootDir, packageManager }) => {
31
26
  return async function prepareImageOptimization() {
32
- if ((configManager || modernConfigManager).imageOptimization?.enabled) {
27
+ if (configManager.imageOptimization?.enabled) {
33
28
  await npmRequire({
34
29
  cliRootDir: rootDir,
35
30
  packageManager,
@@ -41,7 +36,6 @@ export const buildClientSharedProviders: Provider[] = [
41
36
  },
42
37
  deps: {
43
38
  configManager: optional(CLIENT_CONFIG_MANAGER_TOKEN),
44
- modernConfigManager: optional(CLIENT_MODERN_CONFIG_MANAGER_TOKEN),
45
39
  rootDir: CLI_ROOT_DIR_TOKEN,
46
40
  packageManager: CLI_PACKAGE_MANAGER,
47
41
  },
@@ -3,12 +3,7 @@ import { provide } from '@tinkoff/dippy';
3
3
  import { UI_SHOW_PROGRESS_TOKEN } from '../../../di/tokens';
4
4
  import type { Env } from '../../../typings/Env';
5
5
  import type { ProjectType } from '../../../typings/projectType';
6
- import {
7
- CLIENT_CONFIG_MANAGER_TOKEN,
8
- CLIENT_MODERN_CONFIG_MANAGER_TOKEN,
9
- WEBPACK_CLIENT_CONFIG_TOKEN,
10
- WEBPACK_CLIENT_MODERN_CONFIG_TOKEN,
11
- } from '../tokens';
6
+ import { CLIENT_CONFIG_MANAGER_TOKEN, WEBPACK_CLIENT_CONFIG_TOKEN } from '../tokens';
12
7
  import { CONFIG_GENERATOR_STUB } from '../stubs/config';
13
8
  import type { ConfigGenerator } from '../types';
14
9
 
@@ -41,17 +36,4 @@ export const clientProviders: Provider[] = [
41
36
  showProgress: { token: UI_SHOW_PROGRESS_TOKEN, optional: true },
42
37
  },
43
38
  }),
44
- provide({
45
- provide: WEBPACK_CLIENT_MODERN_CONFIG_TOKEN,
46
- useFactory: ({ configManager, showProgress }) => {
47
- return CONFIG_MAP[configManager.env][configManager.type]({
48
- configManager,
49
- showProgress,
50
- });
51
- },
52
- deps: {
53
- configManager: CLIENT_MODERN_CONFIG_MANAGER_TOKEN,
54
- showProgress: { token: UI_SHOW_PROGRESS_TOKEN, optional: true },
55
- },
56
- }),
57
39
  ];
@@ -9,7 +9,6 @@ import {
9
9
  GET_BUILD_STATS_TOKEN,
10
10
  INIT_HANDLER_TOKEN,
11
11
  WEBPACK_CLIENT_COMPILER_TOKEN,
12
- WEBPACK_CLIENT_MODERN_COMPILER_TOKEN,
13
12
  WEBPACK_SERVER_COMPILER_TOKEN,
14
13
  } from '../tokens';
15
14
  import { calculateBuildTime } from '../utils/calculateBuildTime';
@@ -19,7 +18,7 @@ import { maxMemoryRss } from '../utils/maxMemoryRss';
19
18
  export const sharedProviders: Provider[] = [
20
19
  provide({
21
20
  provide: GET_BUILD_STATS_TOKEN,
22
- useFactory: ({ withBuildStats, clientCompiler, clientModernCompiler, serverCompiler }) => {
21
+ useFactory: ({ withBuildStats, clientCompiler, serverCompiler }) => {
23
22
  if (!withBuildStats) {
24
23
  return () => {
25
24
  return {};
@@ -27,14 +26,12 @@ export const sharedProviders: Provider[] = [
27
26
  }
28
27
 
29
28
  const getClientTime = clientCompiler && calculateBuildTime(clientCompiler);
30
- const getClientModernTime = clientModernCompiler && calculateBuildTime(clientModernCompiler);
31
29
  const getServerTime = serverCompiler && calculateBuildTime(serverCompiler);
32
30
 
33
31
  const getMaxMemoryRss = maxMemoryRss();
34
32
  return () => {
35
33
  return {
36
34
  clientBuildTime: getClientTime?.(),
37
- clientModernBuildTime: getClientModernTime?.(),
38
35
  serverBuildTime: getServerTime?.(),
39
36
  maxMemoryRss: getMaxMemoryRss?.(),
40
37
  };
@@ -43,7 +40,6 @@ export const sharedProviders: Provider[] = [
43
40
  deps: {
44
41
  withBuildStats: { token: WITH_BUILD_STATS_TOKEN, optional: true },
45
42
  clientCompiler: { token: WEBPACK_CLIENT_COMPILER_TOKEN, optional: true },
46
- clientModernCompiler: { token: WEBPACK_CLIENT_MODERN_COMPILER_TOKEN, optional: true },
47
43
  serverCompiler: { token: WEBPACK_SERVER_COMPILER_TOKEN, optional: true },
48
44
  },
49
45
  }),
@@ -54,18 +50,15 @@ export const sharedProviders: Provider[] = [
54
50
  provide({
55
51
  provide: INIT_HANDLER_TOKEN,
56
52
  multi: true,
57
- useFactory: ({ eventEmitter, clientCompiler, clientModernCompiler, serverCompiler }) => {
53
+ useFactory: ({ eventEmitter, clientCompiler, serverCompiler }) => {
58
54
  return () => {
59
55
  clientCompiler && emitWebpackEvents(clientCompiler, eventEmitter, 'client');
60
- clientModernCompiler &&
61
- emitWebpackEvents(clientModernCompiler, eventEmitter, 'clientModern');
62
56
  serverCompiler && emitWebpackEvents(serverCompiler, eventEmitter, 'server');
63
57
  };
64
58
  },
65
59
  deps: {
66
60
  eventEmitter: EVENT_EMITTER_TOKEN,
67
61
  clientCompiler: { token: WEBPACK_CLIENT_COMPILER_TOKEN, optional: true },
68
- clientModernCompiler: { token: WEBPACK_CLIENT_MODERN_COMPILER_TOKEN, optional: true },
69
62
  serverCompiler: { token: WEBPACK_SERVER_COMPILER_TOKEN, optional: true },
70
63
  },
71
64
  }),
@@ -10,17 +10,11 @@ import type { CliConfigEntry } from '../../typings/configEntry/cli';
10
10
  export const CLIENT_CONFIG_MANAGER_TOKEN = createToken<ConfigManager<CliConfigEntry>>(
11
11
  'builder-webpack clientConfigManager'
12
12
  );
13
- export const CLIENT_MODERN_CONFIG_MANAGER_TOKEN = createToken<ConfigManager<CliConfigEntry>>(
14
- 'builder-webpack clientModernConfigManager'
15
- );
16
13
  export const SERVER_CONFIG_MANAGER_TOKEN = createToken<ConfigManager<CliConfigEntry>>(
17
14
  'builder-webpack serverConfigManager'
18
15
  );
19
16
  export const WEBPACK_CLIENT_CONFIG_TOKEN = createToken<Config>('builder-webpack clientConfig');
20
17
 
21
- export const WEBPACK_CLIENT_MODERN_CONFIG_TOKEN = createToken<Config>(
22
- 'builder-webpack clientModernConfig'
23
- );
24
18
  export const WEBPACK_SERVER_CONFIG_TOKEN = createToken<Config>('builder-webpack serverConfig');
25
19
 
26
20
  export const WEBPACK_COMPILER_TOKEN = createToken<MultiCompiler>('builder-webpack webpackCompiler');
@@ -29,9 +23,6 @@ export const WEBPACK_CLIENT_COMPILER_TOKEN = createToken<Compiler>(
29
23
  'builder-webpack webpackClientCompiler'
30
24
  );
31
25
 
32
- export const WEBPACK_CLIENT_MODERN_COMPILER_TOKEN = createToken<Compiler>(
33
- 'builder-webpack webpackClientModernCompiler'
34
- );
35
26
  export const WEBPACK_SERVER_COMPILER_TOKEN = createToken<Compiler>(
36
27
  'builder-webpack webpackServerCompiler'
37
28
  );
@@ -8,7 +8,6 @@ export const copyStatsJsonFileToServerDirectory = async (
8
8
  clientConfigManager: ConfigManager<ApplicationConfigEntry>
9
9
  ) => {
10
10
  const STATS_JSON_FILE_NAME = 'stats.json';
11
- const STATS_JSON_FILE_NAME_MODERN = 'stats.modern.json';
12
11
 
13
12
  const statsJsonFileDirectoryPath = clientConfigManager.output.client;
14
13
 
@@ -18,14 +17,7 @@ export const copyStatsJsonFileToServerDirectory = async (
18
17
  STATS_JSON_FILE_NAME
19
18
  );
20
19
 
21
- const statsJsonFilePathModern = path.resolve(
22
- clientConfigManager.rootDir,
23
- statsJsonFileDirectoryPath,
24
- STATS_JSON_FILE_NAME_MODERN
25
- );
26
-
27
20
  const isExistStatsJsonFilePath = fs.existsSync(statsJsonFilePath);
28
- const isExistStatsJsonFilePathModern = fs.existsSync(statsJsonFilePathModern);
29
21
 
30
22
  // TODO: Необходимо вынести все локальные константы обозначающие тип сборки
31
23
  // ('client' | 'server' | 'all') в отдельный enum и переиспользовать по всему коду @tramvai/cli
@@ -41,13 +33,4 @@ export const copyStatsJsonFileToServerDirectory = async (
41
33
  fileName: STATS_JSON_FILE_NAME,
42
34
  });
43
35
  }
44
-
45
- if (isExistStatsJsonFilePathModern && clientConfigManager.modern) {
46
- await copyBuildFile({
47
- config: clientConfigManager,
48
- inputPath: statsJsonFileDirectoryPath,
49
- fromType: FROM_BUILD_DIRECTORY_TYPE,
50
- fileName: STATS_JSON_FILE_NAME_MODERN,
51
- });
52
- }
53
36
  };
package/src/cli/CLI.ts CHANGED
@@ -5,7 +5,7 @@ import type { Command, CommandMap, CommandResult } from '../models/command';
5
5
  import type { Logger } from '../models/logger';
6
6
  import type { Task, TaskMap } from '../models/task';
7
7
  import type { ConfigManager } from '../models/config';
8
- import type { Analytics } from '../models/analytics';
8
+ import { AnalyticsService } from '../models/analytics/analytics';
9
9
 
10
10
  export class CLI {
11
11
  context: Context;
@@ -47,16 +47,18 @@ export class CLI {
47
47
  tasksMap: TaskMap,
48
48
  logger: Logger,
49
49
  config: ConfigManager,
50
- analytics: Analytics,
51
50
  cliRootDir: string,
52
- cliPackageManager: PackageManager
51
+ cliPackageManager: PackageManager,
52
+ packageManager: PackageManager,
53
+ analytics: AnalyticsService
53
54
  ) {
54
55
  this.context = new Context(
55
56
  config,
56
57
  logger,
57
- analytics,
58
58
  cliRootDir,
59
59
  cliPackageManager,
60
+ packageManager,
61
+ analytics,
60
62
  this.runTask,
61
63
  this.runCommand,
62
64
  this.getTasks,
package/src/cli/index.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import path from 'path';
2
2
  import { resolvePackageManager, NpmPackageManager } from '@tinkoff/package-manager-wrapper';
3
3
  import { CLI } from './CLI';
4
- import { Analytics } from '../models/analytics';
5
4
  import { Logger } from '../models/logger';
6
5
  import { ConfigManager } from '../models/config';
7
6
  import { initSentry } from '../utils/sentry';
@@ -27,6 +26,7 @@ import type { TaskMap } from '../models/task';
27
26
  import { getRootFile } from '../utils/getRootFile';
28
27
  import { getTramvaiConfig } from '../utils/getTramvaiConfig';
29
28
  import { syncJsonFile } from '../utils/syncJsonFile';
29
+ import { AnalyticsService, resolveDependenciesProperties } from '../models/analytics/analytics';
30
30
 
31
31
  async function loadCommands(): Promise<CommandMap> {
32
32
  return [
@@ -53,6 +53,7 @@ const defaultPackageInfo = { name: 'init app', version: '0.0.1' };
53
53
 
54
54
  export async function cliInitialized(cliArgs = process.argv) {
55
55
  const logger = new Logger();
56
+ let analytics: AnalyticsService;
56
57
  const sentry = initSentry();
57
58
 
58
59
  try {
@@ -70,31 +71,55 @@ export async function cliInitialized(cliArgs = process.argv) {
70
71
  }>('package.json');
71
72
  const { content: config } = getTramvaiConfig();
72
73
 
73
- const analytic = new Analytics({
74
- packageInfo,
75
- trackingCode: 'UA-122261674-1',
76
- enabled: process.env.TRAMVAI_ENABLE_ANALYTICS === 'true',
74
+ const configManager = new ConfigManager({ config, syncConfigFile: syncJsonFile });
75
+ const packageManager = resolvePackageManager({ rootDir: process.cwd() });
76
+
77
+ analytics = new AnalyticsService({
78
+ logger,
79
+ packageManager,
80
+ enabled: configManager.config?.analytics?.enabled,
81
+ endpoint: configManager.config?.analytics?.endpoint,
82
+ system: configManager.config?.analytics?.system,
77
83
  });
78
84
 
79
- const configManager = new ConfigManager({ config, syncConfigFile: syncJsonFile });
85
+ await analytics.init();
80
86
 
81
87
  const cliRootDir = path.resolve(__dirname, '../', '../');
82
88
  const cliPackageManager = new NpmPackageManager({
83
89
  rootDir: cliRootDir,
84
90
  });
85
91
 
92
+ await analytics.send({
93
+ event: 'cli:init',
94
+ message: '@tramvai/cli initialized',
95
+ level: 'INFO',
96
+ arguments: cliArgs.slice(2),
97
+ uptime: performance.now(),
98
+ dependencies: resolveDependenciesProperties(),
99
+ });
100
+
86
101
  const cliInstance = new CLI(
87
102
  commandsMap,
88
103
  tasksMap,
89
104
  logger,
90
105
  configManager,
91
- analytic,
92
106
  cliRootDir,
93
- cliPackageManager
107
+ cliPackageManager,
108
+ packageManager,
109
+ analytics
94
110
  );
95
111
 
96
112
  return await cliInstance.run(cliArgs);
97
113
  } catch (e: any) {
114
+ await analytics?.send({
115
+ event: 'cli:error',
116
+ message: '@tramvai/cli run failed',
117
+ level: 'ERROR',
118
+ arguments: cliArgs.slice(2),
119
+ error: e,
120
+ uptime: performance.now(),
121
+ });
122
+
98
123
  logger.event({
99
124
  type: 'error',
100
125
  event: 'GLOBAL:ERROR',
package/src/cli/runCLI.ts CHANGED
@@ -2,7 +2,11 @@ import exit from 'exit';
2
2
 
3
3
  import { fixYarnSettingsOverride } from '../utils/fixYarnSettingsOverride';
4
4
  import { handleErrors } from '../utils/handleErrors';
5
- import { enableCpuProfile } from '../utils/cpu-profile';
5
+
6
+ declare global {
7
+ // eslint-disable-next-line no-var, vars-on-top
8
+ var __TRAMVAI_EXIT_HANDLERS__: Array<() => Promise<any>>;
9
+ }
6
10
 
7
11
  // to use V8's code cache to speed up instantiation time
8
12
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions
@@ -12,17 +16,34 @@ handleErrors();
12
16
  fixYarnSettingsOverride();
13
17
 
14
18
  if (process.env.TRAMVAI_CPU_PROFILE) {
19
+ const { enableCpuProfile } = require('../utils/cpu-profile');
15
20
  enableCpuProfile('tramvai-cli');
16
21
  }
17
22
 
18
23
  export default (pathCli: string) => {
19
24
  const cli = require(pathCli).cliInitialized;
20
25
 
26
+ async function runExitHandlersAndQuit(code: number) {
27
+ if (global.__TRAMVAI_EXIT_HANDLERS__) {
28
+ const handlers = [...global.__TRAMVAI_EXIT_HANDLERS__];
29
+ const promise = Promise.allSettled(handlers.map((handler) => handler()));
30
+
31
+ // prevent multiple calls to exit handlers, wait the same handlers if they are already running
32
+ global.__TRAMVAI_EXIT_HANDLERS__ = [() => promise];
33
+
34
+ await promise;
35
+ }
36
+ exit(code);
37
+ }
38
+
39
+ process.on('SIGINT', async () => runExitHandlersAndQuit(0));
40
+ process.on('SIGTERM', async () => runExitHandlersAndQuit(0));
41
+
21
42
  return cli()
22
- .then(() => {
23
- exit(0);
43
+ .then(async () => {
44
+ await runExitHandlersAndQuit(0);
24
45
  })
25
- .catch(() => {
26
- exit(1);
46
+ .catch(async () => {
47
+ await runExitHandlersAndQuit(1);
27
48
  });
28
49
  };