@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.
- package/README.md +293 -0
- package/bin/tdk.js +14 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +64 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +294 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +220 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +176 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/down.d.ts +3 -0
- package/dist/commands/down.d.ts.map +1 -0
- package/dist/commands/down.js +32 -0
- package/dist/commands/down.js.map +1 -0
- package/dist/commands/help.d.ts +2 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +130 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/networks.d.ts +3 -0
- package/dist/commands/networks.d.ts.map +1 -0
- package/dist/commands/networks.js +260 -0
- package/dist/commands/networks.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +360 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/projects.d.ts +3 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +71 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/resource.d.ts +69 -0
- package/dist/commands/resource.d.ts.map +1 -0
- package/dist/commands/resource.js +572 -0
- package/dist/commands/resource.js.map +1 -0
- package/dist/commands/resources.d.ts +3 -0
- package/dist/commands/resources.d.ts.map +1 -0
- package/dist/commands/resources.js +73 -0
- package/dist/commands/resources.js.map +1 -0
- package/dist/commands/stack.d.ts +3 -0
- package/dist/commands/stack.d.ts.map +1 -0
- package/dist/commands/stack.js +103 -0
- package/dist/commands/stack.js.map +1 -0
- package/dist/commands/stacks.d.ts +3 -0
- package/dist/commands/stacks.d.ts.map +1 -0
- package/dist/commands/stacks.js +43 -0
- package/dist/commands/stacks.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +71 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/ui.d.ts +3 -0
- package/dist/commands/ui.d.ts.map +1 -0
- package/dist/commands/ui.js +446 -0
- package/dist/commands/ui.js.map +1 -0
- package/dist/commands/up.d.ts +3 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +149 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/commands/upgrade.d.ts +3 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +454 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/version.d.ts +3 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +9 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/components/Accessible.d.ts +8 -0
- package/dist/components/Accessible.d.ts.map +1 -0
- package/dist/components/Accessible.js +10 -0
- package/dist/components/Accessible.js.map +1 -0
- package/dist/components/BaseTooltip.d.ts +4 -0
- package/dist/components/BaseTooltip.d.ts.map +1 -0
- package/dist/components/BaseTooltip.js +28 -0
- package/dist/components/BaseTooltip.js.map +1 -0
- package/dist/components/DetailPanel.d.ts +4 -0
- package/dist/components/DetailPanel.d.ts.map +1 -0
- package/dist/components/DetailPanel.js +18 -0
- package/dist/components/DetailPanel.js.map +1 -0
- package/dist/components/FileTree.d.ts +4 -0
- package/dist/components/FileTree.d.ts.map +1 -0
- package/dist/components/FileTree.js +47 -0
- package/dist/components/FileTree.js.map +1 -0
- package/dist/components/ResourceSelectInput.d.ts +4 -0
- package/dist/components/ResourceSelectInput.d.ts.map +1 -0
- package/dist/components/ResourceSelectInput.js +7 -0
- package/dist/components/ResourceSelectInput.js.map +1 -0
- package/dist/components/ResourceTable.d.ts +4 -0
- package/dist/components/ResourceTable.d.ts.map +1 -0
- package/dist/components/ResourceTable.js +18 -0
- package/dist/components/ResourceTable.js.map +1 -0
- package/dist/components/TabBar.d.ts +4 -0
- package/dist/components/TabBar.d.ts.map +1 -0
- package/dist/components/TabBar.js +17 -0
- package/dist/components/TabBar.js.map +1 -0
- package/dist/components/Tooltip.d.ts +12 -0
- package/dist/components/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip.js +12 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +8 -0
- package/dist/components/index.js.map +1 -0
- package/dist/config/platform-standards.d.ts +159 -0
- package/dist/config/platform-standards.d.ts.map +1 -0
- package/dist/config/platform-standards.js +181 -0
- package/dist/config/platform-standards.js.map +1 -0
- package/dist/generator/extension-fetch.d.ts +9 -0
- package/dist/generator/extension-fetch.d.ts.map +1 -0
- package/dist/generator/extension-fetch.js +153 -0
- package/dist/generator/extension-fetch.js.map +1 -0
- package/dist/generator/template-engine.d.ts +60 -0
- package/dist/generator/template-engine.d.ts.map +1 -0
- package/dist/generator/template-engine.js +416 -0
- package/dist/generator/template-engine.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +236 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +17 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cache.d.ts +19 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +64 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/command-helpers.d.ts +17 -0
- package/dist/utils/command-helpers.d.ts.map +1 -0
- package/dist/utils/command-helpers.js +48 -0
- package/dist/utils/command-helpers.js.map +1 -0
- package/dist/utils/constants.d.ts +50 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +100 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/discovery-context.d.ts +4 -0
- package/dist/utils/discovery-context.d.ts.map +1 -0
- package/dist/utils/discovery-context.js +39 -0
- package/dist/utils/discovery-context.js.map +1 -0
- package/dist/utils/docker.d.ts +3 -0
- package/dist/utils/docker.d.ts.map +1 -0
- package/dist/utils/docker.js +13 -0
- package/dist/utils/docker.js.map +1 -0
- package/dist/utils/env-validator.d.ts +15 -0
- package/dist/utils/env-validator.d.ts.map +1 -0
- package/dist/utils/env-validator.js +95 -0
- package/dist/utils/env-validator.js.map +1 -0
- package/dist/utils/errors.d.ts +28 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +127 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/file-helpers.d.ts +14 -0
- package/dist/utils/file-helpers.d.ts.map +1 -0
- package/dist/utils/file-helpers.js +45 -0
- package/dist/utils/file-helpers.js.map +1 -0
- package/dist/utils/formatting.d.ts +30 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +164 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/paths.d.ts +3 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +41 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/port-assignment.d.ts +6 -0
- package/dist/utils/port-assignment.d.ts.map +1 -0
- package/dist/utils/port-assignment.js +75 -0
- package/dist/utils/port-assignment.js.map +1 -0
- package/dist/utils/project-features.d.ts +23 -0
- package/dist/utils/project-features.d.ts.map +1 -0
- package/dist/utils/project-features.js +98 -0
- package/dist/utils/project-features.js.map +1 -0
- package/dist/utils/project-templates.d.ts +7 -0
- package/dist/utils/project-templates.d.ts.map +1 -0
- package/dist/utils/project-templates.js +24 -0
- package/dist/utils/project-templates.js.map +1 -0
- package/dist/utils/resource-features.d.ts +28 -0
- package/dist/utils/resource-features.d.ts.map +1 -0
- package/dist/utils/resource-features.js +148 -0
- package/dist/utils/resource-features.js.map +1 -0
- package/dist/utils/services.d.ts +18 -0
- package/dist/utils/services.d.ts.map +1 -0
- package/dist/utils/services.js +291 -0
- package/dist/utils/services.js.map +1 -0
- package/dist/utils/stack-features.d.ts +22 -0
- package/dist/utils/stack-features.d.ts.map +1 -0
- package/dist/utils/stack-features.js +13 -0
- package/dist/utils/stack-features.js.map +1 -0
- package/dist/utils/tar.d.ts +7 -0
- package/dist/utils/tar.d.ts.map +1 -0
- package/dist/utils/tar.js +21 -0
- package/dist/utils/tar.js.map +1 -0
- package/dist/utils/tilt.d.ts +18 -0
- package/dist/utils/tilt.d.ts.map +1 -0
- package/dist/utils/tilt.js +77 -0
- package/dist/utils/tilt.js.map +1 -0
- package/dist/utils/validation.d.ts +9 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +49 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +72 -0
- package/templates/.tiltignore.hbs +73 -0
- package/templates/TILT_RESOURCE_DEFAULTS.star.hbs +221 -0
- package/templates/TILT_TECH_STACK.star.hbs +150 -0
- package/templates/Tiltfile.hbs +295 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|