@typed-sql/compiler 2.0.0 → 2.1.0-rc.1

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +14 -0
  3. package/dist/packages/compiler/src/analysis.d.ts +93 -0
  4. package/dist/packages/compiler/src/analysis.d.ts.map +1 -0
  5. package/dist/packages/compiler/src/analysis.js +149 -0
  6. package/dist/packages/compiler/src/analysis.js.map +1 -0
  7. package/dist/packages/compiler/src/check.d.ts +5 -0
  8. package/dist/packages/compiler/src/check.d.ts.map +1 -1
  9. package/dist/packages/compiler/src/check.js +40 -14
  10. package/dist/packages/compiler/src/check.js.map +1 -1
  11. package/dist/packages/compiler/src/compatibility.d.ts +7 -5
  12. package/dist/packages/compiler/src/compatibility.d.ts.map +1 -1
  13. package/dist/packages/compiler/src/compatibility.js +312 -11
  14. package/dist/packages/compiler/src/compatibility.js.map +1 -1
  15. package/dist/packages/compiler/src/compiler.d.ts +30 -1
  16. package/dist/packages/compiler/src/compiler.d.ts.map +1 -1
  17. package/dist/packages/compiler/src/compiler.js +162 -17
  18. package/dist/packages/compiler/src/compiler.js.map +1 -1
  19. package/dist/packages/compiler/src/index.d.ts +7 -3
  20. package/dist/packages/compiler/src/index.d.ts.map +1 -1
  21. package/dist/packages/compiler/src/index.js +3 -1
  22. package/dist/packages/compiler/src/index.js.map +1 -1
  23. package/dist/packages/compiler/src/manifest.d.ts +162 -1
  24. package/dist/packages/compiler/src/manifest.d.ts.map +1 -1
  25. package/dist/packages/compiler/src/manifest.js +233 -22
  26. package/dist/packages/compiler/src/manifest.js.map +1 -1
  27. package/dist/packages/compiler/src/plans.d.ts +1 -0
  28. package/dist/packages/compiler/src/plans.d.ts.map +1 -1
  29. package/dist/packages/compiler/src/plans.js +6 -1
  30. package/dist/packages/compiler/src/plans.js.map +1 -1
  31. package/dist/packages/compiler/src/repeated-fragments.d.ts +20 -0
  32. package/dist/packages/compiler/src/repeated-fragments.d.ts.map +1 -0
  33. package/dist/packages/compiler/src/repeated-fragments.js +108 -0
  34. package/dist/packages/compiler/src/repeated-fragments.js.map +1 -0
  35. package/dist/packages/compiler/src/scanner.d.ts +17 -0
  36. package/dist/packages/compiler/src/scanner.d.ts.map +1 -1
  37. package/dist/packages/compiler/src/scanner.js +213 -1
  38. package/dist/packages/compiler/src/scanner.js.map +1 -1
  39. package/dist/packages/compiler/src/typescript.d.ts +16 -0
  40. package/dist/packages/compiler/src/typescript.d.ts.map +1 -0
  41. package/dist/packages/compiler/src/typescript.js +35 -0
  42. package/dist/packages/compiler/src/typescript.js.map +1 -0
  43. package/dist/packages/compiler/src/verification.d.ts +3 -0
  44. package/dist/packages/compiler/src/verification.d.ts.map +1 -1
  45. package/dist/packages/compiler/src/verification.js +15 -0
  46. package/dist/packages/compiler/src/verification.js.map +1 -1
  47. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import type { DialectPlugin, QuerySemantics, SchemaSnapshot, SourceRange, SqlDiagnostic } from "@typed-sql/core";
1
+ import { type DialectCapabilityState, type DialectPlugin, type QuerySemantics, type SchemaSnapshot, type SourceRange, type SqlDiagnostic } from "@typed-sql/core";
2
2
  export declare const QUERY_MANIFEST_FORMAT_VERSION: 1;
3
3
  export declare const QUERY_FINGERPRINT_ALGORITHM: "typed-sql-v1";
4
4
  export interface QueryManifestSourceInput {
@@ -52,6 +52,23 @@ export interface QueryManifestParameter {
52
52
  readonly nullable: boolean;
53
53
  readonly databaseType?: string;
54
54
  }
55
+ export interface QueryManifestRepeatedFragment {
56
+ readonly kind: "repeated-fragment";
57
+ readonly fingerprint: string;
58
+ readonly sourceSpan: SourceRange;
59
+ readonly element: {
60
+ readonly kind: "fragment";
61
+ readonly sqlSkeleton: string;
62
+ readonly fingerprint: string;
63
+ };
64
+ readonly separator: {
65
+ readonly kind: "static-fragment";
66
+ readonly text: string;
67
+ readonly fingerprint: string;
68
+ };
69
+ readonly minimumItems: 1;
70
+ readonly parameterPattern: readonly QueryManifestParameter[];
71
+ }
55
72
  export interface QueryManifestVariant {
56
73
  readonly fingerprint: string;
57
74
  readonly choices: Readonly<Record<string, boolean>>;
@@ -60,6 +77,11 @@ export interface QueryManifestVariant {
60
77
  readonly columns: readonly QueryManifestColumn[];
61
78
  readonly parameters: readonly QueryManifestParameter[];
62
79
  readonly semantics: QueryManifestSemantics;
80
+ /** Evidence for declared dialect capabilities this variant actually uses. */
81
+ readonly capabilityEvidence?: readonly QueryManifestCapabilityEvidence[];
82
+ }
83
+ export interface QueryManifestCapabilityEvidence extends DialectCapabilityState {
84
+ readonly capability: string;
63
85
  }
64
86
  interface QueryManifestEntryBase {
65
87
  readonly id: string;
@@ -72,8 +94,11 @@ export interface ResolvedQueryManifestEntry extends QueryManifestEntryBase {
72
94
  readonly rowType: string;
73
95
  readonly parameterType: string;
74
96
  readonly diagnostics: readonly QueryManifestDiagnostic[];
97
+ readonly repeatedFragments?: readonly QueryManifestRepeatedFragment[];
75
98
  readonly variants: readonly QueryManifestVariant[];
76
99
  readonly semantics: QueryManifestSemantics;
100
+ /** Evidence for declared dialect capabilities this query actually uses. */
101
+ readonly capabilityEvidence?: readonly QueryManifestCapabilityEvidence[];
77
102
  }
78
103
  export interface UnresolvedQueryManifestEntry extends QueryManifestEntryBase {
79
104
  readonly status: "unresolved";
@@ -88,7 +113,11 @@ export interface QueryManifest {
88
113
  readonly dialect: {
89
114
  readonly id: string;
90
115
  readonly grammarVersion: string;
116
+ /** Hash of canonical grammar/server capability evidence used for this analysis. */
117
+ readonly capabilityFingerprint?: string;
91
118
  };
119
+ /** Schema contract used to produce this manifest; absent only on historical artifacts. */
120
+ readonly schemaFormat?: 1 | 2;
92
121
  readonly schemaHash: string;
93
122
  readonly typePolicyHash: string;
94
123
  readonly projects: readonly string[];
@@ -188,6 +217,59 @@ export declare const QUERY_MANIFEST_JSON_SCHEMA: Readonly<{
188
217
  };
189
218
  };
190
219
  };
220
+ readonly capabilityStateEvidence: {
221
+ readonly type: "object";
222
+ readonly required: readonly ["kind", "key", "value"];
223
+ readonly properties: {
224
+ readonly kind: {
225
+ readonly enum: readonly ["server-version", "feature", "setting", "policy", "grammar"];
226
+ };
227
+ readonly key: {
228
+ readonly type: "string";
229
+ readonly minLength: 1;
230
+ };
231
+ readonly value: {
232
+ readonly type: "string";
233
+ readonly minLength: 1;
234
+ };
235
+ };
236
+ };
237
+ readonly capabilityEvidence: {
238
+ readonly type: "object";
239
+ readonly required: readonly ["capability", "level", "reason", "evidence"];
240
+ readonly properties: {
241
+ readonly capability: {
242
+ readonly type: "string";
243
+ readonly pattern: "^[a-z][A-Za-z0-9]*$";
244
+ };
245
+ readonly level: {
246
+ readonly enum: readonly ["exact", "conservative", "unsupported"];
247
+ };
248
+ readonly reason: {
249
+ readonly type: "string";
250
+ readonly minLength: 1;
251
+ };
252
+ readonly since: {
253
+ readonly type: "string";
254
+ readonly minLength: 1;
255
+ };
256
+ readonly until: {
257
+ readonly type: "string";
258
+ readonly minLength: 1;
259
+ };
260
+ readonly diagnostic: {
261
+ readonly type: "string";
262
+ readonly minLength: 1;
263
+ };
264
+ readonly evidence: {
265
+ readonly type: "array";
266
+ readonly minItems: 1;
267
+ readonly items: {
268
+ readonly $ref: "#/$defs/capabilityStateEvidence";
269
+ };
270
+ };
271
+ };
272
+ };
191
273
  readonly fact: {
192
274
  readonly type: "object";
193
275
  readonly required: readonly ["value", "evidence"];
@@ -318,6 +400,60 @@ export declare const QUERY_MANIFEST_JSON_SCHEMA: Readonly<{
318
400
  };
319
401
  };
320
402
  };
403
+ readonly repeatedFragment: {
404
+ readonly type: "object";
405
+ readonly required: readonly ["kind", "fingerprint", "sourceSpan", "element", "separator", "minimumItems", "parameterPattern"];
406
+ readonly properties: {
407
+ readonly kind: {
408
+ readonly const: "repeated-fragment";
409
+ };
410
+ readonly fingerprint: {
411
+ readonly $ref: "#/$defs/fingerprint";
412
+ };
413
+ readonly sourceSpan: {
414
+ readonly $ref: "#/$defs/range";
415
+ };
416
+ readonly element: {
417
+ readonly type: "object";
418
+ readonly required: readonly ["kind", "sqlSkeleton", "fingerprint"];
419
+ readonly properties: {
420
+ readonly kind: {
421
+ readonly const: "fragment";
422
+ };
423
+ readonly sqlSkeleton: {
424
+ readonly type: "string";
425
+ };
426
+ readonly fingerprint: {
427
+ readonly $ref: "#/$defs/fingerprint";
428
+ };
429
+ };
430
+ };
431
+ readonly separator: {
432
+ readonly type: "object";
433
+ readonly required: readonly ["kind", "text", "fingerprint"];
434
+ readonly properties: {
435
+ readonly kind: {
436
+ readonly const: "static-fragment";
437
+ };
438
+ readonly text: {
439
+ readonly type: "string";
440
+ };
441
+ readonly fingerprint: {
442
+ readonly $ref: "#/$defs/fingerprint";
443
+ };
444
+ };
445
+ };
446
+ readonly minimumItems: {
447
+ readonly const: 1;
448
+ };
449
+ readonly parameterPattern: {
450
+ readonly type: "array";
451
+ readonly items: {
452
+ readonly $ref: "#/$defs/parameter";
453
+ };
454
+ };
455
+ };
456
+ };
321
457
  readonly variant: {
322
458
  readonly type: "object";
323
459
  readonly required: readonly ["fingerprint", "choices", "rowType", "parameterType", "columns", "parameters", "semantics"];
@@ -355,6 +491,12 @@ export declare const QUERY_MANIFEST_JSON_SCHEMA: Readonly<{
355
491
  readonly semantics: {
356
492
  readonly $ref: "#/$defs/semantics";
357
493
  };
494
+ readonly capabilityEvidence: {
495
+ readonly type: "array";
496
+ readonly items: {
497
+ readonly $ref: "#/$defs/capabilityEvidence";
498
+ };
499
+ };
358
500
  };
359
501
  };
360
502
  readonly location: {
@@ -400,6 +542,13 @@ export declare const QUERY_MANIFEST_JSON_SCHEMA: Readonly<{
400
542
  readonly $ref: "#/$defs/diagnostic";
401
543
  };
402
544
  };
545
+ readonly repeatedFragments: {
546
+ readonly type: "array";
547
+ readonly minItems: 1;
548
+ readonly items: {
549
+ readonly $ref: "#/$defs/repeatedFragment";
550
+ };
551
+ };
403
552
  readonly variants: {
404
553
  readonly type: "array";
405
554
  readonly minItems: 1;
@@ -410,6 +559,12 @@ export declare const QUERY_MANIFEST_JSON_SCHEMA: Readonly<{
410
559
  readonly semantics: {
411
560
  readonly $ref: "#/$defs/semantics";
412
561
  };
562
+ readonly capabilityEvidence: {
563
+ readonly type: "array";
564
+ readonly items: {
565
+ readonly $ref: "#/$defs/capabilityEvidence";
566
+ };
567
+ };
413
568
  };
414
569
  };
415
570
  readonly unresolvedQuery: {
@@ -460,8 +615,14 @@ export declare const QUERY_MANIFEST_JSON_SCHEMA: Readonly<{
460
615
  readonly grammarVersion: {
461
616
  readonly type: "string";
462
617
  };
618
+ readonly capabilityFingerprint: {
619
+ readonly $ref: "#/$defs/hash";
620
+ };
463
621
  };
464
622
  };
623
+ readonly schemaFormat: {
624
+ readonly enum: readonly [1, 2];
625
+ };
465
626
  readonly schemaHash: {
466
627
  readonly type: "string";
467
628
  };
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { isAbsolute, relative, resolve, sep } from "node:path";
3
+ import { ARTIFACT_COMPATIBILITY_IDENTITY_FORMAT_VERSION, assessArtifactCompatibility, CORE_ARTIFACT_COMPATIBILITY_VERSION, resolveDialectCapabilityStates, } from "@typed-sql/core";
3
4
  import { calculateSchemaHash, calculateTypePolicyHash } from "@typed-sql/schema";
4
5
  import { compileSource } from "./compiler.js";
5
6
  import { extractDynamicQueries, extractStaticQueries } from "./scanner.js";
@@ -64,13 +65,21 @@ function manifestSemantics(semantics) {
64
65
  capabilities: semantics.capabilities,
65
66
  };
66
67
  }
68
+ function manifestCapabilityEvidence(semantics, states) {
69
+ return [...new Set(semantics.capabilities)]
70
+ .sort(compareText)
71
+ .flatMap((capability) => {
72
+ const state = states[capability];
73
+ return state === undefined ? [] : [{ capability, ...state }];
74
+ });
75
+ }
67
76
  function entryId(dialect, location, identity) {
68
77
  return `sha256:${sha256(`${dialect}\0${location.file}\0${location.range.start}\0${identity}`)}`;
69
78
  }
70
79
  function inRange(diagnostic, range) {
71
80
  return diagnostic.range.start >= range.start && diagnostic.range.start < range.end;
72
81
  }
73
- function sourceEntries(file, source, options) {
82
+ function sourceEntries(file, source, options, capabilityStates) {
74
83
  const compilation = compileSource({
75
84
  source,
76
85
  dialect: options.dialect,
@@ -106,16 +115,34 @@ function sourceEntries(file, source, options) {
106
115
  diagnostics: compilation.diagnostics
107
116
  .filter((diagnostic) => inRange(diagnostic, query.range))
108
117
  .map(manifestDiagnostic),
109
- variants: compiled.variants.map((variant) => ({
110
- fingerprint: variant.fingerprint,
111
- choices: choiceDescriptions(variant.choices),
112
- rowType: variant.rowType,
113
- parameterType: variant.parameterType,
114
- columns: variant.columns.map(columnDescription),
115
- parameters: variant.parameters.map(parameterDescription),
116
- semantics: manifestSemantics(variant.semantics),
117
- })),
118
+ ...(compiled.repeatedFragments === undefined
119
+ ? {}
120
+ : {
121
+ repeatedFragments: compiled.repeatedFragments.map((artifact) => ({
122
+ ...artifact,
123
+ sourceSpan: { ...artifact.sourceSpan },
124
+ element: { ...artifact.element },
125
+ separator: { ...artifact.separator },
126
+ parameterPattern: artifact.parameterPattern.map(parameterDescription),
127
+ })),
128
+ }),
129
+ variants: compiled.variants.map((variant) => {
130
+ const capabilityEvidence = manifestCapabilityEvidence(variant.semantics, capabilityStates);
131
+ return {
132
+ fingerprint: variant.fingerprint,
133
+ choices: choiceDescriptions(variant.choices),
134
+ rowType: variant.rowType,
135
+ parameterType: variant.parameterType,
136
+ columns: variant.columns.map(columnDescription),
137
+ parameters: variant.parameters.map(parameterDescription),
138
+ semantics: manifestSemantics(variant.semantics),
139
+ ...(capabilityEvidence.length === 0 ? {} : { capabilityEvidence }),
140
+ };
141
+ }),
118
142
  semantics: manifestSemantics(compiled.semantics),
143
+ ...(manifestCapabilityEvidence(compiled.semantics, capabilityStates).length === 0
144
+ ? {}
145
+ : { capabilityEvidence: manifestCapabilityEvidence(compiled.semantics, capabilityStates) }),
119
146
  };
120
147
  });
121
148
  for (const dynamic of extractDynamicQueries(source, [options.dialect.sqlModule])) {
@@ -136,14 +163,38 @@ function sourceEntries(file, source, options) {
136
163
  }
137
164
  return entries.sort((left, right) => left.source.range.start - right.source.range.start);
138
165
  }
139
- function compatiblePrevious(previous, compilerVersion, dialect, schemaHash, typePolicyHash) {
140
- return (previous?.formatVersion === QUERY_MANIFEST_FORMAT_VERSION &&
141
- previous.compilerVersion === compilerVersion &&
142
- previous.fingerprintAlgorithm === QUERY_FINGERPRINT_ALGORITHM &&
143
- previous.dialect.id === dialect.id &&
144
- previous.dialect.grammarVersion === dialect.grammarVersion &&
145
- previous.schemaHash === schemaHash &&
146
- previous.typePolicyHash === typePolicyHash);
166
+ function compatiblePrevious(previous, compilerVersion, dialect, capabilityFingerprint, schemaFormat, schemaHash, typePolicyHash) {
167
+ if (previous?.schemaFormat === undefined || previous.dialect.capabilityFingerprint === undefined)
168
+ return false;
169
+ const identity = (manifest) => ({
170
+ formatVersion: ARTIFACT_COMPATIBILITY_IDENTITY_FORMAT_VERSION,
171
+ artifact: {
172
+ kind: "query-manifest",
173
+ version: String(manifest.formatVersion),
174
+ algorithm: manifest.fingerprintAlgorithm,
175
+ },
176
+ producer: { core: CORE_ARTIFACT_COMPATIBILITY_VERSION, compiler: manifest.compilerVersion },
177
+ grammar: {
178
+ id: manifest.dialect.id,
179
+ version: manifest.dialect.grammarVersion,
180
+ capabilityFingerprint: manifest.dialect.capabilityFingerprint,
181
+ },
182
+ schema: { formatVersion: manifest.schemaFormat, hash: manifest.schemaHash },
183
+ typePolicyHash: manifest.typePolicyHash,
184
+ });
185
+ return (assessArtifactCompatibility(identity({
186
+ formatVersion: QUERY_MANIFEST_FORMAT_VERSION,
187
+ compilerVersion,
188
+ fingerprintAlgorithm: QUERY_FINGERPRINT_ALGORITHM,
189
+ dialect: { id: dialect.id, grammarVersion: dialect.grammarVersion, capabilityFingerprint },
190
+ schemaFormat,
191
+ schemaHash,
192
+ typePolicyHash,
193
+ }), identity({
194
+ ...previous,
195
+ schemaFormat: previous.schemaFormat,
196
+ dialect: { ...previous.dialect, capabilityFingerprint: previous.dialect.capabilityFingerprint },
197
+ })).outcome === "compatible");
147
198
  }
148
199
  export function buildQueryManifest(options) {
149
200
  if (options.compilerVersion.length === 0)
@@ -153,13 +204,15 @@ export function buildQueryManifest(options) {
153
204
  }
154
205
  const schemaHash = calculateSchemaHash(options.schema);
155
206
  const typePolicyHash = calculateTypePolicyHash(options.typePolicy ?? {});
207
+ const capabilityStates = resolveDialectCapabilityStates(options.dialect, options.schema, options.typePolicy);
208
+ const capabilityFingerprint = sha256(JSON.stringify(capabilityStates));
156
209
  const inputs = options.sources
157
210
  .map((input) => ({ input, file: portableRelative(options.rootDir, input.file), hash: sha256(input.source) }))
158
211
  .sort((left, right) => compareText(left.file, right.file));
159
212
  const duplicate = inputs.find((input, index) => input.file === inputs[index - 1]?.file);
160
213
  if (duplicate !== undefined)
161
214
  throw new TypeError(`Duplicate manifest source ${duplicate.file}`);
162
- const mayReuse = compatiblePrevious(options.previous, options.compilerVersion, options.dialect, schemaHash, typePolicyHash);
215
+ const mayReuse = compatiblePrevious(options.previous, options.compilerVersion, options.dialect, capabilityFingerprint, options.schema.formatVersion, schemaHash, typePolicyHash);
163
216
  const previousSources = new Map(options.previous?.sources.map((source) => [source.file, source.hash]) ?? []);
164
217
  const previousEntries = new Map();
165
218
  for (const entry of options.previous?.queries ?? []) {
@@ -174,7 +227,7 @@ export function buildQueryManifest(options) {
174
227
  return previousEntries.get(file) ?? [];
175
228
  }
176
229
  analyzedFiles += 1;
177
- return sourceEntries(file, input.source, options);
230
+ return sourceEntries(file, input.source, options, capabilityStates);
178
231
  });
179
232
  queries.sort((left, right) => compareText(left.source.file, right.source.file) || left.source.range.start - right.source.range.start);
180
233
  const projects = [
@@ -184,7 +237,12 @@ export function buildQueryManifest(options) {
184
237
  formatVersion: QUERY_MANIFEST_FORMAT_VERSION,
185
238
  compilerVersion: options.compilerVersion,
186
239
  fingerprintAlgorithm: QUERY_FINGERPRINT_ALGORITHM,
187
- dialect: { id: options.dialect.id, grammarVersion: options.dialect.grammarVersion },
240
+ dialect: {
241
+ id: options.dialect.id,
242
+ grammarVersion: options.dialect.grammarVersion,
243
+ capabilityFingerprint,
244
+ },
245
+ schemaFormat: options.schema.formatVersion,
188
246
  schemaHash,
189
247
  typePolicyHash,
190
248
  projects,
@@ -298,6 +356,43 @@ function assertSemantics(value, description) {
298
356
  throw new TypeError(`${description} capabilities must contain strings`);
299
357
  }
300
358
  }
359
+ function assertCapabilityEvidence(value, description) {
360
+ if (!Array.isArray(value))
361
+ throw new TypeError(`${description} must be an array`);
362
+ const capabilities = [];
363
+ for (const item of value) {
364
+ if (!record(item))
365
+ throw new TypeError(`${description} entries must be objects`);
366
+ assertString(item.capability, `${description} capability`);
367
+ assertString(item.reason, `${description} reason`);
368
+ if (!/^[a-z][A-Za-z0-9]*$/u.test(item.capability) || item.reason.length === 0) {
369
+ throw new TypeError(`${description} contains an invalid capability or reason`);
370
+ }
371
+ if (!(item.level === "exact" || item.level === "conservative" || item.level === "unsupported")) {
372
+ throw new TypeError(`${description} contains an invalid capability level`);
373
+ }
374
+ for (const property of ["since", "until", "diagnostic"]) {
375
+ if (item[property] !== undefined)
376
+ assertString(item[property], `${description} ${property}`);
377
+ }
378
+ if (!Array.isArray(item.evidence) || item.evidence.length === 0) {
379
+ throw new TypeError(`${description} entries require evidence`);
380
+ }
381
+ for (const evidence of item.evidence) {
382
+ if (!record(evidence))
383
+ throw new TypeError(`${description} evidence must contain objects`);
384
+ if (!["server-version", "feature", "setting", "policy", "grammar"].includes(evidence.kind)) {
385
+ throw new TypeError(`${description} contains an invalid evidence kind`);
386
+ }
387
+ assertString(evidence.key, `${description} evidence key`);
388
+ assertString(evidence.value, `${description} evidence value`);
389
+ }
390
+ capabilities.push(item.capability);
391
+ }
392
+ if (capabilities.some((capability, index) => capability !== [...new Set(capabilities)].sort(compareText)[index])) {
393
+ throw new TypeError(`${description} must be sorted and unique`);
394
+ }
395
+ }
301
396
  function assertVariant(value, description) {
302
397
  if (!record(value))
303
398
  throw new TypeError(`${description} must be an object`);
@@ -336,6 +431,49 @@ function assertVariant(value, description) {
336
431
  }
337
432
  }
338
433
  assertSemantics(value.semantics, `${description} semantics`);
434
+ if (value.capabilityEvidence !== undefined) {
435
+ assertCapabilityEvidence(value.capabilityEvidence, `${description} capabilityEvidence`);
436
+ }
437
+ }
438
+ function assertRepeatedFragments(value, description) {
439
+ if (!Array.isArray(value) || value.length === 0)
440
+ throw new TypeError(`${description} must be a non-empty array`);
441
+ for (const artifact of value) {
442
+ if (!record(artifact) || artifact.kind !== "repeated-fragment" || artifact.minimumItems !== 1) {
443
+ throw new TypeError(`${description} entries must be repeated-fragment artifacts with minimumItems 1`);
444
+ }
445
+ assertString(artifact.fingerprint, `${description} fingerprint`);
446
+ if (!/^sha256:[a-f\d]{64}$/u.test(artifact.fingerprint))
447
+ throw new TypeError(`${description} fingerprint is invalid`);
448
+ assertRange(artifact.sourceSpan, `${description} sourceSpan`);
449
+ if (!record(artifact.element) || artifact.element.kind !== "fragment") {
450
+ throw new TypeError(`${description} element is invalid`);
451
+ }
452
+ assertString(artifact.element.sqlSkeleton, `${description} element sqlSkeleton`);
453
+ assertString(artifact.element.fingerprint, `${description} element fingerprint`);
454
+ if (!/^sha256:[a-f\d]{64}$/u.test(artifact.element.fingerprint)) {
455
+ throw new TypeError(`${description} element fingerprint is invalid`);
456
+ }
457
+ if (!record(artifact.separator) || artifact.separator.kind !== "static-fragment") {
458
+ throw new TypeError(`${description} separator is invalid`);
459
+ }
460
+ assertString(artifact.separator.text, `${description} separator text`);
461
+ assertString(artifact.separator.fingerprint, `${description} separator fingerprint`);
462
+ if (!/^sha256:[a-f\d]{64}$/u.test(artifact.separator.fingerprint)) {
463
+ throw new TypeError(`${description} separator fingerprint is invalid`);
464
+ }
465
+ if (!Array.isArray(artifact.parameterPattern))
466
+ throw new TypeError(`${description} parameterPattern must be an array`);
467
+ for (const [index, parameter] of artifact.parameterPattern.entries()) {
468
+ if (!record(parameter) || parameter.index !== index + 1 || typeof parameter.nullable !== "boolean") {
469
+ throw new TypeError(`${description} parameterPattern must use contiguous one-based parameters`);
470
+ }
471
+ assertString(parameter.tsType, `${description} parameter tsType`);
472
+ if (parameter.databaseType !== undefined) {
473
+ assertString(parameter.databaseType, `${description} parameter databaseType`);
474
+ }
475
+ }
476
+ }
339
477
  }
340
478
  export function parseQueryManifest(value) {
341
479
  if (!record(value))
@@ -356,6 +494,14 @@ export function parseQueryManifest(value) {
356
494
  value.dialect.grammarVersion.length === 0) {
357
495
  throw new TypeError("Query manifest dialect must contain id and grammarVersion");
358
496
  }
497
+ if (value.dialect.capabilityFingerprint !== undefined &&
498
+ (typeof value.dialect.capabilityFingerprint !== "string" ||
499
+ !/^[a-f\d]{64}$/u.test(value.dialect.capabilityFingerprint))) {
500
+ throw new TypeError("Query manifest dialect capabilityFingerprint must be a SHA-256 hash");
501
+ }
502
+ if (value.schemaFormat !== undefined && value.schemaFormat !== 1 && value.schemaFormat !== 2) {
503
+ throw new TypeError("Query manifest schemaFormat must be 1 or 2");
504
+ }
359
505
  if (typeof value.schemaHash !== "string" ||
360
506
  !/^[a-f\d]{64}$/u.test(value.schemaHash) ||
361
507
  typeof value.typePolicyHash !== "string" ||
@@ -400,10 +546,16 @@ export function parseQueryManifest(value) {
400
546
  throw new TypeError("Resolved query manifest entries are incomplete");
401
547
  }
402
548
  assertDiagnostics(query.diagnostics, "Resolved query diagnostics");
549
+ if (query.repeatedFragments !== undefined) {
550
+ assertRepeatedFragments(query.repeatedFragments, "Resolved query repeatedFragments");
551
+ }
403
552
  for (const [index, variant] of query.variants.entries()) {
404
553
  assertVariant(variant, `Query manifest variant ${index}`);
405
554
  }
406
555
  assertSemantics(query.semantics, "Resolved query semantics");
556
+ if (query.capabilityEvidence !== undefined) {
557
+ assertCapabilityEvidence(query.capabilityEvidence, "Resolved query capabilityEvidence");
558
+ }
407
559
  }
408
560
  else if (query.status === "unresolved") {
409
561
  if (query.reason !== "diagnostic" && query.reason !== "dynamic") {
@@ -455,6 +607,28 @@ export const QUERY_MANIFEST_JSON_SCHEMA = Object.freeze({
455
607
  range: { $ref: "#/$defs/range" },
456
608
  },
457
609
  },
610
+ capabilityStateEvidence: {
611
+ type: "object",
612
+ required: ["kind", "key", "value"],
613
+ properties: {
614
+ kind: { enum: ["server-version", "feature", "setting", "policy", "grammar"] },
615
+ key: { type: "string", minLength: 1 },
616
+ value: { type: "string", minLength: 1 },
617
+ },
618
+ },
619
+ capabilityEvidence: {
620
+ type: "object",
621
+ required: ["capability", "level", "reason", "evidence"],
622
+ properties: {
623
+ capability: { type: "string", pattern: "^[a-z][A-Za-z0-9]*$" },
624
+ level: { enum: ["exact", "conservative", "unsupported"] },
625
+ reason: { type: "string", minLength: 1 },
626
+ since: { type: "string", minLength: 1 },
627
+ until: { type: "string", minLength: 1 },
628
+ diagnostic: { type: "string", minLength: 1 },
629
+ evidence: { type: "array", minItems: 1, items: { $ref: "#/$defs/capabilityStateEvidence" } },
630
+ },
631
+ },
458
632
  fact: {
459
633
  type: "object",
460
634
  required: ["value", "evidence"],
@@ -527,6 +701,35 @@ export const QUERY_MANIFEST_JSON_SCHEMA = Object.freeze({
527
701
  databaseType: { type: "string" },
528
702
  },
529
703
  },
704
+ repeatedFragment: {
705
+ type: "object",
706
+ required: ["kind", "fingerprint", "sourceSpan", "element", "separator", "minimumItems", "parameterPattern"],
707
+ properties: {
708
+ kind: { const: "repeated-fragment" },
709
+ fingerprint: { $ref: "#/$defs/fingerprint" },
710
+ sourceSpan: { $ref: "#/$defs/range" },
711
+ element: {
712
+ type: "object",
713
+ required: ["kind", "sqlSkeleton", "fingerprint"],
714
+ properties: {
715
+ kind: { const: "fragment" },
716
+ sqlSkeleton: { type: "string" },
717
+ fingerprint: { $ref: "#/$defs/fingerprint" },
718
+ },
719
+ },
720
+ separator: {
721
+ type: "object",
722
+ required: ["kind", "text", "fingerprint"],
723
+ properties: {
724
+ kind: { const: "static-fragment" },
725
+ text: { type: "string" },
726
+ fingerprint: { $ref: "#/$defs/fingerprint" },
727
+ },
728
+ },
729
+ minimumItems: { const: 1 },
730
+ parameterPattern: { type: "array", items: { $ref: "#/$defs/parameter" } },
731
+ },
732
+ },
530
733
  variant: {
531
734
  type: "object",
532
735
  required: ["fingerprint", "choices", "rowType", "parameterType", "columns", "parameters", "semantics"],
@@ -542,6 +745,7 @@ export const QUERY_MANIFEST_JSON_SCHEMA = Object.freeze({
542
745
  columns: { type: "array", items: { $ref: "#/$defs/column" } },
543
746
  parameters: { type: "array", items: { $ref: "#/$defs/parameter" } },
544
747
  semantics: { $ref: "#/$defs/semantics" },
748
+ capabilityEvidence: { type: "array", items: { $ref: "#/$defs/capabilityEvidence" } },
545
749
  },
546
750
  },
547
751
  location: {
@@ -572,8 +776,10 @@ export const QUERY_MANIFEST_JSON_SCHEMA = Object.freeze({
572
776
  rowType: { type: "string" },
573
777
  parameterType: { type: "string" },
574
778
  diagnostics: { type: "array", items: { $ref: "#/$defs/diagnostic" } },
779
+ repeatedFragments: { type: "array", minItems: 1, items: { $ref: "#/$defs/repeatedFragment" } },
575
780
  variants: { type: "array", minItems: 1, items: { $ref: "#/$defs/variant" } },
576
781
  semantics: { $ref: "#/$defs/semantics" },
782
+ capabilityEvidence: { type: "array", items: { $ref: "#/$defs/capabilityEvidence" } },
577
783
  },
578
784
  },
579
785
  unresolvedQuery: {
@@ -606,8 +812,13 @@ export const QUERY_MANIFEST_JSON_SCHEMA = Object.freeze({
606
812
  dialect: {
607
813
  type: "object",
608
814
  required: ["id", "grammarVersion"],
609
- properties: { id: { type: "string" }, grammarVersion: { type: "string" } },
815
+ properties: {
816
+ id: { type: "string" },
817
+ grammarVersion: { type: "string" },
818
+ capabilityFingerprint: { $ref: "#/$defs/hash" },
819
+ },
610
820
  },
821
+ schemaFormat: { enum: [1, 2] },
611
822
  schemaHash: { type: "string" },
612
823
  typePolicyHash: { type: "string" },
613
824
  projects: { type: "array", items: { $ref: "#/$defs/relativePath" } },