@typed-sql/compiler 1.0.0-rc.0 → 2.0.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 (35) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +36 -38
  3. package/dist/packages/compiler/src/compatibility.d.ts +66 -0
  4. package/dist/packages/compiler/src/compatibility.d.ts.map +1 -0
  5. package/dist/packages/compiler/src/compatibility.js +786 -0
  6. package/dist/packages/compiler/src/compatibility.js.map +1 -0
  7. package/dist/packages/compiler/src/compiler.d.ts +16 -1
  8. package/dist/packages/compiler/src/compiler.d.ts.map +1 -1
  9. package/dist/packages/compiler/src/compiler.js +67 -4
  10. package/dist/packages/compiler/src/compiler.js.map +1 -1
  11. package/dist/packages/compiler/src/index.d.ts +13 -3
  12. package/dist/packages/compiler/src/index.d.ts.map +1 -1
  13. package/dist/packages/compiler/src/index.js +6 -1
  14. package/dist/packages/compiler/src/index.js.map +1 -1
  15. package/dist/packages/compiler/src/manifest.d.ts +505 -0
  16. package/dist/packages/compiler/src/manifest.d.ts.map +1 -0
  17. package/dist/packages/compiler/src/manifest.js +628 -0
  18. package/dist/packages/compiler/src/manifest.js.map +1 -0
  19. package/dist/packages/compiler/src/plans.d.ts +88 -0
  20. package/dist/packages/compiler/src/plans.d.ts.map +1 -0
  21. package/dist/packages/compiler/src/plans.js +459 -0
  22. package/dist/packages/compiler/src/plans.js.map +1 -0
  23. package/dist/packages/compiler/src/project.d.ts +8 -0
  24. package/dist/packages/compiler/src/project.d.ts.map +1 -0
  25. package/dist/packages/compiler/src/project.js +62 -0
  26. package/dist/packages/compiler/src/project.js.map +1 -0
  27. package/dist/packages/compiler/src/scanner.d.ts +6 -0
  28. package/dist/packages/compiler/src/scanner.d.ts.map +1 -1
  29. package/dist/packages/compiler/src/scanner.js +46 -0
  30. package/dist/packages/compiler/src/scanner.js.map +1 -1
  31. package/dist/packages/compiler/src/verification.d.ts +106 -0
  32. package/dist/packages/compiler/src/verification.d.ts.map +1 -0
  33. package/dist/packages/compiler/src/verification.js +516 -0
  34. package/dist/packages/compiler/src/verification.js.map +1 -0
  35. package/package.json +4 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,96 @@
1
1
  # @typed-sql/compiler
2
2
 
3
+ ## 2.0.0-rc.1
4
+
5
+ ### Minor Changes
6
+
7
+ - 9c72dab: Use live MySQL catalog origins to preserve enum result evidence, and compare parameter metadata in
8
+ the safe input direction so compiler-enforced literal subsets do not become false mismatches.
9
+
10
+ ## 2.0.0-rc.0
11
+
12
+ ### Major Changes
13
+
14
+ - 3f063f6: Add deterministic, secret-free query manifests with bounded structural variants, inferred result
15
+ and parameter descriptions, semantic evidence, runtime-correlatable fingerprints, unresolved
16
+ entries, compatible parsing, canonical serialization, incremental per-file reuse, tsconfig project
17
+ discovery, and a dedicated CLI command.
18
+ - 6a7ae58: Add opt-in live query verification through grammar-owned PostgreSQL PREPARE and MySQL
19
+ COM_STMT_PREPARE adapters, bounded neutral comparison, deterministic secret-free proof artifacts,
20
+ offline cache validation, explicit unsupported classifications, CLI workflows, real database E2E,
21
+ and performance budgets.
22
+ - 3050209: Add the dialect contract v4 semantic query evidence foundation. PostgreSQL and MySQL now report operation, dependencies, cardinality, volatility, locking, connection affinity, and required capabilities; compiler results add deterministic query and structural-variant fingerprints and conservatively merged source-mapped semantics. Schema snapshots can record function volatility, and the AST package exposes a neutral statement walker for grammar implementations.
23
+ - b4f1b6e: Add deterministic migration compatibility analysis across before/after schema snapshots and query
24
+ manifests. Reports classify both rolling-deployment directions, retain exact source and dependency
25
+ evidence, fail closed for unknown semantics, redact defaults and paths, and support configurable CI
26
+ severity through `typed-sql compat`.
27
+ - b2ec119: Add opt-in, grammar-neutral query-plan governance with PostgreSQL and MySQL structured EXPLAIN
28
+ adapters, transient application-owned samples, redacted fingerprint-keyed artifacts, absolute and
29
+ comparable regression budgets, explicit uncertainty, CLI capture and review, documentation, and
30
+ performance coverage.
31
+
32
+ ### Patch Changes
33
+
34
+ - Updated dependencies [29afc3d]
35
+ - Updated dependencies [3f063f6]
36
+ - Updated dependencies [6a7ae58]
37
+ - Updated dependencies [b06fd0a]
38
+ - Updated dependencies [3050209]
39
+ - Updated dependencies [1b054b6]
40
+ - Updated dependencies [b4f1b6e]
41
+ - Updated dependencies [87189c3]
42
+ - Updated dependencies [e654fae]
43
+ - Updated dependencies [b2ec119]
44
+ - @typed-sql/core@2.0.0-rc.0
45
+ - @typed-sql/schema@2.0.0-rc.0
46
+
47
+ ## 1.0.0
48
+
49
+ ### Major Changes
50
+
51
+ - 7ca256b: Release the first public typed-sql beta: exact TypeScript 7 row inference from static PostgreSQL and
52
+ MySQL, versioned schema introspection, application-owned drivers, config-driven grammar plugins,
53
+ CLI verification, editor language-server integration, versioned diagnostics, bounded parsing, and
54
+ real-database plus packed-tarball verification.
55
+
56
+ ### Patch Changes
57
+
58
+ - 1563a7a: Declare and enforce the 1.0 package stability boundary. Core SQL, compiler, schema, config, AST,
59
+ PostgreSQL, MySQL, and CLI packages form the stable train; the TypeScript preview bridge and
60
+ language server remain explicitly experimental. Freeze public entrypoints and query type contracts,
61
+ and remove internal compiler/type helpers from stable package-root exports before 1.0.
62
+ - 16e2475: Prove npm trusted publishing and provenance after the initial registry bootstrap.
63
+ - bd26d6e: Replace potentially expensive parser regular expressions with bounded scanners, tighten editor
64
+ completion matching, and prevent releases while high-severity CodeQL alerts remain open.
65
+ - 69c7d87: Report `TSQ004` for bare nested templates used as conditional SQL structure and offer an alias-aware
66
+ language-server quick fix that prefixes the template with `sql.fragment`. Ordinary and nested
67
+ values remain parameterized across the edit.
68
+ - 3e2c75c: Infer ordered query parameter tuples and let TypeScript reject interpolation values that do not
69
+ match their SQL context. Dialect contract version 2 adds explicit parameter analysis; unresolved
70
+ positions remain `unknown`. Add typed nullable predicate composition through `sql.fragment()`,
71
+ `sql.and()`, `sql.or()`, `sql.where()`, and `sql.append()` while preserving row and parameter tuples.
72
+ Direct append fragments are grammar-analyzed cumulatively against their static base, so TypeScript
73
+ rejects fragment interpolation values that disagree with the referenced database columns.
74
+ Add `sql.empty` and SQL-template-native conditional structural fragments. The compiler analyzes
75
+ complete branch variants, preserves literal boolean-dependent result rows, and type-checks nested
76
+ fragment parameters without adding a query-builder DSL. Bound independent structural expansion at
77
+ 64 variants by default, correlate repeated conditions, merge diagnostics and fragment expectations
78
+ across variants, and fail closed on incompatible contexts. Share indexed catalog and conservative
79
+ parameter-resolution primitives across grammars, harden cooked-template scanning, and add runtime,
80
+ resolver, scanner, and structural performance gates.
81
+ - Updated dependencies [eb16de7]
82
+ - Updated dependencies [b6389e4]
83
+ - Updated dependencies [eb16de7]
84
+ - Updated dependencies [b6389e4]
85
+ - Updated dependencies [eb16de7]
86
+ - Updated dependencies [1563a7a]
87
+ - Updated dependencies [9dd6bc4]
88
+ - Updated dependencies [7ca256b]
89
+ - Updated dependencies [16e2475]
90
+ - Updated dependencies [69c7d87]
91
+ - Updated dependencies [3e2c75c]
92
+ - @typed-sql/core@1.0.0
93
+
3
94
  ## 1.0.0-rc.0
4
95
 
5
96
  ### Patch Changes
package/README.md CHANGED
@@ -1,15 +1,19 @@
1
1
  # @typed-sql/compiler
2
2
 
3
- The dialect-neutral TypeScript source compiler behind [typed-sql](https://github.com/Lojhan/typed-sql).
4
- It finds static SQL templates, asks the configured grammar for row and parameter shapes, injects them into
5
- an in-memory TypeScript program, and preserves source mappings for diagnostics and editor tooling.
3
+ The stable, grammar-neutral TypeScript source compiler behind
4
+ [typed-sql](https://github.com/Lojhan/typed-sql). It finds static SQL templates, asks the configured
5
+ grammar for row and parameter shapes, creates an in-memory TypeScript overlay, preserves source
6
+ mappings, emits deterministic query manifests, and compares them with grammar-owned native database
7
+ evidence for CI and production correlation. It also compares before/after snapshots and manifests to
8
+ find query-level migration breaks in both rolling-deployment directions, and captures fingerprint-keyed
9
+ structured plans for explicit regression review.
6
10
 
7
11
  ```sh
8
- pnpm add @typed-sql/compiler@next
12
+ pnpm add @typed-sql/compiler
9
13
  ```
10
14
 
11
15
  ```ts
12
- import { checkFile, compileSource, extractStaticQueries, mapSqlRange } from "@typed-sql/compiler";
16
+ import { compileSource } from "@typed-sql/compiler";
13
17
  import { postgres } from "@typed-sql/postgres";
14
18
 
15
19
  const result = compileSource({
@@ -19,38 +23,32 @@ const result = compileSource({
19
23
  });
20
24
  ```
21
25
 
22
- `compileSource` does not branch on PostgreSQL, MySQL, package names, or database drivers. It only
23
- consumes the public `DialectPlugin` contract from `@typed-sql/core`. Unsupported, dynamic, invalid,
24
- or ambiguous SQL remains a diagnostic or an `unknown` position—never `any`. The resulting overlay
25
- uses `Query<Row, readonly [Param1, Param2, ...]>`, which lets TypeScript report incorrect `${...}`
26
- values at their original source locations.
27
-
28
- Direct `sql.append(base, ...fragments)` expressions are analyzed cumulatively. The compiler resolves
29
- the statically bound base query, adds each visible `sql.fragment` in source order, and injects the
30
- grammar-derived parameter tuple into that fragment. Composed values are therefore checked against
31
- their referenced columns even when a preceding fragment introduces structure such as
32
- `WHERE 1 = 1`. Indirect function-returned fragments and arbitrary mutable collections remain at the
33
- core runtime's parameter-safe boundary rather than being guessed.
34
-
35
- Structural fragment interpolations inside a complete `sql` template are expanded as correlated,
36
- finite branches. The compiler analyzes each resulting complete SQL statement, emits a conditional
37
- row for generic boolean property selections, and injects expected parameter types into nested
38
- fragments. `sql.empty` represents the absent branch without turning it into a driver parameter.
39
- The expansion is a grammar-neutral intermediate representation: SQL parsing and resolution still
40
- belong exclusively to `DialectPlugin.analyze()`.
41
-
42
- `compileSource` accepts `maxStructuralVariants`, defaulting to 64. The compiler counts independent
43
- conditions and returns `TSQ003` before invoking the grammar when the bound would be exceeded.
44
- Repeated uses of the same condition are correlated and do not multiply the branch count. A shared
45
- fragment that receives incompatible parameter expectations across valid branches fails closed with
46
- `TSQ205`.
47
-
48
- Before grammar analysis, the scanner rejects an untagged template paired with `sql.empty` or a
49
- trusted fragment as `TSQ004`. This produces one focused source diagnostic instead of a downstream
50
- SQL parse error. Ordinary value templates remain parameters; the compiler never interprets their
51
- runtime strings as SQL structure.
52
-
53
- Application projects normally use this through `typed-sql check` or the language server. It is
54
- public for grammar, editor, and build-tool integrations.
26
+ `compileSource` consumes only `DialectPlugin`; it does not branch on a database, grammar package,
27
+ or driver. Compiled queries expose path-independent SHA-256 fingerprints, variant fingerprints,
28
+ variant descriptions, and source-mapped semantics merged conservatively across conditional
29
+ structure. `buildQueryManifest` turns the same evidence into canonical, secret-free JSON without
30
+ generating an application API. Its public options include the structural-variant bound used for
31
+ conditional fragments. Application projects normally use the compiler through `typed-sql check`
32
+ or the language server.
33
+
34
+ Live verification APIs collect transient SQL only after sources still match the manifest, schedule
35
+ grammar-owned adapters with bounded concurrency, compare native field evidence, and emit canonical
36
+ proofs that contain no SQL, values, URLs, absolute paths, or driver errors.
37
+
38
+ Plan-governance APIs schedule grammar-owned inspectors, normalize redacted plan evidence, and apply
39
+ absolute or environment-comparable relative budgets. Version, schema, settings, statistics, and sample
40
+ changes remain explicit uncertainty instead of being treated as a pass.
41
+
42
+ Migration compatibility APIs consume deterministic artifacts only. They classify source, runtime,
43
+ deployment-order, compatible, and unknown outcomes; link affected variants to source and dependency
44
+ ranges; and emit canonical reports without SQL, default expressions, credentials, or absolute paths.
45
+
46
+ Read [Architecture](https://github.com/Lojhan/typed-sql/blob/main/docs/concepts/architecture.md),
47
+ [Compose conditional SQL](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/composition.md),
48
+ [Query manifests](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/query-manifests.md), and
49
+ [Live verification](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/live-verification.md),
50
+ [Query plan governance](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/query-plan-governance.md),
51
+ [Migration compatibility](https://github.com/Lojhan/typed-sql/blob/main/docs/guides/migration-compatibility.md), and
52
+ [Inference and safety](https://github.com/Lojhan/typed-sql/blob/main/docs/concepts/type-safety.md).
55
53
 
56
54
  MIT © typed-sql contributors
@@ -0,0 +1,66 @@
1
+ import type { SchemaSnapshot, SourceRange } from "@typed-sql/core";
2
+ import type { QueryManifest, QueryManifestLocation } from "./manifest.js";
3
+ export declare const SCHEMA_COMPATIBILITY_FORMAT_VERSION: 1;
4
+ export declare const SCHEMA_COMPATIBILITY_ANALYZER_VERSION: "typed-sql-v1";
5
+ export type DeploymentDirection = "before-app-after-database" | "after-app-before-database";
6
+ export type CompatibilityClassification = "compatible" | "deployment-order-sensitive" | "source-breaking" | "runtime-breaking" | "unknown";
7
+ export type CompatibilitySeverity = "info" | "warning" | "error";
8
+ export type SchemaCompatibilityChangeKind = "relation-added" | "relation-removed" | "column-added" | "column-removed" | "column-database-type" | "column-typescript-type" | "column-nullability" | "column-array" | "column-default" | "enum-added" | "enum-removed" | "enum-values" | "domain-added" | "domain-removed" | "domain-database-type" | "domain-typescript-type" | "domain-nullability" | "function-added" | "function-removed" | "function-return-type" | "function-nullability" | "function-set-returning" | "function-volatility" | "dialect-version" | "server-version" | "query-contract";
9
+ export interface SchemaCompatibilityTarget {
10
+ readonly kind: "schema" | "relation" | "column" | "enum" | "domain" | "function" | "query";
11
+ readonly key: string;
12
+ readonly name: string;
13
+ readonly schema?: string;
14
+ readonly parent?: string;
15
+ }
16
+ export type CompatibilityEvidenceValue = string | boolean | null | readonly string[];
17
+ export type CompatibilityEvidence = Readonly<Record<string, CompatibilityEvidenceValue>>;
18
+ export interface SchemaCompatibilityChange {
19
+ readonly id: string;
20
+ readonly kind: SchemaCompatibilityChangeKind;
21
+ readonly target: SchemaCompatibilityTarget;
22
+ readonly before?: CompatibilityEvidence;
23
+ readonly after?: CompatibilityEvidence;
24
+ }
25
+ export interface CompatibilityQueryReference {
26
+ readonly queryId: string;
27
+ readonly variantFingerprint: string;
28
+ readonly source: QueryManifestLocation;
29
+ readonly dependencyRange?: SourceRange;
30
+ }
31
+ export interface SchemaCompatibilityAssessment {
32
+ readonly direction: DeploymentDirection;
33
+ readonly changeId?: string;
34
+ readonly classification: CompatibilityClassification;
35
+ readonly severity: CompatibilitySeverity;
36
+ readonly reason: string;
37
+ readonly queries: readonly CompatibilityQueryReference[];
38
+ }
39
+ export interface SchemaCompatibilityReport {
40
+ readonly formatVersion: typeof SCHEMA_COMPATIBILITY_FORMAT_VERSION;
41
+ readonly analyzerVersion: typeof SCHEMA_COMPATIBILITY_ANALYZER_VERSION;
42
+ readonly dialect: string;
43
+ readonly before: {
44
+ readonly schemaHash: string;
45
+ readonly manifestHash: string;
46
+ readonly version?: string;
47
+ };
48
+ readonly after: {
49
+ readonly schemaHash: string;
50
+ readonly manifestHash: string;
51
+ readonly version?: string;
52
+ };
53
+ readonly changes: readonly SchemaCompatibilityChange[];
54
+ readonly assessments: readonly SchemaCompatibilityAssessment[];
55
+ readonly summary: Readonly<Record<CompatibilitySeverity, number>>;
56
+ }
57
+ export interface AnalyzeSchemaCompatibilityOptions {
58
+ readonly before: SchemaSnapshot;
59
+ readonly after: SchemaSnapshot;
60
+ readonly beforeManifest: QueryManifest;
61
+ readonly afterManifest: QueryManifest;
62
+ }
63
+ export declare function analyzeSchemaCompatibility(options: AnalyzeSchemaCompatibilityOptions): SchemaCompatibilityReport;
64
+ export declare function serializeSchemaCompatibilityReport(report: SchemaCompatibilityReport): string;
65
+ export declare function parseSchemaCompatibilityReport(value: unknown): SchemaCompatibilityReport;
66
+ //# sourceMappingURL=compatibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../../../../src/compatibility.ts"],"names":[],"mappings":"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"}