@pristine-ts/cli 2.0.6 → 2.0.16

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 (342) hide show
  1. package/dist/lib/cjs/bin.js +0 -0
  2. package/dist/lib/cjs/bootstrap/app-module-cache.js +71 -0
  3. package/dist/lib/cjs/bootstrap/app-module-cache.js.map +1 -0
  4. package/dist/lib/cjs/bootstrap/app-module-discoverer.js +119 -0
  5. package/dist/lib/cjs/bootstrap/app-module-discoverer.js.map +1 -0
  6. package/dist/lib/cjs/bootstrap/app-module-discovery-candidate.js +21 -0
  7. package/dist/lib/cjs/bootstrap/app-module-discovery-candidate.js.map +1 -0
  8. package/dist/lib/cjs/bootstrap/app-module-discovery-reason.enum.js +15 -0
  9. package/dist/lib/cjs/bootstrap/app-module-discovery-reason.enum.js.map +1 -0
  10. package/dist/lib/cjs/bootstrap/app-module-prompt.js +78 -0
  11. package/dist/lib/cjs/bootstrap/app-module-prompt.js.map +1 -0
  12. package/dist/lib/cjs/bootstrap/build-runner.js +1 -1
  13. package/dist/lib/cjs/bootstrap/build-staleness-prompt.js +12 -13
  14. package/dist/lib/cjs/bootstrap/build-staleness-prompt.js.map +1 -1
  15. package/dist/lib/cjs/bootstrap/init-prompt.js +16 -47
  16. package/dist/lib/cjs/bootstrap/init-prompt.js.map +1 -1
  17. package/dist/lib/cjs/cli.configuration-keys.js +24 -0
  18. package/dist/lib/cjs/cli.configuration-keys.js.map +1 -0
  19. package/dist/lib/cjs/cli.js +23 -10
  20. package/dist/lib/cjs/cli.js.map +1 -1
  21. package/dist/lib/cjs/cli.module.js +41 -8
  22. package/dist/lib/cjs/cli.module.js.map +1 -1
  23. package/dist/lib/cjs/commands/build.command.js +15 -14
  24. package/dist/lib/cjs/commands/build.command.js.map +1 -1
  25. package/dist/lib/cjs/commands/commands.js +6 -0
  26. package/dist/lib/cjs/commands/commands.js.map +1 -1
  27. package/dist/lib/cjs/commands/config-init.command.js +133 -0
  28. package/dist/lib/cjs/commands/config-init.command.js.map +1 -0
  29. package/dist/lib/cjs/commands/config-print.command.js +16 -11
  30. package/dist/lib/cjs/commands/config-print.command.js.map +1 -1
  31. package/dist/lib/cjs/commands/help.command.js +17 -17
  32. package/dist/lib/cjs/commands/help.command.js.map +1 -1
  33. package/dist/lib/cjs/commands/info.command.js +26 -21
  34. package/dist/lib/cjs/commands/info.command.js.map +1 -1
  35. package/dist/lib/cjs/commands/init.command.js +22 -21
  36. package/dist/lib/cjs/commands/init.command.js.map +1 -1
  37. package/dist/lib/cjs/commands/list.command.js +6 -6
  38. package/dist/lib/cjs/commands/list.command.js.map +1 -1
  39. package/dist/lib/cjs/commands/logs-alias.command.js +49 -0
  40. package/dist/lib/cjs/commands/logs-alias.command.js.map +1 -0
  41. package/dist/lib/cjs/commands/logs.command-options.js +72 -0
  42. package/dist/lib/cjs/commands/logs.command-options.js.map +1 -0
  43. package/dist/lib/cjs/commands/logs.command.js +102 -0
  44. package/dist/lib/cjs/commands/logs.command.js.map +1 -0
  45. package/dist/lib/cjs/commands/requests-alias.command.js +49 -0
  46. package/dist/lib/cjs/commands/requests-alias.command.js.map +1 -0
  47. package/dist/lib/cjs/commands/requests.command-options.js +26 -0
  48. package/dist/lib/cjs/commands/requests.command-options.js.map +1 -0
  49. package/dist/lib/cjs/commands/requests.command.js +88 -0
  50. package/dist/lib/cjs/commands/requests.command.js.map +1 -0
  51. package/dist/lib/cjs/commands/start.command.js +12 -13
  52. package/dist/lib/cjs/commands/start.command.js.map +1 -1
  53. package/dist/lib/cjs/commands/trace-alias.command.js +49 -0
  54. package/dist/lib/cjs/commands/trace-alias.command.js.map +1 -0
  55. package/dist/lib/cjs/commands/trace.command-options.js +59 -0
  56. package/dist/lib/cjs/commands/trace.command-options.js.map +1 -0
  57. package/dist/lib/cjs/commands/trace.command.js +84 -0
  58. package/dist/lib/cjs/commands/trace.command.js.map +1 -0
  59. package/dist/lib/cjs/config/config-loader.js +34 -13
  60. package/dist/lib/cjs/config/config-loader.js.map +1 -1
  61. package/dist/lib/cjs/decorators/command-parameter.decorator.js +40 -0
  62. package/dist/lib/cjs/decorators/command-parameter.decorator.js.map +1 -0
  63. package/dist/lib/cjs/decorators/decorators.js +18 -0
  64. package/dist/lib/cjs/decorators/decorators.js.map +1 -0
  65. package/dist/lib/cjs/enums/cli-decorator-metadata-keyname.enum.js +14 -0
  66. package/dist/lib/cjs/enums/cli-decorator-metadata-keyname.enum.js.map +1 -0
  67. package/dist/lib/cjs/enums/enums.js +19 -0
  68. package/dist/lib/cjs/enums/enums.js.map +1 -0
  69. package/dist/lib/cjs/enums/exit-code.enum.js +9 -0
  70. package/dist/lib/cjs/enums/exit-code.enum.js.map +1 -0
  71. package/dist/lib/cjs/enums/terminal-key-name.enum.js +21 -0
  72. package/dist/lib/cjs/enums/terminal-key-name.enum.js.map +1 -0
  73. package/dist/lib/cjs/errors/cli-error-code.enum.js +11 -1
  74. package/dist/lib/cjs/errors/cli-error-code.enum.js.map +1 -1
  75. package/dist/lib/cjs/errors/errors.js +1 -0
  76. package/dist/lib/cjs/errors/errors.js.map +1 -1
  77. package/dist/lib/cjs/errors/prompt-cancelled.error.js +25 -0
  78. package/dist/lib/cjs/errors/prompt-cancelled.error.js.map +1 -0
  79. package/dist/lib/cjs/event-handlers/cli.event-handler.js +28 -70
  80. package/dist/lib/cjs/event-handlers/cli.event-handler.js.map +1 -1
  81. package/dist/lib/cjs/event-handlers/event-handlers.js +1 -0
  82. package/dist/lib/cjs/event-handlers/event-handlers.js.map +1 -1
  83. package/dist/lib/cjs/event-handlers/repl-start.event-handler.js +280 -0
  84. package/dist/lib/cjs/event-handlers/repl-start.event-handler.js.map +1 -0
  85. package/dist/lib/cjs/event-payloads/event-payloads.js +1 -0
  86. package/dist/lib/cjs/event-payloads/event-payloads.js.map +1 -1
  87. package/dist/lib/cjs/event-payloads/start-repl.event-payload.js +19 -0
  88. package/dist/lib/cjs/event-payloads/start-repl.event-payload.js.map +1 -0
  89. package/dist/lib/cjs/interfaces/interfaces.js +1 -0
  90. package/dist/lib/cjs/interfaces/interfaces.js.map +1 -1
  91. package/dist/lib/cjs/interfaces/terminal-key.interface.js +3 -0
  92. package/dist/lib/cjs/interfaces/terminal-key.interface.js.map +1 -0
  93. package/dist/lib/cjs/managers/cli-output.manager.js +45 -0
  94. package/dist/lib/cjs/managers/cli-output.manager.js.map +1 -0
  95. package/dist/lib/cjs/managers/cli-progress-bar.manager.js +49 -0
  96. package/dist/lib/cjs/managers/cli-progress-bar.manager.js.map +1 -0
  97. package/dist/lib/cjs/managers/cli-prompt.manager.js +265 -0
  98. package/dist/lib/cjs/managers/cli-prompt.manager.js.map +1 -0
  99. package/dist/lib/cjs/managers/cli-spinner.manager.js +93 -0
  100. package/dist/lib/cjs/managers/cli-spinner.manager.js.map +1 -0
  101. package/dist/lib/cjs/managers/managers.js +5 -1
  102. package/dist/lib/cjs/managers/managers.js.map +1 -1
  103. package/dist/lib/cjs/managers/repl-session.js +251 -0
  104. package/dist/lib/cjs/managers/repl-session.js.map +1 -0
  105. package/dist/lib/cjs/managers/shell.manager.js +25 -20
  106. package/dist/lib/cjs/managers/shell.manager.js.map +1 -1
  107. package/dist/lib/cjs/managers/terminal-key-reader.manager.js +99 -0
  108. package/dist/lib/cjs/managers/terminal-key-reader.manager.js.map +1 -0
  109. package/dist/lib/cjs/mappers/command-event.mapper.js +48 -8
  110. package/dist/lib/cjs/mappers/command-event.mapper.js.map +1 -1
  111. package/dist/lib/cjs/mappers/mappers.js +1 -0
  112. package/dist/lib/cjs/mappers/mappers.js.map +1 -1
  113. package/dist/lib/cjs/mappers/repl-start-event.mapper.js +80 -0
  114. package/dist/lib/cjs/mappers/repl-start-event.mapper.js.map +1 -0
  115. package/dist/lib/cjs/options/command-parameter.options.js +3 -0
  116. package/dist/lib/cjs/options/command-parameter.options.js.map +1 -0
  117. package/dist/lib/cjs/options/options.js +1 -0
  118. package/dist/lib/cjs/options/options.js.map +1 -1
  119. package/dist/lib/cjs/services/command-argument-resolver.js +62 -0
  120. package/dist/lib/cjs/services/command-argument-resolver.js.map +1 -0
  121. package/dist/lib/cjs/services/command-options-resolver.js +114 -0
  122. package/dist/lib/cjs/services/command-options-resolver.js.map +1 -0
  123. package/dist/lib/cjs/services/command-parameter-prompter.js +311 -0
  124. package/dist/lib/cjs/services/command-parameter-prompter.js.map +1 -0
  125. package/dist/lib/cjs/services/services.js +20 -0
  126. package/dist/lib/cjs/services/services.js.map +1 -0
  127. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  128. package/dist/lib/cjs/types/start-repl-event-response.type.js +13 -0
  129. package/dist/lib/cjs/types/start-repl-event-response.type.js.map +1 -0
  130. package/dist/lib/cjs/types/types.js +1 -0
  131. package/dist/lib/cjs/types/types.js.map +1 -1
  132. package/dist/lib/cjs/utils/boolean-answer-parser.js +25 -0
  133. package/dist/lib/cjs/utils/boolean-answer-parser.js.map +1 -0
  134. package/dist/lib/cjs/utils/pristine-argv.js +87 -0
  135. package/dist/lib/cjs/utils/pristine-argv.js.map +1 -0
  136. package/dist/lib/cjs/utils/terminal-key-decoder.js +71 -0
  137. package/dist/lib/cjs/utils/terminal-key-decoder.js.map +1 -0
  138. package/dist/lib/esm/bootstrap/app-module-cache.js +65 -0
  139. package/dist/lib/esm/bootstrap/app-module-cache.js.map +1 -0
  140. package/dist/lib/esm/bootstrap/app-module-discoverer.js +113 -0
  141. package/dist/lib/esm/bootstrap/app-module-discoverer.js.map +1 -0
  142. package/dist/lib/esm/bootstrap/app-module-discovery-candidate.js +17 -0
  143. package/dist/lib/esm/bootstrap/app-module-discovery-candidate.js.map +1 -0
  144. package/dist/lib/esm/bootstrap/app-module-discovery-reason.enum.js +12 -0
  145. package/dist/lib/esm/bootstrap/app-module-discovery-reason.enum.js.map +1 -0
  146. package/dist/lib/esm/bootstrap/app-module-prompt.js +75 -0
  147. package/dist/lib/esm/bootstrap/app-module-prompt.js.map +1 -0
  148. package/dist/lib/esm/bootstrap/build-runner.js +1 -1
  149. package/dist/lib/esm/bootstrap/build-staleness-prompt.js +12 -13
  150. package/dist/lib/esm/bootstrap/build-staleness-prompt.js.map +1 -1
  151. package/dist/lib/esm/bootstrap/init-prompt.js +16 -47
  152. package/dist/lib/esm/bootstrap/init-prompt.js.map +1 -1
  153. package/dist/lib/esm/cli.configuration-keys.js +21 -0
  154. package/dist/lib/esm/cli.configuration-keys.js.map +1 -0
  155. package/dist/lib/esm/cli.js +23 -10
  156. package/dist/lib/esm/cli.js.map +1 -1
  157. package/dist/lib/esm/cli.module.js +41 -8
  158. package/dist/lib/esm/cli.module.js.map +1 -1
  159. package/dist/lib/esm/commands/build.command.js +16 -15
  160. package/dist/lib/esm/commands/build.command.js.map +1 -1
  161. package/dist/lib/esm/commands/commands.js +6 -0
  162. package/dist/lib/esm/commands/commands.js.map +1 -1
  163. package/dist/lib/esm/commands/config-init.command.js +127 -0
  164. package/dist/lib/esm/commands/config-init.command.js.map +1 -0
  165. package/dist/lib/esm/commands/config-print.command.js +16 -11
  166. package/dist/lib/esm/commands/config-print.command.js.map +1 -1
  167. package/dist/lib/esm/commands/help.command.js +17 -17
  168. package/dist/lib/esm/commands/help.command.js.map +1 -1
  169. package/dist/lib/esm/commands/info.command.js +27 -22
  170. package/dist/lib/esm/commands/info.command.js.map +1 -1
  171. package/dist/lib/esm/commands/init.command.js +23 -22
  172. package/dist/lib/esm/commands/init.command.js.map +1 -1
  173. package/dist/lib/esm/commands/list.command.js +6 -6
  174. package/dist/lib/esm/commands/list.command.js.map +1 -1
  175. package/dist/lib/esm/commands/logs-alias.command.js +46 -0
  176. package/dist/lib/esm/commands/logs-alias.command.js.map +1 -0
  177. package/dist/lib/esm/commands/logs.command-options.js +68 -0
  178. package/dist/lib/esm/commands/logs.command-options.js.map +1 -0
  179. package/dist/lib/esm/commands/logs.command.js +99 -0
  180. package/dist/lib/esm/commands/logs.command.js.map +1 -0
  181. package/dist/lib/esm/commands/requests-alias.command.js +46 -0
  182. package/dist/lib/esm/commands/requests-alias.command.js.map +1 -0
  183. package/dist/lib/esm/commands/requests.command-options.js +22 -0
  184. package/dist/lib/esm/commands/requests.command-options.js.map +1 -0
  185. package/dist/lib/esm/commands/requests.command.js +85 -0
  186. package/dist/lib/esm/commands/requests.command.js.map +1 -0
  187. package/dist/lib/esm/commands/start.command.js +13 -14
  188. package/dist/lib/esm/commands/start.command.js.map +1 -1
  189. package/dist/lib/esm/commands/trace-alias.command.js +46 -0
  190. package/dist/lib/esm/commands/trace-alias.command.js.map +1 -0
  191. package/dist/lib/esm/commands/trace.command-options.js +55 -0
  192. package/dist/lib/esm/commands/trace.command-options.js.map +1 -0
  193. package/dist/lib/esm/commands/trace.command.js +81 -0
  194. package/dist/lib/esm/commands/trace.command.js.map +1 -0
  195. package/dist/lib/esm/config/config-loader.js +34 -13
  196. package/dist/lib/esm/config/config-loader.js.map +1 -1
  197. package/dist/lib/esm/decorators/command-parameter.decorator.js +36 -0
  198. package/dist/lib/esm/decorators/command-parameter.decorator.js.map +1 -0
  199. package/dist/lib/esm/decorators/decorators.js +2 -0
  200. package/dist/lib/esm/decorators/decorators.js.map +1 -0
  201. package/dist/lib/esm/enums/cli-decorator-metadata-keyname.enum.js +11 -0
  202. package/dist/lib/esm/enums/cli-decorator-metadata-keyname.enum.js.map +1 -0
  203. package/dist/lib/esm/enums/enums.js +3 -0
  204. package/dist/lib/esm/enums/enums.js.map +1 -0
  205. package/dist/lib/esm/enums/exit-code.enum.js +6 -0
  206. package/dist/lib/esm/enums/exit-code.enum.js.map +1 -0
  207. package/dist/lib/esm/enums/terminal-key-name.enum.js +18 -0
  208. package/dist/lib/esm/enums/terminal-key-name.enum.js.map +1 -0
  209. package/dist/lib/esm/errors/cli-error-code.enum.js +11 -1
  210. package/dist/lib/esm/errors/cli-error-code.enum.js.map +1 -1
  211. package/dist/lib/esm/errors/errors.js +1 -0
  212. package/dist/lib/esm/errors/errors.js.map +1 -1
  213. package/dist/lib/esm/errors/prompt-cancelled.error.js +21 -0
  214. package/dist/lib/esm/errors/prompt-cancelled.error.js.map +1 -0
  215. package/dist/lib/esm/event-handlers/cli.event-handler.js +29 -71
  216. package/dist/lib/esm/event-handlers/cli.event-handler.js.map +1 -1
  217. package/dist/lib/esm/event-handlers/event-handlers.js +1 -0
  218. package/dist/lib/esm/event-handlers/event-handlers.js.map +1 -1
  219. package/dist/lib/esm/event-handlers/repl-start.event-handler.js +244 -0
  220. package/dist/lib/esm/event-handlers/repl-start.event-handler.js.map +1 -0
  221. package/dist/lib/esm/event-payloads/event-payloads.js +1 -0
  222. package/dist/lib/esm/event-payloads/event-payloads.js.map +1 -1
  223. package/dist/lib/esm/event-payloads/start-repl.event-payload.js +15 -0
  224. package/dist/lib/esm/event-payloads/start-repl.event-payload.js.map +1 -0
  225. package/dist/lib/esm/interfaces/interfaces.js +1 -0
  226. package/dist/lib/esm/interfaces/interfaces.js.map +1 -1
  227. package/dist/lib/esm/interfaces/terminal-key.interface.js +2 -0
  228. package/dist/lib/esm/interfaces/terminal-key.interface.js.map +1 -0
  229. package/dist/lib/esm/managers/cli-output.manager.js +42 -0
  230. package/dist/lib/esm/managers/cli-output.manager.js.map +1 -0
  231. package/dist/lib/esm/managers/cli-progress-bar.manager.js +46 -0
  232. package/dist/lib/esm/managers/cli-progress-bar.manager.js.map +1 -0
  233. package/dist/lib/esm/managers/cli-prompt.manager.js +229 -0
  234. package/dist/lib/esm/managers/cli-prompt.manager.js.map +1 -0
  235. package/dist/lib/esm/managers/cli-spinner.manager.js +90 -0
  236. package/dist/lib/esm/managers/cli-spinner.manager.js.map +1 -0
  237. package/dist/lib/esm/managers/managers.js +5 -1
  238. package/dist/lib/esm/managers/managers.js.map +1 -1
  239. package/dist/lib/esm/managers/repl-session.js +215 -0
  240. package/dist/lib/esm/managers/repl-session.js.map +1 -0
  241. package/dist/lib/esm/managers/shell.manager.js +26 -21
  242. package/dist/lib/esm/managers/shell.manager.js.map +1 -1
  243. package/dist/lib/esm/managers/terminal-key-reader.manager.js +96 -0
  244. package/dist/lib/esm/managers/terminal-key-reader.manager.js.map +1 -0
  245. package/dist/lib/esm/mappers/command-event.mapper.js +49 -9
  246. package/dist/lib/esm/mappers/command-event.mapper.js.map +1 -1
  247. package/dist/lib/esm/mappers/mappers.js +1 -0
  248. package/dist/lib/esm/mappers/mappers.js.map +1 -1
  249. package/dist/lib/esm/mappers/repl-start-event.mapper.js +77 -0
  250. package/dist/lib/esm/mappers/repl-start-event.mapper.js.map +1 -0
  251. package/dist/lib/esm/options/command-parameter.options.js +2 -0
  252. package/dist/lib/esm/options/command-parameter.options.js.map +1 -0
  253. package/dist/lib/esm/options/options.js +1 -0
  254. package/dist/lib/esm/options/options.js.map +1 -1
  255. package/dist/lib/esm/services/command-argument-resolver.js +59 -0
  256. package/dist/lib/esm/services/command-argument-resolver.js.map +1 -0
  257. package/dist/lib/esm/services/command-options-resolver.js +111 -0
  258. package/dist/lib/esm/services/command-options-resolver.js.map +1 -0
  259. package/dist/lib/esm/services/command-parameter-prompter.js +308 -0
  260. package/dist/lib/esm/services/command-parameter-prompter.js.map +1 -0
  261. package/dist/lib/esm/services/services.js +4 -0
  262. package/dist/lib/esm/services/services.js.map +1 -0
  263. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
  264. package/dist/lib/esm/types/start-repl-event-response.type.js +9 -0
  265. package/dist/lib/esm/types/start-repl-event-response.type.js.map +1 -0
  266. package/dist/lib/esm/types/types.js +1 -0
  267. package/dist/lib/esm/types/types.js.map +1 -1
  268. package/dist/lib/esm/utils/boolean-answer-parser.js +21 -0
  269. package/dist/lib/esm/utils/boolean-answer-parser.js.map +1 -0
  270. package/dist/lib/esm/utils/pristine-argv.js +50 -0
  271. package/dist/lib/esm/utils/pristine-argv.js.map +1 -0
  272. package/dist/lib/esm/utils/terminal-key-decoder.js +67 -0
  273. package/dist/lib/esm/utils/terminal-key-decoder.js.map +1 -0
  274. package/dist/types/bootstrap/app-module-cache.d.ts +15 -0
  275. package/dist/types/bootstrap/app-module-discoverer.d.ts +30 -0
  276. package/dist/types/bootstrap/app-module-discovery-candidate.d.ts +18 -0
  277. package/dist/types/bootstrap/app-module-discovery-reason.enum.d.ts +10 -0
  278. package/dist/types/bootstrap/app-module-prompt.d.ts +20 -0
  279. package/dist/types/bootstrap/build-runner.d.ts +1 -1
  280. package/dist/types/bootstrap/build-staleness-prompt.d.ts +3 -3
  281. package/dist/types/bootstrap/init-prompt.d.ts +5 -5
  282. package/dist/types/cli.configuration-keys.d.ts +32 -0
  283. package/dist/types/cli.d.ts +8 -4
  284. package/dist/types/cli.module.d.ts +4 -0
  285. package/dist/types/commands/build.command.d.ts +3 -3
  286. package/dist/types/commands/commands.d.ts +6 -0
  287. package/dist/types/commands/config-init.command.d.ts +18 -0
  288. package/dist/types/commands/config-print.command.d.ts +8 -3
  289. package/dist/types/commands/help.command.d.ts +3 -3
  290. package/dist/types/commands/info.command.d.ts +5 -3
  291. package/dist/types/commands/init.command.d.ts +3 -3
  292. package/dist/types/commands/list.command.d.ts +3 -3
  293. package/dist/types/commands/logs-alias.command.d.ts +14 -0
  294. package/dist/types/commands/logs.command-options.d.ts +38 -0
  295. package/dist/types/commands/logs.command.d.ts +31 -0
  296. package/dist/types/commands/requests-alias.command.d.ts +14 -0
  297. package/dist/types/commands/requests.command-options.d.ts +8 -0
  298. package/dist/types/commands/requests.command.d.ts +25 -0
  299. package/dist/types/commands/start.command.d.ts +3 -3
  300. package/dist/types/commands/trace-alias.command.d.ts +14 -0
  301. package/dist/types/commands/trace.command-options.d.ts +31 -0
  302. package/dist/types/commands/trace.command.d.ts +21 -0
  303. package/dist/types/config/config-loader.d.ts +15 -3
  304. package/dist/types/decorators/command-parameter.decorator.d.ts +30 -0
  305. package/dist/types/decorators/decorators.d.ts +1 -0
  306. package/dist/types/enums/cli-decorator-metadata-keyname.enum.d.ts +9 -0
  307. package/dist/types/enums/enums.d.ts +2 -0
  308. package/dist/types/enums/exit-code.enum.d.ts +4 -0
  309. package/dist/types/enums/terminal-key-name.enum.d.ts +16 -0
  310. package/dist/types/errors/cli-error-code.enum.d.ts +12 -2
  311. package/dist/types/errors/errors.d.ts +1 -0
  312. package/dist/types/errors/prompt-cancelled.error.d.ts +13 -0
  313. package/dist/types/event-handlers/cli.event-handler.d.ts +16 -15
  314. package/dist/types/event-handlers/event-handlers.d.ts +1 -0
  315. package/dist/types/event-handlers/repl-start.event-handler.d.ts +70 -0
  316. package/dist/types/event-payloads/event-payloads.d.ts +1 -0
  317. package/dist/types/event-payloads/start-repl.event-payload.d.ts +13 -0
  318. package/dist/types/interfaces/interfaces.d.ts +1 -0
  319. package/dist/types/interfaces/terminal-key.interface.d.ts +11 -0
  320. package/dist/types/managers/cli-output.manager.d.ts +21 -0
  321. package/dist/types/managers/cli-progress-bar.manager.d.ts +17 -0
  322. package/dist/types/managers/cli-prompt.manager.d.ts +79 -0
  323. package/dist/types/managers/cli-spinner.manager.d.ts +34 -0
  324. package/dist/types/managers/managers.d.ts +5 -1
  325. package/dist/types/managers/repl-session.d.ts +62 -0
  326. package/dist/types/managers/shell.manager.d.ts +3 -3
  327. package/dist/types/managers/terminal-key-reader.manager.d.ts +31 -0
  328. package/dist/types/mappers/command-event.mapper.d.ts +10 -1
  329. package/dist/types/mappers/mappers.d.ts +1 -0
  330. package/dist/types/mappers/repl-start-event.mapper.d.ts +28 -0
  331. package/dist/types/options/command-parameter.options.d.ts +29 -0
  332. package/dist/types/options/options.d.ts +1 -0
  333. package/dist/types/services/command-argument-resolver.d.ts +24 -0
  334. package/dist/types/services/command-options-resolver.d.ts +35 -0
  335. package/dist/types/services/command-parameter-prompter.d.ts +113 -0
  336. package/dist/types/services/services.d.ts +3 -0
  337. package/dist/types/types/start-repl-event-response.type.d.ts +10 -0
  338. package/dist/types/types/types.d.ts +1 -0
  339. package/dist/types/utils/boolean-answer-parser.d.ts +11 -0
  340. package/dist/types/utils/pristine-argv.d.ts +33 -0
  341. package/dist/types/utils/terminal-key-decoder.d.ts +28 -0
  342. package/package.json +16 -12
@@ -0,0 +1,9 @@
1
+ import { EventResponse } from "@pristine-ts/core";
2
+ /**
3
+ * The response shape produced by `ReplStartEventHandler` when the interactive session
4
+ * ends (`/exit` or EOF). Carries the exit code the bin should pass to `process.exit`,
5
+ * surfaced through `ReplStartEventMapper.reverseMap`.
6
+ */
7
+ export class StartReplEventResponse extends EventResponse {
8
+ }
9
+ //# sourceMappingURL=start-repl-event-response.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-repl-event-response.type.js","sourceRoot":"","sources":["../../../../src/types/start-repl-event-response.type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAIhD;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAAuD;CAClG"}
@@ -1,3 +1,4 @@
1
1
  export * from "./command-event.type";
2
2
  export * from "./command-event-response.type";
3
+ export * from "./start-repl-event-response.type";
3
4
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Interprets a free-text answer as a boolean the way traditional CLIs do — accepting
3
+ * `y`/`yes`/`true`/`1` and `n`/`no`/`false`/`0` (case-insensitive, surrounding whitespace
4
+ * ignored). Returns `undefined` for anything unrecognized so callers can re-ask.
5
+ *
6
+ * Shared by `CliPrompt.confirm` (yes/no prompts) and `CommandParameterPrompter` (typed
7
+ * boolean parameters) so both accept exactly the same set of answers.
8
+ */
9
+ export class BooleanAnswerParser {
10
+ static parse(raw) {
11
+ const normalized = raw.trim().toLowerCase();
12
+ if (normalized === "y" || normalized === "yes" || normalized === "true" || normalized === "1") {
13
+ return true;
14
+ }
15
+ if (normalized === "n" || normalized === "no" || normalized === "false" || normalized === "0") {
16
+ return false;
17
+ }
18
+ return undefined;
19
+ }
20
+ }
21
+ //# sourceMappingURL=boolean-answer-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boolean-answer-parser.js","sourceRoot":"","sources":["../../../../src/utils/boolean-answer-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAmB;IAC9B,MAAM,CAAC,KAAK,CAAC,GAAW;QACtB,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9F,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9F,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ import * as path from "path";
2
+ /**
3
+ * Parses an argv array — typically `process.argv` — to locate the pristine bin and
4
+ * extract the user-typed arguments that follow it.
5
+ *
6
+ * Why scan rather than positional-index: argv shape is runtime-dependent. Node and Bun
7
+ * happen to put `[executable, scriptPath, ...userArgs]` today, but a different runtime
8
+ * (or a launcher that prepends flags before the script) can violate that. Locating the
9
+ * bin by name — an element whose basename (stripped of any extension like `.cjs` /
10
+ * `.js` / `.mjs`) is `pristine` — is robust across:
11
+ *
12
+ * - global installs (`pristine repl` → argv contains `/usr/local/.../pristine.cjs`)
13
+ * - local installs (`./node_modules/.bin/pristine`)
14
+ * - `npx pristine`
15
+ * - direct `node dist/bin/pristine.cjs`
16
+ * - alternative runtimes that may shape argv differently
17
+ * - the synthetic argv the REPL handler builds for each typed line
18
+ *
19
+ * Stateless after construction; instantiate per parse.
20
+ */
21
+ export class PristineArgv {
22
+ constructor(rawArgv) {
23
+ const binIndex = rawArgv.findIndex(arg => PristineArgv.isPristineBin(arg));
24
+ if (binIndex === -1) {
25
+ this.scriptPath = "";
26
+ this.userArgs = [];
27
+ return;
28
+ }
29
+ const scriptPath = rawArgv[binIndex];
30
+ this.scriptPath = typeof scriptPath === "string" ? scriptPath : "";
31
+ this.userArgs = rawArgv
32
+ .slice(binIndex + 1)
33
+ .filter((arg) => typeof arg === "string");
34
+ }
35
+ /**
36
+ * True when the argv was recognizable as a pristine invocation (the bin token was
37
+ * located). Mappers short-circuit `supportsMapping` on this.
38
+ */
39
+ get isValid() {
40
+ return this.scriptPath !== "";
41
+ }
42
+ static isPristineBin(arg) {
43
+ if (typeof arg !== "string") {
44
+ return false;
45
+ }
46
+ return path.basename(arg, path.extname(arg)) === PristineArgv.BIN_NAME;
47
+ }
48
+ }
49
+ PristineArgv.BIN_NAME = "pristine";
50
+ //# sourceMappingURL=pristine-argv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pristine-argv.js","sourceRoot":"","sources":["../../../../src/utils/pristine-argv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,YAAY;IASvB,YAAY,OAA2B;QACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3E,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ,GAAG,OAAO;aACpB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;aACnB,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IAChC,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,GAAY;QACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,YAAY,CAAC,QAAQ,CAAC;IACzE,CAAC;;AAnCuB,qBAAQ,GAAG,UAAU,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { TerminalKeyName } from "../enums/terminal-key-name.enum";
2
+ /**
3
+ * Translates the raw bytes Node delivers from a raw-mode stdin into structured
4
+ * {@link TerminalKey}s. Pure and static so it can be unit-tested without a real TTY.
5
+ *
6
+ * A single `data` chunk can carry more than one keystroke (notably a paste, or fast
7
+ * typing), so this returns an array. Control and escape sequences are recognized as one
8
+ * key each; a run of printable characters is split into one `Character` key per character
9
+ * so callers (masked input, menus) can echo and handle them uniformly.
10
+ */
11
+ export class TerminalKeyDecoder {
12
+ /**
13
+ * Decodes a raw stdin chunk into the keys it represents.
14
+ *
15
+ * - A recognized control byte / escape sequence that spans the whole chunk → one key.
16
+ * - An unrecognized escape sequence (starts with ESC) → a single `Other` key, rather
17
+ * than splitting it into bogus printable characters.
18
+ * - Anything else → one key per character, with non-printable control bytes mapped to
19
+ * `Other` so they're ignored rather than echoed.
20
+ */
21
+ static decode(data) {
22
+ const whole = TerminalKeyDecoder.decodeControl(data);
23
+ if (whole !== undefined) {
24
+ return [whole];
25
+ }
26
+ if (data.charCodeAt(0) === 0x1b) {
27
+ return [{ name: TerminalKeyName.Other, sequence: data }];
28
+ }
29
+ const keys = [];
30
+ for (const character of data) {
31
+ const control = TerminalKeyDecoder.decodeControl(character);
32
+ if (control !== undefined) {
33
+ keys.push(control);
34
+ }
35
+ else if (character.charCodeAt(0) < 0x20) {
36
+ keys.push({ name: TerminalKeyName.Other, sequence: character });
37
+ }
38
+ else {
39
+ keys.push({ name: TerminalKeyName.Character, sequence: character });
40
+ }
41
+ }
42
+ return keys;
43
+ }
44
+ /**
45
+ * Maps a single recognized control byte or escape sequence to its key, or `undefined`
46
+ * when the input isn't one we handle.
47
+ * @private
48
+ */
49
+ static decodeControl(sequence) {
50
+ switch (sequence) {
51
+ case "\x1b[A":
52
+ return { name: TerminalKeyName.Up, sequence };
53
+ case "\x1b[B":
54
+ return { name: TerminalKeyName.Down, sequence };
55
+ case "\r":
56
+ case "\n":
57
+ return { name: TerminalKeyName.Enter, sequence };
58
+ case "\x7f":
59
+ case "\b":
60
+ return { name: TerminalKeyName.Backspace, sequence };
61
+ case "\x03":
62
+ return { name: TerminalKeyName.CtrlC, sequence };
63
+ }
64
+ return undefined;
65
+ }
66
+ }
67
+ //# sourceMappingURL=terminal-key-decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-key-decoder.js","sourceRoot":"","sources":["../../../../src/utils/terminal-key-decoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,EAAC,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,IAAI,GAAkB,EAAE,CAAC;QAC/B,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;iBAAM,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,aAAa,CAAC,QAAgB;QAC3C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO,EAAC,IAAI,EAAE,eAAe,CAAC,EAAE,EAAE,QAAQ,EAAC,CAAC;YAC9C,KAAK,QAAQ;gBACX,OAAO,EAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;YAChD,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACP,OAAO,EAAC,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAC,CAAC;YACjD,KAAK,MAAM,CAAC;YACZ,KAAK,IAAI;gBACP,OAAO,EAAC,IAAI,EAAE,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAC,CAAC;YACrD,KAAK,MAAM;gBACT,OAAO,EAAC,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAC,CAAC;QACnD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Persists the user's selection from the disambiguation prompt so subsequent invocations of
3
+ * `pristine` in the same project skip the prompt. Stale entries (target file deleted since
4
+ * the cache was written) are auto-cleaned on read.
5
+ *
6
+ * Best-effort throughout — failures to read or write the cache file are swallowed because
7
+ * the cache is a UX optimization, not correctness-critical.
8
+ */
9
+ export declare class AppModuleCache {
10
+ private readonly cacheDirName;
11
+ private readonly cacheFileName;
12
+ read(projectRoot: string): string | undefined;
13
+ write(projectRoot: string, absolutePath: string): void;
14
+ private cachePath;
15
+ }
@@ -0,0 +1,30 @@
1
+ import { AppModuleDiscoveryCandidate } from "./app-module-discovery-candidate";
2
+ /**
3
+ * Scans well-known directories for files that look like AppModule definitions. Non-recursive
4
+ * (each search root is scanned at depth 1 only) so it stays fast on large repos and predictable
5
+ * when users have many nested module files.
6
+ *
7
+ * A file is a candidate when:
8
+ * - its filename matches `*.module.{js,mjs,cjs}` (and is not a test/spec file), AND
9
+ * - either the filename literally matches `app.module.{js,mjs,cjs}` (highest confidence,
10
+ * scored 0), OR the file's exports include a symbol named `AppModule` (scored 10).
11
+ */
12
+ export declare class AppModuleDiscoverer {
13
+ /**
14
+ * Search roots scanned for candidates, relative to the project root. Order is intentional:
15
+ * compiled output first (most likely runtime entry), then build/, then the project root
16
+ * itself for trivial single-file demos.
17
+ */
18
+ private readonly searchRoots;
19
+ private readonly moduleFileRegex;
20
+ private readonly appModuleNameRegex;
21
+ discover(projectRoot: string): Promise<AppModuleDiscoveryCandidate[]>;
22
+ /**
23
+ * Synchronous probe: does this file's exports include an `AppModule` symbol? Uses
24
+ * `require()` rather than dynamic `import()` because (a) we only accept `.js/.mjs/.cjs`
25
+ * whose CJS variants load synchronously, and (b) discarded probes shouldn't hold open
26
+ * `import()` promises.
27
+ * @private
28
+ */
29
+ private exportsAppModule;
30
+ }
@@ -0,0 +1,18 @@
1
+ import { AppModuleDiscoveryReasonEnum } from "./app-module-discovery-reason.enum";
2
+ /**
3
+ * A plausible AppModule found by the convention-based scan. Lower `score` beats higher;
4
+ * ties are ambiguous and trigger the disambiguation prompt.
5
+ */
6
+ export declare class AppModuleDiscoveryCandidate {
7
+ readonly absolutePath: string;
8
+ /** Path relative to the project root. Used purely for human-facing display. */
9
+ readonly displayPath: string;
10
+ /** Lower = better. Files literally named `app.module.*` get 0; AppModule-exporting `*.module.*` files get 10. */
11
+ readonly score: number;
12
+ readonly reason: AppModuleDiscoveryReasonEnum;
13
+ constructor(absolutePath: string,
14
+ /** Path relative to the project root. Used purely for human-facing display. */
15
+ displayPath: string,
16
+ /** Lower = better. Files literally named `app.module.*` get 0; AppModule-exporting `*.module.*` files get 10. */
17
+ score: number, reason: AppModuleDiscoveryReasonEnum);
18
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Why a candidate file was considered a possible AppModule. Used by the disambiguation prompt
3
+ * so the user sees "(matches app.module.*)" vs "(exports AppModule)" alongside each option.
4
+ */
5
+ export declare enum AppModuleDiscoveryReasonEnum {
6
+ /** The filename matches `app.module.{js,mjs,cjs}`. Highest confidence. */
7
+ Named = "named",
8
+ /** The filename is `*.module.{js,mjs,cjs}` and the file's exports include an `AppModule` symbol. */
9
+ Exports = "exports"
10
+ }
@@ -0,0 +1,20 @@
1
+ import { AppModuleDiscoveryCandidate } from "./app-module-discovery-candidate";
2
+ import { DynamicImporter } from "./dynamic-importer";
3
+ /**
4
+ * TTY disambiguation for the AppModule discovery cascade. When multiple equally-ranked
5
+ * candidates exist and stdin/stdout are both connected to a real terminal, ask the user
6
+ * to pick one. When non-interactive (CI, Docker, redirected stdin), the caller should
7
+ * fall back to throwing an actionable error rather than guessing.
8
+ *
9
+ * `@inquirer/prompts` is dynamic-imported through `DynamicImporter` so the prompt UI
10
+ * dependency only loads when actually prompting — keeps non-interactive startup fast and
11
+ * avoids paying for inquirer's TTY-detection overhead on every invocation.
12
+ */
13
+ export declare class AppModulePrompt {
14
+ private readonly dynamicImporter;
15
+ private readonly cancelLabel;
16
+ constructor(dynamicImporter: DynamicImporter);
17
+ isInteractive(): boolean;
18
+ prompt(candidates: AppModuleDiscoveryCandidate[]): Promise<string | undefined>;
19
+ private reasonLabel;
20
+ }
@@ -4,7 +4,7 @@
4
4
  * inline avoids the awkward "exit, ask the user to type a command, re-enter" loop.
5
5
  *
6
6
  * Spawning rather than dispatching to `BuildCommand` directly keeps `AppModuleLoader` free
7
- * of the build pipeline's dependency graph (ConsoleManager, ShellManager, etc.) which only
7
+ * of the build pipeline's dependency graph (LogHandler, ShellManager, CliOutput, etc.) which only
8
8
  * exists in the kernel container — and the kernel hasn't booted yet at the point this is
9
9
  * called. The subprocess re-bootstraps the kernel cleanly with all of those services.
10
10
  *
@@ -1,5 +1,5 @@
1
1
  import { BuildManifestStalenessEnum } from "./build-manifest-staleness.enum";
2
- import { DynamicImporter } from "./dynamic-importer";
2
+ import { CliPrompt } from "../managers/cli-prompt.manager";
3
3
  /**
4
4
  * When the build manifest is stale (source edited, output missing, etc.), `AppModuleLoader`
5
5
  * stops the load and consults this prompt. In a TTY, asks the user whether to run
@@ -10,9 +10,9 @@ import { DynamicImporter } from "./dynamic-importer";
10
10
  * this class stays small and testable.
11
11
  */
12
12
  export declare class BuildStalenessPrompt {
13
- private readonly dynamicImporter;
13
+ private readonly cliPrompt;
14
14
  private readonly promptMessage;
15
- constructor(dynamicImporter: DynamicImporter);
15
+ constructor(cliPrompt: CliPrompt);
16
16
  isInteractive(): boolean;
17
17
  /**
18
18
  * Renders a one-line explanation of why the manifest is stale. Used by both the prompt
@@ -1,4 +1,4 @@
1
- import { DynamicImporter } from "./dynamic-importer";
1
+ import { CliPrompt } from "../managers/cli-prompt.manager";
2
2
  /**
3
3
  * Answers the init flow needs to gather. Each field corresponds to one config value that
4
4
  * `pristine.config.ts` will end up with. The init command resolves these from CLI flags
@@ -13,8 +13,8 @@ export interface InitAnswers {
13
13
  writePackageScripts: boolean;
14
14
  }
15
15
  /**
16
- * Interactive Q&A for `pristine init`. Lazy-loads `@inquirer/prompts` so the dep cost is
17
- * only paid when actually prompting (the same pattern as `BuildStalenessPrompt` uses).
16
+ * Interactive Q&A for `pristine init`. Prompts through {@link CliPrompt}, the CLI's native
17
+ * (no third-party dependency) terminal-prompt manager.
18
18
  *
19
19
  * Each method takes a "current value" so callers can pre-fill answers from CLI flags and
20
20
  * only prompt for the gaps. Returning the same value the user passed in is intentional —
@@ -22,12 +22,12 @@ export interface InitAnswers {
22
22
  * prompt.
23
23
  */
24
24
  export declare class InitPrompt {
25
- private readonly dynamicImporter;
25
+ private readonly cliPrompt;
26
26
  private readonly defaultSourcePath;
27
27
  private readonly defaultOutputPath;
28
28
  private readonly defaultTsconfig;
29
29
  private readonly defaultFormat;
30
- constructor(dynamicImporter: DynamicImporter);
30
+ constructor(cliPrompt: CliPrompt);
31
31
  isInteractive(): boolean;
32
32
  askSourcePath(current: string | undefined): Promise<string>;
33
33
  askOutputPath(current: string | undefined): Promise<string>;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Typed configuration keys for `@pristine-ts/cli`. Use these constants with `@injectConfig`
3
+ * for autocomplete + rename safety, instead of typing the parameter name as a string.
4
+ *
5
+ * ```ts
6
+ * import {injectConfig} from "@pristine-ts/common";
7
+ * import {CliConfigurationKeys} from "@pristine-ts/cli";
8
+ *
9
+ * constructor(@injectConfig(CliConfigurationKeys.InteractiveParameters) enabled: boolean) {}
10
+ * ```
11
+ */
12
+ export declare const CliConfigurationKeys: {
13
+ /**
14
+ * Whether the CLI may interactively ask for missing command parameters that declare a
15
+ * `question` (via `@commandParameter`). Defaults to `true`; set it to `false` to disable
16
+ * all such prompting (e.g. in CI). Prompting is also skipped automatically whenever the
17
+ * input is not an interactive terminal, regardless of this value.
18
+ */
19
+ readonly InteractiveParameters: "pristine.cli.interactiveParameters";
20
+ };
21
+ /**
22
+ * The expected runtime types for each configuration value defined by `@pristine-ts/cli`. The
23
+ * `@pristine-ts/eslint-plugin` rule `inject-config-type-match` reads the merged map to
24
+ * enforce parameter types on `@injectConfig` calls.
25
+ */
26
+ export interface CliConfigurationValueMap {
27
+ "pristine.cli.interactiveParameters": boolean;
28
+ }
29
+ declare module "@pristine-ts/common" {
30
+ interface PristineConfigurationValueMap extends CliConfigurationValueMap {
31
+ }
32
+ }
@@ -47,11 +47,15 @@ export declare class Cli {
47
47
  */
48
48
  private readEnvironmentFromConfigFile;
49
49
  /**
50
- * Builds a synthetic outer AppModule that imports both the user's AppModule and CliModule.
50
+ * Builds a synthetic outer AppModule that imports the user's AppModule plus `CliModule`
51
+ * — so the CLI's own commands are always registered when the bin is the entry point.
52
+ * `CliModule` itself imports `ObservabilityModule`, so the logs/traces store travels
53
+ * along without being named here.
54
+ *
51
55
  * The wrap is unconditional — the kernel dedupes module imports by keyname, so adding
52
- * CliModule on top of a graph that already contains it is a no-op rather than an error
53
- * or duplicate registration. Cheaper than walking the user's import tree to detect the
54
- * already-present case.
56
+ * `CliModule` on top of a graph that already contains it is a no-op rather than an
57
+ * error or duplicate registration. Cheaper than walking the user's import tree to
58
+ * detect the already-present case.
55
59
  */
56
60
  private wrapWithCliModule;
57
61
  /**
@@ -1,7 +1,10 @@
1
1
  import { ModuleInterface } from "@pristine-ts/common";
2
2
  export * from "./bootstrap/bootstrap";
3
+ export * from "./cli.configuration-keys";
3
4
  export * from "./commands/commands";
4
5
  export * from "./config/config";
6
+ export * from "./decorators/decorators";
7
+ export * from "./enums/enums";
5
8
  export * from "./errors/errors";
6
9
  export * from "./event-handlers/event-handlers";
7
10
  export * from "./event-payloads/event-payloads";
@@ -10,6 +13,7 @@ export * from "./managers/managers";
10
13
  export * from "./mappers/mappers";
11
14
  export * from "./options/options";
12
15
  export * from "./reporters/cli-error.reporter";
16
+ export * from "./services/services";
13
17
  export * from "./types/types";
14
18
  export { Cli } from "./cli";
15
19
  export declare const CliModule: ModuleInterface;
@@ -1,6 +1,6 @@
1
1
  import { ExitCode } from "@pristine-ts/common";
2
+ import { LogHandlerInterface } from "@pristine-ts/logging";
2
3
  import { CommandInterface } from "../interfaces/command.interface";
3
- import { ConsoleManager } from "../managers/console.manager";
4
4
  import { ShellManager } from "../managers/shell.manager";
5
5
  import { ConfigLoader } from "../config/config-loader";
6
6
  import { BuildManifestWriter } from "../bootstrap/build-manifest-writer";
@@ -24,7 +24,7 @@ import { BuildManifestWriter } from "../bootstrap/build-manifest-writer";
24
24
  * - clean: false (set true to wipe outDir before building)
25
25
  */
26
26
  export declare class BuildCommand implements CommandInterface<null> {
27
- private readonly consoleManager;
27
+ private readonly logHandler;
28
28
  private readonly shellManager;
29
29
  private readonly configLoader;
30
30
  private readonly buildManifestWriter;
@@ -33,7 +33,7 @@ export declare class BuildCommand implements CommandInterface<null> {
33
33
  description: string;
34
34
  private readonly defaultTsconfig;
35
35
  private readonly defaultFormat;
36
- constructor(consoleManager: ConsoleManager, shellManager: ShellManager, configLoader: ConfigLoader, buildManifestWriter: BuildManifestWriter);
36
+ constructor(logHandler: LogHandlerInterface, shellManager: ShellManager, configLoader: ConfigLoader, buildManifestWriter: BuildManifestWriter);
37
37
  run(args: any): Promise<ExitCode | number>;
38
38
  private writeManifestIfConfigured;
39
39
  /**
@@ -10,8 +10,14 @@ export * from "./init.command";
10
10
  export * from "./init.command-options";
11
11
  export * from "./list-alias.command";
12
12
  export * from "./list.command";
13
+ export * from "./logs-alias.command";
14
+ export * from "./logs.command";
15
+ export * from "./requests-alias.command";
16
+ export * from "./requests.command";
13
17
  export * from "./start-alias.command";
14
18
  export * from "./start.command";
15
19
  export * from "./start.command-options";
20
+ export * from "./trace-alias.command";
21
+ export * from "./trace.command";
16
22
  export * from "./verify-alias.command";
17
23
  export * from "./verify.command";
@@ -0,0 +1,18 @@
1
+ import { CommandInterface } from "../interfaces/command.interface";
2
+ import { ConsoleManager } from "../managers/console.manager";
3
+ import { ExitCodeEnum } from "../enums/exit-code.enum";
4
+ /**
5
+ * Generates a starter `pristine.config.ts` in the current directory. If the consumer's
6
+ * `package.json` already declares `pristine.appModule.path` or `pristine.appModule.cjsPath`,
7
+ * the value is migrated into the new config and the user is told to remove the old field.
8
+ */
9
+ export declare class ConfigInitCommand implements CommandInterface<null> {
10
+ private readonly consoleManager;
11
+ optionsType: null;
12
+ name: string;
13
+ description: string;
14
+ constructor(consoleManager: ConsoleManager);
15
+ run(args: any): Promise<ExitCodeEnum | number>;
16
+ private detectExistingAppModulePath;
17
+ private renderConfigTemplate;
18
+ }
@@ -1,18 +1,23 @@
1
1
  import { ExitCode } from "@pristine-ts/common";
2
2
  import { CommandInterface } from "../interfaces/command.interface";
3
- import { ConsoleManager } from "../managers/console.manager";
3
+ import { CliOutput } from "../managers/cli-output.manager";
4
4
  import { ConfigLoader } from "../config/config-loader";
5
5
  /**
6
6
  * Prints the resolved Pristine configuration plus where it was loaded from. Useful for
7
7
  * debugging discovery — when `pristine` is doing something unexpected, the first question is
8
8
  * always "which config file did it actually pick up?"
9
+ *
10
+ * This is a report command: its entire output is the report. It goes through `CliOutput`
11
+ * exclusively (not `LogHandler`) so the dump pipes/redirects cleanly — `pristine
12
+ * p:config:print > config.json` must produce a usable file, with no severity gating, no
13
+ * per-line timestamp/icon decoration, and no fan-out to file/Sentry transports.
9
14
  */
10
15
  export declare class ConfigPrintCommand implements CommandInterface<null> {
11
- private readonly consoleManager;
16
+ private readonly cliOutput;
12
17
  private readonly configLoader;
13
18
  optionsType: null;
14
19
  name: string;
15
20
  description: string;
16
- constructor(consoleManager: ConsoleManager, configLoader: ConfigLoader);
21
+ constructor(cliOutput: CliOutput, configLoader: ConfigLoader);
17
22
  run(args: any): Promise<ExitCode | number>;
18
23
  }
@@ -1,7 +1,7 @@
1
1
  import { DependencyContainer } from "tsyringe";
2
2
  import { ExitCode } from "@pristine-ts/common";
3
3
  import { CommandInterface } from "../interfaces/command.interface";
4
- import { ConsoleManager } from "../managers/console.manager";
4
+ import { CliOutput } from "../managers/cli-output.manager";
5
5
  /**
6
6
  * Prints a usage banner plus a one-line summary for every registered command. The output is
7
7
  * generated from the actual `CommandInterface[]` resolved from the current DI container, so
@@ -18,11 +18,11 @@ import { ConsoleManager } from "../managers/console.manager";
18
18
  * by which point every Command-tagged class is fully constructed and cached.
19
19
  */
20
20
  export declare class HelpCommand implements CommandInterface<null> {
21
- private readonly consoleManager;
21
+ private readonly cliOutput;
22
22
  private readonly container;
23
23
  optionsType: null;
24
24
  name: string;
25
25
  description: string;
26
- constructor(consoleManager: ConsoleManager, container: DependencyContainer);
26
+ constructor(cliOutput: CliOutput, container: DependencyContainer);
27
27
  run(args: any): Promise<ExitCode | number>;
28
28
  }
@@ -1,6 +1,7 @@
1
1
  import { ExitCode } from "@pristine-ts/common";
2
+ import { LogHandlerInterface } from "@pristine-ts/logging";
2
3
  import { CommandInterface } from "../interfaces/command.interface";
3
- import { ConsoleManager } from "../managers/console.manager";
4
+ import { CliOutput } from "../managers/cli-output.manager";
4
5
  import { ConfigLoader } from "../config/config-loader";
5
6
  import { AppModuleLoader } from "../bootstrap/app-module-loader";
6
7
  /**
@@ -14,7 +15,8 @@ import { AppModuleLoader } from "../bootstrap/app-module-loader";
14
15
  * prevents `kernel.start()`.
15
16
  */
16
17
  export declare class InfoCommand implements CommandInterface<null> {
17
- private readonly consoleManager;
18
+ private readonly logHandler;
19
+ private readonly cliOutput;
18
20
  private readonly configLoader;
19
21
  private readonly appModuleLoader;
20
22
  optionsType: null;
@@ -26,7 +28,7 @@ export declare class InfoCommand implements CommandInterface<null> {
26
28
  * package.json sits four levels up from dist/lib/cjs/commands/.
27
29
  */
28
30
  private readonly cliPackageJsonPath;
29
- constructor(consoleManager: ConsoleManager, configLoader: ConfigLoader, appModuleLoader: AppModuleLoader);
31
+ constructor(logHandler: LogHandlerInterface, cliOutput: CliOutput, configLoader: ConfigLoader, appModuleLoader: AppModuleLoader);
30
32
  run(args: any): Promise<ExitCode | number>;
31
33
  private printRuntimeBanner;
32
34
  private printConfigSection;
@@ -1,6 +1,6 @@
1
1
  import { ExitCode } from "@pristine-ts/common";
2
+ import { LogHandlerInterface } from "@pristine-ts/logging";
2
3
  import { CommandInterface } from "../interfaces/command.interface";
3
- import { ConsoleManager } from "../managers/console.manager";
4
4
  import { InitCommandOptions } from "./init.command-options";
5
5
  import { InitPrompt } from "../bootstrap/init-prompt";
6
6
  /**
@@ -19,14 +19,14 @@ import { InitPrompt } from "../bootstrap/init-prompt";
19
19
  * Refuses to overwrite an existing `pristine.config.ts` so re-running init is safe.
20
20
  */
21
21
  export declare class InitCommand implements CommandInterface<InitCommandOptions> {
22
- private readonly consoleManager;
22
+ private readonly logHandler;
23
23
  private readonly initPrompt;
24
24
  optionsType: typeof InitCommandOptions;
25
25
  name: string;
26
26
  description: string;
27
27
  private readonly configFileName;
28
28
  private readonly gitignoreEntry;
29
- constructor(consoleManager: ConsoleManager, initPrompt: InitPrompt);
29
+ constructor(logHandler: LogHandlerInterface, initPrompt: InitPrompt);
30
30
  run(args: InitCommandOptions): Promise<ExitCode | number>;
31
31
  /**
32
32
  * Fills in answers from CLI flags first, then prompts (in TTY) for whatever's missing.
@@ -1,18 +1,18 @@
1
1
  import { ExitCode } from "@pristine-ts/common";
2
2
  import { DependencyContainer } from "tsyringe";
3
3
  import { CommandInterface } from "../interfaces/command.interface";
4
- import { ConsoleManager } from "../managers/console.manager";
4
+ import { CliOutput } from "../managers/cli-output.manager";
5
5
  /**
6
6
  * Lists every registered command's name. Like `HelpCommand`, this resolves the command set
7
7
  * lazily inside `run()` via the injected child container to avoid the self-referential cycle
8
8
  * that constructor-time `@injectAll(Command)` would create — see `HelpCommand` for details.
9
9
  */
10
10
  export declare class ListCommand implements CommandInterface<null> {
11
- private readonly consoleManager;
11
+ private readonly cliOutput;
12
12
  private readonly container;
13
13
  optionsType: null;
14
14
  name: string;
15
15
  description: string;
16
- constructor(consoleManager: ConsoleManager, container: DependencyContainer);
16
+ constructor(cliOutput: CliOutput, container: DependencyContainer);
17
17
  run(args: any): Promise<ExitCode | number>;
18
18
  }
@@ -0,0 +1,14 @@
1
+ import { ExitCode } from "@pristine-ts/common";
2
+ import { CommandInterface } from "../interfaces/command.interface";
3
+ import { LogsCommand } from "./logs.command";
4
+ /**
5
+ * Top-level alias for `p:logs`.
6
+ */
7
+ export declare class LogsAliasCommand implements CommandInterface<null> {
8
+ private readonly delegate;
9
+ optionsType: null;
10
+ name: string;
11
+ description: string;
12
+ constructor(delegate: LogsCommand);
13
+ run(args: any): Promise<ExitCode | number>;
14
+ }