🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@prisma-next/sql-contract-ts

Package Overview
Dependencies
Maintainers
4
Versions
1043
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@prisma-next/sql-contract-ts - npm Package Compare versions

Comparing version
0.16.0-dev.6
to
0.16.0-dev.7
+772
dist/build-contract-DWRZ3jRz.mjs
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";
import { InternalError } from "@prisma-next/utils/internal-error";
import { structuredError } from "@prisma-next/utils/structured-error";
//#region src/contract-errors.ts
function contractError(code, message, options) {
return structuredError(code, message, options);
}
//#endregion
//#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 InternalError(`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 contractError("CONTRACT.VALIDATION_FAILED", `Contract semantic validation failed: ${semanticErrors.join("; ")}`, { meta: { errors: semanticErrors } });
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 contractError("CONTRACT.PACK_CONTRIBUTION_INVALID", `Pack "${pack.id ?? "<unknown>"}" declares "indexTypes" but its value is not an IndexTypeRegistration (expected an object with an "entries" array; got ${typeof registration}).`, { meta: {
packId: pack.id,
contribution: "indexTypes",
reason: "invalid-shape"
} });
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 contractError("CONTRACT.MODEL_UNKNOWN", `${context} on model "${sourceModelName}" references unknown model "${qualified}"`, { meta: {
sourceModel: sourceModelName,
targetModel: qualified,
context
} });
}
return targetModel;
}
function assertTargetTableMatches(sourceModelName, targetModel, referencedTableName, context) {
if (targetModel.tableName !== referencedTableName) throw contractError("CONTRACT.TABLE_MISMATCH", `${context} on model "${sourceModelName}" references table "${referencedTableName}" but model "${targetModel.modelName}" maps to "${targetModel.tableName}"`, { meta: {
sourceModel: sourceModelName,
referencedTable: referencedTableName,
mappedTable: targetModel.tableName,
context
} });
}
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 contractError("CONTRACT.NAME_DUPLICATE", `buildSqlContractFromDefinition: two different "${entityRef.entityKind}" entities named "${entityRef.entityName}" in namespace "${namespaceId}" — pack-entity names must be unique per namespace.`, { meta: {
kind: entityRef.entityKind,
name: entityRef.entityName,
namespaceId
} });
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 contractError("CONTRACT.NAME_DUPLICATE", `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.`, { meta: {
kind,
name,
namespaceId
} });
}
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 contractError("CONTRACT.MODEL_UNKNOWN", `buildSqlContractFromDefinition: junction table "${through.table}" for relation "${modelName}.${fieldName}" is not a declared model.`, { meta: {
sourceModel: modelName,
relationName: fieldName,
junctionTable: through.table
} });
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 contractError("CONTRACT.IDENTITY_INVALID", `M:N target model "${targetModel.modelName}" (relation field "${fieldName}") has no primary id or unique key to derive junction targetColumns.`, { meta: {
modelName: targetModel.modelName,
reason: "no-key-for-junction-target-columns"
} });
}
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 contractError("CONTRACT.ENTITY_KIND_INVALID", `buildSqlContractFromDefinition: attached entity in namespace "${namespaceId}" declares entry kind "${kind}", which is managed by the framework (table/valueSet) and cannot be attached.`, { meta: {
entityKind: kind,
namespaceId
} });
}
/**
* 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 contractError("CONTRACT.NAME_DUPLICATE", `buildSqlContractFromDefinition: value-set "${name}" in namespace "${namespaceId}" is derived from both an enum and a pack entity — names must be unique per namespace.`, { meta: {
kind: "valueSet",
name,
namespaceId
} });
}
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 contractError("CONTRACT.DEFAULT_INVALID", `Field "${semanticModel.modelName}.${field.fieldName}" cannot define both default and executionDefaults.`, { meta: {
modelName: semanticModel.modelName,
fieldName: field.fieldName,
reason: "default-and-executionDefaults"
} });
if (field.nullable) throw contractError("CONTRACT.DEFAULT_INVALID", `Field "${semanticModel.modelName}.${field.fieldName}" cannot be nullable when executionDefaults are present.`, { meta: {
modelName: semanticModel.modelName,
fieldName: field.fieldName,
reason: "nullable-with-executionDefaults"
} });
}
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 contractError("CONTRACT.NAME_DUPLICATE", `buildSqlContractFromDefinition: duplicate table "${tableName}" in namespace "${namespaceId}".`, { meta: {
kind: "table",
name: tableName,
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 contractError("CONTRACT.RELATION_INVALID", `Relation "${semanticModel.modelName}.${relation.fieldName}" with cardinality "N:M" requires through metadata`, { meta: {
modelName: semanticModel.modelName,
relationName: relation.fieldName,
reason: "many-to-many-missing-through"
} });
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 contractError("CONTRACT.ENUM_INVALID", `enum declaration key "${enumName}" must match enumType name "${handle.enumName}". Aliases are not supported.`, { meta: {
enumName: handle.enumName,
declarationKey: enumName,
reason: "key-name-mismatch"
} });
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 { contractError as n, buildSqlContractFromDefinition as t };
//# sourceMappingURL=build-contract-DWRZ3jRz.mjs.map

Sorry, the diff of this file is too big to display

import type { StructuredError, StructuredErrorOptions } from '@prisma-next/utils/structured-error';
import { structuredError } from '@prisma-next/utils/structured-error';
export type ContractCode = `CONTRACT.${ContractSubcode}`;
type ContractSubcode =
| 'VALIDATION_FAILED'
| 'NAME_DUPLICATE'
| 'MODEL_UNKNOWN'
| 'PACK_CONTRIBUTION_INVALID'
| 'PACK_FAMILY_MISMATCH'
| 'PACK_TARGET_MISMATCH'
| 'PACK_REF_INVALID'
| 'PACK_MISSING'
| 'NAMESPACE_INVALID'
| 'NAMESPACE_UNSUPPORTED'
| 'NAMESPACE_UNKNOWN'
| 'ARGUMENT_INVALID'
| 'FOREIGN_KEY_INVALID'
| 'RELATION_INVALID'
| 'IDENTITY_INVALID'
| 'CONSTRAINT_INVALID'
| 'DEFAULT_INVALID'
| 'ENUM_INVALID'
| 'TYPE_UNKNOWN'
| 'FIELD_UNKNOWN'
| 'MODEL_TOKEN_INVALID'
| 'MODULE_EXPORT_MISSING'
| 'ENTITY_KIND_UNKNOWN'
| 'ENTITY_KIND_INVALID'
| 'TABLE_MISMATCH';
export function contractError(
code: ContractCode,
message: string,
options?: StructuredErrorOptions,
): StructuredError {
return structuredError(code, message, options);
}
+1
-1

@@ -1,1 +0,1 @@

{"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"}
{"version":3,"file":"config-types.d.mts","names":[],"sources":["../src/config-types.ts"],"mappings":";;;;;UAyBiB;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,3 +0,4 @@

import { t as buildSqlContractFromDefinition } from "./build-contract-CAX6inbk.mjs";
import { n as contractError, t as buildSqlContractFromDefinition } from "./build-contract-DWRZ3jRz.mjs";
import { ifDefined } from "@prisma-next/utils/defined";
import { InternalError } from "@prisma-next/utils/internal-error";
import { pathToFileURL } from "node:url";

@@ -50,6 +51,6 @@ import { applySpecifierDefaultControlPolicy } from "@prisma-next/contract/apply-specifier-default-control-policy";

const [absolutePath] = context.resolvedInputs;
if (absolutePath === void 0) throw new Error("typescriptContractFromPath: context.resolvedInputs is empty. The CLI config loader should populate it positional-matched with source.inputs.");
if (absolutePath === void 0) throw new InternalError("typescriptContractFromPath: context.resolvedInputs is empty. The CLI config loader should populate it positional-matched with source.inputs.");
const mod = await import(pathToFileURL(absolutePath).href);
const contract = mod.default ?? mod.contract;
if (contract === void 0) throw new Error(`typescriptContractFromPath: module at "${absolutePath}" has no "default" or "contract" export.`);
if (contract === void 0) throw contractError("CONTRACT.MODULE_EXPORT_MISSING", `typescriptContractFromPath: module at "${absolutePath}" has no "default" or "contract" export.`, { meta: { path: absolutePath } });
return ok(applySpecifierDefaultControlPolicy(contract, options?.defaultControlPolicy));

@@ -56,0 +57,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"config-types.mjs","names":[],"sources":["../src/config-types.ts"],"sourcesContent":["import { pathToFileURL } from 'node:url';\nimport type { ContractConfig } from '@prisma-next/config/config-types';\nimport { applySpecifierDefaultControlPolicy } from '@prisma-next/contract/apply-specifier-default-control-policy';\nimport type { Contract, ControlPolicy } from '@prisma-next/contract/types';\nimport type { TargetPackRef } from '@prisma-next/framework-components/components';\nimport type { SqlNamespaceBase, SqlNamespaceInput } from '@prisma-next/sql-contract/types';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { ok } from '@prisma-next/utils/result';\nimport { extname } from 'pathe';\nimport { buildSqlContractFromDefinition } from './build-contract';\n\n/**\n * Derives the emit output path from the TS contract input so artefacts land\n * colocated with the source (e.g. `prisma/contract.ts` →\n * `prisma/contract.json`). Mirrors the same default-derivation logic in\n * `@prisma-next/sql-contract-psl/provider`.\n */\nfunction defaultOutputFromContractPath(contractPath: string): string {\n const ext = extname(contractPath);\n if (ext.length === 0) return `${contractPath}.json`;\n return `${contractPath.slice(0, -ext.length)}.json`;\n}\n\nexport interface TypeScriptContractSpecifierOptions {\n readonly defaultControlPolicy?: ControlPolicy;\n}\n\nexport function emptyContract(options: {\n readonly output?: string;\n readonly target: TargetPackRef<'sql', string>;\n readonly createNamespace: (input: SqlNamespaceInput) => SqlNamespaceBase;\n readonly defaultControlPolicy?: ControlPolicy;\n}): ContractConfig {\n return {\n source: {\n sourceFormat: 'typescript',\n load: async () => {\n const built = buildSqlContractFromDefinition({\n target: options.target,\n createNamespace: options.createNamespace,\n models: [],\n });\n return ok(applySpecifierDefaultControlPolicy(built, options.defaultControlPolicy));\n },\n },\n ...ifDefined('output', options.output),\n };\n}\n\nexport function typescriptContract(\n contract: Contract,\n output?: string,\n options?: TypeScriptContractSpecifierOptions,\n): ContractConfig {\n return {\n source: {\n sourceFormat: 'typescript',\n load: async () =>\n ok(applySpecifierDefaultControlPolicy(contract, options?.defaultControlPolicy)),\n },\n // The in-memory variant has no input path to anchor on; fall through to\n // the global default in `normalizeContractConfig` when caller doesn't pin it.\n ...ifDefined('output', output),\n };\n}\n\nexport function typescriptContractFromPath(\n contractPath: string,\n output?: string,\n options?: TypeScriptContractSpecifierOptions,\n): ContractConfig {\n return {\n source: {\n sourceFormat: 'typescript',\n inputs: [contractPath],\n load: async (context) => {\n const [absolutePath] = context.resolvedInputs;\n if (absolutePath === undefined) {\n throw new Error(\n 'typescriptContractFromPath: context.resolvedInputs is empty. The CLI config loader should populate it positional-matched with source.inputs.',\n );\n }\n const mod = await import(pathToFileURL(absolutePath).href);\n const contract: Contract | undefined = mod.default ?? mod.contract;\n if (contract === undefined) {\n throw new Error(\n `typescriptContractFromPath: module at \"${absolutePath}\" has no \"default\" or \"contract\" export.`,\n );\n }\n return ok(applySpecifierDefaultControlPolicy(contract, options?.defaultControlPolicy));\n },\n },\n output: output ?? defaultOutputFromContractPath(contractPath),\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,SAAS,8BAA8B,cAA8B;CACnE,MAAM,MAAM,QAAQ,YAAY;CAChC,IAAI,IAAI,WAAW,GAAG,OAAO,GAAG,aAAa;CAC7C,OAAO,GAAG,aAAa,MAAM,GAAG,CAAC,IAAI,MAAM,EAAE;AAC/C;AAMA,SAAgB,cAAc,SAKX;CACjB,OAAO;EACL,QAAQ;GACN,cAAc;GACd,MAAM,YAAY;IAMhB,OAAO,GAAG,mCALI,+BAA+B;KAC3C,QAAQ,QAAQ;KAChB,iBAAiB,QAAQ;KACzB,QAAQ,CAAC;IACX,CACiD,GAAG,QAAQ,oBAAoB,CAAC;GACnF;EACF;EACA,GAAG,UAAU,UAAU,QAAQ,MAAM;CACvC;AACF;AAEA,SAAgB,mBACd,UACA,QACA,SACgB;CAChB,OAAO;EACL,QAAQ;GACN,cAAc;GACd,MAAM,YACJ,GAAG,mCAAmC,UAAU,SAAS,oBAAoB,CAAC;EAClF;EAGA,GAAG,UAAU,UAAU,MAAM;CAC/B;AACF;AAEA,SAAgB,2BACd,cACA,QACA,SACgB;CAChB,OAAO;EACL,QAAQ;GACN,cAAc;GACd,QAAQ,CAAC,YAAY;GACrB,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,gBAAgB,QAAQ;IAC/B,IAAI,iBAAiB,KAAA,GACnB,MAAM,IAAI,MACR,8IACF;IAEF,MAAM,MAAM,MAAM,OAAO,cAAc,YAAY,CAAC,CAAC;IACrD,MAAM,WAAiC,IAAI,WAAW,IAAI;IAC1D,IAAI,aAAa,KAAA,GACf,MAAM,IAAI,MACR,0CAA0C,aAAa,yCACzD;IAEF,OAAO,GAAG,mCAAmC,UAAU,SAAS,oBAAoB,CAAC;GACvF;EACF;EACA,QAAQ,UAAU,8BAA8B,YAAY;CAC9D;AACF"}
{"version":3,"file":"config-types.mjs","names":[],"sources":["../src/config-types.ts"],"sourcesContent":["import { pathToFileURL } from 'node:url';\nimport type { ContractConfig } from '@prisma-next/config/config-types';\nimport { applySpecifierDefaultControlPolicy } from '@prisma-next/contract/apply-specifier-default-control-policy';\nimport type { Contract, ControlPolicy } from '@prisma-next/contract/types';\nimport type { TargetPackRef } from '@prisma-next/framework-components/components';\nimport type { SqlNamespaceBase, SqlNamespaceInput } from '@prisma-next/sql-contract/types';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { InternalError } from '@prisma-next/utils/internal-error';\nimport { ok } from '@prisma-next/utils/result';\nimport { extname } from 'pathe';\nimport { buildSqlContractFromDefinition } from './build-contract';\nimport { contractError } from './contract-errors';\n\n/**\n * Derives the emit output path from the TS contract input so artefacts land\n * colocated with the source (e.g. `prisma/contract.ts` →\n * `prisma/contract.json`). Mirrors the same default-derivation logic in\n * `@prisma-next/sql-contract-psl/provider`.\n */\nfunction defaultOutputFromContractPath(contractPath: string): string {\n const ext = extname(contractPath);\n if (ext.length === 0) return `${contractPath}.json`;\n return `${contractPath.slice(0, -ext.length)}.json`;\n}\n\nexport interface TypeScriptContractSpecifierOptions {\n readonly defaultControlPolicy?: ControlPolicy;\n}\n\nexport function emptyContract(options: {\n readonly output?: string;\n readonly target: TargetPackRef<'sql', string>;\n readonly createNamespace: (input: SqlNamespaceInput) => SqlNamespaceBase;\n readonly defaultControlPolicy?: ControlPolicy;\n}): ContractConfig {\n return {\n source: {\n sourceFormat: 'typescript',\n load: async () => {\n const built = buildSqlContractFromDefinition({\n target: options.target,\n createNamespace: options.createNamespace,\n models: [],\n });\n return ok(applySpecifierDefaultControlPolicy(built, options.defaultControlPolicy));\n },\n },\n ...ifDefined('output', options.output),\n };\n}\n\nexport function typescriptContract(\n contract: Contract,\n output?: string,\n options?: TypeScriptContractSpecifierOptions,\n): ContractConfig {\n return {\n source: {\n sourceFormat: 'typescript',\n load: async () =>\n ok(applySpecifierDefaultControlPolicy(contract, options?.defaultControlPolicy)),\n },\n // The in-memory variant has no input path to anchor on; fall through to\n // the global default in `normalizeContractConfig` when caller doesn't pin it.\n ...ifDefined('output', output),\n };\n}\n\nexport function typescriptContractFromPath(\n contractPath: string,\n output?: string,\n options?: TypeScriptContractSpecifierOptions,\n): ContractConfig {\n return {\n source: {\n sourceFormat: 'typescript',\n inputs: [contractPath],\n load: async (context) => {\n const [absolutePath] = context.resolvedInputs;\n if (absolutePath === undefined) {\n throw new InternalError(\n 'typescriptContractFromPath: context.resolvedInputs is empty. The CLI config loader should populate it positional-matched with source.inputs.',\n );\n }\n const mod = await import(pathToFileURL(absolutePath).href);\n const contract: Contract | undefined = mod.default ?? mod.contract;\n if (contract === undefined) {\n throw contractError(\n 'CONTRACT.MODULE_EXPORT_MISSING',\n `typescriptContractFromPath: module at \"${absolutePath}\" has no \"default\" or \"contract\" export.`,\n { meta: { path: absolutePath } },\n );\n }\n return ok(applySpecifierDefaultControlPolicy(contract, options?.defaultControlPolicy));\n },\n },\n output: output ?? defaultOutputFromContractPath(contractPath),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAmBA,SAAS,8BAA8B,cAA8B;CACnE,MAAM,MAAM,QAAQ,YAAY;CAChC,IAAI,IAAI,WAAW,GAAG,OAAO,GAAG,aAAa;CAC7C,OAAO,GAAG,aAAa,MAAM,GAAG,CAAC,IAAI,MAAM,EAAE;AAC/C;AAMA,SAAgB,cAAc,SAKX;CACjB,OAAO;EACL,QAAQ;GACN,cAAc;GACd,MAAM,YAAY;IAMhB,OAAO,GAAG,mCALI,+BAA+B;KAC3C,QAAQ,QAAQ;KAChB,iBAAiB,QAAQ;KACzB,QAAQ,CAAC;IACX,CACiD,GAAG,QAAQ,oBAAoB,CAAC;GACnF;EACF;EACA,GAAG,UAAU,UAAU,QAAQ,MAAM;CACvC;AACF;AAEA,SAAgB,mBACd,UACA,QACA,SACgB;CAChB,OAAO;EACL,QAAQ;GACN,cAAc;GACd,MAAM,YACJ,GAAG,mCAAmC,UAAU,SAAS,oBAAoB,CAAC;EAClF;EAGA,GAAG,UAAU,UAAU,MAAM;CAC/B;AACF;AAEA,SAAgB,2BACd,cACA,QACA,SACgB;CAChB,OAAO;EACL,QAAQ;GACN,cAAc;GACd,QAAQ,CAAC,YAAY;GACrB,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,gBAAgB,QAAQ;IAC/B,IAAI,iBAAiB,KAAA,GACnB,MAAM,IAAI,cACR,8IACF;IAEF,MAAM,MAAM,MAAM,OAAO,cAAc,YAAY,CAAC,CAAC;IACrD,MAAM,WAAiC,IAAI,WAAW,IAAI;IAC1D,IAAI,aAAa,KAAA,GACf,MAAM,cACJ,kCACA,0CAA0C,aAAa,2CACvD,EAAE,MAAM,EAAE,MAAM,aAAa,EAAE,CACjC;IAEF,OAAO,GAAG,mCAAmC,UAAU,SAAS,oBAAoB,CAAC;GACvF;EACF;EACA,QAAQ,UAAU,8BAA8B,YAAY;CAC9D;AACF"}

@@ -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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"}
{
"name": "@prisma-next/sql-contract-ts",
"version": "0.16.0-dev.6",
"version": "0.16.0-dev.7",
"license": "Apache-2.0",

@@ -9,8 +9,8 @@ "type": "module",

"dependencies": {
"@prisma-next/config": "0.16.0-dev.6",
"@prisma-next/contract": "0.16.0-dev.6",
"@prisma-next/contract-authoring": "0.16.0-dev.6",
"@prisma-next/framework-components": "0.16.0-dev.6",
"@prisma-next/sql-contract": "0.16.0-dev.6",
"@prisma-next/utils": "0.16.0-dev.6",
"@prisma-next/config": "0.16.0-dev.7",
"@prisma-next/contract": "0.16.0-dev.7",
"@prisma-next/contract-authoring": "0.16.0-dev.7",
"@prisma-next/framework-components": "0.16.0-dev.7",
"@prisma-next/sql-contract": "0.16.0-dev.7",
"@prisma-next/utils": "0.16.0-dev.7",
"arktype": "^2.2.2",

@@ -21,7 +21,7 @@ "pathe": "^2.0.3",

"devDependencies": {
"@prisma-next/test-utils": "0.16.0-dev.6",
"@prisma-next/tsconfig": "0.16.0-dev.6",
"@prisma-next/test-utils": "0.16.0-dev.7",
"@prisma-next/tsconfig": "0.16.0-dev.7",
"@types/pg": "8.20.0",
"pg": "8.22.0",
"@prisma-next/tsdown": "0.16.0-dev.6",
"@prisma-next/tsdown": "0.16.0-dev.7",
"tsdown": "0.22.8",

@@ -28,0 +28,0 @@ "typescript": "5.9.3",

@@ -13,2 +13,3 @@ import type {

import { type StorageTypeInstance, toStorageTypeInstance } from '@prisma-next/sql-contract/types';
import { contractError } from './contract-errors';

@@ -37,4 +38,6 @@ export type RuntimeNamedConstraintSpec = {

if (blockedSegments.has(key)) {
throw new Error(
throw contractError(
'CONTRACT.PACK_CONTRIBUTION_INVALID',
`Invalid authoring helper "${[...path, key].join('.')}". Helper path segments must not use "${key}".`,
{ meta: { helperPath: [...path, key].join('.'), segment: key } },
);

@@ -88,4 +91,12 @@ }

if (acceptsNamedConstraintOptions && rawArgs.length > declaredArguments.length + 1) {
throw new Error(
throw contractError(
'CONTRACT.ARGUMENT_INVALID',
`${options.helperPath} expects at most ${declaredArguments.length + 1} argument(s), received ${rawArgs.length}`,
{
meta: {
helperPath: options.helperPath,
expected: declaredArguments.length + 1,
received: rawArgs.length,
},
},
);

@@ -100,4 +111,6 @@ }

if (!isNamedConstraintOptionsLike(maybeNamedConstraintOptions)) {
throw new Error(
throw contractError(
'CONTRACT.ARGUMENT_INVALID',
`${options.helperPath} accepts an optional trailing { name?: string } constraint options object`,
{ meta: { helperPath: options.helperPath } },
);

@@ -104,0 +117,0 @@ }

@@ -61,2 +61,3 @@ import {

import { ifDefined } from '@prisma-next/utils/defined';
import { InternalError } from '@prisma-next/utils/internal-error';
import type {

@@ -69,2 +70,3 @@ ContractDefinition,

} from './contract-definition';
import { contractError } from './contract-errors';

@@ -97,3 +99,3 @@ type DomainFieldRef =

if (!Array.isArray(defaultInput.value)) {
throw new Error(
throw new InternalError(
`Literal default on a list column must be an array; received ${typeof defaultInput.value}. ` +

@@ -120,3 +122,7 @@ 'A scalar default on a list field must be rejected at the authoring surface.',

if (semanticErrors.length > 0) {
throw new Error(`Contract semantic validation failed: ${semanticErrors.join('; ')}`);
throw contractError(
'CONTRACT.VALIDATION_FAILED',
`Contract semantic validation failed: ${semanticErrors.join('; ')}`,
{ meta: { errors: semanticErrors } },
);
}

@@ -137,4 +143,6 @@

) {
throw new Error(
throw contractError(
'CONTRACT.PACK_CONTRIBUTION_INVALID',
`Pack "${pack.id ?? '<unknown>'}" declares "indexTypes" but its value is not an IndexTypeRegistration (expected an object with an "entries" array; got ${typeof registration}).`,
{ meta: { packId: pack.id, contribution: 'indexTypes', reason: 'invalid-shape' } },
);

@@ -166,4 +174,6 @@ }

: targetModelName;
throw new Error(
throw contractError(
'CONTRACT.MODEL_UNKNOWN',
`${context} on model "${sourceModelName}" references unknown model "${qualified}"`,
{ meta: { sourceModel: sourceModelName, targetModel: qualified, context } },
);

@@ -181,4 +191,13 @@ }

if (targetModel.tableName !== referencedTableName) {
throw new Error(
throw contractError(
'CONTRACT.TABLE_MISMATCH',
`${context} on model "${sourceModelName}" references table "${referencedTableName}" but model "${targetModel.modelName}" maps to "${targetModel.tableName}"`,
{
meta: {
sourceModel: sourceModelName,
referencedTable: referencedTableName,
mappedTable: targetModel.tableName,
context,
},
},
);

@@ -320,4 +339,6 @@ }

if (existing !== undefined && existing !== entityRef.entity) {
throw new Error(
throw contractError(
'CONTRACT.NAME_DUPLICATE',
`buildSqlContractFromDefinition: two different "${entityRef.entityKind}" entities named "${entityRef.entityName}" in namespace "${namespaceId}" — pack-entity names must be unique per namespace.`,
{ meta: { kind: entityRef.entityKind, name: entityRef.entityName, namespaceId } },
);

@@ -355,4 +376,6 @@ }

if (existing !== undefined && existing !== entity) {
throw new Error(
throw contractError(
'CONTRACT.NAME_DUPLICATE',
`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.`,
{ meta: { kind, name, namespaceId } },
);

@@ -389,4 +412,6 @@ }

if (!tableNamespaceByName.has(through.table)) {
throw new Error(
throw contractError(
'CONTRACT.MODEL_UNKNOWN',
`buildSqlContractFromDefinition: junction table "${through.table}" for relation "${modelName}.${fieldName}" is not a declared model.`,
{ meta: { sourceModel: modelName, relationName: fieldName, junctionTable: through.table } },
);

@@ -418,4 +443,6 @@ }

}
throw new Error(
throw contractError(
'CONTRACT.IDENTITY_INVALID',
`M:N target model "${targetModel.modelName}" (relation field "${fieldName}") has no primary id or unique key to derive junction targetColumns.`,
{ meta: { modelName: targetModel.modelName, reason: 'no-key-for-junction-target-columns' } },
);

@@ -529,4 +556,6 @@ }

if (MANAGED_ENTRY_KINDS.has(kind)) {
throw new Error(
throw contractError(
'CONTRACT.ENTITY_KIND_INVALID',
`buildSqlContractFromDefinition: attached entity in namespace "${namespaceId}" declares entry kind "${kind}", which is managed by the framework (table/valueSet) and cannot be attached.`,
{ meta: { entityKind: kind, namespaceId } },
);

@@ -614,4 +643,6 @@ }

if (Object.hasOwn(enumValueSets, name)) {
throw new Error(
throw contractError(
'CONTRACT.NAME_DUPLICATE',
`buildSqlContractFromDefinition: value-set "${name}" in namespace "${namespaceId}" is derived from both an enum and a pack entity — names must be unique per namespace.`,
{ meta: { kind: 'valueSet', name, namespaceId } },
);

@@ -706,9 +737,25 @@ }

if (field.default !== undefined) {
throw new Error(
throw contractError(
'CONTRACT.DEFAULT_INVALID',
`Field "${semanticModel.modelName}.${field.fieldName}" cannot define both default and executionDefaults.`,
{
meta: {
modelName: semanticModel.modelName,
fieldName: field.fieldName,
reason: 'default-and-executionDefaults',
},
},
);
}
if (field.nullable) {
throw new Error(
throw contractError(
'CONTRACT.DEFAULT_INVALID',
`Field "${semanticModel.modelName}.${field.fieldName}" cannot be nullable when executionDefaults are present.`,
{
meta: {
modelName: semanticModel.modelName,
fieldName: field.fieldName,
reason: 'nullable-with-executionDefaults',
},
},
);

@@ -931,4 +978,6 @@ }

if (nsTables[tableName] !== undefined) {
throw new Error(
throw contractError(
'CONTRACT.NAME_DUPLICATE',
`buildSqlContractFromDefinition: duplicate table "${tableName}" in namespace "${namespaceId}".`,
{ meta: { kind: 'table', name: tableName, namespaceId } },
);

@@ -996,4 +1045,12 @@ }

if (!relation.through) {
throw new Error(
throw contractError(
'CONTRACT.RELATION_INVALID',
`Relation "${semanticModel.modelName}.${relation.fieldName}" with cardinality "N:M" requires through metadata`,
{
meta: {
modelName: semanticModel.modelName,
relationName: relation.fieldName,
reason: 'many-to-many-missing-through',
},
},
);

@@ -1081,4 +1138,12 @@ }

if (enumName !== handle.enumName) {
throw new Error(
throw contractError(
'CONTRACT.ENUM_INVALID',
`enum declaration key "${enumName}" must match enumType name "${handle.enumName}". Aliases are not supported.`,
{
meta: {
enumName: handle.enumName,
declarationKey: enumName,
reason: 'key-name-mismatch',
},
},
);

@@ -1085,0 +1150,0 @@ }

@@ -40,2 +40,3 @@ import {

import { buildFieldPreset, field, model, rel } from './contract-dsl';
import { contractError } from './contract-errors';
import type { MergeExtensionIndexTypes } from './contract-types';

@@ -228,4 +229,6 @@

if (collisions.length > 0) {
throw new Error(
throw contractError(
'CONTRACT.PACK_CONTRIBUTION_INVALID',
`Pack-contributed entity type(s) ${collisions.map((c) => `"${c}"`).join(', ')} collide with the reserved built-in helper key(s) on the composed helpers surface. Reserved keys: ${RESERVED_HELPER_KEYS.map((k) => `"${k}"`).join(', ')}.`,
{ meta: { collisions, reservedKeys: RESERVED_HELPER_KEYS } },
);

@@ -257,4 +260,6 @@ }

if (coreHelperNames.has(helperName)) {
throw new Error(
throw contractError(
'CONTRACT.PACK_CONTRIBUTION_INVALID',
`Duplicate authoring field helper "${helperName}". Core field helpers reserve that name.`,
{ meta: { helperName } },
);

@@ -261,0 +266,0 @@ }

@@ -8,5 +8,7 @@ import { pathToFileURL } from 'node:url';

import { ifDefined } from '@prisma-next/utils/defined';
import { InternalError } from '@prisma-next/utils/internal-error';
import { ok } from '@prisma-next/utils/result';
import { extname } from 'pathe';
import { buildSqlContractFromDefinition } from './build-contract';
import { contractError } from './contract-errors';

@@ -80,3 +82,3 @@ /**

if (absolutePath === undefined) {
throw new Error(
throw new InternalError(
'typescriptContractFromPath: context.resolvedInputs is empty. The CLI config loader should populate it positional-matched with source.inputs.',

@@ -88,4 +90,6 @@ );

if (contract === undefined) {
throw new Error(
throw contractError(
'CONTRACT.MODULE_EXPORT_MISSING',
`typescriptContractFromPath: module at "${absolutePath}" has no "default" or "contract" export.`,
{ meta: { path: absolutePath } },
);

@@ -92,0 +96,0 @@ }

@@ -36,2 +36,3 @@ import type { ControlPolicy } from '@prisma-next/contract/types';

} from './contract-dsl';
import { contractError } from './contract-errors';
import { buildContractDefinition } from './contract-lowering';

@@ -129,4 +130,6 @@ import type { SqlContractResult } from './contract-types';

if (family.familyId !== 'sql') {
throw new Error(
throw contractError(
'CONTRACT.PACK_FAMILY_MISMATCH',
`defineContract only accepts SQL family packs. Received family "${family.familyId}".`,
{ meta: { packId: family.id, packFamilyId: family.familyId, contractFamilyId: 'sql' } },
);

@@ -136,4 +139,12 @@ }

if (target.familyId !== family.familyId) {
throw new Error(
throw contractError(
'CONTRACT.PACK_FAMILY_MISMATCH',
`target pack "${target.id}" targets family "${target.familyId}" but contract family is "${family.familyId}".`,
{
meta: {
packId: target.id,
packFamilyId: target.familyId,
contractFamilyId: family.familyId,
},
},
);

@@ -167,6 +178,8 @@ }

if (target.targetId === 'sqlite' && namespaces.length > 0) {
throw new Error(
throw contractError(
'CONTRACT.NAMESPACE_UNSUPPORTED',
`defineContract: SQLite contracts cannot declare namespaces (SQLite has no schema concept; emitted DDL is always unqualified). Received namespaces: [${namespaces
.map((name) => `"${name}"`)
.join(', ')}].`,
{ meta: { namespaces, targetId: target.targetId } },
);

@@ -178,19 +191,35 @@ }

if (namespace.length === 0) {
throw new Error('defineContract: namespace names cannot be empty.');
throw contractError(
'CONTRACT.NAMESPACE_INVALID',
'defineContract: namespace names cannot be empty.',
{ meta: { namespace, reason: 'empty' } },
);
}
if (namespace.trim().length === 0) {
throw new Error(`defineContract: namespace name "${namespace}" cannot be whitespace-only.`);
throw contractError(
'CONTRACT.NAMESPACE_INVALID',
`defineContract: namespace name "${namespace}" cannot be whitespace-only.`,
{ meta: { namespace, reason: 'whitespace-only' } },
);
}
if (namespace === '__unbound__' || namespace === '__unspecified__') {
throw new Error(
throw contractError(
'CONTRACT.NAMESPACE_INVALID',
`defineContract: namespace name "${namespace}" is a reserved IR sentinel and cannot appear in the declared namespaces list.`,
{ meta: { namespace, reason: 'reserved-ir-sentinel' } },
);
}
if (target.targetId === 'postgres' && namespace === 'unbound') {
throw new Error(
throw contractError(
'CONTRACT.NAMESPACE_INVALID',
`defineContract: namespace name "unbound" is reserved by Postgres for the late-binding opt-in (use \`namespace unbound { … }\` in PSL instead of declaring it as a regular schema).`,
{ meta: { namespace, reason: 'reserved-by-postgres' } },
);
}
if (seen.has(namespace)) {
throw new Error(`defineContract: namespaces list contains duplicate entry "${namespace}".`);
throw contractError(
'CONTRACT.NAME_DUPLICATE',
`defineContract: namespaces list contains duplicate entry "${namespace}".`,
{ meta: { kind: 'namespace', name: namespace } },
);
}

@@ -236,4 +265,6 @@ seen.add(namespace);

if (target.targetId === 'sqlite') {
throw new Error(
throw contractError(
'CONTRACT.NAMESPACE_UNSUPPORTED',
`defineContract: model "${modelKey}" sets \`namespace: "${perModelNamespace}"\` but the target is SQLite (SQLite has no schema concept; remove the per-model \`namespace\` field).`,
{ meta: { modelKey, namespace: perModelNamespace, targetId: target.targetId } },
);

@@ -243,4 +274,6 @@ }

if (perModelNamespace === '__unbound__' || perModelNamespace === '__unspecified__') {
throw new Error(
throw contractError(
'CONTRACT.NAMESPACE_INVALID',
`defineContract: model "${modelKey}" sets \`namespace: "${perModelNamespace}"\` but that name is a reserved IR sentinel and cannot appear in user code.`,
{ meta: { modelKey, namespace: perModelNamespace, reason: 'reserved-ir-sentinel' } },
);

@@ -250,4 +283,6 @@ }

if (target.targetId === 'postgres' && perModelNamespace === 'unbound') {
throw new Error(
throw contractError(
'CONTRACT.NAMESPACE_INVALID',
`defineContract: model "${modelKey}" sets \`namespace: "unbound"\` but that name is reserved by Postgres for the late-binding opt-in (use \`namespace unbound { … }\` in PSL instead — there is no equivalent surface in the TS builder today).`,
{ meta: { modelKey, namespace: perModelNamespace, reason: 'reserved-by-postgres' } },
);

@@ -261,4 +296,6 @@ }

: ' The contract does not declare any namespaces; add `namespaces: ["…"]` to `defineContract` first.';
throw new Error(
throw contractError(
'CONTRACT.NAMESPACE_UNKNOWN',
`defineContract: model "${modelKey}" references namespace "${perModelNamespace}" but that name does not appear in the contract's declared \`namespaces\` list.${hint}`,
{ meta: { modelKey, namespace: perModelNamespace, declared: [...declaredNamespaces] } },
);

@@ -279,4 +316,6 @@ }

if (packRef.kind !== 'extension') {
throw new Error(
throw contractError(
'CONTRACT.PACK_REF_INVALID',
`defineContract only accepts extension pack refs in extensionPacks. Received kind "${packRef.kind}".`,
{ meta: { packId: packRef.id, kind: packRef.kind } },
);

@@ -286,4 +325,12 @@ }

if (packRef.familyId !== target.familyId) {
throw new Error(
throw contractError(
'CONTRACT.PACK_FAMILY_MISMATCH',
`extension pack "${packRef.id}" targets family "${packRef.familyId}" but contract target family is "${target.familyId}".`,
{
meta: {
packId: packRef.id,
packFamilyId: packRef.familyId,
contractFamilyId: target.familyId,
},
},
);

@@ -293,4 +340,12 @@ }

if (packRef.targetId && packRef.targetId !== target.targetId) {
throw new Error(
throw contractError(
'CONTRACT.PACK_TARGET_MISMATCH',
`extension pack "${packRef.id}" targets "${packRef.targetId}" but contract target is "${target.targetId}".`,
{
meta: {
packId: packRef.id,
packTargetId: packRef.targetId,
contractTargetId: target.targetId,
},
},
);

@@ -297,0 +352,0 @@ }

@@ -14,2 +14,3 @@ import {

import { ifDefined } from '@prisma-next/utils/defined';
import { InternalError } from '@prisma-next/utils/internal-error';
import type {

@@ -43,2 +44,3 @@ AttachedEntities,

} from './contract-dsl';
import { contractError } from './contract-errors';
import {

@@ -111,4 +113,6 @@ emitTypedCrossModelFallbackWarnings,

if (!typeRef) {
throw new Error(
throw contractError(
'CONTRACT.TYPE_UNKNOWN',
`Field "${modelName}.${fieldName}" references a storage type instance that is not present in definition.types`,
{ meta: { modelName, fieldName, reason: 'instance-not-in-definition-types' } },
);

@@ -119,4 +123,6 @@ }

if (!referencedType) {
throw new Error(
throw contractError(
'CONTRACT.TYPE_UNKNOWN',
`Field "${modelName}.${fieldName}" references unknown storage type "${typeRef}"`,
{ meta: { modelName, fieldName, typeRef } },
);

@@ -132,3 +138,7 @@ }

throw new Error(`Field "${modelName}.${fieldName}" does not resolve to a storage descriptor`);
throw contractError(
'CONTRACT.TYPE_UNKNOWN',
`Field "${modelName}.${fieldName}" does not resolve to a storage descriptor`,
{ meta: { modelName, fieldName, reason: 'unresolved-storage-descriptor' } },
);
}

@@ -144,3 +154,7 @@

if (!columnName) {
throw new Error(`Unknown field "${modelName}.${fieldName}" in contract definition`);
throw contractError(
'CONTRACT.FIELD_UNKNOWN',
`Unknown field "${modelName}.${fieldName}" in contract definition`,
{ meta: { modelName, fieldName } },
);
}

@@ -163,4 +177,12 @@ return columnName;

throw new Error(
throw contractError(
'CONTRACT.RELATION_INVALID',
`Relation "${params.modelName}.${params.relationName}" maps ${params.leftFields.length} ${params.leftLabel} field(s) to ${params.rightFields.length} ${params.rightLabel} field(s).`,
{
meta: {
modelName: params.modelName,
relationName: params.relationName,
reason: 'field-count-mismatch',
},
},
);

@@ -192,4 +214,8 @@ }

if (inlineIdFields.length > 1) {
throw new Error(
throw contractError(
'CONTRACT.IDENTITY_INVALID',
`Model "${spec.modelName}" marks multiple fields with .id(). Use .attributes(...) for compound identities.`,
{
meta: { modelName: spec.modelName, reason: 'multiple-inline-ids', fields: inlineIdFields },
},
);

@@ -236,4 +262,6 @@ }

if (inlineId && attributeId) {
throw new Error(
throw contractError(
'CONTRACT.IDENTITY_INVALID',
`Model "${spec.modelName}" defines identity both inline and in .attributes(...). Pick one identity style.`,
{ meta: { modelName: spec.modelName, reason: 'inline-and-attributes' } },
);

@@ -244,3 +272,7 @@ }

if (resolvedId && resolvedId.fields.length === 0) {
throw new Error(`Model "${spec.modelName}" defines an empty identity. Add at least one field.`);
throw contractError(
'CONTRACT.IDENTITY_INVALID',
`Model "${spec.modelName}" defines an empty identity. Add at least one field.`,
{ meta: { modelName: spec.modelName, reason: 'empty-identity' } },
);
}

@@ -255,4 +287,6 @@

if (unique.fields.length === 0) {
throw new Error(
throw contractError(
'CONTRACT.CONSTRAINT_INVALID',
`Model "${spec.modelName}" defines an empty unique constraint. Add at least one field.`,
{ meta: { modelName: spec.modelName } },
);

@@ -314,4 +348,6 @@ }

if (!allSpecs.has(targetModelName)) {
throw new Error(
throw contractError(
'CONTRACT.MODEL_UNKNOWN',
`Relation "${spec.modelName}.${relationName}" references unknown model "${targetModelName}"`,
{ meta: { sourceModel: spec.modelName, relationName, targetModel: targetModelName } },
);

@@ -359,4 +395,6 @@ }

throw new Error(
throw contractError(
'CONTRACT.IDENTITY_INVALID',
`Model "${spec.modelName}" needs an explicit id or an "id" field to anchor non-owning relations`,
{ meta: { modelName: spec.modelName, reason: 'missing-anchor-id' } },
);

@@ -422,4 +460,6 @@ }

if (!targetSpec) {
throw new Error(
throw contractError(
'CONTRACT.MODEL_UNKNOWN',
`Relation "${currentSpec.modelName}.${relationName}" references unknown model "${targetModelName}"`,
{ meta: { sourceModel: currentSpec.modelName, relationName, targetModel: targetModelName } },
);

@@ -459,4 +499,6 @@ }

if (!targetSpec) {
throw new Error(
throw contractError(
'CONTRACT.MODEL_UNKNOWN',
`Relation "${currentSpec.modelName}.${relationName}" references unknown model "${targetModelName}"`,
{ meta: { sourceModel: currentSpec.modelName, relationName, targetModel: targetModelName } },
);

@@ -507,4 +549,6 @@ }

if (!targetSpec) {
throw new Error(
throw contractError(
'CONTRACT.MODEL_UNKNOWN',
`Relation "${currentSpec.modelName}.${relationName}" references unknown model "${targetModelName}"`,
{ meta: { sourceModel: currentSpec.modelName, relationName, targetModel: targetModelName } },
);

@@ -516,4 +560,6 @@ }

if (!throughSpec) {
throw new Error(
throw contractError(
'CONTRACT.MODEL_UNKNOWN',
`Relation "${currentSpec.modelName}.${relationName}" references unknown through model "${throughModelName}"`,
{ meta: { sourceModel: currentSpec.modelName, relationName, targetModel: throughModelName } },
);

@@ -530,4 +576,12 @@ }

) {
throw new Error(
throw contractError(
'CONTRACT.RELATION_INVALID',
`Relation "${currentSpec.modelName}.${relationName}" has mismatched many-to-many field counts.`,
{
meta: {
modelName: currentSpec.modelName,
relationName,
reason: 'many-to-many-field-count-mismatch',
},
},
);

@@ -665,4 +719,6 @@ }

}
throw new Error(
throw contractError(
'CONTRACT.PACK_MISSING',
`${context} references contract space "${spaceId}" but "${spaceId}" is not declared in extensionPacks. Add the pack to extensionPacks.`,
{ meta: { spaceId, context } },
);

@@ -693,4 +749,6 @@ }

if (!targetSpec) {
throw new Error(
throw contractError(
'CONTRACT.MODEL_UNKNOWN',
`Foreign key on "${spec.modelName}" references unknown model "${foreignKey.targetModel}"`,
{ meta: { sourceModel: spec.modelName, targetModel: foreignKey.targetModel } },
);

@@ -717,4 +775,6 @@ }

if (!targetSpec) {
throw new Error(
throw contractError(
'CONTRACT.MODEL_UNKNOWN',
`Foreign key on "${spec.modelName}" references unknown model "${foreignKey.targetModel}"`,
{ meta: { sourceModel: spec.modelName, targetModel: foreignKey.targetModel } },
);

@@ -749,3 +809,3 @@ }

if (!columnName) {
throw new Error(`Column name resolution failed for "${spec.modelName}.${fieldName}"`);
throw new InternalError(`Column name resolution failed for "${spec.modelName}.${fieldName}"`);
}

@@ -823,4 +883,6 @@

if (tokenModelName && tokenModelName !== modelName) {
throw new Error(
throw contractError(
'CONTRACT.MODEL_TOKEN_INVALID',
`Model token "${tokenModelName}" must be assigned to models.${tokenModelName}. Received models.${modelName}.`,
{ meta: { tokenModelName, assignedKey: modelName } },
);

@@ -838,4 +900,6 @@ }

if (existingModel) {
throw new Error(
throw contractError(
'CONTRACT.NAME_DUPLICATE',
`Models "${existingModel}" and "${modelName}" both map to table "${tableName}".`,
{ meta: { kind: 'table', name: tableName, first: existingModel, second: modelName } },
);

@@ -854,4 +918,6 @@ }

if (existingField) {
throw new Error(
throw contractError(
'CONTRACT.NAME_DUPLICATE',
`Model "${modelName}" maps both "${existingField}" and "${fieldName}" to column "${columnName}".`,
{ meta: { kind: 'column', name: columnName, first: existingField, second: fieldName } },
);

@@ -1004,4 +1070,6 @@ }

if (component === undefined) {
throw new Error(
throw contractError(
'CONTRACT.ENTITY_KIND_UNKNOWN',
`defineContract: entities contains a handle with entityKind "${handle.entityKind}", which no composed pack registers. Compose a pack whose entityTypes contribution claims "${handle.entityKind}", or remove the handle.`,
{ meta: { entityKind: handle.entityKind } },
);

@@ -1023,4 +1091,6 @@ }

const kinds = [...new Set(handles.map((entry) => entry.handle.entityKind))].sort();
throw new Error(
throw contractError(
'CONTRACT.PACK_CONTRIBUTION_INVALID',
`defineContract: entityKind(s) ${kinds.map((kind) => `"${kind}"`).join(', ')} are registered by a pack that does not implement entity-handle lowering (no lowerEntityHandles on its authoring contributions).`,
{ meta: { entityKinds: kinds, reason: 'missing-lowerEntityHandles' } },
);

@@ -1035,4 +1105,6 @@ }

if (existing !== undefined && existing !== row.entity) {
throw new Error(
throw contractError(
'CONTRACT.NAME_DUPLICATE',
`defineContract: two different "${row.entityKind}" entities named "${row.key}" in namespace "${row.namespaceId}" — pack-entity names must be unique per namespace.`,
{ meta: { kind: row.entityKind, name: row.key, namespaceId: row.namespaceId } },
);

@@ -1039,0 +1111,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 { 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

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