@vibeorm/schema 5.1.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +25 -11
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"import { hasPublicExtensionDeclaration } from \"./extension.ts\";\nimport { providerToDialect } from \"./ir.ts\";\nimport type { Dialect, ModelIR, SchemaIR } from \"./ir.ts\";\nimport { SQL_NAMESPACES } from \"./namespaces.ts\";\n\n/** Resolve declared public-only ownership without changing unrelated unqualified models. */\nexport function modelSqlNamespace(params: { schema: SchemaIR; model: ModelIR; dialect?: Dialect }): string | undefined {\n const { schema, model } = params;\n if (model.namespace !== undefined || (params.dialect ?? providerToDialect({ provider: schema.datasource.provider })) !== \"postgres\") return model.namespace;\n const protectedModel = model.rls !== undefined && model.rls !== \"unprotected\";\n const throughParent = schema.models.some((child) => {\n const rule = child.rls;\n return rule !== null && typeof rule === \"object\" && \"through\" in rule\n && child.relations.some((relation) => relation.name === rule.through && relation.targetModel === model.name);\n });\n return protectedModel || throughParent || hasPublicExtensionDeclaration({ schema, model: model.name })\n ? SQL_NAMESPACES.postgres : undefined;\n}\n",
|
|
18
18
|
"/**\n * Effective foreign-key referential actions — Prisma's defaults, resolved ONCE.\n *\n * Migrate renders these into DDL and compares them; schema validation reads\n * them to refuse a MySQL CHECK on a column an action writes. One rule, so the\n * two can never disagree about what a relation does.\n */\n\nimport type { CascadeAction, FieldIR, RelationIR } from \"./ir.ts\";\n\n/**\n * Effective onDelete — Prisma's default: a required foreign key (every column\n * non-nullable) restricts, an optional one sets NULL.\n */\nexport function resolveOnDelete(params: { explicit: CascadeAction | undefined; required: boolean }): CascadeAction {\n if (params.explicit !== undefined) return params.explicit;\n return params.required ? \"Restrict\" : \"SetNull\";\n}\n\n/** Effective onUpdate — Prisma's default is Cascade. */\nexport function resolveOnUpdate(params: { explicit: CascadeAction | undefined }): CascadeAction {\n return params.explicit ?? \"Cascade\";\n}\n\n/**\n * A relation's effective actions. Its foreign key is required when every\n * foreign-key column is non-nullable — the fact the database sees, and the one\n * Prisma's defaults key off. A column `field` cannot resolve counts as\n * required; schema validation reports the unknown column separately.\n */\nexport function resolveReferentialActions(params: {\n relation: Pick<RelationIR, \"fields\" | \"onDelete\" | \"onUpdate\">;\n /** The relation model's field by LOGICAL name. */\n field: (name: string) => FieldIR | undefined;\n}): { readonly onDelete: CascadeAction; readonly onUpdate: CascadeAction } {\n const { relation } = params;\n const required = (relation.fields ?? []).every((name) => params.field(name)?.isOptional !== true);\n return { onDelete: resolveOnDelete({ explicit: relation.onDelete, required }), onUpdate: resolveOnUpdate({ explicit: relation.onUpdate }) };\n}\n",
|
|
19
19
|
"import { DIALECT_CAPABILITIES } from \"./capabilities.ts\";\nimport { VibeError, unsupportedCapability } from \"./errors.ts\";\nimport { providerToDialect } from \"./ir.ts\";\nimport type { Dialect, SchemaIR } from \"./ir.ts\";\nimport { resolveReferentialActions } from \"./referential-actions.ts\";\n\n/** A database-owned stored value; expression bytes are trusted physical SQL. */\nexport type GeneratedColumnIR = {\n readonly expression: string;\n readonly storage: \"stored\";\n};\n\n/** Raw SQL authoring declaration; virtual storage is deliberately not exposed. */\nexport type GeneratedColumnOptions = { readonly sql: string };\n\n/** One invalid generation declaration or incompatible field use. */\nexport type GeneratedColumnValidationIssue = {\n readonly rule: string;\n readonly message: string;\n readonly model?: string;\n readonly field?: string;\n};\n\nfunction declarationIssue(params: { readonly value: unknown; readonly authoring: boolean }): string | undefined {\n const { value, authoring } = params;\n if (value === null || typeof value !== \"object\" || Array.isArray(value)\n || (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)) return \"A generated column requires a plain data object\";\n const expected = authoring ? [\"sql\"] : [\"expression\", \"storage\"];\n const keys = Reflect.ownKeys(value);\n if (keys.length !== expected.length || keys.some((key) => typeof key !== \"string\" || !expected.includes(key))) return authoring ? \"generated accepts exactly sql; storage is always stored\" : \"A generated declaration accepts exactly expression and storage\";\n for (const key of expected) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (descriptor?.enumerable !== true || !(\"value\" in descriptor)) return \"A generated declaration requires enumerable data properties\";\n }\n const expression: unknown = Object.getOwnPropertyDescriptor(value, authoring ? \"sql\" : \"expression\")?.value;\n if (typeof expression !== \"string\" || expression.trim().length === 0 || expression.includes(\"\\0\")) return \"A generated expression must be a nonempty, NUL-free SQL string\";\n if (!authoring && Object.getOwnPropertyDescriptor(value, \"storage\")?.value !== \"stored\") return \"Generated storage must be stored; virtual columns are not supported\";\n return undefined;\n}\n\n/** Inspect canonical shape without running getters or rewriting SQL. */\nexport function generatedColumnShapeIssue(params: { readonly value: unknown }): string | undefined {\n return declarationIssue({ ...params, authoring: false });\n}\n\n/** Validate, copy and freeze the canonical declaration. */\nexport function assertGeneratedColumn(params: { readonly value: unknown }): GeneratedColumnIR {\n const issue = generatedColumnShapeIssue(params);\n if (issue !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: issue, meta: { issues: [{ rule: \"generated-column-shape\", message: issue }] } });\n const value = params.value as GeneratedColumnIR;\n return Object.freeze({ expression: value.expression, storage: \"stored\" });\n}\n\n/** Validate the single-key DSL declaration and lower it to canonical stored generation. */\nexport function generatedColumnFromSql(params: { readonly value: unknown }): GeneratedColumnIR {\n const issue = declarationIssue({ ...params, authoring: true });\n if (issue !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: issue, meta: { issues: [{ rule: \"generated-column-shape\", message: issue }] } });\n const value = params.value as GeneratedColumnOptions;\n return assertGeneratedColumn({ value: { expression: value.sql, storage: \"stored\" } });\n}\n\n/** Collect all structural conflicts after complete model metadata is available. */\nexport function validateGeneratedColumns(params: { readonly schema: SchemaIR }): readonly GeneratedColumnValidationIssue[] {\n const issues: GeneratedColumnValidationIssue[] = [];\n for (const model of params.schema.models) {\n const owning = new Set(model.relations.flatMap((relation) => relation.fields ?? []));\n for (const field of model.fields) {\n if (!(\"generated\" in field)) continue;\n const add = ({ rule, message }: { readonly rule: string; readonly message: string }): void => { issues.push({ rule, message, model: model.name, field: field.name }); };\n const shape = generatedColumnShapeIssue({ value: field.generated });\n if (shape !== undefined) { add({ rule: \"generated-column-shape\", message: shape }); continue; }\n if (field.default !== undefined) add({ rule: \"generated-column-default\", message: \"A generated field cannot have a default\" });\n if (field.isUpdatedAt) add({ rule: \"generated-column-updated-at\", message: \"A generated field cannot use @updatedAt\" });\n if (field.isId || model.primaryKey?.fields.includes(field.name)) add({ rule: \"generated-column-id\", message: \"A generated field cannot belong to a primary key\" });\n if (field.isList) add({ rule: \"generated-column-list\", message: \"A generated field cannot be a list\" });\n if (owning.has(field.name)) add({ rule: \"generated-column-foreign-key\", message: \"A generated field cannot own a foreign key\" });\n if (model.policy?.field === field.name) add({ rule: \"generated-column-policy\", message: \"A generated field cannot be an application-policy context column\" });\n if (model.rls !== null && typeof model.rls === \"object\" && \"where\" in model.rls && model.rls.where !== null && typeof model.rls.where === \"object\" && Object.hasOwn(model.rls.where, field.name)) add({ rule: \"generated-column-rls\", message: \"A generated field cannot be a native RLS context column\" });\n if (model.isView) add({ rule: \"generated-column-view\", message: \"A view cannot declare a core-owned generated column\" });\n if (field.validator !== undefined) add({ rule: \"generated-column-validator\", message: \"A generated field cannot carry write validation because the client never writes it\" });\n }\n for (const relation of model.relations) if (\"generated\" in relation) issues.push({ rule: \"generated-column-relation\", message: \"Generation belongs on scalar or enum columns, not relation properties\", model: model.name, field: relation.name });\n }\n return issues;\n}\n\n/** Refuse invalid or unsupported generation before generating clients or migrations. */\nexport function assertGeneratedColumns(params: { readonly schema: SchemaIR; readonly dialect?: Dialect }): void {\n const issues = validateGeneratedColumns(params);\n if (issues.length > 0) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Invalid generated columns: ${issues.map((issue) => issue.message).join(\"; \")}`, meta: { issues } });\n const dialect = params.dialect ?? providerToDialect({ provider: params.schema.datasource.provider });\n const generatedModels = new Set(params.schema.models.filter((model) => model.fields.some((field) => field.generated !== undefined)).map((model) => model.name));\n if (generatedModels.size === 0) return;\n if (!DIALECT_CAPABILITIES[dialect].generatedColumns) throw unsupportedCapability({ dialect, feature: \"generatedColumns\" });\n if (dialect !== \"mysql\") return;\n for (const model of params.schema.models) for (const relation of model.relations) {\n if ((relation.fields?.length ?? 0) === 0) continue;\n const target = params.schema.models.find((candidate) => candidate.name === relation.targetModel);\n const referencedGenerated = target?.fields.some((field) => field.generated !== undefined && relation.references?.includes(field.name)) === true;\n if (!generatedModels.has(model.name) && !referencedGenerated) continue;\n const actions = resolveReferentialActions({ relation, field: (name) => model.fields.find((field) => field.name === name) });\n const unsafeUpdate = actions.onUpdate === \"Cascade\" || actions.onUpdate === \"SetNull\" || actions.onUpdate === \"SetDefault\";\n const unsafeDelete = actions.onDelete === \"SetNull\" || actions.onDelete === \"SetDefault\" || generatedModels.has(model.name) && actions.onDelete === \"Cascade\";\n if (unsafeUpdate || unsafeDelete) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"MySQL generated-column foreign-key dependencies require safe referential actions; opaque expressions cannot prove a base column is unaffected\", meta: { feature: \"generatedColumnReferentialActions\", dialect, model: model.name, relation: relation.name } });\n }\n}\n",
|
|
20
|
-
"import { DIALECT_CAPABILITIES } from \"./capabilities.ts\";\nimport { generatedColumnShapeIssue } from \"./generated-columns.ts\";\nimport { VibeError } from \"./errors.ts\";\nimport { isEnumType, providerToDialect } from \"./ir.ts\";\nimport type { Dialect, FieldIR, ModelIR, SchemaIR } from \"./ir.ts\";\nimport type { MigrationObjectIR, SqlObjectIdentity } from \"./migration-objects.ts\";\nimport { modelSqlNamespace } from \"./model-sql-namespace.ts\";\nimport { assertSqlNamespace } from \"./namespaces.ts\";\nimport { resolveReferentialActions } from \"./referential-actions.ts\";\nimport { IDENTIFIER_LIMITS, identifierLength } from \"./physical-names.ts\";\nimport { encodePrismaString } from \"./prisma-literal.ts\";\n\n/** A fixed group is protected from insertion, or after OLD's nullable gate is set. */\nexport type RowRuleWhenIR = { readonly fromCreation: true } | { readonly onceSet: string };\n\n/** Structured row invariant; names are resolved physical stems and fields are logical names. */\nexport type RowRuleIR =\n | { readonly kind: \"appendOnly\"; readonly name: string }\n | { readonly kind: \"fixed\"; readonly name: string; readonly columns: readonly string[]; readonly when: RowRuleWhenIR }\n | { readonly kind: \"rowFixed\"; readonly name: string; readonly except: readonly string[] }\n | { readonly kind: \"frozen\"; readonly name: string; readonly from: { readonly create: true } | { readonly field: string }; readonly mutable: readonly string[] };\n\n/** Authoring data before the shared normalizer resolves the optional physical stem. */\nexport type RowRuleSpec =\n | { readonly kind: \"appendOnly\"; readonly name?: string }\n | { readonly kind: \"fixed\"; readonly name?: string; readonly columns: readonly string[]; readonly when: RowRuleWhenIR }\n | { readonly kind: \"rowFixed\"; readonly name?: string; readonly except: readonly string[] }\n | { readonly kind: \"frozen\"; readonly name?: string; readonly from: { readonly create: true } | { readonly field: string }; readonly mutable: readonly string[] };\n\n/** Shared admission keys; later dialects can enable each rule independently. */\nexport type RowRuleCapability = \"rowRuleAppendOnly\" | \"rowRuleFixed\" | \"rowRuleRowFixed\" | \"rowRuleFrozen\";\n\n/** A structural or semantic error, usable by the schema's aggregate validator. */\nexport type RowRuleValidationIssue = { readonly rule: string; readonly message: string; readonly model?: string; readonly field?: string };\n\n/** One physical object owned by a declaration, tagged with the part it plays. */\nexport type RowRuleObject = { readonly role: \"function\" | \"trigger\"; readonly identity: SqlObjectIdentity };\n\n/**\n * Every physical object one declaration owns, in creation order. PostgreSQL emits\n * one function then one trigger; a later dialect may emit several triggers and no\n * function, so consumers select by role instead of assuming a fixed pair.\n */\nexport type RowRuleIdentities = readonly RowRuleObject[];\n\n/** The row events owned by portable rule triggers. */\nexport type RowRuleEvent = \"update\" | \"delete\";\n\n/** Reserved SQLite error payload; it is not evidence of object ownership. */\nexport const SQLITE_ROW_RULE_ERROR_PREFIX: \"VIBEORM_ROW_RULE:\" = \"VIBEORM_ROW_RULE:\";\n\n/** Conservative UTF-8 bound on MySQL SIGNAL's completed MESSAGE_TEXT value. */\nexport const MYSQL_ROW_RULE_MESSAGE_MAX_BYTES: 128 = 128;\n\n/** Count the decoded diagnostic value, never the SQL literal or its escaping. */\nexport function mysqlRowRuleMessageByteLength(params: { readonly triggerName: string }): number {\n return new TextEncoder().encode(`Check constraint '${params.triggerName}' is violated.`).length;\n}\n\n/** Decode only a nonempty reserved payload at the beginning of the message. */\nexport function sqliteRowRuleConstraint(params: { readonly message: string }): string | undefined {\n if (!params.message.startsWith(SQLITE_ROW_RULE_ERROR_PREFIX)) return undefined;\n const name = params.message.slice(SQLITE_ROW_RULE_ERROR_PREFIX.length);\n return name.length === 0 ? undefined : name;\n}\n\nconst CAPABILITIES: Readonly<Record<RowRuleIR[\"kind\"], RowRuleCapability>> = Object.freeze({\n appendOnly: \"rowRuleAppendOnly\", fixed: \"rowRuleFixed\", rowFixed: \"rowRuleRowFixed\", frozen: \"rowRuleFrozen\",\n});\n\nfunction record(params: { value: unknown }): params is { value: Record<string, unknown> } {\n const { value } = params;\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null)\n && Reflect.ownKeys(value).every((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && descriptor?.enumerable === true && \"value\" in descriptor;\n });\n}\n\nfunction keys(params: { value: Record<string, unknown>; required: readonly string[]; optional?: readonly string[] }): boolean {\n return params.required.every((key) => Object.hasOwn(params.value, key))\n && Object.keys(params.value).every((key) => params.required.includes(key) || params.optional?.includes(key));\n}\n\nfunction strings(params: { value: unknown }): boolean {\n return Array.isArray(params.value) && Object.keys(params.value).length === params.value.length && params.value.every((entry: unknown) => typeof entry === \"string\" && entry.length > 0);\n}\n\nfunction shapeIssue(params: { value: unknown; resolved: boolean }): string | undefined {\n const candidate = { value: params.value };\n if (!record(candidate)) return \"a row rule must be a plain data object\";\n const rule = candidate.value;\n const required = params.resolved ? [\"kind\", \"name\"] : [\"kind\"];\n const optional = params.resolved ? [] : [\"name\"];\n if ((params.resolved || rule.name !== undefined) && (typeof rule.name !== \"string\" || rule.name.trim().length === 0 || rule.name.includes(\"\\0\"))) return \"name must be a nonempty physical stem without NUL bytes\";\n switch (rule.kind) {\n case \"appendOnly\": return keys({ value: rule, required, optional }) ? undefined : \"appendOnly accepts only kind and name\";\n case \"fixed\": {\n if (!keys({ value: rule, required: [...required, \"columns\", \"when\"], optional }) || !strings({ value: rule.columns })) return \"fixed requires columns and exactly one when gate; unknown keys are not accepted\";\n const when = { value: rule.when };\n if (!record(when) || !(keys({ value: when.value, required: [\"fromCreation\"] }) && when.value.fromCreation === true\n || keys({ value: when.value, required: [\"onceSet\"] }) && typeof when.value.onceSet === \"string\" && when.value.onceSet.length > 0)) return \"fixed.when requires exactly fromCreation: true or onceSet: a logical field name\";\n return undefined;\n }\n case \"rowFixed\": return keys({ value: rule, required: [...required, \"except\"], optional }) && strings({ value: rule.except }) ? undefined : \"rowFixed requires an except field array and accepts no unknown keys\";\n case \"frozen\": {\n if (!keys({ value: rule, required: [...required, \"from\", \"mutable\"], optional }) || !strings({ value: rule.mutable })) return \"frozen requires from and a mutable field array; unknown keys are not accepted\";\n const from = { value: rule.from };\n if (!record(from) || !(keys({ value: from.value, required: [\"create\"] }) && from.value.create === true\n || keys({ value: from.value, required: [\"field\"] }) && typeof from.value.field === \"string\" && from.value.field.length > 0)) return \"frozen.from requires exactly create: true or field: a logical field name\";\n return undefined;\n }\n default: return \"kind must be appendOnly, fixed, rowFixed or frozen\";\n }\n}\n\n/** Inspect canonical JSON shape, including nested unknown-key refusal, before catalog access. */\nexport function rowRuleShapeIssue(params: { value: unknown }): string | undefined {\n return shapeIssue({ ...params, resolved: true });\n}\n\n/** Select the shared dialect capability for one declared rule. */\nexport function rowRuleCapability(params: { kind: RowRuleIR[\"kind\"] }): RowRuleCapability {\n return CAPABILITIES[params.kind];\n}\n\n/** Refuse an unsupported rule with its exact feature key and authoring context. */\nexport function assertRowRuleCapability(params: { dialect: Dialect; model: string; rule: RowRuleIR | RowRuleSpec }): void {\n const feature = rowRuleCapability({ kind: params.rule.kind });\n if (!DIALECT_CAPABILITIES[params.dialect][feature]) throw new VibeError({\n code: \"VIBE_UNSUPPORTED_CAPABILITY\",\n message: `${params.dialect} does not support declared ${params.rule.kind} row rules on ${params.model}`,\n meta: { dialect: params.dialect, feature, model: params.model, rule: params.rule.kind, ...(params.rule.name === undefined ? {} : { name: params.rule.name }) },\n });\n}\n\n/** Default stem from physical table/column names, without truncation or hashing. */\nexport function defaultRowRuleName(params: { model: Pick<ModelIR, \"name\" | \"dbName\" | \"fields\">; rule: RowRuleSpec }): string {\n const table = params.model.dbName ?? params.model.name;\n if (params.rule.kind !== \"fixed\") return `vibe_rr_${table}_${params.rule.kind}`;\n const columns = params.rule.columns.map((name) => params.model.fields.find((field) => field.name === name)?.dbName ?? name);\n return `vibe_rr_${table}_${columns.join(\"_\")}_fixed`;\n}\n\n/** Finished pair names; the stem never includes either suffix. */\nexport function rowRuleObjectNames(params: { rule: Pick<RowRuleIR, \"name\"> }): { readonly functionName: string; readonly triggerName: string } {\n return { functionName: `${params.rule.name}_fn`, triggerName: `${params.rule.name}_trigger` };\n}\n\n/** Finished SQLite/MySQL event name, independent of the PostgreSQL pair helper. */\nexport function rowRuleTriggerName(params: { readonly rule: Pick<RowRuleIR, \"name\">; readonly event: RowRuleEvent }): string {\n return `${params.rule.name}_${params.event}_trigger`;\n}\n\n/** OLD-value activation field, absent for creation-fixed and append-only rules. */\nexport function rowRuleGateField(params: { rule: RowRuleIR | RowRuleSpec }): string | undefined {\n const { rule } = params;\n if (rule.kind === \"fixed\" && \"onceSet\" in rule.when) return rule.when.onceSet;\n if (rule.kind === \"frozen\" && \"field\" in rule.from) return rule.from.field;\n return undefined;\n}\n\ntype RowRuleOwnedObject = Pick<MigrationObjectIR, \"id\" | \"identity\">;\n\n/** Internal, invocation-local preparation shared by schema validation passes. */\nexport type RowRuleValidationContext = {\n readonly objects: () => readonly RowRuleOwnedObject[];\n readonly generatedFields: (params: { model: ModelIR }) => ReadonlySet<string>;\n readonly validate: (params: { model: ModelIR }) => readonly RowRuleValidationIssue[];\n readonly assertEquality: (params: { model: ModelIR; rule: RowRuleIR }) => void;\n};\n\n/** Prepare registered ownership lazily; no row rules means no migration-object reads. */\nexport function createRowRuleValidationContext(params: { schema: SchemaIR; dialect?: Dialect }): RowRuleValidationContext {\n const { schema } = params;\n const dialect = params.dialect ?? providerToDialect({ provider: schema.datasource.provider });\n let ownedObjects: readonly RowRuleOwnedObject[] | undefined;\n let columnsByTable: ReadonlyMap<string, ReadonlySet<string>> | undefined;\n const fieldsByModel = new Map<ModelIR, ReadonlySet<string>>();\n // MySQL schemas omit fixed placement; migrate proves the registration belongs to the executor database.\n const tableKey = (table: { readonly namespace: string; readonly name: string }): string => JSON.stringify(dialect === \"mysql\" ? [table.name] : [table.namespace, table.name]);\n const objects = (): readonly RowRuleOwnedObject[] => {\n if (ownedObjects === undefined) ownedObjects = (schema.migrationObjects ?? []).map((object) => ({ id: object.id, identity: object.identity }));\n return ownedObjects;\n };\n const generatedFields = ({ model }: { model: ModelIR }): ReadonlySet<string> => {\n const previous = fieldsByModel.get(model);\n if (previous !== undefined) return previous;\n if (columnsByTable === undefined) {\n const columns = new Map<string, Set<string>>();\n for (const object of objects()) {\n const identity = object.identity;\n if (identity.kind !== \"generatedColumn\") continue;\n const key = tableKey(identity.table);\n const members = columns.get(key) ?? new Set<string>();\n members.add(identity.column);\n columns.set(key, members);\n }\n columnsByTable = columns;\n }\n const namespace = modelSqlNamespace({ schema, model, dialect }) ?? (dialect === \"sqlite\" ? \"main\" : \"public\");\n const columns = columnsByTable.get(tableKey({ namespace, name: model.dbName ?? model.name }));\n // Native declarations and registrations nominate exclusions; migrate proves their catalog facts.\n const fields = new Set(model.fields.filter((field) => field.generated !== undefined || columns?.has(field.dbName ?? field.name)).map((field) => field.name));\n // Malformed flags are not native declarations; registered SQL still needs migrate proof.\n for (const field of model.fields) if (field.generated !== undefined && generatedColumnShapeIssue({ value: field.generated }) !== undefined && !columns?.has(field.dbName ?? field.name)) fields.delete(field.name);\n fieldsByModel.set(model, fields);\n return fields;\n };\n return {\n objects,\n generatedFields,\n validate: ({ model }): readonly RowRuleValidationIssue[] => validateRowRulesWithLookup({ model, dialect, generatedFields }),\n assertEquality: ({ model, rule }): void => assertRowRuleEqualityWithGenerated({ model, rule, dialect, generated: rule.kind === \"appendOnly\" ? new Set<string>() : generatedFields({ model }) }),\n };\n}\n\n/** Authored generated-column ownership identities mapped to logical keys. */\nexport function rowRuleGeneratedFields(params: { schema: SchemaIR; model: ModelIR }): readonly string[] {\n const generated = createRowRuleValidationContext(params).generatedFields({ model: params.model });\n return params.model.fields.filter((field) => generated.has(field.name)).map((field) => field.name);\n}\n\n/** Effective protected fields: explicit fixed order then gate; complements follow model order. */\nexport function rowRuleProtectedFields(params: { schema: SchemaIR; model: ModelIR; rule: RowRuleIR }): readonly FieldIR[] {\n if (params.rule.kind === \"appendOnly\") return [];\n const generated = createRowRuleValidationContext(params).generatedFields({ model: params.model });\n return protectedFieldsWithGenerated({ model: params.model, rule: params.rule, generated });\n}\n\nfunction protectedFieldsWithGenerated(params: { model: ModelIR; rule: RowRuleIR; generated: ReadonlySet<string> }): readonly FieldIR[] {\n const { model, rule, generated } = params;\n if (rule.kind === \"appendOnly\") return [];\n const gate = rowRuleGateField({ rule });\n if (rule.kind === \"fixed\") {\n const names = [...rule.columns, ...(gate === undefined || rule.columns.includes(gate) ? [] : [gate])];\n return names.flatMap((name) => {\n const field = model.fields.find((field) => field.name === name);\n return field === undefined || generated.has(name) ? [] : [field];\n });\n }\n return model.fields.filter((field) => {\n if (generated.has(field.name)) return false;\n const except = rule.kind === \"rowFixed\" ? rule.except : rule.mutable;\n return !except.includes(field.name);\n });\n}\n\nfunction rowRuleNamespace(params: { schema: SchemaIR; model: ModelIR; dialect: Dialect; namespace?: string }): string {\n const declared = modelSqlNamespace(params);\n if (declared !== undefined) assertSqlNamespace({ namespace: declared, dialect: params.dialect });\n const canonical = declared ?? (params.dialect === \"sqlite\" ? \"main\" : \"public\");\n if (params.namespace === undefined) return canonical;\n const namespace = params.namespace;\n if (params.dialect === \"sqlite\" && namespace !== \"main\") throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"SQLite row rules require the main database; attached-schema placement is not supported\", meta: { dialect: params.dialect, feature: \"fixedNamespaces\", namespace } });\n if (params.dialect === \"postgres\") {\n assertSqlNamespace({ namespace, dialect: params.dialect });\n if (namespace !== canonical) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A row-rule namespace binding cannot override PostgreSQL model placement\", meta: { namespace, expected: canonical, model: params.model.name } });\n }\n if (namespace.trim().length === 0 || namespace.includes(\"\\0\") || !wellFormedName({ name: namespace }) || params.dialect === \"mysql\" && (identifierLength({ name: namespace, dialect: \"mysql\" }) > 64 || /[\\u{10000}-\\u{10FFFF}]/u.test(namespace) || namespace.endsWith(\" \"))) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A row-rule executor database binding requires a valid database identifier\", meta: { dialect: params.dialect, namespace } });\n return namespace;\n}\n\n/** Exact physical objects in creation order; only PostgreSQL owns a function. */\nexport function rowRuleIdentities(params: { schema: SchemaIR; model: ModelIR; rule: RowRuleIR; dialect?: Dialect; namespace?: string }): RowRuleIdentities {\n const dialect = params.dialect ?? providerToDialect({ provider: params.schema.datasource.provider });\n assertRowRuleCapability({ dialect, model: params.model.name, rule: params.rule });\n const namespace = rowRuleNamespace({ ...params, dialect });\n const table = { namespace, name: params.model.dbName ?? params.model.name };\n const { functionName, triggerName } = rowRuleObjectNames(params);\n const objects: RowRuleObject[] = dialect === \"postgres\" ? [\n { role: \"function\", identity: { kind: \"function\", name: { namespace, name: functionName }, argumentTypes: [] } },\n { role: \"trigger\", identity: { kind: \"trigger\", table, name: triggerName } },\n ] : (params.rule.kind === \"appendOnly\" ? [\"update\", \"delete\"] as const : [\"update\"] as const).map((event) => ({ role: \"trigger\", identity: { kind: \"trigger\", table, name: rowRuleTriggerName({ rule: params.rule, event }) } }));\n return Object.freeze(objects.map((object) => Object.freeze(object)));\n}\n\n/** Collect only exact declared core identities; a name prefix never implies ownership. */\nexport function schemaRowRuleIdentities(params: { schema: SchemaIR; dialect?: Dialect; namespace?: string }): readonly SqlObjectIdentity[] {\n return params.schema.models.flatMap((model) => (model.rowRules ?? []).flatMap((rule) => rowRuleIdentities({ ...params, model, rule }).map((object) => object.identity)));\n}\n\nconst NATIVE_EQUALITY: Readonly<Record<string, readonly string[]>> = Object.freeze({\n String: [\"text\", \"varchar\", \"character varying\", \"char\", \"character\", \"bpchar\", \"uuid\", \"bit\", \"varbit\", \"bit varying\", \"inet\"],\n Boolean: [\"boolean\", \"bool\"],\n Int: [\"smallint\", \"integer\", \"int\", \"int2\", \"int4\", \"oid\", \"serial\", \"smallserial\", \"serial2\", \"serial4\"],\n BigInt: [\"bigint\", \"int8\", \"bigserial\", \"serial8\"],\n Float: [\"real\", \"float\", \"float4\", \"float8\", \"double precision\"],\n Decimal: [\"decimal\", \"numeric\", \"money\"],\n DateTime: [\"timestamp\", \"timestamptz\", \"timestamp with time zone\", \"timestamp without time zone\", \"date\", \"time\", \"timetz\", \"time with time zone\", \"time without time zone\"],\n Json: [\"json\", \"jsonb\"],\n Bytes: [\"bytea\"],\n});\n\nconst MYSQL_NATIVE_EQUALITY: Readonly<Record<string, readonly string[]>> = Object.freeze({\n String: [\"text\", \"tinytext\", \"mediumtext\", \"longtext\", \"varchar\", \"char\", \"character\", \"date\"],\n Boolean: [\"boolean\", \"bool\", \"tinyint\"],\n Int: [\"tinyint\", \"smallint\", \"mediumint\", \"int\", \"integer\"],\n BigInt: [\"bigint\"],\n Float: [\"float\", \"double\", \"double precision\", \"real\"],\n Decimal: [\"decimal\", \"dec\", \"numeric\", \"fixed\"],\n DateTime: [\"datetime\", \"timestamp\", \"date\", \"time\"],\n Json: [\"json\"],\n Bytes: [\"binary\", \"varbinary\", \"tinyblob\", \"blob\", \"mediumblob\", \"longblob\"],\n});\n\nfunction equalitySupported(params: { field: FieldIR; dialect: Dialect }): boolean {\n const { field } = params;\n if (field.isUnsupported === true) return false;\n // Equality follows stored scalar/JSON values; list storage admission remains the column layer's concern.\n // SQLite renders supported scalars to TEXT/INTEGER/REAL/BLOB, ignoring native annotations.\n if (params.dialect === \"sqlite\") return true;\n if (field.nativeType === undefined) return true;\n const native = field.nativeType.trim().toLowerCase().replace(/\\(\\s*\\d+(?:\\s*,\\s*\\d+)*\\s*\\)/g, \"\").replace(/\\s+/g, \"\");\n if (params.dialect === \"mysql\") {\n const base = native.replace(/(?:unsigned|zerofill)+$/, \"\");\n if (isEnumType(field.type)) return [\"text\", \"tinytext\", \"mediumtext\", \"longtext\", \"varchar\", \"char\", \"character\"].includes(base);\n return MYSQL_NATIVE_EQUALITY[field.type]?.some((type) => type.replace(/\\s+/g, \"\") === base) === true;\n }\n if (isEnumType(field.type)) return [\"text\", \"varchar\", \"char\"].includes(native);\n return NATIVE_EQUALITY[field.type]?.some((type) => type.replace(/\\s+/g, \"\") === native) === true || field.type === \"String\" && native === \"date\" && !field.isList;\n}\n\n/** Validate canonical declarations on a complete model, without throwing for structural failures. */\nexport function validateRowRules(params: { schema: SchemaIR; model: ModelIR }): readonly RowRuleValidationIssue[] {\n return createRowRuleValidationContext(params).validate({ model: params.model });\n}\n\nfunction wellFormedName(params: { name: string }): boolean {\n return [...params.name].every((character) => character.length !== 1 || character.charCodeAt(0) < 0xD800 || character.charCodeAt(0) > 0xDFFF);\n}\n\nfunction validateRowRulesWithLookup(params: { model: ModelIR; dialect: Dialect; generatedFields: RowRuleValidationContext[\"generatedFields\"] }): readonly RowRuleValidationIssue[] {\n const { model, dialect } = params;\n const rules: unknown = model.rowRules;\n if (rules === undefined) return [];\n if (!Array.isArray(rules)) return [{ rule: \"row-rule-shape\", model: model.name, message: \"rowRules must be an array of canonical declarations\" }];\n const issues: RowRuleValidationIssue[] = [];\n const add = (params: { message: string; field?: string; rule?: string }): void => { issues.push({ rule: params.rule ?? \"row-rule-invalid\", model: model.name, ...params }); };\n const seenKinds = new Set<string>();\n const seenDefinitions = new Set<string>();\n const seenNames = new Set<string>();\n for (const value of rules) {\n const shape = rowRuleShapeIssue({ value });\n if (shape !== undefined) { add({ rule: \"row-rule-shape\", message: shape }); continue; }\n const rule = value as RowRuleIR;\n const generated = rule.kind === \"appendOnly\" ? new Set<string>() : params.generatedFields({ model });\n if (seenNames.has(rule.name)) add({ rule: \"row-rule-name-collision\", message: `Row rules share the physical stem ${rule.name}; supply an explicit, distinct name stem` });\n seenNames.add(rule.name);\n if (model.isView) add({ message: \"Row rules require a stored table, not a view\" });\n if (rule.kind !== \"fixed\" && seenKinds.has(rule.kind)) add({ message: `Only one ${rule.kind} row rule is allowed per model` });\n seenKinds.add(rule.kind);\n const definition = rule.kind === \"fixed\" ? JSON.stringify([rule.kind, [...rule.columns].sort(), rule.when]) : rule.kind;\n if (seenDefinitions.has(definition)) add({ message: `Duplicate ${rule.kind} row-rule declaration` });\n seenDefinitions.add(definition);\n const pair = rowRuleObjectNames({ rule });\n const names = dialect === \"postgres\" ? [pair.functionName, pair.triggerName] : (rule.kind === \"appendOnly\" ? [\"update\", \"delete\"] as const : [\"update\"] as const).map((event) => rowRuleTriggerName({ rule, event }));\n for (const name of names) {\n const limit = IDENTIFIER_LIMITS[dialect];\n if (limit !== undefined && identifierLength({ name, dialect }) > limit.max) add({ rule: \"row-rule-name-length\", message: `Row-rule object ${name} exceeds ${limit.max} ${limit.unit}; supply a shorter name stem` });\n if (!wellFormedName({ name })) add({ rule: \"row-rule-name-encoding\", message: \"Row-rule names require valid Unicode without unpaired surrogates\" });\n // MySQL's trigger dictionary folds both case and accents, but not by Unicode normalization.\n if (dialect === \"mysql\" && /[^\\x00-\\x7F]/.test(name)) add({ rule: \"row-rule-name-collation\", message: \"MySQL row-rule stems require ASCII for exact trigger-name collision admission; supply an explicit ASCII name stem\" });\n if (dialect === \"mysql\" && mysqlRowRuleMessageByteLength({ triggerName: name }) > MYSQL_ROW_RULE_MESSAGE_MAX_BYTES) add({ rule: \"row-rule-diagnostic-length\", message: `MySQL row-rule MESSAGE_TEXT exceeds ${MYSQL_ROW_RULE_MESSAGE_MAX_BYTES} UTF-8 bytes; supply a shorter name stem` });\n }\n const references = rule.kind === \"fixed\" ? rule.columns : rule.kind === \"rowFixed\" ? rule.except : rule.kind === \"frozen\" ? rule.mutable : [];\n if (new Set(references).size !== references.length) add({ message: `${rule.kind} field arrays require distinct members` });\n for (const name of references) {\n const field = model.fields.find((field) => field.name === name);\n if (field === undefined) add({ message: `Unknown or relation field ${name} in ${rule.kind}; use stored logical field names`, field: name });\n else if (generated.has(name)) add({ message: `Generated field ${name} cannot be listed in ${rule.kind}; generated values are already excluded`, field: name });\n }\n const gate = rowRuleGateField({ rule });\n if (gate !== undefined) {\n const field = model.fields.find((field) => field.name === gate);\n if (field === undefined || field.isList || !field.isOptional || generated.has(gate)) add({ message: `${rule.kind} gate ${gate} must be a nullable, non-generated scalar field`, field: gate });\n if (rule.kind === \"frozen\" && rule.mutable.includes(gate)) add({ message: `Frozen gate ${gate} cannot be mutable; it cannot be cleared after activation`, field: gate });\n }\n if (rule.kind !== \"appendOnly\" && (rule.kind === \"fixed\" && rule.columns.length === 0 || protectedFieldsWithGenerated({ model, rule, generated }).length === 0)) add({ message: `${rule.kind} requires at least one protected stored field` });\n }\n if (seenKinds.has(\"appendOnly\") && rules.length > 1) add({ message: \"appendOnly cannot combine with other row rules; it already refuses every UPDATE and DELETE\" });\n return issues;\n}\n\n/** Normalize source declarations, copy retained arrays and stabilize exception sets in model order. */\nexport function normalizeRowRules(params: { model: ModelIR; rules: unknown; dialect: Dialect; schema?: SchemaIR }): readonly RowRuleIR[] {\n if (!Array.isArray(params.rules)) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"rowRules must produce an array of declarations\", meta: { model: params.model.name } });\n const modelOrder = (fields: readonly string[]): readonly string[] => [...fields].sort((a, b) => params.model.fields.findIndex((field) => field.name === a) - params.model.fields.findIndex((field) => field.name === b));\n const rules: RowRuleIR[] = params.rules.map((value: unknown) => {\n const issue = shapeIssue({ value, resolved: false });\n if (issue !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: issue, meta: { model: params.model.name } });\n const rule = value as RowRuleSpec;\n const name = rule.name ?? defaultRowRuleName({ model: params.model, rule });\n switch (rule.kind) {\n case \"appendOnly\": return Object.freeze({ kind: rule.kind, name });\n case \"fixed\": return Object.freeze({ kind: rule.kind, name, columns: Object.freeze([...rule.columns]), when: Object.freeze({ ...rule.when }) });\n case \"rowFixed\": return Object.freeze({ kind: rule.kind, name, except: Object.freeze(modelOrder(rule.except)) });\n case \"frozen\": return Object.freeze({ kind: rule.kind, name, from: Object.freeze({ ...rule.from }), mutable: Object.freeze(modelOrder(rule.mutable)) });\n }\n });\n const model: ModelIR = { ...params.model, rowRules: rules };\n const schema: SchemaIR = params.schema ?? { datasource: { provider: params.dialect === \"postgres\" ? \"postgresql\" : params.dialect }, models: [model], enums: [], extensions: [] };\n const context = createRowRuleValidationContext({ schema, dialect: params.dialect });\n const issues = context.validate({ model });\n if (issues.length > 0) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: issues.map((issue) => issue.message).join(\"; \"), meta: { issues } });\n for (const rule of rules) {\n assertRowRuleCapability({ dialect: params.dialect, model: model.name, rule });\n context.assertEquality({ model, rule });\n }\n assertRowRuleReferentialActions({ schema: { ...schema, models: [...schema.models.filter((entry) => entry.name !== model.name), model] }, dialect: params.dialect });\n return Object.freeze(rules);\n}\n\n/** Refuse protected/gate types whose database equality is not part of the admitted contract. */\nexport function assertRowRuleEquality(params: { schema: SchemaIR; model: ModelIR; rule: RowRuleIR; dialect?: Dialect }): void {\n createRowRuleValidationContext(params).assertEquality({ model: params.model, rule: params.rule });\n}\n\nfunction assertRowRuleEqualityWithGenerated(params: { model: ModelIR; rule: RowRuleIR; generated: ReadonlySet<string>; dialect: Dialect }): void {\n for (const field of protectedFieldsWithGenerated(params)) {\n if (!equalitySupported({ field, dialect: params.dialect })) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: `Row rule ${params.rule.name} cannot compare ${params.model.name}.${field.name}; exempt it explicitly or use an admitted built-in type`, meta: { dialect: params.dialect, feature: \"rowRuleEquality\", model: params.model.name, field: field.name, rule: params.rule.kind, nativeType: field.nativeType } });\n }\n}\n\n/** MySQL FK actions bypass child triggers; refuse declarations whose protection they evade. */\nexport function assertRowRuleReferentialActions(params: { readonly schema: SchemaIR; readonly dialect?: Dialect }): void {\n const dialect = params.dialect ?? providerToDialect({ provider: params.schema.datasource.provider });\n if (dialect !== \"mysql\") return;\n const context = createRowRuleValidationContext({ schema: params.schema, dialect });\n const mutates = (action: string): boolean => action === \"Cascade\" || action === \"SetNull\" || action === \"SetDefault\";\n for (const model of params.schema.models) {\n if (!Array.isArray(model.rowRules) || model.rowRules.length === 0) continue;\n for (const relation of model.relations) {\n const columns = relation.fields;\n if (columns === undefined || columns.length === 0 || params.schema.models.some((target) => target.name === relation.targetModel && target.isView)) continue;\n const actions = resolveReferentialActions({ relation, field: (name) => model.fields.find((field) => field.name === name) });\n for (const rule of model.rowRules) {\n if (rowRuleShapeIssue({ value: rule }) !== undefined) continue;\n const protectedColumns = rule.kind === \"appendOnly\" ? [] : protectedFieldsWithGenerated({ model, rule, generated: context.generatedFields({ model }) }).map((field) => field.name);\n const field = columns.find((name) => protectedColumns.includes(name));\n const conservative = rule.kind === \"appendOnly\" || rule.kind === \"fixed\" && (actions.onUpdate === \"Cascade\" || actions.onDelete === \"Cascade\");\n const unsafeUpdate = mutates(actions.onUpdate) && (conservative || field !== undefined);\n const unsafeDelete = (rule.kind === \"appendOnly\" || rule.kind === \"fixed\") && actions.onDelete === \"Cascade\" || (actions.onDelete === \"SetNull\" || actions.onDelete === \"SetDefault\") && (rule.kind === \"appendOnly\" || field !== undefined);\n if (!unsafeUpdate && !unsafeDelete) continue;\n throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: `MySQL relation ${model.name}.${relation.name} can bypass row rule ${rule.name} through a foreign-key action; declare safe Restrict/NoAction actions or change the protected fields`, meta: { feature: \"rowRuleReferentialActions\", dialect, model: model.name, relation: relation.name, rule: rule.kind, name: rule.name, onUpdate: actions.onUpdate, onDelete: actions.onDelete, action: unsafeUpdate ? \"onUpdate\" : \"onDelete\", ...(field === undefined ? {} : { field }) } });\n }\n }\n }\n}\n\n/** Lossless VibeORM .prisma attribute spelling, including resolved stems and tagged gates. */\nexport function rowRulePrismaAttribute(params: { rule: RowRuleIR }): string {\n const { rule } = params;\n const name = `name: ${encodePrismaString({ value: rule.name })}`;\n switch (rule.kind) {\n case \"appendOnly\": return `@@appendOnly(${name})`;\n case \"fixed\": return `@@fixed([${rule.columns.join(\", \")}], ${\"fromCreation\" in rule.when ? \"fromCreation: true\" : `onceSet: ${rule.when.onceSet}`}, ${name})`;\n case \"rowFixed\": return `@@rowFixed(except: [${rule.except.join(\", \")}], ${name})`;\n case \"frozen\": return `@@frozen(${\"create\" in rule.from ? \"fromCreation: true\" : `from: ${rule.from.field}`}, mutable: [${rule.mutable.join(\", \")}], ${name})`;\n }\n}\n",
|
|
20
|
+
"import { DIALECT_CAPABILITIES } from \"./capabilities.ts\";\nimport { generatedColumnShapeIssue } from \"./generated-columns.ts\";\nimport { VibeError } from \"./errors.ts\";\nimport { isEnumType, providerToDialect } from \"./ir.ts\";\nimport type { Dialect, FieldIR, ModelIR, SchemaIR } from \"./ir.ts\";\nimport type { MigrationObjectIR, SqlObjectIdentity } from \"./migration-objects.ts\";\nimport { modelSqlNamespace } from \"./model-sql-namespace.ts\";\nimport { assertSqlNamespace } from \"./namespaces.ts\";\nimport { resolveReferentialActions } from \"./referential-actions.ts\";\nimport { IDENTIFIER_LIMITS, identifierLength } from \"./physical-names.ts\";\nimport { encodePrismaString } from \"./prisma-literal.ts\";\n\n/** A fixed group is protected from insertion, or after OLD's nullable gate is set. */\nexport type RowRuleWhenIR = { readonly fromCreation: true } | { readonly onceSet: string };\n\n/** Structured row invariant; names are resolved physical stems and fields are logical names. */\nexport type RowRuleIR =\n | { readonly kind: \"appendOnly\"; readonly name: string }\n | { readonly kind: \"fixed\"; readonly name: string; readonly columns: readonly string[]; readonly when: RowRuleWhenIR }\n | { readonly kind: \"rowFixed\"; readonly name: string; readonly except: readonly string[] }\n | { readonly kind: \"frozen\"; readonly name: string; readonly from: { readonly create: true } | { readonly field: string }; readonly mutable: readonly string[] };\n\n/** Authoring data before the shared normalizer resolves the optional physical stem. */\nexport type RowRuleSpec =\n | { readonly kind: \"appendOnly\"; readonly name?: string }\n | { readonly kind: \"fixed\"; readonly name?: string; readonly columns: readonly string[]; readonly when: RowRuleWhenIR }\n | { readonly kind: \"rowFixed\"; readonly name?: string; readonly except: readonly string[] }\n | { readonly kind: \"frozen\"; readonly name?: string; readonly from: { readonly create: true } | { readonly field: string }; readonly mutable: readonly string[] };\n\n/** Shared admission keys; later dialects can enable each rule independently. */\nexport type RowRuleCapability = \"rowRuleAppendOnly\" | \"rowRuleFixed\" | \"rowRuleRowFixed\" | \"rowRuleFrozen\";\n\n/** A structural or semantic error, usable by the schema's aggregate validator. */\nexport type RowRuleValidationIssue = { readonly rule: string; readonly message: string; readonly model?: string; readonly field?: string };\n\n/** One physical object owned by a declaration, tagged with the part it plays. */\nexport type RowRuleObject = { readonly role: \"function\" | \"trigger\"; readonly identity: SqlObjectIdentity };\n\n/**\n * Every physical object one declaration owns, in creation order. PostgreSQL emits\n * one function then one trigger; a later dialect may emit several triggers and no\n * function, so consumers select by role instead of assuming a fixed pair.\n */\nexport type RowRuleIdentities = readonly RowRuleObject[];\n\n/** The row events owned by portable rule triggers. */\nexport type RowRuleEvent = \"update\" | \"delete\";\n\n/** Reserved SQLite error payload; it is not evidence of object ownership. */\nexport const SQLITE_ROW_RULE_ERROR_PREFIX: \"VIBEORM_ROW_RULE:\" = \"VIBEORM_ROW_RULE:\";\n\n/** Conservative UTF-8 bound on MySQL SIGNAL's completed MESSAGE_TEXT value. */\nexport const MYSQL_ROW_RULE_MESSAGE_MAX_BYTES: 128 = 128;\n\n/** Count the decoded diagnostic value, never the SQL literal or its escaping. */\nexport function mysqlRowRuleMessageByteLength(params: { readonly triggerName: string }): number {\n return new TextEncoder().encode(`Check constraint '${params.triggerName}' is violated.`).length;\n}\n\n/** Decode only a nonempty reserved payload at the beginning of the message. */\nexport function sqliteRowRuleConstraint(params: { readonly message: string }): string | undefined {\n if (!params.message.startsWith(SQLITE_ROW_RULE_ERROR_PREFIX)) return undefined;\n const name = params.message.slice(SQLITE_ROW_RULE_ERROR_PREFIX.length);\n return name.length === 0 ? undefined : name;\n}\n\nconst CAPABILITIES: Readonly<Record<RowRuleIR[\"kind\"], RowRuleCapability>> = Object.freeze({\n appendOnly: \"rowRuleAppendOnly\", fixed: \"rowRuleFixed\", rowFixed: \"rowRuleRowFixed\", frozen: \"rowRuleFrozen\",\n});\n\nfunction record(params: { value: unknown }): params is { value: Record<string, unknown> } {\n const { value } = params;\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null)\n && Reflect.ownKeys(value).every((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && descriptor?.enumerable === true && \"value\" in descriptor;\n });\n}\n\nfunction keys(params: { value: Record<string, unknown>; required: readonly string[]; optional?: readonly string[] }): boolean {\n return params.required.every((key) => Object.hasOwn(params.value, key))\n && Object.keys(params.value).every((key) => params.required.includes(key) || params.optional?.includes(key));\n}\n\nfunction strings(params: { value: unknown }): boolean {\n return Array.isArray(params.value) && Object.keys(params.value).length === params.value.length && params.value.every((entry: unknown) => typeof entry === \"string\" && entry.length > 0);\n}\n\nfunction shapeIssue(params: { value: unknown; resolved: boolean }): string | undefined {\n const candidate = { value: params.value };\n if (!record(candidate)) return \"a row rule must be a plain data object\";\n const rule = candidate.value;\n const required = params.resolved ? [\"kind\", \"name\"] : [\"kind\"];\n const optional = params.resolved ? [] : [\"name\"];\n if ((params.resolved || rule.name !== undefined) && (typeof rule.name !== \"string\" || rule.name.trim().length === 0 || rule.name.includes(\"\\0\"))) return \"name must be a nonempty physical stem without NUL bytes\";\n switch (rule.kind) {\n case \"appendOnly\": return keys({ value: rule, required, optional }) ? undefined : \"appendOnly accepts only kind and name\";\n case \"fixed\": {\n if (!keys({ value: rule, required: [...required, \"columns\", \"when\"], optional }) || !strings({ value: rule.columns })) return \"fixed requires columns and exactly one when gate; unknown keys are not accepted\";\n const when = { value: rule.when };\n if (!record(when) || !(keys({ value: when.value, required: [\"fromCreation\"] }) && when.value.fromCreation === true\n || keys({ value: when.value, required: [\"onceSet\"] }) && typeof when.value.onceSet === \"string\" && when.value.onceSet.length > 0)) return \"fixed.when requires exactly fromCreation: true or onceSet: a logical field name\";\n return undefined;\n }\n case \"rowFixed\": return keys({ value: rule, required: [...required, \"except\"], optional }) && strings({ value: rule.except }) ? undefined : \"rowFixed requires an except field array and accepts no unknown keys\";\n case \"frozen\": {\n if (!keys({ value: rule, required: [...required, \"from\", \"mutable\"], optional }) || !strings({ value: rule.mutable })) return \"frozen requires from and a mutable field array; unknown keys are not accepted\";\n const from = { value: rule.from };\n if (!record(from) || !(keys({ value: from.value, required: [\"create\"] }) && from.value.create === true\n || keys({ value: from.value, required: [\"field\"] }) && typeof from.value.field === \"string\" && from.value.field.length > 0)) return \"frozen.from requires exactly create: true or field: a logical field name\";\n return undefined;\n }\n default: return \"kind must be appendOnly, fixed, rowFixed or frozen\";\n }\n}\n\n/** Inspect canonical JSON shape, including nested unknown-key refusal, before catalog access. */\nexport function rowRuleShapeIssue(params: { value: unknown }): string | undefined {\n return shapeIssue({ ...params, resolved: true });\n}\n\n/** Select the shared dialect capability for one declared rule. */\nexport function rowRuleCapability(params: { kind: RowRuleIR[\"kind\"] }): RowRuleCapability {\n return CAPABILITIES[params.kind];\n}\n\n/** Refuse an unsupported rule with its exact feature key and authoring context. */\nexport function assertRowRuleCapability(params: { dialect: Dialect; model: string; rule: RowRuleIR | RowRuleSpec }): void {\n const feature = rowRuleCapability({ kind: params.rule.kind });\n if (!DIALECT_CAPABILITIES[params.dialect][feature]) throw new VibeError({\n code: \"VIBE_UNSUPPORTED_CAPABILITY\",\n message: `${params.dialect} does not support declared ${params.rule.kind} row rules on ${params.model}`,\n meta: { dialect: params.dialect, feature, model: params.model, rule: params.rule.kind, ...(params.rule.name === undefined ? {} : { name: params.rule.name }) },\n });\n}\n\n/** Default stem from physical table/column names, without truncation or hashing. */\nexport function defaultRowRuleName(params: { model: Pick<ModelIR, \"name\" | \"dbName\" | \"fields\">; rule: RowRuleSpec }): string {\n const table = params.model.dbName ?? params.model.name;\n if (params.rule.kind !== \"fixed\") return `vibe_rr_${table}_${params.rule.kind}`;\n const columns = params.rule.columns.map((name) => params.model.fields.find((field) => field.name === name)?.dbName ?? name);\n return `vibe_rr_${table}_${columns.join(\"_\")}_fixed`;\n}\n\n/** Finished pair names; the stem never includes either suffix. */\nexport function rowRuleObjectNames(params: { rule: Pick<RowRuleIR, \"name\"> }): { readonly functionName: string; readonly triggerName: string } {\n return { functionName: `${params.rule.name}_fn`, triggerName: `${params.rule.name}_trigger` };\n}\n\n/** Finished SQLite/MySQL event name, independent of the PostgreSQL pair helper. */\nexport function rowRuleTriggerName(params: { readonly rule: Pick<RowRuleIR, \"name\">; readonly event: RowRuleEvent }): string {\n return `${params.rule.name}_${params.event}_trigger`;\n}\n\n/** OLD-value activation field, absent for creation-fixed and append-only rules. */\nexport function rowRuleGateField(params: { rule: RowRuleIR | RowRuleSpec }): string | undefined {\n const { rule } = params;\n if (rule.kind === \"fixed\" && \"onceSet\" in rule.when) return rule.when.onceSet;\n if (rule.kind === \"frozen\" && \"field\" in rule.from) return rule.from.field;\n return undefined;\n}\n\ntype RowRuleOwnedObject = Pick<MigrationObjectIR, \"id\" | \"identity\">;\n\n/** Internal, invocation-local preparation shared by schema validation passes. */\nexport type RowRuleValidationContext = {\n readonly objects: () => readonly RowRuleOwnedObject[];\n readonly generatedFields: (params: { model: ModelIR }) => ReadonlySet<string>;\n readonly validate: (params: { model: ModelIR }) => readonly RowRuleValidationIssue[];\n readonly assertEquality: (params: { model: ModelIR; rule: RowRuleIR }) => void;\n};\n\n/** Prepare registered ownership lazily; no row rules means no migration-object reads. */\nexport function createRowRuleValidationContext(params: { schema: SchemaIR; dialect?: Dialect }): RowRuleValidationContext {\n const { schema } = params;\n const dialect = params.dialect ?? providerToDialect({ provider: schema.datasource.provider });\n let ownedObjects: readonly RowRuleOwnedObject[] | undefined;\n let columnsByTable: ReadonlyMap<string, ReadonlySet<string>> | undefined;\n const fieldsByModel = new Map<ModelIR, ReadonlySet<string>>();\n // MySQL schemas omit fixed placement; migrate proves the registration belongs to the executor database.\n const tableKey = (table: { readonly namespace: string; readonly name: string }): string => JSON.stringify(dialect === \"mysql\" ? [table.name] : [table.namespace, table.name]);\n const objects = (): readonly RowRuleOwnedObject[] => {\n if (ownedObjects === undefined) ownedObjects = (schema.migrationObjects ?? []).map((object) => ({ id: object.id, identity: object.identity }));\n return ownedObjects;\n };\n const generatedFields = ({ model }: { model: ModelIR }): ReadonlySet<string> => {\n const previous = fieldsByModel.get(model);\n if (previous !== undefined) return previous;\n if (columnsByTable === undefined) {\n const columns = new Map<string, Set<string>>();\n for (const object of objects()) {\n const identity = object.identity;\n if (identity.kind !== \"generatedColumn\") continue;\n const key = tableKey(identity.table);\n const members = columns.get(key) ?? new Set<string>();\n members.add(identity.column);\n columns.set(key, members);\n }\n columnsByTable = columns;\n }\n const namespace = modelSqlNamespace({ schema, model, dialect }) ?? (dialect === \"sqlite\" ? \"main\" : \"public\");\n const columns = columnsByTable.get(tableKey({ namespace, name: model.dbName ?? model.name }));\n // Native declarations and registrations nominate exclusions; migrate proves their catalog facts.\n const fields = new Set(model.fields.filter((field) => field.generated !== undefined || columns?.has(field.dbName ?? field.name)).map((field) => field.name));\n // Malformed flags are not native declarations; registered SQL still needs migrate proof.\n for (const field of model.fields) if (field.generated !== undefined && generatedColumnShapeIssue({ value: field.generated }) !== undefined && !columns?.has(field.dbName ?? field.name)) fields.delete(field.name);\n fieldsByModel.set(model, fields);\n return fields;\n };\n return {\n objects,\n generatedFields,\n validate: ({ model }): readonly RowRuleValidationIssue[] => validateRowRulesWithLookup({ model, dialect, generatedFields }),\n assertEquality: ({ model, rule }): void => assertRowRuleEqualityWithGenerated({ model, rule, dialect, generated: rule.kind === \"appendOnly\" ? new Set<string>() : generatedFields({ model }) }),\n };\n}\n\n/** Authored generated-column ownership identities mapped to logical keys. */\nexport function rowRuleGeneratedFields(params: { schema: SchemaIR; model: ModelIR }): readonly string[] {\n const generated = createRowRuleValidationContext(params).generatedFields({ model: params.model });\n return params.model.fields.filter((field) => generated.has(field.name)).map((field) => field.name);\n}\n\n/** Effective protected fields: explicit fixed order then gate; complements follow model order. */\nexport function rowRuleProtectedFields(params: { schema: SchemaIR; model: ModelIR; rule: RowRuleIR }): readonly FieldIR[] {\n if (params.rule.kind === \"appendOnly\") return [];\n const generated = createRowRuleValidationContext(params).generatedFields({ model: params.model });\n return protectedFieldsWithGenerated({ model: params.model, rule: params.rule, generated });\n}\n\nfunction protectedFieldsWithGenerated(params: { model: ModelIR; rule: RowRuleIR; generated: ReadonlySet<string> }): readonly FieldIR[] {\n const { model, rule, generated } = params;\n if (rule.kind === \"appendOnly\") return [];\n const gate = rowRuleGateField({ rule });\n if (rule.kind === \"fixed\") {\n const names = [...rule.columns, ...(gate === undefined || rule.columns.includes(gate) ? [] : [gate])];\n return names.flatMap((name) => {\n const field = model.fields.find((field) => field.name === name);\n return field === undefined || generated.has(name) ? [] : [field];\n });\n }\n return model.fields.filter((field) => {\n if (generated.has(field.name)) return false;\n const except = rule.kind === \"rowFixed\" ? rule.except : rule.mutable;\n return !except.includes(field.name);\n });\n}\n\nfunction rowRuleNamespace(params: { schema: SchemaIR; model: ModelIR; dialect: Dialect; namespace?: string }): string {\n const declared = modelSqlNamespace(params);\n if (declared !== undefined) assertSqlNamespace({ namespace: declared, dialect: params.dialect });\n const canonical = declared ?? (params.dialect === \"sqlite\" ? \"main\" : \"public\");\n if (params.namespace === undefined) return canonical;\n const namespace = params.namespace;\n if (params.dialect === \"sqlite\" && namespace !== \"main\") throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"SQLite row rules require the main database; attached-schema placement is not supported\", meta: { dialect: params.dialect, feature: \"fixedNamespaces\", namespace } });\n if (params.dialect === \"postgres\") {\n assertSqlNamespace({ namespace, dialect: params.dialect });\n if (namespace !== canonical) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A row-rule namespace binding cannot override PostgreSQL model placement\", meta: { namespace, expected: canonical, model: params.model.name } });\n }\n if (namespace.trim().length === 0 || namespace.includes(\"\\0\") || !wellFormedName({ name: namespace }) || params.dialect === \"mysql\" && (identifierLength({ name: namespace, dialect: \"mysql\" }) > 64 || /[\\u{10000}-\\u{10FFFF}]/u.test(namespace) || namespace.endsWith(\" \"))) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A row-rule executor database binding requires a valid database identifier\", meta: { dialect: params.dialect, namespace } });\n return namespace;\n}\n\n/** Exact physical objects in creation order; only PostgreSQL owns a function. */\nexport function rowRuleIdentities(params: { schema: SchemaIR; model: ModelIR; rule: RowRuleIR; dialect?: Dialect; namespace?: string }): RowRuleIdentities {\n const dialect = params.dialect ?? providerToDialect({ provider: params.schema.datasource.provider });\n assertRowRuleCapability({ dialect, model: params.model.name, rule: params.rule });\n const namespace = rowRuleNamespace({ ...params, dialect });\n const table = { namespace, name: params.model.dbName ?? params.model.name };\n const { functionName, triggerName } = rowRuleObjectNames(params);\n const objects: RowRuleObject[] = dialect === \"postgres\" ? [\n { role: \"function\", identity: { kind: \"function\", name: { namespace, name: functionName }, argumentTypes: [] } },\n { role: \"trigger\", identity: { kind: \"trigger\", table, name: triggerName } },\n ] : (params.rule.kind === \"appendOnly\" ? [\"update\", \"delete\"] as const : [\"update\"] as const).map((event) => ({ role: \"trigger\", identity: { kind: \"trigger\", table, name: rowRuleTriggerName({ rule: params.rule, event }) } }));\n return Object.freeze(objects.map((object) => Object.freeze(object)));\n}\n\n/** Collect only exact declared core identities; a name prefix never implies ownership. */\nexport function schemaRowRuleIdentities(params: { schema: SchemaIR; dialect?: Dialect; namespace?: string }): readonly SqlObjectIdentity[] {\n return params.schema.models.flatMap((model) => (model.rowRules ?? []).flatMap((rule) => rowRuleIdentities({ ...params, model, rule }).map((object) => object.identity)));\n}\n\nconst NATIVE_EQUALITY: Readonly<Record<string, readonly string[]>> = Object.freeze({\n String: [\"text\", \"varchar\", \"character varying\", \"char\", \"character\", \"bpchar\", \"uuid\", \"bit\", \"varbit\", \"bit varying\", \"inet\"],\n Boolean: [\"boolean\", \"bool\"],\n Int: [\"smallint\", \"integer\", \"int\", \"int2\", \"int4\", \"oid\", \"serial\", \"smallserial\", \"serial2\", \"serial4\"],\n BigInt: [\"bigint\", \"int8\", \"bigserial\", \"serial8\"],\n Float: [\"real\", \"float\", \"float4\", \"float8\", \"double precision\"],\n Decimal: [\"decimal\", \"numeric\", \"money\"],\n DateTime: [\"timestamp\", \"timestamptz\", \"timestamp with time zone\", \"timestamp without time zone\", \"date\", \"time\", \"timetz\", \"time with time zone\", \"time without time zone\"],\n Json: [\"json\", \"jsonb\"],\n Bytes: [\"bytea\"],\n});\n\nconst MYSQL_NATIVE_EQUALITY: Readonly<Record<string, readonly string[]>> = Object.freeze({\n String: [\"text\", \"tinytext\", \"mediumtext\", \"longtext\", \"varchar\", \"char\", \"character\", \"date\"],\n Boolean: [\"boolean\", \"bool\", \"tinyint\"],\n Int: [\"tinyint\", \"smallint\", \"mediumint\", \"int\", \"integer\"],\n BigInt: [\"bigint\"],\n Float: [\"float\", \"double\", \"double precision\", \"real\"],\n Decimal: [\"decimal\", \"dec\", \"numeric\", \"fixed\"],\n DateTime: [\"datetime\", \"timestamp\", \"date\", \"time\"],\n Json: [\"json\"],\n Bytes: [\"binary\", \"varbinary\", \"tinyblob\", \"blob\", \"mediumblob\", \"longblob\"],\n});\n\nfunction equalitySupported(params: { field: FieldIR; dialect: Dialect }): boolean {\n const { field } = params;\n if (field.isUnsupported === true) return false;\n // Equality follows stored scalar/JSON values; list storage admission remains the column layer's concern.\n // SQLite renders supported scalars to TEXT/INTEGER/REAL/BLOB, ignoring native annotations.\n if (params.dialect === \"sqlite\") return true;\n if (field.nativeType === undefined) return true;\n const native = field.nativeType.trim().toLowerCase().replace(/\\(\\s*\\d+(?:\\s*,\\s*\\d+)*\\s*\\)/g, \"\").replace(/\\s+/g, \"\");\n if (params.dialect === \"mysql\") {\n const base = native.replace(/(?:unsigned|zerofill)+$/, \"\");\n if (isEnumType(field.type)) return [\"text\", \"tinytext\", \"mediumtext\", \"longtext\", \"varchar\", \"char\", \"character\"].includes(base);\n return MYSQL_NATIVE_EQUALITY[field.type]?.some((type) => type.replace(/\\s+/g, \"\") === base) === true;\n }\n if (isEnumType(field.type)) return [\"text\", \"varchar\", \"char\"].includes(native);\n return NATIVE_EQUALITY[field.type]?.some((type) => type.replace(/\\s+/g, \"\") === native) === true || field.type === \"String\" && native === \"date\" && !field.isList;\n}\n\n/** Validate canonical declarations on a complete model, without throwing for structural failures. */\nexport function validateRowRules(params: { schema: SchemaIR; model: ModelIR }): readonly RowRuleValidationIssue[] {\n return createRowRuleValidationContext(params).validate({ model: params.model });\n}\n\nfunction wellFormedName(params: { name: string }): boolean {\n return [...params.name].every((character) => character.length !== 1 || character.charCodeAt(0) < 0xD800 || character.charCodeAt(0) > 0xDFFF);\n}\n\n/** What to do instead of a second rule of a kind that a model declares at most once. */\nconst REPEATED_RULE_ADVICE: Readonly<Record<Exclude<RowRuleIR[\"kind\"], \"fixed\">, string>> = Object.freeze({\n appendOnly: \"Keep one: it already refuses every UPDATE and DELETE.\",\n rowFixed: \"Merge them into one rule whose except list holds only the fields both leave mutable.\",\n frozen: \"Merge them into one rule, or protect the fields of a later stage with a fixed rule gated by onceSet.\",\n});\n\nfunction validateRowRulesWithLookup(params: { model: ModelIR; dialect: Dialect; generatedFields: RowRuleValidationContext[\"generatedFields\"] }): readonly RowRuleValidationIssue[] {\n const { model, dialect } = params;\n const rules: unknown = model.rowRules;\n if (rules === undefined) return [];\n if (!Array.isArray(rules)) return [{ rule: \"row-rule-shape\", model: model.name, message: \"rowRules must be an array of canonical declarations\" }];\n const issues: RowRuleValidationIssue[] = [];\n const add = (params: { message: string; field?: string; rule?: string }): void => { issues.push({ rule: params.rule ?? \"row-rule-invalid\", model: model.name, ...params }); };\n // The first rule's stem per kind. Only fixed groups repeat on a model; every\n // other kind is declared at most once (docs/getting-started.md, row rules).\n const firstOfKind = new Map<string, string>();\n const seenDefinitions = new Set<string>();\n const seenNames = new Set<string>();\n for (const value of rules) {\n const shape = rowRuleShapeIssue({ value });\n if (shape !== undefined) { add({ rule: \"row-rule-shape\", message: shape }); continue; }\n const rule = value as RowRuleIR;\n const generated = rule.kind === \"appendOnly\" ? new Set<string>() : params.generatedFields({ model });\n const first = rule.kind === \"fixed\" ? undefined : firstOfKind.get(rule.kind);\n // One issue per repeated rule: a distinct stem would not admit it, so the stem collision is not reported too.\n if (first !== undefined && rule.kind !== \"fixed\") add({ message: `Model \"${model.name}\" declares more than one ${rule.kind} row rule (${first}, ${rule.name}). A model takes at most one ${rule.kind} rule; only fixed rules may repeat. ${REPEATED_RULE_ADVICE[rule.kind]}` });\n else if (seenNames.has(rule.name)) add({ rule: \"row-rule-name-collision\", message: `Row rules share the physical stem ${rule.name}; supply an explicit, distinct name stem` });\n seenNames.add(rule.name);\n if (model.isView) add({ message: \"Row rules require a stored table, not a view\" });\n if (rule.kind !== \"fixed\" && first === undefined) firstOfKind.set(rule.kind, rule.name);\n if (rule.kind === \"fixed\") {\n const definition = JSON.stringify([rule.kind, [...rule.columns].sort(), rule.when]);\n if (seenDefinitions.has(definition)) add({ message: \"Duplicate fixed row-rule declaration\" });\n seenDefinitions.add(definition);\n }\n const pair = rowRuleObjectNames({ rule });\n const names = dialect === \"postgres\" ? [pair.functionName, pair.triggerName] : (rule.kind === \"appendOnly\" ? [\"update\", \"delete\"] as const : [\"update\"] as const).map((event) => rowRuleTriggerName({ rule, event }));\n for (const name of names) {\n const limit = IDENTIFIER_LIMITS[dialect];\n if (limit !== undefined && identifierLength({ name, dialect }) > limit.max) add({ rule: \"row-rule-name-length\", message: `Row-rule object ${name} exceeds ${limit.max} ${limit.unit}; supply a shorter name stem` });\n if (!wellFormedName({ name })) add({ rule: \"row-rule-name-encoding\", message: \"Row-rule names require valid Unicode without unpaired surrogates\" });\n // MySQL's trigger dictionary folds both case and accents, but not by Unicode normalization.\n if (dialect === \"mysql\" && /[^\\x00-\\x7F]/.test(name)) add({ rule: \"row-rule-name-collation\", message: \"MySQL row-rule stems require ASCII for exact trigger-name collision admission; supply an explicit ASCII name stem\" });\n if (dialect === \"mysql\" && mysqlRowRuleMessageByteLength({ triggerName: name }) > MYSQL_ROW_RULE_MESSAGE_MAX_BYTES) add({ rule: \"row-rule-diagnostic-length\", message: `MySQL row-rule MESSAGE_TEXT exceeds ${MYSQL_ROW_RULE_MESSAGE_MAX_BYTES} UTF-8 bytes; supply a shorter name stem` });\n }\n const references = rule.kind === \"fixed\" ? rule.columns : rule.kind === \"rowFixed\" ? rule.except : rule.kind === \"frozen\" ? rule.mutable : [];\n if (new Set(references).size !== references.length) add({ message: `${rule.kind} field arrays require distinct members` });\n for (const name of references) {\n const field = model.fields.find((field) => field.name === name);\n if (field === undefined) add({ message: `Unknown or relation field ${name} in ${rule.kind}; use stored logical field names`, field: name });\n else if (generated.has(name)) add({ message: `Generated field ${name} cannot be listed in ${rule.kind}; generated values are already excluded`, field: name });\n }\n const gate = rowRuleGateField({ rule });\n if (gate !== undefined) {\n const field = model.fields.find((field) => field.name === gate);\n if (field === undefined || field.isList || !field.isOptional || generated.has(gate)) add({ message: `${rule.kind} gate ${gate} must be a nullable, non-generated scalar field`, field: gate });\n if (rule.kind === \"frozen\" && rule.mutable.includes(gate)) add({ message: `Frozen gate ${gate} cannot be mutable; it cannot be cleared after activation`, field: gate });\n }\n if (rule.kind !== \"appendOnly\" && (rule.kind === \"fixed\" && rule.columns.length === 0 || protectedFieldsWithGenerated({ model, rule, generated }).length === 0)) add({ message: `${rule.kind} requires at least one protected stored field` });\n }\n if (firstOfKind.has(\"appendOnly\") && rules.length > 1) add({ message: \"appendOnly cannot combine with other row rules; it already refuses every UPDATE and DELETE\" });\n return issues;\n}\n\n/** Normalize source declarations, copy retained arrays and stabilize exception sets in model order. */\nexport function normalizeRowRules(params: { model: ModelIR; rules: unknown; dialect: Dialect; schema?: SchemaIR }): readonly RowRuleIR[] {\n if (!Array.isArray(params.rules)) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"rowRules must produce an array of declarations\", meta: { model: params.model.name } });\n const modelOrder = (fields: readonly string[]): readonly string[] => [...fields].sort((a, b) => params.model.fields.findIndex((field) => field.name === a) - params.model.fields.findIndex((field) => field.name === b));\n const rules: RowRuleIR[] = params.rules.map((value: unknown) => {\n const issue = shapeIssue({ value, resolved: false });\n if (issue !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: issue, meta: { model: params.model.name } });\n const rule = value as RowRuleSpec;\n const name = rule.name ?? defaultRowRuleName({ model: params.model, rule });\n switch (rule.kind) {\n case \"appendOnly\": return Object.freeze({ kind: rule.kind, name });\n case \"fixed\": return Object.freeze({ kind: rule.kind, name, columns: Object.freeze([...rule.columns]), when: Object.freeze({ ...rule.when }) });\n case \"rowFixed\": return Object.freeze({ kind: rule.kind, name, except: Object.freeze(modelOrder(rule.except)) });\n case \"frozen\": return Object.freeze({ kind: rule.kind, name, from: Object.freeze({ ...rule.from }), mutable: Object.freeze(modelOrder(rule.mutable)) });\n }\n });\n const model: ModelIR = { ...params.model, rowRules: rules };\n const schema: SchemaIR = params.schema ?? { datasource: { provider: params.dialect === \"postgres\" ? \"postgresql\" : params.dialect }, models: [model], enums: [], extensions: [] };\n const context = createRowRuleValidationContext({ schema, dialect: params.dialect });\n const issues = context.validate({ model });\n if (issues.length > 0) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: issues.map((issue) => issue.message).join(\"; \"), meta: { issues } });\n for (const rule of rules) {\n assertRowRuleCapability({ dialect: params.dialect, model: model.name, rule });\n context.assertEquality({ model, rule });\n }\n assertRowRuleReferentialActions({ schema: { ...schema, models: [...schema.models.filter((entry) => entry.name !== model.name), model] }, dialect: params.dialect });\n return Object.freeze(rules);\n}\n\n/** Refuse protected/gate types whose database equality is not part of the admitted contract. */\nexport function assertRowRuleEquality(params: { schema: SchemaIR; model: ModelIR; rule: RowRuleIR; dialect?: Dialect }): void {\n createRowRuleValidationContext(params).assertEquality({ model: params.model, rule: params.rule });\n}\n\nfunction assertRowRuleEqualityWithGenerated(params: { model: ModelIR; rule: RowRuleIR; generated: ReadonlySet<string>; dialect: Dialect }): void {\n for (const field of protectedFieldsWithGenerated(params)) {\n if (!equalitySupported({ field, dialect: params.dialect })) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: `Row rule ${params.rule.name} cannot compare ${params.model.name}.${field.name}; exempt it explicitly or use an admitted built-in type`, meta: { dialect: params.dialect, feature: \"rowRuleEquality\", model: params.model.name, field: field.name, rule: params.rule.kind, nativeType: field.nativeType } });\n }\n}\n\n/** MySQL FK actions bypass child triggers; refuse declarations whose protection they evade. */\nexport function assertRowRuleReferentialActions(params: { readonly schema: SchemaIR; readonly dialect?: Dialect }): void {\n const dialect = params.dialect ?? providerToDialect({ provider: params.schema.datasource.provider });\n if (dialect !== \"mysql\") return;\n const context = createRowRuleValidationContext({ schema: params.schema, dialect });\n const mutates = (action: string): boolean => action === \"Cascade\" || action === \"SetNull\" || action === \"SetDefault\";\n for (const model of params.schema.models) {\n if (!Array.isArray(model.rowRules) || model.rowRules.length === 0) continue;\n for (const relation of model.relations) {\n const columns = relation.fields;\n if (columns === undefined || columns.length === 0 || params.schema.models.some((target) => target.name === relation.targetModel && target.isView)) continue;\n const actions = resolveReferentialActions({ relation, field: (name) => model.fields.find((field) => field.name === name) });\n for (const rule of model.rowRules) {\n if (rowRuleShapeIssue({ value: rule }) !== undefined) continue;\n const protectedColumns = rule.kind === \"appendOnly\" ? [] : protectedFieldsWithGenerated({ model, rule, generated: context.generatedFields({ model }) }).map((field) => field.name);\n const field = columns.find((name) => protectedColumns.includes(name));\n const conservative = rule.kind === \"appendOnly\" || rule.kind === \"fixed\" && (actions.onUpdate === \"Cascade\" || actions.onDelete === \"Cascade\");\n const unsafeUpdate = mutates(actions.onUpdate) && (conservative || field !== undefined);\n const unsafeDelete = (rule.kind === \"appendOnly\" || rule.kind === \"fixed\") && actions.onDelete === \"Cascade\" || (actions.onDelete === \"SetNull\" || actions.onDelete === \"SetDefault\") && (rule.kind === \"appendOnly\" || field !== undefined);\n if (!unsafeUpdate && !unsafeDelete) continue;\n throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: `MySQL relation ${model.name}.${relation.name} can bypass row rule ${rule.name} through a foreign-key action; declare safe Restrict/NoAction actions or change the protected fields`, meta: { feature: \"rowRuleReferentialActions\", dialect, model: model.name, relation: relation.name, rule: rule.kind, name: rule.name, onUpdate: actions.onUpdate, onDelete: actions.onDelete, action: unsafeUpdate ? \"onUpdate\" : \"onDelete\", ...(field === undefined ? {} : { field }) } });\n }\n }\n }\n}\n\n/** Lossless VibeORM .prisma attribute spelling, including resolved stems and tagged gates. */\nexport function rowRulePrismaAttribute(params: { rule: RowRuleIR }): string {\n const { rule } = params;\n const name = `name: ${encodePrismaString({ value: rule.name })}`;\n switch (rule.kind) {\n case \"appendOnly\": return `@@appendOnly(${name})`;\n case \"fixed\": return `@@fixed([${rule.columns.join(\", \")}], ${\"fromCreation\" in rule.when ? \"fromCreation: true\" : `onceSet: ${rule.when.onceSet}`}, ${name})`;\n case \"rowFixed\": return `@@rowFixed(except: [${rule.except.join(\", \")}], ${name})`;\n case \"frozen\": return `@@frozen(${\"create\" in rule.from ? \"fromCreation: true\" : `from: ${rule.from.field}`}, mutable: [${rule.mutable.join(\", \")}], ${name})`;\n }\n}\n",
|
|
21
21
|
"import type { Dialect } from \"./ir.ts\";\nimport { VibeError } from \"./errors.ts\";\n\n/** Physical namespace and name, never a search_path-dependent SQL string. */\nexport type QualifiedSqlName = {\n readonly namespace: string;\n readonly name: string;\n};\n\n/** Portable catalog identity. PostgreSQL object identifiers must not be persisted. */\nexport type SqlObjectIdentity =\n | { readonly kind: \"namespace\"; readonly name: string }\n | { readonly kind: \"table\" | \"view\" | \"sequence\" | \"postgresExtension\" | \"enum\"; readonly name: QualifiedSqlName }\n | { readonly kind: \"function\"; readonly name: QualifiedSqlName; readonly argumentTypes: readonly QualifiedSqlName[] }\n | { readonly kind: \"index\" | \"trigger\"; readonly table: QualifiedSqlName; readonly name: string }\n | { readonly kind: \"constraint\"; readonly table: QualifiedSqlName; readonly name: string; readonly constraintType: \"check\" | \"foreignKey\" | \"exclusion\" | \"unique\" | \"primaryKey\" }\n | { readonly kind: \"column\" | \"columnDefault\" | \"generatedColumn\"; readonly table: QualifiedSqlName; readonly column: string };\n\n/** Catalog facts are serialized, not executable verification callbacks. */\nexport type SqlObjectFacts = Readonly<Record<string, string | number | boolean | null | readonly string[]>>;\n\n/**\n * Fact-capture format. `catalog-v2` adds PostgreSQL definer owners and column\n * collations; a `catalog-v1` expectation never asserted those facts and is\n * compared without them. Immutable v1 sidecars are never rewritten.\n */\nexport type SqlObjectDefinitionFormat = \"catalog-v1\" | \"catalog-v2\";\n\n/** An independently authored expectation, or one deparsed from an independent reference. */\nexport type SqlObjectDefinition = {\n readonly identity: SqlObjectIdentity;\n readonly facts: SqlObjectFacts;\n readonly dependencies: readonly SqlObjectIdentity[];\n readonly format: SqlObjectDefinitionFormat;\n};\n\n/** Migration-only declaration. It contributes no generated runtime extension manifest. */\nexport type MigrationObjectIR = {\n readonly id: string;\n readonly dialect: Dialect;\n readonly identity: SqlObjectIdentity;\n readonly create: readonly string[];\n readonly drop: readonly string[];\n readonly dependsOn: readonly SqlObjectIdentity[];\n /** Absence preserves ownership but must be reported as inspection unavailable. */\n readonly expected?: SqlObjectDefinition;\n};\n\n/** Stable, unambiguous identifier also accepted by named removal authorization. */\nexport function sqlObjectKey(params: { identity: SqlObjectIdentity }): string {\n const object = params.identity;\n switch (object.kind) {\n case \"namespace\": return JSON.stringify([object.kind, object.name]);\n case \"table\": case \"view\": case \"sequence\": case \"postgresExtension\": case \"enum\":\n return JSON.stringify([object.kind, object.name.namespace, object.name.name]);\n case \"function\":\n return JSON.stringify([object.kind, object.name.namespace, object.name.name, object.argumentTypes.map((type) => [type.namespace, type.name])]);\n case \"index\": case \"trigger\":\n return JSON.stringify([object.kind, object.table.namespace, object.table.name, object.name]);\n case \"constraint\":\n return JSON.stringify([object.kind, object.table.namespace, object.table.name, object.name, object.constraintType]);\n case \"column\": case \"columnDefault\": case \"generatedColumn\":\n return JSON.stringify([object.kind, object.table.namespace, object.table.name, object.column]);\n }\n}\n\n/** Effective namespace of a database-level, standalone, or attached SQL object. */\nexport function sqlObjectNamespace(params: { identity: SqlObjectIdentity }): string {\n const identity = params.identity;\n if (identity.kind === \"namespace\") return identity.name;\n return \"table\" in identity ? identity.table.namespace : identity.name.namespace;\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction name(value: unknown): value is QualifiedSqlName {\n return record(value) && typeof value.namespace === \"string\" && value.namespace.length > 0\n && typeof value.name === \"string\" && value.name.length > 0;\n}\n\n/** Validate identities read from JSON or untyped config before any database access. */\nexport function isSqlObjectIdentity(value: unknown): value is SqlObjectIdentity {\n if (!record(value)) return false;\n switch (value.kind) {\n case \"namespace\": return typeof value.name === \"string\" && value.name.length > 0;\n case \"table\": case \"view\": case \"sequence\": case \"postgresExtension\": case \"enum\": return name(value.name);\n case \"function\": return name(value.name) && Array.isArray(value.argumentTypes) && value.argumentTypes.every(name);\n case \"index\": case \"trigger\": return name(value.table) && typeof value.name === \"string\" && value.name.length > 0;\n case \"constraint\": return name(value.table) && typeof value.name === \"string\" && value.name.length > 0\n && [\"check\", \"foreignKey\", \"exclusion\", \"unique\", \"primaryKey\"].includes(String(value.constraintType));\n case \"column\": case \"columnDefault\": case \"generatedColumn\": return name(value.table) && typeof value.column === \"string\" && value.column.length > 0;\n default: return false;\n }\n}\n\n/** Reject malformed expected catalog facts rather than degrading to presence-only verification. */\nexport function isSqlObjectDefinition(value: unknown): value is SqlObjectDefinition {\n return record(value) && (value.format === \"catalog-v1\" || value.format === \"catalog-v2\") && isSqlObjectIdentity(value.identity)\n && record(value.facts) && Object.keys(value.facts).length > 0\n && Object.values(value.facts).every((fact) => fact === null || typeof fact === \"string\" || typeof fact === \"boolean\"\n || (typeof fact === \"number\" && Number.isFinite(fact)) || (Array.isArray(fact) && fact.every((entry) => typeof entry === \"string\")))\n && Array.isArray(value.dependencies) && value.dependencies.every(isSqlObjectIdentity);\n}\n\ntype DeclarationIssue = { readonly path: string; readonly expected: string | readonly string[] };\n\nfunction qualifiedNameIssue(params: { value: unknown; path: string }): DeclarationIssue {\n if (!record(params.value)) return { path: params.path, expected: \"qualified SQL name { namespace, name }\" };\n const member = typeof params.value.namespace !== \"string\" || params.value.namespace.length === 0 ? \"namespace\" : \"name\";\n return { path: `${params.path}.${member}`, expected: \"non-empty string\" };\n}\n\nfunction identityIssue(params: { value: unknown; path: string }): DeclarationIssue {\n const { value, path } = params;\n if (!record(value)) return { path, expected: \"SQL object identity\" };\n switch (value.kind) {\n case \"namespace\": return { path: `${path}.name`, expected: \"non-empty namespace string\" };\n case \"table\": case \"view\": case \"sequence\": case \"postgresExtension\": case \"enum\":\n return qualifiedNameIssue({ value: value.name, path: `${path}.name` });\n case \"function\": {\n if (!name(value.name)) return qualifiedNameIssue({ value: value.name, path: `${path}.name` });\n if (!Array.isArray(value.argumentTypes)) return { path: `${path}.argumentTypes`, expected: \"array of qualified SQL type names\" };\n const index = value.argumentTypes.findIndex((entry: unknown) => !name(entry));\n return qualifiedNameIssue({ value: value.argumentTypes[index], path: `${path}.argumentTypes[${index}]` });\n }\n case \"index\": case \"trigger\": case \"constraint\": case \"column\": case \"columnDefault\": case \"generatedColumn\": {\n if (!name(value.table)) return qualifiedNameIssue({ value: value.table, path: `${path}.table` });\n if (value.kind === \"column\" || value.kind === \"columnDefault\" || value.kind === \"generatedColumn\") return { path: `${path}.column`, expected: \"non-empty column name\" };\n if (typeof value.name !== \"string\" || value.name.length === 0) return { path: `${path}.name`, expected: \"non-empty object name\" };\n return { path: `${path}.constraintType`, expected: [\"check\", \"foreignKey\", \"exclusion\", \"unique\", \"primaryKey\"] };\n }\n default: return { path: `${path}.kind`, expected: [\"namespace\", \"table\", \"view\", \"sequence\", \"postgresExtension\", \"enum\", \"function\", \"index\", \"trigger\", \"constraint\", \"column\", \"columnDefault\", \"generatedColumn\"] };\n }\n}\n\nfunction definitionIssue(params: { value: unknown; path: string }): DeclarationIssue {\n const { value, path } = params;\n if (!record(value)) return { path, expected: \"independent SQL object definition\" };\n if (value.format !== \"catalog-v1\" && value.format !== \"catalog-v2\") return { path: `${path}.format`, expected: [\"catalog-v1\", \"catalog-v2\"] };\n if (!isSqlObjectIdentity(value.identity)) return identityIssue({ value: value.identity, path: `${path}.identity` });\n if (!record(value.facts) || Object.keys(value.facts).length === 0) return { path: `${path}.facts`, expected: \"non-empty serializable catalog facts\" };\n for (const [key, fact] of Object.entries(value.facts)) {\n if (!(fact === null || typeof fact === \"string\" || typeof fact === \"boolean\" || typeof fact === \"number\" && Number.isFinite(fact) || Array.isArray(fact) && fact.every((entry: unknown) => typeof entry === \"string\"))) return { path: `${path}.facts.${key}`, expected: \"string, finite number, boolean, null or string array\" };\n }\n if (!Array.isArray(value.dependencies)) return { path: `${path}.dependencies`, expected: \"array of SQL object identities\" };\n const index = value.dependencies.findIndex((entry: unknown) => !isSqlObjectIdentity(entry));\n return identityIssue({ value: value.dependencies[index], path: `${path}.dependencies[${index}]` });\n}\n\nfunction invalidDeclaration(params: DeclarationIssue & { readonly id?: string }): never {\n const expected = typeof params.expected === \"string\" ? params.expected : params.expected.join(\", \");\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `Invalid migration-only object declaration at ${params.path}; expected ${expected}`,\n meta: { path: params.path, expected: params.expected, ...(params.id === undefined ? {} : { id: params.id }) },\n });\n}\n\n/** Runtime validation for serializable migration-only schema contributions. */\nexport function assertMigrationObjects(params: { objects: unknown }): asserts params is { objects: readonly MigrationObjectIR[] } {\n if (!Array.isArray(params.objects)) invalidDeclaration({ path: \"migrationObjects\", expected: \"array\" });\n const ids = new Set<string>();\n const owners = new Set<string>();\n for (const [index, value] of params.objects.entries()) {\n const object: unknown = value;\n const path = `migrationObjects[${index}]`;\n if (!record(object)) invalidDeclaration({ path, expected: \"object\" });\n if (typeof object.id !== \"string\" || object.id.length === 0) invalidDeclaration({ path: `${path}.id`, expected: \"non-empty string\" });\n const id = object.id;\n if (![\"postgres\", \"sqlite\", \"mysql\"].includes(String(object.dialect))) invalidDeclaration({ path: `${path}.dialect`, expected: [\"postgres\", \"sqlite\", \"mysql\"], id });\n const identity = object.identity;\n if (!isSqlObjectIdentity(identity)) invalidDeclaration({ ...identityIssue({ value: identity, path: `${path}.identity` }), id });\n for (const member of [\"create\", \"drop\"] as const) {\n const statements = object[member];\n if (!Array.isArray(statements)) invalidDeclaration({ path: `${path}.${member}`, expected: \"array of SQL strings\", id });\n const invalid = statements.findIndex((entry: unknown) => typeof entry !== \"string\");\n if (invalid !== -1) invalidDeclaration({ path: `${path}.${member}[${invalid}]`, expected: \"SQL string\", id });\n }\n if (!Array.isArray(object.dependsOn)) invalidDeclaration({ path: `${path}.dependsOn`, expected: \"array of SQL object identities\", id });\n for (const [dependencyIndex, dependency] of object.dependsOn.entries()) if (!isSqlObjectIdentity(dependency)) invalidDeclaration({ ...identityIssue({ value: dependency, path: `${path}.dependsOn[${dependencyIndex}]` }), id });\n if (object.expected !== undefined) {\n if (!isSqlObjectDefinition(object.expected)) invalidDeclaration({ ...definitionIssue({ value: object.expected, path: `${path}.expected` }), id });\n if (sqlObjectKey({ identity: object.expected.identity }) !== sqlObjectKey({ identity })) invalidDeclaration({ path: `${path}.expected.identity`, expected: \"the declaration's SQL object identity\", id });\n }\n const key = sqlObjectKey({ identity });\n if (ids.has(id) || owners.has(key)) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Duplicate migration object identity or id\", meta: { id, key, path: `${path}.${ids.has(id) ? \"id\" : \"identity\"}` } });\n ids.add(id);\n owners.add(key);\n }\n}\n",
|
|
22
22
|
"import { DIALECT_CAPABILITIES } from \"./capabilities.ts\";\nimport { VibeError, unsupportedCapability } from \"./errors.ts\";\nimport type { Dialect, SchemaIR } from \"./ir.ts\";\nimport { isExpressionIndex, indexKeyTerms } from \"./index-expressions.ts\";\nimport { isSqlObjectIdentity } from \"./migration-objects.ts\";\n\n/** Validate operator classes before comparison; physical catalogs may retain unsupported unique classes. */\nexport function assertIndexOperatorClasses(params: { schema: SchemaIR; dialect: Dialect; physical?: true }): void {\n for (const model of params.schema.models) for (const index of model.indexes) for (const term of indexKeyTerms({ index })) {\n if (term.kind !== \"field\") continue;\n const field = term.field;\n if (field.operatorClass === undefined) continue;\n if (isExpressionIndex({ index })) throw unsupportedCapability({ dialect: params.dialect, feature: \"expressionIndexOperatorClasses\" });\n if (!DIALECT_CAPABILITIES[params.dialect].indexOperatorClasses) throw unsupportedCapability({ dialect: params.dialect, feature: \"indexOperatorClasses\" });\n if (index.kind === \"unique\" && params.physical !== true) throw unsupportedCapability({ dialect: params.dialect, feature: \"uniqueIndexOperatorClasses\", hint: \"custom unique operator classes can change client selector equality\" });\n if (!isSqlObjectIdentity({ kind: \"table\", name: field.operatorClass })) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Index operator class must be a qualified SQL name { namespace, name }\", meta: { rule: \"index-operator-class-identity\", model: model.name, field: field.name } });\n }\n}\n",
|
|
23
23
|
"import { VibeError } from \"./errors.ts\";\nimport { enumStorageOf, isEnumType, providerToDialect } from \"./ir.ts\";\nimport type { DatabaseModuleOptions } from \"./database-module.ts\";\nimport type { SchemaIR } from \"./ir.ts\";\nimport { SQL_NAMESPACES, assertSqlNamespace, qualifiedSqlName } from \"./namespaces.ts\";\n\n/** Prepare one fixed package schema for authoring, generated clients and runtime manifests. */\nexport function prepareDatabaseModuleSchema(params: { schema: SchemaIR; module: DatabaseModuleOptions }): SchemaIR {\n const { schema, module } = params;\n const namespace = module.namespace;\n const dialect = providerToDialect({ provider: schema.datasource.provider });\n if (namespace !== undefined) assertSqlNamespace({ namespace, dialect, allowPublic: false });\n const expected = namespace ?? SQL_NAMESPACES.postgres;\n for (const entry of [...schema.models, ...schema.enums]) {\n if (entry.namespace === undefined) continue;\n assertSqlNamespace({ namespace: entry.namespace, dialect });\n if (qualifiedSqlName({ name: entry.dbName ?? entry.name, namespace: entry.namespace }).namespace !== expected) throw new VibeError({ code: \"VIBE_CONFIG\", message: \"Module schema placement differs from its immutable namespace; host configuration cannot remap it\", meta: { reason: \"module-placement-mismatch\", moduleId: module.id, name: entry.name } });\n }\n for (const model of schema.models) for (const field of model.fields) {\n if (!isEnumType(field.type) || field.type.namespace === undefined) continue;\n assertSqlNamespace({ namespace: field.type.namespace, dialect });\n if (field.type.namespace !== expected) throw new VibeError({ code: \"VIBE_CONFIG\", message: \"Module enum reference placement differs from its immutable namespace\", meta: { reason: \"module-placement-mismatch\", moduleId: module.id, model: model.name, field: field.name } });\n }\n // Do not inject namespace/default fields into legacy public artifact bytes.\n if (namespace === undefined) return schema;\n const nativeEnums = new Set(schema.enums.filter((entry) => enumStorageOf({ enumDef: entry }) === \"database\").map((entry) => entry.name));\n return {\n ...schema,\n models: schema.models.map((model) => ({ ...model, namespace, fields: model.fields.map((field) => {\n const type = field.type;\n return isEnumType(type) && nativeEnums.has(type.enum) ? { ...field, type: { ...type, namespace } } : field;\n }) })),\n enums: schema.enums.map((entry) => enumStorageOf({ enumDef: entry }) === \"database\" ? { ...entry, namespace } : entry),\n };\n}\n",
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"import { VibeError } from \"./errors.ts\";\nimport type { JsonSchemaRefIR } from \"./ir.ts\";\nimport { decodePrismaString } from \"./prisma-literal.ts\";\n\nconst EXPORT_NAME: RegExp = /^[$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*$/u;\nconst REFERENCE_ANNOTATION: RegExp = /@(schema|type)\\(\\s*([$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*)\\s+from\\s+(\"(?:[^\"\\\\\\r\\n]|\\\\.)*\")\\s*\\)/gu;\n\nfunction annotations(params: { documentation: string; kind: \"schema\" | \"type\" }): { readonly matches: readonly RegExpMatchArray[]; readonly count: number } {\n const matches = [...params.documentation.matchAll(REFERENCE_ANNOTATION)].filter((match) => match[1] === params.kind);\n const remaining = params.documentation.replace(REFERENCE_ANNOTATION, \"\");\n const malformed = remaining.match(params.kind === \"schema\" ? /@schema(?=\\s*\\(|\\s|$)/gu : /@type(?=\\s*\\(|\\s|$)/gu) ?? [];\n return { matches, count: matches.length + malformed.length };\n}\n\n/** Whether documentation still contains a schema annotation requiring normalization. */\nexport function hasJsonSchemaAnnotation(params: { documentation: string | undefined }): boolean {\n return annotations({ documentation: params.documentation ?? \"\", kind: \"schema\" }).count > 0;\n}\n\n/** Structural issue for a legacy assertion-only annotation; it remains documentation in IR. */\nexport function jsonTypeAnnotationIssue(params: { documentation: string | undefined }): string | undefined {\n const refs = annotations({ documentation: params.documentation ?? \"\", kind: \"type\" });\n if (refs.count === 0) return undefined;\n if (refs.count > 1) return \"A field may declare only one assertion-only JSON type\";\n const match = refs.matches[0];\n if (match === undefined) return 'Expected @type(Name from \"specifier\")';\n return jsonSchemaRefIssue({ value: { name: match[2], from: decodePrismaString({ raw: match[3] as string }) } });\n}\n\n/** Resolve the assertion annotation without turning it into a runtime binding. */\nexport function jsonTypeAnnotationRef(params: { documentation: string | undefined }): JsonSchemaRefIR | undefined {\n const issue = jsonTypeAnnotationIssue(params);\n if (issue !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: issue, meta: { issues: [{ rule: \"invalid-json-type-ref\", message: issue }] } });\n const match = annotations({ documentation: params.documentation ?? \"\", kind: \"type\" }).matches[0];\n return match === undefined ? undefined : assertJsonSchemaRef({ value: { name: match[2], from: decodePrismaString({ raw: match[3] as string }) } });\n}\n\n/** A reference must contain only serializable named-export and import-specifier data. */\nexport function jsonSchemaRefIssue(params: { value: unknown }): string | undefined {\n const { value } = params;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return \"JSON schema reference must be { name, from }; validators belong in the referenced export\";\n const keys = Reflect.ownKeys(value);\n if (keys.length !== 2 || !keys.includes(\"name\") || !keys.includes(\"from\")) return \"JSON schema reference accepts only name and from\";\n const name = Object.getOwnPropertyDescriptor(value, \"name\");\n const from = Object.getOwnPropertyDescriptor(value, \"from\");\n if (name?.enumerable !== true || !(\"value\" in name) || typeof name.value !== \"string\" || !EXPORT_NAME.test(name.value) || name.value === \"default\") return \"JSON schema name must be a valid named export, not default\";\n if (from?.enumerable !== true || !(\"value\" in from) || typeof from.value !== \"string\" || from.value.trim().length === 0 || /[\\u0000-\\u001f\\u007f]/u.test(from.value)) return \"JSON schema from must be a non-empty import specifier without control characters\";\n return undefined;\n}\n\n/** Validate and copy a reference; never retain a mutable authoring object or validator. */\nexport function assertJsonSchemaRef(params: { value: unknown }): JsonSchemaRefIR {\n const issue = jsonSchemaRefIssue(params);\n if (issue !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: issue, meta: { issues: [{ rule: \"invalid-json-schema-ref\", message: issue }] } });\n const value = params.value as JsonSchemaRefIR;\n return Object.freeze({ name: value.name, from: value.from });\n}\n\n/** Normalize Prisma/DSL annotations into dedicated IR metadata, retaining other documentation. */\nexport function normalizeJsonSchemaRef(params: { documentation?: string | undefined; reference?: unknown }): { readonly documentation?: string; readonly jsonSchema?: JsonSchemaRefIR } {\n const { documentation, reference } = params;\n const jsonType = jsonTypeAnnotationRef({ documentation });\n const refs = annotations({ documentation: documentation ?? \"\", kind: \"schema\" });\n let jsonSchema = reference === undefined ? undefined : assertJsonSchemaRef({ value: reference });\n let remaining = documentation;\n if (refs.count > 1 || refs.count > 0 && jsonSchema !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A field may declare only one JSON schema reference\", meta: { issues: [{ rule: \"duplicate-json-schema-ref\" }] } });\n if (refs.count === 1) {\n const match = refs.matches[0];\n if (match === undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: 'Expected @schema(Name from \"specifier\")', meta: { issues: [{ rule: \"invalid-json-schema-ref\" }] } });\n jsonSchema = assertJsonSchemaRef({ value: { name: match[2], from: decodePrismaString({ raw: match[3] as string }) } });\n remaining = documentation?.replace(match[0], \"\").trim();\n if (remaining === \"\") remaining = undefined;\n }\n if (jsonSchema !== undefined && jsonType !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"JSON schema validation and assertion-only @type cannot be combined on one field\", meta: { issues: [{ rule: \"conflicting-json-schema-ref\" }] } });\n return { ...(remaining === undefined ? {} : { documentation: remaining }), ...(jsonSchema === undefined ? {} : { jsonSchema }) };\n}\n",
|
|
30
30
|
"import { VibeError } from \"./errors.ts\";\nimport type { ValidatorRefIR } from \"./ir.ts\";\nimport { decodePrismaString } from \"./prisma-literal.ts\";\n\nconst EXPORT_NAME: RegExp = /^[$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*$/u;\n// An annotation is a documentation line of its own that begins with `@validate(`\n// (whitespace before the parenthesis still counts, and refuses as malformed).\n// `@validate` anywhere else, such as prose or an e-mail address, is documentation.\nconst ANNOTATION_START: RegExp = /^@validate\\s*\\(/u;\nconst ANNOTATION_LINE: RegExp = /^@validate\\(\\s*([$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*)\\s+from\\s+(\"(?:[^\"\\\\\\r\\n]|\\\\.)*\")\\s*\\)$/u;\n\nfunction annotations(params: { readonly documentation: string }): { readonly lines: readonly string[]; readonly indexes: readonly number[] } {\n const lines = params.documentation.split(\"\\n\");\n return { lines, indexes: lines.flatMap((line, index) => ANNOTATION_START.test(line.trim()) ? [index] : []) };\n}\n\n/** A validator reference contains only serializable named-export and import-specifier data. */\nexport function validatorRefIssue(params: { readonly value: unknown }): string | undefined {\n const { value } = params;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return \"Validator reference must be { name, from }; validators belong in the referenced export\";\n const keys = Reflect.ownKeys(value);\n if (keys.length !== 2 || !keys.includes(\"name\") || !keys.includes(\"from\")) return \"Validator reference accepts only name and from\";\n const name = Object.getOwnPropertyDescriptor(value, \"name\");\n const from = Object.getOwnPropertyDescriptor(value, \"from\");\n if (name?.enumerable !== true || !(\"value\" in name) || typeof name.value !== \"string\" || !EXPORT_NAME.test(name.value) || name.value === \"default\") return \"Validator name must be a valid named export, not default\";\n if (from?.enumerable !== true || !(\"value\" in from) || typeof from.value !== \"string\" || from.value.trim().length === 0 || /[\\u0000-\\u001f\\u007f]/u.test(from.value)) return \"Validator from must be a non-empty import specifier without control characters\";\n return undefined;\n}\n\n/** Validate, copy and freeze a reference without retaining its mutable authoring object. */\nexport function assertValidatorRef(params: { readonly value: unknown }): ValidatorRefIR {\n const issue = validatorRefIssue(params);\n if (issue !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: issue, meta: { issues: [{ rule: \"invalid-validator-ref\", message: issue }] } });\n const value = params.value as ValidatorRefIR;\n return Object.freeze({ name: value.name, from: value.from });\n}\n\n/** Whether documentation contains a validator annotation requiring normalization. */\nexport function hasValidatorAnnotation(params: { readonly documentation: string | undefined }): boolean {\n return annotations({ documentation: params.documentation ?? \"\" }).indexes.length > 0;\n}\n\n/** Move the validator annotation into dedicated metadata while preserving other documentation. */\nexport function normalizeValidatorRef(params: { readonly documentation?: string | undefined; readonly reference?: unknown }): { readonly documentation?: string; readonly validator?: ValidatorRefIR } {\n const { documentation, reference } = params;\n const refs = annotations({ documentation: documentation ?? \"\" });\n let validator = reference === undefined ? undefined : assertValidatorRef({ value: reference });\n let remaining = documentation;\n if (refs.indexes.length > 1 || refs.indexes.length > 0 && validator !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A field may declare only one validator reference\", meta: { issues: [{ rule: \"duplicate-validator-ref\" }] } });\n const index = refs.indexes[0];\n if (index !== undefined) {\n const match = ANNOTATION_LINE.exec((refs.lines[index] as string).trim());\n if (match === null) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: 'Expected a documentation line @validate(Name from \"specifier\")', meta: { issues: [{ rule: \"invalid-validator-ref\" }] } });\n validator = assertValidatorRef({ value: { name: match[1], from: decodePrismaString({ raw: match[2] as string }) } });\n // Blank the line, as the JSON reference normalizer does; other lines stay byte-identical.\n remaining = refs.lines.map((line, position) => position === index ? \"\" : line).join(\"\\n\").trim();\n if (remaining === \"\") remaining = undefined;\n }\n return { ...(remaining === undefined ? {} : { documentation: remaining }), ...(validator === undefined ? {} : { validator }) };\n}\n",
|
|
31
31
|
"/**\n * Implicit many-to-many join-table convention (Prisma-compatible).\n *\n * ONE shared rule for every consumer — runtime query building, migrate DDL,\n * introspection round-trip — per LEARNINGS: implicit-M2M conventions must never\n * be re-implemented per consumer.\n *\n * Convention (matches Prisma and v1):\n * - Relation key: the explicit relation name when both sides declare one,\n * else `${A}To${B}` with A, B the two model names sorted lexicographically.\n * - Table name: `_` + relation key (`_PostToTag`, `_tags`).\n * - Columns: `\"A\"` references the lexicographically-first model's primary key,\n * `\"B\"` the other.\n *\n * SELF relations are a degenerate case of that last rule and are REFUSED, not\n * supported: both sides carry the same model name, so the sort decides nothing\n * and both relation fields would own column `\"A\"` and read the join table in\n * the same direction. `validateSchemaIR` rejects the shape with\n * `implicit-self-many-to-many`, and the runtime relation planner carries a\n * backstop for IRs that never passed validation. This function still DERIVES a\n * self join table's name (`_XToX`) because introspection and the migration\n * differ have to recognise one that already exists in a database.\n */\n\nexport type ImplicitJoinTable = {\n /** Join table name, including the leading underscore. */\n readonly tableName: string;\n /** Model whose primary key column `\"A\"` references (sorts first). */\n readonly modelA: string;\n /** Model whose primary key column `\"B\"` references. */\n readonly modelB: string;\n /** Column names, fixed by the convention. */\n readonly columnA: \"A\";\n readonly columnB: \"B\";\n};\n\n/**\n * Resolve the join table for an implicit many-to-many relation between two\n * models. Argument order does not matter; the convention sorts internally.\n */\nexport function implicitJoinTable(params: {\n modelA: string;\n modelB: string;\n /** Explicit @relation name shared by both sides, when present. */\n relationName?: string;\n}): ImplicitJoinTable {\n const sorted = [params.modelA, params.modelB].sort();\n const first = sorted[0] as string;\n const second = sorted[1] as string;\n const key = params.relationName ?? `${first}To${second}`;\n return {\n tableName: `_${key}`,\n modelA: first,\n modelB: second,\n columnA: \"A\",\n columnB: \"B\",\n };\n}\n",
|
|
32
|
-
"/**\n * Structural validation of a SchemaIR.\n *\n * Shared by both schema sources (parser + dsl), so a schema that validates here\n * validates everywhere. Source-specific rules (e.g. Prisma AMBIGUOUS_RELATION\n * candidate detection) live in the source packages and land in P1.\n */\n\nimport type { ExclusionIR } from \"./exclusion.ts\";\nimport { scalarListDefault } from \"./default-values.ts\";\nimport { assertGeneratedColumns, validateGeneratedColumns } from \"./generated-columns.ts\";\nimport { hasJsonSchemaAnnotation, jsonSchemaRefIssue, jsonTypeAnnotationIssue, jsonTypeAnnotationRef } from \"./json-schema-ref.ts\";\nimport { hasValidatorAnnotation, validatorRefIssue } from \"./validator-ref.ts\";\nimport { assertExtensionPlacement } from \"./extension.ts\";\nimport { assertNativeRlsAdmission } from \"./native-rls-admission.ts\";\nimport { assertIndexExpressions, indexKeyDefinitionKey, indexKeyTerms, isExpressionIndex, validateIndexExpressions } from \"./index-expressions.ts\";\nimport { assertIndexOperatorClasses } from \"./index-operator-classes.ts\";\n\nimport { ENUM_STORAGES, enumStorageOf, fieldTypeIdentity, isEnumType, providerToDialect } from \"./ir.ts\";\nimport type { Dialect, EnumIR, FieldIR, IndexIR, ModelIR, RelationIR, SchemaIR } from \"./ir.ts\";\nimport { implicitJoinTable } from \"./m2m.ts\";\nimport { IDENTIFIER_LIMITS, defaultForeignKeyName, defaultExpressionIndexName, defaultIndexName, defaultPrimaryKeyName, identifierLength, implicitJoinTableObjectNames } from \"./physical-names.ts\";\nimport { assertPredicateCapabilities, predicateCapabilityIssue, predicateFieldNames } from \"./predicate.ts\";\nimport type { PredicateBooleanUsage, PredicateExpression, PredicateIR, PredicateResultType, PredicateValue } from \"./predicate.ts\";\nimport { VibeError, unsupportedCapability } from \"./errors.ts\";\nimport { assertSqlNamespace, qualifiedSqlName, sqlNamespaceIssue } from \"./namespaces.ts\";\nimport { DIALECT_CAPABILITIES } from \"./capabilities.ts\";\nimport { timeOfDayType } from \"./time-of-day.ts\";\nimport { isCanonicalLocalDate, isLocalDateField, localDateCheckName } from \"./local-date.ts\";\nimport { RESERVED_CLIENT_NAMES, RESERVED_COLUMN_PREFIX } from \"./reserved.ts\";\nimport { resolveReferentialActions } from \"./referential-actions.ts\";\nimport { assertRowRuleCapability, assertRowRuleReferentialActions, createRowRuleValidationContext, rowRuleObjectNames, rowRuleTriggerName, rowRuleShapeIssue } from \"./row-rules.ts\";\nimport type { RowRuleValidationContext } from \"./row-rules.ts\";\n\n// ─── Issue shape ──────────────────────────────────────────────────\n\nexport type ValidationIssue = {\n /** Stable rule id, e.g. \"duplicate-model\", \"unknown-relation-target\". */\n readonly rule: string;\n readonly message: string;\n readonly model?: string;\n readonly field?: string;\n};\n\n// ─── Validation ───────────────────────────────────────────────────\n\n// ─── Reserved enum names ───────────────────────────────────────────\n\n/**\n * Enum names that would collide with a name the generated client already\n * exports, imports or uses internally (`index.js` / `index.d.ts` / `enums.js` / `enums.d.ts`).\n * An enum `X` emits `X` (constant + literal union), `XFilter`,\n * `XNullableFilter`, `XListFilter` and `XValidator`, so the shared scalar\n * filter prefixes are reserved too: an enum named `String` would redefine\n * `StringFilter`. Mirrored by a generator test against the emitted output so\n * this list cannot silently fall behind the emitters.\n */\nexport const RESERVED_ENUM_NAMES: readonly string[] = [\n // Module-level names and helpers of the generated entries.\n \"sql\", \"decode\", \"sqlProjection\", \"sqlModels\", \"createSqlModel\", \"SqlColumn\", \"SqlFragment\", \"ResultDecoder\", \"ResultReadDecoder\", \"SqlQueryResult\", \"ExtendedDateTime\",\n \"enumValidators\",\n \"enumValidator\",\n \"OmittedKeys\",\n \"ExactKeys\",\n \"PossibleKeys\",\n \"UncertainKeys\",\n \"HasSelectedField\",\n \"Provided\",\n \"SelectionMember\",\n \"SelectionValue\",\n \"BagKeys\",\n \"IncludedRelation\",\n \"IncludedCount\",\n \"ViewDelegateMap\",\n \"extensionManifest\",\n \"extensionMounts\",\n \"computedManifest\",\n // Globals referenced by generated values and declarations must not be shadowed.\n \"Object\", \"Set\", \"JSON\", \"Record\", \"Readonly\", \"ReadonlyArray\", \"Partial\",\n \"Omit\", \"NonNullable\", \"Promise\", \"PromiseLike\", \"Awaited\", \"TemplateStringsArray\",\n \"Date\", \"Uint8Array\",\n \"schema\",\n \"VibeClient\",\n \"VibeClientInstance\",\n \"VibeQueryPromise\", \"vibeQuery\", \"vibeTransaction\",\n \"VibeClientOptions\",\n \"VibeError\",\n \"VibeErrorCode\",\n \"BatchPayload\",\n \"UpsertManyPayload\",\n \"QueryMode\",\n \"RelationStrategy\",\n \"SortOrder\",\n \"SortOrderWithNulls\",\n \"KeysetToken\",\n \"KeysetPage\",\n \"KeysetOptions\",\n \"RowLockRequest\",\n \"GroupByTruncateUnit\",\n \"GroupByKeyName\",\n \"JsonValue\",\n \"InputJsonValue\",\n \"InputJsonArray\",\n \"InputJsonObject\",\n \"BoundJsonFilter\",\n \"BoundJsonFilterCommon\",\n \"BoundJsonNullableFilter\",\n \"VibeTelemetryOptions\",\n \"VibeTelemetryExporter\",\n \"VibeTelemetryOperationEvent\",\n \"VibeTelemetryStatementEvent\",\n \"VibeTelemetryHandle\",\n \"ScopedClientInstance\",\n \"ScopedModelsConfig\",\n \"ScopedNestedMode\",\n // EPIC 6 — the transaction and read-only client surfaces.\n \"VibeTransactionClientInstance\",\n \"ScopedTransactionClientInstance\",\n \"ReadOnlyClientInstance\",\n \"ViewClient\",\n \"ViewDefinitionInput\",\n \"ViewRow\",\n // Names the generated entries import.\n \"createClient\",\n \"DatabaseAdapter\",\n \"DbNow\",\n \"ClientContext\",\n \"QueryOperation\",\n \"QueryEvent\",\n \"QueryObserver\",\n \"QueryObserverFailure\",\n \"Skip\",\n \"TransactionOptions\",\n \"CallbackTransactionOptions\",\n // The object form of `$queryRawUnsafe` / `$executeRawUnsafe` (raw-path statement names).\n \"RawStatement\",\n \"AdvisoryLockOptions\",\n \"StatementDiagnosticsOptions\",\n \"SchemaIR\",\n \"VibeExtension\",\n \"ComputedConfig\",\n \"WriteValidators\",\n // Scalar filter / update-operation prefixes.\n \"String\",\n \"Bool\",\n \"Int\",\n \"BigInt\",\n \"Float\",\n \"Decimal\",\n \"DateTime\",\n \"Json\",\n \"Bytes\",\n ...[\"String\", \"Bool\", \"Int\", \"BigInt\", \"Float\", \"Decimal\", \"DateTime\", \"Json\", \"Bytes\"].flatMap((prefix) =>\n [\"Filter\", \"NullableFilter\", \"ListFilter\"].map((suffix) => `${prefix}${suffix}`),\n ),\n ...[\"Int\", \"Float\", \"BigInt\", \"Decimal\"].flatMap((prefix) =>\n [`${prefix}FieldUpdateOperationsInput`, `Nullable${prefix}FieldUpdateOperationsInput`],\n ),\n];\n\n// Reserve complete generated type families, including private payload helpers.\n// The generator's namespace mirror feeds EVERY emitted name back through this\n// validation; it must not exclude enum/model-prefixed or unexported names.\nconst GENERATED_TYPE_NAMES: {\n readonly enumSuffixes: readonly string[];\n readonly modelSuffixes: readonly string[];\n readonly nestedPrefixes: readonly string[];\n} = {\n enumSuffixes: [\"\", \"Filter\", \"NullableFilter\", \"ListFilter\", \"Validator\"],\n modelSuffixes: [\n \"\", \"ScalarFieldEnum\", \"SelectableFieldEnum\", \"Relations\", \"CountSelect\", \"Select\", \"Include\", \"OmitInput\", \"Args\",\n \"ListRelationFilter\", \"RelationFilter\", \"WhereInput\", \"WhereUniqueInput\", \"OrderByInput\",\n // EPIC A — the key-list filter's row type (`where: { IN: readonly <Model>KeyRow[] }`).\n \"KeyRow\",\n \"ScalarOrderByInput\", \"RelationOrderByInput\", \"RelationFindManyArgs\",\n \"CreateInput\", \"UncheckedCreateInput\", \"CreateManyInput\", \"UpdateInput\", \"UncheckedUpdateInput\", \"UpdateManyInput\",\n \"CountAggregateInput\", \"AvgAggregateInput\", \"SumAggregateInput\", \"MinAggregateInput\", \"MaxAggregateInput\",\n \"CountAggregateHavingInput\", \"AvgAggregateHavingInput\", \"SumAggregateHavingInput\", \"MinAggregateHavingInput\", \"MaxAggregateHavingInput\",\n \"CountAggregateOrderByInput\", \"AvgAggregateOrderByInput\", \"SumAggregateOrderByInput\", \"MinAggregateOrderByInput\", \"MaxAggregateOrderByInput\",\n \"HavingInput\", \"GroupByOrderByInput\", \"GroupByTruncatedKey\",\n \"FindManyArgs\", \"FindPageArgs\", \"FindFirstArgs\", \"FindUniqueArgs\", \"CreateArgs\", \"ConflictTarget\", \"CreateOnConflictInput\",\n \"CreateOrSkipArgs\", \"CreateManyArgs\", \"CreateManyAndReturnArgs\", \"UpdateArgs\", \"UpdateManyArgs\",\n // EPIC 2 — conditional update + updateManyAndReturn derived names.\n \"UpdateWhereInput\", \"UpdateManyAndReturnArgs\", \"UpsertArgs\",\n // EPIC 10 — batched upsert.\n \"UpsertManyArgs\",\n \"DeleteArgs\", \"DeleteManyArgs\", \"CountArgs\", \"AggregateArgs\", \"GroupByArgs\", \"OmitBase\", \"CountResult\", \"CountPayload\",\n \"AggregateValues\", \"AggregateSelection\", \"CountOutput\",\n \"RelationPayload\", \"ResolvedSelection\", \"IncludePayload\", \"GetPayload\", \"AggregateResult\", \"GroupByResult\", \"Delegate\",\n \"ViewFields\", \"ViewSelect\", \"ViewInclude\", \"ViewNestedArgs\", \"ViewFindManyArgs\", \"ViewFindUniqueArgs\",\n \"ViewScalars\", \"ViewSelectScalars\", \"ViewReveal\", \"ViewRelationResult\", \"ViewIncludeResult\", \"ViewResult\", \"ViewDelegate\",\n // EPIC 6 — the read-only delegate is a SUFFIX form so this mirror covers it.\n \"ReadOnlyDelegate\",\n ],\n nestedPrefixes: [\n \"Create\", \"UncheckedCreate\", \"Update\", \"UncheckedUpdate\", \"ConnectOrCreate\",\n \"CreateNestedMany\", \"UpdateNestedMany\", \"CreateNestedOne\", \"UpdateNestedOne\",\n \"UpdateWithWhereUnique\", \"UpdateManyWithWhere\", \"UpsertWithWhereUnique\",\n ],\n};\n\nconst INVALID_BINDING_NAMES: ReadonlySet<string> = new Set([\n \"await\", \"break\", \"case\", \"catch\", \"class\", \"const\", \"continue\", \"debugger\", \"default\", \"delete\",\n \"do\", \"else\", \"enum\", \"export\", \"extends\", \"false\", \"finally\", \"for\", \"function\", \"if\", \"import\",\n \"in\", \"instanceof\", \"new\", \"null\", \"return\", \"super\", \"switch\", \"this\", \"throw\", \"true\", \"try\",\n \"typeof\", \"var\", \"void\", \"while\", \"with\", \"yield\", \"implements\", \"interface\", \"let\", \"package\",\n \"private\", \"protected\", \"public\", \"static\", \"arguments\", \"eval\",\n \"any\", \"unknown\", \"never\", \"number\", \"bigint\", \"boolean\", \"string\", \"symbol\", \"object\", \"undefined\",\n]);\n\nfunction validateGeneratedNames(params: { schema: SchemaIR; issues: ValidationIssue[] }): void {\n const { schema, issues } = params;\n const owners = new Map(RESERVED_ENUM_NAMES.map((name) => [name, \"generated client\"]));\n if (schema.rls !== undefined) {\n owners.set(\"RlsContext\", \"native RLS client\");\n owners.set(\"BoundVibeClientInstance\", \"native RLS client\");\n owners.set(\"BoundVibeTransactionClientInstance\", \"native RLS client\");\n owners.set(\"OperatorVibeClientInstance\", \"native RLS client\");\n owners.set(\"OperatorVibeTransactionClientInstance\", \"native RLS client\");\n }\n // The handle type `$withPolicy` / `$bypassPolicy` return, emitted beside @@policy only.\n if (schema.models.some((model) => model.policy !== undefined)) owners.set(\"PolicyClientInstance\", \"policy client\");\n // The generator emits the local-date filters only beside a local-date field,\n // so a schema without one keeps its existing `LocalDate*` names.\n if (schema.models.some((model) => model.fields.some((field) => isLocalDateField({ field })))) {\n for (const name of [\"LocalDate\", \"LocalDateFilter\", \"LocalDateNullableFilter\"]) owners.set(name, \"local-date filters\");\n }\n const register = (params: { name: string; owner: string }): void => {\n if (!/^[$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*$/u.test(params.name) || INVALID_BINDING_NAMES.has(params.name)) {\n issues.push({ rule: \"invalid-generated-identifier\", message: `Generated name \"${params.name}\" from ${params.owner} is not a legal TypeScript identifier` });\n }\n const previous = owners.get(params.name);\n if (previous !== undefined && previous !== params.owner) {\n issues.push({ rule: \"generated-name-collision\", message: `Generated name \"${params.name}\" from ${params.owner} conflicts with ${previous}` });\n } else {\n owners.set(params.name, params.owner);\n }\n };\n const aliases = new Map<string, string>();\n for (const model of schema.models) {\n const clientName = model.name.charAt(0).toLowerCase() + model.name.slice(1);\n for (const alias of new Set([model.name, clientName])) {\n const previous = aliases.get(alias);\n if (previous !== undefined && previous !== model.name) {\n issues.push({ rule: \"model-client-alias-collision\", message: `Model \"${model.name}\" alias \"${alias}\" conflicts with model \"${previous}\"`, model: model.name });\n }\n aliases.set(alias, model.name);\n }\n if (RESERVED_CLIENT_NAMES.includes(clientName)) {\n issues.push({ rule: \"reserved-client-name\", message: `Model \"${model.name}\" conflicts with client member \"${clientName}\"`, model: model.name });\n }\n const owner = `model \"${model.name}\"`;\n for (const suffix of GENERATED_TYPE_NAMES.modelSuffixes) register({ name: `${model.name}${suffix}`, owner });\n const withouts = [\"\", ...model.relations.map((relation) => `Without${relation.name.charAt(0).toUpperCase()}${relation.name.slice(1)}`)];\n for (const without of withouts) {\n for (const prefix of GENERATED_TYPE_NAMES.nestedPrefixes) register({ name: `${model.name}${prefix}${without}Input`, owner });\n }\n }\n for (const declared of schema.enums) {\n for (const suffix of GENERATED_TYPE_NAMES.enumSuffixes) register({ name: `${declared.name}${suffix}`, owner: `enum \"${declared.name}\"` });\n }\n}\n\ntype ForeignKeyKeyLookup = {\n readonly distinct: ReadonlySet<string>;\n readonly repeated: readonly (readonly string[])[];\n};\n\ntype ValidationLookups = {\n readonly fieldsByModel: ReadonlyMap<ModelIR, ReadonlyMap<string, FieldIR>>;\n readonly partialKeys: Map<ModelIR, ForeignKeyKeyLookup>;\n readonly totalKeys: Map<ModelIR, ForeignKeyKeyLookup>;\n independentTables?: ReadonlySet<string>;\n};\n\nfunction foreignKeyKeys(params: { keys: readonly (readonly string[])[] }): ForeignKeyKeyLookup {\n const distinct = new Set<string>();\n const repeated: (readonly string[])[] = [];\n for (const fields of params.keys) {\n if (new Set(fields).size === fields.length) distinct.add(JSON.stringify([...fields].sort()));\n else repeated.push(fields);\n }\n return { distinct, repeated };\n}\n\nfunction matchesForeignKey(params: { keys: ForeignKeyKeyLookup; references: readonly string[] }): boolean {\n if (params.keys.distinct.has(JSON.stringify([...params.references].sort()))) return true;\n // Preserve the existing subset test for malformed repeated-column keys too.\n return params.keys.repeated.some((fields) => fields.length === params.references.length && fields.every((name) => params.references.includes(name)));\n}\n\nfunction referencesPartialOnly(params: { target: ModelIR; references: readonly string[]; schema: SchemaIR; lookups: ValidationLookups }): boolean {\n const { target, references, schema, lookups } = params;\n let partial = lookups.partialKeys.get(target);\n if (partial === undefined) {\n partial = foreignKeyKeys({ keys: target.indexes.filter((index) => index.kind === \"unique\" && !isExpressionIndex({ index }) && (index.where !== undefined || index.wherePredicate !== undefined)).map((index) => index.fields.map((field) => field.name)) });\n lookups.partialKeys.set(target, partial);\n }\n if (partial.distinct.size === 0 && partial.repeated.length === 0) return false;\n if (!matchesForeignKey({ keys: partial, references })) return false;\n let total = lookups.totalKeys.get(target);\n if (total === undefined) {\n total = foreignKeyKeys({ keys: [\n ...target.fields.filter((field) => field.isId || field.isUnique).map((field) => [field.name]),\n ...(target.primaryKey === undefined ? [] : [target.primaryKey.fields]),\n ...target.indexes.filter((index) => index.kind === \"unique\" && !isExpressionIndex({ index }) && index.where === undefined && index.wherePredicate === undefined).map((index) => index.fields.map((field) => field.name)),\n ] });\n lookups.totalKeys.set(target, total);\n }\n if (matchesForeignKey({ keys: total, references })) return false;\n if (lookups.independentTables === undefined) {\n const tables = new Set<string>();\n for (const object of schema.migrationObjects ?? []) {\n const identity = object.identity;\n if (identity.kind === \"index\" || identity.kind === \"constraint\" && (identity.constraintType === \"unique\" || identity.constraintType === \"primaryKey\")) {\n tables.add(JSON.stringify([identity.table.namespace, identity.table.name]));\n }\n }\n lookups.independentTables = tables;\n }\n const placement = qualifiedSqlName({ name: target.dbName ?? target.name, namespace: target.namespace });\n return !lookups.independentTables.has(JSON.stringify([placement.namespace, placement.name]));\n}\n\n/** Validate a SchemaIR structurally; returns all issues found (empty = valid). */\nexport function validateSchemaIR(params: { schema: SchemaIR }): ValidationIssue[] {\n return validateSchemaWithRowRules({ ...params, rowRules: createRowRuleValidationContext(params) });\n}\n\nfunction validateSchemaWithRowRules(params: { schema: SchemaIR; rowRules: RowRuleValidationContext }): ValidationIssue[] {\n const { schema, rowRules } = params;\n const issues: ValidationIssue[] = [...validateGeneratedColumns({ schema })];\n\n const expressionIssues = validateIndexExpressions({ schema, dialect: providerToDialect({ provider: schema.datasource.provider }) });\n if (expressionIssues.length > 0) return [...issues, ...expressionIssues];\n\n for (const model of schema.models) issues.push(...rowRules.validate({ model }));\n\n for (const entry of [...schema.models, ...schema.enums]) {\n if (entry.namespace === undefined) continue;\n const issue = sqlNamespaceIssue({ namespace: entry.namespace });\n if (issue !== undefined) issues.push({ rule: \"namespace\", message: issue });\n if (providerToDialect({ provider: schema.datasource.provider }) !== \"postgres\") issues.push({ rule: \"namespace-dialect\", message: \"Explicit fixed namespaces require PostgreSQL or PGlite\" });\n }\n\n const modelByName = new Map<string, ModelIR>();\n for (const model of schema.models) {\n if (modelByName.has(model.name)) {\n issues.push({\n rule: \"duplicate-model\",\n message: `Duplicate model name \"${model.name}\"`,\n model: model.name,\n });\n } else {\n modelByName.set(model.name, model);\n }\n }\n\n const enumByName = new Map<string, EnumIR>();\n for (const enumDef of schema.enums) {\n if (enumByName.has(enumDef.name)) {\n issues.push({\n rule: \"duplicate-enum\",\n message: `Duplicate enum name \"${enumDef.name}\"`,\n });\n } else {\n enumByName.set(enumDef.name, enumDef);\n }\n if (enumDef.values.length === 0) {\n issues.push({\n rule: \"empty-enum\",\n message: `Enum \"${enumDef.name}\" has no values`,\n });\n }\n // Members are a set: the generated constant object and the membership\n // lookup both key on the value, so a repeat would silently collapse.\n const seenValues = new Set<string>();\n for (const value of enumDef.values) {\n if (seenValues.has(value)) {\n issues.push({\n rule: \"duplicate-enum-value\",\n message: `Enum \"${enumDef.name}\" lists value \"${value}\" more than once`,\n });\n }\n seenValues.add(value);\n }\n if (enumDef.storage !== undefined && !ENUM_STORAGES.includes(enumDef.storage)) {\n issues.push({\n rule: \"invalid-enum-storage\",\n message: `Enum \"${enumDef.name}\" has storage ${JSON.stringify(enumDef.storage)} — expected one of ${ENUM_STORAGES.join(\", \")}`,\n });\n }\n // Generated-name collisions: the client module exports one value AND one\n // type per enum, so an enum cannot share a model's name or a name the\n // module already exports/imports.\n if (modelByName.has(enumDef.name)) {\n issues.push({\n rule: \"enum-model-name-collision\",\n message: `Enum \"${enumDef.name}\" shares its name with a model — the generated client exports one type per name`,\n model: enumDef.name,\n });\n }\n if (RESERVED_ENUM_NAMES.includes(enumDef.name)) {\n issues.push({\n rule: \"enum-reserved-name\",\n message: `Enum \"${enumDef.name}\" collides with a name the generated client already exports or imports`,\n });\n }\n }\n\n const fieldsByModel = new Map<ModelIR, ReadonlyMap<string, FieldIR>>();\n for (const model of schema.models) {\n const fields = new Map<string, FieldIR>();\n for (const field of model.fields) if (!fields.has(field.name)) fields.set(field.name, field);\n fieldsByModel.set(model, fields);\n }\n const lookups: ValidationLookups = { fieldsByModel, partialKeys: new Map(), totalKeys: new Map() };\n const postgres = providerToDialect({ provider: schema.datasource.provider }) === \"postgres\";\n for (const model of schema.models) {\n validateModel({ model, modelByName, enumByName, issues, schema, lookups, postgres });\n }\n\n // Implicit SELF many-to-many: refused on every dialect, at the earliest\n // knowable moment (validation is shared by the parser, the DSL, generate,\n // db push and migrate, so no authoring path can slip past it).\n //\n // `implicitJoinTable` gives join column \"A\" to the lexicographically first\n // MODEL name. A self relation has one name on both sides, so both relation\n // fields claim \"A\" and traverse the join table in the same direction: the\n // inverse field returns the forward edge set. Rows already written through\n // either field carry that single orientation, so no corrected rule can\n // re-read them without silently changing what deployed data means. VibeORM\n // refuses the shape instead of answering wrongly; a directed self relation\n // is modelled with an explicit junction model.\n //\n // Detection is the ONE shared structural rule and never `relation.type`:\n // `db pull` represents a physical self join table as two unnamed `oneToMany`\n // list sides, and that shape has to refuse identically.\n for (const model of schema.models) {\n for (const relation of model.relations) {\n if (relation.targetModel !== model.name) continue;\n if (!isImplicitManyToManyRelation({ model, relation, models: schema.models })) continue;\n issues.push({\n rule: \"implicit-self-many-to-many\",\n message:\n `Relation \"${model.name}.${relation.name}\" is an implicit self many-to-many. Both sides of a self ` +\n `relation own the same join-table column, so this field and its inverse read the same rows. Replace ` +\n `it with an explicit junction model carrying one foreign key per direction, each under its own ` +\n `@relation name, and point \"${relation.name}\" at that model. Worked example, and the row copy for a ` +\n `join table that already exists: docs/queries.md, \"Directed self relations\".`,\n model: model.name,\n field: relation.name,\n });\n }\n }\n\n // Capability-gated index features, refused at validation — the earliest\n // knowable moment — instead of failing later at DDL time:\n // - partial predicates (where): postgres/pglite/sqlite only;\n // - UNIQUE NULLS NOT DISTINCT: postgres/pglite only (pg 15+), unique only.\n const provider = schema.datasource.provider;\n for (const model of schema.models) {\n for (const index of model.indexes) {\n if (index.where !== undefined && provider === \"mysql\") {\n issues.push({\n rule: \"partial-index-unsupported\",\n message: `Partial index (where) on \"${model.name}\" — mysql has no partial indexes; predicates are postgres/pglite/sqlite only`,\n model: model.name,\n });\n }\n if (index.nullsNotDistinct === true) {\n if (index.kind !== \"unique\") {\n issues.push({\n rule: \"nulls-not-distinct-non-unique\",\n message: `nullsNotDistinct on a non-unique index of \"${model.name}\" — the flag changes UNIQUE null semantics and means nothing elsewhere`,\n model: model.name,\n });\n }\n if (provider === \"sqlite\" || provider === \"mysql\") {\n issues.push({\n rule: \"nulls-not-distinct-unsupported\",\n message: `UNIQUE NULLS NOT DISTINCT on \"${model.name}\" — ${provider} treats NULLs as distinct and has no switch; the flag is postgres/pglite (15+) only`,\n model: model.name,\n });\n }\n }\n }\n }\n\n // `name:` on `@@unique` / `@@id` — the CLIENT selector name (the generated\n // `…WhereUniqueInput` property and the runtime where key). Everywhere it\n // cannot take effect it is refused loudly — never silently dropped (the\n // exact papercut this rule exists to prevent).\n for (const model of schema.models) {\n const fieldNames = fieldsByModel.get(model)!;\n const seenSelectorNames = new Map<string, string>();\n const addressable = (names: readonly string[]): boolean => names.every((name) => fieldNames.get(name)?.isUnsupported !== true);\n const checkSelectorName = (params: {\n clientName: string;\n fields: readonly string[];\n where?: string;\n isUnique: boolean;\n site: string;\n }): void => {\n const { clientName, fields, where, isUnique, site } = params;\n if (!isUnique) {\n issues.push({\n rule: \"client-name-non-unique\",\n message: `name: (\"${clientName}\") on a non-unique index of \"${model.name}\" — a client selector names a UNIQUE group; use map: for the index's database name`,\n model: model.name,\n });\n return;\n }\n if (where !== undefined) {\n issues.push({\n rule: \"client-name-partial-unique\",\n message: `name: (\"${clientName}\") on a partial unique of \"${model.name}\" — a partial unique cannot address a row and never joins WhereUniqueInput`,\n model: model.name,\n });\n return;\n }\n if (fields.length < 2) {\n issues.push({\n rule: \"client-name-single-field\",\n message: `name: (\"${clientName}\") on a single-field ${site} of \"${model.name}\" — the field itself is the selector; name: applies to compound groups only`,\n model: model.name,\n });\n return;\n }\n const tuple = JSON.stringify(fields);\n const previous = seenSelectorNames.get(clientName);\n if (fieldNames.has(clientName) || previous !== undefined && previous !== tuple) {\n issues.push({\n rule: \"client-name-collision\",\n message: `name: (\"${clientName}\") on \"${model.name}\" collides with a field or another unique selector — WhereUniqueInput keys must be unambiguous`,\n model: model.name,\n });\n return;\n }\n seenSelectorNames.set(clientName, tuple);\n };\n if (model.primaryKey !== undefined && (model.primaryKey.clientName !== undefined || model.primaryKey.fields.length > 1 && addressable(model.primaryKey.fields))) {\n checkSelectorName({\n clientName: model.primaryKey.clientName ?? model.primaryKey.fields.join(\"_\"),\n fields: model.primaryKey.fields,\n isUnique: true,\n site: \"@@id\",\n });\n }\n for (const index of model.indexes) {\n if (isExpressionIndex({ index })) continue;\n if (index.clientName === undefined && (index.kind !== \"unique\" || index.where !== undefined || index.fields.length < 2 || !addressable(index.fields.map((field) => field.name)))) continue;\n checkSelectorName({\n clientName: index.clientName ?? index.fields.map((field) => field.name).join(\"_\"),\n fields: index.fields.map((field) => field.name),\n ...(index.where === undefined ? {} : { where: index.where }),\n isUnique: index.kind === \"unique\",\n site: \"@@unique\",\n });\n }\n }\n\n validateIdentifierLengths({ schema, issues });\n validatePhysicalNameUniqueness({ schema, issues, modelByName, fieldsByModel, rowRules });\n validateGeneratedNames({ schema, issues });\n validateNativeRls({ schema, issues });\n return issues;\n}\n\n// ─── Physical name uniqueness ─────────────────────────────────────\n\n/**\n * Two schema objects must never resolve to ONE physical name where the\n * database keeps a single namespace (rule \"duplicate-physical-name\").\n *\n * Two models `@@map`ped to one table, two fields `@map`ped to one column, two\n * enums mapped to one type, or two indexes minting the same name used to pass\n * validation, generate and `db push` — producing a client that queries columns\n * that do not exist (one model permanently broken while every deploy step\n * reported success) or a push that dies at apply time.\n *\n * Namespaces, per dialect:\n * - relations (tables, views, implicit join tables): one per schema on every\n * dialect; on postgres a table also creates a row TYPE, so database-stored\n * enum types share it, and indexes are relations too (so are the indexes a\n * PK/unique constraint creates); on sqlite indexes share the schema namespace.\n * - mysql: index names are per table; FK and CHECK names are per database.\n * - columns: per table. postgres FK/CHECK/exclusion names: per table.\n */\nfunction validatePhysicalNameUniqueness(params: { schema: SchemaIR; issues: ValidationIssue[]; modelByName: ReadonlyMap<string, ModelIR>; fieldsByModel: ReadonlyMap<ModelIR, ReadonlyMap<string, FieldIR>>; rowRules: RowRuleValidationContext }): void {\n const { schema, issues, modelByName, fieldsByModel } = params;\n const dialect = providerToDialect({ provider: schema.datasource.provider });\n const owners = new Map<string, string>();\n let hasRowRuleClaims = false;\n /** Row-rule diagnostic names per table; a handwritten constraint must not share one. */\n const ruleDiagnostics = new Set<string>();\n const triggerNamespace = (table: string): string => dialect === \"postgres\" ? `trigger:${table}` : \"trigger\";\n const collisionName = (name: string): string => dialect === \"postgres\" ? name : dialect === \"sqlite\" ? name.replace(/[A-Z]/g, (character) => character.toLowerCase()) : name.toLowerCase();\n const diagnosticKey = (entry: { namespace: string; table: string; name: string }): string => JSON.stringify([entry.namespace, entry.table, collisionName(entry.name)]);\n /** Claim a name in a namespace; false (and one issue) when it is already taken. */\n const claim = (entry: { namespace: string; physicalNamespace?: string; name: string; what: string; owner: string; model?: string; field?: string; remedy?: string }): boolean => {\n const rowRuleScope = entry.namespace === \"trigger\" || entry.namespace.startsWith(\"row-rule-diagnostic:\");\n const key = JSON.stringify([entry.physicalNamespace ?? \"public\", entry.namespace, rowRuleScope ? collisionName(entry.name) : entry.name]);\n const previous = owners.get(key);\n if (previous === undefined) {\n owners.set(key, `${entry.what} of ${entry.owner}`);\n return true;\n }\n issues.push({\n rule: \"duplicate-physical-name\",\n message: `${entry.what} \"${entry.name}\" of ${entry.owner} collides with the ${previous} — both resolve to one physical ${entry.namespace === \"relation\" ? \"object\" : \"name\"}, and only one can exist${entry.remedy ?? (previous.includes(\"expression index\") ? \"; set an explicit map on the expression index to choose a distinct physical name\" : \"\")}`,\n ...(entry.model === undefined ? {} : { model: entry.model }),\n ...(entry.field === undefined ? {} : { field: entry.field }),\n });\n return false;\n };\n const indexNamespace = (table: string): string => (dialect === \"mysql\" ? `index:${table}` : \"relation\");\n const constraintNamespace = (table: string): string => (dialect === \"mysql\" ? \"constraint\" : `constraint:${table}`);\n\n for (const model of schema.models) {\n const table = model.dbName ?? model.name;\n const physicalNamespace = qualifiedSqlName({ name: table, namespace: model.namespace }).namespace;\n // A table collision is reported ONCE; the second model's columns and\n // constraints would only echo it.\n if (!claim({ namespace: \"relation\", physicalNamespace, name: table, what: model.isView ? \"view\" : \"table\", owner: `model \"${model.name}\"`, model: model.name })) continue;\n for (const fieldIR of model.fields) {\n claim({ namespace: `column:${table}`, physicalNamespace, name: fieldIR.dbName ?? fieldIR.name, what: \"column\", owner: `field \"${model.name}.${fieldIR.name}\"`, model: model.name, field: fieldIR.name });\n }\n if (model.isView) continue;\n const fields = fieldsByModel.get(model)!;\n const columnOf = (name: string): string => fields.get(name)?.dbName ?? name;\n // Index declarations that the migration normalizer folds into ONE object\n // (`@unique f` + `@@unique([f])`) are one name, not a collision; the key\n // mirrors the normalizer's comparison key.\n const seenIndexKeys = new Set<string>();\n const declarations: { readonly index: IndexIR; readonly site: string }[] = [\n ...model.indexes.map((index) => ({ index, site: index.kind === \"unique\" ? \"@@unique\" : \"@@index\" })),\n ...model.fields.filter((fieldIR) => fieldIR.isUnique).map((fieldIR) => ({ index: { kind: \"unique\", fields: [{ name: fieldIR.name }] } as IndexIR, site: `@unique on \"${fieldIR.name}\"` })),\n ];\n for (const { index, site } of declarations) {\n const unique = index.kind === \"unique\";\n const columns = index.fields.map((entry) => [columnOf(entry.name), entry.sort === \"desc\", entry.operatorClass === undefined ? null : [entry.operatorClass.namespace, entry.operatorClass.name]]);\n const key = isExpressionIndex({ index }) ? indexKeyDefinitionKey({ index, model }) : JSON.stringify([unique, index.nullsNotDistinct === true, unique ? \"btree\" : index.kind, columns, index.where?.trim() ?? \"\"]);\n if (seenIndexKeys.has(key)) continue;\n seenIndexKeys.add(key);\n const name = index.name ?? (isExpressionIndex({ index }) ? defaultExpressionIndexName({ table, model, index, dialect }) : defaultIndexName({ table, columns: index.fields.map((entry) => columnOf(entry.name)), unique, dialect }));\n claim({ namespace: indexNamespace(table), physicalNamespace, name, what: isExpressionIndex({ index }) ? unique ? \"unique expression index\" : \"expression index\" : unique ? \"unique index\" : \"index\", owner: `${site} on \"${model.name}\"`, model: model.name, ...(isExpressionIndex({ index }) ? { remedy: \"; set an explicit map on the expression index to choose a distinct physical name\" } : {}) });\n if (index.constraintName !== undefined) {\n claim({ namespace: constraintNamespace(table), physicalNamespace, name: index.constraintName, what: \"unique constraint\", owner: `${site} on \"${model.name}\"`, model: model.name });\n }\n }\n if (dialect === \"postgres\" && (model.primaryKey !== undefined || model.fields.some((fieldIR) => fieldIR.isId))) {\n const name = model.primaryKeyConstraintName ?? defaultPrimaryKeyName({ table, dialect });\n claim({ namespace: \"relation\", physicalNamespace, name, what: \"primary key\", owner: `model \"${model.name}\"`, model: model.name });\n claim({ namespace: constraintNamespace(table), physicalNamespace, name, what: \"primary key\", owner: `model \"${model.name}\"`, model: model.name });\n }\n for (const relation of model.relations) {\n if (relation.fields === undefined || relation.fields.length === 0) continue;\n const target = modelByName.get(relation.targetModel);\n if (target !== undefined && target.isView) continue;\n const name = relation.constraintName ?? defaultForeignKeyName({ table, columns: relation.fields.map((entry) => columnOf(entry)), dialect });\n claim({ namespace: constraintNamespace(table), physicalNamespace, name, what: \"foreign key\", owner: `relation \"${model.name}.${relation.name}\"`, model: model.name });\n }\n if (dialect === \"sqlite\") {\n for (const field of model.fields) {\n if (!isLocalDateField({ field })) continue;\n claim({ namespace: constraintNamespace(table), physicalNamespace, name: localDateCheckName({ table, column: field.dbName ?? field.name }), what: \"owned local-date CHECK\", owner: `field \"${model.name}.${field.name}\"`, model: model.name, field: field.name });\n }\n }\n for (const checkIR of model.checks ?? []) {\n claim({ namespace: constraintNamespace(table), physicalNamespace, name: checkIR.name, what: \"CHECK constraint\", owner: `model \"${model.name}\"`, model: model.name });\n }\n if (Array.isArray(model.rowRules)) for (const rule of model.rowRules) {\n if (rowRuleShapeIssue({ value: rule }) !== undefined) continue;\n hasRowRuleClaims = true;\n const pair = rowRuleObjectNames({ rule });\n const owner = `row rule \"${model.name}.${rule.name}\" (supply an explicit, distinct name stem)`;\n const ruleNamespace = dialect === \"sqlite\" ? \"main\" : physicalNamespace;\n if (dialect === \"postgres\") claim({ namespace: \"function:[]\", physicalNamespace, name: pair.functionName, what: \"row-rule function\", owner, model: model.name });\n const names = dialect === \"postgres\" ? [pair.triggerName] : (rule.kind === \"appendOnly\" ? [\"update\", \"delete\"] as const : [\"update\"] as const).map((event) => rowRuleTriggerName({ rule, event }));\n for (const name of names) {\n claim({ namespace: triggerNamespace(table), physicalNamespace: ruleNamespace, name, what: \"row-rule trigger\", owner, model: model.name });\n if (dialect === \"postgres\") claim({ namespace: constraintNamespace(table), physicalNamespace, name, what: \"row-rule diagnostic name\", owner, model: model.name });\n else {\n claim({ namespace: `row-rule-diagnostic:${table}`, physicalNamespace: ruleNamespace, name, what: \"row-rule diagnostic name\", owner, model: model.name });\n const constraints = [\n ...(model.checks ?? []).map((check) => check.name),\n ...model.indexes.flatMap((index) => index.constraintName === undefined ? [] : [index.constraintName]),\n ...model.relations.filter((relation) => (relation.fields?.length ?? 0) > 0).map((relation) => relation.constraintName ?? defaultForeignKeyName({ table, columns: relation.fields!.map(columnOf), dialect })),\n ...(dialect === \"sqlite\" ? model.fields.filter((field) => isLocalDateField({ field })).map((field) => localDateCheckName({ table, column: field.dbName ?? field.name })) : []),\n ];\n for (const constraint of constraints) if (collisionName(constraint) === collisionName(name)) claim({ namespace: `row-rule-diagnostic:${table}`, physicalNamespace: ruleNamespace, name: constraint, what: \"constraint diagnostic name\", owner: `model \"${model.name}\"`, model: model.name });\n }\n ruleDiagnostics.add(diagnosticKey({ namespace: ruleNamespace, table, name }));\n }\n }\n for (const exclusion of model.exclusions ?? []) {\n claim({ namespace: constraintNamespace(table), physicalNamespace, name: exclusion.name, what: \"exclusion constraint\", owner: `model \"${model.name}\"`, model: model.name });\n if (dialect === \"postgres\") claim({ namespace: \"relation\", physicalNamespace, name: exclusion.name, what: \"exclusion constraint\", owner: `model \"${model.name}\"`, model: model.name });\n }\n }\n for (const object of hasRowRuleClaims ? params.rowRules.objects() : []) {\n const identity = object.identity;\n if (dialect === \"postgres\" && identity.kind === \"function\") claim({ namespace: `function:${JSON.stringify(identity.argumentTypes.map((type) => [type.namespace, type.name]))}`, physicalNamespace: identity.name.namespace, name: identity.name.name, what: \"migration function\", owner: object.id });\n if (identity.kind === \"trigger\") {\n if (dialect === \"mysql\" && /[^\\x00-\\x7F]/.test(identity.name)) issues.push({ rule: \"row-rule-name-collation\", message: `MySQL migration trigger ${identity.name} cannot be qualified against declared row rules without engine trigger-name collation evidence; use an ASCII name` });\n claim({ namespace: triggerNamespace(identity.table.name), physicalNamespace: identity.table.namespace, name: identity.name, what: \"migration trigger\", owner: object.id });\n }\n // `meta.constraint` must name one rule: a handwritten constraint cannot reuse its table's diagnostic name.\n if (identity.kind === \"constraint\" && ruleDiagnostics.has(diagnosticKey({ namespace: identity.table.namespace, table: identity.table.name, name: identity.name }))) claim({ namespace: dialect === \"postgres\" ? constraintNamespace(identity.table.name) : `row-rule-diagnostic:${identity.table.name}`, physicalNamespace: identity.table.namespace, name: identity.name, what: \"migration constraint\", owner: object.id });\n }\n if (dialect === \"postgres\") {\n for (const enumDef of schema.enums) {\n if (enumStorageOf({ enumDef }) !== \"database\") continue;\n claim({ namespace: \"relation\", physicalNamespace: qualifiedSqlName({ name: enumDef.dbName ?? enumDef.name, namespace: enumDef.namespace }).namespace, name: enumDef.dbName ?? enumDef.name, what: \"enum type\", owner: `enum \"${enumDef.name}\"` });\n }\n }\n const seenJoinTables = new Set<string>();\n for (const model of schema.models) {\n for (const relation of model.relations) {\n if (relation.targetModel === model.name) continue;\n if (!isImplicitManyToManyRelation({ model, relation, models: schema.models })) continue;\n const target = modelByName.get(relation.targetModel);\n const physicalNamespace = model.namespace ?? \"public\";\n if ((target?.namespace ?? \"public\") !== physicalNamespace) {\n issues.push({ rule: \"implicit-join-namespace\", message: \"Implicit many-to-many endpoints must share one fixed namespace\", model: model.name, field: relation.name });\n continue;\n }\n const join = implicitJoinTable({ modelA: model.name, modelB: relation.targetModel, ...(relation.relationName === undefined ? {} : { relationName: relation.relationName }) });\n const joinKey = JSON.stringify([physicalNamespace, join.tableName]);\n if (seenJoinTables.has(joinKey)) continue;\n seenJoinTables.add(joinKey);\n const owner = `implicit relation \"${model.name}.${relation.name}\"`;\n claim({ namespace: \"relation\", physicalNamespace, name: join.tableName, what: \"join table\", owner, model: model.name });\n const derived = implicitJoinTableObjectNames({ table: join.tableName });\n claim({ namespace: indexNamespace(join.tableName), physicalNamespace, name: derived.uniqueIndex, what: \"unique index\", owner, model: model.name });\n claim({ namespace: indexNamespace(join.tableName), physicalNamespace, name: derived.indexB, what: \"index\", owner, model: model.name });\n claim({ namespace: constraintNamespace(join.tableName), physicalNamespace, name: derived.foreignKeyA, what: \"foreign key\", owner, model: model.name });\n claim({ namespace: constraintNamespace(join.tableName), physicalNamespace, name: derived.foreignKeyB, what: \"foreign key\", owner, model: model.name });\n }\n }\n}\n\n// ─── Physical identifier length ───────────────────────────────────\n\n/**\n * Per-dialect identifier length gates, refused at validation — the earliest\n * knowable moment — instead of failing (or worse, \"succeeding\") at DDL time.\n *\n * - postgres/pglite: identifiers past 63 BYTES (NAMEDATALEN - 1) are silently\n * TRUNCATED with a NOTICE. The created object then never carries the\n * declared name, so the differ re-plans the same drop/create forever and the\n * migration never converges — with a partial unique index, the invariant it\n * enforces silently disappears in that window.\n * - mysql: identifiers past 64 CHARACTERS are a hard server error\n * (ER_TOO_LONG_IDENT) at execute time; refusing here is just earlier.\n * - sqlite: no meaningful limit; nothing to check.\n *\n * Covers every EXPLICIT physical name migrate emits from the IR: table, column\n * and enum type names, explicit index/constraint names, and implicit join\n * tables with their derived index/FK names (fixed spellings whose only remedy\n * is a shorter relation name). Default-minted index/FK/PK names are never\n * refused: the shared physical-names helpers shorten them to the limit with\n * Prisma's own formula, so a schema Prisma accepts is accepted here and the\n * minted name IS the name the database creates.\n */\nfunction validateIdentifierLengths(params: { schema: SchemaIR; issues: ValidationIssue[] }): void {\n const { schema, issues } = params;\n const dialect = providerToDialect({ provider: schema.datasource.provider });\n const limit = IDENTIFIER_LIMITS[dialect];\n if (limit === undefined) return;\n const { max, unit } = limit;\n const consequence = dialect === \"postgres\"\n ? `PostgreSQL silently truncates identifiers to ${max} bytes (NAMEDATALEN - 1), so the created object never carries this name and migrations cannot converge`\n : `MySQL refuses identifiers longer than ${max} characters (ER_TOO_LONG_IDENT)`;\n const check = (entry: { name: string; what: string; model?: string; remedy: string }): void => {\n const length = identifierLength({ name: entry.name, dialect });\n if (length <= max) return;\n issues.push({\n rule: \"identifier-too-long\",\n message: `${entry.what} \"${entry.name}\" is ${length} ${unit} — ${consequence}. ${entry.remedy}`,\n ...(entry.model === undefined ? {} : { model: entry.model }),\n });\n };\n for (const model of schema.models) {\n const table = model.dbName ?? model.name;\n check({ name: table, what: model.isView ? \"View name\" : \"Table name\", model: model.name, remedy: `Map \"${model.name}\" to a shorter physical name (@@map).` });\n for (const fieldIR of model.fields) {\n check({ name: fieldIR.dbName ?? fieldIR.name, what: \"Column name\", model: model.name, remedy: `Map \"${model.name}.${fieldIR.name}\" to a shorter column name (@map).` });\n }\n if (model.isView) continue;\n // Explicit index / constraint names only: a minted default is shortened by\n // the shared physical-names helpers and can never exceed the limit.\n for (const index of model.indexes) {\n if (index.name !== undefined) {\n check({ name: index.name, what: index.kind === \"unique\" ? \"Unique index name\" : \"Index name\", model: model.name, remedy: \"Shorten the index name (map:).\" });\n }\n if (index.constraintName !== undefined) {\n check({ name: index.constraintName, what: \"Unique constraint name\", model: model.name, remedy: \"Shorten the constraint name.\" });\n }\n }\n if (model.primaryKeyConstraintName !== undefined) {\n check({ name: model.primaryKeyConstraintName, what: \"Primary key constraint name\", model: model.name, remedy: \"Shorten the constraint name (map:).\" });\n }\n for (const relation of model.relations) {\n if (relation.constraintName === undefined) continue;\n check({ name: relation.constraintName, what: \"Foreign key constraint name\", model: model.name, remedy: \"Shorten the constraint name (map:).\" });\n }\n for (const checkIR of model.checks ?? []) {\n check({ name: checkIR.name, what: \"CHECK constraint name\", model: model.name, remedy: \"Shorten the CHECK name.\" });\n }\n for (const exclusion of model.exclusions ?? []) {\n check({ name: exclusion.name, what: \"Exclusion constraint name\", model: model.name, remedy: \"Shorten the exclusion name.\" });\n }\n }\n // A natively stored enum is a CREATE TYPE on postgres only (mysql inlines\n // ENUM(...) into the column; string storage is an ordinary text column).\n if (dialect === \"postgres\") {\n for (const enumDef of schema.enums) {\n if (enumStorageOf({ enumDef }) !== \"database\") continue;\n check({ name: enumDef.dbName ?? enumDef.name, what: \"Enum type name\", remedy: `Map enum \"${enumDef.name}\" to a shorter type name (@@map).` });\n }\n }\n // Implicit join tables mint four derived objects; their names are fixed by\n // the m2m convention, so the only remedy is a shorter relation key.\n const seenJoinTables = new Set<string>();\n for (const model of schema.models) {\n for (const relation of model.relations) {\n if (relation.targetModel === model.name) continue; // self M2M is refused separately\n if (!isImplicitManyToManyRelation({ model, relation, models: schema.models })) continue;\n const join = implicitJoinTable({ modelA: model.name, modelB: relation.targetModel, ...(relation.relationName === undefined ? {} : { relationName: relation.relationName }) });\n if (seenJoinTables.has(join.tableName)) continue;\n seenJoinTables.add(join.tableName);\n const remedy = `Give the relation an explicit shorter name (@relation(\"...\")).`;\n check({ name: join.tableName, what: \"Implicit join table name\", model: model.name, remedy });\n const derived = implicitJoinTableObjectNames({ table: join.tableName });\n check({ name: derived.uniqueIndex, what: \"Implicit join table index name\", model: model.name, remedy });\n check({ name: derived.indexB, what: \"Implicit join table index name\", model: model.name, remedy });\n check({ name: derived.foreignKeyA, what: \"Implicit join table foreign key name\", model: model.name, remedy });\n check({ name: derived.foreignKeyB, what: \"Implicit join table foreign key name\", model: model.name, remedy });\n }\n }\n}\n\nfunction validateModel(params: {\n model: ModelIR;\n modelByName: Map<string, ModelIR>;\n enumByName: Map<string, EnumIR>;\n issues: ValidationIssue[];\n schema: SchemaIR;\n lookups: ValidationLookups;\n postgres: boolean;\n}): void {\n const { model, modelByName, enumByName, issues, lookups, postgres } = params;\n\n // Field + relation names share one namespace on the model.\n const memberNames = new Set<string>();\n for (const field of model.fields) {\n if (memberNames.has(field.name)) {\n issues.push({\n rule: \"duplicate-field\",\n message: `Duplicate field \"${field.name}\" on model \"${model.name}\"`,\n model: model.name,\n field: field.name,\n });\n }\n memberNames.add(field.name);\n const typedIssue = jsonTypeAnnotationIssue({ documentation: field.documentation });\n if (typedIssue !== undefined) issues.push({ rule: \"invalid-json-type-ref\", message: typedIssue, model: model.name, field: field.name });\n const hasType = typedIssue === undefined && jsonTypeAnnotationRef({ documentation: field.documentation }) !== undefined;\n if (hasType && field.type !== \"Json\") issues.push({ rule: \"json-type-non-json\", message: \"JSON type assertions are only valid on Json fields\", model: model.name, field: field.name });\n if (field.jsonSchema !== undefined) {\n const issue = jsonSchemaRefIssue({ value: field.jsonSchema });\n if (issue !== undefined) issues.push({ rule: \"invalid-json-schema-ref\", message: issue, model: model.name, field: field.name });\n if (field.type !== \"Json\" || field.isUnsupported === true) issues.push({ rule: \"json-schema-non-json\", message: \"JSON schemas are only valid on queryable Json fields\", model: model.name, field: field.name });\n if (hasType) issues.push({ rule: \"conflicting-json-schema-ref\", message: \"A field cannot declare both @type and a JSON schema\", model: model.name, field: field.name });\n }\n if (hasJsonSchemaAnnotation({ documentation: field.documentation })) issues.push({ rule: \"unnormalized-json-schema-ref\", message: \"Normalize @schema documentation into FieldIR.jsonSchema before consuming SchemaIR\", model: model.name, field: field.name });\n if (field.validator !== undefined) {\n const issue = validatorRefIssue({ value: field.validator });\n if (issue !== undefined) issues.push({ rule: \"invalid-validator-ref\", message: issue, model: model.name, field: field.name });\n if (field.type === \"Json\" || field.isUnsupported === true) issues.push({ rule: \"validator-non-scalar\", message: \"Validators are only valid on queryable non-JSON scalar or enum fields; use .schema() for Json\", model: model.name, field: field.name });\n if (field.jsonSchema !== undefined || hasType) issues.push({ rule: \"conflicting-validator-ref\", message: \"A field cannot combine a scalar validator with a JSON schema or type assertion\", model: model.name, field: field.name });\n }\n if (hasValidatorAnnotation({ documentation: field.documentation })) issues.push({ rule: \"unnormalized-validator-ref\", message: \"Normalize @validate documentation into FieldIR.validator before consuming SchemaIR\", model: model.name, field: field.name });\n const typeIdentity = field.nativeTypeIdentity;\n if (typeIdentity !== undefined && (typeIdentity === null || typeof typeIdentity !== \"object\" || field.isUnsupported !== true || typeof typeIdentity.source !== \"string\" || typeIdentity.source !== field.nativeType || typeof typeIdentity.namespace !== \"string\" || typeIdentity.namespace.length === 0 || typeIdentity.namespace.includes(\"\\0\"))) {\n issues.push({ rule: \"invalid-native-type-identity\", message: `PostgreSQL type identity on \"${model.name}.${field.name}\" must be bound to its unsupported declaration`, model: model.name, field: field.name });\n }\n\n const defaultValue = field.default;\n if (isLocalDateField({ field })) {\n if (field.isList) issues.push({ rule: \"local-date-list\", message: `Local-date field \"${model.name}.${field.name}\" cannot be a list`, model: model.name, field: field.name });\n if (field.isUpdatedAt) issues.push({ rule: \"local-date-updated-at\", message: `Local-date field \"${model.name}.${field.name}\" cannot use @updatedAt`, model: model.name, field: field.name });\n if (defaultValue !== undefined && (defaultValue.kind !== \"literal\" || !isCanonicalLocalDate({ value: defaultValue.value }))) {\n issues.push({ rule: \"local-date-default\", message: `Default on \"${model.name}.${field.name}\" must be a canonical YYYY-MM-DD calendar-day literal in years 0001–9999; generated defaults are not supported`, model: model.name, field: field.name });\n }\n }\n if (defaultValue !== undefined && defaultValue.kind !== \"dbgenerated\" && defaultValue.kind !== \"list\") {\n let valid = !field.isList;\n if (defaultValue.kind === \"now\") valid &&= field.type === \"DateTime\";\n else if (defaultValue.kind === \"autoincrement\") valid &&= !field.isOptional && (field.type === \"Int\" || field.type === \"BigInt\");\n else if (defaultValue.kind === \"uuid\" || defaultValue.kind === \"cuid\" || defaultValue.kind === \"ulid\" || defaultValue.kind === \"nanoid\") valid &&= field.type === \"String\";\n else if (defaultValue.kind === \"enumValue\") valid &&= isEnumType(field.type);\n else if (defaultValue.kind === \"literal\") {\n const value = defaultValue.value;\n if (isEnumType(field.type)) valid &&= typeof value === \"string\";\n else switch (field.type) {\n case \"Int\": valid &&= typeof value === \"number\" && Number.isInteger(value) && value >= -2147483648 && value <= 2147483647; break;\n case \"BigInt\": valid &&= (typeof value === \"number\" && Number.isSafeInteger(value)) || (typeof value === \"string\" && /^-?\\d+$/.test(value)); break;\n case \"Float\":\n case \"Decimal\": valid &&= (typeof value === \"number\" && Number.isFinite(value)) || (typeof value === \"string\" && /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value)); break;\n case \"Boolean\": valid &&= typeof value === \"boolean\"; break;\n case \"DateTime\": valid &&= typeof value === \"string\" && Number.isFinite(Date.parse(value)); break;\n case \"String\":\n case \"Json\":\n case \"Bytes\": valid &&= typeof value === \"string\"; break;\n }\n }\n if (!valid) issues.push({ rule: \"invalid-scalar-default\", message: `Default on \"${model.name}.${field.name}\" does not match its field type`, model: model.name, field: field.name });\n }\n\n if (isEnumType(field.type)) {\n const enumDef = enumByName.get(field.type.enum);\n if (enumDef === undefined) {\n issues.push({\n rule: \"unknown-enum\",\n message: `Field \"${model.name}.${field.name}\" references unknown enum \"${field.type.enum}\"`,\n model: model.name,\n field: field.name,\n });\n } else {\n // A default must be a member — `@default(FOO)` (enumValue) and the\n // quoted `@default(\"FOO\")` (literal) spellings alike. Checked here,\n // once, for both schema sources.\n const defaultValue = field.default;\n const candidate =\n defaultValue === undefined\n ? undefined\n : defaultValue.kind === \"enumValue\"\n ? defaultValue.value\n : defaultValue.kind === \"literal\" && typeof defaultValue.value === \"string\"\n ? defaultValue.value\n : undefined;\n if (candidate !== undefined && !enumDef.values.includes(candidate)) {\n issues.push({\n rule: \"enum-default-not-member\",\n message: `Default \"${candidate}\" on \"${model.name}.${field.name}\" is not a member of enum \"${enumDef.name}\" (${enumDef.values.join(\", \")})`,\n model: model.name,\n field: field.name,\n });\n }\n }\n }\n\n // The runtime aliases its own projections (M2M stitch key `__vibe_parent`,\n // hidden order fields) under this prefix; a user column there would\n // collide and be silently misgrouped/stripped. `.prisma` field names\n // cannot start with `_`, but `@map` and hand-built IR can.\n const columnName = field.dbName ?? field.name;\n if (columnName.startsWith(RESERVED_COLUMN_PREFIX)) {\n issues.push({\n rule: \"reserved-column-prefix\",\n message:\n `Field \"${model.name}.${field.name}\" maps to column \"${columnName}\" — the \"${RESERVED_COLUMN_PREFIX}\" ` +\n `prefix is reserved for VibeORM's own projection aliases`,\n model: model.name,\n field: field.name,\n });\n }\n }\n\n for (const relation of model.relations) {\n if (memberNames.has(relation.name)) {\n issues.push({\n rule: \"duplicate-field\",\n message: `Relation \"${relation.name}\" collides with another member on model \"${model.name}\"`,\n model: model.name,\n field: relation.name,\n });\n }\n memberNames.add(relation.name);\n }\n\n // Primary key presence (views are exempt); compound keys use model.primaryKey.\n const fieldNames = new Set(lookups.fieldsByModel.get(model)!.keys());\n const idFields = model.fields.filter((f) => f.isId);\n const hasIdField = idFields.length > 0;\n if (idFields.length > 1) {\n issues.push({\n rule: \"multiple-field-ids\",\n message: `Model \"${model.name}\" has multiple @id fields (${idFields.map((field) => field.name).join(\", \")}); declare one compound primary key instead`,\n model: model.name,\n });\n }\n if (idFields.length === 1 && model.primaryKey !== undefined &&\n (model.primaryKey.fields.length !== 1 || model.primaryKey.fields[0] !== idFields[0]?.name)) {\n issues.push({\n rule: \"conflicting-primary-key\",\n message: `Model \"${model.name}\" declares @id on \"${idFields[0]?.name}\" and a different block primary key; both declarations must name the same single logical field`,\n model: model.name,\n });\n }\n if (!model.isView && !hasIdField && model.primaryKey === undefined) {\n issues.push({\n rule: \"missing-id\",\n message: `Model \"${model.name}\" has no @id field and no composite primary key`,\n model: model.name,\n });\n }\n if (model.primaryKey !== undefined) {\n for (const pkField of model.primaryKey.fields) {\n if (!fieldNames.has(pkField)) {\n issues.push({\n rule: \"unknown-pk-field\",\n message: `Composite primary key on \"${model.name}\" references unknown field \"${pkField}\"`,\n model: model.name,\n field: pkField,\n });\n }\n }\n }\n\n // Relations: target exists, FK columns exist both sides, arities match.\n for (const relation of model.relations) {\n if (\"validator\" in relation || \"documentation\" in relation && typeof relation.documentation === \"string\" && hasValidatorAnnotation({ documentation: relation.documentation })) issues.push({ rule: \"validator-non-scalar\", message: \"Validators cannot be declared on relations\", model: model.name, field: relation.name });\n const target = modelByName.get(relation.targetModel);\n if (target === undefined) {\n issues.push({\n rule: \"unknown-relation-target\",\n message: `Relation \"${model.name}.${relation.name}\" targets unknown model \"${relation.targetModel}\"`,\n model: model.name,\n field: relation.name,\n });\n }\n\n const hasFields = relation.fields !== undefined && relation.fields.length > 0;\n const hasReferences = relation.references !== undefined && relation.references.length > 0;\n if (hasFields !== hasReferences) {\n issues.push({\n rule: \"relation-fields-mismatch\",\n message: `Relation \"${model.name}.${relation.name}\" must declare fields and references together`,\n model: model.name,\n field: relation.name,\n });\n }\n if (hasFields && hasReferences && relation.fields !== undefined && relation.references !== undefined) {\n if (relation.fields.length !== relation.references.length) {\n issues.push({\n rule: \"relation-fields-mismatch\",\n message: `Relation \"${model.name}.${relation.name}\" has ${relation.fields.length} fields but ${relation.references.length} references`,\n model: model.name,\n field: relation.name,\n });\n }\n for (const fkField of relation.fields) {\n if (!fieldNames.has(fkField)) {\n issues.push({\n rule: \"unknown-relation-field\",\n message: `Relation \"${model.name}.${relation.name}\" uses unknown field \"${fkField}\"`,\n model: model.name,\n field: relation.name,\n });\n }\n }\n if (postgres && new Set(relation.references).size !== relation.references.length) {\n issues.push({ rule: \"relation-duplicate-column\", message: `Relation \"${model.name}.${relation.name}\" repeats a referenced column`, model: model.name, field: relation.name });\n }\n if (target !== undefined) {\n if (postgres && referencesPartialOnly({ target, references: relation.references, schema: params.schema, lookups })) {\n issues.push({ rule: \"relation-partial-only-target\", message: `Relation \"${model.name}.${relation.name}\" references only a partial unique key`, model: model.name, field: relation.name });\n }\n const targetFieldNames = lookups.fieldsByModel.get(target)!;\n for (const [index, fkName] of relation.fields.entries()) {\n const own = lookups.fieldsByModel.get(model)?.get(fkName);\n const referenced = targetFieldNames.get(relation.references[index] ?? \"\");\n if (own !== undefined && referenced !== undefined && (isLocalDateField({ field: own }) || isLocalDateField({ field: referenced })) && fieldTypeIdentity(own) !== fieldTypeIdentity(referenced)) {\n issues.push({ rule: \"relation-type-mismatch\", message: `Relation \"${model.name}.${relation.name}\" pairs a local date with a different logical type; both foreign-key columns must be local dates`, model: model.name, field: fkName });\n }\n }\n for (const refField of relation.references) {\n if (!targetFieldNames.has(refField)) {\n issues.push({\n rule: \"unknown-relation-reference\",\n message: `Relation \"${model.name}.${relation.name}\" references unknown field \"${relation.targetModel}.${refField}\"`,\n model: model.name,\n field: relation.name,\n });\n }\n }\n }\n }\n }\n\n // @collation: String fields only — collation has no meaning off text.\n for (const field of model.fields) {\n if (field.collation !== undefined && (field.type !== \"String\" || isLocalDateField({ field }))) {\n issues.push({\n rule: \"collation-non-string\",\n message: `@collation on \"${model.name}.${field.name}\" — collation is only valid on text String fields, not local dates`,\n model: model.name,\n field: field.name,\n });\n }\n }\n\n // @@policy: the field must exist and be a required, non-list scalar — an\n // optional scoping column cannot fail closed.\n if (model.policy !== undefined) {\n const policyField = model.fields.find((field) => field.name === model.policy?.field);\n if (policyField === undefined) {\n issues.push({\n rule: \"policy-unknown-field\",\n message: `@@policy on \"${model.name}\" references unknown field \"${model.policy.field}\"`,\n model: model.name,\n });\n } else if (policyField.isList) {\n issues.push({\n rule: \"policy-list-field\",\n message: `@@policy field \"${model.name}.${policyField.name}\" must be a non-list scalar`,\n model: model.name,\n field: policyField.name,\n });\n } else if (policyField.isOptional) {\n issues.push({\n rule: \"policy-optional-field\",\n message: `@@policy field \"${model.name}.${policyField.name}\" must be required — an optional scoping column cannot fail closed`,\n model: model.name,\n field: policyField.name,\n });\n }\n }\n\n // Checks: non-empty, and NAME-unique (names key the migration diff).\n const checkNames = new Set<string>();\n for (const check of model.checks ?? []) {\n if (check.name.trim() === \"\" || check.expression.trim() === \"\") {\n issues.push({\n rule: \"invalid-check\",\n message: `CHECK on \"${model.name}\" needs a non-empty name and expression`,\n model: model.name,\n });\n }\n if (checkNames.has(check.name)) {\n issues.push({\n rule: \"duplicate-check\",\n message: `Duplicate CHECK name \"${check.name}\" on \"${model.name}\" — names key the migration diff`,\n model: model.name,\n });\n }\n checkNames.add(check.name);\n if (check.predicate !== undefined) {\n validatePredicateFields({\n predicate: check.predicate,\n model,\n fieldNames,\n site: `CHECK \"${check.name}\"`,\n usage: \"check\",\n enums: params.schema.enums,\n dialect: providerToDialect({ provider: params.schema.datasource.provider }),\n issues,\n });\n }\n }\n\n // Indexes reference real fields.\n for (const index of model.indexes) {\n for (const indexField of index.fields) {\n if (!fieldNames.has(indexField.name)) {\n issues.push({\n rule: \"unknown-index-field\",\n message: `Index on \"${model.name}\" references unknown field \"${indexField.name}\"`,\n model: model.name,\n field: indexField.name,\n });\n }\n }\n if (index.wherePredicate !== undefined) {\n validatePredicateFields({\n predicate: index.wherePredicate,\n model,\n fieldNames,\n site: `partial index on [${index.fields.map((entry) => entry.name).join(\", \")}]`,\n usage: \"indexPredicate\",\n enums: params.schema.enums,\n dialect: providerToDialect({ provider: params.schema.datasource.provider }),\n issues,\n });\n }\n }\n for (const exclusion of model.exclusions ?? []) {\n const predicate = exclusion.source?.where;\n if (predicate !== undefined) validatePredicateFields({ predicate, model, fieldNames, site: `exclusion \"${exclusion.name}\"`, usage: \"exclusionPredicate\", enums: params.schema.enums, dialect: providerToDialect({ provider: params.schema.datasource.provider }), issues });\n }\n}\n\n/**\n * A typed predicate may only read fields its own model declares, and never a\n * scalar list — no dialect here compares an array column usefully in a CHECK or\n * an index predicate. Rendering refuses the same cases with the exact scalar in\n * hand; this is the IR-level floor that holds for hand-built IR too.\n */\nfunction validatePredicateFields(params: {\n predicate: PredicateIR;\n model: ModelIR;\n fieldNames: ReadonlySet<string>;\n site: string;\n usage: PredicateBooleanUsage;\n enums: readonly EnumIR[];\n dialect: Dialect;\n issues: ValidationIssue[];\n}): void {\n const { predicate, model, fieldNames, site, issues, enums } = params;\n const capability = predicateCapabilityIssue({ predicate, model, dialect: params.dialect, usage: params.usage });\n if (capability !== undefined) {\n issues.push({ rule: \"predicate-check-capability\", message: `${site}: ${capability.feature} is not supported for ${params.usage} on ${params.dialect}${capability.hint === undefined ? \"\" : ` (${capability.hint})`}`, model: model.name });\n }\n const issue = (params: { rule: string; message: string; field?: string }): void => {\n issues.push({ ...params, message: `${site}: ${params.message}`, model: model.name });\n };\n const identity = (params: { result: PredicateResultType }): string => fieldTypeIdentity({ type: params.result.type, nativeType: params.result.refinement === \"localDate\" ? \"Date\" : undefined });\n const literal = (params: { value: PredicateValue; result: PredicateResultType }): void => {\n const { value } = params.value;\n const { type, refinement } = params.result;\n if (refinement === \"localDate\") {\n if (!isCanonicalLocalDate({ value })) issue({ rule: \"predicate-local-date-literal\", message: \"a local-date predicate requires a canonical YYYY-MM-DD calendar-day literal\" });\n return;\n }\n if (isEnumType(type)) {\n const declared = enums.find((entry) => entry.name === type.enum);\n if (typeof value !== \"string\") issue({ rule: \"predicate-type-mismatch\", message: \"an enum predicate requires a member name as a string\" });\n else if (declared !== undefined && !declared.values.includes(value)) issue({ rule: \"predicate-enum-member\", message: `literal ${JSON.stringify(value)} is not a member of enum ${type.enum}` });\n return;\n }\n if (type === \"Int\" || type === \"BigInt\") {\n if (typeof value !== \"number\" && typeof value !== \"string\") {\n issue({ rule: \"predicate-type-mismatch\", message: `${type} requires an exact integer literal` });\n return;\n }\n if (typeof value === \"number\" ? !Number.isSafeInteger(value) : !/^-?(0|[1-9]\\d*)$/.test(value)) {\n issue({ rule: \"predicate-literal-invalid\", message: `${type} requires an exact integer literal without rounding or exponent notation` });\n return;\n }\n const parsed = BigInt(value);\n const min = type === \"Int\" ? -2_147_483_648n : -(2n ** 63n);\n const max = type === \"Int\" ? 2_147_483_647n : 2n ** 63n - 1n;\n if (parsed < min || parsed > max) issue({ rule: \"predicate-literal-invalid\", message: `${type} literal is outside its signed integer range` });\n return;\n }\n if (type === \"Float\") {\n if (typeof value !== \"number\") issue({ rule: \"predicate-type-mismatch\", message: \"Float requires a number literal\" });\n else if (!Number.isFinite(value)) issue({ rule: \"predicate-literal-invalid\", message: \"Float requires a finite number literal\" });\n return;\n }\n if (type === \"Decimal\") {\n if (typeof value !== \"string\") issue({ rule: \"predicate-type-mismatch\", message: \"Decimal requires exact fixed-point text, not a JavaScript number\" });\n else if (!/^-?(0|[1-9]\\d*)(\\.\\d+)?$/.test(value)) issue({ rule: \"predicate-literal-invalid\", message: \"Decimal requires exact fixed-point text without exponent notation\" });\n return;\n }\n if (type === \"String\") {\n if (typeof value !== \"string\") issue({ rule: \"predicate-type-mismatch\", message: \"a text expression requires a string literal\" });\n else if (value.includes(\"\\u0000\")) issue({ rule: \"predicate-literal-invalid\", message: \"a text literal cannot contain NUL bytes\" });\n } else if (type === \"Boolean\" && typeof value !== \"boolean\") issue({ rule: \"predicate-type-mismatch\", message: \"Boolean requires true or false\" });\n };\n const expressionType = (expression: PredicateExpression): PredicateResultType | undefined => {\n switch (expression.kind) {\n case \"field\": {\n const field = model.fields.find((candidate) => candidate.name === expression.name);\n if (field === undefined || field.isList || field.isUnsupported) return undefined;\n // PostgreSQL native-type limits of text functions and arithmetic are capability admission, reported above.\n return isLocalDateField({ field }) ? { type: field.type, refinement: \"localDate\" } : { type: field.type };\n }\n case \"jsonText\": {\n const field = model.fields.find((candidate) => candidate.name === expression.field.name);\n if (field !== undefined && (field.type !== \"Json\" || field.isUnsupported === true)) issue({ rule: \"predicate-type-mismatch\", message: \"jsonText requires a Json field\", field: field.name });\n if (!Array.isArray(expression.path) || Array.from(expression.path).some((segment: unknown) => typeof segment !== \"string\" || segment.includes(\"\\u0000\"))) issue({ rule: \"predicate-json-path\", message: \"jsonText requires a string-only path without NUL bytes\" });\n return { type: \"String\" };\n }\n case \"length\":\n case \"lower\":\n case \"upper\": {\n const child = expressionType(expression.expression);\n if (child !== undefined && (child.type !== \"String\" || child.refinement === \"localDate\")) issue({ rule: \"predicate-type-mismatch\", message: `${expression.kind} requires a text expression, not a local date or another scalar` });\n return { type: expression.kind === \"length\" ? \"Int\" : \"String\" };\n }\n case \"add\":\n case \"sub\":\n case \"mul\": {\n const left = expressionType(expression.left);\n const right = expression.right.kind === \"value\" ? undefined : expressionType(expression.right);\n if (left === undefined) return undefined;\n if (left.type !== \"Int\" && left.type !== \"BigInt\" && left.type !== \"Float\" && left.type !== \"Decimal\") {\n issue({ rule: \"predicate-type-mismatch\", message: `${expression.kind} requires Int, BigInt, Float or Decimal operands` });\n return undefined;\n }\n if (right !== undefined && right.type !== left.type) issue({ rule: \"predicate-type-mismatch\", message: `${expression.kind} operands must have the same numeric family` });\n if (expression.right.kind === \"value\") literal({ value: expression.right, result: left });\n return { type: left.type };\n }\n }\n };\n const validateComputedComparisons = (node: PredicateIR): void => {\n if (node.kind === \"compare\") {\n const left = expressionType(node.left);\n const right = node.right.kind === \"value\" ? undefined : expressionType(node.right);\n if (left !== undefined && right !== undefined && identity({ result: left }) !== identity({ result: right })) issue({ rule: \"predicate-type-mismatch\", message: \"comparison operands must have the same logical type\" });\n if (node.right.kind === \"value\" && left !== undefined) literal({ value: node.right, result: left });\n } else if (node.kind === \"inList\") {\n const result = expressionType(node.field);\n if (result !== undefined) for (const value of node.values) literal({ value, result });\n } else if (node.kind === \"and\" || node.kind === \"or\") node.operands.forEach(validateComputedComparisons);\n else if (node.kind === \"not\" || node.kind === \"isTrue\") validateComputedComparisons(node.operand);\n };\n validateComputedComparisons(predicate);\n for (const name of predicateFieldNames({ predicate })) {\n if (!fieldNames.has(name)) {\n issues.push({\n rule: \"predicate-unknown-field\",\n message: `${site} on \"${model.name}\" references unknown field \"${name}\"`,\n model: model.name,\n field: name,\n });\n continue;\n }\n const referenced = model.fields.find((field) => field.name === name);\n if (referenced?.isUnsupported === true) issues.push({ rule: \"predicate-unsupported-type\", message: `${site}: predicates cannot reference unsupported fields`, model: model.name, field: name });\n if (referenced?.isList === true) {\n issues.push({\n rule: \"predicate-list-field\",\n message: `${site} on \"${model.name}\" compares scalar list \"${name}\" — use a raw expression for array operators`,\n model: model.name,\n field: name,\n });\n }\n }\n}\n\nimport { assertMigrationObjects } from \"./migration-objects.ts\";\n\n// ─── Assertion form ───────────────────────────────────────────────\n\n/**\n * MySQL refuses a CHECK on a column that a foreign-key referential action\n * WRITES (error 3823, \"needed in a foreign key constraint referential\n * action\"), and its DDL is not transactional: the migration would stop\n * half-applied. Probed on this project's MySQL 8.4 and 26.7 servers\n * (10.10.2026): ON UPDATE CASCADE, ON DELETE SET NULL and ON DELETE SET\n * DEFAULT are refused; ON DELETE CASCADE (it deletes the row, it writes no\n * column), RESTRICT and NO ACTION are accepted, and a CHECK on the REFERENCED\n * parent column is accepted. ON UPDATE SET NULL / SET DEFAULT write the column\n * too and are treated like CASCADE.\n *\n * VibeORM's default `onUpdate` is Cascade, so on MySQL a typed CHECK on any\n * foreign-key column needs an explicit `onUpdate: \"NoAction\"` or `\"Restrict\"`.\n * A raw CHECK is never parsed, so it cannot be analysed here.\n */\nfunction assertMysqlCheckReferentialActions(params: { schema: SchemaIR }): void {\n const views = new Set(params.schema.models.filter((model) => model.isView).map((model) => model.name));\n for (const model of params.schema.models) {\n const typed = (model.checks ?? []).filter((check) => check.predicate !== undefined);\n if (typed.length === 0) continue;\n for (const relation of model.relations) {\n const columns = relation.fields;\n if (columns === undefined || columns.length === 0 || views.has(relation.targetModel)) continue;\n // The one rule migrate's normalizer renders into DDL.\n const { onDelete, onUpdate } = resolveReferentialActions({ relation, field: (name) => model.fields.find((field) => field.name === name) });\n const writes = (action: string): boolean => action === \"Cascade\" || action === \"SetNull\" || action === \"SetDefault\";\n if (!writes(onUpdate) && onDelete !== \"SetNull\" && onDelete !== \"SetDefault\") continue;\n for (const check of typed) {\n const column = predicateFieldNames({ predicate: check.predicate! }).find((name) => columns.includes(name));\n if (column === undefined) continue;\n const error = unsupportedCapability({\n dialect: \"mysql\",\n feature: \"CHECK constraint on a foreign-key column that a referential action writes\",\n hint: `CHECK \"${check.name}\" reads \"${model.name}.${column}\", which relation \"${model.name}.${relation.name}\" writes through ON DELETE ${onDelete} / ON UPDATE ${onUpdate}; MySQL refuses this (error 3823). Declare onUpdate \"NoAction\" (or \"Restrict\") and an onDelete of \"Restrict\", \"NoAction\" or \"Cascade\" on the relation, or remove the CHECK`,\n });\n throw new VibeError({ code: error.code, message: error.message, meta: { ...error.meta, model: model.name, check: check.name, field: column, relation: relation.name, onDelete, onUpdate } });\n }\n }\n }\n}\n\n/** Throw VIBE_SCHEMA_INVALID (with all issues in meta) if the schema is invalid. */\nexport function assertValidSchemaIR(params: { schema: SchemaIR }): void {\n const rowRules = createRowRuleValidationContext(params);\n const dialect = providerToDialect({ provider: params.schema.datasource.provider });\n assertIndexExpressions({ schema: params.schema, dialect });\n assertGeneratedColumns({ schema: params.schema, dialect });\n assertNativeRlsAdmission({ schema: params.schema, dialect });\n for (const model of params.schema.models) {\n const rule = model.rls;\n if (rule === undefined || rule === null || typeof rule !== \"object\" || !(\"where\" in rule) || rule.where === null || typeof rule.where !== \"object\") continue;\n for (const field of model.fields) {\n if (Object.hasOwn(rule.where, field.name) && isLocalDateField({ field })) throw unsupportedCapability({ dialect, feature: \"local-date native RLS ownership\", hint: `${model.name}.${field.name} is a calendar day, not a supported RLS identity column` });\n }\n }\n assertExtensionPlacement({ schema: params.schema, dialect });\n assertIndexOperatorClasses({ schema: params.schema, dialect });\n for (const entry of [...params.schema.models, ...params.schema.enums]) if (entry.namespace !== undefined) assertSqlNamespace({ namespace: entry.namespace, dialect });\n for (const model of params.schema.models) for (const field of model.fields) {\n if (!isEnumType(field.type) || field.type.namespace === undefined) continue;\n assertSqlNamespace({ namespace: field.type.namespace, dialect });\n const enumType = field.type;\n const declared = params.schema.enums.find((entry) => entry.name === enumType.enum || entry.dbName === enumType.enum);\n if (declared !== undefined && (declared.namespace ?? \"public\") !== enumType.namespace) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Enum reference namespace differs from its declared native type\", meta: { rule: \"enum-namespace\", model: model.name, field: field.name } });\n }\n if (dialect === \"mysql\") assertMysqlCheckReferentialActions({ schema: params.schema });\n for (const model of params.schema.models) {\n for (const check of model.checks ?? []) if (check.predicate !== undefined) assertPredicateCapabilities({ predicate: check.predicate, model, dialect, usage: \"check\" });\n for (const index of model.indexes) if (index.wherePredicate !== undefined) assertPredicateCapabilities({ predicate: index.wherePredicate, model, dialect, usage: \"indexPredicate\" });\n if (model.exclusions !== undefined && !Array.isArray(model.exclusions)) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Exclusions must be an array\", meta: { rule: \"exclusion-definition\" } });\n if ((model.exclusions?.length ?? 0) === 0) continue;\n if (!DIALECT_CAPABILITIES[dialect].exclusionConstraints) throw unsupportedCapability({ dialect, feature: \"exclusionConstraints\" });\n const names = new Set<string>();\n const exclusions: readonly ExclusionIR[] = model.exclusions ?? [];\n for (const exclusion of exclusions) {\n if (exclusion === null || typeof exclusion !== \"object\") throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Invalid exclusion declaration\", meta: { rule: \"exclusion-definition\" } });\n const source = exclusion.source;\n if (source !== undefined) {\n if (source.where !== undefined) assertPredicateCapabilities({ predicate: source.where, model, dialect, usage: \"exclusionPredicate\" });\n const references = [...source.keys.flatMap((key) => \"field\" in key ? [key.field] : key.fields), ...[source.range.lower, source.range.upper].flatMap((endpoint) => \"field\" in endpoint ? [endpoint.field] : []), ...(source.where === undefined ? [] : predicateFieldNames({ predicate: source.where }))];\n if (references.some((name) => !model.fields.some((field) => field.name === name && !field.isList))) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Exclusion references an unknown or list field\", meta: { rule: \"exclusion-field\", model: model.name } });\n }\n if (!exclusion.name || names.has(exclusion.name) || typeof exclusion.definition !== \"string\" || !exclusion.definition.startsWith(\"EXCLUDE USING \") || !Array.isArray(exclusion.requiredExtensions) || exclusion.requiredExtensions.some((name) => name !== \"btree_gist\")) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Invalid exclusion declaration\", meta: { rule: \"exclusion-definition\", model: model.name } });\n names.add(exclusion.name);\n }\n }\n if (params.schema.migrationObjects !== undefined) assertMigrationObjects({ objects: params.schema.migrationObjects });\n for (const model of params.schema.models) {\n const counters = model.fields.filter((field) => field.default?.kind === \"autoincrement\");\n if (dialect === \"mysql\" && counters.length > 1) throw unsupportedCapability({ dialect, feature: \"multiple auto-increment columns\" });\n for (const field of model.fields) {\n if (isLocalDateField({ field })) {\n if (!DIALECT_CAPABILITIES[dialect].localDateColumns) throw unsupportedCapability({ dialect, feature: \"localDateColumns\", hint: `${model.name}.${field.name}` });\n if (field.isList || field.isUpdatedAt || (field.default !== undefined && (field.default.kind !== \"literal\" || !isCanonicalLocalDate({ value: field.default.value })))) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Local-date field ${model.name}.${field.name} requires a scalar calendar day and an optional canonical YYYY-MM-DD literal default; lists, @updatedAt and generated defaults are not supported`, meta: { issues: [{ rule: \"local-date-declaration\", model: model.name, field: field.name }] } });\n }\n }\n const timeOfDay = field.isUnsupported === true || field.type !== \"DateTime\" ? undefined : timeOfDayType({ nativeType: field.nativeType });\n if (timeOfDay !== undefined && !DIALECT_CAPABILITIES[dialect].timeOfDayTypes.includes(timeOfDay)) {\n const instead = dialect === \"sqlite\" ? \"sqlite has no time-of-day column type; store a plain DateTime or a String\" : \"there is no time-with-offset type here; use @db.Time(n), which stores the UTC time of day\";\n const error = unsupportedCapability({ dialect, feature: \"timeOfDayTypes\", hint: `${model.name}.${field.name} declares @db.${field.nativeType ?? \"\"} (${timeOfDay}) — ${instead}` });\n throw new VibeError({ code: error.code, message: error.message, meta: { ...error.meta, model: model.name, field: field.name, nativeType: field.nativeType } });\n }\n if (field.type === \"String\" && field.isUnsupported !== true && field.nativeType?.trim().toLowerCase() === \"uuid\" && DIALECT_CAPABILITIES[dialect].uuidColumns === \"unsupported\") {\n const error = unsupportedCapability({ dialect, feature: \"uuidColumns\", hint: `${model.name}.${field.name} declares @db.Uuid — ${dialect} has no uuid column type; store it as a plain String (or @db.Char(36))` });\n throw new VibeError({ code: error.code, message: error.message, meta: { ...error.meta, model: model.name, field: field.name, nativeType: field.nativeType } });\n }\n // MySQL takes DEFAULT CURRENT_TIMESTAMP only on DATETIME/TIMESTAMP: the DDL fails with 1067.\n if (timeOfDay !== undefined && dialect === \"mysql\" && field.default?.kind === \"now\") {\n const error = unsupportedCapability({ dialect, feature: \"@default(now()) on a TIME column\", hint: `${model.name}.${field.name} — MySQL has no current-time default for TIME; drop the default and write the value (or use @updatedAt)` });\n throw new VibeError({ code: error.code, message: error.message, meta: { ...error.meta, model: model.name, field: field.name, nativeType: field.nativeType } });\n }\n if (field.default?.kind === \"list\") {\n if (dialect !== \"postgres\") throw unsupportedCapability({ dialect, feature: \"scalar-list defaults\" });\n if (!field.isList) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `List default on non-list field ${model.name}.${field.name}` });\n scalarListDefault({ type: field.type, values: field.default.values });\n if (isEnumType(field.type)) {\n const name = field.type.enum;\n const members = params.schema.enums.find((entry) => entry.name === name)?.values ?? [];\n if (field.default.values.some((value) => typeof value !== \"string\" || !members.includes(value))) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Invalid enum-list default on ${model.name}.${field.name}` });\n }\n }\n if (field.default?.kind !== \"autoincrement\") continue;\n if (field.isList || field.isOptional || (field.type !== \"Int\" && field.type !== \"BigInt\")) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `autoincrement requires a required scalar Int or BigInt: ${model.name}.${field.name}` });\n const pk = model.primaryKey?.fields ?? model.fields.filter((entry) => entry.isId).map((entry) => entry.name);\n if (dialect === \"sqlite\" && (pk.length !== 1 || pk[0] !== field.name)) throw unsupportedCapability({ dialect, feature: `non-primary auto-increment column ${model.name}.${field.name}` });\n if (dialect === \"mysql\" && pk[0] !== field.name && !field.isUnique && !model.indexes.some((index) => { const first = indexKeyTerms({ index })[0]; return first?.kind === \"field\" && first.field.name === field.name; })) throw unsupportedCapability({ dialect, feature: `unindexed auto-increment column ${model.name}.${field.name}` });\n }\n }\n const issues = validateSchemaWithRowRules({ ...params, rowRules });\n if (issues.length > 0) {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `Schema validation failed with ${issues.length} issue(s): ${issues\n .map((issue) => issue.message)\n .join(\"; \")}`,\n meta: { issues },\n });\n }\n for (const model of params.schema.models) for (const rule of model.rowRules ?? []) {\n assertRowRuleCapability({ dialect, model: model.name, rule });\n rowRules.assertEquality({ model, rule });\n }\n assertRowRuleReferentialActions(params);\n}\n\n// ─── Native RLS structure ─────────────────────────────────────────\n\nfunction rlsRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) &&\n (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null) &&\n Reflect.ownKeys(value).every((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && descriptor?.enumerable === true && \"value\" in descriptor;\n });\n}\n\nfunction rlsKeys(params: { value: Record<string, unknown>; keys: readonly string[] }): boolean {\n const own = Reflect.ownKeys(params.value);\n return own.length === params.keys.length && params.keys.every((key) => Object.hasOwn(params.value, key));\n}\n\n/** Validate context declarations independently (also used by settings rendering). */\nexport function validateRlsContextIR(params: { context: unknown }): ValidationIssue[] {\n const { context } = params;\n const issues: ValidationIssue[] = [];\n if (!rlsRecord(context)) return [{ rule: \"rls-invalid-context\", message: \"Native RLS context must be a named scalar-slot map\" }];\n const seen = new Set<string>();\n for (const key of Reflect.ownKeys(context)) {\n const slot: unknown = typeof key === \"string\" ? context[key] : undefined;\n if (typeof key !== \"string\" || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(key) || seen.has(key.toLowerCase()) ||\n !rlsRecord(slot) || !rlsKeys({ value: slot, keys: [\"type\", \"nullable\"] }) || typeof slot.nullable !== \"boolean\" ||\n (typeof slot.type !== \"string\" || ![\"String\", \"Boolean\", \"Int\", \"BigInt\", \"Float\", \"Decimal\", \"DateTime\"].includes(slot.type))) {\n issues.push({ rule: \"rls-invalid-context\", message: `Invalid native RLS context slot ${String(key)}; use distinct setting keys and supported scalar slots with explicit nullable` });\n }\n if (typeof key === \"string\") seen.add(key.toLowerCase());\n }\n return issues;\n}\n\n/**\n * Shared structural implicit-M2M rule, including introspection's unnamed lists.\n * Each fieldless list must be the other's sole counterpart under the same\n * relation-name key, counting FK-owning candidates too. Never trust `type`:\n * ordinary mutual FKs also synthesize unnamed lists during introspection.\n */\nexport function isImplicitManyToManyRelation(params: {\n model: ModelIR;\n relation: RelationIR;\n models: readonly ModelIR[];\n}): boolean {\n const { model, relation, models } = params;\n if (model.isView || !relation.isList || (relation.fields?.length ?? 0) !== 0) return false;\n const target = models.find((candidate) => candidate.name === relation.targetModel);\n if (target === undefined || target.isView) return false;\n const counterpart = soleRelationCounterpart({ relation, ownModel: model.name, target });\n if (counterpart === undefined || !counterpart.isList || (counterpart.fields?.length ?? 0) !== 0) return false;\n return soleRelationCounterpart({ relation: counterpart, ownModel: target.name, target: model }) === relation;\n}\n\nfunction soleRelationCounterpart(params: { relation: RelationIR; ownModel: string; target: ModelIR }): RelationIR | undefined {\n const { relation, ownModel, target } = params;\n const candidates = target.relations.filter((candidate) =>\n candidate !== relation && candidate.targetModel === ownModel && candidate.relationName === relation.relationName,\n );\n return candidates.length === 1 ? candidates[0] : undefined;\n}\n\nfunction validateNativeRls(params: { schema: SchemaIR; issues: ValidationIssue[] }): void {\n const { schema, issues } = params;\n if (schema.rls === undefined) {\n if (schema.models.some((model) => model.rls !== undefined)) {\n issues.push({ rule: \"rls-missing-context\", message: \"Model RLS rules require a schema-level rls.context declaration\" });\n }\n return;\n }\n const dialect = providerToDialect({ provider: schema.datasource.provider });\n if (!DIALECT_CAPABILITIES[dialect].nativeRowLevelSecurity) {\n issues.push({ rule: \"rls-unsupported-capability\", message: `nativeRowLevelSecurity is not supported on ${dialect}` });\n }\n if (!rlsRecord(schema.rls) || !rlsKeys({ value: schema.rls, keys: [\"context\"] })) {\n issues.push({ rule: \"rls-invalid-context\", message: \"Native RLS supports only a schema-level context declaration\" });\n return;\n }\n const contextIssues = validateRlsContextIR({ context: schema.rls.context });\n issues.push(...contextIssues);\n const context = contextIssues.length === 0 ? schema.rls.context : undefined;\n const byName = new Map(schema.models.map((model) => [model.name, model]));\n const tables = new Set<string>();\n const throughTargets = new Map<string, string>();\n for (const model of schema.models) {\n const add = (params: { rule: string; message: string; field?: string }): void => {\n issues.push({ ...params, model: model.name });\n };\n const table = model.dbName ?? model.name;\n if (tables.has(table)) add({ rule: \"rls-duplicate-table\", message: `RLS models share physical table ${table}` });\n tables.add(table);\n const columns = new Set<string>();\n for (const field of model.fields) {\n const name = field.dbName ?? field.name;\n if (columns.has(name)) add({ rule: \"rls-duplicate-column\", message: `RLS model ${model.name} repeats physical column ${name}`, field: field.name });\n columns.add(name);\n }\n if (model.policy !== undefined) add({ rule: \"rls-policy-conflict\", message: \"Native RLS cannot combine with application-level ModelIR.policy\" });\n if (model.isView) add({ rule: \"rls-view-unsupported\", message: \"Database views are not supported on native RLS clients; remove the view declaration\" });\n if (model.rls === undefined) {\n add({ rule: \"rls-unclassified-model\", message: `Classify ${model.name} as where, through, unprotected or deny` });\n continue;\n }\n if (model.rls !== \"unprotected\") {\n for (const relation of model.relations) {\n if (isImplicitManyToManyRelation({ model, relation, models: schema.models })) {\n add({ rule: \"rls-implicit-many-to-many\", message: \"Protected implicit many-to-many relations need an explicit junction model with its own rule\", field: relation.name });\n }\n }\n }\n const rule: unknown = model.rls;\n if (rule === \"unprotected\" || rule === \"deny\") continue;\n if (!rlsRecord(rule)) {\n add({ rule: \"rls-invalid-rule\", message: \"Native RLS accepts where, through, unprotected or deny only\" });\n continue;\n }\n if (rlsKeys({ value: rule, keys: [\"where\"] }) && rlsRecord(rule.where) && Reflect.ownKeys(rule.where).length > 0) {\n for (const fieldName of Reflect.ownKeys(rule.where)) {\n const ref: unknown = typeof fieldName === \"string\" ? rule.where[fieldName] : undefined;\n if (!rlsRecord(ref) || !rlsKeys({ value: ref, keys: [\"context\"] }) || typeof ref.context !== \"string\") {\n add({ rule: \"rls-invalid-rule\", message: \"Ownership equality accepts a context reference only\" });\n continue;\n }\n const field = model.fields.find((f) => f.name === fieldName);\n if (field === undefined) {\n add({ rule: \"rls-unknown-field\", message: `Native RLS requires a direct scalar field, not path ${String(fieldName)}` });\n } else if (field.isList || field.isUnsupported || isLocalDateField({ field }) || isEnumType(field.type) || field.type === \"Json\" || field.type === \"Bytes\") {\n add({ rule: \"rls-unsupported-field\", message: \"Native RLS ownership requires a supported non-list scalar\", field: field.name });\n } else if (context !== undefined) {\n const slot = Object.hasOwn(context, ref.context) ? context[ref.context] : undefined;\n if (slot === undefined) add({ rule: \"rls-unknown-context\", message: `Unknown native RLS context key ${ref.context}`, field: field.name });\n else if (slot.type !== field.type) add({ rule: \"rls-context-type-mismatch\", message: `Context ${ref.context} does not match ${model.name}.${field.name}`, field: field.name });\n }\n }\n continue;\n }\n if (rlsKeys({ value: rule, keys: [\"through\"] }) && typeof rule.through === \"string\") {\n const relation = model.relations.find((r) => r.name === rule.through);\n const target = relation === undefined ? undefined : byName.get(relation.targetModel);\n if (relation === undefined || target === undefined || relation.model !== model.name || relation.isList ||\n (relation.type !== \"oneToOne\" && relation.type !== \"manyToOne\") ||\n !validRlsForeignKey({ model, target, relation })) {\n add({ rule: \"rls-invalid-through\", message: \"Native RLS through requires a to-one relation with an actual, complete foreign key on this model\" });\n continue;\n }\n if (relation.isOptional || relation.fields?.some((name) => model.fields.find((field) => field.name === name)?.isOptional)) {\n add({ rule: \"rls-nullable-through\", message: \"Native RLS through requires a non-nullable parent relation and foreign key; NULL parent links cannot satisfy WITH CHECK. Make the link required or use a direct ownership rule\", field: relation.name });\n continue;\n }\n if (table === \"parent\") add({ rule: \"rls-through-alias-conflict\", message: \"A through table mapped to parent would shadow the fixed policy parent alias; use another table name\" });\n throughTargets.set(model.name, target.name);\n continue;\n }\n add({ rule: \"rls-invalid-rule\", message: \"Native RLS accepts a nonempty equality map or a single through relation; extra properties and operation-specific rules refuse\" });\n }\n for (const [origin, first] of throughTargets) {\n const seen = new Set([origin]);\n let current: string | undefined = first;\n while (current !== undefined && !seen.has(current)) {\n seen.add(current);\n const rule = byName.get(current)?.rls;\n if (rlsRecord(rule) && rlsKeys({ value: rule, keys: [\"where\"] })) break;\n current = throughTargets.get(current);\n }\n if (current === undefined || current === origin || (throughTargets.has(current) && seen.has(current))) {\n issues.push({ rule: \"rls-through-chain-invalid\", message: `Through chain from ${origin} must be acyclic and end in a direct where rule`, model: origin });\n }\n }\n}\n\nfunction validRlsForeignKey(params: { model: ModelIR; target: ModelIR; relation: RelationIR }): boolean {\n const { model, target, relation } = params;\n const fields = relation.fields;\n const refs = relation.references;\n if (fields === undefined || refs === undefined || fields.length === 0 || fields.length !== refs.length ||\n new Set(fields).size !== fields.length || new Set(refs).size !== refs.length) return false;\n const validFields = fields.every((name, index) => {\n const field = model.fields.find((f) => f.name === name);\n const ref = target.fields.find((f) => f.name === refs[index]);\n return field !== undefined && ref !== undefined && !field.isList && !ref.isList && !field.isUnsupported && !ref.isUnsupported &&\n fieldTypeIdentity(field) === fieldTypeIdentity(ref);\n });\n const uniqueSets = [\n ...target.fields.filter((f) => f.isId || f.isUnique).map((f) => [f.name]),\n ...(target.primaryKey === undefined ? [] : [target.primaryKey.fields]),\n ...target.indexes.filter((index) => index.kind === \"unique\" && !isExpressionIndex({ index }) && index.where === undefined).map((index) => index.fields.map((f) => f.name)),\n ];\n return validFields && uniqueSets.some((set) => set.length === refs.length && set.every((name) => refs.includes(name)));\n}\n"
|
|
32
|
+
"/**\n * Structural validation of a SchemaIR.\n *\n * Shared by both schema sources (parser + dsl), so a schema that validates here\n * validates everywhere. Source-specific rules (e.g. Prisma AMBIGUOUS_RELATION\n * candidate detection) live in the source packages and land in P1.\n */\n\nimport type { ExclusionIR } from \"./exclusion.ts\";\nimport { scalarListDefault } from \"./default-values.ts\";\nimport { assertGeneratedColumns, validateGeneratedColumns } from \"./generated-columns.ts\";\nimport { hasJsonSchemaAnnotation, jsonSchemaRefIssue, jsonTypeAnnotationIssue, jsonTypeAnnotationRef } from \"./json-schema-ref.ts\";\nimport { hasValidatorAnnotation, validatorRefIssue } from \"./validator-ref.ts\";\nimport { assertExtensionPlacement } from \"./extension.ts\";\nimport { assertNativeRlsAdmission } from \"./native-rls-admission.ts\";\nimport { assertIndexExpressions, indexKeyDefinitionKey, indexKeyTerms, isExpressionIndex, validateIndexExpressions } from \"./index-expressions.ts\";\nimport { assertIndexOperatorClasses } from \"./index-operator-classes.ts\";\n\nimport { ENUM_STORAGES, enumStorageOf, fieldTypeIdentity, isEnumType, providerToDialect } from \"./ir.ts\";\nimport type { Dialect, EnumIR, FieldIR, IndexIR, ModelIR, RelationIR, SchemaIR } from \"./ir.ts\";\nimport { implicitJoinTable } from \"./m2m.ts\";\nimport { IDENTIFIER_LIMITS, defaultForeignKeyName, defaultExpressionIndexName, defaultIndexName, defaultPrimaryKeyName, identifierLength, implicitJoinTableObjectNames } from \"./physical-names.ts\";\nimport { assertPredicateCapabilities, predicateCapabilityIssue, predicateFieldNames } from \"./predicate.ts\";\nimport type { PredicateBooleanUsage, PredicateExpression, PredicateIR, PredicateResultType, PredicateValue } from \"./predicate.ts\";\nimport { VibeError, unsupportedCapability } from \"./errors.ts\";\nimport { assertSqlNamespace, qualifiedSqlName, sqlNamespaceIssue } from \"./namespaces.ts\";\nimport { DIALECT_CAPABILITIES } from \"./capabilities.ts\";\nimport { timeOfDayType } from \"./time-of-day.ts\";\nimport { isCanonicalLocalDate, isLocalDateField, localDateCheckName } from \"./local-date.ts\";\nimport { RESERVED_CLIENT_NAMES, RESERVED_COLUMN_PREFIX } from \"./reserved.ts\";\nimport { resolveReferentialActions } from \"./referential-actions.ts\";\nimport { assertRowRuleCapability, assertRowRuleReferentialActions, createRowRuleValidationContext, rowRuleObjectNames, rowRuleTriggerName, rowRuleShapeIssue } from \"./row-rules.ts\";\nimport type { RowRuleValidationContext } from \"./row-rules.ts\";\n\n// ─── Issue shape ──────────────────────────────────────────────────\n\nexport type ValidationIssue = {\n /** Stable rule id, e.g. \"duplicate-model\", \"unknown-relation-target\". */\n readonly rule: string;\n readonly message: string;\n readonly model?: string;\n readonly field?: string;\n};\n\n// ─── Validation ───────────────────────────────────────────────────\n\n// ─── Reserved enum names ───────────────────────────────────────────\n\n/**\n * Enum names that would collide with a name the generated client already\n * exports, imports or uses internally (`index.js` / `index.d.ts` / `enums.js` / `enums.d.ts`).\n * An enum `X` emits `X` (constant + literal union), `XFilter`,\n * `XNullableFilter`, `XListFilter` and `XValidator`, so the shared scalar\n * filter prefixes are reserved too: an enum named `String` would redefine\n * `StringFilter`. Mirrored by a generator test against the emitted output so\n * this list cannot silently fall behind the emitters.\n */\nexport const RESERVED_ENUM_NAMES: readonly string[] = [\n // Module-level names and helpers of the generated entries.\n \"sql\", \"decode\", \"sqlProjection\", \"sqlModels\", \"createSqlModel\", \"SqlColumn\", \"SqlFragment\", \"ResultDecoder\", \"ResultReadDecoder\", \"SqlQueryResult\", \"ExtendedDateTime\",\n \"enumValidators\",\n \"enumValidator\",\n \"OmittedKeys\",\n \"ExactKeys\",\n \"PossibleKeys\",\n \"UncertainKeys\",\n \"HasSelectedField\",\n \"Provided\",\n \"SelectionMember\",\n \"SelectionValue\",\n \"BagKeys\",\n \"IncludedRelation\",\n \"IncludedCount\",\n \"ViewDelegateMap\",\n \"extensionManifest\",\n \"extensionMounts\",\n \"computedManifest\",\n // Globals referenced by generated values and declarations must not be shadowed.\n \"Object\", \"Set\", \"JSON\", \"Record\", \"Readonly\", \"ReadonlyArray\", \"Partial\",\n \"Omit\", \"NonNullable\", \"Promise\", \"PromiseLike\", \"Awaited\", \"TemplateStringsArray\",\n \"Date\", \"Uint8Array\",\n \"schema\",\n \"VibeClient\",\n \"VibeClientInstance\",\n \"VibeQueryPromise\", \"vibeQuery\", \"vibeTransaction\",\n \"VibeClientOptions\",\n \"VibeError\",\n \"VibeErrorCode\",\n \"BatchPayload\",\n \"UpsertManyPayload\",\n \"QueryMode\",\n \"RelationStrategy\",\n \"SortOrder\",\n \"SortOrderWithNulls\",\n \"KeysetToken\",\n \"KeysetPage\",\n \"KeysetOptions\",\n \"RowLockRequest\",\n \"GroupByTruncateUnit\",\n \"GroupByKeyName\",\n \"JsonValue\",\n \"InputJsonValue\",\n \"InputJsonArray\",\n \"InputJsonObject\",\n \"BoundJsonFilter\",\n \"BoundJsonFilterCommon\",\n \"BoundJsonNullableFilter\",\n \"VibeTelemetryOptions\",\n \"VibeTelemetryExporter\",\n \"VibeTelemetryOperationEvent\",\n \"VibeTelemetryStatementEvent\",\n \"VibeTelemetryHandle\",\n \"ScopedClientInstance\",\n \"ScopedModelsConfig\",\n \"ScopedNestedMode\",\n // EPIC 6 — the transaction and read-only client surfaces.\n \"VibeTransactionClientInstance\",\n \"ScopedTransactionClientInstance\",\n \"ReadOnlyClientInstance\",\n \"ViewClient\",\n \"ViewDefinitionInput\",\n \"ViewRow\",\n // Names the generated entries import.\n \"createClient\",\n \"DatabaseAdapter\",\n \"DbNow\",\n \"ClientContext\",\n \"QueryOperation\",\n \"QueryEvent\",\n \"QueryObserver\",\n \"QueryObserverFailure\",\n \"Skip\",\n \"TransactionOptions\",\n \"CallbackTransactionOptions\",\n // The object form of `$queryRawUnsafe` / `$executeRawUnsafe` (raw-path statement names).\n \"RawStatement\",\n \"AdvisoryLockOptions\",\n \"StatementDiagnosticsOptions\",\n \"SchemaIR\",\n \"VibeExtension\",\n \"ComputedConfig\",\n \"WriteValidators\",\n // Scalar filter / update-operation prefixes.\n \"String\",\n \"Bool\",\n \"Int\",\n \"BigInt\",\n \"Float\",\n \"Decimal\",\n \"DateTime\",\n \"Json\",\n \"Bytes\",\n ...[\"String\", \"Bool\", \"Int\", \"BigInt\", \"Float\", \"Decimal\", \"DateTime\", \"Json\", \"Bytes\"].flatMap((prefix) =>\n [\"Filter\", \"NullableFilter\", \"ListFilter\"].map((suffix) => `${prefix}${suffix}`),\n ),\n ...[\"Int\", \"Float\", \"BigInt\", \"Decimal\"].flatMap((prefix) =>\n [`${prefix}FieldUpdateOperationsInput`, `Nullable${prefix}FieldUpdateOperationsInput`],\n ),\n];\n\n// Reserve complete generated type families, including private payload helpers.\n// The generator's namespace mirror feeds EVERY emitted name back through this\n// validation; it must not exclude enum/model-prefixed or unexported names.\nconst GENERATED_TYPE_NAMES: {\n readonly enumSuffixes: readonly string[];\n readonly modelSuffixes: readonly string[];\n readonly nestedPrefixes: readonly string[];\n} = {\n enumSuffixes: [\"\", \"Filter\", \"NullableFilter\", \"ListFilter\", \"Validator\"],\n modelSuffixes: [\n \"\", \"ScalarFieldEnum\", \"SelectableFieldEnum\", \"Relations\", \"CountSelect\", \"Select\", \"Include\", \"OmitInput\", \"Args\",\n \"ListRelationFilter\", \"RelationFilter\", \"WhereInput\", \"WhereUniqueInput\", \"OrderByInput\",\n // EPIC A — the key-list filter's row type (`where: { IN: readonly <Model>KeyRow[] }`).\n \"KeyRow\",\n \"ScalarOrderByInput\", \"RelationOrderByInput\", \"RelationFindManyArgs\",\n // To-many relation ordering by a count or an aggregate of a related field.\n \"RelationAggregateOrderByInput\", \"RelationAvgOrderByInput\", \"RelationSumOrderByInput\", \"RelationMinOrderByInput\", \"RelationMaxOrderByInput\",\n \"CreateInput\", \"UncheckedCreateInput\", \"CreateManyInput\", \"UpdateInput\", \"UncheckedUpdateInput\", \"UpdateManyInput\",\n \"CountAggregateInput\", \"AvgAggregateInput\", \"SumAggregateInput\", \"MinAggregateInput\", \"MaxAggregateInput\",\n \"CountAggregateHavingInput\", \"AvgAggregateHavingInput\", \"SumAggregateHavingInput\", \"MinAggregateHavingInput\", \"MaxAggregateHavingInput\",\n \"CountAggregateOrderByInput\", \"AvgAggregateOrderByInput\", \"SumAggregateOrderByInput\", \"MinAggregateOrderByInput\", \"MaxAggregateOrderByInput\",\n \"HavingInput\", \"GroupByOrderByInput\", \"GroupByTruncatedKey\",\n \"FindManyArgs\", \"FindPageArgs\", \"FindFirstArgs\", \"FindUniqueArgs\", \"CreateArgs\", \"ConflictTarget\", \"CreateOnConflictInput\",\n \"CreateOrSkipArgs\", \"CreateManyArgs\", \"CreateManyAndReturnArgs\", \"UpdateArgs\", \"UpdateManyArgs\",\n // EPIC 2 — conditional update + updateManyAndReturn derived names.\n \"UpdateWhereInput\", \"UpdateManyAndReturnArgs\", \"UpsertArgs\",\n // EPIC 10 — batched upsert.\n \"UpsertManyArgs\",\n \"DeleteArgs\", \"DeleteManyArgs\", \"CountArgs\", \"AggregateArgs\", \"GroupByArgs\", \"OmitBase\", \"CountResult\", \"CountPayload\",\n \"AggregateValues\", \"AggregateSelection\", \"CountOutput\",\n \"RelationPayload\", \"ResolvedSelection\", \"IncludePayload\", \"GetPayload\", \"AggregateResult\", \"GroupByResult\", \"Delegate\",\n \"ViewFields\", \"ViewSelect\", \"ViewInclude\", \"ViewNestedArgs\", \"ViewFindManyArgs\", \"ViewFindUniqueArgs\",\n \"ViewScalars\", \"ViewSelectScalars\", \"ViewReveal\", \"ViewRelationResult\", \"ViewIncludeResult\", \"ViewResult\", \"ViewDelegate\",\n // EPIC 6 — the read-only delegate is a SUFFIX form so this mirror covers it.\n \"ReadOnlyDelegate\",\n ],\n nestedPrefixes: [\n \"Create\", \"UncheckedCreate\", \"Update\", \"UncheckedUpdate\", \"ConnectOrCreate\",\n \"CreateNestedMany\", \"UpdateNestedMany\", \"CreateNestedOne\", \"UpdateNestedOne\",\n \"UpdateWithWhereUnique\", \"UpdateManyWithWhere\", \"UpsertWithWhereUnique\",\n ],\n};\n\nconst INVALID_BINDING_NAMES: ReadonlySet<string> = new Set([\n \"await\", \"break\", \"case\", \"catch\", \"class\", \"const\", \"continue\", \"debugger\", \"default\", \"delete\",\n \"do\", \"else\", \"enum\", \"export\", \"extends\", \"false\", \"finally\", \"for\", \"function\", \"if\", \"import\",\n \"in\", \"instanceof\", \"new\", \"null\", \"return\", \"super\", \"switch\", \"this\", \"throw\", \"true\", \"try\",\n \"typeof\", \"var\", \"void\", \"while\", \"with\", \"yield\", \"implements\", \"interface\", \"let\", \"package\",\n \"private\", \"protected\", \"public\", \"static\", \"arguments\", \"eval\",\n \"any\", \"unknown\", \"never\", \"number\", \"bigint\", \"boolean\", \"string\", \"symbol\", \"object\", \"undefined\",\n]);\n\nfunction validateGeneratedNames(params: { schema: SchemaIR; issues: ValidationIssue[] }): void {\n const { schema, issues } = params;\n const owners = new Map(RESERVED_ENUM_NAMES.map((name) => [name, \"generated client\"]));\n if (schema.rls !== undefined) {\n owners.set(\"RlsContext\", \"native RLS client\");\n owners.set(\"BoundVibeClientInstance\", \"native RLS client\");\n owners.set(\"BoundVibeTransactionClientInstance\", \"native RLS client\");\n owners.set(\"OperatorVibeClientInstance\", \"native RLS client\");\n owners.set(\"OperatorVibeTransactionClientInstance\", \"native RLS client\");\n }\n // The handle type `$withPolicy` / `$bypassPolicy` return, emitted beside @@policy only.\n if (schema.models.some((model) => model.policy !== undefined)) owners.set(\"PolicyClientInstance\", \"policy client\");\n // The generator emits the local-date filters only beside a local-date field,\n // so a schema without one keeps its existing `LocalDate*` names.\n if (schema.models.some((model) => model.fields.some((field) => isLocalDateField({ field })))) {\n for (const name of [\"LocalDate\", \"LocalDateFilter\", \"LocalDateNullableFilter\"]) owners.set(name, \"local-date filters\");\n }\n const register = (params: { name: string; owner: string }): void => {\n if (!/^[$_\\p{ID_Start}][$_\\u200c\\u200d\\p{ID_Continue}]*$/u.test(params.name) || INVALID_BINDING_NAMES.has(params.name)) {\n issues.push({ rule: \"invalid-generated-identifier\", message: `Generated name \"${params.name}\" from ${params.owner} is not a legal TypeScript identifier` });\n }\n const previous = owners.get(params.name);\n if (previous !== undefined && previous !== params.owner) {\n issues.push({ rule: \"generated-name-collision\", message: `Generated name \"${params.name}\" from ${params.owner} conflicts with ${previous}` });\n } else {\n owners.set(params.name, params.owner);\n }\n };\n const aliases = new Map<string, string>();\n for (const model of schema.models) {\n const clientName = model.name.charAt(0).toLowerCase() + model.name.slice(1);\n for (const alias of new Set([model.name, clientName])) {\n const previous = aliases.get(alias);\n if (previous !== undefined && previous !== model.name) {\n issues.push({ rule: \"model-client-alias-collision\", message: `Model \"${model.name}\" alias \"${alias}\" conflicts with model \"${previous}\"`, model: model.name });\n }\n aliases.set(alias, model.name);\n }\n if (RESERVED_CLIENT_NAMES.includes(clientName)) {\n issues.push({ rule: \"reserved-client-name\", message: `Model \"${model.name}\" conflicts with client member \"${clientName}\"`, model: model.name });\n }\n const owner = `model \"${model.name}\"`;\n for (const suffix of GENERATED_TYPE_NAMES.modelSuffixes) register({ name: `${model.name}${suffix}`, owner });\n const withouts = [\"\", ...model.relations.map((relation) => `Without${relation.name.charAt(0).toUpperCase()}${relation.name.slice(1)}`)];\n for (const without of withouts) {\n for (const prefix of GENERATED_TYPE_NAMES.nestedPrefixes) register({ name: `${model.name}${prefix}${without}Input`, owner });\n }\n }\n for (const declared of schema.enums) {\n for (const suffix of GENERATED_TYPE_NAMES.enumSuffixes) register({ name: `${declared.name}${suffix}`, owner: `enum \"${declared.name}\"` });\n }\n}\n\ntype ForeignKeyKeyLookup = {\n readonly distinct: ReadonlySet<string>;\n readonly repeated: readonly (readonly string[])[];\n};\n\ntype ValidationLookups = {\n readonly fieldsByModel: ReadonlyMap<ModelIR, ReadonlyMap<string, FieldIR>>;\n readonly partialKeys: Map<ModelIR, ForeignKeyKeyLookup>;\n readonly totalKeys: Map<ModelIR, ForeignKeyKeyLookup>;\n independentTables?: ReadonlySet<string>;\n};\n\nfunction foreignKeyKeys(params: { keys: readonly (readonly string[])[] }): ForeignKeyKeyLookup {\n const distinct = new Set<string>();\n const repeated: (readonly string[])[] = [];\n for (const fields of params.keys) {\n if (new Set(fields).size === fields.length) distinct.add(JSON.stringify([...fields].sort()));\n else repeated.push(fields);\n }\n return { distinct, repeated };\n}\n\nfunction matchesForeignKey(params: { keys: ForeignKeyKeyLookup; references: readonly string[] }): boolean {\n if (params.keys.distinct.has(JSON.stringify([...params.references].sort()))) return true;\n // Preserve the existing subset test for malformed repeated-column keys too.\n return params.keys.repeated.some((fields) => fields.length === params.references.length && fields.every((name) => params.references.includes(name)));\n}\n\nfunction referencesPartialOnly(params: { target: ModelIR; references: readonly string[]; schema: SchemaIR; lookups: ValidationLookups }): boolean {\n const { target, references, schema, lookups } = params;\n let partial = lookups.partialKeys.get(target);\n if (partial === undefined) {\n partial = foreignKeyKeys({ keys: target.indexes.filter((index) => index.kind === \"unique\" && !isExpressionIndex({ index }) && (index.where !== undefined || index.wherePredicate !== undefined)).map((index) => index.fields.map((field) => field.name)) });\n lookups.partialKeys.set(target, partial);\n }\n if (partial.distinct.size === 0 && partial.repeated.length === 0) return false;\n if (!matchesForeignKey({ keys: partial, references })) return false;\n let total = lookups.totalKeys.get(target);\n if (total === undefined) {\n total = foreignKeyKeys({ keys: [\n ...target.fields.filter((field) => field.isId || field.isUnique).map((field) => [field.name]),\n ...(target.primaryKey === undefined ? [] : [target.primaryKey.fields]),\n ...target.indexes.filter((index) => index.kind === \"unique\" && !isExpressionIndex({ index }) && index.where === undefined && index.wherePredicate === undefined).map((index) => index.fields.map((field) => field.name)),\n ] });\n lookups.totalKeys.set(target, total);\n }\n if (matchesForeignKey({ keys: total, references })) return false;\n if (lookups.independentTables === undefined) {\n const tables = new Set<string>();\n for (const object of schema.migrationObjects ?? []) {\n const identity = object.identity;\n if (identity.kind === \"index\" || identity.kind === \"constraint\" && (identity.constraintType === \"unique\" || identity.constraintType === \"primaryKey\")) {\n tables.add(JSON.stringify([identity.table.namespace, identity.table.name]));\n }\n }\n lookups.independentTables = tables;\n }\n const placement = qualifiedSqlName({ name: target.dbName ?? target.name, namespace: target.namespace });\n return !lookups.independentTables.has(JSON.stringify([placement.namespace, placement.name]));\n}\n\n/** Validate a SchemaIR structurally; returns all issues found (empty = valid). */\nexport function validateSchemaIR(params: { schema: SchemaIR }): ValidationIssue[] {\n return validateSchemaWithRowRules({ ...params, rowRules: createRowRuleValidationContext(params) });\n}\n\nfunction validateSchemaWithRowRules(params: { schema: SchemaIR; rowRules: RowRuleValidationContext }): ValidationIssue[] {\n const { schema, rowRules } = params;\n const issues: ValidationIssue[] = [...validateGeneratedColumns({ schema })];\n\n const expressionIssues = validateIndexExpressions({ schema, dialect: providerToDialect({ provider: schema.datasource.provider }) });\n if (expressionIssues.length > 0) return [...issues, ...expressionIssues];\n\n for (const model of schema.models) issues.push(...rowRules.validate({ model }));\n\n for (const entry of [...schema.models, ...schema.enums]) {\n if (entry.namespace === undefined) continue;\n const issue = sqlNamespaceIssue({ namespace: entry.namespace });\n if (issue !== undefined) issues.push({ rule: \"namespace\", message: issue });\n if (providerToDialect({ provider: schema.datasource.provider }) !== \"postgres\") issues.push({ rule: \"namespace-dialect\", message: \"Explicit fixed namespaces require PostgreSQL or PGlite\" });\n }\n\n const modelByName = new Map<string, ModelIR>();\n for (const model of schema.models) {\n if (modelByName.has(model.name)) {\n issues.push({\n rule: \"duplicate-model\",\n message: `Duplicate model name \"${model.name}\"`,\n model: model.name,\n });\n } else {\n modelByName.set(model.name, model);\n }\n }\n\n const enumByName = new Map<string, EnumIR>();\n for (const enumDef of schema.enums) {\n if (enumByName.has(enumDef.name)) {\n issues.push({\n rule: \"duplicate-enum\",\n message: `Duplicate enum name \"${enumDef.name}\"`,\n });\n } else {\n enumByName.set(enumDef.name, enumDef);\n }\n if (enumDef.values.length === 0) {\n issues.push({\n rule: \"empty-enum\",\n message: `Enum \"${enumDef.name}\" has no values`,\n });\n }\n // Members are a set: the generated constant object and the membership\n // lookup both key on the value, so a repeat would silently collapse.\n const seenValues = new Set<string>();\n for (const value of enumDef.values) {\n if (seenValues.has(value)) {\n issues.push({\n rule: \"duplicate-enum-value\",\n message: `Enum \"${enumDef.name}\" lists value \"${value}\" more than once`,\n });\n }\n seenValues.add(value);\n }\n if (enumDef.storage !== undefined && !ENUM_STORAGES.includes(enumDef.storage)) {\n issues.push({\n rule: \"invalid-enum-storage\",\n message: `Enum \"${enumDef.name}\" has storage ${JSON.stringify(enumDef.storage)} — expected one of ${ENUM_STORAGES.join(\", \")}`,\n });\n }\n // Generated-name collisions: the client module exports one value AND one\n // type per enum, so an enum cannot share a model's name or a name the\n // module already exports/imports.\n if (modelByName.has(enumDef.name)) {\n issues.push({\n rule: \"enum-model-name-collision\",\n message: `Enum \"${enumDef.name}\" shares its name with a model — the generated client exports one type per name`,\n model: enumDef.name,\n });\n }\n if (RESERVED_ENUM_NAMES.includes(enumDef.name)) {\n issues.push({\n rule: \"enum-reserved-name\",\n message: `Enum \"${enumDef.name}\" collides with a name the generated client already exports or imports`,\n });\n }\n }\n\n const fieldsByModel = new Map<ModelIR, ReadonlyMap<string, FieldIR>>();\n for (const model of schema.models) {\n const fields = new Map<string, FieldIR>();\n for (const field of model.fields) if (!fields.has(field.name)) fields.set(field.name, field);\n fieldsByModel.set(model, fields);\n }\n const lookups: ValidationLookups = { fieldsByModel, partialKeys: new Map(), totalKeys: new Map() };\n const postgres = providerToDialect({ provider: schema.datasource.provider }) === \"postgres\";\n for (const model of schema.models) {\n validateModel({ model, modelByName, enumByName, issues, schema, lookups, postgres });\n }\n\n // Implicit SELF many-to-many: refused on every dialect, at the earliest\n // knowable moment (validation is shared by the parser, the DSL, generate,\n // db push and migrate, so no authoring path can slip past it).\n //\n // `implicitJoinTable` gives join column \"A\" to the lexicographically first\n // MODEL name. A self relation has one name on both sides, so both relation\n // fields claim \"A\" and traverse the join table in the same direction: the\n // inverse field returns the forward edge set. Rows already written through\n // either field carry that single orientation, so no corrected rule can\n // re-read them without silently changing what deployed data means. VibeORM\n // refuses the shape instead of answering wrongly; a directed self relation\n // is modelled with an explicit junction model.\n //\n // Detection is the ONE shared structural rule and never `relation.type`:\n // `db pull` represents a physical self join table as two unnamed `oneToMany`\n // list sides, and that shape has to refuse identically.\n for (const model of schema.models) {\n for (const relation of model.relations) {\n if (relation.targetModel !== model.name) continue;\n if (!isImplicitManyToManyRelation({ model, relation, models: schema.models })) continue;\n issues.push({\n rule: \"implicit-self-many-to-many\",\n message:\n `Relation \"${model.name}.${relation.name}\" is an implicit self many-to-many. Both sides of a self ` +\n `relation own the same join-table column, so this field and its inverse read the same rows. Replace ` +\n `it with an explicit junction model carrying one foreign key per direction, each under its own ` +\n `@relation name, and point \"${relation.name}\" at that model. Worked example, and the row copy for a ` +\n `join table that already exists: docs/queries.md, \"Directed self relations\".`,\n model: model.name,\n field: relation.name,\n });\n }\n }\n\n // Capability-gated index features, refused at validation — the earliest\n // knowable moment — instead of failing later at DDL time:\n // - partial predicates (where): postgres/pglite/sqlite only;\n // - UNIQUE NULLS NOT DISTINCT: postgres/pglite only (pg 15+), unique only.\n const provider = schema.datasource.provider;\n for (const model of schema.models) {\n for (const index of model.indexes) {\n if (index.where !== undefined && provider === \"mysql\") {\n issues.push({\n rule: \"partial-index-unsupported\",\n message: `Partial index (where) on \"${model.name}\" — mysql has no partial indexes; predicates are postgres/pglite/sqlite only`,\n model: model.name,\n });\n }\n if (index.nullsNotDistinct === true) {\n if (index.kind !== \"unique\") {\n issues.push({\n rule: \"nulls-not-distinct-non-unique\",\n message: `nullsNotDistinct on a non-unique index of \"${model.name}\" — the flag changes UNIQUE null semantics and means nothing elsewhere`,\n model: model.name,\n });\n }\n if (provider === \"sqlite\" || provider === \"mysql\") {\n issues.push({\n rule: \"nulls-not-distinct-unsupported\",\n message: `UNIQUE NULLS NOT DISTINCT on \"${model.name}\" — ${provider} treats NULLs as distinct and has no switch; the flag is postgres/pglite (15+) only`,\n model: model.name,\n });\n }\n }\n }\n }\n\n // `name:` on `@@unique` / `@@id` — the CLIENT selector name (the generated\n // `…WhereUniqueInput` property and the runtime where key). Everywhere it\n // cannot take effect it is refused loudly — never silently dropped (the\n // exact papercut this rule exists to prevent).\n for (const model of schema.models) {\n const fieldNames = fieldsByModel.get(model)!;\n const seenSelectorNames = new Map<string, string>();\n const addressable = (names: readonly string[]): boolean => names.every((name) => fieldNames.get(name)?.isUnsupported !== true);\n const checkSelectorName = (params: {\n clientName: string;\n fields: readonly string[];\n where?: string;\n isUnique: boolean;\n site: string;\n }): void => {\n const { clientName, fields, where, isUnique, site } = params;\n if (!isUnique) {\n issues.push({\n rule: \"client-name-non-unique\",\n message: `name: (\"${clientName}\") on a non-unique index of \"${model.name}\" — a client selector names a UNIQUE group; use map: for the index's database name`,\n model: model.name,\n });\n return;\n }\n if (where !== undefined) {\n issues.push({\n rule: \"client-name-partial-unique\",\n message: `name: (\"${clientName}\") on a partial unique of \"${model.name}\" — a partial unique cannot address a row and never joins WhereUniqueInput`,\n model: model.name,\n });\n return;\n }\n if (fields.length < 2) {\n issues.push({\n rule: \"client-name-single-field\",\n message: `name: (\"${clientName}\") on a single-field ${site} of \"${model.name}\" — the field itself is the selector; name: applies to compound groups only`,\n model: model.name,\n });\n return;\n }\n const tuple = JSON.stringify(fields);\n const previous = seenSelectorNames.get(clientName);\n if (fieldNames.has(clientName) || previous !== undefined && previous !== tuple) {\n issues.push({\n rule: \"client-name-collision\",\n message: `name: (\"${clientName}\") on \"${model.name}\" collides with a field or another unique selector — WhereUniqueInput keys must be unambiguous`,\n model: model.name,\n });\n return;\n }\n seenSelectorNames.set(clientName, tuple);\n };\n if (model.primaryKey !== undefined && (model.primaryKey.clientName !== undefined || model.primaryKey.fields.length > 1 && addressable(model.primaryKey.fields))) {\n checkSelectorName({\n clientName: model.primaryKey.clientName ?? model.primaryKey.fields.join(\"_\"),\n fields: model.primaryKey.fields,\n isUnique: true,\n site: \"@@id\",\n });\n }\n for (const index of model.indexes) {\n if (isExpressionIndex({ index })) continue;\n if (index.clientName === undefined && (index.kind !== \"unique\" || index.where !== undefined || index.fields.length < 2 || !addressable(index.fields.map((field) => field.name)))) continue;\n checkSelectorName({\n clientName: index.clientName ?? index.fields.map((field) => field.name).join(\"_\"),\n fields: index.fields.map((field) => field.name),\n ...(index.where === undefined ? {} : { where: index.where }),\n isUnique: index.kind === \"unique\",\n site: \"@@unique\",\n });\n }\n }\n\n validateIdentifierLengths({ schema, issues });\n validatePhysicalNameUniqueness({ schema, issues, modelByName, fieldsByModel, rowRules });\n validateGeneratedNames({ schema, issues });\n validateNativeRls({ schema, issues });\n return issues;\n}\n\n// ─── Physical name uniqueness ─────────────────────────────────────\n\n/**\n * Two schema objects must never resolve to ONE physical name where the\n * database keeps a single namespace (rule \"duplicate-physical-name\").\n *\n * Two models `@@map`ped to one table, two fields `@map`ped to one column, two\n * enums mapped to one type, or two indexes minting the same name used to pass\n * validation, generate and `db push` — producing a client that queries columns\n * that do not exist (one model permanently broken while every deploy step\n * reported success) or a push that dies at apply time.\n *\n * Namespaces, per dialect:\n * - relations (tables, views, implicit join tables): one per schema on every\n * dialect; on postgres a table also creates a row TYPE, so database-stored\n * enum types share it, and indexes are relations too (so are the indexes a\n * PK/unique constraint creates); on sqlite indexes share the schema namespace.\n * - mysql: index names are per table; FK and CHECK names are per database.\n * - columns: per table. postgres FK/CHECK/exclusion names: per table.\n */\nfunction validatePhysicalNameUniqueness(params: { schema: SchemaIR; issues: ValidationIssue[]; modelByName: ReadonlyMap<string, ModelIR>; fieldsByModel: ReadonlyMap<ModelIR, ReadonlyMap<string, FieldIR>>; rowRules: RowRuleValidationContext }): void {\n const { schema, issues, modelByName, fieldsByModel } = params;\n const dialect = providerToDialect({ provider: schema.datasource.provider });\n const owners = new Map<string, string>();\n let hasRowRuleClaims = false;\n /** Row-rule diagnostic names per table; a handwritten constraint must not share one. */\n const ruleDiagnostics = new Set<string>();\n const triggerNamespace = (table: string): string => dialect === \"postgres\" ? `trigger:${table}` : \"trigger\";\n const collisionName = (name: string): string => dialect === \"postgres\" ? name : dialect === \"sqlite\" ? name.replace(/[A-Z]/g, (character) => character.toLowerCase()) : name.toLowerCase();\n const diagnosticKey = (entry: { namespace: string; table: string; name: string }): string => JSON.stringify([entry.namespace, entry.table, collisionName(entry.name)]);\n /** Claim a name in a namespace; false (and one issue) when it is already taken. */\n const claim = (entry: { namespace: string; physicalNamespace?: string; name: string; what: string; owner: string; model?: string; field?: string; remedy?: string }): boolean => {\n const rowRuleScope = entry.namespace === \"trigger\" || entry.namespace.startsWith(\"row-rule-diagnostic:\");\n const key = JSON.stringify([entry.physicalNamespace ?? \"public\", entry.namespace, rowRuleScope ? collisionName(entry.name) : entry.name]);\n const previous = owners.get(key);\n if (previous === undefined) {\n owners.set(key, `${entry.what} of ${entry.owner}`);\n return true;\n }\n issues.push({\n rule: \"duplicate-physical-name\",\n message: `${entry.what} \"${entry.name}\" of ${entry.owner} collides with the ${previous} — both resolve to one physical ${entry.namespace === \"relation\" ? \"object\" : \"name\"}, and only one can exist${entry.remedy ?? (previous.includes(\"expression index\") ? \"; set an explicit map on the expression index to choose a distinct physical name\" : \"\")}`,\n ...(entry.model === undefined ? {} : { model: entry.model }),\n ...(entry.field === undefined ? {} : { field: entry.field }),\n });\n return false;\n };\n const indexNamespace = (table: string): string => (dialect === \"mysql\" ? `index:${table}` : \"relation\");\n const constraintNamespace = (table: string): string => (dialect === \"mysql\" ? \"constraint\" : `constraint:${table}`);\n\n for (const model of schema.models) {\n const table = model.dbName ?? model.name;\n const physicalNamespace = qualifiedSqlName({ name: table, namespace: model.namespace }).namespace;\n // A table collision is reported ONCE; the second model's columns and\n // constraints would only echo it.\n if (!claim({ namespace: \"relation\", physicalNamespace, name: table, what: model.isView ? \"view\" : \"table\", owner: `model \"${model.name}\"`, model: model.name })) continue;\n for (const fieldIR of model.fields) {\n claim({ namespace: `column:${table}`, physicalNamespace, name: fieldIR.dbName ?? fieldIR.name, what: \"column\", owner: `field \"${model.name}.${fieldIR.name}\"`, model: model.name, field: fieldIR.name });\n }\n if (model.isView) continue;\n const fields = fieldsByModel.get(model)!;\n const columnOf = (name: string): string => fields.get(name)?.dbName ?? name;\n // Index declarations that the migration normalizer folds into ONE object\n // (`@unique f` + `@@unique([f])`) are one name, not a collision; the key\n // mirrors the normalizer's comparison key.\n const seenIndexKeys = new Set<string>();\n const declarations: { readonly index: IndexIR; readonly site: string }[] = [\n ...model.indexes.map((index) => ({ index, site: index.kind === \"unique\" ? \"@@unique\" : \"@@index\" })),\n ...model.fields.filter((fieldIR) => fieldIR.isUnique).map((fieldIR) => ({ index: { kind: \"unique\", fields: [{ name: fieldIR.name }] } as IndexIR, site: `@unique on \"${fieldIR.name}\"` })),\n ];\n for (const { index, site } of declarations) {\n const unique = index.kind === \"unique\";\n const columns = index.fields.map((entry) => [columnOf(entry.name), entry.sort === \"desc\", entry.operatorClass === undefined ? null : [entry.operatorClass.namespace, entry.operatorClass.name]]);\n const key = isExpressionIndex({ index }) ? indexKeyDefinitionKey({ index, model }) : JSON.stringify([unique, index.nullsNotDistinct === true, unique ? \"btree\" : index.kind, columns, index.where?.trim() ?? \"\"]);\n if (seenIndexKeys.has(key)) continue;\n seenIndexKeys.add(key);\n const name = index.name ?? (isExpressionIndex({ index }) ? defaultExpressionIndexName({ table, model, index, dialect }) : defaultIndexName({ table, columns: index.fields.map((entry) => columnOf(entry.name)), unique, dialect }));\n claim({ namespace: indexNamespace(table), physicalNamespace, name, what: isExpressionIndex({ index }) ? unique ? \"unique expression index\" : \"expression index\" : unique ? \"unique index\" : \"index\", owner: `${site} on \"${model.name}\"`, model: model.name, ...(isExpressionIndex({ index }) ? { remedy: \"; set an explicit map on the expression index to choose a distinct physical name\" } : {}) });\n if (index.constraintName !== undefined) {\n claim({ namespace: constraintNamespace(table), physicalNamespace, name: index.constraintName, what: \"unique constraint\", owner: `${site} on \"${model.name}\"`, model: model.name });\n }\n }\n if (dialect === \"postgres\" && (model.primaryKey !== undefined || model.fields.some((fieldIR) => fieldIR.isId))) {\n const name = model.primaryKeyConstraintName ?? defaultPrimaryKeyName({ table, dialect });\n claim({ namespace: \"relation\", physicalNamespace, name, what: \"primary key\", owner: `model \"${model.name}\"`, model: model.name });\n claim({ namespace: constraintNamespace(table), physicalNamespace, name, what: \"primary key\", owner: `model \"${model.name}\"`, model: model.name });\n }\n for (const relation of model.relations) {\n if (relation.fields === undefined || relation.fields.length === 0) continue;\n const target = modelByName.get(relation.targetModel);\n if (target !== undefined && target.isView) continue;\n const name = relation.constraintName ?? defaultForeignKeyName({ table, columns: relation.fields.map((entry) => columnOf(entry)), dialect });\n claim({ namespace: constraintNamespace(table), physicalNamespace, name, what: \"foreign key\", owner: `relation \"${model.name}.${relation.name}\"`, model: model.name });\n }\n if (dialect === \"sqlite\") {\n for (const field of model.fields) {\n if (!isLocalDateField({ field })) continue;\n claim({ namespace: constraintNamespace(table), physicalNamespace, name: localDateCheckName({ table, column: field.dbName ?? field.name }), what: \"owned local-date CHECK\", owner: `field \"${model.name}.${field.name}\"`, model: model.name, field: field.name });\n }\n }\n for (const checkIR of model.checks ?? []) {\n claim({ namespace: constraintNamespace(table), physicalNamespace, name: checkIR.name, what: \"CHECK constraint\", owner: `model \"${model.name}\"`, model: model.name });\n }\n if (Array.isArray(model.rowRules)) for (const rule of model.rowRules) {\n if (rowRuleShapeIssue({ value: rule }) !== undefined) continue;\n hasRowRuleClaims = true;\n const pair = rowRuleObjectNames({ rule });\n const owner = `row rule \"${model.name}.${rule.name}\" (supply an explicit, distinct name stem)`;\n const ruleNamespace = dialect === \"sqlite\" ? \"main\" : physicalNamespace;\n if (dialect === \"postgres\") claim({ namespace: \"function:[]\", physicalNamespace, name: pair.functionName, what: \"row-rule function\", owner, model: model.name });\n const names = dialect === \"postgres\" ? [pair.triggerName] : (rule.kind === \"appendOnly\" ? [\"update\", \"delete\"] as const : [\"update\"] as const).map((event) => rowRuleTriggerName({ rule, event }));\n for (const name of names) {\n claim({ namespace: triggerNamespace(table), physicalNamespace: ruleNamespace, name, what: \"row-rule trigger\", owner, model: model.name });\n if (dialect === \"postgres\") claim({ namespace: constraintNamespace(table), physicalNamespace, name, what: \"row-rule diagnostic name\", owner, model: model.name });\n else {\n claim({ namespace: `row-rule-diagnostic:${table}`, physicalNamespace: ruleNamespace, name, what: \"row-rule diagnostic name\", owner, model: model.name });\n const constraints = [\n ...(model.checks ?? []).map((check) => check.name),\n ...model.indexes.flatMap((index) => index.constraintName === undefined ? [] : [index.constraintName]),\n ...model.relations.filter((relation) => (relation.fields?.length ?? 0) > 0).map((relation) => relation.constraintName ?? defaultForeignKeyName({ table, columns: relation.fields!.map(columnOf), dialect })),\n ...(dialect === \"sqlite\" ? model.fields.filter((field) => isLocalDateField({ field })).map((field) => localDateCheckName({ table, column: field.dbName ?? field.name })) : []),\n ];\n for (const constraint of constraints) if (collisionName(constraint) === collisionName(name)) claim({ namespace: `row-rule-diagnostic:${table}`, physicalNamespace: ruleNamespace, name: constraint, what: \"constraint diagnostic name\", owner: `model \"${model.name}\"`, model: model.name });\n }\n ruleDiagnostics.add(diagnosticKey({ namespace: ruleNamespace, table, name }));\n }\n }\n for (const exclusion of model.exclusions ?? []) {\n claim({ namespace: constraintNamespace(table), physicalNamespace, name: exclusion.name, what: \"exclusion constraint\", owner: `model \"${model.name}\"`, model: model.name });\n if (dialect === \"postgres\") claim({ namespace: \"relation\", physicalNamespace, name: exclusion.name, what: \"exclusion constraint\", owner: `model \"${model.name}\"`, model: model.name });\n }\n }\n for (const object of hasRowRuleClaims ? params.rowRules.objects() : []) {\n const identity = object.identity;\n if (dialect === \"postgres\" && identity.kind === \"function\") claim({ namespace: `function:${JSON.stringify(identity.argumentTypes.map((type) => [type.namespace, type.name]))}`, physicalNamespace: identity.name.namespace, name: identity.name.name, what: \"migration function\", owner: object.id });\n if (identity.kind === \"trigger\") {\n if (dialect === \"mysql\" && /[^\\x00-\\x7F]/.test(identity.name)) issues.push({ rule: \"row-rule-name-collation\", message: `MySQL migration trigger ${identity.name} cannot be qualified against declared row rules without engine trigger-name collation evidence; use an ASCII name` });\n claim({ namespace: triggerNamespace(identity.table.name), physicalNamespace: identity.table.namespace, name: identity.name, what: \"migration trigger\", owner: object.id });\n }\n // `meta.constraint` must name one rule: a handwritten constraint cannot reuse its table's diagnostic name.\n if (identity.kind === \"constraint\" && ruleDiagnostics.has(diagnosticKey({ namespace: identity.table.namespace, table: identity.table.name, name: identity.name }))) claim({ namespace: dialect === \"postgres\" ? constraintNamespace(identity.table.name) : `row-rule-diagnostic:${identity.table.name}`, physicalNamespace: identity.table.namespace, name: identity.name, what: \"migration constraint\", owner: object.id });\n }\n if (dialect === \"postgres\") {\n for (const enumDef of schema.enums) {\n if (enumStorageOf({ enumDef }) !== \"database\") continue;\n claim({ namespace: \"relation\", physicalNamespace: qualifiedSqlName({ name: enumDef.dbName ?? enumDef.name, namespace: enumDef.namespace }).namespace, name: enumDef.dbName ?? enumDef.name, what: \"enum type\", owner: `enum \"${enumDef.name}\"` });\n }\n }\n const seenJoinTables = new Set<string>();\n for (const model of schema.models) {\n for (const relation of model.relations) {\n if (relation.targetModel === model.name) continue;\n if (!isImplicitManyToManyRelation({ model, relation, models: schema.models })) continue;\n const target = modelByName.get(relation.targetModel);\n const physicalNamespace = model.namespace ?? \"public\";\n if ((target?.namespace ?? \"public\") !== physicalNamespace) {\n issues.push({ rule: \"implicit-join-namespace\", message: \"Implicit many-to-many endpoints must share one fixed namespace\", model: model.name, field: relation.name });\n continue;\n }\n const join = implicitJoinTable({ modelA: model.name, modelB: relation.targetModel, ...(relation.relationName === undefined ? {} : { relationName: relation.relationName }) });\n const joinKey = JSON.stringify([physicalNamespace, join.tableName]);\n if (seenJoinTables.has(joinKey)) continue;\n seenJoinTables.add(joinKey);\n const owner = `implicit relation \"${model.name}.${relation.name}\"`;\n claim({ namespace: \"relation\", physicalNamespace, name: join.tableName, what: \"join table\", owner, model: model.name });\n const derived = implicitJoinTableObjectNames({ table: join.tableName });\n claim({ namespace: indexNamespace(join.tableName), physicalNamespace, name: derived.uniqueIndex, what: \"unique index\", owner, model: model.name });\n claim({ namespace: indexNamespace(join.tableName), physicalNamespace, name: derived.indexB, what: \"index\", owner, model: model.name });\n claim({ namespace: constraintNamespace(join.tableName), physicalNamespace, name: derived.foreignKeyA, what: \"foreign key\", owner, model: model.name });\n claim({ namespace: constraintNamespace(join.tableName), physicalNamespace, name: derived.foreignKeyB, what: \"foreign key\", owner, model: model.name });\n }\n }\n}\n\n// ─── Physical identifier length ───────────────────────────────────\n\n/**\n * Per-dialect identifier length gates, refused at validation — the earliest\n * knowable moment — instead of failing (or worse, \"succeeding\") at DDL time.\n *\n * - postgres/pglite: identifiers past 63 BYTES (NAMEDATALEN - 1) are silently\n * TRUNCATED with a NOTICE. The created object then never carries the\n * declared name, so the differ re-plans the same drop/create forever and the\n * migration never converges — with a partial unique index, the invariant it\n * enforces silently disappears in that window.\n * - mysql: identifiers past 64 CHARACTERS are a hard server error\n * (ER_TOO_LONG_IDENT) at execute time; refusing here is just earlier.\n * - sqlite: no meaningful limit; nothing to check.\n *\n * Covers every EXPLICIT physical name migrate emits from the IR: table, column\n * and enum type names, explicit index/constraint names, and implicit join\n * tables with their derived index/FK names (fixed spellings whose only remedy\n * is a shorter relation name). Default-minted index/FK/PK names are never\n * refused: the shared physical-names helpers shorten them to the limit with\n * Prisma's own formula, so a schema Prisma accepts is accepted here and the\n * minted name IS the name the database creates.\n */\nfunction validateIdentifierLengths(params: { schema: SchemaIR; issues: ValidationIssue[] }): void {\n const { schema, issues } = params;\n const dialect = providerToDialect({ provider: schema.datasource.provider });\n const limit = IDENTIFIER_LIMITS[dialect];\n if (limit === undefined) return;\n const { max, unit } = limit;\n const consequence = dialect === \"postgres\"\n ? `PostgreSQL silently truncates identifiers to ${max} bytes (NAMEDATALEN - 1), so the created object never carries this name and migrations cannot converge`\n : `MySQL refuses identifiers longer than ${max} characters (ER_TOO_LONG_IDENT)`;\n const check = (entry: { name: string; what: string; model?: string; remedy: string }): void => {\n const length = identifierLength({ name: entry.name, dialect });\n if (length <= max) return;\n issues.push({\n rule: \"identifier-too-long\",\n message: `${entry.what} \"${entry.name}\" is ${length} ${unit} — ${consequence}. ${entry.remedy}`,\n ...(entry.model === undefined ? {} : { model: entry.model }),\n });\n };\n for (const model of schema.models) {\n const table = model.dbName ?? model.name;\n check({ name: table, what: model.isView ? \"View name\" : \"Table name\", model: model.name, remedy: `Map \"${model.name}\" to a shorter physical name (@@map).` });\n for (const fieldIR of model.fields) {\n check({ name: fieldIR.dbName ?? fieldIR.name, what: \"Column name\", model: model.name, remedy: `Map \"${model.name}.${fieldIR.name}\" to a shorter column name (@map).` });\n }\n if (model.isView) continue;\n // Explicit index / constraint names only: a minted default is shortened by\n // the shared physical-names helpers and can never exceed the limit.\n for (const index of model.indexes) {\n if (index.name !== undefined) {\n check({ name: index.name, what: index.kind === \"unique\" ? \"Unique index name\" : \"Index name\", model: model.name, remedy: \"Shorten the index name (map:).\" });\n }\n if (index.constraintName !== undefined) {\n check({ name: index.constraintName, what: \"Unique constraint name\", model: model.name, remedy: \"Shorten the constraint name.\" });\n }\n }\n if (model.primaryKeyConstraintName !== undefined) {\n check({ name: model.primaryKeyConstraintName, what: \"Primary key constraint name\", model: model.name, remedy: \"Shorten the constraint name (map:).\" });\n }\n for (const relation of model.relations) {\n if (relation.constraintName === undefined) continue;\n check({ name: relation.constraintName, what: \"Foreign key constraint name\", model: model.name, remedy: \"Shorten the constraint name (map:).\" });\n }\n for (const checkIR of model.checks ?? []) {\n check({ name: checkIR.name, what: \"CHECK constraint name\", model: model.name, remedy: \"Shorten the CHECK name.\" });\n }\n for (const exclusion of model.exclusions ?? []) {\n check({ name: exclusion.name, what: \"Exclusion constraint name\", model: model.name, remedy: \"Shorten the exclusion name.\" });\n }\n }\n // A natively stored enum is a CREATE TYPE on postgres only (mysql inlines\n // ENUM(...) into the column; string storage is an ordinary text column).\n if (dialect === \"postgres\") {\n for (const enumDef of schema.enums) {\n if (enumStorageOf({ enumDef }) !== \"database\") continue;\n check({ name: enumDef.dbName ?? enumDef.name, what: \"Enum type name\", remedy: `Map enum \"${enumDef.name}\" to a shorter type name (@@map).` });\n }\n }\n // Implicit join tables mint four derived objects; their names are fixed by\n // the m2m convention, so the only remedy is a shorter relation key.\n const seenJoinTables = new Set<string>();\n for (const model of schema.models) {\n for (const relation of model.relations) {\n if (relation.targetModel === model.name) continue; // self M2M is refused separately\n if (!isImplicitManyToManyRelation({ model, relation, models: schema.models })) continue;\n const join = implicitJoinTable({ modelA: model.name, modelB: relation.targetModel, ...(relation.relationName === undefined ? {} : { relationName: relation.relationName }) });\n if (seenJoinTables.has(join.tableName)) continue;\n seenJoinTables.add(join.tableName);\n const remedy = `Give the relation an explicit shorter name (@relation(\"...\")).`;\n check({ name: join.tableName, what: \"Implicit join table name\", model: model.name, remedy });\n const derived = implicitJoinTableObjectNames({ table: join.tableName });\n check({ name: derived.uniqueIndex, what: \"Implicit join table index name\", model: model.name, remedy });\n check({ name: derived.indexB, what: \"Implicit join table index name\", model: model.name, remedy });\n check({ name: derived.foreignKeyA, what: \"Implicit join table foreign key name\", model: model.name, remedy });\n check({ name: derived.foreignKeyB, what: \"Implicit join table foreign key name\", model: model.name, remedy });\n }\n }\n}\n\nfunction validateModel(params: {\n model: ModelIR;\n modelByName: Map<string, ModelIR>;\n enumByName: Map<string, EnumIR>;\n issues: ValidationIssue[];\n schema: SchemaIR;\n lookups: ValidationLookups;\n postgres: boolean;\n}): void {\n const { model, modelByName, enumByName, issues, lookups, postgres } = params;\n\n // Field + relation names share one namespace on the model.\n const memberNames = new Set<string>();\n for (const field of model.fields) {\n if (memberNames.has(field.name)) {\n issues.push({\n rule: \"duplicate-field\",\n message: `Duplicate field \"${field.name}\" on model \"${model.name}\"`,\n model: model.name,\n field: field.name,\n });\n }\n memberNames.add(field.name);\n const typedIssue = jsonTypeAnnotationIssue({ documentation: field.documentation });\n if (typedIssue !== undefined) issues.push({ rule: \"invalid-json-type-ref\", message: typedIssue, model: model.name, field: field.name });\n const hasType = typedIssue === undefined && jsonTypeAnnotationRef({ documentation: field.documentation }) !== undefined;\n if (hasType && field.type !== \"Json\") issues.push({ rule: \"json-type-non-json\", message: \"JSON type assertions are only valid on Json fields\", model: model.name, field: field.name });\n if (field.jsonSchema !== undefined) {\n const issue = jsonSchemaRefIssue({ value: field.jsonSchema });\n if (issue !== undefined) issues.push({ rule: \"invalid-json-schema-ref\", message: issue, model: model.name, field: field.name });\n if (field.type !== \"Json\" || field.isUnsupported === true) issues.push({ rule: \"json-schema-non-json\", message: \"JSON schemas are only valid on queryable Json fields\", model: model.name, field: field.name });\n if (hasType) issues.push({ rule: \"conflicting-json-schema-ref\", message: \"A field cannot declare both @type and a JSON schema\", model: model.name, field: field.name });\n }\n if (hasJsonSchemaAnnotation({ documentation: field.documentation })) issues.push({ rule: \"unnormalized-json-schema-ref\", message: \"Normalize @schema documentation into FieldIR.jsonSchema before consuming SchemaIR\", model: model.name, field: field.name });\n if (field.validator !== undefined) {\n const issue = validatorRefIssue({ value: field.validator });\n if (issue !== undefined) issues.push({ rule: \"invalid-validator-ref\", message: issue, model: model.name, field: field.name });\n if (field.type === \"Json\" || field.isUnsupported === true) issues.push({ rule: \"validator-non-scalar\", message: \"Validators are only valid on queryable non-JSON scalar or enum fields; use .schema() for Json\", model: model.name, field: field.name });\n if (field.jsonSchema !== undefined || hasType) issues.push({ rule: \"conflicting-validator-ref\", message: \"A field cannot combine a scalar validator with a JSON schema or type assertion\", model: model.name, field: field.name });\n }\n if (hasValidatorAnnotation({ documentation: field.documentation })) issues.push({ rule: \"unnormalized-validator-ref\", message: \"Normalize @validate documentation into FieldIR.validator before consuming SchemaIR\", model: model.name, field: field.name });\n const typeIdentity = field.nativeTypeIdentity;\n if (typeIdentity !== undefined && (typeIdentity === null || typeof typeIdentity !== \"object\" || field.isUnsupported !== true || typeof typeIdentity.source !== \"string\" || typeIdentity.source !== field.nativeType || typeof typeIdentity.namespace !== \"string\" || typeIdentity.namespace.length === 0 || typeIdentity.namespace.includes(\"\\0\"))) {\n issues.push({ rule: \"invalid-native-type-identity\", message: `PostgreSQL type identity on \"${model.name}.${field.name}\" must be bound to its unsupported declaration`, model: model.name, field: field.name });\n }\n\n const defaultValue = field.default;\n if (isLocalDateField({ field })) {\n if (field.isList) issues.push({ rule: \"local-date-list\", message: `Local-date field \"${model.name}.${field.name}\" cannot be a list`, model: model.name, field: field.name });\n if (field.isUpdatedAt) issues.push({ rule: \"local-date-updated-at\", message: `Local-date field \"${model.name}.${field.name}\" cannot use @updatedAt`, model: model.name, field: field.name });\n if (defaultValue !== undefined && (defaultValue.kind !== \"literal\" || !isCanonicalLocalDate({ value: defaultValue.value }))) {\n issues.push({ rule: \"local-date-default\", message: `Default on \"${model.name}.${field.name}\" must be a canonical YYYY-MM-DD calendar-day literal in years 0001–9999; generated defaults are not supported`, model: model.name, field: field.name });\n }\n }\n if (defaultValue !== undefined && defaultValue.kind !== \"dbgenerated\" && defaultValue.kind !== \"list\") {\n let valid = !field.isList;\n if (defaultValue.kind === \"now\") valid &&= field.type === \"DateTime\";\n else if (defaultValue.kind === \"autoincrement\") valid &&= !field.isOptional && (field.type === \"Int\" || field.type === \"BigInt\");\n else if (defaultValue.kind === \"uuid\" || defaultValue.kind === \"cuid\" || defaultValue.kind === \"ulid\" || defaultValue.kind === \"nanoid\") valid &&= field.type === \"String\";\n else if (defaultValue.kind === \"enumValue\") valid &&= isEnumType(field.type);\n else if (defaultValue.kind === \"literal\") {\n const value = defaultValue.value;\n if (isEnumType(field.type)) valid &&= typeof value === \"string\";\n else switch (field.type) {\n case \"Int\": valid &&= typeof value === \"number\" && Number.isInteger(value) && value >= -2147483648 && value <= 2147483647; break;\n case \"BigInt\": valid &&= (typeof value === \"number\" && Number.isSafeInteger(value)) || (typeof value === \"string\" && /^-?\\d+$/.test(value)); break;\n case \"Float\":\n case \"Decimal\": valid &&= (typeof value === \"number\" && Number.isFinite(value)) || (typeof value === \"string\" && /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value)); break;\n case \"Boolean\": valid &&= typeof value === \"boolean\"; break;\n case \"DateTime\": valid &&= typeof value === \"string\" && Number.isFinite(Date.parse(value)); break;\n case \"String\":\n case \"Json\":\n case \"Bytes\": valid &&= typeof value === \"string\"; break;\n }\n }\n if (!valid) issues.push({ rule: \"invalid-scalar-default\", message: `Default on \"${model.name}.${field.name}\" does not match its field type`, model: model.name, field: field.name });\n }\n\n if (isEnumType(field.type)) {\n const enumDef = enumByName.get(field.type.enum);\n if (enumDef === undefined) {\n issues.push({\n rule: \"unknown-enum\",\n message: `Field \"${model.name}.${field.name}\" references unknown enum \"${field.type.enum}\"`,\n model: model.name,\n field: field.name,\n });\n } else {\n // A default must be a member — `@default(FOO)` (enumValue) and the\n // quoted `@default(\"FOO\")` (literal) spellings alike. Checked here,\n // once, for both schema sources.\n const defaultValue = field.default;\n const candidate =\n defaultValue === undefined\n ? undefined\n : defaultValue.kind === \"enumValue\"\n ? defaultValue.value\n : defaultValue.kind === \"literal\" && typeof defaultValue.value === \"string\"\n ? defaultValue.value\n : undefined;\n if (candidate !== undefined && !enumDef.values.includes(candidate)) {\n issues.push({\n rule: \"enum-default-not-member\",\n message: `Default \"${candidate}\" on \"${model.name}.${field.name}\" is not a member of enum \"${enumDef.name}\" (${enumDef.values.join(\", \")})`,\n model: model.name,\n field: field.name,\n });\n }\n }\n }\n\n // The runtime aliases its own projections (M2M stitch key `__vibe_parent`,\n // hidden order fields) under this prefix; a user column there would\n // collide and be silently misgrouped/stripped. `.prisma` field names\n // cannot start with `_`, but `@map` and hand-built IR can.\n const columnName = field.dbName ?? field.name;\n if (columnName.startsWith(RESERVED_COLUMN_PREFIX)) {\n issues.push({\n rule: \"reserved-column-prefix\",\n message:\n `Field \"${model.name}.${field.name}\" maps to column \"${columnName}\" — the \"${RESERVED_COLUMN_PREFIX}\" ` +\n `prefix is reserved for VibeORM's own projection aliases`,\n model: model.name,\n field: field.name,\n });\n }\n }\n\n for (const relation of model.relations) {\n if (memberNames.has(relation.name)) {\n issues.push({\n rule: \"duplicate-field\",\n message: `Relation \"${relation.name}\" collides with another member on model \"${model.name}\"`,\n model: model.name,\n field: relation.name,\n });\n }\n memberNames.add(relation.name);\n }\n\n // Primary key presence (views are exempt); compound keys use model.primaryKey.\n const fieldNames = new Set(lookups.fieldsByModel.get(model)!.keys());\n const idFields = model.fields.filter((f) => f.isId);\n const hasIdField = idFields.length > 0;\n if (idFields.length > 1) {\n issues.push({\n rule: \"multiple-field-ids\",\n message: `Model \"${model.name}\" has multiple @id fields (${idFields.map((field) => field.name).join(\", \")}); declare one compound primary key instead`,\n model: model.name,\n });\n }\n if (idFields.length === 1 && model.primaryKey !== undefined &&\n (model.primaryKey.fields.length !== 1 || model.primaryKey.fields[0] !== idFields[0]?.name)) {\n issues.push({\n rule: \"conflicting-primary-key\",\n message: `Model \"${model.name}\" declares @id on \"${idFields[0]?.name}\" and a different block primary key; both declarations must name the same single logical field`,\n model: model.name,\n });\n }\n if (!model.isView && !hasIdField && model.primaryKey === undefined) {\n issues.push({\n rule: \"missing-id\",\n message: `Model \"${model.name}\" has no @id field and no composite primary key`,\n model: model.name,\n });\n }\n if (model.primaryKey !== undefined) {\n for (const pkField of model.primaryKey.fields) {\n if (!fieldNames.has(pkField)) {\n issues.push({\n rule: \"unknown-pk-field\",\n message: `Composite primary key on \"${model.name}\" references unknown field \"${pkField}\"`,\n model: model.name,\n field: pkField,\n });\n }\n }\n }\n\n // Relations: target exists, FK columns exist both sides, arities match.\n for (const relation of model.relations) {\n if (\"validator\" in relation || \"documentation\" in relation && typeof relation.documentation === \"string\" && hasValidatorAnnotation({ documentation: relation.documentation })) issues.push({ rule: \"validator-non-scalar\", message: \"Validators cannot be declared on relations\", model: model.name, field: relation.name });\n const target = modelByName.get(relation.targetModel);\n if (target === undefined) {\n issues.push({\n rule: \"unknown-relation-target\",\n message: `Relation \"${model.name}.${relation.name}\" targets unknown model \"${relation.targetModel}\"`,\n model: model.name,\n field: relation.name,\n });\n }\n\n const hasFields = relation.fields !== undefined && relation.fields.length > 0;\n const hasReferences = relation.references !== undefined && relation.references.length > 0;\n if (hasFields !== hasReferences) {\n issues.push({\n rule: \"relation-fields-mismatch\",\n message: `Relation \"${model.name}.${relation.name}\" must declare fields and references together`,\n model: model.name,\n field: relation.name,\n });\n }\n if (hasFields && hasReferences && relation.fields !== undefined && relation.references !== undefined) {\n if (relation.fields.length !== relation.references.length) {\n issues.push({\n rule: \"relation-fields-mismatch\",\n message: `Relation \"${model.name}.${relation.name}\" has ${relation.fields.length} fields but ${relation.references.length} references`,\n model: model.name,\n field: relation.name,\n });\n }\n for (const fkField of relation.fields) {\n if (!fieldNames.has(fkField)) {\n issues.push({\n rule: \"unknown-relation-field\",\n message: `Relation \"${model.name}.${relation.name}\" uses unknown field \"${fkField}\"`,\n model: model.name,\n field: relation.name,\n });\n }\n }\n if (postgres && new Set(relation.references).size !== relation.references.length) {\n issues.push({ rule: \"relation-duplicate-column\", message: `Relation \"${model.name}.${relation.name}\" repeats a referenced column`, model: model.name, field: relation.name });\n }\n if (target !== undefined) {\n if (postgres && referencesPartialOnly({ target, references: relation.references, schema: params.schema, lookups })) {\n issues.push({ rule: \"relation-partial-only-target\", message: `Relation \"${model.name}.${relation.name}\" references only a partial unique key`, model: model.name, field: relation.name });\n }\n const targetFieldNames = lookups.fieldsByModel.get(target)!;\n for (const [index, fkName] of relation.fields.entries()) {\n const own = lookups.fieldsByModel.get(model)?.get(fkName);\n const referenced = targetFieldNames.get(relation.references[index] ?? \"\");\n if (own !== undefined && referenced !== undefined && (isLocalDateField({ field: own }) || isLocalDateField({ field: referenced })) && fieldTypeIdentity(own) !== fieldTypeIdentity(referenced)) {\n issues.push({ rule: \"relation-type-mismatch\", message: `Relation \"${model.name}.${relation.name}\" pairs a local date with a different logical type; both foreign-key columns must be local dates`, model: model.name, field: fkName });\n }\n }\n for (const refField of relation.references) {\n if (!targetFieldNames.has(refField)) {\n issues.push({\n rule: \"unknown-relation-reference\",\n message: `Relation \"${model.name}.${relation.name}\" references unknown field \"${relation.targetModel}.${refField}\"`,\n model: model.name,\n field: relation.name,\n });\n }\n }\n }\n }\n }\n\n // @collation: String fields only — collation has no meaning off text.\n for (const field of model.fields) {\n if (field.collation !== undefined && (field.type !== \"String\" || isLocalDateField({ field }))) {\n issues.push({\n rule: \"collation-non-string\",\n message: `@collation on \"${model.name}.${field.name}\" — collation is only valid on text String fields, not local dates`,\n model: model.name,\n field: field.name,\n });\n }\n }\n\n // @@policy: the field must exist and be a required, non-list scalar — an\n // optional scoping column cannot fail closed.\n if (model.policy !== undefined) {\n const policyField = model.fields.find((field) => field.name === model.policy?.field);\n if (policyField === undefined) {\n issues.push({\n rule: \"policy-unknown-field\",\n message: `@@policy on \"${model.name}\" references unknown field \"${model.policy.field}\"`,\n model: model.name,\n });\n } else if (policyField.isList) {\n issues.push({\n rule: \"policy-list-field\",\n message: `@@policy field \"${model.name}.${policyField.name}\" must be a non-list scalar`,\n model: model.name,\n field: policyField.name,\n });\n } else if (policyField.isOptional) {\n issues.push({\n rule: \"policy-optional-field\",\n message: `@@policy field \"${model.name}.${policyField.name}\" must be required — an optional scoping column cannot fail closed`,\n model: model.name,\n field: policyField.name,\n });\n }\n }\n\n // Checks: non-empty, and NAME-unique (names key the migration diff).\n const checkNames = new Set<string>();\n for (const check of model.checks ?? []) {\n if (check.name.trim() === \"\" || check.expression.trim() === \"\") {\n issues.push({\n rule: \"invalid-check\",\n message: `CHECK on \"${model.name}\" needs a non-empty name and expression`,\n model: model.name,\n });\n }\n if (checkNames.has(check.name)) {\n issues.push({\n rule: \"duplicate-check\",\n message: `Duplicate CHECK name \"${check.name}\" on \"${model.name}\" — names key the migration diff`,\n model: model.name,\n });\n }\n checkNames.add(check.name);\n if (check.predicate !== undefined) {\n validatePredicateFields({\n predicate: check.predicate,\n model,\n fieldNames,\n site: `CHECK \"${check.name}\"`,\n usage: \"check\",\n enums: params.schema.enums,\n dialect: providerToDialect({ provider: params.schema.datasource.provider }),\n issues,\n });\n }\n }\n\n // Indexes reference real fields.\n for (const index of model.indexes) {\n for (const indexField of index.fields) {\n if (!fieldNames.has(indexField.name)) {\n issues.push({\n rule: \"unknown-index-field\",\n message: `Index on \"${model.name}\" references unknown field \"${indexField.name}\"`,\n model: model.name,\n field: indexField.name,\n });\n }\n }\n if (index.wherePredicate !== undefined) {\n validatePredicateFields({\n predicate: index.wherePredicate,\n model,\n fieldNames,\n site: `partial index on [${index.fields.map((entry) => entry.name).join(\", \")}]`,\n usage: \"indexPredicate\",\n enums: params.schema.enums,\n dialect: providerToDialect({ provider: params.schema.datasource.provider }),\n issues,\n });\n }\n }\n for (const exclusion of model.exclusions ?? []) {\n const predicate = exclusion.source?.where;\n if (predicate !== undefined) validatePredicateFields({ predicate, model, fieldNames, site: `exclusion \"${exclusion.name}\"`, usage: \"exclusionPredicate\", enums: params.schema.enums, dialect: providerToDialect({ provider: params.schema.datasource.provider }), issues });\n }\n}\n\n/**\n * A typed predicate may only read fields its own model declares, and never a\n * scalar list — no dialect here compares an array column usefully in a CHECK or\n * an index predicate. Rendering refuses the same cases with the exact scalar in\n * hand; this is the IR-level floor that holds for hand-built IR too.\n */\nfunction validatePredicateFields(params: {\n predicate: PredicateIR;\n model: ModelIR;\n fieldNames: ReadonlySet<string>;\n site: string;\n usage: PredicateBooleanUsage;\n enums: readonly EnumIR[];\n dialect: Dialect;\n issues: ValidationIssue[];\n}): void {\n const { predicate, model, fieldNames, site, issues, enums } = params;\n const capability = predicateCapabilityIssue({ predicate, model, dialect: params.dialect, usage: params.usage });\n if (capability !== undefined) {\n issues.push({ rule: \"predicate-check-capability\", message: `${site}: ${capability.feature} is not supported for ${params.usage} on ${params.dialect}${capability.hint === undefined ? \"\" : ` (${capability.hint})`}`, model: model.name });\n }\n const issue = (params: { rule: string; message: string; field?: string }): void => {\n issues.push({ ...params, message: `${site}: ${params.message}`, model: model.name });\n };\n const identity = (params: { result: PredicateResultType }): string => fieldTypeIdentity({ type: params.result.type, nativeType: params.result.refinement === \"localDate\" ? \"Date\" : undefined });\n const literal = (params: { value: PredicateValue; result: PredicateResultType }): void => {\n const { value } = params.value;\n const { type, refinement } = params.result;\n if (refinement === \"localDate\") {\n if (!isCanonicalLocalDate({ value })) issue({ rule: \"predicate-local-date-literal\", message: \"a local-date predicate requires a canonical YYYY-MM-DD calendar-day literal\" });\n return;\n }\n if (isEnumType(type)) {\n const declared = enums.find((entry) => entry.name === type.enum);\n if (typeof value !== \"string\") issue({ rule: \"predicate-type-mismatch\", message: \"an enum predicate requires a member name as a string\" });\n else if (declared !== undefined && !declared.values.includes(value)) issue({ rule: \"predicate-enum-member\", message: `literal ${JSON.stringify(value)} is not a member of enum ${type.enum}` });\n return;\n }\n if (type === \"Int\" || type === \"BigInt\") {\n if (typeof value !== \"number\" && typeof value !== \"string\") {\n issue({ rule: \"predicate-type-mismatch\", message: `${type} requires an exact integer literal` });\n return;\n }\n if (typeof value === \"number\" ? !Number.isSafeInteger(value) : !/^-?(0|[1-9]\\d*)$/.test(value)) {\n issue({ rule: \"predicate-literal-invalid\", message: `${type} requires an exact integer literal without rounding or exponent notation` });\n return;\n }\n const parsed = BigInt(value);\n const min = type === \"Int\" ? -2_147_483_648n : -(2n ** 63n);\n const max = type === \"Int\" ? 2_147_483_647n : 2n ** 63n - 1n;\n if (parsed < min || parsed > max) issue({ rule: \"predicate-literal-invalid\", message: `${type} literal is outside its signed integer range` });\n return;\n }\n if (type === \"Float\") {\n if (typeof value !== \"number\") issue({ rule: \"predicate-type-mismatch\", message: \"Float requires a number literal\" });\n else if (!Number.isFinite(value)) issue({ rule: \"predicate-literal-invalid\", message: \"Float requires a finite number literal\" });\n return;\n }\n if (type === \"Decimal\") {\n if (typeof value !== \"string\") issue({ rule: \"predicate-type-mismatch\", message: \"Decimal requires exact fixed-point text, not a JavaScript number\" });\n else if (!/^-?(0|[1-9]\\d*)(\\.\\d+)?$/.test(value)) issue({ rule: \"predicate-literal-invalid\", message: \"Decimal requires exact fixed-point text without exponent notation\" });\n return;\n }\n if (type === \"String\") {\n if (typeof value !== \"string\") issue({ rule: \"predicate-type-mismatch\", message: \"a text expression requires a string literal\" });\n else if (value.includes(\"\\u0000\")) issue({ rule: \"predicate-literal-invalid\", message: \"a text literal cannot contain NUL bytes\" });\n } else if (type === \"Boolean\" && typeof value !== \"boolean\") issue({ rule: \"predicate-type-mismatch\", message: \"Boolean requires true or false\" });\n };\n const expressionType = (expression: PredicateExpression): PredicateResultType | undefined => {\n switch (expression.kind) {\n case \"field\": {\n const field = model.fields.find((candidate) => candidate.name === expression.name);\n if (field === undefined || field.isList || field.isUnsupported) return undefined;\n // PostgreSQL native-type limits of text functions and arithmetic are capability admission, reported above.\n return isLocalDateField({ field }) ? { type: field.type, refinement: \"localDate\" } : { type: field.type };\n }\n case \"jsonText\": {\n const field = model.fields.find((candidate) => candidate.name === expression.field.name);\n if (field !== undefined && (field.type !== \"Json\" || field.isUnsupported === true)) issue({ rule: \"predicate-type-mismatch\", message: \"jsonText requires a Json field\", field: field.name });\n if (!Array.isArray(expression.path) || Array.from(expression.path).some((segment: unknown) => typeof segment !== \"string\" || segment.includes(\"\\u0000\"))) issue({ rule: \"predicate-json-path\", message: \"jsonText requires a string-only path without NUL bytes\" });\n return { type: \"String\" };\n }\n case \"length\":\n case \"lower\":\n case \"upper\": {\n const child = expressionType(expression.expression);\n if (child !== undefined && (child.type !== \"String\" || child.refinement === \"localDate\")) issue({ rule: \"predicate-type-mismatch\", message: `${expression.kind} requires a text expression, not a local date or another scalar` });\n return { type: expression.kind === \"length\" ? \"Int\" : \"String\" };\n }\n case \"add\":\n case \"sub\":\n case \"mul\": {\n const left = expressionType(expression.left);\n const right = expression.right.kind === \"value\" ? undefined : expressionType(expression.right);\n if (left === undefined) return undefined;\n if (left.type !== \"Int\" && left.type !== \"BigInt\" && left.type !== \"Float\" && left.type !== \"Decimal\") {\n issue({ rule: \"predicate-type-mismatch\", message: `${expression.kind} requires Int, BigInt, Float or Decimal operands` });\n return undefined;\n }\n if (right !== undefined && right.type !== left.type) issue({ rule: \"predicate-type-mismatch\", message: `${expression.kind} operands must have the same numeric family` });\n if (expression.right.kind === \"value\") literal({ value: expression.right, result: left });\n return { type: left.type };\n }\n }\n };\n const validateComputedComparisons = (node: PredicateIR): void => {\n if (node.kind === \"compare\") {\n const left = expressionType(node.left);\n const right = node.right.kind === \"value\" ? undefined : expressionType(node.right);\n if (left !== undefined && right !== undefined && identity({ result: left }) !== identity({ result: right })) issue({ rule: \"predicate-type-mismatch\", message: \"comparison operands must have the same logical type\" });\n if (node.right.kind === \"value\" && left !== undefined) literal({ value: node.right, result: left });\n } else if (node.kind === \"inList\") {\n const result = expressionType(node.field);\n if (result !== undefined) for (const value of node.values) literal({ value, result });\n } else if (node.kind === \"and\" || node.kind === \"or\") node.operands.forEach(validateComputedComparisons);\n else if (node.kind === \"not\" || node.kind === \"isTrue\") validateComputedComparisons(node.operand);\n };\n validateComputedComparisons(predicate);\n for (const name of predicateFieldNames({ predicate })) {\n if (!fieldNames.has(name)) {\n issues.push({\n rule: \"predicate-unknown-field\",\n message: `${site} on \"${model.name}\" references unknown field \"${name}\"`,\n model: model.name,\n field: name,\n });\n continue;\n }\n const referenced = model.fields.find((field) => field.name === name);\n if (referenced?.isUnsupported === true) issues.push({ rule: \"predicate-unsupported-type\", message: `${site}: predicates cannot reference unsupported fields`, model: model.name, field: name });\n if (referenced?.isList === true) {\n issues.push({\n rule: \"predicate-list-field\",\n message: `${site} on \"${model.name}\" compares scalar list \"${name}\" — use a raw expression for array operators`,\n model: model.name,\n field: name,\n });\n }\n }\n}\n\nimport { assertMigrationObjects } from \"./migration-objects.ts\";\n\n// ─── Assertion form ───────────────────────────────────────────────\n\n/**\n * MySQL refuses a CHECK on a column that a foreign-key referential action\n * WRITES (error 3823, \"needed in a foreign key constraint referential\n * action\"), and its DDL is not transactional: the migration would stop\n * half-applied. Probed on this project's MySQL 8.4 and 26.7 servers\n * (10.10.2026): ON UPDATE CASCADE, ON DELETE SET NULL and ON DELETE SET\n * DEFAULT are refused; ON DELETE CASCADE (it deletes the row, it writes no\n * column), RESTRICT and NO ACTION are accepted, and a CHECK on the REFERENCED\n * parent column is accepted. ON UPDATE SET NULL / SET DEFAULT write the column\n * too and are treated like CASCADE.\n *\n * VibeORM's default `onUpdate` is Cascade, so on MySQL a typed CHECK on any\n * foreign-key column needs an explicit `onUpdate: \"NoAction\"` or `\"Restrict\"`.\n * A raw CHECK is never parsed, so it cannot be analysed here.\n */\nfunction assertMysqlCheckReferentialActions(params: { schema: SchemaIR }): void {\n const views = new Set(params.schema.models.filter((model) => model.isView).map((model) => model.name));\n for (const model of params.schema.models) {\n const typed = (model.checks ?? []).filter((check) => check.predicate !== undefined);\n if (typed.length === 0) continue;\n for (const relation of model.relations) {\n const columns = relation.fields;\n if (columns === undefined || columns.length === 0 || views.has(relation.targetModel)) continue;\n // The one rule migrate's normalizer renders into DDL.\n const { onDelete, onUpdate } = resolveReferentialActions({ relation, field: (name) => model.fields.find((field) => field.name === name) });\n const writes = (action: string): boolean => action === \"Cascade\" || action === \"SetNull\" || action === \"SetDefault\";\n if (!writes(onUpdate) && onDelete !== \"SetNull\" && onDelete !== \"SetDefault\") continue;\n for (const check of typed) {\n const column = predicateFieldNames({ predicate: check.predicate! }).find((name) => columns.includes(name));\n if (column === undefined) continue;\n const error = unsupportedCapability({\n dialect: \"mysql\",\n feature: \"CHECK constraint on a foreign-key column that a referential action writes\",\n hint: `CHECK \"${check.name}\" reads \"${model.name}.${column}\", which relation \"${model.name}.${relation.name}\" writes through ON DELETE ${onDelete} / ON UPDATE ${onUpdate}; MySQL refuses this (error 3823). Declare onUpdate \"NoAction\" (or \"Restrict\") and an onDelete of \"Restrict\", \"NoAction\" or \"Cascade\" on the relation, or remove the CHECK`,\n });\n throw new VibeError({ code: error.code, message: error.message, meta: { ...error.meta, model: model.name, check: check.name, field: column, relation: relation.name, onDelete, onUpdate } });\n }\n }\n }\n}\n\n/** Throw VIBE_SCHEMA_INVALID (with all issues in meta) if the schema is invalid. */\nexport function assertValidSchemaIR(params: { schema: SchemaIR }): void {\n const rowRules = createRowRuleValidationContext(params);\n const dialect = providerToDialect({ provider: params.schema.datasource.provider });\n assertIndexExpressions({ schema: params.schema, dialect });\n assertGeneratedColumns({ schema: params.schema, dialect });\n assertNativeRlsAdmission({ schema: params.schema, dialect });\n for (const model of params.schema.models) {\n const rule = model.rls;\n if (rule === undefined || rule === null || typeof rule !== \"object\" || !(\"where\" in rule) || rule.where === null || typeof rule.where !== \"object\") continue;\n for (const field of model.fields) {\n if (Object.hasOwn(rule.where, field.name) && isLocalDateField({ field })) throw unsupportedCapability({ dialect, feature: \"local-date native RLS ownership\", hint: `${model.name}.${field.name} is a calendar day, not a supported RLS identity column` });\n }\n }\n assertExtensionPlacement({ schema: params.schema, dialect });\n assertIndexOperatorClasses({ schema: params.schema, dialect });\n for (const entry of [...params.schema.models, ...params.schema.enums]) if (entry.namespace !== undefined) assertSqlNamespace({ namespace: entry.namespace, dialect });\n for (const model of params.schema.models) for (const field of model.fields) {\n if (!isEnumType(field.type) || field.type.namespace === undefined) continue;\n assertSqlNamespace({ namespace: field.type.namespace, dialect });\n const enumType = field.type;\n const declared = params.schema.enums.find((entry) => entry.name === enumType.enum || entry.dbName === enumType.enum);\n if (declared !== undefined && (declared.namespace ?? \"public\") !== enumType.namespace) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Enum reference namespace differs from its declared native type\", meta: { rule: \"enum-namespace\", model: model.name, field: field.name } });\n }\n if (dialect === \"mysql\") assertMysqlCheckReferentialActions({ schema: params.schema });\n for (const model of params.schema.models) {\n for (const check of model.checks ?? []) if (check.predicate !== undefined) assertPredicateCapabilities({ predicate: check.predicate, model, dialect, usage: \"check\" });\n for (const index of model.indexes) if (index.wherePredicate !== undefined) assertPredicateCapabilities({ predicate: index.wherePredicate, model, dialect, usage: \"indexPredicate\" });\n if (model.exclusions !== undefined && !Array.isArray(model.exclusions)) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Exclusions must be an array\", meta: { rule: \"exclusion-definition\" } });\n if ((model.exclusions?.length ?? 0) === 0) continue;\n if (!DIALECT_CAPABILITIES[dialect].exclusionConstraints) throw unsupportedCapability({ dialect, feature: \"exclusionConstraints\" });\n const names = new Set<string>();\n const exclusions: readonly ExclusionIR[] = model.exclusions ?? [];\n for (const exclusion of exclusions) {\n if (exclusion === null || typeof exclusion !== \"object\") throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Invalid exclusion declaration\", meta: { rule: \"exclusion-definition\" } });\n const source = exclusion.source;\n if (source !== undefined) {\n if (source.where !== undefined) assertPredicateCapabilities({ predicate: source.where, model, dialect, usage: \"exclusionPredicate\" });\n const references = [...source.keys.flatMap((key) => \"field\" in key ? [key.field] : key.fields), ...[source.range.lower, source.range.upper].flatMap((endpoint) => \"field\" in endpoint ? [endpoint.field] : []), ...(source.where === undefined ? [] : predicateFieldNames({ predicate: source.where }))];\n if (references.some((name) => !model.fields.some((field) => field.name === name && !field.isList))) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Exclusion references an unknown or list field\", meta: { rule: \"exclusion-field\", model: model.name } });\n }\n if (!exclusion.name || names.has(exclusion.name) || typeof exclusion.definition !== \"string\" || !exclusion.definition.startsWith(\"EXCLUDE USING \") || !Array.isArray(exclusion.requiredExtensions) || exclusion.requiredExtensions.some((name) => name !== \"btree_gist\")) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Invalid exclusion declaration\", meta: { rule: \"exclusion-definition\", model: model.name } });\n names.add(exclusion.name);\n }\n }\n if (params.schema.migrationObjects !== undefined) assertMigrationObjects({ objects: params.schema.migrationObjects });\n for (const model of params.schema.models) {\n const counters = model.fields.filter((field) => field.default?.kind === \"autoincrement\");\n if (dialect === \"mysql\" && counters.length > 1) throw unsupportedCapability({ dialect, feature: \"multiple auto-increment columns\" });\n for (const field of model.fields) {\n if (isLocalDateField({ field })) {\n if (!DIALECT_CAPABILITIES[dialect].localDateColumns) throw unsupportedCapability({ dialect, feature: \"localDateColumns\", hint: `${model.name}.${field.name}` });\n if (field.isList || field.isUpdatedAt || (field.default !== undefined && (field.default.kind !== \"literal\" || !isCanonicalLocalDate({ value: field.default.value })))) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Local-date field ${model.name}.${field.name} requires a scalar calendar day and an optional canonical YYYY-MM-DD literal default; lists, @updatedAt and generated defaults are not supported`, meta: { issues: [{ rule: \"local-date-declaration\", model: model.name, field: field.name }] } });\n }\n }\n const timeOfDay = field.isUnsupported === true || field.type !== \"DateTime\" ? undefined : timeOfDayType({ nativeType: field.nativeType });\n if (timeOfDay !== undefined && !DIALECT_CAPABILITIES[dialect].timeOfDayTypes.includes(timeOfDay)) {\n const instead = dialect === \"sqlite\" ? \"sqlite has no time-of-day column type; store a plain DateTime or a String\" : \"there is no time-with-offset type here; use @db.Time(n), which stores the UTC time of day\";\n const error = unsupportedCapability({ dialect, feature: \"timeOfDayTypes\", hint: `${model.name}.${field.name} declares @db.${field.nativeType ?? \"\"} (${timeOfDay}) — ${instead}` });\n throw new VibeError({ code: error.code, message: error.message, meta: { ...error.meta, model: model.name, field: field.name, nativeType: field.nativeType } });\n }\n if (field.type === \"String\" && field.isUnsupported !== true && field.nativeType?.trim().toLowerCase() === \"uuid\" && DIALECT_CAPABILITIES[dialect].uuidColumns === \"unsupported\") {\n const error = unsupportedCapability({ dialect, feature: \"uuidColumns\", hint: `${model.name}.${field.name} declares @db.Uuid — ${dialect} has no uuid column type; store it as a plain String (or @db.Char(36))` });\n throw new VibeError({ code: error.code, message: error.message, meta: { ...error.meta, model: model.name, field: field.name, nativeType: field.nativeType } });\n }\n // MySQL takes DEFAULT CURRENT_TIMESTAMP only on DATETIME/TIMESTAMP: the DDL fails with 1067.\n if (timeOfDay !== undefined && dialect === \"mysql\" && field.default?.kind === \"now\") {\n const error = unsupportedCapability({ dialect, feature: \"@default(now()) on a TIME column\", hint: `${model.name}.${field.name} — MySQL has no current-time default for TIME; drop the default and write the value (or use @updatedAt)` });\n throw new VibeError({ code: error.code, message: error.message, meta: { ...error.meta, model: model.name, field: field.name, nativeType: field.nativeType } });\n }\n if (field.default?.kind === \"list\") {\n if (dialect !== \"postgres\") throw unsupportedCapability({ dialect, feature: \"scalar-list defaults\" });\n if (!field.isList) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `List default on non-list field ${model.name}.${field.name}` });\n scalarListDefault({ type: field.type, values: field.default.values });\n if (isEnumType(field.type)) {\n const name = field.type.enum;\n const members = params.schema.enums.find((entry) => entry.name === name)?.values ?? [];\n if (field.default.values.some((value) => typeof value !== \"string\" || !members.includes(value))) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Invalid enum-list default on ${model.name}.${field.name}` });\n }\n }\n if (field.default?.kind !== \"autoincrement\") continue;\n if (field.isList || field.isOptional || (field.type !== \"Int\" && field.type !== \"BigInt\")) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `autoincrement requires a required scalar Int or BigInt: ${model.name}.${field.name}` });\n const pk = model.primaryKey?.fields ?? model.fields.filter((entry) => entry.isId).map((entry) => entry.name);\n if (dialect === \"sqlite\" && (pk.length !== 1 || pk[0] !== field.name)) throw unsupportedCapability({ dialect, feature: `non-primary auto-increment column ${model.name}.${field.name}` });\n if (dialect === \"mysql\" && pk[0] !== field.name && !field.isUnique && !model.indexes.some((index) => { const first = indexKeyTerms({ index })[0]; return first?.kind === \"field\" && first.field.name === field.name; })) throw unsupportedCapability({ dialect, feature: `unindexed auto-increment column ${model.name}.${field.name}` });\n }\n }\n const issues = validateSchemaWithRowRules({ ...params, rowRules });\n if (issues.length > 0) {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `Schema validation failed with ${issues.length} issue(s): ${issues\n .map((issue) => issue.message)\n .join(\"; \")}`,\n meta: { issues },\n });\n }\n for (const model of params.schema.models) for (const rule of model.rowRules ?? []) {\n assertRowRuleCapability({ dialect, model: model.name, rule });\n rowRules.assertEquality({ model, rule });\n }\n assertRowRuleReferentialActions(params);\n}\n\n// ─── Native RLS structure ─────────────────────────────────────────\n\nfunction rlsRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) &&\n (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null) &&\n Reflect.ownKeys(value).every((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return typeof key === \"string\" && descriptor?.enumerable === true && \"value\" in descriptor;\n });\n}\n\nfunction rlsKeys(params: { value: Record<string, unknown>; keys: readonly string[] }): boolean {\n const own = Reflect.ownKeys(params.value);\n return own.length === params.keys.length && params.keys.every((key) => Object.hasOwn(params.value, key));\n}\n\n/** Validate context declarations independently (also used by settings rendering). */\nexport function validateRlsContextIR(params: { context: unknown }): ValidationIssue[] {\n const { context } = params;\n const issues: ValidationIssue[] = [];\n if (!rlsRecord(context)) return [{ rule: \"rls-invalid-context\", message: \"Native RLS context must be a named scalar-slot map\" }];\n const seen = new Set<string>();\n for (const key of Reflect.ownKeys(context)) {\n const slot: unknown = typeof key === \"string\" ? context[key] : undefined;\n if (typeof key !== \"string\" || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(key) || seen.has(key.toLowerCase()) ||\n !rlsRecord(slot) || !rlsKeys({ value: slot, keys: [\"type\", \"nullable\"] }) || typeof slot.nullable !== \"boolean\" ||\n (typeof slot.type !== \"string\" || ![\"String\", \"Boolean\", \"Int\", \"BigInt\", \"Float\", \"Decimal\", \"DateTime\"].includes(slot.type))) {\n issues.push({ rule: \"rls-invalid-context\", message: `Invalid native RLS context slot ${String(key)}; use distinct setting keys and supported scalar slots with explicit nullable` });\n }\n if (typeof key === \"string\") seen.add(key.toLowerCase());\n }\n return issues;\n}\n\n/**\n * Shared structural implicit-M2M rule, including introspection's unnamed lists.\n * Each fieldless list must be the other's sole counterpart under the same\n * relation-name key, counting FK-owning candidates too. Never trust `type`:\n * ordinary mutual FKs also synthesize unnamed lists during introspection.\n */\nexport function isImplicitManyToManyRelation(params: {\n model: ModelIR;\n relation: RelationIR;\n models: readonly ModelIR[];\n}): boolean {\n const { model, relation, models } = params;\n if (model.isView || !relation.isList || (relation.fields?.length ?? 0) !== 0) return false;\n const target = models.find((candidate) => candidate.name === relation.targetModel);\n if (target === undefined || target.isView) return false;\n const counterpart = soleRelationCounterpart({ relation, ownModel: model.name, target });\n if (counterpart === undefined || !counterpart.isList || (counterpart.fields?.length ?? 0) !== 0) return false;\n return soleRelationCounterpart({ relation: counterpart, ownModel: target.name, target: model }) === relation;\n}\n\nfunction soleRelationCounterpart(params: { relation: RelationIR; ownModel: string; target: ModelIR }): RelationIR | undefined {\n const { relation, ownModel, target } = params;\n const candidates = target.relations.filter((candidate) =>\n candidate !== relation && candidate.targetModel === ownModel && candidate.relationName === relation.relationName,\n );\n return candidates.length === 1 ? candidates[0] : undefined;\n}\n\nfunction validateNativeRls(params: { schema: SchemaIR; issues: ValidationIssue[] }): void {\n const { schema, issues } = params;\n if (schema.rls === undefined) {\n if (schema.models.some((model) => model.rls !== undefined)) {\n issues.push({ rule: \"rls-missing-context\", message: \"Model RLS rules require a schema-level rls.context declaration\" });\n }\n return;\n }\n const dialect = providerToDialect({ provider: schema.datasource.provider });\n if (!DIALECT_CAPABILITIES[dialect].nativeRowLevelSecurity) {\n issues.push({ rule: \"rls-unsupported-capability\", message: `nativeRowLevelSecurity is not supported on ${dialect}` });\n }\n if (!rlsRecord(schema.rls) || !rlsKeys({ value: schema.rls, keys: [\"context\"] })) {\n issues.push({ rule: \"rls-invalid-context\", message: \"Native RLS supports only a schema-level context declaration\" });\n return;\n }\n const contextIssues = validateRlsContextIR({ context: schema.rls.context });\n issues.push(...contextIssues);\n const context = contextIssues.length === 0 ? schema.rls.context : undefined;\n const byName = new Map(schema.models.map((model) => [model.name, model]));\n const tables = new Set<string>();\n const throughTargets = new Map<string, string>();\n for (const model of schema.models) {\n const add = (params: { rule: string; message: string; field?: string }): void => {\n issues.push({ ...params, model: model.name });\n };\n const table = model.dbName ?? model.name;\n if (tables.has(table)) add({ rule: \"rls-duplicate-table\", message: `RLS models share physical table ${table}` });\n tables.add(table);\n const columns = new Set<string>();\n for (const field of model.fields) {\n const name = field.dbName ?? field.name;\n if (columns.has(name)) add({ rule: \"rls-duplicate-column\", message: `RLS model ${model.name} repeats physical column ${name}`, field: field.name });\n columns.add(name);\n }\n if (model.policy !== undefined) add({ rule: \"rls-policy-conflict\", message: \"Native RLS cannot combine with application-level ModelIR.policy\" });\n if (model.isView) add({ rule: \"rls-view-unsupported\", message: \"Database views are not supported on native RLS clients; remove the view declaration\" });\n if (model.rls === undefined) {\n add({ rule: \"rls-unclassified-model\", message: `Classify ${model.name} as where, through, unprotected or deny` });\n continue;\n }\n if (model.rls !== \"unprotected\") {\n for (const relation of model.relations) {\n if (isImplicitManyToManyRelation({ model, relation, models: schema.models })) {\n add({ rule: \"rls-implicit-many-to-many\", message: \"Protected implicit many-to-many relations need an explicit junction model with its own rule\", field: relation.name });\n }\n }\n }\n const rule: unknown = model.rls;\n if (rule === \"unprotected\" || rule === \"deny\") continue;\n if (!rlsRecord(rule)) {\n add({ rule: \"rls-invalid-rule\", message: \"Native RLS accepts where, through, unprotected or deny only\" });\n continue;\n }\n if (rlsKeys({ value: rule, keys: [\"where\"] }) && rlsRecord(rule.where) && Reflect.ownKeys(rule.where).length > 0) {\n for (const fieldName of Reflect.ownKeys(rule.where)) {\n const ref: unknown = typeof fieldName === \"string\" ? rule.where[fieldName] : undefined;\n if (!rlsRecord(ref) || !rlsKeys({ value: ref, keys: [\"context\"] }) || typeof ref.context !== \"string\") {\n add({ rule: \"rls-invalid-rule\", message: \"Ownership equality accepts a context reference only\" });\n continue;\n }\n const field = model.fields.find((f) => f.name === fieldName);\n if (field === undefined) {\n add({ rule: \"rls-unknown-field\", message: `Native RLS requires a direct scalar field, not path ${String(fieldName)}` });\n } else if (field.isList || field.isUnsupported || isLocalDateField({ field }) || isEnumType(field.type) || field.type === \"Json\" || field.type === \"Bytes\") {\n add({ rule: \"rls-unsupported-field\", message: \"Native RLS ownership requires a supported non-list scalar\", field: field.name });\n } else if (context !== undefined) {\n const slot = Object.hasOwn(context, ref.context) ? context[ref.context] : undefined;\n if (slot === undefined) add({ rule: \"rls-unknown-context\", message: `Unknown native RLS context key ${ref.context}`, field: field.name });\n else if (slot.type !== field.type) add({ rule: \"rls-context-type-mismatch\", message: `Context ${ref.context} does not match ${model.name}.${field.name}`, field: field.name });\n }\n }\n continue;\n }\n if (rlsKeys({ value: rule, keys: [\"through\"] }) && typeof rule.through === \"string\") {\n const relation = model.relations.find((r) => r.name === rule.through);\n const target = relation === undefined ? undefined : byName.get(relation.targetModel);\n if (relation === undefined || target === undefined || relation.model !== model.name || relation.isList ||\n (relation.type !== \"oneToOne\" && relation.type !== \"manyToOne\") ||\n !validRlsForeignKey({ model, target, relation })) {\n add({ rule: \"rls-invalid-through\", message: \"Native RLS through requires a to-one relation with an actual, complete foreign key on this model\" });\n continue;\n }\n if (relation.isOptional || relation.fields?.some((name) => model.fields.find((field) => field.name === name)?.isOptional)) {\n add({ rule: \"rls-nullable-through\", message: \"Native RLS through requires a non-nullable parent relation and foreign key; NULL parent links cannot satisfy WITH CHECK. Make the link required or use a direct ownership rule\", field: relation.name });\n continue;\n }\n if (table === \"parent\") add({ rule: \"rls-through-alias-conflict\", message: \"A through table mapped to parent would shadow the fixed policy parent alias; use another table name\" });\n throughTargets.set(model.name, target.name);\n continue;\n }\n add({ rule: \"rls-invalid-rule\", message: \"Native RLS accepts a nonempty equality map or a single through relation; extra properties and operation-specific rules refuse\" });\n }\n for (const [origin, first] of throughTargets) {\n const seen = new Set([origin]);\n let current: string | undefined = first;\n while (current !== undefined && !seen.has(current)) {\n seen.add(current);\n const rule = byName.get(current)?.rls;\n if (rlsRecord(rule) && rlsKeys({ value: rule, keys: [\"where\"] })) break;\n current = throughTargets.get(current);\n }\n if (current === undefined || current === origin || (throughTargets.has(current) && seen.has(current))) {\n issues.push({ rule: \"rls-through-chain-invalid\", message: `Through chain from ${origin} must be acyclic and end in a direct where rule`, model: origin });\n }\n }\n}\n\nfunction validRlsForeignKey(params: { model: ModelIR; target: ModelIR; relation: RelationIR }): boolean {\n const { model, target, relation } = params;\n const fields = relation.fields;\n const refs = relation.references;\n if (fields === undefined || refs === undefined || fields.length === 0 || fields.length !== refs.length ||\n new Set(fields).size !== fields.length || new Set(refs).size !== refs.length) return false;\n const validFields = fields.every((name, index) => {\n const field = model.fields.find((f) => f.name === name);\n const ref = target.fields.find((f) => f.name === refs[index]);\n return field !== undefined && ref !== undefined && !field.isList && !ref.isList && !field.isUnsupported && !ref.isUnsupported &&\n fieldTypeIdentity(field) === fieldTypeIdentity(ref);\n });\n const uniqueSets = [\n ...target.fields.filter((f) => f.isId || f.isUnique).map((f) => [f.name]),\n ...(target.primaryKey === undefined ? [] : [target.primaryKey.fields]),\n ...target.indexes.filter((index) => index.kind === \"unique\" && !isExpressionIndex({ index }) && index.where === undefined).map((index) => index.fields.map((f) => f.name)),\n ];\n return validFields && uniqueSets.some((set) => set.length === refs.length && set.every((name) => refs.includes(name)));\n}\n"
|
|
33
33
|
],
|
|
34
|
-
"mappings": "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",
|
|
35
|
-
"debugId": "
|
|
34
|
+
"mappings": "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",
|
|
35
|
+
"debugId": "6A81F5FFEA4B498F64756E2164756E21",
|
|
36
36
|
"names": []
|
|
37
37
|
}
|