usedesign 0.2.0 → 0.4.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/dist/cli.d.ts +0 -7
- package/dist/cli.js +97 -2
- package/dist/cli.js.map +1 -1
- package/dist/scaffold.d.ts +35 -0
- package/dist/scaffold.js +242 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/schema/operation-card.schema.json +16 -0
- package/dist/validate.js +76 -0
- package/dist/validate.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.d.ts
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* usedesign — the command line.
|
|
4
|
-
*
|
|
5
|
-
* usedesign validate <path…> cards against the schema and the cross-card rules
|
|
6
|
-
* usedesign check <config> the three invariants against the repository
|
|
7
|
-
* usedesign conformance the corpora this implementation must pass
|
|
8
|
-
*/
|
|
9
2
|
import { CHECKS } from "./checks.js";
|
|
10
3
|
import { codesOf } from "./core.js";
|
|
11
4
|
export { CHECKS, codesOf };
|
package/dist/cli.js
CHANGED
|
@@ -6,21 +6,40 @@
|
|
|
6
6
|
* usedesign check <config> the three invariants against the repository
|
|
7
7
|
* usedesign conformance the corpora this implementation must pass
|
|
8
8
|
*/
|
|
9
|
+
import { readFileSync } from "node:fs";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
9
12
|
import { CHECKS, checkCoverage, checkMaturity, checkRoutes } from "./checks.js";
|
|
10
|
-
import { codesOf, collectCards, errors, frontMatter, loadConfig, warnings } from "./core.js";
|
|
13
|
+
import { codesOf, collectCards, errors, Finding, frontMatter, loadConfig, warnings } from "./core.js";
|
|
11
14
|
import { runCardCorpus, runChecksCorpus } from "./conformance.js";
|
|
15
|
+
import { planScaffold, writeScaffold } from "./scaffold.js";
|
|
12
16
|
import { validate, validateSchema } from "./validate.js";
|
|
17
|
+
/**
|
|
18
|
+
* The version is read from package.json, never written here. It was written here once, and the
|
|
19
|
+
* published 0.3.0 introduced itself as 0.2.0 — the tool that checks other people's claims against
|
|
20
|
+
* their code was making a claim about itself that nothing compared to anything. Found by asking
|
|
21
|
+
* the published box its version while watching it run a rule only the new version has.
|
|
22
|
+
*/
|
|
23
|
+
function version() {
|
|
24
|
+
const path = join(dirname(fileURLToPath(import.meta.url)), "..", "package.json");
|
|
25
|
+
return JSON.parse(readFileSync(path, "utf8")).version;
|
|
26
|
+
}
|
|
13
27
|
const USAGE = `usedesign — one description per operation, checked against the repository
|
|
14
28
|
|
|
15
29
|
Usage:
|
|
16
30
|
usedesign validate <path…> validate cards (files or directories)
|
|
17
31
|
usedesign check <config> run the three checks against a usedesign.config.yaml
|
|
32
|
+
usedesign scaffold <openapi.json> --out <dir>
|
|
33
|
+
draft a card shell per undescribed route
|
|
18
34
|
usedesign conformance [--cards|--checks]
|
|
19
35
|
run the conformance corpora
|
|
20
36
|
usedesign --help | --version
|
|
21
37
|
|
|
22
38
|
Options:
|
|
23
39
|
--no-schema validate: skip the JSON Schema, keep the cross-card rules
|
|
40
|
+
--config <file> scaffold: skip routes already declared or excluded
|
|
41
|
+
--dry-run scaffold: print the arithmetic, write nothing
|
|
42
|
+
--force scaffold: overwrite drafts already on disk
|
|
24
43
|
`;
|
|
25
44
|
function print(findings, prefix = "") {
|
|
26
45
|
for (const finding of findings) {
|
|
@@ -78,6 +97,49 @@ function commandCheck(configPath) {
|
|
|
78
97
|
errorCount += summarise("check 3 (no inflated maturity)", maturity.findings);
|
|
79
98
|
return errorCount > 0 ? 1 : 0;
|
|
80
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Generate draft cards for routes nobody has described yet.
|
|
102
|
+
*
|
|
103
|
+
* The arithmetic is printed because it is the point: generated + skipped-as-declared +
|
|
104
|
+
* skipped-as-excluded must equal the routes served. A command that quietly dropped the remainder
|
|
105
|
+
* would read exactly like one that covered everything.
|
|
106
|
+
*/
|
|
107
|
+
function commandScaffold(openapiPath, outDir, configPath, dryRun, force) {
|
|
108
|
+
let config = null;
|
|
109
|
+
let base = null;
|
|
110
|
+
if (configPath)
|
|
111
|
+
({ config, base } = loadConfig(configPath));
|
|
112
|
+
const plan = planScaffold(openapiPath, outDir, config, base);
|
|
113
|
+
print(plan.findings);
|
|
114
|
+
console.log(`routes: ${plan.total} served, read from ${openapiPath}`);
|
|
115
|
+
console.log(`drafts: ${plan.drafts.length} to write into ${outDir}`);
|
|
116
|
+
console.log(`skipped: ${plan.skippedDeclared.length} already declared by a card`);
|
|
117
|
+
for (const skip of plan.skippedDeclared)
|
|
118
|
+
console.log(` ${skip.route} → ${skip.by.join(", ")}`);
|
|
119
|
+
console.log(` ${plan.skippedExcluded.length} excluded by the config`);
|
|
120
|
+
for (const skip of plan.skippedExcluded)
|
|
121
|
+
console.log(` ${skip.route} → ${skip.reason}`);
|
|
122
|
+
const accounted = plan.drafts.length + plan.skippedDeclared.length + plan.skippedExcluded.length;
|
|
123
|
+
if (accounted !== plan.total) {
|
|
124
|
+
console.log("");
|
|
125
|
+
print([
|
|
126
|
+
new Finding("routes_unaccounted", `${plan.total} routes served but ${accounted} accounted for — ${plan.total - accounted} vanished without a reason`),
|
|
127
|
+
]);
|
|
128
|
+
return 1;
|
|
129
|
+
}
|
|
130
|
+
console.log(` → ${plan.drafts.length} + ${plan.skippedDeclared.length} + ${plan.skippedExcluded.length} = ${plan.total} ✓`);
|
|
131
|
+
if (plan.existing.length > 0) {
|
|
132
|
+
console.log(`\nexisting: ${plan.existing.length} draft(s) already on disk — ${force ? "OVERWRITTEN (--force)" : "left untouched"}`);
|
|
133
|
+
}
|
|
134
|
+
if (dryRun) {
|
|
135
|
+
console.log("\ndry run: nothing written.");
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
const { written, kept } = writeScaffold(plan, outDir, force);
|
|
139
|
+
console.log(`\nwritten: ${written}${kept ? `, kept ${kept} existing` : ""}`);
|
|
140
|
+
console.log("Every draft fails `usedesign validate` by design. Fill it in, then MOVE it into cards/.");
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
81
143
|
function main(argv) {
|
|
82
144
|
const args = argv.slice(2);
|
|
83
145
|
if (args.length === 0 || args.includes("--help") || args.includes("-h")) {
|
|
@@ -85,7 +147,7 @@ function main(argv) {
|
|
|
85
147
|
return args.length === 0 ? 2 : 0;
|
|
86
148
|
}
|
|
87
149
|
if (args.includes("--version") || args.includes("-v")) {
|
|
88
|
-
console.log(
|
|
150
|
+
console.log(`usedesign ${version()} (SPEC v0.2)`);
|
|
89
151
|
return 0;
|
|
90
152
|
}
|
|
91
153
|
const [command, ...rest] = args;
|
|
@@ -104,6 +166,39 @@ function main(argv) {
|
|
|
104
166
|
return 2;
|
|
105
167
|
}
|
|
106
168
|
return commandCheck(positional[0]);
|
|
169
|
+
case "scaffold": {
|
|
170
|
+
// `--out dir` and `--config file` take a value, so the value must not be mistaken for a
|
|
171
|
+
// positional argument. Parsed explicitly rather than by filtering on a leading dash.
|
|
172
|
+
const takesValue = new Set(["--out", "--config"]);
|
|
173
|
+
const values = new Map();
|
|
174
|
+
const free = [];
|
|
175
|
+
for (let i = 0; i < rest.length; i += 1) {
|
|
176
|
+
const argument = rest[i];
|
|
177
|
+
if (takesValue.has(argument)) {
|
|
178
|
+
const value = rest[i + 1];
|
|
179
|
+
if (!value || value.startsWith("--")) {
|
|
180
|
+
console.error(`usedesign scaffold: ${argument} needs a value`);
|
|
181
|
+
return 2;
|
|
182
|
+
}
|
|
183
|
+
values.set(argument, value);
|
|
184
|
+
i += 1;
|
|
185
|
+
}
|
|
186
|
+
else if (!argument.startsWith("--")) {
|
|
187
|
+
free.push(argument);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (free.length !== 1) {
|
|
191
|
+
console.error("usedesign scaffold: name exactly one OpenAPI document\n" +
|
|
192
|
+
" usedesign scaffold <openapi.json> --out <dir> [--config <usedesign.config.yaml>] [--dry-run] [--force]");
|
|
193
|
+
return 2;
|
|
194
|
+
}
|
|
195
|
+
const outDir = values.get("--out");
|
|
196
|
+
if (!outDir) {
|
|
197
|
+
console.error("usedesign scaffold: --out <dir> is required — drafts must not land among real cards");
|
|
198
|
+
return 2;
|
|
199
|
+
}
|
|
200
|
+
return commandScaffold(free[0], outDir, values.get("--config"), flags.includes("--dry-run"), flags.includes("--force"));
|
|
201
|
+
}
|
|
107
202
|
case "conformance": {
|
|
108
203
|
const cardsOnly = flags.includes("--cards");
|
|
109
204
|
const checksOnly = flags.includes("--checks");
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Config, Finding } from "./core.js";
|
|
2
|
+
export interface ScaffoldPlan {
|
|
3
|
+
drafts: {
|
|
4
|
+
id: string;
|
|
5
|
+
file: string;
|
|
6
|
+
method: string;
|
|
7
|
+
path: string;
|
|
8
|
+
body: string;
|
|
9
|
+
}[];
|
|
10
|
+
skippedDeclared: {
|
|
11
|
+
route: string;
|
|
12
|
+
by: string[];
|
|
13
|
+
}[];
|
|
14
|
+
skippedExcluded: {
|
|
15
|
+
route: string;
|
|
16
|
+
reason: string;
|
|
17
|
+
}[];
|
|
18
|
+
existing: string[];
|
|
19
|
+
total: number;
|
|
20
|
+
findings: Finding[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Work out what would be written, without writing it. The counts are the product: generated plus
|
|
24
|
+
* skipped-because-declared plus skipped-because-excluded must equal the number of routes served,
|
|
25
|
+
* and a command that quietly drops the difference is indistinguishable from one that covered
|
|
26
|
+
* everything.
|
|
27
|
+
*/
|
|
28
|
+
export declare function planScaffold(openapiPath: string, outDir: string, config: Config | null, base: string | null): ScaffoldPlan;
|
|
29
|
+
/** Write the planned drafts. Existing files are left alone unless `force` — a half-filled draft
|
|
30
|
+
* is somebody's work, and silently replacing it is the one failure this command could cause that
|
|
31
|
+
* nobody would notice until the writing was gone. */
|
|
32
|
+
export declare function writeScaffold(plan: ScaffoldPlan, outDir: string, force: boolean): {
|
|
33
|
+
written: number;
|
|
34
|
+
kept: number;
|
|
35
|
+
};
|
package/dist/scaffold.js
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Draft generation — turning a served route into the *shell* of a card.
|
|
3
|
+
*
|
|
4
|
+
* The point is arithmetic, not authorship. Describing 113 routes from a blank page is work
|
|
5
|
+
* nobody starts; filling in the meaning of 113 shells is work somebody finishes. So this module
|
|
6
|
+
* writes down what the machine can read and refuses to write down anything else.
|
|
7
|
+
*
|
|
8
|
+
* WHY OPENAPI HERE, WHEN THE CHECKS DELIBERATELY DO NOT READ IT
|
|
9
|
+
* The three checks compare cards against a route *inventory* — a flat statement the repository
|
|
10
|
+
* produces about itself — precisely so that no framework is ever parsed. Scaffolding is not
|
|
11
|
+
* checking: nothing here decides whether anything is true, and a draft that reads a route wrong
|
|
12
|
+
* is caught the moment a human looks at it or a checker runs. Reading the richer document is
|
|
13
|
+
* therefore allowed for drafts and still forbidden for verdicts.
|
|
14
|
+
*
|
|
15
|
+
* THE DRAFT MUST NOT PASS VALIDATION
|
|
16
|
+
* Every field a machine cannot know is written as `FILL_ME`, which fails the schema on purpose.
|
|
17
|
+
* A draft that validated would be the worst possible output of this command: 113 documents that
|
|
18
|
+
* look complete, claim maturity nobody measured, and are wrong in a way that reads as machine
|
|
19
|
+
* precision. Screaming is the feature.
|
|
20
|
+
*/
|
|
21
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
22
|
+
import { join } from "node:path";
|
|
23
|
+
import { Finding, loadCardFiles } from "./core.js";
|
|
24
|
+
import { normalise } from "./checks.js";
|
|
25
|
+
const VERBS = ["get", "post", "put", "patch", "delete", "head", "options"];
|
|
26
|
+
/**
|
|
27
|
+
* A provisional id built from the route shape. It is deliberately not a guess at the operation's
|
|
28
|
+
* name: `TODO` is upper-case, so the id fails its own pattern and the card says out loud that a
|
|
29
|
+
* human has not been here yet. Uniqueness and stability matter — the same OpenAPI must always
|
|
30
|
+
* produce the same filenames, or every regeneration is a diff nobody can read.
|
|
31
|
+
*/
|
|
32
|
+
function provisionalId(method, path, taken) {
|
|
33
|
+
// `{id}` carries no meaning for a name; `:finish` does — under AIP-136 the colon suffix is the
|
|
34
|
+
// action, and the checker's own normaliser is careful never to eat it (see checks.ts PARAM).
|
|
35
|
+
const slug = path
|
|
36
|
+
.replace(/\{[^}]*\}/g, "")
|
|
37
|
+
.split(/[/:]+/)
|
|
38
|
+
.filter((s) => s.length > 0)
|
|
39
|
+
.join("-")
|
|
40
|
+
.toLowerCase()
|
|
41
|
+
.replace(/[^a-z0-9-]+/g, "-")
|
|
42
|
+
.replace(/-+/g, "-")
|
|
43
|
+
.replace(/^-|-$/g, "") || "root";
|
|
44
|
+
const base = `TODO.${slug}.${method.toLowerCase()}`;
|
|
45
|
+
if (!taken.has(base))
|
|
46
|
+
return base;
|
|
47
|
+
for (let n = 2;; n += 1) {
|
|
48
|
+
const candidate = `${base}-${n}`;
|
|
49
|
+
if (!taken.has(candidate))
|
|
50
|
+
return candidate;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Status codes the document itself lists. `default` and anything non-numeric are not statuses. */
|
|
54
|
+
function responsesOf(operation) {
|
|
55
|
+
return Object.keys(operation?.responses ?? {})
|
|
56
|
+
.map((code) => Number.parseInt(code, 10))
|
|
57
|
+
.filter((code) => Number.isInteger(code) && code >= 100 && code <= 599)
|
|
58
|
+
.sort((a, b) => a - b);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Does the document actually *say* anything about statuses, or does it merely default?
|
|
62
|
+
*
|
|
63
|
+
* Measured on the first repository this ran against: all 113 routes declared exactly `200` and
|
|
64
|
+
* nothing else, while the code demonstrably answers 401 and 422 — the cards written by reading
|
|
65
|
+
* that code say so, and the checks pass. A status list identical across every route in the
|
|
66
|
+
* document is the signature of a framework filling in a blank, not of anybody describing
|
|
67
|
+
* behaviour. Copying it into a draft unmarked would hand a human a falsehood wearing the clothes
|
|
68
|
+
* of machine precision, which is the one output this command must never produce.
|
|
69
|
+
*/
|
|
70
|
+
function statusesAreDegenerate(routes) {
|
|
71
|
+
if (routes.length < 2)
|
|
72
|
+
return false;
|
|
73
|
+
const sets = new Set(routes.map((r) => responsesOf(r.operation).join(",")));
|
|
74
|
+
return sets.size === 1;
|
|
75
|
+
}
|
|
76
|
+
function draftBody(id, method, path, operation, source, degenerate) {
|
|
77
|
+
const responses = responsesOf(operation);
|
|
78
|
+
const parameters = (operation?.parameters ?? [])
|
|
79
|
+
.filter((p) => p?.in === "path" && p?.name)
|
|
80
|
+
.map((p) => String(p.name));
|
|
81
|
+
// What the document says about itself goes in the prose, attributed, never into a field. A
|
|
82
|
+
// summary copied into `title` would fill a human's field with a machine's guess, and the next
|
|
83
|
+
// reader could not tell which of the two wrote it.
|
|
84
|
+
const says = [];
|
|
85
|
+
if (operation?.summary)
|
|
86
|
+
says.push(`summary: ${String(operation.summary).trim()}`);
|
|
87
|
+
if (operation?.operationId)
|
|
88
|
+
says.push(`operationId: ${String(operation.operationId).trim()}`);
|
|
89
|
+
if (parameters.length)
|
|
90
|
+
says.push(`параметры пути: ${parameters.join(", ")}`);
|
|
91
|
+
const lines = [
|
|
92
|
+
"---",
|
|
93
|
+
"# ЗАГОТОВКА, а не карточка. Машина записала только то, что прочитала в OpenAPI;",
|
|
94
|
+
"# всё остальное — FILL_ME, и пока они здесь, файл НЕ проходит `usedesign validate`.",
|
|
95
|
+
"# Это сделано намеренно: заготовка, прошедшая проверку, выглядела бы описанием, не будучи им.",
|
|
96
|
+
"#",
|
|
97
|
+
"# Дозаполнив, ПЕРЕНЕСИТЕ файл в cards/ — переезд и есть слово «я за это отвечаю».",
|
|
98
|
+
`id: ${id}`,
|
|
99
|
+
"title: FILL_ME",
|
|
100
|
+
"scenario: FILL_ME # либо serves_step, если операция служит шагу другой",
|
|
101
|
+
"actors: [FILL_ME]",
|
|
102
|
+
"",
|
|
103
|
+
"maturity: FILL_ME # conceived | designed | implemented | tested | in_production",
|
|
104
|
+
"",
|
|
105
|
+
"steps:",
|
|
106
|
+
" - id: s1-FILL-ME",
|
|
107
|
+
" text: FILL_ME",
|
|
108
|
+
"",
|
|
109
|
+
"concurrency:",
|
|
110
|
+
" mode: FILL_ME # etag_required | idempotency_by_header | idempotency_by_formula | none_by_design",
|
|
111
|
+
" rationale: FILL_ME",
|
|
112
|
+
" source: FILL_ME",
|
|
113
|
+
"",
|
|
114
|
+
"interfaces:",
|
|
115
|
+
" rest:",
|
|
116
|
+
" transport: http_rest",
|
|
117
|
+
` method: ${method.toUpperCase()}`,
|
|
118
|
+
` path: ${path}`,
|
|
119
|
+
responses.length
|
|
120
|
+
? ` responses: [${responses.join(", ")}]${degenerate ? " # ⚠ см. ниже: документ назвал ОДИН И ТОТ ЖЕ набор для всех маршрутов" : ""}`
|
|
121
|
+
: " responses: [] # документ не назвал ни одного статуса — проверить руками",
|
|
122
|
+
"",
|
|
123
|
+
"data:",
|
|
124
|
+
" entities: [FILL_ME]",
|
|
125
|
+
"provenance: FILL_ME # none для чтения, либо объект с activity_kind",
|
|
126
|
+
"reversibility: FILL_ME # reversible | irreversible | not_applicable | {reversible_via: …}",
|
|
127
|
+
"---",
|
|
128
|
+
"",
|
|
129
|
+
`Заготовка для маршрута \`${method.toUpperCase()} ${path}\`, снятого из \`${source}\`.`,
|
|
130
|
+
"",
|
|
131
|
+
says.length ? `Документ говорит о себе: ${says.join(" · ")}.` : "Документ не сообщает о маршруте ничего сверх адреса и статусов.",
|
|
132
|
+
"",
|
|
133
|
+
"Машина не знает, зачем эта операция существует, какие проверки она делает и чем доказана её",
|
|
134
|
+
"зрелость. Эти поля ждут человека, и до него описание не является описанием.",
|
|
135
|
+
"",
|
|
136
|
+
...(degenerate
|
|
137
|
+
? [
|
|
138
|
+
"⚠️ `responses` СКОПИРОВАН, НО ЕМУ НЕЛЬЗЯ ВЕРИТЬ. Документ назвал один и тот же набор",
|
|
139
|
+
"статусов для КАЖДОГО маршрута приложения — так выглядит не описание поведения, а",
|
|
140
|
+
"умолчание фреймворка. Реальные коды ошибок ищите в коде: заполнив `steps[]` с",
|
|
141
|
+
"`on_violation.http`, вы почти наверняка обнаружите статусы, которых здесь нет, и",
|
|
142
|
+
"проверка `undeclared_response` это покажет.",
|
|
143
|
+
"",
|
|
144
|
+
]
|
|
145
|
+
: []),
|
|
146
|
+
];
|
|
147
|
+
return lines.join("\n");
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Work out what would be written, without writing it. The counts are the product: generated plus
|
|
151
|
+
* skipped-because-declared plus skipped-because-excluded must equal the number of routes served,
|
|
152
|
+
* and a command that quietly drops the difference is indistinguishable from one that covered
|
|
153
|
+
* everything.
|
|
154
|
+
*/
|
|
155
|
+
export function planScaffold(openapiPath, outDir, config, base) {
|
|
156
|
+
const findings = [];
|
|
157
|
+
const doc = JSON.parse(readFileSync(openapiPath, "utf8"));
|
|
158
|
+
const declared = new Map();
|
|
159
|
+
if (config && base) {
|
|
160
|
+
const { cards, findings: cardFindings } = loadCardFiles(config, base);
|
|
161
|
+
findings.push(...cardFindings.filter((f) => f.code !== "no_cards_found"));
|
|
162
|
+
for (const [cardId, fm] of cards) {
|
|
163
|
+
for (const iface of Object.values(fm["interfaces"] ?? {})) {
|
|
164
|
+
if (iface?.transport !== "http_rest" || !iface.method || !iface.path)
|
|
165
|
+
continue;
|
|
166
|
+
// One route may be declared by several cards (dispatch). It is still ONE covered route:
|
|
167
|
+
// counting cards here would make the arithmetic add up for the wrong reason.
|
|
168
|
+
const key = normalise(iface.method, iface.path);
|
|
169
|
+
declared.set(key, [...(declared.get(key) ?? []), cardId]);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const routes = [];
|
|
174
|
+
for (const [path, operations] of Object.entries(doc.paths ?? {})) {
|
|
175
|
+
for (const [verb, operation] of Object.entries(operations ?? {})) {
|
|
176
|
+
if (VERBS.includes(verb.toLowerCase()))
|
|
177
|
+
routes.push({ method: verb.toUpperCase(), path, operation });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
routes.sort((a, b) => (a.path === b.path ? a.method.localeCompare(b.method) : a.path.localeCompare(b.path)));
|
|
181
|
+
if (routes.length === 0) {
|
|
182
|
+
findings.push(new Finding("openapi_empty", `${openapiPath}: no routes — almost always a failed dump rather than an application with no routes`));
|
|
183
|
+
}
|
|
184
|
+
const plan = {
|
|
185
|
+
drafts: [],
|
|
186
|
+
skippedDeclared: [],
|
|
187
|
+
skippedExcluded: [],
|
|
188
|
+
existing: [],
|
|
189
|
+
total: routes.length,
|
|
190
|
+
findings,
|
|
191
|
+
};
|
|
192
|
+
const taken = new Set();
|
|
193
|
+
const source = openapiPath.split(/[\\/]/).pop() ?? openapiPath;
|
|
194
|
+
const degenerate = statusesAreDegenerate(routes);
|
|
195
|
+
if (degenerate) {
|
|
196
|
+
findings.push(new Finding("statuses_uniform", `every one of the ${routes.length} routes declares the same statuses (${responsesOf(routes[0].operation).join(", ") || "none"}) — a framework default rather than a description; each draft says so`, "warning"));
|
|
197
|
+
}
|
|
198
|
+
for (const { method, path, operation } of routes) {
|
|
199
|
+
const key = normalise(method, path);
|
|
200
|
+
const shape = key.slice(key.indexOf(" ") + 1);
|
|
201
|
+
const rule = (config?.exclude ?? []).find((r) => {
|
|
202
|
+
if (r.method && r.method.toUpperCase() !== method)
|
|
203
|
+
return false;
|
|
204
|
+
const escaped = (r.path ?? "").replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, "[^/]*").replace(/\?/g, "[^/]");
|
|
205
|
+
return new RegExp(`^${escaped}$`).test(shape);
|
|
206
|
+
});
|
|
207
|
+
if (rule) {
|
|
208
|
+
plan.skippedExcluded.push({ route: key, reason: rule.reason ?? "(без причины в конфиге)" });
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const owners = declared.get(key);
|
|
212
|
+
if (owners) {
|
|
213
|
+
plan.skippedDeclared.push({ route: key, by: owners });
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const id = provisionalId(method, path, taken);
|
|
217
|
+
taken.add(id);
|
|
218
|
+
const file = join(outDir, `${id}.op.md`);
|
|
219
|
+
if (existsSync(file))
|
|
220
|
+
plan.existing.push(file);
|
|
221
|
+
plan.drafts.push({ id, file, method, path, body: draftBody(id, method, path, operation, source, degenerate) });
|
|
222
|
+
}
|
|
223
|
+
return plan;
|
|
224
|
+
}
|
|
225
|
+
/** Write the planned drafts. Existing files are left alone unless `force` — a half-filled draft
|
|
226
|
+
* is somebody's work, and silently replacing it is the one failure this command could cause that
|
|
227
|
+
* nobody would notice until the writing was gone. */
|
|
228
|
+
export function writeScaffold(plan, outDir, force) {
|
|
229
|
+
mkdirSync(outDir, { recursive: true });
|
|
230
|
+
let written = 0;
|
|
231
|
+
let kept = 0;
|
|
232
|
+
for (const draft of plan.drafts) {
|
|
233
|
+
if (existsSync(draft.file) && !force) {
|
|
234
|
+
kept += 1;
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
writeFileSync(draft.file, draft.body, { encoding: "utf8" });
|
|
238
|
+
written += 1;
|
|
239
|
+
}
|
|
240
|
+
return { written, kept };
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -489,6 +489,22 @@
|
|
|
489
489
|
"type": "string"
|
|
490
490
|
}
|
|
491
491
|
},
|
|
492
|
+
"covers_outcomes": {
|
|
493
|
+
"description": "What the user of THIS interface sees for each declared outcome. Keys must name declared outcomes: outcomes[].id, data_transition.to values, step violation errors, or job states. A null value is the explicit claim that the outcome is NOT shown — declared, not forgotten. Once the map exists, every outcome must appear in it: the field forbids silent gaps, not honest ones.",
|
|
494
|
+
"type": "object",
|
|
495
|
+
"minProperties": 1,
|
|
496
|
+
"additionalProperties": {
|
|
497
|
+
"oneOf": [
|
|
498
|
+
{
|
|
499
|
+
"type": "string",
|
|
500
|
+
"minLength": 1
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
"type": "null"
|
|
504
|
+
}
|
|
505
|
+
]
|
|
506
|
+
}
|
|
507
|
+
},
|
|
492
508
|
"quota": {
|
|
493
509
|
"type": "object"
|
|
494
510
|
},
|
package/dist/validate.js
CHANGED
|
@@ -216,6 +216,82 @@ export function validate(fm, filename = "", knownIds = null) {
|
|
|
216
216
|
err("continuation_without_outcome", `\`continuation.after\` names \`${continuation.after}\`, which is neither a declared outcome nor a job state`);
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
|
+
// ── covers_outcomes ────────────────────────────────────────────────────────────────────────
|
|
220
|
+
//
|
|
221
|
+
// Round 10, from tracing one real button: of the four outcomes the server declares, the screen
|
|
222
|
+
// showed two and swallowed two in a bodyless catch — a rollback indistinguishable from success.
|
|
223
|
+
// The card had no way to say it. This map is that way. The rule is deliberately asymmetric:
|
|
224
|
+
// once the map exists, a MISSING outcome is an error, while an outcome explicitly mapped to
|
|
225
|
+
// null is only a warning. The field forbids silent gaps, not honest ones.
|
|
226
|
+
//
|
|
227
|
+
// The vocabulary is what THIS INVOCATION can end with — not everything the record will ever
|
|
228
|
+
// be. Round 11 met the second card the rule had ever seen and demanded that a *create* screen
|
|
229
|
+
// display `checking`, `executing`, `done`, `rejected`, `failed`, `archived`: job states the
|
|
230
|
+
// call never returns, reached later and watched through `observe_via` — a different operation
|
|
231
|
+
// with a screen of its own. Job states stayed in the vocabulary from the continuation rule,
|
|
232
|
+
// which asks a genuinely different question. Six errors, all false, on the first honest card.
|
|
233
|
+
const outcomeVocabulary = new Map();
|
|
234
|
+
for (const outcome of outcomes) {
|
|
235
|
+
if (outcome?.id)
|
|
236
|
+
outcomeVocabulary.set(outcome.id, "outcomes");
|
|
237
|
+
}
|
|
238
|
+
const transition = fm["data_transition"];
|
|
239
|
+
if (transition && typeof transition === "object") {
|
|
240
|
+
const targets = Array.isArray(transition.to) ? transition.to : transition.to ? [transition.to] : [];
|
|
241
|
+
for (const target of targets)
|
|
242
|
+
outcomeVocabulary.set(target, "data_transition.to");
|
|
243
|
+
}
|
|
244
|
+
for (const step of steps) {
|
|
245
|
+
const error = step?.on_violation?.error;
|
|
246
|
+
if (error)
|
|
247
|
+
outcomeVocabulary.set(error, `step \`${step.id}\``);
|
|
248
|
+
}
|
|
249
|
+
// Per-item failures belong here and job states do not, and the line between them is not taste.
|
|
250
|
+
// A per-item failure arrives in THIS call's response — the user is looking at the screen when
|
|
251
|
+
// it happens. A job state is the record's later life, watched through `observe_via`. Round 11
|
|
252
|
+
// measured a bulk screen that discards the response body entirely: ten items selected, three
|
|
253
|
+
// rejected inside a 200, and the page says nothing at all. Without these in the vocabulary the
|
|
254
|
+
// card had no way to admit it, which is the one thing this field exists to prevent.
|
|
255
|
+
for (const failure of fm["per_item"]?.failures ?? []) {
|
|
256
|
+
if (failure?.code)
|
|
257
|
+
outcomeVocabulary.set(failure.code, "per_item failure");
|
|
258
|
+
}
|
|
259
|
+
for (const [name, iface] of Object.entries(interfaces)) {
|
|
260
|
+
const covers = iface?.covers_outcomes;
|
|
261
|
+
if (!covers || typeof covers !== "object")
|
|
262
|
+
continue;
|
|
263
|
+
for (const key of Object.keys(covers)) {
|
|
264
|
+
if (!outcomeVocabulary.has(key)) {
|
|
265
|
+
err("covers_unknown_outcome", `interface \`${name}\`: covers_outcomes names \`${key}\`, which no outcome, transition target, or violation declares`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
for (const [id, where] of outcomeVocabulary) {
|
|
269
|
+
if (!(id in covers)) {
|
|
270
|
+
err("outcome_not_covered", `interface \`${name}\`: outcome \`${id}\` (${where}) is absent from covers_outcomes — write it, even as null`);
|
|
271
|
+
}
|
|
272
|
+
else if (covers[id] === null) {
|
|
273
|
+
warn("outcome_unshown", `interface \`${name}\`: outcome \`${id}\` is declared not shown to the user`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// Shown, but shown as the same thing. Between "the user sees it" and "the user sees nothing"
|
|
277
|
+
// sits the state nobody notices: two different endings wearing one sentence. Measured on a
|
|
278
|
+
// real screen — 401 and 403 both surfaced as «Не удалось выполнить действие. Попробуйте ещё
|
|
279
|
+
// раз.», so the one user who must give consent is told to retry, and retrying can never work.
|
|
280
|
+
// A warning: collapsing outcomes is sometimes a deliberate choice, and the card is the place
|
|
281
|
+
// where that choice stops being invisible.
|
|
282
|
+
const byText = new Map();
|
|
283
|
+
for (const [id, shown] of Object.entries(covers)) {
|
|
284
|
+
if (typeof shown !== "string")
|
|
285
|
+
continue;
|
|
286
|
+
const key = shown.trim().toLowerCase();
|
|
287
|
+
byText.set(key, [...(byText.get(key) ?? []), id]);
|
|
288
|
+
}
|
|
289
|
+
for (const [, ids] of byText) {
|
|
290
|
+
if (ids.length > 1) {
|
|
291
|
+
warn("outcomes_indistinguishable", `interface \`${name}\`: outcomes ${ids.map((i) => `\`${i}\``).join(", ")} are shown identically — the user cannot tell them apart`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
219
295
|
for (const [name, iface] of Object.entries(interfaces)) {
|
|
220
296
|
for (const parameter of iface?.parameters ?? []) {
|
|
221
297
|
if (parameter?.handling !== "decorative")
|
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED