@wirecat/cli-base 0.0.0-stage → 0.22.0
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/LICENSE +204 -0
- package/README.md +390 -2
- package/config/biome.base.json +56 -0
- package/config/cspell.json +57 -0
- package/config/lefthook.yml +34 -0
- package/config/rumdl.toml +9 -0
- package/config/tsconfig.base.json +21 -0
- package/config/tsconfig.scripts.json +13 -0
- package/config/tsconfig.test.json +11 -0
- package/config/vale/CliDocs/Filler.yml +9 -0
- package/config/vale/CliDocs/SentenceLength.yml +6 -0
- package/config/vale/Tg/Tone.yml +7 -0
- package/config/wirecat/LICENSE +204 -0
- package/config/wirecat/biome.base.json +56 -0
- package/config/wirecat/check.mjs +41 -0
- package/config/wirecat/cspell.json +80 -0
- package/config/wirecat/lefthook.yml +26 -0
- package/config/wirecat/manifest.json +23 -0
- package/config/wirecat/markdownlint.json +10 -0
- package/config/wirecat/rumdl.toml +9 -0
- package/dist/codegen/index.d.ts +12 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +11 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/manifest.d.ts +47 -0
- package/dist/codegen/manifest.d.ts.map +1 -0
- package/dist/codegen/manifest.js +73 -0
- package/dist/codegen/manifest.js.map +1 -0
- package/dist/codegen/model.d.ts +146 -0
- package/dist/codegen/model.d.ts.map +1 -0
- package/dist/codegen/model.js +7 -0
- package/dist/codegen/model.js.map +1 -0
- package/dist/codegen/names.d.ts +4 -0
- package/dist/codegen/names.d.ts.map +1 -0
- package/dist/codegen/names.js +46 -0
- package/dist/codegen/names.js.map +1 -0
- package/dist/codegen/pipeline.d.ts +24 -0
- package/dist/codegen/pipeline.d.ts.map +1 -0
- package/dist/codegen/pipeline.js +193 -0
- package/dist/codegen/pipeline.js.map +1 -0
- package/dist/codegen/runtime.d.ts +24 -0
- package/dist/codegen/runtime.d.ts.map +1 -0
- package/dist/codegen/runtime.js +38 -0
- package/dist/codegen/runtime.js.map +1 -0
- package/dist/codegen/tree.d.ts +29 -0
- package/dist/codegen/tree.d.ts.map +1 -0
- package/dist/codegen/tree.js +87 -0
- package/dist/codegen/tree.js.map +1 -0
- package/dist/codegen/typescript.d.ts +6 -0
- package/dist/codegen/typescript.d.ts.map +1 -0
- package/dist/codegen/typescript.js +78 -0
- package/dist/codegen/typescript.js.map +1 -0
- package/dist/codegen/valibot.d.ts +10 -0
- package/dist/codegen/valibot.d.ts.map +1 -0
- package/dist/codegen/valibot.js +132 -0
- package/dist/codegen/valibot.js.map +1 -0
- package/dist/commands/document.d.ts +72 -0
- package/dist/commands/document.d.ts.map +1 -0
- package/dist/commands/document.js +71 -0
- package/dist/commands/document.js.map +1 -0
- package/dist/commands/index.d.ts +83 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +85 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/page.d.ts +80 -0
- package/dist/commands/page.d.ts.map +1 -0
- package/dist/commands/page.js +100 -0
- package/dist/commands/page.js.map +1 -0
- package/dist/completion/index.d.ts +37 -0
- package/dist/completion/index.d.ts.map +1 -0
- package/dist/completion/index.js +87 -0
- package/dist/completion/index.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +61 -0
- package/dist/config.js.map +1 -0
- package/dist/credentials.d.ts +48 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +120 -0
- package/dist/credentials.js.map +1 -0
- package/dist/deadline.d.ts +14 -0
- package/dist/deadline.d.ts.map +1 -0
- package/dist/deadline.js +88 -0
- package/dist/deadline.js.map +1 -0
- package/dist/dev/bin.d.ts +3 -0
- package/dist/dev/bin.d.ts.map +1 -0
- package/dist/dev/bin.js +8 -0
- package/dist/dev/bin.js.map +1 -0
- package/dist/dev/lint.d.ts +31 -0
- package/dist/dev/lint.d.ts.map +1 -0
- package/dist/dev/lint.js +148 -0
- package/dist/dev/lint.js.map +1 -0
- package/dist/dev/main.d.ts +7 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/dev/main.js +279 -0
- package/dist/dev/main.js.map +1 -0
- package/dist/dev/next-version.d.ts +11 -0
- package/dist/dev/next-version.d.ts.map +1 -0
- package/dist/dev/next-version.js +33 -0
- package/dist/dev/next-version.js.map +1 -0
- package/dist/dev/slow-tests.d.ts +14 -0
- package/dist/dev/slow-tests.d.ts.map +1 -0
- package/dist/dev/slow-tests.js +17 -0
- package/dist/dev/slow-tests.js.map +1 -0
- package/dist/dev/test-matrix.d.ts +35 -0
- package/dist/dev/test-matrix.d.ts.map +1 -0
- package/dist/dev/test-matrix.js +93 -0
- package/dist/dev/test-matrix.js.map +1 -0
- package/dist/errors.d.ts +34 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -0
- package/dist/executable.d.ts +3 -0
- package/dist/executable.d.ts.map +1 -0
- package/dist/executable.js +41 -0
- package/dist/executable.js.map +1 -0
- package/dist/exit-codes.d.ts +11 -0
- package/dist/exit-codes.d.ts.map +1 -0
- package/dist/exit-codes.js +25 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/http/index.d.ts +20 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +46 -0
- package/dist/http/index.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/keyring.d.ts +27 -0
- package/dist/keyring.d.ts.map +1 -0
- package/dist/keyring.js +45 -0
- package/dist/keyring.js.map +1 -0
- package/dist/legacy-paths.d.ts +33 -0
- package/dist/legacy-paths.d.ts.map +1 -0
- package/dist/legacy-paths.js +128 -0
- package/dist/legacy-paths.js.map +1 -0
- package/dist/logger.d.ts +12 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +7 -0
- package/dist/logger.js.map +1 -0
- package/dist/logging.d.ts +31 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +58 -0
- package/dist/logging.js.map +1 -0
- package/dist/mcp/index.d.ts +32 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +113 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/output-buffer.d.ts +16 -0
- package/dist/output-buffer.d.ts.map +1 -0
- package/dist/output-buffer.js +69 -0
- package/dist/output-buffer.js.map +1 -0
- package/dist/paths.d.ts +35 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +45 -0
- package/dist/paths.js.map +1 -0
- package/dist/pretty.d.ts +12 -0
- package/dist/pretty.d.ts.map +1 -0
- package/dist/pretty.js +83 -0
- package/dist/pretty.js.map +1 -0
- package/dist/release/index.d.ts +38 -0
- package/dist/release/index.d.ts.map +1 -0
- package/dist/release/index.js +91 -0
- package/dist/release/index.js.map +1 -0
- package/dist/release/markdown.d.ts +36 -0
- package/dist/release/markdown.d.ts.map +1 -0
- package/dist/release/markdown.js +153 -0
- package/dist/release/markdown.js.map +1 -0
- package/dist/release/structure.d.ts +16 -0
- package/dist/release/structure.d.ts.map +1 -0
- package/dist/release/structure.js +74 -0
- package/dist/release/structure.js.map +1 -0
- package/dist/renderer.d.ts +34 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +55 -0
- package/dist/renderer.js.map +1 -0
- package/dist/result-fields.d.ts +4 -0
- package/dist/result-fields.d.ts.map +1 -0
- package/dist/result-fields.js +56 -0
- package/dist/result-fields.js.map +1 -0
- package/dist/retry.d.ts +27 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +26 -0
- package/dist/retry.js.map +1 -0
- package/dist/sanitize.d.ts +25 -0
- package/dist/sanitize.d.ts.map +1 -0
- package/dist/sanitize.js +52 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/skill/index.d.ts +78 -0
- package/dist/skill/index.d.ts.map +1 -0
- package/dist/skill/index.js +190 -0
- package/dist/skill/index.js.map +1 -0
- package/dist/standards/errors.d.ts +40 -0
- package/dist/standards/errors.d.ts.map +1 -0
- package/dist/standards/errors.js +33 -0
- package/dist/standards/errors.js.map +1 -0
- package/dist/standards/index.d.ts +8 -0
- package/dist/standards/index.d.ts.map +1 -0
- package/dist/standards/index.js +8 -0
- package/dist/standards/index.js.map +1 -0
- package/dist/standards/lint.d.ts +29 -0
- package/dist/standards/lint.d.ts.map +1 -0
- package/dist/standards/lint.js +50 -0
- package/dist/standards/lint.js.map +1 -0
- package/dist/standards/log.d.ts +21 -0
- package/dist/standards/log.d.ts.map +1 -0
- package/dist/standards/log.js +18 -0
- package/dist/standards/log.js.map +1 -0
- package/dist/standards/output.d.ts +126 -0
- package/dist/standards/output.d.ts.map +1 -0
- package/dist/standards/output.js +54 -0
- package/dist/standards/output.js.map +1 -0
- package/dist/standards/registry.d.ts +18 -0
- package/dist/standards/registry.d.ts.map +1 -0
- package/dist/standards/registry.js +41 -0
- package/dist/standards/registry.js.map +1 -0
- package/dist/standards/steps.d.ts +28 -0
- package/dist/standards/steps.d.ts.map +1 -0
- package/dist/standards/steps.js +56 -0
- package/dist/standards/steps.js.map +1 -0
- package/dist/standards/vocabulary.d.ts +40 -0
- package/dist/standards/vocabulary.d.ts.map +1 -0
- package/dist/standards/vocabulary.js +242 -0
- package/dist/standards/vocabulary.js.map +1 -0
- package/dist/streams.d.ts +24 -0
- package/dist/streams.d.ts.map +1 -0
- package/dist/streams.js +26 -0
- package/dist/streams.js.map +1 -0
- package/dist/testing/index.d.ts +24 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +29 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/time.d.ts +21 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +19 -0
- package/dist/time.js.map +1 -0
- package/dist/update/index.d.ts +76 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +160 -0
- package/dist/update/index.js.map +1 -0
- package/package.json +135 -4
package/dist/dev/main.js
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cli-dev`: the development scripts every CLI on cli-base used to carry a copy of. Each command
|
|
3
|
+
* reads and writes under `cwd` and reports through `out` and `err`; `main` returns the exit code.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
6
|
+
import { isAbsolute, join } from "node:path";
|
|
7
|
+
import { pathToFileURL } from "node:url";
|
|
8
|
+
import { parseArgs } from "node:util";
|
|
9
|
+
import spawn from "cross-spawn";
|
|
10
|
+
import * as v from "valibot";
|
|
11
|
+
import { parseCommandsDocument } from "../commands/document.js";
|
|
12
|
+
import { changelogProblems, docsProblems, JOURNAL_IDS, markdownFiles, structureProblems, versionScript, } from "../release/index.js";
|
|
13
|
+
import { baselineProblems, baselineSchema, LINT_RULES, OVERRIDE_BUDGET, overridesProblems, overridesSchema, } from "../standards/lint.js";
|
|
14
|
+
import { issuesOf } from "../standards/registry.js";
|
|
15
|
+
import { VOCABULARY } from "../standards/vocabulary.js";
|
|
16
|
+
import { baselineOf, judge, lintCommands } from "./lint.js";
|
|
17
|
+
import { nextVersion } from "./next-version.js";
|
|
18
|
+
import { slowTests } from "./slow-tests.js";
|
|
19
|
+
import { matrixPage, matrixRows, parseArgvLog } from "./test-matrix.js";
|
|
20
|
+
const USAGE = `usage: cli-dev <command> [options]
|
|
21
|
+
|
|
22
|
+
slow-tests [report] [count] the slowest tests and files (report: coverage/tests.json, count: 20)
|
|
23
|
+
next-version <wanted> <latest> <versions-json>
|
|
24
|
+
the version bin/release publishes, given npm's answers
|
|
25
|
+
version [--sync] [--file <path>] package.json's version against src/version.ts
|
|
26
|
+
docs-check [--rules <module>] [--ids <A,B>] [--pages]
|
|
27
|
+
links, anchors and the changelog's shape; --pages also
|
|
28
|
+
docs/ against docs/meta.json, the docs portal's structure
|
|
29
|
+
test-matrix --program <module> --untested <module> --name <cli> [--page <path>] [--check]
|
|
30
|
+
docs/dev/test-matrix.md from coverage/argv.jsonl
|
|
31
|
+
lint (--cli <bin> | --commands <file>) [--baseline <dir>] [--overrides <file>] [--budget <n>]
|
|
32
|
+
[--write-baseline] the command tree against the standard's rules; fails on a
|
|
33
|
+
new violation, a stale baseline entry or override, or more
|
|
34
|
+
overrides than the budget (10). --write-baseline rewrites
|
|
35
|
+
lint/baseline/<rule>.json to today's violations`;
|
|
36
|
+
const load = async (cwd, path) => (await import(pathToFileURL(isAbsolute(path) ? path : join(cwd, path)).href));
|
|
37
|
+
const report = (io, problems, ok) => {
|
|
38
|
+
for (const problem of problems)
|
|
39
|
+
io.err(problem);
|
|
40
|
+
if (problems.length > 0)
|
|
41
|
+
return 1;
|
|
42
|
+
io.out(ok);
|
|
43
|
+
return 0;
|
|
44
|
+
};
|
|
45
|
+
const docsCheck = async (args, io) => {
|
|
46
|
+
const { values } = parseArgs({
|
|
47
|
+
args,
|
|
48
|
+
options: { rules: { type: "string" }, ids: { type: "string" }, pages: { type: "boolean" } },
|
|
49
|
+
});
|
|
50
|
+
const root = io.cwd;
|
|
51
|
+
let changelog;
|
|
52
|
+
let docs;
|
|
53
|
+
if (values.rules) {
|
|
54
|
+
// A module exporting the rules the release check uses too: `CHANGELOG` and `docsRules(root)`.
|
|
55
|
+
const rules = await load(root, values.rules);
|
|
56
|
+
changelog = rules.CHANGELOG;
|
|
57
|
+
docs = rules.docsRules(root);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const ids = [...JOURNAL_IDS, ...(values.ids?.split(",").filter(Boolean) ?? [])];
|
|
61
|
+
changelog = {
|
|
62
|
+
headings: ["Added", "Changed — may break callers", "Fixed", "Security", "Removed"],
|
|
63
|
+
unreleased: "Unreleased",
|
|
64
|
+
ids,
|
|
65
|
+
};
|
|
66
|
+
docs = { files: markdownFiles(root, new Set(["node_modules", "dist", "coverage", ".git", "docs_ai"])), ids };
|
|
67
|
+
}
|
|
68
|
+
return report(io, [
|
|
69
|
+
...changelogProblems(readFileSync(join(root, "CHANGELOG.md"), "utf8"), { ...changelog, release: false }),
|
|
70
|
+
...docsProblems(root, docs),
|
|
71
|
+
...(values.pages ? structureProblems(root) : []),
|
|
72
|
+
], "docs: ok");
|
|
73
|
+
};
|
|
74
|
+
const testMatrix = async (args, io) => {
|
|
75
|
+
const { values } = parseArgs({
|
|
76
|
+
args,
|
|
77
|
+
options: {
|
|
78
|
+
program: { type: "string" },
|
|
79
|
+
untested: { type: "string" },
|
|
80
|
+
name: { type: "string" },
|
|
81
|
+
page: { type: "string", default: "docs/dev/test-matrix.md" },
|
|
82
|
+
check: { type: "boolean", default: false },
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
if (!values.program || !values.untested || !values.name) {
|
|
86
|
+
io.err("test-matrix needs --program, --untested and --name");
|
|
87
|
+
return 2;
|
|
88
|
+
}
|
|
89
|
+
const log = join(io.cwd, "coverage", "argv.jsonl");
|
|
90
|
+
if (!existsSync(log)) {
|
|
91
|
+
io.err("no coverage/argv.jsonl — run the suite first (pnpm test:matrix does)");
|
|
92
|
+
return 1;
|
|
93
|
+
}
|
|
94
|
+
const program = (await load(io.cwd, values.program)).createProgram();
|
|
95
|
+
const untested = (await load(io.cwd, values.untested)).UNTESTED;
|
|
96
|
+
const { rows, stale } = matrixRows(program, parseArgvLog(readFileSync(log, "utf8")), untested);
|
|
97
|
+
writeFileSync(join(io.cwd, values.page), matrixPage(rows, values.name));
|
|
98
|
+
let failed = false;
|
|
99
|
+
if (stale.length > 0) {
|
|
100
|
+
failed = true;
|
|
101
|
+
io.err("untested entries that name nothing in the program any more:");
|
|
102
|
+
for (const entry of stale)
|
|
103
|
+
io.err(` ${entry.command}${entry.option ? ` ${entry.option}` : ""}`);
|
|
104
|
+
}
|
|
105
|
+
const missing = rows.filter((row) => row.state === "missing");
|
|
106
|
+
if (missing.length > 0 && values.check) {
|
|
107
|
+
failed = true;
|
|
108
|
+
io.err(`${missing.length} commands or options with no test and no reason — see ${values.page}:`);
|
|
109
|
+
for (const row of missing)
|
|
110
|
+
io.err(` ${row.command || "(global)"}${row.option ? ` ${row.option}` : ""}`);
|
|
111
|
+
}
|
|
112
|
+
const count = (state) => rows.filter((row) => row.state === state).length;
|
|
113
|
+
io.err(`test matrix: ${count("tested")} tested, ${count("untested")} untested with a reason, ${missing.length} missing`);
|
|
114
|
+
return failed ? 1 : 0;
|
|
115
|
+
};
|
|
116
|
+
const readJson = (path) => {
|
|
117
|
+
try {
|
|
118
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
throw new Error(`${path}: ${error.message}`);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const commandsJson = (io, cli, file) => {
|
|
125
|
+
if (file)
|
|
126
|
+
return readJson(isAbsolute(file) ? file : join(io.cwd, file));
|
|
127
|
+
const bin = cli ?? "";
|
|
128
|
+
const script = /\.[cm]?js$/.test(bin);
|
|
129
|
+
const run = spawn.sync(script ? process.execPath : bin, [...(script ? [bin] : []), "commands", "--json"], {
|
|
130
|
+
cwd: io.cwd,
|
|
131
|
+
encoding: "utf8",
|
|
132
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
133
|
+
});
|
|
134
|
+
if (run.error || run.status !== 0)
|
|
135
|
+
throw new Error(`${bin} commands --json failed: ${run.error?.message ?? String(run.stderr).trim().split("\n")[0]}`);
|
|
136
|
+
return JSON.parse(String(run.stdout));
|
|
137
|
+
};
|
|
138
|
+
const lint = (args, io) => {
|
|
139
|
+
try {
|
|
140
|
+
return lintRun(args, io);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
io.err(error.message);
|
|
144
|
+
return 2;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const lintRun = (args, io) => {
|
|
148
|
+
const { values } = parseArgs({
|
|
149
|
+
args,
|
|
150
|
+
options: {
|
|
151
|
+
cli: { type: "string" },
|
|
152
|
+
commands: { type: "string" },
|
|
153
|
+
baseline: { type: "string", default: "lint/baseline" },
|
|
154
|
+
overrides: { type: "string", default: "lint/overrides.json" },
|
|
155
|
+
budget: { type: "string", default: String(OVERRIDE_BUDGET) },
|
|
156
|
+
"write-baseline": { type: "boolean", default: false },
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
if (Boolean(values.cli) === Boolean(values.commands)) {
|
|
160
|
+
io.err("lint needs one of --cli <bin> or --commands <file>");
|
|
161
|
+
return 2;
|
|
162
|
+
}
|
|
163
|
+
const budget = Number(values.budget);
|
|
164
|
+
if (!Number.isInteger(budget) || budget < 0) {
|
|
165
|
+
io.err(`--budget takes a whole number, not "${values.budget}"`);
|
|
166
|
+
return 2;
|
|
167
|
+
}
|
|
168
|
+
let raw;
|
|
169
|
+
try {
|
|
170
|
+
raw = commandsJson(io, values.cli, values.commands);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
io.err(error.message);
|
|
174
|
+
return 2;
|
|
175
|
+
}
|
|
176
|
+
const parsed = parseCommandsDocument(raw);
|
|
177
|
+
if (!parsed.document) {
|
|
178
|
+
io.err("the commands document is not the shape cli-base's commandsDocument() writes:");
|
|
179
|
+
for (const problem of parsed.problems.slice(0, 20))
|
|
180
|
+
io.err(` ${problem}`);
|
|
181
|
+
if (parsed.problems.length > 20)
|
|
182
|
+
io.err(` … and ${parsed.problems.length - 20} more`);
|
|
183
|
+
return 2;
|
|
184
|
+
}
|
|
185
|
+
const problems = [];
|
|
186
|
+
const overridesPath = join(io.cwd, values.overrides);
|
|
187
|
+
let overrides = [];
|
|
188
|
+
if (existsSync(overridesPath)) {
|
|
189
|
+
const read = v.safeParse(overridesSchema, readJson(overridesPath));
|
|
190
|
+
const found = read.success ? overridesProblems(read.output) : issuesOf(read.issues);
|
|
191
|
+
if (read.success)
|
|
192
|
+
overrides = read.output;
|
|
193
|
+
problems.push(...found.map((issue) => `${values.overrides}: ${issue}`));
|
|
194
|
+
}
|
|
195
|
+
const baselineDir = join(io.cwd, values.baseline);
|
|
196
|
+
const baseline = {};
|
|
197
|
+
if (existsSync(baselineDir))
|
|
198
|
+
for (const file of readdirSync(baselineDir).filter((name) => name.endsWith(".json"))) {
|
|
199
|
+
const read = v.safeParse(baselineSchema, readJson(join(baselineDir, file)));
|
|
200
|
+
const found = read.success ? baselineProblems(read.output) : issuesOf(read.issues);
|
|
201
|
+
if (read.success)
|
|
202
|
+
baseline[file.slice(0, -".json".length)] = read.output;
|
|
203
|
+
problems.push(...found.map((issue) => `${values.baseline}/${file}: ${issue}`));
|
|
204
|
+
}
|
|
205
|
+
const violations = lintCommands(parsed.document, VOCABULARY);
|
|
206
|
+
const severity = new Map(LINT_RULES.map((rule) => [rule.id, rule.severity]));
|
|
207
|
+
if (values["write-baseline"]) {
|
|
208
|
+
mkdirSync(baselineDir, { recursive: true });
|
|
209
|
+
for (const [rule, targets] of Object.entries(baselineOf(violations, overrides))) {
|
|
210
|
+
const path = join(baselineDir, `${rule}.json`);
|
|
211
|
+
if (targets.length > 0)
|
|
212
|
+
writeFileSync(path, `${JSON.stringify(targets, null, 2)}\n`);
|
|
213
|
+
else
|
|
214
|
+
rmSync(path, { force: true });
|
|
215
|
+
baseline[rule] = targets;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const verdict = judge(violations, baseline, overrides, budget);
|
|
219
|
+
for (const id of verdict.unknownRules)
|
|
220
|
+
problems.push(`no lint rule "${id}" (named in ${values.baseline} or ${values.overrides})`);
|
|
221
|
+
for (const found of verdict.fresh)
|
|
222
|
+
problems.push(`${severity.get(found.rule) ?? "?"} ${found.rule} ${found.target}: ${found.message}`);
|
|
223
|
+
for (const entry of verdict.stale)
|
|
224
|
+
problems.push(entry.in === "baseline"
|
|
225
|
+
? `stale baseline entry, fixed or overridden — remove it: ${values.baseline}/${entry.rule}.json "${entry.target}"`
|
|
226
|
+
: `stale override, no such violation — remove it: ${entry.rule} "${entry.target}"`);
|
|
227
|
+
if (verdict.overBudget)
|
|
228
|
+
problems.push(`${overrides.length} overrides; the budget is ${budget}`);
|
|
229
|
+
io.err(`lint: ${violations.length} violations — ${verdict.baselined} in the baseline, ${verdict.overridden} overridden (budget ${budget}), ${verdict.fresh.length} new`);
|
|
230
|
+
return report(io, problems, "lint: ok");
|
|
231
|
+
};
|
|
232
|
+
export const main = async (argv, io) => {
|
|
233
|
+
const [command, ...args] = argv;
|
|
234
|
+
switch (command) {
|
|
235
|
+
case "slow-tests": {
|
|
236
|
+
const [file = "coverage/tests.json", count = "20"] = args;
|
|
237
|
+
const parsed = JSON.parse(readFileSync(join(io.cwd, file), "utf8"));
|
|
238
|
+
io.out(slowTests(parsed, io.cwd, Number(count)));
|
|
239
|
+
return 0;
|
|
240
|
+
}
|
|
241
|
+
case "next-version": {
|
|
242
|
+
const [wanted = "", latest = "", versions = ""] = args;
|
|
243
|
+
const found = nextVersion(wanted, latest, versions);
|
|
244
|
+
if ("error" in found) {
|
|
245
|
+
io.err(found.error);
|
|
246
|
+
return 1;
|
|
247
|
+
}
|
|
248
|
+
io.out(found.version);
|
|
249
|
+
return 0;
|
|
250
|
+
}
|
|
251
|
+
case "version": {
|
|
252
|
+
const { values } = parseArgs({
|
|
253
|
+
args,
|
|
254
|
+
options: { sync: { type: "boolean", default: false }, file: { type: "string", default: "src/version.ts" } },
|
|
255
|
+
});
|
|
256
|
+
const { code, message } = versionScript(io.cwd, values.sync ? ["--sync"] : [], values.file);
|
|
257
|
+
if (code === 0)
|
|
258
|
+
io.out(message);
|
|
259
|
+
else
|
|
260
|
+
io.err(message);
|
|
261
|
+
return code;
|
|
262
|
+
}
|
|
263
|
+
case "docs-check":
|
|
264
|
+
return docsCheck(args, io);
|
|
265
|
+
case "test-matrix":
|
|
266
|
+
return testMatrix(args, io);
|
|
267
|
+
case "lint":
|
|
268
|
+
return lint(args, io);
|
|
269
|
+
case "help":
|
|
270
|
+
case "--help":
|
|
271
|
+
case "-h":
|
|
272
|
+
io.out(USAGE);
|
|
273
|
+
return 0;
|
|
274
|
+
default:
|
|
275
|
+
io.err(command ? `cli-dev: no command "${command}"\n\n${USAGE}` : USAGE);
|
|
276
|
+
return 2;
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/dev/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The version `bin/release` publishes: the one in package.json when npm has not taken it and it is
|
|
3
|
+
* above npm's latest, else the next free one at the same bump level (x.y.0 → minor, x.y.z → patch).
|
|
4
|
+
* npm's answers are arguments, not calls, so CI and a test can hand it any registry state.
|
|
5
|
+
*/
|
|
6
|
+
export declare const nextVersion: (wanted: string, latest: string, versionsJson: string) => {
|
|
7
|
+
version: string;
|
|
8
|
+
} | {
|
|
9
|
+
error: string;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=next-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-version.d.ts","sourceRoot":"","sources":["../../src/dev/next-version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,WAAW,WACd,MAAM,UACN,MAAM,gBACA,MAAM,KACnB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CA6BvC,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The version `bin/release` publishes: the one in package.json when npm has not taken it and it is
|
|
3
|
+
* above npm's latest, else the next free one at the same bump level (x.y.0 → minor, x.y.z → patch).
|
|
4
|
+
* npm's answers are arguments, not calls, so CI and a test can hand it any registry state.
|
|
5
|
+
*/
|
|
6
|
+
export const nextVersion = (wanted, latest, versionsJson) => {
|
|
7
|
+
const parse = (version) => /^(\d+)\.(\d+)\.(\d+)$/.exec(version)?.slice(1).map(Number);
|
|
8
|
+
const compare = (a, b) => (a[0] ?? 0) - (b[0] ?? 0) || (a[1] ?? 0) - (b[1] ?? 0) || (a[2] ?? 0) - (b[2] ?? 0);
|
|
9
|
+
const want = parse(wanted);
|
|
10
|
+
// A pre-release is picked by hand; bin/release still refuses it if npm has it.
|
|
11
|
+
if (!want)
|
|
12
|
+
return { version: wanted };
|
|
13
|
+
let published = [];
|
|
14
|
+
try {
|
|
15
|
+
published = [JSON.parse(versionsJson || "[]")].flat();
|
|
16
|
+
}
|
|
17
|
+
catch { }
|
|
18
|
+
const taken = new Set(published);
|
|
19
|
+
const top = parse(latest);
|
|
20
|
+
if (!top) {
|
|
21
|
+
if (taken.has(wanted))
|
|
22
|
+
return { error: `${wanted} is on npm, and npm's latest "${latest}" is not a plain x.y.z version` };
|
|
23
|
+
return { version: wanted };
|
|
24
|
+
}
|
|
25
|
+
if (!taken.has(wanted) && compare(want, top) > 0)
|
|
26
|
+
return { version: wanted };
|
|
27
|
+
const step = ([major = 0, minor = 0, patch = 0]) => want[2] === 0 ? [major, minor + 1, 0] : [major, minor, patch + 1];
|
|
28
|
+
let next = step(top);
|
|
29
|
+
while (taken.has(next.join(".")))
|
|
30
|
+
next = step(next);
|
|
31
|
+
return { version: next.join(".") };
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=next-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-version.js","sourceRoot":"","sources":["../../src/dev/next-version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,MAAc,EACd,MAAc,EACd,YAAoB,EACqB,EAAE;IAC3C,MAAM,KAAK,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9F,MAAM,OAAO,GAAG,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,CAC3C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAErF,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IAC1B,+EAA+E;IAC/E,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAErC,IAAI,SAAS,GAAc,EAAE,CAAA;IAC7B,IAAI,CAAC;QACH,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACvD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAA;IAEhC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IACzB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YACnB,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,iCAAiC,MAAM,gCAAgC,EAAE,CAAA;QACpG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAC5B,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAE5E,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAW,EAAE,EAAE,CAC3D,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;IACnE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;IACpB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;IACnD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;AACpC,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** The slowest tests and files from vitest's JSON report (`--reporter=json`), slowest first. */
|
|
2
|
+
export interface VitestReport {
|
|
3
|
+
testResults: {
|
|
4
|
+
name: string;
|
|
5
|
+
startTime: number;
|
|
6
|
+
endTime: number;
|
|
7
|
+
assertionResults: {
|
|
8
|
+
title: string;
|
|
9
|
+
duration?: number;
|
|
10
|
+
}[];
|
|
11
|
+
}[];
|
|
12
|
+
}
|
|
13
|
+
export declare const slowTests: (report: VitestReport, cwd: string, count: number) => string;
|
|
14
|
+
//# sourceMappingURL=slow-tests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slow-tests.d.ts","sourceRoot":"","sources":["../../src/dev/slow-tests.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,gBAAgB,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KACzD,EAAE,CAAA;CACJ;AAED,eAAO,MAAM,SAAS,WAAY,YAAY,OAAO,MAAM,SAAS,MAAM,KAAG,MAkB5E,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const slowTests = (report, cwd, count) => {
|
|
2
|
+
const relative = (path) => path.slice(cwd.length + 1);
|
|
3
|
+
const tests = report.testResults
|
|
4
|
+
.flatMap((result) => result.assertionResults.map((test) => ({ ms: test.duration ?? 0, file: result.name, test: test.title })))
|
|
5
|
+
.sort((a, b) => b.ms - a.ms);
|
|
6
|
+
const files = report.testResults
|
|
7
|
+
.map((result) => ({ ms: result.endTime - result.startTime, file: result.name }))
|
|
8
|
+
.sort((a, b) => b.ms - a.ms);
|
|
9
|
+
const total = tests.reduce((sum, test) => sum + test.ms, 0);
|
|
10
|
+
return [
|
|
11
|
+
`${tests.length} tests, ${(total / 1000).toFixed(1)} s of test time\n\nslowest tests:`,
|
|
12
|
+
...tests.slice(0, count).map(({ ms, file, test }) => `${ms.toFixed(0).padStart(6)} ms ${relative(file)} ${test}`),
|
|
13
|
+
"\nslowest files:",
|
|
14
|
+
...files.slice(0, 10).map(({ ms, file }) => `${ms.toFixed(0).padStart(6)} ms ${relative(file)}`),
|
|
15
|
+
].join("\n");
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=slow-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slow-tests.js","sourceRoot":"","sources":["../../src/dev/slow-tests.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAoB,EAAE,GAAW,EAAE,KAAa,EAAU,EAAE;IACpF,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW;SAC7B,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CACzG;SACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW;SAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;SAC/E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;IAE9B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAC3D,OAAO;QACL,GAAG,KAAK,CAAC,MAAM,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mCAAmC;QACtF,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACnH,kBAAkB;QAClB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;KAClG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The test matrix page: every command and option of a commander program, and what exercises it — an
|
|
3
|
+
* offline test that drove it (one `{ command, options }` JSON line per parsed run, written by the
|
|
4
|
+
* CLI under vitest), or a written reason it is not tested offline.
|
|
5
|
+
*/
|
|
6
|
+
/** The part of commander's `Command` read here; structural, so commander stays an optional peer. */
|
|
7
|
+
export interface ProgramNode {
|
|
8
|
+
name(): string;
|
|
9
|
+
parent: ProgramNode | null;
|
|
10
|
+
commands: readonly ProgramNode[];
|
|
11
|
+
options: readonly {
|
|
12
|
+
long?: string;
|
|
13
|
+
short?: string;
|
|
14
|
+
}[];
|
|
15
|
+
}
|
|
16
|
+
/** `command` ending in ` *` covers every subcommand under it; `""` is the program's own options. */
|
|
17
|
+
export interface Untested {
|
|
18
|
+
command: string;
|
|
19
|
+
option?: string;
|
|
20
|
+
reason: string;
|
|
21
|
+
}
|
|
22
|
+
interface Row {
|
|
23
|
+
command: string;
|
|
24
|
+
option?: string;
|
|
25
|
+
state: "tested" | "untested" | "missing";
|
|
26
|
+
note: string;
|
|
27
|
+
}
|
|
28
|
+
export declare const parseArgvLog: (text: string) => Map<string, Set<string>>;
|
|
29
|
+
export declare const matrixRows: (program: ProgramNode, seen: Map<string, Set<string>>, untested: readonly Untested[]) => {
|
|
30
|
+
rows: Row[];
|
|
31
|
+
stale: Untested[];
|
|
32
|
+
};
|
|
33
|
+
export declare const matrixPage: (rows: readonly Row[], cli: string) => string;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=test-matrix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-matrix.d.ts","sourceRoot":"","sources":["../../src/dev/test-matrix.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oGAAoG;AACpG,MAAM,WAAW,WAAW;IAC1B,IAAI,IAAI,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;IAC1B,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAA;IAChC,OAAO,EAAE,SAAS;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACtD;AAED,oGAAoG;AACpG,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,GAAG;IACX,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAA;IACxC,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,YAAY,SAAU,MAAM,6BAUxC,CAAA;AAcD,eAAO,MAAM,UAAU,YAAa,WAAW,QAAQ,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,YAAY,SAAS,QAAQ,EAAE;;;CAoD7G,CAAA;AAID,eAAO,MAAM,UAAU,SAAU,SAAS,GAAG,EAAE,OAAO,MAAM,WAuB3D,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The test matrix page: every command and option of a commander program, and what exercises it — an
|
|
3
|
+
* offline test that drove it (one `{ command, options }` JSON line per parsed run, written by the
|
|
4
|
+
* CLI under vitest), or a written reason it is not tested offline.
|
|
5
|
+
*/
|
|
6
|
+
export const parseArgvLog = (text) => {
|
|
7
|
+
const seen = new Map();
|
|
8
|
+
for (const line of text.split("\n")) {
|
|
9
|
+
if (!line)
|
|
10
|
+
continue;
|
|
11
|
+
const { command, options } = JSON.parse(line);
|
|
12
|
+
const known = seen.get(command) ?? new Set();
|
|
13
|
+
for (const option of options)
|
|
14
|
+
known.add(option);
|
|
15
|
+
seen.set(command, known);
|
|
16
|
+
}
|
|
17
|
+
return seen;
|
|
18
|
+
};
|
|
19
|
+
const runnable = (command) => command._actionHandler != null;
|
|
20
|
+
const pathOf = (command) => {
|
|
21
|
+
const words = [];
|
|
22
|
+
for (let at = command; at?.parent; at = at.parent)
|
|
23
|
+
words.unshift(at.name());
|
|
24
|
+
return words.join(" ");
|
|
25
|
+
};
|
|
26
|
+
const covers = (entry, command) => entry.command === command || (entry.command.endsWith(" *") && command.startsWith(entry.command.slice(0, -1)));
|
|
27
|
+
export const matrixRows = (program, seen, untested) => {
|
|
28
|
+
const skipFor = (command, option) => untested.find((entry) => covers(entry, command) && entry.option === option);
|
|
29
|
+
const rows = [];
|
|
30
|
+
const walk = (command) => {
|
|
31
|
+
if (command.parent && runnable(command)) {
|
|
32
|
+
const path = pathOf(command);
|
|
33
|
+
const ran = seen.get(path);
|
|
34
|
+
const skip = skipFor(path);
|
|
35
|
+
rows.push(ran
|
|
36
|
+
? { command: path, state: "tested", note: "" }
|
|
37
|
+
: skip
|
|
38
|
+
? { command: path, state: "untested", note: skip.reason }
|
|
39
|
+
: { command: path, state: "missing", note: "" });
|
|
40
|
+
for (const option of command.options) {
|
|
41
|
+
const name = option.long ?? option.short ?? "";
|
|
42
|
+
if (name === "--help")
|
|
43
|
+
continue;
|
|
44
|
+
const optionSkip = skipFor(path, name) ?? (skip && !ran ? skip : undefined);
|
|
45
|
+
rows.push(ran?.has(name)
|
|
46
|
+
? { command: path, option: name, state: "tested", note: "" }
|
|
47
|
+
: optionSkip
|
|
48
|
+
? { command: path, option: name, state: "untested", note: optionSkip.reason }
|
|
49
|
+
: { command: path, option: name, state: "missing", note: "" });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
for (const child of command.commands)
|
|
53
|
+
walk(child);
|
|
54
|
+
};
|
|
55
|
+
walk(program);
|
|
56
|
+
const globalSeen = new Set([...seen.values()].flatMap((options) => [...options]));
|
|
57
|
+
for (const option of program.options) {
|
|
58
|
+
const name = option.long;
|
|
59
|
+
if (!name || name === "--help")
|
|
60
|
+
continue;
|
|
61
|
+
const skip = skipFor("", name);
|
|
62
|
+
rows.push(globalSeen.has(name)
|
|
63
|
+
? { command: "", option: name, state: "tested", note: "" }
|
|
64
|
+
: skip
|
|
65
|
+
? { command: "", option: name, state: "untested", note: skip.reason }
|
|
66
|
+
: { command: "", option: name, state: "missing", note: "" });
|
|
67
|
+
}
|
|
68
|
+
const stale = untested.filter((entry) => !rows.some((row) => row.option === entry.option && covers(entry, row.command)));
|
|
69
|
+
return { rows, stale };
|
|
70
|
+
};
|
|
71
|
+
const MARK = { tested: "✅", untested: "⛔", missing: "❌" };
|
|
72
|
+
export const matrixPage = (rows, cli) => {
|
|
73
|
+
const count = (state) => rows.filter((row) => row.state === state).length;
|
|
74
|
+
const cell = (text) => text.replace(/\|/g, "\\|");
|
|
75
|
+
return `<!-- Generated by cli-dev test-matrix from the command tree and a test run. Do not edit; \`pnpm test:matrix\`. -->
|
|
76
|
+
|
|
77
|
+
# Test matrix
|
|
78
|
+
|
|
79
|
+
Every command and option of \`${cli}\`, and whether an offline test drives it through the CLI. ✅ a test
|
|
80
|
+
ran it · ⛔ not tested offline, with the reason and where it is checked instead · ❌ nothing.
|
|
81
|
+
Measured from the test run (\`coverage/argv.jsonl\`), not searched for — see
|
|
82
|
+
[TESTING.md](TESTING.md) for how, and for the states and failures that cut across commands.
|
|
83
|
+
|
|
84
|
+
**${count("tested")} ✅ · ${count("untested")} ⛔ · ${count("missing")} ❌** — ${rows.filter((row) => !row.option).length} commands, ${rows.filter((row) => row.option).length} options.
|
|
85
|
+
|
|
86
|
+
| Command | Option | | Note |
|
|
87
|
+
|---|---|---|---|
|
|
88
|
+
${rows
|
|
89
|
+
.map((row) => `| ${row.command ? `\`${row.command}\`` : "*global*"} | ${row.option ? `\`${row.option}\`` : ""} | ${MARK[row.state]} | ${cell(row.note)} |`)
|
|
90
|
+
.join("\n")}
|
|
91
|
+
`;
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=test-matrix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-matrix.js","sourceRoot":"","sources":["../../src/dev/test-matrix.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every failure a CLI built on this package, and anything consuming its output, can see. The list
|
|
3
|
+
* is closed on purpose: an agent branches on `code`, and a new code is a contract change.
|
|
4
|
+
*
|
|
5
|
+
* "provider" is whatever the CLI talks to — an HTTP API, a socket, a messenger. The word is
|
|
6
|
+
* deliberately not "server": a provider that answered with a refusal is not the same as one that
|
|
7
|
+
* never answered.
|
|
8
|
+
*/
|
|
9
|
+
export declare const errorCodes: readonly ["validation_error", "configuration_error", "authentication_error", "permission_error", "not_found", "confirmation_required", "rate_limited", "timeout", "network_error", "provider_error", "provider_unavailable", "invalid_response", "outcome_unknown", "cancelled"];
|
|
10
|
+
export type ErrorCode = (typeof errorCodes)[number];
|
|
11
|
+
/**
|
|
12
|
+
* Anything a caller may attach. Everything is optional because these are diagnostics, not a
|
|
13
|
+
* contract — the contract is `code`.
|
|
14
|
+
*
|
|
15
|
+
* `retryable` says whether **this** failure could be retried, not whether the operation is safe to
|
|
16
|
+
* retry. Those are different questions and conflating them is how a duplicate write happens.
|
|
17
|
+
*/
|
|
18
|
+
export interface CliErrorDetails {
|
|
19
|
+
readonly status?: number;
|
|
20
|
+
readonly retryable?: boolean;
|
|
21
|
+
readonly attempts?: number;
|
|
22
|
+
readonly requestId?: string;
|
|
23
|
+
readonly runId?: string;
|
|
24
|
+
readonly retryAfterMs?: number;
|
|
25
|
+
readonly operation?: string;
|
|
26
|
+
readonly [key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
export declare class CliError extends Error {
|
|
29
|
+
readonly code: ErrorCode;
|
|
30
|
+
readonly details: CliErrorDetails;
|
|
31
|
+
constructor(code: ErrorCode, message: string, details?: CliErrorDetails);
|
|
32
|
+
}
|
|
33
|
+
export declare const isCliError: (value: unknown) => value is CliError;
|
|
34
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,YACrB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,EACX,uBAAuB,EACvB,cAAc,EACd,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,CACH,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAMD,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IAEjC,YAAY,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,EAM1E;CACF;AAED,eAAO,MAAM,UAAU,UAAW,OAAO,KAAG,KAAK,IAAI,QAC4C,CAAA"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every failure a CLI built on this package, and anything consuming its output, can see. The list
|
|
3
|
+
* is closed on purpose: an agent branches on `code`, and a new code is a contract change.
|
|
4
|
+
*
|
|
5
|
+
* "provider" is whatever the CLI talks to — an HTTP API, a socket, a messenger. The word is
|
|
6
|
+
* deliberately not "server": a provider that answered with a refusal is not the same as one that
|
|
7
|
+
* never answered.
|
|
8
|
+
*/
|
|
9
|
+
export const errorCodes = [
|
|
10
|
+
"validation_error",
|
|
11
|
+
"configuration_error",
|
|
12
|
+
"authentication_error",
|
|
13
|
+
"permission_error",
|
|
14
|
+
"not_found",
|
|
15
|
+
"confirmation_required",
|
|
16
|
+
"rate_limited",
|
|
17
|
+
"timeout",
|
|
18
|
+
"network_error",
|
|
19
|
+
"provider_error",
|
|
20
|
+
"provider_unavailable",
|
|
21
|
+
"invalid_response",
|
|
22
|
+
"outcome_unknown",
|
|
23
|
+
"cancelled",
|
|
24
|
+
];
|
|
25
|
+
// Symbol.for, so two copies of this package — one CLI's and one dependency's, during a pin bump —
|
|
26
|
+
// recognise each other's errors where `instanceof` cannot.
|
|
27
|
+
const BRAND = Symbol.for("@wirecat/cli-base/CliError");
|
|
28
|
+
export class CliError extends Error {
|
|
29
|
+
code;
|
|
30
|
+
details;
|
|
31
|
+
constructor(code, message, details = {}) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.name = "CliError";
|
|
34
|
+
this.code = code;
|
|
35
|
+
this.details = details;
|
|
36
|
+
Object.defineProperty(this, BRAND, { value: true });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export const isCliError = (value) => typeof value === "object" && value !== null && value[BRAND] === true;
|
|
40
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,kBAAkB;IAClB,qBAAqB;IACrB,sBAAsB;IACtB,kBAAkB;IAClB,WAAW;IACX,uBAAuB;IACvB,cAAc;IACd,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,sBAAsB;IACtB,kBAAkB;IAClB,iBAAiB;IACjB,WAAW;CACH,CAAA;AAsBV,kGAAkG;AAClG,2DAA2D;AAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAEtD,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAW;IACf,OAAO,CAAiB;IAEjC,YAAY,IAAe,EAAE,OAAe,EAAE,OAAO,GAAoB,EAAE;QACzE,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAqB,EAAE,CAC9D,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAA+B,CAAC,KAAK,CAAC,KAAK,IAAI,CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const executableOnPath: (command: string, env: NodeJS.ProcessEnv, platform?: NodeJS.Platform, exists?: (path: string) => boolean) => string;
|
|
2
|
+
export declare const executableEnvironment: (env: NodeJS.ProcessEnv, platform?: NodeJS.Platform) => NodeJS.ProcessEnv;
|
|
3
|
+
//# sourceMappingURL=executable.d.ts.map
|