drizzle-orm 1.0.0-beta.6-cd45bda → 1.0.0-beta.6-cefee57
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/column-builder.cjs.map +1 -1
- package/column-builder.d.cts +2 -2
- package/column-builder.d.ts +2 -2
- package/column-builder.js.map +1 -1
- package/column.cjs.map +1 -1
- package/column.d.cts +5 -5
- package/column.d.ts +5 -5
- package/column.js.map +1 -1
- package/operations.d.cts +2 -13
- package/operations.d.ts +2 -13
- package/package.json +1 -1
- package/pg-core/columns/common.cjs.map +1 -1
- package/pg-core/columns/common.d.cts +4 -2
- package/pg-core/columns/common.d.ts +4 -2
- package/pg-core/columns/common.js.map +1 -1
- package/pg-core/table.cjs.map +1 -1
- package/pg-core/table.d.cts +1 -1
- package/pg-core/table.d.ts +1 -1
- package/pg-core/table.js.map +1 -1
- package/table.cjs.map +1 -1
- package/table.d.cts +1 -1
- package/table.d.ts +1 -1
- package/table.js.map +1 -1
package/column-builder.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-builder.cjs","names":["entityKind"],"sources":["../src/column-builder.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { CockroachColumn, ExtraConfigColumn as CockroachExtraConfigColumn } from './cockroach-core/index.ts';\nimport type { Column, ColumnBaseConfig } from './column.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './gel-core/index.ts';\nimport type { MsSqlColumn } from './mssql-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'array'\n\t| 'bigint'\n\t| 'boolean'\n\t| 'custom'\n\t| 'number'\n\t| 'object'\n\t| 'string';\n\nexport type ColumnDataArrayConstraint =\n\t| 'vector'\n\t| 'int64vector'\n\t| 'halfvector'\n\t| 'basecolumn'\n\t| 'point'\n\t| 'geometry'\n\t| 'line';\n\nexport type ColumnDataBigIntConstraint = 'int64' | 'uint64';\n\nexport type ColumnDataNumberConstraint =\n\t| 'double'\n\t| 'float'\n\t| 'int8'\n\t| 'int16'\n\t| 'int24'\n\t| 'int32'\n\t| 'int53'\n\t| 'udouble'\n\t| 'ufloat'\n\t| 'uint8'\n\t| 'uint16'\n\t| 'uint24'\n\t| 'uint32'\n\t| 'uint53'\n\t| 'unsigned'\n\t| 'year';\n\nexport type ColumnDataObjectConstraint =\n\t| 'buffer'\n\t| 'date'\n\t| 'geometry'\n\t| 'json'\n\t| 'line'\n\t| 'point'\n\t// Gel-specific\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'localDate'\n\t| 'localDateTime'\n\t| 'localTime'\n\t| 'relDuration';\n\nexport type ColumnDataStringConstraint =\n\t| 'binary'\n\t| 'cidr'\n\t| 'date'\n\t| 'datetime'\n\t| 'enum'\n\t| 'inet'\n\t| 'int64'\n\t| 'interval'\n\t| 'macaddr'\n\t| 'macaddr8'\n\t| 'numeric'\n\t| 'sparsevec'\n\t| 'time'\n\t| 'timestamp'\n\t| 'uint64'\n\t| 'unumeric'\n\t| 'uuid';\n\nexport type ColumnDataConstraint =\n\t| ColumnDataArrayConstraint\n\t| ColumnDataBigIntConstraint\n\t| ColumnDataNumberConstraint\n\t| ColumnDataObjectConstraint\n\t| ColumnDataStringConstraint;\n\nexport type ColumnType =\n\t| ColumnDataType\n\t| `array ${ColumnDataArrayConstraint}`\n\t| `bigint ${ColumnDataBigIntConstraint}`\n\t| `number ${ColumnDataNumberConstraint}`\n\t| `object ${ColumnDataObjectConstraint}`\n\t| `string ${ColumnDataStringConstraint}`;\n\nexport interface ColumnTypeData<\n\tTType extends ColumnDataType = ColumnDataType,\n\tTConstraint extends ColumnDataConstraint | undefined = ColumnDataConstraint | undefined,\n> {\n\ttype: TType;\n\tconstraint: TConstraint;\n}\n\nexport type ExtractColumnTypeData<T extends ColumnType> = T extends\n\t`${infer Type extends ColumnDataType} ${infer Constraint extends ColumnDataConstraint}`\n\t? ColumnTypeData<Type, Constraint>\n\t: ColumnTypeData<Assume<T, ColumnDataType>, undefined>;\n\nexport function extractExtendedColumnType<TColumn extends Column>(\n\tcolumn: TColumn,\n): ExtractColumnTypeData<TColumn['_']['dataType']> {\n\tconst [type, constraint] = column.dataType.split(' ');\n\n\treturn { type, constraint } as any;\n}\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'mssql' | 'common' | 'gel' | 'cockroach';\n\n// TODO update description\n// 'virtual' | 'stored' for postgres\n// 'stored' for mysql\n// 'virtual' | 'persisted' for mssql\n// We should remove this option from common Column and store it per dialect common\n// Was discussed with Andrew\nexport type GeneratedStorageMode = 'virtual' | 'stored' | 'persisted';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport interface GeneratedColumnConfig<TDataType> {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n}\n\nexport interface GeneratedIdentityConfig {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n}\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnType> {\n\tdataType: TDataType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnType>,\n\tTTableName extends string,\n\tTDialect extends Dialect = 'common',\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T extends { enumValues: [string, ...string[]] } ? T['enumValues'] : undefined;\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, TDialect>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport interface ColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n}\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t\tnotNull: true;\n\t};\n};\n\nexport type IsAutoincrement<T> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T, TGenerated = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\n\nexport interface ColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnType> = ColumnBuilderBaseConfig<ColumnType>,\n> {\n\t_: T;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: T;\n\n\t/** @internal */\n\tprotected config: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig; // TODO: ??\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t: IsPrimaryKey<this>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t\t: IsPrimaryKey<this>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n\tTBuiltConfig extends ColumnBaseConfig<ColumnType> = MakeColumnConfig<TBuilder['_'], TTableName, TDialect>,\n> = TDialect extends 'pg' ? PgColumn<TBuiltConfig, {}>\n\t: TDialect extends 'mysql' ? MySqlColumn<TBuiltConfig, {}>\n\t: TDialect extends 'mssql' ? MsSqlColumn<TBuiltConfig, {}>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<TBuiltConfig, {}>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<TBuiltConfig, {}>\n\t: TDialect extends 'gel' ? GelColumn<TBuiltConfig, {}>\n\t: TDialect extends 'cockroach' ? CockroachColumn<TBuiltConfig, {}>\n\t: TDialect extends 'common' ? Column<TBuiltConfig, {}>\n\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'cockroach' ? CockroachExtraConfigColumn\n\t: TDialect extends 'gel' ? GelExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<\n\t\t\tTTableName,\n\t\t\tTConfigMap[Key],\n\t\t\tTDialect\n\t\t>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<\n\tTColumn extends Column,\n\tTAlias extends string,\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'mssql' ? MsSqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'cockroach' ? CockroachColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: never;\n"],"mappings":";;;;AAgHA,SAAgB,0BACf,QACkD;CAClD,MAAM,CAAC,MAAM,cAAc,OAAO,SAAS,MAAM,IAAI;AAErD,QAAO;EAAE;EAAM;EAAY;;AA8I5B,IAAsB,gBAAtB,MAIkC;CACjC,QAAiBA,0BAAsB;;CAKvC,AAAU;CAEV,YAAY,MAAc,UAAsB,YAAoB;AACnE,OAAK,SAAS;GACb;GACA,WAAW,SAAS;GACpB,SAAS;GACT,SAAS;GACT,YAAY;GACZ,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,YAAY;GACZ;GACA;GACA,WAAW;GACX;;;;;;;;;;;;;CAcF,QAAmC;AAClC,SAAO;;;;;;;CAQR,UAAyB;AACxB,OAAK,OAAO,UAAU;AACtB,SAAO;;;;;;;;;CAUR,QAAQ,OAA+F;AACtG,OAAK,OAAO,UAAU;AACtB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;;;;CASR,WACC,IACsC;AACtC,OAAK,OAAO,YAAY;AACxB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,WAAW,KAAK;;;;;;;;CAShB,YACC,IACmB;AACnB,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,YAAY,KAAK;;;;;;CAOjB,aAEA;AACC,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,UAAU;AACtB,SAAO;;;CAYR,QAAQ,MAAc;AACrB,MAAI,KAAK,OAAO,SAAS,GAAI;AAC7B,OAAK,OAAO,OAAO"}
|
|
1
|
+
{"version":3,"file":"column-builder.cjs","names":["entityKind"],"sources":["../src/column-builder.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { CockroachColumn, ExtraConfigColumn as CockroachExtraConfigColumn } from './cockroach-core/index.ts';\nimport type { Column, ColumnBaseConfig } from './column.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './gel-core/index.ts';\nimport type { MsSqlColumn } from './mssql-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'array'\n\t| 'bigint'\n\t| 'boolean'\n\t| 'custom'\n\t| 'number'\n\t| 'object'\n\t| 'string';\n\nexport type ColumnDataArrayConstraint =\n\t| 'vector'\n\t| 'int64vector'\n\t| 'halfvector'\n\t| 'basecolumn'\n\t| 'point'\n\t| 'geometry'\n\t| 'line';\n\nexport type ColumnDataBigIntConstraint = 'int64' | 'uint64';\n\nexport type ColumnDataNumberConstraint =\n\t| 'double'\n\t| 'float'\n\t| 'int8'\n\t| 'int16'\n\t| 'int24'\n\t| 'int32'\n\t| 'int53'\n\t| 'udouble'\n\t| 'ufloat'\n\t| 'uint8'\n\t| 'uint16'\n\t| 'uint24'\n\t| 'uint32'\n\t| 'uint53'\n\t| 'unsigned'\n\t| 'year';\n\nexport type ColumnDataObjectConstraint =\n\t| 'buffer'\n\t| 'date'\n\t| 'geometry'\n\t| 'json'\n\t| 'line'\n\t| 'point'\n\t// Gel-specific\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'localDate'\n\t| 'localDateTime'\n\t| 'localTime'\n\t| 'relDuration';\n\nexport type ColumnDataStringConstraint =\n\t| 'binary'\n\t| 'cidr'\n\t| 'date'\n\t| 'datetime'\n\t| 'enum'\n\t| 'inet'\n\t| 'int64'\n\t| 'interval'\n\t| 'macaddr'\n\t| 'macaddr8'\n\t| 'numeric'\n\t| 'sparsevec'\n\t| 'time'\n\t| 'timestamp'\n\t| 'uint64'\n\t| 'unumeric'\n\t| 'uuid';\n\nexport type ColumnDataConstraint =\n\t| ColumnDataArrayConstraint\n\t| ColumnDataBigIntConstraint\n\t| ColumnDataNumberConstraint\n\t| ColumnDataObjectConstraint\n\t| ColumnDataStringConstraint;\n\nexport type ColumnType =\n\t| ColumnDataType\n\t| `array ${ColumnDataArrayConstraint}`\n\t| `bigint ${ColumnDataBigIntConstraint}`\n\t| `number ${ColumnDataNumberConstraint}`\n\t| `object ${ColumnDataObjectConstraint}`\n\t| `string ${ColumnDataStringConstraint}`;\n\nexport interface ColumnTypeData<\n\tTType extends ColumnDataType = ColumnDataType,\n\tTConstraint extends ColumnDataConstraint | undefined = ColumnDataConstraint | undefined,\n> {\n\ttype: TType;\n\tconstraint: TConstraint;\n}\n\nexport type ExtractColumnTypeData<T extends ColumnType> = T extends\n\t`${infer Type extends ColumnDataType} ${infer Constraint extends ColumnDataConstraint}`\n\t? ColumnTypeData<Type, Constraint>\n\t: ColumnTypeData<Assume<T, ColumnDataType>, undefined>;\n\nexport function extractExtendedColumnType<TColumn extends Column>(\n\tcolumn: TColumn,\n): ExtractColumnTypeData<TColumn['_']['dataType']> {\n\tconst [type, constraint] = column.dataType.split(' ');\n\n\treturn { type, constraint } as any;\n}\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'mssql' | 'common' | 'gel' | 'cockroach';\n\n// TODO update description\n// 'virtual' | 'stored' for postgres\n// 'stored' for mysql\n// 'virtual' | 'persisted' for mssql\n// We should remove this option from common Column and store it per dialect common\n// Was discussed with Andrew\nexport type GeneratedStorageMode = 'virtual' | 'stored' | 'persisted';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport interface GeneratedColumnConfig<TDataType> {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n}\n\nexport interface GeneratedIdentityConfig {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n}\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnType> {\n\tdataType: TDataType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnType>,\n\tTTableName extends string,\n\tTDialect extends Dialect = 'common',\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T extends { enumValues: [string, ...string[]] } ? T['enumValues'] : undefined;\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, TDialect>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport interface ColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n}\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t\tnotNull: true;\n\t};\n};\n\nexport type IsAutoincrement<T> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T, TGenerated = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\n\nexport interface ColumnBuilderBase<\n\tout T extends ColumnBuilderBaseConfig<ColumnType> = ColumnBuilderBaseConfig<ColumnType>,\n> {\n\t_: T;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tout T extends ColumnBuilderBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: T;\n\n\t/** @internal */\n\tprotected config: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig; // TODO: ??\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t: IsPrimaryKey<this>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t\t: IsPrimaryKey<this>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n\tTBuiltConfig extends ColumnBaseConfig<ColumnType> = MakeColumnConfig<TBuilder['_'], TTableName, TDialect>,\n> = TDialect extends 'pg' ? PgColumn<TBuiltConfig, {}>\n\t: TDialect extends 'mysql' ? MySqlColumn<TBuiltConfig, {}>\n\t: TDialect extends 'mssql' ? MsSqlColumn<TBuiltConfig, {}>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<TBuiltConfig, {}>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<TBuiltConfig, {}>\n\t: TDialect extends 'gel' ? GelColumn<TBuiltConfig, {}>\n\t: TDialect extends 'cockroach' ? CockroachColumn<TBuiltConfig, {}>\n\t: TDialect extends 'common' ? Column<TBuiltConfig, {}>\n\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'cockroach' ? CockroachExtraConfigColumn\n\t: TDialect extends 'gel' ? GelExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<\n\t\t\tTTableName,\n\t\t\tTConfigMap[Key],\n\t\t\tTDialect\n\t\t>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<\n\tTColumn extends Column,\n\tTAlias extends string,\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'mssql' ? MsSqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'cockroach' ? CockroachColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: never;\n"],"mappings":";;;;AAgHA,SAAgB,0BACf,QACkD;CAClD,MAAM,CAAC,MAAM,cAAc,OAAO,SAAS,MAAM,IAAI;AAErD,QAAO;EAAE;EAAM;EAAY;;AA8I5B,IAAsB,gBAAtB,MAIkC;CACjC,QAAiBA,0BAAsB;;CAKvC,AAAU;CAEV,YAAY,MAAc,UAAsB,YAAoB;AACnE,OAAK,SAAS;GACb;GACA,WAAW,SAAS;GACpB,SAAS;GACT,SAAS;GACT,YAAY;GACZ,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,YAAY;GACZ;GACA;GACA,WAAW;GACX;;;;;;;;;;;;;CAcF,QAAmC;AAClC,SAAO;;;;;;;CAQR,UAAyB;AACxB,OAAK,OAAO,UAAU;AACtB,SAAO;;;;;;;;;CAUR,QAAQ,OAA+F;AACtG,OAAK,OAAO,UAAU;AACtB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;;;;CASR,WACC,IACsC;AACtC,OAAK,OAAO,YAAY;AACxB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,WAAW,KAAK;;;;;;;;CAShB,YACC,IACmB;AACnB,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,YAAY,KAAK;;;;;;CAOjB,aAEA;AACC,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,UAAU;AACtB,SAAO;;;CAYR,QAAQ,MAAc;AACrB,MAAI,KAAK,OAAO,SAAS,GAAI;AAC7B,OAAK,OAAO,OAAO"}
|
package/column-builder.d.cts
CHANGED
|
@@ -141,10 +141,10 @@ export type IsIdentity<T, TType extends 'always' | 'byDefault'> = T & {
|
|
|
141
141
|
identity: TType;
|
|
142
142
|
};
|
|
143
143
|
};
|
|
144
|
-
export interface ColumnBuilderBase<T extends ColumnBuilderBaseConfig<ColumnType> = ColumnBuilderBaseConfig<ColumnType>> {
|
|
144
|
+
export interface ColumnBuilderBase<out T extends ColumnBuilderBaseConfig<ColumnType> = ColumnBuilderBaseConfig<ColumnType>> {
|
|
145
145
|
_: T;
|
|
146
146
|
}
|
|
147
|
-
export declare abstract class ColumnBuilder<T extends ColumnBuilderBaseConfig<ColumnType>, TRuntimeConfig extends object = object, TExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig> implements ColumnBuilderBase<T> {
|
|
147
|
+
export declare abstract class ColumnBuilder<out T extends ColumnBuilderBaseConfig<ColumnType>, TRuntimeConfig extends object = object, TExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig> implements ColumnBuilderBase<T> {
|
|
148
148
|
static readonly [entityKind]: string;
|
|
149
149
|
_: T;
|
|
150
150
|
constructor(name: string, dataType: ColumnType, columnType: string);
|
package/column-builder.d.ts
CHANGED
|
@@ -141,10 +141,10 @@ export type IsIdentity<T, TType extends 'always' | 'byDefault'> = T & {
|
|
|
141
141
|
identity: TType;
|
|
142
142
|
};
|
|
143
143
|
};
|
|
144
|
-
export interface ColumnBuilderBase<T extends ColumnBuilderBaseConfig<ColumnType> = ColumnBuilderBaseConfig<ColumnType>> {
|
|
144
|
+
export interface ColumnBuilderBase<out T extends ColumnBuilderBaseConfig<ColumnType> = ColumnBuilderBaseConfig<ColumnType>> {
|
|
145
145
|
_: T;
|
|
146
146
|
}
|
|
147
|
-
export declare abstract class ColumnBuilder<T extends ColumnBuilderBaseConfig<ColumnType>, TRuntimeConfig extends object = object, TExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig> implements ColumnBuilderBase<T> {
|
|
147
|
+
export declare abstract class ColumnBuilder<out T extends ColumnBuilderBaseConfig<ColumnType>, TRuntimeConfig extends object = object, TExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig> implements ColumnBuilderBase<T> {
|
|
148
148
|
static readonly [entityKind]: string;
|
|
149
149
|
_: T;
|
|
150
150
|
constructor(name: string, dataType: ColumnType, columnType: string);
|
package/column-builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-builder.js","names":[],"sources":["../src/column-builder.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { CockroachColumn, ExtraConfigColumn as CockroachExtraConfigColumn } from './cockroach-core/index.ts';\nimport type { Column, ColumnBaseConfig } from './column.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './gel-core/index.ts';\nimport type { MsSqlColumn } from './mssql-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'array'\n\t| 'bigint'\n\t| 'boolean'\n\t| 'custom'\n\t| 'number'\n\t| 'object'\n\t| 'string';\n\nexport type ColumnDataArrayConstraint =\n\t| 'vector'\n\t| 'int64vector'\n\t| 'halfvector'\n\t| 'basecolumn'\n\t| 'point'\n\t| 'geometry'\n\t| 'line';\n\nexport type ColumnDataBigIntConstraint = 'int64' | 'uint64';\n\nexport type ColumnDataNumberConstraint =\n\t| 'double'\n\t| 'float'\n\t| 'int8'\n\t| 'int16'\n\t| 'int24'\n\t| 'int32'\n\t| 'int53'\n\t| 'udouble'\n\t| 'ufloat'\n\t| 'uint8'\n\t| 'uint16'\n\t| 'uint24'\n\t| 'uint32'\n\t| 'uint53'\n\t| 'unsigned'\n\t| 'year';\n\nexport type ColumnDataObjectConstraint =\n\t| 'buffer'\n\t| 'date'\n\t| 'geometry'\n\t| 'json'\n\t| 'line'\n\t| 'point'\n\t// Gel-specific\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'localDate'\n\t| 'localDateTime'\n\t| 'localTime'\n\t| 'relDuration';\n\nexport type ColumnDataStringConstraint =\n\t| 'binary'\n\t| 'cidr'\n\t| 'date'\n\t| 'datetime'\n\t| 'enum'\n\t| 'inet'\n\t| 'int64'\n\t| 'interval'\n\t| 'macaddr'\n\t| 'macaddr8'\n\t| 'numeric'\n\t| 'sparsevec'\n\t| 'time'\n\t| 'timestamp'\n\t| 'uint64'\n\t| 'unumeric'\n\t| 'uuid';\n\nexport type ColumnDataConstraint =\n\t| ColumnDataArrayConstraint\n\t| ColumnDataBigIntConstraint\n\t| ColumnDataNumberConstraint\n\t| ColumnDataObjectConstraint\n\t| ColumnDataStringConstraint;\n\nexport type ColumnType =\n\t| ColumnDataType\n\t| `array ${ColumnDataArrayConstraint}`\n\t| `bigint ${ColumnDataBigIntConstraint}`\n\t| `number ${ColumnDataNumberConstraint}`\n\t| `object ${ColumnDataObjectConstraint}`\n\t| `string ${ColumnDataStringConstraint}`;\n\nexport interface ColumnTypeData<\n\tTType extends ColumnDataType = ColumnDataType,\n\tTConstraint extends ColumnDataConstraint | undefined = ColumnDataConstraint | undefined,\n> {\n\ttype: TType;\n\tconstraint: TConstraint;\n}\n\nexport type ExtractColumnTypeData<T extends ColumnType> = T extends\n\t`${infer Type extends ColumnDataType} ${infer Constraint extends ColumnDataConstraint}`\n\t? ColumnTypeData<Type, Constraint>\n\t: ColumnTypeData<Assume<T, ColumnDataType>, undefined>;\n\nexport function extractExtendedColumnType<TColumn extends Column>(\n\tcolumn: TColumn,\n): ExtractColumnTypeData<TColumn['_']['dataType']> {\n\tconst [type, constraint] = column.dataType.split(' ');\n\n\treturn { type, constraint } as any;\n}\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'mssql' | 'common' | 'gel' | 'cockroach';\n\n// TODO update description\n// 'virtual' | 'stored' for postgres\n// 'stored' for mysql\n// 'virtual' | 'persisted' for mssql\n// We should remove this option from common Column and store it per dialect common\n// Was discussed with Andrew\nexport type GeneratedStorageMode = 'virtual' | 'stored' | 'persisted';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport interface GeneratedColumnConfig<TDataType> {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n}\n\nexport interface GeneratedIdentityConfig {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n}\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnType> {\n\tdataType: TDataType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnType>,\n\tTTableName extends string,\n\tTDialect extends Dialect = 'common',\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T extends { enumValues: [string, ...string[]] } ? T['enumValues'] : undefined;\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, TDialect>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport interface ColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n}\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t\tnotNull: true;\n\t};\n};\n\nexport type IsAutoincrement<T> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T, TGenerated = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\n\nexport interface ColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnType> = ColumnBuilderBaseConfig<ColumnType>,\n> {\n\t_: T;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: T;\n\n\t/** @internal */\n\tprotected config: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig; // TODO: ??\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t: IsPrimaryKey<this>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t\t: IsPrimaryKey<this>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n\tTBuiltConfig extends ColumnBaseConfig<ColumnType> = MakeColumnConfig<TBuilder['_'], TTableName, TDialect>,\n> = TDialect extends 'pg' ? PgColumn<TBuiltConfig, {}>\n\t: TDialect extends 'mysql' ? MySqlColumn<TBuiltConfig, {}>\n\t: TDialect extends 'mssql' ? MsSqlColumn<TBuiltConfig, {}>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<TBuiltConfig, {}>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<TBuiltConfig, {}>\n\t: TDialect extends 'gel' ? GelColumn<TBuiltConfig, {}>\n\t: TDialect extends 'cockroach' ? CockroachColumn<TBuiltConfig, {}>\n\t: TDialect extends 'common' ? Column<TBuiltConfig, {}>\n\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'cockroach' ? CockroachExtraConfigColumn\n\t: TDialect extends 'gel' ? GelExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<\n\t\t\tTTableName,\n\t\t\tTConfigMap[Key],\n\t\t\tTDialect\n\t\t>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<\n\tTColumn extends Column,\n\tTAlias extends string,\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'mssql' ? MsSqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'cockroach' ? CockroachColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: never;\n"],"mappings":";;;AAgHA,SAAgB,0BACf,QACkD;CAClD,MAAM,CAAC,MAAM,cAAc,OAAO,SAAS,MAAM,IAAI;AAErD,QAAO;EAAE;EAAM;EAAY;;AA8I5B,IAAsB,gBAAtB,MAIkC;CACjC,QAAiB,cAAsB;;CAKvC,AAAU;CAEV,YAAY,MAAc,UAAsB,YAAoB;AACnE,OAAK,SAAS;GACb;GACA,WAAW,SAAS;GACpB,SAAS;GACT,SAAS;GACT,YAAY;GACZ,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,YAAY;GACZ;GACA;GACA,WAAW;GACX;;;;;;;;;;;;;CAcF,QAAmC;AAClC,SAAO;;;;;;;CAQR,UAAyB;AACxB,OAAK,OAAO,UAAU;AACtB,SAAO;;;;;;;;;CAUR,QAAQ,OAA+F;AACtG,OAAK,OAAO,UAAU;AACtB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;;;;CASR,WACC,IACsC;AACtC,OAAK,OAAO,YAAY;AACxB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,WAAW,KAAK;;;;;;;;CAShB,YACC,IACmB;AACnB,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,YAAY,KAAK;;;;;;CAOjB,aAEA;AACC,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,UAAU;AACtB,SAAO;;;CAYR,QAAQ,MAAc;AACrB,MAAI,KAAK,OAAO,SAAS,GAAI;AAC7B,OAAK,OAAO,OAAO"}
|
|
1
|
+
{"version":3,"file":"column-builder.js","names":[],"sources":["../src/column-builder.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { CockroachColumn, ExtraConfigColumn as CockroachExtraConfigColumn } from './cockroach-core/index.ts';\nimport type { Column, ColumnBaseConfig } from './column.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './gel-core/index.ts';\nimport type { MsSqlColumn } from './mssql-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'array'\n\t| 'bigint'\n\t| 'boolean'\n\t| 'custom'\n\t| 'number'\n\t| 'object'\n\t| 'string';\n\nexport type ColumnDataArrayConstraint =\n\t| 'vector'\n\t| 'int64vector'\n\t| 'halfvector'\n\t| 'basecolumn'\n\t| 'point'\n\t| 'geometry'\n\t| 'line';\n\nexport type ColumnDataBigIntConstraint = 'int64' | 'uint64';\n\nexport type ColumnDataNumberConstraint =\n\t| 'double'\n\t| 'float'\n\t| 'int8'\n\t| 'int16'\n\t| 'int24'\n\t| 'int32'\n\t| 'int53'\n\t| 'udouble'\n\t| 'ufloat'\n\t| 'uint8'\n\t| 'uint16'\n\t| 'uint24'\n\t| 'uint32'\n\t| 'uint53'\n\t| 'unsigned'\n\t| 'year';\n\nexport type ColumnDataObjectConstraint =\n\t| 'buffer'\n\t| 'date'\n\t| 'geometry'\n\t| 'json'\n\t| 'line'\n\t| 'point'\n\t// Gel-specific\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'localDate'\n\t| 'localDateTime'\n\t| 'localTime'\n\t| 'relDuration';\n\nexport type ColumnDataStringConstraint =\n\t| 'binary'\n\t| 'cidr'\n\t| 'date'\n\t| 'datetime'\n\t| 'enum'\n\t| 'inet'\n\t| 'int64'\n\t| 'interval'\n\t| 'macaddr'\n\t| 'macaddr8'\n\t| 'numeric'\n\t| 'sparsevec'\n\t| 'time'\n\t| 'timestamp'\n\t| 'uint64'\n\t| 'unumeric'\n\t| 'uuid';\n\nexport type ColumnDataConstraint =\n\t| ColumnDataArrayConstraint\n\t| ColumnDataBigIntConstraint\n\t| ColumnDataNumberConstraint\n\t| ColumnDataObjectConstraint\n\t| ColumnDataStringConstraint;\n\nexport type ColumnType =\n\t| ColumnDataType\n\t| `array ${ColumnDataArrayConstraint}`\n\t| `bigint ${ColumnDataBigIntConstraint}`\n\t| `number ${ColumnDataNumberConstraint}`\n\t| `object ${ColumnDataObjectConstraint}`\n\t| `string ${ColumnDataStringConstraint}`;\n\nexport interface ColumnTypeData<\n\tTType extends ColumnDataType = ColumnDataType,\n\tTConstraint extends ColumnDataConstraint | undefined = ColumnDataConstraint | undefined,\n> {\n\ttype: TType;\n\tconstraint: TConstraint;\n}\n\nexport type ExtractColumnTypeData<T extends ColumnType> = T extends\n\t`${infer Type extends ColumnDataType} ${infer Constraint extends ColumnDataConstraint}`\n\t? ColumnTypeData<Type, Constraint>\n\t: ColumnTypeData<Assume<T, ColumnDataType>, undefined>;\n\nexport function extractExtendedColumnType<TColumn extends Column>(\n\tcolumn: TColumn,\n): ExtractColumnTypeData<TColumn['_']['dataType']> {\n\tconst [type, constraint] = column.dataType.split(' ');\n\n\treturn { type, constraint } as any;\n}\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'mssql' | 'common' | 'gel' | 'cockroach';\n\n// TODO update description\n// 'virtual' | 'stored' for postgres\n// 'stored' for mysql\n// 'virtual' | 'persisted' for mssql\n// We should remove this option from common Column and store it per dialect common\n// Was discussed with Andrew\nexport type GeneratedStorageMode = 'virtual' | 'stored' | 'persisted';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport interface GeneratedColumnConfig<TDataType> {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n}\n\nexport interface GeneratedIdentityConfig {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n}\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnType> {\n\tdataType: TDataType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnType>,\n\tTTableName extends string,\n\tTDialect extends Dialect = 'common',\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T extends { enumValues: [string, ...string[]] } ? T['enumValues'] : undefined;\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, TDialect>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport interface ColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n}\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t\tnotNull: true;\n\t};\n};\n\nexport type IsAutoincrement<T> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T, TGenerated = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\n\nexport interface ColumnBuilderBase<\n\tout T extends ColumnBuilderBaseConfig<ColumnType> = ColumnBuilderBaseConfig<ColumnType>,\n> {\n\t_: T;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tout T extends ColumnBuilderBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: T;\n\n\t/** @internal */\n\tprotected config: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig; // TODO: ??\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t: IsPrimaryKey<this>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<this>>\n\t\t\t: IsPrimaryKey<this>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n\tTBuiltConfig extends ColumnBaseConfig<ColumnType> = MakeColumnConfig<TBuilder['_'], TTableName, TDialect>,\n> = TDialect extends 'pg' ? PgColumn<TBuiltConfig, {}>\n\t: TDialect extends 'mysql' ? MySqlColumn<TBuiltConfig, {}>\n\t: TDialect extends 'mssql' ? MsSqlColumn<TBuiltConfig, {}>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<TBuiltConfig, {}>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<TBuiltConfig, {}>\n\t: TDialect extends 'gel' ? GelColumn<TBuiltConfig, {}>\n\t: TDialect extends 'cockroach' ? CockroachColumn<TBuiltConfig, {}>\n\t: TDialect extends 'common' ? Column<TBuiltConfig, {}>\n\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'cockroach' ? CockroachExtraConfigColumn\n\t: TDialect extends 'gel' ? GelExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<\n\t\t\tTTableName,\n\t\t\tTConfigMap[Key],\n\t\t\tTDialect\n\t\t>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<\n\tTColumn extends Column,\n\tTAlias extends string,\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'mssql' ? MsSqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: TDialect extends 'cockroach' ? CockroachColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t: never;\n"],"mappings":";;;AAgHA,SAAgB,0BACf,QACkD;CAClD,MAAM,CAAC,MAAM,cAAc,OAAO,SAAS,MAAM,IAAI;AAErD,QAAO;EAAE;EAAM;EAAY;;AA8I5B,IAAsB,gBAAtB,MAIkC;CACjC,QAAiB,cAAsB;;CAKvC,AAAU;CAEV,YAAY,MAAc,UAAsB,YAAoB;AACnE,OAAK,SAAS;GACb;GACA,WAAW,SAAS;GACpB,SAAS;GACT,SAAS;GACT,YAAY;GACZ,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,YAAY;GACZ;GACA;GACA,WAAW;GACX;;;;;;;;;;;;;CAcF,QAAmC;AAClC,SAAO;;;;;;;CAQR,UAAyB;AACxB,OAAK,OAAO,UAAU;AACtB,SAAO;;;;;;;;;CAUR,QAAQ,OAA+F;AACtG,OAAK,OAAO,UAAU;AACtB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;;;;CASR,WACC,IACsC;AACtC,OAAK,OAAO,YAAY;AACxB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,WAAW,KAAK;;;;;;;;CAShB,YACC,IACmB;AACnB,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,YAAY,KAAK;;;;;;CAOjB,aAEA;AACC,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,UAAU;AACtB,SAAO;;;CAYR,QAAQ,MAAc;AACrB,MAAI,KAAK,OAAO,SAAS,GAAI;AAC7B,OAAK,OAAO,OAAO"}
|
package/column.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column.cjs","names":["entityKind","OriginalColumn"],"sources":["../src/column.ts"],"sourcesContent":["import type {\n\tColumnBuilderRuntimeConfig,\n\tColumnType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { OriginalColumn } from './column-common.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport type Columns = Record<string, Column<any>>;\n\nexport interface ColumnBaseConfig<TDataType extends ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n}\n\nexport interface Column<\n\
|
|
1
|
+
{"version":3,"file":"column.cjs","names":["entityKind","OriginalColumn"],"sources":["../src/column.ts"],"sourcesContent":["import type {\n\tColumnBuilderRuntimeConfig,\n\tColumnType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { OriginalColumn } from './column-common.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport type Columns = Record<string, Column<any>>;\n\nexport interface ColumnBaseConfig<TDataType extends ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n\tgenerated: unknown;\n\tidentity: undefined | 'always' | 'byDefault';\n}\n\nexport interface Column<\n\tout T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTRuntimeConfig extends object = object,\n> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n\t// `as` runtime implementation is defined in 'alias.ts'\n\tas(alias: string): this;\n}\n\n/*\n\t`Column` only accepts a full `ColumnConfig` as its generic.\n\tTo infer parts of the config, use `AnyColumn` that accepts a partial config.\n\tSee `GetColumnData` for example usage of inferring.\n*/\nexport abstract class Column<\n\tout T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = object,\n> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Column';\n\n\tdeclare readonly _: T;\n\n\treadonly name: string;\n\treadonly keyAsName: boolean;\n\treadonly primary: boolean;\n\treadonly notNull: boolean;\n\treadonly default: T['data'] | SQL | undefined;\n\treadonly defaultFn: (() => T['data'] | SQL) | undefined;\n\treadonly onUpdateFn: (() => T['data'] | SQL) | undefined;\n\treadonly hasDefault: boolean;\n\treadonly isUnique: boolean;\n\treadonly uniqueName: string | undefined;\n\treadonly uniqueType: string | undefined;\n\treadonly dataType: T['dataType'];\n\treadonly columnType: string;\n\treadonly enumValues: T['enumValues'] = undefined;\n\treadonly generated: GeneratedColumnConfig<T['data']> | undefined = undefined;\n\treadonly generatedIdentity: GeneratedIdentityConfig | undefined = undefined;\n\treadonly length: number | undefined;\n\treadonly isLengthExact: boolean | undefined;\n\treadonly isAlias: boolean;\n\n\t/** @internal */\n\tprotected config: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\t/** @internal */\n\treadonly table: Table;\n\n\t/** @internal */\n\tprotected onInit(): void {}\n\n\tconstructor(\n\t\ttable: Table,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig,\n\t) {\n\t\tthis.config = config;\n\t\tthis.onInit();\n\t\tthis.table = table;\n\n\t\tthis.name = config.name;\n\t\tthis.isAlias = false;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType as T['dataType'];\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t\tthis.length = (<{ length?: number }> config)['length'];\n\t\tthis.isLengthExact = (<{ isLengthExact?: boolean }> config)['isLengthExact'];\n\t}\n\n\tabstract getSQLType(): string;\n\n\tmapFromDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\tmapToDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\t// ** @internal */\n\tshouldDisableInsert(): boolean {\n\t\treturn this.config.generated !== undefined && this.config.generated.type !== 'byDefault';\n\t}\n\n\t/** @internal */\n\t[OriginalColumn](): this {\n\t\treturn this;\n\t}\n}\n\nexport type UpdateColConfig<\n\tT extends ColumnBaseConfig<ColumnType>,\n\tTUpdate extends Partial<ColumnBaseConfig<ColumnType>>,\n> = Update<T, TUpdate>;\n\nexport type AnyColumn<TPartial extends Partial<ColumnBaseConfig<ColumnType>> = {}> = Column<\n\tRequired<Update<ColumnBaseConfig<ColumnType>, TPartial>>\n>;\n\nexport type GetColumnData<TColumn extends Column, TInferMode extends 'query' | 'raw' = 'query'> =\n\t// dprint-ignore\n\tTInferMode extends 'raw' // Raw mode\n\t\t? TColumn['_']['data'] // Just return the underlying type\n\t\t: TColumn['_']['notNull'] extends true // Query mode\n\t\t? TColumn['_']['data'] // Query mode, not null\n\t\t: TColumn['_']['data'] | null; // Query mode, nullable\n\nexport type InferColumnsDataTypes<TColumns extends Record<string, Column>> = {\n\t[Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;\n};\n\nexport function getColumnTable<TTable extends Table<any> = Table<any>>(column: Column<any>): TTable {\n\treturn column.table as TTable;\n}\n"],"mappings":";;;;AA6CA,IAAsB,SAAtB,MAGwE;CACvE,QAAiBA,6BAAsB;CAIvC,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS,aAA8B;CACvC,AAAS,YAA0D;CACnE,AAAS,oBAAyD;CAClE,AAAS;CACT,AAAS;CACT,AAAS;;CAGT,AAAU;;CAGV,AAAS;;CAGT,AAAU,SAAe;CAEzB,YACC,OACA,QACC;AACD,OAAK,SAAS;AACd,OAAK,QAAQ;AACb,OAAK,QAAQ;AAEb,OAAK,OAAO,OAAO;AACnB,OAAK,UAAU;AACf,OAAK,YAAY,OAAO;AACxB,OAAK,UAAU,OAAO;AACtB,OAAK,UAAU,OAAO;AACtB,OAAK,YAAY,OAAO;AACxB,OAAK,aAAa,OAAO;AACzB,OAAK,aAAa,OAAO;AACzB,OAAK,UAAU,OAAO;AACtB,OAAK,WAAW,OAAO;AACvB,OAAK,aAAa,OAAO;AACzB,OAAK,aAAa,OAAO;AACzB,OAAK,WAAW,OAAO;AACvB,OAAK,aAAa,OAAO;AACzB,OAAK,YAAY,OAAO;AACxB,OAAK,oBAAoB,OAAO;AAChC,OAAK,SAAgC,OAAQ;AAC7C,OAAK,gBAA+C,OAAQ;;CAK7D,mBAAmB,OAAyB;AAC3C,SAAO;;CAGR,iBAAiB,OAAyB;AACzC,SAAO;;CAIR,sBAA+B;AAC9B,SAAO,KAAK,OAAO,cAAc,UAAa,KAAK,OAAO,UAAU,SAAS;;;CAI9E,CAACC,wCAAwB;AACxB,SAAO;;;AAyBT,SAAgB,eAAuD,QAA6B;AACnG,QAAO,OAAO"}
|
package/column.d.cts
CHANGED
|
@@ -16,15 +16,15 @@ export interface ColumnBaseConfig<TDataType extends ColumnType> {
|
|
|
16
16
|
data: unknown;
|
|
17
17
|
driverParam: unknown;
|
|
18
18
|
enumValues: string[] | undefined;
|
|
19
|
+
generated: unknown;
|
|
20
|
+
identity: undefined | 'always' | 'byDefault';
|
|
19
21
|
}
|
|
20
|
-
export interface Column<T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = object> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
|
|
22
|
+
export interface Column<out T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = object> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
|
|
21
23
|
as(alias: string): this;
|
|
22
24
|
}
|
|
23
|
-
export declare abstract class Column<T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = object> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
|
|
25
|
+
export declare abstract class Column<out T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = object> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
|
|
24
26
|
static readonly [entityKind]: string;
|
|
25
|
-
readonly _: T
|
|
26
|
-
identity: undefined | 'always' | 'byDefault';
|
|
27
|
-
};
|
|
27
|
+
readonly _: T;
|
|
28
28
|
readonly name: string;
|
|
29
29
|
readonly keyAsName: boolean;
|
|
30
30
|
readonly primary: boolean;
|
package/column.d.ts
CHANGED
|
@@ -16,15 +16,15 @@ export interface ColumnBaseConfig<TDataType extends ColumnType> {
|
|
|
16
16
|
data: unknown;
|
|
17
17
|
driverParam: unknown;
|
|
18
18
|
enumValues: string[] | undefined;
|
|
19
|
+
generated: unknown;
|
|
20
|
+
identity: undefined | 'always' | 'byDefault';
|
|
19
21
|
}
|
|
20
|
-
export interface Column<T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = object> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
|
|
22
|
+
export interface Column<out T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = object> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
|
|
21
23
|
as(alias: string): this;
|
|
22
24
|
}
|
|
23
|
-
export declare abstract class Column<T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = object> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
|
|
25
|
+
export declare abstract class Column<out T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = object> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
|
|
24
26
|
static readonly [entityKind]: string;
|
|
25
|
-
readonly _: T
|
|
26
|
-
identity: undefined | 'always' | 'byDefault';
|
|
27
|
-
};
|
|
27
|
+
readonly _: T;
|
|
28
28
|
readonly name: string;
|
|
29
29
|
readonly keyAsName: boolean;
|
|
30
30
|
readonly primary: boolean;
|
package/column.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column.js","names":[],"sources":["../src/column.ts"],"sourcesContent":["import type {\n\tColumnBuilderRuntimeConfig,\n\tColumnType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { OriginalColumn } from './column-common.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport type Columns = Record<string, Column<any>>;\n\nexport interface ColumnBaseConfig<TDataType extends ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n}\n\nexport interface Column<\n\
|
|
1
|
+
{"version":3,"file":"column.js","names":[],"sources":["../src/column.ts"],"sourcesContent":["import type {\n\tColumnBuilderRuntimeConfig,\n\tColumnType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { OriginalColumn } from './column-common.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport type Columns = Record<string, Column<any>>;\n\nexport interface ColumnBaseConfig<TDataType extends ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n\tgenerated: unknown;\n\tidentity: undefined | 'always' | 'byDefault';\n}\n\nexport interface Column<\n\tout T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTRuntimeConfig extends object = object,\n> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n\t// `as` runtime implementation is defined in 'alias.ts'\n\tas(alias: string): this;\n}\n\n/*\n\t`Column` only accepts a full `ColumnConfig` as its generic.\n\tTo infer parts of the config, use `AnyColumn` that accepts a partial config.\n\tSee `GetColumnData` for example usage of inferring.\n*/\nexport abstract class Column<\n\tout T extends ColumnBaseConfig<ColumnType> = ColumnBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = object,\n> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Column';\n\n\tdeclare readonly _: T;\n\n\treadonly name: string;\n\treadonly keyAsName: boolean;\n\treadonly primary: boolean;\n\treadonly notNull: boolean;\n\treadonly default: T['data'] | SQL | undefined;\n\treadonly defaultFn: (() => T['data'] | SQL) | undefined;\n\treadonly onUpdateFn: (() => T['data'] | SQL) | undefined;\n\treadonly hasDefault: boolean;\n\treadonly isUnique: boolean;\n\treadonly uniqueName: string | undefined;\n\treadonly uniqueType: string | undefined;\n\treadonly dataType: T['dataType'];\n\treadonly columnType: string;\n\treadonly enumValues: T['enumValues'] = undefined;\n\treadonly generated: GeneratedColumnConfig<T['data']> | undefined = undefined;\n\treadonly generatedIdentity: GeneratedIdentityConfig | undefined = undefined;\n\treadonly length: number | undefined;\n\treadonly isLengthExact: boolean | undefined;\n\treadonly isAlias: boolean;\n\n\t/** @internal */\n\tprotected config: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\t/** @internal */\n\treadonly table: Table;\n\n\t/** @internal */\n\tprotected onInit(): void {}\n\n\tconstructor(\n\t\ttable: Table,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig,\n\t) {\n\t\tthis.config = config;\n\t\tthis.onInit();\n\t\tthis.table = table;\n\n\t\tthis.name = config.name;\n\t\tthis.isAlias = false;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType as T['dataType'];\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t\tthis.length = (<{ length?: number }> config)['length'];\n\t\tthis.isLengthExact = (<{ isLengthExact?: boolean }> config)['isLengthExact'];\n\t}\n\n\tabstract getSQLType(): string;\n\n\tmapFromDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\tmapToDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\t// ** @internal */\n\tshouldDisableInsert(): boolean {\n\t\treturn this.config.generated !== undefined && this.config.generated.type !== 'byDefault';\n\t}\n\n\t/** @internal */\n\t[OriginalColumn](): this {\n\t\treturn this;\n\t}\n}\n\nexport type UpdateColConfig<\n\tT extends ColumnBaseConfig<ColumnType>,\n\tTUpdate extends Partial<ColumnBaseConfig<ColumnType>>,\n> = Update<T, TUpdate>;\n\nexport type AnyColumn<TPartial extends Partial<ColumnBaseConfig<ColumnType>> = {}> = Column<\n\tRequired<Update<ColumnBaseConfig<ColumnType>, TPartial>>\n>;\n\nexport type GetColumnData<TColumn extends Column, TInferMode extends 'query' | 'raw' = 'query'> =\n\t// dprint-ignore\n\tTInferMode extends 'raw' // Raw mode\n\t\t? TColumn['_']['data'] // Just return the underlying type\n\t\t: TColumn['_']['notNull'] extends true // Query mode\n\t\t? TColumn['_']['data'] // Query mode, not null\n\t\t: TColumn['_']['data'] | null; // Query mode, nullable\n\nexport type InferColumnsDataTypes<TColumns extends Record<string, Column>> = {\n\t[Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;\n};\n\nexport function getColumnTable<TTable extends Table<any> = Table<any>>(column: Column<any>): TTable {\n\treturn column.table as TTable;\n}\n"],"mappings":";;;;AA6CA,IAAsB,SAAtB,MAGwE;CACvE,QAAiB,cAAsB;CAIvC,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS,aAA8B;CACvC,AAAS,YAA0D;CACnE,AAAS,oBAAyD;CAClE,AAAS;CACT,AAAS;CACT,AAAS;;CAGT,AAAU;;CAGV,AAAS;;CAGT,AAAU,SAAe;CAEzB,YACC,OACA,QACC;AACD,OAAK,SAAS;AACd,OAAK,QAAQ;AACb,OAAK,QAAQ;AAEb,OAAK,OAAO,OAAO;AACnB,OAAK,UAAU;AACf,OAAK,YAAY,OAAO;AACxB,OAAK,UAAU,OAAO;AACtB,OAAK,UAAU,OAAO;AACtB,OAAK,YAAY,OAAO;AACxB,OAAK,aAAa,OAAO;AACzB,OAAK,aAAa,OAAO;AACzB,OAAK,UAAU,OAAO;AACtB,OAAK,WAAW,OAAO;AACvB,OAAK,aAAa,OAAO;AACzB,OAAK,aAAa,OAAO;AACzB,OAAK,WAAW,OAAO;AACvB,OAAK,aAAa,OAAO;AACzB,OAAK,YAAY,OAAO;AACxB,OAAK,oBAAoB,OAAO;AAChC,OAAK,SAAgC,OAAQ;AAC7C,OAAK,gBAA+C,OAAQ;;CAK7D,mBAAmB,OAAyB;AAC3C,SAAO;;CAGR,iBAAiB,OAAyB;AACzC,SAAO;;CAIR,sBAA+B;AAC9B,SAAO,KAAK,OAAO,cAAc,UAAa,KAAK,OAAO,UAAU,SAAS;;;CAI9E,CAAC,kBAAwB;AACxB,SAAO;;;AAyBT,SAAgB,eAAuD,QAA6B;AACnG,QAAO,OAAO"}
|
package/operations.d.cts
CHANGED
|
@@ -2,19 +2,8 @@ import type { Column } from './column.cjs';
|
|
|
2
2
|
import type { SQL } from './sql/sql.cjs';
|
|
3
3
|
import type { Subquery } from './subquery.cjs';
|
|
4
4
|
import type { Table } from './table.cjs';
|
|
5
|
-
export type RequiredKeyOnly<TKey extends string, T extends Column> = T['_'] extends
|
|
6
|
-
|
|
7
|
-
hasDefault: false;
|
|
8
|
-
} ? TKey : never;
|
|
9
|
-
export type OptionalKeyOnly<TKey extends string, T extends Column, OverrideT extends boolean | undefined = false> = TKey extends RequiredKeyOnly<TKey, T> ? never : T extends {
|
|
10
|
-
_: {
|
|
11
|
-
generated: undefined;
|
|
12
|
-
};
|
|
13
|
-
} ? (T extends {
|
|
14
|
-
_: {
|
|
15
|
-
identity: undefined;
|
|
16
|
-
};
|
|
17
|
-
} ? TKey : T['_']['identity'] extends 'always' ? OverrideT extends true ? TKey : never : TKey) : never;
|
|
5
|
+
export type RequiredKeyOnly<TKey extends string, T extends Column> = T['_']['notNull'] extends true ? T['_']['hasDefault'] extends false ? TKey : never : never;
|
|
6
|
+
export type OptionalKeyOnly<TKey extends string, T extends Column, OverrideT extends boolean | undefined = false> = T['_']['notNull'] extends true ? T['_']['hasDefault'] extends false ? never : T['_']['generated'] extends undefined ? T['_']['identity'] extends undefined ? TKey : T['_']['identity'] extends 'always' ? OverrideT extends true ? TKey : never : TKey : never : T['_']['generated'] extends undefined ? T['_']['identity'] extends undefined ? TKey : T['_']['identity'] extends 'always' ? OverrideT extends true ? TKey : never : TKey : never;
|
|
18
7
|
export type SelectedFieldsFlat<TColumn extends Column> = Record<string, TColumn | SQL | SQL.Aliased | Subquery>;
|
|
19
8
|
export type SelectedFieldsFlatFull<TColumn extends Column> = Record<string, TColumn | SQL | SQL.Aliased>;
|
|
20
9
|
export type SelectedFields<TColumn extends Column, TTable extends Table> = Record<string, SelectedFieldsFlat<TColumn>[string] | TTable | SelectedFieldsFlat<TColumn>>;
|
package/operations.d.ts
CHANGED
|
@@ -2,19 +2,8 @@ import type { Column } from './column.js';
|
|
|
2
2
|
import type { SQL } from './sql/sql.js';
|
|
3
3
|
import type { Subquery } from './subquery.js';
|
|
4
4
|
import type { Table } from './table.js';
|
|
5
|
-
export type RequiredKeyOnly<TKey extends string, T extends Column> = T['_'] extends
|
|
6
|
-
|
|
7
|
-
hasDefault: false;
|
|
8
|
-
} ? TKey : never;
|
|
9
|
-
export type OptionalKeyOnly<TKey extends string, T extends Column, OverrideT extends boolean | undefined = false> = TKey extends RequiredKeyOnly<TKey, T> ? never : T extends {
|
|
10
|
-
_: {
|
|
11
|
-
generated: undefined;
|
|
12
|
-
};
|
|
13
|
-
} ? (T extends {
|
|
14
|
-
_: {
|
|
15
|
-
identity: undefined;
|
|
16
|
-
};
|
|
17
|
-
} ? TKey : T['_']['identity'] extends 'always' ? OverrideT extends true ? TKey : never : TKey) : never;
|
|
5
|
+
export type RequiredKeyOnly<TKey extends string, T extends Column> = T['_']['notNull'] extends true ? T['_']['hasDefault'] extends false ? TKey : never : never;
|
|
6
|
+
export type OptionalKeyOnly<TKey extends string, T extends Column, OverrideT extends boolean | undefined = false> = T['_']['notNull'] extends true ? T['_']['hasDefault'] extends false ? never : T['_']['generated'] extends undefined ? T['_']['identity'] extends undefined ? TKey : T['_']['identity'] extends 'always' ? OverrideT extends true ? TKey : never : TKey : never : T['_']['generated'] extends undefined ? T['_']['identity'] extends undefined ? TKey : T['_']['identity'] extends 'always' ? OverrideT extends true ? TKey : never : TKey : never;
|
|
18
7
|
export type SelectedFieldsFlat<TColumn extends Column> = Record<string, TColumn | SQL | SQL.Aliased | Subquery>;
|
|
19
8
|
export type SelectedFieldsFlatFull<TColumn extends Column> = Record<string, TColumn | SQL | SQL.Aliased>;
|
|
20
9
|
export type SelectedFields<TColumn extends Column, TTable extends Table> = Record<string, SelectedFieldsFlat<TColumn>[string] | TTable | SelectedFieldsFlat<TColumn>>;
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.cjs","names":["entityKind","ForeignKeyBuilder","ref","config","Column","parsePgArray","makePgArray"],"sources":["../../../src/pg-core/columns/common.ts"],"sourcesContent":["import type { ColumnType, GeneratedColumnConfig, GeneratedIdentityConfig } from '~/column-builder.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { ForeignKey, UpdateDeleteAction } from '~/pg-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/pg-core/foreign-keys.ts';\nimport type { AnyPgTable, PgTable } from '~/pg-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { iife } from '~/tracing-utils.ts';\nimport type { Update } from '~/utils.ts';\nimport type { PgIndexOpClass } from '../indexes.ts';\nimport type { PgSequenceOptions } from '../sequence.ts';\nimport { makePgArray, parsePgArray } from '../utils/array.ts';\n\ndeclare const PgColumnBuilderBrand: unique symbol;\nexport type PgColumnBuilderBrand = typeof PgColumnBuilderBrand;\n\nexport type PgArrayDimension = 0 | 1 | 2 | 3 | 4 | 5;\ntype PgArrayDimensionString = '[]' | '[][]' | '[][][]' | '[][][][]' | '[][][][][]';\n\ntype ArrayDimensionStringToNumber<T extends PgArrayDimensionString> = T extends '[]' ? 1\n\t: T extends '[][]' ? 2\n\t: T extends '[][][]' ? 3\n\t: T extends '[][][][]' ? 4\n\t: T extends '[][][][][]' ? 5\n\t: never;\n\nexport interface PgColumnBuilderConfig {\n\tdataType: ColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\t// Optional - set via chain methods\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n\tisPrimaryKey?: boolean;\n\tisAutoincrement?: boolean;\n\thasRuntimeDefault?: boolean;\n\tenumValues?: string[];\n\tidentity?: 'always' | 'byDefault';\n\tgenerated?: unknown;\n\tdimensions?: PgArrayDimension;\n\t$type?: unknown;\n}\n\nexport interface PgColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n\tdimensions?: PgArrayDimension;\n}\n\n// TODO: remove isAutoincrement and hasRuntimeDefault\nexport interface PgColumnBaseConfig<TDataType extends ColumnType = ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n}\n\ntype WrapArray<T, N extends number> = N extends 1 ? T[]\n\t: N extends 2 ? T[][]\n\t: N extends 3 ? T[][][]\n\t: N extends 4 ? T[][][][]\n\t: N extends 5 ? T[][][][][]\n\t: T;\n\nexport type SetNotNull<T> = T & { readonly [PgColumnBuilderBrand]: { notNull: true } };\nexport type SetHasDefault<T> = T & { readonly [PgColumnBuilderBrand]: { hasDefault: true } };\nexport type SetIsPrimaryKey<T> = T & { readonly [PgColumnBuilderBrand]: { isPrimaryKey: true; notNull: true } };\nexport type SetHasRuntimeDefault<T> = T & {\n\treadonly [PgColumnBuilderBrand]: { hasRuntimeDefault: true; hasDefault: true };\n};\nexport type Set$Type<T, TType> = T & { readonly [PgColumnBuilderBrand]: { $type: TType } };\nexport type SetHasGenerated<T> = T & {\n\treadonly [PgColumnBuilderBrand]: { hasDefault: true; generated: { type: 'always' } };\n};\nexport type SetDimensions<T, TDim extends PgArrayDimension> = T & {\n\treadonly [PgColumnBuilderBrand]: { dimensions: TDim };\n};\nexport type SetIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\treadonly [PgColumnBuilderBrand]: { notNull: true; hasDefault: true; identity: TType };\n};\n\nexport type HasIdentity<T extends PgColumnBuilder, TType extends 'always' | 'byDefault'> = SetIdentity<T, TType>;\n\ntype GetBaseData<T> = T extends { $type: infer U } ? U : T extends { data: infer D } ? D : unknown;\n\nexport type ResolvePgColumnConfig<\n\tT extends PgColumnBuilderConfig,\n\tTTableName extends string,\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<GetBaseData<T>, T['dimensions']>\n\t\t: GetBaseData<T>;\n\tdriverParam: T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<T['driverParam'], T['dimensions']> | string\n\t\t: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: T['isPrimaryKey'] extends true ? true : false;\n\tisAutoincrement: T['isAutoincrement'] extends true ? true : false;\n\thasRuntimeDefault: T['hasRuntimeDefault'] extends true ? true : false;\n\tenumValues: T extends { enumValues: infer E extends string[] } ? E : undefined;\n\tidentity: T['identity'] extends 'always' | 'byDefault' ? T['identity'] : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined : G : undefined;\n} & {};\n\nexport interface AnyPgColumnBuilder {\n\treadonly [PgColumnBuilderBrand]: PgColumnBuilderConfig;\n}\n\nexport type PgBuildColumn<\n\tTTableName extends string,\n\tTBuilder extends AnyPgColumnBuilder,\n\tTBuiltConfig extends PgColumnBaseConfig<ColumnType> = ResolvePgColumnConfig<\n\t\tTBuilder[PgColumnBuilderBrand],\n\t\tTTableName\n\t>,\n> = PgColumn<TBuiltConfig, {}>;\n\nexport type PgBuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: PgBuildColumn<TTableName, TConfigMap[Key]>;\n\t}\n\t& {};\n\nexport type PgBuildExtraConfigColumns<\n\tTConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: ExtraConfigColumn;\n\t}\n\t& {};\n\nexport type PgColumns = Record<string, PgColumn<any>>;\n\nexport interface ReferenceConfig {\n\tref: () => PgColumn;\n\tconfig: {\n\t\tname?: string;\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport abstract class PgColumnBuilder<\n\tT extends PgColumnBuilderConfig = PgColumnBuilderConfig,\n\tTRuntimeConfig extends object = object,\n> {\n\tstatic readonly [entityKind]: string = 'PgColumnBuilder';\n\n\tdeclare readonly [PgColumnBuilderBrand]: T;\n\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\tprotected config: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t\tdefaultFn: undefined,\n\t\t\tonUpdateFn: undefined,\n\t\t\tgeneratedIdentity: undefined,\n\t\t} as PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): Set$Type<this, TType> {\n\t\treturn this as Set$Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): SetNotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as SetNotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(\n\t\tvalue:\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () =>\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasRuntimeDefault<this> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasRuntimeDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () =>\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): SetIsPrimaryKey<this> {\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as SetIsPrimaryKey<this>;\n\t}\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n\n\t/**\n\t * Makes this column a PostgreSQL array column.\n\t *\n\t * @example\n\t * ```ts\n\t * const t = pgTable('t', {\n\t * // 1D array: number[]\n\t * tags: integer().array(),\n\t * // Or explicitly: integer().array('[]')\n\t * // 2D array: number[][]\n\t * matrix: integer().array('[][]'),\n\t * });\n\t * ```\n\t */\n\tarray(): SetDimensions<this, 1>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions?: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>> {\n\t\t// Calculate dimensions as number from string notation\n\t\tconst dim = dimensions ?? '[]';\n\t\t(this.config as any).dimensions = (dim.length / 2) as PgArrayDimension;\n\t\treturn this as SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\t}\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tconfig: ReferenceConfig['config'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, config });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t\tconfig?: { nulls: 'distinct' | 'not distinct' },\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\tthis.config.uniqueType = config?.nulls;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(\n\t\tas:\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL\n\t\t\t| (() => SQL),\n\t): SetHasGenerated<this> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: 'stored',\n\t\t};\n\t\treturn this as SetHasGenerated<this>;\n\t}\n\n\t/**\n\t * Adds a `default now()` clause to the column definition.\n\t * Available for date/time column types.\n\t */\n\tdefaultNow(): SetHasDefault<this> {\n\t\treturn this.default(sql`now()`);\n\t}\n\n\t/**\n\t * Adds an `ALWAYS AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedAlwaysAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'always'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'always'>;\n\t}\n\n\t/**\n\t * Adds a `BY DEFAULT AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedByDefaultAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'byDefault'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'byDefault'>;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: PgColumn, table: PgTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, config }) => {\n\t\t\treturn iife(\n\t\t\t\t(ref, config) => {\n\t\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\t\treturn { name: config.name, columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t\t});\n\t\t\t\t\tif (config.onUpdate) {\n\t\t\t\t\t\tbuilder.onUpdate(config.onUpdate);\n\t\t\t\t\t}\n\t\t\t\t\tif (config.onDelete) {\n\t\t\t\t\t\tbuilder.onDelete(config.onDelete);\n\t\t\t\t\t}\n\t\t\t\t\treturn builder.build(table);\n\t\t\t\t},\n\t\t\t\tref,\n\t\t\t\tconfig,\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build(table: PgTable): PgColumn<any>;\n\n\t/** @internal */\n\tbuildExtraConfigColumn<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): ExtraConfigColumn {\n\t\treturn new ExtraConfigColumn(table, { ...this.config, dimensions: (this.config as any).dimensions ?? 0 });\n\t}\n}\n\n// TODO: we should potenitally do column to be\n// in charge of map value/array of values/json value and json array of values in 1 place\nexport abstract class PgColumn<\n\tT extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = {},\n> extends Column<T, TRuntimeConfig> {\n\tstatic override readonly [entityKind]: string = 'PgColumn';\n\n\t/** @internal */\n\toverride readonly table: PgTable;\n\n\treadonly dimensions: PgArrayDimension;\n\n\tconstructor(\n\t\ttable: PgTable,\n\t\tconfig: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig,\n\t) {\n\t\tsuper(table, config);\n\t\tthis.table = table;\n\t\tthis.dimensions = config.dimensions ?? 0;\n\n\t\t// Wrap mapFromDriverValue/mapToDriverValue with array handling if this is an array column\n\t\tif (this.dimensions) {\n\t\t\tconst originalFromDriver = this.mapFromDriverValue.bind(this);\n\t\t\tconst originalToDriver = this.mapToDriverValue.bind(this);\n\n\t\t\tthis.mapFromDriverValue = (value: unknown): unknown => {\n\t\t\t\tif (value === null) return value;\n\t\t\t\t// Parse string representation if needed (e.g., from node-postgres for enum arrays)\n\t\t\t\tconst arr = typeof value === 'string' ? parsePgArray(value) : value as unknown[];\n\t\t\t\treturn this.mapArrayElements(arr, originalFromDriver, this.dimensions);\n\t\t\t};\n\n\t\t\tthis.mapToDriverValue = (value: unknown): unknown => {\n\t\t\t\tif (value === null) return value;\n\t\t\t\tconst mapped = this.mapArrayElements(value as unknown[], originalToDriver, this.dimensions);\n\t\t\t\treturn makePgArray(mapped as any[]);\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @internal */\n\tprivate mapArrayElements(value: unknown, mapper: (v: unknown) => unknown, depth: number): unknown {\n\t\tif (depth > 0 && Array.isArray(value)) {\n\t\t\treturn value.map((v) => v === null ? null : this.mapArrayElements(v, mapper, depth - 1));\n\t\t}\n\t\treturn mapper(value);\n\t}\n}\n\nexport type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string };\n\nexport class ExtraConfigColumn<\n\tT extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>,\n> extends PgColumn<T, IndexedExtraConfigType> {\n\tstatic override readonly [entityKind]: string = 'ExtraConfigColumn';\n\n\toverride getSQLType(): string {\n\t\treturn this.getSQLType();\n\t}\n\n\tindexConfig: IndexedExtraConfigType = {\n\t\torder: this.config.order ?? 'asc',\n\t\tnulls: this.config.nulls ?? 'last',\n\t\topClass: this.config.opClass,\n\t};\n\tdefaultConfig: IndexedExtraConfigType = {\n\t\torder: 'asc',\n\t\tnulls: 'last',\n\t\topClass: undefined,\n\t};\n\n\tasc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'asc';\n\t\treturn this;\n\t}\n\n\tdesc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'desc';\n\t\treturn this;\n\t}\n\n\tnullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'first';\n\t\treturn this;\n\t}\n\n\tnullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'last';\n\t\treturn this;\n\t}\n\n\t/**\n\t * ### PostgreSQL documentation quote\n\t *\n\t * > An operator class with optional parameters can be specified for each column of an index.\n\t * The operator class identifies the operators to be used by the index for that column.\n\t * For example, a B-tree index on four-byte integers would use the int4_ops class;\n\t * this operator class includes comparison functions for four-byte integers.\n\t * In practice the default operator class for the column's data type is usually sufficient.\n\t * The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.\n\t * For example, we might want to sort a complex-number data type either by absolute value or by real part.\n\t * We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.\n\t * More information about operator classes check:\n\t *\n\t * ### Useful links\n\t * https://www.postgresql.org/docs/current/sql-createindex.html\n\t *\n\t * https://www.postgresql.org/docs/current/indexes-opclass.html\n\t *\n\t * https://www.postgresql.org/docs/current/xindex.html\n\t *\n\t * ### Additional types\n\t * If you have the `pg_vector` extension installed in your database, you can use the\n\t * `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param opClass\n\t * @returns\n\t */\n\top(opClass: PgIndexOpClass): Omit<this, 'op'> {\n\t\tthis.indexConfig.opClass = opClass;\n\t\treturn this;\n\t}\n}\n\nexport class IndexedColumn {\n\tstatic readonly [entityKind]: string = 'IndexedColumn';\n\tconstructor(\n\t\tname: string | undefined,\n\t\tkeyAsName: boolean,\n\t\ttype: string,\n\t\tindexConfig: IndexedExtraConfigType,\n\t) {\n\t\tthis.name = name;\n\t\tthis.keyAsName = keyAsName;\n\t\tthis.type = type;\n\t\tthis.indexConfig = indexConfig;\n\t}\n\n\tname: string | undefined;\n\tkeyAsName: boolean;\n\ttype: string;\n\tindexConfig: IndexedExtraConfigType;\n}\n\nexport type AnyPgColumn<TPartial extends Partial<PgColumnBaseConfig<ColumnType>> = {}> = PgColumn<\n\tRequired<Update<PgColumnBaseConfig<ColumnType>, TPartial>>\n>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"common.cjs","names":["entityKind","ForeignKeyBuilder","ref","config","Column","parsePgArray","makePgArray"],"sources":["../../../src/pg-core/columns/common.ts"],"sourcesContent":["import type { ColumnType, GeneratedColumnConfig, GeneratedIdentityConfig } from '~/column-builder.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { ForeignKey, UpdateDeleteAction } from '~/pg-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/pg-core/foreign-keys.ts';\nimport type { AnyPgTable, PgTable } from '~/pg-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { iife } from '~/tracing-utils.ts';\nimport type { Update } from '~/utils.ts';\nimport type { PgIndexOpClass } from '../indexes.ts';\nimport type { PgSequenceOptions } from '../sequence.ts';\nimport { makePgArray, parsePgArray } from '../utils/array.ts';\n\ndeclare const PgColumnBuilderBrand: unique symbol;\nexport type PgColumnBuilderBrand = typeof PgColumnBuilderBrand;\n\nexport type PgArrayDimension = 0 | 1 | 2 | 3 | 4 | 5;\ntype PgArrayDimensionString = '[]' | '[][]' | '[][][]' | '[][][][]' | '[][][][][]';\n\ntype ArrayDimensionStringToNumber<T extends PgArrayDimensionString> = T extends '[]' ? 1\n\t: T extends '[][]' ? 2\n\t: T extends '[][][]' ? 3\n\t: T extends '[][][][]' ? 4\n\t: T extends '[][][][][]' ? 5\n\t: never;\n\nexport interface PgColumnBuilderConfig {\n\tdataType: ColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\t// Optional - set via chain methods\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n\tisPrimaryKey?: boolean;\n\tisAutoincrement?: boolean;\n\thasRuntimeDefault?: boolean;\n\tenumValues?: string[];\n\tidentity?: 'always' | 'byDefault';\n\tgenerated?: unknown;\n\tdimensions?: PgArrayDimension;\n\t$type?: unknown;\n}\n\nexport interface PgColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n\tdimensions?: PgArrayDimension;\n}\n\n// TODO: remove isAutoincrement and hasRuntimeDefault\nexport interface PgColumnBaseConfig<TDataType extends ColumnType = ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n\tgenerated: unknown;\n\tidentity: undefined | 'always' | 'byDefault';\n}\n\ntype WrapArray<T, N extends number> = N extends 1 ? T[]\n\t: N extends 2 ? T[][]\n\t: N extends 3 ? T[][][]\n\t: N extends 4 ? T[][][][]\n\t: N extends 5 ? T[][][][][]\n\t: T;\n\nexport type SetNotNull<T> = T & { readonly [PgColumnBuilderBrand]: { notNull: true } };\nexport type SetHasDefault<T> = T & { readonly [PgColumnBuilderBrand]: { hasDefault: true } };\nexport type SetIsPrimaryKey<T> = T & { readonly [PgColumnBuilderBrand]: { isPrimaryKey: true; notNull: true } };\nexport type SetHasRuntimeDefault<T> = T & {\n\treadonly [PgColumnBuilderBrand]: { hasRuntimeDefault: true; hasDefault: true };\n};\nexport type Set$Type<T, TType> = T & { readonly [PgColumnBuilderBrand]: { $type: TType } };\nexport type SetHasGenerated<T> = T & {\n\treadonly [PgColumnBuilderBrand]: { hasDefault: true; generated: { type: 'always' } };\n};\nexport type SetDimensions<T, TDim extends PgArrayDimension> = T & {\n\treadonly [PgColumnBuilderBrand]: { dimensions: TDim };\n};\nexport type SetIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\treadonly [PgColumnBuilderBrand]: { notNull: true; hasDefault: true; identity: TType };\n};\n\nexport type HasIdentity<T extends PgColumnBuilder, TType extends 'always' | 'byDefault'> = SetIdentity<T, TType>;\n\ntype GetBaseData<T> = T extends { $type: infer U } ? U : T extends { data: infer D } ? D : unknown;\n\nexport type ResolvePgColumnConfig<\n\tT extends PgColumnBuilderConfig,\n\tTTableName extends string,\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<GetBaseData<T>, T['dimensions']>\n\t\t: GetBaseData<T>;\n\tdriverParam: T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<T['driverParam'], T['dimensions']> | string\n\t\t: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: T['isPrimaryKey'] extends true ? true : false;\n\tisAutoincrement: T['isAutoincrement'] extends true ? true : false;\n\thasRuntimeDefault: T['hasRuntimeDefault'] extends true ? true : false;\n\tenumValues: T extends { enumValues: infer E extends string[] } ? E : undefined;\n\tidentity: T['identity'] extends 'always' | 'byDefault' ? T['identity'] : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined : G : undefined;\n} & {};\n\nexport interface AnyPgColumnBuilder {\n\treadonly [PgColumnBuilderBrand]: PgColumnBuilderConfig;\n}\n\nexport type PgBuildColumn<\n\tTTableName extends string,\n\tTBuilder extends AnyPgColumnBuilder,\n\tTBuiltConfig extends PgColumnBaseConfig<ColumnType> = ResolvePgColumnConfig<\n\t\tTBuilder[PgColumnBuilderBrand],\n\t\tTTableName\n\t>,\n> = PgColumn<TBuiltConfig, {}>;\n\nexport type PgBuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: PgBuildColumn<TTableName, TConfigMap[Key]>;\n\t}\n\t& {};\n\nexport type PgBuildExtraConfigColumns<\n\tTConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: ExtraConfigColumn;\n\t}\n\t& {};\n\nexport type PgColumns = Record<string, PgColumn<any>>;\n\nexport interface ReferenceConfig {\n\tref: () => PgColumn;\n\tconfig: {\n\t\tname?: string;\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport abstract class PgColumnBuilder<\n\tout T extends PgColumnBuilderConfig = PgColumnBuilderConfig,\n\tTRuntimeConfig extends object = object,\n> {\n\tstatic readonly [entityKind]: string = 'PgColumnBuilder';\n\n\tdeclare readonly [PgColumnBuilderBrand]: T;\n\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\tprotected config: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t\tdefaultFn: undefined,\n\t\t\tonUpdateFn: undefined,\n\t\t\tgeneratedIdentity: undefined,\n\t\t} as PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): Set$Type<this, TType> {\n\t\treturn this as Set$Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): SetNotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as SetNotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(\n\t\tvalue:\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () =>\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasRuntimeDefault<this> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasRuntimeDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () =>\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): SetIsPrimaryKey<this> {\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as SetIsPrimaryKey<this>;\n\t}\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n\n\t/**\n\t * Makes this column a PostgreSQL array column.\n\t *\n\t * @example\n\t * ```ts\n\t * const t = pgTable('t', {\n\t * // 1D array: number[]\n\t * tags: integer().array(),\n\t * // Or explicitly: integer().array('[]')\n\t * // 2D array: number[][]\n\t * matrix: integer().array('[][]'),\n\t * });\n\t * ```\n\t */\n\tarray(): SetDimensions<this, 1>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions?: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>> {\n\t\t// Calculate dimensions as number from string notation\n\t\tconst dim = dimensions ?? '[]';\n\t\t(this.config as any).dimensions = (dim.length / 2) as PgArrayDimension;\n\t\treturn this as SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\t}\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tconfig: ReferenceConfig['config'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, config });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t\tconfig?: { nulls: 'distinct' | 'not distinct' },\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\tthis.config.uniqueType = config?.nulls;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(\n\t\tas:\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL\n\t\t\t| (() => SQL),\n\t): SetHasGenerated<this> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: 'stored',\n\t\t};\n\t\treturn this as SetHasGenerated<this>;\n\t}\n\n\t/**\n\t * Adds a `default now()` clause to the column definition.\n\t * Available for date/time column types.\n\t */\n\tdefaultNow(): SetHasDefault<this> {\n\t\treturn this.default(sql`now()`);\n\t}\n\n\t/**\n\t * Adds an `ALWAYS AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedAlwaysAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'always'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'always'>;\n\t}\n\n\t/**\n\t * Adds a `BY DEFAULT AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedByDefaultAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'byDefault'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'byDefault'>;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: PgColumn, table: PgTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, config }) => {\n\t\t\treturn iife(\n\t\t\t\t(ref, config) => {\n\t\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\t\treturn { name: config.name, columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t\t});\n\t\t\t\t\tif (config.onUpdate) {\n\t\t\t\t\t\tbuilder.onUpdate(config.onUpdate);\n\t\t\t\t\t}\n\t\t\t\t\tif (config.onDelete) {\n\t\t\t\t\t\tbuilder.onDelete(config.onDelete);\n\t\t\t\t\t}\n\t\t\t\t\treturn builder.build(table);\n\t\t\t\t},\n\t\t\t\tref,\n\t\t\t\tconfig,\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build(table: PgTable): PgColumn<any>;\n\n\t/** @internal */\n\tbuildExtraConfigColumn<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): ExtraConfigColumn {\n\t\treturn new ExtraConfigColumn(table, { ...this.config, dimensions: (this.config as any).dimensions ?? 0 });\n\t}\n}\n\n// TODO: we should potenitally do column to be\n// in charge of map value/array of values/json value and json array of values in 1 place\nexport abstract class PgColumn<\n\tout T extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = {},\n> extends Column<T, TRuntimeConfig> {\n\tstatic override readonly [entityKind]: string = 'PgColumn';\n\n\t/** @internal */\n\toverride readonly table: PgTable;\n\n\treadonly dimensions: PgArrayDimension;\n\n\tconstructor(\n\t\ttable: PgTable,\n\t\tconfig: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig,\n\t) {\n\t\tsuper(table, config);\n\t\tthis.table = table;\n\t\tthis.dimensions = config.dimensions ?? 0;\n\n\t\t// Wrap mapFromDriverValue/mapToDriverValue with array handling if this is an array column\n\t\tif (this.dimensions) {\n\t\t\tconst originalFromDriver = this.mapFromDriverValue.bind(this);\n\t\t\tconst originalToDriver = this.mapToDriverValue.bind(this);\n\n\t\t\tthis.mapFromDriverValue = (value: unknown): unknown => {\n\t\t\t\tif (value === null) return value;\n\t\t\t\t// Parse string representation if needed (e.g., from node-postgres for enum arrays)\n\t\t\t\tconst arr = typeof value === 'string' ? parsePgArray(value) : value as unknown[];\n\t\t\t\treturn this.mapArrayElements(arr, originalFromDriver, this.dimensions);\n\t\t\t};\n\n\t\t\tthis.mapToDriverValue = (value: unknown): unknown => {\n\t\t\t\tif (value === null) return value;\n\t\t\t\tconst mapped = this.mapArrayElements(value as unknown[], originalToDriver, this.dimensions);\n\t\t\t\treturn makePgArray(mapped as any[]);\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @internal */\n\tprivate mapArrayElements(value: unknown, mapper: (v: unknown) => unknown, depth: number): unknown {\n\t\tif (depth > 0 && Array.isArray(value)) {\n\t\t\treturn value.map((v) => v === null ? null : this.mapArrayElements(v, mapper, depth - 1));\n\t\t}\n\t\treturn mapper(value);\n\t}\n}\n\nexport type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string };\n\nexport class ExtraConfigColumn<\n\tT extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>,\n> extends PgColumn<T, IndexedExtraConfigType> {\n\tstatic override readonly [entityKind]: string = 'ExtraConfigColumn';\n\n\toverride getSQLType(): string {\n\t\treturn this.getSQLType();\n\t}\n\n\tindexConfig: IndexedExtraConfigType = {\n\t\torder: this.config.order ?? 'asc',\n\t\tnulls: this.config.nulls ?? 'last',\n\t\topClass: this.config.opClass,\n\t};\n\tdefaultConfig: IndexedExtraConfigType = {\n\t\torder: 'asc',\n\t\tnulls: 'last',\n\t\topClass: undefined,\n\t};\n\n\tasc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'asc';\n\t\treturn this;\n\t}\n\n\tdesc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'desc';\n\t\treturn this;\n\t}\n\n\tnullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'first';\n\t\treturn this;\n\t}\n\n\tnullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'last';\n\t\treturn this;\n\t}\n\n\t/**\n\t * ### PostgreSQL documentation quote\n\t *\n\t * > An operator class with optional parameters can be specified for each column of an index.\n\t * The operator class identifies the operators to be used by the index for that column.\n\t * For example, a B-tree index on four-byte integers would use the int4_ops class;\n\t * this operator class includes comparison functions for four-byte integers.\n\t * In practice the default operator class for the column's data type is usually sufficient.\n\t * The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.\n\t * For example, we might want to sort a complex-number data type either by absolute value or by real part.\n\t * We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.\n\t * More information about operator classes check:\n\t *\n\t * ### Useful links\n\t * https://www.postgresql.org/docs/current/sql-createindex.html\n\t *\n\t * https://www.postgresql.org/docs/current/indexes-opclass.html\n\t *\n\t * https://www.postgresql.org/docs/current/xindex.html\n\t *\n\t * ### Additional types\n\t * If you have the `pg_vector` extension installed in your database, you can use the\n\t * `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param opClass\n\t * @returns\n\t */\n\top(opClass: PgIndexOpClass): Omit<this, 'op'> {\n\t\tthis.indexConfig.opClass = opClass;\n\t\treturn this;\n\t}\n}\n\nexport class IndexedColumn {\n\tstatic readonly [entityKind]: string = 'IndexedColumn';\n\tconstructor(\n\t\tname: string | undefined,\n\t\tkeyAsName: boolean,\n\t\ttype: string,\n\t\tindexConfig: IndexedExtraConfigType,\n\t) {\n\t\tthis.name = name;\n\t\tthis.keyAsName = keyAsName;\n\t\tthis.type = type;\n\t\tthis.indexConfig = indexConfig;\n\t}\n\n\tname: string | undefined;\n\tkeyAsName: boolean;\n\ttype: string;\n\tindexConfig: IndexedExtraConfigType;\n}\n\nexport type AnyPgColumn<TPartial extends Partial<PgColumnBaseConfig<ColumnType>> = {}> = PgColumn<\n\tRequired<Update<PgColumnBaseConfig<ColumnType>, TPartial>>\n>;\n"],"mappings":";;;;;;;;;AA0KA,IAAsB,kBAAtB,MAGE;CACD,QAAiBA,0BAAsB;CAIvC,AAAQ,oBAAuC,EAAE;CAEjD,AAAU;CAEV,YAAY,MAAc,UAAsB,YAAoB;AACnE,OAAK,SAAS;GACb;GACA,WAAW,SAAS;GACpB,SAAS;GACT,SAAS;GACT,YAAY;GACZ,YAAY;GACZ,UAAU;GACV,YAAY;GACZ,YAAY;GACZ;GACA;GACA,WAAW;GACX,WAAW;GACX,YAAY;GACZ,mBAAmB;GACnB;;;;;;;;;;;;;CAcF,QAAsC;AACrC,SAAO;;;;;;;CAQR,UAA4B;AAC3B,OAAK,OAAO,UAAU;AACtB,SAAO;;;;;;;;;CAUR,QACC,OAQsB;AACtB,OAAK,OAAO,UAAU;AACtB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;;;;CASR,WACC,IAQ6B;AAC7B,OAAK,OAAO,YAAY;AACxB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,WAAW,KAAK;;;;;;;;CAShB,YACC,IAQsB;AACtB,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,aAAa;AACzB,SAAO;;;;;CAMR,YAAY,KAAK;;;;;;CAOjB,aAAoC;AACnC,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,UAAU;AACtB,SAAO;;;CAIR,QAAQ,MAAc;AACrB,MAAI,KAAK,OAAO,SAAS,GAAI;AAC7B,OAAK,OAAO,OAAO;;CAqBpB,MACC,YAC0D;EAE1D,MAAM,MAAM,cAAc;AAC1B,EAAC,KAAK,OAAe,aAAc,IAAI,SAAS;AAChD,SAAO;;CAGR,WACC,KACA,SAAoC,EAAE,EAC/B;AACP,OAAK,kBAAkB,KAAK;GAAE;GAAK;GAAQ,CAAC;AAC5C,SAAO;;CAGR,OACC,MACA,QACO;AACP,OAAK,OAAO,WAAW;AACvB,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,aAAa,QAAQ;AACjC,SAAO;;CAGR,kBACC,IASwB;AACxB,OAAK,OAAO,YAAY;GACvB;GACA,MAAM;GACN,MAAM;GACN;AACD,SAAO;;;;;;CAOR,aAAkC;AACjC,SAAO,KAAK,QAAQ,gBAAG,QAAQ;;;;;;CAOhC,0BACC,UAC8B;AAC9B,MAAI,UAAU;GACb,MAAM,EAAE,MAAM,GAAG,YAAY;AAC7B,GAAC,KAAK,OAAe,oBAAoB;IACxC,MAAM;IACN,cAAc;IACd,iBAAiB;IACjB;QAED,CAAC,KAAK,OAAe,oBAAoB,EACxC,MAAM,UACN;AAEF,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,UAAU;AACtB,SAAO;;;;;;CAOR,6BACC,UACiC;AACjC,MAAI,UAAU;GACb,MAAM,EAAE,MAAM,GAAG,YAAY;AAC7B,GAAC,KAAK,OAAe,oBAAoB;IACxC,MAAM;IACN,cAAc;IACd,iBAAiB;IACjB;QAED,CAAC,KAAK,OAAe,oBAAoB,EACxC,MAAM,aACN;AAEF,OAAK,OAAO,aAAa;AACzB,OAAK,OAAO,UAAU;AACtB,SAAO;;;CAIR,iBAAiB,QAAkB,OAA8B;AAChE,SAAO,KAAK,kBAAkB,KAAK,EAAE,KAAK,aAAa;AACtD,wCACE,OAAK,aAAW;IAChB,MAAM,UAAU,IAAIC,kDAAwB;KAC3C,MAAM,gBAAgBC,OAAK;AAC3B,YAAO;MAAE,MAAMC,SAAO;MAAM,SAAS,CAAC,OAAO;MAAE,gBAAgB,CAAC,cAAc;MAAE;MAC/E;AACF,QAAIA,SAAO,SACV,SAAQ,SAASA,SAAO,SAAS;AAElC,QAAIA,SAAO,SACV,SAAQ,SAASA,SAAO,SAAS;AAElC,WAAO,QAAQ,MAAM,MAAM;MAE5B,KACA,OACA;IACA;;;CAOH,uBACC,OACoB;AACpB,SAAO,IAAI,kBAAkB,OAAO;GAAE,GAAG,KAAK;GAAQ,YAAa,KAAK,OAAe,cAAc;GAAG,CAAC;;;AAM3G,IAAsB,WAAtB,cAGUC,mBAA0B;CACnC,QAA0BJ,0BAAsB;;CAGhD,AAAkB;CAElB,AAAS;CAET,YACC,OACA,QACC;AACD,QAAM,OAAO,OAAO;AACpB,OAAK,QAAQ;AACb,OAAK,aAAa,OAAO,cAAc;AAGvC,MAAI,KAAK,YAAY;GACpB,MAAM,qBAAqB,KAAK,mBAAmB,KAAK,KAAK;GAC7D,MAAM,mBAAmB,KAAK,iBAAiB,KAAK,KAAK;AAEzD,QAAK,sBAAsB,UAA4B;AACtD,QAAI,UAAU,KAAM,QAAO;IAE3B,MAAM,MAAM,OAAO,UAAU,WAAWK,yCAAa,MAAM,GAAG;AAC9D,WAAO,KAAK,iBAAiB,KAAK,oBAAoB,KAAK,WAAW;;AAGvE,QAAK,oBAAoB,UAA4B;AACpD,QAAI,UAAU,KAAM,QAAO;AAE3B,WAAOC,wCADQ,KAAK,iBAAiB,OAAoB,kBAAkB,KAAK,WAAW,CACxD;;;;;CAMtC,AAAQ,iBAAiB,OAAgB,QAAiC,OAAwB;AACjG,MAAI,QAAQ,KAAK,MAAM,QAAQ,MAAM,CACpC,QAAO,MAAM,KAAK,MAAM,MAAM,OAAO,OAAO,KAAK,iBAAiB,GAAG,QAAQ,QAAQ,EAAE,CAAC;AAEzF,SAAO,OAAO,MAAM;;;AAMtB,IAAa,oBAAb,cAEU,SAAoC;CAC7C,QAA0BN,0BAAsB;CAEhD,AAAS,aAAqB;AAC7B,SAAO,KAAK,YAAY;;CAGzB,cAAsC;EACrC,OAAO,KAAK,OAAO,SAAS;EAC5B,OAAO,KAAK,OAAO,SAAS;EAC5B,SAAS,KAAK,OAAO;EACrB;CACD,gBAAwC;EACvC,OAAO;EACP,OAAO;EACP,SAAS;EACT;CAED,MAAkC;AACjC,OAAK,YAAY,QAAQ;AACzB,SAAO;;CAGR,OAAmC;AAClC,OAAK,YAAY,QAAQ;AACzB,SAAO;;CAGR,aAAqD;AACpD,OAAK,YAAY,QAAQ;AACzB,SAAO;;CAGR,YAAoD;AACnD,OAAK,YAAY,QAAQ;AACzB,SAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCR,GAAG,SAA2C;AAC7C,OAAK,YAAY,UAAU;AAC3B,SAAO;;;AAIT,IAAa,gBAAb,MAA2B;CAC1B,QAAiBA,0BAAsB;CACvC,YACC,MACA,WACA,MACA,aACC;AACD,OAAK,OAAO;AACZ,OAAK,YAAY;AACjB,OAAK,OAAO;AACZ,OAAK,cAAc;;CAGpB;CACA;CACA;CACA"}
|
|
@@ -57,6 +57,8 @@ export interface PgColumnBaseConfig<TDataType extends ColumnType = ColumnType> {
|
|
|
57
57
|
data: unknown;
|
|
58
58
|
driverParam: unknown;
|
|
59
59
|
enumValues: string[] | undefined;
|
|
60
|
+
generated: unknown;
|
|
61
|
+
identity: undefined | 'always' | 'byDefault';
|
|
60
62
|
}
|
|
61
63
|
type WrapArray<T, N extends number> = N extends 1 ? T[] : N extends 2 ? T[][] : N extends 3 ? T[][][] : N extends 4 ? T[][][][] : N extends 5 ? T[][][][][] : T;
|
|
62
64
|
export type SetNotNull<T> = T & {
|
|
@@ -150,7 +152,7 @@ export interface ReferenceConfig {
|
|
|
150
152
|
onDelete?: UpdateDeleteAction;
|
|
151
153
|
};
|
|
152
154
|
}
|
|
153
|
-
export declare abstract class PgColumnBuilder<T extends PgColumnBuilderConfig = PgColumnBuilderConfig, TRuntimeConfig extends object = object> {
|
|
155
|
+
export declare abstract class PgColumnBuilder<out T extends PgColumnBuilderConfig = PgColumnBuilderConfig, TRuntimeConfig extends object = object> {
|
|
154
156
|
static readonly [entityKind]: string;
|
|
155
157
|
readonly [PgColumnBuilderBrand]: T;
|
|
156
158
|
private foreignKeyConfigs;
|
|
@@ -288,7 +290,7 @@ export declare abstract class PgColumnBuilder<T extends PgColumnBuilderConfig =
|
|
|
288
290
|
name?: string;
|
|
289
291
|
}): HasIdentity<this, 'byDefault'>;
|
|
290
292
|
}
|
|
291
|
-
export declare abstract class PgColumn<T extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = {}> extends Column<T, TRuntimeConfig> {
|
|
293
|
+
export declare abstract class PgColumn<out T extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = {}> extends Column<T, TRuntimeConfig> {
|
|
292
294
|
static readonly [entityKind]: string;
|
|
293
295
|
readonly dimensions: PgArrayDimension;
|
|
294
296
|
constructor(table: PgTable, config: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig);
|
|
@@ -57,6 +57,8 @@ export interface PgColumnBaseConfig<TDataType extends ColumnType = ColumnType> {
|
|
|
57
57
|
data: unknown;
|
|
58
58
|
driverParam: unknown;
|
|
59
59
|
enumValues: string[] | undefined;
|
|
60
|
+
generated: unknown;
|
|
61
|
+
identity: undefined | 'always' | 'byDefault';
|
|
60
62
|
}
|
|
61
63
|
type WrapArray<T, N extends number> = N extends 1 ? T[] : N extends 2 ? T[][] : N extends 3 ? T[][][] : N extends 4 ? T[][][][] : N extends 5 ? T[][][][][] : T;
|
|
62
64
|
export type SetNotNull<T> = T & {
|
|
@@ -150,7 +152,7 @@ export interface ReferenceConfig {
|
|
|
150
152
|
onDelete?: UpdateDeleteAction;
|
|
151
153
|
};
|
|
152
154
|
}
|
|
153
|
-
export declare abstract class PgColumnBuilder<T extends PgColumnBuilderConfig = PgColumnBuilderConfig, TRuntimeConfig extends object = object> {
|
|
155
|
+
export declare abstract class PgColumnBuilder<out T extends PgColumnBuilderConfig = PgColumnBuilderConfig, TRuntimeConfig extends object = object> {
|
|
154
156
|
static readonly [entityKind]: string;
|
|
155
157
|
readonly [PgColumnBuilderBrand]: T;
|
|
156
158
|
private foreignKeyConfigs;
|
|
@@ -288,7 +290,7 @@ export declare abstract class PgColumnBuilder<T extends PgColumnBuilderConfig =
|
|
|
288
290
|
name?: string;
|
|
289
291
|
}): HasIdentity<this, 'byDefault'>;
|
|
290
292
|
}
|
|
291
|
-
export declare abstract class PgColumn<T extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = {}> extends Column<T, TRuntimeConfig> {
|
|
293
|
+
export declare abstract class PgColumn<out T extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>, TRuntimeConfig extends object = {}> extends Column<T, TRuntimeConfig> {
|
|
292
294
|
static readonly [entityKind]: string;
|
|
293
295
|
readonly dimensions: PgArrayDimension;
|
|
294
296
|
constructor(table: PgTable, config: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","names":["ref","config"],"sources":["../../../src/pg-core/columns/common.ts"],"sourcesContent":["import type { ColumnType, GeneratedColumnConfig, GeneratedIdentityConfig } from '~/column-builder.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { ForeignKey, UpdateDeleteAction } from '~/pg-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/pg-core/foreign-keys.ts';\nimport type { AnyPgTable, PgTable } from '~/pg-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { iife } from '~/tracing-utils.ts';\nimport type { Update } from '~/utils.ts';\nimport type { PgIndexOpClass } from '../indexes.ts';\nimport type { PgSequenceOptions } from '../sequence.ts';\nimport { makePgArray, parsePgArray } from '../utils/array.ts';\n\ndeclare const PgColumnBuilderBrand: unique symbol;\nexport type PgColumnBuilderBrand = typeof PgColumnBuilderBrand;\n\nexport type PgArrayDimension = 0 | 1 | 2 | 3 | 4 | 5;\ntype PgArrayDimensionString = '[]' | '[][]' | '[][][]' | '[][][][]' | '[][][][][]';\n\ntype ArrayDimensionStringToNumber<T extends PgArrayDimensionString> = T extends '[]' ? 1\n\t: T extends '[][]' ? 2\n\t: T extends '[][][]' ? 3\n\t: T extends '[][][][]' ? 4\n\t: T extends '[][][][][]' ? 5\n\t: never;\n\nexport interface PgColumnBuilderConfig {\n\tdataType: ColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\t// Optional - set via chain methods\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n\tisPrimaryKey?: boolean;\n\tisAutoincrement?: boolean;\n\thasRuntimeDefault?: boolean;\n\tenumValues?: string[];\n\tidentity?: 'always' | 'byDefault';\n\tgenerated?: unknown;\n\tdimensions?: PgArrayDimension;\n\t$type?: unknown;\n}\n\nexport interface PgColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n\tdimensions?: PgArrayDimension;\n}\n\n// TODO: remove isAutoincrement and hasRuntimeDefault\nexport interface PgColumnBaseConfig<TDataType extends ColumnType = ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n}\n\ntype WrapArray<T, N extends number> = N extends 1 ? T[]\n\t: N extends 2 ? T[][]\n\t: N extends 3 ? T[][][]\n\t: N extends 4 ? T[][][][]\n\t: N extends 5 ? T[][][][][]\n\t: T;\n\nexport type SetNotNull<T> = T & { readonly [PgColumnBuilderBrand]: { notNull: true } };\nexport type SetHasDefault<T> = T & { readonly [PgColumnBuilderBrand]: { hasDefault: true } };\nexport type SetIsPrimaryKey<T> = T & { readonly [PgColumnBuilderBrand]: { isPrimaryKey: true; notNull: true } };\nexport type SetHasRuntimeDefault<T> = T & {\n\treadonly [PgColumnBuilderBrand]: { hasRuntimeDefault: true; hasDefault: true };\n};\nexport type Set$Type<T, TType> = T & { readonly [PgColumnBuilderBrand]: { $type: TType } };\nexport type SetHasGenerated<T> = T & {\n\treadonly [PgColumnBuilderBrand]: { hasDefault: true; generated: { type: 'always' } };\n};\nexport type SetDimensions<T, TDim extends PgArrayDimension> = T & {\n\treadonly [PgColumnBuilderBrand]: { dimensions: TDim };\n};\nexport type SetIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\treadonly [PgColumnBuilderBrand]: { notNull: true; hasDefault: true; identity: TType };\n};\n\nexport type HasIdentity<T extends PgColumnBuilder, TType extends 'always' | 'byDefault'> = SetIdentity<T, TType>;\n\ntype GetBaseData<T> = T extends { $type: infer U } ? U : T extends { data: infer D } ? D : unknown;\n\nexport type ResolvePgColumnConfig<\n\tT extends PgColumnBuilderConfig,\n\tTTableName extends string,\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<GetBaseData<T>, T['dimensions']>\n\t\t: GetBaseData<T>;\n\tdriverParam: T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<T['driverParam'], T['dimensions']> | string\n\t\t: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: T['isPrimaryKey'] extends true ? true : false;\n\tisAutoincrement: T['isAutoincrement'] extends true ? true : false;\n\thasRuntimeDefault: T['hasRuntimeDefault'] extends true ? true : false;\n\tenumValues: T extends { enumValues: infer E extends string[] } ? E : undefined;\n\tidentity: T['identity'] extends 'always' | 'byDefault' ? T['identity'] : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined : G : undefined;\n} & {};\n\nexport interface AnyPgColumnBuilder {\n\treadonly [PgColumnBuilderBrand]: PgColumnBuilderConfig;\n}\n\nexport type PgBuildColumn<\n\tTTableName extends string,\n\tTBuilder extends AnyPgColumnBuilder,\n\tTBuiltConfig extends PgColumnBaseConfig<ColumnType> = ResolvePgColumnConfig<\n\t\tTBuilder[PgColumnBuilderBrand],\n\t\tTTableName\n\t>,\n> = PgColumn<TBuiltConfig, {}>;\n\nexport type PgBuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: PgBuildColumn<TTableName, TConfigMap[Key]>;\n\t}\n\t& {};\n\nexport type PgBuildExtraConfigColumns<\n\tTConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: ExtraConfigColumn;\n\t}\n\t& {};\n\nexport type PgColumns = Record<string, PgColumn<any>>;\n\nexport interface ReferenceConfig {\n\tref: () => PgColumn;\n\tconfig: {\n\t\tname?: string;\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport abstract class PgColumnBuilder<\n\tT extends PgColumnBuilderConfig = PgColumnBuilderConfig,\n\tTRuntimeConfig extends object = object,\n> {\n\tstatic readonly [entityKind]: string = 'PgColumnBuilder';\n\n\tdeclare readonly [PgColumnBuilderBrand]: T;\n\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\tprotected config: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t\tdefaultFn: undefined,\n\t\t\tonUpdateFn: undefined,\n\t\t\tgeneratedIdentity: undefined,\n\t\t} as PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): Set$Type<this, TType> {\n\t\treturn this as Set$Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): SetNotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as SetNotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(\n\t\tvalue:\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () =>\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasRuntimeDefault<this> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasRuntimeDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () =>\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): SetIsPrimaryKey<this> {\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as SetIsPrimaryKey<this>;\n\t}\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n\n\t/**\n\t * Makes this column a PostgreSQL array column.\n\t *\n\t * @example\n\t * ```ts\n\t * const t = pgTable('t', {\n\t * // 1D array: number[]\n\t * tags: integer().array(),\n\t * // Or explicitly: integer().array('[]')\n\t * // 2D array: number[][]\n\t * matrix: integer().array('[][]'),\n\t * });\n\t * ```\n\t */\n\tarray(): SetDimensions<this, 1>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions?: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>> {\n\t\t// Calculate dimensions as number from string notation\n\t\tconst dim = dimensions ?? '[]';\n\t\t(this.config as any).dimensions = (dim.length / 2) as PgArrayDimension;\n\t\treturn this as SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\t}\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tconfig: ReferenceConfig['config'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, config });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t\tconfig?: { nulls: 'distinct' | 'not distinct' },\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\tthis.config.uniqueType = config?.nulls;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(\n\t\tas:\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL\n\t\t\t| (() => SQL),\n\t): SetHasGenerated<this> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: 'stored',\n\t\t};\n\t\treturn this as SetHasGenerated<this>;\n\t}\n\n\t/**\n\t * Adds a `default now()` clause to the column definition.\n\t * Available for date/time column types.\n\t */\n\tdefaultNow(): SetHasDefault<this> {\n\t\treturn this.default(sql`now()`);\n\t}\n\n\t/**\n\t * Adds an `ALWAYS AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedAlwaysAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'always'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'always'>;\n\t}\n\n\t/**\n\t * Adds a `BY DEFAULT AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedByDefaultAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'byDefault'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'byDefault'>;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: PgColumn, table: PgTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, config }) => {\n\t\t\treturn iife(\n\t\t\t\t(ref, config) => {\n\t\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\t\treturn { name: config.name, columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t\t});\n\t\t\t\t\tif (config.onUpdate) {\n\t\t\t\t\t\tbuilder.onUpdate(config.onUpdate);\n\t\t\t\t\t}\n\t\t\t\t\tif (config.onDelete) {\n\t\t\t\t\t\tbuilder.onDelete(config.onDelete);\n\t\t\t\t\t}\n\t\t\t\t\treturn builder.build(table);\n\t\t\t\t},\n\t\t\t\tref,\n\t\t\t\tconfig,\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build(table: PgTable): PgColumn<any>;\n\n\t/** @internal */\n\tbuildExtraConfigColumn<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): ExtraConfigColumn {\n\t\treturn new ExtraConfigColumn(table, { ...this.config, dimensions: (this.config as any).dimensions ?? 0 });\n\t}\n}\n\n// TODO: we should potenitally do column to be\n// in charge of map value/array of values/json value and json array of values in 1 place\nexport abstract class PgColumn<\n\tT extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = {},\n> extends Column<T, TRuntimeConfig> {\n\tstatic override readonly [entityKind]: string = 'PgColumn';\n\n\t/** @internal */\n\toverride readonly table: PgTable;\n\n\treadonly dimensions: PgArrayDimension;\n\n\tconstructor(\n\t\ttable: PgTable,\n\t\tconfig: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig,\n\t) {\n\t\tsuper(table, config);\n\t\tthis.table = table;\n\t\tthis.dimensions = config.dimensions ?? 0;\n\n\t\t// Wrap mapFromDriverValue/mapToDriverValue with array handling if this is an array column\n\t\tif (this.dimensions) {\n\t\t\tconst originalFromDriver = this.mapFromDriverValue.bind(this);\n\t\t\tconst originalToDriver = this.mapToDriverValue.bind(this);\n\n\t\t\tthis.mapFromDriverValue = (value: unknown): unknown => {\n\t\t\t\tif (value === null) return value;\n\t\t\t\t// Parse string representation if needed (e.g., from node-postgres for enum arrays)\n\t\t\t\tconst arr = typeof value === 'string' ? parsePgArray(value) : value as unknown[];\n\t\t\t\treturn this.mapArrayElements(arr, originalFromDriver, this.dimensions);\n\t\t\t};\n\n\t\t\tthis.mapToDriverValue = (value: unknown): unknown => {\n\t\t\t\tif (value === null) return value;\n\t\t\t\tconst mapped = this.mapArrayElements(value as unknown[], originalToDriver, this.dimensions);\n\t\t\t\treturn makePgArray(mapped as any[]);\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @internal */\n\tprivate mapArrayElements(value: unknown, mapper: (v: unknown) => unknown, depth: number): unknown {\n\t\tif (depth > 0 && Array.isArray(value)) {\n\t\t\treturn value.map((v) => v === null ? null : this.mapArrayElements(v, mapper, depth - 1));\n\t\t}\n\t\treturn mapper(value);\n\t}\n}\n\nexport type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string };\n\nexport class ExtraConfigColumn<\n\tT extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>,\n> extends PgColumn<T, IndexedExtraConfigType> {\n\tstatic override readonly [entityKind]: string = 'ExtraConfigColumn';\n\n\toverride getSQLType(): string {\n\t\treturn this.getSQLType();\n\t}\n\n\tindexConfig: IndexedExtraConfigType = {\n\t\torder: this.config.order ?? 'asc',\n\t\tnulls: this.config.nulls ?? 'last',\n\t\topClass: this.config.opClass,\n\t};\n\tdefaultConfig: IndexedExtraConfigType = {\n\t\torder: 'asc',\n\t\tnulls: 'last',\n\t\topClass: undefined,\n\t};\n\n\tasc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'asc';\n\t\treturn this;\n\t}\n\n\tdesc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'desc';\n\t\treturn this;\n\t}\n\n\tnullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'first';\n\t\treturn this;\n\t}\n\n\tnullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'last';\n\t\treturn this;\n\t}\n\n\t/**\n\t * ### PostgreSQL documentation quote\n\t *\n\t * > An operator class with optional parameters can be specified for each column of an index.\n\t * The operator class identifies the operators to be used by the index for that column.\n\t * For example, a B-tree index on four-byte integers would use the int4_ops class;\n\t * this operator class includes comparison functions for four-byte integers.\n\t * In practice the default operator class for the column's data type is usually sufficient.\n\t * The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.\n\t * For example, we might want to sort a complex-number data type either by absolute value or by real part.\n\t * We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.\n\t * More information about operator classes check:\n\t *\n\t * ### Useful links\n\t * https://www.postgresql.org/docs/current/sql-createindex.html\n\t *\n\t * https://www.postgresql.org/docs/current/indexes-opclass.html\n\t *\n\t * https://www.postgresql.org/docs/current/xindex.html\n\t *\n\t * ### Additional types\n\t * If you have the `pg_vector` extension installed in your database, you can use the\n\t * `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param opClass\n\t * @returns\n\t */\n\top(opClass: PgIndexOpClass): Omit<this, 'op'> {\n\t\tthis.indexConfig.opClass = opClass;\n\t\treturn this;\n\t}\n}\n\nexport class IndexedColumn {\n\tstatic readonly [entityKind]: string = 'IndexedColumn';\n\tconstructor(\n\t\tname: string | undefined,\n\t\tkeyAsName: boolean,\n\t\ttype: string,\n\t\tindexConfig: IndexedExtraConfigType,\n\t) {\n\t\tthis.name = name;\n\t\tthis.keyAsName = keyAsName;\n\t\tthis.type = type;\n\t\tthis.indexConfig = indexConfig;\n\t}\n\n\tname: string | undefined;\n\tkeyAsName: boolean;\n\ttype: string;\n\tindexConfig: IndexedExtraConfigType;\n}\n\nexport type AnyPgColumn<TPartial extends Partial<PgColumnBaseConfig<ColumnType>> = {}> = PgColumn<\n\tRequired<Update<PgColumnBaseConfig<ColumnType>, TPartial>>\n>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"common.js","names":["ref","config"],"sources":["../../../src/pg-core/columns/common.ts"],"sourcesContent":["import type { ColumnType, GeneratedColumnConfig, GeneratedIdentityConfig } from '~/column-builder.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { ForeignKey, UpdateDeleteAction } from '~/pg-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/pg-core/foreign-keys.ts';\nimport type { AnyPgTable, PgTable } from '~/pg-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { sql } from '~/sql/sql.ts';\nimport { iife } from '~/tracing-utils.ts';\nimport type { Update } from '~/utils.ts';\nimport type { PgIndexOpClass } from '../indexes.ts';\nimport type { PgSequenceOptions } from '../sequence.ts';\nimport { makePgArray, parsePgArray } from '../utils/array.ts';\n\ndeclare const PgColumnBuilderBrand: unique symbol;\nexport type PgColumnBuilderBrand = typeof PgColumnBuilderBrand;\n\nexport type PgArrayDimension = 0 | 1 | 2 | 3 | 4 | 5;\ntype PgArrayDimensionString = '[]' | '[][]' | '[][][]' | '[][][][]' | '[][][][][]';\n\ntype ArrayDimensionStringToNumber<T extends PgArrayDimensionString> = T extends '[]' ? 1\n\t: T extends '[][]' ? 2\n\t: T extends '[][][]' ? 3\n\t: T extends '[][][][]' ? 4\n\t: T extends '[][][][][]' ? 5\n\t: never;\n\nexport interface PgColumnBuilderConfig {\n\tdataType: ColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\t// Optional - set via chain methods\n\tnotNull?: boolean;\n\thasDefault?: boolean;\n\tisPrimaryKey?: boolean;\n\tisAutoincrement?: boolean;\n\thasRuntimeDefault?: boolean;\n\tenumValues?: string[];\n\tidentity?: 'always' | 'byDefault';\n\tgenerated?: unknown;\n\tdimensions?: PgArrayDimension;\n\t$type?: unknown;\n}\n\nexport interface PgColumnBuilderRuntimeConfig<TData> {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n\tdimensions?: PgArrayDimension;\n}\n\n// TODO: remove isAutoincrement and hasRuntimeDefault\nexport interface PgColumnBaseConfig<TDataType extends ColumnType = ColumnType> {\n\tname: string;\n\tdataType: TDataType;\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n\tgenerated: unknown;\n\tidentity: undefined | 'always' | 'byDefault';\n}\n\ntype WrapArray<T, N extends number> = N extends 1 ? T[]\n\t: N extends 2 ? T[][]\n\t: N extends 3 ? T[][][]\n\t: N extends 4 ? T[][][][]\n\t: N extends 5 ? T[][][][][]\n\t: T;\n\nexport type SetNotNull<T> = T & { readonly [PgColumnBuilderBrand]: { notNull: true } };\nexport type SetHasDefault<T> = T & { readonly [PgColumnBuilderBrand]: { hasDefault: true } };\nexport type SetIsPrimaryKey<T> = T & { readonly [PgColumnBuilderBrand]: { isPrimaryKey: true; notNull: true } };\nexport type SetHasRuntimeDefault<T> = T & {\n\treadonly [PgColumnBuilderBrand]: { hasRuntimeDefault: true; hasDefault: true };\n};\nexport type Set$Type<T, TType> = T & { readonly [PgColumnBuilderBrand]: { $type: TType } };\nexport type SetHasGenerated<T> = T & {\n\treadonly [PgColumnBuilderBrand]: { hasDefault: true; generated: { type: 'always' } };\n};\nexport type SetDimensions<T, TDim extends PgArrayDimension> = T & {\n\treadonly [PgColumnBuilderBrand]: { dimensions: TDim };\n};\nexport type SetIdentity<T, TType extends 'always' | 'byDefault'> = T & {\n\treadonly [PgColumnBuilderBrand]: { notNull: true; hasDefault: true; identity: TType };\n};\n\nexport type HasIdentity<T extends PgColumnBuilder, TType extends 'always' | 'byDefault'> = SetIdentity<T, TType>;\n\ntype GetBaseData<T> = T extends { $type: infer U } ? U : T extends { data: infer D } ? D : unknown;\n\nexport type ResolvePgColumnConfig<\n\tT extends PgColumnBuilderConfig,\n\tTTableName extends string,\n> = {\n\tname: string;\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tdata: T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<GetBaseData<T>, T['dimensions']>\n\t\t: GetBaseData<T>;\n\tdriverParam: T['dimensions'] extends 1 | 2 | 3 | 4 | 5 ? WrapArray<T['driverParam'], T['dimensions']> | string\n\t\t: T['driverParam'];\n\tnotNull: T['notNull'] extends true ? true : false;\n\thasDefault: T['hasDefault'] extends true ? true : false;\n\tisPrimaryKey: T['isPrimaryKey'] extends true ? true : false;\n\tisAutoincrement: T['isAutoincrement'] extends true ? true : false;\n\thasRuntimeDefault: T['hasRuntimeDefault'] extends true ? true : false;\n\tenumValues: T extends { enumValues: infer E extends string[] } ? E : undefined;\n\tidentity: T['identity'] extends 'always' | 'byDefault' ? T['identity'] : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined : G : undefined;\n} & {};\n\nexport interface AnyPgColumnBuilder {\n\treadonly [PgColumnBuilderBrand]: PgColumnBuilderConfig;\n}\n\nexport type PgBuildColumn<\n\tTTableName extends string,\n\tTBuilder extends AnyPgColumnBuilder,\n\tTBuiltConfig extends PgColumnBaseConfig<ColumnType> = ResolvePgColumnConfig<\n\t\tTBuilder[PgColumnBuilderBrand],\n\t\tTTableName\n\t>,\n> = PgColumn<TBuiltConfig, {}>;\n\nexport type PgBuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: PgBuildColumn<TTableName, TConfigMap[Key]>;\n\t}\n\t& {};\n\nexport type PgBuildExtraConfigColumns<\n\tTConfigMap extends Record<string, AnyPgColumnBuilder>,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: ExtraConfigColumn;\n\t}\n\t& {};\n\nexport type PgColumns = Record<string, PgColumn<any>>;\n\nexport interface ReferenceConfig {\n\tref: () => PgColumn;\n\tconfig: {\n\t\tname?: string;\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport abstract class PgColumnBuilder<\n\tout T extends PgColumnBuilderConfig = PgColumnBuilderConfig,\n\tTRuntimeConfig extends object = object,\n> {\n\tstatic readonly [entityKind]: string = 'PgColumnBuilder';\n\n\tdeclare readonly [PgColumnBuilderBrand]: T;\n\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\tprotected config: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\n\tconstructor(name: string, dataType: ColumnType, columnType: string) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t\tdefaultFn: undefined,\n\t\t\tonUpdateFn: undefined,\n\t\t\tgeneratedIdentity: undefined,\n\t\t} as PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): Set$Type<this, TType> {\n\t\treturn this as Set$Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): SetNotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as SetNotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(\n\t\tvalue:\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () =>\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasRuntimeDefault<this> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasRuntimeDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () =>\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL,\n\t): SetHasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as SetHasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): SetIsPrimaryKey<this> {\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as SetIsPrimaryKey<this>;\n\t}\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n\n\t/**\n\t * Makes this column a PostgreSQL array column.\n\t *\n\t * @example\n\t * ```ts\n\t * const t = pgTable('t', {\n\t * // 1D array: number[]\n\t * tags: integer().array(),\n\t * // Or explicitly: integer().array('[]')\n\t * // 2D array: number[][]\n\t * matrix: integer().array('[][]'),\n\t * });\n\t * ```\n\t */\n\tarray(): SetDimensions<this, 1>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\tarray<TDim extends PgArrayDimensionString>(\n\t\tdimensions?: TDim,\n\t): SetDimensions<this, ArrayDimensionStringToNumber<TDim>> {\n\t\t// Calculate dimensions as number from string notation\n\t\tconst dim = dimensions ?? '[]';\n\t\t(this.config as any).dimensions = (dim.length / 2) as PgArrayDimension;\n\t\treturn this as SetDimensions<this, ArrayDimensionStringToNumber<TDim>>;\n\t}\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tconfig: ReferenceConfig['config'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, config });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t\tconfig?: { nulls: 'distinct' | 'not distinct' },\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\tthis.config.uniqueType = config?.nulls;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(\n\t\tas:\n\t\t\t| (this[PgColumnBuilderBrand] extends { dimensions: 1 | 2 | 3 | 4 | 5 } ? WrapArray<\n\t\t\t\t\tthis[PgColumnBuilderBrand] extends { $type: infer U } ? U : this[PgColumnBuilderBrand]['data'],\n\t\t\t\t\tthis[PgColumnBuilderBrand]['dimensions']\n\t\t\t\t>\n\t\t\t\t: this[PgColumnBuilderBrand] extends { $type: infer U } ? U\n\t\t\t\t: this[PgColumnBuilderBrand]['data'])\n\t\t\t| SQL\n\t\t\t| (() => SQL),\n\t): SetHasGenerated<this> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: 'stored',\n\t\t};\n\t\treturn this as SetHasGenerated<this>;\n\t}\n\n\t/**\n\t * Adds a `default now()` clause to the column definition.\n\t * Available for date/time column types.\n\t */\n\tdefaultNow(): SetHasDefault<this> {\n\t\treturn this.default(sql`now()`);\n\t}\n\n\t/**\n\t * Adds an `ALWAYS AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedAlwaysAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'always'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'always',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'always'>;\n\t}\n\n\t/**\n\t * Adds a `BY DEFAULT AS IDENTITY` clause to the column definition.\n\t * Available for integer column types.\n\t */\n\tgeneratedByDefaultAsIdentity(\n\t\tsequence?: PgSequenceOptions & { name?: string },\n\t): HasIdentity<this, 'byDefault'> {\n\t\tif (sequence) {\n\t\t\tconst { name, ...options } = sequence;\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t\tsequenceName: name,\n\t\t\t\tsequenceOptions: options,\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t} else {\n\t\t\t(this.config as any).generatedIdentity = {\n\t\t\t\ttype: 'byDefault',\n\t\t\t} satisfies GeneratedIdentityConfig;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as HasIdentity<this, 'byDefault'>;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: PgColumn, table: PgTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, config }) => {\n\t\t\treturn iife(\n\t\t\t\t(ref, config) => {\n\t\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\t\treturn { name: config.name, columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t\t});\n\t\t\t\t\tif (config.onUpdate) {\n\t\t\t\t\t\tbuilder.onUpdate(config.onUpdate);\n\t\t\t\t\t}\n\t\t\t\t\tif (config.onDelete) {\n\t\t\t\t\t\tbuilder.onDelete(config.onDelete);\n\t\t\t\t\t}\n\t\t\t\t\treturn builder.build(table);\n\t\t\t\t},\n\t\t\t\tref,\n\t\t\t\tconfig,\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build(table: PgTable): PgColumn<any>;\n\n\t/** @internal */\n\tbuildExtraConfigColumn<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): ExtraConfigColumn {\n\t\treturn new ExtraConfigColumn(table, { ...this.config, dimensions: (this.config as any).dimensions ?? 0 });\n\t}\n}\n\n// TODO: we should potenitally do column to be\n// in charge of map value/array of values/json value and json array of values in 1 place\nexport abstract class PgColumn<\n\tout T extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>,\n\tTRuntimeConfig extends object = {},\n> extends Column<T, TRuntimeConfig> {\n\tstatic override readonly [entityKind]: string = 'PgColumn';\n\n\t/** @internal */\n\toverride readonly table: PgTable;\n\n\treadonly dimensions: PgArrayDimension;\n\n\tconstructor(\n\t\ttable: PgTable,\n\t\tconfig: PgColumnBuilderRuntimeConfig<T['data']> & TRuntimeConfig,\n\t) {\n\t\tsuper(table, config);\n\t\tthis.table = table;\n\t\tthis.dimensions = config.dimensions ?? 0;\n\n\t\t// Wrap mapFromDriverValue/mapToDriverValue with array handling if this is an array column\n\t\tif (this.dimensions) {\n\t\t\tconst originalFromDriver = this.mapFromDriverValue.bind(this);\n\t\t\tconst originalToDriver = this.mapToDriverValue.bind(this);\n\n\t\t\tthis.mapFromDriverValue = (value: unknown): unknown => {\n\t\t\t\tif (value === null) return value;\n\t\t\t\t// Parse string representation if needed (e.g., from node-postgres for enum arrays)\n\t\t\t\tconst arr = typeof value === 'string' ? parsePgArray(value) : value as unknown[];\n\t\t\t\treturn this.mapArrayElements(arr, originalFromDriver, this.dimensions);\n\t\t\t};\n\n\t\t\tthis.mapToDriverValue = (value: unknown): unknown => {\n\t\t\t\tif (value === null) return value;\n\t\t\t\tconst mapped = this.mapArrayElements(value as unknown[], originalToDriver, this.dimensions);\n\t\t\t\treturn makePgArray(mapped as any[]);\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @internal */\n\tprivate mapArrayElements(value: unknown, mapper: (v: unknown) => unknown, depth: number): unknown {\n\t\tif (depth > 0 && Array.isArray(value)) {\n\t\t\treturn value.map((v) => v === null ? null : this.mapArrayElements(v, mapper, depth - 1));\n\t\t}\n\t\treturn mapper(value);\n\t}\n}\n\nexport type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string };\n\nexport class ExtraConfigColumn<\n\tT extends PgColumnBaseConfig<ColumnType> = PgColumnBaseConfig<ColumnType>,\n> extends PgColumn<T, IndexedExtraConfigType> {\n\tstatic override readonly [entityKind]: string = 'ExtraConfigColumn';\n\n\toverride getSQLType(): string {\n\t\treturn this.getSQLType();\n\t}\n\n\tindexConfig: IndexedExtraConfigType = {\n\t\torder: this.config.order ?? 'asc',\n\t\tnulls: this.config.nulls ?? 'last',\n\t\topClass: this.config.opClass,\n\t};\n\tdefaultConfig: IndexedExtraConfigType = {\n\t\torder: 'asc',\n\t\tnulls: 'last',\n\t\topClass: undefined,\n\t};\n\n\tasc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'asc';\n\t\treturn this;\n\t}\n\n\tdesc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'desc';\n\t\treturn this;\n\t}\n\n\tnullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'first';\n\t\treturn this;\n\t}\n\n\tnullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'last';\n\t\treturn this;\n\t}\n\n\t/**\n\t * ### PostgreSQL documentation quote\n\t *\n\t * > An operator class with optional parameters can be specified for each column of an index.\n\t * The operator class identifies the operators to be used by the index for that column.\n\t * For example, a B-tree index on four-byte integers would use the int4_ops class;\n\t * this operator class includes comparison functions for four-byte integers.\n\t * In practice the default operator class for the column's data type is usually sufficient.\n\t * The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.\n\t * For example, we might want to sort a complex-number data type either by absolute value or by real part.\n\t * We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.\n\t * More information about operator classes check:\n\t *\n\t * ### Useful links\n\t * https://www.postgresql.org/docs/current/sql-createindex.html\n\t *\n\t * https://www.postgresql.org/docs/current/indexes-opclass.html\n\t *\n\t * https://www.postgresql.org/docs/current/xindex.html\n\t *\n\t * ### Additional types\n\t * If you have the `pg_vector` extension installed in your database, you can use the\n\t * `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param opClass\n\t * @returns\n\t */\n\top(opClass: PgIndexOpClass): Omit<this, 'op'> {\n\t\tthis.indexConfig.opClass = opClass;\n\t\treturn this;\n\t}\n}\n\nexport class IndexedColumn {\n\tstatic readonly [entityKind]: string = 'IndexedColumn';\n\tconstructor(\n\t\tname: string | undefined,\n\t\tkeyAsName: boolean,\n\t\ttype: string,\n\t\tindexConfig: IndexedExtraConfigType,\n\t) {\n\t\tthis.name = name;\n\t\tthis.keyAsName = keyAsName;\n\t\tthis.type = type;\n\t\tthis.indexConfig = indexConfig;\n\t}\n\n\tname: string | undefined;\n\tkeyAsName: boolean;\n\ttype: string;\n\tindexConfig: IndexedExtraConfigType;\n}\n\nexport type AnyPgColumn<TPartial extends Partial<PgColumnBaseConfig<ColumnType>> = {}> = PgColumn<\n\tRequired<Update<PgColumnBaseConfig<ColumnType>, TPartial>>\n>;\n"],"mappings":"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"}
|
package/pg-core/table.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.cjs","names":["Table","entityKind","parsedColumns: TColumnsMap","getPgColumnBuilders","name","pgTableInternal: PgTableFnInternal","pgTableWithRLS: PgTableFn['withRLS']","pgTable: PgTableFn","fn: PgTableFnInternal"],"sources":["../../src/pg-core/table.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport {\n\ttype InferTableColumnsModels,\n\tTable,\n\ttype TableConfig as TableConfigBase,\n\ttype UpdateTableConfig,\n} from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type {\n\tAnyPgColumnBuilder,\n\tExtraConfigColumn,\n\tPgBuildColumns,\n\tPgBuildExtraConfigColumns,\n\tPgColumn,\n\tPgColumnBuilder,\n\tPgColumns,\n} from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<\n\tstring,\n\tPgTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<PgColumns>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<\n\tT extends TableConfig,\n> =\n\t& PgTable<T>\n\t& T['columns']\n\t& InferTableColumnsModels<T['columns']>\n\t& {\n\t\t/** @deprecated use `pgTable.withRLS()` instead*/\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\tdialect: 'pg';\n}> {\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildColumns<TTableName, TColumnsMap>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildExtraConfigColumns<TColumnsMap>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t}) as any;\n}\n\nexport interface PgTableFnInternal<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> extends PgTableFnInternal<TSchema> {\n\twithRLS: PgTableFnInternal<TSchema>;\n}\n\nconst pgTableInternal: PgTableFnInternal = (name, columns, extraConfig) => {\n\treturn pgTableWithSchema(name, columns, extraConfig, undefined);\n};\n\nconst pgTableWithRLS: PgTableFn['withRLS'] = (name, columns, extraConfig) => {\n\tconst table = pgTableWithSchema(name, columns, extraConfig, undefined);\n\ttable[EnableRLS] = true;\n\n\treturn table;\n};\n\nexport const pgTable: PgTableFn = Object.assign(pgTableInternal, { withRLS: pgTableWithRLS });\n\nexport function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {\n\tconst fn: PgTableFnInternal = (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n\n\treturn Object.assign(fn, {\n\t\twithRLS: ((name, columns, extraConfig) => {\n\t\t\tconst table = pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t\t\ttable[EnableRLS] = true;\n\n\t\t\treturn table;\n\t\t}) as PgTableFnInternal,\n\t});\n}\n"],"mappings":";;;;;;;AAwCA,MAAa,oBAAoB,OAAO,IAAI,8BAA8B;;AAE1E,MAAa,YAAY,OAAO,IAAI,oBAAoB;AAExD,IAAa,UAAb,cAAkEA,iBAAS;CAC1E,QAA0BC,0BAAsB;;CAGhD,OAAyB,SAAS,OAAO,OAAO,EAAE,EAAED,iBAAM,QAAQ;EAC9C;EACR;EACX,CAAC;;CAGF,CAAC,qBAAmC,EAAE;;CAGtC,CAAC,aAAsB;;CAGvB,CAAUA,iBAAM,OAAO,sBACtB;;CAGD,CAAUA,iBAAM,OAAO,sBAAyD,EAAE;;;AAoBnF,SAAgB,kBAKf,MACA,SACA,aAGA,QACA,WAAW,MAMT;CACF,MAAM,WAAW,IAAI,QAKlB,MAAM,QAAQ,SAAS;CAE1B,MAAME,gBAA6B,OAAO,YAAY,aAAa,QAAQC,iDAAqB,CAAC,GAAG;CAEpG,MAAM,eAAe,OAAO,YAC3B,OAAO,QAAQ,cAAc,CAAC,KAAK,CAACC,QAAM,oBAAoB;EAC7D,MAAM,aAAa;AACnB,aAAW,QAAQA,OAAK;EACxB,MAAM,SAAS,WAAW,MAAM,SAAS;AACzC,WAAS,mBAAmB,KAAK,GAAG,WAAW,iBAAiB,QAAQ,SAAS,CAAC;AAClF,SAAO,CAACA,QAAM,OAAO;GACpB,CACF;CAED,MAAM,6BAA6B,OAAO,YACzC,OAAO,QAAQ,cAAc,CAAC,KAAK,CAACA,QAAM,oBAAoB;EAC7D,MAAM,aAAa;AACnB,aAAW,QAAQA,OAAK;AAExB,SAAO,CAACA,QADO,WAAW,uBAAuB,SAAS,CACrC;GACpB,CACF;CAED,MAAM,QAAQ,OAAO,OAAO,UAAU,aAAa;AAEnD,OAAMJ,iBAAM,OAAO,WAAW;AAC9B,OAAMA,iBAAM,OAAO,sBAAsB;AAEzC,KAAI,YACH,OAAM,QAAQ,OAAO,sBAAsB;AAG5C,QAAO,OAAO,OAAO,OAAO,EAC3B,iBAAiB;AAChB,QAAM,QAAQ,OAAO,aAAa;AAClC,SAAO;IAOR,CAAC;;AAgHH,MAAMK,mBAAsC,MAAM,SAAS,gBAAgB;AAC1E,QAAO,kBAAkB,MAAM,SAAS,aAAa,OAAU;;AAGhE,MAAMC,kBAAwC,MAAM,SAAS,gBAAgB;CAC5E,MAAM,QAAQ,kBAAkB,MAAM,SAAS,aAAa,OAAU;AACtE,OAAM,aAAa;AAEnB,QAAO;;AAGR,MAAaC,UAAqB,OAAO,OAAO,iBAAiB,EAAE,SAAS,gBAAgB,CAAC;AAE7F,SAAgB,eAAe,oBAAyD;CACvF,MAAMC,MAAyB,MAAM,SAAS,gBAAgB;AAC7D,SAAO,kBAAkB,mBAAmB,KAAK,EAAiB,SAAS,aAAa,QAAW,KAAK;;AAGzG,QAAO,OAAO,OAAO,IAAI,EACxB,WAAW,MAAM,SAAS,gBAAgB;EACzC,MAAM,QAAQ,kBAAkB,mBAAmB,KAAK,EAAiB,SAAS,aAAa,QAAW,KAAK;AAC/G,QAAM,aAAa;AAEnB,SAAO;KAER,CAAC"}
|
|
1
|
+
{"version":3,"file":"table.cjs","names":["Table","entityKind","parsedColumns: TColumnsMap","getPgColumnBuilders","name","pgTableInternal: PgTableFnInternal","pgTableWithRLS: PgTableFn['withRLS']","pgTable: PgTableFn","fn: PgTableFnInternal"],"sources":["../../src/pg-core/table.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport {\n\ttype InferTableColumnsModels,\n\tTable,\n\ttype TableConfig as TableConfigBase,\n\ttype UpdateTableConfig,\n} from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type {\n\tAnyPgColumnBuilder,\n\tExtraConfigColumn,\n\tPgBuildColumns,\n\tPgBuildExtraConfigColumns,\n\tPgColumn,\n\tPgColumnBuilder,\n\tPgColumns,\n} from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<\n\tstring,\n\tPgTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<PgColumns>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<out T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<\n\tT extends TableConfig,\n> =\n\t& PgTable<T>\n\t& T['columns']\n\t& InferTableColumnsModels<T['columns']>\n\t& {\n\t\t/** @deprecated use `pgTable.withRLS()` instead*/\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\tdialect: 'pg';\n}> {\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildColumns<TTableName, TColumnsMap>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildExtraConfigColumns<TColumnsMap>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t}) as any;\n}\n\nexport interface PgTableFnInternal<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> extends PgTableFnInternal<TSchema> {\n\twithRLS: PgTableFnInternal<TSchema>;\n}\n\nconst pgTableInternal: PgTableFnInternal = (name, columns, extraConfig) => {\n\treturn pgTableWithSchema(name, columns, extraConfig, undefined);\n};\n\nconst pgTableWithRLS: PgTableFn['withRLS'] = (name, columns, extraConfig) => {\n\tconst table = pgTableWithSchema(name, columns, extraConfig, undefined);\n\ttable[EnableRLS] = true;\n\n\treturn table;\n};\n\nexport const pgTable: PgTableFn = Object.assign(pgTableInternal, { withRLS: pgTableWithRLS });\n\nexport function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {\n\tconst fn: PgTableFnInternal = (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n\n\treturn Object.assign(fn, {\n\t\twithRLS: ((name, columns, extraConfig) => {\n\t\t\tconst table = pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t\t\ttable[EnableRLS] = true;\n\n\t\t\treturn table;\n\t\t}) as PgTableFnInternal,\n\t});\n}\n"],"mappings":";;;;;;;AAwCA,MAAa,oBAAoB,OAAO,IAAI,8BAA8B;;AAE1E,MAAa,YAAY,OAAO,IAAI,oBAAoB;AAExD,IAAa,UAAb,cAAsEA,iBAAS;CAC9E,QAA0BC,0BAAsB;;CAGhD,OAAyB,SAAS,OAAO,OAAO,EAAE,EAAED,iBAAM,QAAQ;EAC9C;EACR;EACX,CAAC;;CAGF,CAAC,qBAAmC,EAAE;;CAGtC,CAAC,aAAsB;;CAGvB,CAAUA,iBAAM,OAAO,sBACtB;;CAGD,CAAUA,iBAAM,OAAO,sBAAyD,EAAE;;;AAoBnF,SAAgB,kBAKf,MACA,SACA,aAGA,QACA,WAAW,MAMT;CACF,MAAM,WAAW,IAAI,QAKlB,MAAM,QAAQ,SAAS;CAE1B,MAAME,gBAA6B,OAAO,YAAY,aAAa,QAAQC,iDAAqB,CAAC,GAAG;CAEpG,MAAM,eAAe,OAAO,YAC3B,OAAO,QAAQ,cAAc,CAAC,KAAK,CAACC,QAAM,oBAAoB;EAC7D,MAAM,aAAa;AACnB,aAAW,QAAQA,OAAK;EACxB,MAAM,SAAS,WAAW,MAAM,SAAS;AACzC,WAAS,mBAAmB,KAAK,GAAG,WAAW,iBAAiB,QAAQ,SAAS,CAAC;AAClF,SAAO,CAACA,QAAM,OAAO;GACpB,CACF;CAED,MAAM,6BAA6B,OAAO,YACzC,OAAO,QAAQ,cAAc,CAAC,KAAK,CAACA,QAAM,oBAAoB;EAC7D,MAAM,aAAa;AACnB,aAAW,QAAQA,OAAK;AAExB,SAAO,CAACA,QADO,WAAW,uBAAuB,SAAS,CACrC;GACpB,CACF;CAED,MAAM,QAAQ,OAAO,OAAO,UAAU,aAAa;AAEnD,OAAMJ,iBAAM,OAAO,WAAW;AAC9B,OAAMA,iBAAM,OAAO,sBAAsB;AAEzC,KAAI,YACH,OAAM,QAAQ,OAAO,sBAAsB;AAG5C,QAAO,OAAO,OAAO,OAAO,EAC3B,iBAAiB;AAChB,QAAM,QAAQ,OAAO,aAAa;AAClC,SAAO;IAOR,CAAC;;AAgHH,MAAMK,mBAAsC,MAAM,SAAS,gBAAgB;AAC1E,QAAO,kBAAkB,MAAM,SAAS,aAAa,OAAU;;AAGhE,MAAMC,kBAAwC,MAAM,SAAS,gBAAgB;CAC5E,MAAM,QAAQ,kBAAkB,MAAM,SAAS,aAAa,OAAU;AACtE,OAAM,aAAa;AAEnB,QAAO;;AAGR,MAAaC,UAAqB,OAAO,OAAO,iBAAiB,EAAE,SAAS,gBAAgB,CAAC;AAE7F,SAAgB,eAAe,oBAAyD;CACvF,MAAMC,MAAyB,MAAM,SAAS,gBAAgB;AAC7D,SAAO,kBAAkB,mBAAmB,KAAK,EAAiB,SAAS,aAAa,QAAW,KAAK;;AAGzG,QAAO,OAAO,OAAO,IAAI,EACxB,WAAW,MAAM,SAAS,gBAAgB;EACzC,MAAM,QAAQ,kBAAkB,mBAAmB,KAAK,EAAiB,SAAS,aAAa,QAAW,KAAK;AAC/G,QAAM,aAAa;AAEnB,SAAO;KAER,CAAC"}
|
package/pg-core/table.d.cts
CHANGED
|
@@ -11,7 +11,7 @@ import type { UniqueConstraintBuilder } from './unique-constraint.cjs';
|
|
|
11
11
|
export type PgTableExtraConfigValue = AnyIndexBuilder | CheckBuilder | ForeignKeyBuilder | PrimaryKeyBuilder | UniqueConstraintBuilder | PgPolicy;
|
|
12
12
|
export type PgTableExtraConfig = Record<string, PgTableExtraConfigValue>;
|
|
13
13
|
export type TableConfig = TableConfigBase<PgColumns>;
|
|
14
|
-
export declare class PgTable<T extends TableConfig = TableConfig> extends Table<T> {
|
|
14
|
+
export declare class PgTable<out T extends TableConfig = TableConfig> extends Table<T> {
|
|
15
15
|
static readonly [entityKind]: string;
|
|
16
16
|
}
|
|
17
17
|
export type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;
|
package/pg-core/table.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ import type { UniqueConstraintBuilder } from './unique-constraint.js';
|
|
|
11
11
|
export type PgTableExtraConfigValue = AnyIndexBuilder | CheckBuilder | ForeignKeyBuilder | PrimaryKeyBuilder | UniqueConstraintBuilder | PgPolicy;
|
|
12
12
|
export type PgTableExtraConfig = Record<string, PgTableExtraConfigValue>;
|
|
13
13
|
export type TableConfig = TableConfigBase<PgColumns>;
|
|
14
|
-
export declare class PgTable<T extends TableConfig = TableConfig> extends Table<T> {
|
|
14
|
+
export declare class PgTable<out T extends TableConfig = TableConfig> extends Table<T> {
|
|
15
15
|
static readonly [entityKind]: string;
|
|
16
16
|
}
|
|
17
17
|
export type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;
|
package/pg-core/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","names":["parsedColumns: TColumnsMap","name","pgTableInternal: PgTableFnInternal","pgTableWithRLS: PgTableFn['withRLS']","pgTable: PgTableFn","fn: PgTableFnInternal"],"sources":["../../src/pg-core/table.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport {\n\ttype InferTableColumnsModels,\n\tTable,\n\ttype TableConfig as TableConfigBase,\n\ttype UpdateTableConfig,\n} from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type {\n\tAnyPgColumnBuilder,\n\tExtraConfigColumn,\n\tPgBuildColumns,\n\tPgBuildExtraConfigColumns,\n\tPgColumn,\n\tPgColumnBuilder,\n\tPgColumns,\n} from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<\n\tstring,\n\tPgTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<PgColumns>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<\n\tT extends TableConfig,\n> =\n\t& PgTable<T>\n\t& T['columns']\n\t& InferTableColumnsModels<T['columns']>\n\t& {\n\t\t/** @deprecated use `pgTable.withRLS()` instead*/\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\tdialect: 'pg';\n}> {\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildColumns<TTableName, TColumnsMap>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildExtraConfigColumns<TColumnsMap>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t}) as any;\n}\n\nexport interface PgTableFnInternal<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> extends PgTableFnInternal<TSchema> {\n\twithRLS: PgTableFnInternal<TSchema>;\n}\n\nconst pgTableInternal: PgTableFnInternal = (name, columns, extraConfig) => {\n\treturn pgTableWithSchema(name, columns, extraConfig, undefined);\n};\n\nconst pgTableWithRLS: PgTableFn['withRLS'] = (name, columns, extraConfig) => {\n\tconst table = pgTableWithSchema(name, columns, extraConfig, undefined);\n\ttable[EnableRLS] = true;\n\n\treturn table;\n};\n\nexport const pgTable: PgTableFn = Object.assign(pgTableInternal, { withRLS: pgTableWithRLS });\n\nexport function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {\n\tconst fn: PgTableFnInternal = (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n\n\treturn Object.assign(fn, {\n\t\twithRLS: ((name, columns, extraConfig) => {\n\t\t\tconst table = pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t\t\ttable[EnableRLS] = true;\n\n\t\t\treturn table;\n\t\t}) as PgTableFnInternal,\n\t});\n}\n"],"mappings":";;;;;;AAwCA,MAAa,oBAAoB,OAAO,IAAI,8BAA8B;;AAE1E,MAAa,YAAY,OAAO,IAAI,oBAAoB;AAExD,IAAa,UAAb,cAAkE,MAAS;CAC1E,QAA0B,cAAsB;;CAGhD,OAAyB,SAAS,OAAO,OAAO,EAAE,EAAE,MAAM,QAAQ;EAC9C;EACR;EACX,CAAC;;CAGF,CAAC,qBAAmC,EAAE;;CAGtC,CAAC,aAAsB;;CAGvB,CAAU,MAAM,OAAO,sBACtB;;CAGD,CAAU,MAAM,OAAO,sBAAyD,EAAE;;;AAoBnF,SAAgB,kBAKf,MACA,SACA,aAGA,QACA,WAAW,MAMT;CACF,MAAM,WAAW,IAAI,QAKlB,MAAM,QAAQ,SAAS;CAE1B,MAAMA,gBAA6B,OAAO,YAAY,aAAa,QAAQ,qBAAqB,CAAC,GAAG;CAEpG,MAAM,eAAe,OAAO,YAC3B,OAAO,QAAQ,cAAc,CAAC,KAAK,CAACC,QAAM,oBAAoB;EAC7D,MAAM,aAAa;AACnB,aAAW,QAAQA,OAAK;EACxB,MAAM,SAAS,WAAW,MAAM,SAAS;AACzC,WAAS,mBAAmB,KAAK,GAAG,WAAW,iBAAiB,QAAQ,SAAS,CAAC;AAClF,SAAO,CAACA,QAAM,OAAO;GACpB,CACF;CAED,MAAM,6BAA6B,OAAO,YACzC,OAAO,QAAQ,cAAc,CAAC,KAAK,CAACA,QAAM,oBAAoB;EAC7D,MAAM,aAAa;AACnB,aAAW,QAAQA,OAAK;AAExB,SAAO,CAACA,QADO,WAAW,uBAAuB,SAAS,CACrC;GACpB,CACF;CAED,MAAM,QAAQ,OAAO,OAAO,UAAU,aAAa;AAEnD,OAAM,MAAM,OAAO,WAAW;AAC9B,OAAM,MAAM,OAAO,sBAAsB;AAEzC,KAAI,YACH,OAAM,QAAQ,OAAO,sBAAsB;AAG5C,QAAO,OAAO,OAAO,OAAO,EAC3B,iBAAiB;AAChB,QAAM,QAAQ,OAAO,aAAa;AAClC,SAAO;IAOR,CAAC;;AAgHH,MAAMC,mBAAsC,MAAM,SAAS,gBAAgB;AAC1E,QAAO,kBAAkB,MAAM,SAAS,aAAa,OAAU;;AAGhE,MAAMC,kBAAwC,MAAM,SAAS,gBAAgB;CAC5E,MAAM,QAAQ,kBAAkB,MAAM,SAAS,aAAa,OAAU;AACtE,OAAM,aAAa;AAEnB,QAAO;;AAGR,MAAaC,UAAqB,OAAO,OAAO,iBAAiB,EAAE,SAAS,gBAAgB,CAAC;AAE7F,SAAgB,eAAe,oBAAyD;CACvF,MAAMC,MAAyB,MAAM,SAAS,gBAAgB;AAC7D,SAAO,kBAAkB,mBAAmB,KAAK,EAAiB,SAAS,aAAa,QAAW,KAAK;;AAGzG,QAAO,OAAO,OAAO,IAAI,EACxB,WAAW,MAAM,SAAS,gBAAgB;EACzC,MAAM,QAAQ,kBAAkB,mBAAmB,KAAK,EAAiB,SAAS,aAAa,QAAW,KAAK;AAC/G,QAAM,aAAa;AAEnB,SAAO;KAER,CAAC"}
|
|
1
|
+
{"version":3,"file":"table.js","names":["parsedColumns: TColumnsMap","name","pgTableInternal: PgTableFnInternal","pgTableWithRLS: PgTableFn['withRLS']","pgTable: PgTableFn","fn: PgTableFnInternal"],"sources":["../../src/pg-core/table.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport {\n\ttype InferTableColumnsModels,\n\tTable,\n\ttype TableConfig as TableConfigBase,\n\ttype UpdateTableConfig,\n} from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type {\n\tAnyPgColumnBuilder,\n\tExtraConfigColumn,\n\tPgBuildColumns,\n\tPgBuildExtraConfigColumns,\n\tPgColumn,\n\tPgColumnBuilder,\n\tPgColumns,\n} from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<\n\tstring,\n\tPgTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<PgColumns>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<out T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<\n\tT extends TableConfig,\n> =\n\t& PgTable<T>\n\t& T['columns']\n\t& InferTableColumnsModels<T['columns']>\n\t& {\n\t\t/** @deprecated use `pgTable.withRLS()` instead*/\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\tdialect: 'pg';\n}> {\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildColumns<TTableName, TColumnsMap>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as PgBuildExtraConfigColumns<TColumnsMap>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t}) as any;\n}\n\nexport interface PgTableFnInternal<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: PgBuildExtraConfigColumns<TColumnsMap>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, AnyPgColumnBuilder>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: PgBuildExtraConfigColumns<TColumnsMap>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: PgBuildColumns<TTableName, TColumnsMap>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> extends PgTableFnInternal<TSchema> {\n\twithRLS: PgTableFnInternal<TSchema>;\n}\n\nconst pgTableInternal: PgTableFnInternal = (name, columns, extraConfig) => {\n\treturn pgTableWithSchema(name, columns, extraConfig, undefined);\n};\n\nconst pgTableWithRLS: PgTableFn['withRLS'] = (name, columns, extraConfig) => {\n\tconst table = pgTableWithSchema(name, columns, extraConfig, undefined);\n\ttable[EnableRLS] = true;\n\n\treturn table;\n};\n\nexport const pgTable: PgTableFn = Object.assign(pgTableInternal, { withRLS: pgTableWithRLS });\n\nexport function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {\n\tconst fn: PgTableFnInternal = (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n\n\treturn Object.assign(fn, {\n\t\twithRLS: ((name, columns, extraConfig) => {\n\t\t\tconst table = pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t\t\ttable[EnableRLS] = true;\n\n\t\t\treturn table;\n\t\t}) as PgTableFnInternal,\n\t});\n}\n"],"mappings":";;;;;;AAwCA,MAAa,oBAAoB,OAAO,IAAI,8BAA8B;;AAE1E,MAAa,YAAY,OAAO,IAAI,oBAAoB;AAExD,IAAa,UAAb,cAAsE,MAAS;CAC9E,QAA0B,cAAsB;;CAGhD,OAAyB,SAAS,OAAO,OAAO,EAAE,EAAE,MAAM,QAAQ;EAC9C;EACR;EACX,CAAC;;CAGF,CAAC,qBAAmC,EAAE;;CAGtC,CAAC,aAAsB;;CAGvB,CAAU,MAAM,OAAO,sBACtB;;CAGD,CAAU,MAAM,OAAO,sBAAyD,EAAE;;;AAoBnF,SAAgB,kBAKf,MACA,SACA,aAGA,QACA,WAAW,MAMT;CACF,MAAM,WAAW,IAAI,QAKlB,MAAM,QAAQ,SAAS;CAE1B,MAAMA,gBAA6B,OAAO,YAAY,aAAa,QAAQ,qBAAqB,CAAC,GAAG;CAEpG,MAAM,eAAe,OAAO,YAC3B,OAAO,QAAQ,cAAc,CAAC,KAAK,CAACC,QAAM,oBAAoB;EAC7D,MAAM,aAAa;AACnB,aAAW,QAAQA,OAAK;EACxB,MAAM,SAAS,WAAW,MAAM,SAAS;AACzC,WAAS,mBAAmB,KAAK,GAAG,WAAW,iBAAiB,QAAQ,SAAS,CAAC;AAClF,SAAO,CAACA,QAAM,OAAO;GACpB,CACF;CAED,MAAM,6BAA6B,OAAO,YACzC,OAAO,QAAQ,cAAc,CAAC,KAAK,CAACA,QAAM,oBAAoB;EAC7D,MAAM,aAAa;AACnB,aAAW,QAAQA,OAAK;AAExB,SAAO,CAACA,QADO,WAAW,uBAAuB,SAAS,CACrC;GACpB,CACF;CAED,MAAM,QAAQ,OAAO,OAAO,UAAU,aAAa;AAEnD,OAAM,MAAM,OAAO,WAAW;AAC9B,OAAM,MAAM,OAAO,sBAAsB;AAEzC,KAAI,YACH,OAAM,QAAQ,OAAO,sBAAsB;AAG5C,QAAO,OAAO,OAAO,OAAO,EAC3B,iBAAiB;AAChB,QAAM,QAAQ,OAAO,aAAa;AAClC,SAAO;IAOR,CAAC;;AAgHH,MAAMC,mBAAsC,MAAM,SAAS,gBAAgB;AAC1E,QAAO,kBAAkB,MAAM,SAAS,aAAa,OAAU;;AAGhE,MAAMC,kBAAwC,MAAM,SAAS,gBAAgB;CAC5E,MAAM,QAAQ,kBAAkB,MAAM,SAAS,aAAa,OAAU;AACtE,OAAM,aAAa;AAEnB,QAAO;;AAGR,MAAaC,UAAqB,OAAO,OAAO,iBAAiB,EAAE,SAAS,gBAAgB,CAAC;AAE7F,SAAgB,eAAe,oBAAyD;CACvF,MAAMC,MAAyB,MAAM,SAAS,gBAAgB;AAC7D,SAAO,kBAAkB,mBAAmB,KAAK,EAAiB,SAAS,aAAa,QAAW,KAAK;;AAGzG,QAAO,OAAO,OAAO,IAAI,EACxB,WAAW,MAAM,SAAS,gBAAgB;EACzC,MAAM,QAAQ,kBAAkB,mBAAmB,KAAK,EAAiB,SAAS,aAAa,QAAW,KAAK;AAC/G,QAAM,aAAa;AAEnB,SAAO;KAER,CAAC"}
|
package/table.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.cjs","names":["entityKind","TableName"],"sources":["../src/table.ts"],"sourcesContent":["import type { Column, Columns, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { View } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumns extends Columns = Columns> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: TColumns;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const TableSchema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const TableColumns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface TableTypeConfig<T extends TableConfig> {\n\treadonly brand: 'Table';\n\treadonly name: T['name'];\n\treadonly schema: T['schema'];\n\treadonly columns: T['columns'];\n\treadonly dialect: T['dialect'];\n}\n\nexport class Table<T extends TableConfig = TableConfig> {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: TableTypeConfig<T>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: TableSchema as typeof TableSchema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: TableColumns as typeof TableColumns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[TableSchema]: string | undefined;\n\n\t/** @internal */\n\t[TableColumns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t * @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[TableSchema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<\n\tT extends Table | View,\n\tTResult extends string = T extends Table ? T['_']['schema'] extends undefined ? `public.${T['_']['name']}`\n\t\t: `${T['_']['schema']}.${T['_']['name']}`\n\t\t// Views don't have type-level schema names, to be added\n\t\t: `${string}.${T['_']['name']}`,\n>(\n\ttable: T,\n): TResult {\n\treturn `${table[TableSchema] ?? 'public'}.${table[TableName]}` as TResult;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Columns,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n> = InferModelFromColumns<TTable['_']['columns'], 'select'>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTOverride extends { override?: boolean } = { override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TOverride>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n\nexport interface InferTableColumnsModels<TColumns extends Columns> {\n\treadonly $inferSelect: InferModelFromColumns<TColumns, 'select'>;\n\treadonly $inferInsert: InferModelFromColumns<TColumns, 'insert', { override: false }>;\n}\n"],"mappings":";;;;;AAmBA,MAAa,cAAc,OAAO,IAAI,iBAAiB;;AAGvD,MAAa,eAAe,OAAO,IAAI,kBAAkB;;AAGzD,MAAa,qBAAqB,OAAO,IAAI,6BAA6B;;AAG1E,MAAa,eAAe,OAAO,IAAI,uBAAuB;;AAG9D,MAAa,WAAW,OAAO,IAAI,mBAAmB;;AAGtD,MAAa,UAAU,OAAO,IAAI,kBAAkB;;AAGpD,MAAa,qBAAqB,OAAO,IAAI,6BAA6B;AAE1E,MAAM,iBAAiB,OAAO,IAAI,yBAAyB;AAU3D,IAAa,QAAb,
|
|
1
|
+
{"version":3,"file":"table.cjs","names":["entityKind","TableName"],"sources":["../src/table.ts"],"sourcesContent":["import type { Column, Columns, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { View } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumns extends Columns = Columns> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: TColumns;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const TableSchema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const TableColumns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface TableTypeConfig<T extends TableConfig> {\n\treadonly brand: 'Table';\n\treadonly name: T['name'];\n\treadonly schema: T['schema'];\n\treadonly columns: T['columns'];\n\treadonly dialect: T['dialect'];\n}\n\nexport class Table<out T extends TableConfig = TableConfig> {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: TableTypeConfig<T>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: TableSchema as typeof TableSchema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: TableColumns as typeof TableColumns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[TableSchema]: string | undefined;\n\n\t/** @internal */\n\t[TableColumns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t * @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[TableSchema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<\n\tT extends Table | View,\n\tTResult extends string = T extends Table ? T['_']['schema'] extends undefined ? `public.${T['_']['name']}`\n\t\t: `${T['_']['schema']}.${T['_']['name']}`\n\t\t// Views don't have type-level schema names, to be added\n\t\t: `${string}.${T['_']['name']}`,\n>(\n\ttable: T,\n): TResult {\n\treturn `${table[TableSchema] ?? 'public'}.${table[TableName]}` as TResult;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Columns,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n> = InferModelFromColumns<TTable['_']['columns'], 'select'>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTOverride extends { override?: boolean } = { override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TOverride>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n\nexport interface InferTableColumnsModels<TColumns extends Columns> {\n\treadonly $inferSelect: InferModelFromColumns<TColumns, 'select'>;\n\treadonly $inferInsert: InferModelFromColumns<TColumns, 'insert', { override: false }>;\n}\n"],"mappings":";;;;;AAmBA,MAAa,cAAc,OAAO,IAAI,iBAAiB;;AAGvD,MAAa,eAAe,OAAO,IAAI,kBAAkB;;AAGzD,MAAa,qBAAqB,OAAO,IAAI,6BAA6B;;AAG1E,MAAa,eAAe,OAAO,IAAI,uBAAuB;;AAG9D,MAAa,WAAW,OAAO,IAAI,mBAAmB;;AAGtD,MAAa,UAAU,OAAO,IAAI,kBAAkB;;AAGpD,MAAa,qBAAqB,OAAO,IAAI,6BAA6B;AAE1E,MAAM,iBAAiB,OAAO,IAAI,yBAAyB;AAU3D,IAAa,QAAb,MAA4D;CAC3D,QAAiBA,6BAAsB;;CAKvC,OAAgB,SAAS;EACxB,MAAMC;EACN,QAAQ;EACM;EACd,SAAS;EACW;EACV;EACD;EACW;EACpB;;;;;CAMD,CAACA;;;;;CAMD,CAAC;;CAGD,CAAC;;CAGD,CAAC;;CAGD,CAAC;;;;;CAMD,CAAC;;CAGD,CAAC,WAAW;;CAGZ,CAAC,kBAAkB;;CAGnB,CAAC,sBAAwF;CAEzF,YAAY,MAAc,QAA4B,UAAkB;AACvE,OAAKA,iCAAa,KAAK,gBAAgB;AACvC,OAAK,eAAe;AACpB,OAAK,YAAY;;;AAInB,SAAgB,QAAQ,OAAgC;AACvD,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,kBAAkB;;AAsBzE,SAAgB,aAA8B,OAA0B;AACvE,QAAO,MAAMA;;AAGd,SAAgB,mBAOf,OACU;AACV,QAAO,GAAG,MAAM,gBAAgB,SAAS,GAAG,MAAMA"}
|
package/table.d.cts
CHANGED
|
@@ -17,7 +17,7 @@ export interface TableTypeConfig<T extends TableConfig> {
|
|
|
17
17
|
readonly columns: T['columns'];
|
|
18
18
|
readonly dialect: T['dialect'];
|
|
19
19
|
}
|
|
20
|
-
export declare class Table<T extends TableConfig = TableConfig> {
|
|
20
|
+
export declare class Table<out T extends TableConfig = TableConfig> {
|
|
21
21
|
static readonly [entityKind]: string;
|
|
22
22
|
readonly _: TableTypeConfig<T>;
|
|
23
23
|
constructor(name: string, schema: string | undefined, baseName: string);
|
package/table.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export interface TableTypeConfig<T extends TableConfig> {
|
|
|
17
17
|
readonly columns: T['columns'];
|
|
18
18
|
readonly dialect: T['dialect'];
|
|
19
19
|
}
|
|
20
|
-
export declare class Table<T extends TableConfig = TableConfig> {
|
|
20
|
+
export declare class Table<out T extends TableConfig = TableConfig> {
|
|
21
21
|
static readonly [entityKind]: string;
|
|
22
22
|
readonly _: TableTypeConfig<T>;
|
|
23
23
|
constructor(name: string, schema: string | undefined, baseName: string);
|
package/table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","names":[],"sources":["../src/table.ts"],"sourcesContent":["import type { Column, Columns, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { View } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumns extends Columns = Columns> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: TColumns;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const TableSchema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const TableColumns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface TableTypeConfig<T extends TableConfig> {\n\treadonly brand: 'Table';\n\treadonly name: T['name'];\n\treadonly schema: T['schema'];\n\treadonly columns: T['columns'];\n\treadonly dialect: T['dialect'];\n}\n\nexport class Table<T extends TableConfig = TableConfig> {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: TableTypeConfig<T>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: TableSchema as typeof TableSchema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: TableColumns as typeof TableColumns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[TableSchema]: string | undefined;\n\n\t/** @internal */\n\t[TableColumns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t * @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[TableSchema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<\n\tT extends Table | View,\n\tTResult extends string = T extends Table ? T['_']['schema'] extends undefined ? `public.${T['_']['name']}`\n\t\t: `${T['_']['schema']}.${T['_']['name']}`\n\t\t// Views don't have type-level schema names, to be added\n\t\t: `${string}.${T['_']['name']}`,\n>(\n\ttable: T,\n): TResult {\n\treturn `${table[TableSchema] ?? 'public'}.${table[TableName]}` as TResult;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Columns,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n> = InferModelFromColumns<TTable['_']['columns'], 'select'>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTOverride extends { override?: boolean } = { override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TOverride>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n\nexport interface InferTableColumnsModels<TColumns extends Columns> {\n\treadonly $inferSelect: InferModelFromColumns<TColumns, 'select'>;\n\treadonly $inferInsert: InferModelFromColumns<TColumns, 'insert', { override: false }>;\n}\n"],"mappings":";;;;;AAmBA,MAAa,cAAc,OAAO,IAAI,iBAAiB;;AAGvD,MAAa,eAAe,OAAO,IAAI,kBAAkB;;AAGzD,MAAa,qBAAqB,OAAO,IAAI,6BAA6B;;AAG1E,MAAa,eAAe,OAAO,IAAI,uBAAuB;;AAG9D,MAAa,WAAW,OAAO,IAAI,mBAAmB;;AAGtD,MAAa,UAAU,OAAO,IAAI,kBAAkB;;AAGpD,MAAa,qBAAqB,OAAO,IAAI,6BAA6B;AAE1E,MAAM,iBAAiB,OAAO,IAAI,yBAAyB;AAU3D,IAAa,QAAb,
|
|
1
|
+
{"version":3,"file":"table.js","names":[],"sources":["../src/table.ts"],"sourcesContent":["import type { Column, Columns, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { View } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumns extends Columns = Columns> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: TColumns;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const TableSchema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const TableColumns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface TableTypeConfig<T extends TableConfig> {\n\treadonly brand: 'Table';\n\treadonly name: T['name'];\n\treadonly schema: T['schema'];\n\treadonly columns: T['columns'];\n\treadonly dialect: T['dialect'];\n}\n\nexport class Table<out T extends TableConfig = TableConfig> {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: TableTypeConfig<T>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: TableSchema as typeof TableSchema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: TableColumns as typeof TableColumns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[TableSchema]: string | undefined;\n\n\t/** @internal */\n\t[TableColumns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t * @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[TableSchema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<\n\tT extends Table | View,\n\tTResult extends string = T extends Table ? T['_']['schema'] extends undefined ? `public.${T['_']['name']}`\n\t\t: `${T['_']['schema']}.${T['_']['name']}`\n\t\t// Views don't have type-level schema names, to be added\n\t\t: `${string}.${T['_']['name']}`,\n>(\n\ttable: T,\n): TResult {\n\treturn `${table[TableSchema] ?? 'public'}.${table[TableName]}` as TResult;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Columns,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tKey,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n> = InferModelFromColumns<TTable['_']['columns'], 'select'>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTOverride extends { override?: boolean } = { override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TOverride>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n\nexport interface InferTableColumnsModels<TColumns extends Columns> {\n\treadonly $inferSelect: InferModelFromColumns<TColumns, 'select'>;\n\treadonly $inferInsert: InferModelFromColumns<TColumns, 'insert', { override: false }>;\n}\n"],"mappings":";;;;;AAmBA,MAAa,cAAc,OAAO,IAAI,iBAAiB;;AAGvD,MAAa,eAAe,OAAO,IAAI,kBAAkB;;AAGzD,MAAa,qBAAqB,OAAO,IAAI,6BAA6B;;AAG1E,MAAa,eAAe,OAAO,IAAI,uBAAuB;;AAG9D,MAAa,WAAW,OAAO,IAAI,mBAAmB;;AAGtD,MAAa,UAAU,OAAO,IAAI,kBAAkB;;AAGpD,MAAa,qBAAqB,OAAO,IAAI,6BAA6B;AAE1E,MAAM,iBAAiB,OAAO,IAAI,yBAAyB;AAU3D,IAAa,QAAb,MAA4D;CAC3D,QAAiB,cAAsB;;CAKvC,OAAgB,SAAS;EACxB,MAAM;EACN,QAAQ;EACM;EACd,SAAS;EACW;EACV;EACD;EACW;EACpB;;;;;CAMD,CAAC;;;;;CAMD,CAAC;;CAGD,CAAC;;CAGD,CAAC;;CAGD,CAAC;;;;;CAMD,CAAC;;CAGD,CAAC,WAAW;;CAGZ,CAAC,kBAAkB;;CAGnB,CAAC,sBAAwF;CAEzF,YAAY,MAAc,QAA4B,UAAkB;AACvE,OAAK,aAAa,KAAK,gBAAgB;AACvC,OAAK,eAAe;AACpB,OAAK,YAAY;;;AAInB,SAAgB,QAAQ,OAAgC;AACvD,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,kBAAkB;;AAsBzE,SAAgB,aAA8B,OAA0B;AACvE,QAAO,MAAM;;AAGd,SAAgB,mBAOf,OACU;AACV,QAAO,GAAG,MAAM,gBAAgB,SAAS,GAAG,MAAM"}
|