@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,271 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const core_1 = require("@tsed/core");
6
+ const di_1 = require("@tsed/di");
7
+ const commander_1 = require("commander");
8
+ const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
9
+ const CommandStoreKeys_1 = require("../domains/CommandStoreKeys");
10
+ const CommandRegistry_1 = require("../registries/CommandRegistry");
11
+ const createTasksRunner_1 = require("../utils/createTasksRunner");
12
+ const getCommandMetadata_1 = require("../utils/getCommandMetadata");
13
+ const mapCommanderArgs_1 = require("../utils/mapCommanderArgs");
14
+ const mapCommanderOptions_1 = require("../utils/mapCommanderOptions");
15
+ const parseOption_1 = require("../utils/parseOption");
16
+ const CliHooks_1 = require("./CliHooks");
17
+ const ProjectPackageJson_1 = require("./ProjectPackageJson");
18
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
19
+ // @ts-ignore
20
+ const inquirer_autocomplete_prompt_1 = tslib_1.__importDefault(require("inquirer-autocomplete-prompt"));
21
+ inquirer_1.default.registerPrompt("autocomplete", inquirer_autocomplete_prompt_1.default);
22
+ let CliService = class CliService {
23
+ constructor() {
24
+ this.program = new commander_1.Command();
25
+ this.reinstallAfterRun = false;
26
+ this.commands = new Map();
27
+ }
28
+ $onInit() {
29
+ if (this.injector.logger.level !== "off") {
30
+ this.injector.logger.appenders
31
+ .set("stdout", {
32
+ type: "stdout",
33
+ layout: {
34
+ type: "pattern",
35
+ pattern: "[%d{hh:mm:ss}] %m"
36
+ },
37
+ levels: ["info", "debug"]
38
+ })
39
+ .set("stderr", {
40
+ type: "stderr",
41
+ layout: {
42
+ type: "pattern",
43
+ pattern: "[%d{hh:mm:ss}][%p] %m"
44
+ },
45
+ levels: ["trace", "fatal", "error", "warn"]
46
+ });
47
+ }
48
+ }
49
+ /**
50
+ * Parse process.argv and runLifecycle action
51
+ * @param argv
52
+ */
53
+ async parseArgs(argv) {
54
+ const { program } = this;
55
+ program.version(this.pkg.version);
56
+ this.load();
57
+ await program.parseAsync(argv);
58
+ }
59
+ /**
60
+ * Run lifecycle
61
+ * @param cmdName
62
+ * @param data
63
+ */
64
+ async runLifecycle(cmdName, data = {}) {
65
+ data = await this.beforePrompt(cmdName, data);
66
+ data = await this.prompt(cmdName, data);
67
+ try {
68
+ await this.exec(cmdName, data);
69
+ }
70
+ catch (er) {
71
+ await this.injector.emit("$onFinish", er);
72
+ await this.injector.destroy();
73
+ throw er;
74
+ }
75
+ await this.injector.emit("$onFinish");
76
+ await this.injector.destroy();
77
+ }
78
+ async exec(cmdName, ctx) {
79
+ const initialTasks = await this.getTasks(cmdName, ctx);
80
+ if (initialTasks.length) {
81
+ const tasks = [
82
+ ...initialTasks,
83
+ {
84
+ title: "Install dependencies",
85
+ enabled: () => this.reinstallAfterRun && (this.projectPkg.rewrite || this.projectPkg.reinstall),
86
+ task: (0, createTasksRunner_1.createSubTasks)(() => this.projectPkg.install(ctx), { ...ctx, concurrent: false })
87
+ },
88
+ ...(await this.getPostInstallTasks(cmdName, ctx))
89
+ ];
90
+ return (0, createTasksRunner_1.createTasksRunner)(tasks, this.mapContext(cmdName, ctx));
91
+ }
92
+ }
93
+ /**
94
+ * Run prompt for a given command
95
+ * @param cmdName
96
+ * @param ctx Initial data
97
+ */
98
+ async beforePrompt(cmdName, ctx = {}) {
99
+ const provider = this.commands.get(cmdName);
100
+ const instance = this.injector.get(provider.useClass);
101
+ const verbose = ctx.verbose;
102
+ if (instance.$beforePrompt) {
103
+ ctx = await instance.$beforePrompt(JSON.parse(JSON.stringify(ctx)));
104
+ ctx.verbose = verbose;
105
+ }
106
+ return ctx;
107
+ }
108
+ /**
109
+ * Run prompt for a given command
110
+ * @param cmdName
111
+ * @param ctx Initial data
112
+ */
113
+ async prompt(cmdName, ctx = {}) {
114
+ const provider = this.commands.get(cmdName);
115
+ const instance = this.injector.get(provider.useClass);
116
+ if (instance.$prompt) {
117
+ const questions = [
118
+ ...(await instance.$prompt(ctx)),
119
+ ...(await this.hooks.emit(CommandStoreKeys_1.CommandStoreKeys.PROMPT_HOOKS, cmdName, ctx))
120
+ ];
121
+ if (questions.length) {
122
+ ctx = {
123
+ ...ctx,
124
+ ...(await inquirer_1.default.prompt(questions))
125
+ };
126
+ }
127
+ }
128
+ return ctx;
129
+ }
130
+ /**
131
+ * Run lifecycle
132
+ * @param cmdName
133
+ * @param ctx
134
+ */
135
+ async getTasks(cmdName, ctx) {
136
+ const provider = this.commands.get(cmdName);
137
+ const instance = this.injector.get(provider.token);
138
+ ctx = this.mapContext(cmdName, ctx);
139
+ if (instance.$beforeExec) {
140
+ await instance.$beforeExec(ctx);
141
+ }
142
+ return [...(await instance.$exec(ctx)), ...(await this.hooks.emit(CommandStoreKeys_1.CommandStoreKeys.EXEC_HOOKS, cmdName, ctx))];
143
+ }
144
+ async getPostInstallTasks(cmdName, ctx) {
145
+ const provider = this.commands.get(cmdName);
146
+ const instance = this.injector.get(provider.useClass);
147
+ ctx = this.mapContext(cmdName, ctx);
148
+ return [
149
+ ...(instance.$postInstall ? await instance.$postInstall(ctx) : []),
150
+ ...(await this.hooks.emit(CommandStoreKeys_1.CommandStoreKeys.POST_INSTALL_HOOKS, cmdName, ctx))
151
+ ];
152
+ }
153
+ createCommand(metadata) {
154
+ const { args, name, options, description, alias, allowUnknownOption } = metadata;
155
+ if (this.commands.has(name)) {
156
+ return this.commands.get(name).command;
157
+ }
158
+ let cmd = this.program.command(name);
159
+ const onAction = (...commanderArgs) => {
160
+ const [, ...rawArgs] = cmd.args;
161
+ const data = {
162
+ verbose: !!this.program.opts().verbose,
163
+ ...(0, mapCommanderArgs_1.mapCommanderArgs)(args, commanderArgs),
164
+ ...(0, mapCommanderOptions_1.mapCommanderOptions)(this.program.commands),
165
+ rawArgs
166
+ };
167
+ return this.runLifecycle(name, data);
168
+ };
169
+ if (alias) {
170
+ cmd = cmd.alias(alias);
171
+ }
172
+ cmd = cmd.description(description);
173
+ cmd = this.buildArguments(cmd, args);
174
+ cmd = cmd.action(onAction);
175
+ if (options) {
176
+ cmd = this.buildOption(cmd, options, !!allowUnknownOption);
177
+ }
178
+ return cmd;
179
+ }
180
+ load() {
181
+ this.injector.getProviders(CommandRegistry_1.PROVIDER_TYPE_COMMAND).forEach((provider) => this.build(provider));
182
+ }
183
+ mapContext(cmdName, ctx) {
184
+ const provider = this.commands.get(cmdName);
185
+ const instance = this.injector.get(provider.useClass);
186
+ const verbose = ctx.verbose;
187
+ if (instance.$mapContext) {
188
+ ctx = instance.$mapContext(JSON.parse(JSON.stringify(ctx)));
189
+ ctx.verbose = verbose;
190
+ }
191
+ if (ctx.verbose) {
192
+ this.injector.logger.level = "debug";
193
+ }
194
+ else {
195
+ this.injector.logger.level = "info";
196
+ }
197
+ return ctx;
198
+ }
199
+ /**
200
+ * Build command and sub-commands
201
+ * @param provider
202
+ */
203
+ build(provider) {
204
+ const metadata = (0, getCommandMetadata_1.getCommandMetadata)(provider.useClass);
205
+ if (metadata.name) {
206
+ if (this.commands.has(metadata.name)) {
207
+ throw Error(`The ${metadata.name} command is already registered. Change your command name used by the class ${(0, core_1.classOf)(provider.useClass)}`);
208
+ }
209
+ provider.command = this.createCommand(metadata);
210
+ this.commands.set(metadata.name, provider);
211
+ }
212
+ }
213
+ /**
214
+ * Build sub-command options
215
+ * @param subCommand
216
+ * @param options
217
+ * @param allowUnknownOptions
218
+ */
219
+ buildOption(subCommand, options, allowUnknownOptions) {
220
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
221
+ Object.entries(options).reduce((subCommand, [flags, { description, required, customParser, defaultValue, ...options }]) => {
222
+ const fn = (v) => (0, parseOption_1.parseOption)(v, options);
223
+ if (options.type === Boolean) {
224
+ defaultValue = false;
225
+ }
226
+ return required
227
+ ? subCommand.requiredOption(flags, description, fn, defaultValue)
228
+ : subCommand.option(flags, description, fn, defaultValue);
229
+ }, subCommand);
230
+ subCommand.option("-r, --root-dir <path>", "Project root directory");
231
+ subCommand.option("--verbose", "Verbose mode", () => true);
232
+ if (allowUnknownOptions) {
233
+ subCommand.allowUnknownOption(true);
234
+ }
235
+ return subCommand;
236
+ }
237
+ buildArguments(cmd, args) {
238
+ return Object.entries(args).reduce((cmd, [key, { description, required, defaultValue }]) => {
239
+ const argument = new commander_1.Argument(required ? `<${key}>` : `[${key}]`, description);
240
+ if (defaultValue !== undefined) {
241
+ argument.default(defaultValue);
242
+ }
243
+ return cmd.addArgument(argument);
244
+ }, cmd);
245
+ }
246
+ };
247
+ tslib_1.__decorate([
248
+ (0, di_1.Constant)("project.reinstallAfterRun", false),
249
+ tslib_1.__metadata("design:type", Object)
250
+ ], CliService.prototype, "reinstallAfterRun", void 0);
251
+ tslib_1.__decorate([
252
+ (0, di_1.Constant)("pkg", { version: "1.0.0" }),
253
+ tslib_1.__metadata("design:type", Object)
254
+ ], CliService.prototype, "pkg", void 0);
255
+ tslib_1.__decorate([
256
+ (0, di_1.Inject)(),
257
+ tslib_1.__metadata("design:type", di_1.InjectorService)
258
+ ], CliService.prototype, "injector", void 0);
259
+ tslib_1.__decorate([
260
+ (0, di_1.Inject)(),
261
+ tslib_1.__metadata("design:type", CliHooks_1.CliHooks)
262
+ ], CliService.prototype, "hooks", void 0);
263
+ tslib_1.__decorate([
264
+ (0, di_1.Inject)(),
265
+ tslib_1.__metadata("design:type", ProjectPackageJson_1.ProjectPackageJson)
266
+ ], CliService.prototype, "projectPkg", void 0);
267
+ CliService = tslib_1.__decorate([
268
+ (0, di_1.Injectable)()
269
+ ], CliService);
270
+ exports.CliService = CliService;
271
+ //# sourceMappingURL=CliService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CliService.js","sourceRoot":"","sources":["../../../src/services/CliService.ts"],"names":[],"mappings":"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","sourcesContent":["import {classOf} from \"@tsed/core\";\nimport {Constant, Inject, Injectable, InjectorService, Provider} from \"@tsed/di\";\nimport {Argument, Command} from \"commander\";\nimport Inquirer from \"inquirer\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {CommandProvider} from \"../interfaces/CommandProvider\";\nimport {CommandMetadata} from \"../interfaces/CommandMetadata\";\nimport {CommandArg, CommandOptions} from \"../interfaces/CommandParameters\";\nimport {PROVIDER_TYPE_COMMAND} from \"../registries/CommandRegistry\";\nimport {createSubTasks, createTasksRunner} from \"../utils/createTasksRunner\";\nimport {getCommandMetadata} from \"../utils/getCommandMetadata\";\nimport {mapCommanderArgs} from \"../utils/mapCommanderArgs\";\nimport {mapCommanderOptions} from \"../utils/mapCommanderOptions\";\nimport {parseOption} from \"../utils/parseOption\";\nimport {CliHooks} from \"./CliHooks\";\nimport {ProjectPackageJson} from \"./ProjectPackageJson\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport inquirer_autocomplete_prompt from \"inquirer-autocomplete-prompt\";\n\nInquirer.registerPrompt(\"autocomplete\", inquirer_autocomplete_prompt);\n\n@Injectable()\nexport class CliService {\n readonly program = new Command();\n\n @Constant(\"project.reinstallAfterRun\", false)\n reinstallAfterRun = false;\n\n @Constant(\"pkg\", {version: \"1.0.0\"})\n protected pkg: any;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected hooks: CliHooks;\n\n @Inject()\n protected projectPkg: ProjectPackageJson;\n\n private commands = new Map();\n\n $onInit() {\n if (this.injector.logger.level !== \"off\") {\n this.injector.logger.appenders\n .set(\"stdout\", {\n type: \"stdout\",\n layout: {\n type: \"pattern\",\n pattern: \"[%d{hh:mm:ss}] %m\"\n },\n levels: [\"info\", \"debug\"]\n })\n .set(\"stderr\", {\n type: \"stderr\",\n layout: {\n type: \"pattern\",\n pattern: \"[%d{hh:mm:ss}][%p] %m\"\n },\n levels: [\"trace\", \"fatal\", \"error\", \"warn\"]\n });\n }\n }\n\n /**\n * Parse process.argv and runLifecycle action\n * @param argv\n */\n async parseArgs(argv: string[]): Promise<void> {\n const {program} = this;\n\n program.version(this.pkg.version);\n\n this.load();\n\n await program.parseAsync(argv);\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param data\n */\n public async runLifecycle(cmdName: string, data: any = {}) {\n data = await this.beforePrompt(cmdName, data);\n data = await this.prompt(cmdName, data);\n\n try {\n await this.exec(cmdName, data);\n } catch (er) {\n await this.injector.emit(\"$onFinish\", er);\n await this.injector.destroy();\n throw er;\n }\n\n await this.injector.emit(\"$onFinish\");\n await this.injector.destroy();\n }\n\n public async exec(cmdName: string, ctx: any) {\n const initialTasks = await this.getTasks(cmdName, ctx);\n\n if (initialTasks.length) {\n const tasks = [\n ...initialTasks,\n {\n title: \"Install dependencies\",\n enabled: () => this.reinstallAfterRun && (this.projectPkg.rewrite || this.projectPkg.reinstall),\n task: createSubTasks(() => this.projectPkg.install(ctx), {...ctx, concurrent: false})\n },\n ...(await this.getPostInstallTasks(cmdName, ctx))\n ];\n\n return createTasksRunner(tasks, this.mapContext(cmdName, ctx));\n }\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async beforePrompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$beforePrompt) {\n ctx = await instance.$beforePrompt(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n return ctx;\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async prompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n if (instance.$prompt) {\n const questions = [\n ...((await instance.$prompt(ctx)) as any[]),\n ...(await this.hooks.emit(CommandStoreKeys.PROMPT_HOOKS, cmdName, ctx))\n ];\n\n if (questions.length) {\n ctx = {\n ...ctx,\n ...((await Inquirer.prompt(questions)) as any)\n };\n }\n }\n\n return ctx;\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param ctx\n */\n public async getTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.token)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n if (instance.$beforeExec) {\n await instance.$beforeExec(ctx);\n }\n\n return [...(await instance.$exec(ctx)), ...(await this.hooks.emit(CommandStoreKeys.EXEC_HOOKS, cmdName, ctx))];\n }\n\n public async getPostInstallTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n return [\n ...(instance.$postInstall ? await instance.$postInstall(ctx) : []),\n ...(await this.hooks.emit(CommandStoreKeys.POST_INSTALL_HOOKS, cmdName, ctx))\n ];\n }\n\n public createCommand(metadata: CommandMetadata) {\n const {args, name, options, description, alias, allowUnknownOption} = metadata;\n\n if (this.commands.has(name)) {\n return this.commands.get(name).command;\n }\n\n let cmd = this.program.command(name);\n\n const onAction = (...commanderArgs: any[]) => {\n const [, ...rawArgs] = cmd.args;\n const data = {\n verbose: !!this.program.opts().verbose,\n ...mapCommanderArgs(args, commanderArgs),\n ...mapCommanderOptions(this.program.commands),\n rawArgs\n };\n\n return this.runLifecycle(name, data);\n };\n\n if (alias) {\n cmd = cmd.alias(alias);\n }\n\n cmd = cmd.description(description);\n cmd = this.buildArguments(cmd, args);\n\n cmd = cmd.action(onAction);\n\n if (options) {\n cmd = this.buildOption(cmd, options, !!allowUnknownOption);\n }\n\n return cmd;\n }\n\n private load() {\n this.injector.getProviders(PROVIDER_TYPE_COMMAND).forEach((provider) => this.build(provider));\n }\n\n private mapContext(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$mapContext) {\n ctx = instance.$mapContext(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n\n if (ctx.verbose) {\n this.injector.logger.level = \"debug\";\n } else {\n this.injector.logger.level = \"info\";\n }\n\n return ctx;\n }\n\n /**\n * Build command and sub-commands\n * @param provider\n */\n private build(provider: Provider<any>) {\n const metadata = getCommandMetadata(provider.useClass);\n\n if (metadata.name) {\n if (this.commands.has(metadata.name)) {\n throw Error(\n `The ${metadata.name} command is already registered. Change your command name used by the class ${classOf(provider.useClass)}`\n );\n }\n\n provider.command = this.createCommand(metadata);\n\n this.commands.set(metadata.name, provider);\n }\n }\n\n /**\n * Build sub-command options\n * @param subCommand\n * @param options\n * @param allowUnknownOptions\n */\n private buildOption(subCommand: Command, options: {[key: string]: CommandOptions}, allowUnknownOptions: boolean) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(options).reduce((subCommand, [flags, {description, required, customParser, defaultValue, ...options}]) => {\n const fn = (v: any) => parseOption(v, options);\n\n if (options.type === Boolean) {\n defaultValue = false;\n }\n\n return required\n ? subCommand.requiredOption(flags, description, fn, defaultValue)\n : subCommand.option(flags, description, fn, defaultValue);\n }, subCommand);\n\n subCommand.option(\"-r, --root-dir <path>\", \"Project root directory\");\n subCommand.option(\"--verbose\", \"Verbose mode\", () => true);\n\n if (allowUnknownOptions) {\n subCommand.allowUnknownOption(true);\n }\n\n return subCommand;\n }\n\n private buildArguments(cmd: Command, args: Record<string, CommandArg>) {\n return Object.entries(args).reduce((cmd, [key, {description, required, defaultValue}]) => {\n const argument = new Argument(required ? `<${key}>` : `[${key}]`, description);\n\n if (defaultValue !== undefined) {\n argument.default(defaultValue);\n }\n\n return cmd.addArgument(argument);\n }, cmd);\n }\n}\n"]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliYaml = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const di_1 = require("@tsed/di");
6
+ const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
7
+ const path_1 = require("path");
8
+ const CliFs_1 = require("./CliFs");
9
+ const ProjectPackageJson_1 = require("./ProjectPackageJson");
10
+ let CliYaml = class CliYaml {
11
+ async read(path) {
12
+ const file = !this.fs.exists(path) ? this.fs.findUpFile(this.projectPackageJson.dir, path) : path;
13
+ if (file) {
14
+ const content = await this.fs.readFile(file, { encoding: "utf8" });
15
+ return js_yaml_1.default.load(content);
16
+ }
17
+ return {};
18
+ }
19
+ async write(path, obj) {
20
+ const content = js_yaml_1.default.dump(obj);
21
+ const file = this.fs.findUpFile(this.projectPackageJson.dir, path) || (0, path_1.join)(this.projectPackageJson.dir, path);
22
+ return this.fs.writeFile(file, content, { encoding: "utf8" });
23
+ }
24
+ };
25
+ tslib_1.__decorate([
26
+ (0, di_1.Inject)(),
27
+ tslib_1.__metadata("design:type", ProjectPackageJson_1.ProjectPackageJson)
28
+ ], CliYaml.prototype, "projectPackageJson", void 0);
29
+ tslib_1.__decorate([
30
+ (0, di_1.Inject)(),
31
+ tslib_1.__metadata("design:type", CliFs_1.CliFs)
32
+ ], CliYaml.prototype, "fs", void 0);
33
+ CliYaml = tslib_1.__decorate([
34
+ (0, di_1.Injectable)()
35
+ ], CliYaml);
36
+ exports.CliYaml = CliYaml;
37
+ //# sourceMappingURL=CliYaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CliYaml.js","sourceRoot":"","sources":["../../../src/services/CliYaml.ts"],"names":[],"mappings":";;;;AAAA,iCAA4C;AAC5C,8DAA6B;AAC7B,+BAA0B;AAC1B,mCAA8B;AAC9B,6DAAwD;AAGxD,IAAa,OAAO,GAApB,MAAa,OAAO;IAOlB,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAElG,IAAI,IAAI,EAAE;YACR,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;YAEjE,OAAO,iBAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC7B;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,GAAQ;QAChC,MAAM,OAAO,GAAG,iBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAA,WAAI,EAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE9G,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;IAC9D,CAAC;CACF,CAAA;AAxBC;IADC,IAAA,WAAM,GAAE;sCACqB,uCAAkB;mDAAC;AAGjD;IADC,IAAA,WAAM,GAAE;sCACK,aAAK;mCAAC;AALT,OAAO;IADnB,IAAA,eAAU,GAAE;GACA,OAAO,CA0BnB;AA1BY,0BAAO","sourcesContent":["import {Inject, Injectable} from \"@tsed/di\";\nimport JsYaml from \"js-yaml\";\nimport {join} from \"path\";\nimport {CliFs} from \"./CliFs\";\nimport {ProjectPackageJson} from \"./ProjectPackageJson\";\n\n@Injectable()\nexport class CliYaml {\n @Inject()\n protected projectPackageJson: ProjectPackageJson;\n\n @Inject()\n protected fs: CliFs;\n\n async read(path: string) {\n const file = !this.fs.exists(path) ? this.fs.findUpFile(this.projectPackageJson.dir, path) : path;\n\n if (file) {\n const content = await this.fs.readFile(file, {encoding: \"utf8\"});\n\n return JsYaml.load(content);\n }\n\n return {};\n }\n\n async write(path: string, obj: any) {\n const content = JsYaml.dump(obj);\n\n const file = this.fs.findUpFile(this.projectPackageJson.dir, path) || join(this.projectPackageJson.dir, path);\n\n return this.fs.writeFile(file, content, {encoding: \"utf8\"});\n }\n}\n"]}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var NpmRegistryClient_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.NpmRegistryClient = exports.SCOPE_SEPARATOR = exports.addSuffix = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const di_1 = require("@tsed/di");
7
+ const url_1 = tslib_1.__importDefault(require("url"));
8
+ const CliHttpClient_1 = require("./CliHttpClient");
9
+ const registry_url_1 = tslib_1.__importDefault(require("registry-url"));
10
+ const HOST = (0, registry_url_1.default)();
11
+ const REGEX_REGISTRY_ENFORCED_HTTPS = /^https?:\/\/([^\/]+\.)?(yarnpkg\.com|npmjs\.(org|com))(\/|$)/;
12
+ const REGEX_REGISTRY_PREFIX = /^(https?:)?\/\//i;
13
+ function addSuffix(pattern, suffix) {
14
+ if (!pattern.endsWith(suffix)) {
15
+ return pattern + suffix;
16
+ }
17
+ return pattern;
18
+ }
19
+ exports.addSuffix = addSuffix;
20
+ exports.SCOPE_SEPARATOR = "%2f";
21
+ let NpmRegistryClient = NpmRegistryClient_1 = class NpmRegistryClient {
22
+ static escapeName(name) {
23
+ // scoped packages contain slashes and the npm registry expects them to be escaped
24
+ return name.replace("/", exports.SCOPE_SEPARATOR);
25
+ }
26
+ async request(pathname, opts = {}) {
27
+ const registry = opts.registry || HOST;
28
+ const requestUrl = this.getRequestUrl(registry, pathname);
29
+ const headers = {
30
+ Accept: opts.unfiltered ? "application/json" : "application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*",
31
+ ...opts.headers
32
+ };
33
+ try {
34
+ return await this.httpClient.get(requestUrl, {
35
+ ...opts,
36
+ headers
37
+ });
38
+ }
39
+ catch (error) {
40
+ if (opts.retry) {
41
+ await new Promise((resolve) => setTimeout(resolve, 200));
42
+ opts.retry -= 1;
43
+ opts.unfiltered = true;
44
+ return this.request(NpmRegistryClient_1.escapeName(pathname), opts);
45
+ }
46
+ throw error;
47
+ }
48
+ }
49
+ getRequestUrl(registry, pathname) {
50
+ let resolved = pathname;
51
+ if (!REGEX_REGISTRY_PREFIX.test(pathname)) {
52
+ resolved = url_1.default.resolve(addSuffix(registry, "/"), pathname);
53
+ }
54
+ if (REGEX_REGISTRY_ENFORCED_HTTPS.test(resolved)) {
55
+ resolved = resolved.replace(/^http:\/\//, "https://");
56
+ }
57
+ return resolved;
58
+ }
59
+ /**
60
+ * Search a module on npm registry
61
+ * @param text
62
+ * @param options
63
+ */
64
+ async search(text, options = {}) {
65
+ const { objects: result } = await this.request(`-/v1/search`, {
66
+ headers: {
67
+ "Accept-Encoding": "gzip"
68
+ },
69
+ qs: {
70
+ text,
71
+ size: 100,
72
+ from: 0,
73
+ quality: 0.65,
74
+ popularity: 0.98,
75
+ maintenance: 0.5,
76
+ ...options
77
+ }
78
+ });
79
+ return result;
80
+ }
81
+ async info(packageName, retry = 0) {
82
+ try {
83
+ return await this.request(packageName, {
84
+ headers: {
85
+ "Accept-Encoding": "gzip"
86
+ },
87
+ unfiltered: false,
88
+ retry
89
+ });
90
+ }
91
+ catch (er) {
92
+ return retry == 0 ? this.fallback(packageName) : null;
93
+ }
94
+ }
95
+ async fallback(packageName) {
96
+ const [{ package: pkg }] = await this.search(packageName);
97
+ return {
98
+ ...pkg,
99
+ "dist-tags": {
100
+ latest: pkg.version
101
+ },
102
+ versions: {
103
+ [pkg.version]: {
104
+ name: packageName,
105
+ version: pkg.version,
106
+ dependencies: {},
107
+ devDependencies: {}
108
+ }
109
+ }
110
+ };
111
+ }
112
+ };
113
+ tslib_1.__decorate([
114
+ (0, di_1.Inject)(CliHttpClient_1.CliHttpClient),
115
+ tslib_1.__metadata("design:type", CliHttpClient_1.CliHttpClient)
116
+ ], NpmRegistryClient.prototype, "httpClient", void 0);
117
+ NpmRegistryClient = NpmRegistryClient_1 = tslib_1.__decorate([
118
+ (0, di_1.Injectable)()
119
+ ], NpmRegistryClient);
120
+ exports.NpmRegistryClient = NpmRegistryClient;
121
+ //# sourceMappingURL=NpmRegistryClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NpmRegistryClient.js","sourceRoot":"","sources":["../../../src/services/NpmRegistryClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {Inject, Injectable} from \"@tsed/di\";\nimport url from \"url\";\nimport {PackageInfo} from \"../interfaces/PackageJson\";\nimport {CliHttpClient} from \"./CliHttpClient\";\nimport registry_url from \"registry-url\";\n\nconst HOST = registry_url();\nconst REGEX_REGISTRY_ENFORCED_HTTPS = /^https?:\\/\\/([^\\/]+\\.)?(yarnpkg\\.com|npmjs\\.(org|com))(\\/|$)/;\nconst REGEX_REGISTRY_PREFIX = /^(https?:)?\\/\\//i;\n\nexport function addSuffix(pattern: string, suffix: string): string {\n if (!pattern.endsWith(suffix)) {\n return pattern + suffix;\n }\n\n return pattern;\n}\n\nexport const SCOPE_SEPARATOR = \"%2f\";\n\n@Injectable()\nexport class NpmRegistryClient {\n @Inject(CliHttpClient)\n private httpClient: CliHttpClient;\n\n static escapeName(name: string): string {\n // scoped packages contain slashes and the npm registry expects them to be escaped\n return name.replace(\"/\", SCOPE_SEPARATOR);\n }\n\n async request(pathname: string, opts: any = {}): Promise<any> {\n const registry = opts.registry || HOST;\n const requestUrl = this.getRequestUrl(registry, pathname);\n\n const headers = {\n Accept: opts.unfiltered ? \"application/json\" : \"application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*\",\n ...opts.headers\n };\n\n try {\n return await this.httpClient.get(requestUrl, {\n ...opts,\n headers\n });\n } catch (error) {\n if (opts.retry) {\n await new Promise((resolve: any) => setTimeout(resolve, 200));\n opts.retry -= 1;\n opts.unfiltered = true;\n\n return this.request(NpmRegistryClient.escapeName(pathname), opts);\n }\n\n throw error;\n }\n }\n\n getRequestUrl(registry: string, pathname: string): string {\n let resolved = pathname;\n\n if (!REGEX_REGISTRY_PREFIX.test(pathname)) {\n resolved = url.resolve(addSuffix(registry, \"/\"), pathname);\n }\n\n if (REGEX_REGISTRY_ENFORCED_HTTPS.test(resolved)) {\n resolved = resolved.replace(/^http:\\/\\//, \"https://\");\n }\n\n return resolved;\n }\n\n /**\n * Search a module on npm registry\n * @param text\n * @param options\n */\n async search(text: string, options: {size?: number; from?: number; quality?: number; popularity?: number; maintenance?: number} = {}) {\n const {objects: result} = await this.request(`-/v1/search`, {\n headers: {\n \"Accept-Encoding\": \"gzip\"\n },\n qs: {\n text,\n size: 100,\n from: 0,\n quality: 0.65,\n popularity: 0.98,\n maintenance: 0.5,\n ...options\n }\n });\n\n return result;\n }\n\n async info(packageName: string, retry = 0): Promise<PackageInfo> {\n try {\n return await this.request(packageName, {\n headers: {\n \"Accept-Encoding\": \"gzip\"\n },\n unfiltered: false,\n retry\n });\n } catch (er) {\n return retry == 0 ? this.fallback(packageName) : null;\n }\n }\n\n private async fallback(packageName: string) {\n const [{package: pkg}] = await this.search(packageName);\n\n return {\n ...pkg,\n \"dist-tags\": {\n latest: pkg.version\n },\n versions: {\n [pkg.version]: {\n name: packageName,\n version: pkg.version,\n dependencies: {},\n devDependencies: {}\n }\n }\n };\n }\n}\n"]}