@vibeorm/dsl 2.0.0-alpha.3 → 2.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generator/prisma.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -11
- package/dist/index.js.map +7 -7
- package/dist/model.d.ts.map +1 -1
- package/dist/relation-plan.d.ts +4 -0
- package/dist/relation-plan.d.ts.map +1 -1
- package/dist/to-ir.d.ts.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../src/generator/prisma.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAIV,qBAAqB,EACrB,SAAS,EAEV,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"prisma.d.ts","sourceRoot":"","sources":["../../src/generator/prisma.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAIV,qBAAqB,EACrB,SAAS,EAEV,MAAM,aAAa,CAAC;AAqQrB;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CAyB7F"}
|
package/dist/index.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ export type { MergedOneToOneSide, PlannedIndex, PlannedRelation, PlannedRelation
|
|
|
55
55
|
export type { SchemaOptions } from "./schema.ts";
|
|
56
56
|
export type { ActiveTemplate, AuditTemplate, BaseTemplate, BaseWithWorkspaceTemplate, ExternalIdTemplate, FieldsTemplate, MetadataTemplate, NameDescriptionTemplate, TemplatesApi, } from "./templates.ts";
|
|
57
57
|
export type { ValidationError } from "./validate.ts";
|
|
58
|
-
export type { BaseColumnConfig, BigIntColumnConfig, BooleanColumnConfig, BytesColumnConfig, CascadeAction, ChildrenBuilder, ChildrenDef, ChildrenRelationConfig, ChildrenSchemaCallback, ColumnDef, ColumnKeys, ColumnRef, ColumnType, CreateModelConfig, DatetimeColumnConfig, DecimalColumnConfig, EnumDef, EnumFieldConfig, ExtensionAttributeUse, ExtensionTypeConfig, FloatColumnConfig, GeneratorOutput, IdColumnConfig, IdGeneratorType, IndexBuilder, IndexCallback, IndexDef, IndexOptions, IndexType, InlineEnumConfig, IntColumnConfig, JsonColumnConfig, ManyRelationDefConfig, ModelColumnRefs, ModelDef, OneRelationDefConfig, PrismaGeneratorConfig, RelationsBuilder, RelationsMap, RelationsOutput, SchemaColumnNames, SchemaDef, SchemaDefinition, SchemaInput, StoredRelationDef, StringColumnConfig, ThroughRef, UnsupportedColumnConfig, } from "./types.ts";
|
|
58
|
+
export type { BaseColumnConfig, BigIntColumnConfig, BooleanColumnConfig, BytesColumnConfig, CascadeAction, ChildrenBuilder, ChildrenDef, ChildrenRelationConfig, ChildrenSchemaCallback, ColumnDef, ColumnKeys, ColumnRef, ColumnType, CreateModelConfig, DatetimeColumnConfig, DecimalColumnConfig, EnumDef, EnumFieldConfig, ExtensionAttributeUse, ExtensionTypeConfig, FloatColumnConfig, GeneratorOutput, IdColumnConfig, IdGeneratorType, IndexBuilder, IndexCallback, IndexDef, IndexOptions, ModelCheckConfig, UniqueIndexOptions, IndexType, InlineEnumConfig, IntColumnConfig, JsonColumnConfig, ManyRelationDefConfig, ModelColumnRefs, ModelDef, OneRelationDefConfig, PrismaGeneratorConfig, RelationsBuilder, RelationsMap, RelationsOutput, SchemaColumnNames, SchemaDef, SchemaDefinition, SchemaInput, StoredRelationDef, StringColumnConfig, ThroughRef, UnsupportedColumnConfig, } from "./types.ts";
|
|
59
59
|
/**
|
|
60
60
|
* Creates an enum: standalone (reusable, has a `name`) or inline (one-off).
|
|
61
61
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -226,24 +226,34 @@ function isChildrenDef(value) {
|
|
|
226
226
|
return typeof value === "object" && value !== null && "__type" in value && value.__type === "children";
|
|
227
227
|
}
|
|
228
228
|
function createIndexBuilder() {
|
|
229
|
-
const createIndex = (columns, type) => ({
|
|
229
|
+
const createIndex = (columns, type, where) => ({
|
|
230
230
|
__type: "index",
|
|
231
231
|
__columns: [...columns],
|
|
232
|
-
__indexType: type
|
|
232
|
+
__indexType: type,
|
|
233
|
+
...where === undefined ? {} : { __where: where }
|
|
233
234
|
});
|
|
234
235
|
return {
|
|
235
236
|
on(...args) {
|
|
236
237
|
const [first, second] = args;
|
|
237
238
|
if (args.length === 2 && Array.isArray(first) && typeof second === "object" && !Array.isArray(second)) {
|
|
238
|
-
return createIndex(first, second.type);
|
|
239
|
+
return createIndex(first, second.type, second.where);
|
|
239
240
|
}
|
|
240
241
|
return createIndex(args);
|
|
241
242
|
},
|
|
242
243
|
index(...columns) {
|
|
243
244
|
return createIndex(columns);
|
|
244
245
|
},
|
|
245
|
-
unique(...
|
|
246
|
-
|
|
246
|
+
unique(...args) {
|
|
247
|
+
const [first, second] = args;
|
|
248
|
+
if (args.length === 2 && Array.isArray(first) && typeof second === "object" && !Array.isArray(second)) {
|
|
249
|
+
return {
|
|
250
|
+
__type: "unique",
|
|
251
|
+
__columns: [...first],
|
|
252
|
+
...second.where === undefined ? {} : { __where: second.where },
|
|
253
|
+
...second.nullsNotDistinct === true ? { __nullsNotDistinct: true } : {}
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
return { __type: "unique", __columns: [...args] };
|
|
247
257
|
},
|
|
248
258
|
gin(...columns) {
|
|
249
259
|
return createIndex(columns, "Gin");
|
|
@@ -297,6 +307,7 @@ function create(config) {
|
|
|
297
307
|
__children: children2,
|
|
298
308
|
__map: config.map,
|
|
299
309
|
__primaryKey: config.primaryKey,
|
|
310
|
+
__checks: config.checks,
|
|
300
311
|
__extensions: config.extensions
|
|
301
312
|
};
|
|
302
313
|
}
|
|
@@ -518,14 +529,16 @@ function planIndexes(params) {
|
|
|
518
529
|
}
|
|
519
530
|
}
|
|
520
531
|
for (const index of evaluateIndexes({ model })) {
|
|
521
|
-
const key = index.__columns.join(",");
|
|
532
|
+
const key = index.__columns.join(",") + (index.__where === undefined ? "" : `|where:${index.__where}`);
|
|
522
533
|
const existing = byKey.get(key);
|
|
523
534
|
const isUnique = index.__type === "unique";
|
|
524
535
|
if (existing === undefined || isUnique) {
|
|
525
536
|
byKey.set(key, {
|
|
526
537
|
isUnique,
|
|
527
538
|
columns: [...index.__columns],
|
|
528
|
-
indexType: index.__indexType
|
|
539
|
+
indexType: index.__indexType,
|
|
540
|
+
...index.__where === undefined ? {} : { where: index.__where },
|
|
541
|
+
...index.__nullsNotDistinct === true ? { nullsNotDistinct: true } : {}
|
|
529
542
|
});
|
|
530
543
|
} else if (index.__indexType !== undefined && existing.indexType === undefined) {
|
|
531
544
|
byKey.set(key, { ...existing, indexType: index.__indexType });
|
|
@@ -741,11 +754,13 @@ function formatRelation(params) {
|
|
|
741
754
|
function formatIndex(params) {
|
|
742
755
|
const { index } = params;
|
|
743
756
|
const columns = index.columns.join(", ");
|
|
757
|
+
const whereArg = index.where === undefined ? "" : `, where: ${JSON.stringify(index.where)}`;
|
|
758
|
+
const nndArg = index.nullsNotDistinct === true ? ", nullsNotDistinct: true" : "";
|
|
744
759
|
if (index.isUnique) {
|
|
745
|
-
return ` @@unique([${columns}])`;
|
|
760
|
+
return ` @@unique([${columns}]${nndArg}${whereArg})`;
|
|
746
761
|
}
|
|
747
762
|
const typeArg = index.indexType === undefined ? "" : `, type: ${index.indexType}`;
|
|
748
|
-
return ` @@index([${columns}]${typeArg})`;
|
|
763
|
+
return ` @@index([${columns}]${typeArg}${whereArg})`;
|
|
749
764
|
}
|
|
750
765
|
function formatExtensionValue(params) {
|
|
751
766
|
const { value } = params;
|
|
@@ -774,6 +789,9 @@ function formatModel(params) {
|
|
|
774
789
|
for (const index of plan.indexes.get(model.__name) ?? []) {
|
|
775
790
|
lines.push(formatIndex({ index }));
|
|
776
791
|
}
|
|
792
|
+
for (const check of model.__checks ?? []) {
|
|
793
|
+
lines.push(` @@check(${JSON.stringify(check.expression)}, name: ${JSON.stringify(check.name)})`);
|
|
794
|
+
}
|
|
777
795
|
for (const use of model.__extensions ?? []) {
|
|
778
796
|
const args = [];
|
|
779
797
|
if (use.fields !== undefined)
|
|
@@ -1245,7 +1263,9 @@ function buildIndex(params) {
|
|
|
1245
1263
|
const kind = index.isUnique ? "unique" : index.indexType === undefined ? "btree" : INDEX_KINDS[index.indexType];
|
|
1246
1264
|
return {
|
|
1247
1265
|
kind,
|
|
1248
|
-
fields: index.columns.map((name) => ({ name }))
|
|
1266
|
+
fields: index.columns.map((name) => ({ name })),
|
|
1267
|
+
...index.where === undefined ? {} : { where: index.where },
|
|
1268
|
+
...index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}
|
|
1249
1269
|
};
|
|
1250
1270
|
}
|
|
1251
1271
|
function buildModel(params) {
|
|
@@ -1330,6 +1350,7 @@ function buildModel(params) {
|
|
|
1330
1350
|
fields: fields2,
|
|
1331
1351
|
relations: (plan.relations.get(model.__name) ?? []).map((relation) => buildRelation({ relation, plan })),
|
|
1332
1352
|
indexes: (plan.indexes.get(model.__name) ?? []).map((index) => buildIndex({ index })),
|
|
1353
|
+
...model.__checks === undefined || model.__checks.length === 0 ? {} : { checks: model.__checks.map((check) => ({ name: check.name, expression: check.expression })) },
|
|
1333
1354
|
...primaryKey === undefined ? {} : { primaryKey },
|
|
1334
1355
|
isView: false
|
|
1335
1356
|
};
|
|
@@ -1543,4 +1564,4 @@ export {
|
|
|
1543
1564
|
ChainableColumn
|
|
1544
1565
|
};
|
|
1545
1566
|
|
|
1546
|
-
//# debugId=
|
|
1567
|
+
//# debugId=F845059A50C0E4EE64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -4,19 +4,19 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
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 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 },\n __enumValues: column.__enumValues,\n __enumName: column.__enumName,\n };\n}\n\n// ─── Chainable columns ────────────────────\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\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: unknown): 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/** 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 /** `@db.Timestamptz` — timezone-aware timestamp. */\n tz(): this {\n (this.__config as DatetimeColumnConfig).tz = true;\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: { options: T; config?: BaseColumnConfig; enumName?: string }) {\n super(\"enum\", params.config ?? {});\n this.__enumValues = params.options;\n if (params.enumName !== undefined) {\n this.__enumName = params.enumName;\n }\n }\n\n /** Sets the default to one of the declared options. */\n default(value: 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/** Int column. */\nexport function int(config: IntColumnConfig = {}): ChainableColumn<\"int\"> {\n return new ChainableColumn(\"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 */\nexport function datetime(config: DatetimeColumnConfig = {}): ChainableDatetimeColumn {\n return new ChainableDatetimeColumn(config);\n}\n\n/** Json column. */\nexport function json(config: JsonColumnConfig = {}): ChainableColumn<\"json\"> {\n return new ChainableColumn(\"json\", 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 = {}): ChainableColumn<\"bigint\"> {\n return new ChainableColumn(\"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, ...restConfig } = config;\n // No enum name: `dsl.schema()` derives `${Model}${Column}` for inline enums.\n return new ChainableEnumColumn<T>({ options, config: restConfig });\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 { ChainableEnumColumn } from \"./column.ts\";\nimport type { EnumDef, EnumFieldConfig } 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\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 } = config;\n return {\n __type: \"enum\",\n __name: name,\n __options: options,\n field(fieldConfig: EnumFieldConfig<T> = {}): ChainableEnumColumn<T> {\n return new ChainableEnumColumn<T>({ options, config: fieldConfig, enumName: name });\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 { internalError } from \"@vibeorm/schema\";\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 { planSchema } from \"../relation-plan.ts\";\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(\"${String(column.__config.dbType)}\")${list}`;\n }\n }\n}\n\n/** `@default(...)` for an id column, per generator strategy. */\nfunction idDefaultAttribute(params: { column: ColumnDef }): string | undefined {\n const idType = (params.column.__config as IdColumnConfig).type;\n switch (idType) {\n case \"ulid\":\n case \"cuid\":\n case \"uuid\":\n case \"nanoid\":\n case \"autoincrement\":\n return `@default(${idType}())`;\n default:\n return undefined;\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 { dbgenerated, default: value } = column.__config;\n\n if (typeof dbgenerated === \"string\") {\n return `@default(dbgenerated(\"${dbgenerated}\"))`;\n }\n if (value === undefined) return undefined;\n\n if (column.__columnType === \"datetime\" && value === \"now\") {\n return \"@default(now())\";\n }\n if (column.__columnType === \"enum\" && typeof value === \"string\") {\n return `@default(${value})`;\n }\n if (typeof value === \"string\") return `@default(\"${value}\")`;\n if (typeof value === \"boolean\" || typeof value === \"number\") return `@default(${value})`;\n if (typeof value === \"bigint\") return `@default(${value.toString()})`;\n return undefined;\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\" && column.__config.tz === true) {\n return \"@db.Timestamptz\";\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 = idDefaultAttribute({ 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(\"${column.__config.map}\")`);\n }\n\n const nativeType = nativeTypeAttribute({ column });\n if (nativeType !== undefined) parts.push(nativeType);\n\n const columnLine = parts.join(\" \");\n const comment = column.__config.comment;\n if (typeof comment === \"string\") {\n const commentLines = comment.split(\"\\n\").map((line) => ` /// ${line}`);\n return [...commentLines, columnLine].join(\"\\n\");\n }\n return columnLine;\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 = relationName === undefined ? \"\" : ` @relation(\"${relationName}\")`;\n return ` ${name} ${targetModel}[]${attribute}`;\n }\n\n const optional = relation.isOptional ? \"?\" : \"\";\n\n if (relation.kind === \"backOne\") {\n const attribute = relationName === undefined ? \"\" : ` @relation(\"${relationName}\")`;\n return ` ${name} ${targetModel}${optional}${attribute}`;\n }\n\n const args: string[] = [];\n if (relationName !== undefined) args.push(`\"${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\n return ` ${name} ${targetModel}${optional} @relation(${args.join(\", \")})`;\n}\n\n// ─── Index rendering ──────────────────────\n\nfunction formatIndex(params: { index: PlannedIndex }): string {\n const { index } = params;\n const columns = index.columns.join(\", \");\n if (index.isUnique) {\n return ` @@unique([${columns}])`;\n }\n const typeArg = index.indexType === undefined ? \"\" : `, type: ${index.indexType}`;\n return ` @@index([${columns}]${typeArg})`;\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 `\"${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: { model: ModelDef; plan: SchemaPlan }): string {\n const { model, plan } = params;\n const lines: string[] = [`model ${model.__name} {`];\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 }));\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 (typeof model.__map === \"string\") {\n lines.push(` @@map(\"${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 const plan = planSchema({ schema });\n const sections: string[] = [];\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 }));\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 { internalError } from \"@vibeorm/schema\";\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 { planSchema } from \"../relation-plan.ts\";\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(\"${String(column.__config.dbType)}\")${list}`;\n }\n }\n}\n\n/** `@default(...)` for an id column, per generator strategy. */\nfunction idDefaultAttribute(params: { column: ColumnDef }): string | undefined {\n const idType = (params.column.__config as IdColumnConfig).type;\n switch (idType) {\n case \"ulid\":\n case \"cuid\":\n case \"uuid\":\n case \"nanoid\":\n case \"autoincrement\":\n return `@default(${idType}())`;\n default:\n return undefined;\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 { dbgenerated, default: value } = column.__config;\n\n if (typeof dbgenerated === \"string\") {\n return `@default(dbgenerated(\"${dbgenerated}\"))`;\n }\n if (value === undefined) return undefined;\n\n if (column.__columnType === \"datetime\" && value === \"now\") {\n return \"@default(now())\";\n }\n if (column.__columnType === \"enum\" && typeof value === \"string\") {\n return `@default(${value})`;\n }\n if (typeof value === \"string\") return `@default(\"${value}\")`;\n if (typeof value === \"boolean\" || typeof value === \"number\") return `@default(${value})`;\n if (typeof value === \"bigint\") return `@default(${value.toString()})`;\n return undefined;\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\" && column.__config.tz === true) {\n return \"@db.Timestamptz\";\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 = idDefaultAttribute({ 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(\"${column.__config.map}\")`);\n }\n\n const nativeType = nativeTypeAttribute({ column });\n if (nativeType !== undefined) parts.push(nativeType);\n\n const columnLine = parts.join(\" \");\n const comment = column.__config.comment;\n if (typeof comment === \"string\") {\n const commentLines = comment.split(\"\\n\").map((line) => ` /// ${line}`);\n return [...commentLines, columnLine].join(\"\\n\");\n }\n return columnLine;\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 = relationName === undefined ? \"\" : ` @relation(\"${relationName}\")`;\n return ` ${name} ${targetModel}[]${attribute}`;\n }\n\n const optional = relation.isOptional ? \"?\" : \"\";\n\n if (relation.kind === \"backOne\") {\n const attribute = relationName === undefined ? \"\" : ` @relation(\"${relationName}\")`;\n return ` ${name} ${targetModel}${optional}${attribute}`;\n }\n\n const args: string[] = [];\n if (relationName !== undefined) args.push(`\"${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\n return ` ${name} ${targetModel}${optional} @relation(${args.join(\", \")})`;\n}\n\n// ─── Index rendering ──────────────────────\n\nfunction formatIndex(params: { index: PlannedIndex }): string {\n const { index } = params;\n const columns = index.columns.join(\", \");\n const whereArg = index.where === undefined ? \"\" : `, where: ${JSON.stringify(index.where)}`;\n const nndArg = index.nullsNotDistinct === true ? \", nullsNotDistinct: true\" : \"\";\n if (index.isUnique) {\n return ` @@unique([${columns}]${nndArg}${whereArg})`;\n }\n const typeArg = index.indexType === undefined ? \"\" : `, type: ${index.indexType}`;\n return ` @@index([${columns}]${typeArg}${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 `\"${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: { model: ModelDef; plan: SchemaPlan }): string {\n const { model, plan } = params;\n const lines: string[] = [`model ${model.__name} {`];\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 }));\n }\n\n for (const check of model.__checks ?? []) {\n lines.push(` @@check(${JSON.stringify(check.expression)}, name: ${JSON.stringify(check.name)})`);\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 (typeof model.__map === \"string\") {\n lines.push(` @@map(\"${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 const plan = planSchema({ schema });\n const sections: string[] = [];\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 }));\n sections.push(\"\");\n }\n\n return sections.join(\"\\n\").trim();\n}\n",
|
|
8
8
|
"/**\n * Naming helpers shared by the model builder, the Prisma generator and the\n * IR compiler. Both output paths must agree on every derived name, so they\n * live here rather than being re-derived per consumer.\n */\n\n// ─── Case helpers ─────────────────────────\n\n/** `\"status\"` → `\"Status\"` — used to build derived type names, never field names. */\nexport function capitalize(params: { value: string }): string {\n const { value } = params;\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\n/** `\"Order\"` → `\"order\"`. */\nexport function uncapitalize(params: { value: string }): string {\n const { value } = params;\n return value.charAt(0).toLowerCase() + value.slice(1);\n}\n\n// ─── Derived names ────────────────────────\n\n/** Foreign-key column a child model gets for its parent: `\"Order\"` → `\"orderId\"`. */\nexport function toFkColumnName(params: { modelName: string }): string {\n return `${uncapitalize({ value: params.modelName })}Id`;\n}\n\n/** Name generated for an inline enum: model `User` + column `status` → `UserStatus`. */\nexport function inlineEnumName(params: { modelName: string; columnName: string }): string {\n const { modelName, columnName } = params;\n return `${modelName}${capitalize({ value: columnName })}`;\n}\n",
|
|
9
9
|
"/**\n * Children builder for inline nested models. Relations proper are declared\n * separately through `defineRelations`; `children()` only exists so a model\n * can spawn an owned child model (with an automatic FK back to the parent).\n *\n * @example\n * const Order = dsl.create({\n * name: \"Order\",\n * schema: (s) => ({\n * id: dsl.id(),\n * Items: s.children({\n * name: \"OrderItem\",\n * schema: { id: dsl.id(), quantity: dsl.int() },\n * }),\n * }),\n * });\n */\n\nimport type { ChildrenBuilder, ChildrenDef, ChildrenRelationConfig } from \"./types.ts\";\n\n// ─── Children builder ─────────────────────\n\n/** Declares an inline child model owned by the enclosing model. */\nexport function children(config: ChildrenRelationConfig): ChildrenDef {\n return {\n __type: \"children\",\n __name: config.name,\n __schema: config.schema,\n };\n}\n\n/** Creates the `s` handed to a model's schema callback. */\nexport function createChildrenBuilder(): ChildrenBuilder {\n return { children };\n}\n",
|
|
10
|
-
"/**\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 { cloneColumnDef } from \"./column.ts\";\nimport { toFkColumnName } from \"./naming.ts\";\nimport { createChildrenBuilder } from \"./relation.ts\";\nimport type {\n ChildrenDef,\n ChildrenSchemaCallback,\n ColumnDef,\n CreateModelConfig,\n IndexBuilder,\n IndexCallback,\n IndexDef,\n IndexOptions,\n IndexType,\n ModelDef,\n SchemaDefinition,\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<T extends string = string>(): IndexBuilder<T> {\n const createIndex = (columns: readonly string[], type?: IndexType): IndexDef => ({\n __type: \"index\",\n __columns: [...columns],\n __indexType: type,\n });\n\n return {\n /** Composite (or single-column) index; the array form takes options. */\n on<C extends T>(...args: C[] | [C[], IndexOptions]): IndexDef {\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 createIndex(first, second.type);\n }\n return createIndex(args as string[]);\n },\n\n /** Alias of `on(...)`. */\n index<C extends T>(...columns: C[]): IndexDef {\n return createIndex(columns);\n },\n\n /** Unique constraint (`@@unique([...])`). */\n unique<C extends T>(...
|
|
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 type { CascadeAction, RelationType } from \"@vibeorm/schema\";\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 readonly fields?: readonly string[];\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 isUnique: boolean;\n readonly columns: readonly string[];\n readonly indexType?: IndexType;\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};\n\ntype OneRelationEntry = {\n readonly modelName: string;\n readonly relName: string;\n readonly rel: StoredRelationDef;\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.__relationType === \"one\") {\n allOnes.push({ modelName, relName, rel });\n }\n }\n }\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 for (let j = i + 1; j < allOnes.length; j++) {\n const b = allOnes[j];\n if (b === undefined) continue;\n const keyB = `${b.modelName}:${b.relName}`;\n if (paired.has(keyB)) continue;\n\n const sameColumnPair =\n a.rel.__fromModel === b.rel.__toModel &&\n a.rel.__fromColumn === b.rel.__toColumn &&\n a.rel.__toModel === b.rel.__fromModel &&\n a.rel.__toColumn === b.rel.__fromColumn;\n if (!sameColumnPair) 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\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 });\n mergeMap.set(backKey, {\n role: \"backRelation\",\n pairedRelName: fkOwner.relName,\n pairedModelName: fkOwner.modelName,\n onDelete,\n onUpdate,\n });\n\n paired.add(fkKey);\n paired.add(backKey);\n break;\n }\n }\n\n return mergeMap;\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 aFromIsId =\n models.get(a.modelName)?.__columns.get(a.rel.__fromColumn)?.__columnType === \"id\";\n const bFromIsId =\n models.get(b.modelName)?.__columns.get(b.rel.__fromColumn)?.__columnType === \"id\";\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 if (a.rel.__onDelete !== undefined || a.rel.__onUpdate !== undefined) {\n return { fkOwner: a, backRelation: b };\n }\n if (b.rel.__onDelete !== undefined || b.rel.__onUpdate !== undefined) {\n return { fkOwner: b, backRelation: a };\n }\n\n const aLooksFk = looksLikeForeignKey({ column: a.rel.__fromColumn });\n const bLooksFk = looksLikeForeignKey({ column: b.rel.__fromColumn });\n return aLooksFk && !bLooksFk ? { fkOwner: a, backRelation: b } : { fkOwner: b, backRelation: a };\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.__fromModel === modelName;\n if (!ownsFk) {\n planned.push({ ...base, kind: \"backOne\", isList: false, isOptional: rel.__optional });\n continue;\n }\n\n const fkColumn = model.__columns.get(rel.__fromColumn);\n planned.push({\n ...base,\n kind: \"fkOwner\",\n isList: false,\n isOptional: fkColumn?.__config.optional === true || rel.__optional,\n fields: [rel.__fromColumn],\n references: [rel.__toColumn],\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 mergeMap: ReadonlyMap<string, MergedOneToOneSide>;\n existing: readonly PlannedRelation[];\n}): PlannedRelation[] {\n const { modelName, relations, 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 [sourceModelName, sourceRelations] of Object.entries(relations)) {\n for (const [relName, rel] of Object.entries(sourceRelations)) {\n if (rel.__targetModel !== modelName || rel.__relationType !== \"one\") continue;\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(sourceRelations).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\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 models: ReadonlyMap<string, ModelDef>;\n}): PlannedRelation[] {\n const { modelName, model, models } = 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 models) {\n for (const childModel of parentModel.__children.values()) {\n if (childModel.__name !== modelName) continue;\n\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\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.\n for (const index of evaluateIndexes({ model })) {\n const key = index.__columns.join(\",\");\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 });\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// ─── Public API ───────────────────────────\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\n for (const [modelName, model] of schema.__models) {\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 mergeMap,\n existing: explicit,\n });\n const children = planChildRelations({ modelName, model, models: schema.__models });\n\n relations.set(modelName, [...explicit, ...reverses, ...children]);\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",
|
|
10
|
+
"/**\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 { cloneColumnDef } from \"./column.ts\";\nimport { toFkColumnName } from \"./naming.ts\";\nimport { createChildrenBuilder } from \"./relation.ts\";\nimport type {\n ChildrenDef,\n ChildrenSchemaCallback,\n ColumnDef,\n CreateModelConfig,\n IndexBuilder,\n IndexCallback,\n IndexDef,\n IndexOptions,\n IndexType,\n ModelDef,\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<T extends string = string>(): IndexBuilder<T> {\n const createIndex = (columns: readonly string[], type?: IndexType, where?: string): IndexDef => ({\n __type: \"index\",\n __columns: [...columns],\n __indexType: type,\n ...(where === undefined ? {} : { __where: where }),\n });\n\n return {\n /** Composite (or single-column) index; the array form takes options. */\n on<C extends T>(...args: C[] | [C[], IndexOptions]): IndexDef {\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 createIndex(first, second.type, second.where);\n }\n return createIndex(args as string[]);\n },\n\n /** Alias of `on(...)`. */\n index<C extends T>(...columns: C[]): IndexDef {\n return createIndex(columns);\n },\n\n /** Unique constraint (`@@unique([...])`); the array form takes options (partial `where`). */\n unique<C extends T>(...args: C[] | [C[], UniqueIndexOptions]): IndexDef {\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 {\n __type: \"unique\",\n __columns: [...first],\n ...(second.where === undefined ? {} : { __where: second.where }),\n ...(second.nullsNotDistinct === true ? { __nullsNotDistinct: true } : {}),\n };\n }\n return { __type: \"unique\", __columns: [...(args as string[])] };\n },\n\n /** GIN index — JSON, arrays, full-text (PostgreSQL). */\n gin<C extends T>(...columns: C[]): IndexDef {\n return createIndex(columns, \"Gin\");\n },\n\n /** GiST index — geometric, range and full-text data (PostgreSQL). */\n gist<C extends T>(...columns: C[]): IndexDef {\n return createIndex(columns, \"Gist\");\n },\n\n /** Hash index — equality lookups (PostgreSQL). */\n hash<C extends T>(...columns: C[]): IndexDef {\n return createIndex(columns, \"Hash\");\n },\n\n /** BRIN index — large, naturally ordered tables (PostgreSQL). */\n brin<C extends T>(...columns: C[]): IndexDef {\n return createIndex(columns, \"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 __checks: config.checks,\n __extensions: config.extensions,\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>());\n}\n",
|
|
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 type { CascadeAction, RelationType } from \"@vibeorm/schema\";\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 readonly fields?: readonly string[];\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 isUnique: boolean;\n readonly columns: readonly string[];\n readonly indexType?: IndexType;\n /** Partial-index predicate (raw SQL) — postgres/pglite/sqlite only. */\n readonly where?: string;\n /** `UNIQUE NULLS NOT DISTINCT` — unique indexes on postgres/pglite (15+) only. */\n readonly nullsNotDistinct?: boolean;\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};\n\ntype OneRelationEntry = {\n readonly modelName: string;\n readonly relName: string;\n readonly rel: StoredRelationDef;\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.__relationType === \"one\") {\n allOnes.push({ modelName, relName, rel });\n }\n }\n }\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 for (let j = i + 1; j < allOnes.length; j++) {\n const b = allOnes[j];\n if (b === undefined) continue;\n const keyB = `${b.modelName}:${b.relName}`;\n if (paired.has(keyB)) continue;\n\n const sameColumnPair =\n a.rel.__fromModel === b.rel.__toModel &&\n a.rel.__fromColumn === b.rel.__toColumn &&\n a.rel.__toModel === b.rel.__fromModel &&\n a.rel.__toColumn === b.rel.__fromColumn;\n if (!sameColumnPair) 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\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 });\n mergeMap.set(backKey, {\n role: \"backRelation\",\n pairedRelName: fkOwner.relName,\n pairedModelName: fkOwner.modelName,\n onDelete,\n onUpdate,\n });\n\n paired.add(fkKey);\n paired.add(backKey);\n break;\n }\n }\n\n return mergeMap;\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 aFromIsId =\n models.get(a.modelName)?.__columns.get(a.rel.__fromColumn)?.__columnType === \"id\";\n const bFromIsId =\n models.get(b.modelName)?.__columns.get(b.rel.__fromColumn)?.__columnType === \"id\";\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 if (a.rel.__onDelete !== undefined || a.rel.__onUpdate !== undefined) {\n return { fkOwner: a, backRelation: b };\n }\n if (b.rel.__onDelete !== undefined || b.rel.__onUpdate !== undefined) {\n return { fkOwner: b, backRelation: a };\n }\n\n const aLooksFk = looksLikeForeignKey({ column: a.rel.__fromColumn });\n const bLooksFk = looksLikeForeignKey({ column: b.rel.__fromColumn });\n return aLooksFk && !bLooksFk ? { fkOwner: a, backRelation: b } : { fkOwner: b, backRelation: a };\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.__fromModel === modelName;\n if (!ownsFk) {\n planned.push({ ...base, kind: \"backOne\", isList: false, isOptional: rel.__optional });\n continue;\n }\n\n const fkColumn = model.__columns.get(rel.__fromColumn);\n planned.push({\n ...base,\n kind: \"fkOwner\",\n isList: false,\n isOptional: fkColumn?.__config.optional === true || rel.__optional,\n fields: [rel.__fromColumn],\n references: [rel.__toColumn],\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 mergeMap: ReadonlyMap<string, MergedOneToOneSide>;\n existing: readonly PlannedRelation[];\n}): PlannedRelation[] {\n const { modelName, relations, 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 [sourceModelName, sourceRelations] of Object.entries(relations)) {\n for (const [relName, rel] of Object.entries(sourceRelations)) {\n if (rel.__targetModel !== modelName || rel.__relationType !== \"one\") continue;\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(sourceRelations).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\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 models: ReadonlyMap<string, ModelDef>;\n}): PlannedRelation[] {\n const { modelName, model, models } = 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 models) {\n for (const childModel of parentModel.__children.values()) {\n if (childModel.__name !== modelName) continue;\n\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\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.\n for (const index of evaluateIndexes({ model })) {\n const key =\n index.__columns.join(\",\") + (index.__where === undefined ? \"\" : `|where:${index.__where}`);\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.__where === undefined ? {} : { where: index.__where }),\n ...(index.__nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\n });\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// ─── Public API ───────────────────────────\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\n for (const [modelName, model] of schema.__models) {\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 mergeMap,\n existing: explicit,\n });\n const children = planChildRelations({ modelName, model, models: schema.__models });\n\n relations.set(modelName, [...explicit, ...reverses, ...children]);\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 * Centralized relation declarations (Drizzle-style): every relation lives in\n * one place and points at real columns, so a rename is a type error.\n *\n * @example\n * const relations = dsl.defineRelations({ User, Post }, (r) => ({\n * User: { posts: r.many.Post({ from: r.User.id, to: r.Post.authorId }) },\n * Post: { author: r.one.User({ from: r.Post.authorId, to: r.User.id }) },\n * }));\n */\n\nimport type {\n ColumnRef,\n ManyRelationDefConfig,\n ModelDef,\n OneRelationDefConfig,\n RelationsBuilder,\n RelationsMap,\n RelationsOutput,\n StoredRelationDef,\n ThroughRef,\n} from \"./types.ts\";\n\n// ─── Column references ────────────────────\n\nfunction createColumnRef<TModel extends string, TColumn extends string>(params: {\n model: TModel;\n column: TColumn;\n}): ColumnRef<TModel, TColumn> {\n const { model, column } = params;\n return {\n __type: \"columnRef\",\n __model: model,\n __column: column,\n through<TJunction extends string, TJunctionCol extends string>(\n junction: ColumnRef<TJunction, TJunctionCol>\n ): ThroughRef<TModel, TColumn, TJunction, TJunctionCol> {\n return {\n __type: \"throughRef\",\n __model: model,\n __column: column,\n __junction: junction.__model,\n __junctionColumn: junction.__column,\n };\n },\n };\n}\n\nfunction extractRefInfo(params: { ref: ColumnRef | ThroughRef }): {\n model: string;\n column: string;\n} {\n const { ref } = params;\n return { model: ref.__model, column: ref.__column };\n}\n\n// ─── Relation factory ─────────────────────\n\nfunction createRelationFactory(params: {\n relationType: \"one\" | \"many\";\n targetModelName: string;\n}): (config: OneRelationDefConfig | ManyRelationDefConfig) => StoredRelationDef {\n const { relationType, targetModelName } = params;\n\n return (config) => {\n const from = extractRefInfo({ ref: config.from });\n const to = extractRefInfo({ ref: config.to });\n\n let throughJunction: string | undefined;\n let throughFromCol: string | undefined;\n let throughToCol: string | undefined;\n\n if (config.from.__type === \"throughRef\") {\n throughJunction = config.from.__junction;\n throughFromCol = config.from.__junctionColumn;\n }\n if (config.to.__type === \"throughRef\") {\n throughJunction = throughJunction ?? config.to.__junction;\n throughToCol = config.to.__junctionColumn;\n }\n\n return {\n __type: \"storedRelation\",\n __relationType: relationType,\n __targetModel: targetModelName,\n __fromModel: from.model,\n __fromColumn: from.column,\n __toModel: to.model,\n __toColumn: to.column,\n __throughJunction: throughJunction,\n __throughFromCol: throughFromCol,\n __throughToCol: throughToCol,\n __optional: config.optional ?? relationType === \"many\",\n __alias: config.alias,\n __onDelete: config.onDelete,\n __onUpdate: config.onUpdate,\n };\n };\n}\n\n// ─── Builder ──────────────────────────────\n\nfunction createRelationsBuilder<TSchema extends Record<string, ModelDef>>(params: {\n models: TSchema;\n}): RelationsBuilder<TSchema> {\n const { models } = params;\n const builder: Record<string, unknown> = {};\n\n const oneObj: Record<string, (config: OneRelationDefConfig) => StoredRelationDef> = {};\n const manyObj: Record<string, (config: ManyRelationDefConfig) => StoredRelationDef> = {};\n\n for (const modelName of Object.keys(models)) {\n oneObj[modelName] = createRelationFactory({ relationType: \"one\", targetModelName: modelName });\n manyObj[modelName] = createRelationFactory({\n relationType: \"many\",\n targetModelName: modelName,\n });\n\n const model = models[modelName];\n if (model === undefined) continue;\n\n const columnRefs: Record<string, ColumnRef> = {};\n for (const columnName of model.__columns.keys()) {\n columnRefs[columnName] = createColumnRef({ model: modelName, column: columnName });\n }\n builder[modelName] = columnRefs;\n }\n\n builder.one = oneObj;\n builder.many = manyObj;\n\n return builder as RelationsBuilder<TSchema>;\n}\n\nfunction processRelationsOutput<TSchema extends Record<string, ModelDef>>(params: {\n output: RelationsOutput<TSchema>;\n}): RelationsMap {\n const result: RelationsMap = {};\n for (const [modelName, relations] of Object.entries(params.output)) {\n if (relations) {\n result[modelName] = relations;\n }\n }\n return result;\n}\n\n// ─── Public API ───────────────────────────\n\n/**\n * Declares every relation of a schema in one place.\n *\n * @example\n * const relations = dsl.defineRelations({ User, Post }, (r) => ({\n * User: { posts: r.many.Post({ from: r.User.id, to: r.Post.authorId }) },\n * Post: { author: r.one.User({ from: r.Post.authorId, to: r.User.id }) },\n * }));\n */\nexport function defineRelations<TSchema extends Record<string, ModelDef>>(\n models: TSchema,\n callback: (r: RelationsBuilder<TSchema>) => RelationsOutput<TSchema>\n): RelationsMap {\n const builder = createRelationsBuilder({ models });\n return processRelationsOutput({ output: callback(builder) });\n}\n\n/**\n * Declares part of a schema's relations, so large schemas can split them\n * across files and combine them with `mergeRelations`.\n */\nexport function defineRelationsPart<TSchema extends Record<string, ModelDef>>(\n models: TSchema,\n callback: (r: RelationsBuilder<TSchema>) => Partial<RelationsOutput<TSchema>>\n): RelationsMap {\n const builder = createRelationsBuilder({ models });\n return processRelationsOutput({ output: callback(builder) as RelationsOutput<TSchema> });\n}\n\n/** Merges relation parts; later parts win on a per-relation basis. */\nexport function mergeRelations(...parts: RelationsMap[]): RelationsMap {\n const result: RelationsMap = {};\n\n for (const part of parts) {\n for (const [modelName, relations] of Object.entries(part)) {\n const existing = result[modelName] ?? {};\n result[modelName] = { ...existing, ...relations };\n }\n }\n\n return result;\n}\n",
|
|
13
13
|
"/**\n * Schema composer — combines models, standalone enums and relations into the\n * `SchemaDef` that `toIR()` and `generate.prisma()` both consume.\n *\n * @example\n * const schema = dsl.schema({ User, Workspace }, { relations });\n *\n * @example\n * // grouped by domain, plus a standalone enum\n * const schema = dsl.schema({\n * Status,\n * shipping: { Carrier, CarrierService },\n * }, { relations });\n */\n\nimport { inlineEnumName } from \"./naming.ts\";\nimport type { EnumDef, ModelDef, RelationsMap, SchemaDef, SchemaInput } from \"./types.ts\";\n\n// ─── Options ──────────────────────────────\n\nexport type SchemaOptions = {\n /** Relations produced by `defineRelations()` / `mergeRelations()`. */\n relations?: RelationsMap;\n};\n\n// ─── Type guards ──────────────────────────\n\nfunction isModelDef(value: unknown): value is ModelDef {\n return (\n typeof value === \"object\" && value !== null && \"__type\" in value && value.__type === \"model\"\n );\n}\n\nfunction isEnumDef(value: unknown): value is EnumDef {\n return (\n typeof value === \"object\" && value !== null && \"__type\" in value && value.__type === \"enum\"\n );\n}\n\n// ─── Extraction ───────────────────────────\n\n/** Registers a model and, recursively, every inline child model it owns. */\nfunction addModelTree(params: { model: ModelDef; models: Map<string, ModelDef> }): void {\n const { model, models } = params;\n models.set(model.__name, model);\n for (const childModel of model.__children.values()) {\n addModelTree({ model: childModel, models });\n }\n}\n\nfunction extractModelsAndEnums(params: {\n input: SchemaInput;\n models: Map<string, ModelDef>;\n standaloneEnums: Map<string, readonly string[]>;\n}): void {\n const { input, models, standaloneEnums } = params;\n\n for (const value of Object.values(input)) {\n if (isModelDef(value)) {\n addModelTree({ model: value, models });\n } else if (isEnumDef(value)) {\n standaloneEnums.set(value.__name, value.__options);\n } else if (typeof value === \"object\" && value !== null) {\n extractModelsAndEnums({ input: value as SchemaInput, models, standaloneEnums });\n }\n }\n}\n\n/**\n * Collects every enum the schema needs: the standalone ones plus one per\n * inline enum column, named `${Model}${Column}`. The resolved name is written\n * back onto the column so both output paths reference the same enum.\n */\nfunction resolveEnums(params: {\n models: Map<string, ModelDef>;\n standaloneEnums: Map<string, readonly string[]>;\n}): Map<string, readonly string[]> {\n const { models, standaloneEnums } = params;\n const enums = new Map<string, readonly string[]>(standaloneEnums);\n\n for (const [modelName, model] of models) {\n for (const [columnName, column] of model.__columns) {\n if (column.__columnType !== \"enum\" || column.__enumValues === undefined) continue;\n\n if (column.__enumName !== undefined) {\n if (!enums.has(column.__enumName)) {\n enums.set(column.__enumName, column.__enumValues);\n }\n continue;\n }\n\n const name = inlineEnumName({ modelName, columnName });\n enums.set(name, column.__enumValues);\n column.__enumName = name;\n }\n }\n\n return enums;\n}\n\n// ─── Public API ───────────────────────────\n\n/**\n * Composes a schema from models (optionally grouped), standalone enums and\n * the relations declared by `defineRelations()`.\n */\nexport function schema(input: SchemaInput, options?: SchemaOptions): SchemaDef {\n const models = new Map<string, ModelDef>();\n const standaloneEnums = new Map<string, readonly string[]>();\n\n extractModelsAndEnums({ input, models, standaloneEnums });\n\n return {\n __type: \"schema\",\n __models: models,\n __enums: resolveEnums({ models, standaloneEnums }),\n __relations: options?.relations ?? {},\n };\n}\n\n/**\n * Groups models under a domain name, for organising large schemas.\n *\n * @example\n * const shipping = dsl.domain({ name: \"Shipping\", models: { Carrier } });\n */\nexport function domain(params: { name: string; models: Record<string, ModelDef> }): {\n name: string;\n models: Record<string, ModelDef>;\n} {\n const { name, models } = params;\n return { name, models };\n}\n",
|
|
14
14
|
"/**\n * Built-in column templates for common model shapes.\n *\n * Every member is a getter, so each spread produces fresh column instances and\n * two models never share mutable column state.\n *\n * @example\n * const User = dsl.create({\n * name: \"User\",\n * schema: { ...dsl.templates.base, email: dsl.string().unique() },\n * });\n */\n\nimport { boolean, datetime, id, json, string } from \"./column.ts\";\nimport type {\n ChainableColumn,\n ChainableDatetimeColumn,\n ChainableIdColumn,\n ChainableStringColumn,\n} from \"./column.ts\";\n\n// ─── Template shapes ──────────────────────\n\nexport type BaseTemplate = {\n readonly id: ChainableIdColumn;\n readonly createdAt: ChainableDatetimeColumn;\n readonly updatedAt: ChainableDatetimeColumn;\n readonly deletedAt: ChainableDatetimeColumn;\n};\n\nexport type BaseWithWorkspaceTemplate = BaseTemplate & {\n readonly workspaceId: ChainableStringColumn;\n};\n\nexport type MetadataTemplate = {\n readonly metadata: ChainableColumn<\"json\">;\n readonly settings: ChainableColumn<\"json\">;\n};\n\nexport type ActiveTemplate = {\n readonly isActive: ChainableColumn<\"boolean\">;\n};\n\nexport type AuditTemplate = {\n readonly createdById: ChainableStringColumn;\n readonly updatedById: ChainableStringColumn;\n};\n\nexport type ExternalIdTemplate = {\n readonly externalId: ChainableStringColumn;\n};\n\nexport type NameDescriptionTemplate = {\n readonly name: ChainableStringColumn;\n readonly description: ChainableStringColumn;\n};\n\nexport type FieldsTemplate = {\n readonly datetime: ChainableDatetimeColumn;\n readonly id: ChainableIdColumn;\n readonly title: ChainableStringColumn;\n readonly description: ChainableStringColumn;\n readonly externalId: ChainableStringColumn;\n readonly metadata: ChainableColumn<\"json\">;\n readonly settings: ChainableColumn<\"json\">;\n readonly isActive: ChainableColumn<\"boolean\">;\n};\n\nexport type TemplatesApi = {\n readonly base: BaseTemplate;\n readonly baseWithWorkspace: BaseWithWorkspaceTemplate;\n readonly withMetadata: MetadataTemplate;\n readonly withActive: ActiveTemplate;\n readonly withAudit: AuditTemplate;\n readonly withExternalId: ExternalIdTemplate;\n readonly withNameDescription: NameDescriptionTemplate;\n readonly fields: FieldsTemplate;\n};\n\n// ─── Base templates ───────────────────────\n\n/** `id` (ULID), `createdAt`, `updatedAt`, `deletedAt`. */\nexport const base: BaseTemplate = {\n get id() {\n return id({ type: \"ulid\" });\n },\n get createdAt() {\n return datetime({ default: \"now\", tz: true, index: true });\n },\n get updatedAt() {\n return datetime({ default: \"now\", updatedAt: true, tz: true, index: true });\n },\n get deletedAt() {\n return datetime({ optional: true, index: true });\n },\n};\n\n/** `base` plus an indexed `workspaceId`. */\nexport const baseWithWorkspace: BaseWithWorkspaceTemplate = {\n get id() {\n return id({ type: \"ulid\" });\n },\n get createdAt() {\n return datetime({ default: \"now\", tz: true, index: true });\n },\n get updatedAt() {\n return datetime({ default: \"now\", updatedAt: true, tz: true, index: true });\n },\n get deletedAt() {\n return datetime({ optional: true, index: true });\n },\n get workspaceId() {\n return string({ index: true });\n },\n};\n\n// ─── Mixins ───────────────────────────────\n\n/** Optional `metadata` / `settings` JSON columns. */\nexport const withMetadata: MetadataTemplate = {\n get metadata() {\n return json({ optional: true });\n },\n get settings() {\n return json({ optional: true });\n },\n};\n\n/** `isActive` boolean defaulting to true. */\nexport const withActive: ActiveTemplate = {\n get isActive() {\n return boolean({ default: true });\n },\n};\n\n/** Optional, indexed `createdById` / `updatedById`. */\nexport const withAudit: AuditTemplate = {\n get createdById() {\n return string({ optional: true, index: true });\n },\n get updatedById() {\n return string({ optional: true, index: true });\n },\n};\n\n/** Indexed `externalId` for integrations. */\nexport const withExternalId: ExternalIdTemplate = {\n get externalId() {\n return string({ index: true });\n },\n};\n\n/** `name` plus optional `description`. */\nexport const withNameDescription: NameDescriptionTemplate = {\n get name() {\n return string();\n },\n get description() {\n return string({ optional: true });\n },\n};\n\n// ─── Individual fields ────────────────────\n\n/** Pre-configured single columns, for cherry-picking. */\nexport const fields: FieldsTemplate = {\n get datetime() {\n return datetime({ default: \"now\", updatedAt: true, tz: true, index: true });\n },\n get id() {\n return id({ type: \"ulid\" });\n },\n get title() {\n return string();\n },\n get description() {\n return string({ optional: true });\n },\n get externalId() {\n return string({ index: true });\n },\n get metadata() {\n return json({ optional: true });\n },\n get settings() {\n return json({ optional: true });\n },\n get isActive() {\n return boolean({ default: true });\n },\n};\n\n// ─── Namespace ────────────────────────────\n\n/** Every template, as exposed on `dsl.templates`. */\nexport const templates: TemplatesApi = {\n base,\n baseWithWorkspace,\n withMetadata,\n withActive,\n withAudit,\n withExternalId,\n withNameDescription,\n fields,\n};\n",
|
|
15
|
-
"/**\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`.\n * - `.maxLength(n)` / `.text()` / `.precision(p, s)` → native types\n * `VarChar(n)` / `Text` / `Decimal(p, s)`.\n * - `.map()` / model `map` → `dbName`; `.comment()` → `documentation`.\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 * - relation types are derived structurally by `resolveRelationType`.\n */\n\nimport {\n EMPTY_EXTENSION_REGISTRY,\n VibeError,\n assertValidSchemaIR,\n mergeExtensionDeclarations,\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 { planSchema, resolveRelationType } from \"./relation-plan.ts\";\nimport type { PlannedIndex, PlannedRelation, SchemaPlan } from \"./relation-plan.ts\";\nimport type {\n ColumnDef,\n DecimalColumnConfig,\n IdColumnConfig,\n IndexType,\n ModelDef,\n SchemaDef,\n StringColumnConfig,\n} from \"./types.ts\";\n\n// ─── Field type ───────────────────────────\n\nfunction fieldType(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 // Nominal base only: `isUnsupported` marks the column unqueryable and\n // `nativeType` carries the real database type.\n return \"String\";\n }\n}\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\nfunction fieldDefault(params: { column: ColumnDef }): DefaultValueIR | undefined {\n const { column } = params;\n if (column.__columnType === \"id\") return idDefault({ column });\n\n const { dbgenerated, default: value } = column.__config;\n if (typeof dbgenerated === \"string\") return { kind: \"dbgenerated\", sql: dbgenerated };\n if (value === undefined) return undefined;\n\n if (column.__columnType === \"datetime\" && value === \"now\") return { kind: \"now\" };\n if (column.__columnType === \"enum\" && typeof value === \"string\") {\n return { kind: \"enumValue\", value };\n }\n if (typeof value === \"string\" || typeof value === \"boolean\" || typeof value === \"number\") {\n return { kind: \"literal\", value };\n }\n if (typeof value === \"bigint\") return { kind: \"literal\", value: Number(value) };\n return undefined;\n}\n\n// ─── Native types ─────────────────────────\n\nfunction nativeType(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 `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\" && column.__config.tz === true) {\n return \"Timestamptz\";\n }\n if (column.__columnType === \"unsupported\") {\n return String(column.__config.dbType);\n }\n return undefined;\n}\n\n// ─── Fields ───────────────────────────────\n\nfunction 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 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 ...(dbName === undefined ? {} : { dbName }),\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n ...(native === undefined ? {} : { nativeType: native }),\n ...(column.__columnType === \"unsupported\" ? { isUnsupported: true as const } : {}),\n ...(documentation === undefined ? {} : { documentation }),\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.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: { index: PlannedIndex }): IndexIR {\n const { index } = params;\n const kind: IndexKind = index.isUnique\n ? \"unique\"\n : index.indexType === undefined\n ? \"btree\"\n : INDEX_KINDS[index.indexType];\n\n return {\n kind,\n fields: index.columns.map((name) => ({ name })),\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}): ModelIR {\n const { model, plan, extensions, declarations, issues } = params;\n const primaryKey =\n model.__primaryKey !== undefined && model.__primaryKey.length > 0\n ? { fields: [...model.__primaryKey] }\n : undefined;\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 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) => buildIndex({ index })),\n ...(primaryKey === undefined ? {} : { primaryKey }),\n isView: false,\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 const models: ModelIR[] = Array.from(schema.__models.values(), (model) =>\n buildModel({ model, plan, extensions, declarations, issues })\n );\n const enums: EnumIR[] = Array.from(schema.__enums, ([name, values]) => ({\n name,\n values: [...values],\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 };\n\n assertValidSchemaIR({ schema: ir });\n return ir;\n}\n",
|
|
15
|
+
"/**\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`.\n * - `.maxLength(n)` / `.text()` / `.precision(p, s)` → native types\n * `VarChar(n)` / `Text` / `Decimal(p, s)`.\n * - `.map()` / model `map` → `dbName`; `.comment()` → `documentation`.\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 * - relation types are derived structurally by `resolveRelationType`.\n */\n\nimport {\n EMPTY_EXTENSION_REGISTRY,\n VibeError,\n assertValidSchemaIR,\n mergeExtensionDeclarations,\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 { planSchema, resolveRelationType } from \"./relation-plan.ts\";\nimport type { PlannedIndex, PlannedRelation, SchemaPlan } from \"./relation-plan.ts\";\nimport type {\n ColumnDef,\n DecimalColumnConfig,\n IdColumnConfig,\n IndexType,\n ModelDef,\n SchemaDef,\n StringColumnConfig,\n} from \"./types.ts\";\n\n// ─── Field type ───────────────────────────\n\nfunction fieldType(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 // Nominal base only: `isUnsupported` marks the column unqueryable and\n // `nativeType` carries the real database type.\n return \"String\";\n }\n}\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\nfunction fieldDefault(params: { column: ColumnDef }): DefaultValueIR | undefined {\n const { column } = params;\n if (column.__columnType === \"id\") return idDefault({ column });\n\n const { dbgenerated, default: value } = column.__config;\n if (typeof dbgenerated === \"string\") return { kind: \"dbgenerated\", sql: dbgenerated };\n if (value === undefined) return undefined;\n\n if (column.__columnType === \"datetime\" && value === \"now\") return { kind: \"now\" };\n if (column.__columnType === \"enum\" && typeof value === \"string\") {\n return { kind: \"enumValue\", value };\n }\n if (typeof value === \"string\" || typeof value === \"boolean\" || typeof value === \"number\") {\n return { kind: \"literal\", value };\n }\n if (typeof value === \"bigint\") return { kind: \"literal\", value: Number(value) };\n return undefined;\n}\n\n// ─── Native types ─────────────────────────\n\nfunction nativeType(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 `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\" && column.__config.tz === true) {\n return \"Timestamptz\";\n }\n if (column.__columnType === \"unsupported\") {\n return String(column.__config.dbType);\n }\n return undefined;\n}\n\n// ─── Fields ───────────────────────────────\n\nfunction 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 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 ...(dbName === undefined ? {} : { dbName }),\n ...(defaultValue === undefined ? {} : { default: defaultValue }),\n ...(native === undefined ? {} : { nativeType: native }),\n ...(column.__columnType === \"unsupported\" ? { isUnsupported: true as const } : {}),\n ...(documentation === undefined ? {} : { documentation }),\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.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: { index: PlannedIndex }): IndexIR {\n const { index } = params;\n const kind: IndexKind = index.isUnique\n ? \"unique\"\n : index.indexType === undefined\n ? \"btree\"\n : INDEX_KINDS[index.indexType];\n\n return {\n kind,\n fields: index.columns.map((name) => ({ name })),\n ...(index.where === undefined ? {} : { where: index.where }),\n ...(index.nullsNotDistinct === true ? { nullsNotDistinct: true } : {}),\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}): ModelIR {\n const { model, plan, extensions, declarations, issues } = params;\n const primaryKey =\n model.__primaryKey !== undefined && model.__primaryKey.length > 0\n ? { fields: [...model.__primaryKey] }\n : undefined;\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 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) => buildIndex({ index })),\n ...(model.__checks === undefined || model.__checks.length === 0\n ? {}\n : { checks: model.__checks.map((check) => ({ name: check.name, expression: check.expression })) }),\n ...(primaryKey === undefined ? {} : { primaryKey }),\n isView: false,\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 const models: ModelIR[] = Array.from(schema.__models.values(), (model) =>\n buildModel({ model, plan, extensions, declarations, issues })\n );\n const enums: EnumIR[] = Array.from(schema.__enums, ([name, values]) => ({\n name,\n values: [...values],\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 };\n\n assertValidSchemaIR({ schema: ir });\n return ir;\n}\n",
|
|
16
16
|
"/**\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 if (!model.__columns.has(relation.__fromColumn)) {\n errors.push({\n type: \"error\",\n message: `Relation \"${relationName}\" references FK column \"${relation.__fromColumn}\" which doesn't exist on model \"${modelName}\"`,\n model: modelName,\n relation: relationName,\n });\n }\n if (!targetModel.__columns.has(relation.__toColumn)) {\n errors.push({\n type: \"error\",\n message: `Relation \"${relationName}\" references column \"${relation.__toColumn}\" which doesn't exist on target model \"${relation.__targetModel}\"`,\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",
|
|
17
|
-
"/**\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 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 { 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 RelationsBuilder,\n RelationsMap,\n RelationsOutput,\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 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 { children, createChildrenBuilder } from \"./relation.ts\";\nexport { detectOneToOnePairs, planSchema, resolveRelationType } from \"./relation-plan.ts\";\nexport { defineRelations, defineRelationsPart, mergeRelations } from \"./relations.ts\";\nexport { 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 {\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 BaseColumnConfig,\n BigIntColumnConfig,\n BooleanColumnConfig,\n BytesColumnConfig,\n CascadeAction,\n ChildrenBuilder,\n ChildrenDef,\n ChildrenRelationConfig,\n ChildrenSchemaCallback,\n ColumnDef,\n ColumnKeys,\n ColumnRef,\n ColumnType,\n CreateModelConfig,\n DatetimeColumnConfig,\n DecimalColumnConfig,\n EnumDef,\n EnumFieldConfig,\n ExtensionAttributeUse,\n ExtensionTypeConfig,\n FloatColumnConfig,\n GeneratorOutput,\n IdColumnConfig,\n IdGeneratorType,\n IndexBuilder,\n IndexCallback,\n IndexDef,\n IndexOptions,\n IndexType,\n InlineEnumConfig,\n IntColumnConfig,\n JsonColumnConfig,\n ManyRelationDefConfig,\n ModelColumnRefs,\n ModelDef,\n OneRelationDefConfig,\n PrismaGeneratorConfig,\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) => ChainableColumn<\"int\">;\n readonly bigint: (config?: BigIntColumnConfig) => ChainableColumn<\"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) => ChainableColumn<\"json\">;\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: <TSchema extends Record<string, ModelDef>>(\n models: TSchema,\n callback: (r: RelationsBuilder<TSchema>) => RelationsOutput<TSchema>\n ) => RelationsMap;\n readonly defineRelationsPart: <TSchema extends Record<string, ModelDef>>(\n models: TSchema,\n callback: (r: RelationsBuilder<TSchema>) => Partial<RelationsOutput<TSchema>>\n ) => RelationsMap;\n readonly mergeRelations: (...parts: RelationsMap[]) => RelationsMap;\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 schema,\n domain,\n\n // Output\n toIR,\n validateSchema,\n generate,\n\n // Templates\n templates,\n};\n"
|
|
17
|
+
"/**\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 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 { 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 RelationsBuilder,\n RelationsMap,\n RelationsOutput,\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 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 { children, createChildrenBuilder } from \"./relation.ts\";\nexport { detectOneToOnePairs, planSchema, resolveRelationType } from \"./relation-plan.ts\";\nexport { defineRelations, defineRelationsPart, mergeRelations } from \"./relations.ts\";\nexport { 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 {\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 BaseColumnConfig,\n BigIntColumnConfig,\n BooleanColumnConfig,\n BytesColumnConfig,\n CascadeAction,\n ChildrenBuilder,\n ChildrenDef,\n ChildrenRelationConfig,\n ChildrenSchemaCallback,\n ColumnDef,\n ColumnKeys,\n ColumnRef,\n ColumnType,\n CreateModelConfig,\n DatetimeColumnConfig,\n DecimalColumnConfig,\n EnumDef,\n EnumFieldConfig,\n ExtensionAttributeUse,\n ExtensionTypeConfig,\n FloatColumnConfig,\n GeneratorOutput,\n IdColumnConfig,\n IdGeneratorType,\n IndexBuilder,\n IndexCallback,\n IndexDef,\n IndexOptions,\n ModelCheckConfig,\n UniqueIndexOptions,\n IndexType,\n InlineEnumConfig,\n IntColumnConfig,\n JsonColumnConfig,\n ManyRelationDefConfig,\n ModelColumnRefs,\n ModelDef,\n OneRelationDefConfig,\n PrismaGeneratorConfig,\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) => ChainableColumn<\"int\">;\n readonly bigint: (config?: BigIntColumnConfig) => ChainableColumn<\"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) => ChainableColumn<\"json\">;\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: <TSchema extends Record<string, ModelDef>>(\n models: TSchema,\n callback: (r: RelationsBuilder<TSchema>) => RelationsOutput<TSchema>\n ) => RelationsMap;\n readonly defineRelationsPart: <TSchema extends Record<string, ModelDef>>(\n models: TSchema,\n callback: (r: RelationsBuilder<TSchema>) => Partial<RelationsOutput<TSchema>>\n ) => RelationsMap;\n readonly mergeRelations: (...parts: RelationsMap[]) => RelationsMap;\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 schema,\n domain,\n\n // Output\n toIR,\n validateSchema,\n generate,\n\n // Templates\n templates,\n};\n"
|
|
18
18
|
],
|
|
19
|
-
"mappings": "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",
|
|
20
|
-
"debugId": "
|
|
19
|
+
"mappings": "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",
|
|
20
|
+
"debugId": "F845059A50C0E4EE64756E2164756E21",
|
|
21
21
|
"names": []
|
|
22
22
|
}
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAIV,iBAAiB,EACjB,YAAY,EAEZ,QAAQ,EAGR,QAAQ,EACR,gBAAgB,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAIV,iBAAiB,EACjB,YAAY,EAEZ,QAAQ,EAGR,QAAQ,EACR,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAkBpB;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,CAmE/E;AAyCD;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,gBAAgB,EAC3D,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,GACjC,QAAQ,CAAC,OAAO,CAAC,CAkBnB;AAID,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,GAAG,MAAM,EAAE,CAEpE;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,GAAG,QAAQ,EAAE,CAMvE"}
|
package/dist/relation-plan.d.ts
CHANGED
|
@@ -53,6 +53,10 @@ export type PlannedIndex = {
|
|
|
53
53
|
readonly isUnique: boolean;
|
|
54
54
|
readonly columns: readonly string[];
|
|
55
55
|
readonly indexType?: IndexType;
|
|
56
|
+
/** Partial-index predicate (raw SQL) — postgres/pglite/sqlite only. */
|
|
57
|
+
readonly where?: string;
|
|
58
|
+
/** `UNIQUE NULLS NOT DISTINCT` — unique indexes on postgres/pglite (15+) only. */
|
|
59
|
+
readonly nullsNotDistinct?: boolean;
|
|
56
60
|
};
|
|
57
61
|
/** Everything both output paths need, keyed by model name. */
|
|
58
62
|
export type SchemaPlan = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-plan.d.ts","sourceRoot":"","sources":["../src/relation-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,SAAS,EAEV,MAAM,YAAY,CAAC;AAIpB;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;CACnC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"relation-plan.d.ts","sourceRoot":"","sources":["../src/relation-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,SAAS,EAEV,MAAM,YAAY,CAAC;AAIpB;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;CACnC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC,CAAC;IACpE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;CAChE,CAAC;AAIF,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,cAAc,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;CACnC,CAAC;AAQF;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACvC,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAgElC;AA4PD,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG,UAAU,CA8BpE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,UAAU,CAAC;CAClB,GAAG,YAAY,CAgBf"}
|
package/dist/to-ir.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-ir.d.ts","sourceRoot":"","sources":["../src/to-ir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,OAAO,KAAK,EAIV,iBAAiB,EAMjB,QAAQ,EAER,QAAQ,EAET,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAMV,SAAS,EAEV,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"to-ir.d.ts","sourceRoot":"","sources":["../src/to-ir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,OAAO,KAAK,EAIV,iBAAiB,EAMjB,QAAQ,EAER,QAAQ,EAET,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAMV,SAAS,EAEV,MAAM,YAAY,CAAC;AA4UpB;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE;IAC3B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,GAAG,QAAQ,CAkCX"}
|
package/dist/types.d.ts
CHANGED
|
@@ -136,6 +136,11 @@ export type ChildrenDef = {
|
|
|
136
136
|
export type ChildrenBuilder = {
|
|
137
137
|
children(config: ChildrenRelationConfig): ChildrenDef;
|
|
138
138
|
};
|
|
139
|
+
/** A named CHECK constraint (raw SQL expression) on a model. */
|
|
140
|
+
export type ModelCheckConfig = {
|
|
141
|
+
readonly name: string;
|
|
142
|
+
readonly expression: string;
|
|
143
|
+
};
|
|
139
144
|
/** A model's schema: columns plus optional inline children. */
|
|
140
145
|
export type SchemaDefinition = Record<string, ColumnDef | ChildrenDef>;
|
|
141
146
|
export type ChildrenSchemaCallback = (s: ChildrenBuilder) => SchemaDefinition;
|
|
@@ -143,10 +148,23 @@ export type IndexDef = {
|
|
|
143
148
|
readonly __type: "index" | "unique";
|
|
144
149
|
readonly __columns: readonly string[];
|
|
145
150
|
readonly __indexType?: IndexType;
|
|
151
|
+
/** Partial-index predicate (raw SQL) — postgres/pglite/sqlite only. */
|
|
152
|
+
readonly __where?: string;
|
|
153
|
+
/** `UNIQUE NULLS NOT DISTINCT` — unique indexes on postgres/pglite (15+) only. */
|
|
154
|
+
readonly __nullsNotDistinct?: boolean;
|
|
146
155
|
};
|
|
147
156
|
/** Options accepted by the array form of `i.on([...], options)`. */
|
|
148
157
|
export type IndexOptions = {
|
|
149
158
|
type?: IndexType;
|
|
159
|
+
/** Partial-index predicate (raw SQL), e.g. `"released_at IS NULL"` — postgres/pglite/sqlite only. */
|
|
160
|
+
where?: string;
|
|
161
|
+
};
|
|
162
|
+
/** Options accepted by the array form of `i.unique([...], options)`. */
|
|
163
|
+
export type UniqueIndexOptions = {
|
|
164
|
+
/** Partial-index predicate (raw SQL) — makes this a partial unique index (postgres/pglite/sqlite only). */
|
|
165
|
+
where?: string;
|
|
166
|
+
/** `UNIQUE NULLS NOT DISTINCT` — NULLs collide instead of always passing (postgres/pglite 15+ only). */
|
|
167
|
+
nullsNotDistinct?: boolean;
|
|
150
168
|
};
|
|
151
169
|
/** Index builder; column names are constrained to the model's own columns. */
|
|
152
170
|
export type IndexBuilder<TColumns extends string = string> = {
|
|
@@ -155,6 +173,7 @@ export type IndexBuilder<TColumns extends string = string> = {
|
|
|
155
173
|
/** Alias of `on(...)` — reads better next to `unique(...)`. */
|
|
156
174
|
index<T extends TColumns>(...columns: T[]): IndexDef;
|
|
157
175
|
unique<T extends TColumns>(...columns: T[]): IndexDef;
|
|
176
|
+
unique<T extends TColumns>(columns: T[], options: UniqueIndexOptions): IndexDef;
|
|
158
177
|
gin<T extends TColumns>(...columns: T[]): IndexDef;
|
|
159
178
|
gist<T extends TColumns>(...columns: T[]): IndexDef;
|
|
160
179
|
hash<T extends TColumns>(...columns: T[]): IndexDef;
|
|
@@ -173,6 +192,8 @@ export type ModelDef<TSchema extends SchemaDefinition = SchemaDefinition> = {
|
|
|
173
192
|
readonly __map?: string;
|
|
174
193
|
/** `@@id([...])` — compound primary key. */
|
|
175
194
|
readonly __primaryKey?: readonly string[];
|
|
195
|
+
/** Named CHECK constraints (`@@check`-equivalent). */
|
|
196
|
+
readonly __checks?: readonly ModelCheckConfig[];
|
|
176
197
|
/** Extension attributes declared on the model (`@@search`-style). */
|
|
177
198
|
readonly __extensions?: readonly ExtensionAttributeUse[];
|
|
178
199
|
};
|
|
@@ -191,6 +212,8 @@ export type CreateModelConfig<TSchema extends SchemaDefinition = SchemaDefinitio
|
|
|
191
212
|
map?: string;
|
|
192
213
|
/** `@@id([...])` — compound primary key columns. */
|
|
193
214
|
primaryKey?: SchemaColumnNames<TSchema>[];
|
|
215
|
+
/** Named CHECK constraints — raw SQL expressions, name-keyed in migrations. */
|
|
216
|
+
checks?: readonly ModelCheckConfig[];
|
|
194
217
|
/** Extension model attributes (`@@search`-style declarations). */
|
|
195
218
|
extensions?: readonly ExtensionAttributeUse[];
|
|
196
219
|
};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibeorm/dsl",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.4",
|
|
4
4
|
"description": "TypeScript schema DSL for VibeORM v2 — compiles to canonical SchemaIR, with .prisma generation for interop",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"orm",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"bun": ">=1.2.0"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@vibeorm/schema": "2.0.0-alpha.
|
|
44
|
+
"@vibeorm/schema": "2.0.0-alpha.4"
|
|
45
45
|
},
|
|
46
46
|
"publishConfig": {
|
|
47
47
|
"access": "public"
|