@pristine-ts/cli 2.0.7 → 2.0.17

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 (243) hide show
  1. package/dist/lib/cjs/bootstrap/build-staleness-prompt.js +12 -13
  2. package/dist/lib/cjs/bootstrap/build-staleness-prompt.js.map +1 -1
  3. package/dist/lib/cjs/bootstrap/init-prompt.js +16 -47
  4. package/dist/lib/cjs/bootstrap/init-prompt.js.map +1 -1
  5. package/dist/lib/cjs/cli.configuration-keys.js +24 -0
  6. package/dist/lib/cjs/cli.configuration-keys.js.map +1 -0
  7. package/dist/lib/cjs/cli.js +23 -10
  8. package/dist/lib/cjs/cli.js.map +1 -1
  9. package/dist/lib/cjs/cli.module.js +29 -1
  10. package/dist/lib/cjs/cli.module.js.map +1 -1
  11. package/dist/lib/cjs/commands/commands.js +6 -0
  12. package/dist/lib/cjs/commands/commands.js.map +1 -1
  13. package/dist/lib/cjs/commands/logs-alias.command.js +49 -0
  14. package/dist/lib/cjs/commands/logs-alias.command.js.map +1 -0
  15. package/dist/lib/cjs/commands/logs.command-options.js +72 -0
  16. package/dist/lib/cjs/commands/logs.command-options.js.map +1 -0
  17. package/dist/lib/cjs/commands/logs.command.js +102 -0
  18. package/dist/lib/cjs/commands/logs.command.js.map +1 -0
  19. package/dist/lib/cjs/commands/requests-alias.command.js +49 -0
  20. package/dist/lib/cjs/commands/requests-alias.command.js.map +1 -0
  21. package/dist/lib/cjs/commands/requests.command-options.js +26 -0
  22. package/dist/lib/cjs/commands/requests.command-options.js.map +1 -0
  23. package/dist/lib/cjs/commands/requests.command.js +88 -0
  24. package/dist/lib/cjs/commands/requests.command.js.map +1 -0
  25. package/dist/lib/cjs/commands/trace-alias.command.js +49 -0
  26. package/dist/lib/cjs/commands/trace-alias.command.js.map +1 -0
  27. package/dist/lib/cjs/commands/trace.command-options.js +59 -0
  28. package/dist/lib/cjs/commands/trace.command-options.js.map +1 -0
  29. package/dist/lib/cjs/commands/trace.command.js +84 -0
  30. package/dist/lib/cjs/commands/trace.command.js.map +1 -0
  31. package/dist/lib/cjs/config/config-loader.js +34 -13
  32. package/dist/lib/cjs/config/config-loader.js.map +1 -1
  33. package/dist/lib/cjs/decorators/command-parameter.decorator.js +40 -0
  34. package/dist/lib/cjs/decorators/command-parameter.decorator.js.map +1 -0
  35. package/dist/lib/cjs/decorators/decorators.js +18 -0
  36. package/dist/lib/cjs/decorators/decorators.js.map +1 -0
  37. package/dist/lib/cjs/enums/cli-decorator-metadata-keyname.enum.js +14 -0
  38. package/dist/lib/cjs/enums/cli-decorator-metadata-keyname.enum.js.map +1 -0
  39. package/dist/lib/cjs/enums/enums.js +19 -0
  40. package/dist/lib/cjs/enums/enums.js.map +1 -0
  41. package/dist/lib/cjs/enums/terminal-key-name.enum.js +21 -0
  42. package/dist/lib/cjs/enums/terminal-key-name.enum.js.map +1 -0
  43. package/dist/lib/cjs/errors/cli-error-code.enum.js +11 -1
  44. package/dist/lib/cjs/errors/cli-error-code.enum.js.map +1 -1
  45. package/dist/lib/cjs/errors/errors.js +1 -0
  46. package/dist/lib/cjs/errors/errors.js.map +1 -1
  47. package/dist/lib/cjs/errors/prompt-cancelled.error.js +25 -0
  48. package/dist/lib/cjs/errors/prompt-cancelled.error.js.map +1 -0
  49. package/dist/lib/cjs/event-handlers/cli.event-handler.js +21 -65
  50. package/dist/lib/cjs/event-handlers/cli.event-handler.js.map +1 -1
  51. package/dist/lib/cjs/event-handlers/event-handlers.js +1 -0
  52. package/dist/lib/cjs/event-handlers/event-handlers.js.map +1 -1
  53. package/dist/lib/cjs/event-handlers/repl-start.event-handler.js +280 -0
  54. package/dist/lib/cjs/event-handlers/repl-start.event-handler.js.map +1 -0
  55. package/dist/lib/cjs/event-payloads/event-payloads.js +1 -0
  56. package/dist/lib/cjs/event-payloads/event-payloads.js.map +1 -1
  57. package/dist/lib/cjs/event-payloads/start-repl.event-payload.js +19 -0
  58. package/dist/lib/cjs/event-payloads/start-repl.event-payload.js.map +1 -0
  59. package/dist/lib/cjs/interfaces/interfaces.js +1 -0
  60. package/dist/lib/cjs/interfaces/interfaces.js.map +1 -1
  61. package/dist/lib/cjs/interfaces/terminal-key.interface.js +3 -0
  62. package/dist/lib/cjs/interfaces/terminal-key.interface.js.map +1 -0
  63. package/dist/lib/cjs/managers/cli-prompt.manager.js +181 -15
  64. package/dist/lib/cjs/managers/cli-prompt.manager.js.map +1 -1
  65. package/dist/lib/cjs/managers/managers.js +1 -0
  66. package/dist/lib/cjs/managers/managers.js.map +1 -1
  67. package/dist/lib/cjs/managers/terminal-key-reader.manager.js +99 -0
  68. package/dist/lib/cjs/managers/terminal-key-reader.manager.js.map +1 -0
  69. package/dist/lib/cjs/mappers/command-event.mapper.js +48 -8
  70. package/dist/lib/cjs/mappers/command-event.mapper.js.map +1 -1
  71. package/dist/lib/cjs/mappers/mappers.js +1 -0
  72. package/dist/lib/cjs/mappers/mappers.js.map +1 -1
  73. package/dist/lib/cjs/mappers/repl-start-event.mapper.js +80 -0
  74. package/dist/lib/cjs/mappers/repl-start-event.mapper.js.map +1 -0
  75. package/dist/lib/cjs/options/command-parameter.options.js +3 -0
  76. package/dist/lib/cjs/options/command-parameter.options.js.map +1 -0
  77. package/dist/lib/cjs/options/options.js +1 -0
  78. package/dist/lib/cjs/options/options.js.map +1 -1
  79. package/dist/lib/cjs/services/command-argument-resolver.js +62 -0
  80. package/dist/lib/cjs/services/command-argument-resolver.js.map +1 -0
  81. package/dist/lib/cjs/services/command-options-resolver.js +114 -0
  82. package/dist/lib/cjs/services/command-options-resolver.js.map +1 -0
  83. package/dist/lib/cjs/services/command-parameter-prompter.js +311 -0
  84. package/dist/lib/cjs/services/command-parameter-prompter.js.map +1 -0
  85. package/dist/lib/cjs/services/services.js +20 -0
  86. package/dist/lib/cjs/services/services.js.map +1 -0
  87. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  88. package/dist/lib/cjs/types/start-repl-event-response.type.js +13 -0
  89. package/dist/lib/cjs/types/start-repl-event-response.type.js.map +1 -0
  90. package/dist/lib/cjs/types/types.js +1 -0
  91. package/dist/lib/cjs/types/types.js.map +1 -1
  92. package/dist/lib/cjs/utils/boolean-answer-parser.js +25 -0
  93. package/dist/lib/cjs/utils/boolean-answer-parser.js.map +1 -0
  94. package/dist/lib/cjs/utils/pristine-argv.js +87 -0
  95. package/dist/lib/cjs/utils/pristine-argv.js.map +1 -0
  96. package/dist/lib/cjs/utils/terminal-key-decoder.js +71 -0
  97. package/dist/lib/cjs/utils/terminal-key-decoder.js.map +1 -0
  98. package/dist/lib/esm/bootstrap/build-staleness-prompt.js +12 -13
  99. package/dist/lib/esm/bootstrap/build-staleness-prompt.js.map +1 -1
  100. package/dist/lib/esm/bootstrap/init-prompt.js +16 -47
  101. package/dist/lib/esm/bootstrap/init-prompt.js.map +1 -1
  102. package/dist/lib/esm/cli.configuration-keys.js +21 -0
  103. package/dist/lib/esm/cli.configuration-keys.js.map +1 -0
  104. package/dist/lib/esm/cli.js +23 -10
  105. package/dist/lib/esm/cli.js.map +1 -1
  106. package/dist/lib/esm/cli.module.js +29 -1
  107. package/dist/lib/esm/cli.module.js.map +1 -1
  108. package/dist/lib/esm/commands/commands.js +6 -0
  109. package/dist/lib/esm/commands/commands.js.map +1 -1
  110. package/dist/lib/esm/commands/logs-alias.command.js +46 -0
  111. package/dist/lib/esm/commands/logs-alias.command.js.map +1 -0
  112. package/dist/lib/esm/commands/logs.command-options.js +68 -0
  113. package/dist/lib/esm/commands/logs.command-options.js.map +1 -0
  114. package/dist/lib/esm/commands/logs.command.js +99 -0
  115. package/dist/lib/esm/commands/logs.command.js.map +1 -0
  116. package/dist/lib/esm/commands/requests-alias.command.js +46 -0
  117. package/dist/lib/esm/commands/requests-alias.command.js.map +1 -0
  118. package/dist/lib/esm/commands/requests.command-options.js +22 -0
  119. package/dist/lib/esm/commands/requests.command-options.js.map +1 -0
  120. package/dist/lib/esm/commands/requests.command.js +85 -0
  121. package/dist/lib/esm/commands/requests.command.js.map +1 -0
  122. package/dist/lib/esm/commands/trace-alias.command.js +46 -0
  123. package/dist/lib/esm/commands/trace-alias.command.js.map +1 -0
  124. package/dist/lib/esm/commands/trace.command-options.js +55 -0
  125. package/dist/lib/esm/commands/trace.command-options.js.map +1 -0
  126. package/dist/lib/esm/commands/trace.command.js +81 -0
  127. package/dist/lib/esm/commands/trace.command.js.map +1 -0
  128. package/dist/lib/esm/config/config-loader.js +34 -13
  129. package/dist/lib/esm/config/config-loader.js.map +1 -1
  130. package/dist/lib/esm/decorators/command-parameter.decorator.js +36 -0
  131. package/dist/lib/esm/decorators/command-parameter.decorator.js.map +1 -0
  132. package/dist/lib/esm/decorators/decorators.js +2 -0
  133. package/dist/lib/esm/decorators/decorators.js.map +1 -0
  134. package/dist/lib/esm/enums/cli-decorator-metadata-keyname.enum.js +11 -0
  135. package/dist/lib/esm/enums/cli-decorator-metadata-keyname.enum.js.map +1 -0
  136. package/dist/lib/esm/enums/enums.js +3 -0
  137. package/dist/lib/esm/enums/enums.js.map +1 -0
  138. package/dist/lib/esm/enums/terminal-key-name.enum.js +18 -0
  139. package/dist/lib/esm/enums/terminal-key-name.enum.js.map +1 -0
  140. package/dist/lib/esm/errors/cli-error-code.enum.js +11 -1
  141. package/dist/lib/esm/errors/cli-error-code.enum.js.map +1 -1
  142. package/dist/lib/esm/errors/errors.js +1 -0
  143. package/dist/lib/esm/errors/errors.js.map +1 -1
  144. package/dist/lib/esm/errors/prompt-cancelled.error.js +21 -0
  145. package/dist/lib/esm/errors/prompt-cancelled.error.js.map +1 -0
  146. package/dist/lib/esm/event-handlers/cli.event-handler.js +22 -66
  147. package/dist/lib/esm/event-handlers/cli.event-handler.js.map +1 -1
  148. package/dist/lib/esm/event-handlers/event-handlers.js +1 -0
  149. package/dist/lib/esm/event-handlers/event-handlers.js.map +1 -1
  150. package/dist/lib/esm/event-handlers/repl-start.event-handler.js +244 -0
  151. package/dist/lib/esm/event-handlers/repl-start.event-handler.js.map +1 -0
  152. package/dist/lib/esm/event-payloads/event-payloads.js +1 -0
  153. package/dist/lib/esm/event-payloads/event-payloads.js.map +1 -1
  154. package/dist/lib/esm/event-payloads/start-repl.event-payload.js +15 -0
  155. package/dist/lib/esm/event-payloads/start-repl.event-payload.js.map +1 -0
  156. package/dist/lib/esm/interfaces/interfaces.js +1 -0
  157. package/dist/lib/esm/interfaces/interfaces.js.map +1 -1
  158. package/dist/lib/esm/interfaces/terminal-key.interface.js +2 -0
  159. package/dist/lib/esm/interfaces/terminal-key.interface.js.map +1 -0
  160. package/dist/lib/esm/managers/cli-prompt.manager.js +182 -16
  161. package/dist/lib/esm/managers/cli-prompt.manager.js.map +1 -1
  162. package/dist/lib/esm/managers/managers.js +1 -0
  163. package/dist/lib/esm/managers/managers.js.map +1 -1
  164. package/dist/lib/esm/managers/terminal-key-reader.manager.js +96 -0
  165. package/dist/lib/esm/managers/terminal-key-reader.manager.js.map +1 -0
  166. package/dist/lib/esm/mappers/command-event.mapper.js +49 -9
  167. package/dist/lib/esm/mappers/command-event.mapper.js.map +1 -1
  168. package/dist/lib/esm/mappers/mappers.js +1 -0
  169. package/dist/lib/esm/mappers/mappers.js.map +1 -1
  170. package/dist/lib/esm/mappers/repl-start-event.mapper.js +77 -0
  171. package/dist/lib/esm/mappers/repl-start-event.mapper.js.map +1 -0
  172. package/dist/lib/esm/options/command-parameter.options.js +2 -0
  173. package/dist/lib/esm/options/command-parameter.options.js.map +1 -0
  174. package/dist/lib/esm/options/options.js +1 -0
  175. package/dist/lib/esm/options/options.js.map +1 -1
  176. package/dist/lib/esm/services/command-argument-resolver.js +59 -0
  177. package/dist/lib/esm/services/command-argument-resolver.js.map +1 -0
  178. package/dist/lib/esm/services/command-options-resolver.js +111 -0
  179. package/dist/lib/esm/services/command-options-resolver.js.map +1 -0
  180. package/dist/lib/esm/services/command-parameter-prompter.js +308 -0
  181. package/dist/lib/esm/services/command-parameter-prompter.js.map +1 -0
  182. package/dist/lib/esm/services/services.js +4 -0
  183. package/dist/lib/esm/services/services.js.map +1 -0
  184. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
  185. package/dist/lib/esm/types/start-repl-event-response.type.js +9 -0
  186. package/dist/lib/esm/types/start-repl-event-response.type.js.map +1 -0
  187. package/dist/lib/esm/types/types.js +1 -0
  188. package/dist/lib/esm/types/types.js.map +1 -1
  189. package/dist/lib/esm/utils/boolean-answer-parser.js +21 -0
  190. package/dist/lib/esm/utils/boolean-answer-parser.js.map +1 -0
  191. package/dist/lib/esm/utils/pristine-argv.js +50 -0
  192. package/dist/lib/esm/utils/pristine-argv.js.map +1 -0
  193. package/dist/lib/esm/utils/terminal-key-decoder.js +67 -0
  194. package/dist/lib/esm/utils/terminal-key-decoder.js.map +1 -0
  195. package/dist/types/bootstrap/build-staleness-prompt.d.ts +3 -3
  196. package/dist/types/bootstrap/init-prompt.d.ts +5 -5
  197. package/dist/types/cli.configuration-keys.d.ts +32 -0
  198. package/dist/types/cli.d.ts +8 -4
  199. package/dist/types/cli.module.d.ts +4 -0
  200. package/dist/types/commands/commands.d.ts +6 -0
  201. package/dist/types/commands/logs-alias.command.d.ts +14 -0
  202. package/dist/types/commands/logs.command-options.d.ts +38 -0
  203. package/dist/types/commands/logs.command.d.ts +31 -0
  204. package/dist/types/commands/requests-alias.command.d.ts +14 -0
  205. package/dist/types/commands/requests.command-options.d.ts +8 -0
  206. package/dist/types/commands/requests.command.d.ts +25 -0
  207. package/dist/types/commands/trace-alias.command.d.ts +14 -0
  208. package/dist/types/commands/trace.command-options.d.ts +31 -0
  209. package/dist/types/commands/trace.command.d.ts +21 -0
  210. package/dist/types/config/config-loader.d.ts +15 -3
  211. package/dist/types/decorators/command-parameter.decorator.d.ts +30 -0
  212. package/dist/types/decorators/decorators.d.ts +1 -0
  213. package/dist/types/enums/cli-decorator-metadata-keyname.enum.d.ts +9 -0
  214. package/dist/types/enums/enums.d.ts +2 -0
  215. package/dist/types/enums/terminal-key-name.enum.d.ts +16 -0
  216. package/dist/types/errors/cli-error-code.enum.d.ts +12 -2
  217. package/dist/types/errors/errors.d.ts +1 -0
  218. package/dist/types/errors/prompt-cancelled.error.d.ts +13 -0
  219. package/dist/types/event-handlers/cli.event-handler.d.ts +16 -13
  220. package/dist/types/event-handlers/event-handlers.d.ts +1 -0
  221. package/dist/types/event-handlers/repl-start.event-handler.d.ts +70 -0
  222. package/dist/types/event-payloads/event-payloads.d.ts +1 -0
  223. package/dist/types/event-payloads/start-repl.event-payload.d.ts +13 -0
  224. package/dist/types/interfaces/interfaces.d.ts +1 -0
  225. package/dist/types/interfaces/terminal-key.interface.d.ts +11 -0
  226. package/dist/types/managers/cli-prompt.manager.d.ts +63 -6
  227. package/dist/types/managers/managers.d.ts +1 -0
  228. package/dist/types/managers/terminal-key-reader.manager.d.ts +31 -0
  229. package/dist/types/mappers/command-event.mapper.d.ts +10 -1
  230. package/dist/types/mappers/mappers.d.ts +1 -0
  231. package/dist/types/mappers/repl-start-event.mapper.d.ts +28 -0
  232. package/dist/types/options/command-parameter.options.d.ts +29 -0
  233. package/dist/types/options/options.d.ts +1 -0
  234. package/dist/types/services/command-argument-resolver.d.ts +24 -0
  235. package/dist/types/services/command-options-resolver.d.ts +35 -0
  236. package/dist/types/services/command-parameter-prompter.d.ts +113 -0
  237. package/dist/types/services/services.d.ts +3 -0
  238. package/dist/types/types/start-repl-event-response.type.d.ts +10 -0
  239. package/dist/types/types/types.d.ts +1 -0
  240. package/dist/types/utils/boolean-answer-parser.d.ts +11 -0
  241. package/dist/types/utils/pristine-argv.d.ts +33 -0
  242. package/dist/types/utils/terminal-key-decoder.d.ts +28 -0
  243. package/package.json +16 -12
@@ -0,0 +1,244 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var ReplStartEventHandler_1;
23
+ import * as readline from "node:readline";
24
+ import { inject, injectable } from "tsyringe";
25
+ import { ExecutionContextKeynameEnum, Kernel } from "@pristine-ts/core";
26
+ import { ExitCode, moduleScoped, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common";
27
+ import { TraceStore } from "@pristine-ts/observability";
28
+ import { CliOutput } from "../managers/cli-output.manager";
29
+ import { CliModuleKeyname } from "../cli.module.keyname";
30
+ import { StartReplEventPayload } from "../event-payloads/start-repl.event-payload";
31
+ import { StartReplEventResponse } from "../types/start-repl-event-response.type";
32
+ /**
33
+ * The interactive `pristine` console, modelled as a long-running event handler. Launched
34
+ * when the bin is invoked with no command (or `pristine repl`) — `ReplStartEventMapper`
35
+ * produces a `StartReplEventPayload` and this handler runs the readline loop for the rest
36
+ * of the process lifetime.
37
+ *
38
+ * **Why an event handler.** The REPL is the same shape as `pristine start` (or any
39
+ * long-running command): an EventHandler whose `handle()` doesn't return until the
40
+ * session ends. This gives the CLI bootstrap a uniform shape — `cli.ts` just calls
41
+ * `kernel.handle(argv, {keyname: Cli})` regardless of whether the user invoked a one-shot
42
+ * command or wants the interactive console. There is no driver/handler asymmetry left in
43
+ * the bootstrap; the mapping layer routes argv to the right payload.
44
+ *
45
+ * **Per-line dispatch.** Each typed line is re-entered through `kernel.handle(...,
46
+ * {keyname: Cli})` — using `Kernel` (the proper re-entry seam — it owns trace lifecycle,
47
+ * child container creation, the works). The `Kernel` is `registerInstance`-d into its
48
+ * own container by `Cli.bootstrap()`, so this handler injects it via DI like any other
49
+ * service.
50
+ *
51
+ * Plus the session verbs `/help`, `/clear`, `/exit` handled in-process (they're not
52
+ * commands — they don't re-enter the kernel). Tab-completion is driven by the live
53
+ * command registry and by recent trace ids for `/trace` / `/logs`.
54
+ */
55
+ let ReplStartEventHandler = ReplStartEventHandler_1 = class ReplStartEventHandler {
56
+ constructor(kernel, container, cliOutput, traceStore) {
57
+ this.kernel = kernel;
58
+ this.container = container;
59
+ this.cliOutput = cliOutput;
60
+ this.traceStore = traceStore;
61
+ this.commands = [];
62
+ }
63
+ supports(event) {
64
+ return event.payload instanceof StartReplEventPayload;
65
+ }
66
+ /**
67
+ * Runs the read-eval-print loop until `/exit` or EOF (Ctrl-D). Resolves with the exit
68
+ * code wrapped in a `StartReplEventResponse`; the mapper surfaces that to `Cli.bootstrap`.
69
+ */
70
+ handle(event) {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ this.commands = this.resolveCommands();
73
+ this.printBanner();
74
+ const rl = readline.createInterface({
75
+ input: process.stdin,
76
+ output: process.stdout,
77
+ prompt: ReplStartEventHandler_1.PROMPT,
78
+ completer: (line) => this.complete(line),
79
+ });
80
+ const exitCode = yield new Promise((resolve) => {
81
+ rl.prompt();
82
+ rl.on("line", (line) => {
83
+ const trimmed = line.trim();
84
+ if (trimmed.length === 0) {
85
+ rl.prompt();
86
+ return;
87
+ }
88
+ // Pause input while a command runs so its own SIGINT handling (e.g. `logs -f`)
89
+ // owns Ctrl-C, and so a second line can't interleave mid-dispatch.
90
+ rl.pause();
91
+ void this.handleLine(trimmed).then((shouldExit) => {
92
+ if (shouldExit) {
93
+ rl.close();
94
+ return;
95
+ }
96
+ rl.resume();
97
+ rl.prompt();
98
+ });
99
+ });
100
+ // Ctrl-C at an idle prompt clears the line rather than killing the session.
101
+ rl.on("SIGINT", () => {
102
+ this.cliOutput.writeLine("(type /exit to quit)");
103
+ rl.prompt();
104
+ });
105
+ rl.on("close", () => {
106
+ void this.shutdown().then(() => resolve(ExitCode.Success));
107
+ });
108
+ });
109
+ return new StartReplEventResponse(event, exitCode);
110
+ });
111
+ }
112
+ /**
113
+ * Handles one input line. Returns true when the session should end.
114
+ */
115
+ handleLine(input) {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ const withoutSlash = input.startsWith("/") ? input.slice(1) : input;
118
+ const tokens = withoutSlash.split(/\s+/).filter(token => token.length > 0);
119
+ const name = tokens[0];
120
+ const rest = tokens.slice(1);
121
+ if (name === "exit" || name === "quit") {
122
+ return true;
123
+ }
124
+ if (name === "clear") {
125
+ console.clear();
126
+ return false;
127
+ }
128
+ if (name === "help") {
129
+ this.printHelp();
130
+ return false;
131
+ }
132
+ try {
133
+ // Re-enter the kernel with a synthetic argv under the `Cli` keyname — parsing and
134
+ // dispatch are identical to a one-shot invocation. The `"pristine"` token is the
135
+ // bin marker `PristineArgv` scans for; everything after it is treated as user
136
+ // args. `CliEventHandler` returns the exit code instead of calling `process.exit`,
137
+ // so the loop survives. An unknown command throws `CommandNotFoundError`, caught
138
+ // below.
139
+ yield this.kernel.handle(["node", "pristine", name, ...rest], { keyname: ExecutionContextKeynameEnum.Cli, context: null });
140
+ }
141
+ catch (error) {
142
+ try {
143
+ // Stringification + writeLine are wrapped together — `error.message`/`String(error)`
144
+ // can throw on pathological inputs, and a throw here would kill the REPL session.
145
+ this.cliOutput.writeLine(`Error: ${error instanceof Error ? error.message : String(error)}`);
146
+ }
147
+ catch (_a) {
148
+ // Drop the error rather than crashing the session.
149
+ }
150
+ }
151
+ return false;
152
+ });
153
+ }
154
+ /**
155
+ * Readline completer. Completes `/`-prefixed command names and session verbs; for
156
+ * `/trace` and `/logs` it completes the trailing token with recent trace ids.
157
+ */
158
+ complete(line) {
159
+ const traceIdMatch = /^\/(trace|logs)\s+(\S*)$/.exec(line);
160
+ if (traceIdMatch !== null) {
161
+ const partial = traceIdMatch[2];
162
+ const hits = this.traceStore.recentTraceIds(ReplStartEventHandler_1.TRACE_ID_COMPLETION_LIMIT)
163
+ .filter(id => id.startsWith(partial));
164
+ return [hits, partial];
165
+ }
166
+ const candidates = [
167
+ ...this.commands.map(command => `/${command.name}`),
168
+ ...ReplStartEventHandler_1.SESSION_VERBS,
169
+ ];
170
+ const hits = candidates.filter(candidate => candidate.startsWith(line));
171
+ return [hits.length > 0 ? hits : candidates, line];
172
+ }
173
+ printBanner() {
174
+ this.cliOutput.writeLine("Pristine — interactive console");
175
+ this.cliOutput.writeLine("Type /help for commands, /exit to quit.");
176
+ this.cliOutput.writeLine("");
177
+ }
178
+ printHelp() {
179
+ var _a;
180
+ this.cliOutput.writeLine("Session:");
181
+ this.cliOutput.writeLine(" /help show this message");
182
+ this.cliOutput.writeLine(" /clear clear the screen");
183
+ this.cliOutput.writeLine(" /exit leave the console");
184
+ this.cliOutput.writeLine("");
185
+ this.cliOutput.writeLine("Commands (also runnable as `pristine <name>`):");
186
+ const sorted = [...this.commands].sort((a, b) => a.name.localeCompare(b.name));
187
+ const longest = sorted.reduce((max, command) => Math.max(max, command.name.length), 0);
188
+ for (const command of sorted) {
189
+ const padded = `/${command.name}`.padEnd(longest + 3, " ");
190
+ this.cliOutput.writeLine(` ${padded}${(_a = command.description) !== null && _a !== void 0 ? _a : ""}`);
191
+ }
192
+ }
193
+ shutdown() {
194
+ return __awaiter(this, void 0, void 0, function* () {
195
+ try {
196
+ yield this.kernel.stop();
197
+ }
198
+ catch (_a) {
199
+ // Best-effort — we're leaving the process anyway.
200
+ }
201
+ });
202
+ }
203
+ /**
204
+ * Enumerates every registered command. Resolved from the per-event child container the
205
+ * kernel handed this handler when it dispatched the REPL-start event — same container
206
+ * `HelpCommand`/`ListCommand` themselves use, so commands that depend on
207
+ * `CurrentChildContainer` resolve cleanly.
208
+ *
209
+ * `resolveAll`, justified: framework REPL infrastructure at session start — enumerating
210
+ * every `Command`-tagged service is a container-introspection operation with no
211
+ * constructor seam.
212
+ */
213
+ resolveCommands() {
214
+ try {
215
+ return this.container.resolveAll(ServiceDefinitionTagEnum.Command);
216
+ }
217
+ catch (error) {
218
+ try {
219
+ // Stringification + stderr.write are wrapped together — `error.message`/`String(error)`
220
+ // can throw on pathological inputs, and a throw here would bubble out and kill REPL
221
+ // startup.
222
+ process.stderr.write(`[repl] could not load commands: ${error instanceof Error ? error.message : String(error)}\n`);
223
+ }
224
+ catch (_a) {
225
+ // Drop the report rather than crashing startup; the empty completer is still usable.
226
+ }
227
+ return [];
228
+ }
229
+ }
230
+ };
231
+ ReplStartEventHandler.PROMPT = "pristine ❯ ";
232
+ ReplStartEventHandler.SESSION_VERBS = ["/help", "/clear", "/exit"];
233
+ ReplStartEventHandler.TRACE_ID_COMPLETION_LIMIT = 25;
234
+ ReplStartEventHandler = ReplStartEventHandler_1 = __decorate([
235
+ tag(ServiceDefinitionTagEnum.EventHandler),
236
+ moduleScoped(CliModuleKeyname),
237
+ injectable(),
238
+ __param(0, inject(Kernel)),
239
+ __param(1, inject(ServiceDefinitionTagEnum.CurrentChildContainer)),
240
+ __metadata("design:paramtypes", [Kernel, Object, CliOutput,
241
+ TraceStore])
242
+ ], ReplStartEventHandler);
243
+ export { ReplStartEventHandler };
244
+ //# sourceMappingURL=repl-start.event-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl-start.event-handler.js","sourceRoot":"","sources":["../../../../src/event-handlers/repl-start.event-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAsB,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AACjE,OAAO,EAA+B,2BAA2B,EAAE,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAC,QAAQ,EAAE,YAAY,EAAE,wBAAwB,EAAE,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAC,UAAU,EAAC,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAC,SAAS,EAAC,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,qBAAqB,EAAC,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAC,sBAAsB,EAAC,MAAM,yCAAyC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAII,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAOhC,YACkB,MAA+B,EACS,SAA+C,EACtF,SAAoB,EACpB,UAAsB;QAHN,WAAM,GAAN,MAAM,CAAQ;QAC0B,cAAS,GAAT,SAAS,CAAqB;QACtF,cAAS,GAAT,SAAS,CAAW;QACpB,eAAU,GAAV,UAAU,CAAY;QANjC,aAAQ,GAA4B,EAAE,CAAC;IAQ/C,CAAC;IAED,QAAQ,CAAI,KAAe;QACzB,OAAO,KAAK,CAAC,OAAO,YAAY,qBAAqB,CAAC;IACxD,CAAC;IAED;;;OAGG;IACG,MAAM,CAAC,KAAmC;;YAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,uBAAqB,CAAC,MAAM;gBACpC,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;aACjD,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,EAAE;gBAChE,EAAE,CAAC,MAAM,EAAE,CAAC;gBAEZ,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;oBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,EAAE,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO;oBACT,CAAC;oBAED,+EAA+E;oBAC/E,mEAAmE;oBACnE,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;wBAChD,IAAI,UAAU,EAAE,CAAC;4BACf,EAAE,CAAC,KAAK,EAAE,CAAC;4BACX,OAAO;wBACT,CAAC;wBACD,EAAE,CAAC,MAAM,EAAE,CAAC;wBACZ,EAAE,CAAC,MAAM,EAAE,CAAC;oBACd,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,4EAA4E;gBAC5E,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;oBACnB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;oBACjD,EAAE,CAAC,MAAM,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBAClB,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;KAAA;IAED;;OAEG;IACW,UAAU,CAAC,KAAa;;YACpC,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACpE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC;gBACH,kFAAkF;gBAClF,iFAAiF;gBACjF,8EAA8E;gBAC9E,mFAAmF;gBACnF,iFAAiF;gBACjF,SAAS;gBACT,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CACtB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,EACnC,EAAC,OAAO,EAAE,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAC,CAC1D,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,qFAAqF;oBACrF,kFAAkF;oBAClF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC/F,CAAC;gBAAC,WAAM,CAAC;oBACP,mDAAmD;gBACrD,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KAAA;IAED;;;OAGG;IACK,QAAQ,CAAC,IAAY;QAC3B,MAAM,YAAY,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,uBAAqB,CAAC,yBAAyB,CAAC;iBACzF,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,UAAU,GAAG;YACjB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACnD,GAAG,uBAAqB,CAAC,aAAa;SACvC,CAAC;QACF,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAEO,SAAS;;QACf,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACvF,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,MAAM,GAAG,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAEa,QAAQ;;YACpB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3B,CAAC;YAAC,WAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;QACH,CAAC;KAAA;IAED;;;;;;;;;OASG;IACK,eAAe;QACrB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAwB,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,wFAAwF;gBACxF,oFAAoF;gBACpF,WAAW;gBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtH,CAAC;YAAC,WAAM,CAAC;gBACP,qFAAqF;YACvF,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;;AA7LuB,4BAAM,GAAG,aAAa,AAAhB,CAAiB;AACvB,mCAAa,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,AAA/B,CAAgC;AAC7C,+CAAyB,GAAG,EAAE,AAAL,CAAM;AAH5C,qBAAqB;IAHjC,GAAG,CAAC,wBAAwB,CAAC,YAAY,CAAC;IAC1C,YAAY,CAAC,gBAAgB,CAAC;IAC9B,UAAU,EAAE;IASR,WAAA,MAAM,CAAC,MAAM,CAAC,CAAA;IACd,WAAA,MAAM,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,CAAA;qCADd,MAAM,UAEnB,SAAS;QACR,UAAU;GAX9B,qBAAqB,CA+LjC"}
@@ -1,2 +1,3 @@
1
1
  export * from "./command.event-payload";
2
+ export * from "./start-repl.event-payload";
2
3
  //# sourceMappingURL=event-payloads.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-payloads.js","sourceRoot":"","sources":["../../../../src/event-payloads/event-payloads.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"event-payloads.js","sourceRoot":"","sources":["../../../../src/event-payloads/event-payloads.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Payload that signals "launch the interactive REPL." Produced by `ReplStartEventMapper`
3
+ * for argv shapes with no command (`pristine`) or with the explicit `repl` command
4
+ * (`pristine repl`). Consumed by `ReplStartEventHandler` which runs the readline loop
5
+ * for the rest of the process lifetime.
6
+ *
7
+ * The payload carries the `scriptPath` (argv[1]) for parity with `CommandEventPayload`
8
+ * and for diagnostics; the REPL itself reads its input from stdin, not from the payload.
9
+ */
10
+ export class StartReplEventPayload {
11
+ constructor(scriptPath) {
12
+ this.scriptPath = scriptPath;
13
+ }
14
+ }
15
+ //# sourceMappingURL=start-repl.event-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-repl.event-payload.js","sourceRoot":"","sources":["../../../../src/event-payloads/start-repl.event-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAqB;IAChC,YAAmB,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;IACrC,CAAC;CACF"}
@@ -1,2 +1,3 @@
1
1
  export * from "./command.interface";
2
+ export * from "./terminal-key.interface";
2
3
  //# sourceMappingURL=interfaces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=terminal-key.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-key.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/terminal-key.interface.ts"],"names":[],"mappings":""}
@@ -4,6 +4,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
7
10
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
11
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
12
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -13,18 +16,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
16
  step((generator = generator.apply(thisArg, _arguments || [])).next());
14
17
  });
15
18
  };
19
+ var CliPrompt_1;
16
20
  import { injectable } from "tsyringe";
17
21
  import { moduleScoped } from "@pristine-ts/common";
18
22
  import { CliModuleKeyname } from "../cli.module.keyname";
19
23
  import * as readline from "node:readline/promises";
20
- import { moveCursor, clearLine } from "node:readline";
24
+ import { moveCursor, clearLine, cursorTo } from "node:readline";
21
25
  import { stdin as input, stdout as output } from "node:process";
22
26
  import { ConsoleReadlineOptions } from "../options/console-readline.options";
27
+ import { TerminalKeyReader } from "./terminal-key-reader.manager";
28
+ import { TerminalKeyName } from "../enums/terminal-key-name.enum";
29
+ import { BooleanAnswerParser } from "../utils/boolean-answer-parser";
30
+ import { PromptCancelledError } from "../errors/prompt-cancelled.error";
23
31
  /**
24
- * Interactive stdin reader for CLI commands. Wraps Node's `readline/promises` and offers
25
- * a single `readLine` method with optional masking after input is received.
32
+ * Interactive terminal prompts for CLI commands, implemented entirely on Node's `readline`
33
+ * and raw-mode stdin no third-party prompt library. Line-based prompts (`readLine`,
34
+ * `input`, `confirm`) go through `readline/promises`; the keystroke-level prompts (`select`
35
+ * arrow menu, masked `readSecret`) go through {@link TerminalKeyReader}.
36
+ *
37
+ * `Ctrl+C` rejects with {@link PromptCancelledError} across all of them — the line prompts
38
+ * via a `readline` SIGINT handler, the raw-mode prompts via the key reader — so callers get
39
+ * one consistent cancellation signal.
26
40
  */
27
- let CliPrompt = class CliPrompt {
41
+ let CliPrompt = CliPrompt_1 = class CliPrompt {
42
+ constructor(terminalKeyReader) {
43
+ this.terminalKeyReader = terminalKeyReader;
44
+ }
28
45
  /**
29
46
  * Reads a string from stdin synchronously. Returns whatever `process.stdin.read()`
30
47
  * gives back (which may be `null` when no data is buffered).
@@ -35,29 +52,178 @@ let CliPrompt = class CliPrompt {
35
52
  /**
36
53
  * Reads a line from stdin after displaying a prompt. When
37
54
  * `options.showCharactersOnTyping` is false, the answered line is cleared and replaced
38
- * with a masked echo so the typed value isn't left visible on screen.
55
+ * with a masked echo so the typed value isn't left visible on screen (a post-input clear,
56
+ * not true keystroke suppression — use {@link readSecret} for real masking).
39
57
  *
40
- * Note: this is not a true keystroke-suppressing password input — Node's stock
41
- * `readline` does not support that without raw-mode handling. The current behavior is
42
- * a post-input clear, sufficient for most CLI prompts.
58
+ * `Ctrl+C` rejects with {@link PromptCancelledError}: registering a `SIGINT` listener on
59
+ * the readline interface overrides Node's default interrupt handling, turning it into a
60
+ * clean rejection rather than a hung promise.
43
61
  */
44
62
  readLine(question_1) {
45
63
  return __awaiter(this, arguments, void 0, function* (question, options = new ConsoleReadlineOptions()) {
46
64
  const rl = readline.createInterface({ input, output });
47
- const answer = yield rl.question(question);
48
- if (!options.showCharactersOnTyping) {
49
- moveCursor(output, 0, -1);
50
- clearLine(output, 0);
51
- process.stdout.write(`${question} [******]\n`);
65
+ try {
66
+ const answer = yield new Promise((resolve, reject) => {
67
+ rl.on("SIGINT", () => reject(new PromptCancelledError()));
68
+ rl.question(question).then(resolve, reject);
69
+ });
70
+ if (!options.showCharactersOnTyping) {
71
+ moveCursor(output, 0, -1);
72
+ clearLine(output, 0);
73
+ process.stdout.write(`${question} [******]\n`);
74
+ }
75
+ return answer;
76
+ }
77
+ finally {
78
+ rl.close();
79
+ }
80
+ });
81
+ }
82
+ /**
83
+ * Asks a free-text question, optionally with a default. The default is shown as a hint and
84
+ * returned verbatim when the user submits an empty line. The answer is trimmed.
85
+ */
86
+ input(message, defaultValue) {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ const suffix = defaultValue !== undefined && defaultValue !== ""
89
+ ? ` ${CliPrompt_1.DIM}(${defaultValue})${CliPrompt_1.RESET}`
90
+ : "";
91
+ const answer = (yield this.readLine(`${message}${suffix} `)).trim();
92
+ if (answer.length === 0 && defaultValue !== undefined) {
93
+ return defaultValue;
52
94
  }
53
- rl.close();
54
95
  return answer;
55
96
  });
56
97
  }
98
+ /**
99
+ * Asks a yes/no question. An empty answer takes the default; anything `BooleanAnswerParser`
100
+ * understands (`y`/`yes`/`true`/`1`, `n`/`no`/`false`/`0`) is accepted; anything else is
101
+ * re-asked. The default is shown capitalized in the `(Y/n)` / `(y/N)` hint.
102
+ */
103
+ confirm(message_1) {
104
+ return __awaiter(this, arguments, void 0, function* (message, defaultValue = true) {
105
+ const hint = defaultValue ? "(Y/n)" : "(y/N)";
106
+ for (;;) {
107
+ const raw = (yield this.readLine(`${message} ${hint} `)).trim();
108
+ if (raw.length === 0) {
109
+ return defaultValue;
110
+ }
111
+ const parsed = BooleanAnswerParser.parse(raw);
112
+ if (parsed !== undefined) {
113
+ return parsed;
114
+ }
115
+ process.stdout.write("Please answer yes (y) or no (n).\n");
116
+ }
117
+ });
118
+ }
119
+ /**
120
+ * Presents an arrow-key menu and returns the chosen choice's `value`. `↑`/`↓` move the
121
+ * highlight (wrapping at the ends), `Enter` selects, `Ctrl+C` cancels. When `defaultValue`
122
+ * matches a choice, the menu starts on it. The cursor is hidden while the menu is active
123
+ * and restored afterward.
124
+ */
125
+ select(message, choices, defaultValue) {
126
+ return __awaiter(this, void 0, void 0, function* () {
127
+ if (choices.length === 0) {
128
+ throw new Error("CliPrompt.select requires at least one choice.");
129
+ }
130
+ const defaultIndex = choices.findIndex((choice) => choice.value === defaultValue);
131
+ let active = defaultIndex >= 0 ? defaultIndex : 0;
132
+ process.stdout.write(CliPrompt_1.HIDE_CURSOR);
133
+ process.stdout.write(`${CliPrompt_1.CYAN}?${CliPrompt_1.RESET} ${message}\n`);
134
+ this.renderChoices(choices, active);
135
+ try {
136
+ return yield this.terminalKeyReader.read((key, resolve) => {
137
+ if (key.name === TerminalKeyName.Up) {
138
+ active = (active - 1 + choices.length) % choices.length;
139
+ this.repaintChoices(choices, active);
140
+ }
141
+ else if (key.name === TerminalKeyName.Down) {
142
+ active = (active + 1) % choices.length;
143
+ this.repaintChoices(choices, active);
144
+ }
145
+ else if (key.name === TerminalKeyName.Enter) {
146
+ resolve(choices[active].value);
147
+ }
148
+ });
149
+ }
150
+ finally {
151
+ process.stdout.write(CliPrompt_1.SHOW_CURSOR);
152
+ }
153
+ });
154
+ }
155
+ /**
156
+ * Reads a secret (password, token, …) from stdin with the typed characters masked as `*`.
157
+ * Real keystroke suppression via raw mode (unlike {@link readLine}'s post-input clear):
158
+ * each character echoes a `*`, `Backspace` erases one, `Enter` submits, `Ctrl+C` cancels.
159
+ * The value is returned untrimmed — a secret may legitimately contain surrounding
160
+ * whitespace.
161
+ */
162
+ readSecret(question) {
163
+ return __awaiter(this, void 0, void 0, function* () {
164
+ process.stdout.write(question);
165
+ let value = "";
166
+ try {
167
+ yield this.terminalKeyReader.read((key, resolve) => {
168
+ if (key.name === TerminalKeyName.Enter) {
169
+ resolve(undefined);
170
+ }
171
+ else if (key.name === TerminalKeyName.Backspace) {
172
+ if (value.length > 0) {
173
+ value = value.slice(0, -1);
174
+ process.stdout.write("\b \b");
175
+ }
176
+ }
177
+ else if (key.name === TerminalKeyName.Character) {
178
+ value += key.sequence;
179
+ process.stdout.write("*");
180
+ }
181
+ });
182
+ }
183
+ finally {
184
+ process.stdout.write("\n");
185
+ }
186
+ return value;
187
+ });
188
+ }
189
+ /**
190
+ * Writes the choice rows, highlighting the active one with a colored pointer. Each row is
191
+ * cleared before it's written so a repaint never leaves a longer previous label behind.
192
+ * @private
193
+ */
194
+ renderChoices(choices, active) {
195
+ choices.forEach((choice, index) => {
196
+ clearLine(process.stdout, 0);
197
+ cursorTo(process.stdout, 0);
198
+ if (index === active) {
199
+ process.stdout.write(`${CliPrompt_1.CYAN}${CliPrompt_1.POINTER} ${choice.name}${CliPrompt_1.RESET}\n`);
200
+ }
201
+ else {
202
+ process.stdout.write(` ${choice.name}\n`);
203
+ }
204
+ });
205
+ }
206
+ /**
207
+ * Moves the cursor back up over the previously-rendered choice rows and rewrites them, so
208
+ * the menu updates in place as the selection moves.
209
+ * @private
210
+ */
211
+ repaintChoices(choices, active) {
212
+ moveCursor(process.stdout, 0, -choices.length);
213
+ this.renderChoices(choices, active);
214
+ }
57
215
  };
58
- CliPrompt = __decorate([
216
+ // ANSI constants, matching the conventions used by CliSpinner / CliProgressBar.
217
+ CliPrompt.CYAN = "\x1b[36m";
218
+ CliPrompt.DIM = "\x1b[2m";
219
+ CliPrompt.RESET = "\x1b[0m";
220
+ CliPrompt.HIDE_CURSOR = "\x1B[?25l";
221
+ CliPrompt.SHOW_CURSOR = "\x1B[?25h";
222
+ CliPrompt.POINTER = "❯";
223
+ CliPrompt = CliPrompt_1 = __decorate([
59
224
  injectable(),
60
- moduleScoped(CliModuleKeyname)
225
+ moduleScoped(CliModuleKeyname),
226
+ __metadata("design:paramtypes", [TerminalKeyReader])
61
227
  ], CliPrompt);
62
228
  export { CliPrompt };
63
229
  //# sourceMappingURL=cli-prompt.manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-prompt.manager.js","sourceRoot":"","sources":["../../../../src/managers/cli-prompt.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAC,UAAU,EAAE,SAAS,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAC,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAC,sBAAsB,EAAC,MAAM,qCAAqC,CAAC;AAE3E;;;GAGG;AAGI,IAAM,SAAS,GAAf,MAAM,SAAS;IAEpB;;;OAGG;IACH,IAAI;QACF,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAY,CAAC;IACxC,CAAC;IAED;;;;;;;;OAQG;IACG,QAAQ;6DAAC,QAAgB,EAAE,UAAkC,IAAI,sBAAsB,EAAE;YAC7F,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE3C,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;gBACpC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1B,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,aAAa,CAAC,CAAC;YACjD,CAAC;YAED,EAAE,CAAC,KAAK,EAAE,CAAC;YAEX,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;CACF,CAAA;AAlCY,SAAS;IAFrB,UAAU,EAAE;IACZ,YAAY,CAAC,gBAAgB,CAAC;GAClB,SAAS,CAkCrB"}
1
+ {"version":3,"file":"cli-prompt.manager.js","sourceRoot":"","sources":["../../../../src/managers/cli-prompt.manager.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,6 @@ export * from "./cli-output.manager";
2
2
  export * from "./cli-progress-bar.manager";
3
3
  export * from "./cli-prompt.manager";
4
4
  export * from "./cli-spinner.manager";
5
+ export * from "./terminal-key-reader.manager";
5
6
  export * from "./shell.manager";
6
7
  //# sourceMappingURL=managers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC"}