@chucky.cloud/cli 0.2.8 → 0.2.9
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/dist/commands/apply.d.ts +7 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +104 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +5 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/delete.js +3 -3
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/deploy.d.ts +6 -2
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +177 -33
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/diff.d.ts +6 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +101 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/discard.d.ts +6 -0
- package/dist/commands/discard.d.ts.map +1 -0
- package/dist/commands/discard.js +36 -0
- package/dist/commands/discard.js.map +1 -0
- package/dist/commands/fetch.d.ts +6 -0
- package/dist/commands/fetch.d.ts.map +1 -0
- package/dist/commands/fetch.js +147 -0
- package/dist/commands/fetch.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +199 -57
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/jobs.d.ts +3 -0
- package/dist/commands/jobs.d.ts.map +1 -0
- package/dist/commands/jobs.js +415 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/keys.d.ts.map +1 -1
- package/dist/commands/keys.js +6 -1
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/log.d.ts +5 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +69 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/prompt.d.ts +1 -0
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +173 -1
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/pull.d.ts +7 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +19 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/sessions.d.ts +7 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +57 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/wait.d.ts +7 -0
- package/dist/commands/wait.d.ts.map +1 -0
- package/dist/commands/wait.js +91 -0
- package/dist/commands/wait.js.map +1 -0
- package/dist/index.js +79 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +130 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +99 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/archive.d.ts +5 -1
- package/dist/lib/archive.d.ts.map +1 -1
- package/dist/lib/archive.js +10 -15
- package/dist/lib/archive.js.map +1 -1
- package/dist/lib/config.d.ts +80 -5
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +86 -9
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/git.d.ts +70 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +232 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/output.d.ts +42 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +123 -0
- package/dist/lib/output.js.map +1 -0
- package/package.json +1 -1
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export interface GitInfo {
|
|
2
|
+
isRepo: boolean;
|
|
3
|
+
isRoot: boolean;
|
|
4
|
+
headCommit: string;
|
|
5
|
+
isDirty: boolean;
|
|
6
|
+
dirtyFiles: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface BundleStats {
|
|
9
|
+
commits: number;
|
|
10
|
+
filesAdded: string[];
|
|
11
|
+
filesModified: string[];
|
|
12
|
+
filesDeleted: string[];
|
|
13
|
+
insertions: number;
|
|
14
|
+
deletions: number;
|
|
15
|
+
}
|
|
16
|
+
export interface CommitInfo {
|
|
17
|
+
hash: string;
|
|
18
|
+
message: string;
|
|
19
|
+
filesChanged: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get git repository information for a folder
|
|
23
|
+
*/
|
|
24
|
+
export declare function getGitInfo(folder: string): GitInfo;
|
|
25
|
+
/**
|
|
26
|
+
* Auto-commit all changes
|
|
27
|
+
*/
|
|
28
|
+
export declare function autoCommit(folder: string, message: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Create a git bundle from a commit range
|
|
31
|
+
*/
|
|
32
|
+
export declare function createBundle(folder: string, fromCommit: string, outputPath: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Verify a git bundle
|
|
35
|
+
*/
|
|
36
|
+
export declare function verifyBundle(folder: string, bundlePath: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Fetch a bundle to a branch
|
|
39
|
+
*/
|
|
40
|
+
export declare function fetchBundle(folder: string, bundlePath: string, branchName: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get stats for changes between HEAD and a branch
|
|
43
|
+
*/
|
|
44
|
+
export declare function getBundleStats(folder: string, branchName: string): BundleStats;
|
|
45
|
+
/**
|
|
46
|
+
* Get full diff between HEAD and a branch
|
|
47
|
+
*/
|
|
48
|
+
export declare function getFullDiff(folder: string, branchName: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Get commit log between HEAD and a branch
|
|
51
|
+
*/
|
|
52
|
+
export declare function getCommitLog(folder: string, branchName: string): CommitInfo[];
|
|
53
|
+
/**
|
|
54
|
+
* Apply a branch (fast-forward merge)
|
|
55
|
+
*/
|
|
56
|
+
export declare function applyBranch(folder: string, branchName: string, options?: {
|
|
57
|
+
force?: boolean;
|
|
58
|
+
}): {
|
|
59
|
+
commits: number;
|
|
60
|
+
files: number;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Discard a branch (delete without merging)
|
|
64
|
+
*/
|
|
65
|
+
export declare function discardBranch(folder: string, branchName: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* Check if a branch exists
|
|
68
|
+
*/
|
|
69
|
+
export declare function branchExists(folder: string, branchName: string): boolean;
|
|
70
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAkCD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAqClD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CASxE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,IAAI,CAKN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAqD9E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,CAoC7E;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAmBpC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAKtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAIxE"}
|
package/dist/lib/git.js
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
/**
|
|
5
|
+
* Execute a git command and return stdout
|
|
6
|
+
*/
|
|
7
|
+
function git(args, cwd) {
|
|
8
|
+
const result = spawnSync("git", args, {
|
|
9
|
+
cwd,
|
|
10
|
+
encoding: "utf-8",
|
|
11
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
12
|
+
});
|
|
13
|
+
if (result.error) {
|
|
14
|
+
throw result.error;
|
|
15
|
+
}
|
|
16
|
+
if (result.status !== 0) {
|
|
17
|
+
throw new Error(result.stderr || `git ${args[0]} failed`);
|
|
18
|
+
}
|
|
19
|
+
return result.stdout.trim();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute a git command, returning null on failure instead of throwing
|
|
23
|
+
*/
|
|
24
|
+
function gitSafe(args, cwd) {
|
|
25
|
+
try {
|
|
26
|
+
return git(args, cwd);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get git repository information for a folder
|
|
34
|
+
*/
|
|
35
|
+
export function getGitInfo(folder) {
|
|
36
|
+
const fullPath = resolve(folder);
|
|
37
|
+
// Check if .git exists in this folder (is root)
|
|
38
|
+
const isRoot = existsSync(join(fullPath, ".git"));
|
|
39
|
+
// Check if it's inside any git repo
|
|
40
|
+
const gitDir = gitSafe(["rev-parse", "--git-dir"], fullPath);
|
|
41
|
+
const isRepo = gitDir !== null;
|
|
42
|
+
if (!isRepo) {
|
|
43
|
+
return {
|
|
44
|
+
isRepo: false,
|
|
45
|
+
isRoot: false,
|
|
46
|
+
headCommit: "",
|
|
47
|
+
isDirty: false,
|
|
48
|
+
dirtyFiles: [],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// Get HEAD commit
|
|
52
|
+
const headCommit = gitSafe(["rev-parse", "HEAD"], fullPath) || "";
|
|
53
|
+
// Get dirty files
|
|
54
|
+
const status = gitSafe(["status", "--porcelain"], fullPath) || "";
|
|
55
|
+
const dirtyFiles = status
|
|
56
|
+
.split("\n")
|
|
57
|
+
.filter((line) => line.trim())
|
|
58
|
+
.map((line) => line.slice(3));
|
|
59
|
+
return {
|
|
60
|
+
isRepo,
|
|
61
|
+
isRoot,
|
|
62
|
+
headCommit,
|
|
63
|
+
isDirty: dirtyFiles.length > 0,
|
|
64
|
+
dirtyFiles,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Auto-commit all changes
|
|
69
|
+
*/
|
|
70
|
+
export function autoCommit(folder, message) {
|
|
71
|
+
const fullPath = resolve(folder);
|
|
72
|
+
git(["add", "-A"], fullPath);
|
|
73
|
+
git(["commit", "-m", message], fullPath);
|
|
74
|
+
return git(["rev-parse", "HEAD"], fullPath);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create a git bundle from a commit range
|
|
78
|
+
*/
|
|
79
|
+
export function createBundle(folder, fromCommit, outputPath) {
|
|
80
|
+
const fullPath = resolve(folder);
|
|
81
|
+
// Check if there are any commits in the range
|
|
82
|
+
const revList = gitSafe(["rev-list", `${fromCommit}..HEAD`], fullPath);
|
|
83
|
+
if (!revList || revList.trim() === "") {
|
|
84
|
+
return false; // No changes
|
|
85
|
+
}
|
|
86
|
+
git(["bundle", "create", outputPath, `${fromCommit}..HEAD`], fullPath);
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Verify a git bundle
|
|
91
|
+
*/
|
|
92
|
+
export function verifyBundle(folder, bundlePath) {
|
|
93
|
+
const fullPath = resolve(folder);
|
|
94
|
+
try {
|
|
95
|
+
git(["bundle", "verify", bundlePath], fullPath);
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Fetch a bundle to a branch
|
|
104
|
+
*/
|
|
105
|
+
export function fetchBundle(folder, bundlePath, branchName) {
|
|
106
|
+
const fullPath = resolve(folder);
|
|
107
|
+
// Fetch from bundle to the specified branch
|
|
108
|
+
git(["fetch", bundlePath, `HEAD:${branchName}`], fullPath);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get stats for changes between HEAD and a branch
|
|
112
|
+
*/
|
|
113
|
+
export function getBundleStats(folder, branchName) {
|
|
114
|
+
const fullPath = resolve(folder);
|
|
115
|
+
// Get commit count
|
|
116
|
+
const revList = gitSafe(["rev-list", `HEAD..${branchName}`], fullPath) || "";
|
|
117
|
+
const commits = revList ? revList.split("\n").filter((l) => l.trim()).length : 0;
|
|
118
|
+
// Get file stats
|
|
119
|
+
const diffStat = gitSafe(["diff", "--numstat", `HEAD..${branchName}`], fullPath) || "";
|
|
120
|
+
let insertions = 0;
|
|
121
|
+
let deletions = 0;
|
|
122
|
+
for (const line of diffStat.split("\n").filter((l) => l.trim())) {
|
|
123
|
+
const [added, removed] = line.split("\t");
|
|
124
|
+
if (added !== "-")
|
|
125
|
+
insertions += parseInt(added, 10) || 0;
|
|
126
|
+
if (removed !== "-")
|
|
127
|
+
deletions += parseInt(removed, 10) || 0;
|
|
128
|
+
}
|
|
129
|
+
// Get file change types
|
|
130
|
+
const diffFiles = gitSafe(["diff", "--name-status", `HEAD..${branchName}`], fullPath) || "";
|
|
131
|
+
const filesAdded = [];
|
|
132
|
+
const filesModified = [];
|
|
133
|
+
const filesDeleted = [];
|
|
134
|
+
for (const line of diffFiles.split("\n").filter((l) => l.trim())) {
|
|
135
|
+
const [status, ...fileParts] = line.split("\t");
|
|
136
|
+
const file = fileParts.join("\t");
|
|
137
|
+
if (status.startsWith("A")) {
|
|
138
|
+
filesAdded.push(file);
|
|
139
|
+
}
|
|
140
|
+
else if (status.startsWith("M")) {
|
|
141
|
+
filesModified.push(file);
|
|
142
|
+
}
|
|
143
|
+
else if (status.startsWith("D")) {
|
|
144
|
+
filesDeleted.push(file);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
commits,
|
|
149
|
+
filesAdded,
|
|
150
|
+
filesModified,
|
|
151
|
+
filesDeleted,
|
|
152
|
+
insertions,
|
|
153
|
+
deletions,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get full diff between HEAD and a branch
|
|
158
|
+
*/
|
|
159
|
+
export function getFullDiff(folder, branchName) {
|
|
160
|
+
const fullPath = resolve(folder);
|
|
161
|
+
return git(["diff", `HEAD..${branchName}`], fullPath);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get commit log between HEAD and a branch
|
|
165
|
+
*/
|
|
166
|
+
export function getCommitLog(folder, branchName) {
|
|
167
|
+
const fullPath = resolve(folder);
|
|
168
|
+
const log = gitSafe(["log", "--oneline", "--numstat", `HEAD..${branchName}`], fullPath) || "";
|
|
169
|
+
const commits = [];
|
|
170
|
+
let currentCommit = null;
|
|
171
|
+
for (const line of log.split("\n")) {
|
|
172
|
+
if (!line.trim())
|
|
173
|
+
continue;
|
|
174
|
+
// Commit line: "abc1234 Commit message here"
|
|
175
|
+
const commitMatch = line.match(/^([a-f0-9]+)\s+(.+)$/);
|
|
176
|
+
if (commitMatch && !line.includes("\t")) {
|
|
177
|
+
if (currentCommit) {
|
|
178
|
+
commits.push(currentCommit);
|
|
179
|
+
}
|
|
180
|
+
currentCommit = {
|
|
181
|
+
hash: commitMatch[1],
|
|
182
|
+
message: commitMatch[2],
|
|
183
|
+
filesChanged: 0,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
else if (currentCommit && line.includes("\t")) {
|
|
187
|
+
// File stat line
|
|
188
|
+
currentCommit.filesChanged++;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (currentCommit) {
|
|
192
|
+
commits.push(currentCommit);
|
|
193
|
+
}
|
|
194
|
+
return commits;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Apply a branch (fast-forward merge)
|
|
198
|
+
*/
|
|
199
|
+
export function applyBranch(folder, branchName, options) {
|
|
200
|
+
const fullPath = resolve(folder);
|
|
201
|
+
const stats = getBundleStats(fullPath, branchName);
|
|
202
|
+
if (options?.force) {
|
|
203
|
+
// Use --no-edit to avoid interactive editor, provide merge commit message
|
|
204
|
+
git(["merge", "--no-edit", "-m", `Merge ${branchName}`, branchName], fullPath);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
git(["merge", "--ff-only", branchName], fullPath);
|
|
208
|
+
}
|
|
209
|
+
// Clean up the branch
|
|
210
|
+
git(["branch", "-d", branchName], fullPath);
|
|
211
|
+
return {
|
|
212
|
+
commits: stats.commits,
|
|
213
|
+
files: stats.filesAdded.length + stats.filesModified.length + stats.filesDeleted.length,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Discard a branch (delete without merging)
|
|
218
|
+
*/
|
|
219
|
+
export function discardBranch(folder, branchName) {
|
|
220
|
+
const fullPath = resolve(folder);
|
|
221
|
+
// Use -D to force delete even if not merged
|
|
222
|
+
gitSafe(["branch", "-D", branchName], fullPath);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Check if a branch exists
|
|
226
|
+
*/
|
|
227
|
+
export function branchExists(folder, branchName) {
|
|
228
|
+
const fullPath = resolve(folder);
|
|
229
|
+
const result = gitSafe(["rev-parse", "--verify", branchName], fullPath);
|
|
230
|
+
return result !== null;
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exit codes for CLI commands
|
|
3
|
+
*/
|
|
4
|
+
export declare const ExitCode: {
|
|
5
|
+
readonly SUCCESS: 0;
|
|
6
|
+
readonly CONFLICT: 1;
|
|
7
|
+
readonly NOT_FOUND: 2;
|
|
8
|
+
readonly NOT_GIT_REPO: 3;
|
|
9
|
+
readonly NETWORK_ERROR: 4;
|
|
10
|
+
readonly DIRTY_WORKSPACE: 5;
|
|
11
|
+
readonly TIMEOUT: 6;
|
|
12
|
+
readonly NO_CHANGES: 7;
|
|
13
|
+
};
|
|
14
|
+
export type ExitCodeType = (typeof ExitCode)[keyof typeof ExitCode];
|
|
15
|
+
/**
|
|
16
|
+
* Output options for commands
|
|
17
|
+
*/
|
|
18
|
+
export interface OutputOptions {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
quiet?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Error response structure
|
|
24
|
+
*/
|
|
25
|
+
export interface ErrorResponse {
|
|
26
|
+
error: string;
|
|
27
|
+
message?: string;
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Output data to console based on options
|
|
32
|
+
*/
|
|
33
|
+
export declare function output(data: unknown, options: OutputOptions): void;
|
|
34
|
+
/**
|
|
35
|
+
* Exit with an error code and message
|
|
36
|
+
*/
|
|
37
|
+
export declare function exitWithError(code: ExitCodeType, error: ErrorResponse, options: OutputOptions): never;
|
|
38
|
+
/**
|
|
39
|
+
* Success exit
|
|
40
|
+
*/
|
|
41
|
+
export declare function exitSuccess(data: unknown, options: OutputOptions): never;
|
|
42
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;CASX,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CASlE;AAsED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,aAAa,GACrB,KAAK,CAiBP;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,CAGxE"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
/**
|
|
3
|
+
* Exit codes for CLI commands
|
|
4
|
+
*/
|
|
5
|
+
export const ExitCode = {
|
|
6
|
+
SUCCESS: 0,
|
|
7
|
+
CONFLICT: 1,
|
|
8
|
+
NOT_FOUND: 2,
|
|
9
|
+
NOT_GIT_REPO: 3,
|
|
10
|
+
NETWORK_ERROR: 4,
|
|
11
|
+
DIRTY_WORKSPACE: 5,
|
|
12
|
+
TIMEOUT: 6,
|
|
13
|
+
NO_CHANGES: 7,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Output data to console based on options
|
|
17
|
+
*/
|
|
18
|
+
export function output(data, options) {
|
|
19
|
+
if (options.quiet)
|
|
20
|
+
return;
|
|
21
|
+
if (options.json) {
|
|
22
|
+
console.log(JSON.stringify(data, null, 2));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// Pretty print for human consumption
|
|
26
|
+
prettyPrint(data);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Pretty print data for human consumption
|
|
31
|
+
*/
|
|
32
|
+
function prettyPrint(data) {
|
|
33
|
+
if (typeof data === "string") {
|
|
34
|
+
console.log(data);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (typeof data !== "object" || data === null) {
|
|
38
|
+
console.log(data);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const obj = data;
|
|
42
|
+
// Handle status messages
|
|
43
|
+
if ("status" in obj) {
|
|
44
|
+
const status = obj.status;
|
|
45
|
+
if (status === "deployed" || status === "applied" || status === "completed") {
|
|
46
|
+
console.log(chalk.green(`✓ ${status}`));
|
|
47
|
+
}
|
|
48
|
+
else if (status === "fetched") {
|
|
49
|
+
console.log(chalk.blue(`✓ ${status}`));
|
|
50
|
+
}
|
|
51
|
+
else if (status === "discarded") {
|
|
52
|
+
console.log(chalk.yellow(`✓ ${status}`));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.log(chalk.dim(`Status: ${status}`));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Print other fields
|
|
59
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
60
|
+
if (key === "status")
|
|
61
|
+
continue;
|
|
62
|
+
if (key === "error") {
|
|
63
|
+
console.log(chalk.red(`Error: ${value}`));
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (Array.isArray(value)) {
|
|
67
|
+
console.log(chalk.dim(`${formatKey(key)}: ${value.length} items`));
|
|
68
|
+
for (const item of value.slice(0, 10)) {
|
|
69
|
+
console.log(chalk.dim(` - ${typeof item === "object" ? JSON.stringify(item) : item}`));
|
|
70
|
+
}
|
|
71
|
+
if (value.length > 10) {
|
|
72
|
+
console.log(chalk.dim(` ... and ${value.length - 10} more`));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if (typeof value === "object" && value !== null) {
|
|
76
|
+
console.log(chalk.dim(`${formatKey(key)}:`));
|
|
77
|
+
for (const [subKey, subValue] of Object.entries(value)) {
|
|
78
|
+
console.log(chalk.dim(` ${formatKey(subKey)}: ${subValue}`));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log(chalk.dim(`${formatKey(key)}: ${value}`));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Format a camelCase or snake_case key for display
|
|
88
|
+
*/
|
|
89
|
+
function formatKey(key) {
|
|
90
|
+
return key
|
|
91
|
+
.replace(/_/g, " ")
|
|
92
|
+
.replace(/([A-Z])/g, " $1")
|
|
93
|
+
.toLowerCase()
|
|
94
|
+
.replace(/^\w/, (c) => c.toUpperCase());
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Exit with an error code and message
|
|
98
|
+
*/
|
|
99
|
+
export function exitWithError(code, error, options) {
|
|
100
|
+
if (options.quiet) {
|
|
101
|
+
process.exit(code);
|
|
102
|
+
}
|
|
103
|
+
if (options.json) {
|
|
104
|
+
console.log(JSON.stringify(error, null, 2));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
console.log(chalk.red(`\nError: ${error.message || error.error}`));
|
|
108
|
+
if (error.files && Array.isArray(error.files)) {
|
|
109
|
+
for (const file of error.files) {
|
|
110
|
+
console.log(chalk.dim(` - ${file}`));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
process.exit(code);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Success exit
|
|
118
|
+
*/
|
|
119
|
+
export function exitSuccess(data, options) {
|
|
120
|
+
output(data, options);
|
|
121
|
+
process.exit(ExitCode.SUCCESS);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
|