@typed-sql/cli 1.0.0 → 2.0.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/CHANGELOG.md +85 -0
- package/README.md +16 -2
- package/dist/packages/cli/src/cli.js +246 -4
- package/dist/packages/cli/src/cli.js.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,90 @@
|
|
|
1
1
|
# @typed-sql/cli
|
|
2
2
|
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- 3f063f6: Add deterministic, secret-free query manifests with bounded structural variants, inferred result
|
|
8
|
+
and parameter descriptions, semantic evidence, runtime-correlatable fingerprints, unresolved
|
|
9
|
+
entries, compatible parsing, canonical serialization, incremental per-file reuse, tsconfig project
|
|
10
|
+
discovery, and a dedicated CLI command.
|
|
11
|
+
- 6a7ae58: Add opt-in live query verification through grammar-owned PostgreSQL PREPARE and MySQL
|
|
12
|
+
COM_STMT_PREPARE adapters, bounded neutral comparison, deterministic secret-free proof artifacts,
|
|
13
|
+
offline cache validation, explicit unsupported classifications, CLI workflows, real database E2E,
|
|
14
|
+
and performance budgets.
|
|
15
|
+
- b4f1b6e: Add deterministic migration compatibility analysis across before/after schema snapshots and query
|
|
16
|
+
manifests. Reports classify both rolling-deployment directions, retain exact source and dependency
|
|
17
|
+
evidence, fail closed for unknown semantics, redact defaults and paths, and support configurable CI
|
|
18
|
+
severity through `typed-sql compat`.
|
|
19
|
+
- b2ec119: Add opt-in, grammar-neutral query-plan governance with PostgreSQL and MySQL structured EXPLAIN
|
|
20
|
+
adapters, transient application-owned samples, redacted fingerprint-keyed artifacts, absolute and
|
|
21
|
+
comparable regression budgets, explicit uncertainty, CLI capture and review, documentation, and
|
|
22
|
+
performance coverage.
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- Updated dependencies [7ea5d2f]
|
|
27
|
+
- Updated dependencies [29afc3d]
|
|
28
|
+
- Updated dependencies [3f063f6]
|
|
29
|
+
- Updated dependencies [6a7ae58]
|
|
30
|
+
- Updated dependencies [b06fd0a]
|
|
31
|
+
- Updated dependencies [9c72dab]
|
|
32
|
+
- Updated dependencies [3050209]
|
|
33
|
+
- Updated dependencies [1b054b6]
|
|
34
|
+
- Updated dependencies [b4f1b6e]
|
|
35
|
+
- Updated dependencies [87189c3]
|
|
36
|
+
- Updated dependencies [e654fae]
|
|
37
|
+
- Updated dependencies [b2ec119]
|
|
38
|
+
- @typed-sql/core@2.0.0
|
|
39
|
+
- @typed-sql/compiler@2.0.0
|
|
40
|
+
- @typed-sql/schema@2.0.0
|
|
41
|
+
- @typed-sql/config@2.0.0
|
|
42
|
+
|
|
43
|
+
## 2.0.0-rc.1
|
|
44
|
+
|
|
45
|
+
### Patch Changes
|
|
46
|
+
|
|
47
|
+
- Updated dependencies [9c72dab]
|
|
48
|
+
- @typed-sql/compiler@2.0.0-rc.1
|
|
49
|
+
|
|
50
|
+
## 2.0.0-rc.0
|
|
51
|
+
|
|
52
|
+
### Major Changes
|
|
53
|
+
|
|
54
|
+
- 3f063f6: Add deterministic, secret-free query manifests with bounded structural variants, inferred result
|
|
55
|
+
and parameter descriptions, semantic evidence, runtime-correlatable fingerprints, unresolved
|
|
56
|
+
entries, compatible parsing, canonical serialization, incremental per-file reuse, tsconfig project
|
|
57
|
+
discovery, and a dedicated CLI command.
|
|
58
|
+
- 6a7ae58: Add opt-in live query verification through grammar-owned PostgreSQL PREPARE and MySQL
|
|
59
|
+
COM_STMT_PREPARE adapters, bounded neutral comparison, deterministic secret-free proof artifacts,
|
|
60
|
+
offline cache validation, explicit unsupported classifications, CLI workflows, real database E2E,
|
|
61
|
+
and performance budgets.
|
|
62
|
+
- b4f1b6e: Add deterministic migration compatibility analysis across before/after schema snapshots and query
|
|
63
|
+
manifests. Reports classify both rolling-deployment directions, retain exact source and dependency
|
|
64
|
+
evidence, fail closed for unknown semantics, redact defaults and paths, and support configurable CI
|
|
65
|
+
severity through `typed-sql compat`.
|
|
66
|
+
- b2ec119: Add opt-in, grammar-neutral query-plan governance with PostgreSQL and MySQL structured EXPLAIN
|
|
67
|
+
adapters, transient application-owned samples, redacted fingerprint-keyed artifacts, absolute and
|
|
68
|
+
comparable regression budgets, explicit uncertainty, CLI capture and review, documentation, and
|
|
69
|
+
performance coverage.
|
|
70
|
+
|
|
71
|
+
### Patch Changes
|
|
72
|
+
|
|
73
|
+
- Updated dependencies [29afc3d]
|
|
74
|
+
- Updated dependencies [3f063f6]
|
|
75
|
+
- Updated dependencies [6a7ae58]
|
|
76
|
+
- Updated dependencies [b06fd0a]
|
|
77
|
+
- Updated dependencies [3050209]
|
|
78
|
+
- Updated dependencies [1b054b6]
|
|
79
|
+
- Updated dependencies [b4f1b6e]
|
|
80
|
+
- Updated dependencies [87189c3]
|
|
81
|
+
- Updated dependencies [e654fae]
|
|
82
|
+
- Updated dependencies [b2ec119]
|
|
83
|
+
- @typed-sql/core@2.0.0-rc.0
|
|
84
|
+
- @typed-sql/compiler@2.0.0-rc.0
|
|
85
|
+
- @typed-sql/schema@2.0.0-rc.0
|
|
86
|
+
- @typed-sql/config@2.0.0-rc.0
|
|
87
|
+
|
|
3
88
|
## 1.0.0
|
|
4
89
|
|
|
5
90
|
### Major Changes
|
package/README.md
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
The stable, config-driven command line interface for
|
|
4
4
|
[typed-sql](https://github.com/Lojhan/typed-sql). It generates deterministic database snapshots,
|
|
5
|
-
checks inferred queries through TypeScript,
|
|
5
|
+
checks inferred queries through TypeScript, detects schema drift, emits deterministic query manifests,
|
|
6
|
+
verifies compiler evidence through optional native database metadata, captures redacted structured
|
|
7
|
+
query plans, reviews explicit plan budgets, and analyzes migrations against compiled query contracts.
|
|
6
8
|
|
|
7
9
|
```sh
|
|
8
10
|
pnpm add -D @typed-sql/cli typescript@7.0.2
|
|
@@ -14,6 +16,11 @@ Install a grammar and its application-owned driver, then create `typed-sql.confi
|
|
|
14
16
|
pnpm exec typed-sql generate
|
|
15
17
|
pnpm exec typed-sql check --file src/query.ts --project tsconfig.json
|
|
16
18
|
pnpm exec typed-sql drift
|
|
19
|
+
pnpm exec typed-sql manifest
|
|
20
|
+
pnpm exec typed-sql verify --live
|
|
21
|
+
pnpm exec typed-sql verify
|
|
22
|
+
pnpm exec typed-sql explain --compare artifacts/plans.json
|
|
23
|
+
pnpm exec typed-sql compat --before before.schema.json --after after.schema.json --before-manifest before.queries.json --after-manifest after.queries.json
|
|
17
24
|
```
|
|
18
25
|
|
|
19
26
|
Use `--config path/to/typed-sql.config.ts` to bypass config discovery. Run
|
|
@@ -22,6 +29,13 @@ Use `--config path/to/typed-sql.config.ts` to bypass config discovery. Run
|
|
|
22
29
|
The CLI contains no PostgreSQL, MySQL, `pg`, or `mysql2` dependency. It loads the installed grammar
|
|
23
30
|
and schema provider through the application config. Read
|
|
24
31
|
[Configuration](https://github.com/Lojhan/typed-sql/blob/main/docs/getting-started/configuration.md) and
|
|
25
|
-
[Schema snapshots](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/schema-snapshots.md)
|
|
32
|
+
[Schema snapshots](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/schema-snapshots.md), and
|
|
33
|
+
[Query manifests](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/query-manifests.md).
|
|
34
|
+
[Live verification](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/live-verification.md) documents
|
|
35
|
+
native safety, cached proofs, and CI behavior.
|
|
36
|
+
[Query plan governance](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/query-plan-governance.md)
|
|
37
|
+
documents structured evidence, transient parameter samples, budgets, and optimizer uncertainty.
|
|
38
|
+
[Migration compatibility](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/migration-compatibility.md)
|
|
39
|
+
documents deterministic reports, rolling deployments, and migration-runner integration.
|
|
26
40
|
|
|
27
41
|
MIT © typed-sql contributors
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, join, parse, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { checkFile } from "@typed-sql/compiler";
|
|
5
|
+
import { analyzeSchemaCompatibility, assertQueryVerificationProofCurrent, buildQueryManifest, captureQueryPlans, checkFile, collectQueryVerificationCandidates, listProjectSourceFiles, parseQueryManifest, parseQueryPlanArtifact, parseQueryVerificationProof, reviewQueryPlans, serializeQueryManifest, serializeQueryPlanArtifact, serializeQueryPlanReviewReport, serializeQueryVerificationProof, serializeSchemaCompatibilityReport, verifyQueryManifest, } from "@typed-sql/compiler";
|
|
6
6
|
import { fromConfig, loadConfig } from "@typed-sql/config";
|
|
7
|
-
import { checkSchemaDrift, generateSchemaPackage, loadGeneratedSchemaSnapshot } from "@typed-sql/schema";
|
|
8
|
-
const commands = new Set(["check", "generate", "drift"]);
|
|
7
|
+
import { checkSchemaDrift, generateSchemaPackage, loadGeneratedSchemaSnapshot, parseSchemaSnapshot, } from "@typed-sql/schema";
|
|
8
|
+
const commands = new Set(["check", "compat", "explain", "generate", "drift", "manifest", "verify"]);
|
|
9
9
|
async function packageVersion() {
|
|
10
10
|
let directory = dirname(fileURLToPath(import.meta.url));
|
|
11
11
|
const root = parse(directory).root;
|
|
@@ -31,8 +31,12 @@ Usage:
|
|
|
31
31
|
|
|
32
32
|
Commands:
|
|
33
33
|
check Infer SQL result types and verify them with TypeScript 7
|
|
34
|
+
compat Analyze rolling-deployment compatibility from two snapshots and manifests
|
|
35
|
+
explain Capture and review structured database query plans
|
|
34
36
|
generate Introspect or load a schema snapshot and generate the typed contract
|
|
35
37
|
drift Compare the generated contract with the live database catalog
|
|
38
|
+
manifest Emit a deterministic manifest for every project query
|
|
39
|
+
verify Verify a manifest from cached proof or native live metadata
|
|
36
40
|
|
|
37
41
|
Global options:
|
|
38
42
|
-h, --help Show this help
|
|
@@ -40,8 +44,13 @@ Global options:
|
|
|
40
44
|
|
|
41
45
|
Examples:
|
|
42
46
|
typed-sql check --config typed-sql.config.ts --file src/query.ts --project tsconfig.json
|
|
47
|
+
typed-sql compat --before schema.before.json --after schema.after.json --before-manifest old.json --after-manifest new.json
|
|
48
|
+
typed-sql explain --manifest .typed-sql/queries.json --out .typed-sql/plans.json
|
|
49
|
+
typed-sql explain --compare .typed-sql/plans.json
|
|
43
50
|
typed-sql generate --config typed-sql.config.ts --out generated/db
|
|
44
51
|
typed-sql drift --config typed-sql.config.ts
|
|
52
|
+
typed-sql manifest --config typed-sql.config.ts --project tsconfig.json --out .typed-sql/queries.json
|
|
53
|
+
typed-sql verify --config typed-sql.config.ts --live --manifest .typed-sql/queries.json
|
|
45
54
|
`;
|
|
46
55
|
}
|
|
47
56
|
function parseArguments(args) {
|
|
@@ -51,6 +60,10 @@ function parseArguments(args) {
|
|
|
51
60
|
const argument = args[index];
|
|
52
61
|
if (!argument.startsWith("--"))
|
|
53
62
|
throw new Error(`Unexpected argument ${argument}`);
|
|
63
|
+
if (argument === "--live") {
|
|
64
|
+
options.live = "true";
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
54
67
|
const equals = argument.indexOf("=");
|
|
55
68
|
if (equals !== -1)
|
|
56
69
|
options[argument.slice(2, equals)] = argument.slice(equals + 1);
|
|
@@ -73,6 +86,59 @@ function required(options, name) {
|
|
|
73
86
|
async function readSnapshot(path, validate) {
|
|
74
87
|
return validate(JSON.parse(await readFile(path, "utf8")));
|
|
75
88
|
}
|
|
89
|
+
async function readPreviousManifest(path) {
|
|
90
|
+
try {
|
|
91
|
+
return parseQueryManifest(JSON.parse(await readFile(path, "utf8")));
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT")
|
|
95
|
+
return undefined;
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function projectSources(directory, configured, projectOption) {
|
|
100
|
+
const projects = projectOption === undefined
|
|
101
|
+
? (configured ?? ["tsconfig.json"]).map((project) => fromConfig(directory, project))
|
|
102
|
+
: [resolve(projectOption)];
|
|
103
|
+
if (projects.length === 0)
|
|
104
|
+
throw new Error("typed-sql requires at least one TypeScript project");
|
|
105
|
+
const sourceFiles = [
|
|
106
|
+
...new Set((await Promise.all(projects.map((project) => listProjectSourceFiles({ project, cwd: directory })))).flat()),
|
|
107
|
+
].sort();
|
|
108
|
+
const sources = await Promise.all(sourceFiles.map(async (file) => ({ file, source: await readFile(file, "utf8") })));
|
|
109
|
+
return { projects, sources };
|
|
110
|
+
}
|
|
111
|
+
function reportVerification(entries) {
|
|
112
|
+
for (const entry of entries) {
|
|
113
|
+
if (entry.status === "verified")
|
|
114
|
+
continue;
|
|
115
|
+
process.stderr.write(`${entry.source.file}:${entry.source.range.line}:${entry.source.range.column} - ${entry.code ?? "TSQ502"}: ${entry.status}\n`);
|
|
116
|
+
for (const mismatch of entry.mismatches ?? []) {
|
|
117
|
+
const position = mismatch.index === undefined ? mismatch.target : `${mismatch.target} ${mismatch.index}`;
|
|
118
|
+
process.stderr.write(` ${position} ${mismatch.kind}: compiler=${mismatch.expected}, database=${mismatch.actual}\n`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function reportCompatibility(assessments) {
|
|
123
|
+
for (const assessment of assessments) {
|
|
124
|
+
const locations = assessment.queries.length === 0
|
|
125
|
+
? "schema-wide"
|
|
126
|
+
: assessment.queries
|
|
127
|
+
.map((query) => `${query.source.file}:${query.source.range.line}:${query.source.range.column}`)
|
|
128
|
+
.join(", ");
|
|
129
|
+
process.stderr.write(`${assessment.severity} ${assessment.direction} ${assessment.classification} (${locations}): ${assessment.reason}\n`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function reportPlans(entries) {
|
|
133
|
+
for (const entry of entries) {
|
|
134
|
+
if (entry.status === "pass" || entry.status === "unbudgeted")
|
|
135
|
+
continue;
|
|
136
|
+
process.stderr.write(`${entry.source.file}:${entry.source.range.line}:${entry.source.range.column} - plan ${entry.status}${entry.reasons.length === 0 ? "" : ` (${entry.reasons.join(", ")})`}\n`);
|
|
137
|
+
for (const violation of entry.violations) {
|
|
138
|
+
process.stderr.write(` ${violation.kind}: expected ${violation.expected}, actual ${violation.actual}\n`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
76
142
|
async function main() {
|
|
77
143
|
const args = process.argv.slice(2);
|
|
78
144
|
const version = await packageVersion();
|
|
@@ -93,6 +159,36 @@ async function main() {
|
|
|
93
159
|
const dialect = config.dialect;
|
|
94
160
|
const policy = config.typePolicy ?? dialect.defaultTypePolicy;
|
|
95
161
|
const schemaFile = fromConfig(loaded.directory, parsed.options.schema ?? config.schema.file);
|
|
162
|
+
if (parsed.command === "compat") {
|
|
163
|
+
const beforeFile = fromConfig(loaded.directory, required(parsed.options, "before"));
|
|
164
|
+
const afterFile = fromConfig(loaded.directory, required(parsed.options, "after"));
|
|
165
|
+
const beforeManifestFile = fromConfig(loaded.directory, required(parsed.options, "before-manifest"));
|
|
166
|
+
const afterManifestFile = fromConfig(loaded.directory, required(parsed.options, "after-manifest"));
|
|
167
|
+
const outFile = fromConfig(loaded.directory, parsed.options.out ?? config.compatibility?.reportFile ?? ".typed-sql/compatibility.json");
|
|
168
|
+
const failOn = parsed.options["fail-on"] ?? config.compatibility?.failOn ?? "error";
|
|
169
|
+
if (!(failOn === "none" || failOn === "warning" || failOn === "error")) {
|
|
170
|
+
throw new Error("--fail-on must be none, warning, or error");
|
|
171
|
+
}
|
|
172
|
+
const [before, after, beforeManifest, afterManifest] = await Promise.all([
|
|
173
|
+
readSnapshot(beforeFile, parseSchemaSnapshot),
|
|
174
|
+
readSnapshot(afterFile, parseSchemaSnapshot),
|
|
175
|
+
readFile(beforeManifestFile, "utf8").then((source) => parseQueryManifest(JSON.parse(source))),
|
|
176
|
+
readFile(afterManifestFile, "utf8").then((source) => parseQueryManifest(JSON.parse(source))),
|
|
177
|
+
]);
|
|
178
|
+
if (before.dialect !== dialect.id || after.dialect !== dialect.id) {
|
|
179
|
+
throw new TypeError(`Compatibility snapshots must use configured dialect ${dialect.id}`);
|
|
180
|
+
}
|
|
181
|
+
const report = analyzeSchemaCompatibility({ before, after, beforeManifest, afterManifest });
|
|
182
|
+
await mkdir(dirname(outFile), { recursive: true });
|
|
183
|
+
await writeFile(outFile, serializeSchemaCompatibilityReport(report), "utf8");
|
|
184
|
+
reportCompatibility(report.assessments);
|
|
185
|
+
process.stdout.write(`Compatibility: ${report.summary.error} errors, ${report.summary.warning} warnings, ${report.summary.info} informational assessments at ${outFile}\n`);
|
|
186
|
+
if ((failOn === "error" && report.summary.error > 0) ||
|
|
187
|
+
(failOn === "warning" && (report.summary.error > 0 || report.summary.warning > 0))) {
|
|
188
|
+
process.exitCode = 1;
|
|
189
|
+
}
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
96
192
|
if (parsed.command === "check") {
|
|
97
193
|
const file = resolve(required(parsed.options, "file"));
|
|
98
194
|
const result = await checkFile({
|
|
@@ -129,6 +225,152 @@ async function main() {
|
|
|
129
225
|
process.stdout.write(`Generated schema ${metadata.schemaHash}\n`);
|
|
130
226
|
return;
|
|
131
227
|
}
|
|
228
|
+
if (parsed.command === "manifest") {
|
|
229
|
+
const schema = await readSnapshot(schemaFile, (value) => dialect.validateSnapshot(value));
|
|
230
|
+
const { projects, sources } = await projectSources(loaded.directory, config.projects, parsed.options.project);
|
|
231
|
+
const outFile = fromConfig(loaded.directory, parsed.options.out ?? config.manifest?.outFile ?? ".typed-sql/queries.json");
|
|
232
|
+
const previous = await readPreviousManifest(outFile);
|
|
233
|
+
const result = buildQueryManifest({
|
|
234
|
+
rootDir: loaded.directory,
|
|
235
|
+
sources,
|
|
236
|
+
projects,
|
|
237
|
+
dialect,
|
|
238
|
+
schema,
|
|
239
|
+
typePolicy: policy,
|
|
240
|
+
compilerVersion: version,
|
|
241
|
+
...(previous === undefined ? {} : { previous }),
|
|
242
|
+
...(config.compiler?.maxStructuralVariants === undefined
|
|
243
|
+
? {}
|
|
244
|
+
: { maxStructuralVariants: config.compiler.maxStructuralVariants }),
|
|
245
|
+
});
|
|
246
|
+
await mkdir(dirname(outFile), { recursive: true });
|
|
247
|
+
await writeFile(outFile, serializeQueryManifest(result.manifest), "utf8");
|
|
248
|
+
process.stdout.write(`Generated ${result.manifest.queries.length} queries (${result.stats.unresolvedQueries} unresolved, ${result.stats.reusedFiles} files reused) at ${outFile}\n`);
|
|
249
|
+
if (result.stats.unresolvedQueries > 0)
|
|
250
|
+
process.exitCode = 2;
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (parsed.command === "verify") {
|
|
254
|
+
if (parsed.options.live !== undefined && parsed.options.live !== "true") {
|
|
255
|
+
throw new Error("--live does not accept a value");
|
|
256
|
+
}
|
|
257
|
+
const manifestFile = fromConfig(loaded.directory, parsed.options.manifest ?? config.manifest?.outFile ?? ".typed-sql/queries.json");
|
|
258
|
+
const proofFile = fromConfig(loaded.directory, parsed.options.proof ?? config.verification?.proofFile ?? ".typed-sql/verification.json");
|
|
259
|
+
const manifest = parseQueryManifest(JSON.parse(await readFile(manifestFile, "utf8")));
|
|
260
|
+
if (parsed.options.live === "true") {
|
|
261
|
+
const verifier = config.verification?.live;
|
|
262
|
+
if (verifier === undefined)
|
|
263
|
+
throw new Error("typed-sql verify --live requires verification.live in typed-sql.config.ts");
|
|
264
|
+
const schema = await readSnapshot(schemaFile, (value) => dialect.validateSnapshot(value));
|
|
265
|
+
const { projects, sources } = await projectSources(loaded.directory, config.projects, parsed.options.project);
|
|
266
|
+
const candidates = collectQueryVerificationCandidates({
|
|
267
|
+
manifest,
|
|
268
|
+
rootDir: loaded.directory,
|
|
269
|
+
sources,
|
|
270
|
+
projects,
|
|
271
|
+
dialect,
|
|
272
|
+
schema,
|
|
273
|
+
typePolicy: policy,
|
|
274
|
+
...(config.compiler?.maxStructuralVariants === undefined
|
|
275
|
+
? {}
|
|
276
|
+
: { maxStructuralVariants: config.compiler.maxStructuralVariants }),
|
|
277
|
+
});
|
|
278
|
+
try {
|
|
279
|
+
const result = await verifyQueryManifest({
|
|
280
|
+
manifest,
|
|
281
|
+
candidates,
|
|
282
|
+
verifier,
|
|
283
|
+
...(config.verification?.concurrency === undefined ? {} : { concurrency: config.verification.concurrency }),
|
|
284
|
+
});
|
|
285
|
+
await mkdir(dirname(proofFile), { recursive: true });
|
|
286
|
+
await writeFile(proofFile, serializeQueryVerificationProof(result.proof), "utf8");
|
|
287
|
+
reportVerification(result.proof.entries);
|
|
288
|
+
process.stdout.write(`Verified ${result.verified} variants (${result.mismatched} mismatched, ${result.skipped} skipped, ${result.failed} failed) at ${proofFile}\n`);
|
|
289
|
+
if (result.mismatched > 0 || result.failed > 0)
|
|
290
|
+
process.exitCode = 1;
|
|
291
|
+
else if (result.skipped > 0)
|
|
292
|
+
process.exitCode = 2;
|
|
293
|
+
}
|
|
294
|
+
finally {
|
|
295
|
+
await verifier.close();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
const proof = parseQueryVerificationProof(JSON.parse(await readFile(proofFile, "utf8")));
|
|
300
|
+
assertQueryVerificationProofCurrent(manifest, proof, config.verification?.live);
|
|
301
|
+
reportVerification(proof.entries);
|
|
302
|
+
const mismatched = proof.entries.filter((entry) => entry.status === "mismatch").length;
|
|
303
|
+
const skipped = proof.entries.filter((entry) => entry.status === "skipped").length;
|
|
304
|
+
const failed = proof.entries.filter((entry) => entry.status === "error").length;
|
|
305
|
+
process.stdout.write(`Cached verification is current (${proof.entries.length} entries)\n`);
|
|
306
|
+
if (mismatched > 0 || failed > 0)
|
|
307
|
+
process.exitCode = 1;
|
|
308
|
+
else if (skipped > 0)
|
|
309
|
+
process.exitCode = 2;
|
|
310
|
+
}
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
if (parsed.command === "explain") {
|
|
314
|
+
const inspector = config.plans?.live;
|
|
315
|
+
if (inspector === undefined) {
|
|
316
|
+
throw new Error("typed-sql explain requires plans.live in typed-sql.config.ts");
|
|
317
|
+
}
|
|
318
|
+
const failOn = parsed.options["fail-on"] ?? config.plans?.failOn ?? "violation";
|
|
319
|
+
if (!(failOn === "none" || failOn === "violation" || failOn === "uncertainty")) {
|
|
320
|
+
throw new Error("--fail-on must be none, violation, or uncertainty");
|
|
321
|
+
}
|
|
322
|
+
const manifestFile = fromConfig(loaded.directory, parsed.options.manifest ?? config.manifest?.outFile ?? ".typed-sql/queries.json");
|
|
323
|
+
const artifactFile = fromConfig(loaded.directory, parsed.options.out ?? config.plans?.artifactFile ?? ".typed-sql/plans.json");
|
|
324
|
+
const reportFile = fromConfig(loaded.directory, parsed.options.report ?? config.plans?.reportFile ?? ".typed-sql/plan-review.json");
|
|
325
|
+
const compareOption = parsed.options.compare ?? config.plans?.baselineFile;
|
|
326
|
+
const baseline = compareOption === undefined
|
|
327
|
+
? undefined
|
|
328
|
+
: parseQueryPlanArtifact(JSON.parse(await readFile(fromConfig(loaded.directory, compareOption), "utf8")));
|
|
329
|
+
const manifest = parseQueryManifest(JSON.parse(await readFile(manifestFile, "utf8")));
|
|
330
|
+
const schema = await readSnapshot(schemaFile, (value) => dialect.validateSnapshot(value));
|
|
331
|
+
const { projects, sources } = await projectSources(loaded.directory, config.projects, parsed.options.project);
|
|
332
|
+
const candidates = collectQueryVerificationCandidates({
|
|
333
|
+
manifest,
|
|
334
|
+
rootDir: loaded.directory,
|
|
335
|
+
sources,
|
|
336
|
+
projects,
|
|
337
|
+
dialect,
|
|
338
|
+
schema,
|
|
339
|
+
typePolicy: policy,
|
|
340
|
+
...(config.compiler?.maxStructuralVariants === undefined
|
|
341
|
+
? {}
|
|
342
|
+
: { maxStructuralVariants: config.compiler.maxStructuralVariants }),
|
|
343
|
+
});
|
|
344
|
+
try {
|
|
345
|
+
const result = await captureQueryPlans({
|
|
346
|
+
manifest,
|
|
347
|
+
candidates,
|
|
348
|
+
inspector,
|
|
349
|
+
...(config.plans?.sampleValues === undefined ? {} : { sampleValues: config.plans.sampleValues }),
|
|
350
|
+
...(config.plans?.concurrency === undefined ? {} : { concurrency: config.plans.concurrency }),
|
|
351
|
+
});
|
|
352
|
+
const report = reviewQueryPlans({
|
|
353
|
+
current: result.artifact,
|
|
354
|
+
...(baseline === undefined ? {} : { baseline }),
|
|
355
|
+
...(config.plans?.budgets === undefined ? {} : { budgets: config.plans.budgets }),
|
|
356
|
+
});
|
|
357
|
+
await Promise.all([
|
|
358
|
+
mkdir(dirname(artifactFile), { recursive: true }).then(() => writeFile(artifactFile, serializeQueryPlanArtifact(result.artifact), "utf8")),
|
|
359
|
+
mkdir(dirname(reportFile), { recursive: true }).then(() => writeFile(reportFile, serializeQueryPlanReviewReport(report), "utf8")),
|
|
360
|
+
]);
|
|
361
|
+
reportPlans(report.entries);
|
|
362
|
+
process.stdout.write(`Captured ${result.captured} plans (${result.skipped} skipped, ${result.failed} failed); review: ${report.summary.violation} violations, ${report.summary.incomparable} incomparable, ${report.summary.unavailable} unavailable at ${reportFile}\n`);
|
|
363
|
+
const uncertainty = report.summary.incomparable + report.summary.unavailable;
|
|
364
|
+
if (failOn === "violation" && report.summary.violation > 0)
|
|
365
|
+
process.exitCode = 1;
|
|
366
|
+
else if (failOn === "uncertainty" && (report.summary.violation > 0 || uncertainty > 0))
|
|
367
|
+
process.exitCode = 1;
|
|
368
|
+
}
|
|
369
|
+
finally {
|
|
370
|
+
await inspector.close();
|
|
371
|
+
}
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
132
374
|
if (parsed.command === "drift") {
|
|
133
375
|
if (config.schema.provider === undefined)
|
|
134
376
|
throw new Error("typed-sql drift requires schema.provider in typed-sql.config.ts");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typed-sql/cli",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Config-driven typed-sql generation, checking, and
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Config-driven typed-sql generation, checking, verification, and migration compatibility CLI.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Lojhan",
|
|
7
7
|
"repository": {
|
|
@@ -35,10 +35,10 @@
|
|
|
35
35
|
"typed-sql": "./dist/packages/cli/src/cli.js"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@typed-sql/
|
|
39
|
-
"@typed-sql/schema": "
|
|
40
|
-
"@typed-sql/
|
|
41
|
-
"@typed-sql/
|
|
38
|
+
"@typed-sql/config": "2.0.0",
|
|
39
|
+
"@typed-sql/schema": "2.0.0",
|
|
40
|
+
"@typed-sql/core": "2.0.0",
|
|
41
|
+
"@typed-sql/compiler": "2.0.0"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"test": "poku test --reporter=compact --enforce",
|