@vibeorm/dsl 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -63,13 +63,13 @@ To go to the IR yourself: `dsl.toIR({ schema })` returns a `SchemaIR`, optionall
63
63
 
64
64
  `dsl.enum` has two forms: with a `name` it creates a reusable enum whose `.field()` yields a column, without one it creates an inline single-use enum column.
65
65
 
66
- Id strategies are `dsl.id({ type: "ulid" | "uuid" | "cuid" | "nanoid" | "autoincrement" | "none" })`. The default is `"ulid"`, a `String` column generated in the app; `"autoincrement"` makes it an `Int`.
66
+ Id strategies are `dsl.id({ type: "ulid" | "uuid" | "cuid" | "nanoid" | "autoincrement" | "none" })`. The default is `"ulid"`, a `String` column generated in the app; `"autoincrement"` makes it an `Int`. A key the database mints takes `type: "none"` with a database default: `dsl.id({ type: "none" }).uuid().dbgenerated("uuidv7()")` is Prisma's `String @id @db.Uuid @default(dbgenerated("uuidv7()"))`.
67
67
 
68
68
  ## Chainable modifiers
69
69
 
70
70
  On every column: `.optional()`, `.unique()`, `.index()`, `.array()`, `.default(value)`, `.map("db_col")`, `.dbgenerated("expr")`, `.comment("...")`.
71
71
 
72
- Kind-specific: `.maxLength(n)` and `.text()` on strings, `.precision(p, s)` on decimals, `.defaultNow()`, `.updatedAt()` and `.tz()` on datetimes. `.tz({ precision: 3 })` declares `@db.Timestamptz(3)`: it stores exactly what a JavaScript `Date` holds, so a database-written time reads back unchanged and `findPage` can order by the column without an assertion.
72
+ Kind-specific: `.maxLength(n)`, `.text()` and `.uuid()` on strings (`.uuid()` also on ids), `.precision(p, s)` on decimals, `.defaultNow()`, `.updatedAt()` and `.tz()` on datetimes. `.tz({ precision: 3 })` declares `@db.Timestamptz(3)`: it stores exactly what a JavaScript `Date` holds, so a database-written time reads back unchanged and `findPage` can order by the column without an assertion. `.uuid()` declares `@db.Uuid`: PostgreSQL's native uuid type (the value stays a `string`); SQLite stores it as `TEXT`; MySQL has no uuid type and refuses the schema with `VIBE_UNSUPPORTED_CAPABILITY`.
73
73
 
74
74
  ### Database defaults
75
75
 
package/dist/column.d.ts CHANGED
@@ -65,6 +65,11 @@ export declare class ChainableStringColumn extends ChainableColumn<"string"> {
65
65
  maxLength(n: number): this;
66
66
  /** `@db.Text` */
67
67
  text(): this;
68
+ /**
69
+ * `@db.Uuid` — PostgreSQL's native 128-bit uuid column; values stay strings.
70
+ * SQLite stores the string as TEXT; MySQL has no uuid type and refuses it.
71
+ */
72
+ uuid(): this;
68
73
  /** `@collation("...")` — explicit column collation (mysql-rendered; inert on postgres/sqlite). */
69
74
  collation(name: string): this;
70
75
  }
@@ -96,6 +101,12 @@ export declare class ChainableIdColumn extends ChainableColumn<"id"> {
96
101
  constructor(config?: IdColumnConfig);
97
102
  /** Sets the id generator strategy (default `"ulid"`). */
98
103
  type(idType: IdGeneratorType): this;
104
+ /**
105
+ * `@db.Uuid` — store a String id in PostgreSQL's native uuid column. Pair it
106
+ * with an app-side strategy (`type: "uuid"`), or with `type: "none"` and a
107
+ * database default: `dsl.id({ type: "none" }).uuid().dbgenerated("uuidv7()")`.
108
+ */
109
+ uuid(): this;
99
110
  }
100
111
  /** Enum column whose `default()` is constrained to the declared options. */
101
112
  export declare class ChainableEnumColumn<T extends readonly string[] = readonly string[]> extends ChainableColumn<"enum"> {
@@ -165,6 +176,7 @@ export declare function json(config?: JsonColumnConfig): ChainableJsonColumn;
165
176
  * dsl.id() // String @id @default(ulid())
166
177
  * dsl.id({ type: "uuid" }) // String @id @default(uuid())
167
178
  * dsl.id().type("autoincrement") // Int @id @default(autoincrement())
179
+ * dsl.id({ type: "none" }).uuid().dbgenerated("uuidv7()") // String @id @db.Uuid @default(dbgenerated("uuidv7()"))
168
180
  */
169
181
  export declare function id(config?: IdColumnConfig): ChainableIdColumn;
170
182
  /** Bytes column. */
package/dist/index.js CHANGED
@@ -72,6 +72,10 @@ class ChainableStringColumn extends ChainableColumn {
72
72
  this.__config.text = true;
73
73
  return this;
74
74
  }
75
+ uuid() {
76
+ this.__config.uuid = true;
77
+ return this;
78
+ }
75
79
  collation(name) {
76
80
  this.__config.collation = name;
77
81
  return this;
@@ -120,6 +124,10 @@ class ChainableIdColumn extends ChainableColumn {
120
124
  this.__config.type = idType;
121
125
  return this;
122
126
  }
127
+ uuid() {
128
+ this.__config.uuid = true;
129
+ return this;
130
+ }
123
131
  }
124
132
 
125
133
  class ChainableEnumColumn extends ChainableColumn {
@@ -1114,8 +1122,15 @@ function idDefault(params) {
1114
1122
  function fieldDefault(params) {
1115
1123
  const { column } = params;
1116
1124
  if (column.__columnType === "id") {
1117
- if (column.__config.default !== undefined || column.__config.dbgenerated !== undefined || column.__config.autoincrement !== undefined)
1125
+ const strategy = column.__config.type;
1126
+ const dbgenerated = column.__config.dbgenerated;
1127
+ if (column.__config.default !== undefined || column.__config.autoincrement !== undefined)
1118
1128
  throw new VibeError5({ code: "VIBE_SCHEMA_INVALID", message: "Use the id generator strategy instead of a conflicting id default" });
1129
+ if (dbgenerated !== undefined) {
1130
+ if (strategy !== "none" || typeof dbgenerated !== "string")
1131
+ throw new VibeError5({ code: "VIBE_SCHEMA_INVALID", message: `An id with a database default needs dsl.id({ type: "none" }); the "${String(strategy)}" generator strategy would conflict with it`, meta: { issues: [{ rule: "id-dbgenerated-strategy", column: column.__name, strategy }] } });
1132
+ return { kind: "dbgenerated", sql: dbgenerated };
1133
+ }
1119
1134
  return idDefault({ column });
1120
1135
  }
1121
1136
  const { dbgenerated, default: value, autoincrement } = column.__config;
@@ -1172,8 +1187,43 @@ function datetimeNativeType(params) {
1172
1187
  return;
1173
1188
  return precision === undefined ? "Timestamptz" : `Timestamptz(${precision})`;
1174
1189
  }
1190
+ function stringNativeType(params) {
1191
+ const { maxLength, text, uuid } = params.config;
1192
+ if (uuid === true) {
1193
+ if (maxLength !== undefined || text === true) {
1194
+ const at = params.column === undefined ? "A string column" : `Column "${params.column}"`;
1195
+ throw new VibeError5({
1196
+ code: "VIBE_SCHEMA_INVALID",
1197
+ message: `${at}: uuid() is the column's type and cannot be combined with maxLength or text`,
1198
+ meta: { issues: [{ rule: "string-native-type", column: params.column }] }
1199
+ });
1200
+ }
1201
+ return "Uuid";
1202
+ }
1203
+ if (typeof maxLength === "number")
1204
+ return `VarChar(${maxLength})`;
1205
+ if (text === true)
1206
+ return "Text";
1207
+ return;
1208
+ }
1209
+ function idNativeType(params) {
1210
+ if (params.config.uuid !== true)
1211
+ return;
1212
+ if (params.config.type === "autoincrement") {
1213
+ throw new VibeError5({
1214
+ code: "VIBE_SCHEMA_INVALID",
1215
+ message: `${params.column === undefined ? "An id" : `Id "${params.column}"`}: uuid() needs a String id; an autoincrement id is an Int`,
1216
+ meta: { issues: [{ rule: "id-native-type", column: params.column }] }
1217
+ });
1218
+ }
1219
+ return "Uuid";
1220
+ }
1175
1221
  function nativeType(params) {
1176
1222
  const { column } = params;
1223
+ if (column.__columnType === "string")
1224
+ return stringNativeType({ config: column.__config, column: column.__name });
1225
+ if (column.__columnType === "id")
1226
+ return idNativeType({ config: column.__config, column: column.__name });
1177
1227
  if (column.__columnType === "enum") {
1178
1228
  const { maxLength, text } = column.__config;
1179
1229
  if (maxLength !== undefined || text !== undefined) {
@@ -1187,7 +1237,7 @@ function nativeType(params) {
1187
1237
  }
1188
1238
  }
1189
1239
  }
1190
- if (column.__columnType === "string" || column.__columnType === "enum" && column.__enumStorage === "string") {
1240
+ if (column.__columnType === "enum" && column.__enumStorage === "string") {
1191
1241
  const { maxLength, text } = column.__config;
1192
1242
  if (typeof maxLength === "number")
1193
1243
  return `VarChar(${maxLength})`;
@@ -1384,7 +1434,7 @@ class ExtensionDeclarationCollector {
1384
1434
  const perModel = this.byExtension.get(params.extension) ?? new Map;
1385
1435
  this.byExtension.set(params.extension, perModel);
1386
1436
  const existing = perModel.get(params.model) ?? {};
1387
- perModel.set(params.model, mergeExtensionDeclarations({ base: existing, next: params.declaration }));
1437
+ perModel.set(params.model, mergeExtensionDeclarations({ base: existing, next: params.declaration, extension: params.extension }));
1388
1438
  }
1389
1439
  toIR() {
1390
1440
  return [...this.byExtension.entries()].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([name, perModel]) => ({
@@ -1501,13 +1551,9 @@ function defaultAttribute(params) {
1501
1551
  }
1502
1552
  function nativeTypeAttribute(params) {
1503
1553
  const { column } = params;
1504
- if (column.__columnType === "string") {
1505
- const { maxLength, text } = column.__config;
1506
- if (typeof maxLength === "number")
1507
- return `@db.VarChar(${maxLength})`;
1508
- if (text === true)
1509
- return "@db.Text";
1510
- return;
1554
+ if (column.__columnType === "string" || column.__columnType === "id") {
1555
+ const native = column.__columnType === "string" ? stringNativeType({ config: column.__config, column: column.__name }) : idNativeType({ config: column.__config, column: column.__name });
1556
+ return native === undefined ? undefined : `@db.${native}`;
1511
1557
  }
1512
1558
  if (column.__columnType === "decimal") {
1513
1559
  const { precision, scale } = column.__config;
@@ -2366,4 +2412,4 @@ export {
2366
2412
  withNameDescription
2367
2413
  };
2368
2414
 
2369
- //# debugId=21B90DDA6F5E192964756E2164756E21
2415
+ //# debugId=24494B6B129BF22A64756E2164756E21
package/dist/index.js.map CHANGED
@@ -2,11 +2,11 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/column.ts", "../src/enum.ts", "../src/generator/prisma.ts", "../src/predicate.ts", "../src/to-ir.ts", "../src/field-type.ts", "../src/relation-plan.ts", "../src/model.ts", "../src/naming.ts", "../src/relation.ts", "../src/relations.ts", "../src/schema.ts", "../src/templates.ts", "../src/validate.ts", "../src/index.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * Column builders. Chainable style is encouraged; the config-object form is\n * equivalent and fully supported.\n *\n * @example\n * dsl.string().optional()\n * dsl.string().unique().index()\n * dsl.int().default(42)\n * dsl.string({ optional: true })\n */\n\nimport { VibeError, assertJsonSchemaRef, encodePrismaString } from \"@vibeorm/schema\";\nimport type { EnumStorage, JsonSchemaRefIR } from \"@vibeorm/schema\";\nimport type {\n BaseColumnConfig,\n BigIntColumnConfig,\n BooleanColumnConfig,\n BytesColumnConfig,\n ColumnDef,\n ColumnType,\n DatetimeColumnConfig,\n DecimalColumnConfig,\n ExtensionTypeConfig,\n FloatColumnConfig,\n IdColumnConfig,\n IdGeneratorType,\n InlineEnumConfig,\n IntColumnConfig,\n JsonColumnConfig,\n StringColumnConfig,\n UnsupportedColumnConfig,\n} from \"./types.ts\";\n\n// ─── Clone helper ─────────────────────────\n\n/**\n * Shallow-clones a column definition with a fresh `__config`, so columns\n * spread from a template are never shared between models.\n */\nexport function cloneColumnDef(params: { column: ColumnDef }): ColumnDef {\n const { column } = params;\n return {\n __type: \"column\",\n __columnType: column.__columnType,\n __name: column.__name,\n __config: { ...column.__config, ...(column.__config.jsonSchema === undefined ? {} : { jsonSchema: assertJsonSchemaRef({ value: column.__config.jsonSchema }) }) },\n __enumValues: column.__enumValues,\n __enumName: column.__enumName,\n __enumStorage: column.__enumStorage,\n };\n}\n\n// ─── Chainable columns ────────────────────\n\ntype ColumnDefaultValues = {\n string: string;\n int: number;\n bigint: bigint | number;\n float: number;\n decimal: string | number;\n boolean: boolean;\n datetime: string | Date;\n json: unknown;\n id: never;\n bytes: Uint8Array | string;\n enum: string;\n unsupported: unknown;\n};\n\n/** Chainable column builder shared by every column kind. */\nexport class ChainableColumn<T extends ColumnType = ColumnType> implements ColumnDef<T> {\n readonly __type: \"column\" = \"column\";\n readonly __columnType: T;\n __config: BaseColumnConfig;\n __name?: string;\n __enumValues?: readonly string[];\n __enumName?: string;\n __enumStorage?: EnumStorage;\n\n constructor(columnType: T, config: BaseColumnConfig = {}) {\n this.__columnType = columnType;\n this.__config = { ...config };\n }\n\n /** Marks the column nullable (`Type?`). */\n optional(): this {\n this.__config.optional = true;\n return this;\n }\n\n /** Adds a `@unique` constraint. */\n unique(): this {\n this.__config.unique = true;\n return this;\n }\n\n /** Adds a single-column index. */\n index(): this {\n this.__config.index = true;\n return this;\n }\n\n /** Marks the column as a list (`Type[]`). */\n array(): this {\n this.__config.array = true;\n return this;\n }\n\n /** Sets a literal default value. */\n default(value: ColumnDefaultValues[T] | readonly ColumnDefaultValues[T][]): this {\n this.__config.default = value;\n return this;\n }\n\n /** `@map(\"db_column\")` — database column name when it differs. */\n map(dbColumnName: string): this {\n this.__config.map = dbColumnName;\n return this;\n }\n\n /** `@default(dbgenerated(\"expression\"))` — database-native default. */\n dbgenerated(expression: string): this {\n this.__config.dbgenerated = expression;\n return this;\n }\n\n /** Emits a `///` doc comment above the column. */\n comment(text: string): this {\n this.__config.comment = text;\n return this;\n }\n}\n\n/** String column with database-level type annotations. */\nexport class ChainableStringColumn extends ChainableColumn<\"string\"> {\n constructor(config: StringColumnConfig = {}) {\n super(\"string\", config);\n }\n\n /** `@db.VarChar(n)` */\n maxLength(n: number): this {\n (this.__config as StringColumnConfig).maxLength = n;\n return this;\n }\n\n /** `@db.Text` */\n text(): this {\n (this.__config as StringColumnConfig).text = true;\n return this;\n }\n\n /** `@collation(\"...\")` — explicit column collation (mysql-rendered; inert on postgres/sqlite). */\n collation(name: string): this {\n (this.__config as StringColumnConfig).collation = name;\n return this;\n }\n}\n\n/** Decimal column carrying precision/scale. */\nexport class ChainableDecimalColumn extends ChainableColumn<\"decimal\"> {\n constructor(config: DecimalColumnConfig = {}) {\n super(\"decimal\", config);\n }\n\n /** `@db.Decimal(precision, scale)` */\n precision(p: number, s?: number): this {\n (this.__config as DecimalColumnConfig).precision = p;\n if (s !== undefined) {\n (this.__config as DecimalColumnConfig).scale = s;\n }\n return this;\n }\n}\n\n/** DateTime column with timestamp-specific helpers. */\nexport class ChainableDatetimeColumn extends ChainableColumn<\"datetime\"> {\n constructor(config: DatetimeColumnConfig = {}) {\n super(\"datetime\", config);\n }\n\n /**\n * `@db.Timestamptz` — timezone-aware timestamp; `{ precision: n }` declares\n * `@db.Timestamptz(n)` (0–6 fractional-seconds digits). Precision 3 stores\n * exactly what a JavaScript `Date` holds, so a database-written value reads\n * back unchanged and `findPage` may order by it without an assertion.\n */\n tz(options?: { readonly precision?: number }): this {\n (this.__config as DatetimeColumnConfig).tz = true;\n if (options?.precision !== undefined) {\n (this.__config as DatetimeColumnConfig).precision = options.precision;\n }\n return this;\n }\n\n /** `@updatedAt` — refreshed on every update. */\n updatedAt(): this {\n (this.__config as DatetimeColumnConfig).updatedAt = true;\n return this;\n }\n\n /** `@default(now())` */\n defaultNow(): this {\n (this.__config as DatetimeColumnConfig).default = \"now\";\n return this;\n }\n}\n\n/** Primary-key column with a generator strategy. */\nexport class ChainableIdColumn extends ChainableColumn<\"id\"> {\n constructor(config: IdColumnConfig = {}) {\n super(\"id\", { ...config, type: config.type ?? \"ulid\" });\n }\n\n /** Sets the id generator strategy (default `\"ulid\"`). */\n type(idType: IdGeneratorType): this {\n (this.__config as IdColumnConfig).type = idType;\n return this;\n }\n}\n\n/** Enum column whose `default()` is constrained to the declared options. */\nexport class ChainableEnumColumn<\n T extends readonly string[] = readonly string[],\n> extends ChainableColumn<\"enum\"> {\n constructor(params: {\n options: T;\n config?: BaseColumnConfig;\n enumName?: string;\n storage?: EnumStorage;\n }) {\n super(\"enum\", params.config ?? {});\n this.__enumValues = params.options;\n if (params.enumName !== undefined) {\n this.__enumName = params.enumName;\n }\n if (params.storage !== undefined) {\n this.__enumStorage = params.storage;\n }\n }\n\n /** Sets the default to one of the declared options. */\n default(value: T[number] | readonly T[number][]): this {\n this.__config.default = value;\n return this;\n }\n}\n\n// ─── Column factories ─────────────────────\n\n/**\n * String column.\n *\n * @example\n * dsl.string() // String\n * dsl.string().optional() // String?\n * dsl.string().unique().index() // String @unique + @@index\n */\nexport function string(config: StringColumnConfig = {}): ChainableStringColumn {\n return new ChainableStringColumn(config);\n}\n\n/** Integer column with database-generated values independent of primary-key membership. */\nexport class ChainableIntegerColumn<T extends \"int\" | \"bigint\"> extends ChainableColumn<T> {\n /** Assign values from the database sequence; does not imply a key or uniqueness. */\n autoincrement(): this {\n this.__config.autoincrement = true;\n return this;\n }\n}\n\n/** Int column. */\nexport function int(config: IntColumnConfig = {}): ChainableIntegerColumn<\"int\"> {\n return new ChainableIntegerColumn(\"int\", config);\n}\n\n/** Float column. */\nexport function float(config: FloatColumnConfig = {}): ChainableColumn<\"float\"> {\n return new ChainableColumn(\"float\", config);\n}\n\n/** Decimal column. */\nexport function decimal(config: DecimalColumnConfig = {}): ChainableDecimalColumn {\n return new ChainableDecimalColumn(config);\n}\n\n/** Boolean column. */\nexport function boolean(config: BooleanColumnConfig = {}): ChainableColumn<\"boolean\"> {\n return new ChainableColumn(\"boolean\", config);\n}\n\n/**\n * DateTime column.\n *\n * @example\n * dsl.datetime().defaultNow().updatedAt().tz()\n * dsl.datetime().defaultNow().tz({ precision: 3 })\n */\nexport function datetime(config: DatetimeColumnConfig = {}): ChainableDatetimeColumn {\n return new ChainableDatetimeColumn(config);\n}\n\n/** Json column with a consumer-declared payload type (typed JSON). */\nexport class ChainableJsonColumn extends ChainableColumn<\"json\"> {\n constructor(config: JsonColumnConfig = {}) {\n super(\"json\", { ...config, ...(config.jsonSchema === undefined ? {} : { jsonSchema: assertJsonSchemaRef({ value: config.jsonSchema }) }) });\n }\n\n /** Bind runtime write/read validation to a consumer-owned named export. */\n schema(reference: JsonSchemaRefIR): this {\n if (this.__config.jsonSchema !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A field may declare only one JSON schema reference\", meta: { issues: [{ rule: \"duplicate-json-schema-ref\" }] } });\n this.__config.jsonSchema = assertJsonSchemaRef({ value: reference });\n return this;\n }\n\n /**\n * Declares the TS type of this column's payload. Written as a\n * `/// @type(Name from \"specifier\")` doc comment — the annotation rides the\n * existing comment plumbing into the IR, and the generator substitutes the\n * named type (with its import) for `JsonValue` in the emitted `.d.ts`.\n * A TYPE assertion, not a runtime guarantee — pair with `validate` on the\n * client and/or a named `@@check` for enforcement.\n */\n typed(config: { name: string; from: string }): this {\n const ref = assertJsonSchemaRef({ value: config });\n const annotation = `@type(${ref.name} from ${encodePrismaString({ value: ref.from })})`;\n this.__config.comment =\n this.__config.comment === undefined ? annotation : `${this.__config.comment} ${annotation}`;\n return this;\n }\n}\n\n/** Json column. */\nexport function json(config: JsonColumnConfig = {}): ChainableJsonColumn {\n return new ChainableJsonColumn(config);\n}\n\n/**\n * Primary-key column.\n *\n * @example\n * dsl.id() // String @id @default(ulid())\n * dsl.id({ type: \"uuid\" }) // String @id @default(uuid())\n * dsl.id().type(\"autoincrement\") // Int @id @default(autoincrement())\n */\nexport function id(config: IdColumnConfig = {}): ChainableIdColumn {\n return new ChainableIdColumn(config);\n}\n\n/** Bytes column. */\nexport function bytes(config: BytesColumnConfig = {}): ChainableColumn<\"bytes\"> {\n return new ChainableColumn(\"bytes\", config);\n}\n\n/** BigInt column, for values beyond 32-bit ints. */\nexport function bigint(config: BigIntColumnConfig = {}): ChainableIntegerColumn<\"bigint\"> {\n return new ChainableIntegerColumn(\"bigint\", config);\n}\n\n/**\n * Column with a database-native type Prisma cannot model.\n *\n * @example\n * dsl.unsupported(\"tsvector\")\n * dsl.unsupported(\"geometry(Point, 4326)\")\n */\nexport function unsupported(dbType: string): ChainableColumn<\"unsupported\"> {\n const config: UnsupportedColumnConfig = { dbType };\n return new ChainableColumn(\"unsupported\", config);\n}\n\n/**\n * Column typed by a registered extension — the DSL twin of writing\n * `embedding Vector(1536)` in .prisma. The extension registry lowers it to a\n * native database type at `toIR` time; like `Unsupported`, it stays out of the\n * core queryable surface (the extension's client plane covers it).\n *\n * @example\n * embedding: dsl.extensionType({ type: \"Vector\", args: [1536] })\n */\nexport function extensionType(config: ExtensionTypeConfig): ChainableColumn<\"unsupported\"> {\n const { type, args, ...rest } = config;\n return new ChainableColumn(\"unsupported\", {\n ...rest,\n dbType: \"\",\n extensionType: type,\n extensionArgs: [...(args ?? [])],\n });\n}\n\n/**\n * Inline (one-off) enum column. For a reusable enum use\n * `dsl.enum({ name, options })` and its `.field()`.\n *\n * @example\n * dsl.enum({ options: [\"low\", \"high\"] }).default(\"low\")\n */\nexport function enumCol<const T extends readonly string[]>(\n config: InlineEnumConfig<T>\n): ChainableEnumColumn<T> {\n const { options, storage, ...restConfig } = config;\n // No enum name: `dsl.schema()` derives `${Model}${Column}` for inline enums.\n return new ChainableEnumColumn<T>({\n options,\n config: restConfig,\n ...(storage === undefined ? {} : { storage }),\n });\n}\n",
5
+ "/**\n * Column builders. Chainable style is encouraged; the config-object form is\n * equivalent and fully supported.\n *\n * @example\n * dsl.string().optional()\n * dsl.string().unique().index()\n * dsl.int().default(42)\n * dsl.string({ optional: true })\n */\n\nimport { VibeError, assertJsonSchemaRef, encodePrismaString } from \"@vibeorm/schema\";\nimport type { EnumStorage, JsonSchemaRefIR } from \"@vibeorm/schema\";\nimport type {\n BaseColumnConfig,\n BigIntColumnConfig,\n BooleanColumnConfig,\n BytesColumnConfig,\n ColumnDef,\n ColumnType,\n DatetimeColumnConfig,\n DecimalColumnConfig,\n ExtensionTypeConfig,\n FloatColumnConfig,\n IdColumnConfig,\n IdGeneratorType,\n InlineEnumConfig,\n IntColumnConfig,\n JsonColumnConfig,\n StringColumnConfig,\n UnsupportedColumnConfig,\n} from \"./types.ts\";\n\n// ─── Clone helper ─────────────────────────\n\n/**\n * Shallow-clones a column definition with a fresh `__config`, so columns\n * spread from a template are never shared between models.\n */\nexport function cloneColumnDef(params: { column: ColumnDef }): ColumnDef {\n const { column } = params;\n return {\n __type: \"column\",\n __columnType: column.__columnType,\n __name: column.__name,\n __config: { ...column.__config, ...(column.__config.jsonSchema === undefined ? {} : { jsonSchema: assertJsonSchemaRef({ value: column.__config.jsonSchema }) }) },\n __enumValues: column.__enumValues,\n __enumName: column.__enumName,\n __enumStorage: column.__enumStorage,\n };\n}\n\n// ─── Chainable columns ────────────────────\n\ntype ColumnDefaultValues = {\n string: string;\n int: number;\n bigint: bigint | number;\n float: number;\n decimal: string | number;\n boolean: boolean;\n datetime: string | Date;\n json: unknown;\n id: never;\n bytes: Uint8Array | string;\n enum: string;\n unsupported: unknown;\n};\n\n/** Chainable column builder shared by every column kind. */\nexport class ChainableColumn<T extends ColumnType = ColumnType> implements ColumnDef<T> {\n readonly __type: \"column\" = \"column\";\n readonly __columnType: T;\n __config: BaseColumnConfig;\n __name?: string;\n __enumValues?: readonly string[];\n __enumName?: string;\n __enumStorage?: EnumStorage;\n\n constructor(columnType: T, config: BaseColumnConfig = {}) {\n this.__columnType = columnType;\n this.__config = { ...config };\n }\n\n /** Marks the column nullable (`Type?`). */\n optional(): this {\n this.__config.optional = true;\n return this;\n }\n\n /** Adds a `@unique` constraint. */\n unique(): this {\n this.__config.unique = true;\n return this;\n }\n\n /** Adds a single-column index. */\n index(): this {\n this.__config.index = true;\n return this;\n }\n\n /** Marks the column as a list (`Type[]`). */\n array(): this {\n this.__config.array = true;\n return this;\n }\n\n /** Sets a literal default value. */\n default(value: ColumnDefaultValues[T] | readonly ColumnDefaultValues[T][]): this {\n this.__config.default = value;\n return this;\n }\n\n /** `@map(\"db_column\")` — database column name when it differs. */\n map(dbColumnName: string): this {\n this.__config.map = dbColumnName;\n return this;\n }\n\n /** `@default(dbgenerated(\"expression\"))` — database-native default. */\n dbgenerated(expression: string): this {\n this.__config.dbgenerated = expression;\n return this;\n }\n\n /** Emits a `///` doc comment above the column. */\n comment(text: string): this {\n this.__config.comment = text;\n return this;\n }\n}\n\n/** String column with database-level type annotations. */\nexport class ChainableStringColumn extends ChainableColumn<\"string\"> {\n constructor(config: StringColumnConfig = {}) {\n super(\"string\", config);\n }\n\n /** `@db.VarChar(n)` */\n maxLength(n: number): this {\n (this.__config as StringColumnConfig).maxLength = n;\n return this;\n }\n\n /** `@db.Text` */\n text(): this {\n (this.__config as StringColumnConfig).text = true;\n return this;\n }\n\n /**\n * `@db.Uuid` — PostgreSQL's native 128-bit uuid column; values stay strings.\n * SQLite stores the string as TEXT; MySQL has no uuid type and refuses it.\n */\n uuid(): this {\n (this.__config as StringColumnConfig).uuid = true;\n return this;\n }\n\n /** `@collation(\"...\")` — explicit column collation (mysql-rendered; inert on postgres/sqlite). */\n collation(name: string): this {\n (this.__config as StringColumnConfig).collation = name;\n return this;\n }\n}\n\n/** Decimal column carrying precision/scale. */\nexport class ChainableDecimalColumn extends ChainableColumn<\"decimal\"> {\n constructor(config: DecimalColumnConfig = {}) {\n super(\"decimal\", config);\n }\n\n /** `@db.Decimal(precision, scale)` */\n precision(p: number, s?: number): this {\n (this.__config as DecimalColumnConfig).precision = p;\n if (s !== undefined) {\n (this.__config as DecimalColumnConfig).scale = s;\n }\n return this;\n }\n}\n\n/** DateTime column with timestamp-specific helpers. */\nexport class ChainableDatetimeColumn extends ChainableColumn<\"datetime\"> {\n constructor(config: DatetimeColumnConfig = {}) {\n super(\"datetime\", config);\n }\n\n /**\n * `@db.Timestamptz` — timezone-aware timestamp; `{ precision: n }` declares\n * `@db.Timestamptz(n)` (0–6 fractional-seconds digits). Precision 3 stores\n * exactly what a JavaScript `Date` holds, so a database-written value reads\n * back unchanged and `findPage` may order by it without an assertion.\n */\n tz(options?: { readonly precision?: number }): this {\n (this.__config as DatetimeColumnConfig).tz = true;\n if (options?.precision !== undefined) {\n (this.__config as DatetimeColumnConfig).precision = options.precision;\n }\n return this;\n }\n\n /** `@updatedAt` — refreshed on every update. */\n updatedAt(): this {\n (this.__config as DatetimeColumnConfig).updatedAt = true;\n return this;\n }\n\n /** `@default(now())` */\n defaultNow(): this {\n (this.__config as DatetimeColumnConfig).default = \"now\";\n return this;\n }\n}\n\n/** Primary-key column with a generator strategy. */\nexport class ChainableIdColumn extends ChainableColumn<\"id\"> {\n constructor(config: IdColumnConfig = {}) {\n super(\"id\", { ...config, type: config.type ?? \"ulid\" });\n }\n\n /** Sets the id generator strategy (default `\"ulid\"`). */\n type(idType: IdGeneratorType): this {\n (this.__config as IdColumnConfig).type = idType;\n return this;\n }\n\n /**\n * `@db.Uuid` — store a String id in PostgreSQL's native uuid column. Pair it\n * with an app-side strategy (`type: \"uuid\"`), or with `type: \"none\"` and a\n * database default: `dsl.id({ type: \"none\" }).uuid().dbgenerated(\"uuidv7()\")`.\n */\n uuid(): this {\n (this.__config as IdColumnConfig).uuid = true;\n return this;\n }\n}\n\n/** Enum column whose `default()` is constrained to the declared options. */\nexport class ChainableEnumColumn<\n T extends readonly string[] = readonly string[],\n> extends ChainableColumn<\"enum\"> {\n constructor(params: {\n options: T;\n config?: BaseColumnConfig;\n enumName?: string;\n storage?: EnumStorage;\n }) {\n super(\"enum\", params.config ?? {});\n this.__enumValues = params.options;\n if (params.enumName !== undefined) {\n this.__enumName = params.enumName;\n }\n if (params.storage !== undefined) {\n this.__enumStorage = params.storage;\n }\n }\n\n /** Sets the default to one of the declared options. */\n default(value: T[number] | readonly T[number][]): this {\n this.__config.default = value;\n return this;\n }\n}\n\n// ─── Column factories ─────────────────────\n\n/**\n * String column.\n *\n * @example\n * dsl.string() // String\n * dsl.string().optional() // String?\n * dsl.string().unique().index() // String @unique + @@index\n */\nexport function string(config: StringColumnConfig = {}): ChainableStringColumn {\n return new ChainableStringColumn(config);\n}\n\n/** Integer column with database-generated values independent of primary-key membership. */\nexport class ChainableIntegerColumn<T extends \"int\" | \"bigint\"> extends ChainableColumn<T> {\n /** Assign values from the database sequence; does not imply a key or uniqueness. */\n autoincrement(): this {\n this.__config.autoincrement = true;\n return this;\n }\n}\n\n/** Int column. */\nexport function int(config: IntColumnConfig = {}): ChainableIntegerColumn<\"int\"> {\n return new ChainableIntegerColumn(\"int\", config);\n}\n\n/** Float column. */\nexport function float(config: FloatColumnConfig = {}): ChainableColumn<\"float\"> {\n return new ChainableColumn(\"float\", config);\n}\n\n/** Decimal column. */\nexport function decimal(config: DecimalColumnConfig = {}): ChainableDecimalColumn {\n return new ChainableDecimalColumn(config);\n}\n\n/** Boolean column. */\nexport function boolean(config: BooleanColumnConfig = {}): ChainableColumn<\"boolean\"> {\n return new ChainableColumn(\"boolean\", config);\n}\n\n/**\n * DateTime column.\n *\n * @example\n * dsl.datetime().defaultNow().updatedAt().tz()\n * dsl.datetime().defaultNow().tz({ precision: 3 })\n */\nexport function datetime(config: DatetimeColumnConfig = {}): ChainableDatetimeColumn {\n return new ChainableDatetimeColumn(config);\n}\n\n/** Json column with a consumer-declared payload type (typed JSON). */\nexport class ChainableJsonColumn extends ChainableColumn<\"json\"> {\n constructor(config: JsonColumnConfig = {}) {\n super(\"json\", { ...config, ...(config.jsonSchema === undefined ? {} : { jsonSchema: assertJsonSchemaRef({ value: config.jsonSchema }) }) });\n }\n\n /** Bind runtime write/read validation to a consumer-owned named export. */\n schema(reference: JsonSchemaRefIR): this {\n if (this.__config.jsonSchema !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A field may declare only one JSON schema reference\", meta: { issues: [{ rule: \"duplicate-json-schema-ref\" }] } });\n this.__config.jsonSchema = assertJsonSchemaRef({ value: reference });\n return this;\n }\n\n /**\n * Declares the TS type of this column's payload. Written as a\n * `/// @type(Name from \"specifier\")` doc comment — the annotation rides the\n * existing comment plumbing into the IR, and the generator substitutes the\n * named type (with its import) for `JsonValue` in the emitted `.d.ts`.\n * A TYPE assertion, not a runtime guarantee — pair with `validate` on the\n * client and/or a named `@@check` for enforcement.\n */\n typed(config: { name: string; from: string }): this {\n const ref = assertJsonSchemaRef({ value: config });\n const annotation = `@type(${ref.name} from ${encodePrismaString({ value: ref.from })})`;\n this.__config.comment =\n this.__config.comment === undefined ? annotation : `${this.__config.comment} ${annotation}`;\n return this;\n }\n}\n\n/** Json column. */\nexport function json(config: JsonColumnConfig = {}): ChainableJsonColumn {\n return new ChainableJsonColumn(config);\n}\n\n/**\n * Primary-key column.\n *\n * @example\n * dsl.id() // String @id @default(ulid())\n * dsl.id({ type: \"uuid\" }) // String @id @default(uuid())\n * dsl.id().type(\"autoincrement\") // Int @id @default(autoincrement())\n * dsl.id({ type: \"none\" }).uuid().dbgenerated(\"uuidv7()\") // String @id @db.Uuid @default(dbgenerated(\"uuidv7()\"))\n */\nexport function id(config: IdColumnConfig = {}): ChainableIdColumn {\n return new ChainableIdColumn(config);\n}\n\n/** Bytes column. */\nexport function bytes(config: BytesColumnConfig = {}): ChainableColumn<\"bytes\"> {\n return new ChainableColumn(\"bytes\", config);\n}\n\n/** BigInt column, for values beyond 32-bit ints. */\nexport function bigint(config: BigIntColumnConfig = {}): ChainableIntegerColumn<\"bigint\"> {\n return new ChainableIntegerColumn(\"bigint\", config);\n}\n\n/**\n * Column with a database-native type Prisma cannot model.\n *\n * @example\n * dsl.unsupported(\"tsvector\")\n * dsl.unsupported(\"geometry(Point, 4326)\")\n */\nexport function unsupported(dbType: string): ChainableColumn<\"unsupported\"> {\n const config: UnsupportedColumnConfig = { dbType };\n return new ChainableColumn(\"unsupported\", config);\n}\n\n/**\n * Column typed by a registered extension — the DSL twin of writing\n * `embedding Vector(1536)` in .prisma. The extension registry lowers it to a\n * native database type at `toIR` time; like `Unsupported`, it stays out of the\n * core queryable surface (the extension's client plane covers it).\n *\n * @example\n * embedding: dsl.extensionType({ type: \"Vector\", args: [1536] })\n */\nexport function extensionType(config: ExtensionTypeConfig): ChainableColumn<\"unsupported\"> {\n const { type, args, ...rest } = config;\n return new ChainableColumn(\"unsupported\", {\n ...rest,\n dbType: \"\",\n extensionType: type,\n extensionArgs: [...(args ?? [])],\n });\n}\n\n/**\n * Inline (one-off) enum column. For a reusable enum use\n * `dsl.enum({ name, options })` and its `.field()`.\n *\n * @example\n * dsl.enum({ options: [\"low\", \"high\"] }).default(\"low\")\n */\nexport function enumCol<const T extends readonly string[]>(\n config: InlineEnumConfig<T>\n): ChainableEnumColumn<T> {\n const { options, storage, ...restConfig } = config;\n // No enum name: `dsl.schema()` derives `${Model}${Column}` for inline enums.\n return new ChainableEnumColumn<T>({\n options,\n config: restConfig,\n ...(storage === undefined ? {} : { storage }),\n });\n}\n",
6
6
  "/**\n * Standalone (named, reusable) enums.\n *\n * @example\n * const Status = dsl.enum({ name: \"Status\", options: [\"active\", \"inactive\"] });\n *\n * const User = dsl.create({\n * name: \"User\",\n * schema: { id: dsl.id(), status: Status.field().default(\"active\") },\n * });\n */\n\nimport type { EnumStorage } from \"@vibeorm/schema\";\nimport { ChainableEnumColumn } from \"./column.ts\";\nimport type { EnumDef, EnumFieldConfig, EnumValues } from \"./types.ts\";\n\n// ─── Config ───────────────────────────────\n\n/** Config for a standalone enum — a `name` is what makes it standalone. */\nexport type StandaloneEnumConfig<T extends readonly string[] = readonly string[]> = {\n name: string;\n options: T;\n /**\n * Physical storage. `\"database\"` (default) keeps the native projection\n * (PostgreSQL enum type, MySQL ENUM, SQLite CHECK); `\"string\"` stores an\n * ordinary String column and lets VibeORM enforce membership.\n */\n storage?: EnumStorage;\n};\n\n/** Builds the frozen `{ DRAFT: \"DRAFT\", … }` authoring accessor. */\nfunction enumValuesOf<const T extends readonly string[]>(params: { options: T }): EnumValues<T> {\n const entries: Record<string, string> = Object.fromEntries(params.options.map((option) => [option, option]));\n return Object.freeze(entries) as EnumValues<T>;\n}\n\n// ─── Factory ──────────────────────────────\n\n/**\n * Creates a reusable enum. Its `field()` yields a chainable enum column that\n * references the enum by name, so every use shares one schema-level enum.\n *\n * @example\n * const Status = createEnum({ name: \"Status\", options: [\"active\", \"inactive\"] });\n * status: Status.field().optional().index()\n */\nexport function createEnum<const T extends readonly string[]>(\n config: StandaloneEnumConfig<T>\n): EnumDef<T> {\n const { name, options, storage = \"database\" } = config;\n return {\n __type: \"enum\",\n __name: name,\n __options: options,\n __storage: storage,\n values: enumValuesOf({ options }),\n field(fieldConfig: EnumFieldConfig<T> = {}): ChainableEnumColumn<T> {\n return new ChainableEnumColumn<T>({ options, config: fieldConfig, enumName: name, storage });\n },\n };\n}\n",
7
- "/**\n * Prisma schema text generator.\n *\n * Renders the schema plan (`relation-plan.ts`) — including the 1:1 merge pass —\n * as `.prisma` models and enums. Only models and enums are emitted: datasource\n * and generator blocks stay in the project's own base schema.\n *\n * The plan is shared with `toIR()`, so the text produced here parses back to\n * the same IR the DSL compiles to directly.\n */\n\nimport { VibeError, encodePrismaString, internalError, normalizeJsonSchemaRef, providerToDialect } from \"@vibeorm/schema\";\nimport type { EnumIR, FieldIR } from \"@vibeorm/schema\";\nimport { getSqlDialect } from \"@vibeorm/sql\";\nimport type { SqlDialect } from \"@vibeorm/sql\";\nimport { compileExclusions, compileChecks, compileIndexPredicate } from \"../predicate.ts\";\nimport type {\n DecimalColumnConfig,\n IdColumnConfig,\n ModelDef,\n PrismaGeneratorConfig,\n SchemaDef,\n StringColumnConfig,\n} from \"../types.ts\";\nimport type { ColumnDef } from \"../types.ts\";\nimport { buildField, datetimeNativeType, fieldDefault } from \"../to-ir.ts\";\nimport { planSchema } from \"../relation-plan.ts\";\n\n/**\n * The model as a predicate compiler sees it: logical names, physical `@map`\n * names and scalar types, read from the SAME `buildField` the IR path uses so\n * a printed CHECK cannot disagree with a compiled one.\n */\nfunction predicateModel(params: { model: ModelDef }): { name: string; fields: FieldIR[] } {\n return {\n name: params.model.__name,\n fields: Array.from(params.model.__columns, ([name, column]) => buildField({ name, column })),\n };\n}\nimport type { PlannedIndex, PlannedRelation, SchemaPlan } from \"../relation-plan.ts\";\n\n// ─── Column rendering ─────────────────────\n\n/** Prisma type for a column, including the `[]` list suffix. */\nfunction prismaType(params: { column: ColumnDef }): string {\n const { column } = params;\n const list = column.__config.array === true ? \"[]\" : \"\";\n\n switch (column.__columnType) {\n case \"string\":\n return `String${list}`;\n case \"int\":\n return `Int${list}`;\n case \"bigint\":\n return `BigInt${list}`;\n case \"float\":\n return `Float${list}`;\n case \"decimal\":\n return `Decimal${list}`;\n case \"boolean\":\n return `Boolean${list}`;\n case \"datetime\":\n return `DateTime${list}`;\n case \"json\":\n return `Json${list}`;\n case \"bytes\":\n return `Bytes${list}`;\n case \"id\":\n return (column.__config as IdColumnConfig).type === \"autoincrement\" ? \"Int\" : \"String\";\n case \"enum\":\n return column.__enumName === undefined ? `String${list}` : `${column.__enumName}${list}`;\n case \"unsupported\": {\n // Extension column types round-trip as `Vector(1536)`, not Unsupported.\n const extensionTypeName = column.__config[\"extensionType\"];\n if (typeof extensionTypeName === \"string\") {\n const rawArgs = column.__config[\"extensionArgs\"];\n const args = Array.isArray(rawArgs) ? rawArgs.map(String).join(\", \") : \"\";\n return `${extensionTypeName}${args.length > 0 ? `(${args})` : \"\"}${list}`;\n }\n return `Unsupported(${encodePrismaString({ value: String(column.__config.dbType) })})${list}`;\n }\n }\n}\n\n/** `@default(...)` for a non-id column, or undefined when it has none. */\nfunction defaultAttribute(params: { column: ColumnDef }): string | undefined {\n const { column } = params;\n const value = fieldDefault({ column });\n if (value === undefined) return undefined;\n if (value.kind === \"list\") {\n const values = value.values.map((entry) => column.__columnType === \"enum\" ? String(entry) :\n column.__columnType === \"bigint\" ? String(entry) : JSON.stringify(entry));\n return `@default([${values.join(\", \")}])`;\n }\n // Exact numeric digits carried as a string print as the NUMBER Prisma\n // expects on a numeric column (`@default(\"0\")` on Decimal is rejected).\n const numericColumn = column.__columnType === \"int\" || column.__columnType === \"bigint\" || column.__columnType === \"float\" || column.__columnType === \"decimal\";\n if (value.kind === \"literal\") return `@default(${typeof value.value === \"string\" && !(numericColumn && /^-?\\d+(\\.\\d+)?$/.test(value.value)) ? encodePrismaString({ value: value.value }) : String(value.value)})`;\n if (value.kind === \"enumValue\") return `@default(${value.value})`;\n if (value.kind === \"dbgenerated\") return `@default(dbgenerated(${encodePrismaString({ value: value.sql })}))`;\n return `@default(${value.kind}())`;\n}\n\n/** `@db.*` native type attribute, or undefined. */\nfunction nativeTypeAttribute(params: { column: ColumnDef }): string | undefined {\n const { column } = params;\n\n if (column.__columnType === \"string\") {\n const { maxLength, text } = column.__config as StringColumnConfig;\n if (typeof maxLength === \"number\") return `@db.VarChar(${maxLength})`;\n if (text === true) return \"@db.Text\";\n return undefined;\n }\n\n if (column.__columnType === \"decimal\") {\n const { precision, scale } = column.__config as DecimalColumnConfig;\n if (typeof precision === \"number\") return `@db.Decimal(${precision}, ${scale ?? 0})`;\n return undefined;\n }\n\n if (column.__columnType === \"datetime\") {\n const native = datetimeNativeType({ config: column.__config, column: column.__name });\n return native === undefined ? undefined : `@db.${native}`;\n }\n\n return undefined;\n}\n\nfunction formatColumn(params: { name: string; column: ColumnDef }): string {\n const { name, column } = params;\n const parts: string[] = [` ${name} ${prismaType({ column })}${column.__config.optional === true ? \"?\" : \"\"}`];\n\n if (column.__columnType === \"id\") {\n parts.push(\"@id\");\n const idDefault = defaultAttribute({ column });\n if (idDefault !== undefined) parts.push(idDefault);\n } else {\n const columnDefault = defaultAttribute({ column });\n if (columnDefault !== undefined) parts.push(columnDefault);\n }\n\n if (column.__columnType === \"datetime\" && column.__config.updatedAt === true) {\n parts.push(\"@updatedAt\");\n }\n if (column.__config.unique === true) {\n parts.push(\"@unique\");\n }\n if (typeof column.__config.map === \"string\") {\n parts.push(`@map(${encodePrismaString({ value: column.__config.map })})`);\n }\n\n const nativeType = nativeTypeAttribute({ column });\n if (nativeType !== undefined) parts.push(nativeType);\n if (typeof column.__config.collation === \"string\") {\n parts.push(`@collation(${encodePrismaString({ value: column.__config.collation })})`);\n }\n\n const columnLine = parts.join(\" \");\n const metadata = normalizeJsonSchemaRef({ documentation: typeof column.__config.comment === \"string\" ? column.__config.comment : undefined, reference: column.__config.jsonSchema });\n if (metadata.jsonSchema !== undefined && column.__columnType !== \"json\") throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"JSON schemas are only valid on Json fields\", meta: { issues: [{ rule: \"json-schema-non-json\", field: name }] } });\n const comments = [\n ...(metadata.documentation === undefined ? [] : metadata.documentation.split(\"\\n\")),\n ...(metadata.jsonSchema === undefined ? [] : [`@schema(${metadata.jsonSchema.name} from ${encodePrismaString({ value: metadata.jsonSchema.from })})`]),\n ];\n return [...comments.map((line) => ` /// ${line}`), columnLine].join(\"\\n\");\n}\n\n// ─── Relation rendering ───────────────────\n\nfunction formatRelation(params: { relation: PlannedRelation }): string {\n const { relation } = params;\n const { name, targetModel, relationName } = relation;\n\n if (relation.kind === \"list\") {\n const attribute =\n relationName === undefined ? \"\" : ` @relation(${encodePrismaString({ value: relationName })})`;\n return ` ${name} ${targetModel}[]${attribute}`;\n }\n\n const optional = relation.isOptional ? \"?\" : \"\";\n\n if (relation.kind === \"backOne\") {\n const attribute =\n relationName === undefined ? \"\" : ` @relation(${encodePrismaString({ value: relationName })})`;\n return ` ${name} ${targetModel}${optional}${attribute}`;\n }\n\n const args: string[] = [];\n if (relationName !== undefined) args.push(encodePrismaString({ value: relationName }));\n if (relation.fields === undefined || relation.references === undefined) {\n throw internalError({\n message: `planned FK relation \"${relation.model}.${name}\" has no fields/references`,\n meta: { model: relation.model, relation: name },\n });\n }\n args.push(`fields: [${relation.fields.join(\", \")}]`);\n args.push(`references: [${relation.references.join(\", \")}]`);\n if (relation.onDelete !== undefined) args.push(`onDelete: ${relation.onDelete}`);\n if (relation.onUpdate !== undefined) args.push(`onUpdate: ${relation.onUpdate}`);\n // `map:` is the PHYSICAL constraint name; the positional argument above is\n // the relation alias. Prisma spells both on one attribute.\n if (relation.constraintName !== undefined) {\n args.push(`map: ${encodePrismaString({ value: relation.constraintName })}`);\n }\n\n return ` ${name} ${targetModel}${optional} @relation(${args.join(\", \")})`;\n}\n\n// ─── Index rendering ──────────────────────\n\nfunction formatIndex(params: {\n index: PlannedIndex;\n model: ModelDef;\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): string {\n const { index } = params;\n if (index.ops !== undefined && Object.values(index.ops).some((operatorClass) => operatorClass !== undefined)) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"Prisma output cannot preserve qualified index operator classes; keep the DSL source\", meta: { feature: \"prismaIndexOperatorClasses\", target: \"prisma\" } });\n const columns = index.columns.join(\", \");\n const predicate = compileIndexPredicate({\n where: index.where,\n wherePredicate: index.wherePredicate,\n columns: index.columns,\n model: predicateModel({ model: params.model }),\n dialect: params.dialect,\n enums: params.enums,\n });\n const whereArg = predicate === undefined ? \"\" : `, where: ${encodePrismaString({ value: predicate.where })}`;\n const mapArg = index.map === undefined ? \"\" : `, map: ${encodePrismaString({ value: index.map })}`;\n const nndArg = index.nullsNotDistinct === true ? \", nullsNotDistinct: true\" : \"\";\n const nameArg =\n index.clientName === undefined ? \"\" : `, name: ${encodePrismaString({ value: index.clientName })}`;\n if (index.isUnique) {\n return ` @@unique([${columns}]${nameArg}${mapArg}${nndArg}${whereArg})`;\n }\n const typeArg = index.indexType === undefined ? \"\" : `, type: ${index.indexType}`;\n return ` @@index([${columns}]${typeArg}${mapArg}${whereArg})`;\n}\n\n// ─── Extension attribute rendering ────────\n\n/** One named-argument value of an extension attribute, as .prisma text. */\nfunction formatExtensionValue(params: { value: unknown }): string {\n const { value } = params;\n if (typeof value === \"string\") return encodePrismaString({ value });\n if (Array.isArray(value)) {\n return `[${value.map((entry) => formatExtensionValue({ value: entry })).join(\", \")}]`;\n }\n return String(value);\n}\n\n// ─── Model rendering ──────────────────────\n\nfunction formatModel(params: {\n model: ModelDef;\n plan: SchemaPlan;\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): string {\n const { model, plan } = params;\n const lines: string[] = [\n ...(model.__comment === undefined ? [] : model.__comment.split(\"\\n\").map((line) => `/// ${line}`)),\n `model ${model.__name} {`,\n ];\n\n lines.push(\" //> Columns\");\n for (const [name, column] of model.__columns) {\n lines.push(formatColumn({ name, column }));\n }\n\n lines.push(\"\");\n lines.push(\" //> Relations\");\n for (const relation of plan.relations.get(model.__name) ?? []) {\n lines.push(formatRelation({ relation }));\n }\n\n lines.push(\"\");\n lines.push(\" //> Indexes\");\n lines.push(\"\");\n for (const index of plan.indexes.get(model.__name) ?? []) {\n lines.push(formatIndex({ index, model: params.model, dialect: params.dialect, enums: params.enums }));\n }\n\n // A typed CHECK is compiled to SQL here, exactly as `toIR` compiles it, so\n // `parse(generate.prisma(s))` still reproduces `toIR(s)`. `.prisma` has no\n // syntax for a typed expression, so it lands as the raw `@@check` text it\n // renders to — the round trip preserves the CONSTRAINT, not the authoring form.\n for (const check of compileChecks({\n checks: model.__checks,\n model: predicateModel({ model: params.model }),\n dialect: params.dialect,\n enums: params.enums,\n })) {\n lines.push(\n ` @@check(${encodePrismaString({ value: check.expression })}, name: ${encodePrismaString({ value: check.name })})`,\n );\n }\n\n for (const use of model.__extensions ?? []) {\n const args: string[] = [];\n if (use.fields !== undefined) args.push(`[${use.fields.join(\", \")}]`);\n for (const [key, value] of Object.entries(use.args ?? {})) {\n args.push(`${key}: ${formatExtensionValue({ value })}`);\n }\n lines.push(` @@${use.attribute}(${args.join(\", \")})`);\n }\n\n if (model.__primaryKey !== undefined && model.__primaryKey.length > 0) {\n lines.push(` @@id([${model.__primaryKey.join(\", \")}])`);\n }\n if (model.__policy !== undefined) {\n // `context:` is omitted when it equals the field — the parser defaults it there.\n const { field, context } = model.__policy;\n const contextArg =\n context === undefined || context === field ? \"\" : `, context: ${encodePrismaString({ value: context })}`;\n lines.push(` @@policy([${field}]${contextArg})`);\n }\n if (typeof model.__map === \"string\") {\n lines.push(` @@map(${encodePrismaString({ value: model.__map })})`);\n }\n\n lines.push(\"}\");\n return lines.join(\"\\n\");\n}\n\n// ─── Enum rendering ───────────────────────\n\nfunction formatEnum(params: { name: string; values: readonly string[] }): string {\n const { name, values } = params;\n return [`enum ${name} {`, ...values.map((value) => ` ${value}`), \"}\"].join(\"\\n\");\n}\n\n// ─── Public API ───────────────────────────\n\n/**\n * Generates Prisma schema text (models + enums) for a composed schema.\n *\n * @example\n * const prisma = dsl.generate.prisma(dsl.schema({ User }, { relations }));\n */\nexport function generatePrisma(schema: SchemaDef, config: PrismaGeneratorConfig = {}): string {\n for (const model of schema.__models.values()) {\n const exclusions = compileExclusions({ exclusions: model.__exclusions, model: { name: model.__name, fields: Array.from(model.__columns, ([name, column]) => buildField({ name, column })) }, dialect: getSqlDialect({ dialect: providerToDialect({ provider: config.provider ?? \"postgresql\" }) }) });\n if (exclusions.length > 0) throw new VibeError({ code: \"VIBE_CONFIG\", message: \"Prisma output cannot preserve exclusion constraints; keep the DSL source\", meta: { feature: \"exclusionConstraints\", target: \"prisma\" } });\n }\n const stringEnums = [...schema.__enumStorage].filter(([, storage]) => storage === \"string\").map(([name]) => name);\n if (stringEnums.length > 0) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: `Cannot print to Prisma: enum(s) ${stringEnums.join(\", \")} use storage: \"string\", which .prisma cannot express losslessly. Keep the DSL as the source or switch the enum to database storage.`,\n meta: { enums: stringEnums, target: \"prisma\" },\n });\n }\n if (schema.__rls !== undefined) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: \"Cannot print to Prisma: this schema uses native RLS, which .prisma cannot express losslessly. Keep the DSL as the source.\",\n meta: { feature: \"nativeRowLevelSecurity\", target: \"prisma\" },\n });\n }\n const plan = planSchema({ schema });\n const sections: string[] = [];\n // Typed expressions need a dialect to become SQL text. Defaulting to\n // postgresql matches `toIR`'s own default, so one schema printed and one\n // schema compiled agree unless the caller says otherwise.\n const dialect = getSqlDialect({ dialect: providerToDialect({ provider: config.provider ?? \"postgresql\" }) });\n const enums: EnumIR[] = Array.from(schema.__enums, ([name, values]) => ({ name, values: [...values] }));\n\n if (schema.__enums.size > 0) {\n sections.push(\"// ============================================\");\n sections.push(\"// Enums\");\n sections.push(\"// ============================================\");\n sections.push(\"\");\n for (const [name, values] of schema.__enums) {\n sections.push(formatEnum({ name, values }));\n sections.push(\"\");\n }\n }\n\n sections.push(\"// ============================================\");\n sections.push(\"// Models\");\n sections.push(\"// ============================================\");\n sections.push(\"\");\n for (const model of schema.__models.values()) {\n sections.push(formatModel({ model, plan, dialect, enums }));\n sections.push(\"\");\n }\n\n return sections.join(\"\\n\").trim();\n}\n",
7
+ "/**\n * Prisma schema text generator.\n *\n * Renders the schema plan (`relation-plan.ts`) — including the 1:1 merge pass —\n * as `.prisma` models and enums. Only models and enums are emitted: datasource\n * and generator blocks stay in the project's own base schema.\n *\n * The plan is shared with `toIR()`, so the text produced here parses back to\n * the same IR the DSL compiles to directly.\n */\n\nimport { VibeError, encodePrismaString, internalError, normalizeJsonSchemaRef, providerToDialect } from \"@vibeorm/schema\";\nimport type { EnumIR, FieldIR } from \"@vibeorm/schema\";\nimport { getSqlDialect } from \"@vibeorm/sql\";\nimport type { SqlDialect } from \"@vibeorm/sql\";\nimport { compileExclusions, compileChecks, compileIndexPredicate } from \"../predicate.ts\";\nimport type {\n DecimalColumnConfig,\n IdColumnConfig,\n ModelDef,\n PrismaGeneratorConfig,\n SchemaDef,\n StringColumnConfig,\n} from \"../types.ts\";\nimport type { ColumnDef } from \"../types.ts\";\nimport { buildField, datetimeNativeType, fieldDefault, idNativeType, stringNativeType } from \"../to-ir.ts\";\nimport { planSchema } from \"../relation-plan.ts\";\n\n/**\n * The model as a predicate compiler sees it: logical names, physical `@map`\n * names and scalar types, read from the SAME `buildField` the IR path uses so\n * a printed CHECK cannot disagree with a compiled one.\n */\nfunction predicateModel(params: { model: ModelDef }): { name: string; fields: FieldIR[] } {\n return {\n name: params.model.__name,\n fields: Array.from(params.model.__columns, ([name, column]) => buildField({ name, column })),\n };\n}\nimport type { PlannedIndex, PlannedRelation, SchemaPlan } from \"../relation-plan.ts\";\n\n// ─── Column rendering ─────────────────────\n\n/** Prisma type for a column, including the `[]` list suffix. */\nfunction prismaType(params: { column: ColumnDef }): string {\n const { column } = params;\n const list = column.__config.array === true ? \"[]\" : \"\";\n\n switch (column.__columnType) {\n case \"string\":\n return `String${list}`;\n case \"int\":\n return `Int${list}`;\n case \"bigint\":\n return `BigInt${list}`;\n case \"float\":\n return `Float${list}`;\n case \"decimal\":\n return `Decimal${list}`;\n case \"boolean\":\n return `Boolean${list}`;\n case \"datetime\":\n return `DateTime${list}`;\n case \"json\":\n return `Json${list}`;\n case \"bytes\":\n return `Bytes${list}`;\n case \"id\":\n return (column.__config as IdColumnConfig).type === \"autoincrement\" ? \"Int\" : \"String\";\n case \"enum\":\n return column.__enumName === undefined ? `String${list}` : `${column.__enumName}${list}`;\n case \"unsupported\": {\n // Extension column types round-trip as `Vector(1536)`, not Unsupported.\n const extensionTypeName = column.__config[\"extensionType\"];\n if (typeof extensionTypeName === \"string\") {\n const rawArgs = column.__config[\"extensionArgs\"];\n const args = Array.isArray(rawArgs) ? rawArgs.map(String).join(\", \") : \"\";\n return `${extensionTypeName}${args.length > 0 ? `(${args})` : \"\"}${list}`;\n }\n return `Unsupported(${encodePrismaString({ value: String(column.__config.dbType) })})${list}`;\n }\n }\n}\n\n/** `@default(...)` for a non-id column, or undefined when it has none. */\nfunction defaultAttribute(params: { column: ColumnDef }): string | undefined {\n const { column } = params;\n const value = fieldDefault({ column });\n if (value === undefined) return undefined;\n if (value.kind === \"list\") {\n const values = value.values.map((entry) => column.__columnType === \"enum\" ? String(entry) :\n column.__columnType === \"bigint\" ? String(entry) : JSON.stringify(entry));\n return `@default([${values.join(\", \")}])`;\n }\n // Exact numeric digits carried as a string print as the NUMBER Prisma\n // expects on a numeric column (`@default(\"0\")` on Decimal is rejected).\n const numericColumn = column.__columnType === \"int\" || column.__columnType === \"bigint\" || column.__columnType === \"float\" || column.__columnType === \"decimal\";\n if (value.kind === \"literal\") return `@default(${typeof value.value === \"string\" && !(numericColumn && /^-?\\d+(\\.\\d+)?$/.test(value.value)) ? encodePrismaString({ value: value.value }) : String(value.value)})`;\n if (value.kind === \"enumValue\") return `@default(${value.value})`;\n if (value.kind === \"dbgenerated\") return `@default(dbgenerated(${encodePrismaString({ value: value.sql })}))`;\n return `@default(${value.kind}())`;\n}\n\n/** `@db.*` native type attribute, or undefined. */\nfunction nativeTypeAttribute(params: { column: ColumnDef }): string | undefined {\n const { column } = params;\n\n if (column.__columnType === \"string\" || column.__columnType === \"id\") {\n const native = column.__columnType === \"string\"\n ? stringNativeType({ config: column.__config as StringColumnConfig, column: column.__name })\n : idNativeType({ config: column.__config as IdColumnConfig, column: column.__name });\n return native === undefined ? undefined : `@db.${native}`;\n }\n\n if (column.__columnType === \"decimal\") {\n const { precision, scale } = column.__config as DecimalColumnConfig;\n if (typeof precision === \"number\") return `@db.Decimal(${precision}, ${scale ?? 0})`;\n return undefined;\n }\n\n if (column.__columnType === \"datetime\") {\n const native = datetimeNativeType({ config: column.__config, column: column.__name });\n return native === undefined ? undefined : `@db.${native}`;\n }\n\n return undefined;\n}\n\nfunction formatColumn(params: { name: string; column: ColumnDef }): string {\n const { name, column } = params;\n const parts: string[] = [` ${name} ${prismaType({ column })}${column.__config.optional === true ? \"?\" : \"\"}`];\n\n if (column.__columnType === \"id\") {\n parts.push(\"@id\");\n const idDefault = defaultAttribute({ column });\n if (idDefault !== undefined) parts.push(idDefault);\n } else {\n const columnDefault = defaultAttribute({ column });\n if (columnDefault !== undefined) parts.push(columnDefault);\n }\n\n if (column.__columnType === \"datetime\" && column.__config.updatedAt === true) {\n parts.push(\"@updatedAt\");\n }\n if (column.__config.unique === true) {\n parts.push(\"@unique\");\n }\n if (typeof column.__config.map === \"string\") {\n parts.push(`@map(${encodePrismaString({ value: column.__config.map })})`);\n }\n\n const nativeType = nativeTypeAttribute({ column });\n if (nativeType !== undefined) parts.push(nativeType);\n if (typeof column.__config.collation === \"string\") {\n parts.push(`@collation(${encodePrismaString({ value: column.__config.collation })})`);\n }\n\n const columnLine = parts.join(\" \");\n const metadata = normalizeJsonSchemaRef({ documentation: typeof column.__config.comment === \"string\" ? column.__config.comment : undefined, reference: column.__config.jsonSchema });\n if (metadata.jsonSchema !== undefined && column.__columnType !== \"json\") throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"JSON schemas are only valid on Json fields\", meta: { issues: [{ rule: \"json-schema-non-json\", field: name }] } });\n const comments = [\n ...(metadata.documentation === undefined ? [] : metadata.documentation.split(\"\\n\")),\n ...(metadata.jsonSchema === undefined ? [] : [`@schema(${metadata.jsonSchema.name} from ${encodePrismaString({ value: metadata.jsonSchema.from })})`]),\n ];\n return [...comments.map((line) => ` /// ${line}`), columnLine].join(\"\\n\");\n}\n\n// ─── Relation rendering ───────────────────\n\nfunction formatRelation(params: { relation: PlannedRelation }): string {\n const { relation } = params;\n const { name, targetModel, relationName } = relation;\n\n if (relation.kind === \"list\") {\n const attribute =\n relationName === undefined ? \"\" : ` @relation(${encodePrismaString({ value: relationName })})`;\n return ` ${name} ${targetModel}[]${attribute}`;\n }\n\n const optional = relation.isOptional ? \"?\" : \"\";\n\n if (relation.kind === \"backOne\") {\n const attribute =\n relationName === undefined ? \"\" : ` @relation(${encodePrismaString({ value: relationName })})`;\n return ` ${name} ${targetModel}${optional}${attribute}`;\n }\n\n const args: string[] = [];\n if (relationName !== undefined) args.push(encodePrismaString({ value: relationName }));\n if (relation.fields === undefined || relation.references === undefined) {\n throw internalError({\n message: `planned FK relation \"${relation.model}.${name}\" has no fields/references`,\n meta: { model: relation.model, relation: name },\n });\n }\n args.push(`fields: [${relation.fields.join(\", \")}]`);\n args.push(`references: [${relation.references.join(\", \")}]`);\n if (relation.onDelete !== undefined) args.push(`onDelete: ${relation.onDelete}`);\n if (relation.onUpdate !== undefined) args.push(`onUpdate: ${relation.onUpdate}`);\n // `map:` is the PHYSICAL constraint name; the positional argument above is\n // the relation alias. Prisma spells both on one attribute.\n if (relation.constraintName !== undefined) {\n args.push(`map: ${encodePrismaString({ value: relation.constraintName })}`);\n }\n\n return ` ${name} ${targetModel}${optional} @relation(${args.join(\", \")})`;\n}\n\n// ─── Index rendering ──────────────────────\n\nfunction formatIndex(params: {\n index: PlannedIndex;\n model: ModelDef;\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): string {\n const { index } = params;\n if (index.ops !== undefined && Object.values(index.ops).some((operatorClass) => operatorClass !== undefined)) throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"Prisma output cannot preserve qualified index operator classes; keep the DSL source\", meta: { feature: \"prismaIndexOperatorClasses\", target: \"prisma\" } });\n const columns = index.columns.join(\", \");\n const predicate = compileIndexPredicate({\n where: index.where,\n wherePredicate: index.wherePredicate,\n columns: index.columns,\n model: predicateModel({ model: params.model }),\n dialect: params.dialect,\n enums: params.enums,\n });\n const whereArg = predicate === undefined ? \"\" : `, where: ${encodePrismaString({ value: predicate.where })}`;\n const mapArg = index.map === undefined ? \"\" : `, map: ${encodePrismaString({ value: index.map })}`;\n const nndArg = index.nullsNotDistinct === true ? \", nullsNotDistinct: true\" : \"\";\n const nameArg =\n index.clientName === undefined ? \"\" : `, name: ${encodePrismaString({ value: index.clientName })}`;\n if (index.isUnique) {\n return ` @@unique([${columns}]${nameArg}${mapArg}${nndArg}${whereArg})`;\n }\n const typeArg = index.indexType === undefined ? \"\" : `, type: ${index.indexType}`;\n return ` @@index([${columns}]${typeArg}${mapArg}${whereArg})`;\n}\n\n// ─── Extension attribute rendering ────────\n\n/** One named-argument value of an extension attribute, as .prisma text. */\nfunction formatExtensionValue(params: { value: unknown }): string {\n const { value } = params;\n if (typeof value === \"string\") return encodePrismaString({ value });\n if (Array.isArray(value)) {\n return `[${value.map((entry) => formatExtensionValue({ value: entry })).join(\", \")}]`;\n }\n return String(value);\n}\n\n// ─── Model rendering ──────────────────────\n\nfunction formatModel(params: {\n model: ModelDef;\n plan: SchemaPlan;\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): string {\n const { model, plan } = params;\n const lines: string[] = [\n ...(model.__comment === undefined ? [] : model.__comment.split(\"\\n\").map((line) => `/// ${line}`)),\n `model ${model.__name} {`,\n ];\n\n lines.push(\" //> Columns\");\n for (const [name, column] of model.__columns) {\n lines.push(formatColumn({ name, column }));\n }\n\n lines.push(\"\");\n lines.push(\" //> Relations\");\n for (const relation of plan.relations.get(model.__name) ?? []) {\n lines.push(formatRelation({ relation }));\n }\n\n lines.push(\"\");\n lines.push(\" //> Indexes\");\n lines.push(\"\");\n for (const index of plan.indexes.get(model.__name) ?? []) {\n lines.push(formatIndex({ index, model: params.model, dialect: params.dialect, enums: params.enums }));\n }\n\n // A typed CHECK is compiled to SQL here, exactly as `toIR` compiles it, so\n // `parse(generate.prisma(s))` still reproduces `toIR(s)`. `.prisma` has no\n // syntax for a typed expression, so it lands as the raw `@@check` text it\n // renders to — the round trip preserves the CONSTRAINT, not the authoring form.\n for (const check of compileChecks({\n checks: model.__checks,\n model: predicateModel({ model: params.model }),\n dialect: params.dialect,\n enums: params.enums,\n })) {\n lines.push(\n ` @@check(${encodePrismaString({ value: check.expression })}, name: ${encodePrismaString({ value: check.name })})`,\n );\n }\n\n for (const use of model.__extensions ?? []) {\n const args: string[] = [];\n if (use.fields !== undefined) args.push(`[${use.fields.join(\", \")}]`);\n for (const [key, value] of Object.entries(use.args ?? {})) {\n args.push(`${key}: ${formatExtensionValue({ value })}`);\n }\n lines.push(` @@${use.attribute}(${args.join(\", \")})`);\n }\n\n if (model.__primaryKey !== undefined && model.__primaryKey.length > 0) {\n lines.push(` @@id([${model.__primaryKey.join(\", \")}])`);\n }\n if (model.__policy !== undefined) {\n // `context:` is omitted when it equals the field — the parser defaults it there.\n const { field, context } = model.__policy;\n const contextArg =\n context === undefined || context === field ? \"\" : `, context: ${encodePrismaString({ value: context })}`;\n lines.push(` @@policy([${field}]${contextArg})`);\n }\n if (typeof model.__map === \"string\") {\n lines.push(` @@map(${encodePrismaString({ value: model.__map })})`);\n }\n\n lines.push(\"}\");\n return lines.join(\"\\n\");\n}\n\n// ─── Enum rendering ───────────────────────\n\nfunction formatEnum(params: { name: string; values: readonly string[] }): string {\n const { name, values } = params;\n return [`enum ${name} {`, ...values.map((value) => ` ${value}`), \"}\"].join(\"\\n\");\n}\n\n// ─── Public API ───────────────────────────\n\n/**\n * Generates Prisma schema text (models + enums) for a composed schema.\n *\n * @example\n * const prisma = dsl.generate.prisma(dsl.schema({ User }, { relations }));\n */\nexport function generatePrisma(schema: SchemaDef, config: PrismaGeneratorConfig = {}): string {\n for (const model of schema.__models.values()) {\n const exclusions = compileExclusions({ exclusions: model.__exclusions, model: { name: model.__name, fields: Array.from(model.__columns, ([name, column]) => buildField({ name, column })) }, dialect: getSqlDialect({ dialect: providerToDialect({ provider: config.provider ?? \"postgresql\" }) }) });\n if (exclusions.length > 0) throw new VibeError({ code: \"VIBE_CONFIG\", message: \"Prisma output cannot preserve exclusion constraints; keep the DSL source\", meta: { feature: \"exclusionConstraints\", target: \"prisma\" } });\n }\n const stringEnums = [...schema.__enumStorage].filter(([, storage]) => storage === \"string\").map(([name]) => name);\n if (stringEnums.length > 0) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: `Cannot print to Prisma: enum(s) ${stringEnums.join(\", \")} use storage: \"string\", which .prisma cannot express losslessly. Keep the DSL as the source or switch the enum to database storage.`,\n meta: { enums: stringEnums, target: \"prisma\" },\n });\n }\n if (schema.__rls !== undefined) {\n throw new VibeError({\n code: \"VIBE_CONFIG\",\n message: \"Cannot print to Prisma: this schema uses native RLS, which .prisma cannot express losslessly. Keep the DSL as the source.\",\n meta: { feature: \"nativeRowLevelSecurity\", target: \"prisma\" },\n });\n }\n const plan = planSchema({ schema });\n const sections: string[] = [];\n // Typed expressions need a dialect to become SQL text. Defaulting to\n // postgresql matches `toIR`'s own default, so one schema printed and one\n // schema compiled agree unless the caller says otherwise.\n const dialect = getSqlDialect({ dialect: providerToDialect({ provider: config.provider ?? \"postgresql\" }) });\n const enums: EnumIR[] = Array.from(schema.__enums, ([name, values]) => ({ name, values: [...values] }));\n\n if (schema.__enums.size > 0) {\n sections.push(\"// ============================================\");\n sections.push(\"// Enums\");\n sections.push(\"// ============================================\");\n sections.push(\"\");\n for (const [name, values] of schema.__enums) {\n sections.push(formatEnum({ name, values }));\n sections.push(\"\");\n }\n }\n\n sections.push(\"// ============================================\");\n sections.push(\"// Models\");\n sections.push(\"// ============================================\");\n sections.push(\"\");\n for (const model of schema.__models.values()) {\n sections.push(formatModel({ model, plan, dialect, enums }));\n sections.push(\"\");\n }\n\n return sections.join(\"\\n\").trim();\n}\n",
8
8
  "/**\n * The typed predicate builder — the `c` handed to a model's `checks` callback\n * and to an index's `.where()`.\n *\n * Every combinator returns plain {@link PredicateIR}: serializable data, never\n * a JavaScript callback. Nothing downstream evaluates a function, and a\n * predicate survives JSON unchanged. The SQL text is produced exactly once, by\n * `renderPredicate` in @vibeorm/sql, when the schema is compiled and the\n * dialect is finally known.\n *\n * The builder is structural at RUNTIME — it only records names and values — so\n * one instance serves every model. The type parameters on\n * {@link PredicateBuilder} are what bind it to a particular model's columns.\n */\n\nimport { VibeError } from \"@vibeorm/schema\";\nimport type { ExclusionIR, CheckIR, EnumIR, FieldIR, PredicateExpression, PredicateIR, PredicateOperand, PredicateValue } from \"@vibeorm/schema\";\nimport { compileExclusion, renderPredicate } from \"@vibeorm/sql\";\nimport type { SqlDialect } from \"@vibeorm/sql\";\nimport type {\n ModelDef,\n ChecksCallback,\n ModelCheckConfig,\n PredicateBuilder,\n PredicateFieldExpr,\n SchemaDefinition,\n} from \"./types.ts\";\n\n// ─── Operand normalization ────────────────────────────────────────\n\n/** Is this operand another field reference rather than a literal? */\nfunction isFieldExpr(operand: unknown): operand is PredicateFieldExpr {\n return (\n typeof operand === \"object\" &&\n operand !== null &&\n \"kind\" in operand &&\n (operand as { kind: unknown }).kind === \"field\"\n );\n}\n\n/**\n * Strip the pairing tag: the IR carries `{ kind: \"field\", name }` and nothing\n * else, so `__kind` never reaches a serialized schema.\n */\nfunction toRef(params: { expr: PredicateFieldExpr }): { readonly kind: \"field\"; readonly name: string } {\n return { kind: \"field\", name: params.expr.name };\n}\n\n/**\n * A literal in JSON-safe carrier form.\n *\n * A `bigint` becomes its EXACT decimal text: `Number(9007199254740993n)` is a\n * different number, the same trap column defaults already guard against, and\n * the rounding would happen before any SQL existed.\n */\nfunction toValue(params: { input: unknown; at: string }): PredicateValue {\n const { input, at } = params;\n if (typeof input === \"bigint\") return { kind: \"value\", value: input.toString() };\n if (typeof input === \"string\" || typeof input === \"number\" || typeof input === \"boolean\") {\n return { kind: \"value\", value: input };\n }\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `${at}: ${input === null ? \"null\" : typeof input} is not a comparable literal — use isNull()/isNotNull() for null, and a string, number, bigint or boolean otherwise`,\n meta: { rule: \"predicate-literal-invalid\", at },\n });\n}\n\nfunction toOperand(params: { operand: unknown; at: string }): PredicateOperand {\n const { operand, at } = params;\n return typeof operand === \"object\" && operand !== null\n ? toExpression({ value: operand, at }) : toValue({ input: operand, at });\n}\n\nfunction toExpression(params: { value: unknown; at: string }): PredicateExpression {\n const { value, at } = params;\n if (isFieldExpr(value)) return toRef({ expr: value });\n if (typeof value === \"object\" && value !== null && \"kind\" in value) {\n if (value.kind === \"jsonText\" && \"field\" in value && \"path\" in value && Array.isArray(value.path) &&\n Array.from(value.path).every((segment: unknown) => typeof segment === \"string\" && !segment.includes(\"\\u0000\"))) {\n return { kind: \"jsonText\", field: toRef({ expr: requireFieldExpr({ value: value.field, at }) }), path: [...value.path] };\n }\n if (value.kind === \"length\" && \"expression\" in value) {\n return { kind: \"length\", expression: toExpression({ value: value.expression, at }) };\n }\n }\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `${at}: expected a field, jsonText or length expression with a string-only JSON path`, meta: { rule: \"predicate-operand-invalid\", at } });\n}\n\nfunction requireFieldExpr(params: { value: unknown; at: string }): PredicateFieldExpr {\n const { value, at } = params;\n if (isFieldExpr(value)) return value;\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `${at}: the left side of a comparison must be c.field(\"…\"), not a bare value`,\n meta: { rule: \"predicate-operand-invalid\", at },\n });\n}\n\nfunction requireOperands(params: { operands: readonly PredicateIR[]; at: string }): readonly PredicateIR[] {\n const { operands, at } = params;\n if (operands.length === 0) {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `${at}: an empty boolean group has no honest SQL spelling — pass at least one operand`,\n meta: { rule: \"predicate-empty\", at },\n });\n }\n return operands;\n}\n\n// ─── The builder ──────────────────────────────────────────────────\n\n/**\n * One predicate builder instance. Stateless and structural — the type\n * parameters, not the value, bind it to a model.\n */\nexport function createPredicateBuilder<\n TColumns extends string = string,\n TSchema extends SchemaDefinition = SchemaDefinition,\n>(): PredicateBuilder<TColumns, TSchema> {\n const compare = (op: \"eq\" | \"ne\" | \"gt\" | \"gte\" | \"lt\" | \"lte\") =>\n (left: unknown, right: unknown): PredicateIR => ({\n kind: \"compare\",\n op,\n left: toExpression({ value: left, at: `c.${op}()` }),\n right: toOperand({ operand: right, at: `c.${op}()` }),\n });\n\n const membership = (negate: boolean) =>\n (field: unknown, values: readonly unknown[]): PredicateIR => {\n const at = negate ? \"c.notInList()\" : \"c.inList()\";\n const ref = toRef({ expr: requireFieldExpr({ value: field, at }) });\n if (values.length === 0) {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `${at}: an empty IN list is UNKNOWN on every row and is never what an author means`,\n meta: { rule: \"predicate-empty\", at, field: ref.name },\n });\n }\n return {\n kind: \"inList\",\n field: ref,\n values: values.map((value) => toValue({ input: value, at })),\n ...(negate ? { negate: true as const } : {}),\n };\n };\n\n // The cast is the ONE place the structural runtime builder meets its\n // model-bound type: every method below matches its declared signature, but\n // the generic tag parameters exist only at the type level.\n return {\n field: (name) => ({ kind: \"field\", name, __kind: \"String\" }) as never,\n\n eq: compare(\"eq\"),\n ne: compare(\"ne\"),\n gt: compare(\"gt\"),\n gte: compare(\"gte\"),\n lt: compare(\"lt\"),\n lte: compare(\"lte\"),\n\n jsonText: ({ field, path }) => ({ ...toExpression({ value: { kind: \"jsonText\", field: { kind: \"field\", name: field }, path }, at: \"c.jsonText()\" }), __kind: \"String\" }) as never,\n length: (expression) => ({ kind: \"length\", expression: toExpression({ value: expression, at: \"c.length()\" }), __kind: \"Int\" }) as never,\n isTrue: (operand) => ({ kind: \"isTrue\", operand }),\n\n inList: membership(false),\n notInList: membership(true),\n\n isNull: (name) => ({ kind: \"isNull\", field: { kind: \"field\", name } }),\n isNotNull: (name) => ({ kind: \"isNull\", field: { kind: \"field\", name }, negate: true }),\n\n and: (...operands) => ({ kind: \"and\", operands: requireOperands({ operands, at: \"c.and()\" }) }),\n or: (...operands) => ({ kind: \"or\", operands: requireOperands({ operands, at: \"c.or()\" }) }),\n not: (operand) => ({ kind: \"not\", operand }),\n\n named: (name, predicate) => {\n if (name.trim() === \"\") {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: \"c.named(): a CHECK needs a non-empty name — the name is what keys the migration diff\",\n meta: { rule: \"predicate-unnamed-check\" },\n });\n }\n return { __type: \"check\", name, predicate };\n },\n } as PredicateBuilder<TColumns, TSchema>;\n}\n\n// ─── Evaluating a model's declarations ────────────────────────────\n\n/** A model's CHECKs, still un-rendered: raw text stays raw, typed stays typed. */\nexport type EvaluatedCheck =\n | { readonly kind: \"raw\"; readonly name: string; readonly expression: string }\n | { readonly kind: \"typed\"; readonly name: string; readonly predicate: PredicateIR };\n\n/**\n * Run a model's `checks` declaration, whichever form it took.\n *\n * The raw array form and the typed callback form produce the same shape of\n * answer, so every consumer downstream handles ONE list — and raw text is\n * carried through untouched rather than parsed into a predicate.\n */\nexport function evaluateChecks(params: {\n checks: readonly ModelCheckConfig[] | ChecksCallback | undefined;\n model: string;\n}): readonly EvaluatedCheck[] {\n const { checks, model } = params;\n if (checks === undefined) return [];\n\n if (typeof checks !== \"function\") {\n return checks.map((check) => ({ kind: \"raw\" as const, name: check.name, expression: check.expression }));\n }\n\n const declared = checks(createPredicateBuilder());\n return declared.map((entry, index): EvaluatedCheck => {\n if (entry !== null && typeof entry === \"object\" && !(\"__type\" in entry) && typeof entry.name === \"string\" && \"expression\" in entry && typeof entry.expression === \"string\") {\n return { kind: \"raw\", name: entry.name, expression: entry.expression };\n }\n if (entry === null || typeof entry !== \"object\" || !(\"__type\" in entry) || entry.__type !== \"check\") {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `Model \"${model}\": checks[${index}] must be c.named(\"name\", predicate) or a raw { name, expression } CHECK`,\n meta: { rule: \"predicate-unnamed-check\", model, index },\n });\n }\n return { kind: \"typed\" as const, name: entry.name, predicate: entry.predicate };\n });\n}\n\n// ─── Compiling to IR ──────────────────────────────────────────────\n\n/** What a predicate needs to know about the model it belongs to. */\nexport type PredicateModel = {\n readonly name: string;\n readonly fields: readonly FieldIR[];\n};\n\n/**\n * A model's CHECKs as IR, with every typed expression compiled to SQL ONCE.\n *\n * `CheckIR.expression` always carries the AUTHORED text — what the schema says,\n * not what a database deparsed back — because that is the currency EPIC 1's\n * differ, desired-state records and DDL renderers all read. The predicate rides\n * alongside as the structured source, so editing a typed expression changes the\n * text and produces a real migration, while re-rendering an unchanged one\n * produces byte-identical text and cannot churn.\n */\n/** Compile exclusions beside CHECKs and index predicates at the schema boundary. */\nexport function compileExclusions(params: { exclusions: ModelDef[\"__exclusions\"]; model: PredicateModel; dialect: SqlDialect }): readonly ExclusionIR[] {\n const specs = typeof params.exclusions === \"function\" ? params.exclusions(createPredicateBuilder()) : params.exclusions ?? [];\n return specs.map((exclusion) => compileExclusion({ exclusion, model: params.model, dialect: params.dialect }));\n}\n\nexport function compileChecks(params: {\n checks: readonly ModelCheckConfig[] | ChecksCallback | undefined;\n model: PredicateModel;\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): readonly CheckIR[] {\n const { checks, model, dialect, enums } = params;\n return evaluateChecks({ checks, model: model.name }).map((check) =>\n check.kind === \"raw\"\n ? { name: check.name, expression: check.expression }\n : {\n name: check.name,\n expression: renderPredicate({\n predicate: check.predicate,\n model,\n dialect,\n enums,\n usage: \"check\",\n site: `CHECK \"${check.name}\"`,\n }),\n predicate: check.predicate,\n },\n );\n}\n\n/**\n * An index's partial predicate as IR: the raw string verbatim, or a typed\n * expression compiled to SQL text plus its structured source.\n */\nexport function compileIndexPredicate(params: {\n where: string | undefined;\n wherePredicate: PredicateIR | undefined;\n columns: readonly string[];\n model: PredicateModel;\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): { readonly where: string; readonly wherePredicate?: PredicateIR } | undefined {\n const { where, wherePredicate, columns, model, dialect, enums } = params;\n\n if (where !== undefined && wherePredicate !== undefined) {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `Index on \"${model.name}\" [${columns.join(\", \")}] carries both a raw where: string and a typed .where() — an index has ONE predicate`,\n meta: { rule: \"predicate-duplicate-where\", model: model.name, columns: [...columns] },\n });\n }\n if (where !== undefined) return { where };\n if (wherePredicate === undefined) return undefined;\n\n return {\n where: renderPredicate({\n predicate: wherePredicate,\n model,\n dialect,\n enums,\n usage: \"indexPredicate\",\n site: `partial index on [${columns.join(\", \")}]`,\n }),\n wherePredicate,\n };\n}\n",
9
- "/**\n * DSL → canonical `SchemaIR`.\n *\n * The DSL compiles straight to IR (no `.prisma` round-trip). It reads the same\n * schema plan the Prisma generator renders, so one logical schema produces the\n * same IR whether it arrives as `.prisma` text or as TypeScript.\n *\n * Mapping decisions, all mirroring what parsing `generate.prisma(schema)` yields:\n * - `dsl.id()` → `isId` + a `DefaultValueIR` per strategy (`ulid` / `cuid` /\n * `uuid` / `nanoid` app-side, `autoincrement` for serial ints, which is the\n * only strategy typed `Int`; `\"none\"` emits no default).\n * - `dsl.datetime({ default: \"now\" })` → `{ kind: \"now\" }`; `.updatedAt()` →\n * `isUpdatedAt`; `.tz()` → native type `Timestamptz`, `.tz({ precision: n })`\n * → `Timestamptz(n)`.\n * - `.maxLength(n)` / `.text()` / `.precision(p, s)` → native types\n * `VarChar(n)` / `Text` / `Decimal(p, s)`.\n * - `.map()` / model `map` → `dbName`; `.comment()` / model `comment` →\n * `documentation`; `collation` → `FieldIR.collation`.\n * - model `policy: { field, context }` → `ModelIR.policy` with `context`\n * defaulting to the field name (parser parity).\n * - `dsl.unsupported(\"tsvector\")` → `isUnsupported: true` + native type\n * `\"tsvector\"` over a nominal `String` base. The flag is what keeps the column\n * OUT of the queryable surface — it is kept in the IR for schema fidelity\n * (convert, migrate DDL), never projected or written.\n * - inline enums become schema-level enums named `${Model}${Column}`;\n * `storage: \"string\"` rides onto `EnumIR.storage` (omitted for the default).\n * - `.collation()` / `{ collation }` → `FieldIR.collation`.\n * - relation types are derived structurally by `resolveRelationType`.\n */\n\nimport {\n EMPTY_EXTENSION_REGISTRY,\n VibeError,\n assertValidSchemaIR,\n exactIntegerLiteral,\n providerToDialect,\n scalarListDefault,\n serializeJsonDefault,\n mergeExtensionDeclarations,\n normalizeJsonSchemaRef,\n unsupportedCapability,\n} from \"@vibeorm/schema\";\nimport type {\n DefaultValueIR,\n EnumIR,\n ExtensionDeclIR,\n ExtensionRegistry,\n FieldIR,\n FieldType,\n IndexIR,\n IndexKind,\n ModelIR,\n Provider,\n RelationIR,\n SchemaIR,\n ValidationIssue,\n} from \"@vibeorm/schema\";\nimport { getSqlDialect } from \"@vibeorm/sql\";\nimport type { SqlDialect } from \"@vibeorm/sql\";\nimport { columnFieldType } from \"./field-type.ts\";\nimport { compileExclusions, compileChecks, compileIndexPredicate } from \"./predicate.ts\";\nimport type { PredicateModel } from \"./predicate.ts\";\nimport { planSchema, resolveRelationType } from \"./relation-plan.ts\";\nimport type { PlannedIndex, PlannedRelation, SchemaPlan } from \"./relation-plan.ts\";\nimport type {\n ColumnDef,\n DatetimeColumnConfig,\n DecimalColumnConfig,\n IdColumnConfig,\n IndexType,\n ModelDef,\n SchemaDef,\n StringColumnConfig,\n} from \"./types.ts\";\n\n// ─── Field type ───────────────────────────\n\n/**\n * The IR field type of a column — the same mapping relation planning pairs\n * foreign keys by (`./field-type.ts`), so the two can never drift apart.\n */\nconst fieldType = columnFieldType;\n\n// ─── Defaults ─────────────────────────────\n\nfunction idDefault(params: { column: ColumnDef }): DefaultValueIR | undefined {\n switch ((params.column.__config as IdColumnConfig).type) {\n case \"ulid\":\n return { kind: \"ulid\" };\n case \"cuid\":\n return { kind: \"cuid\" };\n case \"uuid\":\n return { kind: \"uuid\" };\n case \"nanoid\":\n return { kind: \"nanoid\" };\n case \"autoincrement\":\n return { kind: \"autoincrement\" };\n default:\n return undefined;\n }\n}\n\n/** Compile a column default once for both DSL output paths. */\nexport function fieldDefault(params: { column: ColumnDef }): DefaultValueIR | undefined {\n const { column } = params;\n if (column.__columnType === \"id\") {\n if (column.__config.default !== undefined || column.__config.dbgenerated !== undefined || column.__config.autoincrement !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Use the id generator strategy instead of a conflicting id default\" });\n return idDefault({ column });\n }\n\n const { dbgenerated, default: value, autoincrement } = column.__config;\n if ([dbgenerated !== undefined, value !== undefined, autoincrement === true].filter(Boolean).length > 1) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Column \"${column.__name ?? column.__columnType}\" has conflicting defaults` });\n }\n if (autoincrement === true) {\n if ((column.__columnType !== \"int\" && column.__columnType !== \"bigint\") || column.__config.array === true || column.__config.optional === true) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"autoincrement requires a required scalar Int or BigInt column\" });\n }\n return { kind: \"autoincrement\" };\n }\n if (typeof dbgenerated === \"string\") return { kind: \"dbgenerated\", sql: dbgenerated };\n if (value === undefined) return undefined;\n if (column.__config.array === true) {\n if (!Array.isArray(value)) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A scalar-list default must be an array\" });\n return { kind: \"list\", values: scalarListDefault({ type: fieldType({ column }), values: column.__columnType === \"json\" ? value.map((entry) => typeof entry === \"string\" ? entry : serializeJsonDefault({ value: entry })) : value }) };\n }\n if (column.__columnType === \"json\" && typeof value !== \"string\") {\n return { kind: \"literal\", value: serializeJsonDefault({ value }) };\n }\n\n if (column.__columnType === \"datetime\" && value === \"now\") return { kind: \"now\" };\n if ((column.__columnType === \"datetime\" && value instanceof Date) || (column.__columnType === \"bytes\" && value instanceof Uint8Array)) {\n return { kind: \"literal\", value: scalarListDefault({ type: fieldType({ column }), values: [value] })[0]! };\n }\n if (column.__columnType === \"enum\" && typeof value === \"string\") {\n return { kind: \"enumValue\", value };\n }\n if (typeof value === \"number\" && (!Number.isFinite(value) || ((column.__columnType === \"int\" || column.__columnType === \"bigint\") && !Number.isSafeInteger(value)))) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Numeric defaults must be finite; integer defaults must be exact\" });\n }\n if (typeof value === \"string\" || typeof value === \"boolean\" || typeof value === \"number\") {\n return { kind: \"literal\", value };\n }\n // A bigint default keeps every digit: `Number(9007199254740993n)` is a\n // DIFFERENT number, and the rounding used to happen before any SQL existed.\n if (typeof value === \"bigint\") return { kind: \"literal\", value: exactIntegerLiteral({ text: value.toString() }) };\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Unsupported default for ${column.__columnType}` });\n}\n\n// ─── Native types ─────────────────────────\n\n/**\n * `Timestamptz` / `Timestamptz(n)` for a `.tz()` datetime column, or\n * `undefined`. Shared with the `.prisma` generator so both spell it alike.\n * Refuses a precision postgres would reject (outside 0–6, fractional) and a\n * precision without `tz`, which has no timestamptz to apply to.\n */\nexport function datetimeNativeType(params: { config: DatetimeColumnConfig; column: string | undefined }): string | undefined {\n const { tz, precision } = params.config;\n if (precision !== undefined && (tz !== true || !Number.isInteger(precision) || precision < 0 || precision > 6)) {\n const at = params.column === undefined ? \"A datetime column\" : `Column \"${params.column}\"`;\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `${at}: a datetime precision must be an integer from 0 to 6 on a tz() column, as in dsl.datetime().tz({ precision: 3 })`,\n meta: { issues: [{ rule: \"datetime-precision\", column: params.column, precision, tz: tz === true }] },\n });\n }\n if (tz !== true) return undefined;\n return precision === undefined ? \"Timestamptz\" : `Timestamptz(${precision})`;\n}\n\nfunction nativeType(params: { column: ColumnDef }): string | undefined {\n const { column } = params;\n\n if (column.__columnType === \"enum\") {\n const { maxLength, text } = column.__config;\n if (maxLength !== undefined || text !== undefined) {\n const invalid = column.__enumStorage !== \"string\" ||\n (maxLength !== undefined && (typeof maxLength !== \"number\" || !Number.isSafeInteger(maxLength) || maxLength <= 0)) ||\n (text !== undefined && typeof text !== \"boolean\") ||\n (text === true && maxLength !== undefined);\n if (invalid) {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: \"Enum text/maxLength options require string storage and either a positive integer maxLength or text: true, not both\",\n meta: { issues: [{ rule: \"enum-string-storage-options\", enum: column.__enumName }] },\n });\n }\n }\n }\n if (column.__columnType === \"string\" || (column.__columnType === \"enum\" && column.__enumStorage === \"string\")) {\n const { maxLength, text } = column.__config as StringColumnConfig;\n if (typeof maxLength === \"number\") return `VarChar(${maxLength})`;\n if (text === true) return \"Text\";\n return undefined;\n }\n if (column.__columnType === \"decimal\") {\n const { precision, scale } = column.__config as DecimalColumnConfig;\n if (typeof precision === \"number\") return `Decimal(${precision}, ${scale ?? 0})`;\n return undefined;\n }\n if (column.__columnType === \"datetime\") {\n return datetimeNativeType({ config: column.__config, column: column.__name });\n }\n if (column.__columnType === \"unsupported\") {\n return String(column.__config.dbType);\n }\n return undefined;\n}\n\n// ─── Fields ───────────────────────────────\n\n/**\n * One column as `FieldIR`.\n *\n * Exported so the `.prisma` printer compiles typed CHECK and partial-index\n * expressions against exactly the same physical names and scalar types the IR\n * path uses — a second mapping is how the two would drift apart.\n */\nexport function buildField(params: {\n name: string;\n column: ColumnDef;\n /** Native type resolved by an extension field-type lowering, when present. */\n extensionNativeType?: string;\n}): FieldIR {\n const { name, column, extensionNativeType } = params;\n const config = column.__config;\n\n // A primary key is never a list; every other kind honours `.array()`.\n const isList = column.__columnType !== \"id\" && config.array === true;\n\n const dbName = typeof config.map === \"string\" ? config.map : undefined;\n const documentation = typeof config.comment === \"string\" ? config.comment : undefined;\n // Read on every column kind; `assertValidSchemaIR` refuses it off String\n // fields (`collation-non-string`), so the rule lives in one place.\n const collation = typeof config.collation === \"string\" ? config.collation : undefined;\n const metadata = normalizeJsonSchemaRef({ documentation, reference: config.jsonSchema });\n const defaultValue = fieldDefault({ column });\n const native = extensionNativeType ?? nativeType({ column });\n\n return {\n name,\n type: fieldType({ column }),\n isList,\n isOptional: config.optional === true,\n isId: column.__columnType === \"id\",\n isUnique: config.unique === true,\n isUpdatedAt: column.__columnType === \"datetime\" && config.updatedAt === true,\n ...(collation === undefined ? {} : { collation }),\n ...(dbName === undefined ? {} : { dbName }),\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n ...(native === undefined ? {} : { nativeType: native }),\n ...(column.__columnType === \"unsupported\" ? { isUnsupported: true as const } : {}),\n ...metadata,\n };\n}\n\n// ─── Relations ────────────────────────────\n\nfunction buildRelation(params: { relation: PlannedRelation; plan: SchemaPlan }): RelationIR {\n const { relation, plan } = params;\n\n return {\n name: relation.name,\n model: relation.model,\n targetModel: relation.targetModel,\n type: resolveRelationType({ relation, plan }),\n isList: relation.isList,\n isOptional: relation.isOptional,\n ...(relation.relationName === undefined ? {} : { relationName: relation.relationName }),\n ...(relation.constraintName === undefined ? {} : { constraintName: relation.constraintName }),\n ...(relation.fields === undefined ? {} : { fields: [...relation.fields] }),\n ...(relation.references === undefined ? {} : { references: [...relation.references] }),\n ...(relation.onDelete === undefined ? {} : { onDelete: relation.onDelete }),\n ...(relation.onUpdate === undefined ? {} : { onUpdate: relation.onUpdate }),\n };\n}\n\n// ─── Indexes ──────────────────────────────\n\nconst INDEX_KINDS: Readonly<Record<IndexType, IndexKind>> = {\n BTree: \"btree\",\n Hash: \"hash\",\n Gin: \"gin\",\n Gist: \"gist\",\n SpGist: \"spgist\",\n Brin: \"brin\",\n};\n\nfunction buildIndex(params: {\n index: PlannedIndex;\n model: PredicateModel;\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): IndexIR {\n const { index, model, dialect, enums } = params;\n if (index.ops !== undefined && Object.values(index.ops).some((operatorClass) => operatorClass !== undefined) && !dialect.capabilities.indexOperatorClasses) throw unsupportedCapability({ dialect: dialect.name, feature: \"indexOperatorClasses\" });\n const kind: IndexKind = index.isUnique\n ? \"unique\"\n : index.indexType === undefined\n ? \"btree\"\n : INDEX_KINDS[index.indexType];\n\n // A typed predicate becomes SQL text HERE, once, where the dialect is known;\n // a raw string is carried through verbatim.\n const predicate = compileIndexPredicate({\n where: index.where,\n wherePredicate: index.wherePredicate,\n columns: index.columns,\n model,\n dialect,\n enums,\n });\n\n return {\n kind,\n fields: index.columns.map((name) => ({ name, ...(index.ops?.[name] === undefined ? {} : { operatorClass: index.ops[name] }) })),\n ...(index.map === undefined ? {} : { name: index.map }),\n ...(predicate === undefined ? {} : { where: predicate.where }),\n ...(predicate?.wherePredicate === undefined ? {} : { wherePredicate: predicate.wherePredicate }),\n ...(index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n ...(index.clientName === undefined ? {} : { clientName: index.clientName }),\n };\n}\n\n// ─── Models ───────────────────────────────\n\nfunction buildModel(params: {\n model: ModelDef;\n plan: SchemaPlan;\n extensions: ExtensionRegistry;\n declarations: ExtensionDeclarationCollector;\n issues: ValidationIssue[];\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): ModelIR {\n const { model, plan, extensions, declarations, issues, dialect, enums } = params;\n const primaryKey =\n model.__primaryKey !== undefined && model.__primaryKey.length > 0\n ? { fields: [...model.__primaryKey] }\n : undefined;\n const policy =\n model.__policy === undefined\n ? undefined\n : { field: model.__policy.field, context: model.__policy.context ?? model.__policy.field };\n\n const fields: FieldIR[] = [];\n for (const [name, column] of model.__columns) {\n const extensionTypeName = column.__config[\"extensionType\"];\n if (typeof extensionTypeName !== \"string\") {\n fields.push(buildField({ name, column }));\n continue;\n }\n // Extension column type — lowered by the same registry hook the parser uses.\n const registered = extensions.fieldTypes.get(extensionTypeName);\n if (registered === undefined) {\n issues.push({\n rule: \"extension-attribute\",\n message: `Field \"${model.__name}.${name}\" uses extension type \"${extensionTypeName}\" but no configured extension provides it`,\n model: model.__name,\n field: name,\n });\n continue;\n }\n const rawArgs = column.__config[\"extensionArgs\"];\n const lowered = registered.fieldType.lower({\n model: model.__name,\n field: name,\n args: Array.isArray(rawArgs)\n ? rawArgs.filter(\n (entry): entry is string | number =>\n typeof entry === \"string\" || typeof entry === \"number\",\n )\n : [],\n });\n if (\"error\" in lowered) {\n issues.push({\n rule: \"extension-attribute\",\n message: `Field \"${model.__name}.${name}\": ${lowered.error}`,\n model: model.__name,\n field: name,\n });\n continue;\n }\n fields.push(buildField({ name, column, extensionNativeType: lowered.nativeType }));\n if (lowered.declaration !== undefined) {\n declarations.add({\n extension: registered.extension.name,\n model: model.__name,\n declaration: lowered.declaration,\n });\n }\n }\n\n // Model-level extension attributes route through the same parse hook as @@attrs.\n for (const use of model.__extensions ?? []) {\n const registered = extensions.modelAttributes.get(use.attribute);\n if (registered === undefined) {\n issues.push({\n rule: \"unknown-attribute\",\n message: `Unknown block attribute \"@@${use.attribute}\" on model \"${model.__name}\" — no extension provides it`,\n model: model.__name,\n });\n continue;\n }\n const parsed = registered.attribute.parse({\n model: model.__name,\n args: {\n named: { ...(use.args ?? {}) },\n ...(use.fields === undefined ? {} : { fields: use.fields }),\n },\n fieldNames: fields.map((field) => field.name),\n });\n if (\"error\" in parsed) {\n issues.push({\n rule: \"extension-attribute\",\n message: `@@${use.attribute} on \"${model.__name}\": ${parsed.error}`,\n model: model.__name,\n });\n continue;\n }\n declarations.add({\n extension: registered.extension.name,\n model: model.__name,\n declaration: parsed.declaration,\n });\n }\n\n // Predicates read the built fields, so `@map`ped physical names and the exact\n // scalar types are the ones the rest of the IR carries.\n const predicateModel: PredicateModel = { name: model.__name, fields };\n const exclusions = compileExclusions({ exclusions: model.__exclusions, model: predicateModel, dialect });\n const checks = compileChecks({ checks: model.__checks, model: predicateModel, dialect, enums });\n\n return {\n name: model.__name,\n ...(model.__map === undefined ? {} : { dbName: model.__map }),\n fields,\n relations: (plan.relations.get(model.__name) ?? []).map((relation) =>\n buildRelation({ relation, plan })\n ),\n indexes: (plan.indexes.get(model.__name) ?? []).map((index) =>\n buildIndex({ index, model: predicateModel, dialect, enums }),\n ),\n ...(exclusions.length === 0 ? {} : { exclusions }),\n ...(checks.length === 0 ? {} : { checks }),\n ...(policy === undefined ? {} : { policy }),\n ...(primaryKey === undefined ? {} : { primaryKey }),\n isView: false,\n ...(model.__comment === undefined ? {} : { documentation: model.__comment }),\n };\n}\n\n// ─── Extension declarations ─────────────────────────────────\n\n/** extension → model → merged declaration; sorted output matches the parser. */\nclass ExtensionDeclarationCollector {\n private readonly byExtension = new Map<string, Map<string, Record<string, unknown>>>();\n\n add(params: {\n extension: string;\n model: string;\n declaration: Readonly<Record<string, unknown>>;\n }): void {\n const perModel =\n this.byExtension.get(params.extension) ?? new Map<string, Record<string, unknown>>();\n this.byExtension.set(params.extension, perModel);\n const existing = perModel.get(params.model) ?? {};\n perModel.set(\n params.model,\n mergeExtensionDeclarations({ base: existing, next: params.declaration }),\n );\n }\n\n toIR(): ExtensionDeclIR[] {\n return [...this.byExtension.entries()]\n .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n .map(([name, perModel]) => ({\n name,\n options: {\n models: Object.fromEntries(\n [...perModel.entries()].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)),\n ),\n },\n }));\n }\n}\n\n// ─── Public API ───────────────────────────\n\n/**\n * Compiles a composed DSL schema to the canonical `SchemaIR`, then validates it.\n *\n * @throws VibeError `VIBE_SCHEMA_INVALID` when the resulting IR fails\n * `assertValidSchemaIR` (unknown relation targets, missing primary keys, …).\n *\n * @example\n * const ir = dsl.toIR({ schema: dsl.schema({ User }, { relations }) });\n * const sqlite = dsl.toIR({ schema, provider: \"sqlite\" });\n */\nexport function toIR(params: {\n schema: SchemaDef;\n provider?: Provider;\n extensions?: ExtensionRegistry;\n}): SchemaIR {\n const { schema, provider = \"postgresql\" } = params;\n const extensions = params.extensions ?? EMPTY_EXTENSION_REGISTRY;\n const plan = planSchema({ schema });\n const declarations = new ExtensionDeclarationCollector();\n const issues: ValidationIssue[] = [];\n\n // `storage` is written only for string-backed enums: absent means\n // \"database\" (`enumStorageOf`), so IR for existing schemas is unchanged.\n // Built BEFORE the models because typed CHECK and partial-index expressions\n // are compiled to SQL while a model is built, and an enum operand is checked\n // for membership against the declaration.\n const enums: EnumIR[] = Array.from(schema.__enums, ([name, values]) => ({\n name,\n values: [...values],\n ...(schema.__enumStorage.get(name) === \"string\" ? { storage: \"string\" as const } : {}),\n }));\n const dialect = getSqlDialect({ dialect: providerToDialect({ provider }) });\n\n const models: ModelIR[] = Array.from(schema.__models.values(), (model) => {\n const built = buildModel({ model, plan, extensions, declarations, issues, dialect, enums });\n const rls = schema.__rls?.policies[model.__name];\n return rls === undefined ? built : { ...built, rls };\n });\n if (schema.__rls !== undefined) {\n for (const name of Object.keys(schema.__rls.policies)) {\n if (!schema.__models.has(name)) {\n issues.push({ rule: \"rls-unknown-model\", model: name, message: `RLS classification references model \"${name}\" absent from the composed schema` });\n }\n }\n }\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 const ir: SchemaIR = {\n datasource: { provider },\n models,\n enums,\n extensions: declarations.toIR(),\n ...(schema.__rls === undefined ? {} : { rls: { context: schema.__rls.context } }),\n };\n\n assertValidSchemaIR({ schema: ir });\n return ir;\n}\n",
9
+ "/**\n * DSL → canonical `SchemaIR`.\n *\n * The DSL compiles straight to IR (no `.prisma` round-trip). It reads the same\n * schema plan the Prisma generator renders, so one logical schema produces the\n * same IR whether it arrives as `.prisma` text or as TypeScript.\n *\n * Mapping decisions, all mirroring what parsing `generate.prisma(schema)` yields:\n * - `dsl.id()` → `isId` + a `DefaultValueIR` per strategy (`ulid` / `cuid` /\n * `uuid` / `nanoid` app-side, `autoincrement` for serial ints, which is the\n * only strategy typed `Int`; `\"none\"` emits no default).\n * - `dsl.datetime({ default: \"now\" })` → `{ kind: \"now\" }`; `.updatedAt()` →\n * `isUpdatedAt`; `.tz()` → native type `Timestamptz`, `.tz({ precision: n })`\n * → `Timestamptz(n)`.\n * - `.maxLength(n)` / `.text()` / `.precision(p, s)` → native types\n * `VarChar(n)` / `Text` / `Decimal(p, s)`.\n * - `.map()` / model `map` → `dbName`; `.comment()` / model `comment` →\n * `documentation`; `collation` → `FieldIR.collation`.\n * - model `policy: { field, context }` → `ModelIR.policy` with `context`\n * defaulting to the field name (parser parity).\n * - `dsl.unsupported(\"tsvector\")` → `isUnsupported: true` + native type\n * `\"tsvector\"` over a nominal `String` base. The flag is what keeps the column\n * OUT of the queryable surface — it is kept in the IR for schema fidelity\n * (convert, migrate DDL), never projected or written.\n * - inline enums become schema-level enums named `${Model}${Column}`;\n * `storage: \"string\"` rides onto `EnumIR.storage` (omitted for the default).\n * - `.collation()` / `{ collation }` → `FieldIR.collation`.\n * - relation types are derived structurally by `resolveRelationType`.\n */\n\nimport {\n EMPTY_EXTENSION_REGISTRY,\n VibeError,\n assertValidSchemaIR,\n exactIntegerLiteral,\n providerToDialect,\n scalarListDefault,\n serializeJsonDefault,\n mergeExtensionDeclarations,\n normalizeJsonSchemaRef,\n unsupportedCapability,\n} from \"@vibeorm/schema\";\nimport type {\n DefaultValueIR,\n EnumIR,\n ExtensionDeclIR,\n ExtensionRegistry,\n FieldIR,\n FieldType,\n IndexIR,\n IndexKind,\n ModelIR,\n Provider,\n RelationIR,\n SchemaIR,\n ValidationIssue,\n} from \"@vibeorm/schema\";\nimport { getSqlDialect } from \"@vibeorm/sql\";\nimport type { SqlDialect } from \"@vibeorm/sql\";\nimport { columnFieldType } from \"./field-type.ts\";\nimport { compileExclusions, compileChecks, compileIndexPredicate } from \"./predicate.ts\";\nimport type { PredicateModel } from \"./predicate.ts\";\nimport { planSchema, resolveRelationType } from \"./relation-plan.ts\";\nimport type { PlannedIndex, PlannedRelation, SchemaPlan } from \"./relation-plan.ts\";\nimport type {\n ColumnDef,\n DatetimeColumnConfig,\n DecimalColumnConfig,\n IdColumnConfig,\n IndexType,\n ModelDef,\n SchemaDef,\n StringColumnConfig,\n} from \"./types.ts\";\n\n// ─── Field type ───────────────────────────\n\n/**\n * The IR field type of a column — the same mapping relation planning pairs\n * foreign keys by (`./field-type.ts`), so the two can never drift apart.\n */\nconst fieldType = columnFieldType;\n\n// ─── Defaults ─────────────────────────────\n\nfunction idDefault(params: { column: ColumnDef }): DefaultValueIR | undefined {\n switch ((params.column.__config as IdColumnConfig).type) {\n case \"ulid\":\n return { kind: \"ulid\" };\n case \"cuid\":\n return { kind: \"cuid\" };\n case \"uuid\":\n return { kind: \"uuid\" };\n case \"nanoid\":\n return { kind: \"nanoid\" };\n case \"autoincrement\":\n return { kind: \"autoincrement\" };\n default:\n return undefined;\n }\n}\n\n/** Compile a column default once for both DSL output paths. */\nexport function fieldDefault(params: { column: ColumnDef }): DefaultValueIR | undefined {\n const { column } = params;\n if (column.__columnType === \"id\") {\n const strategy = (column.__config as IdColumnConfig).type;\n const dbgenerated = column.__config.dbgenerated;\n if (column.__config.default !== undefined || column.__config.autoincrement !== undefined) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Use the id generator strategy instead of a conflicting id default\" });\n // A database default IS the id's generator, so it replaces the app-side one.\n if (dbgenerated !== undefined) {\n if (strategy !== \"none\" || typeof dbgenerated !== \"string\") throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `An id with a database default needs dsl.id({ type: \"none\" }); the \"${String(strategy)}\" generator strategy would conflict with it`, meta: { issues: [{ rule: \"id-dbgenerated-strategy\", column: column.__name, strategy }] } });\n return { kind: \"dbgenerated\", sql: dbgenerated };\n }\n return idDefault({ column });\n }\n\n const { dbgenerated, default: value, autoincrement } = column.__config;\n if ([dbgenerated !== undefined, value !== undefined, autoincrement === true].filter(Boolean).length > 1) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Column \"${column.__name ?? column.__columnType}\" has conflicting defaults` });\n }\n if (autoincrement === true) {\n if ((column.__columnType !== \"int\" && column.__columnType !== \"bigint\") || column.__config.array === true || column.__config.optional === true) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"autoincrement requires a required scalar Int or BigInt column\" });\n }\n return { kind: \"autoincrement\" };\n }\n if (typeof dbgenerated === \"string\") return { kind: \"dbgenerated\", sql: dbgenerated };\n if (value === undefined) return undefined;\n if (column.__config.array === true) {\n if (!Array.isArray(value)) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"A scalar-list default must be an array\" });\n return { kind: \"list\", values: scalarListDefault({ type: fieldType({ column }), values: column.__columnType === \"json\" ? value.map((entry) => typeof entry === \"string\" ? entry : serializeJsonDefault({ value: entry })) : value }) };\n }\n if (column.__columnType === \"json\" && typeof value !== \"string\") {\n return { kind: \"literal\", value: serializeJsonDefault({ value }) };\n }\n\n if (column.__columnType === \"datetime\" && value === \"now\") return { kind: \"now\" };\n if ((column.__columnType === \"datetime\" && value instanceof Date) || (column.__columnType === \"bytes\" && value instanceof Uint8Array)) {\n return { kind: \"literal\", value: scalarListDefault({ type: fieldType({ column }), values: [value] })[0]! };\n }\n if (column.__columnType === \"enum\" && typeof value === \"string\") {\n return { kind: \"enumValue\", value };\n }\n if (typeof value === \"number\" && (!Number.isFinite(value) || ((column.__columnType === \"int\" || column.__columnType === \"bigint\") && !Number.isSafeInteger(value)))) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Numeric defaults must be finite; integer defaults must be exact\" });\n }\n if (typeof value === \"string\" || typeof value === \"boolean\" || typeof value === \"number\") {\n return { kind: \"literal\", value };\n }\n // A bigint default keeps every digit: `Number(9007199254740993n)` is a\n // DIFFERENT number, and the rounding used to happen before any SQL existed.\n if (typeof value === \"bigint\") return { kind: \"literal\", value: exactIntegerLiteral({ text: value.toString() }) };\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Unsupported default for ${column.__columnType}` });\n}\n\n// ─── Native types ─────────────────────────\n\n/**\n * `Timestamptz` / `Timestamptz(n)` for a `.tz()` datetime column, or\n * `undefined`. Shared with the `.prisma` generator so both spell it alike.\n * Refuses a precision postgres would reject (outside 0–6, fractional) and a\n * precision without `tz`, which has no timestamptz to apply to.\n */\nexport function datetimeNativeType(params: { config: DatetimeColumnConfig; column: string | undefined }): string | undefined {\n const { tz, precision } = params.config;\n if (precision !== undefined && (tz !== true || !Number.isInteger(precision) || precision < 0 || precision > 6)) {\n const at = params.column === undefined ? \"A datetime column\" : `Column \"${params.column}\"`;\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `${at}: a datetime precision must be an integer from 0 to 6 on a tz() column, as in dsl.datetime().tz({ precision: 3 })`,\n meta: { issues: [{ rule: \"datetime-precision\", column: params.column, precision, tz: tz === true }] },\n });\n }\n if (tz !== true) return undefined;\n return precision === undefined ? \"Timestamptz\" : `Timestamptz(${precision})`;\n}\n\n/**\n * `Uuid`, `VarChar(n)` or `Text` for a String column, or `undefined`. Shared\n * with the `.prisma` generator so both spell it alike. A column has one type,\n * so `uuid` refuses to combine with `maxLength` or `text`.\n */\nexport function stringNativeType(params: { config: StringColumnConfig; column: string | undefined }): string | undefined {\n const { maxLength, text, uuid } = params.config;\n if (uuid === true) {\n if (maxLength !== undefined || text === true) {\n const at = params.column === undefined ? \"A string column\" : `Column \"${params.column}\"`;\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `${at}: uuid() is the column's type and cannot be combined with maxLength or text`,\n meta: { issues: [{ rule: \"string-native-type\", column: params.column }] },\n });\n }\n return \"Uuid\";\n }\n if (typeof maxLength === \"number\") return `VarChar(${maxLength})`;\n if (text === true) return \"Text\";\n return undefined;\n}\n\n/** `Uuid` for a `uuid()` String id, or `undefined`; an Int (autoincrement) id refuses it. */\nexport function idNativeType(params: { config: IdColumnConfig; column: string | undefined }): string | undefined {\n if (params.config.uuid !== true) return undefined;\n if (params.config.type === \"autoincrement\") {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `${params.column === undefined ? \"An id\" : `Id \"${params.column}\"`}: uuid() needs a String id; an autoincrement id is an Int`,\n meta: { issues: [{ rule: \"id-native-type\", column: params.column }] },\n });\n }\n return \"Uuid\";\n}\n\nfunction nativeType(params: { column: ColumnDef }): string | undefined {\n const { column } = params;\n\n if (column.__columnType === \"string\") return stringNativeType({ config: column.__config as StringColumnConfig, column: column.__name });\n if (column.__columnType === \"id\") return idNativeType({ config: column.__config as IdColumnConfig, column: column.__name });\n\n if (column.__columnType === \"enum\") {\n const { maxLength, text } = column.__config;\n if (maxLength !== undefined || text !== undefined) {\n const invalid = column.__enumStorage !== \"string\" ||\n (maxLength !== undefined && (typeof maxLength !== \"number\" || !Number.isSafeInteger(maxLength) || maxLength <= 0)) ||\n (text !== undefined && typeof text !== \"boolean\") ||\n (text === true && maxLength !== undefined);\n if (invalid) {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: \"Enum text/maxLength options require string storage and either a positive integer maxLength or text: true, not both\",\n meta: { issues: [{ rule: \"enum-string-storage-options\", enum: column.__enumName }] },\n });\n }\n }\n }\n if (column.__columnType === \"enum\" && column.__enumStorage === \"string\") {\n const { maxLength, text } = column.__config as StringColumnConfig;\n if (typeof maxLength === \"number\") return `VarChar(${maxLength})`;\n if (text === true) return \"Text\";\n return undefined;\n }\n if (column.__columnType === \"decimal\") {\n const { precision, scale } = column.__config as DecimalColumnConfig;\n if (typeof precision === \"number\") return `Decimal(${precision}, ${scale ?? 0})`;\n return undefined;\n }\n if (column.__columnType === \"datetime\") {\n return datetimeNativeType({ config: column.__config, column: column.__name });\n }\n if (column.__columnType === \"unsupported\") {\n return String(column.__config.dbType);\n }\n return undefined;\n}\n\n// ─── Fields ───────────────────────────────\n\n/**\n * One column as `FieldIR`.\n *\n * Exported so the `.prisma` printer compiles typed CHECK and partial-index\n * expressions against exactly the same physical names and scalar types the IR\n * path uses — a second mapping is how the two would drift apart.\n */\nexport function buildField(params: {\n name: string;\n column: ColumnDef;\n /** Native type resolved by an extension field-type lowering, when present. */\n extensionNativeType?: string;\n}): FieldIR {\n const { name, column, extensionNativeType } = params;\n const config = column.__config;\n\n // A primary key is never a list; every other kind honours `.array()`.\n const isList = column.__columnType !== \"id\" && config.array === true;\n\n const dbName = typeof config.map === \"string\" ? config.map : undefined;\n const documentation = typeof config.comment === \"string\" ? config.comment : undefined;\n // Read on every column kind; `assertValidSchemaIR` refuses it off String\n // fields (`collation-non-string`), so the rule lives in one place.\n const collation = typeof config.collation === \"string\" ? config.collation : undefined;\n const metadata = normalizeJsonSchemaRef({ documentation, reference: config.jsonSchema });\n const defaultValue = fieldDefault({ column });\n const native = extensionNativeType ?? nativeType({ column });\n\n return {\n name,\n type: fieldType({ column }),\n isList,\n isOptional: config.optional === true,\n isId: column.__columnType === \"id\",\n isUnique: config.unique === true,\n isUpdatedAt: column.__columnType === \"datetime\" && config.updatedAt === true,\n ...(collation === undefined ? {} : { collation }),\n ...(dbName === undefined ? {} : { dbName }),\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n ...(native === undefined ? {} : { nativeType: native }),\n ...(column.__columnType === \"unsupported\" ? { isUnsupported: true as const } : {}),\n ...metadata,\n };\n}\n\n// ─── Relations ────────────────────────────\n\nfunction buildRelation(params: { relation: PlannedRelation; plan: SchemaPlan }): RelationIR {\n const { relation, plan } = params;\n\n return {\n name: relation.name,\n model: relation.model,\n targetModel: relation.targetModel,\n type: resolveRelationType({ relation, plan }),\n isList: relation.isList,\n isOptional: relation.isOptional,\n ...(relation.relationName === undefined ? {} : { relationName: relation.relationName }),\n ...(relation.constraintName === undefined ? {} : { constraintName: relation.constraintName }),\n ...(relation.fields === undefined ? {} : { fields: [...relation.fields] }),\n ...(relation.references === undefined ? {} : { references: [...relation.references] }),\n ...(relation.onDelete === undefined ? {} : { onDelete: relation.onDelete }),\n ...(relation.onUpdate === undefined ? {} : { onUpdate: relation.onUpdate }),\n };\n}\n\n// ─── Indexes ──────────────────────────────\n\nconst INDEX_KINDS: Readonly<Record<IndexType, IndexKind>> = {\n BTree: \"btree\",\n Hash: \"hash\",\n Gin: \"gin\",\n Gist: \"gist\",\n SpGist: \"spgist\",\n Brin: \"brin\",\n};\n\nfunction buildIndex(params: {\n index: PlannedIndex;\n model: PredicateModel;\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): IndexIR {\n const { index, model, dialect, enums } = params;\n if (index.ops !== undefined && Object.values(index.ops).some((operatorClass) => operatorClass !== undefined) && !dialect.capabilities.indexOperatorClasses) throw unsupportedCapability({ dialect: dialect.name, feature: \"indexOperatorClasses\" });\n const kind: IndexKind = index.isUnique\n ? \"unique\"\n : index.indexType === undefined\n ? \"btree\"\n : INDEX_KINDS[index.indexType];\n\n // A typed predicate becomes SQL text HERE, once, where the dialect is known;\n // a raw string is carried through verbatim.\n const predicate = compileIndexPredicate({\n where: index.where,\n wherePredicate: index.wherePredicate,\n columns: index.columns,\n model,\n dialect,\n enums,\n });\n\n return {\n kind,\n fields: index.columns.map((name) => ({ name, ...(index.ops?.[name] === undefined ? {} : { operatorClass: index.ops[name] }) })),\n ...(index.map === undefined ? {} : { name: index.map }),\n ...(predicate === undefined ? {} : { where: predicate.where }),\n ...(predicate?.wherePredicate === undefined ? {} : { wherePredicate: predicate.wherePredicate }),\n ...(index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n ...(index.clientName === undefined ? {} : { clientName: index.clientName }),\n };\n}\n\n// ─── Models ───────────────────────────────\n\nfunction buildModel(params: {\n model: ModelDef;\n plan: SchemaPlan;\n extensions: ExtensionRegistry;\n declarations: ExtensionDeclarationCollector;\n issues: ValidationIssue[];\n dialect: SqlDialect;\n enums: readonly EnumIR[];\n}): ModelIR {\n const { model, plan, extensions, declarations, issues, dialect, enums } = params;\n const primaryKey =\n model.__primaryKey !== undefined && model.__primaryKey.length > 0\n ? { fields: [...model.__primaryKey] }\n : undefined;\n const policy =\n model.__policy === undefined\n ? undefined\n : { field: model.__policy.field, context: model.__policy.context ?? model.__policy.field };\n\n const fields: FieldIR[] = [];\n for (const [name, column] of model.__columns) {\n const extensionTypeName = column.__config[\"extensionType\"];\n if (typeof extensionTypeName !== \"string\") {\n fields.push(buildField({ name, column }));\n continue;\n }\n // Extension column type — lowered by the same registry hook the parser uses.\n const registered = extensions.fieldTypes.get(extensionTypeName);\n if (registered === undefined) {\n issues.push({\n rule: \"extension-attribute\",\n message: `Field \"${model.__name}.${name}\" uses extension type \"${extensionTypeName}\" but no configured extension provides it`,\n model: model.__name,\n field: name,\n });\n continue;\n }\n const rawArgs = column.__config[\"extensionArgs\"];\n const lowered = registered.fieldType.lower({\n model: model.__name,\n field: name,\n args: Array.isArray(rawArgs)\n ? rawArgs.filter(\n (entry): entry is string | number =>\n typeof entry === \"string\" || typeof entry === \"number\",\n )\n : [],\n });\n if (\"error\" in lowered) {\n issues.push({\n rule: \"extension-attribute\",\n message: `Field \"${model.__name}.${name}\": ${lowered.error}`,\n model: model.__name,\n field: name,\n });\n continue;\n }\n fields.push(buildField({ name, column, extensionNativeType: lowered.nativeType }));\n if (lowered.declaration !== undefined) {\n declarations.add({\n extension: registered.extension.name,\n model: model.__name,\n declaration: lowered.declaration,\n });\n }\n }\n\n // Model-level extension attributes route through the same parse hook as @@attrs.\n for (const use of model.__extensions ?? []) {\n const registered = extensions.modelAttributes.get(use.attribute);\n if (registered === undefined) {\n issues.push({\n rule: \"unknown-attribute\",\n message: `Unknown block attribute \"@@${use.attribute}\" on model \"${model.__name}\" — no extension provides it`,\n model: model.__name,\n });\n continue;\n }\n const parsed = registered.attribute.parse({\n model: model.__name,\n args: {\n named: { ...(use.args ?? {}) },\n ...(use.fields === undefined ? {} : { fields: use.fields }),\n },\n fieldNames: fields.map((field) => field.name),\n });\n if (\"error\" in parsed) {\n issues.push({\n rule: \"extension-attribute\",\n message: `@@${use.attribute} on \"${model.__name}\": ${parsed.error}`,\n model: model.__name,\n });\n continue;\n }\n declarations.add({\n extension: registered.extension.name,\n model: model.__name,\n declaration: parsed.declaration,\n });\n }\n\n // Predicates read the built fields, so `@map`ped physical names and the exact\n // scalar types are the ones the rest of the IR carries.\n const predicateModel: PredicateModel = { name: model.__name, fields };\n const exclusions = compileExclusions({ exclusions: model.__exclusions, model: predicateModel, dialect });\n const checks = compileChecks({ checks: model.__checks, model: predicateModel, dialect, enums });\n\n return {\n name: model.__name,\n ...(model.__map === undefined ? {} : { dbName: model.__map }),\n fields,\n relations: (plan.relations.get(model.__name) ?? []).map((relation) =>\n buildRelation({ relation, plan })\n ),\n indexes: (plan.indexes.get(model.__name) ?? []).map((index) =>\n buildIndex({ index, model: predicateModel, dialect, enums }),\n ),\n ...(exclusions.length === 0 ? {} : { exclusions }),\n ...(checks.length === 0 ? {} : { checks }),\n ...(policy === undefined ? {} : { policy }),\n ...(primaryKey === undefined ? {} : { primaryKey }),\n isView: false,\n ...(model.__comment === undefined ? {} : { documentation: model.__comment }),\n };\n}\n\n// ─── Extension declarations ─────────────────────────────────\n\n/** extension → model → merged declaration; sorted output matches the parser. */\nclass ExtensionDeclarationCollector {\n private readonly byExtension = new Map<string, Map<string, Record<string, unknown>>>();\n\n add(params: {\n extension: string;\n model: string;\n declaration: Readonly<Record<string, unknown>>;\n }): void {\n const perModel =\n this.byExtension.get(params.extension) ?? new Map<string, Record<string, unknown>>();\n this.byExtension.set(params.extension, perModel);\n const existing = perModel.get(params.model) ?? {};\n perModel.set(\n params.model,\n mergeExtensionDeclarations({ base: existing, next: params.declaration, extension: params.extension }),\n );\n }\n\n toIR(): ExtensionDeclIR[] {\n return [...this.byExtension.entries()]\n .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n .map(([name, perModel]) => ({\n name,\n options: {\n models: Object.fromEntries(\n [...perModel.entries()].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)),\n ),\n },\n }));\n }\n}\n\n// ─── Public API ───────────────────────────\n\n/**\n * Compiles a composed DSL schema to the canonical `SchemaIR`, then validates it.\n *\n * @throws VibeError `VIBE_SCHEMA_INVALID` when the resulting IR fails\n * `assertValidSchemaIR` (unknown relation targets, missing primary keys, …).\n *\n * @example\n * const ir = dsl.toIR({ schema: dsl.schema({ User }, { relations }) });\n * const sqlite = dsl.toIR({ schema, provider: \"sqlite\" });\n */\nexport function toIR(params: {\n schema: SchemaDef;\n provider?: Provider;\n extensions?: ExtensionRegistry;\n}): SchemaIR {\n const { schema, provider = \"postgresql\" } = params;\n const extensions = params.extensions ?? EMPTY_EXTENSION_REGISTRY;\n const plan = planSchema({ schema });\n const declarations = new ExtensionDeclarationCollector();\n const issues: ValidationIssue[] = [];\n\n // `storage` is written only for string-backed enums: absent means\n // \"database\" (`enumStorageOf`), so IR for existing schemas is unchanged.\n // Built BEFORE the models because typed CHECK and partial-index expressions\n // are compiled to SQL while a model is built, and an enum operand is checked\n // for membership against the declaration.\n const enums: EnumIR[] = Array.from(schema.__enums, ([name, values]) => ({\n name,\n values: [...values],\n ...(schema.__enumStorage.get(name) === \"string\" ? { storage: \"string\" as const } : {}),\n }));\n const dialect = getSqlDialect({ dialect: providerToDialect({ provider }) });\n\n const models: ModelIR[] = Array.from(schema.__models.values(), (model) => {\n const built = buildModel({ model, plan, extensions, declarations, issues, dialect, enums });\n const rls = schema.__rls?.policies[model.__name];\n return rls === undefined ? built : { ...built, rls };\n });\n if (schema.__rls !== undefined) {\n for (const name of Object.keys(schema.__rls.policies)) {\n if (!schema.__models.has(name)) {\n issues.push({ rule: \"rls-unknown-model\", model: name, message: `RLS classification references model \"${name}\" absent from the composed schema` });\n }\n }\n }\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 const ir: SchemaIR = {\n datasource: { provider },\n models,\n enums,\n extensions: declarations.toIR(),\n ...(schema.__rls === undefined ? {} : { rls: { context: schema.__rls.context } }),\n };\n\n assertValidSchemaIR({ schema: ir });\n return ir;\n}\n",
10
10
  "/**\n * One column → `FieldType` mapping, shared by every DSL output path.\n *\n * `toIR` writes it into the IR and relation planning compares it on both sides\n * of a foreign key, so the scalar a column IS and the scalar a relation pairs\n * BY can never drift apart.\n */\n\nimport { fieldTypeIdentity } from \"@vibeorm/schema\";\nimport type { FieldType } from \"@vibeorm/schema\";\nimport type { ColumnDef, IdColumnConfig } from \"./types.ts\";\n\n/**\n * The IR field type of a column.\n *\n * `dsl.id()` is `Int` only for the `autoincrement` strategy — every other id\n * strategy is app-generated text. An inline enum resolves to its assigned name\n * (`dsl.schema()` assigns it); an unnamed one degrades to `String`, exactly as\n * an unnamed enum column does everywhere else. `dsl.unsupported()` keeps a\n * nominal `String` base and carries its real database type in `nativeType`.\n */\nexport function columnFieldType(params: { column: ColumnDef }): FieldType {\n const { column } = params;\n\n switch (column.__columnType) {\n case \"string\":\n return \"String\";\n case \"int\":\n return \"Int\";\n case \"bigint\":\n return \"BigInt\";\n case \"float\":\n return \"Float\";\n case \"decimal\":\n return \"Decimal\";\n case \"boolean\":\n return \"Boolean\";\n case \"datetime\":\n return \"DateTime\";\n case \"json\":\n return \"Json\";\n case \"bytes\":\n return \"Bytes\";\n case \"id\":\n return (column.__config as IdColumnConfig).type === \"autoincrement\" ? \"Int\" : \"String\";\n case \"enum\":\n return column.__enumName === undefined ? \"String\" : { enum: column.__enumName };\n case \"unsupported\":\n return \"String\";\n }\n}\n\n/**\n * A comparable spelling of a column's field type — `\"String\"`, `\"Int\"`,\n * `\"enum:Status\"`. Two columns can be the two ends of one foreign key only when\n * these agree exactly.\n */\nexport function fieldTypeKey(params: { column: ColumnDef }): string {\n return fieldTypeIdentity({ type: columnFieldType({ column: params.column }) });\n}\n",
11
11
  "/**\n * The schema plan: one resolution of a `SchemaDef` into the exact relation\n * fields and indexes a model exposes.\n *\n * Both output paths consume it — `generate.prisma()` renders it as text and\n * `toIR()` compiles it to `SchemaIR` — so a schema authored once produces the\n * same relations either way, and `parse(generate.prisma(s))` matches `toIR(s)`.\n *\n * It resolves, in order:\n * 1. explicit relations (with the 1:1 merge pass, see `detectOneToOnePairs`),\n * 2. reverse list relations Prisma requires but the author left implicit,\n * 3. inline children lists, and the child's FK back to its parent,\n * 4. indexes (column-level + composite, deduplicated).\n *\n * Naming policy — a relation field is named by whoever declared it:\n * - author-declared relation keys (`Post: { author: … }`) and inline-children\n * keys (`Items: s.children(…)`) pass through VERBATIM, so the name the user\n * wrote is the name in both the IR and the `.prisma` text;\n * - names the planner invents (reverse list sides, a child's FK back to its\n * parent) use the `@relation` alias when there is one, else the source model\n * name, suffixed on collision.\n */\n\nimport { VibeError, isSqlObjectIdentity, predicateKey } from \"@vibeorm/schema\";\nimport type { CascadeAction, PredicateIR, QualifiedSqlName, RelationType } from \"@vibeorm/schema\";\nimport { fieldTypeKey } from \"./field-type.ts\";\nimport { evaluateIndexes } from \"./model.ts\";\nimport { toFkColumnName } from \"./naming.ts\";\nimport type {\n IndexType,\n ModelDef,\n RelationsMap,\n SchemaDef,\n StoredRelationDef,\n} from \"./types.ts\";\n\n// ─── Plan shapes ──────────────────────────\n\n/**\n * Structural role of a planned relation field:\n * - `fkOwner` — holds the foreign key (`@relation(fields:…, references:…)`)\n * - `backOne` — singular back reference, no foreign key\n * - `list` — list side (`Model[]`)\n */\nexport type PlannedRelationKind = \"fkOwner\" | \"backOne\" | \"list\";\n\n/** One relation field, exactly as it will be emitted. */\nexport type PlannedRelation = {\n readonly model: string;\n /**\n * Field name on the owning model, as emitted — the author's declared key\n * verbatim, or a planner-generated name for a side the author left implicit.\n */\n readonly name: string;\n readonly targetModel: string;\n readonly kind: PlannedRelationKind;\n readonly isList: boolean;\n readonly isOptional: boolean;\n /** `@relation(\"Name\")` — the DSL's `alias`. */\n readonly relationName?: string;\n /** Physical FOREIGN KEY name — the DSL's `constraintName`, never the alias. */\n readonly constraintName?: string;\n /** FK columns on this model, in declared order; member `i` pairs with `references[i]`. */\n readonly fields?: readonly string[];\n /** Referenced columns on the target model, in declared order. */\n readonly references?: readonly string[];\n readonly onDelete?: CascadeAction;\n readonly onUpdate?: CascadeAction;\n};\n\n/** One index, after column-level and composite indexes are deduplicated. */\nexport type PlannedIndex = {\n readonly map?: string;\n readonly isUnique: boolean;\n readonly columns: readonly string[];\n readonly indexType?: IndexType;\n /** Qualified operator classes keyed by logical index column. */\n readonly ops?: Readonly<Partial<Record<string, QualifiedSqlName>>>;\n /** Partial-index predicate (raw SQL) — postgres/pglite/sqlite only. */\n readonly where?: string;\n /** Partial-index predicate as a typed expression, rendered when the dialect is known. */\n readonly wherePredicate?: PredicateIR;\n /** `UNIQUE NULLS NOT DISTINCT` — unique indexes on postgres/pglite (15+) only. */\n readonly nullsNotDistinct?: boolean;\n /** Client selector name for a compound unique (Prisma `@@unique(..., name:)`). */\n readonly clientName?: string;\n};\n\n/** Everything both output paths need, keyed by model name. */\nexport type SchemaPlan = {\n readonly relations: ReadonlyMap<string, readonly PlannedRelation[]>;\n readonly indexes: ReadonlyMap<string, readonly PlannedIndex[]>;\n};\n\n// ─── 1:1 merge detection ──────────────────\n\n/** How a relation participates in a merged one-to-one pair. */\nexport type MergedOneToOneSide = {\n readonly role: \"fkOwner\" | \"backRelation\";\n readonly pairedRelName: string;\n readonly pairedModelName: string;\n /** Merged referential actions — the FK owner's win. */\n readonly onDelete?: CascadeAction;\n readonly onUpdate?: CascadeAction;\n /** Merged physical FK name — the FK owner's wins; either side may declare it. */\n readonly constraintName?: string;\n};\n\ntype OneRelationEntry = {\n readonly modelName: string;\n readonly relName: string;\n readonly rel: StoredRelationDef;\n};\n\nfunction relationPairKey(params: { relation: StoredRelationDef; reverse?: boolean }): string {\n const { relation, reverse } = params;\n return JSON.stringify(reverse\n ? [relation.__toModel, relation.__toColumns, relation.__fromModel, relation.__fromColumns, relation.__alias ?? \"\"]\n : [relation.__fromModel, relation.__fromColumns, relation.__toModel, relation.__toColumns, relation.__alias ?? \"\"]);\n}\n\n/**\n * Finds pairs of `r.one` relations that describe the same 1:1 relationship\n * from both sides, and decides which side owns the foreign key.\n *\n * Two `one` relations pair when their column references cross-match:\n * `A.from === B.to` and `A.to === B.from`. The FK owner is the side whose\n * `from` column is NOT the primary key.\n *\n * Returns a map keyed by `\"Model:relationName\"`.\n */\nexport function detectOneToOnePairs(params: {\n relations: RelationsMap;\n models: ReadonlyMap<string, ModelDef>;\n}): Map<string, MergedOneToOneSide> {\n const { relations, models } = params;\n const mergeMap = new Map<string, MergedOneToOneSide>();\n\n const allOnes: OneRelationEntry[] = [];\n for (const [modelName, modelRelations] of Object.entries(relations)) {\n for (const [relName, rel] of Object.entries(modelRelations)) {\n if (rel.__ownsForeignKey !== undefined && (typeof rel.__ownsForeignKey !== \"boolean\" || rel.__relationType !== \"one\" || (rel.__ownsForeignKey && rel.__fromModel !== modelName))) {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Invalid foreign-key ownership declaration on ${modelName}.${relName}` });\n }\n if (rel.__relationType === \"one\") {\n allOnes.push({ modelName, relName, rel });\n }\n }\n }\n\n const candidatesByKey = new Map<string, { readonly positions: number[]; start: number }>();\n for (const [position, entry] of allOnes.entries()) {\n const key = relationPairKey({ relation: entry.rel });\n const bucket = candidatesByKey.get(key);\n if (bucket === undefined) candidatesByKey.set(key, { positions: [position], start: 0 });\n else bucket.positions.push(position);\n }\n const paired = new Set<string>();\n\n for (let i = 0; i < allOnes.length; i++) {\n const a = allOnes[i];\n if (a === undefined) continue;\n const keyA = `${a.modelName}:${a.relName}`;\n if (paired.has(keyA)) continue;\n\n const bucket = candidatesByKey.get(relationPairKey({ relation: a.rel, reverse: true }));\n if (bucket === undefined) continue;\n for (let candidate = bucket.start; candidate < bucket.positions.length; candidate++) {\n const j = bucket.positions[candidate]!;\n const b = allOnes[j]!;\n const keyB = `${b.modelName}:${b.relName}`;\n if (j <= i || paired.has(keyB)) {\n bucket.start = candidate + 1;\n continue;\n }\n\n // Composite sides pair only when the WHOLE tuple crosses over, member by\n // member: two relations sharing their first column but disagreeing later\n // describe different foreign keys.\n const sameColumnPair =\n a.rel.__fromModel === b.rel.__toModel &&\n sameColumnTuple({ left: a.rel.__fromColumns, right: b.rel.__toColumns }) &&\n a.rel.__toModel === b.rel.__fromModel &&\n sameColumnTuple({ left: a.rel.__toColumns, right: b.rel.__fromColumns });\n if (!sameColumnPair || (a.rel.__alias ?? \"\") !== (b.rel.__alias ?? \"\")) continue;\n\n const { fkOwner, backRelation } = resolveFkOwner({ a, b, models });\n\n const onDelete = fkOwner.rel.__onDelete ?? backRelation.rel.__onDelete;\n const onUpdate = fkOwner.rel.__onUpdate ?? backRelation.rel.__onUpdate;\n const constraintName = fkOwner.rel.__constraintName ?? backRelation.rel.__constraintName;\n\n const fkKey = `${fkOwner.modelName}:${fkOwner.relName}`;\n const backKey = `${backRelation.modelName}:${backRelation.relName}`;\n\n mergeMap.set(fkKey, {\n role: \"fkOwner\",\n pairedRelName: backRelation.relName,\n pairedModelName: backRelation.modelName,\n onDelete,\n onUpdate,\n ...(constraintName === undefined ? {} : { constraintName }),\n });\n mergeMap.set(backKey, {\n role: \"backRelation\",\n pairedRelName: fkOwner.relName,\n pairedModelName: fkOwner.modelName,\n onDelete,\n onUpdate,\n ...(constraintName === undefined ? {} : { constraintName }),\n });\n\n paired.add(fkKey);\n paired.add(backKey);\n bucket.start = candidate + 1;\n break;\n }\n }\n\n return mergeMap;\n}\n\n/** Two relation ends name the same columns, in the same order. */\nfunction sameColumnTuple(params: { left: readonly string[]; right: readonly string[] }): boolean {\n const { left, right } = params;\n return left.length === right.length && left.every((name, index) => name === right[index]);\n}\n\nfunction resolveFkOwner(params: {\n a: OneRelationEntry;\n b: OneRelationEntry;\n models: ReadonlyMap<string, ModelDef>;\n}): { fkOwner: OneRelationEntry; backRelation: OneRelationEntry } {\n const { a, b, models } = params;\n\n const ownershipError = (): never => {\n throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: `Ambiguous foreign-key ownership between ${a.modelName}.${a.relName} and ${b.modelName}.${b.relName}; set ownsForeignKey: true on the foreign-key side`, meta: { rule: \"ambiguous-foreign-key-owner\" } });\n };\n const aOwns = a.rel.__ownsForeignKey;\n const bOwns = b.rel.__ownsForeignKey;\n if (aOwns !== undefined || bOwns !== undefined) {\n if (aOwns === bOwns) return ownershipError();\n return aOwns === true || bOwns === false ? { fkOwner: a, backRelation: b } : { fkOwner: b, backRelation: a };\n }\n const aFromIsId = fromIsPrimaryKey({ model: models.get(a.modelName), columns: a.rel.__fromColumns });\n const bFromIsId = fromIsPrimaryKey({ model: models.get(b.modelName), columns: b.rel.__fromColumns });\n\n if (aFromIsId && !bFromIsId) return { fkOwner: b, backRelation: a };\n if (!aFromIsId && bFromIsId) return { fkOwner: a, backRelation: b };\n\n // Ambiguous (both or neither are primary keys): the side that declares\n // referential actions owns the FK, else the side whose column reads like one.\n const aActions = a.rel.__onDelete !== undefined || a.rel.__onUpdate !== undefined;\n const bActions = b.rel.__onDelete !== undefined || b.rel.__onUpdate !== undefined;\n if (aActions && !bActions) {\n return { fkOwner: a, backRelation: b };\n }\n if (bActions && !aActions) {\n return { fkOwner: b, backRelation: a };\n }\n\n const aLooksFk = a.rel.__fromColumns.some((column) => looksLikeForeignKey({ column }));\n const bLooksFk = b.rel.__fromColumns.some((column) => looksLikeForeignKey({ column }));\n if (aLooksFk === bLooksFk) return ownershipError();\n return aLooksFk ? { fkOwner: a, backRelation: b } : { fkOwner: b, backRelation: a };\n}\n\n/**\n * Does this relation end name the model's OWN primary key? A composite end must\n * be the whole compound key; a single column keeps the older, looser rule (an\n * `id()` column, or any member of a compound key) so single-column ownership\n * detection is unchanged.\n */\nfunction fromIsPrimaryKey(params: { model: ModelDef | undefined; columns: readonly string[] }): boolean {\n const { model, columns } = params;\n if (model === undefined) return false;\n if (columns.length > 1) {\n const primaryKey = model.__primaryKey;\n return (\n primaryKey !== undefined &&\n primaryKey.length === columns.length &&\n primaryKey.every((name) => columns.includes(name))\n );\n }\n const column = columns[0];\n if (column === undefined) return false;\n return model.__columns.get(column)?.__columnType === \"id\" || model.__primaryKey?.includes(column) === true;\n}\n\nfunction looksLikeForeignKey(params: { column: string }): boolean {\n const { column } = params;\n return column.toLowerCase().includes(\"id\") && column !== \"id\";\n}\n\n// ─── Relation planning ────────────────────\n\nfunction planExplicitRelations(params: {\n modelName: string;\n model: ModelDef;\n relations: RelationsMap;\n mergeMap: ReadonlyMap<string, MergedOneToOneSide>;\n}): PlannedRelation[] {\n const { modelName, model, relations, mergeMap } = params;\n const planned: PlannedRelation[] = [];\n\n for (const [relName, rel] of Object.entries(relations[modelName] ?? {})) {\n // The author's key IS the field name — never re-cased, so one logical\n // schema reads the same through the IR and through the .prisma text.\n const name = relName;\n const base = {\n model: modelName,\n name,\n targetModel: rel.__targetModel,\n relationName: rel.__alias,\n };\n\n if (rel.__relationType === \"many\") {\n planned.push({ ...base, kind: \"list\", isList: true, isOptional: false });\n continue;\n }\n\n const mergeInfo = mergeMap.get(`${modelName}:${relName}`);\n\n if (mergeInfo?.role === \"backRelation\") {\n // Parent side of a merged 1:1 — always an optional back reference.\n planned.push({ ...base, kind: \"backOne\", isList: false, isOptional: true });\n continue;\n }\n\n const ownsFk = mergeInfo?.role === \"fkOwner\" || (rel.__ownsForeignKey !== false && rel.__fromModel === modelName);\n if (!ownsFk) {\n planned.push({ ...base, kind: \"backOne\", isList: false, isOptional: rel.__optional });\n continue;\n }\n\n // MATCH SIMPLE: one NULL member and the database checks nothing, so the\n // parent is absent as soon as ANY member is nullable.\n const anyMemberOptional = rel.__fromColumns.some(\n (name) => model.__columns.get(name)?.__config.optional === true,\n );\n const constraintName = mergeInfo?.constraintName ?? rel.__constraintName;\n planned.push({\n ...base,\n kind: \"fkOwner\",\n isList: false,\n isOptional: anyMemberOptional || rel.__optional,\n fields: [...rel.__fromColumns],\n references: [...rel.__toColumns],\n ...(constraintName === undefined ? {} : { constraintName }),\n onDelete: mergeInfo?.onDelete ?? rel.__onDelete,\n onUpdate: mergeInfo?.onUpdate ?? rel.__onUpdate,\n });\n }\n\n return planned;\n}\n\n/**\n * Prisma requires both sides of a relation to exist. For every `one` relation\n * pointing at this model without a matching list on this side, plan the list.\n * Merged 1:1 pairs are complete already and are skipped.\n *\n * These names are generated, not declared: the `@relation` alias when the\n * source side has one, else the source model name, numerically suffixed if that\n * name is already taken on this model.\n */\nfunction planMissingReverseRelations(params: {\n modelName: string;\n relations: RelationsMap;\n incoming: readonly OneRelationEntry[];\n mergeMap: ReadonlyMap<string, MergedOneToOneSide>;\n existing: readonly PlannedRelation[];\n}): PlannedRelation[] {\n const { modelName, relations, incoming, mergeMap, existing } = params;\n const planned: PlannedRelation[] = [];\n\n const existingLists = new Set<string>();\n const existingNames = new Set<string>();\n for (const relation of existing) {\n existingNames.add(relation.name);\n if (relation.isList) {\n existingLists.add(`${relation.targetModel}:${relation.relationName ?? \"\"}`);\n }\n }\n\n for (const { modelName: sourceModelName, relName, rel } of incoming) {\n if (mergeMap.has(`${sourceModelName}:${relName}`)) continue;\n\n const reverseKey = `${sourceModelName}:${rel.__alias ?? \"\"}`;\n if (existingLists.has(reverseKey)) continue;\n\n // A self-relation may already declare its own list side explicitly.\n if (sourceModelName === modelName) {\n const hasExplicitReverse = Object.values(relations[sourceModelName] ?? {}).some(\n (other: StoredRelationDef) =>\n other.__relationType === \"many\" &&\n other.__targetModel === modelName &&\n other.__alias === rel.__alias\n );\n if (hasExplicitReverse) continue;\n }\n\n const baseName = rel.__alias ?? sourceModelName;\n let name = baseName;\n let counter = 1;\n while (existingNames.has(name)) {\n counter++;\n name = `${baseName}${counter}`;\n }\n\n planned.push({\n model: modelName,\n name,\n targetModel: sourceModelName,\n kind: \"list\",\n isList: true,\n isOptional: false,\n relationName: rel.__alias,\n });\n existingLists.add(reverseKey);\n existingNames.add(name);\n }\n\n return planned;\n}\n\n/** The parent's list of inline children, plus each child's FK back to it. */\nfunction planChildRelations(params: {\n modelName: string;\n model: ModelDef;\n parents: readonly (readonly [string, ModelDef])[];\n}): PlannedRelation[] {\n const { modelName, model, parents } = params;\n const planned: PlannedRelation[] = [];\n\n for (const [childKey, childModel] of model.__children) {\n planned.push({\n model: modelName,\n name: childKey,\n targetModel: childModel.__name,\n kind: \"list\",\n isList: true,\n isOptional: false,\n });\n }\n\n for (const [parentModelName, parentModel] of parents) {\n const parentPk =\n parentModel.__primaryKey?.[0] ??\n Array.from(parentModel.__columns.entries()).find(\n ([, column]) => column.__columnType === \"id\"\n )?.[0] ??\n \"id\";\n\n planned.push({\n model: modelName,\n name: parentModelName,\n targetModel: parentModelName,\n kind: \"fkOwner\",\n isList: false,\n isOptional: false,\n fields: [toFkColumnName({ modelName: parentModelName })],\n references: [parentPk],\n });\n }\n\n return planned;\n}\n\n// ─── Index planning ───────────────────────\n\nfunction planIndexes(params: { model: ModelDef }): PlannedIndex[] {\n const { model } = params;\n const byKey = new Map<string, PlannedIndex>();\n\n // Column-level `.index()` — id and unique columns are already indexed.\n for (const [columnName, column] of model.__columns) {\n if (column.__columnType === \"id\" || column.__config.unique === true) continue;\n if (column.__config.index === true) {\n byKey.set(columnName, { isUnique: false, columns: [columnName] });\n }\n }\n\n // Composite/typed indexes from the model's `indexes` callback. A partial\n // index (where) is a DIFFERENT database object from a total index over the\n // same columns, so the predicate joins the dedup key. A TYPED predicate joins\n // it through `predicateKey` — a structural, dialect-free identity — because\n // index planning runs before any provider is known and must not render SQL.\n for (const index of evaluateIndexes({ model })) {\n if (index.__ops !== undefined) {\n if (index.__ops === null || typeof index.__ops !== \"object\" || Array.isArray(index.__ops)) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Index ops must be a field-keyed qualified-name map\", meta: { rule: \"index-operator-class-map\", model: model.__name } });\n if (index.__type === \"unique\") throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"Custom unique operator classes can change client selector equality\", meta: { feature: \"uniqueIndexOperatorClasses\", model: model.__name } });\n for (const [field, operatorClass] of Object.entries(index.__ops)) {\n if (!index.__columns.includes(field)) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Operator class names a field outside the index\", meta: { rule: \"index-operator-class-field\", model: model.__name, field } });\n if (operatorClass !== undefined && !isSqlObjectIdentity({ kind: \"table\", name: operatorClass })) throw new VibeError({ code: \"VIBE_SCHEMA_INVALID\", message: \"Index operator class must be a qualified SQL name { namespace, name }\", meta: { rule: \"index-operator-class-identity\", model: model.__name, field } });\n }\n }\n const operatorClasses = index.__columns.map((field) => index.__ops?.[field]);\n const operatorSuffix = operatorClasses.some((operatorClass) => operatorClass !== undefined)\n ? `|ops:${JSON.stringify([index.__indexType ?? \"BTree\", operatorClasses.map((operatorClass) => operatorClass === undefined ? null : [operatorClass.namespace, operatorClass.name])])}`\n : \"\";\n const predicateSuffix =\n index.__where !== undefined\n ? `|where:${index.__where}`\n : index.__wherePredicate === undefined\n ? \"\"\n : `|where:${predicateKey({ predicate: index.__wherePredicate })}`;\n const key = index.__columns.join(\",\") + predicateSuffix + operatorSuffix;\n const existing = byKey.get(key);\n const isUnique = index.__type === \"unique\";\n\n if (existing === undefined || isUnique) {\n byKey.set(key, {\n isUnique,\n columns: [...index.__columns],\n indexType: index.__indexType,\n ...(index.__ops === undefined ? {} : { ops: index.__ops }),\n ...(index.__map === undefined ? {} : { map: index.__map }),\n ...(index.__where === undefined ? {} : { where: index.__where }),\n ...(index.__wherePredicate === undefined ? {} : { wherePredicate: index.__wherePredicate }),\n ...(index.__nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n ...(index.__clientName === undefined ? {} : { clientName: index.__clientName }),\n });\n } else if (index.__map !== undefined) {\n byKey.set(key, { ...existing, map: index.__map, indexType: index.__indexType ?? existing.indexType });\n } else if (index.__indexType !== undefined && existing.indexType === undefined) {\n byKey.set(key, { ...existing, indexType: index.__indexType });\n }\n }\n\n return Array.from(byKey.values());\n}\n\n// ─── Foreign-key integrity ────────────────\n\n/**\n * Every column set a foreign key may legally REFERENCE on a model: its `id()`\n * column, each `unique()` column, its compound primary key and each TOTAL\n * `@@unique` index. A partial unique is excluded — raw `where:` or typed\n * `.where()` alike, because no dialect here accepts one as a foreign-key\n * target, and which SPELLING made it partial changes nothing about that.\n */\nfunction referenceableKeys(params: { model: ModelDef }): readonly (readonly string[])[] {\n const { model } = params;\n const keys: (readonly string[])[] = [];\n\n for (const [name, column] of model.__columns) {\n if (column.__columnType === \"id\" || column.__config.unique === true) keys.push([name]);\n }\n if (model.__primaryKey !== undefined && model.__primaryKey.length > 0) keys.push([...model.__primaryKey]);\n for (const index of evaluateIndexes({ model })) {\n if (index.__type === \"unique\" && index.__where === undefined && index.__wherePredicate === undefined) {\n keys.push([...index.__columns]);\n }\n }\n\n return keys;\n}\n\n/**\n * Checks one FK-owning relation the way the database will: equal arity, the\n * same scalar type on both ends of every member, and a referenced column set\n * that is exactly some unique key of the target.\n *\n * Refusing here is the earliest knowable moment — the alternative is DDL the\n * server rejects with \"there is no unique constraint matching given keys\", or\n * a foreign key that compares two different scalar types.\n */\nfunction assertForeignKeyIntegrity(params: {\n relation: PlannedRelation;\n models: ReadonlyMap<string, ModelDef>;\n}): void {\n const { relation, models } = params;\n const fields = relation.fields ?? [];\n const references = relation.references ?? [];\n const at = `${relation.model}.${relation.name}`;\n\n const refuse = (message: string, rule: string, meta: Record<string, unknown> = {}): never => {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `Relation ${at}: ${message}`,\n meta: { rule, model: relation.model, relation: relation.name, ...meta },\n });\n };\n\n if (fields.length !== references.length) {\n refuse(\n `pairs ${fields.length} foreign-key column(s) with ${references.length} referenced column(s)`,\n \"relation-tuple-arity\",\n { fields, references },\n );\n }\n if (new Set(fields).size !== fields.length) {\n refuse(`repeats a foreign-key column (${fields.join(\", \")})`, \"relation-duplicate-column\", { fields });\n }\n if (new Set(references).size !== references.length) {\n refuse(`repeats a referenced column (${references.join(\", \")})`, \"relation-duplicate-column\", { references });\n }\n\n const owner = models.get(relation.model);\n const target = models.get(relation.targetModel);\n // An unknown target is `unknown-relation-target`, reported by IR validation\n // against the whole schema; nothing here can add to it.\n if (owner === undefined || target === undefined) return;\n\n fields.forEach((name, index) => {\n const referenced = references[index]!;\n const column = owner.__columns.get(name);\n const refColumn = target.__columns.get(referenced);\n if (column === undefined) {\n refuse(`uses foreign-key column \"${name}\", which ${relation.model} does not declare`, \"unknown-relation-field\", { field: name });\n return;\n }\n if (refColumn === undefined) {\n refuse(`references \"${relation.targetModel}.${referenced}\", which does not exist`, \"unknown-relation-reference\", { reference: referenced });\n return;\n }\n if (column.__config.array === true || refColumn.__config.array === true) {\n refuse(`pairs a scalar list (${name} ↔ ${referenced}) — a foreign key compares single values`, \"relation-list-column\", { field: name, reference: referenced });\n }\n if (column.__columnType === \"json\" || refColumn.__columnType === \"json\" || column.__columnType === \"unsupported\" || refColumn.__columnType === \"unsupported\") {\n refuse(`pairs ${name} ↔ ${referenced}, and Json/unsupported columns cannot be a foreign key`, \"relation-unsupported-column\", { field: name, reference: referenced });\n }\n const ownType = fieldTypeKey({ column });\n const refType = fieldTypeKey({ column: refColumn });\n if (ownType !== refType) {\n refuse(\n `pairs ${relation.model}.${name} (${ownType}) with ${relation.targetModel}.${referenced} (${refType}) — both ends of a foreign key need the same scalar type`,\n \"relation-type-mismatch\",\n { field: name, reference: referenced, fieldType: ownType, referenceType: refType },\n );\n }\n });\n\n const keys = referenceableKeys({ model: target });\n const matched = keys.some(\n (key) => key.length === references.length && key.every((name) => references.includes(name)),\n );\n if (!matched) {\n refuse(\n `references ${relation.targetModel}.(${references.join(\", \")}), which is not a unique key there — declare those columns as the primary key, a unique column, or a total @@unique index`,\n \"relation-reference-not-unique\",\n { references, candidates: keys.map((key) => [...key]) },\n );\n }\n}\n\n// ─── Public API ────────────────────────\n\ntype RelationLookups = {\n readonly incoming: ReadonlyMap<string, readonly OneRelationEntry[]>;\n readonly parents: ReadonlyMap<string, readonly (readonly [string, ModelDef])[]>;\n};\n\nfunction relationLookups(params: { schema: SchemaDef }): RelationLookups {\n const incoming = new Map<string, OneRelationEntry[]>();\n for (const [modelName, relations] of Object.entries(params.schema.__relations)) {\n for (const [relName, rel] of Object.entries(relations)) {\n if (rel.__relationType !== \"one\") continue;\n const target = rel.__targetModel;\n const entries = incoming.get(target);\n const entry = { modelName, relName, rel };\n if (entries === undefined) incoming.set(target, [entry]);\n else entries.push(entry);\n }\n }\n const parents = new Map<string, (readonly [string, ModelDef])[]>();\n for (const [name, model] of params.schema.__models) {\n for (const child of model.__children.values()) {\n const entries = parents.get(child.__name);\n if (entries === undefined) parents.set(child.__name, [[name, model]]);\n else entries.push([name, model]);\n }\n }\n return { incoming, parents };\n}\n\n/** Resolves a composed schema into the relations and indexes it emits. */\nexport function planSchema(params: { schema: SchemaDef }): SchemaPlan {\n const { schema } = params;\n const mergeMap = detectOneToOnePairs({\n relations: schema.__relations,\n models: schema.__models,\n });\n\n const relations = new Map<string, readonly PlannedRelation[]>();\n const indexes = new Map<string, readonly PlannedIndex[]>();\n let lookups = relationLookups({ schema });\n let refreshLookups = false;\n\n for (const [modelName, model] of schema.__models) {\n if (refreshLookups) {\n lookups = relationLookups({ schema });\n refreshLookups = false;\n }\n const explicit = planExplicitRelations({\n modelName,\n model,\n relations: schema.__relations,\n mergeMap,\n });\n const reverses = planMissingReverseRelations({\n modelName,\n relations: schema.__relations,\n incoming: lookups.incoming.get(modelName) ?? [],\n mergeMap,\n existing: explicit,\n });\n const children = planChildRelations({ modelName, model, parents: lookups.parents.get(modelName) ?? [] });\n\n const planned = [...explicit, ...reverses, ...children];\n for (const relation of planned) {\n if (relation.kind === \"fkOwner\") {\n if (schema.__models.get(relation.targetModel)?.__indexes !== undefined) refreshLookups = true;\n assertForeignKeyIntegrity({ relation, models: schema.__models });\n }\n }\n relations.set(modelName, planned);\n // Callbacks may mutate authoring metadata as well as return fresh indexes.\n // Rebuild structural lookups before the next model, without caching results.\n if (model.__indexes !== undefined) refreshLookups = true;\n indexes.set(modelName, planIndexes({ model }));\n }\n\n return { relations, indexes };\n}\n\n/**\n * Classifies a planned relation the way a Prisma parser would classify the\n * field it renders to: by the shape of the pair, never by DSL intent.\n *\n * Counterparts are the target model's relation fields that point back with a\n * symmetric relation name (both unnamed, or the same name) — the one implicit\n * many-to-many rule, with self-exclusion (LEARNINGS.md).\n */\nexport function resolveRelationType(params: {\n relation: PlannedRelation;\n plan: SchemaPlan;\n}): RelationType {\n const { relation, plan } = params;\n const counterparts = findCounterparts({ relation, plan });\n\n if (relation.isList) {\n if (counterparts.some((candidate) => !candidate.isList)) return \"oneToMany\";\n return counterparts.some((candidate) => candidate.isList) ? \"manyToMany\" : \"oneToMany\";\n }\n\n if (relation.kind === \"fkOwner\") {\n const pairedWithSingular =\n counterparts.length > 0 && counterparts.every((candidate) => !candidate.isList);\n return pairedWithSingular ? \"oneToOne\" : \"manyToOne\";\n }\n\n return \"oneToOne\";\n}\n\nfunction findCounterparts(params: {\n relation: PlannedRelation;\n plan: SchemaPlan;\n}): PlannedRelation[] {\n const { relation, plan } = params;\n const nameKey = relation.relationName ?? \"\";\n\n return (plan.relations.get(relation.targetModel) ?? []).filter(\n (candidate) =>\n candidate !== relation &&\n candidate.targetModel === relation.model &&\n (candidate.relationName ?? \"\") === nameKey\n );\n}\n",
12
12
  "/**\n * Model builder — `dsl.create({ name, schema, indexes })`.\n *\n * Models hold columns (and optional inline children) only; relations are\n * declared separately via `dsl.defineRelations()`.\n *\n * @example\n * const User = dsl.create({\n * name: \"User\",\n * schema: {\n * ...dsl.templates.base,\n * email: dsl.string().unique(),\n * workspaceId: dsl.string().index(),\n * },\n * indexes: (i) => [i.unique(\"workspaceId\", \"email\")],\n * });\n */\n\nimport { VibeError } from \"@vibeorm/schema\";\nimport type { PredicateIR } from \"@vibeorm/schema\";\nimport { cloneColumnDef } from \"./column.ts\";\nimport { toFkColumnName } from \"./naming.ts\";\nimport { createPredicateBuilder } from \"./predicate.ts\";\nimport { createChildrenBuilder } from \"./relation.ts\";\nimport type {\n ChecksCallback,\n ChildrenDef,\n ChildrenSchemaCallback,\n ColumnDef,\n CreateModelConfig,\n ModelCheckConfig,\n IndexBuilder,\n IndexCallback,\n IndexDef,\n IndexOptions,\n IndexType,\n ModelDef,\n ModelPolicyConfig,\n PartialIndexDef,\n PredicateBuilder,\n SchemaDefinition,\n UniqueIndexOptions,\n} from \"./types.ts\";\n\n// ─── Type guards ──────────────────────────\n\nfunction isColumnDef(value: unknown): value is ColumnDef {\n return (\n typeof value === \"object\" && value !== null && \"__type\" in value && value.__type === \"column\"\n );\n}\n\nfunction isChildrenDef(value: unknown): value is ChildrenDef {\n return (\n typeof value === \"object\" && value !== null && \"__type\" in value && value.__type === \"children\"\n );\n}\n\n// ─── Index builder ────────────────────────\n\n/**\n * Creates the `i` handed to a model's `indexes` callback.\n *\n * @example\n * indexes: (i) => [\n * i.on(\"workspaceId\", \"name\"),\n * i.unique(\"workspaceId\", \"email\"),\n * i.gin(\"tags\"),\n * i.on([\"content\"], { type: \"Gist\" }),\n * ]\n */\nexport function createIndexBuilder<\n T extends string = string,\n TSchema extends SchemaDefinition = SchemaDefinition,\n>(): IndexBuilder<T, TSchema> {\n /**\n * Attach the terminal `.where()` so an index can still take a TYPED partial\n * predicate. It returns a plain `IndexDef`, so the chain cannot be reopened\n * and an index carries at most one predicate.\n */\n const partial = (index: IndexDef): PartialIndexDef<T, TSchema> => {\n const where = (predicate: (c: PredicateBuilder<T, TSchema>) => PredicateIR): IndexDef => {\n if (index.__where !== undefined) {\n throw new VibeError({\n code: \"VIBE_SCHEMA_INVALID\",\n message: `Index on [${index.__columns.join(\", \")}] already carries a raw where: predicate — an index has ONE predicate, so use either the raw string or .where(), not both`,\n meta: { rule: \"predicate-duplicate-where\", columns: [...index.__columns] },\n });\n }\n return { ...index, __wherePredicate: predicate(createPredicateBuilder<T, TSchema>()) };\n };\n // NON-enumerable on purpose: an IndexDef is DATA. An enumerable method\n // would be copied by every `{ ...index }` spread, serialized by\n // JSON.stringify, and compared by every structural assertion — so the\n // builder's own affordance would leak into the value it builds.\n return Object.defineProperty({ ...index }, \"where\", {\n value: where,\n enumerable: false,\n writable: false,\n configurable: true,\n }) as PartialIndexDef<T, TSchema>;\n };\n\n const createIndex = (params: { columns: readonly string[]; type?: IndexType; where?: string; map?: string; ops?: IndexOptions[\"ops\"] }): IndexDef => ({\n __type: \"index\",\n __columns: [...params.columns],\n __indexType: params.type,\n ...(params.map === undefined ? {} : { __map: params.map }),\n ...(params.where === undefined ? {} : { __where: params.where }),\n ...(params.ops === undefined ? {} : { __ops: params.ops }),\n });\n\n return {\n /** Composite (or single-column) index; the array form takes options. */\n on<C extends T>(...args: C[] | [C[], IndexOptions<NoInfer<C>>]): PartialIndexDef<T, TSchema> {\n const [first, second] = args;\n if (\n args.length === 2 &&\n Array.isArray(first) &&\n typeof second === \"object\" &&\n !Array.isArray(second)\n ) {\n return partial(createIndex({ columns: first, type: second.type, where: second.where, map: second.map, ops: second.ops }));\n }\n return partial(createIndex({ columns: args as string[] }));\n },\n\n /** Alias of `on(...)`. */\n index<C extends T>(...columns: C[]): PartialIndexDef<T, TSchema> {\n return partial(createIndex({ columns }));\n },\n\n /** Unique constraint (`@@unique([...])`); the array form takes options (partial `where`). */\n unique<C extends T>(...args: C[] | [C[], UniqueIndexOptions]): PartialIndexDef<T, TSchema> {\n const [first, second] = args;\n if (\n args.length === 2 &&\n Array.isArray(first) &&\n typeof second === \"object\" &&\n !Array.isArray(second)\n ) {\n if (\"ops\" in second && second.ops !== undefined) {\n throw new VibeError({ code: \"VIBE_UNSUPPORTED_CAPABILITY\", message: \"Custom unique operator classes can change client selector equality\", meta: { feature: \"uniqueIndexOperatorClasses\" } });\n }\n return partial({\n __type: \"unique\",\n __columns: [...first],\n ...(second.map === undefined ? {} : { __map: second.map }),\n ...(second.where === undefined ? {} : { __where: second.where }),\n ...(second.nullsNotDistinct === true ? { __nullsNotDistinct: true } : {}),\n ...(second.name === undefined ? {} : { __clientName: second.name }),\n });\n }\n return partial({ __type: \"unique\", __columns: [...(args as string[])] });\n },\n\n /** GIN index — JSON, arrays, full-text (PostgreSQL). */\n gin<C extends T>(...columns: C[]): PartialIndexDef<T, TSchema> {\n return partial(createIndex({ columns, type: \"Gin\" }));\n },\n\n /** GiST index — geometric, range and full-text data (PostgreSQL). */\n gist<C extends T>(...columns: C[]): PartialIndexDef<T, TSchema> {\n return partial(createIndex({ columns, type: \"Gist\" }));\n },\n\n /** Hash index — equality lookups (PostgreSQL). */\n hash<C extends T>(...columns: C[]): PartialIndexDef<T, TSchema> {\n return partial(createIndex({ columns, type: \"Hash\" }));\n },\n\n /** BRIN index — large, naturally ordered tables (PostgreSQL). */\n brin<C extends T>(...columns: C[]): PartialIndexDef<T, TSchema> {\n return partial(createIndex({ columns, type: \"Brin\" }));\n },\n };\n}\n\n// ─── Schema processing ────────────────────\n\nfunction processSchema(params: {\n modelName: string;\n schema: SchemaDefinition | ChildrenSchemaCallback;\n}): { columns: Map<string, ColumnDef>; children: Map<string, ModelDef> } {\n const { modelName, schema } = params;\n const resolvedSchema = typeof schema === \"function\" ? schema(createChildrenBuilder()) : schema;\n\n const columns = new Map<string, ColumnDef>();\n const children = new Map<string, ModelDef>();\n\n for (const [key, value] of Object.entries(resolvedSchema)) {\n if (isColumnDef(value)) {\n // Clone so template-provided columns are never shared between models.\n const cloned = cloneColumnDef({ column: value });\n cloned.__name = key;\n columns.set(key, cloned);\n } else if (isChildrenDef(value)) {\n const childModel = create({ name: value.__name, schema: value.__schema });\n\n // The child carries the FK back to its parent.\n const parentFkName = toFkColumnName({ modelName });\n childModel.__columns.set(parentFkName, {\n __type: \"column\",\n __columnType: \"string\",\n __name: parentFkName,\n __config: { index: true },\n });\n\n children.set(key, childModel);\n }\n }\n\n return { columns, children };\n}\n\n// ─── Model factory ────────────────────────\n\n/**\n * Creates a model definition. `indexes` and `primaryKey` are constrained to\n * the model's own column names.\n */\nexport function create<const TSchema extends SchemaDefinition>(\n config: CreateModelConfig<TSchema>\n): ModelDef<TSchema> {\n const { columns, children } = processSchema({\n modelName: config.name,\n schema: config.schema,\n });\n\n return {\n __type: \"model\",\n __name: config.name,\n __schema: config.schema,\n __indexes: config.indexes as IndexCallback | undefined,\n __columns: columns,\n __children: children,\n __map: config.map,\n __primaryKey: config.primaryKey as string[] | undefined,\n // Same widening as `indexes` above: the config's callback is bound to THIS\n // model's columns, and the stored form is the erased one every consumer\n // reads. The type parameters have done their work at the call site.\n __exclusions: config.exclusions as ModelDef[\"__exclusions\"],\n __checks: config.checks as readonly ModelCheckConfig[] | ChecksCallback | undefined,\n __extensions: config.extensions,\n __policy: config.policy as ModelPolicyConfig | undefined,\n __comment: config.comment,\n };\n}\n\n// ─── Model utilities ──────────────────────\n\n/** All column names of a model, in declaration order. */\nexport function getColumnNames(params: { model: ModelDef }): string[] {\n return Array.from(params.model.__columns.keys());\n}\n\n/** Runs a model's `indexes` callback, if it declared one. */\nexport function evaluateIndexes(params: { model: ModelDef }): IndexDef[] {\n const { model } = params;\n if (model.__indexes === undefined) {\n return [];\n }\n return model.__indexes(createIndexBuilder<string, SchemaDefinition>());\n}\n",
@@ -18,7 +18,7 @@
18
18
  "/**\n * DSL-level schema checks, run before compiling to IR.\n *\n * These catch authoring mistakes in DSL terms (a relation pointing at a column\n * that does not exist, an ambiguous self-relation) and return them as a list —\n * structural IR rules live in `@vibeorm/schema`'s `validateSchemaIR`, which\n * `toIR()` always enforces.\n *\n * @example\n * const issues = dsl.validateSchema(schema);\n * if (issues.some((i) => i.type === \"error\")) throw new Error(\"bad schema\");\n */\n\nimport type { SchemaDef, StoredRelationDef } from \"./types.ts\";\n\n// ─── Issue shape ──────────────────────────\n\nexport type ValidationError = {\n type: \"error\" | \"warning\";\n message: string;\n model?: string;\n relation?: string;\n};\n\n// ─── Validation ───────────────────────────\n\n/** Validates a composed schema; an empty array means no issues were found. */\nexport function validateSchema(schema: SchemaDef): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // 1. Name collisions across models and enums.\n const allNames = new Set<string>();\n for (const name of schema.__models.keys()) {\n if (allNames.has(name)) {\n errors.push({\n type: \"error\",\n message: `Duplicate name \"${name}\" — used by more than one model`,\n model: name,\n });\n }\n allNames.add(name);\n }\n for (const name of schema.__enums.keys()) {\n if (allNames.has(name)) {\n errors.push({\n type: \"error\",\n message: `Duplicate name \"${name}\" — used by both a model and an enum`,\n });\n }\n allNames.add(name);\n }\n\n // 2. Relations resolve to real models and columns.\n for (const [modelName, modelRelations] of Object.entries(schema.__relations)) {\n const model = schema.__models.get(modelName);\n if (model === undefined) {\n errors.push({\n type: \"error\",\n message: `Relations defined for unknown model \"${modelName}\"`,\n model: modelName,\n });\n continue;\n }\n\n for (const [relationName, relation] of Object.entries(modelRelations)) {\n const targetModel = schema.__models.get(relation.__targetModel);\n if (targetModel === undefined) {\n errors.push({\n type: \"error\",\n message: `Relation \"${relationName}\" references unknown model \"${relation.__targetModel}\"`,\n model: modelName,\n relation: relationName,\n });\n continue;\n }\n\n if (relation.__relationType === \"one\" && relation.__fromModel === modelName) {\n // Every member of a composite key is checked, not only the first.\n for (const column of relation.__fromColumns) {\n if (!model.__columns.has(column)) {\n errors.push({\n type: \"error\",\n message: `Relation \"${relationName}\" references FK column \"${column}\" which doesn't exist on model \"${modelName}\"`,\n model: modelName,\n relation: relationName,\n });\n }\n }\n for (const column of relation.__toColumns) {\n if (!targetModel.__columns.has(column)) {\n errors.push({\n type: \"error\",\n message: `Relation \"${relationName}\" references column \"${column}\" which doesn't exist on target model \"${relation.__targetModel}\"`,\n model: modelName,\n relation: relationName,\n });\n }\n }\n if (relation.__fromColumns.length !== relation.__toColumns.length) {\n errors.push({\n type: \"error\",\n message: `Relation \"${relationName}\" pairs ${relation.__fromColumns.length} FK column(s) with ${relation.__toColumns.length} referenced column(s)`,\n model: modelName,\n relation: relationName,\n });\n }\n }\n\n // Self-relations need an alias once there is more than one of them.\n if (relation.__targetModel === modelName && relation.__alias === undefined) {\n const otherSelfRelations = Object.values(modelRelations).filter(\n (other: StoredRelationDef) => other.__targetModel === modelName && other !== relation\n );\n if (otherSelfRelations.length > 0) {\n errors.push({\n type: \"warning\",\n message: `Self-referential relation \"${relationName}\" on \"${modelName}\" has no alias — this may cause Prisma ambiguity`,\n model: modelName,\n relation: relationName,\n });\n }\n }\n }\n }\n\n // 3. Every model needs a primary key.\n for (const [modelName, model] of schema.__models) {\n const hasIdColumn = Array.from(model.__columns.values()).some(\n (column) => column.__columnType === \"id\"\n );\n const hasPrimaryKey = model.__primaryKey !== undefined && model.__primaryKey.length > 0;\n if (!hasIdColumn && !hasPrimaryKey) {\n errors.push({\n type: \"warning\",\n message: `Model \"${modelName}\" has no id column and no compound primaryKey defined`,\n model: modelName,\n });\n }\n }\n\n return errors;\n}\n",
19
19
  "/**\n * @vibeorm/dsl — the TypeScript schema DSL.\n *\n * Models and relations are written in TypeScript and compiled straight to the\n * canonical `SchemaIR` (`dsl.toIR`). `.prisma` text generation is kept for\n * interop and `vibeorm convert`.\n *\n * @example\n * import { dsl } from \"@vibeorm/dsl\";\n *\n * const Workspace = dsl.create({\n * name: \"Workspace\",\n * schema: { ...dsl.templates.base, name: dsl.string() },\n * });\n *\n * const User = dsl.create({\n * name: \"User\",\n * schema: {\n * ...dsl.templates.base,\n * email: dsl.string().unique(),\n * workspaceId: dsl.string().index(),\n * },\n * indexes: (i) => [i.unique(\"workspaceId\", \"email\")],\n * });\n *\n * const relations = dsl.defineRelations({ Workspace, User }, (r) => ({\n * Workspace: { users: r.many.User({ from: r.Workspace.id, to: r.User.workspaceId }) },\n * User: { workspace: r.one.Workspace({ from: r.User.workspaceId, to: r.Workspace.id }) },\n * }));\n *\n * const schema = dsl.schema({ Workspace, User }, { relations });\n * const ir = dsl.toIR({ schema }); // canonical IR\n * const prisma = dsl.generate.prisma(schema); // .prisma text\n */\n\nimport type { ExtensionRegistry, Provider, SchemaIR } from \"@vibeorm/schema\";\n\nimport {\n bigint,\n boolean,\n bytes,\n datetime,\n decimal,\n enumCol,\n extensionType,\n float,\n id,\n int,\n json,\n string,\n unsupported,\n} from \"./column.ts\";\nimport type {\n ChainableColumn,\n ChainableDatetimeColumn,\n ChainableDecimalColumn,\n ChainableEnumColumn,\n ChainableIdColumn,\n ChainableIntegerColumn,\n ChainableJsonColumn,\n ChainableStringColumn,\n} from \"./column.ts\";\nimport { createEnum } from \"./enum.ts\";\nimport type { StandaloneEnumConfig } from \"./enum.ts\";\nimport { generatePrisma } from \"./generator/prisma.ts\";\nimport { create } from \"./model.ts\";\nimport { defineRelations, defineRelationsPart, mergeRelations } from \"./relations.ts\";\nimport { defineRls, domain, schema } from \"./schema.ts\";\nimport type { SchemaOptions } from \"./schema.ts\";\nimport { templates } from \"./templates.ts\";\nimport type { TemplatesApi } from \"./templates.ts\";\nimport { toIR } from \"./to-ir.ts\";\nimport { validateSchema } from \"./validate.ts\";\nimport type { ValidationError } from \"./validate.ts\";\nimport type {\n BigIntColumnConfig,\n BooleanColumnConfig,\n BytesColumnConfig,\n CreateModelConfig,\n DatetimeColumnConfig,\n DecimalColumnConfig,\n EnumDef,\n ExtensionTypeConfig,\n FloatColumnConfig,\n GeneratorOutput,\n IdColumnConfig,\n InlineEnumConfig,\n IntColumnConfig,\n JsonColumnConfig,\n ModelDef,\n PrismaGeneratorConfig,\n SchemaDef,\n SchemaDefinition,\n SchemaInput,\n StringColumnConfig,\n} from \"./types.ts\";\n\n// ─── Value exports ────────────────────────\n\nexport {\n ChainableColumn,\n ChainableDatetimeColumn,\n ChainableDecimalColumn,\n ChainableEnumColumn,\n ChainableIdColumn,\n ChainableIntegerColumn,\n ChainableJsonColumn,\n ChainableStringColumn,\n cloneColumnDef,\n} from \"./column.ts\";\nexport { createEnum } from \"./enum.ts\";\nexport { generatePrisma } from \"./generator/prisma.ts\";\nexport { create, createIndexBuilder, evaluateIndexes, getColumnNames } from \"./model.ts\";\nexport { compileChecks, compileIndexPredicate, createPredicateBuilder, evaluateChecks } from \"./predicate.ts\";\nexport { children, createChildrenBuilder } from \"./relation.ts\";\nexport { detectOneToOnePairs, planSchema, resolveRelationType } from \"./relation-plan.ts\";\nexport { defineRelations, defineRelationsPart, mergeRelations } from \"./relations.ts\";\nexport { defineRls, domain, schema } from \"./schema.ts\";\nexport {\n base,\n baseWithWorkspace,\n fields,\n templates,\n withActive,\n withAudit,\n withExternalId,\n withMetadata,\n withNameDescription,\n} from \"./templates.ts\";\nexport { toIR } from \"./to-ir.ts\";\nexport { validateSchema } from \"./validate.ts\";\n\n// ─── Type exports ─────────────────────────\n\nexport type { StandaloneEnumConfig } from \"./enum.ts\";\nexport type { EvaluatedCheck, PredicateModel } from \"./predicate.ts\";\nexport type {\n MergedOneToOneSide,\n PlannedIndex,\n PlannedRelation,\n PlannedRelationKind,\n SchemaPlan,\n} from \"./relation-plan.ts\";\nexport type { SchemaOptions } from \"./schema.ts\";\nexport type {\n ActiveTemplate,\n AuditTemplate,\n BaseTemplate,\n BaseWithWorkspaceTemplate,\n ExternalIdTemplate,\n FieldsTemplate,\n MetadataTemplate,\n NameDescriptionTemplate,\n TemplatesApi,\n} from \"./templates.ts\";\nexport type { ValidationError } from \"./validate.ts\";\nexport type {\n DefineRlsOptions,\n MergedRelations,\n RlsColumnKind,\n RlsContextRef,\n RlsContextRefs,\n RlsDef,\n RlsPolicies,\n BaseColumnConfig,\n BigIntColumnConfig,\n BooleanColumnConfig,\n BytesColumnConfig,\n CascadeAction,\n ChildrenBuilder,\n ChildrenDef,\n ChildrenRelationConfig,\n ChildrenSchemaCallback,\n ColumnDef,\n ColumnKeys,\n ColumnRef,\n ColumnRefKind,\n ColumnRefKindOf,\n ColumnType,\n CreateModelConfig,\n DatetimeColumnConfig,\n DecimalColumnConfig,\n EnumDef,\n EnumFieldConfig,\n EnumStorage,\n EnumValues,\n ExtensionAttributeUse,\n ExtensionTypeConfig,\n FloatColumnConfig,\n GeneratorOutput,\n IdColumnConfig,\n IdGeneratorType,\n IndexBuilder,\n IndexCallback,\n IndexDef,\n IndexOptions,\n ChecksCallback,\n ModelCheckConfig,\n ModelPolicyConfig,\n NamedCheckDef,\n PartialIndexDef,\n PredicateBuilder,\n PredicateExpr,\n PredicateFieldExpr,\n UniqueIndexOptions,\n IndexType,\n InlineEnumConfig,\n IntColumnConfig,\n JsonColumnConfig,\n ManyRelationDefConfig,\n ModelColumnRefs,\n ModelDef,\n OneRelationDefConfig,\n PrismaGeneratorConfig,\n RelationRefInput,\n RelationTarget,\n RelationsBuilder,\n RelationsMap,\n RelationsOutput,\n SchemaColumnNames,\n SchemaDef,\n SchemaDefinition,\n SchemaInput,\n StoredRelationDef,\n StringColumnConfig,\n ThroughRef,\n UnsupportedColumnConfig,\n} from \"./types.ts\";\n\n// ─── Enum factory ─────────────────────────\n\n/**\n * Creates an enum: standalone (reusable, has a `name`) or inline (one-off).\n *\n * @example\n * const Status = dsl.enum({ name: \"Status\", options: [\"active\", \"inactive\"] });\n * priority: dsl.enum({ options: [\"low\", \"high\"], default: \"low\" })\n */\nexport type EnumFactory = {\n <const T extends readonly string[]>(config: StandaloneEnumConfig<T>): EnumDef<T>;\n <const T extends readonly string[]>(config: InlineEnumConfig<T>): ChainableEnumColumn<T>;\n};\n\nfunction isStandaloneEnumConfig<T extends readonly string[]>(\n config: StandaloneEnumConfig<T> | InlineEnumConfig<T>\n): config is StandaloneEnumConfig<T> {\n return \"name\" in config && typeof config.name === \"string\";\n}\n\nfunction enumFactory<const T extends readonly string[]>(\n config: StandaloneEnumConfig<T>\n): EnumDef<T>;\nfunction enumFactory<const T extends readonly string[]>(\n config: InlineEnumConfig<T>\n): ChainableEnumColumn<T>;\nfunction enumFactory<const T extends readonly string[]>(\n config: StandaloneEnumConfig<T> | InlineEnumConfig<T>\n): EnumDef<T> | ChainableEnumColumn<T> {\n if (isStandaloneEnumConfig(config)) {\n return createEnum(config);\n }\n return enumCol(config);\n}\n\n// ─── Generator namespace ──────────────────\n\n/** `dsl.generate(schema)` plus the per-format generators. */\nexport type GenerateApi = {\n (schema: SchemaDef): GeneratorOutput;\n prisma: (schema: SchemaDef, config?: PrismaGeneratorConfig) => string;\n};\n\nconst generate: GenerateApi = Object.assign(\n (schemaDef: SchemaDef): GeneratorOutput => ({ prisma: generatePrisma(schemaDef) }),\n { prisma: generatePrisma }\n);\n\n// ─── DSL namespace ────────────────────────\n\n/**\n * The `dsl` namespace surface. Every member carries an explicit signature —\n * the package is built under `isolatedDeclarations`.\n */\nexport type DslApi = {\n readonly string: (config?: StringColumnConfig) => ChainableStringColumn;\n readonly int: (config?: IntColumnConfig) => ChainableIntegerColumn<\"int\">;\n readonly bigint: (config?: BigIntColumnConfig) => ChainableIntegerColumn<\"bigint\">;\n readonly float: (config?: FloatColumnConfig) => ChainableColumn<\"float\">;\n readonly decimal: (config?: DecimalColumnConfig) => ChainableDecimalColumn;\n readonly boolean: (config?: BooleanColumnConfig) => ChainableColumn<\"boolean\">;\n readonly datetime: (config?: DatetimeColumnConfig) => ChainableDatetimeColumn;\n readonly json: (config?: JsonColumnConfig) => ChainableJsonColumn;\n readonly id: (config?: IdColumnConfig) => ChainableIdColumn;\n readonly bytes: (config?: BytesColumnConfig) => ChainableColumn<\"bytes\">;\n readonly unsupported: (dbType: string) => ChainableColumn<\"unsupported\">;\n readonly extensionType: (config: ExtensionTypeConfig) => ChainableColumn<\"unsupported\">;\n readonly enum: EnumFactory;\n\n readonly create: <const TSchema extends SchemaDefinition>(\n config: CreateModelConfig<TSchema>\n ) => ModelDef<TSchema>;\n\n readonly defineRelations: typeof defineRelations;\n readonly defineRelationsPart: typeof defineRelationsPart;\n readonly mergeRelations: typeof mergeRelations;\n readonly defineRls: typeof defineRls;\n\n readonly schema: (input: SchemaInput, options?: SchemaOptions) => SchemaDef;\n readonly domain: (params: { name: string; models: Record<string, ModelDef> }) => {\n name: string;\n models: Record<string, ModelDef>;\n };\n\n readonly toIR: (params: {\n schema: SchemaDef;\n provider?: Provider;\n extensions?: ExtensionRegistry;\n }) => SchemaIR;\n readonly validateSchema: (schema: SchemaDef) => ValidationError[];\n readonly generate: GenerateApi;\n readonly templates: TemplatesApi;\n};\n\n/** The DSL namespace: columns, models, relations, schemas and output. */\nexport const dsl: DslApi = {\n // Columns\n string,\n int,\n bigint,\n float,\n decimal,\n boolean,\n datetime,\n json,\n id,\n bytes,\n unsupported,\n extensionType,\n enum: enumFactory,\n\n // Models\n create,\n\n // Relations\n defineRelations,\n defineRelationsPart,\n mergeRelations,\n\n // Schema composition\n defineRls,\n schema,\n domain,\n\n // Output\n toIR,\n validateSchema,\n generate,\n\n // Templates\n templates,\n};\n"
20
20
  ],
21
- "mappings": "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",
22
- "debugId": "21B90DDA6F5E192964756E2164756E21",
21
+ "mappings": "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",
22
+ "debugId": "24494B6B129BF22A64756E2164756E21",
23
23
  "names": []
24
24
  }
package/dist/to-ir.d.ts CHANGED
@@ -28,7 +28,7 @@
28
28
  * - relation types are derived structurally by `resolveRelationType`.
29
29
  */
30
30
  import type { DefaultValueIR, ExtensionRegistry, FieldIR, Provider, SchemaIR } from "@vibeorm/schema";
31
- import type { ColumnDef, DatetimeColumnConfig, SchemaDef } from "./types.ts";
31
+ import type { ColumnDef, DatetimeColumnConfig, IdColumnConfig, SchemaDef, StringColumnConfig } from "./types.ts";
32
32
  /** Compile a column default once for both DSL output paths. */
33
33
  export declare function fieldDefault(params: {
34
34
  column: ColumnDef;
@@ -43,6 +43,20 @@ export declare function datetimeNativeType(params: {
43
43
  config: DatetimeColumnConfig;
44
44
  column: string | undefined;
45
45
  }): string | undefined;
46
+ /**
47
+ * `Uuid`, `VarChar(n)` or `Text` for a String column, or `undefined`. Shared
48
+ * with the `.prisma` generator so both spell it alike. A column has one type,
49
+ * so `uuid` refuses to combine with `maxLength` or `text`.
50
+ */
51
+ export declare function stringNativeType(params: {
52
+ config: StringColumnConfig;
53
+ column: string | undefined;
54
+ }): string | undefined;
55
+ /** `Uuid` for a `uuid()` String id, or `undefined`; an Int (autoincrement) id refuses it. */
56
+ export declare function idNativeType(params: {
57
+ config: IdColumnConfig;
58
+ column: string | undefined;
59
+ }): string | undefined;
46
60
  /**
47
61
  * One column as `FieldIR`.
48
62
  *
package/dist/types.d.ts CHANGED
@@ -37,6 +37,11 @@ export type StringColumnConfig = BaseColumnConfig & {
37
37
  maxLength?: number;
38
38
  /** `@db.Text` */
39
39
  text?: boolean;
40
+ /**
41
+ * `@db.Uuid` — the engine's native uuid column (PostgreSQL); still a string
42
+ * in JavaScript. SQLite stores it as TEXT; MySQL has none and refuses it.
43
+ */
44
+ uuid?: boolean;
40
45
  /**
41
46
  * `@collation("...")` — explicit column collation. Rendered as `COLLATE` on
42
47
  * mysql, inert on postgres/sqlite (same contract as the IR field). The
@@ -79,6 +84,8 @@ export type JsonColumnConfig = BaseColumnConfig & {
79
84
  };
80
85
  export type IdColumnConfig = BaseColumnConfig & {
81
86
  type?: IdGeneratorType;
87
+ /** `@db.Uuid` on a String id — see {@link StringColumnConfig.uuid}. */
88
+ uuid?: boolean;
82
89
  };
83
90
  export type BytesColumnConfig = BaseColumnConfig & {
84
91
  default?: Uint8Array | string | readonly (Uint8Array | string)[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibeorm/dsl",
3
- "version": "4.0.0",
3
+ "version": "4.2.0",
4
4
  "description": "TypeScript schema DSL for VibeORM v2 — compiles to canonical SchemaIR, with .prisma generation for interop",
5
5
  "keywords": [
6
6
  "orm",
@@ -43,8 +43,8 @@
43
43
  "bun": ">=1.2.0"
44
44
  },
45
45
  "dependencies": {
46
- "@vibeorm/schema": "4.0.0",
47
- "@vibeorm/sql": "4.0.0"
46
+ "@vibeorm/schema": "4.2.0",
47
+ "@vibeorm/sql": "4.2.0"
48
48
  },
49
49
  "publishConfig": {
50
50
  "access": "public"