AK-21/Graphite-Industrial-Intelligence
0
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 