@typed-sql/schema 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.
- package/CHANGELOG.md +34 -0
- package/dist/packages/schema/src/generator.d.ts +29 -1
- package/dist/packages/schema/src/generator.d.ts.map +1 -1
- package/dist/packages/schema/src/generator.js +104 -19
- package/dist/packages/schema/src/generator.js.map +1 -1
- package/dist/packages/schema/src/index.d.ts +6 -5
- package/dist/packages/schema/src/index.d.ts.map +1 -1
- package/dist/packages/schema/src/index.js +4 -3
- package/dist/packages/schema/src/index.js.map +1 -1
- package/dist/packages/schema/src/loader.d.ts +4 -4
- package/dist/packages/schema/src/loader.d.ts.map +1 -1
- package/dist/packages/schema/src/loader.js +26 -148
- package/dist/packages/schema/src/loader.js.map +1 -1
- package/dist/packages/schema/src/model.d.ts +13 -44
- package/dist/packages/schema/src/model.d.ts.map +1 -1
- package/dist/packages/schema/src/model.js +2 -1
- package/dist/packages/schema/src/model.js.map +1 -1
- package/dist/packages/schema/src/v1/codec.d.ts +3 -0
- package/dist/packages/schema/src/v1/codec.d.ts.map +1 -0
- package/dist/packages/schema/src/v1/codec.js +151 -0
- package/dist/packages/schema/src/v1/codec.js.map +1 -0
- package/dist/packages/schema/src/v1/model.d.ts +44 -0
- package/dist/packages/schema/src/v1/model.d.ts.map +1 -0
- package/dist/packages/schema/src/v1/model.js +2 -0
- package/dist/packages/schema/src/v1/model.js.map +1 -0
- package/dist/packages/schema/src/v1/upgrade.d.ts +5 -0
- package/dist/packages/schema/src/v1/upgrade.d.ts.map +1 -0
- package/dist/packages/schema/src/v1/upgrade.js +141 -0
- package/dist/packages/schema/src/v1/upgrade.js.map +1 -0
- package/dist/packages/schema/src/v2/codec.d.ts +8 -0
- package/dist/packages/schema/src/v2/codec.d.ts.map +1 -0
- package/dist/packages/schema/src/v2/codec.js +659 -0
- package/dist/packages/schema/src/v2/codec.js.map +1 -0
- package/dist/packages/schema/src/v2/model.d.ts +231 -0
- package/dist/packages/schema/src/v2/model.d.ts.map +1 -0
- package/dist/packages/schema/src/v2/model.js +2 -0
- package/dist/packages/schema/src/v2/model.js.map +1 -0
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
# @typed-sql/schema
|
|
2
2
|
|
|
3
|
+
## 2.1.0-rc.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Publish the coherent 2.1.0-rc.1 release-candidate train.
|
|
8
|
+
|
|
9
|
+
## 2.1.0-rc.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 1c64475: Add canonical schema snapshot format 2 with isolated v1/v2 codecs, conservative v1 upgrades,
|
|
14
|
+
neutral relation/constraint/index/type/routine evidence, and complete provider introspection.
|
|
15
|
+
Resolvers now consume structural write and routine evidence, while drift, compatibility, manifests,
|
|
16
|
+
verification proofs, and plan artifacts bind to the schema format and canonical hash.
|
|
17
|
+
- 1c64475: Add deterministic versioned dialect capability states backed by normalized server versions,
|
|
18
|
+
settings, extensions, and compile options. Query manifests now invalidate on capability changes and
|
|
19
|
+
record evidence for capabilities each query uses, while the CLI exposes a human-readable capability
|
|
20
|
+
report. The boolean capability map remains available as an additive migration bridge.
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- Updated dependencies [58bd4d1]
|
|
25
|
+
- Updated dependencies [58aa9ef]
|
|
26
|
+
- Updated dependencies [65b662f]
|
|
27
|
+
- Updated dependencies [e433feb]
|
|
28
|
+
- Updated dependencies [0efc90c]
|
|
29
|
+
- Updated dependencies [ff0e3bb]
|
|
30
|
+
- Updated dependencies [6f5b977]
|
|
31
|
+
- Updated dependencies [1c64475]
|
|
32
|
+
- Updated dependencies [1c64475]
|
|
33
|
+
- Updated dependencies [1c64475]
|
|
34
|
+
- Updated dependencies [1c64475]
|
|
35
|
+
- @typed-sql/core@2.1.0-rc.0
|
|
36
|
+
|
|
3
37
|
## 2.0.0
|
|
4
38
|
|
|
5
39
|
### Minor Changes
|
|
@@ -5,7 +5,28 @@ export interface GenerateSchemaOptions {
|
|
|
5
5
|
readonly generatorVersion?: string;
|
|
6
6
|
readonly dialectVersion?: string;
|
|
7
7
|
}
|
|
8
|
-
|
|
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,
|
|
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
|
-
|
|
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(
|
|
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,
|
|
14
|
+
.map(([key, item]) => [key, canonicalizeSchemaValue(item)]));
|
|
13
15
|
}
|
|
14
16
|
const hash = (value) => createHash("sha256")
|
|
15
|
-
.update(JSON.stringify(
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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(
|
|
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({ ...
|
|
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(
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AA2BhF,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAc,EAAU,EAAE,CACtC,UAAU,CAAC,QAAQ,CAAC;KACjB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;KACtD,MAAM,CAAC,KAAK,CAAC,CAAC;AAEnB,+FAA+F;AAC/F,MAAM,UAAU,2BAA2B,CAAC,UAAkB;IAC5D,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,cAAc,CAAC,MAAuB;IAC7C,IAAI,MAAM,CAAC,aAAa,KAAK,qBAAqB,EAAE,CAAC;QACnD,IACE,MAAM,CAAC,cAAc,KAAK,SAAS;YACnC,MAAM,CAAC,MAAM,KAAK,SAAS;YAC3B,MAAM,CAAC,UAAU,KAAK,SAAS;YAC/B,MAAM,CAAC,KAAK,KAAK,SAAS;YAC1B,MAAM,CAAC,SAAS,KAAK,SAAS;YAC9B,MAAM,CAAC,QAAQ,KAAK,SAAS,EAC7B,CAAC;YACD,MAAM,IAAI,SAAS,CAAC,2DAA2D,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,UAAU,GAAG,qBAAqB,CAAC,wBAAwB,CAAC,MAA0B,CAAC,CAAC,CAAC;QAC/F,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;QAClF,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAsB,EAAE,OAAgB;IAC9E,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAuB;IACzD,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAe;IACrD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AA8BD,SAAS,SAAS,CAAC,IAAa,EAAE,KAAc;IAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,WAAW,CAClB,IAA2B,EAC3B,IAAuC,EACvC,KAAwC;IAExC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC/D,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;SACjD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,kBAAkB,CACzB,SAAkC,EAClC,OAAuB,EACvB,aAAsB,EACtB,iBAA0B;IAE1B,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,SAAS,CAAC,aAAa,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QACjE,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACjH,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9E,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACrH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,aAAa,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACpG,IAAI,iBAAiB;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;IACjF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACjH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,SAAkC,EAClC,OAAuB,EACvB,MAAM,GAAY,EAAE;IAEpB,MAAM,iBAAiB,GACrB,SAAS,CAAC,aAAa,KAAK,qBAAqB;QAC/C,CAAC,CAAC;YACE,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACjG,cAAc,EAAE,SAAS,CAAC,cAAc;SACzC;QACH,CAAC,CAAC,OAAO,CAAC,aAAa,KAAK,4BAA4B;YACtD,CAAC,CAAC;gBACE,GAAG,OAAO;gBACV,GAAG,CAAC,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC;aAChG;YACH,CAAC,CAAE;gBACC,aAAa,EAAE,4BAA4B;gBAC3C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,CAAC,SAAS,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC;gBAC/F,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBAC/B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;aACjD,CAAC;IACtC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,KAAK,gBAAgB,CAAC;IACzE,MAAM,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,cAAc,KAAK,oBAAoB,CAAC;IACrF,OAAO;QACL,OAAO,EAAE,aAAa,IAAI,iBAAiB;QAC3C,aAAa;QACb,iBAAiB;QACjB,kBAAkB,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU;QACjD,gBAAgB;QAChB,sBAAsB,EAAE,SAAS,CAAC,QAAQ,CAAC,cAAc;QACzD,oBAAoB;QACpB,OAAO,EAAE,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,CAAC;KAC5F,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAsB,EACtB,OAA8B;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IACxC,MAAM,eAAe,GACnB,MAAM,CAAC,aAAa,KAAK,qBAAqB;QAC5C,CAAC,CAAC;YACE,GAAG,MAAM;YACT,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SAC5F;QACH,CAAC,CAAC,uBAAuB,CAAC;YACtB,GAAG,MAAM;YACT,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SAC5F,CAAC,CAAC;IACT,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAA4B;QACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,OAAO;QACrD,UAAU,EAAE,mBAAmB,CAAC,gBAAgB,CAAC;QACjD,cAAc,EAAE,uBAAuB,CAAC,MAAM,CAAC;QAC/C,YAAY,EAAE,qBAAqB;KACpC,CAAC;IACF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;IACpE,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,SAAS,CACb,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,EACnC,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,GAAG,gBAAgB,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAC1F,MAAM,CACP,CAAC;IACF,MAAM,YAAY,GAAG;QACnB,kCAAkC,QAAQ,CAAC,gBAAgB,sCAAsC;QACjG,yBAAyB,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY;QACvG,2BAA2B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY;QACxE,6CAA6C;QAC7C,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACxE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -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,
|
|
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":"
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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 (!
|
|
11
|
+
if (!record(value))
|
|
117
12
|
throw new TypeError("Schema snapshot must be an object");
|
|
118
|
-
if (
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/loader.ts"],"names":[],"mappings":"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"}
|