@metaobjectsdev/cli 0.24.4 → 0.25.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/README.md +2 -1
- package/dist/src/commands/docs.d.ts +14 -1
- package/dist/src/commands/docs.d.ts.map +1 -1
- package/dist/src/commands/docs.js +153 -8
- package/dist/src/commands/docs.js.map +1 -1
- package/dist/src/commands/eject.d.ts +38 -0
- package/dist/src/commands/eject.d.ts.map +1 -0
- package/dist/src/commands/eject.js +233 -0
- package/dist/src/commands/eject.js.map +1 -0
- package/dist/src/commands/gen.d.ts.map +1 -1
- package/dist/src/commands/gen.js +43 -20
- package/dist/src/commands/gen.js.map +1 -1
- package/dist/src/commands/init.d.ts +15 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +208 -20
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/types.d.ts +2 -1
- package/dist/src/commands/types.d.ts.map +1 -1
- package/dist/src/commands/types.js +165 -28
- package/dist/src/commands/types.js.map +1 -1
- package/dist/src/commands/verify.d.ts +9 -1
- package/dist/src/commands/verify.d.ts.map +1 -1
- package/dist/src/commands/verify.js +299 -51
- package/dist/src/commands/verify.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +105 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/advisory.d.ts +77 -0
- package/dist/src/lib/advisory.d.ts.map +1 -0
- package/dist/src/lib/advisory.js +97 -0
- package/dist/src/lib/advisory.js.map +1 -0
- package/dist/src/lib/anti-patterns.d.ts +27 -3
- package/dist/src/lib/anti-patterns.d.ts.map +1 -1
- package/dist/src/lib/anti-patterns.js +145 -8
- package/dist/src/lib/anti-patterns.js.map +1 -1
- package/dist/src/lib/args.d.ts +35 -1
- package/dist/src/lib/args.d.ts.map +1 -1
- package/dist/src/lib/args.js +32 -1
- package/dist/src/lib/args.js.map +1 -1
- package/dist/src/lib/detect-stack.d.ts.map +1 -1
- package/dist/src/lib/detect-stack.js +4 -13
- package/dist/src/lib/detect-stack.js.map +1 -1
- package/dist/src/lib/docs-drift.d.ts +31 -0
- package/dist/src/lib/docs-drift.d.ts.map +1 -0
- package/dist/src/lib/docs-drift.js +195 -0
- package/dist/src/lib/docs-drift.js.map +1 -0
- package/dist/src/lib/format.d.ts +10 -0
- package/dist/src/lib/format.d.ts.map +1 -1
- package/dist/src/lib/format.js +15 -0
- package/dist/src/lib/format.js.map +1 -1
- package/dist/src/lib/output.d.ts +13 -0
- package/dist/src/lib/output.d.ts.map +1 -1
- package/dist/src/lib/output.js +16 -1
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/package-manifest.d.ts +27 -0
- package/dist/src/lib/package-manifest.d.ts.map +1 -0
- package/dist/src/lib/package-manifest.js +52 -0
- package/dist/src/lib/package-manifest.js.map +1 -0
- package/package.json +11 -11
- package/src/commands/docs.ts +194 -8
- package/src/commands/eject.ts +282 -0
- package/src/commands/gen.ts +54 -19
- package/src/commands/init.ts +217 -19
- package/src/commands/types.ts +185 -34
- package/src/commands/verify.ts +358 -47
- package/src/index.ts +114 -5
- package/src/lib/advisory.ts +150 -0
- package/src/lib/anti-patterns.ts +163 -8
- package/src/lib/args.ts +74 -2
- package/src/lib/detect-stack.ts +4 -11
- package/src/lib/docs-drift.ts +222 -0
- package/src/lib/format.ts +14 -0
- package/src/lib/output.ts +33 -2
- package/src/lib/package-manifest.ts +58 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// `meta verify --docs` — the docs-drift gate.
|
|
2
|
+
//
|
|
3
|
+
// It runs `meta docs` into a throwaway temp directory and diffs what that produces
|
|
4
|
+
// against the committed docs tree. Same shape as `--codegen`, pointed at `docs.outDir`,
|
|
5
|
+
// and it exists because nothing checked the docs tree at all: `--codegen` regenerates only
|
|
6
|
+
// the config's `outDir`/`targets`, so a model could move and every committed page keep
|
|
7
|
+
// describing the previous one indefinitely, with every gate green.
|
|
8
|
+
//
|
|
9
|
+
// IT CALLS THE DOCS COMMAND, NOT A REIMPLEMENTATION OF IT. The gate and the door must not
|
|
10
|
+
// be two answers to "what are the docs" — that is the defect this whole surface is meant to
|
|
11
|
+
// prevent, and it would be embarrassing to introduce it in the checker.
|
|
12
|
+
//
|
|
13
|
+
// TWO DELIBERATE DIFFERENCES FROM `--codegen`, both in the direction of not convicting the
|
|
14
|
+
// innocent:
|
|
15
|
+
//
|
|
16
|
+
// 1. NO HAND-EDIT PRESERVATION, so a byte difference IS drift. Docs pages are read, never
|
|
17
|
+
// imported: there is no three-way merge, nothing records what was written, and the
|
|
18
|
+
// documented workflow never invites an edit inside one. `--codegen` needs
|
|
19
|
+
// `.gen-state/.hashes.json` to tell a preserved hand edit from stale output; here
|
|
20
|
+
// there is no such offer to honour.
|
|
21
|
+
//
|
|
22
|
+
// 2. IT REPORTS A FILE AS EXTRA ONLY WHERE IT OWNS THE DIRECTORY. `docs.outDir`
|
|
23
|
+
// defaults to `./docs`, which in a real repository is full of hand-written
|
|
24
|
+
// documentation — this repository's own `docs/` holds a hundred such files. Its
|
|
25
|
+
// `api/` subtree is not ours either: on a multi-port project those pages are written
|
|
26
|
+
// by the OTHER port's docs command (`mvn metaobjects:docs`, `metaobjects docs`,
|
|
27
|
+
// `dotnet meta docs`), which this gate never runs, so a fresh run here legitimately
|
|
28
|
+
// emits none of them. `--codegen` can convict a committed-but-not-regenerated file
|
|
29
|
+
// because `.gen-state` proves the generator wrote it; over the docs root there is no
|
|
30
|
+
// such manifest, and convicting anyway is precisely the jurisdiction mistake
|
|
31
|
+
// `--codegen`'s orphan branch was corrected for in 0.24.3.
|
|
32
|
+
//
|
|
33
|
+
// `agent/` IS ours, and there the ownership question has an answer on disk: the Node
|
|
34
|
+
// `meta docs` command is the only thing that writes that directory (its name is not
|
|
35
|
+
// configurable), and every page it writes opens with the `@generated` marker. That
|
|
36
|
+
// marker is the proof `--codegen` has to consult `.gen-state` for, so BOTH conditions
|
|
37
|
+
// are required — under `agent/` AND carrying the marker. A hand-written note dropped
|
|
38
|
+
// in `agent/` carries no marker and is left alone, exactly as one in the docs root is.
|
|
39
|
+
//
|
|
40
|
+
// It matters because the schema page is SKIPPED rather than failed when the expected
|
|
41
|
+
// schema cannot be built or no dialect is declared — so without this, a committed
|
|
42
|
+
// `agent/schema.md` describing the previous schema passed the gate on exactly the
|
|
43
|
+
// change it most needs to flag.
|
|
44
|
+
//
|
|
45
|
+
// The residual cost is stated rather than hidden: outside `agent/`, a page for an
|
|
46
|
+
// entity that was DELETED stays committed and this gate stays green.
|
|
47
|
+
import { mkdtempSync, rmSync, existsSync, readFileSync, readdirSync, lstatSync } from "node:fs";
|
|
48
|
+
import { tmpdir } from "node:os";
|
|
49
|
+
import { join, relative, resolve, isAbsolute, sep } from "node:path";
|
|
50
|
+
import { docsCommand } from "../commands/docs.js";
|
|
51
|
+
/**
|
|
52
|
+
* Recursively list files under `dir`, relative to it.
|
|
53
|
+
*
|
|
54
|
+
* `lstatSync`, NOT `statSync`, and symlinks are SKIPPED. This walks the committed docs
|
|
55
|
+
* tree as well as the fresh one now, and a real repository's `docs/` may hold a symlink to
|
|
56
|
+
* a build output that is absent on CI — `statSync` follows it and throws `ENOENT`, which
|
|
57
|
+
* the caller reports as "regeneration failed", blaming the fresh run for a dangling link
|
|
58
|
+
* in the committed tree. A directory symlink would also let the walk recurse without
|
|
59
|
+
* bound. Nothing MetaObjects writes is a symlink, so skipping them cannot hide a page of
|
|
60
|
+
* ours; a symlinked page is somebody else's file, which this gate does not judge anyway.
|
|
61
|
+
*/
|
|
62
|
+
function listFiles(dir) {
|
|
63
|
+
if (!existsSync(dir))
|
|
64
|
+
return [];
|
|
65
|
+
const out = [];
|
|
66
|
+
const walk = (d) => {
|
|
67
|
+
for (const entry of readdirSync(d)) {
|
|
68
|
+
const full = join(d, entry);
|
|
69
|
+
const st = lstatSync(full);
|
|
70
|
+
if (st.isSymbolicLink())
|
|
71
|
+
continue;
|
|
72
|
+
if (st.isDirectory())
|
|
73
|
+
walk(full);
|
|
74
|
+
else
|
|
75
|
+
out.push(relative(dir, full));
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
walk(dir);
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Docs-root-relative prefixes the Node `meta docs` command owns outright — the only
|
|
83
|
+
* places a committed page that a fresh run does not emit is drift rather than somebody
|
|
84
|
+
* else's file. `agent` is fixed (it is not a configurable subdirectory), which is what
|
|
85
|
+
* makes the claim checkable; `api` deliberately is NOT here, because its subdirectory IS
|
|
86
|
+
* configurable and on a multi-port project another port's docs command writes it.
|
|
87
|
+
*/
|
|
88
|
+
const OWNED_PREFIXES = ["agent/"];
|
|
89
|
+
/** The marker every generated docs page opens with — the on-disk ownership proof. */
|
|
90
|
+
const GENERATED_MARKER = "@generated";
|
|
91
|
+
/**
|
|
92
|
+
* True when this committed file is one WE wrote: under a directory this command owns, and
|
|
93
|
+
* carrying the generated marker in its opening lines. Both halves are load-bearing — the
|
|
94
|
+
* prefix keeps another port's `api/` pages out of jurisdiction, the marker keeps a
|
|
95
|
+
* hand-written note inside `agent/` out of it.
|
|
96
|
+
*/
|
|
97
|
+
function isOurs(docsDir, rel) {
|
|
98
|
+
const normalized = rel.split(sep).join("/");
|
|
99
|
+
if (!OWNED_PREFIXES.some((p) => normalized.startsWith(p)))
|
|
100
|
+
return false;
|
|
101
|
+
try {
|
|
102
|
+
return readFileSync(join(docsDir, rel), "utf8")
|
|
103
|
+
.split("\n", 3)
|
|
104
|
+
.some((line) => line.includes(GENERATED_MARKER));
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Unreadable is not proof of ownership, and this gate never convicts without it.
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Regenerate the docs into a temp tree and diff it against the committed one.
|
|
113
|
+
*
|
|
114
|
+
* A non-zero exit from the docs command is returned as `error` rather than as drift: a run
|
|
115
|
+
* that could not produce the pages has not shown that the committed ones are wrong, and
|
|
116
|
+
* reporting it as drift would send a reader to edit files that are probably fine.
|
|
117
|
+
*/
|
|
118
|
+
export async function computeDocsDrift(args) {
|
|
119
|
+
const root = isAbsolute(args.projectRoot) ? args.projectRoot : resolve(args.projectRoot);
|
|
120
|
+
const docsDir = isAbsolute(args.docsDir) ? args.docsDir : resolve(root, args.docsDir);
|
|
121
|
+
const tempRoot = mkdtempSync(join(tmpdir(), "meta-verify-docs-"));
|
|
122
|
+
try {
|
|
123
|
+
// NO `<project-root>` POSITIONAL, deliberately. Passing one is not the same command:
|
|
124
|
+
// an explicit path PINS the source set to that directory's own sources (#327), while a
|
|
125
|
+
// bare run discovers the project by walking up. The committed pages were produced by
|
|
126
|
+
// whatever the user actually ran, and a bare run is what `meta docs` means by default —
|
|
127
|
+
// so the gate reproduces that and takes its project root from `cwd`, the way the docs
|
|
128
|
+
// command itself does. A gate that resolved a different source set would report pages
|
|
129
|
+
// as drifted that a plain regeneration would reproduce exactly.
|
|
130
|
+
//
|
|
131
|
+
// `--out` IS passed, because the whole point is to write somewhere else; everything
|
|
132
|
+
// else — layout, surfaces, api surfaces, base URL — still resolves from the project's
|
|
133
|
+
// own config.
|
|
134
|
+
const exit = await docsCommand(["--out", tempRoot], args.cwd, { silent: true });
|
|
135
|
+
if (exit !== 0) {
|
|
136
|
+
return {
|
|
137
|
+
clean: false,
|
|
138
|
+
driftedFiles: [],
|
|
139
|
+
lines: [],
|
|
140
|
+
checked: 0,
|
|
141
|
+
error: `verify --docs: 'meta docs' exited ${exit}, so the committed pages could not be ` +
|
|
142
|
+
`compared against a fresh run. Fix that first — the error is above.`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const fresh = listFiles(tempRoot).sort();
|
|
146
|
+
if (fresh.length === 0) {
|
|
147
|
+
return {
|
|
148
|
+
clean: false,
|
|
149
|
+
driftedFiles: [],
|
|
150
|
+
lines: [],
|
|
151
|
+
checked: 0,
|
|
152
|
+
error: "verify --docs: a fresh 'meta docs' produced no pages, so there is nothing to " +
|
|
153
|
+
"compare. Check that this project declares metadata the docs surfaces cover.",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
const driftedFiles = [];
|
|
157
|
+
const lines = [];
|
|
158
|
+
for (const rel of fresh) {
|
|
159
|
+
const committedPath = join(docsDir, rel);
|
|
160
|
+
if (!existsSync(committedPath)) {
|
|
161
|
+
driftedFiles.push(rel);
|
|
162
|
+
lines.push(`+ ${rel} (a fresh 'meta docs' emits it; not committed)`);
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
const a = readFileSync(committedPath, "utf8");
|
|
166
|
+
const b = readFileSync(join(tempRoot, rel), "utf8");
|
|
167
|
+
if (a !== b) {
|
|
168
|
+
driftedFiles.push(rel);
|
|
169
|
+
lines.push(`~ ${rel} (committed content differs from a fresh 'meta docs')`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Committed-but-not-regenerated, inside the directories this command owns. Counted
|
|
173
|
+
// into `checked` as well as `driftedFiles` so the failing line and the passing line
|
|
174
|
+
// keep dividing by the same set — the `verify --templates` mistake, where a red run
|
|
175
|
+
// and a green run reported different denominators for the same project.
|
|
176
|
+
const freshSet = new Set(fresh);
|
|
177
|
+
const orphans = listFiles(docsDir)
|
|
178
|
+
.filter((rel) => !freshSet.has(rel) && isOurs(docsDir, rel))
|
|
179
|
+
.sort();
|
|
180
|
+
for (const rel of orphans) {
|
|
181
|
+
driftedFiles.push(rel);
|
|
182
|
+
lines.push(`- ${rel} (committed; a fresh 'meta docs' no longer emits it)`);
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
clean: driftedFiles.length === 0,
|
|
186
|
+
driftedFiles: driftedFiles.sort(),
|
|
187
|
+
lines,
|
|
188
|
+
checked: fresh.length + orphans.length,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
rmSync(tempRoot, { recursive: true, force: true });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=docs-drift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-drift.js","sourceRoot":"","sources":["../../../src/lib/docs-drift.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/format.d.ts
CHANGED
|
@@ -5,4 +5,14 @@ export declare const VALID_FORMATS: readonly OutputFormat[];
|
|
|
5
5
|
export declare function isValidFormat(flag: string): flag is OutputFormat;
|
|
6
6
|
export declare function resolveFormat(flag: string | undefined, isTTY: boolean): OutputFormat;
|
|
7
7
|
export declare function toonEncode(value: unknown): string;
|
|
8
|
+
/**
|
|
9
|
+
* Put ONE machine-readable document on stdout in the active structured format.
|
|
10
|
+
*
|
|
11
|
+
* Text format writes nothing here — its human rendering is the caller's job, and a
|
|
12
|
+
* command in text mode has already printed it. Callers in a structured format must
|
|
13
|
+
* keep every prose line off stdout (route narration to stderr): a document with a
|
|
14
|
+
* sentence in front of it breaks `| jq` outright. `meta migrate`'s
|
|
15
|
+
* `emitStructuredError` is the same split, made command-locally before this existed.
|
|
16
|
+
*/
|
|
17
|
+
export declare function emitStructured(payload: unknown, fmt: OutputFormat): void;
|
|
8
18
|
//# sourceMappingURL=format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/lib/format.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAIpD,iDAAiD;AACjD,eAAO,MAAM,aAAa,EAAE,SAAS,YAAY,EAA6B,CAAC;AAE/E,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAEhE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,YAAY,CAIpF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEjD"}
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/lib/format.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAIpD,iDAAiD;AACjD,eAAO,MAAM,aAAa,EAAE,SAAS,YAAY,EAA6B,CAAC;AAE/E,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAEhE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,YAAY,CAIpF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAGxE"}
|
package/dist/src/lib/format.js
CHANGED
|
@@ -15,4 +15,19 @@ export function resolveFormat(flag, isTTY) {
|
|
|
15
15
|
export function toonEncode(value) {
|
|
16
16
|
return encode(value);
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Put ONE machine-readable document on stdout in the active structured format.
|
|
20
|
+
*
|
|
21
|
+
* Text format writes nothing here — its human rendering is the caller's job, and a
|
|
22
|
+
* command in text mode has already printed it. Callers in a structured format must
|
|
23
|
+
* keep every prose line off stdout (route narration to stderr): a document with a
|
|
24
|
+
* sentence in front of it breaks `| jq` outright. `meta migrate`'s
|
|
25
|
+
* `emitStructuredError` is the same split, made command-locally before this existed.
|
|
26
|
+
*/
|
|
27
|
+
export function emitStructured(payload, fmt) {
|
|
28
|
+
if (fmt === "json")
|
|
29
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
30
|
+
else if (fmt === "toon")
|
|
31
|
+
console.log(toonEncode(payload));
|
|
32
|
+
}
|
|
18
33
|
//# sourceMappingURL=format.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/lib/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/E,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAoB,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAwB,EAAE,KAAc;IACpE,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAoB,CAAC;QAAE,OAAO,IAAoB,CAAC;IACzE,2EAA2E;IAC3E,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/lib/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/E,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAoB,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAwB,EAAE,KAAc;IACpE,IAAI,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAoB,CAAC;QAAE,OAAO,IAAoB,CAAC;IACzE,2EAA2E;IAC3E,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,GAAiB;IAChE,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;SAC7D,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,CAAC"}
|
package/dist/src/lib/output.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Dialect } from "./kysely.js";
|
|
2
|
+
import { type AdvisoryFindingRow, type AdvisorySection } from "./advisory.js";
|
|
2
3
|
export interface FormatOptions {
|
|
3
4
|
isTTY: boolean;
|
|
4
5
|
}
|
|
@@ -15,6 +16,17 @@ export interface GenResultShape {
|
|
|
15
16
|
dialect: Dialect | undefined;
|
|
16
17
|
dryRun: boolean;
|
|
17
18
|
warnings: string[];
|
|
19
|
+
/**
|
|
20
|
+
* The advisory anti-pattern pass, in full. Optional on the TYPE only so the
|
|
21
|
+
* pure formatter tests can build a result without one; `genResultToData` turns
|
|
22
|
+
* an absent section into an explicit "skipped" with a reason, because a payload
|
|
23
|
+
* that omits the advisory is precisely the defect this field closes — a run
|
|
24
|
+
* carrying hundreds of findings read as "all green" to an agent parsing stdout.
|
|
25
|
+
*
|
|
26
|
+
* NEVER capped here. The text renderer truncates for a human's terminal; the
|
|
27
|
+
* structured payload carries every finding.
|
|
28
|
+
*/
|
|
29
|
+
antiPatterns?: AdvisorySection<AdvisoryFindingRow>;
|
|
18
30
|
}
|
|
19
31
|
export declare function formatGenResult(result: GenResultShape, opts: FormatOptions): string;
|
|
20
32
|
export interface BlockedEntry {
|
|
@@ -55,6 +67,7 @@ export declare function genResultToData(result: GenResultShape): {
|
|
|
55
67
|
}[];
|
|
56
68
|
summary: string;
|
|
57
69
|
help: string[];
|
|
70
|
+
antiPatterns: AdvisorySection<AdvisoryFindingRow>;
|
|
58
71
|
};
|
|
59
72
|
export declare function formatGenResultToon(result: GenResultShape): string;
|
|
60
73
|
export declare function migrateResultToData(result: MigrateResultShape): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAkB,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAE9F,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;CAChB;AAMD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;CACpD;AAoBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CA2CnF;AAMD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,wGAAwG;IACxG,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC/B;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,CAyC5F;AAMD,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG;IACvD,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,EAAE,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;CACnD,CAmCA;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAElE;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG;IAC/D,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAuDA;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAE1E"}
|
package/dist/src/lib/output.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// TTY-gated glyphs: unicode (✓ ↺ ✗ = ⚠) when stdout is a TTY, plain words
|
|
4
4
|
// (NEW MERGED CONFLICT UNCHANGED REFUSED) otherwise. Per SP5 §5.1.
|
|
5
5
|
import { toonEncode } from "./format.js";
|
|
6
|
+
import { skippedSection } from "./advisory.js";
|
|
6
7
|
const GEN_GLYPHS = {
|
|
7
8
|
new: "✓",
|
|
8
9
|
merged: "↺",
|
|
@@ -123,7 +124,21 @@ export function genResultToData(result) {
|
|
|
123
124
|
const help = result.files.length === 0
|
|
124
125
|
? ["author entities in this project's metadata sources then re-run `meta gen`"]
|
|
125
126
|
: ["typecheck the generated code with `npx tsc`", "create your database tables with `meta migrate --from-db --db <url> --dialect <sqlite|postgres> --slug init --apply`"];
|
|
126
|
-
|
|
127
|
+
// An absent section is STATED, never omitted: a reader must be able to tell
|
|
128
|
+
// "the scan found nothing" from "the scan never ran".
|
|
129
|
+
const antiPatterns = result.antiPatterns
|
|
130
|
+
?? skippedSection("the advisory anti-pattern pass did not run for this result");
|
|
131
|
+
// One more next step when there is something to act on — the whole reason the
|
|
132
|
+
// findings are in the payload is that somebody can now act on all of them.
|
|
133
|
+
if (antiPatterns.total > 0) {
|
|
134
|
+
help.push(`${antiPatterns.total} authored site(s) hand-roll what MetaObjects can model — see antiPatterns.rows[] and run \`meta types <construct>\``);
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
gen: result.files.map((f) => ({ file: f.path, status: f.status })),
|
|
138
|
+
summary,
|
|
139
|
+
help,
|
|
140
|
+
antiPatterns,
|
|
141
|
+
};
|
|
127
142
|
}
|
|
128
143
|
export function formatGenResultToon(result) {
|
|
129
144
|
return toonEncode(genResultToData(result));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,0EAA0E;AAC1E,mEAAmE;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** The dependency-bearing fields of a package.json, all optional. */
|
|
2
|
+
export interface PackageManifest {
|
|
3
|
+
dependencies?: Record<string, string>;
|
|
4
|
+
devDependencies?: Record<string, string>;
|
|
5
|
+
peerDependencies?: Record<string, string>;
|
|
6
|
+
optionalDependencies?: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Every package name the manifest declares, across ALL FOUR dependency fields.
|
|
10
|
+
*
|
|
11
|
+
* All four, because the question every caller is really asking is "will this resolve,
|
|
12
|
+
* and will their typecheck be happy" — not "is it in one particular field". A library
|
|
13
|
+
* consuming MetaObjects through `peerDependencies` (the correct declaration for a
|
|
14
|
+
* package whose consumer supplies the version) has it declared, and so does one using
|
|
15
|
+
* `optionalDependencies`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function declaredDependencyNames(pkg: PackageManifest): Set<string>;
|
|
18
|
+
/**
|
|
19
|
+
* Read and parse `<cwd>/package.json`.
|
|
20
|
+
*
|
|
21
|
+
* `undefined` distinguishes "no readable manifest" from "a manifest declaring nothing",
|
|
22
|
+
* which callers report differently: with no manifest there is nothing to compare
|
|
23
|
+
* against, so the honest message names what a file needs rather than claiming it is
|
|
24
|
+
* missing from a list that was never read.
|
|
25
|
+
*/
|
|
26
|
+
export declare function readPackageManifest(cwd: string): PackageManifest | undefined;
|
|
27
|
+
//# sourceMappingURL=package-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manifest.d.ts","sourceRoot":"","sources":["../../../src/lib/package-manifest.ts"],"names":[],"mappings":"AAgBA,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAMzE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAQ5E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// One answer to "what does this project declare as a dependency".
|
|
2
|
+
//
|
|
3
|
+
// Three commands ask it — `meta init` (is this package already declared, or must the
|
|
4
|
+
// scaffold add it?), `meta eject` (will the ejected file's imports resolve, or does the
|
|
5
|
+
// adopter's tsc report TS2307?), and stack detection (which frameworks is this project
|
|
6
|
+
// on?). They had three hand-rolled JSON-parse-and-union blocks covering DIFFERENT field
|
|
7
|
+
// sets, and the asymmetry was the cost: `eject` reported a peer-declared package as
|
|
8
|
+
// missing and told the adopter to install what they already had — advice that, followed,
|
|
9
|
+
// adds a second physical copy of a package whose class identity is load-bearing (the
|
|
10
|
+
// ts-poet split in 0.21.6 and the metadata node-guard split are both that bug).
|
|
11
|
+
//
|
|
12
|
+
// A fix to one had no way to find the other two: nothing referenced anything, and no
|
|
13
|
+
// shared name connected them to a grep.
|
|
14
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
/**
|
|
17
|
+
* Every package name the manifest declares, across ALL FOUR dependency fields.
|
|
18
|
+
*
|
|
19
|
+
* All four, because the question every caller is really asking is "will this resolve,
|
|
20
|
+
* and will their typecheck be happy" — not "is it in one particular field". A library
|
|
21
|
+
* consuming MetaObjects through `peerDependencies` (the correct declaration for a
|
|
22
|
+
* package whose consumer supplies the version) has it declared, and so does one using
|
|
23
|
+
* `optionalDependencies`.
|
|
24
|
+
*/
|
|
25
|
+
export function declaredDependencyNames(pkg) {
|
|
26
|
+
const out = new Set();
|
|
27
|
+
for (const field of ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]) {
|
|
28
|
+
for (const name of Object.keys(pkg[field] ?? {}))
|
|
29
|
+
out.add(name);
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Read and parse `<cwd>/package.json`.
|
|
35
|
+
*
|
|
36
|
+
* `undefined` distinguishes "no readable manifest" from "a manifest declaring nothing",
|
|
37
|
+
* which callers report differently: with no manifest there is nothing to compare
|
|
38
|
+
* against, so the honest message names what a file needs rather than claiming it is
|
|
39
|
+
* missing from a list that was never read.
|
|
40
|
+
*/
|
|
41
|
+
export function readPackageManifest(cwd) {
|
|
42
|
+
const path = join(cwd, "package.json");
|
|
43
|
+
if (!existsSync(path))
|
|
44
|
+
return undefined;
|
|
45
|
+
try {
|
|
46
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=package-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manifest.js","sourceRoot":"","sources":["../../../src/lib/package-manifest.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,qFAAqF;AACrF,wFAAwF;AACxF,uFAAuF;AACvF,wFAAwF;AACxF,oFAAoF;AACpF,yFAAyF;AACzF,qFAAqF;AACrF,gFAAgF;AAChF,EAAE;AACF,qFAAqF;AACrF,wCAAwC;AACxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAUjC;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAoB;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,sBAAsB,CAAU,EAAE,CAAC;QAC7G,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAoB,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaobjectsdev/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "CLI for MetaObjects: scaffold, codegen, migrate, and drift-detection commands.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -49,15 +49,15 @@
|
|
|
49
49
|
],
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@libsql/kysely-libsql": "^0.4.0",
|
|
52
|
-
"@metaobjectsdev/codegen-ts": "0.
|
|
53
|
-
"@metaobjectsdev/codegen-ts-react": "0.
|
|
54
|
-
"@metaobjectsdev/codegen-ts-tanstack": "0.
|
|
55
|
-
"@metaobjectsdev/docs-site": "0.
|
|
56
|
-
"@metaobjectsdev/metadata": "0.
|
|
57
|
-
"@metaobjectsdev/migrate-ts": "0.
|
|
58
|
-
"@metaobjectsdev/render": "0.
|
|
59
|
-
"@metaobjectsdev/runtime-ts": "0.
|
|
60
|
-
"@metaobjectsdev/sdk": "0.
|
|
52
|
+
"@metaobjectsdev/codegen-ts": "0.25.0",
|
|
53
|
+
"@metaobjectsdev/codegen-ts-react": "0.25.0",
|
|
54
|
+
"@metaobjectsdev/codegen-ts-tanstack": "0.25.0",
|
|
55
|
+
"@metaobjectsdev/docs-site": "0.25.0",
|
|
56
|
+
"@metaobjectsdev/metadata": "0.25.0",
|
|
57
|
+
"@metaobjectsdev/migrate-ts": "0.25.0",
|
|
58
|
+
"@metaobjectsdev/render": "0.25.0",
|
|
59
|
+
"@metaobjectsdev/runtime-ts": "0.25.0",
|
|
60
|
+
"@metaobjectsdev/sdk": "0.25.0",
|
|
61
61
|
"@toon-format/toon": "^2.3.0",
|
|
62
62
|
"jiti": "^2.4.0"
|
|
63
63
|
},
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"@types/pg": "^8.0.0",
|
|
77
77
|
"bun-types": "latest",
|
|
78
78
|
"drizzle-orm": "^0.45.1",
|
|
79
|
-
"fastify": "^
|
|
79
|
+
"fastify": "^5.6.2",
|
|
80
80
|
"kysely": "^0.27.0",
|
|
81
81
|
"pg": "^8.0.0",
|
|
82
82
|
"pg-mem": "^3.0.4",
|