CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
column-builder.d.cts243 linesDownload Raw Back to drizzle-orm
1import { entityKind } from "./entity.cjs";2import type { Column } from "./column.cjs";3import type { GelColumn, GelExtraConfigColumn } from "./gel-core/index.cjs";4import type { MySqlColumn } from "./mysql-core/index.cjs";5import type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from "./pg-core/index.cjs";6import type { SingleStoreColumn } from "./singlestore-core/index.cjs";7import type { SQL } from "./sql/sql.cjs";8import type { SQLiteColumn } from "./sqlite-core/index.cjs";9import type { Assume, Simplify } from "./utils.cjs";10export type ColumnDataType = 'string' | 'number' | 'boolean' | 'array' | 'json' | 'date' | 'bigint' | 'custom' | 'buffer' | 'dateDuration' | 'duration' | 'relDuration' | 'localTime' | 'localDate' | 'localDateTime';11export type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'common' | 'gel';12export type GeneratedStorageMode = 'virtual' | 'stored';13export type GeneratedType = 'always' | 'byDefault';14export type GeneratedColumnConfig<TDataType> = {15    as: TDataType | SQL | (() => SQL);16    type?: GeneratedType;17    mode?: GeneratedStorageMode;18};19export type GeneratedIdentityConfig = {20    sequenceName?: string;21    sequenceOptions?: PgSequenceOptions;22    type: 'always' | 'byDefault';23};24export interface ColumnBuilderBaseConfig<TDataType extends ColumnDataType, TColumnType extends string> {25    name: string;26    dataType: TDataType;27    columnType: TColumnType;28    data: unknown;29    driverParam: unknown;30    enumValues: string[] | undefined;31}32export type MakeColumnConfig<T extends ColumnBuilderBaseConfig<ColumnDataType, string>, TTableName extends string, TData = T extends {33    $type: infer U;34} ? U : T['data']> = {35    name: T['name'];36    tableName: TTableName;37    dataType: T['dataType'];38    columnType: T['columnType'];39    data: TData;40    driverParam: T['driverParam'];41    notNull: T extends {42        notNull: true;43    } ? true : false;44    hasDefault: T extends {45        hasDefault: true;46    } ? true : false;47    isPrimaryKey: T extends {48        isPrimaryKey: true;49    } ? true : false;50    isAutoincrement: T extends {51        isAutoincrement: true;52    } ? true : false;53    hasRuntimeDefault: T extends {54        hasRuntimeDefault: true;55    } ? true : false;56    enumValues: T['enumValues'];57    baseColumn: T extends {58        baseBuilder: infer U extends ColumnBuilderBase;59    } ? BuildColumn<TTableName, U, 'common'> : never;60    identity: T extends {61        identity: 'always';62    } ? 'always' : T extends {63        identity: 'byDefault';64    } ? 'byDefault' : undefined;65    generated: T extends {66        generated: infer G;67    } ? unknown extends G ? undefined : G extends undefined ? undefined : G : undefined;68} & {};69export type ColumnBuilderTypeConfig<T extends ColumnBuilderBaseConfig<ColumnDataType, string>, TTypeConfig extends object = object> = Simplify<{70    brand: 'ColumnBuilder';71    name: T['name'];72    dataType: T['dataType'];73    columnType: T['columnType'];74    data: T['data'];75    driverParam: T['driverParam'];76    notNull: T extends {77        notNull: infer U;78    } ? U : boolean;79    hasDefault: T extends {80        hasDefault: infer U;81    } ? U : boolean;82    enumValues: T['enumValues'];83    identity: T extends {84        identity: infer U;85    } ? U : unknown;86    generated: T extends {87        generated: infer G;88    } ? G extends undefined ? unknown : G : unknown;89} & TTypeConfig>;90export type ColumnBuilderRuntimeConfig<TData, TRuntimeConfig extends object = object> = {91    name: string;92    keyAsName: boolean;93    notNull: boolean;94    default: TData | SQL | undefined;95    defaultFn: (() => TData | SQL) | undefined;96    onUpdateFn: (() => TData | SQL) | undefined;97    hasDefault: boolean;98    primaryKey: boolean;99    isUnique: boolean;100    uniqueName: string | undefined;101    uniqueType: string | undefined;102    dataType: string;103    columnType: string;104    generated: GeneratedColumnConfig<TData> | undefined;105    generatedIdentity: GeneratedIdentityConfig | undefined;106} & TRuntimeConfig;107export interface ColumnBuilderExtraConfig {108    primaryKeyHasDefault?: boolean;109}110export type NotNull<T extends ColumnBuilderBase> = T & {111    _: {112        notNull: true;113    };114};115export type HasDefault<T extends ColumnBuilderBase> = T & {116    _: {117        hasDefault: true;118    };119};120export type IsPrimaryKey<T extends ColumnBuilderBase> = T & {121    _: {122        isPrimaryKey: true;123    };124};125export type IsAutoincrement<T extends ColumnBuilderBase> = T & {126    _: {127        isAutoincrement: true;128    };129};130export type HasRuntimeDefault<T extends ColumnBuilderBase> = T & {131    _: {132        hasRuntimeDefault: true;133    };134};135export type $Type<T extends ColumnBuilderBase, TType> = T & {136    _: {137        $type: TType;138    };139};140export type HasGenerated<T extends ColumnBuilderBase, TGenerated extends {} = {}> = T & {141    _: {142        hasDefault: true;143        generated: TGenerated;144    };145};146export type IsIdentity<T extends ColumnBuilderBase, TType extends 'always' | 'byDefault'> = T & {147    _: {148        notNull: true;149        hasDefault: true;150        identity: TType;151    };152};153export interface ColumnBuilderBase<T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>, TTypeConfig extends object = object> {154    _: ColumnBuilderTypeConfig<T, TTypeConfig>;155}156export declare abstract class ColumnBuilder<T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>, TRuntimeConfig extends object = object, TTypeConfig extends object = object, TExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig> implements ColumnBuilderBase<T, TTypeConfig> {157    static readonly [entityKind]: string;158    _: ColumnBuilderTypeConfig<T, TTypeConfig>;159    protected config: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;160    constructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']);161    /**162     * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.163     *164     * @example165     * ```ts166     * const users = pgTable('users', {167     * 	id: integer('id').$type<UserId>().primaryKey(),168     * 	details: json('details').$type<UserDetails>().notNull(),169     * });170     * ```171     */172    $type<TType>(): $Type<this, TType>;173    /**174     * Adds a `not null` clause to the column definition.175     *176     * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.177     */178    notNull(): NotNull<this>;179    /**180     * Adds a `default <value>` clause to the column definition.181     *182     * Affects the `insert` model of the table - columns *with* `default` are optional on insert.183     *184     * If you need to set a dynamic default value, use {@link $defaultFn} instead.185     */186    default(value: (this['_'] extends {187        $type: infer U;188    } ? U : this['_']['data']) | SQL): HasDefault<this>;189    /**190     * Adds a dynamic default value to the column.191     * The function will be called when the row is inserted, and the returned value will be used as the column value.192     *193     * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.194     */195    $defaultFn(fn: () => (this['_'] extends {196        $type: infer U;197    } ? U : this['_']['data']) | SQL): HasRuntimeDefault<HasDefault<this>>;198    /**199     * Alias for {@link $defaultFn}.200     */201    $default: (fn: () => (this["_"] extends {202        $type: infer U;203    } ? U : this["_"]["data"]) | SQL) => HasRuntimeDefault<HasDefault<this>>;204    /**205     * Adds a dynamic update value to the column.206     * 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.207     * 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.208     *209     * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.210     */211    $onUpdateFn(fn: () => (this['_'] extends {212        $type: infer U;213    } ? U : this['_']['data']) | SQL): HasDefault<this>;214    /**215     * Alias for {@link $onUpdateFn}.216     */217    $onUpdate: (fn: () => (this["_"] extends {218        $type: infer U;219    } ? U : this["_"]["data"]) | SQL) => HasDefault<this>;220    /**221     * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.222     *223     * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.224     */225    primaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>> : IsPrimaryKey<NotNull<this>>;226    abstract generatedAlwaysAs(as: SQL | T['data'] | (() => SQL), config?: Partial<GeneratedColumnConfig<unknown>>): HasGenerated<this, {227        type: 'always';228    }>;229}230export type BuildColumn<TTableName extends string, TBuilder extends ColumnBuilderBase, TDialect extends Dialect> = TDialect extends 'pg' ? PgColumn<MakeColumnConfig<TBuilder['_'], TTableName>, {}, Simplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>> : TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TBuilder['_'], TTableName>, {}, Simplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect' | 'primaryKeyHasDefault' | 'mysqlColumnBuilderBrand'>>> : TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TBuilder['_'], TTableName>, {}, Simplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>> : TDialect extends 'common' ? Column<MakeColumnConfig<TBuilder['_'], TTableName>, {}, Simplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>> : TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TBuilder['_'], TTableName>, {}, Simplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect' | 'primaryKeyHasDefault' | 'singlestoreColumnBuilderBrand'>>> : TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TBuilder['_'], TTableName>, {}, Simplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>> : never;231export type BuildIndexColumn<TDialect extends Dialect> = TDialect extends 'pg' ? ExtraConfigColumn : TDialect extends 'gel' ? GelExtraConfigColumn : never;232export type BuildColumns<TTableName extends string, TConfigMap extends Record<string, ColumnBuilderBase>, TDialect extends Dialect> = {233    [Key in keyof TConfigMap]: BuildColumn<TTableName, {234        _: Omit<TConfigMap[Key]['_'], 'name'> & {235            name: TConfigMap[Key]['_']['name'] extends '' ? Assume<Key, string> : TConfigMap[Key]['_']['name'];236        };237    }, TDialect>;238} & {};239export type BuildExtraConfigColumns<_TTableName extends string, TConfigMap extends Record<string, ColumnBuilderBase>, TDialect extends Dialect> = {240    [Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;241} & {};242export type ChangeColumnTableName<TColumn extends Column, TAlias extends string, TDialect extends Dialect> = TDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>> : TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>> : TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>> : TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>> : TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>> : never;243