@vibeorm/schema 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -1
- package/dist/index.js.map +3 -3
- package/dist/validate.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -854,6 +854,7 @@ var RESERVED_ENUM_NAMES = [
|
|
|
854
854
|
"Skip",
|
|
855
855
|
"TransactionOptions",
|
|
856
856
|
"AdvisoryLockOptions",
|
|
857
|
+
"StatementDiagnosticsOptions",
|
|
857
858
|
"SchemaIR",
|
|
858
859
|
"VibeExtension",
|
|
859
860
|
"ComputedConfig",
|
|
@@ -1721,4 +1722,4 @@ export {
|
|
|
1721
1722
|
DIALECTS
|
|
1722
1723
|
};
|
|
1723
1724
|
|
|
1724
|
-
//# debugId=
|
|
1725
|
+
//# debugId=A977A79FC940B2A264756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
"/**\n * Computed fields — config-declared derived properties on query results.\n *\n * The declaration lives in `vibeorm.config.ts` (so the generator can write the\n * field's TYPE into the payload `.d.ts` verbatim — rules 1/2: no inference),\n * and the SAME spec object is passed to `VibeClient({ computed })`, which runs\n * the `compute` functions at row materialization. The generated client bakes a\n * manifest of `{ model, field, type, needs }`; drift between that manifest and\n * the live config throws `VIBE_STALE_CLIENT` at construction.\n *\n * Deliberately NOT part of the Schema IR: the IR is the only schema currency\n * (rule 9) and migrate/introspection/db-push must never see a presentation-only\n * field — and compute functions would not survive IR serialization anyway.\n */\n\nimport { VibeError } from \"./errors.ts\";\nimport type { SchemaIR } from \"./ir.ts\";\nimport { RESERVED_COLUMN_PREFIX } from \"./reserved.ts\";\n\n// ─── Types ────────────────────────────────────────────────────────\n\n/** One computed field: an explicit result type, the scalars it reads, and the derivation. */\nexport type ComputedFieldSpec = {\n /** TypeScript type written VERBATIM into the generated payload (`\"string\"`, `\"number | null\"`). */\n readonly type: string;\n /**\n * Scalar fields of the model the compute reads. They are fetched whenever\n * the computed field is selected — even when not selected themselves — and\n * stripped from the result afterwards (the stitch-key pattern).\n */\n readonly needs: readonly string[];\n /**\n * Synchronous derivation. Receives the row with every `needs` scalar\n * decoded; the return value is attached under the computed field's name.\n */\n readonly compute: (row: Record<string, unknown>) => unknown;\n};\n\n/** Computed-field config: IR model name (`\"User\"`) → field name → spec. */\nexport type ComputedConfig = Readonly<Record<string, Readonly<Record<string, ComputedFieldSpec>>>>;\n\n/** What the generator bakes per computed field for the staleness gate. */\nexport type ComputedManifestEntry = {\n readonly model: string;\n readonly field: string;\n readonly type: string;\n readonly needs: readonly string[];\n};\n\n// ─── Manifest ─────────────────────────────────────────────────────\n\n/** The baked manifest for a config — model/field sorted, so output is deterministic. */\nexport function buildComputedManifest(params: { computed: ComputedConfig }): readonly ComputedManifestEntry[] {\n const { computed } = params;\n const entries: ComputedManifestEntry[] = [];\n for (const modelName of Object.keys(computed).sort()) {\n const fields = computed[modelName] ?? {};\n for (const fieldName of Object.keys(fields).sort()) {\n const spec = fields[fieldName] as ComputedFieldSpec;\n entries.push({ model: modelName, field: fieldName, type: spec.type, needs: [...spec.needs] });\n }\n }\n return entries;\n}\n\n// ─── Validation ───────────────────────────────────────────────────\n\nconst IDENTIFIER_PATTERN: RegExp = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\n/**\n * Validate a computed-field config against a schema: models exist (by IR\n * name), field names are collision-free identifiers, `needs` name queryable\n * scalar fields, and each spec is structurally complete. Every problem is\n * reported at once in ONE `VIBE_CONFIG` error.\n */\nexport function validateComputedConfig(params: { schema: SchemaIR; computed: ComputedConfig }): void {\n const { schema, computed } = params;\n const problems: string[] = [];\n const modelByName = new Map(schema.models.map((model) => [model.name, model]));\n\n for (const [modelName, fields] of Object.entries(computed)) {\n const model = modelByName.get(modelName);\n if (model === undefined) {\n const byClientName = schema.models.find(\n (candidate) => candidate.name.charAt(0).toLowerCase() + candidate.name.slice(1) === modelName,\n );\n problems.push(\n byClientName === undefined\n ? `unknown model \"${modelName}\"`\n : `unknown model \"${modelName}\" — computed is keyed by MODEL name (\"${byClientName.name}\"), not client name`,\n );\n continue;\n }\n if (fields === null || typeof fields !== \"object\" || Array.isArray(fields)) {\n problems.push(`computed.${modelName} must be an object of field specs`);\n continue;\n }\n for (const [fieldName, spec] of Object.entries(fields)) {\n const at = `${modelName}.${fieldName}`;\n if (!IDENTIFIER_PATTERN.test(fieldName)) {\n problems.push(`\"${at}\" is not a valid identifier`);\n } else if (fieldName.startsWith(RESERVED_COLUMN_PREFIX)) {\n problems.push(`\"${at}\" uses the reserved \"${RESERVED_COLUMN_PREFIX}\" prefix`);\n }\n if (fieldName === \"_count\") problems.push(`\"${at}\" collides with the _count projection`);\n if (model.fields.some((field) => field.name === fieldName)) {\n problems.push(`\"${at}\" collides with a schema field of the same name`);\n }\n if (model.relations.some((relation) => relation.name === fieldName)) {\n problems.push(`\"${at}\" collides with a relation of the same name`);\n }\n if (spec === null || typeof spec !== \"object\") {\n problems.push(`\"${at}\" must be a spec object ({ type, needs, compute })`);\n continue;\n }\n if (typeof spec.type !== \"string\" || spec.type.trim().length === 0) {\n problems.push(`\"${at}\".type must be a non-empty TypeScript type string`);\n }\n if (typeof spec.compute !== \"function\") {\n problems.push(`\"${at}\".compute must be a function`);\n }\n if (!Array.isArray(spec.needs)) {\n problems.push(`\"${at}\".needs must be an array of scalar field names`);\n continue;\n }\n for (const need of spec.needs) {\n if (typeof need !== \"string\") {\n problems.push(`\"${at}\".needs entries must be strings`);\n continue;\n }\n const target = model.fields.find((field) => field.name === need);\n if (target === undefined) {\n problems.push(\n model.relations.some((relation) => relation.name === need)\n ? `\"${at}\".needs names the relation \"${need}\" — needs are scalar fields only`\n : `\"${at}\".needs names \"${need}\", which is not a field of ${modelName}`,\n );\n } else if (target.isUnsupported === true) {\n problems.push(`\"${at}\".needs names \"${need}\", an Unsupported(...) column — those are never queryable`);\n }\n }\n }\n }\n\n if (problems.length > 0) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: `invalid computed-field config — ${problems.join(\"; \")}`,\n meta: { problems },\n });\n }\n}\n",
|
|
13
13
|
"import { VibeError } from \"./errors.ts\";\nimport { isEnumType } from \"./ir.ts\";\nimport type { FieldType } from \"./ir.ts\";\nimport { exactIntegerLiteral } from \"./prisma-literal.ts\";\n\n/** JSON text with deterministic object keys; refuses values JSON would silently drop. */\nexport function serializeJsonDefault(params: { value: unknown }): string {\n const ancestors = new Set<object>();\n const visit = (value: unknown): string => {\n if (value === null) return \"null\";\n if (typeof value === \"string\" || typeof value === \"boolean\") return JSON.stringify(value);\n if (typeof value === \"number\" && Number.isFinite(value)) return JSON.stringify(value);\n if (typeof value !== \"object\" || value === null || ancestors.has(value)) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"JSON defaults require finite, acyclic JSON values\" });\n }\n ancestors.add(value);\n let text: string;\n if (Array.isArray(value)) {\n text = `[${Array.from(value, visit).join(\",\")}]`;\n } else {\n if (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"JSON defaults require plain objects, not class instances\" });\n }\n if (Reflect.ownKeys(value).some((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(value, key)!;\n return typeof key !== \"string\" || !descriptor.enumerable || !(\"value\" in descriptor);\n })) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"JSON defaults require enumerable data properties, without symbols or accessors\" });\n }\n text = `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${visit(Object.getOwnPropertyDescriptor(value, key)!.value)}`).join(\",\")}}`;\n }\n ancestors.delete(value);\n return text;\n };\n return visit(params.value);\n}\n\n/** Normalize and validate a scalar-list default without converting wide integers to doubles. */\nexport function scalarListDefault(params: { type: FieldType; values: readonly unknown[] }): readonly (string | number | boolean)[] {\n const { type } = params;\n return Array.from(params.values, (value) => {\n if (type === \"BigInt\" && typeof value === \"bigint\") return exactIntegerLiteral({ text: value.toString() });\n if (type === \"BigInt\" && typeof value === \"string\" && /^-?\\d+$/.test(value)) return exactIntegerLiteral({ text: value });\n if ((type === \"Int\" || type === \"BigInt\") && typeof value === \"number\" && Number.isSafeInteger(value) &&\n (type !== \"Int\" || (value >= -2147483648 && value <= 2147483647))) return value;\n if (type === \"Float\" && typeof value === \"number\" && Number.isFinite(value)) return value;\n if (type === \"Boolean\" && typeof value === \"boolean\") return value;\n if ((type === \"String\" || isEnumType(type)) && typeof value === \"string\") return value;\n if (type === \"Decimal\" && (typeof value === \"string\" || typeof value === \"number\") && /^-?\\d+(\\.\\d+)?$/.test(String(value))) {\n const text = String(value);\n const [integer, fraction = \"\"] = text.replace(/^-/, \"\").split(\".\");\n const whole = BigInt(integer!).toString();\n const tail = fraction.replace(/0+$/, \"\");\n const sign = text.startsWith(\"-\") && (whole !== \"0\" || tail !== \"\") ? \"-\" : \"\";\n return `${sign}${whole}${tail === \"\" ? \"\" : `.${tail}`}`;\n }\n if (type === \"Json\" && typeof value === \"string\") return value;\n if (type === \"DateTime\") {\n const text = value instanceof Date && Number.isFinite(value.getTime()) ? value.toISOString() : value;\n if (typeof text === \"string\") {\n // PostgreSQL re-serializes dates with spaces and short offsets. Preserve\n // microseconds instead of passing the fractional value through Date.\n const match = /^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(?:\\.(\\d{1,6}))?(Z|[+-]\\d{2}(?::?\\d{2})?)?$/.exec(text);\n const timestamp = match === null ? NaN : Date.parse(match[2] === undefined ? `${text}Z` : text);\n if (Number.isFinite(timestamp)) return new Date(timestamp).toISOString().replace(/\\.\\d{3}Z$/, `.${(match?.[1] ?? \"\").padEnd(6, \"0\")}Z`);\n }\n }\n if (type === \"Bytes\" && value instanceof Uint8Array) return `\\\\x${Array.from(value, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")}`;\n if (type === \"Bytes\" && typeof value === \"string\" && /^\\\\x(?:[0-9a-f]{2})*$/i.test(value)) return value.toLowerCase();\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Invalid scalar-list default element for ${isEnumType(type) ? type.enum : type}` });\n });\n}\n",
|
|
14
14
|
"/**\n * Dialect capability shape.\n *\n * Tables live here so structural validation can refuse unsupported features\n * without depending on SQL. @vibeorm/sql re-exports these SAME frozen objects;\n * runtime, migrate, generator and tooling share their identity.\n */\n\nimport type { Dialect } from \"./ir.ts\";\n\n// ─── Full-text engines ────────────────────────────────────────────\n\n/** Full-text engines the `search` extension can target. */\nexport type FullTextEngine = \"bm25\" | \"tsvector\" | \"fts5\" | \"fulltext\";\n\n// ─── Locking ──────────────────────────────────────────────────────\n\n/**\n * How strongly a locking read holds the rows it returns.\n *\n * - `\"update\"` — the exclusive row lock (`FOR UPDATE`): nobody else may update,\n * delete or lock the row until this transaction ends.\n * - `\"noKeyUpdate\"` — PostgreSQL's weaker exclusive lock (`FOR NO KEY UPDATE`):\n * it still blocks other writers of the same row, but does NOT block a child\n * row's foreign-key reference to it.\n * - `\"share\"` — the shared lock (`FOR SHARE`): several readers may hold it at\n * once, and every writer waits.\n * - `\"keyShare\"` — PostgreSQL's weakest lock (`FOR KEY SHARE`): it only blocks\n * changes to the row's key columns, which is what a foreign-key check needs.\n */\nexport type RowLockStrength = \"update\" | \"noKeyUpdate\" | \"share\" | \"keyShare\";\n\n/**\n * What a locking read does when another transaction already holds a\n * conflicting lock on a row it matched.\n *\n * - `\"wait\"` — block until the holder commits or rolls back (SQL's default).\n * - `\"nowait\"` — fail immediately with `VIBE_LOCK_NOT_AVAILABLE`.\n * - `\"skipLocked\"` — leave the locked rows out of the result, which is how a\n * queue hands disjoint work to concurrent workers.\n */\nexport type RowLockWaitPolicy = \"wait\" | \"nowait\" | \"skipLocked\";\n\n/** Advisory locks are exclusive (one holder) or shared (many readers, no writer). */\nexport type AdvisoryLockMode = \"exclusive\" | \"shared\";\n\n// ─── Capability table ─────────────────────────────────────────────\n\nexport type DialectCapabilities = {\n /** Explicit database-normalized CHECK inspection; text-only engines never guess equivalence. */\n /** PostgreSQL GiST exclusion constraints and their shared extension requirement. */\n readonly exclusionConstraints: boolean;\n readonly exclusionExtensions: readonly string[];\n readonly checkNormalization: \"rollback\" | \"temporary\" | \"sourceText\";\n /** Native database row policies; PGlite additionally needs a verified restricted role. */\n readonly nativeRowLevelSecurity: boolean;\n /** INSERT/UPDATE/DELETE ... RETURNING. False ⇒ insertId + re-select fallback. */\n readonly returning: boolean;\n /** Native scalar array columns (String[], Int[], ...). */\n readonly scalarArrays: boolean;\n /** Native enum column types (CREATE TYPE / inline ENUM). */\n readonly nativeEnums: boolean;\n /** Native ILIKE operator. False ⇒ LOWER() LIKE LOWER() strategy. */\n readonly ilike: boolean;\n /** LATERAL JOIN relation strategy (\"join\") availability. */\n readonly lateralJoin: boolean;\n /** Native DISTINCT ON. */\n readonly distinctOn: boolean;\n /** Partial (predicate) indexes. */\n readonly partialIndexes: boolean;\n /** Named-constraint conflict targets (`ON CONFLICT ON CONSTRAINT …`). */\n readonly conflictTargetConstraint: boolean;\n /** DDL participates in transactions (mysql auto-commits DDL). */\n readonly transactionalDdl: boolean;\n /** createManyAndReturn support (requires multi-row RETURNING). */\n readonly createManyAndReturn: boolean;\n /** A real JSON column type (vs TEXT storage). */\n readonly jsonColumnType: boolean;\n /** Native NULLS FIRST/LAST in ORDER BY. False ⇒ IS NULL emulation term. */\n readonly orderByNulls: boolean;\n /** Full-text engines available on this dialect (first = preferred). */\n readonly fullTextEngines: readonly FullTextEngine[];\n /**\n * Row-lock strengths this dialect can express in a locking read. EMPTY means\n * the dialect has no locking-read clause at all (sqlite), not that locking is\n * unnecessary — the runtime refuses every strength it cannot render.\n */\n readonly rowLockStrengths: readonly RowLockStrength[];\n /**\n * Wait policies this dialect can express. Empty exactly when\n * {@link DialectCapabilities.rowLockStrengths} is empty.\n */\n readonly rowLockWaitPolicies: readonly RowLockWaitPolicy[];\n /**\n * Transaction-scoped advisory locks on application-defined keys\n * (`pg_advisory_xact_lock`). MySQL's `GET_LOCK` is SESSION-scoped — it\n * survives a rollback — so it does not satisfy this capability.\n */\n readonly advisoryLocks: boolean;\n};\n\n// ─── Frozen per-dialect tables ────────────────────────────────────\n\nexport const POSTGRES_CAPABILITIES: DialectCapabilities = Object.freeze({\n exclusionConstraints: true,\n exclusionExtensions: Object.freeze([\"btree_gist\"]),\n checkNormalization: \"rollback\",\n nativeRowLevelSecurity: true,\n returning: true,\n scalarArrays: true,\n nativeEnums: true,\n ilike: true,\n lateralJoin: true,\n distinctOn: true,\n partialIndexes: true,\n conflictTargetConstraint: true,\n transactionalDdl: true,\n createManyAndReturn: true,\n jsonColumnType: true,\n orderByNulls: true,\n fullTextEngines: Object.freeze<FullTextEngine[]>([\"bm25\", \"tsvector\"]),\n // Verified on PostgreSQL 18.6 and PGlite 0.5.4 (PostgreSQL 18.3): all four\n // strengths and all three wait policies parse and behave.\n rowLockStrengths: Object.freeze<RowLockStrength[]>([\"update\", \"noKeyUpdate\", \"share\", \"keyShare\"]),\n rowLockWaitPolicies: Object.freeze<RowLockWaitPolicy[]>([\"wait\", \"nowait\", \"skipLocked\"]),\n advisoryLocks: true,\n});\n\nexport const SQLITE_CAPABILITIES: DialectCapabilities = Object.freeze({\n exclusionConstraints: false,\n exclusionExtensions: Object.freeze([]),\n checkNormalization: \"sourceText\",\n nativeRowLevelSecurity: false,\n returning: true,\n scalarArrays: false,\n nativeEnums: false,\n ilike: false,\n lateralJoin: false,\n distinctOn: false,\n partialIndexes: true,\n conflictTargetConstraint: false,\n transactionalDdl: true,\n createManyAndReturn: true,\n jsonColumnType: false,\n orderByNulls: true,\n fullTextEngines: Object.freeze<FullTextEngine[]>([\"fts5\"]),\n // sqlite has NO locking-read clause: `SELECT … FOR UPDATE` is a syntax error\n // (verified on sqlite 3.51.0). Its write transactions are mutually exclusive,\n // so the legacy `lock: \"update\"` request stays a documented no-op; every\n // other request is refused rather than silently downgraded.\n rowLockStrengths: Object.freeze<RowLockStrength[]>([]),\n rowLockWaitPolicies: Object.freeze<RowLockWaitPolicy[]>([]),\n advisoryLocks: false,\n});\n\nexport const MYSQL_CAPABILITIES: DialectCapabilities = Object.freeze({\n exclusionConstraints: false,\n exclusionExtensions: Object.freeze([]),\n checkNormalization: \"temporary\",\n nativeRowLevelSecurity: false,\n returning: false,\n scalarArrays: false,\n nativeEnums: true,\n ilike: false,\n lateralJoin: false,\n distinctOn: false,\n partialIndexes: false,\n conflictTargetConstraint: false,\n transactionalDdl: false,\n createManyAndReturn: false,\n jsonColumnType: true,\n orderByNulls: false,\n fullTextEngines: Object.freeze<FullTextEngine[]>([\"fulltext\"]),\n // Verified on MySQL 26.7.0: FOR UPDATE / FOR SHARE with NOWAIT and SKIP\n // LOCKED all parse; FOR NO KEY UPDATE and FOR KEY SHARE are parse errors\n // (errno 1064). GET_LOCK is session-scoped, so there are no advisory locks.\n rowLockStrengths: Object.freeze<RowLockStrength[]>([\"update\", \"share\"]),\n rowLockWaitPolicies: Object.freeze<RowLockWaitPolicy[]>([\"wait\", \"nowait\", \"skipLocked\"]),\n advisoryLocks: false,\n});\n\nexport const DIALECT_CAPABILITIES: Readonly<Record<Dialect, DialectCapabilities>> = Object.freeze({\n postgres: POSTGRES_CAPABILITIES,\n sqlite: SQLITE_CAPABILITIES,\n mysql: MYSQL_CAPABILITIES,\n});\n",
|
|
15
|
-
"/**\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\";\n\nimport { ENUM_STORAGES, isEnumType, providerToDialect } from \"./ir.ts\";\nimport type { EnumIR, ModelIR, RelationIR, SchemaIR } from \"./ir.ts\";\nimport { predicateFieldNames } from \"./predicate.ts\";\nimport type { PredicateIR } from \"./predicate.ts\";\nimport { VibeError, unsupportedCapability } from \"./errors.ts\";\nimport { DIALECT_CAPABILITIES } from \"./capabilities.ts\";\nimport { RESERVED_COLUMN_PREFIX } from \"./reserved.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\", \"ExtendedDateTime\",\n \"enumValidators\",\n \"enumValidator\",\n \"OmittedKeys\",\n \"ExactKeys\",\n \"PossibleKeys\",\n \"UncertainKeys\",\n \"HasSelectedField\",\n \"Provided\",\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 \"VibeClientOptions\",\n \"VibeError\",\n \"VibeErrorCode\",\n \"BatchPayload\",\n \"UpsertManyPayload\",\n \"QueryMode\",\n \"RelationStrategy\",\n \"SortOrder\",\n \"SortOrderWithNulls\",\n \"KeysetToken\",\n \"KeysetOptions\",\n \"RowLockRequest\",\n \"JsonValue\",\n \"InputJsonValue\",\n \"InputJsonArray\",\n \"InputJsonObject\",\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 \"QueryEvent\",\n \"Skip\",\n \"TransactionOptions\",\n \"AdvisoryLockOptions\",\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 \"ScalarOrderByInput\", \"RelationOrderByInput\", \"RelationFindManyArgs\",\n \"CreateInput\", \"UncheckedCreateInput\", \"CreateManyInput\", \"UpdateInput\", \"UncheckedUpdateInput\", \"UpdateManyInput\",\n \"CountAggregateInput\", \"AvgAggregateInput\", \"SumAggregateInput\", \"MinAggregateInput\", \"MaxAggregateInput\",\n \"FindManyArgs\", \"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\", \"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\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 }\n const register = (params: { name: string; owner: string }): void => {\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 for (const model of schema.models) {\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\n/** Validate a SchemaIR structurally; returns all issues found (empty = valid). */\nexport function validateSchemaIR(params: { schema: SchemaIR }): ValidationIssue[] {\n const { schema } = params;\n const issues: ValidationIssue[] = [];\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 for (const model of schema.models) {\n validateModel({ model, modelByName, enumByName, issues });\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 = new Set(model.fields.map((field) => field.name));\n const defaultKeys = new Set<string>();\n if (\n model.primaryKey !== undefined &&\n model.primaryKey.fields.length > 1 &&\n model.primaryKey.clientName === undefined\n ) {\n defaultKeys.add(model.primaryKey.fields.join(\"_\"));\n }\n for (const index of model.indexes) {\n if (\n index.kind === \"unique\" &&\n index.where === undefined &&\n index.fields.length > 1 &&\n index.clientName === undefined\n ) {\n defaultKeys.add(index.fields.map((field) => field.name).join(\"_\"));\n }\n }\n const seenSelectorNames = new Set<string>();\n const checkSelectorName = (params: {\n clientName: string;\n fieldCount: number;\n where?: string;\n isUnique: boolean;\n site: string;\n }): void => {\n const { clientName, fieldCount, 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 (fieldCount < 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 if (fieldNames.has(clientName) || defaultKeys.has(clientName) || seenSelectorNames.has(clientName)) {\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.add(clientName);\n };\n if (model.primaryKey !== undefined && model.primaryKey.clientName !== undefined) {\n checkSelectorName({\n clientName: model.primaryKey.clientName,\n fieldCount: model.primaryKey.fields.length,\n isUnique: true,\n site: \"@@id\",\n });\n }\n for (const index of model.indexes) {\n if (index.clientName === undefined) continue;\n checkSelectorName({\n clientName: index.clientName,\n fieldCount: index.fields.length,\n ...(index.where === undefined ? {} : { where: index.where }),\n isUnique: index.kind === \"unique\",\n site: \"@@unique\",\n });\n }\n }\n\n validateGeneratedNames({ schema, issues });\n validateNativeRls({ schema, issues });\n return issues;\n}\n\nfunction validateModel(params: {\n model: ModelIR;\n modelByName: Map<string, ModelIR>;\n enumByName: Map<string, EnumIR>;\n issues: ValidationIssue[];\n}): void {\n const { model, modelByName, enumByName, issues } = 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\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).\n const fieldNames = new Set(model.fields.map((f) => f.name));\n const hasIdField = model.fields.some((f) => f.isId);\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 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 (target !== undefined) {\n const targetFieldNames = new Set(target.fields.map((f) => f.name));\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\") {\n issues.push({\n rule: \"collation-non-string\",\n message: `@collation on \"${model.name}.${field.name}\" — collation is only valid on String fields`,\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 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 issues,\n });\n }\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 issues: ValidationIssue[];\n}): void {\n const { predicate, model, fieldNames, site, issues } = params;\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 if (model.fields.find((field) => field.name === name)?.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/** Throw VIBE_SCHEMA_INVALID (with all issues in meta) if the schema is invalid. */\nexport function assertValidSchemaIR(params: { schema: SchemaIR }): void {\n const dialect = providerToDialect({ provider: params.schema.datasource.provider });\n for (const model of params.schema.models) {\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 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 if (params.schema.rls !== undefined && !DIALECT_CAPABILITIES[dialect].nativeRowLevelSecurity) {\n throw unsupportedCapability({ dialect, feature: \"nativeRowLevelSecurity\" });\n }\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 (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) => index.fields[0]?.name === field.name)) throw unsupportedCapability({ dialect, feature: `unindexed auto-increment column ${model.name}.${field.name}` });\n }\n }\n const issues = validateSchemaIR(params);\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}\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 || 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 (field.type === ref.type || (isEnumType(field.type) && isEnumType(ref.type) && field.type.enum === ref.type.enum));\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\" && 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",
|
|
15
|
+
"/**\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\";\n\nimport { ENUM_STORAGES, isEnumType, providerToDialect } from \"./ir.ts\";\nimport type { EnumIR, ModelIR, RelationIR, SchemaIR } from \"./ir.ts\";\nimport { predicateFieldNames } from \"./predicate.ts\";\nimport type { PredicateIR } from \"./predicate.ts\";\nimport { VibeError, unsupportedCapability } from \"./errors.ts\";\nimport { DIALECT_CAPABILITIES } from \"./capabilities.ts\";\nimport { RESERVED_COLUMN_PREFIX } from \"./reserved.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\", \"ExtendedDateTime\",\n \"enumValidators\",\n \"enumValidator\",\n \"OmittedKeys\",\n \"ExactKeys\",\n \"PossibleKeys\",\n \"UncertainKeys\",\n \"HasSelectedField\",\n \"Provided\",\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 \"VibeClientOptions\",\n \"VibeError\",\n \"VibeErrorCode\",\n \"BatchPayload\",\n \"UpsertManyPayload\",\n \"QueryMode\",\n \"RelationStrategy\",\n \"SortOrder\",\n \"SortOrderWithNulls\",\n \"KeysetToken\",\n \"KeysetOptions\",\n \"RowLockRequest\",\n \"JsonValue\",\n \"InputJsonValue\",\n \"InputJsonArray\",\n \"InputJsonObject\",\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 \"QueryEvent\",\n \"Skip\",\n \"TransactionOptions\",\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 \"ScalarOrderByInput\", \"RelationOrderByInput\", \"RelationFindManyArgs\",\n \"CreateInput\", \"UncheckedCreateInput\", \"CreateManyInput\", \"UpdateInput\", \"UncheckedUpdateInput\", \"UpdateManyInput\",\n \"CountAggregateInput\", \"AvgAggregateInput\", \"SumAggregateInput\", \"MinAggregateInput\", \"MaxAggregateInput\",\n \"FindManyArgs\", \"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\", \"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\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 }\n const register = (params: { name: string; owner: string }): void => {\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 for (const model of schema.models) {\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\n/** Validate a SchemaIR structurally; returns all issues found (empty = valid). */\nexport function validateSchemaIR(params: { schema: SchemaIR }): ValidationIssue[] {\n const { schema } = params;\n const issues: ValidationIssue[] = [];\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 for (const model of schema.models) {\n validateModel({ model, modelByName, enumByName, issues });\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 = new Set(model.fields.map((field) => field.name));\n const defaultKeys = new Set<string>();\n if (\n model.primaryKey !== undefined &&\n model.primaryKey.fields.length > 1 &&\n model.primaryKey.clientName === undefined\n ) {\n defaultKeys.add(model.primaryKey.fields.join(\"_\"));\n }\n for (const index of model.indexes) {\n if (\n index.kind === \"unique\" &&\n index.where === undefined &&\n index.fields.length > 1 &&\n index.clientName === undefined\n ) {\n defaultKeys.add(index.fields.map((field) => field.name).join(\"_\"));\n }\n }\n const seenSelectorNames = new Set<string>();\n const checkSelectorName = (params: {\n clientName: string;\n fieldCount: number;\n where?: string;\n isUnique: boolean;\n site: string;\n }): void => {\n const { clientName, fieldCount, 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 (fieldCount < 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 if (fieldNames.has(clientName) || defaultKeys.has(clientName) || seenSelectorNames.has(clientName)) {\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.add(clientName);\n };\n if (model.primaryKey !== undefined && model.primaryKey.clientName !== undefined) {\n checkSelectorName({\n clientName: model.primaryKey.clientName,\n fieldCount: model.primaryKey.fields.length,\n isUnique: true,\n site: \"@@id\",\n });\n }\n for (const index of model.indexes) {\n if (index.clientName === undefined) continue;\n checkSelectorName({\n clientName: index.clientName,\n fieldCount: index.fields.length,\n ...(index.where === undefined ? {} : { where: index.where }),\n isUnique: index.kind === \"unique\",\n site: \"@@unique\",\n });\n }\n }\n\n validateGeneratedNames({ schema, issues });\n validateNativeRls({ schema, issues });\n return issues;\n}\n\nfunction validateModel(params: {\n model: ModelIR;\n modelByName: Map<string, ModelIR>;\n enumByName: Map<string, EnumIR>;\n issues: ValidationIssue[];\n}): void {\n const { model, modelByName, enumByName, issues } = 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\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).\n const fieldNames = new Set(model.fields.map((f) => f.name));\n const hasIdField = model.fields.some((f) => f.isId);\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 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 (target !== undefined) {\n const targetFieldNames = new Set(target.fields.map((f) => f.name));\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\") {\n issues.push({\n rule: \"collation-non-string\",\n message: `@collation on \"${model.name}.${field.name}\" — collation is only valid on String fields`,\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 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 issues,\n });\n }\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 issues: ValidationIssue[];\n}): void {\n const { predicate, model, fieldNames, site, issues } = params;\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 if (model.fields.find((field) => field.name === name)?.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/** Throw VIBE_SCHEMA_INVALID (with all issues in meta) if the schema is invalid. */\nexport function assertValidSchemaIR(params: { schema: SchemaIR }): void {\n const dialect = providerToDialect({ provider: params.schema.datasource.provider });\n for (const model of params.schema.models) {\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 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 if (params.schema.rls !== undefined && !DIALECT_CAPABILITIES[dialect].nativeRowLevelSecurity) {\n throw unsupportedCapability({ dialect, feature: \"nativeRowLevelSecurity\" });\n }\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 (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) => index.fields[0]?.name === field.name)) throw unsupportedCapability({ dialect, feature: `unindexed auto-increment column ${model.name}.${field.name}` });\n }\n }\n const issues = validateSchemaIR(params);\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}\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 || 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 (field.type === ref.type || (isEnumType(field.type) && isEnumType(ref.type) && field.type.enum === ref.type.enum));\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\" && 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",
|
|
16
16
|
"/**\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"
|
|
17
17
|
],
|
|
18
|
-
"mappings": "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",
|
|
19
|
-
"debugId": "
|
|
18
|
+
"mappings": "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",
|
|
19
|
+
"debugId": "A977A79FC940B2A264756E2164756E21",
|
|
20
20
|
"names": []
|
|
21
21
|
}
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAU,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASrE,MAAM,MAAM,eAAe,GAAG;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAMF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAU,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASrE,MAAM,MAAM,eAAe,GAAG;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAMF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAkFhD,CAAC;AAmEF,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GAAG,eAAe,EAAE,CAsOhF;AAwSD,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GAAG,IAAI,CAsDtE;AAkBD,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,eAAe,EAAE,CAepF;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;CAC5B,GAAG,OAAO,CAQV"}
|