@prisma-next/family-sql 0.9.0-dev.7 → 0.9.0-dev.9
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/dist/control.d.mts +1 -1
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs +99 -55
- package/dist/control.mjs.map +1 -1
- package/dist/ir.d.mts +5 -41
- package/dist/ir.d.mts.map +1 -1
- package/dist/ir.mjs +1 -1
- package/dist/migration.d.mts +1 -1
- package/dist/schema-verify.d.mts.map +1 -1
- package/dist/schema-verify.mjs +1 -1
- package/dist/{sql-contract-serializer-qUQCnP-k.mjs → sql-contract-serializer-C6ypWJYR.mjs} +22 -43
- package/dist/sql-contract-serializer-C6ypWJYR.mjs.map +1 -0
- package/dist/{types-DMINfGUO.d.mts → types-hQoMXr54.d.mts} +4 -3
- package/dist/types-hQoMXr54.d.mts.map +1 -0
- package/dist/verify-sql-schema-Bfvz07Ik.d.mts.map +1 -1
- package/dist/{verify-sql-schema-BXw7yx6L.mjs → verify-sql-schema-Bj4Wqe2c.mjs} +99 -63
- package/dist/verify-sql-schema-Bj4Wqe2c.mjs.map +1 -0
- package/package.json +21 -21
- package/src/core/control-instance.ts +11 -4
- package/src/core/ir/sql-contract-serializer-base.ts +58 -47
- package/src/core/migrations/contract-to-schema-ir.ts +82 -33
- package/src/core/migrations/field-event-planner.ts +53 -29
- package/src/core/migrations/types.ts +2 -1
- package/src/core/psl-contract-infer/sql-schema-ir-to-psl-ast.ts +17 -3
- package/src/core/schema-verify/verify-helpers.ts +44 -14
- package/src/core/schema-verify/verify-sql-schema.ts +106 -47
- package/dist/sql-contract-serializer-qUQCnP-k.mjs.map +0 -1
- package/dist/types-DMINfGUO.d.mts.map +0 -1
- package/dist/verify-sql-schema-BXw7yx6L.mjs.map +0 -1
package/dist/ir.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ContractSerializer, SchemaIssue, SchemaVerifier, SchemaVerifyOptions, SchemaVerifyResult } from "@prisma-next/framework-components/control";
|
|
2
|
-
import {
|
|
2
|
+
import { Namespace } from "@prisma-next/framework-components/ir";
|
|
3
|
+
import { SqlNamespaceTablesInput, SqlStorage, SqlStorageTypeEntry } from "@prisma-next/sql-contract/types";
|
|
3
4
|
import { Contract } from "@prisma-next/contract/types";
|
|
4
5
|
import { JsonObject } from "@prisma-next/utils/json";
|
|
5
6
|
|
|
@@ -32,50 +33,13 @@ type SqlEntityHydrationFactory = (entry: unknown) => SqlStorageTypeEntry;
|
|
|
32
33
|
declare abstract class SqlContractSerializerBase<TContract extends Contract<SqlStorage>> implements ContractSerializer<TContract> {
|
|
33
34
|
private readonly entityTypeRegistry;
|
|
34
35
|
constructor(entityTypeRegistry: ReadonlyMap<string, SqlEntityHydrationFactory>);
|
|
35
|
-
deserializeContract(json: unknown):
|
|
36
|
+
deserializeContract<T extends TContract = TContract>(json: unknown): T;
|
|
36
37
|
serializeContract(contract: TContract): JsonObject;
|
|
37
|
-
/**
|
|
38
|
-
* Family-shared validation pipeline (delegates to
|
|
39
|
-
* `validateSqlContractFully` in `@prisma-next/sql-contract/validators`):
|
|
40
|
-
* structural arktype + framework-shared domain + SQL storage
|
|
41
|
-
* logical-consistency + SQL storage semantic + model ↔ storage
|
|
42
|
-
* reference checks. Subclasses override to add target-specific
|
|
43
|
-
* structural checks before hydration; the family default suffices
|
|
44
|
-
* for targets whose contract shape is the SQL-shared shape
|
|
45
|
-
* (Postgres, SQLite today).
|
|
46
|
-
*/
|
|
47
38
|
protected parseSqlContractStructure(json: unknown): Contract<SqlStorage>;
|
|
48
|
-
/**
|
|
49
|
-
* Family-shared hydration walker. Lifts the validated flat-data
|
|
50
|
-
* `storage` subtree into the SQL Contract IR class hierarchy by
|
|
51
|
-
* constructing a single `SqlStorage` instance — its constructor
|
|
52
|
-
* cascades nested instantiation of `StorageTable`, `StorageColumn`,
|
|
53
|
-
* `PrimaryKey`, `UniqueConstraint`, `Index`, `ForeignKey`,
|
|
54
|
-
* `ForeignKeyReferences`, and `StorageTypeInstance`. The rest of the
|
|
55
|
-
* contract envelope (target identity, hashes, capabilities, models,
|
|
56
|
-
* meta, …) is JSON-clean primitive data and passes through unchanged.
|
|
57
|
-
*
|
|
58
|
-
* Polymorphic `storage.types` entries are normalised before the
|
|
59
|
-
* `SqlStorage` constructor runs: when an entry carries an enumerable
|
|
60
|
-
* string `kind`, the serializer looks up a pack-registered hydration
|
|
61
|
-
* factory for that discriminator and delegates reconstruction. Entries
|
|
62
|
-
* with no registered factory pass through unchanged (codec-typed JSON
|
|
63
|
-
* stays codec-typed until `SqlStorage` normalises it).
|
|
64
|
-
*/
|
|
65
39
|
protected hydrateSqlStorage(validated: Contract<SqlStorage>): Contract<SqlStorage>;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
* string and the constructor registry supplies a factory for that key,
|
|
69
|
-
* the factory returns the hydrated `SqlStorageTypeEntry`. Otherwise the
|
|
70
|
-
* entry passes through unchanged for `SqlStorage` to normalise.
|
|
71
|
-
*/
|
|
40
|
+
protected hydrateSqlNamespaceMap(namespaces: Readonly<Record<string, Namespace | Record<string, unknown>>>): Readonly<Record<string, Namespace | SqlNamespaceTablesInput>>;
|
|
41
|
+
protected hydrateSqlNamespaceEntry(nsId: string, raw: Namespace | Record<string, unknown>): Namespace | SqlNamespaceTablesInput;
|
|
72
42
|
protected hydrateStorageTypeEntry(entry: SqlStorageTypeEntry): SqlStorageTypeEntry;
|
|
73
|
-
/**
|
|
74
|
-
* Target-specific construction hook. Defaults to identity; targets
|
|
75
|
-
* that need to wrap the hydrated contract (e.g. attach target-only
|
|
76
|
-
* derived fields, narrow the contract type to a target-specific
|
|
77
|
-
* subtype) override.
|
|
78
|
-
*/
|
|
79
43
|
protected constructTargetContract(hydrated: Contract<SqlStorage>): TContract;
|
|
80
44
|
}
|
|
81
45
|
//#endregion
|
package/dist/ir.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir.d.mts","names":[],"sources":["../src/core/ir/sql-contract-serializer-base.ts","../src/core/ir/sql-contract-serializer.ts","../src/core/ir/sql-schema-verifier-base.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ir.d.mts","names":[],"sources":["../src/core/ir/sql-contract-serializer-base.ts","../src/core/ir/sql-contract-serializer.ts","../src/core/ir/sql-schema-verifier-base.ts"],"mappings":";;;;;;;KAcY,yBAAA,IAA6B,KAAA,cAAmB,mBAAA;;AAA5D;;;;;AA0BA;;;;;;;;;;;;;;;;;;uBAAsB,yBAAA,mBAA4C,QAAA,CAAS,UAAA,cAC9D,kBAAA,CAAmB,SAAA;EAAA,iBAGX,kBAAA;cAAA,kBAAA,EAAoB,WAAA,SAAoB,yBAAA;EAG3D,mBAAA,WAA8B,SAAA,GAAY,SAAA,CAAA,CAAW,IAAA,YAAgB,CAAA;EAMrE,iBAAA,CAAkB,QAAA,EAAU,SAAA,GAAY,UAAA;EAAA,UAI9B,yBAAA,CAA0B,IAAA,YAAgB,QAAA,CAAS,UAAA;EAAA,UAInD,iBAAA,CAAkB,SAAA,EAAW,QAAA,CAAS,UAAA,IAAc,QAAA,CAAS,UAAA;EAAA,UA0B7D,sBAAA,CACR,UAAA,EAAY,QAAA,CAAS,MAAA,SAAe,SAAA,GAAY,MAAA,sBAC/C,QAAA,CAAS,MAAA,SAAe,SAAA,GAAY,uBAAA;EAAA,UAS7B,wBAAA,CACR,IAAA,UACA,GAAA,EAAK,SAAA,GAAY,MAAA,oBAChB,SAAA,GAAY,uBAAA;EAAA,UA2BL,uBAAA,CAAwB,KAAA,EAAO,mBAAA,GAAsB,mBAAA;EAAA,UAerD,uBAAA,CAAwB,QAAA,EAAU,QAAA,CAAS,UAAA,IAAc,SAAA;AAAA;;;;;;;AAjIrE;;;;;cCDa,qBAAA,SAA8B,yBAAA,CAA0B,QAAA,CAAS,UAAA;;;;;;;;;;;ADC9E;;;;;AA0BA;;;;;;;;;uBEbsB,qBAAA,gCACT,cAAA,CAAe,SAAA,EAAW,OAAA;EAErC,YAAA,CAAa,OAAA,EAAS,mBAAA,CAAoB,SAAA,EAAW,OAAA,IAAW,kBAAA;EFuBpC;;;;;;EAAA,mBEVT,qBAAA,CACjB,OAAA,EAAS,mBAAA,CAAoB,SAAA,EAAW,OAAA,aAC9B,WAAA;EFgBkD;;;;;EAAA,mBET3C,sBAAA,CACjB,OAAA,EAAS,mBAAA,CAAoB,SAAA,EAAW,OAAA,aAC9B,WAAA;AAAA"}
|
package/dist/ir.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as SqlContractSerializerBase, t as SqlContractSerializer } from "./sql-contract-serializer-
|
|
1
|
+
import { n as SqlContractSerializerBase, t as SqlContractSerializer } from "./sql-contract-serializer-C6ypWJYR.mjs";
|
|
2
2
|
//#region src/core/ir/sql-schema-verifier-base.ts
|
|
3
3
|
/**
|
|
4
4
|
* SQL family `SchemaVerifier` abstract base. Centralises the SQL-shared
|
package/dist/migration.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { O as SqlPlanTargetDetails, g as SqlMigrationPlanOperation } from "./types-
|
|
1
|
+
import { O as SqlPlanTargetDetails, g as SqlMigrationPlanOperation } from "./types-hQoMXr54.mjs";
|
|
2
2
|
import { Migration } from "@prisma-next/migration-tools/migration";
|
|
3
3
|
|
|
4
4
|
//#region src/core/sql-migration.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-verify.d.mts","names":[],"sources":["../src/core/schema-verify/verify-helpers.ts"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"schema-verify.d.mts","names":[],"sources":["../src/core/schema-verify/verify-helpers.ts"],"mappings":";;;;;;;;iBAsDgB,WAAA,CAAY,CAAA,qBAAsB,CAAA;AA+BlD;;;;;;;;;;;AA0BA;AA1BA,iBAAgB,2BAAA,CACd,OAAA,WAAkB,WAAA,IAClB,OAAA,WAAkB,UAAA,IAClB,OAAA;;;;;;;;;;;;;iBAuBc,gBAAA,CACd,OAAA,WAAkB,UAAA,IAClB,OAAA,WAAkB,WAAA,IAClB,OAAA"}
|
package/dist/schema-verify.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as isUniqueConstraintSatisfied, n as arraysEqual, r as isIndexSatisfied, t as verifySqlSchema } from "./verify-sql-schema-
|
|
1
|
+
import { i as isUniqueConstraintSatisfied, n as arraysEqual, r as isIndexSatisfied, t as verifySqlSchema } from "./verify-sql-schema-Bj4Wqe2c.mjs";
|
|
2
2
|
export { arraysEqual, isIndexSatisfied, isUniqueConstraintSatisfied, verifySqlSchema };
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ContractValidationError } from "@prisma-next/contract/contract-validation-error";
|
|
2
|
+
import { NamespaceBase } from "@prisma-next/framework-components/ir";
|
|
3
|
+
import { SqlStorage, StorageTable } from "@prisma-next/sql-contract/types";
|
|
2
4
|
import { validateSqlContractFully } from "@prisma-next/sql-contract/validators";
|
|
3
5
|
//#region src/core/ir/sql-contract-serializer-base.ts
|
|
4
6
|
/**
|
|
@@ -38,53 +40,36 @@ var SqlContractSerializerBase = class {
|
|
|
38
40
|
serializeContract(contract) {
|
|
39
41
|
return contract;
|
|
40
42
|
}
|
|
41
|
-
/**
|
|
42
|
-
* Family-shared validation pipeline (delegates to
|
|
43
|
-
* `validateSqlContractFully` in `@prisma-next/sql-contract/validators`):
|
|
44
|
-
* structural arktype + framework-shared domain + SQL storage
|
|
45
|
-
* logical-consistency + SQL storage semantic + model ↔ storage
|
|
46
|
-
* reference checks. Subclasses override to add target-specific
|
|
47
|
-
* structural checks before hydration; the family default suffices
|
|
48
|
-
* for targets whose contract shape is the SQL-shared shape
|
|
49
|
-
* (Postgres, SQLite today).
|
|
50
|
-
*/
|
|
51
43
|
parseSqlContractStructure(json) {
|
|
52
44
|
return validateSqlContractFully(json);
|
|
53
45
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Family-shared hydration walker. Lifts the validated flat-data
|
|
56
|
-
* `storage` subtree into the SQL Contract IR class hierarchy by
|
|
57
|
-
* constructing a single `SqlStorage` instance — its constructor
|
|
58
|
-
* cascades nested instantiation of `StorageTable`, `StorageColumn`,
|
|
59
|
-
* `PrimaryKey`, `UniqueConstraint`, `Index`, `ForeignKey`,
|
|
60
|
-
* `ForeignKeyReferences`, and `StorageTypeInstance`. The rest of the
|
|
61
|
-
* contract envelope (target identity, hashes, capabilities, models,
|
|
62
|
-
* meta, …) is JSON-clean primitive data and passes through unchanged.
|
|
63
|
-
*
|
|
64
|
-
* Polymorphic `storage.types` entries are normalised before the
|
|
65
|
-
* `SqlStorage` constructor runs: when an entry carries an enumerable
|
|
66
|
-
* string `kind`, the serializer looks up a pack-registered hydration
|
|
67
|
-
* factory for that discriminator and delegates reconstruction. Entries
|
|
68
|
-
* with no registered factory pass through unchanged (codec-typed JSON
|
|
69
|
-
* stays codec-typed until `SqlStorage` normalises it).
|
|
70
|
-
*/
|
|
71
46
|
hydrateSqlStorage(validated) {
|
|
72
47
|
const types = validated.storage.types;
|
|
73
48
|
const hydratedTypes = types !== void 0 ? Object.fromEntries(Object.entries(types).map(([name, entry]) => [name, this.hydrateStorageTypeEntry(entry)])) : void 0;
|
|
49
|
+
const rawNamespaces = validated.storage.namespaces;
|
|
50
|
+
const hydratedNamespaces = rawNamespaces !== void 0 ? this.hydrateSqlNamespaceMap(rawNamespaces) : void 0;
|
|
74
51
|
return {
|
|
75
52
|
...validated,
|
|
76
53
|
storage: new SqlStorage({
|
|
77
|
-
|
|
78
|
-
...hydratedTypes !== void 0 ? { types: hydratedTypes } : {}
|
|
54
|
+
storageHash: validated.storage.storageHash,
|
|
55
|
+
...hydratedTypes !== void 0 ? { types: hydratedTypes } : {},
|
|
56
|
+
...hydratedNamespaces !== void 0 ? { namespaces: hydratedNamespaces } : {}
|
|
79
57
|
})
|
|
80
58
|
};
|
|
81
59
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
60
|
+
hydrateSqlNamespaceMap(namespaces) {
|
|
61
|
+
return Object.fromEntries(Object.entries(namespaces).map(([nsId, raw]) => [nsId, this.hydrateSqlNamespaceEntry(nsId, raw)]));
|
|
62
|
+
}
|
|
63
|
+
hydrateSqlNamespaceEntry(nsId, raw) {
|
|
64
|
+
if (raw instanceof NamespaceBase) return raw;
|
|
65
|
+
const obj = raw;
|
|
66
|
+
if (obj.types !== void 0 && Object.keys(obj.types).length > 0) throw new ContractValidationError("Per-schema database types (e.g. postgres-enum) under storage.namespaces[..].types require PostgresContractSerializer.", "structural");
|
|
67
|
+
const tables = Object.fromEntries(Object.entries(obj.tables ?? {}).map(([tableName, table]) => [tableName, table instanceof StorageTable ? table : new StorageTable(table)]));
|
|
68
|
+
return {
|
|
69
|
+
id: obj.id ?? nsId,
|
|
70
|
+
tables
|
|
71
|
+
};
|
|
72
|
+
}
|
|
88
73
|
hydrateStorageTypeEntry(entry) {
|
|
89
74
|
if (typeof entry !== "object" || entry === null) return entry;
|
|
90
75
|
const kind = entry.kind;
|
|
@@ -93,12 +78,6 @@ var SqlContractSerializerBase = class {
|
|
|
93
78
|
if (factory === void 0) return entry;
|
|
94
79
|
return factory(entry);
|
|
95
80
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Target-specific construction hook. Defaults to identity; targets
|
|
98
|
-
* that need to wrap the hydrated contract (e.g. attach target-only
|
|
99
|
-
* derived fields, narrow the contract type to a target-specific
|
|
100
|
-
* subtype) override.
|
|
101
|
-
*/
|
|
102
81
|
constructTargetContract(hydrated) {
|
|
103
82
|
return hydrated;
|
|
104
83
|
}
|
|
@@ -122,4 +101,4 @@ var SqlContractSerializer = class extends SqlContractSerializerBase {
|
|
|
122
101
|
//#endregion
|
|
123
102
|
export { SqlContractSerializerBase as n, SqlContractSerializer as t };
|
|
124
103
|
|
|
125
|
-
//# sourceMappingURL=sql-contract-serializer-
|
|
104
|
+
//# sourceMappingURL=sql-contract-serializer-C6ypWJYR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-contract-serializer-C6ypWJYR.mjs","names":[],"sources":["../src/core/ir/sql-contract-serializer-base.ts","../src/core/ir/sql-contract-serializer.ts"],"sourcesContent":["import { ContractValidationError } from '@prisma-next/contract/contract-validation-error';\nimport type { Contract } from '@prisma-next/contract/types';\nimport type { ContractSerializer } from '@prisma-next/framework-components/control';\nimport { type Namespace, NamespaceBase } from '@prisma-next/framework-components/ir';\nimport {\n type SqlNamespaceTablesInput,\n SqlStorage,\n type SqlStorageTypeEntry,\n StorageTable,\n type StorageTableInput,\n} from '@prisma-next/sql-contract/types';\nimport { validateSqlContractFully } from '@prisma-next/sql-contract/validators';\nimport type { JsonObject } from '@prisma-next/utils/json';\n\nexport type SqlEntityHydrationFactory = (entry: unknown) => SqlStorageTypeEntry;\n\n/**\n * SQL family `ContractSerializer` abstract base. Carries the SQL-shared\n * deserialization pipeline:\n *\n * 1. `parseSqlContractStructure` validates the on-disk JSON envelope\n * against the SQL contract arktype schema (`validateSqlContractFully`)\n * and returns the validated flat-data shape.\n * 2. `hydrateSqlStorage` walks the validated `storage` subtree and\n * constructs the family-shared SQL Contract IR class hierarchy\n * (`SqlStorage` -> `StorageTable` -> `StorageColumn` / `PrimaryKey`\n * / …). The rest of the contract envelope is JSON-clean primitive\n * data and passes through unchanged.\n * 3. `constructTargetContract` is the target-specific extension hook;\n * defaults to identity. Targets that need to attach target-only\n * fields (e.g. target-specific derived storage fields) override it.\n *\n * Default `serializeContract` is identity over the contract — concrete\n * SQL targets ship JSON-clean class instances, so the contract value\n * can be stringified directly. The non-enumerable family-level `kind`\n * discriminator on `SqlNode` instances stays out of the persisted\n * envelope automatically. Targets that need to canonicalize on the way\n * out (key ordering, dropping computed-only fields) override\n * `serializeContract` directly.\n */\nexport abstract class SqlContractSerializerBase<TContract extends Contract<SqlStorage>>\n implements ContractSerializer<TContract>\n{\n constructor(\n private readonly entityTypeRegistry: ReadonlyMap<string, SqlEntityHydrationFactory>,\n ) {}\n\n deserializeContract<T extends TContract = TContract>(json: unknown): T {\n const validated = this.parseSqlContractStructure(json);\n const hydrated = this.hydrateSqlStorage(validated);\n return this.constructTargetContract(hydrated) as T;\n }\n\n serializeContract(contract: TContract): JsonObject {\n return contract as unknown as JsonObject;\n }\n\n protected parseSqlContractStructure(json: unknown): Contract<SqlStorage> {\n return validateSqlContractFully<Contract<SqlStorage>>(json);\n }\n\n protected hydrateSqlStorage(validated: Contract<SqlStorage>): Contract<SqlStorage> {\n const types = validated.storage.types;\n const hydratedTypes =\n types !== undefined\n ? Object.fromEntries(\n Object.entries(types).map(([name, entry]) => [\n name,\n this.hydrateStorageTypeEntry(entry),\n ]),\n )\n : undefined;\n\n const rawNamespaces = validated.storage.namespaces;\n const hydratedNamespaces =\n rawNamespaces !== undefined ? this.hydrateSqlNamespaceMap(rawNamespaces) : undefined;\n\n return {\n ...validated,\n storage: new SqlStorage({\n storageHash: validated.storage.storageHash,\n ...(hydratedTypes !== undefined ? { types: hydratedTypes } : {}),\n ...(hydratedNamespaces !== undefined ? { namespaces: hydratedNamespaces } : {}),\n }),\n };\n }\n\n protected hydrateSqlNamespaceMap(\n namespaces: Readonly<Record<string, Namespace | Record<string, unknown>>>,\n ): Readonly<Record<string, Namespace | SqlNamespaceTablesInput>> {\n return Object.fromEntries(\n Object.entries(namespaces).map(([nsId, raw]) => [\n nsId,\n this.hydrateSqlNamespaceEntry(nsId, raw),\n ]),\n );\n }\n\n protected hydrateSqlNamespaceEntry(\n nsId: string,\n raw: Namespace | Record<string, unknown>,\n ): Namespace | SqlNamespaceTablesInput {\n if (raw instanceof NamespaceBase) {\n return raw;\n }\n const obj = raw as {\n id?: string;\n tables?: Record<string, unknown>;\n types?: Record<string, unknown>;\n };\n if (obj.types !== undefined && Object.keys(obj.types).length > 0) {\n throw new ContractValidationError(\n 'Per-schema database types (e.g. postgres-enum) under storage.namespaces[..].types require PostgresContractSerializer.',\n 'structural',\n );\n }\n const tables = Object.fromEntries(\n Object.entries(obj.tables ?? {}).map(([tableName, table]) => [\n tableName,\n table instanceof StorageTable ? table : new StorageTable(table as StorageTableInput),\n ]),\n );\n return {\n id: obj.id ?? nsId,\n tables,\n };\n }\n\n protected hydrateStorageTypeEntry(entry: SqlStorageTypeEntry): SqlStorageTypeEntry {\n if (typeof entry !== 'object' || entry === null) {\n return entry;\n }\n const kind = (entry as { kind?: unknown }).kind;\n if (typeof kind !== 'string') {\n return entry;\n }\n const factory = this.entityTypeRegistry.get(kind);\n if (factory === undefined) {\n return entry;\n }\n return factory(entry);\n }\n\n protected constructTargetContract(hydrated: Contract<SqlStorage>): TContract {\n return hydrated as TContract;\n }\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport { SqlContractSerializerBase } from './sql-contract-serializer-base';\n\n/**\n * Default SQL family `ContractSerializer` concretion. Inherits the\n * full SQL-shared deserialization pipeline (structural validation +\n * IR-class hydration) without pack-registered `storage.types`\n * hydration factories — targets that emit polymorphic JSON outside the\n * codec-typed envelope wire a target-specific subclass with a populated\n * registry (see Postgres). Family-level call sites instantiate this\n * default directly when no target serializer is supplied.\n */\nexport class SqlContractSerializer extends SqlContractSerializerBase<Contract<SqlStorage>> {\n constructor() {\n super(new Map());\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,IAAsB,4BAAtB,MAEA;CAEqB;CADnB,YACE,oBACA;EADiB,KAAA,qBAAA;;CAGnB,oBAAqD,MAAkB;EACrE,MAAM,YAAY,KAAK,0BAA0B,KAAK;EACtD,MAAM,WAAW,KAAK,kBAAkB,UAAU;EAClD,OAAO,KAAK,wBAAwB,SAAS;;CAG/C,kBAAkB,UAAiC;EACjD,OAAO;;CAGT,0BAAoC,MAAqC;EACvE,OAAO,yBAA+C,KAAK;;CAG7D,kBAA4B,WAAuD;EACjF,MAAM,QAAQ,UAAU,QAAQ;EAChC,MAAM,gBACJ,UAAU,KAAA,IACN,OAAO,YACL,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,WAAW,CAC3C,MACA,KAAK,wBAAwB,MAAM,CACpC,CAAC,CACH,GACD,KAAA;EAEN,MAAM,gBAAgB,UAAU,QAAQ;EACxC,MAAM,qBACJ,kBAAkB,KAAA,IAAY,KAAK,uBAAuB,cAAc,GAAG,KAAA;EAE7E,OAAO;GACL,GAAG;GACH,SAAS,IAAI,WAAW;IACtB,aAAa,UAAU,QAAQ;IAC/B,GAAI,kBAAkB,KAAA,IAAY,EAAE,OAAO,eAAe,GAAG,EAAE;IAC/D,GAAI,uBAAuB,KAAA,IAAY,EAAE,YAAY,oBAAoB,GAAG,EAAE;IAC/E,CAAC;GACH;;CAGH,uBACE,YAC+D;EAC/D,OAAO,OAAO,YACZ,OAAO,QAAQ,WAAW,CAAC,KAAK,CAAC,MAAM,SAAS,CAC9C,MACA,KAAK,yBAAyB,MAAM,IAAI,CACzC,CAAC,CACH;;CAGH,yBACE,MACA,KACqC;EACrC,IAAI,eAAe,eACjB,OAAO;EAET,MAAM,MAAM;EAKZ,IAAI,IAAI,UAAU,KAAA,KAAa,OAAO,KAAK,IAAI,MAAM,CAAC,SAAS,GAC7D,MAAM,IAAI,wBACR,yHACA,aACD;EAEH,MAAM,SAAS,OAAO,YACpB,OAAO,QAAQ,IAAI,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,WAAW,CAC3D,WACA,iBAAiB,eAAe,QAAQ,IAAI,aAAa,MAA2B,CACrF,CAAC,CACH;EACD,OAAO;GACL,IAAI,IAAI,MAAM;GACd;GACD;;CAGH,wBAAkC,OAAiD;EACjF,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,OAAO;EAET,MAAM,OAAQ,MAA6B;EAC3C,IAAI,OAAO,SAAS,UAClB,OAAO;EAET,MAAM,UAAU,KAAK,mBAAmB,IAAI,KAAK;EACjD,IAAI,YAAY,KAAA,GACd,OAAO;EAET,OAAO,QAAQ,MAAM;;CAGvB,wBAAkC,UAA2C;EAC3E,OAAO;;;;;;;;;;;;;;ACnIX,IAAa,wBAAb,cAA2C,0BAAgD;CACzF,cAAc;EACZ,sBAAM,IAAI,KAAK,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ContractSerializer, ContractSpace, ControlAdapterDescriptor, ControlDriverInstance, ControlExtensionDescriptor, ControlFamilyInstance, ControlStack, MigratableTargetDescriptor, MigrationOperationPolicy, MigrationPlan, MigrationPlanOperation, MigrationPlannerConflict, MigrationPlannerFailureResult, MigrationPlannerSuccessResult, MigrationRunnerExecutionChecks, MigrationRunnerFailure, MigrationRunnerSuccessValue, OpFactoryCall, OperationContext, OperationPreview, OperationPreviewCapable, PslContractInferCapable, SchemaIssue, SchemaVerifier, SchemaViewCapable, SignDatabaseResult, VerifyDatabaseResult, VerifyDatabaseSchemaResult } from "@prisma-next/framework-components/control";
|
|
2
2
|
import { SqlStorage, StorageColumn, StorageTable, StorageTypeInstance } from "@prisma-next/sql-contract/types";
|
|
3
|
+
import { PslDocumentAst } from "@prisma-next/framework-components/psl-ast";
|
|
3
4
|
import { Result } from "@prisma-next/utils/result";
|
|
4
5
|
import { Contract } from "@prisma-next/contract/types";
|
|
5
6
|
import { AnyQueryAst, LoweredStatement, LowererContext } from "@prisma-next/sql-relational-core/ast";
|
|
6
7
|
import { SqlSchemaIR } from "@prisma-next/sql-schema-ir/types";
|
|
7
8
|
import { TargetBoundComponentDescriptor } from "@prisma-next/framework-components/components";
|
|
8
9
|
import { TypesImportSpec } from "@prisma-next/framework-components/emission";
|
|
9
|
-
import { PslDocumentAst } from "@prisma-next/framework-components/psl-ast";
|
|
10
10
|
import { SqlOperationDescriptors } from "@prisma-next/sql-operations";
|
|
11
11
|
|
|
12
12
|
//#region src/core/control-instance.d.ts
|
|
@@ -113,7 +113,7 @@ type FieldEvent = 'added' | 'dropped' | 'altered';
|
|
|
113
113
|
/**
|
|
114
114
|
* Context passed to {@link CodecControlHooks.onFieldEvent}.
|
|
115
115
|
*
|
|
116
|
-
* `tableName
|
|
116
|
+
* `namespaceId`, `tableName`, and `fieldName` are always populated; `priorTable` /
|
|
117
117
|
* `priorField` carry the prior contract's view of the table and column
|
|
118
118
|
* (present for `'dropped'` and `'altered'`); `newTable` / `newField`
|
|
119
119
|
* carry the new contract's view (present for `'added'` and `'altered'`).
|
|
@@ -123,6 +123,7 @@ type FieldEvent = 'added' | 'dropped' | 'altered';
|
|
|
123
123
|
* application emitter only.
|
|
124
124
|
*/
|
|
125
125
|
interface FieldEventContext {
|
|
126
|
+
readonly namespaceId: string;
|
|
126
127
|
readonly tableName: string;
|
|
127
128
|
readonly fieldName: string;
|
|
128
129
|
readonly priorTable?: StorageTable;
|
|
@@ -481,4 +482,4 @@ interface CreateSqlMigrationPlanOptions<TTargetDetails> {
|
|
|
481
482
|
}
|
|
482
483
|
//#endregion
|
|
483
484
|
export { SqlPlannerConflictKind as A, SqlMigrationRunnerExecuteCallbacks as C, SqlMigrationRunnerSuccessValue as D, SqlMigrationRunnerResult as E, StorageTypePlanResult as F, SqlControlFamilyInstance as I, SqlPlannerFailureResult as M, SqlPlannerResult as N, SqlPlanTargetDetails as O, SqlPlannerSuccessResult as P, SqlMigrationRunnerErrorCode as S, SqlMigrationRunnerFailure as T, SqlMigrationPlanOperationStep as _, FieldEvent as a, SqlMigrationPlannerPlanOptions as b, MultiSpaceRunnerResult as c, SqlControlAdapterDescriptor as d, SqlControlExtensionDescriptor as f, SqlMigrationPlanOperation as g, SqlMigrationPlanContractInfo as h, ExpandNativeTypeInput as i, SqlPlannerConflictLocation as j, SqlPlannerConflict as k, MultiSpaceRunnerSuccessValue as l, SqlMigrationPlan as m, CodecControlHooks as n, FieldEventContext as o, SqlControlTargetDescriptor as p, CreateSqlMigrationPlanOptions as r, MultiSpaceRunnerFailure as s, AnyRecord as t, ResolveIdentityValueInput as u, SqlMigrationPlanOperationTarget as v, SqlMigrationRunnerExecuteOptions as w, SqlMigrationRunner as x, SqlMigrationPlanner as y };
|
|
484
|
-
//# sourceMappingURL=types-
|
|
485
|
+
//# sourceMappingURL=types-hQoMXr54.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-hQoMXr54.d.mts","names":[],"sources":["../src/core/control-instance.ts","../src/core/migrations/types.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-sql-schema-Bfvz07Ik.d.mts","names":[],"sources":["../src/core/schema-verify/verify-sql-schema.ts"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"verify-sql-schema-Bfvz07Ik.d.mts","names":[],"sources":["../src/core/schema-verify/verify-sql-schema.ts"],"mappings":";;;;;;;;;;;KA2CY,iBAAA,IACV,UAAA,UACA,UAAA,aACG,aAAA;;;;;AAYL;KALY,oBAAA,IAAwB,UAAA;;;;UAKnB,sBAAA;EAQI;EAAA,SANV,QAAA,EAAU,QAAA,CAAS,UAAA;EAagB;EAAA,SAXnC,MAAA,EAAQ,WAAA;EAiBW;EAAA,SAfnB,MAAA;EAkCC;EAAA,SAhCD,OAAA,GAAU,gBAAA;EAiCiB;EAAA,SA/B3B,oBAAA,EAAsB,WAAA;IAAsB,UAAA;EAAA;EARzB;;;;EAAA,SAanB,mBAAA,EAAqB,aAAA,CAAc,8BAAA;EAPzB;;;;;EAAA,SAaV,gBAAA,GAAmB,iBAAA;EANgB;;;;;EAAA,SAYnC,mBAAA,GAAsB,oBAAA;EAarB;;;;;;AAeZ;;;;;EAfY,SADD,yBAAA,IACP,MAAA,EAAQ,WAAA,EACR,QAAA,EAAU,wBAAA;AAAA;;;;;;;;;;;iBAcE,eAAA,CAAgB,OAAA,EAAS,sBAAA,GAAyB,0BAAA"}
|