@prisma-next/sql-contract-ts
Advanced tools
| import { blindCast } from "@prisma-next/utils/casts"; | ||
| import { ifDefined } from "@prisma-next/utils/defined"; | ||
| import { computeExecutionHash, computeProfileHash, computeStorageHash } from "@prisma-next/contract/hashing"; | ||
| import { asNamespaceId, coreHash, crossRef } from "@prisma-next/contract/types"; | ||
| import { mergeCapabilityMatrices } from "@prisma-next/contract-authoring"; | ||
| import { isAuthoringEntityTypeDescriptor } from "@prisma-next/framework-components/authoring"; | ||
| import { UNBOUND_NAMESPACE_ID } from "@prisma-next/framework-components/ir"; | ||
| import { sqlContractCanonicalizationHooks } from "@prisma-next/sql-contract/canonicalization-hooks"; | ||
| import { tableEntityKind, valueSetEntityKind } from "@prisma-next/sql-contract/entity-kinds"; | ||
| import { materializeForeignKeysAndIndexes } from "@prisma-next/sql-contract/foreign-key-materialization"; | ||
| import { validateIndexTypes } from "@prisma-next/sql-contract/index-type-validation"; | ||
| import { createIndexTypeRegistry } from "@prisma-next/sql-contract/index-types"; | ||
| import { SqlStorage, applyFkDefaults, toStorageTypeInstance } from "@prisma-next/sql-contract/types"; | ||
| import { validateStorageSemantics } from "@prisma-next/sql-contract/validators"; | ||
| import { deriveValueSetFromEntity } from "@prisma-next/sql-contract/value-set-derivation-hook"; | ||
| //#region src/build-contract.ts | ||
| function encodeViaCodec(value, codecId, codecLookup) { | ||
| const codec = codecLookup?.get(codecId); | ||
| if (codec) return codec.encodeJson(value); | ||
| return blindCast(value); | ||
| } | ||
| function encodeColumnDefault(defaultInput, codecId, codecLookup, many = false) { | ||
| if (defaultInput.kind === "function") return { | ||
| kind: "function", | ||
| expression: defaultInput.expression | ||
| }; | ||
| if (many) { | ||
| if (!Array.isArray(defaultInput.value)) throw new Error(`Literal default on a list column must be an array; received ${typeof defaultInput.value}. A scalar default on a list field must be rejected at the authoring surface.`); | ||
| return { | ||
| kind: "literal", | ||
| value: defaultInput.value.map((element) => encodeViaCodec(element, codecId, codecLookup)) | ||
| }; | ||
| } | ||
| return { | ||
| kind: "literal", | ||
| value: encodeViaCodec(defaultInput.value, codecId, codecLookup) | ||
| }; | ||
| } | ||
| function assertStorageSemantics(definition, contract) { | ||
| const semanticErrors = validateStorageSemantics(contract.storage); | ||
| if (semanticErrors.length > 0) throw new Error(`Contract semantic validation failed: ${semanticErrors.join("; ")}`); | ||
| const indexTypeRegistry = createIndexTypeRegistry(); | ||
| const packsToRegister = [definition.target, ...Object.values(definition.extensionPacks ?? {})]; | ||
| for (const pack of packsToRegister) { | ||
| const registration = pack.indexTypes; | ||
| if (registration === void 0) continue; | ||
| if (typeof registration !== "object" || registration === null || !Array.isArray(registration.entries)) throw new Error(`Pack "${pack.id ?? "<unknown>"}" declares "indexTypes" but its value is not an IndexTypeRegistration (expected an object with an "entries" array; got ${typeof registration}).`); | ||
| for (const entry of registration.entries) indexTypeRegistry.register(entry); | ||
| } | ||
| validateIndexTypes(contract, indexTypeRegistry); | ||
| } | ||
| function assertKnownTargetModel(modelsByName, modelsByCoordinate, sourceModelName, targetModelName, targetNamespaceId, context) { | ||
| const targetModel = targetNamespaceId !== void 0 && targetNamespaceId.length > 0 ? modelsByCoordinate.get(`${targetNamespaceId}:${targetModelName}`) : modelsByName.get(targetModelName); | ||
| if (!targetModel) { | ||
| const qualified = targetNamespaceId !== void 0 && targetNamespaceId.length > 0 ? `${targetNamespaceId}.${targetModelName}` : targetModelName; | ||
| throw new Error(`${context} on model "${sourceModelName}" references unknown model "${qualified}"`); | ||
| } | ||
| return targetModel; | ||
| } | ||
| function assertTargetTableMatches(sourceModelName, targetModel, referencedTableName, context) { | ||
| if (targetModel.tableName !== referencedTableName) throw new Error(`${context} on model "${sourceModelName}" references table "${referencedTableName}" but model "${targetModel.modelName}" maps to "${targetModel.tableName}"`); | ||
| } | ||
| function isValueObjectField(field) { | ||
| return "valueObjectName" in field; | ||
| } | ||
| /** | ||
| * Resolves a deferred entity-ref column descriptor (e.g. a `pg.enum(handle)` | ||
| * column) against the field's now-known owning namespace: attaches the | ||
| * storage `valueSet` ref the collected entity's derived value-set is stored | ||
| * under. `nativeType` / `typeParams.typeName` stay bare here — schema | ||
| * qualification (e.g. `auth.aal_level`) is a target concern applied in the | ||
| * next step, `qualifyColumnDescriptor`. A descriptor with no `entityRef` (the | ||
| * ordinary case) passes through unchanged. | ||
| */ | ||
| function resolveEntityRefDescriptor(descriptor, namespaceId) { | ||
| const entityRef = descriptor.entityRef; | ||
| if (entityRef === void 0) return descriptor; | ||
| return { | ||
| ...descriptor, | ||
| valueSet: { | ||
| plane: "storage", | ||
| entityKind: "valueSet", | ||
| namespaceId, | ||
| entityName: entityRef.entityName | ||
| } | ||
| }; | ||
| } | ||
| /** | ||
| * Structural check for a target that contributes a `qualifyColumnType` hook | ||
| * on its authoring contributions. Duck-typed (mirroring | ||
| * `contract-psl`'s `hasColumnFromEntityHook`) so the SQL family stays blind | ||
| * to the target's qualification logic and no framework/family interface has | ||
| * to name the hook. | ||
| */ | ||
| function hasColumnTypeQualifier(authoring) { | ||
| return "qualifyColumnType" in authoring && typeof authoring.qualifyColumnType === "function"; | ||
| } | ||
| function resolveColumnTypeQualifier(target) { | ||
| const authoring = target.authoring; | ||
| if (authoring === void 0) return void 0; | ||
| return hasColumnTypeQualifier(authoring) ? authoring.qualifyColumnType : void 0; | ||
| } | ||
| /** | ||
| * Applies the target's `qualifyColumnType` hook to a scalar column descriptor | ||
| * at construction, so the storage column and the domain field (which derives | ||
| * its `type.typeParams` from the storage column) are both built already | ||
| * qualified in a single pass. A descriptor whose codec the target leaves | ||
| * unchanged passes through untouched. | ||
| */ | ||
| function qualifyColumnDescriptor(descriptor, namespaceId, qualify) { | ||
| if (qualify === void 0) return descriptor; | ||
| const qualified = qualify({ | ||
| codecId: descriptor.codecId, | ||
| nativeType: descriptor.nativeType, | ||
| ...ifDefined("typeParams", descriptor.typeParams) | ||
| }, namespaceId); | ||
| if (qualified.nativeType === descriptor.nativeType && qualified.typeParams === descriptor.typeParams) return descriptor; | ||
| return { | ||
| ...descriptor, | ||
| nativeType: qualified.nativeType, | ||
| ...ifDefined("typeParams", qualified.typeParams) | ||
| }; | ||
| } | ||
| /** | ||
| * Records a deferred column's entity-ref into the namespace-scoped collection | ||
| * accumulator (`namespaceId → entityKind → entityName`) — folded into the same | ||
| * namespace assembly `deriveEntityValueSets`/`entries.<kind>` step as the | ||
| * entities-channel attachments, so a column-collected entity gets its | ||
| * value-set the same way an entities-channel one does. | ||
| * | ||
| * The same handle reused by many columns in one namespace is normal (a native | ||
| * enum type backs any number of columns) and records the identical entity once. | ||
| * Two *different* entity instances sharing a name+kind in one namespace is a | ||
| * name collision — the emitted `entries.valueSet.<name>` could only reflect one | ||
| * of them, silently mismatching the other column's type/cast. PSL hard-errors | ||
| * on the equivalent (`PSL_DUPLICATE_DECLARATION`); the TS path rejects it too. | ||
| */ | ||
| function collectEntityFromColumn(collected, namespaceId, entityRef) { | ||
| const forNs = collected[namespaceId] ?? {}; | ||
| const forKind = forNs[entityRef.entityKind] ?? {}; | ||
| const existing = forKind[entityRef.entityName]; | ||
| if (existing !== void 0 && existing !== entityRef.entity) throw new Error(`buildSqlContractFromDefinition: two different "${entityRef.entityKind}" entities named "${entityRef.entityName}" in namespace "${namespaceId}" — pack-entity names must be unique per namespace.`); | ||
| forKind[entityRef.entityName] = entityRef.entity; | ||
| forNs[entityRef.entityKind] = forKind; | ||
| collected[namespaceId] = forNs; | ||
| } | ||
| /** | ||
| * Merges a namespace's entities-channel attachments (lowered from the | ||
| * `entities` handle list, carried on `ContractDefinition.attachedEntities`) | ||
| * with the entities collected from that namespace's deferred entity-ref | ||
| * columns. A column-collected entity that shadows a *different* attached | ||
| * entity of the same kind+name (or vice-versa) is the same name-collision bug | ||
| * `collectEntityFromColumn` guards against across columns, so it is rejected | ||
| * the same way — by entity identity, so the same handle attached and used by | ||
| * a column does not throw. | ||
| */ | ||
| function mergeColumnAndAttachedEntities(namespaceId, attached, columnCollected) { | ||
| if (attached === void 0) return columnCollected; | ||
| if (columnCollected === void 0) return attached; | ||
| const kinds = /* @__PURE__ */ new Set([...Object.keys(attached), ...Object.keys(columnCollected)]); | ||
| const result = {}; | ||
| for (const kind of kinds) { | ||
| const attachedForKind = attached[kind]; | ||
| const columnForKind = columnCollected[kind]; | ||
| for (const [name, entity] of Object.entries(columnForKind ?? {})) { | ||
| const existing = attachedForKind?.[name]; | ||
| if (existing !== void 0 && existing !== entity) throw new Error(`buildSqlContractFromDefinition: two different "${kind}" entities named "${name}" in namespace "${namespaceId}" — a column-referenced entity conflicts with an attached one; pack-entity names must be unique per namespace.`); | ||
| } | ||
| result[kind] = { | ||
| ...attachedForKind, | ||
| ...columnForKind | ||
| }; | ||
| } | ||
| return result; | ||
| } | ||
| const JSONB_CODEC_ID = "pg/jsonb@1"; | ||
| const JSONB_NATIVE_TYPE = "jsonb"; | ||
| function resolveModelNamespaceId(model, modelNameToNamespaceId, defaultNamespaceId) { | ||
| if (model.namespaceId !== void 0 && model.namespaceId.length > 0) return model.namespaceId; | ||
| return modelNameToNamespaceId.get(model.modelName) ?? defaultNamespaceId; | ||
| } | ||
| function buildThroughDescriptor(through, tableNamespaceByName, targetModel, modelName, fieldName, defaultNamespaceId) { | ||
| if (!tableNamespaceByName.has(through.table)) throw new Error(`buildSqlContractFromDefinition: junction table "${through.table}" for relation "${modelName}.${fieldName}" is not a declared model.`); | ||
| const namespaceId = through.namespaceId ?? defaultNamespaceId; | ||
| return { | ||
| table: through.table, | ||
| namespaceId, | ||
| parentColumns: through.parentColumns, | ||
| childColumns: through.childColumns, | ||
| targetColumns: targetColumnsForJunction(targetModel, fieldName) | ||
| }; | ||
| } | ||
| function targetColumnsForJunction(targetModel, fieldName) { | ||
| const primaryKeyColumns = targetModel.id?.columns; | ||
| if (primaryKeyColumns && primaryKeyColumns.length > 0) return primaryKeyColumns; | ||
| const firstUnique = targetModel.uniques?.find((u) => u.columns.length > 0); | ||
| if (firstUnique) return firstUnique.columns; | ||
| throw new Error(`M:N target model "${targetModel.modelName}" (relation field "${fieldName}") has no primary id or unique key to derive junction targetColumns.`); | ||
| } | ||
| function buildStorageColumn(field, storageValueSetRef, codecLookup) { | ||
| if (isValueObjectField(field)) { | ||
| const encodedDefault = field.default !== void 0 ? encodeColumnDefault(field.default, JSONB_CODEC_ID, codecLookup) : void 0; | ||
| return { | ||
| nativeType: JSONB_NATIVE_TYPE, | ||
| codecId: JSONB_CODEC_ID, | ||
| nullable: field.nullable, | ||
| ...ifDefined("default", encodedDefault) | ||
| }; | ||
| } | ||
| const codecId = field.descriptor.codecId; | ||
| const encodedDefault = field.default !== void 0 ? encodeColumnDefault(field.default, codecId, codecLookup, field.many === true) : void 0; | ||
| const valueSet = storageValueSetRef ?? field.descriptor.valueSet; | ||
| return { | ||
| nativeType: field.descriptor.nativeType, | ||
| codecId, | ||
| nullable: field.nullable, | ||
| ...field.many ? { many: true } : {}, | ||
| ...ifDefined("typeParams", field.descriptor.typeParams), | ||
| ...ifDefined("default", encodedDefault), | ||
| ...ifDefined("typeRef", field.descriptor.typeRef), | ||
| ...ifDefined("valueSet", valueSet) | ||
| }; | ||
| } | ||
| function buildDomainField(field, column, domainValueSetRef) { | ||
| if (isValueObjectField(field)) return { | ||
| type: { | ||
| kind: "valueObject", | ||
| name: field.valueObjectName | ||
| }, | ||
| nullable: field.nullable, | ||
| ...field.many ? { many: true } : {} | ||
| }; | ||
| return { | ||
| type: { | ||
| kind: "scalar", | ||
| codecId: column.codecId, | ||
| ...ifDefined("typeParams", column.typeParams) | ||
| }, | ||
| nullable: column.nullable, | ||
| ...field.many ? { many: true } : {}, | ||
| ...ifDefined("valueSet", domainValueSetRef) | ||
| }; | ||
| } | ||
| function collectStorageNamespaceCoordinateIds(definition) { | ||
| const ids = /* @__PURE__ */ new Set(); | ||
| ids.add(definition.target.defaultNamespaceId); | ||
| for (const id of definition.namespaces ?? []) if (id.length > 0) ids.add(id); | ||
| for (const model of definition.models) if (model.namespaceId !== void 0 && model.namespaceId.length > 0) ids.add(model.namespaceId); | ||
| for (const id of Object.keys(definition.attachedEntities ?? {})) if (id.length > 0) ids.add(id); | ||
| return ids; | ||
| } | ||
| /** | ||
| * Entry kinds the framework assembler itself manages (`table` from models, | ||
| * `valueSet` from `enums` and attached-entity value-set derivation). A | ||
| * pack-attached entity claiming one of these would silently clobber or be | ||
| * clobbered by the managed slot, so it is rejected outright. | ||
| */ | ||
| const MANAGED_ENTRY_KINDS = /* @__PURE__ */ new Set([tableEntityKind.kind, valueSetEntityKind.kind]); | ||
| function assertNoManagedEntityKinds(namespaceId, entitiesForNs) { | ||
| if (entitiesForNs === void 0) return; | ||
| for (const kind of Object.keys(entitiesForNs)) if (MANAGED_ENTRY_KINDS.has(kind)) throw new Error(`buildSqlContractFromDefinition: attached entity in namespace "${namespaceId}" declares entry kind "${kind}", which is managed by the framework (table/valueSet) and cannot be attached.`); | ||
| } | ||
| /** | ||
| * Walks the flat `entityTypes` namespace tree contributed by the target pack | ||
| * and every extension pack, indexing descriptors by their `discriminator` — | ||
| * the same string a pack entity's entries-map key (`entries.<kind>`) uses. | ||
| * Mirrors `contract-psl`'s `buildEntityTypesByDiscriminator`, recomposed here | ||
| * from the packs `ContractDefinition` already carries (`target` + | ||
| * `extensionPacks`) since the TS assembler has no single pre-merged | ||
| * `AuthoringContributions` input to read the way the PSL interpreter does. | ||
| */ | ||
| function collectEntityTypeDescriptorsByDiscriminator(definition) { | ||
| const result = /* @__PURE__ */ new Map(); | ||
| const walk = (namespace) => { | ||
| for (const value of Object.values(namespace)) if (isAuthoringEntityTypeDescriptor(value)) result.set(value.discriminator, value); | ||
| else walk(value); | ||
| }; | ||
| const components = [definition.target, ...Object.values(definition.extensionPacks ?? {})]; | ||
| for (const component of components) { | ||
| const entityTypes = component.authoring?.entityTypes; | ||
| if (entityTypes !== void 0) walk(entityTypes); | ||
| } | ||
| return result; | ||
| } | ||
| /** | ||
| * Derives value-sets for every pack entity declared in one namespace, | ||
| * reusing the same `SqlValueSetDerivingEntityTypeOutput.deriveValueSet` hook | ||
| * `contract-psl`'s `lowerExtensionBlocksForNamespace` folds into | ||
| * `entries.valueSet` on the PSL path — so a TS-attached entity (e.g. a | ||
| * native enum) gets its value-set the same way. Entity kinds with no | ||
| * registered descriptor, or whose descriptor output doesn't derive a | ||
| * value-set, contribute nothing. | ||
| */ | ||
| function deriveEntityValueSets(entitiesForNs, entityTypesByDiscriminator) { | ||
| if (entitiesForNs === void 0) return void 0; | ||
| let result; | ||
| for (const [kind, entitiesByName] of Object.entries(entitiesForNs)) { | ||
| const descriptor = entityTypesByDiscriminator.get(kind); | ||
| if (descriptor === void 0) continue; | ||
| for (const [name, entity] of Object.entries(entitiesByName)) { | ||
| const derivedValueSet = deriveValueSetFromEntity(descriptor.output, entity); | ||
| if (derivedValueSet === void 0) continue; | ||
| result ??= {}; | ||
| result[name] = derivedValueSet; | ||
| } | ||
| } | ||
| return result; | ||
| } | ||
| /** | ||
| * Merges a namespace's `enumType()`-derived value-sets with its pack-entity- | ||
| * derived value-sets. Both land in the same `entries.valueSet[name]` slot — | ||
| * which drives value-set → codec typing and the domain-enum CHECK — so a | ||
| * same-named entry in both would let one silently overwrite the other and | ||
| * corrupt whichever column resolves against it. The same collision class the | ||
| * `mergeColumnAndAttachedEntities` guard rejects; the PSL path already hard-errors | ||
| * on the equivalent (`interpretPslDocumentToSqlContract`). Reject it here too. | ||
| */ | ||
| function mergeNamespaceValueSets(namespaceId, enumValueSets, packValueSets) { | ||
| if (enumValueSets !== void 0 && packValueSets !== void 0) { | ||
| for (const name of Object.keys(packValueSets)) if (Object.hasOwn(enumValueSets, name)) throw new Error(`buildSqlContractFromDefinition: value-set "${name}" in namespace "${namespaceId}" is derived from both an enum and a pack entity — names must be unique per namespace.`); | ||
| } | ||
| return { | ||
| ...enumValueSets, | ||
| ...packValueSets | ||
| }; | ||
| } | ||
| function ensureUnboundNamespaceSlot(namespaces, createNamespace) { | ||
| if (Object.hasOwn(namespaces, UNBOUND_NAMESPACE_ID)) return namespaces; | ||
| const unbound = createNamespace({ | ||
| id: UNBOUND_NAMESPACE_ID, | ||
| entries: { table: {} } | ||
| }); | ||
| return { | ||
| [UNBOUND_NAMESPACE_ID]: unbound, | ||
| ...namespaces | ||
| }; | ||
| } | ||
| function buildSqlContractFromDefinition(definition, codecLookup) { | ||
| const target = definition.target.targetId; | ||
| const defaultNamespaceId = definition.target.defaultNamespaceId; | ||
| const qualifyColumnType = resolveColumnTypeQualifier(definition.target); | ||
| const targetFamily = "sql"; | ||
| const resolveNamespaceId = (m) => m.namespaceId !== void 0 && m.namespaceId.length > 0 ? m.namespaceId : defaultNamespaceId; | ||
| const modelsByName = new Map(definition.models.map((m) => [m.modelName, m])); | ||
| const tableNamespaceByName = new Map(definition.models.map((m) => [m.tableName, m.namespaceId !== void 0 && m.namespaceId.length > 0 ? m.namespaceId : defaultNamespaceId])); | ||
| const modelsByCoordinate = new Map(definition.models.map((m) => [`${resolveNamespaceId(m)}:${m.modelName}`, m])); | ||
| const tablesByNamespace = {}; | ||
| const modelNameToNamespaceId = /* @__PURE__ */ new Map(); | ||
| const executionDefaults = []; | ||
| const modelsByNamespace = {}; | ||
| const collectedColumnEntities = {}; | ||
| const rootEntries = []; | ||
| for (const semanticModel of definition.models) { | ||
| const tableName = semanticModel.tableName; | ||
| const namespaceId = semanticModel.namespaceId !== void 0 && semanticModel.namespaceId.length > 0 ? semanticModel.namespaceId : defaultNamespaceId; | ||
| modelNameToNamespaceId.set(semanticModel.modelName, namespaceId); | ||
| if (!semanticModel.sharesBaseTable) rootEntries.push({ | ||
| tableName, | ||
| namespaceId, | ||
| ref: crossRef(semanticModel.modelName, namespaceId) | ||
| }); | ||
| const columns = {}; | ||
| const fieldToColumn = {}; | ||
| const domainFields = {}; | ||
| const domainFieldRefs = {}; | ||
| const checksForTable = []; | ||
| for (const field of semanticModel.fields) { | ||
| const executionDefaultPhases = field.executionDefaults?.onCreate || field.executionDefaults?.onUpdate ? field.executionDefaults : void 0; | ||
| if (executionDefaultPhases) { | ||
| if (field.default !== void 0) throw new Error(`Field "${semanticModel.modelName}.${field.fieldName}" cannot define both default and executionDefaults.`); | ||
| if (field.nullable) throw new Error(`Field "${semanticModel.modelName}.${field.fieldName}" cannot be nullable when executionDefaults are present.`); | ||
| } | ||
| const enumHandle = !isValueObjectField(field) ? field.enumTypeHandle : void 0; | ||
| const storageValueSetRef = enumHandle !== void 0 ? { | ||
| plane: "storage", | ||
| entityKind: "valueSet", | ||
| namespaceId: defaultNamespaceId, | ||
| entityName: enumHandle.enumName | ||
| } : void 0; | ||
| const domainValueSetRef = enumHandle !== void 0 ? { | ||
| plane: "domain", | ||
| entityKind: "enum", | ||
| namespaceId: defaultNamespaceId, | ||
| entityName: enumHandle.enumName | ||
| } : void 0; | ||
| let resolvedField = field; | ||
| if (!isValueObjectField(field)) { | ||
| let descriptor = field.descriptor; | ||
| const entityRef = descriptor.entityRef; | ||
| if (entityRef !== void 0) { | ||
| collectEntityFromColumn(collectedColumnEntities, namespaceId, entityRef); | ||
| descriptor = resolveEntityRefDescriptor(descriptor, namespaceId); | ||
| } | ||
| descriptor = qualifyColumnDescriptor(descriptor, namespaceId, qualifyColumnType); | ||
| if (descriptor !== field.descriptor) resolvedField = { | ||
| ...field, | ||
| descriptor | ||
| }; | ||
| } | ||
| const column = buildStorageColumn(resolvedField, storageValueSetRef, codecLookup); | ||
| columns[field.columnName] = column; | ||
| fieldToColumn[field.fieldName] = field.columnName; | ||
| if (column.valueSet !== void 0 && storageValueSetRef !== void 0) checksForTable.push({ | ||
| name: `${tableName}_${field.columnName}_check`, | ||
| column: field.columnName, | ||
| valueSet: column.valueSet | ||
| }); | ||
| domainFields[field.fieldName] = buildDomainField(field, column, domainValueSetRef); | ||
| if (isValueObjectField(field)) domainFieldRefs[field.fieldName] = { | ||
| kind: "valueObject", | ||
| name: field.valueObjectName, | ||
| ...field.many ? { many: true } : {} | ||
| }; | ||
| else if (field.many) domainFieldRefs[field.fieldName] = { | ||
| kind: "scalar", | ||
| many: true | ||
| }; | ||
| if (executionDefaultPhases) executionDefaults.push({ | ||
| ref: { | ||
| namespace: namespaceId, | ||
| table: tableName, | ||
| column: field.columnName | ||
| }, | ||
| ...ifDefined("onCreate", executionDefaultPhases.onCreate), | ||
| ...ifDefined("onUpdate", executionDefaultPhases.onUpdate) | ||
| }); | ||
| } | ||
| const authoringForeignKeys = (semanticModel.foreignKeys ?? []).map((fk) => { | ||
| if (fk.references.spaceId !== void 0) { | ||
| const targetNamespaceId = fk.references.namespaceId ?? defaultNamespaceId; | ||
| return { | ||
| source: { | ||
| namespaceId: asNamespaceId(namespaceId), | ||
| tableName, | ||
| columns: fk.columns | ||
| }, | ||
| target: { | ||
| namespaceId: asNamespaceId(targetNamespaceId), | ||
| tableName: fk.references.table, | ||
| columns: fk.references.columns, | ||
| spaceId: fk.references.spaceId | ||
| }, | ||
| ...applyFkDefaults({ | ||
| ...ifDefined("constraint", fk.constraint), | ||
| ...ifDefined("index", fk.index) | ||
| }, definition.foreignKeyDefaults), | ||
| ...ifDefined("name", fk.name), | ||
| ...ifDefined("onDelete", fk.onDelete), | ||
| ...ifDefined("onUpdate", fk.onUpdate) | ||
| }; | ||
| } | ||
| const targetModel = assertKnownTargetModel(modelsByName, modelsByCoordinate, semanticModel.modelName, fk.references.model, fk.references.namespaceId, "Foreign key"); | ||
| assertTargetTableMatches(semanticModel.modelName, targetModel, fk.references.table, "Foreign key"); | ||
| const targetNamespaceId = fk.references.namespaceId ?? (targetModel.namespaceId !== void 0 && targetModel.namespaceId.length > 0 ? targetModel.namespaceId : defaultNamespaceId); | ||
| return { | ||
| source: { | ||
| namespaceId: asNamespaceId(namespaceId), | ||
| tableName, | ||
| columns: fk.columns | ||
| }, | ||
| target: { | ||
| namespaceId: asNamespaceId(targetNamespaceId), | ||
| tableName: fk.references.table, | ||
| columns: fk.references.columns | ||
| }, | ||
| ...applyFkDefaults({ | ||
| ...ifDefined("constraint", fk.constraint), | ||
| ...ifDefined("index", fk.index) | ||
| }, definition.foreignKeyDefaults), | ||
| ...ifDefined("name", fk.name), | ||
| ...ifDefined("onDelete", fk.onDelete), | ||
| ...ifDefined("onUpdate", fk.onUpdate) | ||
| }; | ||
| }); | ||
| if (!semanticModel.sharesBaseTable) { | ||
| const uniques = (semanticModel.uniques ?? []).map((u) => ({ | ||
| columns: u.columns, | ||
| ...ifDefined("name", u.name) | ||
| })); | ||
| const declaredIndexes = (semanticModel.indexes ?? []).map((i) => ({ | ||
| columns: i.columns, | ||
| ...ifDefined("name", i.name), | ||
| ...ifDefined("type", i.type), | ||
| ...ifDefined("options", i.options) | ||
| })); | ||
| const primaryKey = semanticModel.id ? { | ||
| columns: semanticModel.id.columns, | ||
| ...ifDefined("name", semanticModel.id.name) | ||
| } : void 0; | ||
| const { foreignKeys, indexes } = materializeForeignKeysAndIndexes(tableName, authoringForeignKeys, declaredIndexes, uniques, primaryKey); | ||
| const tableInput = { | ||
| columns, | ||
| ...ifDefined("control", semanticModel.control), | ||
| uniques, | ||
| indexes, | ||
| foreignKeys, | ||
| ...primaryKey ? { primaryKey } : {}, | ||
| ...checksForTable.length > 0 ? { checks: checksForTable } : {} | ||
| }; | ||
| let nsTables = tablesByNamespace[namespaceId]; | ||
| if (nsTables === void 0) { | ||
| nsTables = {}; | ||
| tablesByNamespace[namespaceId] = nsTables; | ||
| } | ||
| if (nsTables[tableName] !== void 0) throw new Error(`buildSqlContractFromDefinition: duplicate table "${tableName}" in namespace "${namespaceId}".`); | ||
| nsTables[tableName] = tableInput; | ||
| } | ||
| const storageFields = {}; | ||
| for (const [fieldName, columnName] of Object.entries(fieldToColumn)) storageFields[fieldName] = { column: columnName }; | ||
| const columnToField = new Map(Object.entries(fieldToColumn).map(([field, col]) => [col, field])); | ||
| const modelRelations = {}; | ||
| for (const relation of semanticModel.relations ?? []) { | ||
| if (relation.spaceId !== void 0) { | ||
| const targetNamespaceId = relation.namespaceId ?? defaultNamespaceId; | ||
| modelRelations[relation.fieldName] = { | ||
| to: crossRef(relation.toModel, targetNamespaceId, relation.spaceId), | ||
| cardinality: "N:1", | ||
| on: { | ||
| localFields: relation.on.parentColumns.map((col) => columnToField.get(col) ?? col), | ||
| targetFields: relation.on.childColumns | ||
| } | ||
| }; | ||
| continue; | ||
| } | ||
| const targetModel = assertKnownTargetModel(modelsByName, modelsByCoordinate, semanticModel.modelName, relation.toModel, relation.toNamespaceId, "Relation"); | ||
| assertTargetTableMatches(semanticModel.modelName, targetModel, relation.toTable, "Relation"); | ||
| const targetColumnToField = new Map(targetModel.fields.map((f) => [f.columnName, f.fieldName])); | ||
| const to = crossRef(relation.toModel, relation.toNamespaceId !== void 0 && relation.toNamespaceId.length > 0 ? relation.toNamespaceId : resolveModelNamespaceId(targetModel, modelNameToNamespaceId, defaultNamespaceId)); | ||
| const on = { | ||
| localFields: relation.on.parentColumns.map((col) => columnToField.get(col) ?? col), | ||
| targetFields: relation.on.childColumns.map((col) => targetColumnToField.get(col) ?? col) | ||
| }; | ||
| if (relation.cardinality === "N:M") { | ||
| if (!relation.through) throw new Error(`Relation "${semanticModel.modelName}.${relation.fieldName}" with cardinality "N:M" requires through metadata`); | ||
| modelRelations[relation.fieldName] = { | ||
| to, | ||
| cardinality: "N:M", | ||
| on, | ||
| through: buildThroughDescriptor(relation.through, tableNamespaceByName, targetModel, semanticModel.modelName, relation.fieldName, defaultNamespaceId) | ||
| }; | ||
| } else modelRelations[relation.fieldName] = { | ||
| to, | ||
| cardinality: relation.cardinality, | ||
| on | ||
| }; | ||
| } | ||
| let namespaceModels = modelsByNamespace[namespaceId]; | ||
| if (namespaceModels === void 0) { | ||
| namespaceModels = {}; | ||
| modelsByNamespace[namespaceId] = namespaceModels; | ||
| } | ||
| namespaceModels[semanticModel.modelName] = { | ||
| storage: { | ||
| table: tableName, | ||
| namespaceId, | ||
| fields: storageFields | ||
| }, | ||
| fields: domainFields, | ||
| relations: modelRelations | ||
| }; | ||
| } | ||
| const rootTableNameCounts = /* @__PURE__ */ new Map(); | ||
| for (const entry of rootEntries) rootTableNameCounts.set(entry.tableName, (rootTableNameCounts.get(entry.tableName) ?? 0) + 1); | ||
| const roots = {}; | ||
| for (const entry of rootEntries) { | ||
| const key = (rootTableNameCounts.get(entry.tableName) ?? 0) > 1 ? `${entry.namespaceId}.${entry.tableName}` : entry.tableName; | ||
| roots[key] = entry.ref; | ||
| } | ||
| const rawStorageTypes = definition.storageTypes ?? {}; | ||
| const documentTypes = Object.fromEntries(Object.entries(rawStorageTypes).map(([name, entry]) => { | ||
| if (entry.kind === "codec-instance") return [name, entry]; | ||
| return [name, toStorageTypeInstance({ | ||
| codecId: entry.codecId, | ||
| nativeType: entry.nativeType, | ||
| typeParams: entry.typeParams ?? {} | ||
| })]; | ||
| })); | ||
| const namespaceCoordinateIds = collectStorageNamespaceCoordinateIds(definition); | ||
| const domainEnumsByNs = {}; | ||
| const storageValueSetsByNs = {}; | ||
| for (const [enumName, handle] of Object.entries(definition.enums ?? {})) { | ||
| if (enumName !== handle.enumName) throw new Error(`enum declaration key "${enumName}" must match enumType name "${handle.enumName}". Aliases are not supported.`); | ||
| const nsId = defaultNamespaceId; | ||
| let domainSlot = domainEnumsByNs[nsId]; | ||
| if (domainSlot === void 0) { | ||
| domainSlot = {}; | ||
| domainEnumsByNs[nsId] = domainSlot; | ||
| } | ||
| domainSlot[enumName] = { | ||
| codecId: handle.codecId, | ||
| members: handle.enumMembers.map((m) => ({ | ||
| name: m.name, | ||
| value: encodeViaCodec(m.value, handle.codecId, codecLookup) | ||
| })) | ||
| }; | ||
| let storageSlot = storageValueSetsByNs[nsId]; | ||
| if (storageSlot === void 0) { | ||
| storageSlot = {}; | ||
| storageValueSetsByNs[nsId] = storageSlot; | ||
| } | ||
| storageSlot[enumName] = { | ||
| kind: "valueSet", | ||
| values: handle.values.map((v) => encodeViaCodec(v, handle.codecId, codecLookup)) | ||
| }; | ||
| } | ||
| const { createNamespace } = definition; | ||
| const entityTypesByDiscriminator = collectEntityTypeDescriptorsByDiscriminator(definition); | ||
| const namespaces = Object.fromEntries([...namespaceCoordinateIds].sort().map((id) => { | ||
| const entitiesForNs = mergeColumnAndAttachedEntities(id, definition.attachedEntities?.[id], collectedColumnEntities[id]); | ||
| assertNoManagedEntityKinds(id, entitiesForNs); | ||
| const enumValueSetEntries = storageValueSetsByNs[id]; | ||
| const packValueSetEntries = deriveEntityValueSets(entitiesForNs, entityTypesByDiscriminator); | ||
| const valueSetEntries = enumValueSetEntries !== void 0 || packValueSetEntries !== void 0 ? mergeNamespaceValueSets(id, enumValueSetEntries, packValueSetEntries) : void 0; | ||
| const nsInput = { | ||
| id, | ||
| entries: { | ||
| table: tablesByNamespace[id] ?? {}, | ||
| ...entitiesForNs, | ||
| ...valueSetEntries !== void 0 && Object.keys(valueSetEntries).length > 0 ? { valueSet: valueSetEntries } : {} | ||
| } | ||
| }; | ||
| return [id, createNamespace(nsInput)]; | ||
| })); | ||
| const storageWithoutHash = { | ||
| ...Object.keys(documentTypes).length > 0 ? { types: documentTypes } : {}, | ||
| namespaces: defaultNamespaceId === UNBOUND_NAMESPACE_ID ? ensureUnboundNamespaceSlot(namespaces, createNamespace) : namespaces | ||
| }; | ||
| const storageHash = definition.storageHash ? coreHash(definition.storageHash) : computeStorageHash({ | ||
| target, | ||
| targetFamily, | ||
| storage: storageWithoutHash, | ||
| ...sqlContractCanonicalizationHooks | ||
| }); | ||
| const storage = new SqlStorage({ | ||
| ...storageWithoutHash, | ||
| storageHash | ||
| }); | ||
| const executionSection = executionDefaults.length > 0 ? { mutations: { defaults: executionDefaults.sort((a, b) => { | ||
| const tableCompare = a.ref.table.localeCompare(b.ref.table); | ||
| if (tableCompare !== 0) return tableCompare; | ||
| return a.ref.column.localeCompare(b.ref.column); | ||
| }) } } : void 0; | ||
| const extensionNamespaces = definition.extensionPacks ? Object.values(definition.extensionPacks).map((pack) => pack.id) : void 0; | ||
| const extensionPacks = { ...definition.extensionPacks || {} }; | ||
| if (extensionNamespaces) { | ||
| for (const namespace of extensionNamespaces) if (!Object.hasOwn(extensionPacks, namespace)) extensionPacks[namespace] = {}; | ||
| } | ||
| const extensionPackCapabilitySources = definition.extensionPacks ? Object.values(definition.extensionPacks).map((pack) => pack.capabilities) : []; | ||
| const capabilities = mergeCapabilityMatrices(definition.target.capabilities, ...extensionPackCapabilitySources); | ||
| const profileHash = computeProfileHash({ | ||
| target, | ||
| targetFamily, | ||
| capabilities: {} | ||
| }); | ||
| const executionWithHash = executionSection ? { | ||
| ...executionSection, | ||
| executionHash: computeExecutionHash({ | ||
| target, | ||
| targetFamily, | ||
| execution: executionSection | ||
| }) | ||
| } : void 0; | ||
| const valueObjects = definition.valueObjects && definition.valueObjects.length > 0 ? Object.fromEntries(definition.valueObjects.map((vo) => [vo.name, { fields: Object.fromEntries(vo.fields.map((f) => [f.fieldName, isValueObjectField(f) ? { | ||
| type: { | ||
| kind: "valueObject", | ||
| name: f.valueObjectName | ||
| }, | ||
| nullable: f.nullable, | ||
| ...f.many ? { many: true } : {} | ||
| } : { | ||
| type: { | ||
| kind: "scalar", | ||
| codecId: f.descriptor.codecId, | ||
| ...ifDefined("typeParams", f.descriptor.typeParams) | ||
| }, | ||
| nullable: f.nullable | ||
| }])) }])) : void 0; | ||
| const domainNamespaceIds = new Set(Object.keys(modelsByNamespace)); | ||
| if (domainNamespaceIds.size === 0) domainNamespaceIds.add(defaultNamespaceId); | ||
| if (valueObjects !== void 0) domainNamespaceIds.add(defaultNamespaceId); | ||
| for (const nsId of Object.keys(domainEnumsByNs)) domainNamespaceIds.add(nsId); | ||
| const domainNamespaces = Object.fromEntries([...domainNamespaceIds].sort().map((namespaceId) => { | ||
| const modelsInNs = modelsByNamespace[namespaceId] ?? {}; | ||
| const enumsInNs = domainEnumsByNs[namespaceId]; | ||
| return [namespaceId, { | ||
| models: modelsInNs, | ||
| ...namespaceId === defaultNamespaceId && valueObjects !== void 0 ? { valueObjects } : {}, | ||
| ...enumsInNs !== void 0 && Object.keys(enumsInNs).length > 0 ? { enum: enumsInNs } : {} | ||
| }]; | ||
| })); | ||
| const contract = { | ||
| target, | ||
| targetFamily, | ||
| ...ifDefined("defaultControlPolicy", definition.defaultControlPolicy), | ||
| domain: { namespaces: domainNamespaces }, | ||
| roots, | ||
| storage, | ||
| ...executionWithHash ? { execution: executionWithHash } : {}, | ||
| extensionPacks, | ||
| capabilities, | ||
| profileHash, | ||
| meta: {} | ||
| }; | ||
| assertStorageSemantics(definition, contract); | ||
| return contract; | ||
| } | ||
| //#endregion | ||
| export { buildSqlContractFromDefinition as t }; | ||
| //# sourceMappingURL=build-contract-CAX6inbk.mjs.map |
Sorry, the diff of this file is too big to display
@@ -5,3 +5,2 @@ import { Contract, ControlPolicy } from "@prisma-next/contract/types"; | ||
| import { TargetPackRef } from "@prisma-next/framework-components/components"; | ||
| //#region src/config-types.d.ts | ||
@@ -8,0 +7,0 @@ interface TypeScriptContractSpecifierOptions { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"config-types.d.mts","names":[],"sources":["../src/config-types.ts"],"mappings":";;;;;;UAuBiB,kCAAA;EAAA,SACN,oBAAA,GAAuB,aAAa;AAAA;AAAA,iBAG/B,aAAA,CAAc,OAAA;EAAA,SACnB,MAAA;EAAA,SACA,MAAA,EAAQ,aAAA;EAAA,SACR,eAAA,GAAkB,KAAA,EAAO,iBAAA,KAAsB,gBAAA;EAAA,SAC/C,oBAAA,GAAuB,aAAA;AAAA,IAC9B,gBAAA;AAAA,iBAiBY,kBAAA,CACd,QAAA,EAAU,QAAA,EACV,MAAA,WACA,OAAA,GAAU,kCAAA,GACT,gBAAA;AAAA,iBAaa,0BAAA,CACd,YAAA,UACA,MAAA,WACA,OAAA,GAAU,kCAAA,GACT,gBAAc"} | ||
| {"version":3,"file":"config-types.d.mts","names":[],"sources":["../src/config-types.ts"],"mappings":";;;;;UAuBiB;WACN,uBAAuB;;iBAGlB,cAAc;WACnB;WACA,QAAQ;WACR,kBAAkB,OAAO,sBAAsB;WAC/C,uBAAuB;IAC9B;iBAiBY,mBACd,UAAU,UACV,iBACA,UAAU,qCACT;iBAaa,2BACd,sBACA,iBACA,UAAU,qCACT"} |
@@ -1,2 +0,2 @@ | ||
| import { t as buildSqlContractFromDefinition } from "./build-contract-BzAyIu0y.mjs"; | ||
| import { t as buildSqlContractFromDefinition } from "./build-contract-CAX6inbk.mjs"; | ||
| import { ifDefined } from "@prisma-next/utils/defined"; | ||
@@ -3,0 +3,0 @@ import { pathToFileURL } from "node:url"; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"contract-builder.d.mts","names":[],"sources":["../src/contract-dsl.ts","../src/authoring-type-utils.ts","../src/contract-types.ts","../src/composed-authoring-helpers.ts","../src/contract-definition.ts","../src/build-contract.ts","../src/contract-builder.ts","../src/contract-lowering.ts"],"mappings":"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"} | ||
| {"version":3,"file":"contract-builder.d.mts","names":[],"sources":["../src/contract-dsl.ts","../src/authoring-type-utils.ts","../src/contract-types.ts","../src/composed-authoring-helpers.ts","../src/contract-definition.ts","../src/build-contract.ts","../src/contract-builder.ts","../src/contract-lowering.ts"],"mappings":"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"} |
+11
-11
| { | ||
| "name": "@prisma-next/sql-contract-ts", | ||
| "version": "0.15.0", | ||
| "version": "0.16.0-dev.1", | ||
| "license": "Apache-2.0", | ||
@@ -9,8 +9,8 @@ "type": "module", | ||
| "dependencies": { | ||
| "@prisma-next/config": "0.15.0", | ||
| "@prisma-next/contract": "0.15.0", | ||
| "@prisma-next/contract-authoring": "0.15.0", | ||
| "@prisma-next/framework-components": "0.15.0", | ||
| "@prisma-next/sql-contract": "0.15.0", | ||
| "@prisma-next/utils": "0.15.0", | ||
| "@prisma-next/config": "0.16.0-dev.1", | ||
| "@prisma-next/contract": "0.16.0-dev.1", | ||
| "@prisma-next/contract-authoring": "0.16.0-dev.1", | ||
| "@prisma-next/framework-components": "0.16.0-dev.1", | ||
| "@prisma-next/sql-contract": "0.16.0-dev.1", | ||
| "@prisma-next/utils": "0.16.0-dev.1", | ||
| "arktype": "^2.2.2", | ||
@@ -21,8 +21,8 @@ "pathe": "^2.0.3", | ||
| "devDependencies": { | ||
| "@prisma-next/test-utils": "0.15.0", | ||
| "@prisma-next/tsconfig": "0.15.0", | ||
| "@prisma-next/test-utils": "0.16.0-dev.1", | ||
| "@prisma-next/tsconfig": "0.16.0-dev.1", | ||
| "@types/pg": "8.20.0", | ||
| "pg": "8.22.0", | ||
| "@prisma-next/tsdown": "0.15.0", | ||
| "tsdown": "0.22.3", | ||
| "@prisma-next/tsdown": "0.16.0-dev.1", | ||
| "tsdown": "0.22.8", | ||
| "typescript": "5.9.3", | ||
@@ -29,0 +29,0 @@ "vitest": "4.1.10" |
@@ -29,11 +29,25 @@ import type { | ||
| export type ObjectArgumentType<Properties extends Record<string, AuthoringArgumentDescriptor>> = { | ||
| readonly [K in Exclude< | ||
| keyof Properties, | ||
| OptionalObjectArgumentKeys<Properties> | ||
| >]: ArgTypeFromDescriptor<Properties[K]>; | ||
| } & { | ||
| readonly [K in OptionalObjectArgumentKeys<Properties>]?: ArgTypeFromDescriptor<Properties[K]>; | ||
| }; | ||
| type RequiredObjectArgumentKeys<Properties extends Record<string, AuthoringArgumentDescriptor>> = | ||
| Exclude<keyof Properties, OptionalObjectArgumentKeys<Properties>>; | ||
| /** | ||
| * When every property is optional the result must be a plain weak type rather | ||
| * than `{} & { … }`: TypeScript's weak-type check rejects an object sharing | ||
| * none of the target's properties, but only when the target is weak — and an | ||
| * intersection with `{}` is not. The TS authoring surface runs no runtime | ||
| * argument validation, so this check is the only thing rejecting a foreign key | ||
| * such as `field.nanoid({ bogus: 1 })`. | ||
| */ | ||
| export type ObjectArgumentType<Properties extends Record<string, AuthoringArgumentDescriptor>> = [ | ||
| RequiredObjectArgumentKeys<Properties>, | ||
| ] extends [never] | ||
| ? { | ||
| readonly [K in OptionalObjectArgumentKeys<Properties>]?: ArgTypeFromDescriptor<Properties[K]>; | ||
| } | ||
| : { | ||
| readonly [K in RequiredObjectArgumentKeys<Properties>]: ArgTypeFromDescriptor<Properties[K]>; | ||
| } & { | ||
| readonly [K in OptionalObjectArgumentKeys<Properties>]?: ArgTypeFromDescriptor<Properties[K]>; | ||
| }; | ||
| export type ArgTypeFromDescriptor<Arg extends AuthoringArgumentDescriptor> = Arg extends { | ||
@@ -50,16 +64,34 @@ readonly kind: 'string'; | ||
| : Arg extends { | ||
| readonly kind: 'object'; | ||
| readonly properties: infer Properties extends Record< | ||
| string, | ||
| AuthoringArgumentDescriptor | ||
| >; | ||
| readonly kind: 'option'; | ||
| readonly values: infer Values extends readonly string[]; | ||
| } | ||
| ? ObjectArgumentType<Properties> | ||
| : never; | ||
| ? Values[number] | ||
| : Arg extends { | ||
| readonly kind: 'object'; | ||
| readonly properties: infer Properties extends Record< | ||
| string, | ||
| AuthoringArgumentDescriptor | ||
| >; | ||
| } | ||
| ? ObjectArgumentType<Properties> | ||
| : never; | ||
| export type TupleFromArgumentDescriptors<Args extends readonly AuthoringArgumentDescriptor[]> = { | ||
| readonly [K in keyof Args]: Args[K] extends AuthoringArgumentDescriptor | ||
| ? ArgTypeFromDescriptor<Args[K]> | ||
| : never; | ||
| }; | ||
| /** | ||
| * Recursive rewrite (not a mapped tuple type) so a descriptor marked | ||
| * `optional: true` gets an optional tuple slot (`Type?`), letting callers | ||
| * omit it and every optional arg after it. Required args must precede | ||
| * optional args in a descriptor's `args` list — TypeScript rejects an | ||
| * optional tuple element followed by a required one, and the runtime | ||
| * (`validateAuthoringHelperArguments`'s `minimumArgs`) already treats an | ||
| * optional-before-required arg as effectively required. | ||
| */ | ||
| export type TupleFromArgumentDescriptors<Args extends readonly AuthoringArgumentDescriptor[]> = | ||
| Args extends readonly [ | ||
| infer Head extends AuthoringArgumentDescriptor, | ||
| ...infer Tail extends readonly AuthoringArgumentDescriptor[], | ||
| ] | ||
| ? Head extends { readonly optional: true } | ||
| ? readonly [ArgTypeFromDescriptor<Head>?, ...TupleFromArgumentDescriptors<Tail>] | ||
| : readonly [ArgTypeFromDescriptor<Head>, ...TupleFromArgumentDescriptors<Tail>] | ||
| : readonly []; | ||
@@ -149,2 +181,11 @@ export type SupportsNamedConstraintOptions<Descriptor extends AuthoringFieldPresetDescriptor> = | ||
| /** | ||
| * An intersection of two call signatures rather than one rest-tuple signature | ||
| * with a trailing `options?`. Once optional descriptors yield optional tuple | ||
| * slots, `Params` can infer as the empty tuple, and a single-argument call | ||
| * such as `field.id.nanoid({ size: 16 })` would bind its preset argument to | ||
| * the trailing optional `options` parameter. Resolving the no-options | ||
| * signature first, and falling through to the options-required signature only | ||
| * when the argument list cannot satisfy it, keeps both spellings working. | ||
| */ | ||
| export type FieldHelperFunctionWithNamedConstraint< | ||
@@ -155,8 +196,11 @@ Descriptor extends AuthoringFieldPresetDescriptor, | ||
| } | ||
| ? < | ||
| const Params extends TupleFromArgumentDescriptors<Args>, | ||
| const Name extends string | undefined = undefined, | ||
| >( | ||
| ...args: [...params: Params, options?: NamedConstraintSpec<Name>] | ||
| ) => FieldBuilderFromPresetDescriptor<Descriptor, Params, Name> | ||
| ? (<const Params extends TupleFromArgumentDescriptors<Args>>( | ||
| ...args: Params | ||
| ) => FieldBuilderFromPresetDescriptor<Descriptor, Params>) & | ||
| (< | ||
| const Params extends TupleFromArgumentDescriptors<Args>, | ||
| const Name extends string | undefined = undefined, | ||
| >( | ||
| ...args: [...params: Params, options: NamedConstraintSpec<Name>] | ||
| ) => FieldBuilderFromPresetDescriptor<Descriptor, Params, Name>) | ||
| : <const Name extends string | undefined = undefined>( | ||
@@ -163,0 +207,0 @@ options?: NamedConstraintSpec<Name>, |
+40
-19
@@ -35,2 +35,6 @@ import { | ||
| import { tableEntityKind, valueSetEntityKind } from '@prisma-next/sql-contract/entity-kinds'; | ||
| import { | ||
| type ForeignKeyAuthoringInput, | ||
| materializeForeignKeysAndIndexes, | ||
| } from '@prisma-next/sql-contract/foreign-key-materialization'; | ||
| import { validateIndexTypes } from '@prisma-next/sql-contract/index-type-validation'; | ||
@@ -797,3 +801,5 @@ import { | ||
| const foreignKeys = (semanticModel.foreignKeys ?? []).map((fk) => { | ||
| const authoringForeignKeys: readonly ForeignKeyAuthoringInput[] = ( | ||
| semanticModel.foreignKeys ?? [] | ||
| ).map((fk) => { | ||
| if (fk.references.spaceId !== undefined) { | ||
@@ -867,24 +873,39 @@ // Cross-space FK: the target lives in a different contract space. | ||
| if (!semanticModel.sharesBaseTable) { | ||
| const uniques = (semanticModel.uniques ?? []).map((u) => ({ | ||
| columns: u.columns, | ||
| ...ifDefined('name', u.name), | ||
| })); | ||
| const declaredIndexes = (semanticModel.indexes ?? []).map((i) => ({ | ||
| columns: i.columns, | ||
| ...ifDefined('name', i.name), | ||
| ...ifDefined('type', i.type), | ||
| ...ifDefined('options', i.options), | ||
| })); | ||
| const primaryKey = semanticModel.id | ||
| ? { columns: semanticModel.id.columns, ...ifDefined('name', semanticModel.id.name) } | ||
| : undefined; | ||
| // FK1: lower each FK's `constraint`/`index` authoring intent into | ||
| // discrete persisted entities here — the one place a table's full | ||
| // constraint context (its own declared indexes/uniques/primary key) | ||
| // is available. A `constraint: false` FK contributes no | ||
| // `foreignKeys[]` entry; an `index: true` FK not already backed by a | ||
| // declared index/unique/primary-key contributes a named `indexes[]` | ||
| // entry. This authoring pipeline is shared by both the TS DSL and the | ||
| // PSL interpreter (which calls `buildSqlContractFromDefinition` | ||
| // directly), so both authoring surfaces materialize identically. | ||
| const { foreignKeys, indexes } = materializeForeignKeysAndIndexes( | ||
| tableName, | ||
| authoringForeignKeys, | ||
| declaredIndexes, | ||
| uniques, | ||
| primaryKey, | ||
| ); | ||
| const tableInput: StorageTableInput = { | ||
| columns, | ||
| ...ifDefined('control', semanticModel.control), | ||
| uniques: (semanticModel.uniques ?? []).map((u) => ({ | ||
| columns: u.columns, | ||
| ...ifDefined('name', u.name), | ||
| })), | ||
| indexes: (semanticModel.indexes ?? []).map((i) => ({ | ||
| columns: i.columns, | ||
| ...ifDefined('name', i.name), | ||
| ...ifDefined('type', i.type), | ||
| ...ifDefined('options', i.options), | ||
| })), | ||
| uniques, | ||
| indexes, | ||
| foreignKeys, | ||
| ...(semanticModel.id | ||
| ? { | ||
| primaryKey: { | ||
| columns: semanticModel.id.columns, | ||
| ...ifDefined('name', semanticModel.id.name), | ||
| }, | ||
| } | ||
| : {}), | ||
| ...(primaryKey ? { primaryKey } : {}), | ||
| ...(checksForTable.length > 0 ? { checks: checksForTable } : {}), | ||
@@ -891,0 +912,0 @@ }; |
| import { blindCast } from "@prisma-next/utils/casts"; | ||
| import { ifDefined } from "@prisma-next/utils/defined"; | ||
| import { computeExecutionHash, computeProfileHash, computeStorageHash } from "@prisma-next/contract/hashing"; | ||
| import { asNamespaceId, coreHash, crossRef } from "@prisma-next/contract/types"; | ||
| import { mergeCapabilityMatrices } from "@prisma-next/contract-authoring"; | ||
| import { isAuthoringEntityTypeDescriptor } from "@prisma-next/framework-components/authoring"; | ||
| import { UNBOUND_NAMESPACE_ID } from "@prisma-next/framework-components/ir"; | ||
| import { sqlContractCanonicalizationHooks } from "@prisma-next/sql-contract/canonicalization-hooks"; | ||
| import { tableEntityKind, valueSetEntityKind } from "@prisma-next/sql-contract/entity-kinds"; | ||
| import { validateIndexTypes } from "@prisma-next/sql-contract/index-type-validation"; | ||
| import { createIndexTypeRegistry } from "@prisma-next/sql-contract/index-types"; | ||
| import { SqlStorage, applyFkDefaults, toStorageTypeInstance } from "@prisma-next/sql-contract/types"; | ||
| import { validateStorageSemantics } from "@prisma-next/sql-contract/validators"; | ||
| import { deriveValueSetFromEntity } from "@prisma-next/sql-contract/value-set-derivation-hook"; | ||
| //#region src/build-contract.ts | ||
| function encodeViaCodec(value, codecId, codecLookup) { | ||
| const codec = codecLookup?.get(codecId); | ||
| if (codec) return codec.encodeJson(value); | ||
| return blindCast(value); | ||
| } | ||
| function encodeColumnDefault(defaultInput, codecId, codecLookup, many = false) { | ||
| if (defaultInput.kind === "function") return { | ||
| kind: "function", | ||
| expression: defaultInput.expression | ||
| }; | ||
| if (many) { | ||
| if (!Array.isArray(defaultInput.value)) throw new Error(`Literal default on a list column must be an array; received ${typeof defaultInput.value}. A scalar default on a list field must be rejected at the authoring surface.`); | ||
| return { | ||
| kind: "literal", | ||
| value: defaultInput.value.map((element) => encodeViaCodec(element, codecId, codecLookup)) | ||
| }; | ||
| } | ||
| return { | ||
| kind: "literal", | ||
| value: encodeViaCodec(defaultInput.value, codecId, codecLookup) | ||
| }; | ||
| } | ||
| function assertStorageSemantics(definition, contract) { | ||
| const semanticErrors = validateStorageSemantics(contract.storage); | ||
| if (semanticErrors.length > 0) throw new Error(`Contract semantic validation failed: ${semanticErrors.join("; ")}`); | ||
| const indexTypeRegistry = createIndexTypeRegistry(); | ||
| const packsToRegister = [definition.target, ...Object.values(definition.extensionPacks ?? {})]; | ||
| for (const pack of packsToRegister) { | ||
| const registration = pack.indexTypes; | ||
| if (registration === void 0) continue; | ||
| if (typeof registration !== "object" || registration === null || !Array.isArray(registration.entries)) throw new Error(`Pack "${pack.id ?? "<unknown>"}" declares "indexTypes" but its value is not an IndexTypeRegistration (expected an object with an "entries" array; got ${typeof registration}).`); | ||
| for (const entry of registration.entries) indexTypeRegistry.register(entry); | ||
| } | ||
| validateIndexTypes(contract, indexTypeRegistry); | ||
| } | ||
| function assertKnownTargetModel(modelsByName, modelsByCoordinate, sourceModelName, targetModelName, targetNamespaceId, context) { | ||
| const targetModel = targetNamespaceId !== void 0 && targetNamespaceId.length > 0 ? modelsByCoordinate.get(`${targetNamespaceId}:${targetModelName}`) : modelsByName.get(targetModelName); | ||
| if (!targetModel) { | ||
| const qualified = targetNamespaceId !== void 0 && targetNamespaceId.length > 0 ? `${targetNamespaceId}.${targetModelName}` : targetModelName; | ||
| throw new Error(`${context} on model "${sourceModelName}" references unknown model "${qualified}"`); | ||
| } | ||
| return targetModel; | ||
| } | ||
| function assertTargetTableMatches(sourceModelName, targetModel, referencedTableName, context) { | ||
| if (targetModel.tableName !== referencedTableName) throw new Error(`${context} on model "${sourceModelName}" references table "${referencedTableName}" but model "${targetModel.modelName}" maps to "${targetModel.tableName}"`); | ||
| } | ||
| function isValueObjectField(field) { | ||
| return "valueObjectName" in field; | ||
| } | ||
| /** | ||
| * Resolves a deferred entity-ref column descriptor (e.g. a `pg.enum(handle)` | ||
| * column) against the field's now-known owning namespace: attaches the | ||
| * storage `valueSet` ref the collected entity's derived value-set is stored | ||
| * under. `nativeType` / `typeParams.typeName` stay bare here — schema | ||
| * qualification (e.g. `auth.aal_level`) is a target concern applied in the | ||
| * next step, `qualifyColumnDescriptor`. A descriptor with no `entityRef` (the | ||
| * ordinary case) passes through unchanged. | ||
| */ | ||
| function resolveEntityRefDescriptor(descriptor, namespaceId) { | ||
| const entityRef = descriptor.entityRef; | ||
| if (entityRef === void 0) return descriptor; | ||
| return { | ||
| ...descriptor, | ||
| valueSet: { | ||
| plane: "storage", | ||
| entityKind: "valueSet", | ||
| namespaceId, | ||
| entityName: entityRef.entityName | ||
| } | ||
| }; | ||
| } | ||
| /** | ||
| * Structural check for a target that contributes a `qualifyColumnType` hook | ||
| * on its authoring contributions. Duck-typed (mirroring | ||
| * `contract-psl`'s `hasColumnFromEntityHook`) so the SQL family stays blind | ||
| * to the target's qualification logic and no framework/family interface has | ||
| * to name the hook. | ||
| */ | ||
| function hasColumnTypeQualifier(authoring) { | ||
| return "qualifyColumnType" in authoring && typeof authoring.qualifyColumnType === "function"; | ||
| } | ||
| function resolveColumnTypeQualifier(target) { | ||
| const authoring = target.authoring; | ||
| if (authoring === void 0) return void 0; | ||
| return hasColumnTypeQualifier(authoring) ? authoring.qualifyColumnType : void 0; | ||
| } | ||
| /** | ||
| * Applies the target's `qualifyColumnType` hook to a scalar column descriptor | ||
| * at construction, so the storage column and the domain field (which derives | ||
| * its `type.typeParams` from the storage column) are both built already | ||
| * qualified in a single pass. A descriptor whose codec the target leaves | ||
| * unchanged passes through untouched. | ||
| */ | ||
| function qualifyColumnDescriptor(descriptor, namespaceId, qualify) { | ||
| if (qualify === void 0) return descriptor; | ||
| const qualified = qualify({ | ||
| codecId: descriptor.codecId, | ||
| nativeType: descriptor.nativeType, | ||
| ...ifDefined("typeParams", descriptor.typeParams) | ||
| }, namespaceId); | ||
| if (qualified.nativeType === descriptor.nativeType && qualified.typeParams === descriptor.typeParams) return descriptor; | ||
| return { | ||
| ...descriptor, | ||
| nativeType: qualified.nativeType, | ||
| ...ifDefined("typeParams", qualified.typeParams) | ||
| }; | ||
| } | ||
| /** | ||
| * Records a deferred column's entity-ref into the namespace-scoped collection | ||
| * accumulator (`namespaceId → entityKind → entityName`) — folded into the same | ||
| * namespace assembly `deriveEntityValueSets`/`entries.<kind>` step as the | ||
| * entities-channel attachments, so a column-collected entity gets its | ||
| * value-set the same way an entities-channel one does. | ||
| * | ||
| * The same handle reused by many columns in one namespace is normal (a native | ||
| * enum type backs any number of columns) and records the identical entity once. | ||
| * Two *different* entity instances sharing a name+kind in one namespace is a | ||
| * name collision — the emitted `entries.valueSet.<name>` could only reflect one | ||
| * of them, silently mismatching the other column's type/cast. PSL hard-errors | ||
| * on the equivalent (`PSL_DUPLICATE_DECLARATION`); the TS path rejects it too. | ||
| */ | ||
| function collectEntityFromColumn(collected, namespaceId, entityRef) { | ||
| const forNs = collected[namespaceId] ?? {}; | ||
| const forKind = forNs[entityRef.entityKind] ?? {}; | ||
| const existing = forKind[entityRef.entityName]; | ||
| if (existing !== void 0 && existing !== entityRef.entity) throw new Error(`buildSqlContractFromDefinition: two different "${entityRef.entityKind}" entities named "${entityRef.entityName}" in namespace "${namespaceId}" — pack-entity names must be unique per namespace.`); | ||
| forKind[entityRef.entityName] = entityRef.entity; | ||
| forNs[entityRef.entityKind] = forKind; | ||
| collected[namespaceId] = forNs; | ||
| } | ||
| /** | ||
| * Merges a namespace's entities-channel attachments (lowered from the | ||
| * `entities` handle list, carried on `ContractDefinition.attachedEntities`) | ||
| * with the entities collected from that namespace's deferred entity-ref | ||
| * columns. A column-collected entity that shadows a *different* attached | ||
| * entity of the same kind+name (or vice-versa) is the same name-collision bug | ||
| * `collectEntityFromColumn` guards against across columns, so it is rejected | ||
| * the same way — by entity identity, so the same handle attached and used by | ||
| * a column does not throw. | ||
| */ | ||
| function mergeColumnAndAttachedEntities(namespaceId, attached, columnCollected) { | ||
| if (attached === void 0) return columnCollected; | ||
| if (columnCollected === void 0) return attached; | ||
| const kinds = /* @__PURE__ */ new Set([...Object.keys(attached), ...Object.keys(columnCollected)]); | ||
| const result = {}; | ||
| for (const kind of kinds) { | ||
| const attachedForKind = attached[kind]; | ||
| const columnForKind = columnCollected[kind]; | ||
| for (const [name, entity] of Object.entries(columnForKind ?? {})) { | ||
| const existing = attachedForKind?.[name]; | ||
| if (existing !== void 0 && existing !== entity) throw new Error(`buildSqlContractFromDefinition: two different "${kind}" entities named "${name}" in namespace "${namespaceId}" — a column-referenced entity conflicts with an attached one; pack-entity names must be unique per namespace.`); | ||
| } | ||
| result[kind] = { | ||
| ...attachedForKind, | ||
| ...columnForKind | ||
| }; | ||
| } | ||
| return result; | ||
| } | ||
| const JSONB_CODEC_ID = "pg/jsonb@1"; | ||
| const JSONB_NATIVE_TYPE = "jsonb"; | ||
| function resolveModelNamespaceId(model, modelNameToNamespaceId, defaultNamespaceId) { | ||
| if (model.namespaceId !== void 0 && model.namespaceId.length > 0) return model.namespaceId; | ||
| return modelNameToNamespaceId.get(model.modelName) ?? defaultNamespaceId; | ||
| } | ||
| function buildThroughDescriptor(through, tableNamespaceByName, targetModel, modelName, fieldName, defaultNamespaceId) { | ||
| if (!tableNamespaceByName.has(through.table)) throw new Error(`buildSqlContractFromDefinition: junction table "${through.table}" for relation "${modelName}.${fieldName}" is not a declared model.`); | ||
| const namespaceId = through.namespaceId ?? defaultNamespaceId; | ||
| return { | ||
| table: through.table, | ||
| namespaceId, | ||
| parentColumns: through.parentColumns, | ||
| childColumns: through.childColumns, | ||
| targetColumns: targetColumnsForJunction(targetModel, fieldName) | ||
| }; | ||
| } | ||
| function targetColumnsForJunction(targetModel, fieldName) { | ||
| const primaryKeyColumns = targetModel.id?.columns; | ||
| if (primaryKeyColumns && primaryKeyColumns.length > 0) return primaryKeyColumns; | ||
| const firstUnique = targetModel.uniques?.find((u) => u.columns.length > 0); | ||
| if (firstUnique) return firstUnique.columns; | ||
| throw new Error(`M:N target model "${targetModel.modelName}" (relation field "${fieldName}") has no primary id or unique key to derive junction targetColumns.`); | ||
| } | ||
| function buildStorageColumn(field, storageValueSetRef, codecLookup) { | ||
| if (isValueObjectField(field)) { | ||
| const encodedDefault = field.default !== void 0 ? encodeColumnDefault(field.default, JSONB_CODEC_ID, codecLookup) : void 0; | ||
| return { | ||
| nativeType: JSONB_NATIVE_TYPE, | ||
| codecId: JSONB_CODEC_ID, | ||
| nullable: field.nullable, | ||
| ...ifDefined("default", encodedDefault) | ||
| }; | ||
| } | ||
| const codecId = field.descriptor.codecId; | ||
| const encodedDefault = field.default !== void 0 ? encodeColumnDefault(field.default, codecId, codecLookup, field.many === true) : void 0; | ||
| const valueSet = storageValueSetRef ?? field.descriptor.valueSet; | ||
| return { | ||
| nativeType: field.descriptor.nativeType, | ||
| codecId, | ||
| nullable: field.nullable, | ||
| ...field.many ? { many: true } : {}, | ||
| ...ifDefined("typeParams", field.descriptor.typeParams), | ||
| ...ifDefined("default", encodedDefault), | ||
| ...ifDefined("typeRef", field.descriptor.typeRef), | ||
| ...ifDefined("valueSet", valueSet) | ||
| }; | ||
| } | ||
| function buildDomainField(field, column, domainValueSetRef) { | ||
| if (isValueObjectField(field)) return { | ||
| type: { | ||
| kind: "valueObject", | ||
| name: field.valueObjectName | ||
| }, | ||
| nullable: field.nullable, | ||
| ...field.many ? { many: true } : {} | ||
| }; | ||
| return { | ||
| type: { | ||
| kind: "scalar", | ||
| codecId: column.codecId, | ||
| ...ifDefined("typeParams", column.typeParams) | ||
| }, | ||
| nullable: column.nullable, | ||
| ...field.many ? { many: true } : {}, | ||
| ...ifDefined("valueSet", domainValueSetRef) | ||
| }; | ||
| } | ||
| function collectStorageNamespaceCoordinateIds(definition) { | ||
| const ids = /* @__PURE__ */ new Set(); | ||
| ids.add(definition.target.defaultNamespaceId); | ||
| for (const id of definition.namespaces ?? []) if (id.length > 0) ids.add(id); | ||
| for (const model of definition.models) if (model.namespaceId !== void 0 && model.namespaceId.length > 0) ids.add(model.namespaceId); | ||
| for (const id of Object.keys(definition.attachedEntities ?? {})) if (id.length > 0) ids.add(id); | ||
| return ids; | ||
| } | ||
| /** | ||
| * Entry kinds the framework assembler itself manages (`table` from models, | ||
| * `valueSet` from `enums` and attached-entity value-set derivation). A | ||
| * pack-attached entity claiming one of these would silently clobber or be | ||
| * clobbered by the managed slot, so it is rejected outright. | ||
| */ | ||
| const MANAGED_ENTRY_KINDS = /* @__PURE__ */ new Set([tableEntityKind.kind, valueSetEntityKind.kind]); | ||
| function assertNoManagedEntityKinds(namespaceId, entitiesForNs) { | ||
| if (entitiesForNs === void 0) return; | ||
| for (const kind of Object.keys(entitiesForNs)) if (MANAGED_ENTRY_KINDS.has(kind)) throw new Error(`buildSqlContractFromDefinition: attached entity in namespace "${namespaceId}" declares entry kind "${kind}", which is managed by the framework (table/valueSet) and cannot be attached.`); | ||
| } | ||
| /** | ||
| * Walks the flat `entityTypes` namespace tree contributed by the target pack | ||
| * and every extension pack, indexing descriptors by their `discriminator` — | ||
| * the same string a pack entity's entries-map key (`entries.<kind>`) uses. | ||
| * Mirrors `contract-psl`'s `buildEntityTypesByDiscriminator`, recomposed here | ||
| * from the packs `ContractDefinition` already carries (`target` + | ||
| * `extensionPacks`) since the TS assembler has no single pre-merged | ||
| * `AuthoringContributions` input to read the way the PSL interpreter does. | ||
| */ | ||
| function collectEntityTypeDescriptorsByDiscriminator(definition) { | ||
| const result = /* @__PURE__ */ new Map(); | ||
| const walk = (namespace) => { | ||
| for (const value of Object.values(namespace)) if (isAuthoringEntityTypeDescriptor(value)) result.set(value.discriminator, value); | ||
| else walk(value); | ||
| }; | ||
| const components = [definition.target, ...Object.values(definition.extensionPacks ?? {})]; | ||
| for (const component of components) { | ||
| const entityTypes = component.authoring?.entityTypes; | ||
| if (entityTypes !== void 0) walk(entityTypes); | ||
| } | ||
| return result; | ||
| } | ||
| /** | ||
| * Derives value-sets for every pack entity declared in one namespace, | ||
| * reusing the same `SqlValueSetDerivingEntityTypeOutput.deriveValueSet` hook | ||
| * `contract-psl`'s `lowerExtensionBlocksForNamespace` folds into | ||
| * `entries.valueSet` on the PSL path — so a TS-attached entity (e.g. a | ||
| * native enum) gets its value-set the same way. Entity kinds with no | ||
| * registered descriptor, or whose descriptor output doesn't derive a | ||
| * value-set, contribute nothing. | ||
| */ | ||
| function deriveEntityValueSets(entitiesForNs, entityTypesByDiscriminator) { | ||
| if (entitiesForNs === void 0) return void 0; | ||
| let result; | ||
| for (const [kind, entitiesByName] of Object.entries(entitiesForNs)) { | ||
| const descriptor = entityTypesByDiscriminator.get(kind); | ||
| if (descriptor === void 0) continue; | ||
| for (const [name, entity] of Object.entries(entitiesByName)) { | ||
| const derivedValueSet = deriveValueSetFromEntity(descriptor.output, entity); | ||
| if (derivedValueSet === void 0) continue; | ||
| result ??= {}; | ||
| result[name] = derivedValueSet; | ||
| } | ||
| } | ||
| return result; | ||
| } | ||
| /** | ||
| * Merges a namespace's `enumType()`-derived value-sets with its pack-entity- | ||
| * derived value-sets. Both land in the same `entries.valueSet[name]` slot — | ||
| * which drives value-set → codec typing and the domain-enum CHECK — so a | ||
| * same-named entry in both would let one silently overwrite the other and | ||
| * corrupt whichever column resolves against it. The same collision class the | ||
| * `mergeColumnAndAttachedEntities` guard rejects; the PSL path already hard-errors | ||
| * on the equivalent (`interpretPslDocumentToSqlContract`). Reject it here too. | ||
| */ | ||
| function mergeNamespaceValueSets(namespaceId, enumValueSets, packValueSets) { | ||
| if (enumValueSets !== void 0 && packValueSets !== void 0) { | ||
| for (const name of Object.keys(packValueSets)) if (Object.hasOwn(enumValueSets, name)) throw new Error(`buildSqlContractFromDefinition: value-set "${name}" in namespace "${namespaceId}" is derived from both an enum and a pack entity — names must be unique per namespace.`); | ||
| } | ||
| return { | ||
| ...enumValueSets, | ||
| ...packValueSets | ||
| }; | ||
| } | ||
| function ensureUnboundNamespaceSlot(namespaces, createNamespace) { | ||
| if (Object.hasOwn(namespaces, UNBOUND_NAMESPACE_ID)) return namespaces; | ||
| const unbound = createNamespace({ | ||
| id: UNBOUND_NAMESPACE_ID, | ||
| entries: { table: {} } | ||
| }); | ||
| return { | ||
| [UNBOUND_NAMESPACE_ID]: unbound, | ||
| ...namespaces | ||
| }; | ||
| } | ||
| function buildSqlContractFromDefinition(definition, codecLookup) { | ||
| const target = definition.target.targetId; | ||
| const defaultNamespaceId = definition.target.defaultNamespaceId; | ||
| const qualifyColumnType = resolveColumnTypeQualifier(definition.target); | ||
| const targetFamily = "sql"; | ||
| const resolveNamespaceId = (m) => m.namespaceId !== void 0 && m.namespaceId.length > 0 ? m.namespaceId : defaultNamespaceId; | ||
| const modelsByName = new Map(definition.models.map((m) => [m.modelName, m])); | ||
| const tableNamespaceByName = new Map(definition.models.map((m) => [m.tableName, m.namespaceId !== void 0 && m.namespaceId.length > 0 ? m.namespaceId : defaultNamespaceId])); | ||
| const modelsByCoordinate = new Map(definition.models.map((m) => [`${resolveNamespaceId(m)}:${m.modelName}`, m])); | ||
| const tablesByNamespace = {}; | ||
| const modelNameToNamespaceId = /* @__PURE__ */ new Map(); | ||
| const executionDefaults = []; | ||
| const modelsByNamespace = {}; | ||
| const collectedColumnEntities = {}; | ||
| const rootEntries = []; | ||
| for (const semanticModel of definition.models) { | ||
| const tableName = semanticModel.tableName; | ||
| const namespaceId = semanticModel.namespaceId !== void 0 && semanticModel.namespaceId.length > 0 ? semanticModel.namespaceId : defaultNamespaceId; | ||
| modelNameToNamespaceId.set(semanticModel.modelName, namespaceId); | ||
| if (!semanticModel.sharesBaseTable) rootEntries.push({ | ||
| tableName, | ||
| namespaceId, | ||
| ref: crossRef(semanticModel.modelName, namespaceId) | ||
| }); | ||
| const columns = {}; | ||
| const fieldToColumn = {}; | ||
| const domainFields = {}; | ||
| const domainFieldRefs = {}; | ||
| const checksForTable = []; | ||
| for (const field of semanticModel.fields) { | ||
| const executionDefaultPhases = field.executionDefaults?.onCreate || field.executionDefaults?.onUpdate ? field.executionDefaults : void 0; | ||
| if (executionDefaultPhases) { | ||
| if (field.default !== void 0) throw new Error(`Field "${semanticModel.modelName}.${field.fieldName}" cannot define both default and executionDefaults.`); | ||
| if (field.nullable) throw new Error(`Field "${semanticModel.modelName}.${field.fieldName}" cannot be nullable when executionDefaults are present.`); | ||
| } | ||
| const enumHandle = !isValueObjectField(field) ? field.enumTypeHandle : void 0; | ||
| const storageValueSetRef = enumHandle !== void 0 ? { | ||
| plane: "storage", | ||
| entityKind: "valueSet", | ||
| namespaceId: defaultNamespaceId, | ||
| entityName: enumHandle.enumName | ||
| } : void 0; | ||
| const domainValueSetRef = enumHandle !== void 0 ? { | ||
| plane: "domain", | ||
| entityKind: "enum", | ||
| namespaceId: defaultNamespaceId, | ||
| entityName: enumHandle.enumName | ||
| } : void 0; | ||
| let resolvedField = field; | ||
| if (!isValueObjectField(field)) { | ||
| let descriptor = field.descriptor; | ||
| const entityRef = descriptor.entityRef; | ||
| if (entityRef !== void 0) { | ||
| collectEntityFromColumn(collectedColumnEntities, namespaceId, entityRef); | ||
| descriptor = resolveEntityRefDescriptor(descriptor, namespaceId); | ||
| } | ||
| descriptor = qualifyColumnDescriptor(descriptor, namespaceId, qualifyColumnType); | ||
| if (descriptor !== field.descriptor) resolvedField = { | ||
| ...field, | ||
| descriptor | ||
| }; | ||
| } | ||
| const column = buildStorageColumn(resolvedField, storageValueSetRef, codecLookup); | ||
| columns[field.columnName] = column; | ||
| fieldToColumn[field.fieldName] = field.columnName; | ||
| if (column.valueSet !== void 0 && storageValueSetRef !== void 0) checksForTable.push({ | ||
| name: `${tableName}_${field.columnName}_check`, | ||
| column: field.columnName, | ||
| valueSet: column.valueSet | ||
| }); | ||
| domainFields[field.fieldName] = buildDomainField(field, column, domainValueSetRef); | ||
| if (isValueObjectField(field)) domainFieldRefs[field.fieldName] = { | ||
| kind: "valueObject", | ||
| name: field.valueObjectName, | ||
| ...field.many ? { many: true } : {} | ||
| }; | ||
| else if (field.many) domainFieldRefs[field.fieldName] = { | ||
| kind: "scalar", | ||
| many: true | ||
| }; | ||
| if (executionDefaultPhases) executionDefaults.push({ | ||
| ref: { | ||
| namespace: namespaceId, | ||
| table: tableName, | ||
| column: field.columnName | ||
| }, | ||
| ...ifDefined("onCreate", executionDefaultPhases.onCreate), | ||
| ...ifDefined("onUpdate", executionDefaultPhases.onUpdate) | ||
| }); | ||
| } | ||
| const foreignKeys = (semanticModel.foreignKeys ?? []).map((fk) => { | ||
| if (fk.references.spaceId !== void 0) { | ||
| const targetNamespaceId = fk.references.namespaceId ?? defaultNamespaceId; | ||
| return { | ||
| source: { | ||
| namespaceId: asNamespaceId(namespaceId), | ||
| tableName, | ||
| columns: fk.columns | ||
| }, | ||
| target: { | ||
| namespaceId: asNamespaceId(targetNamespaceId), | ||
| tableName: fk.references.table, | ||
| columns: fk.references.columns, | ||
| spaceId: fk.references.spaceId | ||
| }, | ||
| ...applyFkDefaults({ | ||
| ...ifDefined("constraint", fk.constraint), | ||
| ...ifDefined("index", fk.index) | ||
| }, definition.foreignKeyDefaults), | ||
| ...ifDefined("name", fk.name), | ||
| ...ifDefined("onDelete", fk.onDelete), | ||
| ...ifDefined("onUpdate", fk.onUpdate) | ||
| }; | ||
| } | ||
| const targetModel = assertKnownTargetModel(modelsByName, modelsByCoordinate, semanticModel.modelName, fk.references.model, fk.references.namespaceId, "Foreign key"); | ||
| assertTargetTableMatches(semanticModel.modelName, targetModel, fk.references.table, "Foreign key"); | ||
| const targetNamespaceId = fk.references.namespaceId ?? (targetModel.namespaceId !== void 0 && targetModel.namespaceId.length > 0 ? targetModel.namespaceId : defaultNamespaceId); | ||
| return { | ||
| source: { | ||
| namespaceId: asNamespaceId(namespaceId), | ||
| tableName, | ||
| columns: fk.columns | ||
| }, | ||
| target: { | ||
| namespaceId: asNamespaceId(targetNamespaceId), | ||
| tableName: fk.references.table, | ||
| columns: fk.references.columns | ||
| }, | ||
| ...applyFkDefaults({ | ||
| ...ifDefined("constraint", fk.constraint), | ||
| ...ifDefined("index", fk.index) | ||
| }, definition.foreignKeyDefaults), | ||
| ...ifDefined("name", fk.name), | ||
| ...ifDefined("onDelete", fk.onDelete), | ||
| ...ifDefined("onUpdate", fk.onUpdate) | ||
| }; | ||
| }); | ||
| if (!semanticModel.sharesBaseTable) { | ||
| const tableInput = { | ||
| columns, | ||
| ...ifDefined("control", semanticModel.control), | ||
| uniques: (semanticModel.uniques ?? []).map((u) => ({ | ||
| columns: u.columns, | ||
| ...ifDefined("name", u.name) | ||
| })), | ||
| indexes: (semanticModel.indexes ?? []).map((i) => ({ | ||
| columns: i.columns, | ||
| ...ifDefined("name", i.name), | ||
| ...ifDefined("type", i.type), | ||
| ...ifDefined("options", i.options) | ||
| })), | ||
| foreignKeys, | ||
| ...semanticModel.id ? { primaryKey: { | ||
| columns: semanticModel.id.columns, | ||
| ...ifDefined("name", semanticModel.id.name) | ||
| } } : {}, | ||
| ...checksForTable.length > 0 ? { checks: checksForTable } : {} | ||
| }; | ||
| let nsTables = tablesByNamespace[namespaceId]; | ||
| if (nsTables === void 0) { | ||
| nsTables = {}; | ||
| tablesByNamespace[namespaceId] = nsTables; | ||
| } | ||
| if (nsTables[tableName] !== void 0) throw new Error(`buildSqlContractFromDefinition: duplicate table "${tableName}" in namespace "${namespaceId}".`); | ||
| nsTables[tableName] = tableInput; | ||
| } | ||
| const storageFields = {}; | ||
| for (const [fieldName, columnName] of Object.entries(fieldToColumn)) storageFields[fieldName] = { column: columnName }; | ||
| const columnToField = new Map(Object.entries(fieldToColumn).map(([field, col]) => [col, field])); | ||
| const modelRelations = {}; | ||
| for (const relation of semanticModel.relations ?? []) { | ||
| if (relation.spaceId !== void 0) { | ||
| const targetNamespaceId = relation.namespaceId ?? defaultNamespaceId; | ||
| modelRelations[relation.fieldName] = { | ||
| to: crossRef(relation.toModel, targetNamespaceId, relation.spaceId), | ||
| cardinality: "N:1", | ||
| on: { | ||
| localFields: relation.on.parentColumns.map((col) => columnToField.get(col) ?? col), | ||
| targetFields: relation.on.childColumns | ||
| } | ||
| }; | ||
| continue; | ||
| } | ||
| const targetModel = assertKnownTargetModel(modelsByName, modelsByCoordinate, semanticModel.modelName, relation.toModel, relation.toNamespaceId, "Relation"); | ||
| assertTargetTableMatches(semanticModel.modelName, targetModel, relation.toTable, "Relation"); | ||
| const targetColumnToField = new Map(targetModel.fields.map((f) => [f.columnName, f.fieldName])); | ||
| const to = crossRef(relation.toModel, relation.toNamespaceId !== void 0 && relation.toNamespaceId.length > 0 ? relation.toNamespaceId : resolveModelNamespaceId(targetModel, modelNameToNamespaceId, defaultNamespaceId)); | ||
| const on = { | ||
| localFields: relation.on.parentColumns.map((col) => columnToField.get(col) ?? col), | ||
| targetFields: relation.on.childColumns.map((col) => targetColumnToField.get(col) ?? col) | ||
| }; | ||
| if (relation.cardinality === "N:M") { | ||
| if (!relation.through) throw new Error(`Relation "${semanticModel.modelName}.${relation.fieldName}" with cardinality "N:M" requires through metadata`); | ||
| modelRelations[relation.fieldName] = { | ||
| to, | ||
| cardinality: "N:M", | ||
| on, | ||
| through: buildThroughDescriptor(relation.through, tableNamespaceByName, targetModel, semanticModel.modelName, relation.fieldName, defaultNamespaceId) | ||
| }; | ||
| } else modelRelations[relation.fieldName] = { | ||
| to, | ||
| cardinality: relation.cardinality, | ||
| on | ||
| }; | ||
| } | ||
| let namespaceModels = modelsByNamespace[namespaceId]; | ||
| if (namespaceModels === void 0) { | ||
| namespaceModels = {}; | ||
| modelsByNamespace[namespaceId] = namespaceModels; | ||
| } | ||
| namespaceModels[semanticModel.modelName] = { | ||
| storage: { | ||
| table: tableName, | ||
| namespaceId, | ||
| fields: storageFields | ||
| }, | ||
| fields: domainFields, | ||
| relations: modelRelations | ||
| }; | ||
| } | ||
| const rootTableNameCounts = /* @__PURE__ */ new Map(); | ||
| for (const entry of rootEntries) rootTableNameCounts.set(entry.tableName, (rootTableNameCounts.get(entry.tableName) ?? 0) + 1); | ||
| const roots = {}; | ||
| for (const entry of rootEntries) { | ||
| const key = (rootTableNameCounts.get(entry.tableName) ?? 0) > 1 ? `${entry.namespaceId}.${entry.tableName}` : entry.tableName; | ||
| roots[key] = entry.ref; | ||
| } | ||
| const rawStorageTypes = definition.storageTypes ?? {}; | ||
| const documentTypes = Object.fromEntries(Object.entries(rawStorageTypes).map(([name, entry]) => { | ||
| if (entry.kind === "codec-instance") return [name, entry]; | ||
| return [name, toStorageTypeInstance({ | ||
| codecId: entry.codecId, | ||
| nativeType: entry.nativeType, | ||
| typeParams: entry.typeParams ?? {} | ||
| })]; | ||
| })); | ||
| const namespaceCoordinateIds = collectStorageNamespaceCoordinateIds(definition); | ||
| const domainEnumsByNs = {}; | ||
| const storageValueSetsByNs = {}; | ||
| for (const [enumName, handle] of Object.entries(definition.enums ?? {})) { | ||
| if (enumName !== handle.enumName) throw new Error(`enum declaration key "${enumName}" must match enumType name "${handle.enumName}". Aliases are not supported.`); | ||
| const nsId = defaultNamespaceId; | ||
| let domainSlot = domainEnumsByNs[nsId]; | ||
| if (domainSlot === void 0) { | ||
| domainSlot = {}; | ||
| domainEnumsByNs[nsId] = domainSlot; | ||
| } | ||
| domainSlot[enumName] = { | ||
| codecId: handle.codecId, | ||
| members: handle.enumMembers.map((m) => ({ | ||
| name: m.name, | ||
| value: encodeViaCodec(m.value, handle.codecId, codecLookup) | ||
| })) | ||
| }; | ||
| let storageSlot = storageValueSetsByNs[nsId]; | ||
| if (storageSlot === void 0) { | ||
| storageSlot = {}; | ||
| storageValueSetsByNs[nsId] = storageSlot; | ||
| } | ||
| storageSlot[enumName] = { | ||
| kind: "valueSet", | ||
| values: handle.values.map((v) => encodeViaCodec(v, handle.codecId, codecLookup)) | ||
| }; | ||
| } | ||
| const { createNamespace } = definition; | ||
| const entityTypesByDiscriminator = collectEntityTypeDescriptorsByDiscriminator(definition); | ||
| const namespaces = Object.fromEntries([...namespaceCoordinateIds].sort().map((id) => { | ||
| const entitiesForNs = mergeColumnAndAttachedEntities(id, definition.attachedEntities?.[id], collectedColumnEntities[id]); | ||
| assertNoManagedEntityKinds(id, entitiesForNs); | ||
| const enumValueSetEntries = storageValueSetsByNs[id]; | ||
| const packValueSetEntries = deriveEntityValueSets(entitiesForNs, entityTypesByDiscriminator); | ||
| const valueSetEntries = enumValueSetEntries !== void 0 || packValueSetEntries !== void 0 ? mergeNamespaceValueSets(id, enumValueSetEntries, packValueSetEntries) : void 0; | ||
| const nsInput = { | ||
| id, | ||
| entries: { | ||
| table: tablesByNamespace[id] ?? {}, | ||
| ...entitiesForNs, | ||
| ...valueSetEntries !== void 0 && Object.keys(valueSetEntries).length > 0 ? { valueSet: valueSetEntries } : {} | ||
| } | ||
| }; | ||
| return [id, createNamespace(nsInput)]; | ||
| })); | ||
| const storageWithoutHash = { | ||
| ...Object.keys(documentTypes).length > 0 ? { types: documentTypes } : {}, | ||
| namespaces: defaultNamespaceId === UNBOUND_NAMESPACE_ID ? ensureUnboundNamespaceSlot(namespaces, createNamespace) : namespaces | ||
| }; | ||
| const storageHash = definition.storageHash ? coreHash(definition.storageHash) : computeStorageHash({ | ||
| target, | ||
| targetFamily, | ||
| storage: storageWithoutHash, | ||
| ...sqlContractCanonicalizationHooks | ||
| }); | ||
| const storage = new SqlStorage({ | ||
| ...storageWithoutHash, | ||
| storageHash | ||
| }); | ||
| const executionSection = executionDefaults.length > 0 ? { mutations: { defaults: executionDefaults.sort((a, b) => { | ||
| const tableCompare = a.ref.table.localeCompare(b.ref.table); | ||
| if (tableCompare !== 0) return tableCompare; | ||
| return a.ref.column.localeCompare(b.ref.column); | ||
| }) } } : void 0; | ||
| const extensionNamespaces = definition.extensionPacks ? Object.values(definition.extensionPacks).map((pack) => pack.id) : void 0; | ||
| const extensionPacks = { ...definition.extensionPacks || {} }; | ||
| if (extensionNamespaces) { | ||
| for (const namespace of extensionNamespaces) if (!Object.hasOwn(extensionPacks, namespace)) extensionPacks[namespace] = {}; | ||
| } | ||
| const extensionPackCapabilitySources = definition.extensionPacks ? Object.values(definition.extensionPacks).map((pack) => pack.capabilities) : []; | ||
| const capabilities = mergeCapabilityMatrices(definition.target.capabilities, ...extensionPackCapabilitySources); | ||
| const profileHash = computeProfileHash({ | ||
| target, | ||
| targetFamily, | ||
| capabilities: {} | ||
| }); | ||
| const executionWithHash = executionSection ? { | ||
| ...executionSection, | ||
| executionHash: computeExecutionHash({ | ||
| target, | ||
| targetFamily, | ||
| execution: executionSection | ||
| }) | ||
| } : void 0; | ||
| const valueObjects = definition.valueObjects && definition.valueObjects.length > 0 ? Object.fromEntries(definition.valueObjects.map((vo) => [vo.name, { fields: Object.fromEntries(vo.fields.map((f) => [f.fieldName, isValueObjectField(f) ? { | ||
| type: { | ||
| kind: "valueObject", | ||
| name: f.valueObjectName | ||
| }, | ||
| nullable: f.nullable, | ||
| ...f.many ? { many: true } : {} | ||
| } : { | ||
| type: { | ||
| kind: "scalar", | ||
| codecId: f.descriptor.codecId, | ||
| ...ifDefined("typeParams", f.descriptor.typeParams) | ||
| }, | ||
| nullable: f.nullable | ||
| }])) }])) : void 0; | ||
| const domainNamespaceIds = new Set(Object.keys(modelsByNamespace)); | ||
| if (domainNamespaceIds.size === 0) domainNamespaceIds.add(defaultNamespaceId); | ||
| if (valueObjects !== void 0) domainNamespaceIds.add(defaultNamespaceId); | ||
| for (const nsId of Object.keys(domainEnumsByNs)) domainNamespaceIds.add(nsId); | ||
| const domainNamespaces = Object.fromEntries([...domainNamespaceIds].sort().map((namespaceId) => { | ||
| const modelsInNs = modelsByNamespace[namespaceId] ?? {}; | ||
| const enumsInNs = domainEnumsByNs[namespaceId]; | ||
| return [namespaceId, { | ||
| models: modelsInNs, | ||
| ...namespaceId === defaultNamespaceId && valueObjects !== void 0 ? { valueObjects } : {}, | ||
| ...enumsInNs !== void 0 && Object.keys(enumsInNs).length > 0 ? { enum: enumsInNs } : {} | ||
| }]; | ||
| })); | ||
| const contract = { | ||
| target, | ||
| targetFamily, | ||
| ...ifDefined("defaultControlPolicy", definition.defaultControlPolicy), | ||
| domain: { namespaces: domainNamespaces }, | ||
| roots, | ||
| storage, | ||
| ...executionWithHash ? { execution: executionWithHash } : {}, | ||
| extensionPacks, | ||
| capabilities, | ||
| profileHash, | ||
| meta: {} | ||
| }; | ||
| assertStorageSemantics(definition, contract); | ||
| return contract; | ||
| } | ||
| //#endregion | ||
| export { buildSqlContractFromDefinition as t }; | ||
| //# sourceMappingURL=build-contract-BzAyIu0y.mjs.map |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
9269
0.74%762589
-1.17%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed