@tdk-landscape/tdk-cli-core 1.3.14

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 (212) hide show
  1. package/README.md +293 -0
  2. package/bin/tdk.js +14 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +64 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/completion.d.ts +3 -0
  8. package/dist/commands/completion.d.ts.map +1 -0
  9. package/dist/commands/completion.js +294 -0
  10. package/dist/commands/completion.js.map +1 -0
  11. package/dist/commands/config.d.ts +3 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +220 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +3 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +176 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/down.d.ts +3 -0
  20. package/dist/commands/down.d.ts.map +1 -0
  21. package/dist/commands/down.js +32 -0
  22. package/dist/commands/down.js.map +1 -0
  23. package/dist/commands/help.d.ts +2 -0
  24. package/dist/commands/help.d.ts.map +1 -0
  25. package/dist/commands/help.js +130 -0
  26. package/dist/commands/help.js.map +1 -0
  27. package/dist/commands/networks.d.ts +3 -0
  28. package/dist/commands/networks.d.ts.map +1 -0
  29. package/dist/commands/networks.js +260 -0
  30. package/dist/commands/networks.js.map +1 -0
  31. package/dist/commands/project.d.ts +3 -0
  32. package/dist/commands/project.d.ts.map +1 -0
  33. package/dist/commands/project.js +360 -0
  34. package/dist/commands/project.js.map +1 -0
  35. package/dist/commands/projects.d.ts +3 -0
  36. package/dist/commands/projects.d.ts.map +1 -0
  37. package/dist/commands/projects.js +71 -0
  38. package/dist/commands/projects.js.map +1 -0
  39. package/dist/commands/resource.d.ts +69 -0
  40. package/dist/commands/resource.d.ts.map +1 -0
  41. package/dist/commands/resource.js +572 -0
  42. package/dist/commands/resource.js.map +1 -0
  43. package/dist/commands/resources.d.ts +3 -0
  44. package/dist/commands/resources.d.ts.map +1 -0
  45. package/dist/commands/resources.js +73 -0
  46. package/dist/commands/resources.js.map +1 -0
  47. package/dist/commands/stack.d.ts +3 -0
  48. package/dist/commands/stack.d.ts.map +1 -0
  49. package/dist/commands/stack.js +103 -0
  50. package/dist/commands/stack.js.map +1 -0
  51. package/dist/commands/stacks.d.ts +3 -0
  52. package/dist/commands/stacks.d.ts.map +1 -0
  53. package/dist/commands/stacks.js +43 -0
  54. package/dist/commands/stacks.js.map +1 -0
  55. package/dist/commands/status.d.ts +3 -0
  56. package/dist/commands/status.d.ts.map +1 -0
  57. package/dist/commands/status.js +71 -0
  58. package/dist/commands/status.js.map +1 -0
  59. package/dist/commands/ui.d.ts +3 -0
  60. package/dist/commands/ui.d.ts.map +1 -0
  61. package/dist/commands/ui.js +446 -0
  62. package/dist/commands/ui.js.map +1 -0
  63. package/dist/commands/up.d.ts +3 -0
  64. package/dist/commands/up.d.ts.map +1 -0
  65. package/dist/commands/up.js +149 -0
  66. package/dist/commands/up.js.map +1 -0
  67. package/dist/commands/upgrade.d.ts +3 -0
  68. package/dist/commands/upgrade.d.ts.map +1 -0
  69. package/dist/commands/upgrade.js +454 -0
  70. package/dist/commands/upgrade.js.map +1 -0
  71. package/dist/commands/version.d.ts +3 -0
  72. package/dist/commands/version.d.ts.map +1 -0
  73. package/dist/commands/version.js +9 -0
  74. package/dist/commands/version.js.map +1 -0
  75. package/dist/components/Accessible.d.ts +8 -0
  76. package/dist/components/Accessible.d.ts.map +1 -0
  77. package/dist/components/Accessible.js +10 -0
  78. package/dist/components/Accessible.js.map +1 -0
  79. package/dist/components/BaseTooltip.d.ts +4 -0
  80. package/dist/components/BaseTooltip.d.ts.map +1 -0
  81. package/dist/components/BaseTooltip.js +28 -0
  82. package/dist/components/BaseTooltip.js.map +1 -0
  83. package/dist/components/DetailPanel.d.ts +4 -0
  84. package/dist/components/DetailPanel.d.ts.map +1 -0
  85. package/dist/components/DetailPanel.js +18 -0
  86. package/dist/components/DetailPanel.js.map +1 -0
  87. package/dist/components/FileTree.d.ts +4 -0
  88. package/dist/components/FileTree.d.ts.map +1 -0
  89. package/dist/components/FileTree.js +47 -0
  90. package/dist/components/FileTree.js.map +1 -0
  91. package/dist/components/ResourceSelectInput.d.ts +4 -0
  92. package/dist/components/ResourceSelectInput.d.ts.map +1 -0
  93. package/dist/components/ResourceSelectInput.js +7 -0
  94. package/dist/components/ResourceSelectInput.js.map +1 -0
  95. package/dist/components/ResourceTable.d.ts +4 -0
  96. package/dist/components/ResourceTable.d.ts.map +1 -0
  97. package/dist/components/ResourceTable.js +18 -0
  98. package/dist/components/ResourceTable.js.map +1 -0
  99. package/dist/components/TabBar.d.ts +4 -0
  100. package/dist/components/TabBar.d.ts.map +1 -0
  101. package/dist/components/TabBar.js +17 -0
  102. package/dist/components/TabBar.js.map +1 -0
  103. package/dist/components/Tooltip.d.ts +12 -0
  104. package/dist/components/Tooltip.d.ts.map +1 -0
  105. package/dist/components/Tooltip.js +12 -0
  106. package/dist/components/Tooltip.js.map +1 -0
  107. package/dist/components/index.d.ts +8 -0
  108. package/dist/components/index.d.ts.map +1 -0
  109. package/dist/components/index.js +8 -0
  110. package/dist/components/index.js.map +1 -0
  111. package/dist/config/platform-standards.d.ts +159 -0
  112. package/dist/config/platform-standards.d.ts.map +1 -0
  113. package/dist/config/platform-standards.js +181 -0
  114. package/dist/config/platform-standards.js.map +1 -0
  115. package/dist/generator/extension-fetch.d.ts +9 -0
  116. package/dist/generator/extension-fetch.d.ts.map +1 -0
  117. package/dist/generator/extension-fetch.js +153 -0
  118. package/dist/generator/extension-fetch.js.map +1 -0
  119. package/dist/generator/template-engine.d.ts +60 -0
  120. package/dist/generator/template-engine.d.ts.map +1 -0
  121. package/dist/generator/template-engine.js +416 -0
  122. package/dist/generator/template-engine.js.map +1 -0
  123. package/dist/index.d.ts +11 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +11 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/types/index.d.ts +236 -0
  128. package/dist/types/index.d.ts.map +1 -0
  129. package/dist/types/index.js +17 -0
  130. package/dist/types/index.js.map +1 -0
  131. package/dist/utils/cache.d.ts +19 -0
  132. package/dist/utils/cache.d.ts.map +1 -0
  133. package/dist/utils/cache.js +64 -0
  134. package/dist/utils/cache.js.map +1 -0
  135. package/dist/utils/command-helpers.d.ts +17 -0
  136. package/dist/utils/command-helpers.d.ts.map +1 -0
  137. package/dist/utils/command-helpers.js +48 -0
  138. package/dist/utils/command-helpers.js.map +1 -0
  139. package/dist/utils/constants.d.ts +50 -0
  140. package/dist/utils/constants.d.ts.map +1 -0
  141. package/dist/utils/constants.js +100 -0
  142. package/dist/utils/constants.js.map +1 -0
  143. package/dist/utils/discovery-context.d.ts +4 -0
  144. package/dist/utils/discovery-context.d.ts.map +1 -0
  145. package/dist/utils/discovery-context.js +39 -0
  146. package/dist/utils/discovery-context.js.map +1 -0
  147. package/dist/utils/docker.d.ts +3 -0
  148. package/dist/utils/docker.d.ts.map +1 -0
  149. package/dist/utils/docker.js +13 -0
  150. package/dist/utils/docker.js.map +1 -0
  151. package/dist/utils/env-validator.d.ts +15 -0
  152. package/dist/utils/env-validator.d.ts.map +1 -0
  153. package/dist/utils/env-validator.js +95 -0
  154. package/dist/utils/env-validator.js.map +1 -0
  155. package/dist/utils/errors.d.ts +28 -0
  156. package/dist/utils/errors.d.ts.map +1 -0
  157. package/dist/utils/errors.js +127 -0
  158. package/dist/utils/errors.js.map +1 -0
  159. package/dist/utils/file-helpers.d.ts +14 -0
  160. package/dist/utils/file-helpers.d.ts.map +1 -0
  161. package/dist/utils/file-helpers.js +45 -0
  162. package/dist/utils/file-helpers.js.map +1 -0
  163. package/dist/utils/formatting.d.ts +30 -0
  164. package/dist/utils/formatting.d.ts.map +1 -0
  165. package/dist/utils/formatting.js +164 -0
  166. package/dist/utils/formatting.js.map +1 -0
  167. package/dist/utils/paths.d.ts +3 -0
  168. package/dist/utils/paths.d.ts.map +1 -0
  169. package/dist/utils/paths.js +41 -0
  170. package/dist/utils/paths.js.map +1 -0
  171. package/dist/utils/port-assignment.d.ts +6 -0
  172. package/dist/utils/port-assignment.d.ts.map +1 -0
  173. package/dist/utils/port-assignment.js +75 -0
  174. package/dist/utils/port-assignment.js.map +1 -0
  175. package/dist/utils/project-features.d.ts +23 -0
  176. package/dist/utils/project-features.d.ts.map +1 -0
  177. package/dist/utils/project-features.js +98 -0
  178. package/dist/utils/project-features.js.map +1 -0
  179. package/dist/utils/project-templates.d.ts +7 -0
  180. package/dist/utils/project-templates.d.ts.map +1 -0
  181. package/dist/utils/project-templates.js +24 -0
  182. package/dist/utils/project-templates.js.map +1 -0
  183. package/dist/utils/resource-features.d.ts +28 -0
  184. package/dist/utils/resource-features.d.ts.map +1 -0
  185. package/dist/utils/resource-features.js +148 -0
  186. package/dist/utils/resource-features.js.map +1 -0
  187. package/dist/utils/services.d.ts +18 -0
  188. package/dist/utils/services.d.ts.map +1 -0
  189. package/dist/utils/services.js +291 -0
  190. package/dist/utils/services.js.map +1 -0
  191. package/dist/utils/stack-features.d.ts +22 -0
  192. package/dist/utils/stack-features.d.ts.map +1 -0
  193. package/dist/utils/stack-features.js +13 -0
  194. package/dist/utils/stack-features.js.map +1 -0
  195. package/dist/utils/tar.d.ts +7 -0
  196. package/dist/utils/tar.d.ts.map +1 -0
  197. package/dist/utils/tar.js +21 -0
  198. package/dist/utils/tar.js.map +1 -0
  199. package/dist/utils/tilt.d.ts +18 -0
  200. package/dist/utils/tilt.d.ts.map +1 -0
  201. package/dist/utils/tilt.js +77 -0
  202. package/dist/utils/tilt.js.map +1 -0
  203. package/dist/utils/validation.d.ts +9 -0
  204. package/dist/utils/validation.d.ts.map +1 -0
  205. package/dist/utils/validation.js +49 -0
  206. package/dist/utils/validation.js.map +1 -0
  207. package/package.json +72 -0
  208. package/templates/.tiltignore.hbs +73 -0
  209. package/templates/TILT_RESOURCE_DEFAULTS.star.hbs +221 -0
  210. package/templates/TILT_TECH_STACK.star.hbs +150 -0
  211. package/templates/Tiltfile.hbs +295 -0
  212. package/templates/spec.master.hbs +186 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const configCommand: Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,eAAO,MAAM,aAAa,SAgMvB,CAAC"}
@@ -0,0 +1,220 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import chalk from "chalk";
5
+ import { Command } from "commander";
6
+ import { generateMasterConfigs, readProjectConfig, TemplateEngine, verifyMasterConfigs, } from "../generator/template-engine.js";
7
+ import { isMasterConfigFileName } from "../types/index.js";
8
+ import { assertValid } from "../utils/command-helpers.js";
9
+ import { MASTER_CONFIG_FILES } from "../utils/constants.js";
10
+ import { requireProjectRoot, runCommand } from "../utils/errors.js";
11
+ import { writeJsonFile } from "../utils/file-helpers.js";
12
+ import { validateOptionalInfraService } from "../utils/validation.js";
13
+ /**
14
+ * Serialize ProjectConfig to JSON-safe value.
15
+ * ProjectConfig is guaranteed to be JSON-serializable (all properties are primitive or plain objects).
16
+ * This wrapper documents the type relationship that TypeScript cannot infer.
17
+ */
18
+ function _serializeProjectConfig(config) {
19
+ // ProjectConfig has no index signature but is structurally compatible with JsonValue
20
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
21
+ return config;
22
+ }
23
+ export const configCommand = new Command("config")
24
+ .description("Manage project configuration and regenerate master files")
25
+ .addCommand(new Command("regenerate")
26
+ .description("Regenerate all 4 master config files from .tdk/project.json")
27
+ .option("--dry-run", "Show what would change without writing files")
28
+ .action(async (options) => {
29
+ await runCommand(async () => {
30
+ const projectRoot = requireProjectRoot();
31
+ if (options.dryRun) {
32
+ console.log(chalk.blue("🔍 Dry run - comparing current files with new configuration...\n"));
33
+ const projectConfig = readProjectConfig(projectRoot);
34
+ const engine = new TemplateEngine();
35
+ const newFiles = engine.generateAll(projectConfig);
36
+ const outputDir = join(projectRoot, ".tdk", ".tdk-out");
37
+ const filesToCheck = MASTER_CONFIG_FILES;
38
+ let hasChanges = false;
39
+ for (const filename of filesToCheck) {
40
+ // Runtime validation with type guard eliminates type assertion
41
+ if (!isMasterConfigFileName(filename)) {
42
+ continue; // Skip unknown files (shouldn't happen with const array)
43
+ }
44
+ const newContent = newFiles[filename];
45
+ const filePath = join(outputDir, filename);
46
+ if (!existsSync(filePath)) {
47
+ console.log(chalk.yellow(`📁 ${filename}`));
48
+ console.log(chalk.gray(" Status: NEW (file does not exist)\n"));
49
+ hasChanges = true;
50
+ continue;
51
+ }
52
+ const currentContent = readFileSync(filePath, "utf-8");
53
+ if (currentContent === newContent) {
54
+ console.log(chalk.green(`✓ ${filename}`));
55
+ console.log(chalk.gray(" Status: No changes\n"));
56
+ }
57
+ else {
58
+ console.log(chalk.yellow(`📝 ${filename}`));
59
+ console.log(chalk.gray(" Status: MODIFIED"));
60
+ const currentLines = currentContent.split("\n").length;
61
+ const newLines = newContent.split("\n").length;
62
+ const lineDiff = newLines - currentLines;
63
+ if (lineDiff > 0) {
64
+ console.log(chalk.gray(` Lines: ${currentLines} → ${newLines} (+${lineDiff})`));
65
+ }
66
+ else if (lineDiff < 0) {
67
+ console.log(chalk.gray(` Lines: ${currentLines} → ${newLines} (${lineDiff})`));
68
+ }
69
+ else {
70
+ console.log(chalk.gray(` Lines: ${currentLines} (content changed)`));
71
+ }
72
+ const currentLinesArr = currentContent.split("\n");
73
+ const newLinesArr = newContent.split("\n");
74
+ let firstDiffLine = -1;
75
+ for (let i = 0; i < Math.max(currentLinesArr.length, newLinesArr.length); i++) {
76
+ if (currentLinesArr[i] !== newLinesArr[i]) {
77
+ firstDiffLine = i;
78
+ break;
79
+ }
80
+ }
81
+ if (firstDiffLine >= 0) {
82
+ console.log(chalk.gray(` First change around line ${firstDiffLine + 1}:`));
83
+ const contextStart = Math.max(0, firstDiffLine - 1);
84
+ const contextEnd = Math.min(currentLinesArr.length, firstDiffLine + 2);
85
+ for (let i = contextStart; i < contextEnd; i++) {
86
+ const line = currentLinesArr[i];
87
+ const newLine = newLinesArr[i];
88
+ if (line !== newLine) {
89
+ if (line !== undefined) {
90
+ console.log(chalk.red(` - ${line.substring(0, 60)}${line.length > 60 ? "..." : ""}`));
91
+ }
92
+ if (newLine !== undefined) {
93
+ console.log(chalk.green(` + ${newLine.substring(0, 60)}${newLine.length > 60 ? "..." : ""}`));
94
+ }
95
+ }
96
+ else {
97
+ console.log(chalk.gray(` ${line.substring(0, 60)}${line.length > 60 ? "..." : ""}`));
98
+ }
99
+ }
100
+ }
101
+ console.log("");
102
+ hasChanges = true;
103
+ }
104
+ }
105
+ if (hasChanges) {
106
+ console.log(chalk.blue("💡 Run without --dry-run to apply these changes.\n"));
107
+ }
108
+ else {
109
+ console.log(chalk.green("✅ All files are already up to date!\n"));
110
+ }
111
+ return;
112
+ }
113
+ console.log(chalk.blue("📋 Regenerating master configuration files...\n"));
114
+ await generateMasterConfigs(projectRoot);
115
+ console.log(chalk.green("\n✅ Configuration regenerated!"));
116
+ });
117
+ }))
118
+ .addCommand(new Command("verify")
119
+ .description("Verify that generated files match .tdk/project.json")
120
+ .action(async () => {
121
+ await runCommand(async () => {
122
+ const projectRoot = requireProjectRoot();
123
+ console.log(chalk.blue("🔍 Verifying configuration...\n"));
124
+ const result = verifyMasterConfigs(projectRoot);
125
+ if (result.valid) {
126
+ console.log(chalk.green("✅ All files are in sync!"));
127
+ return;
128
+ }
129
+ else {
130
+ console.log(chalk.yellow("⚠️ Configuration issues found:"));
131
+ for (const error of result.errors) {
132
+ console.log(chalk.gray(` - ${error}`));
133
+ }
134
+ console.log(chalk.gray("\nRun `tdk config regenerate` to fix."));
135
+ process.exit(1);
136
+ }
137
+ });
138
+ }))
139
+ .addCommand(new Command("edit").description("Open .tdk/project.json in your $EDITOR").action(async () => {
140
+ await runCommand(async () => {
141
+ const projectRoot = requireProjectRoot();
142
+ const projectJsonPath = join(projectRoot, ".tdk", "project.json");
143
+ if (!existsSync(projectJsonPath)) {
144
+ throw new Error(".tdk/project.json not found");
145
+ }
146
+ const editor = process.env.EDITOR || "vi";
147
+ console.log(chalk.blue(`Opening ${projectJsonPath} in ${editor}...`));
148
+ const editorParts = editor.trim().split(/\s+/);
149
+ const editorCmd = editorParts[0];
150
+ const editorArgs = [...editorParts.slice(1), projectJsonPath];
151
+ const allowedEditors = [
152
+ "vi",
153
+ "vim",
154
+ "nano",
155
+ "emacs",
156
+ "code",
157
+ "subl",
158
+ "atom",
159
+ "mate",
160
+ "pico",
161
+ "micro",
162
+ "hx",
163
+ ];
164
+ const editorBase = editorCmd.replace(/.*\//, ""); // Remove path prefix for validation
165
+ if (!allowedEditors.includes(editorBase)) {
166
+ console.error(chalk.yellow(`Warning: Unknown editor "${editorCmd}". Using 'vi' instead.`));
167
+ spawnSync("vi", [projectJsonPath], { stdio: "inherit" });
168
+ }
169
+ else {
170
+ spawnSync(editorCmd, editorArgs, { stdio: "inherit" });
171
+ }
172
+ console.log(chalk.green("\n✅ Editor closed."));
173
+ console.log(chalk.gray("Run `tdk config regenerate` to apply changes."));
174
+ });
175
+ }));
176
+ /**
177
+ * Type guard for optional infrastructure service keys.
178
+ * Validates that a service name is a valid key of the optional_infra object.
179
+ */
180
+ function isOptionalInfraKey(service, config) {
181
+ return service in config.optional_infra;
182
+ }
183
+ async function toggleInfraService(service, enabled) {
184
+ const projectRoot = requireProjectRoot();
185
+ // Validates service is in OPTIONAL_INFRA_SERVICES array
186
+ const validation = validateOptionalInfraService(service);
187
+ assertValid(validation);
188
+ const config = readProjectConfig(projectRoot);
189
+ // Runtime validation: ensure service is a valid key of optional_infra
190
+ if (!isOptionalInfraKey(service, config)) {
191
+ throw new Error(`Invalid infrastructure service: "${service}". ` +
192
+ `Must be one of: ${Object.keys(config.optional_infra).join(", ")}`);
193
+ }
194
+ // Type-safe assignment: service is now narrowed to OptionalInfraKey
195
+ config.optional_infra[service] = enabled;
196
+ const projectJsonPath = join(projectRoot, ".tdk", "project.json");
197
+ // ProjectConfig is guaranteed to be JSON-serializable
198
+ writeJsonFile(projectJsonPath, config);
199
+ const action = enabled ? "Enabled" : "Disabled";
200
+ console.log(chalk.green(`✓ ${action}: ${service}`));
201
+ console.log(chalk.gray("Run `tdk config regenerate` to apply."));
202
+ }
203
+ configCommand
204
+ .addCommand(new Command("enable-infra")
205
+ .description("Enable optional infrastructure service")
206
+ .argument("<service>", "Service name (monitoring, elk, debezium, golden_image, verdaccio)")
207
+ .action(async (service) => {
208
+ await runCommand(async () => {
209
+ await toggleInfraService(service, true);
210
+ });
211
+ }))
212
+ .addCommand(new Command("disable-infra")
213
+ .description("Disable optional infrastructure service")
214
+ .argument("<service>", "Service name (monitoring, elk, debezium, golden_image, verdaccio)")
215
+ .action(async (service) => {
216
+ await runCommand(async () => {
217
+ await toggleInfraService(service, false);
218
+ });
219
+ }));
220
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const doctorCommand: Command;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6JpC,eAAO,MAAM,aAAa,SA6CtB,CAAC"}
@@ -0,0 +1,176 @@
1
+ import { execSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import chalk from "chalk";
5
+ import { Command } from "commander";
6
+ import { MASTER_CONFIG_FILES } from "../utils/constants.js";
7
+ import { findProjectRoot } from "../utils/paths.js";
8
+ import { validateEnvFile } from "../utils/env-validator.js";
9
+ const QUICKSTART_DOCS_URL = "https://tdk-landscape.github.io/tdk-website/docs/quickstart/";
10
+ function createExecCheck(name, command, successMessage, failureMessage, fixInstructions) {
11
+ return () => {
12
+ try {
13
+ execSync(command, { stdio: "pipe" });
14
+ return {
15
+ name,
16
+ didPass: true,
17
+ message: successMessage,
18
+ };
19
+ }
20
+ catch {
21
+ // Error details not needed - failure message tells user what to fix
22
+ return {
23
+ name,
24
+ didPass: false,
25
+ message: failureMessage,
26
+ fix: fixInstructions,
27
+ };
28
+ }
29
+ };
30
+ }
31
+ function checkDockerRuntime() {
32
+ // Check for Docker
33
+ try {
34
+ execSync("docker ps", { stdio: "pipe" });
35
+ return {
36
+ name: "Container Runtime",
37
+ didPass: true,
38
+ message: "Docker daemon is running",
39
+ };
40
+ }
41
+ catch {
42
+ // Docker not running, check for Colima
43
+ try {
44
+ execSync("colima status", { stdio: "pipe" });
45
+ // Colima is running
46
+ return {
47
+ name: "Container Runtime",
48
+ didPass: true,
49
+ message: "Colima (Docker runtime) is running",
50
+ };
51
+ }
52
+ catch {
53
+ // Check if Colima is installed but not running
54
+ try {
55
+ execSync("which colima", { stdio: "pipe" });
56
+ return {
57
+ name: "Container Runtime",
58
+ didPass: false,
59
+ message: "Colima is installed but not running",
60
+ fix: "Start Colima: colima start",
61
+ };
62
+ }
63
+ catch {
64
+ // Check for Podman
65
+ try {
66
+ execSync("podman ps", { stdio: "pipe" });
67
+ return {
68
+ name: "Container Runtime",
69
+ didPass: true,
70
+ message: "Podman is running",
71
+ };
72
+ }
73
+ catch {
74
+ // No container runtime found
75
+ return {
76
+ name: "Container Runtime",
77
+ didPass: false,
78
+ message: "No container runtime (Docker/Colima/Podman) is running",
79
+ fix: `Start: colima start (recommended) OR open -a Docker (macOS) OR sudo systemctl start docker (Linux). Setup guide: ${QUICKSTART_DOCS_URL}`,
80
+ };
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ const checkDockerCompose = createExecCheck("Docker Compose", "docker compose version", "Docker Compose plugin available", "Docker Compose plugin not found", "Install Docker Compose: https://docs.docker.com/compose/install/");
87
+ const checkTilt = createExecCheck("Tilt CLI", "tilt version", "Tilt CLI installed", "Tilt CLI not found", `Install Tilt: brew install tilt (macOS) or see https://docs.tilt.dev/install.html. Setup guide: ${QUICKSTART_DOCS_URL}`);
88
+ function checkEnvironmentVariables() {
89
+ const projectRoot = findProjectRoot() ?? process.cwd();
90
+ const validation = validateEnvFile(projectRoot);
91
+ if (validation.missing.length > 0) {
92
+ return {
93
+ name: "Environment Variables",
94
+ didPass: false,
95
+ message: `Missing required env variables: ${validation.missing.join(", ")}`,
96
+ fix: `Edit .env and set these values:\n ${validation.missing.map((v) => `${v}=<value>`).join("\n ")}`,
97
+ };
98
+ }
99
+ if (validation.invalid.length > 0) {
100
+ return {
101
+ name: "Environment Variables",
102
+ didPass: false,
103
+ message: `Invalid env variables: ${validation.invalid.join(", ")}`,
104
+ fix: "Edit .env and provide values for empty variables",
105
+ };
106
+ }
107
+ return {
108
+ name: "Environment Variables",
109
+ didPass: true,
110
+ message: "All required environment variables are set",
111
+ };
112
+ }
113
+ function checkMasterConfigs() {
114
+ // `tdk project` writes generated master configs to .tdk/.tdk-out/, not the
115
+ // project root, so look there (and walk up to find the project root, same
116
+ // as every other command that reads project state).
117
+ const projectRoot = findProjectRoot() ?? process.cwd();
118
+ const outDir = join(projectRoot, ".tdk", ".tdk-out");
119
+ const missing = MASTER_CONFIG_FILES.filter((file) => !existsSync(join(outDir, file)));
120
+ if (missing.length === 0) {
121
+ return {
122
+ name: "Master Configs",
123
+ didPass: true,
124
+ message: `${MASTER_CONFIG_FILES.join(", ")} found`,
125
+ };
126
+ }
127
+ return {
128
+ name: "Master Configs",
129
+ didPass: false,
130
+ message: `Master configs missing: ${missing.join(", ")}`,
131
+ fix: "Run: tdk project",
132
+ };
133
+ }
134
+ export const doctorCommand = new Command("doctor")
135
+ .description("Check environment readiness for TDK")
136
+ .action(async () => {
137
+ console.log(`\n${chalk.bold("🔍 TDK Doctor")}\n`);
138
+ console.log("Checking environment...\n");
139
+ const checks = [
140
+ checkDockerRuntime,
141
+ checkTilt,
142
+ checkDockerCompose,
143
+ checkMasterConfigs,
144
+ checkEnvironmentVariables,
145
+ ];
146
+ let allPassed = true;
147
+ for (const checkFn of checks) {
148
+ const result = checkFn();
149
+ if (result.didPass) {
150
+ console.log(`${chalk.green("✓")} ${result.message}`);
151
+ }
152
+ else {
153
+ console.log(`${chalk.red("✗")} ${result.message}`);
154
+ if (result.fix) {
155
+ console.log(`${chalk.blue("ℹ")} Fix: ${result.fix}`);
156
+ }
157
+ allPassed = false;
158
+ break;
159
+ }
160
+ }
161
+ console.log("");
162
+ if (allPassed) {
163
+ console.log(`${chalk.green(chalk.bold("✓"))} Environment ready for TDK`);
164
+ console.log("");
165
+ console.log("Next steps:");
166
+ console.log(" 1. Run: tdk up");
167
+ console.log(" 2. Open: http://localhost:10350");
168
+ }
169
+ else {
170
+ console.log(`${chalk.red(chalk.bold("✗"))} Environment not ready`);
171
+ console.log("");
172
+ console.log("Fix the issues above, then run: tdk doctor");
173
+ process.exit(1);
174
+ }
175
+ });
176
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const downCommand: Command;
3
+ //# sourceMappingURL=down.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"down.d.ts","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SA8BpB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import chalk from "chalk";
2
+ import { Command } from "commander";
3
+ import { handleDryRun } from "../utils/command-helpers.js";
4
+ import { handleTiltFailure, withTiltCheck } from "../utils/errors.js";
5
+ import { buildTiltDownArgs, runTilt } from "../utils/tilt.js";
6
+ export const downCommand = new Command("down")
7
+ .description("Stop all tilt resources")
8
+ .option("-v, --verbose", "Enable verbose output", false)
9
+ .option("-f, --force", "Skip confirmation", false)
10
+ .option("--dry-run", "Show what would be stopped without stopping", false)
11
+ .action(async (options) => {
12
+ await withTiltCheck(async () => {
13
+ if (handleDryRun(options, "not stopping resources", "tilt down")) {
14
+ return;
15
+ }
16
+ const tiltArgs = buildTiltDownArgs({
17
+ force: options.force,
18
+ });
19
+ console.log(chalk.blue("Stopping all tilt resources..."));
20
+ if (options.verbose) {
21
+ console.log(chalk.gray("Running: tilt down -f .tdk/.tdk-out/Tiltfile"));
22
+ }
23
+ const result = await runTilt("down", tiltArgs, {
24
+ verbose: options.verbose,
25
+ inheritStdio: true,
26
+ });
27
+ if (result.exitCode !== 0) {
28
+ handleTiltFailure("down", result.exitCode);
29
+ }
30
+ });
31
+ });
32
+ //# sourceMappingURL=down.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"down.js","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,eAAe,EAAE,uBAAuB,EAAE,KAAK,CAAC;KACvD,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,KAAK,CAAC;KACjD,MAAM,CAAC,WAAW,EAAE,6CAA6C,EAAE,KAAK,CAAC;KACzE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,aAAa,CAAC,KAAK,IAAI,EAAE;QAC7B,IAAI,YAAY,CAAC,OAAO,EAAE,wBAAwB,EAAE,WAAW,CAAC,EAAE,CAAC;YACjE,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAE1D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE;YAC7C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function showHelp(): void;
2
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AA+FA,wBAAgB,QAAQ,IAAI,IAAI,CAsD/B"}
@@ -0,0 +1,130 @@
1
+ import chalk from "chalk";
2
+ const TDK_BANNER = `
3
+ ${chalk.cyan("╔════════════════════════════════════════════════════════════╗")}
4
+ ${chalk.cyan("║")} ${chalk.cyan("║")}
5
+ ${chalk.cyan("║")} ${chalk.bold.white("████████╗██████╗ ██╗ ██╗")} ${chalk.bold.white("██████╗██╗ ██╗")} ${chalk.cyan("║")}
6
+ ${chalk.cyan("║")} ${chalk.bold.white("╚══██╔══╝██╔══██╗██║ ██╔╝")} ${chalk.bold.white("██╔════╝██║ ██║")} ${chalk.cyan("║")}
7
+ ${chalk.cyan("║")} ${chalk.bold.white("██║ ██║ ██║█████╔╝")} ${chalk.bold.white("██║ ██║ ██║")} ${chalk.cyan("║")}
8
+ ${chalk.cyan("║")} ${chalk.bold.white("██║ ██║ ██║██╔═██╗")} ${chalk.bold.white("██║ ██║ ██║")} ${chalk.cyan("║")}
9
+ ${chalk.cyan("║")} ${chalk.bold.white("██║ ██████╔╝██║ ██╗")}${chalk.yellow("██╗")}${chalk.bold.white("╚██████╗███████╗██║")} ${chalk.cyan("║")}
10
+ ${chalk.cyan("║")} ${chalk.white("╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝")} ${chalk.white("╚═════╝╚══════╝╚═╝")} ${chalk.cyan("║")}
11
+ ${chalk.cyan("║")} ${chalk.cyan("║")}
12
+ ${chalk.cyan("║")} ${chalk.bold.yellow("🚀 Tilt Development Kit - Local Microservices")} ${chalk.cyan("║")}
13
+ ${chalk.cyan("║")} ${chalk.cyan("║")}
14
+ ${chalk.cyan("╚════════════════════════════════════════════════════════════╝")}
15
+ `;
16
+ const COMMAND_GROUPS = [
17
+ {
18
+ title: "🌍 Project Level",
19
+ emoji: "📁",
20
+ color: chalk.blue,
21
+ commands: [
22
+ {
23
+ name: "project",
24
+ desc: "Initialize master configs (TILT_RESOURCE_DEFAULTS.star)",
25
+ alias: "",
26
+ },
27
+ { name: "projects, info", desc: "Show project information and config status", alias: "" },
28
+ ],
29
+ },
30
+ {
31
+ title: "📦 Stack Level",
32
+ emoji: "📦",
33
+ color: chalk.magenta,
34
+ commands: [
35
+ { name: "stack", desc: "Organize resources into stacks (interactive)", alias: "" },
36
+ { name: "stacks, ls", desc: "List all stacks and their resources", alias: "" },
37
+ ],
38
+ },
39
+ {
40
+ title: "⚡ Resource Level",
41
+ emoji: "⚡",
42
+ color: chalk.yellow,
43
+ commands: [
44
+ { name: "resource", desc: "Create new resource with templates", alias: "" },
45
+ { name: "resources", desc: "List all resources with filtering", alias: "--stack, --ports" },
46
+ ],
47
+ },
48
+ {
49
+ title: "🔄 Lifecycle",
50
+ emoji: "🔄",
51
+ color: chalk.green,
52
+ commands: [
53
+ { name: "up, deploy", desc: "Start services (optionally by stack)", alias: "[stack-name]" },
54
+ { name: "down", desc: "Stop all tilt resources", alias: "" },
55
+ { name: "status", desc: "Show status of services and stacks", alias: "" },
56
+ ],
57
+ },
58
+ {
59
+ title: "🌐 Networking",
60
+ emoji: "🌐",
61
+ color: chalk.blueBright,
62
+ commands: [
63
+ { name: "networks, traefik", desc: "Show Traefik-routed URLs for all services", alias: "--stack, --json" },
64
+ ],
65
+ },
66
+ {
67
+ title: "🛠️ Utilities",
68
+ emoji: "🛠️",
69
+ color: chalk.cyan,
70
+ commands: [
71
+ { name: "ui, interactive", desc: "Interactive TUI for managing services", alias: "" },
72
+ { name: "config", desc: "Manage project configuration and regenerate master files", alias: "regenerate, verify, edit" },
73
+ { name: "doctor", desc: "Check environment readiness", alias: "" },
74
+ { name: "completion", desc: "Generate shell completions", alias: "--install --shell zsh" },
75
+ { name: "upgrade, update", desc: "Self-update to latest version", alias: "--force" },
76
+ { name: "version, -v", desc: "Display version number", alias: "" },
77
+ { name: "help", desc: "Show this colorful help", alias: "[command]" },
78
+ ],
79
+ },
80
+ ];
81
+ function formatCommand(name, desc, alias, color) {
82
+ const nameFormatted = color(name.padEnd(20));
83
+ const descFormatted = chalk.white(desc);
84
+ const aliasFormatted = alias ? chalk.gray(` ${alias}`) : "";
85
+ return ` ${nameFormatted} ${descFormatted}${aliasFormatted}`;
86
+ }
87
+ export function showHelp() {
88
+ console.log(TDK_BANNER);
89
+ console.log(chalk.bold.white("\n Project → Stack → Resource (PSR) Model\n"));
90
+ console.log(chalk.gray(" Usage: tdk [command] [options]\n"));
91
+ console.log(chalk.bold.yellow(" Global Options:"));
92
+ console.log(` ${chalk.cyan("-v, --version".padEnd(20))} ${chalk.white("Display version number")}`);
93
+ console.log(` ${chalk.cyan("--verbose".padEnd(20))} ${chalk.white("Enable verbose output")}`);
94
+ console.log(` ${chalk.cyan("-h, --help".padEnd(20))} ${chalk.white("Show help")}`);
95
+ console.log();
96
+ for (const group of COMMAND_GROUPS) {
97
+ console.log(group.color.bold(`${group.emoji} ${group.title}`));
98
+ console.log(group.color(` ${"─".repeat(50)}`));
99
+ for (const cmd of group.commands) {
100
+ console.log(formatCommand(cmd.name, cmd.desc, cmd.alias, group.color));
101
+ }
102
+ console.log();
103
+ }
104
+ console.log(chalk.bold.yellow(" 🚀 Quick Start:"));
105
+ console.log(chalk.gray(` ${"─".repeat(50)}`));
106
+ console.log(chalk.white(`
107
+ ${chalk.cyan("1.")} Initialize project: ${chalk.green("tdk project")}
108
+ ${chalk.cyan("2.")} Create a resource: ${chalk.green("tdk resource my-api --type backend")}
109
+ ${chalk.cyan("3.")} Assign to stack: ${chalk.green("tdk stack my-stack")}
110
+ ${chalk.cyan("4.")} Start development: ${chalk.green("tdk up my-stack")}
111
+ `));
112
+ console.log(chalk.bold.yellow(" 💡 Examples:"));
113
+ console.log(chalk.gray(` ${"─".repeat(50)}`));
114
+ console.log(chalk.white(`
115
+ ${chalk.cyan("$")} tdk project # Create master configs
116
+ ${chalk.cyan("$")} tdk resource api --type backend # Create backend service
117
+ ${chalk.cyan("$")} tdk resource app --type frontend # Create frontend app
118
+ ${chalk.cyan("$")} tdk stacks --services # List stacks with resources
119
+ ${chalk.cyan("$")} tdk up my-stack # Start a stack
120
+ ${chalk.cyan("$")} tdk networks # Show Traefik-routed URLs
121
+ ${chalk.cyan("$")} tdk doctor # Check environment
122
+ ${chalk.cyan("$")} tdk upgrade # Self-update
123
+ `));
124
+ console.log(chalk.gray(` ${"═".repeat(50)}`));
125
+ console.log(chalk.gray(` For more help: ${chalk.cyan("tdk help [command]}")}`));
126
+ console.log(chalk.gray(` GitHub: ${chalk.cyan("https://github.com/tdk-landscape/tdk-cli-core")}`));
127
+ console.log();
128
+ console.log(chalk.green.bold(" Happy coding! 🚀\n"));
129
+ }
130
+ //# sourceMappingURL=help.js.map