@pristine-ts/cli 1.0.440 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/bin/pristine.cjs +7 -0
  2. package/dist/lib/cjs/bin.js +15 -1
  3. package/dist/lib/cjs/bin.js.map +1 -1
  4. package/dist/lib/cjs/bootstrap/app-module-loader.js +321 -0
  5. package/dist/lib/cjs/bootstrap/app-module-loader.js.map +1 -0
  6. package/dist/lib/cjs/bootstrap/bootstrap.js +31 -0
  7. package/dist/lib/cjs/bootstrap/bootstrap.js.map +1 -0
  8. package/dist/lib/cjs/bootstrap/build-manifest-checker.js +67 -0
  9. package/dist/lib/cjs/bootstrap/build-manifest-checker.js.map +1 -0
  10. package/dist/lib/cjs/bootstrap/build-manifest-reader.js +44 -0
  11. package/dist/lib/cjs/bootstrap/build-manifest-reader.js.map +1 -0
  12. package/dist/lib/cjs/bootstrap/build-manifest-staleness.enum.js +23 -0
  13. package/dist/lib/cjs/bootstrap/build-manifest-staleness.enum.js.map +1 -0
  14. package/dist/lib/cjs/bootstrap/build-manifest-writer.js +55 -0
  15. package/dist/lib/cjs/bootstrap/build-manifest-writer.js.map +1 -0
  16. package/dist/lib/cjs/bootstrap/build-manifest.js +31 -0
  17. package/dist/lib/cjs/bootstrap/build-manifest.js.map +1 -0
  18. package/dist/lib/cjs/bootstrap/build-runner.js +44 -0
  19. package/dist/lib/cjs/bootstrap/build-runner.js.map +1 -0
  20. package/dist/lib/cjs/bootstrap/build-staleness-prompt.js +90 -0
  21. package/dist/lib/cjs/bootstrap/build-staleness-prompt.js.map +1 -0
  22. package/dist/lib/cjs/bootstrap/dynamic-importer.js +43 -0
  23. package/dist/lib/cjs/bootstrap/dynamic-importer.js.map +1 -0
  24. package/dist/lib/cjs/bootstrap/init-prompt.js +127 -0
  25. package/dist/lib/cjs/bootstrap/init-prompt.js.map +1 -0
  26. package/dist/lib/cjs/bootstrap/loaded-app-module.js +29 -0
  27. package/dist/lib/cjs/bootstrap/loaded-app-module.js.map +1 -0
  28. package/dist/lib/cjs/bootstrap/loaded-plugin.js +22 -0
  29. package/dist/lib/cjs/bootstrap/loaded-plugin.js.map +1 -0
  30. package/dist/lib/cjs/bootstrap/plugin-loader.js +149 -0
  31. package/dist/lib/cjs/bootstrap/plugin-loader.js.map +1 -0
  32. package/dist/lib/cjs/bootstrap/source-hasher.js +41 -0
  33. package/dist/lib/cjs/bootstrap/source-hasher.js.map +1 -0
  34. package/dist/lib/cjs/cli.js +94 -111
  35. package/dist/lib/cjs/cli.js.map +1 -1
  36. package/dist/lib/cjs/cli.module.js +9 -1
  37. package/dist/lib/cjs/cli.module.js.map +1 -1
  38. package/dist/lib/cjs/commands/build-alias.command.js +50 -0
  39. package/dist/lib/cjs/commands/build-alias.command.js.map +1 -0
  40. package/dist/lib/cjs/commands/build.command.js +173 -0
  41. package/dist/lib/cjs/commands/build.command.js.map +1 -0
  42. package/dist/lib/cjs/commands/commands.js +15 -0
  43. package/dist/lib/cjs/commands/commands.js.map +1 -1
  44. package/dist/lib/cjs/commands/config-print.command.js +75 -0
  45. package/dist/lib/cjs/commands/config-print.command.js.map +1 -0
  46. package/dist/lib/cjs/commands/help-alias.command.js +52 -0
  47. package/dist/lib/cjs/commands/help-alias.command.js.map +1 -0
  48. package/dist/lib/cjs/commands/help.command.js +44 -10
  49. package/dist/lib/cjs/commands/help.command.js.map +1 -1
  50. package/dist/lib/cjs/commands/info-alias.command.js +50 -0
  51. package/dist/lib/cjs/commands/info-alias.command.js.map +1 -0
  52. package/dist/lib/cjs/commands/info.command.js +162 -0
  53. package/dist/lib/cjs/commands/info.command.js.map +1 -0
  54. package/dist/lib/cjs/commands/init-alias.command.js +51 -0
  55. package/dist/lib/cjs/commands/init-alias.command.js.map +1 -0
  56. package/dist/lib/cjs/commands/init.command-options.js +53 -0
  57. package/dist/lib/cjs/commands/init.command-options.js.map +1 -0
  58. package/dist/lib/cjs/commands/init.command.js +249 -0
  59. package/dist/lib/cjs/commands/init.command.js.map +1 -0
  60. package/dist/lib/cjs/commands/list-alias.command.js +50 -0
  61. package/dist/lib/cjs/commands/list-alias.command.js.map +1 -0
  62. package/dist/lib/cjs/commands/list.command.js +7 -1
  63. package/dist/lib/cjs/commands/list.command.js.map +1 -1
  64. package/dist/lib/cjs/commands/start-alias.command.js +51 -0
  65. package/dist/lib/cjs/commands/start-alias.command.js.map +1 -0
  66. package/dist/lib/cjs/commands/start.command-options.js +34 -0
  67. package/dist/lib/cjs/commands/start.command-options.js.map +1 -0
  68. package/dist/lib/cjs/commands/start.command.js +169 -0
  69. package/dist/lib/cjs/commands/start.command.js.map +1 -0
  70. package/dist/lib/cjs/commands/verify-alias.command.js +50 -0
  71. package/dist/lib/cjs/commands/verify-alias.command.js.map +1 -0
  72. package/dist/lib/cjs/commands/verify.command.js +71 -0
  73. package/dist/lib/cjs/commands/verify.command.js.map +1 -0
  74. package/dist/lib/cjs/config/config-loader.js +136 -0
  75. package/dist/lib/cjs/config/config-loader.js.map +1 -0
  76. package/dist/lib/cjs/config/config-provenance.enum.js +15 -0
  77. package/dist/lib/cjs/config/config-provenance.enum.js.map +1 -0
  78. package/dist/lib/cjs/config/config.js +22 -0
  79. package/dist/lib/cjs/config/config.js.map +1 -0
  80. package/dist/lib/cjs/config/define-config.js +18 -0
  81. package/dist/lib/cjs/config/define-config.js.map +1 -0
  82. package/dist/lib/cjs/config/pristine-config.interface.js +3 -0
  83. package/dist/lib/cjs/config/pristine-config.interface.js.map +1 -0
  84. package/dist/lib/cjs/config/resolved-pristine-config.js +25 -0
  85. package/dist/lib/cjs/config/resolved-pristine-config.js.map +1 -0
  86. package/dist/lib/cjs/event-handlers/cli.event-handler.js +69 -48
  87. package/dist/lib/cjs/event-handlers/cli.event-handler.js.map +1 -1
  88. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  89. package/dist/lib/esm/bin.js +15 -1
  90. package/dist/lib/esm/bin.js.map +1 -1
  91. package/dist/lib/esm/bootstrap/app-module-loader.js +315 -0
  92. package/dist/lib/esm/bootstrap/app-module-loader.js.map +1 -0
  93. package/dist/lib/esm/bootstrap/bootstrap.js +15 -0
  94. package/dist/lib/esm/bootstrap/bootstrap.js.map +1 -0
  95. package/dist/lib/esm/bootstrap/build-manifest-checker.js +61 -0
  96. package/dist/lib/esm/bootstrap/build-manifest-checker.js.map +1 -0
  97. package/dist/lib/esm/bootstrap/build-manifest-reader.js +38 -0
  98. package/dist/lib/esm/bootstrap/build-manifest-reader.js.map +1 -0
  99. package/dist/lib/esm/bootstrap/build-manifest-staleness.enum.js +20 -0
  100. package/dist/lib/esm/bootstrap/build-manifest-staleness.enum.js.map +1 -0
  101. package/dist/lib/esm/bootstrap/build-manifest-writer.js +49 -0
  102. package/dist/lib/esm/bootstrap/build-manifest-writer.js.map +1 -0
  103. package/dist/lib/esm/bootstrap/build-manifest.js +27 -0
  104. package/dist/lib/esm/bootstrap/build-manifest.js.map +1 -0
  105. package/dist/lib/esm/bootstrap/build-runner.js +41 -0
  106. package/dist/lib/esm/bootstrap/build-runner.js.map +1 -0
  107. package/dist/lib/esm/bootstrap/build-staleness-prompt.js +87 -0
  108. package/dist/lib/esm/bootstrap/build-staleness-prompt.js.map +1 -0
  109. package/dist/lib/esm/bootstrap/dynamic-importer.js +40 -0
  110. package/dist/lib/esm/bootstrap/dynamic-importer.js.map +1 -0
  111. package/dist/lib/esm/bootstrap/init-prompt.js +124 -0
  112. package/dist/lib/esm/bootstrap/init-prompt.js.map +1 -0
  113. package/dist/lib/esm/bootstrap/loaded-app-module.js +25 -0
  114. package/dist/lib/esm/bootstrap/loaded-app-module.js.map +1 -0
  115. package/dist/lib/esm/bootstrap/loaded-plugin.js +18 -0
  116. package/dist/lib/esm/bootstrap/loaded-plugin.js.map +1 -0
  117. package/dist/lib/esm/bootstrap/plugin-loader.js +143 -0
  118. package/dist/lib/esm/bootstrap/plugin-loader.js.map +1 -0
  119. package/dist/lib/esm/bootstrap/source-hasher.js +35 -0
  120. package/dist/lib/esm/bootstrap/source-hasher.js.map +1 -0
  121. package/dist/lib/esm/cli.js +109 -0
  122. package/dist/lib/esm/cli.js.map +1 -0
  123. package/dist/lib/esm/cli.module.js +7 -0
  124. package/dist/lib/esm/cli.module.js.map +1 -1
  125. package/dist/lib/esm/commands/build-alias.command.js +47 -0
  126. package/dist/lib/esm/commands/build-alias.command.js.map +1 -0
  127. package/dist/lib/esm/commands/build.command.js +167 -0
  128. package/dist/lib/esm/commands/build.command.js.map +1 -0
  129. package/dist/lib/esm/commands/commands.js +15 -0
  130. package/dist/lib/esm/commands/commands.js.map +1 -1
  131. package/dist/lib/esm/commands/config-print.command.js +69 -0
  132. package/dist/lib/esm/commands/config-print.command.js.map +1 -0
  133. package/dist/lib/esm/commands/help-alias.command.js +49 -0
  134. package/dist/lib/esm/commands/help-alias.command.js.map +1 -0
  135. package/dist/lib/esm/commands/help.command.js +44 -10
  136. package/dist/lib/esm/commands/help.command.js.map +1 -1
  137. package/dist/lib/esm/commands/info-alias.command.js +47 -0
  138. package/dist/lib/esm/commands/info-alias.command.js.map +1 -0
  139. package/dist/lib/esm/commands/info.command.js +156 -0
  140. package/dist/lib/esm/commands/info.command.js.map +1 -0
  141. package/dist/lib/esm/commands/init-alias.command.js +48 -0
  142. package/dist/lib/esm/commands/init-alias.command.js.map +1 -0
  143. package/dist/lib/esm/commands/init.command-options.js +49 -0
  144. package/dist/lib/esm/commands/init.command-options.js.map +1 -0
  145. package/dist/lib/esm/commands/init.command.js +243 -0
  146. package/dist/lib/esm/commands/init.command.js.map +1 -0
  147. package/dist/lib/esm/commands/list-alias.command.js +47 -0
  148. package/dist/lib/esm/commands/list-alias.command.js.map +1 -0
  149. package/dist/lib/esm/commands/list.command.js +8 -2
  150. package/dist/lib/esm/commands/list.command.js.map +1 -1
  151. package/dist/lib/esm/commands/start-alias.command.js +48 -0
  152. package/dist/lib/esm/commands/start-alias.command.js.map +1 -0
  153. package/dist/lib/esm/commands/start.command-options.js +30 -0
  154. package/dist/lib/esm/commands/start.command-options.js.map +1 -0
  155. package/dist/lib/esm/commands/start.command.js +166 -0
  156. package/dist/lib/esm/commands/start.command.js.map +1 -0
  157. package/dist/lib/esm/commands/verify-alias.command.js +47 -0
  158. package/dist/lib/esm/commands/verify-alias.command.js.map +1 -0
  159. package/dist/lib/esm/commands/verify.command.js +68 -0
  160. package/dist/lib/esm/commands/verify.command.js.map +1 -0
  161. package/dist/lib/esm/config/config-loader.js +130 -0
  162. package/dist/lib/esm/config/config-loader.js.map +1 -0
  163. package/dist/lib/esm/config/config-provenance.enum.js +12 -0
  164. package/dist/lib/esm/config/config-provenance.enum.js.map +1 -0
  165. package/dist/lib/esm/config/config.js +6 -0
  166. package/dist/lib/esm/config/config.js.map +1 -0
  167. package/dist/lib/esm/config/define-config.js +14 -0
  168. package/dist/lib/esm/config/define-config.js.map +1 -0
  169. package/dist/lib/esm/config/pristine-config.interface.js +2 -0
  170. package/dist/lib/esm/config/pristine-config.interface.js.map +1 -0
  171. package/dist/lib/esm/config/resolved-pristine-config.js +21 -0
  172. package/dist/lib/esm/config/resolved-pristine-config.js.map +1 -0
  173. package/dist/lib/esm/event-handlers/cli.event-handler.js +69 -48
  174. package/dist/lib/esm/event-handlers/cli.event-handler.js.map +1 -1
  175. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -0
  176. package/dist/types/bootstrap/app-module-loader.d.ts +83 -0
  177. package/dist/types/bootstrap/bootstrap.d.ts +14 -0
  178. package/dist/types/bootstrap/build-manifest-checker.d.ts +19 -0
  179. package/dist/types/bootstrap/build-manifest-reader.d.ts +14 -0
  180. package/dist/types/bootstrap/build-manifest-staleness.enum.d.ts +18 -0
  181. package/dist/types/bootstrap/build-manifest-writer.d.ts +19 -0
  182. package/dist/types/bootstrap/build-manifest.d.ts +29 -0
  183. package/dist/types/bootstrap/build-runner.d.ts +16 -0
  184. package/dist/types/bootstrap/build-staleness-prompt.d.ts +27 -0
  185. package/dist/types/bootstrap/dynamic-importer.d.ts +13 -0
  186. package/dist/types/bootstrap/init-prompt.d.ts +38 -0
  187. package/dist/types/bootstrap/loaded-app-module.d.ts +40 -0
  188. package/dist/types/bootstrap/loaded-plugin.d.ts +20 -0
  189. package/dist/types/bootstrap/plugin-loader.d.ts +35 -0
  190. package/dist/types/bootstrap/source-hasher.d.ts +15 -0
  191. package/dist/types/cli.d.ts +12 -0
  192. package/dist/types/cli.module.d.ts +3 -0
  193. package/dist/types/commands/build-alias.command.d.ts +15 -0
  194. package/dist/types/commands/build.command.d.ts +47 -0
  195. package/dist/types/commands/commands.d.ts +15 -0
  196. package/dist/types/commands/config-print.command.d.ts +18 -0
  197. package/dist/types/commands/help-alias.command.d.ts +17 -0
  198. package/dist/types/commands/help.command.d.ts +19 -1
  199. package/dist/types/commands/info-alias.command.d.ts +15 -0
  200. package/dist/types/commands/info.command.d.ts +41 -0
  201. package/dist/types/commands/init-alias.command.d.ts +16 -0
  202. package/dist/types/commands/init.command-options.d.ts +22 -0
  203. package/dist/types/commands/init.command.d.ts +60 -0
  204. package/dist/types/commands/list-alias.command.d.ts +15 -0
  205. package/dist/types/commands/list.command.d.ts +6 -0
  206. package/dist/types/commands/start-alias.command.d.ts +16 -0
  207. package/dist/types/commands/start.command-options.d.ts +11 -0
  208. package/dist/types/commands/start.command.d.ts +47 -0
  209. package/dist/types/commands/verify-alias.command.d.ts +15 -0
  210. package/dist/types/commands/verify.command.d.ts +24 -0
  211. package/dist/types/config/config-loader.d.ts +40 -0
  212. package/dist/types/config/config-provenance.enum.d.ts +10 -0
  213. package/dist/types/config/config.d.ts +5 -0
  214. package/dist/types/config/define-config.d.ts +14 -0
  215. package/dist/types/config/pristine-config.interface.d.ts +67 -0
  216. package/dist/types/config/resolved-pristine-config.d.ts +28 -0
  217. package/dist/types/event-handlers/cli.event-handler.d.ts +30 -3
  218. package/dist/types/interfaces/command.interface.d.ts +31 -3
  219. package/package.json +16 -13
  220. package/readme.md +1023 -17
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.InitCommand = void 0;
25
+ const fs_1 = __importDefault(require("fs"));
26
+ const path_1 = __importDefault(require("path"));
27
+ const common_1 = require("@pristine-ts/common");
28
+ const tsyringe_1 = require("tsyringe");
29
+ const console_manager_1 = require("../managers/console.manager");
30
+ const exit_code_enum_1 = require("../enums/exit-code.enum");
31
+ const cli_module_keyname_1 = require("../cli.module.keyname");
32
+ const init_command_options_1 = require("./init.command-options");
33
+ const init_prompt_1 = require("../bootstrap/init-prompt");
34
+ /**
35
+ * Scaffolds a new Pristine project setup. In a TTY, prompts the user for source path,
36
+ * output path, tsconfig, build format, and a couple of yes/no decisions; in non-TTY (CI),
37
+ * accepts every value via `--source-path`, `--output-path`, etc. flags or refuses to run.
38
+ *
39
+ * What it produces:
40
+ * - `pristine.config.ts` at the project root with the answers populated.
41
+ * - Optionally, a starter AppModule at the configured `sourcePath` (only when the file
42
+ * doesn't already exist — never overwrites).
43
+ * - Optionally, `npm` scripts in `package.json`: `build`, `start`, `verify` (only ones
44
+ * that don't already exist — never overwrites).
45
+ * - `.pristine/` added to `.gitignore` if a `.gitignore` exists at the project root.
46
+ *
47
+ * Refuses to overwrite an existing `pristine.config.ts` so re-running init is safe.
48
+ */
49
+ let InitCommand = class InitCommand {
50
+ constructor(consoleManager, initPrompt) {
51
+ this.consoleManager = consoleManager;
52
+ this.initPrompt = initPrompt;
53
+ this.optionsType = init_command_options_1.InitCommandOptions;
54
+ this.name = "p:init";
55
+ this.description = "Scaffold pristine.config.ts (and optionally an AppModule + npm scripts) interactively.";
56
+ this.configFileName = "pristine.config.ts";
57
+ this.gitignoreEntry = ".pristine/";
58
+ }
59
+ run(args) {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ const projectRoot = process.cwd();
62
+ const configPath = path_1.default.resolve(projectRoot, this.configFileName);
63
+ if (fs_1.default.existsSync(configPath)) {
64
+ this.consoleManager.writeError(`${this.configFileName} already exists at ${configPath}. Aborting to avoid overwriting.`);
65
+ return exit_code_enum_1.ExitCodeEnum.Error;
66
+ }
67
+ const answers = yield this.gatherAnswers(args);
68
+ if (answers === undefined) {
69
+ // Already-rendered error for non-TTY missing flags. Bail.
70
+ return exit_code_enum_1.ExitCodeEnum.Error;
71
+ }
72
+ fs_1.default.writeFileSync(configPath, this.renderConfigTemplate(answers), "utf8");
73
+ this.consoleManager.writeSuccess(`Created ${path_1.default.relative(projectRoot, configPath)}`);
74
+ if (answers.scaffoldSource) {
75
+ this.scaffoldSource(projectRoot, answers.sourcePath);
76
+ }
77
+ if (answers.writePackageScripts) {
78
+ this.addPackageScripts(projectRoot);
79
+ }
80
+ this.addToGitignore(projectRoot);
81
+ this.consoleManager.writeInfo("Next steps:");
82
+ this.consoleManager.writeLine(" 1. npm install --save-dev @pristine-ts/cli (if you haven't already)");
83
+ this.consoleManager.writeLine(" 2. npm run build # compile your AppModule");
84
+ this.consoleManager.writeLine(" 3. npm run start # boot your app");
85
+ return exit_code_enum_1.ExitCodeEnum.Success;
86
+ });
87
+ }
88
+ /**
89
+ * Fills in answers from CLI flags first, then prompts (in TTY) for whatever's missing.
90
+ * Returns undefined when running non-TTY with insufficient flags so the caller can exit
91
+ * with the right error code (already rendered).
92
+ * @private
93
+ */
94
+ gatherAnswers(args) {
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ const sourcePath = args["source-path"];
97
+ const outputPath = args["output-path"];
98
+ const tsconfig = args.tsconfig;
99
+ const format = args.format;
100
+ if (this.initPrompt.isInteractive() === false) {
101
+ const missing = [];
102
+ if (sourcePath === undefined)
103
+ missing.push("--source-path");
104
+ if (outputPath === undefined)
105
+ missing.push("--output-path");
106
+ if (missing.length > 0) {
107
+ this.consoleManager.writeError(`Non-interactive run is missing required flag(s): ${missing.join(", ")}. ` +
108
+ `Either run \`pristine init\` in a terminal or pass the flags explicitly.`);
109
+ return undefined;
110
+ }
111
+ }
112
+ return {
113
+ sourcePath: yield this.initPrompt.askSourcePath(sourcePath),
114
+ outputPath: yield this.initPrompt.askOutputPath(outputPath),
115
+ tsconfig: yield this.initPrompt.askTsconfig(tsconfig),
116
+ format: yield this.initPrompt.askFormat(format),
117
+ scaffoldSource: yield this.initPrompt.askScaffoldSource(args.scaffold, sourcePath !== null && sourcePath !== void 0 ? sourcePath : "src/app.module.ts"),
118
+ writePackageScripts: yield this.initPrompt.askWritePackageScripts(args.scripts),
119
+ };
120
+ });
121
+ }
122
+ /**
123
+ * Writes a starter AppModule at the configured source path if and only if the file
124
+ * doesn't already exist. Never overwrites — re-running init on an established project
125
+ * shouldn't risk clobbering real code.
126
+ * @private
127
+ */
128
+ scaffoldSource(projectRoot, sourcePath) {
129
+ const absolutePath = path_1.default.resolve(projectRoot, sourcePath);
130
+ if (fs_1.default.existsSync(absolutePath)) {
131
+ this.consoleManager.writeInfo(`AppModule source already exists at ${sourcePath}; skipping scaffold.`);
132
+ return;
133
+ }
134
+ fs_1.default.mkdirSync(path_1.default.dirname(absolutePath), { recursive: true });
135
+ fs_1.default.writeFileSync(absolutePath, this.renderAppModuleTemplate(), "utf8");
136
+ this.consoleManager.writeSuccess(`Created ${sourcePath}`);
137
+ }
138
+ /**
139
+ * Adds `build`, `start`, `verify` to package.json's scripts. Only adds scripts that
140
+ * don't already exist — never overwrites a user-defined script.
141
+ * @private
142
+ */
143
+ addPackageScripts(projectRoot) {
144
+ var _a;
145
+ const packageJsonPath = path_1.default.resolve(projectRoot, "package.json");
146
+ if (fs_1.default.existsSync(packageJsonPath) === false) {
147
+ this.consoleManager.writeWarning("package.json not found; skipping script additions.");
148
+ return;
149
+ }
150
+ let parsed;
151
+ try {
152
+ parsed = JSON.parse(fs_1.default.readFileSync(packageJsonPath, "utf8"));
153
+ }
154
+ catch (error) {
155
+ this.consoleManager.writeError(`Failed to parse package.json: ${error.message}`);
156
+ return;
157
+ }
158
+ parsed.scripts = (_a = parsed.scripts) !== null && _a !== void 0 ? _a : {};
159
+ const desired = {
160
+ build: "pristine build",
161
+ start: "pristine start",
162
+ verify: "pristine verify",
163
+ };
164
+ const added = [];
165
+ const skipped = [];
166
+ for (const [scriptName, scriptCommand] of Object.entries(desired)) {
167
+ if (parsed.scripts[scriptName] === undefined) {
168
+ parsed.scripts[scriptName] = scriptCommand;
169
+ added.push(scriptName);
170
+ }
171
+ else {
172
+ skipped.push(scriptName);
173
+ }
174
+ }
175
+ if (added.length === 0) {
176
+ this.consoleManager.writeInfo("All target scripts already exist in package.json; nothing added.");
177
+ return;
178
+ }
179
+ fs_1.default.writeFileSync(packageJsonPath, JSON.stringify(parsed, null, 2) + "\n", "utf8");
180
+ this.consoleManager.writeSuccess(`Added ${added.length} script(s) to package.json: ${added.join(", ")}`);
181
+ if (skipped.length > 0) {
182
+ this.consoleManager.writeInfo(`Kept existing script(s): ${skipped.join(", ")}`);
183
+ }
184
+ }
185
+ /**
186
+ * Adds `.pristine/` to `.gitignore` if `.gitignore` exists and the entry isn't already
187
+ * there. Doesn't create `.gitignore` from scratch — that would be presumptuous in a
188
+ * project that hasn't initialized git.
189
+ * @private
190
+ */
191
+ addToGitignore(projectRoot) {
192
+ const gitignorePath = path_1.default.resolve(projectRoot, ".gitignore");
193
+ if (fs_1.default.existsSync(gitignorePath) === false)
194
+ return;
195
+ const current = fs_1.default.readFileSync(gitignorePath, "utf8");
196
+ const lines = current.split("\n").map(l => l.trim());
197
+ if (lines.includes(this.gitignoreEntry) || lines.includes(".pristine") || lines.includes(".pristine/*")) {
198
+ return;
199
+ }
200
+ const separator = current.endsWith("\n") ? "" : "\n";
201
+ fs_1.default.appendFileSync(gitignorePath, `${separator}${this.gitignoreEntry}\n`, "utf8");
202
+ this.consoleManager.writeInfo(`Added '${this.gitignoreEntry}' to .gitignore`);
203
+ }
204
+ renderConfigTemplate(answers) {
205
+ return `import {defineConfig} from "@pristine-ts/cli";
206
+
207
+ /**
208
+ * Pristine CLI configuration. Generated by \`pristine init\`. Re-run \`pristine init\` to
209
+ * regenerate (it refuses to overwrite this file by design — delete it first).
210
+ */
211
+ export default defineConfig({
212
+ appModule: {
213
+ sourcePath: "${answers.sourcePath}",
214
+ outputPath: "${answers.outputPath}",
215
+ },
216
+ build: {
217
+ tsconfig: "${answers.tsconfig}",
218
+ format: "${answers.format}",
219
+ },
220
+ });
221
+ `;
222
+ }
223
+ renderAppModuleTemplate() {
224
+ return `import {AppModuleInterface} from "@pristine-ts/common";
225
+ import {CoreModule} from "@pristine-ts/core";
226
+
227
+ /**
228
+ * Your application's root module. Imported by \`pristine\` at boot — anything reachable from
229
+ * \`importModules\` / \`importServices\` is registered with the kernel.
230
+ */
231
+ export const AppModule: AppModuleInterface = {
232
+ keyname: "my-app",
233
+ importModules: [
234
+ CoreModule,
235
+ ],
236
+ importServices: [],
237
+ };
238
+ `;
239
+ }
240
+ };
241
+ exports.InitCommand = InitCommand;
242
+ exports.InitCommand = InitCommand = __decorate([
243
+ (0, common_1.tag)(common_1.ServiceDefinitionTagEnum.Command),
244
+ (0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
245
+ (0, tsyringe_1.injectable)(),
246
+ __metadata("design:paramtypes", [console_manager_1.ConsoleManager,
247
+ init_prompt_1.InitPrompt])
248
+ ], InitCommand);
249
+ //# sourceMappingURL=init.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../../src/commands/init.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.ListAliasCommand = void 0;
22
+ const common_1 = require("@pristine-ts/common");
23
+ const tsyringe_1 = require("tsyringe");
24
+ const cli_module_keyname_1 = require("../cli.module.keyname");
25
+ const list_command_1 = require("./list.command");
26
+ /**
27
+ * Top-level alias for the framework-reserved `p:list` command. Injects the delegate
28
+ * directly via standard DI.
29
+ */
30
+ let ListAliasCommand = class ListAliasCommand {
31
+ constructor(delegate) {
32
+ this.delegate = delegate;
33
+ this.optionsType = null;
34
+ this.name = "list";
35
+ this.description = "Alias for p:list.";
36
+ }
37
+ run(args) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ return this.delegate.run(args);
40
+ });
41
+ }
42
+ };
43
+ exports.ListAliasCommand = ListAliasCommand;
44
+ exports.ListAliasCommand = ListAliasCommand = __decorate([
45
+ (0, common_1.tag)(common_1.ServiceDefinitionTagEnum.Command),
46
+ (0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
47
+ (0, tsyringe_1.injectable)(),
48
+ __metadata("design:paramtypes", [list_command_1.ListCommand])
49
+ ], ListAliasCommand);
50
+ //# sourceMappingURL=list-alias.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-alias.command.js","sourceRoot":"","sources":["../../../../src/commands/list-alias.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,gDAAgF;AAChF,uCAAoC;AAGpC,8DAAuD;AACvD,iDAA2C;AAE3C;;;GAGG;AAII,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAK3B,YAA6B,QAAqB;QAArB,aAAQ,GAAR,QAAQ,CAAa;QAJlD,gBAAW,GAAG,IAAI,CAAC;QACnB,SAAI,GAAG,MAAM,CAAC;QACd,gBAAW,GAAG,mBAAmB,CAAC;IAGlC,CAAC;IAEK,GAAG,CAAC,IAAS;;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;KAAA;CACF,CAAA;AAXY,4CAAgB;2BAAhB,gBAAgB;IAH5B,IAAA,YAAG,EAAC,iCAAwB,CAAC,OAAO,CAAC;IACrC,IAAA,qBAAY,EAAC,qCAAgB,CAAC;IAC9B,IAAA,qBAAU,GAAE;qCAM4B,0BAAW;GALvC,gBAAgB,CAW5B"}
@@ -27,12 +27,18 @@ const tsyringe_1 = require("tsyringe");
27
27
  const console_manager_1 = require("../managers/console.manager");
28
28
  const exit_code_enum_1 = require("../enums/exit-code.enum");
29
29
  const cli_module_keyname_1 = require("../cli.module.keyname");
30
+ /**
31
+ * Lists every registered command's name. Like `HelpCommand`, this resolves the command set
32
+ * lazily inside `run()` via the injected child container to avoid the self-referential cycle
33
+ * that constructor-time `@injectAll(Command)` would create — see `HelpCommand` for details.
34
+ */
30
35
  let ListCommand = class ListCommand {
31
36
  constructor(consoleManager, container) {
32
37
  this.consoleManager = consoleManager;
33
38
  this.container = container;
34
39
  this.optionsType = null;
35
40
  this.name = "p:list";
41
+ this.description = "List every registered command (built-in and custom).";
36
42
  }
37
43
  run(args) {
38
44
  return __awaiter(this, void 0, void 0, function* () {
@@ -48,7 +54,7 @@ exports.ListCommand = ListCommand = __decorate([
48
54
  (0, common_1.tag)(common_1.ServiceDefinitionTagEnum.Command),
49
55
  (0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
50
56
  (0, tsyringe_1.injectable)(),
51
- __param(1, (0, tsyringe_1.injectAll)(common_1.ServiceDefinitionTagEnum.CurrentChildContainer)),
57
+ __param(1, (0, tsyringe_1.inject)(common_1.ServiceDefinitionTagEnum.CurrentChildContainer)),
52
58
  __metadata("design:paramtypes", [console_manager_1.ConsoleManager, Object])
53
59
  ], ListCommand);
54
60
  //# sourceMappingURL=list.command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.command.js","sourceRoot":"","sources":["../../../../src/commands/list.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAgF;AAChF,uCAAoE;AAEpE,iEAA2D;AAC3D,4DAAqD;AACrD,8DAAuD;AAKhD,IAAM,WAAW,GAAjB,MAAM,WAAW;IAItB,YACmB,cAA8B,EACY,SAA+C;QADzF,mBAAc,GAAd,cAAc,CAAgB;QAC6B,cAAS,GAAT,SAAS,CAAqB;QAL5G,gBAAW,GAAG,IAAI,CAAC;QACnB,SAAI,GAAG,QAAQ,CAAC;IAKhB,CAAC;IAEK,GAAG,CAAC,IAAS;;YACjB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAA4B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,iCAAwB,CAAC,OAAO,CAAC,CAAC;YACtG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzE,OAAO,6BAAY,CAAC,OAAO,CAAC;QAC9B,CAAC;KAAA;CACF,CAAA;AAhBY,kCAAW;sBAAX,WAAW;IAHvB,IAAA,YAAG,EAAC,iCAAwB,CAAC,OAAO,CAAC;IACrC,IAAA,qBAAY,EAAC,qCAAgB,CAAC;IAC9B,IAAA,qBAAU,GAAE;IAOR,WAAA,IAAA,oBAAS,EAAC,iCAAwB,CAAC,qBAAqB,CAAC,CAAA;qCADzB,gCAAc;GALtC,WAAW,CAgBvB"}
1
+ {"version":3,"file":"list.command.js","sourceRoot":"","sources":["../../../../src/commands/list.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAgF;AAChF,uCAAiE;AAEjE,iEAA2D;AAC3D,4DAAqD;AACrD,8DAAuD;AAEvD;;;;GAIG;AAII,IAAM,WAAW,GAAjB,MAAM,WAAW;IAKtB,YACmB,cAA8B,EACS,SAA+C;QADtF,mBAAc,GAAd,cAAc,CAAgB;QAC0B,cAAS,GAAT,SAAS,CAAqB;QANzG,gBAAW,GAAG,IAAI,CAAC;QACnB,SAAI,GAAG,QAAQ,CAAC;QAChB,gBAAW,GAAG,sDAAsD,CAAC;IAMrE,CAAC;IAEK,GAAG,CAAC,IAAS;;YACjB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAA4B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,iCAAwB,CAAC,OAAO,CAAC,CAAC;YACtG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzE,OAAO,6BAAY,CAAC,OAAO,CAAC;QAC9B,CAAC;KAAA;CACF,CAAA;AAlBY,kCAAW;sBAAX,WAAW;IAHvB,IAAA,YAAG,EAAC,iCAAwB,CAAC,OAAO,CAAC;IACrC,IAAA,qBAAY,EAAC,qCAAgB,CAAC;IAC9B,IAAA,qBAAU,GAAE;IAQR,WAAA,IAAA,iBAAM,EAAC,iCAAwB,CAAC,qBAAqB,CAAC,CAAA;qCADtB,gCAAc;GANtC,WAAW,CAkBvB"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.StartAliasCommand = void 0;
22
+ const common_1 = require("@pristine-ts/common");
23
+ const tsyringe_1 = require("tsyringe");
24
+ const cli_module_keyname_1 = require("../cli.module.keyname");
25
+ const start_command_1 = require("./start.command");
26
+ const start_command_options_1 = require("./start.command-options");
27
+ /**
28
+ * Top-level alias for the framework-reserved `p:start` command. Injects the delegate
29
+ * directly via standard DI.
30
+ */
31
+ let StartAliasCommand = class StartAliasCommand {
32
+ constructor(delegate) {
33
+ this.delegate = delegate;
34
+ this.optionsType = start_command_options_1.StartCommandOptions;
35
+ this.name = "start";
36
+ this.description = "Alias for p:start.";
37
+ }
38
+ run(args) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ return this.delegate.run(args);
41
+ });
42
+ }
43
+ };
44
+ exports.StartAliasCommand = StartAliasCommand;
45
+ exports.StartAliasCommand = StartAliasCommand = __decorate([
46
+ (0, common_1.tag)(common_1.ServiceDefinitionTagEnum.Command),
47
+ (0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
48
+ (0, tsyringe_1.injectable)(),
49
+ __metadata("design:paramtypes", [start_command_1.StartCommand])
50
+ ], StartAliasCommand);
51
+ //# sourceMappingURL=start-alias.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-alias.command.js","sourceRoot":"","sources":["../../../../src/commands/start-alias.command.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,gDAAgF;AAChF,uCAAoC;AAGpC,8DAAuD;AACvD,mDAA6C;AAC7C,mEAA4D;AAE5D;;;GAGG;AAII,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAK5B,YAA6B,QAAsB;QAAtB,aAAQ,GAAR,QAAQ,CAAc;QAJnD,gBAAW,GAAG,2CAAmB,CAAC;QAClC,SAAI,GAAG,OAAO,CAAC;QACf,gBAAW,GAAG,oBAAoB,CAAC;IAGnC,CAAC;IAEK,GAAG,CAAC,IAAyB;;YACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;KAAA;CACF,CAAA;AAXY,8CAAiB;4BAAjB,iBAAiB;IAH7B,IAAA,YAAG,EAAC,iCAAwB,CAAC,OAAO,CAAC;IACrC,IAAA,qBAAY,EAAC,qCAAgB,CAAC;IAC9B,IAAA,qBAAU,GAAE;qCAM4B,4BAAY;GALxC,iBAAiB,CAW7B"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.StartCommandOptions = void 0;
13
+ require("reflect-metadata");
14
+ const class_validator_1 = require("@pristine-ts/class-validator");
15
+ /**
16
+ * Runtime overrides for `pristine start`. These are applied to every `RuntimeServerInterface`
17
+ * the kernel resolves — implementations are free to ignore them. The flags exist mainly for
18
+ * one-off cases ("I just need to test on a different port right now"); the canonical place
19
+ * to set defaults is the matching module's configurationDefinitions or `pristine.config.ts`.
20
+ */
21
+ class StartCommandOptions {
22
+ }
23
+ exports.StartCommandOptions = StartCommandOptions;
24
+ __decorate([
25
+ (0, class_validator_1.IsOptional)(),
26
+ (0, class_validator_1.IsNumber)(),
27
+ __metadata("design:type", Number)
28
+ ], StartCommandOptions.prototype, "port", void 0);
29
+ __decorate([
30
+ (0, class_validator_1.IsOptional)(),
31
+ (0, class_validator_1.IsString)(),
32
+ __metadata("design:type", String)
33
+ ], StartCommandOptions.prototype, "address", void 0);
34
+ //# sourceMappingURL=start.command-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.command-options.js","sourceRoot":"","sources":["../../../../src/commands/start.command-options.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4BAA0B;AAC1B,kEAA4E;AAE5E;;;;;GAKG;AACH,MAAa,mBAAmB;CAQ/B;AARD,kDAQC;AALC;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;iDACG;AAId;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;oDACM"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ var StartCommand_1;
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.StartCommand = void 0;
26
+ const common_1 = require("@pristine-ts/common");
27
+ const tsyringe_1 = require("tsyringe");
28
+ const core_1 = require("@pristine-ts/core");
29
+ const console_manager_1 = require("../managers/console.manager");
30
+ const exit_code_enum_1 = require("../enums/exit-code.enum");
31
+ const cli_module_keyname_1 = require("../cli.module.keyname");
32
+ const start_command_options_1 = require("./start.command-options");
33
+ /**
34
+ * Boots the AppModule, starts every registered `RuntimeServerInterface` (HTTP server, gRPC
35
+ * server, etc.), and keeps the process alive until SIGTERM or SIGINT. On signal, runs the
36
+ * registered `onShutdown` hooks via `Kernel.stop()` and exits.
37
+ *
38
+ * This is the production-grade entry point. Use `pristine start` (or its `pristine p:start`
39
+ * canonical name) instead of `node dist/main.js` if you want Pristine to manage the lifecycle,
40
+ * signal handling, and graceful shutdown — including listening on every server module the
41
+ * AppModule imports.
42
+ *
43
+ * Notes:
44
+ * - The kernel is **already started** by `bootstrap()` before this command runs (the CLI
45
+ * boots once for every command). This command does not call `kernel.start()` again — it
46
+ * just starts the registered servers and keeps the process alive.
47
+ * - `RuntimeServer`-tagged services are constructor-injected via `@injectAll`. This works
48
+ * because `RuntimeServer` is a different tag than `Command`, so there's no self-reference
49
+ * cycle (StartCommand is `@tag(Command)`, not `@tag(RuntimeServer)`). When no servers
50
+ * are registered, the array is empty and the start path skips the loop.
51
+ * - The `Kernel` is injected only for `kernel.stop()` — the legitimate use of the Kernel
52
+ * as a service. Other resolution (commands, runtime servers, etc.) goes through
53
+ * standard DI rather than reaching through `kernel.container`.
54
+ * - The shutdown timeout (per `onShutdown` hook) defaults to 10 seconds. The whole-process
55
+ * hard exit timeout defaults to 30 seconds — if the orderly shutdown doesn't finish in
56
+ * that window, the process is force-exited so Kubernetes / ECS don't get stuck waiting.
57
+ * - `--port` / `--address` flags are propagated to every RuntimeServer's `start()`. In
58
+ * multi-server scenarios where servers should listen on different ports, use the per-module
59
+ * configuration values (e.g. `pristine.http.kernel-server.port`) instead of CLI flags.
60
+ * - Watch mode (`--watch`) is not yet implemented. For a dev loop, wrap `pristine start` in
61
+ * `nodemon` or `tsx --watch`.
62
+ */
63
+ let StartCommand = StartCommand_1 = class StartCommand {
64
+ constructor(consoleManager, kernel, servers) {
65
+ this.consoleManager = consoleManager;
66
+ this.kernel = kernel;
67
+ this.servers = servers;
68
+ this.optionsType = start_command_options_1.StartCommandOptions;
69
+ this.name = "p:start";
70
+ this.description = "Boot the AppModule and run until SIGTERM/SIGINT. Production-grade entry point.";
71
+ // Sentinel name of the DefaultRuntimeServer registered in @pristine-ts/core. We filter
72
+ // it out of `this.servers` before doing any real work because it's a no-op placeholder
73
+ // whose only job is to make `@injectAll(RuntimeServer)` resolvable in apps that don't
74
+ // import a real server module.
75
+ this.defaultRuntimeServerName = "__default__";
76
+ }
77
+ run(args) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ const servers = this.servers.filter(s => s.name !== this.defaultRuntimeServerName);
80
+ const overrides = (args.port !== undefined || args.address !== undefined)
81
+ ? { port: args.port, address: args.address }
82
+ : undefined;
83
+ for (const server of servers) {
84
+ try {
85
+ yield server.start(overrides);
86
+ }
87
+ catch (error) {
88
+ this.consoleManager.writeError(`Failed to start server '${server.name}': ${error.message}`);
89
+ // Best-effort: stop any servers that did start before we abort.
90
+ for (const started of servers) {
91
+ if (started === server)
92
+ break;
93
+ try {
94
+ yield started.stop();
95
+ }
96
+ catch ( /* swallow */_a) { /* swallow */ }
97
+ }
98
+ return exit_code_enum_1.ExitCodeEnum.Error;
99
+ }
100
+ }
101
+ if (servers.length === 0) {
102
+ this.consoleManager.writeSuccess("Pristine app running. Send SIGTERM (or Ctrl+C) to stop.");
103
+ }
104
+ else {
105
+ const labels = servers.map(s => s.name).join(", ");
106
+ this.consoleManager.writeSuccess(`Pristine app running with ${servers.length} server(s): ${labels}. Send SIGTERM (or Ctrl+C) to stop.`);
107
+ }
108
+ return new Promise((resolve) => {
109
+ let shuttingDown = false;
110
+ // Keep the event loop alive. Without this, Node would exit as soon as it noticed nothing
111
+ // else (no open sockets, no timers, no listening servers from user modules) was pending —
112
+ // signal handlers alone don't count as work. The interval is a 1-day no-op heartbeat;
113
+ // we clear it on shutdown so the process can actually exit when stop() returns.
114
+ const heartbeat = setInterval(() => { }, 1 << 30);
115
+ const initiateShutdown = (signal) => __awaiter(this, void 0, void 0, function* () {
116
+ if (shuttingDown) {
117
+ // Second signal arrived while we're already shutting down — escalate to an immediate
118
+ // hard exit. This mirrors the behavior of most production runtimes (one Ctrl+C =
119
+ // graceful, two = right now).
120
+ this.consoleManager.writeWarning(`Received ${signal} again — forcing exit.`);
121
+ process.exit(130);
122
+ }
123
+ shuttingDown = true;
124
+ this.consoleManager.writeInfo(`Received ${signal}, shutting down gracefully...`);
125
+ const hardExitTimer = setTimeout(() => {
126
+ this.consoleManager.writeError(`Shutdown exceeded ${StartCommand_1.HARD_EXIT_TIMEOUT_MS}ms — forcing exit.`);
127
+ process.exit(1);
128
+ }, StartCommand_1.HARD_EXIT_TIMEOUT_MS);
129
+ // Don't keep the event loop alive just for the timer.
130
+ hardExitTimer.unref();
131
+ try {
132
+ // Kernel.stop() invokes module onShutdown hooks in outer-to-inner order, including
133
+ // HttpModule.onShutdown which calls KernelHttpServer.stop(). No need to stop the
134
+ // servers individually here.
135
+ yield this.kernel.stop();
136
+ this.consoleManager.writeSuccess("Shutdown complete.");
137
+ clearTimeout(hardExitTimer);
138
+ clearInterval(heartbeat);
139
+ resolve(exit_code_enum_1.ExitCodeEnum.Success);
140
+ }
141
+ catch (error) {
142
+ this.consoleManager.writeError(`Shutdown error: ${error.message}`);
143
+ clearTimeout(hardExitTimer);
144
+ clearInterval(heartbeat);
145
+ resolve(exit_code_enum_1.ExitCodeEnum.Error);
146
+ }
147
+ });
148
+ // Register on each signal once. A second SIGINT/SIGTERM goes through `initiateShutdown`
149
+ // again, which detects `shuttingDown` and force-exits.
150
+ process.on("SIGTERM", () => { void initiateShutdown("SIGTERM"); });
151
+ process.on("SIGINT", () => { void initiateShutdown("SIGINT"); });
152
+ });
153
+ });
154
+ }
155
+ };
156
+ exports.StartCommand = StartCommand;
157
+ // Force-exit safeguard: if onShutdown hooks are still running after this many milliseconds
158
+ // past the first signal, the process is killed. Prevents orchestrators from waiting on a
159
+ // wedged shutdown.
160
+ StartCommand.HARD_EXIT_TIMEOUT_MS = 30000;
161
+ exports.StartCommand = StartCommand = StartCommand_1 = __decorate([
162
+ (0, common_1.tag)(common_1.ServiceDefinitionTagEnum.Command),
163
+ (0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
164
+ (0, tsyringe_1.injectable)(),
165
+ __param(2, (0, tsyringe_1.injectAll)(common_1.ServiceDefinitionTagEnum.RuntimeServer)),
166
+ __metadata("design:paramtypes", [console_manager_1.ConsoleManager,
167
+ core_1.Kernel, Array])
168
+ ], StartCommand);
169
+ //# sourceMappingURL=start.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.command.js","sourceRoot":"","sources":["../../../../src/commands/start.command.ts"],"names":[],"mappings":"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"}