@typed-sql/schema 2.0.0 → 2.1.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/dist/packages/schema/src/generator.d.ts +29 -1
  3. package/dist/packages/schema/src/generator.d.ts.map +1 -1
  4. package/dist/packages/schema/src/generator.js +104 -19
  5. package/dist/packages/schema/src/generator.js.map +1 -1
  6. package/dist/packages/schema/src/index.d.ts +6 -5
  7. package/dist/packages/schema/src/index.d.ts.map +1 -1
  8. package/dist/packages/schema/src/index.js +4 -3
  9. package/dist/packages/schema/src/index.js.map +1 -1
  10. package/dist/packages/schema/src/loader.d.ts +4 -4
  11. package/dist/packages/schema/src/loader.d.ts.map +1 -1
  12. package/dist/packages/schema/src/loader.js +26 -148
  13. package/dist/packages/schema/src/loader.js.map +1 -1
  14. package/dist/packages/schema/src/model.d.ts +13 -44
  15. package/dist/packages/schema/src/model.d.ts.map +1 -1
  16. package/dist/packages/schema/src/model.js +2 -1
  17. package/dist/packages/schema/src/model.js.map +1 -1
  18. package/dist/packages/schema/src/v1/codec.d.ts +3 -0
  19. package/dist/packages/schema/src/v1/codec.d.ts.map +1 -0
  20. package/dist/packages/schema/src/v1/codec.js +151 -0
  21. package/dist/packages/schema/src/v1/codec.js.map +1 -0
  22. package/dist/packages/schema/src/v1/model.d.ts +44 -0
  23. package/dist/packages/schema/src/v1/model.d.ts.map +1 -0
  24. package/dist/packages/schema/src/v1/model.js +2 -0
  25. package/dist/packages/schema/src/v1/model.js.map +1 -0
  26. package/dist/packages/schema/src/v1/upgrade.d.ts +5 -0
  27. package/dist/packages/schema/src/v1/upgrade.d.ts.map +1 -0
  28. package/dist/packages/schema/src/v1/upgrade.js +141 -0
  29. package/dist/packages/schema/src/v1/upgrade.js.map +1 -0
  30. package/dist/packages/schema/src/v2/codec.d.ts +8 -0
  31. package/dist/packages/schema/src/v2/codec.d.ts.map +1 -0
  32. package/dist/packages/schema/src/v2/codec.js +659 -0
  33. package/dist/packages/schema/src/v2/codec.js.map +1 -0
  34. package/dist/packages/schema/src/v2/model.d.ts +231 -0
  35. package/dist/packages/schema/src/v2/model.d.ts.map +1 -0
  36. package/dist/packages/schema/src/v2/model.js +2 -0
  37. package/dist/packages/schema/src/v2/model.js.map +1 -0
  38. package/package.json +4 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,67 @@
1
1
  # @typed-sql/schema
2
2
 
3
+ ## 2.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1041bfa: Add canonical schema snapshot format 2 with isolated v1/v2 codecs, conservative v1 upgrades,
8
+ neutral relation/constraint/index/type/routine evidence, and complete provider introspection.
9
+ Resolvers now consume structural write and routine evidence, while drift, compatibility, manifests,
10
+ verification proofs, and plan artifacts bind to the schema format and canonical hash.
11
+ - 1041bfa: Add deterministic versioned dialect capability states backed by normalized server versions,
12
+ settings, extensions, and compile options. Query manifests now invalidate on capability changes and
13
+ record evidence for capabilities each query uses, while the CLI exposes a human-readable capability
14
+ report. The boolean capability map remains available as an additive migration bridge.
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies [1041bfa]
19
+ - Updated dependencies [1041bfa]
20
+ - Updated dependencies [1041bfa]
21
+ - Updated dependencies [1041bfa]
22
+ - Updated dependencies [1041bfa]
23
+ - Updated dependencies [1041bfa]
24
+ - Updated dependencies [1041bfa]
25
+ - Updated dependencies [1041bfa]
26
+ - Updated dependencies [1041bfa]
27
+ - Updated dependencies [1041bfa]
28
+ - Updated dependencies [1041bfa]
29
+ - @typed-sql/core@2.1.0
30
+
31
+ ## 2.1.0-rc.1
32
+
33
+ ### Patch Changes
34
+
35
+ - Publish the coherent 2.1.0-rc.1 release-candidate train.
36
+
37
+ ## 2.1.0-rc.0
38
+
39
+ ### Minor Changes
40
+
41
+ - 1c64475: Add canonical schema snapshot format 2 with isolated v1/v2 codecs, conservative v1 upgrades,
42
+ neutral relation/constraint/index/type/routine evidence, and complete provider introspection.
43
+ Resolvers now consume structural write and routine evidence, while drift, compatibility, manifests,
44
+ verification proofs, and plan artifacts bind to the schema format and canonical hash.
45
+ - 1c64475: Add deterministic versioned dialect capability states backed by normalized server versions,
46
+ settings, extensions, and compile options. Query manifests now invalidate on capability changes and
47
+ record evidence for capabilities each query uses, while the CLI exposes a human-readable capability
48
+ report. The boolean capability map remains available as an additive migration bridge.
49
+
50
+ ### Patch Changes
51
+
52
+ - Updated dependencies [58bd4d1]
53
+ - Updated dependencies [58aa9ef]
54
+ - Updated dependencies [65b662f]
55
+ - Updated dependencies [e433feb]
56
+ - Updated dependencies [0efc90c]
57
+ - Updated dependencies [ff0e3bb]
58
+ - Updated dependencies [6f5b977]
59
+ - Updated dependencies [1c64475]
60
+ - Updated dependencies [1c64475]
61
+ - Updated dependencies [1c64475]
62
+ - Updated dependencies [1c64475]
63
+ - @typed-sql/core@2.1.0-rc.0
64
+
3
65
  ## 2.0.0
4
66
 
5
67
  ### Minor Changes
@@ -5,7 +5,28 @@ export interface GenerateSchemaOptions {
5
5
  readonly generatorVersion?: string;
6
6
  readonly dialectVersion?: string;
7
7
  }
8
- export declare function calculateSchemaHash(schema: SchemaSnapshot): string;
8
+ /** Structural bridge used by neutral compiler packages that cannot depend on schema model types. */
9
+ export interface SchemaHashInput {
10
+ readonly formatVersion: 1 | 2;
11
+ readonly dialect: string;
12
+ readonly dialectVersion?: string;
13
+ readonly version?: string;
14
+ readonly server?: unknown;
15
+ readonly tables: Readonly<Record<string, unknown>>;
16
+ readonly enums?: Readonly<Record<string, readonly string[]>>;
17
+ readonly domains?: Readonly<Record<string, unknown>>;
18
+ readonly functions?: Readonly<Record<string, unknown>>;
19
+ readonly namespaces?: Readonly<Record<string, unknown>>;
20
+ readonly types?: Readonly<Record<string, unknown>>;
21
+ readonly relations?: Readonly<Record<string, unknown>>;
22
+ readonly routines?: Readonly<Record<string, unknown>>;
23
+ readonly extension?: unknown;
24
+ }
25
+ export declare function canonicalizeSchemaValue(value: unknown): unknown;
26
+ /** One-way identity for semantically relevant expressions that must not be stored verbatim. */
27
+ export declare function fingerprintSchemaExpression(expression: string): string;
28
+ export declare function serializeSchemaSnapshot(schema: SchemaSnapshot, spacing?: number): string;
29
+ export declare function calculateSchemaHash(schema: SchemaHashInput): string;
9
30
  export declare function calculateTypePolicyHash(policy: unknown): string;
10
31
  export interface SchemaDriftResult {
11
32
  readonly drifted: boolean;
@@ -15,6 +36,13 @@ export interface SchemaDriftResult {
15
36
  readonly actualSchemaHash: string;
16
37
  readonly expectedTypePolicyHash: string;
17
38
  readonly actualTypePolicyHash: string;
39
+ /** Stable, value-free identities explaining what changed. */
40
+ readonly changes: readonly SchemaDriftChange[];
41
+ }
42
+ export type SchemaDriftChangeKind = "schema" | "dialect" | "server" | "namespace" | "type" | "relation" | "routine" | "extension" | "type-policy";
43
+ export interface SchemaDriftChange {
44
+ readonly kind: SchemaDriftChangeKind;
45
+ readonly key: string;
18
46
  }
19
47
  export declare function checkSchemaDrift(generated: GeneratedSchemaSnapshot, current: SchemaSnapshot, policy?: unknown): SchemaDriftResult;
20
48
  export declare function generateSchemaPackage(schema: SchemaSnapshot, options: GenerateSchemaOptions): Promise<GeneratedSchemaMetadata>;
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../src/generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGnG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAiBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAElE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAE/D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,uBAAuB,EAClC,OAAO,EAAE,cAAc,EACvB,MAAM,GAAE,OAAY,GACnB,iBAAiB,CAmBnB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CA2BlC;AAED,YAAY,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../src/generator.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,108 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { mkdir, writeFile } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
- import { SCHEMA_FORMAT_VERSION } from "./model.js";
5
- function canonicalize(value) {
4
+ import { LEGACY_SCHEMA_FORMAT_VERSION, SCHEMA_FORMAT_VERSION } from "./model.js";
5
+ import { upgradeSchemaSnapshotV1 } from "./v1/upgrade.js";
6
+ import { parseSchemaSnapshotV2, schemaSnapshotV2Envelope } from "./v2/codec.js";
7
+ export function canonicalizeSchemaValue(value) {
6
8
  if (Array.isArray(value))
7
- return value.map(canonicalize);
9
+ return value.map(canonicalizeSchemaValue);
8
10
  if (typeof value !== "object" || value === null)
9
11
  return value;
10
12
  return Object.fromEntries(Object.entries(value)
11
13
  .sort(([a], [b]) => a.localeCompare(b))
12
- .map(([key, item]) => [key, canonicalize(item)]));
14
+ .map(([key, item]) => [key, canonicalizeSchemaValue(item)]));
13
15
  }
14
16
  const hash = (value) => createHash("sha256")
15
- .update(JSON.stringify(canonicalize(value)))
17
+ .update(JSON.stringify(canonicalizeSchemaValue(value)))
16
18
  .digest("hex");
19
+ /** One-way identity for semantically relevant expressions that must not be stored verbatim. */
20
+ export function fingerprintSchemaExpression(expression) {
21
+ return `sha256:${createHash("sha256").update(expression).digest("hex")}`;
22
+ }
23
+ function hashableSchema(schema) {
24
+ if (schema.formatVersion === SCHEMA_FORMAT_VERSION) {
25
+ if (schema.dialectVersion === undefined ||
26
+ schema.server === undefined ||
27
+ schema.namespaces === undefined ||
28
+ schema.types === undefined ||
29
+ schema.relations === undefined ||
30
+ schema.routines === undefined) {
31
+ throw new TypeError("Schema format 2 hashing requires the complete v2 envelope");
32
+ }
33
+ const normalized = parseSchemaSnapshotV2(schemaSnapshotV2Envelope(schema));
34
+ const { metadata: _metadata, ...envelope } = schemaSnapshotV2Envelope(normalized);
35
+ return envelope;
36
+ }
37
+ return schema;
38
+ }
39
+ export function serializeSchemaSnapshot(schema, spacing) {
40
+ return JSON.stringify(canonicalizeSchemaValue(hashableSchema(schema)), null, spacing);
41
+ }
17
42
  export function calculateSchemaHash(schema) {
18
- return hash(schema);
43
+ return hash(hashableSchema(schema));
19
44
  }
20
45
  export function calculateTypePolicyHash(policy) {
21
46
  return hash(policy);
22
47
  }
48
+ function different(left, right) {
49
+ return JSON.stringify(canonicalizeSchemaValue(left)) !== JSON.stringify(canonicalizeSchemaValue(right));
50
+ }
51
+ function changedKeys(kind, left, right) {
52
+ return [...new Set([...Object.keys(left), ...Object.keys(right)])]
53
+ .sort()
54
+ .filter((key) => different(left[key], right[key]))
55
+ .map((key) => ({ kind, key }));
56
+ }
57
+ function explainSchemaDrift(generated, current, schemaChanged, typePolicyChanged) {
58
+ const changes = [];
59
+ if (generated.dialect !== current.dialect || generated.dialectVersion !== current.dialectVersion) {
60
+ changes.push({ kind: "dialect", key: generated.dialect });
61
+ }
62
+ if (generated.formatVersion === 2 && current.formatVersion === 2) {
63
+ if (different(generated.server, current.server))
64
+ changes.push({ kind: "server", key: generated.server.product });
65
+ changes.push(...changedKeys("namespace", generated.namespaces, current.namespaces));
66
+ changes.push(...changedKeys("type", generated.types, current.types));
67
+ changes.push(...changedKeys("relation", generated.relations, current.relations));
68
+ changes.push(...changedKeys("routine", generated.routines, current.routines));
69
+ if (different(generated.extension, current.extension))
70
+ changes.push({ kind: "extension", key: generated.dialect });
71
+ }
72
+ else {
73
+ changes.push(...changedKeys("relation", generated.tables, current.tables));
74
+ changes.push(...changedKeys("type", generated.enums ?? {}, current.enums ?? {}));
75
+ changes.push(...changedKeys("type", generated.domains ?? {}, current.domains ?? {}));
76
+ changes.push(...changedKeys("routine", generated.functions ?? {}, current.functions ?? {}));
77
+ }
78
+ if (schemaChanged && changes.length === 0)
79
+ changes.push({ kind: "schema", key: generated.dialect });
80
+ if (typePolicyChanged)
81
+ changes.push({ kind: "type-policy", key: "type-policy" });
82
+ return changes.sort((left, right) => left.kind.localeCompare(right.kind) || left.key.localeCompare(right.key));
83
+ }
23
84
  export function checkSchemaDrift(generated, current, policy = {}) {
24
- const comparableCurrent = {
25
- ...current,
26
- ...(generated.formatVersion === undefined ? {} : { formatVersion: generated.formatVersion }),
27
- ...(generated.dialectVersion === undefined ? {} : { dialectVersion: generated.dialectVersion }),
28
- };
85
+ const comparableCurrent = generated.formatVersion === SCHEMA_FORMAT_VERSION
86
+ ? {
87
+ ...(current.formatVersion === SCHEMA_FORMAT_VERSION ? current : upgradeSchemaSnapshotV1(current)),
88
+ dialectVersion: generated.dialectVersion,
89
+ }
90
+ : current.formatVersion === LEGACY_SCHEMA_FORMAT_VERSION
91
+ ? {
92
+ ...current,
93
+ ...(generated.dialectVersion === undefined ? {} : { dialectVersion: generated.dialectVersion }),
94
+ }
95
+ : {
96
+ formatVersion: LEGACY_SCHEMA_FORMAT_VERSION,
97
+ dialect: current.dialect,
98
+ ...(generated.dialectVersion === undefined ? {} : { dialectVersion: generated.dialectVersion }),
99
+ version: current.server.version,
100
+ server: current.server,
101
+ tables: current.tables,
102
+ ...(current.enums === undefined ? {} : { enums: current.enums }),
103
+ ...(current.domains === undefined ? {} : { domains: current.domains }),
104
+ ...(current.functions === undefined ? {} : { functions: current.functions }),
105
+ };
29
106
  const actualSchemaHash = calculateSchemaHash(comparableCurrent);
30
107
  const actualTypePolicyHash = calculateTypePolicyHash(policy);
31
108
  const schemaChanged = generated.metadata.schemaHash !== actualSchemaHash;
@@ -38,25 +115,33 @@ export function checkSchemaDrift(generated, current, policy = {}) {
38
115
  actualSchemaHash,
39
116
  expectedTypePolicyHash: generated.metadata.typePolicyHash,
40
117
  actualTypePolicyHash,
118
+ changes: explainSchemaDrift(generated, comparableCurrent, schemaChanged, typePolicyChanged),
41
119
  };
42
120
  }
43
121
  export async function generateSchemaPackage(schema, options) {
44
122
  const policy = options.typePolicy ?? {};
45
- const versionedSchema = {
46
- ...schema,
47
- formatVersion: SCHEMA_FORMAT_VERSION,
48
- ...(options.dialectVersion === undefined ? {} : { dialectVersion: options.dialectVersion }),
49
- };
123
+ const versionedSchema = schema.formatVersion === SCHEMA_FORMAT_VERSION
124
+ ? {
125
+ ...schema,
126
+ ...(options.dialectVersion === undefined ? {} : { dialectVersion: options.dialectVersion }),
127
+ }
128
+ : upgradeSchemaSnapshotV1({
129
+ ...schema,
130
+ ...(options.dialectVersion === undefined ? {} : { dialectVersion: options.dialectVersion }),
131
+ });
132
+ const normalizedSchema = parseSchemaSnapshotV2(schemaSnapshotV2Envelope(versionedSchema));
50
133
  const metadata = {
51
134
  generatorVersion: options.generatorVersion ?? "1.0.0",
52
- schemaHash: calculateSchemaHash(versionedSchema),
135
+ schemaHash: calculateSchemaHash(normalizedSchema),
53
136
  typePolicyHash: calculateTypePolicyHash(policy),
137
+ schemaFormat: SCHEMA_FORMAT_VERSION,
54
138
  };
139
+ const serializedSchema = schemaSnapshotV2Envelope(normalizedSchema);
55
140
  await mkdir(options.outDir, { recursive: true });
56
- await writeFile(join(options.outDir, "schema.json"), `${JSON.stringify({ ...versionedSchema, metadata }, null, 2)}\n`, "utf8");
141
+ await writeFile(join(options.outDir, "schema.json"), `${JSON.stringify(canonicalizeSchemaValue({ ...serializedSchema, metadata }), null, 2)}\n`, "utf8");
57
142
  const moduleSource = [
58
143
  `// Generated by @typed-sql/cli ${metadata.generatorVersion}. Schema metadata only; do not edit.`,
59
- `export const schema = ${JSON.stringify(versionedSchema, null, 2)} as const;`,
144
+ `export const schema = ${JSON.stringify(canonicalizeSchemaValue(serializedSchema), null, 2)} as const;`,
60
145
  `export const metadata = ${JSON.stringify(metadata, null, 2)} as const;`,
61
146
  "export type DatabaseSchema = typeof schema;",
62
147
  "",
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/generator.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- export type { GenerateSchemaOptions, SchemaDriftResult } from "./generator.js";
2
- export { calculateSchemaHash, calculateTypePolicyHash, checkSchemaDrift, generateSchemaPackage } from "./generator.js";
3
- export { loadGeneratedSchemaSnapshot, loadSchemaSnapshot, loadTypePolicy, migrateSchemaSnapshot, parseSchemaSnapshot, parseTypePolicy, } from "./loader.js";
4
- export type { ColumnSnapshot, DomainSnapshot, FunctionSnapshot, GeneratedSchemaMetadata, GeneratedSchemaSnapshot, SchemaInput, SchemaProvider, SchemaSnapshot, SqlDialect, TableSnapshot, TypePolicy, } from "./model.js";
5
- export { SCHEMA_FORMAT_VERSION } from "./model.js";
1
+ export type { GenerateSchemaOptions, SchemaDriftChange, SchemaDriftChangeKind, SchemaDriftResult, } from "./generator.js";
2
+ export { calculateSchemaHash, calculateTypePolicyHash, canonicalizeSchemaValue, checkSchemaDrift, fingerprintSchemaExpression, generateSchemaPackage, serializeSchemaSnapshot, } from "./generator.js";
3
+ export { loadGeneratedSchemaSnapshot, loadSchemaSnapshot, loadTypePolicy, migrateSchemaSnapshot, parseSchemaSnapshot, parseTypePolicy, upgradeSchemaSnapshotV1, } from "./loader.js";
4
+ export type { CheckConstraintSnapshot, CollectionTypeSnapshot, ColumnSnapshot, ColumnSnapshotV2, CompositeTypeFieldSnapshot, CompositeTypeSnapshot, ConstraintSnapshot, DialectExtensionSnapshot, DialectExtensionValue, DialectServerEvidence, DomainSnapshot, DomainTypeSnapshot, Eligibility, EnumTypeSnapshot, ExclusionConstraintElementSnapshot, ExclusionConstraintSnapshot, ForeignKeyAction, ForeignKeyConstraintSnapshot, FunctionSnapshot, GeneratedColumnKind, GeneratedSchemaMetadata, GeneratedSchemaSnapshot, IdentityColumnKind, IndexColumnSnapshot, IndexSnapshot, NamespaceSnapshot, NullabilitySource, OpaqueTypeSnapshot, PrimaryKeyConstraintSnapshot, RangeTypeSnapshot, RelationSnapshot, RoutineArgumentMode, RoutineArgumentSnapshot, RoutineResultSnapshot, RoutineSnapshot, ScalarTypeSnapshot, SchemaInput, SchemaProvider, SchemaSnapshot, SchemaSnapshotV1, SchemaSnapshotV2, SchemaSnapshotV2Envelope, SqlDialect, TableSnapshot, TypePolicy, TypeSnapshot, UniqueConstraintSnapshot, } from "./model.js";
5
+ export { LEGACY_SCHEMA_FORMAT_VERSION, SCHEMA_FORMAT_VERSION } from "./model.js";
6
+ export { defineSchemaSnapshotV2 } from "./v2/codec.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvH,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,EACX,cAAc,EACd,cAAc,EACd,UAAU,EACV,aAAa,EACb,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,kCAAkC,EAClC,2BAA2B,EAC3B,gBAAgB,EAChB,4BAA4B,EAC5B,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,4BAA4B,EAC5B,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,UAAU,EACV,aAAa,EACb,UAAU,EACV,YAAY,EACZ,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,4 +1,5 @@
1
- export { calculateSchemaHash, calculateTypePolicyHash, checkSchemaDrift, generateSchemaPackage } from "./generator.js";
2
- export { loadGeneratedSchemaSnapshot, loadSchemaSnapshot, loadTypePolicy, migrateSchemaSnapshot, parseSchemaSnapshot, parseTypePolicy, } from "./loader.js";
3
- export { SCHEMA_FORMAT_VERSION } from "./model.js";
1
+ export { calculateSchemaHash, calculateTypePolicyHash, canonicalizeSchemaValue, checkSchemaDrift, fingerprintSchemaExpression, generateSchemaPackage, serializeSchemaSnapshot, } from "./generator.js";
2
+ export { loadGeneratedSchemaSnapshot, loadSchemaSnapshot, loadTypePolicy, migrateSchemaSnapshot, parseSchemaSnapshot, parseTypePolicy, upgradeSchemaSnapshotV1, } from "./loader.js";
3
+ export { LEGACY_SCHEMA_FORMAT_VERSION, SCHEMA_FORMAT_VERSION } from "./model.js";
4
+ export { defineSchemaSnapshotV2 } from "./v2/codec.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvH,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,GAChB,MAAM,aAAa,CAAC;AAcrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAkDrB,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import type { GeneratedSchemaSnapshot, SchemaSnapshot, TypePolicy } from "./model.js";
2
+ import { upgradeSchemaSnapshotV1 } from "./v1/upgrade.js";
3
+ /** Dispatches to the isolated v1 or v2 codec. Unversioned historical input is v1. */
2
4
  export declare function parseSchemaSnapshot(value: unknown): SchemaSnapshot;
3
- /**
4
- * Migrates an unversioned pre-1.0 snapshot to the stable v1 format and validates
5
- * already-versioned input. Future format migrations are added here.
6
- */
5
+ /** Validates historical input without silently changing its on-disk format. */
7
6
  export declare function migrateSchemaSnapshot(value: unknown): SchemaSnapshot;
7
+ export { upgradeSchemaSnapshotV1 };
8
8
  export declare function loadSchemaSnapshot(path: string): Promise<SchemaSnapshot>;
9
9
  export declare function loadGeneratedSchemaSnapshot(path: string): Promise<GeneratedSchemaSnapshot>;
10
10
  export declare function parseTypePolicy(value: unknown): TypePolicy;
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,uBAAuB,EACvB,cAAc,EAEd,UAAU,EACX,MAAM,YAAY,CAAC;AA4GpB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAkClE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAEpE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAG9E;AAeD,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAKhG;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAG1D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAEtE"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2B,uBAAuB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG/G,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAO1D,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAqBlE;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAEpE;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAG9E;AAmBD,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAKhG;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAG1D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAEtE"}
@@ -1,163 +1,37 @@
1
1
  import { readFile } from "node:fs/promises";
2
- import { SCHEMA_FORMAT_VERSION } from "./model.js";
3
- function isRecord(value) {
2
+ import { LEGACY_SCHEMA_FORMAT_VERSION, SCHEMA_FORMAT_VERSION } from "./model.js";
3
+ import { parseSchemaSnapshotV1 } from "./v1/codec.js";
4
+ import { upgradeSchemaSnapshotV1 } from "./v1/upgrade.js";
5
+ import { parseSchemaSnapshotV2 } from "./v2/codec.js";
6
+ function record(value) {
4
7
  return typeof value === "object" && value !== null && !Array.isArray(value);
5
8
  }
6
- function parseColumn(value, path) {
7
- if (!isRecord(value))
8
- throw new TypeError(`${path} must be an object`);
9
- if (typeof value.name !== "string")
10
- throw new TypeError(`${path}.name must be a string`);
11
- if (typeof value.databaseType !== "string")
12
- throw new TypeError(`${path}.databaseType must be a string`);
13
- if (typeof value.tsType !== "string")
14
- throw new TypeError(`${path}.tsType must be a string`);
15
- if (typeof value.nullable !== "boolean")
16
- throw new TypeError(`${path}.nullable must be a boolean`);
17
- if (value.array !== undefined && typeof value.array !== "boolean")
18
- throw new TypeError(`${path}.array must be a boolean`);
19
- if (value.defaultExpression !== undefined && typeof value.defaultExpression !== "string") {
20
- throw new TypeError(`${path}.defaultExpression must be a string`);
21
- }
22
- return {
23
- name: value.name,
24
- databaseType: value.databaseType,
25
- tsType: value.tsType,
26
- nullable: value.nullable,
27
- ...(value.array === undefined ? {} : { array: value.array }),
28
- ...(value.defaultExpression === undefined ? {} : { defaultExpression: value.defaultExpression }),
29
- };
30
- }
31
- function parseTable(value, path) {
32
- if (!isRecord(value))
33
- throw new TypeError(`${path} must be an object`);
34
- if (typeof value.name !== "string")
35
- throw new TypeError(`${path}.name must be a string`);
36
- if (value.schema !== undefined && typeof value.schema !== "string")
37
- throw new TypeError(`${path}.schema must be a string`);
38
- if (!isRecord(value.columns))
39
- throw new TypeError(`${path}.columns must be an object`);
40
- const columns = {};
41
- for (const [name, column] of Object.entries(value.columns))
42
- columns[name] = parseColumn(column, `${path}.columns.${name}`);
43
- return { name: value.name, columns, ...(value.schema === undefined ? {} : { schema: value.schema }) };
44
- }
45
- function parseDomain(value, path) {
46
- if (!isRecord(value))
47
- throw new TypeError(`${path} must be an object`);
48
- if (typeof value.name !== "string")
49
- throw new TypeError(`${path}.name must be a string`);
50
- if (typeof value.databaseType !== "string")
51
- throw new TypeError(`${path}.databaseType must be a string`);
52
- if (typeof value.tsType !== "string")
53
- throw new TypeError(`${path}.tsType must be a string`);
54
- if (typeof value.nullable !== "boolean")
55
- throw new TypeError(`${path}.nullable must be a boolean`);
56
- return { name: value.name, databaseType: value.databaseType, tsType: value.tsType, nullable: value.nullable };
57
- }
58
- function parseFunction(value, path) {
59
- if (!isRecord(value))
60
- throw new TypeError(`${path} must be an object`);
61
- if (typeof value.name !== "string")
62
- throw new TypeError(`${path}.name must be a string`);
63
- if (!Array.isArray(value.argumentTypes) || value.argumentTypes.some((item) => typeof item !== "string")) {
64
- throw new TypeError(`${path}.argumentTypes must be a string array`);
65
- }
66
- if (typeof value.returnType !== "string")
67
- throw new TypeError(`${path}.returnType must be a string`);
68
- if (typeof value.nullable !== "boolean")
69
- throw new TypeError(`${path}.nullable must be a boolean`);
70
- if (value.schema !== undefined && typeof value.schema !== "string")
71
- throw new TypeError(`${path}.schema must be a string`);
72
- if (value.databaseReturnType !== undefined && typeof value.databaseReturnType !== "string") {
73
- throw new TypeError(`${path}.databaseReturnType must be a string`);
74
- }
75
- if (value.setReturning !== undefined && typeof value.setReturning !== "boolean") {
76
- throw new TypeError(`${path}.setReturning must be a boolean`);
77
- }
78
- if (value.volatility !== undefined &&
79
- value.volatility !== "immutable" &&
80
- value.volatility !== "stable" &&
81
- value.volatility !== "volatile") {
82
- throw new TypeError(`${path}.volatility must be immutable, stable, or volatile`);
83
- }
84
- return {
85
- name: value.name,
86
- argumentTypes: value.argumentTypes,
87
- returnType: value.returnType,
88
- nullable: value.nullable,
89
- ...(value.schema === undefined ? {} : { schema: value.schema }),
90
- ...(value.databaseReturnType === undefined ? {} : { databaseReturnType: value.databaseReturnType }),
91
- ...(value.setReturning === undefined ? {} : { setReturning: value.setReturning }),
92
- ...(value.volatility === undefined ? {} : { volatility: value.volatility }),
93
- };
94
- }
95
- function parseStringArrays(value, path) {
96
- if (!isRecord(value))
97
- throw new TypeError(`${path} must be an object`);
98
- const result = {};
99
- for (const [name, labels] of Object.entries(value)) {
100
- if (!Array.isArray(labels) || labels.some((label) => typeof label !== "string")) {
101
- throw new TypeError(`${path}.${name} must be a string array`);
102
- }
103
- result[name] = labels;
104
- }
105
- return result;
106
- }
107
- function parseObjectMap(value, path, parser) {
108
- if (!isRecord(value))
109
- throw new TypeError(`${path} must be an object`);
110
- const result = {};
111
- for (const [name, item] of Object.entries(value))
112
- result[name] = parser(item, `${path}.${name}`);
113
- return result;
114
- }
9
+ /** Dispatches to the isolated v1 or v2 codec. Unversioned historical input is v1. */
115
10
  export function parseSchemaSnapshot(value) {
116
- if (!isRecord(value))
11
+ if (!record(value))
117
12
  throw new TypeError("Schema snapshot must be an object");
118
- if (typeof value.dialect !== "string" || value.dialect.length === 0)
119
- throw new TypeError("schema.dialect must be a non-empty string");
120
- if (value.dialectVersion !== undefined &&
121
- (typeof value.dialectVersion !== "string" || value.dialectVersion.length === 0))
122
- throw new TypeError("schema.dialectVersion must be a non-empty string");
123
- if (!isRecord(value.tables))
124
- throw new TypeError("schema.tables must be an object");
125
- const tables = {};
126
- for (const [name, table] of Object.entries(value.tables))
127
- tables[name] = parseTable(table, `schema.tables.${name}`);
128
- const snapshot = {
129
- formatVersion: value.formatVersion === undefined
130
- ? SCHEMA_FORMAT_VERSION
131
- : value.formatVersion === SCHEMA_FORMAT_VERSION
132
- ? SCHEMA_FORMAT_VERSION
133
- : (() => {
134
- throw new TypeError(`Unsupported schema.formatVersion ${String(value.formatVersion)}; this release supports format ${SCHEMA_FORMAT_VERSION}`);
135
- })(),
136
- dialect: value.dialect,
137
- ...(value.dialectVersion === undefined ? {} : { dialectVersion: value.dialectVersion }),
138
- tables,
139
- ...(typeof value.version === "string" ? { version: value.version } : {}),
140
- ...(value.enums === undefined ? {} : { enums: parseStringArrays(value.enums, "schema.enums") }),
141
- ...(value.domains === undefined ? {} : { domains: parseObjectMap(value.domains, "schema.domains", parseDomain) }),
142
- ...(value.functions === undefined
143
- ? {}
144
- : { functions: parseObjectMap(value.functions, "schema.functions", parseFunction) }),
145
- };
146
- return snapshot;
13
+ if (value.formatVersion === SCHEMA_FORMAT_VERSION) {
14
+ // Public v2 values carry derived v1 projections for the typed-sql 2 transition. Strip only
15
+ // those recognized projections so validation is idempotent while every other extra key fails.
16
+ const { version: _version, tables: _tables, enums: _enums, domains: _domains, functions: _functions, ...envelope } = value;
17
+ return parseSchemaSnapshotV2(envelope);
18
+ }
19
+ if (value.formatVersion === undefined || value.formatVersion === LEGACY_SCHEMA_FORMAT_VERSION) {
20
+ return parseSchemaSnapshotV1(value);
21
+ }
22
+ throw new TypeError(`Unsupported schema.formatVersion ${String(value.formatVersion)}; this release supports formats ${LEGACY_SCHEMA_FORMAT_VERSION} and ${SCHEMA_FORMAT_VERSION}`);
147
23
  }
148
- /**
149
- * Migrates an unversioned pre-1.0 snapshot to the stable v1 format and validates
150
- * already-versioned input. Future format migrations are added here.
151
- */
24
+ /** Validates historical input without silently changing its on-disk format. */
152
25
  export function migrateSchemaSnapshot(value) {
153
26
  return parseSchemaSnapshot(value);
154
27
  }
28
+ export { upgradeSchemaSnapshotV1 };
155
29
  export async function loadSchemaSnapshot(path) {
156
30
  const source = await readFile(path, "utf8");
157
31
  return parseSchemaSnapshot(JSON.parse(source));
158
32
  }
159
33
  function parseMetadata(value) {
160
- if (!isRecord(value))
34
+ if (!record(value))
161
35
  throw new TypeError("schema.metadata must be an object");
162
36
  if (typeof value.generatorVersion !== "string")
163
37
  throw new TypeError("schema.metadata.generatorVersion must be a string");
@@ -165,21 +39,25 @@ function parseMetadata(value) {
165
39
  throw new TypeError("schema.metadata.schemaHash must be a string");
166
40
  if (typeof value.typePolicyHash !== "string")
167
41
  throw new TypeError("schema.metadata.typePolicyHash must be a string");
42
+ if (value.schemaFormat !== undefined && value.schemaFormat !== 1 && value.schemaFormat !== 2) {
43
+ throw new TypeError("schema.metadata.schemaFormat must be 1 or 2");
44
+ }
168
45
  return {
169
46
  generatorVersion: value.generatorVersion,
170
47
  schemaHash: value.schemaHash,
171
48
  typePolicyHash: value.typePolicyHash,
49
+ ...(value.schemaFormat === undefined ? {} : { schemaFormat: value.schemaFormat }),
172
50
  };
173
51
  }
174
52
  export async function loadGeneratedSchemaSnapshot(path) {
175
53
  const source = await readFile(path, "utf8");
176
54
  const value = JSON.parse(source);
177
- if (!isRecord(value))
55
+ if (!record(value))
178
56
  throw new TypeError("Generated schema snapshot must be an object");
179
57
  return { ...parseSchemaSnapshot(value), metadata: parseMetadata(value.metadata) };
180
58
  }
181
59
  export function parseTypePolicy(value) {
182
- if (!isRecord(value))
60
+ if (!record(value))
183
61
  throw new TypeError("Type policy must be an object");
184
62
  return value;
185
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/loader.ts"],"names":[],"mappings":"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"}