@tsed/cli-core 3.20.16 → 3.21.0-rc.2

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 (298) hide show
  1. package/lib/cjs/CliCore.js +97 -0
  2. package/lib/cjs/CliCore.js.map +1 -0
  3. package/lib/cjs/decorators/command.js +11 -0
  4. package/lib/cjs/decorators/command.js.map +1 -0
  5. package/lib/cjs/decorators/index.js +9 -0
  6. package/lib/cjs/decorators/index.js.map +1 -0
  7. package/lib/cjs/decorators/on.js +13 -0
  8. package/lib/cjs/decorators/on.js.map +1 -0
  9. package/lib/cjs/decorators/onAdd.js +10 -0
  10. package/lib/cjs/decorators/onAdd.js.map +1 -0
  11. package/lib/cjs/decorators/onExec.js +10 -0
  12. package/lib/cjs/decorators/onExec.js.map +1 -0
  13. package/lib/cjs/decorators/onPostInstall.js +10 -0
  14. package/lib/cjs/decorators/onPostInstall.js.map +1 -0
  15. package/lib/cjs/decorators/onPrompt.js +10 -0
  16. package/lib/cjs/decorators/onPrompt.js.map +1 -0
  17. package/lib/cjs/domains/CliError.js +14 -0
  18. package/lib/cjs/domains/CliError.js.map +1 -0
  19. package/lib/cjs/domains/CommandStoreKeys.js +12 -0
  20. package/lib/cjs/domains/CommandStoreKeys.js.map +1 -0
  21. package/lib/cjs/index.js +30 -0
  22. package/lib/cjs/index.js.map +1 -0
  23. package/lib/cjs/interfaces/CliDefaultOptions.js +3 -0
  24. package/lib/cjs/interfaces/CliDefaultOptions.js.map +1 -0
  25. package/lib/cjs/interfaces/CommandMetadata.js +3 -0
  26. package/lib/cjs/interfaces/CommandMetadata.js.map +1 -0
  27. package/lib/cjs/interfaces/CommandParameters.js +3 -0
  28. package/lib/cjs/interfaces/CommandParameters.js.map +1 -0
  29. package/lib/cjs/interfaces/CommandProvider.js +3 -0
  30. package/lib/cjs/interfaces/CommandProvider.js.map +1 -0
  31. package/lib/cjs/interfaces/PackageJson.js +3 -0
  32. package/lib/cjs/interfaces/PackageJson.js.map +1 -0
  33. package/lib/cjs/interfaces/ProjectPreferences.js +10 -0
  34. package/lib/cjs/interfaces/ProjectPreferences.js.map +1 -0
  35. package/lib/cjs/interfaces/Tasks.js +3 -0
  36. package/lib/cjs/interfaces/Tasks.js.map +1 -0
  37. package/lib/cjs/interfaces/index.js +11 -0
  38. package/lib/cjs/interfaces/index.js.map +1 -0
  39. package/lib/cjs/package.json +3 -0
  40. package/lib/cjs/registries/CommandRegistry.js +13 -0
  41. package/lib/cjs/registries/CommandRegistry.js.map +1 -0
  42. package/lib/cjs/services/CliConfiguration.js +21 -0
  43. package/lib/cjs/services/CliConfiguration.js.map +1 -0
  44. package/lib/cjs/services/CliDockerComposeYaml.js +83 -0
  45. package/lib/cjs/services/CliDockerComposeYaml.js.map +1 -0
  46. package/lib/cjs/services/CliExeca.js +45 -0
  47. package/lib/cjs/services/CliExeca.js.map +1 -0
  48. package/lib/cjs/services/CliFs.js +55 -0
  49. package/lib/cjs/services/CliFs.js.map +1 -0
  50. package/lib/cjs/services/CliHooks.js +34 -0
  51. package/lib/cjs/services/CliHooks.js.map +1 -0
  52. package/lib/cjs/services/CliHttpClient.js +107 -0
  53. package/lib/cjs/services/CliHttpClient.js.map +1 -0
  54. package/lib/cjs/services/CliHttpLogClient.js +83 -0
  55. package/lib/cjs/services/CliHttpLogClient.js.map +1 -0
  56. package/lib/cjs/services/CliPackageJson.js +16 -0
  57. package/lib/cjs/services/CliPackageJson.js.map +1 -0
  58. package/lib/cjs/services/CliPlugins.js +78 -0
  59. package/lib/cjs/services/CliPlugins.js.map +1 -0
  60. package/lib/cjs/services/CliProxyAgent.js +87 -0
  61. package/lib/cjs/services/CliProxyAgent.js.map +1 -0
  62. package/lib/cjs/services/CliRunScript.js +31 -0
  63. package/lib/cjs/services/CliRunScript.js.map +1 -0
  64. package/lib/cjs/services/CliService.js +271 -0
  65. package/lib/cjs/services/CliService.js.map +1 -0
  66. package/lib/cjs/services/CliYaml.js +37 -0
  67. package/lib/cjs/services/CliYaml.js.map +1 -0
  68. package/lib/cjs/services/NpmRegistryClient.js +121 -0
  69. package/lib/cjs/services/NpmRegistryClient.js.map +1 -0
  70. package/lib/cjs/services/ProjectPackageJson.js +420 -0
  71. package/lib/cjs/services/ProjectPackageJson.js.map +1 -0
  72. package/lib/cjs/services/Renderer.js +154 -0
  73. package/lib/cjs/services/Renderer.js.map +1 -0
  74. package/lib/cjs/services/index.js +17 -0
  75. package/lib/cjs/services/index.js.map +1 -0
  76. package/lib/cjs/utils/createInjector.js +35 -0
  77. package/lib/cjs/utils/createInjector.js.map +1 -0
  78. package/lib/cjs/utils/createTasksRunner.js +75 -0
  79. package/lib/cjs/utils/createTasksRunner.js.map +1 -0
  80. package/lib/cjs/utils/getCommandMetadata.js +19 -0
  81. package/lib/cjs/utils/getCommandMetadata.js.map +1 -0
  82. package/lib/cjs/utils/getPackageJson.js +38 -0
  83. package/lib/cjs/utils/getPackageJson.js.map +1 -0
  84. package/lib/cjs/utils/hbs/array.js +522 -0
  85. package/lib/cjs/utils/hbs/array.js.map +1 -0
  86. package/lib/cjs/utils/hbs/collection.js +66 -0
  87. package/lib/cjs/utils/hbs/collection.js.map +1 -0
  88. package/lib/cjs/utils/hbs/comparison.js +437 -0
  89. package/lib/cjs/utils/hbs/comparison.js.map +1 -0
  90. package/lib/cjs/utils/hbs/index.js +15 -0
  91. package/lib/cjs/utils/hbs/index.js.map +1 -0
  92. package/lib/cjs/utils/hbs/object.js +245 -0
  93. package/lib/cjs/utils/hbs/object.js.map +1 -0
  94. package/lib/cjs/utils/hbs/switch.js +14 -0
  95. package/lib/cjs/utils/hbs/switch.js.map +1 -0
  96. package/lib/cjs/utils/index.js +14 -0
  97. package/lib/cjs/utils/index.js.map +1 -0
  98. package/lib/cjs/utils/isValidVersion.js +11 -0
  99. package/lib/cjs/utils/isValidVersion.js.map +1 -0
  100. package/lib/cjs/utils/loadPlugins.js +47 -0
  101. package/lib/cjs/utils/loadPlugins.js.map +1 -0
  102. package/lib/cjs/utils/logToCurl.js +19 -0
  103. package/lib/cjs/utils/logToCurl.js.map +1 -0
  104. package/lib/cjs/utils/mapCommanderArgs.js +40 -0
  105. package/lib/cjs/utils/mapCommanderArgs.js.map +1 -0
  106. package/lib/cjs/utils/mapCommanderOptions.js +16 -0
  107. package/lib/cjs/utils/mapCommanderOptions.js.map +1 -0
  108. package/lib/cjs/utils/normalizePath.js +19 -0
  109. package/lib/cjs/utils/normalizePath.js.map +1 -0
  110. package/lib/cjs/utils/parseOption.js +27 -0
  111. package/lib/cjs/utils/parseOption.js.map +1 -0
  112. package/lib/cjs/utils/patchCommander.js +58 -0
  113. package/lib/cjs/utils/patchCommander.js.map +1 -0
  114. package/lib/cjs/utils/renderer/insertAfter.js +17 -0
  115. package/lib/cjs/utils/renderer/insertAfter.js.map +1 -0
  116. package/lib/cjs/utils/renderer/insertImport.js +16 -0
  117. package/lib/cjs/utils/renderer/insertImport.js.map +1 -0
  118. package/lib/esm/CliCore.js +94 -0
  119. package/lib/esm/CliCore.js.map +1 -0
  120. package/lib/esm/decorators/command.js +7 -0
  121. package/lib/esm/decorators/command.js.map +1 -0
  122. package/lib/esm/decorators/index.js +6 -0
  123. package/lib/esm/decorators/index.js.map +1 -0
  124. package/lib/esm/decorators/on.js +9 -0
  125. package/lib/esm/decorators/on.js.map +1 -0
  126. package/lib/esm/decorators/onAdd.js +6 -0
  127. package/lib/esm/decorators/onAdd.js.map +1 -0
  128. package/lib/esm/decorators/onExec.js +6 -0
  129. package/lib/esm/decorators/onExec.js.map +1 -0
  130. package/lib/esm/decorators/onPostInstall.js +6 -0
  131. package/lib/esm/decorators/onPostInstall.js.map +1 -0
  132. package/lib/esm/decorators/onPrompt.js +6 -0
  133. package/lib/esm/decorators/onPrompt.js.map +1 -0
  134. package/lib/esm/domains/CliError.js +10 -0
  135. package/lib/esm/domains/CliError.js.map +1 -0
  136. package/lib/esm/domains/CommandStoreKeys.js +9 -0
  137. package/lib/esm/domains/CommandStoreKeys.js.map +1 -0
  138. package/lib/esm/index.js +12 -0
  139. package/lib/esm/index.js.map +1 -0
  140. package/lib/esm/interfaces/CliDefaultOptions.js +2 -0
  141. package/lib/esm/interfaces/CliDefaultOptions.js.map +1 -0
  142. package/lib/esm/interfaces/CommandMetadata.js +2 -0
  143. package/lib/esm/interfaces/CommandMetadata.js.map +1 -0
  144. package/lib/esm/interfaces/CommandParameters.js +2 -0
  145. package/lib/esm/interfaces/CommandParameters.js.map +1 -0
  146. package/lib/esm/interfaces/CommandProvider.js +2 -0
  147. package/lib/esm/interfaces/CommandProvider.js.map +1 -0
  148. package/lib/esm/interfaces/PackageJson.js +2 -0
  149. package/lib/esm/interfaces/PackageJson.js.map +1 -0
  150. package/lib/esm/interfaces/ProjectPreferences.js +7 -0
  151. package/lib/esm/interfaces/ProjectPreferences.js.map +1 -0
  152. package/lib/esm/interfaces/Tasks.js +2 -0
  153. package/lib/esm/interfaces/Tasks.js.map +1 -0
  154. package/lib/esm/interfaces/index.js +8 -0
  155. package/lib/esm/interfaces/index.js.map +1 -0
  156. package/lib/esm/package.json +3 -0
  157. package/lib/esm/registries/CommandRegistry.js +10 -0
  158. package/lib/esm/registries/CommandRegistry.js.map +1 -0
  159. package/lib/esm/services/CliConfiguration.js +18 -0
  160. package/lib/esm/services/CliConfiguration.js.map +1 -0
  161. package/lib/esm/services/CliDockerComposeYaml.js +80 -0
  162. package/lib/esm/services/CliDockerComposeYaml.js.map +1 -0
  163. package/lib/esm/services/CliExeca.js +42 -0
  164. package/lib/esm/services/CliExeca.js.map +1 -0
  165. package/lib/esm/services/CliFs.js +52 -0
  166. package/lib/esm/services/CliFs.js.map +1 -0
  167. package/lib/esm/services/CliHooks.js +31 -0
  168. package/lib/esm/services/CliHooks.js.map +1 -0
  169. package/lib/esm/services/CliHttpClient.js +104 -0
  170. package/lib/esm/services/CliHttpClient.js.map +1 -0
  171. package/lib/esm/services/CliHttpLogClient.js +80 -0
  172. package/lib/esm/services/CliHttpLogClient.js.map +1 -0
  173. package/lib/esm/services/CliPackageJson.js +12 -0
  174. package/lib/esm/services/CliPackageJson.js.map +1 -0
  175. package/lib/esm/services/CliPlugins.js +75 -0
  176. package/lib/esm/services/CliPlugins.js.map +1 -0
  177. package/lib/esm/services/CliProxyAgent.js +84 -0
  178. package/lib/esm/services/CliProxyAgent.js.map +1 -0
  179. package/lib/esm/services/CliRunScript.js +28 -0
  180. package/lib/esm/services/CliRunScript.js.map +1 -0
  181. package/lib/esm/services/CliService.js +268 -0
  182. package/lib/esm/services/CliService.js.map +1 -0
  183. package/lib/esm/services/CliYaml.js +34 -0
  184. package/lib/esm/services/CliYaml.js.map +1 -0
  185. package/lib/esm/services/NpmRegistryClient.js +117 -0
  186. package/lib/esm/services/NpmRegistryClient.js.map +1 -0
  187. package/lib/esm/services/ProjectPackageJson.js +417 -0
  188. package/lib/esm/services/ProjectPackageJson.js.map +1 -0
  189. package/lib/esm/services/Renderer.js +150 -0
  190. package/lib/esm/services/Renderer.js.map +1 -0
  191. package/lib/esm/services/index.js +14 -0
  192. package/lib/esm/services/index.js.map +1 -0
  193. package/lib/esm/utils/createInjector.js +30 -0
  194. package/lib/esm/utils/createInjector.js.map +1 -0
  195. package/lib/esm/utils/createTasksRunner.js +69 -0
  196. package/lib/esm/utils/createTasksRunner.js.map +1 -0
  197. package/lib/esm/utils/getCommandMetadata.js +15 -0
  198. package/lib/esm/utils/getCommandMetadata.js.map +1 -0
  199. package/lib/esm/utils/getPackageJson.js +33 -0
  200. package/lib/esm/utils/getPackageJson.js.map +1 -0
  201. package/lib/esm/utils/hbs/array.js +518 -0
  202. package/lib/esm/utils/hbs/array.js.map +1 -0
  203. package/lib/esm/utils/hbs/collection.js +62 -0
  204. package/lib/esm/utils/hbs/collection.js.map +1 -0
  205. package/lib/esm/utils/hbs/comparison.js +433 -0
  206. package/lib/esm/utils/hbs/comparison.js.map +1 -0
  207. package/lib/esm/utils/hbs/index.js +12 -0
  208. package/lib/esm/utils/hbs/index.js.map +1 -0
  209. package/lib/esm/utils/hbs/object.js +241 -0
  210. package/lib/esm/utils/hbs/object.js.map +1 -0
  211. package/lib/esm/utils/hbs/switch.js +11 -0
  212. package/lib/esm/utils/hbs/switch.js.map +1 -0
  213. package/lib/esm/utils/index.js +11 -0
  214. package/lib/esm/utils/index.js.map +1 -0
  215. package/lib/esm/utils/isValidVersion.js +6 -0
  216. package/lib/esm/utils/isValidVersion.js.map +1 -0
  217. package/lib/esm/utils/loadPlugins.js +42 -0
  218. package/lib/esm/utils/loadPlugins.js.map +1 -0
  219. package/lib/esm/utils/logToCurl.js +14 -0
  220. package/lib/esm/utils/logToCurl.js.map +1 -0
  221. package/lib/esm/utils/mapCommanderArgs.js +36 -0
  222. package/lib/esm/utils/mapCommanderArgs.js.map +1 -0
  223. package/lib/esm/utils/mapCommanderOptions.js +12 -0
  224. package/lib/esm/utils/mapCommanderOptions.js.map +1 -0
  225. package/lib/esm/utils/normalizePath.js +14 -0
  226. package/lib/esm/utils/normalizePath.js.map +1 -0
  227. package/lib/esm/utils/parseOption.js +23 -0
  228. package/lib/esm/utils/parseOption.js.map +1 -0
  229. package/lib/esm/utils/patchCommander.js +55 -0
  230. package/lib/esm/utils/patchCommander.js.map +1 -0
  231. package/lib/esm/utils/renderer/insertAfter.js +13 -0
  232. package/lib/esm/utils/renderer/insertAfter.js.map +1 -0
  233. package/lib/esm/utils/renderer/insertImport.js +12 -0
  234. package/lib/esm/utils/renderer/insertImport.js.map +1 -0
  235. package/lib/{CliCore.d.ts → types/CliCore.d.ts} +0 -0
  236. package/lib/{decorators → types/decorators}/command.d.ts +0 -0
  237. package/lib/{decorators → types/decorators}/index.d.ts +0 -0
  238. package/lib/{decorators → types/decorators}/on.d.ts +0 -0
  239. package/lib/{decorators → types/decorators}/onAdd.d.ts +0 -0
  240. package/lib/{decorators → types/decorators}/onExec.d.ts +0 -0
  241. package/lib/{decorators → types/decorators}/onPostInstall.d.ts +0 -0
  242. package/lib/{decorators → types/decorators}/onPrompt.d.ts +0 -0
  243. package/lib/{domains → types/domains}/CliError.d.ts +0 -0
  244. package/lib/{domains → types/domains}/CommandStoreKeys.d.ts +0 -0
  245. package/lib/{index.d.ts → types/index.d.ts} +0 -0
  246. package/lib/{interfaces → types/interfaces}/CliDefaultOptions.d.ts +0 -0
  247. package/lib/{interfaces → types/interfaces}/CommandMetadata.d.ts +0 -0
  248. package/lib/{interfaces → types/interfaces}/CommandParameters.d.ts +0 -0
  249. package/lib/{interfaces → types/interfaces}/CommandProvider.d.ts +0 -0
  250. package/lib/{interfaces → types/interfaces}/PackageJson.d.ts +0 -0
  251. package/lib/{interfaces → types/interfaces}/ProjectPreferences.d.ts +0 -0
  252. package/lib/{interfaces → types/interfaces}/Tasks.d.ts +0 -0
  253. package/lib/{interfaces → types/interfaces}/index.d.ts +0 -0
  254. package/lib/{registries → types/registries}/CommandRegistry.d.ts +0 -0
  255. package/lib/{services → types/services}/CliConfiguration.d.ts +0 -0
  256. package/lib/{services → types/services}/CliDockerComposeYaml.d.ts +0 -0
  257. package/lib/{services → types/services}/CliExeca.d.ts +1 -0
  258. package/lib/{services → types/services}/CliFs.d.ts +1 -0
  259. package/lib/{services → types/services}/CliHooks.d.ts +0 -0
  260. package/lib/{services → types/services}/CliHttpClient.d.ts +0 -0
  261. package/lib/{services → types/services}/CliHttpLogClient.d.ts +0 -0
  262. package/lib/{services → types/services}/CliPackageJson.d.ts +0 -0
  263. package/lib/{services → types/services}/CliPlugins.d.ts +0 -0
  264. package/lib/{services → types/services}/CliProxyAgent.d.ts +0 -0
  265. package/lib/{services → types/services}/CliRunScript.d.ts +0 -0
  266. package/lib/{services → types/services}/CliService.d.ts +0 -0
  267. package/lib/{services → types/services}/CliYaml.d.ts +0 -0
  268. package/lib/{services → types/services}/NpmRegistryClient.d.ts +0 -0
  269. package/lib/{services → types/services}/ProjectPackageJson.d.ts +0 -0
  270. package/lib/{services → types/services}/Renderer.d.ts +0 -0
  271. package/lib/{services → types/services}/index.d.ts +0 -0
  272. package/lib/{utils → types/utils}/createInjector.d.ts +0 -0
  273. package/lib/{utils → types/utils}/createTasksRunner.d.ts +0 -0
  274. package/lib/{utils → types/utils}/getCommandMetadata.d.ts +0 -0
  275. package/lib/{utils → types/utils}/getPackageJson.d.ts +0 -0
  276. package/lib/{utils → types/utils}/hbs/array.d.ts +0 -0
  277. package/lib/{utils → types/utils}/hbs/collection.d.ts +0 -0
  278. package/lib/{utils → types/utils}/hbs/comparison.d.ts +0 -0
  279. package/lib/{utils → types/utils}/hbs/index.d.ts +0 -0
  280. package/lib/{utils → types/utils}/hbs/object.d.ts +0 -0
  281. package/lib/{utils → types/utils}/hbs/switch.d.ts +0 -0
  282. package/lib/{utils → types/utils}/index.d.ts +0 -0
  283. package/lib/{utils → types/utils}/isValidVersion.d.ts +0 -0
  284. package/lib/{utils → types/utils}/loadPlugins.d.ts +0 -0
  285. package/lib/{utils → types/utils}/logToCurl.d.ts +0 -0
  286. package/lib/{utils → types/utils}/mapCommanderArgs.d.ts +0 -0
  287. package/lib/{utils → types/utils}/mapCommanderOptions.d.ts +0 -0
  288. package/lib/{utils → types/utils}/normalizePath.d.ts +0 -0
  289. package/lib/{utils → types/utils}/parseOption.d.ts +0 -0
  290. package/lib/{utils → types/utils}/patchCommander.d.ts +0 -0
  291. package/lib/{utils → types/utils}/renderer/insertAfter.d.ts +0 -0
  292. package/lib/{utils → types/utils}/renderer/insertImport.d.ts +0 -0
  293. package/package.json +19 -9
  294. package/tsconfig.compile.esm.json +12 -0
  295. package/lib/index.js +0 -3992
  296. package/lib/index.js.map +0 -1
  297. package/lib/index.modern.js +0 -3832
  298. package/lib/index.modern.js.map +0 -1
@@ -0,0 +1,417 @@
1
+ import { __decorate, __metadata, __param } from "tslib";
2
+ import { getValue, setValue } from "@tsed/core";
3
+ import { Configuration, Inject, Injectable } from "@tsed/di";
4
+ import { join } from "path";
5
+ import { EMPTY, throwError } from "rxjs";
6
+ import { catchError } from "rxjs/operators";
7
+ import semver from "semver";
8
+ import { PackageManager } from "../interfaces/ProjectPreferences.js";
9
+ import { CliExeca } from "./CliExeca.js";
10
+ import { CliFs } from "./CliFs.js";
11
+ import { isValidVersion } from "../utils/isValidVersion.js";
12
+ import { getPackageJson } from "../utils/getPackageJson.js";
13
+ function mapPackagesWithInvalidVersion(deps) {
14
+ const toString = (info) => {
15
+ return info[1] === "latest" ? info[0] : info.join("@");
16
+ };
17
+ return Object.entries(deps)
18
+ .filter(([, version]) => !semver.valid(version))
19
+ .map(toString);
20
+ }
21
+ function sortKeys(obj) {
22
+ return Object.entries(obj)
23
+ .sort((k1, k2) => {
24
+ return k1[0] < k2[0] ? -1 : 1;
25
+ })
26
+ .reduce((obj, [key, value]) => {
27
+ return {
28
+ ...obj,
29
+ [key]: value
30
+ };
31
+ }, {});
32
+ }
33
+ function mapPackagesWithValidVersion(deps) {
34
+ return Object.entries(deps).reduce((deps, [key, version]) => {
35
+ if (isValidVersion(version)) {
36
+ return {
37
+ ...deps,
38
+ [key]: version
39
+ };
40
+ }
41
+ return deps;
42
+ }, {});
43
+ }
44
+ function defaultPreferences(pkg) {
45
+ let packageManager = PackageManager.YARN;
46
+ if (getValue(pkg, "scripts.build", "").includes("pnpm ")) {
47
+ packageManager = PackageManager.PNPM;
48
+ }
49
+ else if (getValue(pkg, "scripts.build", "").includes("npm ")) {
50
+ packageManager = PackageManager.NPM;
51
+ }
52
+ return {
53
+ packageManager
54
+ };
55
+ }
56
+ let ProjectPackageJson = class ProjectPackageJson {
57
+ constructor(configuration) {
58
+ this.configuration = configuration;
59
+ this.rewrite = false;
60
+ this.reinstall = false;
61
+ this.setRaw({
62
+ name: "",
63
+ version: "1.0.0",
64
+ description: "",
65
+ scripts: {},
66
+ dependencies: {},
67
+ devDependencies: {}
68
+ });
69
+ this.read();
70
+ }
71
+ get path() {
72
+ return join(this.dir, "package.json");
73
+ }
74
+ get dir() {
75
+ var _a;
76
+ return String((_a = this.configuration.project) === null || _a === void 0 ? void 0 : _a.rootDir);
77
+ }
78
+ set dir(dir) {
79
+ this.configuration.project.rootDir = dir;
80
+ this.read();
81
+ }
82
+ get name() {
83
+ return this.raw.name;
84
+ }
85
+ set name(name) {
86
+ this.raw.name = name;
87
+ this.rewrite = true;
88
+ }
89
+ get version() {
90
+ return this.raw.version;
91
+ }
92
+ get description() {
93
+ return this.raw.description;
94
+ }
95
+ get scripts() {
96
+ return this.raw.scripts;
97
+ }
98
+ get dependencies() {
99
+ return this.raw.dependencies;
100
+ }
101
+ get devDependencies() {
102
+ return this.raw.devDependencies;
103
+ }
104
+ get allDependencies() {
105
+ return {
106
+ ...(this.dependencies || {}),
107
+ ...(this.devDependencies || {})
108
+ };
109
+ }
110
+ get preferences() {
111
+ return this.raw[this.configuration.name];
112
+ }
113
+ toJSON() {
114
+ return this.raw;
115
+ }
116
+ read() {
117
+ const pkg = this.getPackageJson();
118
+ this.setRaw(pkg);
119
+ return this;
120
+ }
121
+ setRaw(pkg) {
122
+ const projectPreferences = this.configuration.defaultProjectPreferences;
123
+ const preferences = getValue(pkg, this.configuration.name);
124
+ this.raw = {
125
+ ...pkg,
126
+ [this.configuration.name]: {
127
+ ...defaultPreferences(pkg),
128
+ ...(projectPreferences && projectPreferences(pkg)),
129
+ ...preferences
130
+ }
131
+ };
132
+ }
133
+ getRunCmd() {
134
+ switch (this.preferences.packageManager) {
135
+ case "npm":
136
+ return "npm run";
137
+ case "pnpm":
138
+ return "pnpm run";
139
+ default:
140
+ return "yarn run";
141
+ }
142
+ }
143
+ addDevDependency(pkg, version) {
144
+ this.devDependencies[pkg] = version;
145
+ this.reinstall = true;
146
+ this.rewrite = true;
147
+ return this;
148
+ }
149
+ addDevDependencies(modules, scope = {}) {
150
+ const replacer = (match, key) => getValue(key, scope);
151
+ Object.entries(modules).forEach(([pkg, version]) => {
152
+ this.addDevDependency(pkg, (version || "").replace(/{{([\w.]+)}}/gi, replacer));
153
+ });
154
+ return this;
155
+ }
156
+ addDependency(pkg, version) {
157
+ this.dependencies[pkg] = version;
158
+ this.reinstall = true;
159
+ this.rewrite = true;
160
+ return this;
161
+ }
162
+ addDependencies(modules, ctx = {}) {
163
+ const replacer = (match, key) => getValue(key, ctx);
164
+ Object.entries(modules).forEach(([pkg, version]) => {
165
+ this.addDependency(pkg, (version || "").replace("{{tsedVersion}}", ctx.tsedVersion).replace(/{{([\w.]+)}}/gi, replacer));
166
+ });
167
+ return this;
168
+ }
169
+ addScript(task, cmd) {
170
+ this.scripts[task] = cmd;
171
+ this.rewrite = true;
172
+ return this;
173
+ }
174
+ addScripts(scripts) {
175
+ Object.entries(scripts).forEach(([task, cmd]) => {
176
+ this.addScript(task, cmd);
177
+ });
178
+ return this;
179
+ }
180
+ add(key, data) {
181
+ this.raw[key] = data;
182
+ this.rewrite = true;
183
+ return this;
184
+ }
185
+ setPreference(key, value) {
186
+ setValue(this.raw, `${this.configuration.name}.${key}`, value);
187
+ this.rewrite = true;
188
+ return;
189
+ }
190
+ set(key, value) {
191
+ this.raw[key] = value;
192
+ this.rewrite = true;
193
+ if (["dependencies", "devDependencies", "peerDependencies"].includes(key)) {
194
+ this.reinstall = true;
195
+ }
196
+ }
197
+ get(key) {
198
+ return this.raw[key];
199
+ }
200
+ write() {
201
+ const originalPkg = this.getPackageJson();
202
+ this.rewrite = false;
203
+ this.raw = {
204
+ ...originalPkg,
205
+ ...this.raw,
206
+ scripts: {
207
+ ...(originalPkg.scripts || {}),
208
+ ...(this.raw.scripts || {})
209
+ },
210
+ dependencies: sortKeys({
211
+ ...originalPkg.dependencies,
212
+ ...mapPackagesWithValidVersion(this.raw.dependencies)
213
+ }),
214
+ devDependencies: sortKeys({
215
+ ...originalPkg.devDependencies,
216
+ ...mapPackagesWithValidVersion(this.raw.devDependencies)
217
+ }),
218
+ readme: undefined,
219
+ _id: undefined
220
+ };
221
+ this.fs.writeFileSync(this.path, JSON.stringify(this.raw, null, 2), { encoding: "utf8" });
222
+ return this;
223
+ }
224
+ hasYarn() {
225
+ try {
226
+ this.cliExeca.runSync(PackageManager.YARN, ["--version"]);
227
+ return true;
228
+ }
229
+ catch (er) {
230
+ return false;
231
+ }
232
+ }
233
+ install(options = {}) {
234
+ const packageManager = this.getPackageManager(options.packageManager);
235
+ let tasks;
236
+ switch (packageManager) {
237
+ case "pnpm":
238
+ tasks = this.installWithPnpm(options);
239
+ break;
240
+ case "npm":
241
+ tasks = this.installWithNpm(options);
242
+ break;
243
+ default:
244
+ tasks = this.installWithYarn(options);
245
+ }
246
+ return [
247
+ {
248
+ title: "Write package.json",
249
+ enabled: () => this.rewrite,
250
+ task: () => {
251
+ this.write();
252
+ }
253
+ },
254
+ ...tasks,
255
+ {
256
+ title: "Clean",
257
+ task: () => {
258
+ this.reinstall = false;
259
+ this.rewrite = false;
260
+ this.read();
261
+ }
262
+ }
263
+ ];
264
+ }
265
+ /**
266
+ * Import a module from the project workspace
267
+ * @param mod
268
+ */
269
+ async importModule(mod) {
270
+ return this.fs.importModule(mod, this.dir);
271
+ }
272
+ runScript(npmTask, ignoreError = false) {
273
+ const options = {
274
+ cwd: this.dir
275
+ };
276
+ const errorPipe = () => catchError((error) => {
277
+ if (ignoreError) {
278
+ return EMPTY;
279
+ }
280
+ return throwError(error);
281
+ });
282
+ return this.cliExeca.run(this.getPackageManager(), ["run", npmTask], options).pipe(errorPipe());
283
+ }
284
+ getPackageManager(packageManager) {
285
+ if (this.preferences.packageManager) {
286
+ packageManager = this.preferences.packageManager;
287
+ }
288
+ packageManager = packageManager || PackageManager.YARN;
289
+ if (packageManager === PackageManager.YARN && !this.hasYarn()) {
290
+ packageManager = PackageManager.NPM;
291
+ }
292
+ return packageManager;
293
+ }
294
+ setGhToken(GH_TOKEN) {
295
+ this.GH_TOKEN = GH_TOKEN;
296
+ }
297
+ installWithYarn({ verbose }) {
298
+ const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);
299
+ const deps = mapPackagesWithInvalidVersion(this.dependencies);
300
+ const options = {
301
+ cwd: this.dir,
302
+ env: {
303
+ ...process.env,
304
+ GH_TOKEN: this.GH_TOKEN
305
+ }
306
+ };
307
+ const errorPipe = () => catchError((error) => {
308
+ if (error.stderr.startsWith("error Your lockfile needs to be updated")) {
309
+ return throwError(new Error("yarn.lock file is outdated. Run yarn, commit the updated lockfile and try again."));
310
+ }
311
+ return throwError(error);
312
+ });
313
+ return [
314
+ {
315
+ title: "Installing dependencies using Yarn",
316
+ skip: () => !this.reinstall,
317
+ task: () => this.cliExeca
318
+ .run(PackageManager.YARN, ["install", "--production=false", verbose && "--verbose", "--ignore-engines"].filter(Boolean), options)
319
+ .pipe(errorPipe())
320
+ },
321
+ {
322
+ title: "Add dependencies using Yarn",
323
+ skip: () => !deps.length,
324
+ task: () => this.cliExeca
325
+ .run(PackageManager.YARN, ["add", verbose && "--verbose", "--ignore-engines", ...deps].filter(Boolean), options)
326
+ .pipe(errorPipe())
327
+ },
328
+ {
329
+ title: "Add devDependencies using Yarn",
330
+ skip: () => !devDeps.length,
331
+ task: () => this.cliExeca
332
+ .run(PackageManager.YARN, ["add", "-D", verbose && "--verbose", "--ignore-engines", ...devDeps].filter(Boolean), options)
333
+ .pipe(errorPipe())
334
+ }
335
+ ];
336
+ }
337
+ installWithNpm({ verbose }) {
338
+ const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);
339
+ const deps = mapPackagesWithInvalidVersion(this.dependencies);
340
+ const options = {
341
+ cwd: this.dir,
342
+ env: {
343
+ ...process.env,
344
+ GH_TOKEN: this.GH_TOKEN
345
+ }
346
+ };
347
+ return [
348
+ {
349
+ title: "Installing dependencies using npm",
350
+ skip: () => {
351
+ return !this.reinstall;
352
+ },
353
+ task: () => {
354
+ return this.cliExeca.run(PackageManager.NPM, ["install", "--no-production", "--legacy-peer-deps", verbose && "--verbose"].filter(Boolean), options);
355
+ }
356
+ },
357
+ {
358
+ title: "Add dependencies using npm",
359
+ skip: () => !deps.length,
360
+ task: () => this.cliExeca.run(PackageManager.NPM, ["install", "--save", "--legacy-peer-deps", verbose && "--verbose", ...deps].filter(Boolean), options)
361
+ },
362
+ {
363
+ title: "Add devDependencies using npm",
364
+ skip: () => !devDeps.length,
365
+ task: () => this.cliExeca.run(PackageManager.NPM, ["install", "--save-dev", "--legacy-peer-deps", verbose && "--verbose", ...devDeps].filter(Boolean), options)
366
+ }
367
+ ];
368
+ }
369
+ installWithPnpm({ verbose }) {
370
+ const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);
371
+ const deps = mapPackagesWithInvalidVersion(this.dependencies);
372
+ const options = {
373
+ cwd: this.dir,
374
+ env: {
375
+ ...process.env,
376
+ GH_TOKEN: this.GH_TOKEN
377
+ }
378
+ };
379
+ return [
380
+ {
381
+ title: "Installing dependencies using pnpm",
382
+ skip: () => {
383
+ return !this.reinstall;
384
+ },
385
+ task: () => this.cliExeca.run(PackageManager.PNPM, ["install", "--dev", verbose && "--verbose"].filter(Boolean), options)
386
+ },
387
+ {
388
+ title: "Add dependencies using pnpm",
389
+ skip: () => !deps.length,
390
+ task: () => this.cliExeca.run(PackageManager.PNPM, ["add", "--save-prod", verbose && "--verbose", ...deps].filter(Boolean), options)
391
+ },
392
+ {
393
+ title: "Add devDependencies using pnpm",
394
+ skip: () => !devDeps.length,
395
+ task: () => this.cliExeca.run(PackageManager.PNPM, ["add", "--save-dev", verbose && "--verbose", ...devDeps].filter(Boolean), options)
396
+ }
397
+ ];
398
+ }
399
+ getPackageJson() {
400
+ return getPackageJson(this.configuration);
401
+ }
402
+ };
403
+ __decorate([
404
+ Inject(CliExeca),
405
+ __metadata("design:type", CliExeca)
406
+ ], ProjectPackageJson.prototype, "cliExeca", void 0);
407
+ __decorate([
408
+ Inject(CliFs),
409
+ __metadata("design:type", CliFs)
410
+ ], ProjectPackageJson.prototype, "fs", void 0);
411
+ ProjectPackageJson = __decorate([
412
+ Injectable(),
413
+ __param(0, Configuration()),
414
+ __metadata("design:paramtypes", [Object])
415
+ ], ProjectPackageJson);
416
+ export { ProjectPackageJson };
417
+ //# sourceMappingURL=ProjectPackageJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectPackageJson.js","sourceRoot":"","sources":["../../../src/services/ProjectPackageJson.ts"],"names":[],"mappings":"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","sourcesContent":["import {getValue, setValue} from \"@tsed/core\";\nimport {Configuration, Inject, Injectable} from \"@tsed/di\";\nimport {join} from \"path\";\nimport {EMPTY, throwError} from \"rxjs\";\nimport {catchError} from \"rxjs/operators\";\nimport semver from \"semver\";\nimport {PackageJson} from \"../interfaces/PackageJson\";\nimport {PackageManager, ProjectPreferences} from \"../interfaces/ProjectPreferences\";\nimport {CliExeca} from \"./CliExeca\";\nimport {CliFs} from \"./CliFs\";\nimport {isValidVersion} from \"../utils/isValidVersion\";\nimport {getPackageJson} from \"../utils/getPackageJson\";\n\nexport interface InstallOptions {\n packageManager?: PackageManager;\n\n [key: string]: any;\n}\n\nfunction mapPackagesWithInvalidVersion(deps: any) {\n const toString = (info: [string, string]) => {\n return info[1] === \"latest\" ? info[0] : info.join(\"@\");\n };\n\n return Object.entries(deps)\n .filter(([, version]) => !semver.valid(version as string))\n .map(toString);\n}\n\nfunction sortKeys(obj: any) {\n return Object.entries(obj)\n .sort((k1, k2) => {\n return k1[0] < k2[0] ? -1 : 1;\n })\n .reduce((obj, [key, value]) => {\n return {\n ...obj,\n [key]: value\n };\n }, {});\n}\n\nfunction mapPackagesWithValidVersion(deps: any) {\n return Object.entries(deps).reduce((deps, [key, version]: [string, string]) => {\n if (isValidVersion(version)) {\n return {\n ...deps,\n [key]: version\n };\n }\n\n return deps;\n }, {});\n}\n\nfunction defaultPreferences(pkg?: any): Record<string, any> {\n let packageManager = PackageManager.YARN;\n\n if (getValue(pkg, \"scripts.build\", \"\").includes(\"pnpm \")) {\n packageManager = PackageManager.PNPM;\n } else if (getValue(pkg, \"scripts.build\", \"\").includes(\"npm \")) {\n packageManager = PackageManager.NPM;\n }\n\n return {\n packageManager\n };\n}\n\n@Injectable()\nexport class ProjectPackageJson {\n public rewrite = false;\n public reinstall = false;\n\n @Inject(CliExeca)\n protected cliExeca: CliExeca;\n\n @Inject(CliFs)\n protected fs: CliFs;\n\n private GH_TOKEN: string;\n private raw: PackageJson;\n\n constructor(@Configuration() private configuration: Configuration) {\n this.setRaw({\n name: \"\",\n version: \"1.0.0\",\n description: \"\",\n scripts: {},\n dependencies: {},\n devDependencies: {}\n });\n this.read();\n }\n\n get path() {\n return join(this.dir, \"package.json\");\n }\n\n get dir() {\n return String(this.configuration.project?.rootDir);\n }\n\n set dir(dir: string) {\n this.configuration.project.rootDir = dir;\n\n this.read();\n }\n\n get name() {\n return this.raw.name;\n }\n\n set name(name: string) {\n this.raw.name = name;\n this.rewrite = true;\n }\n\n get version() {\n return this.raw.version;\n }\n\n get description() {\n return this.raw.description;\n }\n\n get scripts() {\n return this.raw.scripts;\n }\n\n get dependencies() {\n return this.raw.dependencies;\n }\n\n get devDependencies() {\n return this.raw.devDependencies;\n }\n\n get allDependencies(): {[key: string]: string} {\n return {\n ...(this.dependencies || {}),\n ...(this.devDependencies || {})\n };\n }\n\n get preferences(): ProjectPreferences {\n return this.raw[this.configuration.name];\n }\n\n toJSON() {\n return this.raw;\n }\n\n read() {\n const pkg = this.getPackageJson();\n\n this.setRaw(pkg);\n return this;\n }\n\n setRaw(pkg: any) {\n const projectPreferences = this.configuration.defaultProjectPreferences;\n const preferences = getValue(pkg, this.configuration.name);\n\n this.raw = {\n ...pkg,\n [this.configuration.name]: {\n ...defaultPreferences(pkg),\n ...(projectPreferences && projectPreferences(pkg)),\n ...preferences\n }\n };\n }\n\n getRunCmd() {\n switch (this.preferences.packageManager) {\n case \"npm\":\n return \"npm run\";\n case \"pnpm\":\n return \"pnpm run\";\n default:\n return \"yarn run\";\n }\n }\n\n addDevDependency(pkg: string, version?: string) {\n this.devDependencies[pkg] = version!;\n this.reinstall = true;\n this.rewrite = true;\n\n return this;\n }\n\n addDevDependencies(modules: {[key: string]: string | undefined}, scope: any = {}) {\n const replacer = (match: any, key: string) => getValue(key, scope);\n Object.entries(modules).forEach(([pkg, version]) => {\n this.addDevDependency(pkg, (version || \"\").replace(/{{([\\w.]+)}}/gi, replacer));\n });\n\n return this;\n }\n\n addDependency(pkg: string, version?: string) {\n this.dependencies[pkg] = version!;\n this.reinstall = true;\n this.rewrite = true;\n\n return this;\n }\n\n addDependencies(modules: {[key: string]: string | undefined}, ctx: any = {}) {\n const replacer = (match: any, key: string) => getValue(key, ctx);\n\n Object.entries(modules).forEach(([pkg, version]) => {\n this.addDependency(pkg, (version || \"\").replace(\"{{tsedVersion}}\", ctx.tsedVersion).replace(/{{([\\w.]+)}}/gi, replacer));\n });\n\n return this;\n }\n\n addScript(task: string, cmd: string) {\n this.scripts[task] = cmd;\n this.rewrite = true;\n\n return this;\n }\n\n addScripts(scripts: {[key: string]: string}) {\n Object.entries(scripts).forEach(([task, cmd]) => {\n this.addScript(task, cmd);\n });\n\n return this;\n }\n\n add(key: string, data: any) {\n this.raw[key] = data;\n this.rewrite = true;\n\n return this;\n }\n\n setPreference(key: keyof ProjectPreferences, value: any) {\n setValue(this.raw, `${this.configuration.name}.${key}`, value);\n this.rewrite = true;\n return;\n }\n\n set(key: string, value: any) {\n this.raw[key] = value;\n\n this.rewrite = true;\n\n if ([\"dependencies\", \"devDependencies\", \"peerDependencies\"].includes(key)) {\n this.reinstall = true;\n }\n }\n\n get(key: string) {\n return this.raw[key];\n }\n\n write() {\n const originalPkg = this.getPackageJson();\n\n this.rewrite = false;\n\n this.raw = {\n ...originalPkg,\n ...this.raw,\n scripts: {\n ...(originalPkg.scripts || {}),\n ...(this.raw.scripts || {})\n },\n dependencies: sortKeys({\n ...originalPkg.dependencies,\n ...mapPackagesWithValidVersion(this.raw.dependencies)\n }),\n devDependencies: sortKeys({\n ...originalPkg.devDependencies,\n ...mapPackagesWithValidVersion(this.raw.devDependencies)\n }),\n readme: undefined,\n _id: undefined\n };\n\n this.fs.writeFileSync(this.path, JSON.stringify(this.raw, null, 2), {encoding: \"utf8\"});\n\n return this;\n }\n\n hasYarn() {\n try {\n this.cliExeca.runSync(PackageManager.YARN, [\"--version\"]);\n\n return true;\n } catch (er) {\n return false;\n }\n }\n\n install(options: InstallOptions = {}) {\n const packageManager = this.getPackageManager(options.packageManager);\n let tasks: {title: string; skip: () => boolean; task: () => any}[];\n switch (packageManager) {\n case \"pnpm\":\n tasks = this.installWithPnpm(options);\n break;\n case \"npm\":\n tasks = this.installWithNpm(options);\n break;\n default:\n tasks = this.installWithYarn(options);\n }\n\n return [\n {\n title: \"Write package.json\",\n enabled: () => this.rewrite,\n task: () => {\n this.write();\n }\n },\n ...tasks,\n {\n title: \"Clean\",\n task: () => {\n this.reinstall = false;\n this.rewrite = false;\n this.read();\n }\n }\n ];\n }\n\n /**\n * Import a module from the project workspace\n * @param mod\n */\n async importModule(mod: string) {\n return this.fs.importModule(mod, this.dir);\n }\n\n public runScript(npmTask: string, ignoreError = false) {\n const options = {\n cwd: this.dir\n };\n const errorPipe = () =>\n catchError((error: any) => {\n if (ignoreError) {\n return EMPTY;\n }\n\n return throwError(error);\n });\n\n return this.cliExeca.run(this.getPackageManager(), [\"run\", npmTask], options).pipe(errorPipe());\n }\n\n getPackageManager(packageManager?: PackageManager): PackageManager {\n if (this.preferences.packageManager) {\n packageManager = this.preferences.packageManager;\n }\n\n packageManager = packageManager || PackageManager.YARN;\n\n if (packageManager === PackageManager.YARN && !this.hasYarn()) {\n packageManager = PackageManager.NPM;\n }\n\n return packageManager;\n }\n\n setGhToken(GH_TOKEN: string) {\n this.GH_TOKEN = GH_TOKEN;\n }\n\n protected installWithYarn({verbose}: any) {\n const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);\n const deps = mapPackagesWithInvalidVersion(this.dependencies);\n const options = {\n cwd: this.dir,\n env: {\n ...process.env,\n GH_TOKEN: this.GH_TOKEN\n }\n };\n\n const errorPipe = () =>\n catchError((error: any) => {\n if (error.stderr.startsWith(\"error Your lockfile needs to be updated\")) {\n return throwError(new Error(\"yarn.lock file is outdated. Run yarn, commit the updated lockfile and try again.\"));\n }\n\n return throwError(error);\n });\n\n return [\n {\n title: \"Installing dependencies using Yarn\",\n skip: () => !this.reinstall,\n task: () =>\n this.cliExeca\n .run(\n PackageManager.YARN,\n [\"install\", \"--production=false\", verbose && \"--verbose\", \"--ignore-engines\"].filter(Boolean),\n options\n )\n .pipe(errorPipe())\n },\n {\n title: \"Add dependencies using Yarn\",\n skip: () => !deps.length,\n task: () =>\n this.cliExeca\n .run(PackageManager.YARN, [\"add\", verbose && \"--verbose\", \"--ignore-engines\", ...deps].filter(Boolean), options)\n .pipe(errorPipe())\n },\n {\n title: \"Add devDependencies using Yarn\",\n skip: () => !devDeps.length,\n task: () =>\n this.cliExeca\n .run(PackageManager.YARN, [\"add\", \"-D\", verbose && \"--verbose\", \"--ignore-engines\", ...devDeps].filter(Boolean), options)\n .pipe(errorPipe())\n }\n ];\n }\n\n protected installWithNpm({verbose}: any) {\n const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);\n const deps = mapPackagesWithInvalidVersion(this.dependencies);\n const options = {\n cwd: this.dir,\n env: {\n ...process.env,\n GH_TOKEN: this.GH_TOKEN\n }\n };\n\n return [\n {\n title: \"Installing dependencies using npm\",\n skip: () => {\n return !this.reinstall;\n },\n task: () => {\n return this.cliExeca.run(\n PackageManager.NPM,\n [\"install\", \"--no-production\", \"--legacy-peer-deps\", verbose && \"--verbose\"].filter(Boolean),\n options\n );\n }\n },\n {\n title: \"Add dependencies using npm\",\n skip: () => !deps.length,\n task: () =>\n this.cliExeca.run(\n PackageManager.NPM,\n [\"install\", \"--save\", \"--legacy-peer-deps\", verbose && \"--verbose\", ...deps].filter(Boolean),\n options\n )\n },\n {\n title: \"Add devDependencies using npm\",\n skip: () => !devDeps.length,\n task: () =>\n this.cliExeca.run(\n PackageManager.NPM,\n [\"install\", \"--save-dev\", \"--legacy-peer-deps\", verbose && \"--verbose\", ...devDeps].filter(Boolean),\n options\n )\n }\n ];\n }\n\n protected installWithPnpm({verbose}: any) {\n const devDeps = mapPackagesWithInvalidVersion(this.devDependencies);\n const deps = mapPackagesWithInvalidVersion(this.dependencies);\n const options = {\n cwd: this.dir,\n env: {\n ...process.env,\n GH_TOKEN: this.GH_TOKEN\n }\n };\n\n return [\n {\n title: \"Installing dependencies using pnpm\",\n skip: () => {\n return !this.reinstall;\n },\n task: () => this.cliExeca.run(PackageManager.PNPM, [\"install\", \"--dev\", verbose && \"--verbose\"].filter(Boolean), options)\n },\n {\n title: \"Add dependencies using pnpm\",\n skip: () => !deps.length,\n task: () => this.cliExeca.run(PackageManager.PNPM, [\"add\", \"--save-prod\", verbose && \"--verbose\", ...deps].filter(Boolean), options)\n },\n {\n title: \"Add devDependencies using pnpm\",\n skip: () => !devDeps.length,\n task: () =>\n this.cliExeca.run(PackageManager.PNPM, [\"add\", \"--save-dev\", verbose && \"--verbose\", ...devDeps].filter(Boolean), options)\n }\n ];\n }\n\n protected getPackageJson() {\n return getPackageJson(this.configuration);\n }\n}\n"]}
@@ -0,0 +1,150 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Configuration, Constant, Inject, Injectable } from "@tsed/di";
3
+ import Consolidate from "consolidate";
4
+ import normalizePath from "normalize-path";
5
+ import { existsSync } from "fs-extra";
6
+ import globby from "globby";
7
+ import { dirname, join, relative } from "path";
8
+ import { Observable } from "rxjs";
9
+ import { CliFs } from "./CliFs.js";
10
+ import "../utils/hbs.js";
11
+ import { isString } from "@tsed/core";
12
+ import { insertImport } from "../utils/renderer/insertImport.js";
13
+ import { insertAfter } from "../utils/renderer/insertAfter.js";
14
+ export class Renderer {
15
+ async render(path, data, options = {}) {
16
+ const { output, templateDir, rootDir } = this.mapOptions(path, options);
17
+ let content = "";
18
+ const file = normalizePath(join(templateDir, path));
19
+ if (path.endsWith(".hbs")) {
20
+ content = await Consolidate.handlebars(file, data);
21
+ }
22
+ else {
23
+ content = await this.fs.readFile(file, { encoding: "utf8" });
24
+ }
25
+ return this.write(content, { output, rootDir });
26
+ }
27
+ async renderAll(paths, data, options = {}) {
28
+ let count = 0;
29
+ const mapOptions = (opts) => {
30
+ if (isString(opts)) {
31
+ return { ...options, path: opts };
32
+ }
33
+ return {
34
+ ...options,
35
+ ...opts
36
+ };
37
+ };
38
+ return new Observable((observer) => {
39
+ observer.next(`[${count}/${paths.length}] Rendering files...`);
40
+ const promises = paths
41
+ .filter(Boolean)
42
+ .map(mapOptions)
43
+ .map(async ({ path, ...opts }) => {
44
+ await this.render(path, data, opts);
45
+ count++;
46
+ observer.next(`[${count}/${paths.length}] Rendering files...`);
47
+ });
48
+ Promise.all(promises)
49
+ .then(() => {
50
+ observer.next(`[${count}/${paths.length}] Rendering files...`);
51
+ observer.complete();
52
+ })
53
+ .catch((err) => {
54
+ observer.error(err);
55
+ });
56
+ });
57
+ }
58
+ async write(content, options) {
59
+ const { output, rootDir = this.rootDir } = options;
60
+ const outputFile = join(...[rootDir, output].filter(Boolean));
61
+ await this.fs.ensureDir(dirname(outputFile));
62
+ return this.fs.writeFile(outputFile, content, { encoding: "utf8" });
63
+ }
64
+ templateExists(path, options = {}) {
65
+ const { templateDir } = this.mapOptions(path, options);
66
+ return existsSync(join(templateDir, path));
67
+ }
68
+ scan(pattern, options = {}) {
69
+ return globby(pattern.map((s) => normalizePath(s)), {
70
+ ...options,
71
+ cwd: this.rootDir
72
+ });
73
+ }
74
+ relativeFrom(path) {
75
+ return relative(dirname(join(this.rootDir, path)), this.rootDir);
76
+ }
77
+ async update(path, actions) {
78
+ path = join(this.rootDir, path);
79
+ if (!this.fs.exists(path)) {
80
+ return;
81
+ }
82
+ const content = actions.reduce((fileContent, action) => {
83
+ switch (action.type) {
84
+ case "import":
85
+ return insertImport(fileContent, action.content);
86
+ case "insert-after":
87
+ return insertAfter(fileContent, action.content, action.pattern);
88
+ default:
89
+ break;
90
+ }
91
+ return fileContent;
92
+ }, await this.fs.readFile(path, { encoding: "utf8" }));
93
+ return this.fs.writeFile(path, content, { encoding: "utf8" });
94
+ }
95
+ mapOptions(path, options) {
96
+ const { templateDir = this.templateDir, rootDir = this.rootDir } = options;
97
+ let { output = path } = options;
98
+ if (options.baseDir) {
99
+ output = normalizePath(join("/", relative(options.baseDir, path)));
100
+ }
101
+ if (options.basename) {
102
+ output = normalizePath(join(dirname(output), options.basename));
103
+ }
104
+ output = output.replace(/\.hbs$/, "");
105
+ return { output, templateDir, rootDir };
106
+ }
107
+ }
108
+ __decorate([
109
+ Configuration(),
110
+ __metadata("design:type", Object)
111
+ ], Renderer.prototype, "configuration", void 0);
112
+ __decorate([
113
+ Constant("templateDir"),
114
+ __metadata("design:type", String)
115
+ ], Renderer.prototype, "templateDir", void 0);
116
+ __decorate([
117
+ Inject(),
118
+ __metadata("design:type", CliFs)
119
+ ], Renderer.prototype, "fs", void 0);
120
+ let RootRendererService = class RootRendererService extends Renderer {
121
+ get rootDir() {
122
+ var _a;
123
+ return (_a = this.configuration.project) === null || _a === void 0 ? void 0 : _a.rootDir;
124
+ }
125
+ };
126
+ RootRendererService = __decorate([
127
+ Injectable()
128
+ ], RootRendererService);
129
+ export { RootRendererService };
130
+ let SrcRendererService = class SrcRendererService extends Renderer {
131
+ get rootDir() {
132
+ var _a, _b;
133
+ return join(...[(_a = this.configuration.project) === null || _a === void 0 ? void 0 : _a.rootDir, (_b = this.configuration.project) === null || _b === void 0 ? void 0 : _b.srcDir].filter(Boolean));
134
+ }
135
+ };
136
+ SrcRendererService = __decorate([
137
+ Injectable()
138
+ ], SrcRendererService);
139
+ export { SrcRendererService };
140
+ let ScriptsRendererService = class ScriptsRendererService extends Renderer {
141
+ get rootDir() {
142
+ var _a, _b;
143
+ return join(...[(_a = this.configuration.project) === null || _a === void 0 ? void 0 : _a.rootDir, (_b = this.configuration.project) === null || _b === void 0 ? void 0 : _b.scriptsDir].filter(Boolean));
144
+ }
145
+ };
146
+ ScriptsRendererService = __decorate([
147
+ Injectable()
148
+ ], ScriptsRendererService);
149
+ export { ScriptsRendererService };
150
+ //# sourceMappingURL=Renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Renderer.js","sourceRoot":"","sources":["../../../src/services/Renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import {Configuration, Constant, Inject, Injectable} from \"@tsed/di\";\nimport Consolidate from \"consolidate\";\nimport normalizePath from \"normalize-path\";\nimport {existsSync} from \"fs-extra\";\nimport globby from \"globby\";\nimport {dirname, join, relative} from \"path\";\nimport {Observable} from \"rxjs\";\nimport {CliFs} from \"./CliFs\";\nimport \"../utils/hbs\";\nimport {isString} from \"@tsed/core\";\nimport {insertImport} from \"../utils/renderer/insertImport\";\nimport {insertAfter} from \"../utils/renderer/insertAfter\";\n\nexport interface RenderOptions {\n path: string;\n templateDir: string;\n rootDir: string;\n output: string;\n baseDir: string;\n basename: string;\n}\n\nexport abstract class Renderer {\n @Configuration()\n protected configuration: Configuration;\n\n @Constant(\"templateDir\")\n templateDir: string;\n\n @Inject()\n fs: CliFs;\n\n abstract get rootDir(): string;\n\n async render(path: string, data: any, options: Partial<RenderOptions> = {}) {\n const {output, templateDir, rootDir} = this.mapOptions(path, options);\n let content = \"\";\n\n const file = normalizePath(join(templateDir, path));\n\n if (path.endsWith(\".hbs\")) {\n content = await Consolidate.handlebars(file, data);\n } else {\n content = await this.fs.readFile(file, {encoding: \"utf8\"});\n }\n\n return this.write(content, {output, rootDir});\n }\n\n async renderAll(paths: (string | RenderOptions)[], data: any, options: Partial<RenderOptions> = {}) {\n let count = 0;\n\n const mapOptions = (opts: string | RenderOptions): Partial<RenderOptions> & {path: string} => {\n if (isString(opts)) {\n return {...options, path: opts};\n }\n\n return {\n ...options,\n ...opts\n };\n };\n\n return new Observable((observer) => {\n observer.next(`[${count}/${paths.length}] Rendering files...`);\n\n const promises = paths\n .filter(Boolean)\n .map(mapOptions)\n .map(async ({path, ...opts}) => {\n await this.render(path, data, opts);\n\n count++;\n observer.next(`[${count}/${paths.length}] Rendering files...`);\n });\n\n Promise.all(promises)\n .then(() => {\n observer.next(`[${count}/${paths.length}] Rendering files...`);\n observer.complete();\n })\n .catch((err) => {\n observer.error(err);\n });\n });\n }\n\n async write(content: string, options: any) {\n const {output, rootDir = this.rootDir} = options;\n const outputFile = join(...[rootDir, output].filter(Boolean));\n\n await this.fs.ensureDir(dirname(outputFile));\n\n return this.fs.writeFile(outputFile, content, {encoding: \"utf8\"});\n }\n\n templateExists(path: string, options: Partial<RenderOptions> = {}) {\n const {templateDir} = this.mapOptions(path, options);\n\n return existsSync(join(templateDir, path));\n }\n\n scan(pattern: string[], options: any = {}) {\n return globby(\n pattern.map((s: string) => normalizePath(s)),\n {\n ...options,\n cwd: this.rootDir\n }\n );\n }\n\n relativeFrom(path: string) {\n return relative(dirname(join(this.rootDir, path)), this.rootDir);\n }\n\n async update(path: string, actions: {type?: string; content: string; pattern?: RegExp}[]) {\n path = join(this.rootDir, path);\n if (!this.fs.exists(path)) {\n return;\n }\n\n const content: string = actions.reduce((fileContent, action) => {\n switch (action.type) {\n case \"import\":\n return insertImport(fileContent, action.content);\n case \"insert-after\":\n return insertAfter(fileContent, action.content, action.pattern!);\n default:\n break;\n }\n\n return fileContent;\n }, await this.fs.readFile(path, {encoding: \"utf8\"}));\n\n return this.fs.writeFile(path, content, {encoding: \"utf8\"});\n }\n\n protected mapOptions(path: string, options: Partial<RenderOptions>) {\n const {templateDir = this.templateDir, rootDir = this.rootDir} = options;\n let {output = path} = options;\n\n if (options.baseDir) {\n output = normalizePath(join(\"/\", relative(options.baseDir, path)));\n }\n\n if (options.basename) {\n output = normalizePath(join(dirname(output), options.basename));\n }\n\n output = output.replace(/\\.hbs$/, \"\");\n\n return {output, templateDir, rootDir};\n }\n}\n\n@Injectable()\nexport class RootRendererService extends Renderer {\n get rootDir() {\n return this.configuration.project?.rootDir as string;\n }\n}\n\n@Injectable()\nexport class SrcRendererService extends Renderer {\n get rootDir() {\n return join(...([this.configuration.project?.rootDir, this.configuration.project?.srcDir].filter(Boolean) as string[]));\n }\n}\n\n@Injectable()\nexport class ScriptsRendererService extends Renderer {\n get rootDir() {\n return join(...([this.configuration.project?.rootDir, this.configuration.project?.scriptsDir].filter(Boolean) as string[]));\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ export * from "./CliConfiguration.js";
2
+ export * from "./CliService.js";
3
+ export * from "./CliPackageJson.js";
4
+ export * from "./CliHttpClient.js";
5
+ export * from "./CliPlugins.js";
6
+ export * from "./CliRunScript.js";
7
+ export * from "./CliFs.js";
8
+ export * from "./ProjectPackageJson.js";
9
+ export * from "./Renderer.js";
10
+ export * from "./CliExeca.js";
11
+ export * from "./CliYaml.js";
12
+ export * from "./CliDockerComposeYaml.js";
13
+ export * from "./NpmRegistryClient.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC","sourcesContent":["export * from \"./CliConfiguration\";\nexport * from \"./CliService\";\nexport * from \"./CliPackageJson\";\nexport * from \"./CliHttpClient\";\nexport * from \"./CliPlugins\";\nexport * from \"./CliRunScript\";\nexport * from \"./CliFs\";\nexport * from \"./ProjectPackageJson\";\nexport * from \"./Renderer\";\nexport * from \"./CliExeca\";\nexport * from \"./CliYaml\";\nexport * from \"./CliDockerComposeYaml\";\nexport * from \"./NpmRegistryClient\";\n"]}