@typed-sql/conformance 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 (59) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +30 -20
  3. package/dist/packages/conformance/src/assertions.d.ts +7 -1
  4. package/dist/packages/conformance/src/assertions.d.ts.map +1 -1
  5. package/dist/packages/conformance/src/assertions.js +89 -1
  6. package/dist/packages/conformance/src/assertions.js.map +1 -1
  7. package/dist/packages/conformance/src/failure-injection.d.ts +24 -0
  8. package/dist/packages/conformance/src/failure-injection.d.ts.map +1 -0
  9. package/dist/packages/conformance/src/failure-injection.js +52 -0
  10. package/dist/packages/conformance/src/failure-injection.js.map +1 -0
  11. package/dist/packages/conformance/src/feature-ledger-markdown.d.ts +4 -0
  12. package/dist/packages/conformance/src/feature-ledger-markdown.d.ts.map +1 -0
  13. package/dist/packages/conformance/src/feature-ledger-markdown.js +58 -0
  14. package/dist/packages/conformance/src/feature-ledger-markdown.js.map +1 -0
  15. package/dist/packages/conformance/src/feature-ledger.d.ts +62 -0
  16. package/dist/packages/conformance/src/feature-ledger.d.ts.map +1 -0
  17. package/dist/packages/conformance/src/feature-ledger.js +347 -0
  18. package/dist/packages/conformance/src/feature-ledger.js.map +1 -0
  19. package/dist/packages/conformance/src/index.d.ts +6 -2
  20. package/dist/packages/conformance/src/index.d.ts.map +1 -1
  21. package/dist/packages/conformance/src/index.js +3 -1
  22. package/dist/packages/conformance/src/index.js.map +1 -1
  23. package/dist/packages/conformance/src/types.d.ts +60 -1
  24. package/dist/packages/conformance/src/types.d.ts.map +1 -1
  25. package/dist/packages/conformance/src/types.js +1 -0
  26. package/dist/packages/conformance/src/types.js.map +1 -1
  27. package/dist/packages/conformance/src/v2/contracts.d.ts +7 -0
  28. package/dist/packages/conformance/src/v2/contracts.d.ts.map +1 -0
  29. package/dist/packages/conformance/src/v2/contracts.js +97 -0
  30. package/dist/packages/conformance/src/v2/contracts.js.map +1 -0
  31. package/dist/packages/conformance/src/v2/fixtures.d.ts +4 -0
  32. package/dist/packages/conformance/src/v2/fixtures.d.ts.map +1 -0
  33. package/dist/packages/conformance/src/v2/fixtures.js +58 -0
  34. package/dist/packages/conformance/src/v2/fixtures.js.map +1 -0
  35. package/dist/packages/conformance/src/v2/index.d.ts +9 -0
  36. package/dist/packages/conformance/src/v2/index.d.ts.map +1 -0
  37. package/dist/packages/conformance/src/v2/index.js +8 -0
  38. package/dist/packages/conformance/src/v2/index.js.map +1 -0
  39. package/dist/packages/conformance/src/v2/legacy.d.ts +6 -0
  40. package/dist/packages/conformance/src/v2/legacy.d.ts.map +1 -0
  41. package/dist/packages/conformance/src/v2/legacy.js +75 -0
  42. package/dist/packages/conformance/src/v2/legacy.js.map +1 -0
  43. package/dist/packages/conformance/src/v2/reporters.d.ts +4 -0
  44. package/dist/packages/conformance/src/v2/reporters.d.ts.map +1 -0
  45. package/dist/packages/conformance/src/v2/reporters.js +17 -0
  46. package/dist/packages/conformance/src/v2/reporters.js.map +1 -0
  47. package/dist/packages/conformance/src/v2/reproduction.d.ts +4 -0
  48. package/dist/packages/conformance/src/v2/reproduction.d.ts.map +1 -0
  49. package/dist/packages/conformance/src/v2/reproduction.js +35 -0
  50. package/dist/packages/conformance/src/v2/reproduction.js.map +1 -0
  51. package/dist/packages/conformance/src/v2/runner.d.ts +9 -0
  52. package/dist/packages/conformance/src/v2/runner.d.ts.map +1 -0
  53. package/dist/packages/conformance/src/v2/runner.js +369 -0
  54. package/dist/packages/conformance/src/v2/runner.js.map +1 -0
  55. package/dist/packages/conformance/src/v2/types.d.ts +204 -0
  56. package/dist/packages/conformance/src/v2/types.d.ts.map +1 -0
  57. package/dist/packages/conformance/src/v2/types.js +3 -0
  58. package/dist/packages/conformance/src/v2/types.js.map +1 -0
  59. package/package.json +5 -4
@@ -0,0 +1,97 @@
1
+ import { CONFORMANCE_VERSION, } from "./types.js";
2
+ const probeIdPattern = /^[a-z][a-z0-9]*(?:[.-][a-z][a-z0-9]*)+$/u;
3
+ const featureIdPattern = /^[a-z][a-z0-9]*(?:[.-][a-z][a-z0-9]*)+$/u;
4
+ const repositoryPathPattern = /^(?!\/)(?!.*(?:^|\/)\.\.?\/)[a-zA-Z0-9_.@/-]+$/u;
5
+ function freeze(value, seen = new Set()) {
6
+ if (typeof value !== "object" || value === null || seen.has(value))
7
+ return value;
8
+ seen.add(value);
9
+ for (const child of Object.values(value))
10
+ freeze(child, seen);
11
+ return Object.freeze(value);
12
+ }
13
+ function validateSelector(selector, label) {
14
+ if (selector.databaseVersion !== undefined &&
15
+ (selector.minimumDatabaseVersion !== undefined || selector.maximumDatabaseVersion !== undefined)) {
16
+ throw new TypeError(`${label} cannot combine an exact database version with a version range`);
17
+ }
18
+ if (selector.minimumDatabaseVersion !== undefined &&
19
+ selector.maximumDatabaseVersion !== undefined &&
20
+ selector.minimumDatabaseVersion.localeCompare(selector.maximumDatabaseVersion, undefined, { numeric: true }) > 0) {
21
+ throw new TypeError(`${label} has an inverted database version range`);
22
+ }
23
+ }
24
+ export function defineConformanceProbe(probe) {
25
+ if (probe.version !== CONFORMANCE_VERSION)
26
+ throw new TypeError("Unsupported conformance probe version");
27
+ if (!probeIdPattern.test(probe.id))
28
+ throw new TypeError(`Invalid conformance probe id ${JSON.stringify(probe.id)}`);
29
+ if (!featureIdPattern.test(probe.featureId))
30
+ throw new TypeError(`Invalid feature id ${JSON.stringify(probe.featureId)}`);
31
+ if (probe.grammar.length === 0)
32
+ throw new TypeError("Conformance probe grammar must not be empty");
33
+ if (probe.source.length === 0)
34
+ throw new TypeError("Conformance probe SQL must not be empty");
35
+ if (!repositoryPathPattern.test(probe.schemaFixture))
36
+ throw new TypeError("schemaFixture must be a repository path");
37
+ if (probe.targets.length === 0 || probe.expected.length === 0) {
38
+ throw new TypeError("Conformance probes require targets and expected outcomes");
39
+ }
40
+ for (const [index, target] of probe.targets.entries()) {
41
+ if (target.grammar !== probe.grammar)
42
+ throw new TypeError(`${probe.id}.targets[${index}] uses another grammar`);
43
+ }
44
+ for (const [index, outcome] of probe.expected.entries())
45
+ validateSelector(outcome.target, `${probe.id}.expected[${index}]`);
46
+ if (probe.quarantine !== undefined && Date.parse(probe.quarantine.expires) <= Date.now()) {
47
+ throw new TypeError(`${probe.id} quarantine expired`);
48
+ }
49
+ return freeze({ ...probe });
50
+ }
51
+ export function defineConformanceSuite(suite, ledger) {
52
+ if (suite.version !== CONFORMANCE_VERSION)
53
+ throw new TypeError("Unsupported conformance suite version");
54
+ if (suite.name.length === 0)
55
+ throw new TypeError("Conformance suite name must not be empty");
56
+ const probes = suite.probes.map(defineConformanceProbe);
57
+ if (new Set(probes.map(({ id }) => id)).size !== probes.length)
58
+ throw new TypeError("Conformance probe IDs must be unique");
59
+ if (ledger !== undefined) {
60
+ const features = new Set(ledger.entries.map(({ id }) => id));
61
+ for (const probe of probes) {
62
+ if (!features.has(probe.featureId))
63
+ throw new TypeError(`${probe.id} references unknown feature ${probe.featureId}`);
64
+ }
65
+ }
66
+ return freeze({ ...suite, probes });
67
+ }
68
+ function capabilitiesMatch(required, actual) {
69
+ if (required === undefined)
70
+ return true;
71
+ return Object.entries(required).every(([name, value]) => actual?.[name] === value);
72
+ }
73
+ export function targetMatches(selector, target) {
74
+ if (selector.grammarVersion !== undefined && selector.grammarVersion !== target.grammarVersion)
75
+ return false;
76
+ if (selector.databaseVersion !== undefined && selector.databaseVersion !== target.databaseVersion)
77
+ return false;
78
+ if (selector.minimumDatabaseVersion !== undefined &&
79
+ (target.databaseVersion === undefined ||
80
+ target.databaseVersion.localeCompare(selector.minimumDatabaseVersion, undefined, { numeric: true }) < 0)) {
81
+ return false;
82
+ }
83
+ if (selector.maximumDatabaseVersion !== undefined &&
84
+ (target.databaseVersion === undefined ||
85
+ target.databaseVersion.localeCompare(selector.maximumDatabaseVersion, undefined, { numeric: true }) > 0)) {
86
+ return false;
87
+ }
88
+ return capabilitiesMatch(selector.capabilities, target.capabilities);
89
+ }
90
+ export function selectExpectedOutcome(probe, target) {
91
+ const matches = probe.expected.filter(({ target: selector }) => targetMatches(selector, target));
92
+ if (matches.length !== 1) {
93
+ throw new TypeError(`${probe.id} expected exactly one outcome for ${target.grammar}@${target.databaseVersion ?? "static"}`);
94
+ }
95
+ return matches[0];
96
+ }
97
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../../../src/v2/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type ConformanceProbe, type ConformanceSuite } from "./types.js";
2
+ export declare function discoverConformanceFixtures(root: string): Promise<ConformanceSuite>;
3
+ export declare function minimizeConformanceSource(probe: ConformanceProbe, preservesFailure: (candidate: ConformanceProbe) => boolean | Promise<boolean>): Promise<ConformanceProbe>;
4
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../../../src/v2/fixtures.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAa/F,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiBzF;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,gBAAgB,EACvB,gBAAgB,EAAE,CAAC,SAAS,EAAE,gBAAgB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAC5E,OAAO,CAAC,gBAAgB,CAAC,CAkB3B"}
@@ -0,0 +1,58 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { extname, join, relative } from "node:path";
3
+ import { defineConformanceProbe, defineConformanceSuite } from "./contracts.js";
4
+ import { CONFORMANCE_VERSION } from "./types.js";
5
+ async function fixturePaths(root, directory = root) {
6
+ const entries = await readdir(directory, { withFileTypes: true });
7
+ const paths = [];
8
+ for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
9
+ const path = join(directory, entry.name);
10
+ if (entry.isDirectory())
11
+ paths.push(...(await fixturePaths(root, path)));
12
+ else if (entry.isFile() && extname(entry.name) === ".json" && entry.name.endsWith(".probe.json"))
13
+ paths.push(path);
14
+ }
15
+ return paths;
16
+ }
17
+ export async function discoverConformanceFixtures(root) {
18
+ const paths = await fixturePaths(root);
19
+ const probes = [];
20
+ for (const path of paths) {
21
+ let value;
22
+ try {
23
+ value = JSON.parse(await readFile(path, "utf8"));
24
+ }
25
+ catch (error) {
26
+ throw new TypeError(`Invalid conformance fixture ${relative(root, path)}: ${String(error)}`);
27
+ }
28
+ try {
29
+ probes.push(defineConformanceProbe(value));
30
+ }
31
+ catch (error) {
32
+ throw new TypeError(`Invalid conformance fixture ${relative(root, path)}: ${String(error)}`);
33
+ }
34
+ }
35
+ return defineConformanceSuite({ version: CONFORMANCE_VERSION, name: root, probes });
36
+ }
37
+ export async function minimizeConformanceSource(probe, preservesFailure) {
38
+ let tokens = probe.source.match(/\S+\s*/gu) ?? [];
39
+ let width = Math.max(1, Math.floor(tokens.length / 2));
40
+ while (width >= 1) {
41
+ let reduced = false;
42
+ for (let start = 0; start + width <= tokens.length; start += 1) {
43
+ const source = [...tokens.slice(0, start), ...tokens.slice(start + width)].join("").trim();
44
+ if (source.length === 0)
45
+ continue;
46
+ const candidate = Object.freeze({ ...probe, source });
47
+ if (await preservesFailure(candidate)) {
48
+ tokens = candidate.source.match(/\S+\s*/gu) ?? [];
49
+ reduced = true;
50
+ break;
51
+ }
52
+ }
53
+ if (!reduced)
54
+ width = Math.floor(width / 2);
55
+ }
56
+ return defineConformanceProbe({ ...probe, source: tokens.join("").trim() });
57
+ }
58
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../../../src/v2/fixtures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { defineConformanceProbe, defineConformanceSuite, selectExpectedOutcome, targetMatches, } from "./contracts.js";
2
+ export { discoverConformanceFixtures, minimizeConformanceSource, } from "./fixtures.js";
3
+ export { adaptGrammarConformanceV1, runAdaptedGrammarConformanceV1, } from "./legacy.js";
4
+ export { formatConformanceReport, serializeConformanceReport } from "./reporters.js";
5
+ export { createConformanceReproductionBundle, serializeConformanceReproductionBundle, } from "./reproduction.js";
6
+ export { assertExactConformance, CONFORMANCE_LAYERS, createConformanceReport, runLiveConformanceProbe, runStaticConformanceProbe, } from "./runner.js";
7
+ export type { ConformanceDifference, ConformanceEnvironment, ConformanceLayer, ConformanceLayerResult, ConformanceLayerStatus, ConformanceLiveAdapter, ConformanceLiveRequest, ConformanceNativeField, ConformanceParserResult, ConformancePreparedEvidence, ConformanceProbe, ConformanceProbeResult, ConformanceReport, ConformanceReproductionBundle, ConformanceServerErrorClass, ConformanceSkipReason, ConformanceStaticContext, ConformanceSuite, ConformanceSupport, ConformanceTarget, ConformanceTargetSelector, ConformanceTypeNormalizer, ExpectedColumn, ExpectedCompileResult, ExpectedDiagnostic, ExpectedOutcome, ExpectedParameter, ExpectedRenderedQuery, LiveProbePolicy, } from "./types.js";
8
+ export { CONFORMANCE_REPORT_FORMAT_VERSION, CONFORMANCE_VERSION } from "./types.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EACL,mCAAmC,EACnC,sCAAsC,GACvC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,6BAA6B,EAC7B,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iCAAiC,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { defineConformanceProbe, defineConformanceSuite, selectExpectedOutcome, targetMatches, } from "./contracts.js";
2
+ export { discoverConformanceFixtures, minimizeConformanceSource, } from "./fixtures.js";
3
+ export { adaptGrammarConformanceV1, runAdaptedGrammarConformanceV1, } from "./legacy.js";
4
+ export { formatConformanceReport, serializeConformanceReport } from "./reporters.js";
5
+ export { createConformanceReproductionBundle, serializeConformanceReproductionBundle, } from "./reproduction.js";
6
+ export { assertExactConformance, CONFORMANCE_LAYERS, createConformanceReport, runLiveConformanceProbe, runStaticConformanceProbe, } from "./runner.js";
7
+ export { CONFORMANCE_REPORT_FORMAT_VERSION, CONFORMANCE_VERSION } from "./types.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EACL,mCAAmC,EACnC,sCAAsC,GACvC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAgCrB,OAAO,EAAE,iCAAiC,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SchemaSnapshot } from "@typed-sql/core";
2
+ import type { GrammarConformanceFixture } from "../types.js";
3
+ import { type ConformanceProbeResult, type ConformanceSuite } from "./types.js";
4
+ export declare function adaptGrammarConformanceV1<Snapshot extends SchemaSnapshot, Policy>(fixture: GrammarConformanceFixture<Snapshot, Policy>): ConformanceSuite;
5
+ export declare function runAdaptedGrammarConformanceV1<Snapshot extends SchemaSnapshot, Policy>(fixture: GrammarConformanceFixture<Snapshot, Policy>): readonly ConformanceProbeResult[];
6
+ //# sourceMappingURL=legacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../../../../src/v2/legacy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAwB,yBAAyB,EAAwB,MAAM,aAAa,CAAC;AAGzG,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAGtB,MAAM,YAAY,CAAC;AA8CpB,wBAAgB,yBAAyB,CAAC,QAAQ,SAAS,cAAc,EAAE,MAAM,EAC/E,OAAO,EAAE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,GACnD,gBAAgB,CAmBlB;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,SAAS,cAAc,EAAE,MAAM,EACpF,OAAO,EAAE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,GACnD,SAAS,sBAAsB,EAAE,CAenC"}
@@ -0,0 +1,75 @@
1
+ import { defineConformanceProbe, defineConformanceSuite } from "./contracts.js";
2
+ import { runStaticConformanceProbe } from "./runner.js";
3
+ import { CONFORMANCE_VERSION, } from "./types.js";
4
+ const legacyFeatures = Object.freeze({
5
+ select: "statement.select",
6
+ parameters: "expression.operator",
7
+ nullability: "resolver.catalog",
8
+ joins: "query.join",
9
+ ctes: "query.cte",
10
+ functions: "expression.function.call",
11
+ dml: "statement.update",
12
+ });
13
+ function expectedOutcome(fixture, probe) {
14
+ const analysis = fixture.dialect.analyze(probe.sql, fixture.snapshot);
15
+ return {
16
+ target: { grammarVersion: fixture.dialect.grammarVersion },
17
+ support: "exact",
18
+ rows: analysis.columns.map(({ name, tsType, nullable, databaseType, range }) => ({
19
+ name,
20
+ tsType,
21
+ nullable,
22
+ ...(databaseType === undefined ? {} : { databaseType }),
23
+ range,
24
+ })),
25
+ parameters: analysis.parameters.map(({ index, tsType, nullable, databaseType }) => ({
26
+ index,
27
+ tsType,
28
+ nullable,
29
+ ...(databaseType === undefined ? {} : { databaseType }),
30
+ })),
31
+ diagnostics: analysis.diagnostics.map(({ code, severity, range }) => ({ code, severity, range })),
32
+ resultKind: analysis.resultKind ?? "rows",
33
+ skips: {
34
+ "lex-parse": "grammar-parser-private",
35
+ compile: "no-compiler-source",
36
+ render: "no-runtime-query",
37
+ prepare: "no-live-adapter",
38
+ execute: "no-live-adapter",
39
+ plan: "no-live-adapter",
40
+ },
41
+ };
42
+ }
43
+ export function adaptGrammarConformanceV1(fixture) {
44
+ const target = Object.freeze({
45
+ grammar: fixture.dialect.id,
46
+ grammarVersion: fixture.dialect.grammarVersion,
47
+ });
48
+ const probes = Object.entries(fixture.probes).map(([name, probe]) => {
49
+ const requiredName = name;
50
+ return defineConformanceProbe({
51
+ version: CONFORMANCE_VERSION,
52
+ id: `${fixture.dialect.id}.legacy.${name}`,
53
+ featureId: legacyFeatures[requiredName],
54
+ grammar: fixture.dialect.id,
55
+ targets: [target],
56
+ source: probe.sql,
57
+ schemaFixture: `legacy/${fixture.dialect.id}/schema.json`,
58
+ expected: [expectedOutcome(fixture, probe)],
59
+ });
60
+ });
61
+ return defineConformanceSuite({ version: CONFORMANCE_VERSION, name: `${fixture.name}-legacy-v2`, probes });
62
+ }
63
+ export function runAdaptedGrammarConformanceV1(fixture) {
64
+ const suite = adaptGrammarConformanceV1(fixture);
65
+ const target = Object.freeze({
66
+ grammar: fixture.dialect.id,
67
+ grammarVersion: fixture.dialect.grammarVersion,
68
+ });
69
+ return Object.freeze(suite.probes.map((probe) => runStaticConformanceProbe(probe, target, {
70
+ dialect: fixture.dialect,
71
+ snapshot: fixture.snapshot,
72
+ renderer: fixture.renderer,
73
+ })));
74
+ }
75
+ //# sourceMappingURL=legacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../../../../src/v2/legacy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ConformanceReport } from "./types.js";
2
+ export declare function serializeConformanceReport(report: ConformanceReport): string;
3
+ export declare function formatConformanceReport(report: ConformanceReport): string;
4
+ //# sourceMappingURL=reporters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporters.d.ts","sourceRoot":"","sources":["../../../../../src/v2/reporters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAE5E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAczE"}
@@ -0,0 +1,17 @@
1
+ export function serializeConformanceReport(report) {
2
+ return `${JSON.stringify(report, null, 2)}\n`;
3
+ }
4
+ export function formatConformanceReport(report) {
5
+ const lines = [
6
+ `${report.suite}: ${report.summary.pass} passed, ${report.summary.fail} failed, ${report.summary.skip} skipped, ${report.summary.quarantined} quarantined`,
7
+ `target ${report.environment.grammar}@${report.environment.grammarVersion}${report.environment.databaseVersion === undefined ? "" : ` / database ${report.environment.databaseVersion}`}`,
8
+ ];
9
+ for (const result of report.results.filter(({ status }) => status !== "pass")) {
10
+ lines.push(`${result.status.toUpperCase()} ${result.probeId} (${result.featureId})`);
11
+ for (const layer of result.layers.filter(({ status }) => status !== "pass")) {
12
+ lines.push(` ${layer.layer}: ${layer.status}${layer.skipReason === undefined ? "" : ` (${layer.skipReason})`}`);
13
+ }
14
+ }
15
+ return `${lines.join("\n")}\n`;
16
+ }
17
+ //# sourceMappingURL=reporters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporters.js","sourceRoot":"","sources":["../../../../../src/v2/reporters.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,0BAA0B,CAAC,MAAyB;IAClE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAyB;IAC/D,MAAM,KAAK,GAAG;QACZ,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,aAAa,MAAM,CAAC,OAAO,CAAC,WAAW,cAAc;QAC1J,UAAU,MAAM,CAAC,WAAW,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC,cAAc,GACvE,MAAM,CAAC,WAAW,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,WAAW,CAAC,eAAe,EAC3G,EAAE;KACH,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QACrF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;YAC5E,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ConformanceEnvironment, ConformanceProbe, ConformanceProbeResult, ConformanceReproductionBundle, ConformanceTarget, ExpectedOutcome } from "./types.js";
2
+ export declare function createConformanceReproductionBundle(probe: ConformanceProbe, target: ConformanceTarget, environment: ConformanceEnvironment, expected: ExpectedOutcome, actual: ConformanceProbeResult): ConformanceReproductionBundle;
3
+ export declare function serializeConformanceReproductionBundle(bundle: ConformanceReproductionBundle): string;
4
+ //# sourceMappingURL=reproduction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reproduction.d.ts","sourceRoot":"","sources":["../../../../../src/v2/reproduction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,6BAA6B,EAC7B,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAC;AAmBpB,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,sBAAsB,EACnC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,sBAAsB,GAC7B,6BAA6B,CAc/B;AAED,wBAAgB,sCAAsC,CAAC,MAAM,EAAE,6BAA6B,GAAG,MAAM,CAEpG"}
@@ -0,0 +1,35 @@
1
+ function redactOutcome(outcome) {
2
+ return Object.freeze({
3
+ ...outcome,
4
+ ...(outcome.rendered === undefined
5
+ ? {}
6
+ : {
7
+ rendered: Object.freeze({
8
+ ...outcome.rendered,
9
+ values: Object.freeze(outcome.rendered.values.map(() => "[redacted]")),
10
+ }),
11
+ }),
12
+ ...(outcome.decodedRows === undefined
13
+ ? {}
14
+ : { decodedRows: Object.freeze(outcome.decodedRows.map(() => "[redacted]")) }),
15
+ });
16
+ }
17
+ export function createConformanceReproductionBundle(probe, target, environment, expected, actual) {
18
+ const databaseArgument = target.databaseVersion === undefined ? "" : ` --database-version ${target.databaseVersion}`;
19
+ return Object.freeze({
20
+ formatVersion: 1,
21
+ probeId: probe.id,
22
+ featureId: probe.featureId,
23
+ source: probe.source,
24
+ schemaFixture: probe.schemaFixture,
25
+ target,
26
+ environment,
27
+ expected: redactOutcome(expected),
28
+ actual,
29
+ command: `pnpm conformance:v2 -- --probe ${probe.id} --grammar ${probe.grammar}${databaseArgument}`,
30
+ });
31
+ }
32
+ export function serializeConformanceReproductionBundle(bundle) {
33
+ return `${JSON.stringify(bundle, null, 2)}\n`;
34
+ }
35
+ //# sourceMappingURL=reproduction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reproduction.js","sourceRoot":"","sources":["../../../../../src/v2/reproduction.ts"],"names":[],"mappings":"AASA,SAAS,aAAa,CAAC,OAAwB;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,OAAO;QACV,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;oBACtB,GAAG,OAAO,CAAC,QAAQ;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;iBACvE,CAAC;aACH,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;KACjF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,KAAuB,EACvB,MAAyB,EACzB,WAAmC,EACnC,QAAyB,EACzB,MAA8B;IAE9B,MAAM,gBAAgB,GAAG,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,MAAM,CAAC,eAAe,EAAE,CAAC;IACrH,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,MAAM;QACN,WAAW;QACX,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC;QACjC,MAAM;QACN,OAAO,EAAE,kCAAkC,KAAK,CAAC,EAAE,cAAc,KAAK,CAAC,OAAO,GAAG,gBAAgB,EAAE;KACpG,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,MAAqC;IAC1F,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type SchemaSnapshot } from "@typed-sql/core";
2
+ import { type ConformanceEnvironment, type ConformanceLiveAdapter, type ConformanceProbe, type ConformanceProbeResult, type ConformanceReport, type ConformanceStaticContext, type ConformanceTarget, type ConformanceTypeNormalizer } from "./types.js";
3
+ declare const allLayers: readonly ["lex-parse", "resolve", "compile", "render", "prepare", "execute", "plan"];
4
+ export declare function runStaticConformanceProbe<Snapshot extends SchemaSnapshot, Policy>(probe: ConformanceProbe, target: ConformanceTarget, context: ConformanceStaticContext<Snapshot, Policy>): ConformanceProbeResult;
5
+ export declare function runLiveConformanceProbe(probe: ConformanceProbe, target: ConformanceTarget, adapter: ConformanceLiveAdapter, normalizer: ConformanceTypeNormalizer, staticResult?: ConformanceProbeResult): Promise<ConformanceProbeResult>;
6
+ export declare function createConformanceReport(suite: string, environment: ConformanceEnvironment, results: readonly ConformanceProbeResult[], generatedAt?: Date): ConformanceReport;
7
+ export declare function assertExactConformance(report: ConformanceReport): void;
8
+ export { allLayers as CONFORMANCE_LAYERS };
9
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../../src/v2/runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,cAAc,EAAoB,MAAM,iBAAiB,CAAC;AAEjG,OAAO,EAIL,KAAK,sBAAsB,EAG3B,KAAK,sBAAsB,EAG3B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EAEtB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAK/B,MAAM,YAAY,CAAC;AAEpB,QAAA,MAAM,SAAS,sFAQkC,CAAC;AAmKlD,wBAAgB,yBAAyB,CAAC,QAAQ,SAAS,cAAc,EAAE,MAAM,EAC/E,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAClD,sBAAsB,CAsGxB;AAkCD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,gBAAgB,EACvB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,yBAAyB,EACrC,YAAY,CAAC,EAAE,sBAAsB,GACpC,OAAO,CAAC,sBAAsB,CAAC,CA6DjC;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,sBAAsB,EACnC,OAAO,EAAE,SAAS,sBAAsB,EAAE,EAC1C,WAAW,OAAa,GACvB,iBAAiB,CAsBnB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAOtE;AAED,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,CAAC"}