@prisma-next/contract-authoring 0.3.0-pr.87.2 → 0.3.0-pr.88.2

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.
@@ -12,39 +12,10 @@ export interface ColumnBuilderState<Name extends string, Nullable extends boolea
12
12
  readonly type: Type;
13
13
  readonly nativeType: string;
14
14
  }
15
- /**
16
- * Unique constraint definition for table builder.
17
- */
18
- export interface UniqueConstraintDef {
19
- readonly columns: readonly string[];
20
- readonly name?: string;
21
- }
22
- /**
23
- * Index definition for table builder.
24
- */
25
- export interface IndexDef {
26
- readonly columns: readonly string[];
27
- readonly name?: string;
28
- }
29
- /**
30
- * Foreign key definition for table builder.
31
- */
32
- export interface ForeignKeyDef {
33
- readonly columns: readonly string[];
34
- readonly references: {
35
- readonly table: string;
36
- readonly columns: readonly string[];
37
- };
38
- readonly name?: string;
39
- }
40
15
  export interface TableBuilderState<Name extends string, Columns extends Record<string, ColumnBuilderState<string, boolean, string>>, PrimaryKey extends readonly string[] | undefined> {
41
16
  readonly name: Name;
42
17
  readonly columns: Columns;
43
18
  readonly primaryKey?: PrimaryKey;
44
- readonly primaryKeyName?: string;
45
- readonly uniques: readonly UniqueConstraintDef[];
46
- readonly indexes: readonly IndexDef[];
47
- readonly foreignKeys: readonly ForeignKeyDef[];
48
19
  }
49
20
  export type RelationDefinition = {
50
21
  readonly to: string;
@@ -1 +1 @@
1
- {"version":3,"file":"builder-state.d.ts","sourceRoot":"","sources":["../src/builder-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder-state.d.ts","sourceRoot":"","sources":["../src/builder-state.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type { ColumnBuilder, ColumnBuilderState, ColumnTypeDescriptor, ContractBuilderState, ForeignKeyDef, IndexDef, ModelBuilderState, RelationDefinition, TableBuilderState, UniqueConstraintDef, } from './builder-state';
1
+ export type { ColumnBuilder, ColumnBuilderState, ColumnTypeDescriptor, ContractBuilderState, ModelBuilderState, RelationDefinition, TableBuilderState, } from './builder-state';
2
2
  export { ContractBuilder, defineContract } from './contract-builder';
3
3
  export { ModelBuilder } from './model-builder';
4
4
  export { TableBuilder } from './table-builder';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,OAAO,GACR,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,OAAO,GACR,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -75,26 +75,13 @@ var ModelBuilder = class _ModelBuilder {
75
75
 
76
76
  // src/table-builder.ts
77
77
  var TableBuilder = class _TableBuilder {
78
- _state;
79
- constructor(name, columns = {}, primaryKey, primaryKeyName, uniques = [], indexes = [], foreignKeys = []) {
80
- this._state = {
81
- name,
82
- columns,
83
- primaryKey,
84
- primaryKeyName,
85
- uniques,
86
- indexes,
87
- foreignKeys
88
- };
89
- }
90
- get _name() {
91
- return this._state.name;
92
- }
93
- get _columns() {
94
- return this._state.columns;
95
- }
96
- get _primaryKey() {
97
- return this._state.primaryKey;
78
+ _name;
79
+ _columns;
80
+ _primaryKey;
81
+ constructor(name, columns = {}, primaryKey) {
82
+ this._name = name;
83
+ this._columns = columns;
84
+ this._primaryKey = primaryKey;
98
85
  }
99
86
  column(name, options) {
100
87
  const nullable = options.nullable ?? false;
@@ -108,69 +95,26 @@ var TableBuilder = class _TableBuilder {
108
95
  return new _TableBuilder(
109
96
  this._name,
110
97
  { ...this._columns, [name]: columnState },
111
- this._primaryKey,
112
- this._state.primaryKeyName,
113
- this._state.uniques,
114
- this._state.indexes,
115
- this._state.foreignKeys
98
+ this._primaryKey
116
99
  );
117
100
  }
118
- primaryKey(columns, name) {
119
- return new _TableBuilder(
120
- this._name,
121
- this._columns,
122
- columns,
123
- name,
124
- this._state.uniques,
125
- this._state.indexes,
126
- this._state.foreignKeys
127
- );
101
+ primaryKey(columns, _name) {
102
+ return new _TableBuilder(this._name, this._columns, columns);
128
103
  }
129
- unique(columns, name) {
130
- const constraint = name ? { columns, name } : { columns };
131
- return new _TableBuilder(
132
- this._name,
133
- this._columns,
134
- this._primaryKey,
135
- this._state.primaryKeyName,
136
- [...this._state.uniques, constraint],
137
- this._state.indexes,
138
- this._state.foreignKeys
139
- );
104
+ unique(_columns, _name) {
105
+ return this;
140
106
  }
141
- index(columns, name) {
142
- const indexDef = name ? { columns, name } : { columns };
143
- return new _TableBuilder(
144
- this._name,
145
- this._columns,
146
- this._primaryKey,
147
- this._state.primaryKeyName,
148
- this._state.uniques,
149
- [...this._state.indexes, indexDef],
150
- this._state.foreignKeys
151
- );
107
+ index(_columns, _name) {
108
+ return this;
152
109
  }
153
- foreignKey(columns, references, name) {
154
- const fkDef = name ? { columns, references, name } : { columns, references };
155
- return new _TableBuilder(
156
- this._name,
157
- this._columns,
158
- this._primaryKey,
159
- this._state.primaryKeyName,
160
- this._state.uniques,
161
- this._state.indexes,
162
- [...this._state.foreignKeys, fkDef]
163
- );
110
+ foreignKey(_columns, _references, _name) {
111
+ return this;
164
112
  }
165
113
  build() {
166
114
  return {
167
115
  name: this._name,
168
116
  columns: this._columns,
169
- ...this._primaryKey !== void 0 ? { primaryKey: this._primaryKey } : {},
170
- ...this._state.primaryKeyName !== void 0 ? { primaryKeyName: this._state.primaryKeyName } : {},
171
- uniques: this._state.uniques,
172
- indexes: this._state.indexes,
173
- foreignKeys: this._state.foreignKeys
117
+ ...this._primaryKey !== void 0 ? { primaryKey: this._primaryKey } : {}
174
118
  };
175
119
  }
176
120
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/model-builder.ts","../src/table-builder.ts","../src/contract-builder.ts"],"sourcesContent":["import type { ModelBuilderState, RelationDefinition } from './builder-state';\n\nexport class ModelBuilder<\n Name extends string,\n Table extends string,\n Fields extends Record<string, string> = Record<never, never>,\n Relations extends Record<string, RelationDefinition> = Record<never, never>,\n> {\n private readonly _name: Name;\n private readonly _table: Table;\n private readonly _fields: Fields;\n private readonly _relations: Relations;\n\n constructor(\n name: Name,\n table: Table,\n fields: Fields = {} as Fields,\n relations: Relations = {} as Relations,\n ) {\n this._name = name;\n this._table = table;\n this._fields = fields;\n this._relations = relations;\n }\n\n field<FieldName extends string, ColumnName extends string>(\n fieldName: FieldName,\n columnName: ColumnName,\n ): ModelBuilder<Name, Table, Fields & Record<FieldName, ColumnName>, Relations> {\n return new ModelBuilder(\n this._name,\n this._table,\n {\n ...this._fields,\n [fieldName]: columnName,\n } as Fields & Record<FieldName, ColumnName>,\n this._relations,\n );\n }\n\n relation<RelationName extends string, ToModel extends string, ToTable extends string>(\n name: RelationName,\n options: {\n toModel: ToModel;\n toTable: ToTable;\n cardinality: '1:1' | '1:N' | 'N:1';\n on: {\n parentTable: Table;\n parentColumns: readonly string[];\n childTable: ToTable;\n childColumns: readonly string[];\n };\n },\n ): ModelBuilder<Name, Table, Fields, Relations & Record<RelationName, RelationDefinition>>;\n relation<\n RelationName extends string,\n ToModel extends string,\n ToTable extends string,\n JunctionTable extends string,\n >(\n name: RelationName,\n options: {\n toModel: ToModel;\n toTable: ToTable;\n cardinality: 'N:M';\n through: {\n table: JunctionTable;\n parentColumns: readonly string[];\n childColumns: readonly string[];\n };\n on: {\n parentTable: Table;\n parentColumns: readonly string[];\n childTable: JunctionTable;\n childColumns: readonly string[];\n };\n },\n ): ModelBuilder<Name, Table, Fields, Relations & Record<RelationName, RelationDefinition>>;\n relation<\n RelationName extends string,\n ToModel extends string,\n ToTable extends string,\n JunctionTable extends string = never,\n >(\n name: RelationName,\n options: {\n toModel: ToModel;\n toTable: ToTable;\n cardinality: '1:1' | '1:N' | 'N:1' | 'N:M';\n through?: {\n table: JunctionTable;\n parentColumns: readonly string[];\n childColumns: readonly string[];\n };\n on: {\n parentTable: Table;\n parentColumns: readonly string[];\n childTable: ToTable | JunctionTable;\n childColumns: readonly string[];\n };\n },\n ): ModelBuilder<Name, Table, Fields, Relations & Record<RelationName, RelationDefinition>> {\n // Validate parentTable matches model's table\n if (options.on.parentTable !== this._table) {\n throw new Error(\n `Relation \"${name}\" parentTable \"${options.on.parentTable}\" does not match model table \"${this._table}\"`,\n );\n }\n\n // Validate childTable matches toTable (for non-N:M) or through.table (for N:M)\n if (options.cardinality === 'N:M') {\n if (!options.through) {\n throw new Error(`Relation \"${name}\" with cardinality \"N:M\" requires through field`);\n }\n if (options.on.childTable !== options.through.table) {\n throw new Error(\n `Relation \"${name}\" childTable \"${options.on.childTable}\" does not match through.table \"${options.through.table}\"`,\n );\n }\n } else {\n if (options.on.childTable !== options.toTable) {\n throw new Error(\n `Relation \"${name}\" childTable \"${options.on.childTable}\" does not match toTable \"${options.toTable}\"`,\n );\n }\n }\n\n const relationDef: RelationDefinition = {\n to: options.toModel,\n cardinality: options.cardinality,\n on: {\n parentCols: options.on.parentColumns,\n childCols: options.on.childColumns,\n },\n ...(options.through\n ? {\n through: {\n table: options.through.table,\n parentCols: options.through.parentColumns,\n childCols: options.through.childColumns,\n },\n }\n : undefined),\n };\n\n return new ModelBuilder(this._name, this._table, this._fields, {\n ...this._relations,\n [name]: relationDef,\n } as Relations & Record<RelationName, RelationDefinition>);\n }\n\n build(): ModelBuilderState<Name, Table, Fields, Relations> {\n return {\n name: this._name,\n table: this._table,\n fields: this._fields,\n relations: this._relations,\n };\n }\n}\n","import type {\n ColumnBuilderState,\n ColumnTypeDescriptor,\n ForeignKeyDef,\n IndexDef,\n TableBuilderState,\n UniqueConstraintDef,\n} from './builder-state';\n\ninterface TableBuilderInternalState<\n Name extends string,\n Columns extends Record<string, ColumnBuilderState<string, boolean, string>>,\n PrimaryKey extends readonly string[] | undefined,\n> {\n readonly name: Name;\n readonly columns: Columns;\n readonly primaryKey: PrimaryKey;\n readonly primaryKeyName: string | undefined;\n readonly uniques: readonly UniqueConstraintDef[];\n readonly indexes: readonly IndexDef[];\n readonly foreignKeys: readonly ForeignKeyDef[];\n}\n\nexport class TableBuilder<\n Name extends string,\n Columns extends Record<string, ColumnBuilderState<string, boolean, string>> = Record<\n never,\n ColumnBuilderState<string, boolean, string>\n >,\n PrimaryKey extends readonly string[] | undefined = undefined,\n> {\n private readonly _state: TableBuilderInternalState<Name, Columns, PrimaryKey>;\n\n constructor(\n name: Name,\n columns: Columns = {} as Columns,\n primaryKey?: PrimaryKey,\n primaryKeyName?: string,\n uniques: readonly UniqueConstraintDef[] = [],\n indexes: readonly IndexDef[] = [],\n foreignKeys: readonly ForeignKeyDef[] = [],\n ) {\n this._state = {\n name,\n columns,\n primaryKey: primaryKey as PrimaryKey,\n primaryKeyName,\n uniques,\n indexes,\n foreignKeys,\n };\n }\n\n private get _name(): Name {\n return this._state.name;\n }\n\n private get _columns(): Columns {\n return this._state.columns;\n }\n\n private get _primaryKey(): PrimaryKey {\n return this._state.primaryKey;\n }\n\n column<\n ColName extends string,\n Descriptor extends ColumnTypeDescriptor,\n Nullable extends boolean | undefined = undefined,\n >(\n name: ColName,\n options: {\n type: Descriptor;\n nullable?: Nullable;\n },\n ): TableBuilder<\n Name,\n Columns &\n Record<\n ColName,\n ColumnBuilderState<ColName, Nullable extends true ? true : false, Descriptor['codecId']>\n >,\n PrimaryKey\n > {\n const nullable = (options.nullable ?? false) as Nullable extends true ? true : false;\n const { codecId, nativeType } = options.type;\n\n const columnState = {\n name,\n nullable,\n type: codecId,\n nativeType,\n } as ColumnBuilderState<ColName, Nullable extends true ? true : false, Descriptor['codecId']>;\n return new TableBuilder(\n this._name,\n { ...this._columns, [name]: columnState } as Columns &\n Record<\n ColName,\n ColumnBuilderState<ColName, Nullable extends true ? true : false, Descriptor['codecId']>\n >,\n this._primaryKey,\n this._state.primaryKeyName,\n this._state.uniques,\n this._state.indexes,\n this._state.foreignKeys,\n );\n }\n\n primaryKey<PK extends readonly string[]>(\n columns: PK,\n name?: string,\n ): TableBuilder<Name, Columns, PK> {\n return new TableBuilder(\n this._name,\n this._columns,\n columns,\n name,\n this._state.uniques,\n this._state.indexes,\n this._state.foreignKeys,\n );\n }\n\n unique(columns: readonly string[], name?: string): TableBuilder<Name, Columns, PrimaryKey> {\n const constraint: UniqueConstraintDef = name ? { columns, name } : { columns };\n return new TableBuilder(\n this._name,\n this._columns,\n this._primaryKey,\n this._state.primaryKeyName,\n [...this._state.uniques, constraint],\n this._state.indexes,\n this._state.foreignKeys,\n );\n }\n\n index(columns: readonly string[], name?: string): TableBuilder<Name, Columns, PrimaryKey> {\n const indexDef: IndexDef = name ? { columns, name } : { columns };\n return new TableBuilder(\n this._name,\n this._columns,\n this._primaryKey,\n this._state.primaryKeyName,\n this._state.uniques,\n [...this._state.indexes, indexDef],\n this._state.foreignKeys,\n );\n }\n\n foreignKey(\n columns: readonly string[],\n references: { table: string; columns: readonly string[] },\n name?: string,\n ): TableBuilder<Name, Columns, PrimaryKey> {\n const fkDef: ForeignKeyDef = name ? { columns, references, name } : { columns, references };\n return new TableBuilder(\n this._name,\n this._columns,\n this._primaryKey,\n this._state.primaryKeyName,\n this._state.uniques,\n this._state.indexes,\n [...this._state.foreignKeys, fkDef],\n );\n }\n\n build(): TableBuilderState<Name, Columns, PrimaryKey> {\n return {\n name: this._name,\n columns: this._columns,\n ...(this._primaryKey !== undefined ? { primaryKey: this._primaryKey } : {}),\n ...(this._state.primaryKeyName !== undefined\n ? { primaryKeyName: this._state.primaryKeyName }\n : {}),\n uniques: this._state.uniques,\n indexes: this._state.indexes,\n foreignKeys: this._state.foreignKeys,\n } as TableBuilderState<Name, Columns, PrimaryKey>;\n }\n}\n","import type { TargetPackRef } from '@prisma-next/contract/framework-components';\nimport type {\n ColumnBuilderState,\n ContractBuilderState,\n ModelBuilderState,\n RelationDefinition,\n TableBuilderState,\n} from './builder-state';\nimport { ModelBuilder } from './model-builder';\nimport { TableBuilder } from './table-builder';\n\nexport class ContractBuilder<\n Target extends string | undefined = undefined,\n Tables extends Record<\n string,\n TableBuilderState<\n string,\n Record<string, ColumnBuilderState<string, boolean, string>>,\n readonly string[] | undefined\n >\n > = Record<never, never>,\n Models extends Record<\n string,\n ModelBuilderState<string, string, Record<string, string>, Record<string, RelationDefinition>>\n > = Record<never, never>,\n CoreHash extends string | undefined = undefined,\n ExtensionPacks extends Record<string, unknown> | undefined = undefined,\n Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined,\n> {\n protected readonly state: ContractBuilderState<\n Target,\n Tables,\n Models,\n CoreHash,\n ExtensionPacks,\n Capabilities\n >;\n\n constructor(\n state?: ContractBuilderState<Target, Tables, Models, CoreHash, ExtensionPacks, Capabilities>,\n ) {\n this.state =\n state ??\n ({\n tables: {},\n models: {},\n } as ContractBuilderState<Target, Tables, Models, CoreHash, ExtensionPacks, Capabilities>);\n }\n\n target<T extends string>(\n packRef: TargetPackRef<string, T>,\n ): ContractBuilder<T, Tables, Models, CoreHash, ExtensionPacks, Capabilities> {\n return new ContractBuilder<T, Tables, Models, CoreHash, ExtensionPacks, Capabilities>({\n ...this.state,\n target: packRef.targetId,\n });\n }\n\n capabilities<C extends Record<string, Record<string, boolean>>>(\n capabilities: C,\n ): ContractBuilder<Target, Tables, Models, CoreHash, ExtensionPacks, C> {\n return new ContractBuilder<Target, Tables, Models, CoreHash, ExtensionPacks, C>({\n ...this.state,\n capabilities,\n });\n }\n\n table<\n TableName extends string,\n T extends TableBuilder<\n TableName,\n Record<string, ColumnBuilderState<string, boolean, string>>,\n readonly string[] | undefined\n >,\n >(\n name: TableName,\n callback: (t: TableBuilder<TableName>) => T | undefined,\n ): ContractBuilder<\n Target,\n Tables & Record<TableName, ReturnType<T['build']>>,\n Models,\n CoreHash,\n ExtensionPacks,\n Capabilities\n > {\n const tableBuilder = new TableBuilder<TableName>(name);\n const result = callback(tableBuilder);\n const finalBuilder = result instanceof TableBuilder ? result : tableBuilder;\n const tableState = finalBuilder.build();\n\n return new ContractBuilder<\n Target,\n Tables & Record<TableName, ReturnType<T['build']>>,\n Models,\n CoreHash,\n ExtensionPacks,\n Capabilities\n >({\n ...this.state,\n tables: { ...this.state.tables, [name]: tableState } as Tables &\n Record<TableName, ReturnType<T['build']>>,\n });\n }\n\n model<\n ModelName extends string,\n TableName extends string,\n M extends ModelBuilder<\n ModelName,\n TableName,\n Record<string, string>,\n Record<string, RelationDefinition>\n >,\n >(\n name: ModelName,\n table: TableName,\n callback: (\n m: ModelBuilder<ModelName, TableName, Record<string, string>, Record<never, never>>,\n ) => M | undefined,\n ): ContractBuilder<\n Target,\n Tables,\n Models & Record<ModelName, ReturnType<M['build']>>,\n CoreHash,\n ExtensionPacks,\n Capabilities\n > {\n const modelBuilder = new ModelBuilder<ModelName, TableName>(name, table);\n const result = callback(modelBuilder);\n const finalBuilder = result instanceof ModelBuilder ? result : modelBuilder;\n const modelState = finalBuilder.build();\n\n return new ContractBuilder<\n Target,\n Tables,\n Models & Record<ModelName, ReturnType<M['build']>>,\n CoreHash,\n ExtensionPacks,\n Capabilities\n >({\n ...this.state,\n models: { ...this.state.models, [name]: modelState } as Models &\n Record<ModelName, ReturnType<M['build']>>,\n });\n }\n\n coreHash<H extends string>(\n hash: H,\n ): ContractBuilder<Target, Tables, Models, H, ExtensionPacks, Capabilities> {\n return new ContractBuilder<Target, Tables, Models, H, ExtensionPacks, Capabilities>({\n ...this.state,\n coreHash: hash,\n });\n }\n}\n\nexport function defineContract(): ContractBuilder {\n return new ContractBuilder();\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/model-builder.ts","../src/table-builder.ts","../src/contract-builder.ts"],"sourcesContent":["import type { ModelBuilderState, RelationDefinition } from './builder-state';\n\nexport class ModelBuilder<\n Name extends string,\n Table extends string,\n Fields extends Record<string, string> = Record<never, never>,\n Relations extends Record<string, RelationDefinition> = Record<never, never>,\n> {\n private readonly _name: Name;\n private readonly _table: Table;\n private readonly _fields: Fields;\n private readonly _relations: Relations;\n\n constructor(\n name: Name,\n table: Table,\n fields: Fields = {} as Fields,\n relations: Relations = {} as Relations,\n ) {\n this._name = name;\n this._table = table;\n this._fields = fields;\n this._relations = relations;\n }\n\n field<FieldName extends string, ColumnName extends string>(\n fieldName: FieldName,\n columnName: ColumnName,\n ): ModelBuilder<Name, Table, Fields & Record<FieldName, ColumnName>, Relations> {\n return new ModelBuilder(\n this._name,\n this._table,\n {\n ...this._fields,\n [fieldName]: columnName,\n } as Fields & Record<FieldName, ColumnName>,\n this._relations,\n );\n }\n\n relation<RelationName extends string, ToModel extends string, ToTable extends string>(\n name: RelationName,\n options: {\n toModel: ToModel;\n toTable: ToTable;\n cardinality: '1:1' | '1:N' | 'N:1';\n on: {\n parentTable: Table;\n parentColumns: readonly string[];\n childTable: ToTable;\n childColumns: readonly string[];\n };\n },\n ): ModelBuilder<Name, Table, Fields, Relations & Record<RelationName, RelationDefinition>>;\n relation<\n RelationName extends string,\n ToModel extends string,\n ToTable extends string,\n JunctionTable extends string,\n >(\n name: RelationName,\n options: {\n toModel: ToModel;\n toTable: ToTable;\n cardinality: 'N:M';\n through: {\n table: JunctionTable;\n parentColumns: readonly string[];\n childColumns: readonly string[];\n };\n on: {\n parentTable: Table;\n parentColumns: readonly string[];\n childTable: JunctionTable;\n childColumns: readonly string[];\n };\n },\n ): ModelBuilder<Name, Table, Fields, Relations & Record<RelationName, RelationDefinition>>;\n relation<\n RelationName extends string,\n ToModel extends string,\n ToTable extends string,\n JunctionTable extends string = never,\n >(\n name: RelationName,\n options: {\n toModel: ToModel;\n toTable: ToTable;\n cardinality: '1:1' | '1:N' | 'N:1' | 'N:M';\n through?: {\n table: JunctionTable;\n parentColumns: readonly string[];\n childColumns: readonly string[];\n };\n on: {\n parentTable: Table;\n parentColumns: readonly string[];\n childTable: ToTable | JunctionTable;\n childColumns: readonly string[];\n };\n },\n ): ModelBuilder<Name, Table, Fields, Relations & Record<RelationName, RelationDefinition>> {\n // Validate parentTable matches model's table\n if (options.on.parentTable !== this._table) {\n throw new Error(\n `Relation \"${name}\" parentTable \"${options.on.parentTable}\" does not match model table \"${this._table}\"`,\n );\n }\n\n // Validate childTable matches toTable (for non-N:M) or through.table (for N:M)\n if (options.cardinality === 'N:M') {\n if (!options.through) {\n throw new Error(`Relation \"${name}\" with cardinality \"N:M\" requires through field`);\n }\n if (options.on.childTable !== options.through.table) {\n throw new Error(\n `Relation \"${name}\" childTable \"${options.on.childTable}\" does not match through.table \"${options.through.table}\"`,\n );\n }\n } else {\n if (options.on.childTable !== options.toTable) {\n throw new Error(\n `Relation \"${name}\" childTable \"${options.on.childTable}\" does not match toTable \"${options.toTable}\"`,\n );\n }\n }\n\n const relationDef: RelationDefinition = {\n to: options.toModel,\n cardinality: options.cardinality,\n on: {\n parentCols: options.on.parentColumns,\n childCols: options.on.childColumns,\n },\n ...(options.through\n ? {\n through: {\n table: options.through.table,\n parentCols: options.through.parentColumns,\n childCols: options.through.childColumns,\n },\n }\n : undefined),\n };\n\n return new ModelBuilder(this._name, this._table, this._fields, {\n ...this._relations,\n [name]: relationDef,\n } as Relations & Record<RelationName, RelationDefinition>);\n }\n\n build(): ModelBuilderState<Name, Table, Fields, Relations> {\n return {\n name: this._name,\n table: this._table,\n fields: this._fields,\n relations: this._relations,\n };\n }\n}\n","import type { ColumnBuilderState, ColumnTypeDescriptor, TableBuilderState } from './builder-state';\n\nexport class TableBuilder<\n Name extends string,\n Columns extends Record<string, ColumnBuilderState<string, boolean, string>> = Record<\n never,\n ColumnBuilderState<string, boolean, string>\n >,\n PrimaryKey extends readonly string[] | undefined = undefined,\n> {\n private readonly _name: Name;\n private readonly _columns: Columns;\n private readonly _primaryKey: PrimaryKey;\n\n constructor(name: Name, columns: Columns = {} as Columns, primaryKey?: PrimaryKey) {\n this._name = name;\n this._columns = columns;\n this._primaryKey = primaryKey as PrimaryKey;\n }\n\n column<\n ColName extends string,\n Descriptor extends ColumnTypeDescriptor,\n Nullable extends boolean | undefined = undefined,\n >(\n name: ColName,\n options: {\n type: Descriptor;\n nullable?: Nullable;\n },\n ): TableBuilder<\n Name,\n Columns &\n Record<\n ColName,\n ColumnBuilderState<ColName, Nullable extends true ? true : false, Descriptor['codecId']>\n >,\n PrimaryKey\n > {\n const nullable = (options.nullable ?? false) as Nullable extends true ? true : false;\n const { codecId, nativeType } = options.type;\n\n const columnState = {\n name,\n nullable,\n type: codecId,\n nativeType,\n } as ColumnBuilderState<ColName, Nullable extends true ? true : false, Descriptor['codecId']>;\n return new TableBuilder(\n this._name,\n { ...this._columns, [name]: columnState } as Columns &\n Record<\n ColName,\n ColumnBuilderState<ColName, Nullable extends true ? true : false, Descriptor['codecId']>\n >,\n this._primaryKey,\n );\n }\n\n primaryKey<PK extends readonly string[]>(\n columns: PK,\n _name?: string,\n ): TableBuilder<Name, Columns, PK> {\n return new TableBuilder(this._name, this._columns, columns);\n }\n\n unique(_columns: readonly string[], _name?: string): TableBuilder<Name, Columns, PrimaryKey> {\n return this;\n }\n\n index(_columns: readonly string[], _name?: string): TableBuilder<Name, Columns, PrimaryKey> {\n return this;\n }\n\n foreignKey(\n _columns: readonly string[],\n _references: { table: string; columns: readonly string[] },\n _name?: string,\n ): TableBuilder<Name, Columns, PrimaryKey> {\n return this;\n }\n\n build(): TableBuilderState<Name, Columns, PrimaryKey> {\n return {\n name: this._name,\n columns: this._columns,\n ...(this._primaryKey !== undefined ? { primaryKey: this._primaryKey } : {}),\n } as TableBuilderState<Name, Columns, PrimaryKey>;\n }\n}\n","import type { TargetPackRef } from '@prisma-next/contract/framework-components';\nimport type {\n ColumnBuilderState,\n ContractBuilderState,\n ModelBuilderState,\n RelationDefinition,\n TableBuilderState,\n} from './builder-state';\nimport { ModelBuilder } from './model-builder';\nimport { TableBuilder } from './table-builder';\n\nexport class ContractBuilder<\n Target extends string | undefined = undefined,\n Tables extends Record<\n string,\n TableBuilderState<\n string,\n Record<string, ColumnBuilderState<string, boolean, string>>,\n readonly string[] | undefined\n >\n > = Record<never, never>,\n Models extends Record<\n string,\n ModelBuilderState<string, string, Record<string, string>, Record<string, RelationDefinition>>\n > = Record<never, never>,\n CoreHash extends string | undefined = undefined,\n ExtensionPacks extends Record<string, unknown> | undefined = undefined,\n Capabilities extends Record<string, Record<string, boolean>> | undefined = undefined,\n> {\n protected readonly state: ContractBuilderState<\n Target,\n Tables,\n Models,\n CoreHash,\n ExtensionPacks,\n Capabilities\n >;\n\n constructor(\n state?: ContractBuilderState<Target, Tables, Models, CoreHash, ExtensionPacks, Capabilities>,\n ) {\n this.state =\n state ??\n ({\n tables: {},\n models: {},\n } as ContractBuilderState<Target, Tables, Models, CoreHash, ExtensionPacks, Capabilities>);\n }\n\n target<T extends string>(\n packRef: TargetPackRef<string, T>,\n ): ContractBuilder<T, Tables, Models, CoreHash, ExtensionPacks, Capabilities> {\n return new ContractBuilder<T, Tables, Models, CoreHash, ExtensionPacks, Capabilities>({\n ...this.state,\n target: packRef.targetId,\n });\n }\n\n capabilities<C extends Record<string, Record<string, boolean>>>(\n capabilities: C,\n ): ContractBuilder<Target, Tables, Models, CoreHash, ExtensionPacks, C> {\n return new ContractBuilder<Target, Tables, Models, CoreHash, ExtensionPacks, C>({\n ...this.state,\n capabilities,\n });\n }\n\n table<\n TableName extends string,\n T extends TableBuilder<\n TableName,\n Record<string, ColumnBuilderState<string, boolean, string>>,\n readonly string[] | undefined\n >,\n >(\n name: TableName,\n callback: (t: TableBuilder<TableName>) => T | undefined,\n ): ContractBuilder<\n Target,\n Tables & Record<TableName, ReturnType<T['build']>>,\n Models,\n CoreHash,\n ExtensionPacks,\n Capabilities\n > {\n const tableBuilder = new TableBuilder<TableName>(name);\n const result = callback(tableBuilder);\n const finalBuilder = result instanceof TableBuilder ? result : tableBuilder;\n const tableState = finalBuilder.build();\n\n return new ContractBuilder<\n Target,\n Tables & Record<TableName, ReturnType<T['build']>>,\n Models,\n CoreHash,\n ExtensionPacks,\n Capabilities\n >({\n ...this.state,\n tables: { ...this.state.tables, [name]: tableState } as Tables &\n Record<TableName, ReturnType<T['build']>>,\n });\n }\n\n model<\n ModelName extends string,\n TableName extends string,\n M extends ModelBuilder<\n ModelName,\n TableName,\n Record<string, string>,\n Record<string, RelationDefinition>\n >,\n >(\n name: ModelName,\n table: TableName,\n callback: (\n m: ModelBuilder<ModelName, TableName, Record<string, string>, Record<never, never>>,\n ) => M | undefined,\n ): ContractBuilder<\n Target,\n Tables,\n Models & Record<ModelName, ReturnType<M['build']>>,\n CoreHash,\n ExtensionPacks,\n Capabilities\n > {\n const modelBuilder = new ModelBuilder<ModelName, TableName>(name, table);\n const result = callback(modelBuilder);\n const finalBuilder = result instanceof ModelBuilder ? result : modelBuilder;\n const modelState = finalBuilder.build();\n\n return new ContractBuilder<\n Target,\n Tables,\n Models & Record<ModelName, ReturnType<M['build']>>,\n CoreHash,\n ExtensionPacks,\n Capabilities\n >({\n ...this.state,\n models: { ...this.state.models, [name]: modelState } as Models &\n Record<ModelName, ReturnType<M['build']>>,\n });\n }\n\n coreHash<H extends string>(\n hash: H,\n ): ContractBuilder<Target, Tables, Models, H, ExtensionPacks, Capabilities> {\n return new ContractBuilder<Target, Tables, Models, H, ExtensionPacks, Capabilities>({\n ...this.state,\n coreHash: hash,\n });\n }\n}\n\nexport function defineContract(): ContractBuilder {\n return new ContractBuilder();\n}\n"],"mappings":"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","names":[]}
@@ -1,21 +1,20 @@
1
- import type { ColumnBuilderState, ColumnTypeDescriptor, ForeignKeyDef, IndexDef, TableBuilderState, UniqueConstraintDef } from './builder-state';
1
+ import type { ColumnBuilderState, ColumnTypeDescriptor, TableBuilderState } from './builder-state';
2
2
  export declare class TableBuilder<Name extends string, Columns extends Record<string, ColumnBuilderState<string, boolean, string>> = Record<never, ColumnBuilderState<string, boolean, string>>, PrimaryKey extends readonly string[] | undefined = undefined> {
3
- private readonly _state;
4
- constructor(name: Name, columns?: Columns, primaryKey?: PrimaryKey, primaryKeyName?: string, uniques?: readonly UniqueConstraintDef[], indexes?: readonly IndexDef[], foreignKeys?: readonly ForeignKeyDef[]);
5
- private get _name();
6
- private get _columns();
7
- private get _primaryKey();
3
+ private readonly _name;
4
+ private readonly _columns;
5
+ private readonly _primaryKey;
6
+ constructor(name: Name, columns?: Columns, primaryKey?: PrimaryKey);
8
7
  column<ColName extends string, Descriptor extends ColumnTypeDescriptor, Nullable extends boolean | undefined = undefined>(name: ColName, options: {
9
8
  type: Descriptor;
10
9
  nullable?: Nullable;
11
10
  }): TableBuilder<Name, Columns & Record<ColName, ColumnBuilderState<ColName, Nullable extends true ? true : false, Descriptor['codecId']>>, PrimaryKey>;
12
- primaryKey<PK extends readonly string[]>(columns: PK, name?: string): TableBuilder<Name, Columns, PK>;
13
- unique(columns: readonly string[], name?: string): TableBuilder<Name, Columns, PrimaryKey>;
14
- index(columns: readonly string[], name?: string): TableBuilder<Name, Columns, PrimaryKey>;
15
- foreignKey(columns: readonly string[], references: {
11
+ primaryKey<PK extends readonly string[]>(columns: PK, _name?: string): TableBuilder<Name, Columns, PK>;
12
+ unique(_columns: readonly string[], _name?: string): TableBuilder<Name, Columns, PrimaryKey>;
13
+ index(_columns: readonly string[], _name?: string): TableBuilder<Name, Columns, PrimaryKey>;
14
+ foreignKey(_columns: readonly string[], _references: {
16
15
  table: string;
17
16
  columns: readonly string[];
18
- }, name?: string): TableBuilder<Name, Columns, PrimaryKey>;
17
+ }, _name?: string): TableBuilder<Name, Columns, PrimaryKey>;
19
18
  build(): TableBuilderState<Name, Columns, PrimaryKey>;
20
19
  }
21
20
  //# sourceMappingURL=table-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-builder.d.ts","sourceRoot":"","sources":["../src/table-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AAgBzB,qBAAa,YAAY,CACvB,IAAI,SAAS,MAAM,EACnB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAClF,KAAK,EACL,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAC5C,EACD,UAAU,SAAS,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS;IAE5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuD;gBAG5E,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,OAAuB,EAChC,UAAU,CAAC,EAAE,UAAU,EACvB,cAAc,CAAC,EAAE,MAAM,EACvB,OAAO,GAAE,SAAS,mBAAmB,EAAO,EAC5C,OAAO,GAAE,SAAS,QAAQ,EAAO,EACjC,WAAW,GAAE,SAAS,aAAa,EAAO;IAa5C,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,MAAM,CACJ,OAAO,SAAS,MAAM,EACtB,UAAU,SAAS,oBAAoB,EACvC,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAEhD,IAAI,EAAE,OAAO,EACb,OAAO,EAAE;QACP,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB,GACA,YAAY,CACb,IAAI,EACJ,OAAO,GACL,MAAM,CACJ,OAAO,EACP,kBAAkB,CAAC,OAAO,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CACzF,EACH,UAAU,CACX;IAyBD,UAAU,CAAC,EAAE,SAAS,SAAS,MAAM,EAAE,EACrC,OAAO,EAAE,EAAE,EACX,IAAI,CAAC,EAAE,MAAM,GACZ,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;IAYlC,MAAM,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;IAa1F,KAAK,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;IAazF,UAAU,CACR,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EACzD,IAAI,CAAC,EAAE,MAAM,GACZ,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;IAa1C,KAAK,IAAI,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;CAatD"}
1
+ {"version":3,"file":"table-builder.d.ts","sourceRoot":"","sources":["../src/table-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEnG,qBAAa,YAAY,CACvB,IAAI,SAAS,MAAM,EACnB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAClF,KAAK,EACL,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAC5C,EACD,UAAU,SAAS,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS;IAE5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAE7B,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,OAAuB,EAAE,UAAU,CAAC,EAAE,UAAU;IAMjF,MAAM,CACJ,OAAO,SAAS,MAAM,EACtB,UAAU,SAAS,oBAAoB,EACvC,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAEhD,IAAI,EAAE,OAAO,EACb,OAAO,EAAE;QACP,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB,GACA,YAAY,CACb,IAAI,EACJ,OAAO,GACL,MAAM,CACJ,OAAO,EACP,kBAAkB,CAAC,OAAO,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CACzF,EACH,UAAU,CACX;IAqBD,UAAU,CAAC,EAAE,SAAS,SAAS,MAAM,EAAE,EACrC,OAAO,EAAE,EAAE,EACX,KAAK,CAAC,EAAE,MAAM,GACb,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;IAIlC,MAAM,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;IAI5F,KAAK,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;IAI3F,UAAU,CACR,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAC1D,KAAK,CAAC,EAAE,MAAM,GACb,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;IAI1C,KAAK,IAAI,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;CAOtD"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@prisma-next/contract-authoring",
3
- "version": "0.3.0-pr.87.2",
3
+ "version": "0.3.0-pr.88.2",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "Target-agnostic contract authoring builder core for Prisma Next",
7
7
  "dependencies": {
8
8
  "ts-toolbelt": "^9.6.0",
9
- "@prisma-next/contract": "0.3.0-pr.87.2"
9
+ "@prisma-next/contract": "0.3.0-pr.88.2"
10
10
  },
11
11
  "devDependencies": {
12
12
  "@vitest/coverage-v8": "4.0.16",
@@ -18,34 +18,6 @@ export interface ColumnBuilderState<
18
18
  readonly nativeType: string;
19
19
  }
20
20
 
21
- /**
22
- * Unique constraint definition for table builder.
23
- */
24
- export interface UniqueConstraintDef {
25
- readonly columns: readonly string[];
26
- readonly name?: string;
27
- }
28
-
29
- /**
30
- * Index definition for table builder.
31
- */
32
- export interface IndexDef {
33
- readonly columns: readonly string[];
34
- readonly name?: string;
35
- }
36
-
37
- /**
38
- * Foreign key definition for table builder.
39
- */
40
- export interface ForeignKeyDef {
41
- readonly columns: readonly string[];
42
- readonly references: {
43
- readonly table: string;
44
- readonly columns: readonly string[];
45
- };
46
- readonly name?: string;
47
- }
48
-
49
21
  export interface TableBuilderState<
50
22
  Name extends string,
51
23
  Columns extends Record<string, ColumnBuilderState<string, boolean, string>>,
@@ -54,10 +26,6 @@ export interface TableBuilderState<
54
26
  readonly name: Name;
55
27
  readonly columns: Columns;
56
28
  readonly primaryKey?: PrimaryKey;
57
- readonly primaryKeyName?: string;
58
- readonly uniques: readonly UniqueConstraintDef[];
59
- readonly indexes: readonly IndexDef[];
60
- readonly foreignKeys: readonly ForeignKeyDef[];
61
29
  }
62
30
 
63
31
  export type RelationDefinition = {
package/src/index.ts CHANGED
@@ -3,12 +3,9 @@ export type {
3
3
  ColumnBuilderState,
4
4
  ColumnTypeDescriptor,
5
5
  ContractBuilderState,
6
- ForeignKeyDef,
7
- IndexDef,
8
6
  ModelBuilderState,
9
7
  RelationDefinition,
10
8
  TableBuilderState,
11
- UniqueConstraintDef,
12
9
  } from './builder-state';
13
10
 
14
11
  export { ContractBuilder, defineContract } from './contract-builder';
@@ -1,25 +1,4 @@
1
- import type {
2
- ColumnBuilderState,
3
- ColumnTypeDescriptor,
4
- ForeignKeyDef,
5
- IndexDef,
6
- TableBuilderState,
7
- UniqueConstraintDef,
8
- } from './builder-state';
9
-
10
- interface TableBuilderInternalState<
11
- Name extends string,
12
- Columns extends Record<string, ColumnBuilderState<string, boolean, string>>,
13
- PrimaryKey extends readonly string[] | undefined,
14
- > {
15
- readonly name: Name;
16
- readonly columns: Columns;
17
- readonly primaryKey: PrimaryKey;
18
- readonly primaryKeyName: string | undefined;
19
- readonly uniques: readonly UniqueConstraintDef[];
20
- readonly indexes: readonly IndexDef[];
21
- readonly foreignKeys: readonly ForeignKeyDef[];
22
- }
1
+ import type { ColumnBuilderState, ColumnTypeDescriptor, TableBuilderState } from './builder-state';
23
2
 
24
3
  export class TableBuilder<
25
4
  Name extends string,
@@ -29,38 +8,14 @@ export class TableBuilder<
29
8
  >,
30
9
  PrimaryKey extends readonly string[] | undefined = undefined,
31
10
  > {
32
- private readonly _state: TableBuilderInternalState<Name, Columns, PrimaryKey>;
33
-
34
- constructor(
35
- name: Name,
36
- columns: Columns = {} as Columns,
37
- primaryKey?: PrimaryKey,
38
- primaryKeyName?: string,
39
- uniques: readonly UniqueConstraintDef[] = [],
40
- indexes: readonly IndexDef[] = [],
41
- foreignKeys: readonly ForeignKeyDef[] = [],
42
- ) {
43
- this._state = {
44
- name,
45
- columns,
46
- primaryKey: primaryKey as PrimaryKey,
47
- primaryKeyName,
48
- uniques,
49
- indexes,
50
- foreignKeys,
51
- };
52
- }
11
+ private readonly _name: Name;
12
+ private readonly _columns: Columns;
13
+ private readonly _primaryKey: PrimaryKey;
53
14
 
54
- private get _name(): Name {
55
- return this._state.name;
56
- }
57
-
58
- private get _columns(): Columns {
59
- return this._state.columns;
60
- }
61
-
62
- private get _primaryKey(): PrimaryKey {
63
- return this._state.primaryKey;
15
+ constructor(name: Name, columns: Columns = {} as Columns, primaryKey?: PrimaryKey) {
16
+ this._name = name;
17
+ this._columns = columns;
18
+ this._primaryKey = primaryKey as PrimaryKey;
64
19
  }
65
20
 
66
21
  column<
@@ -99,69 +54,30 @@ export class TableBuilder<
99
54
  ColumnBuilderState<ColName, Nullable extends true ? true : false, Descriptor['codecId']>
100
55
  >,
101
56
  this._primaryKey,
102
- this._state.primaryKeyName,
103
- this._state.uniques,
104
- this._state.indexes,
105
- this._state.foreignKeys,
106
57
  );
107
58
  }
108
59
 
109
60
  primaryKey<PK extends readonly string[]>(
110
61
  columns: PK,
111
- name?: string,
62
+ _name?: string,
112
63
  ): TableBuilder<Name, Columns, PK> {
113
- return new TableBuilder(
114
- this._name,
115
- this._columns,
116
- columns,
117
- name,
118
- this._state.uniques,
119
- this._state.indexes,
120
- this._state.foreignKeys,
121
- );
64
+ return new TableBuilder(this._name, this._columns, columns);
122
65
  }
123
66
 
124
- unique(columns: readonly string[], name?: string): TableBuilder<Name, Columns, PrimaryKey> {
125
- const constraint: UniqueConstraintDef = name ? { columns, name } : { columns };
126
- return new TableBuilder(
127
- this._name,
128
- this._columns,
129
- this._primaryKey,
130
- this._state.primaryKeyName,
131
- [...this._state.uniques, constraint],
132
- this._state.indexes,
133
- this._state.foreignKeys,
134
- );
67
+ unique(_columns: readonly string[], _name?: string): TableBuilder<Name, Columns, PrimaryKey> {
68
+ return this;
135
69
  }
136
70
 
137
- index(columns: readonly string[], name?: string): TableBuilder<Name, Columns, PrimaryKey> {
138
- const indexDef: IndexDef = name ? { columns, name } : { columns };
139
- return new TableBuilder(
140
- this._name,
141
- this._columns,
142
- this._primaryKey,
143
- this._state.primaryKeyName,
144
- this._state.uniques,
145
- [...this._state.indexes, indexDef],
146
- this._state.foreignKeys,
147
- );
71
+ index(_columns: readonly string[], _name?: string): TableBuilder<Name, Columns, PrimaryKey> {
72
+ return this;
148
73
  }
149
74
 
150
75
  foreignKey(
151
- columns: readonly string[],
152
- references: { table: string; columns: readonly string[] },
153
- name?: string,
76
+ _columns: readonly string[],
77
+ _references: { table: string; columns: readonly string[] },
78
+ _name?: string,
154
79
  ): TableBuilder<Name, Columns, PrimaryKey> {
155
- const fkDef: ForeignKeyDef = name ? { columns, references, name } : { columns, references };
156
- return new TableBuilder(
157
- this._name,
158
- this._columns,
159
- this._primaryKey,
160
- this._state.primaryKeyName,
161
- this._state.uniques,
162
- this._state.indexes,
163
- [...this._state.foreignKeys, fkDef],
164
- );
80
+ return this;
165
81
  }
166
82
 
167
83
  build(): TableBuilderState<Name, Columns, PrimaryKey> {
@@ -169,12 +85,6 @@ export class TableBuilder<
169
85
  name: this._name,
170
86
  columns: this._columns,
171
87
  ...(this._primaryKey !== undefined ? { primaryKey: this._primaryKey } : {}),
172
- ...(this._state.primaryKeyName !== undefined
173
- ? { primaryKeyName: this._state.primaryKeyName }
174
- : {}),
175
- uniques: this._state.uniques,
176
- indexes: this._state.indexes,
177
- foreignKeys: this._state.foreignKeys,
178
88
  } as TableBuilderState<Name, Columns, PrimaryKey>;
179
89
  }
180
90
  }