@tlog/cli 0.1.3
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 +307 -0
- package/bin/.gitkeep +0 -0
- package/bin/tlog.js +4 -0
- package/dist/commands/delete.d.ts +8 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +104 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/init-template.d.ts +12 -0
- package/dist/commands/init-template.d.ts.map +1 -0
- package/dist/commands/init-template.js +168 -0
- package/dist/commands/init-template.js.map +1 -0
- package/dist/commands/related.d.ts +13 -0
- package/dist/commands/related.d.ts.map +1 -0
- package/dist/commands/related.js +193 -0
- package/dist/commands/related.js.map +1 -0
- package/dist/commands/stats.d.ts +8 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +62 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/suite-case.d.ts +20 -0
- package/dist/commands/suite-case.d.ts.map +1 -0
- package/dist/commands/suite-case.js +83 -0
- package/dist/commands/suite-case.js.map +1 -0
- package/dist/commands/update.d.ts +33 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +159 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate-list.d.ts +36 -0
- package/dist/commands/validate-list.d.ts.map +1 -0
- package/dist/commands/validate-list.js +270 -0
- package/dist/commands/validate-list.js.map +1 -0
- package/dist/core.d.ts +30 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +143 -0
- package/dist/core.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +218 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type GlobalOptions } from "../core.js";
|
|
2
|
+
export interface ValidateOptions {
|
|
3
|
+
dir: string;
|
|
4
|
+
failOnWarning: boolean;
|
|
5
|
+
format?: string;
|
|
6
|
+
watch?: boolean;
|
|
7
|
+
watchInterval?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ListTemplatesOptions {
|
|
10
|
+
dir: string;
|
|
11
|
+
format?: string;
|
|
12
|
+
output?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SuiteListOptions {
|
|
15
|
+
dir: string;
|
|
16
|
+
id?: string;
|
|
17
|
+
format?: string;
|
|
18
|
+
output?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CaseListOptions {
|
|
21
|
+
dir: string;
|
|
22
|
+
id?: string;
|
|
23
|
+
tag?: string;
|
|
24
|
+
owners?: string;
|
|
25
|
+
scopedOnly?: boolean;
|
|
26
|
+
issueHas?: string;
|
|
27
|
+
issueStatus?: string;
|
|
28
|
+
status?: string;
|
|
29
|
+
format?: string;
|
|
30
|
+
output?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function runValidate(cwd: string, options: ValidateOptions, globalOptions: GlobalOptions): void;
|
|
33
|
+
export declare function runListTemplates(cwd: string, options: ListTemplatesOptions, globalOptions: GlobalOptions): void;
|
|
34
|
+
export declare function runSuiteList(cwd: string, options: SuiteListOptions, globalOptions: GlobalOptions): void;
|
|
35
|
+
export declare function runCaseList(cwd: string, options: CaseListOptions, globalOptions: GlobalOptions): void;
|
|
36
|
+
//# sourceMappingURL=validate-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-list.d.ts","sourceRoot":"","sources":["../../src/commands/validate-list.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkBD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuDD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,CAiDrG;AAiED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,CA+B/G;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,CA8BvG;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,CAkGrG"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { ISSUE_STATUSES, detectEntityType, normalizeTlogPath, parseYaml, validateCase, validateSuite } from "@tlog/shared";
|
|
4
|
+
import { CliError, emitSuccess, ensureDirectory, formatOf, outputPath, splitCsv, toStatus, walkYamlFiles } from "../core.js";
|
|
5
|
+
function csvCell(value) {
|
|
6
|
+
if (value.includes(",") || value.includes("\"") || value.includes("\n")) {
|
|
7
|
+
return `"${value.replaceAll("\"", "\"\"")}"`;
|
|
8
|
+
}
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
function toCsv(headers, rows) {
|
|
12
|
+
return [headers.join(","), ...rows.map((row) => row.map(csvCell).join(","))].join("\n");
|
|
13
|
+
}
|
|
14
|
+
function toAlignedTable(headers, rows) {
|
|
15
|
+
const widths = headers.map((header, index) => Math.max(header.length, ...rows.map((row) => (row[index] ?? "").length)));
|
|
16
|
+
const padRow = (row) => row.map((cell, index) => cell.padEnd(widths[index])).join(" ");
|
|
17
|
+
const lines = [padRow(headers)];
|
|
18
|
+
if (rows.length === 0) {
|
|
19
|
+
lines.push("(empty)");
|
|
20
|
+
return lines.join("\n");
|
|
21
|
+
}
|
|
22
|
+
lines.push(...rows.map((row) => padRow(row)));
|
|
23
|
+
return lines.join("\n");
|
|
24
|
+
}
|
|
25
|
+
function emitListResult(command, headers, rows, data, format, output) {
|
|
26
|
+
const content = format === "json"
|
|
27
|
+
? JSON.stringify({ ok: true, command, data }, null, 2)
|
|
28
|
+
: format === "csv"
|
|
29
|
+
? toCsv(headers, rows)
|
|
30
|
+
: toAlignedTable(headers, rows);
|
|
31
|
+
if (output) {
|
|
32
|
+
const outPath = resolve(process.cwd(), output);
|
|
33
|
+
mkdirSync(dirname(outPath), { recursive: true });
|
|
34
|
+
writeFileSync(outPath, `${content}\n`, "utf8");
|
|
35
|
+
process.stdout.write(`Wrote: ${normalizeTlogPath(outPath)}\n`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
process.stdout.write(`${content}\n`);
|
|
39
|
+
}
|
|
40
|
+
export function runValidate(cwd, options, globalOptions) {
|
|
41
|
+
const format = formatOf(globalOptions, options.format);
|
|
42
|
+
const rootDir = resolve(cwd, options.dir);
|
|
43
|
+
ensureDirectory(rootDir, "Validation target does not exist");
|
|
44
|
+
const intervalMs = Number.parseInt(options.watchInterval ?? "1000", 10);
|
|
45
|
+
if (options.watch) {
|
|
46
|
+
if (process.env.CI) {
|
|
47
|
+
throw new CliError("Watch mode is disabled in CI environment.");
|
|
48
|
+
}
|
|
49
|
+
if (!Number.isFinite(intervalMs) || intervalMs < 200) {
|
|
50
|
+
throw new CliError(`Invalid watch interval: ${options.watchInterval ?? ""}. Expected integer >= 200.`);
|
|
51
|
+
}
|
|
52
|
+
let previous = null;
|
|
53
|
+
let previousSignature = "";
|
|
54
|
+
const runOnce = () => {
|
|
55
|
+
const signature = buildWatchSignature(rootDir);
|
|
56
|
+
if (signature === previousSignature) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
previousSignature = signature;
|
|
60
|
+
const current = collectValidation(cwd, rootDir, options.failOnWarning);
|
|
61
|
+
if (previous) {
|
|
62
|
+
process.stdout.write(`Change detected: errors ${previous.errors.length} -> ${current.errors.length}, warnings ${previous.warnings.length} -> ${current.warnings.length}\n`);
|
|
63
|
+
}
|
|
64
|
+
emitValidationResult(current, format, options.failOnWarning);
|
|
65
|
+
previous = current;
|
|
66
|
+
};
|
|
67
|
+
runOnce();
|
|
68
|
+
process.stdout.write(`Watching: ${normalizeTlogPath(rootDir)} (interval=${intervalMs}ms)\n`);
|
|
69
|
+
const timer = setInterval(runOnce, intervalMs);
|
|
70
|
+
process.on("SIGINT", () => {
|
|
71
|
+
clearInterval(timer);
|
|
72
|
+
process.stdout.write("Stopped watch mode.\n");
|
|
73
|
+
process.exit(0);
|
|
74
|
+
});
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const summary = collectValidation(cwd, rootDir, options.failOnWarning);
|
|
78
|
+
emitValidationResult(summary, format, options.failOnWarning);
|
|
79
|
+
if (summary.hasFailure) {
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function collectValidation(cwd, rootDir, failOnWarning) {
|
|
84
|
+
const files = walkYamlFiles(rootDir);
|
|
85
|
+
const items = [];
|
|
86
|
+
for (const file of files) {
|
|
87
|
+
try {
|
|
88
|
+
const raw = parseYaml(readFileSync(file, "utf8"));
|
|
89
|
+
const type = detectEntityType(file);
|
|
90
|
+
const validation = type === "suite" ? validateSuite(raw) : validateCase(raw);
|
|
91
|
+
items.push({
|
|
92
|
+
path: outputPath(cwd, file),
|
|
93
|
+
type,
|
|
94
|
+
errors: validation.errors.map((error) => `${error.path}: ${error.message}`),
|
|
95
|
+
warnings: validation.warnings.map((warning) => `${warning.path}: ${warning.message}`)
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
100
|
+
items.push({
|
|
101
|
+
path: outputPath(cwd, file),
|
|
102
|
+
type: detectEntityType(file),
|
|
103
|
+
errors: [message],
|
|
104
|
+
warnings: []
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const errors = items.flatMap((item) => item.errors.map((message) => `${item.path}: ${message}`));
|
|
109
|
+
const warnings = items.flatMap((item) => item.warnings.map((message) => `${item.path}: ${message}`));
|
|
110
|
+
const hasFailure = errors.length > 0 || (failOnWarning && warnings.length > 0);
|
|
111
|
+
return { rootDir, files, items, errors, warnings, hasFailure };
|
|
112
|
+
}
|
|
113
|
+
function emitValidationResult(summary, format, failOnWarning) {
|
|
114
|
+
emitSuccess("validate", {
|
|
115
|
+
dir: normalizeTlogPath(summary.rootDir),
|
|
116
|
+
totalFiles: summary.files.length,
|
|
117
|
+
errorCount: summary.errors.length,
|
|
118
|
+
warningCount: summary.warnings.length,
|
|
119
|
+
failOnWarning,
|
|
120
|
+
items: summary.items
|
|
121
|
+
}, format, [
|
|
122
|
+
`${summary.hasFailure ? "Validation failed" : "Validation passed"}: files=${summary.files.length}, errors=${summary.errors.length}, warnings=${summary.warnings.length}`,
|
|
123
|
+
...summary.errors.map((entry) => `ERROR ${entry}`),
|
|
124
|
+
...summary.warnings.map((entry) => `WARN ${entry}`)
|
|
125
|
+
]);
|
|
126
|
+
}
|
|
127
|
+
function buildWatchSignature(rootDir) {
|
|
128
|
+
const files = walkYamlFiles(rootDir).sort();
|
|
129
|
+
return files
|
|
130
|
+
.map((file) => {
|
|
131
|
+
const stat = statSync(file);
|
|
132
|
+
return `${file}:${stat.mtimeMs}:${stat.size}`;
|
|
133
|
+
})
|
|
134
|
+
.join("|");
|
|
135
|
+
}
|
|
136
|
+
export function runListTemplates(cwd, options, globalOptions) {
|
|
137
|
+
const format = formatOf(globalOptions, options.format);
|
|
138
|
+
const rootDir = resolve(cwd, options.dir);
|
|
139
|
+
ensureDirectory(rootDir, "Template search directory does not exist");
|
|
140
|
+
const items = readdirSync(rootDir, { withFileTypes: true })
|
|
141
|
+
.filter((entry) => entry.isDirectory())
|
|
142
|
+
.map((entry) => {
|
|
143
|
+
const fullPath = join(rootDir, entry.name);
|
|
144
|
+
return {
|
|
145
|
+
name: entry.name,
|
|
146
|
+
path: normalizeTlogPath(fullPath),
|
|
147
|
+
valid: existsSync(join(fullPath, "index.yaml"))
|
|
148
|
+
};
|
|
149
|
+
})
|
|
150
|
+
.filter((entry) => entry.valid)
|
|
151
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
152
|
+
.map(({ valid: _, ...rest }) => rest);
|
|
153
|
+
emitListResult("list templates", ["name", "path"], items.map((item) => [item.name, item.path]), {
|
|
154
|
+
dir: normalizeTlogPath(rootDir),
|
|
155
|
+
count: items.length,
|
|
156
|
+
items
|
|
157
|
+
}, format, options.output);
|
|
158
|
+
}
|
|
159
|
+
export function runSuiteList(cwd, options, globalOptions) {
|
|
160
|
+
const format = formatOf(globalOptions, options.format);
|
|
161
|
+
const rootDir = resolve(cwd, options.dir);
|
|
162
|
+
ensureDirectory(rootDir, "Suite search directory does not exist");
|
|
163
|
+
const files = walkYamlFiles(rootDir).filter((path) => detectEntityType(path) === "suite");
|
|
164
|
+
const items = files
|
|
165
|
+
.map((file) => {
|
|
166
|
+
const raw = parseYaml(readFileSync(file, "utf8"));
|
|
167
|
+
return {
|
|
168
|
+
id: typeof raw.id === "string" ? raw.id : "",
|
|
169
|
+
path: outputPath(cwd, file)
|
|
170
|
+
};
|
|
171
|
+
})
|
|
172
|
+
.filter((item) => item.id.length > 0)
|
|
173
|
+
.filter((item) => (options.id ? item.id.includes(options.id) : true))
|
|
174
|
+
.sort((a, b) => a.id.localeCompare(b.id));
|
|
175
|
+
emitListResult("suite list", ["id", "path"], items.map((item) => [item.id, item.path]), {
|
|
176
|
+
dir: normalizeTlogPath(rootDir),
|
|
177
|
+
count: items.length,
|
|
178
|
+
items
|
|
179
|
+
}, format, options.output);
|
|
180
|
+
}
|
|
181
|
+
export function runCaseList(cwd, options, globalOptions) {
|
|
182
|
+
const format = formatOf(globalOptions, options.format);
|
|
183
|
+
const rootDir = resolve(cwd, options.dir);
|
|
184
|
+
ensureDirectory(rootDir, "Case search directory does not exist");
|
|
185
|
+
const hasStatusFilter = options.status !== undefined;
|
|
186
|
+
const statusFilter = hasStatusFilter ? toStatus(options.status) : undefined;
|
|
187
|
+
const tagFilter = options.tag?.trim();
|
|
188
|
+
const scopedOnly = options.scopedOnly === true;
|
|
189
|
+
const ownerFilters = splitCsv(options.owners);
|
|
190
|
+
const issueHasKeyword = options.issueHas?.trim().toLowerCase();
|
|
191
|
+
const issueStatusFilter = options.issueStatus?.trim();
|
|
192
|
+
const validIssueStatuses = ISSUE_STATUSES;
|
|
193
|
+
if (issueStatusFilter && !validIssueStatuses.includes(issueStatusFilter)) {
|
|
194
|
+
throw new CliError(`Invalid issue status: ${issueStatusFilter}. Expected open|doing|resolved|pending.`);
|
|
195
|
+
}
|
|
196
|
+
const suiteOwnersCache = new Map();
|
|
197
|
+
const files = walkYamlFiles(rootDir).filter((path) => detectEntityType(path) === "case");
|
|
198
|
+
const items = files
|
|
199
|
+
.map((file) => {
|
|
200
|
+
const raw = parseYaml(readFileSync(file, "utf8"));
|
|
201
|
+
const suiteDir = dirname(file);
|
|
202
|
+
const suitePath = join(suiteDir, "index.yaml");
|
|
203
|
+
if (!suiteOwnersCache.has(suitePath)) {
|
|
204
|
+
let owners = [];
|
|
205
|
+
if (existsSync(suitePath)) {
|
|
206
|
+
try {
|
|
207
|
+
const suiteRaw = parseYaml(readFileSync(suitePath, "utf8"));
|
|
208
|
+
owners = Array.isArray(suiteRaw.owners)
|
|
209
|
+
? suiteRaw.owners.filter((owner) => typeof owner === "string")
|
|
210
|
+
: [];
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
owners = [];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
suiteOwnersCache.set(suitePath, owners);
|
|
217
|
+
}
|
|
218
|
+
const issues = Array.isArray(raw.issues)
|
|
219
|
+
? raw.issues.filter((issue) => issue !== null && typeof issue === "object")
|
|
220
|
+
: [];
|
|
221
|
+
const issueStatuses = issues
|
|
222
|
+
.map((issue) => issue.status)
|
|
223
|
+
.filter((status) => typeof status === "string");
|
|
224
|
+
const tags = Array.isArray(raw.tags) ? raw.tags.filter((tag) => typeof tag === "string") : [];
|
|
225
|
+
return {
|
|
226
|
+
id: typeof raw.id === "string" ? raw.id : "",
|
|
227
|
+
status: typeof raw.status === "string" || raw.status === null ? raw.status : null,
|
|
228
|
+
scoped: raw.scoped === true,
|
|
229
|
+
suiteOwners: suiteOwnersCache.get(suitePath) ?? [],
|
|
230
|
+
issueStatuses,
|
|
231
|
+
issues,
|
|
232
|
+
path: outputPath(cwd, file),
|
|
233
|
+
tags
|
|
234
|
+
};
|
|
235
|
+
})
|
|
236
|
+
.filter((item) => item.id.length > 0)
|
|
237
|
+
.filter((item) => (options.id ? item.id.includes(options.id) : true))
|
|
238
|
+
.filter((item) => (hasStatusFilter ? item.status === statusFilter : true))
|
|
239
|
+
.filter((item) => (tagFilter ? item.tags.includes(tagFilter) : true))
|
|
240
|
+
.filter((item) => (scopedOnly ? item.scoped : true))
|
|
241
|
+
.filter((item) => (ownerFilters.length > 0 ? ownerFilters.some((owner) => item.suiteOwners.includes(owner)) : true))
|
|
242
|
+
.filter((item) => (issueStatusFilter ? item.issueStatuses.includes(issueStatusFilter) : true))
|
|
243
|
+
.filter((item) => {
|
|
244
|
+
if (!issueHasKeyword) {
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
return item.issues.some((issue) => {
|
|
248
|
+
const parts = [
|
|
249
|
+
issue.incident,
|
|
250
|
+
issue.status,
|
|
251
|
+
...(Array.isArray(issue.owners) ? issue.owners : []),
|
|
252
|
+
...(Array.isArray(issue.causes) ? issue.causes : []),
|
|
253
|
+
...(Array.isArray(issue.solutions) ? issue.solutions : []),
|
|
254
|
+
...(Array.isArray(issue.related) ? issue.related : []),
|
|
255
|
+
...(Array.isArray(issue.remarks) ? issue.remarks : [])
|
|
256
|
+
]
|
|
257
|
+
.filter((value) => typeof value === "string")
|
|
258
|
+
.map((value) => value.toLowerCase());
|
|
259
|
+
return parts.some((value) => value.includes(issueHasKeyword));
|
|
260
|
+
});
|
|
261
|
+
})
|
|
262
|
+
.map((item) => ({ id: item.id, status: item.status, path: item.path }))
|
|
263
|
+
.sort((a, b) => a.id.localeCompare(b.id));
|
|
264
|
+
emitListResult("case list", ["id", "status", "path"], items.map((item) => [item.id, item.status ?? "null", item.path]), {
|
|
265
|
+
dir: normalizeTlogPath(rootDir),
|
|
266
|
+
count: items.length,
|
|
267
|
+
items
|
|
268
|
+
}, format, options.output);
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=validate-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-list.js","sourceRoot":"","sources":["../../src/commands/validate-list.ts"],"names":[],"mappings":"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"}
|
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type TestCaseStatus } from "@tlog/shared";
|
|
3
|
+
export interface GlobalOptions {
|
|
4
|
+
dryRun: boolean;
|
|
5
|
+
json: boolean;
|
|
6
|
+
yes: boolean;
|
|
7
|
+
}
|
|
8
|
+
export type OutputFormat = "text" | "json" | "csv";
|
|
9
|
+
interface CliErrorOptions {
|
|
10
|
+
exitCode?: number;
|
|
11
|
+
details?: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare class CliError extends Error {
|
|
14
|
+
readonly exitCode: number;
|
|
15
|
+
readonly details: string[];
|
|
16
|
+
constructor(message: string, options?: CliErrorOptions);
|
|
17
|
+
}
|
|
18
|
+
export declare function splitCsv(value?: string): string[];
|
|
19
|
+
export declare function ensureValidId(id: string, label?: string): void;
|
|
20
|
+
export declare function toStatus(value: string | undefined): TestCaseStatus | null;
|
|
21
|
+
export declare function ensureDirectory(path: string, messagePrefix: string): void;
|
|
22
|
+
export declare function walkYamlFiles(rootDir: string): string[];
|
|
23
|
+
export declare function findDuplicateId(rootDir: string, id: string): string | null;
|
|
24
|
+
export declare function formatOf(globalOptions: GlobalOptions, format?: string): OutputFormat;
|
|
25
|
+
export declare function emitSuccess(command: string, data: Record<string, unknown>, format: OutputFormat, textLines: string[]): void;
|
|
26
|
+
export declare function emitFailure(command: string, error: CliError | Error, format: OutputFormat): void;
|
|
27
|
+
export declare function outputPath(rootDir: string, targetPath: string): string;
|
|
28
|
+
export declare function getGlobals(command: Command): GlobalOptions;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAmD,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpG,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEnD,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,OAAO,EAAE,MAAM,EAAE,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAM3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CASjD;AAID,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,SAAO,GAAG,IAAI,CAI5D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,IAAI,CAWzE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAQzE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBvD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB1E;AAED,wBAAgB,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CASpF;AAUD,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EAAE,GAClB,IAAI,CAiBN;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAyBhG;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAO1D"}
|
package/dist/core.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { join, relative } from "node:path";
|
|
3
|
+
import { TESTCASE_STATUSES, normalizeTlogPath, parseYaml } from "@tlog/shared";
|
|
4
|
+
export class CliError extends Error {
|
|
5
|
+
exitCode;
|
|
6
|
+
details;
|
|
7
|
+
constructor(message, options = {}) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = "CliError";
|
|
10
|
+
this.exitCode = options.exitCode ?? 1;
|
|
11
|
+
this.details = options.details ?? [];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function splitCsv(value) {
|
|
15
|
+
if (!value) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
return value
|
|
19
|
+
.split(",")
|
|
20
|
+
.map((item) => item.trim())
|
|
21
|
+
.filter((item) => item.length > 0);
|
|
22
|
+
}
|
|
23
|
+
const ID_PATTERN = /^[A-Za-z0-9_-]+$/;
|
|
24
|
+
export function ensureValidId(id, label = "id") {
|
|
25
|
+
if (!ID_PATTERN.test(id)) {
|
|
26
|
+
throw new CliError(`Invalid ${label}: ${id}. Expected pattern ^[A-Za-z0-9_-]+$.`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function toStatus(value) {
|
|
30
|
+
if (value === undefined || value === "null") {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
const valid = TESTCASE_STATUSES.filter((item) => item !== null);
|
|
34
|
+
if (valid.includes(value)) {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
throw new CliError(`Invalid status: ${value}. Expected todo|doing|done|null.`);
|
|
38
|
+
}
|
|
39
|
+
export function ensureDirectory(path, messagePrefix) {
|
|
40
|
+
if (!existsSync(path)) {
|
|
41
|
+
throw new CliError(`${messagePrefix}: ${path}`);
|
|
42
|
+
}
|
|
43
|
+
if (!statSync(path).isDirectory()) {
|
|
44
|
+
throw new CliError(`Not a directory: ${path}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function walkYamlFiles(rootDir) {
|
|
48
|
+
const queue = [rootDir];
|
|
49
|
+
const files = [];
|
|
50
|
+
while (queue.length > 0) {
|
|
51
|
+
const current = queue.shift();
|
|
52
|
+
if (!current) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const entries = readdirSync(current, { withFileTypes: true });
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
const fullPath = join(current, entry.name);
|
|
58
|
+
if (entry.isDirectory()) {
|
|
59
|
+
queue.push(fullPath);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (entry.isFile() && entry.name.endsWith(".yaml")) {
|
|
63
|
+
files.push(fullPath);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return files;
|
|
68
|
+
}
|
|
69
|
+
export function findDuplicateId(rootDir, id) {
|
|
70
|
+
if (!existsSync(rootDir)) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const files = walkYamlFiles(rootDir);
|
|
74
|
+
for (const file of files) {
|
|
75
|
+
try {
|
|
76
|
+
const raw = parseYaml(readFileSync(file, "utf8"));
|
|
77
|
+
if (raw.id === id) {
|
|
78
|
+
return file;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
export function formatOf(globalOptions, format) {
|
|
88
|
+
if (globalOptions.json || format === "json") {
|
|
89
|
+
return "json";
|
|
90
|
+
}
|
|
91
|
+
if (format === "csv") {
|
|
92
|
+
return "csv";
|
|
93
|
+
}
|
|
94
|
+
return "text";
|
|
95
|
+
}
|
|
96
|
+
function writeText(text) {
|
|
97
|
+
process.stdout.write(`${text}\n`);
|
|
98
|
+
}
|
|
99
|
+
function writeErrorText(text) {
|
|
100
|
+
process.stderr.write(`${text}\n`);
|
|
101
|
+
}
|
|
102
|
+
export function emitSuccess(command, data, format, textLines) {
|
|
103
|
+
if (format === "json") {
|
|
104
|
+
writeText(JSON.stringify({
|
|
105
|
+
ok: true,
|
|
106
|
+
command,
|
|
107
|
+
data
|
|
108
|
+
}, null, 2));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
writeText(textLines.join("\n"));
|
|
112
|
+
}
|
|
113
|
+
export function emitFailure(command, error, format) {
|
|
114
|
+
const details = error instanceof CliError ? error.details : [];
|
|
115
|
+
if (format === "json") {
|
|
116
|
+
writeErrorText(JSON.stringify({
|
|
117
|
+
ok: false,
|
|
118
|
+
command,
|
|
119
|
+
error: {
|
|
120
|
+
message: error.message,
|
|
121
|
+
details
|
|
122
|
+
}
|
|
123
|
+
}, null, 2));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
writeErrorText(`Error: ${error.message}`);
|
|
127
|
+
for (const detail of details) {
|
|
128
|
+
writeErrorText(`- ${detail}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export function outputPath(rootDir, targetPath) {
|
|
132
|
+
const rel = normalizeTlogPath(relative(rootDir, targetPath));
|
|
133
|
+
return rel.length > 0 && rel !== "." ? rel : normalizeTlogPath(targetPath);
|
|
134
|
+
}
|
|
135
|
+
export function getGlobals(command) {
|
|
136
|
+
const values = command.optsWithGlobals();
|
|
137
|
+
return {
|
|
138
|
+
dryRun: values.dryRun === true,
|
|
139
|
+
json: values.json === true,
|
|
140
|
+
yes: values.yes === true
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,UAAU,UAAU,CAAC;AAElC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMrD;AAuMD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA8B3C"}
|