AK-21/Graphite-Industrial-Intelligence
0
1import type { Column, GetColumnData } from "./column.cjs";2import { entityKind } from "./entity.cjs";3import type { OptionalKeyOnly, RequiredKeyOnly } from "./operations.cjs";4import type { SQLWrapper } from "./sql/sql.cjs";5import type { Simplify, Update } from "./utils.cjs";6export interface TableConfig<TColumn extends Column = Column<any>> {7 name: string;8 schema: string | undefined;9 columns: Record<string, TColumn>;10 dialect: string;11}12export type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<Update<T, TUpdate>>;13export interface Table<T extends TableConfig = TableConfig> extends SQLWrapper {14}15export declare class Table<T extends TableConfig = TableConfig> implements SQLWrapper {16 static readonly [entityKind]: string;17 readonly _: {18 readonly brand: 'Table';19 readonly config: T;20 readonly name: T['name'];21 readonly schema: T['schema'];22 readonly columns: T['columns'];23 readonly inferSelect: InferSelectModel<Table<T>>;24 readonly inferInsert: InferInsertModel<Table<T>>;25 };26 readonly $inferSelect: InferSelectModel<Table<T>>;27 readonly $inferInsert: InferInsertModel<Table<T>>;28 constructor(name: string, schema: string | undefined, baseName: string);29}30export declare function isTable(table: unknown): table is Table;31/**32 * Any table with a specified boundary.33 *34 * @example35 ```ts36 // Any table with a specific name37 type AnyUsersTable = AnyTable<{ name: 'users' }>;38 ```39 *40 * To describe any table with any config, simply use `Table` without any type arguments, like this:41 *42 ```ts43 function needsTable(table: Table) {44 ...45 }46 ```47 */48export type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;49export declare function getTableName<T extends Table>(table: T): T['_']['name'];50export declare function getTableUniqueName<T extends Table>(table: T): `${T['_']['schema']}.${T['_']['name']}`;51export type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> = TDBColumNames extends true ? TColumn['_']['name'] : TName;52export type InferModelFromColumns<TColumns extends Record<string, Column>, TInferMode extends 'select' | 'insert' = 'select', TConfig extends {53 dbColumnNames: boolean;54 override?: boolean;55} = {56 dbColumnNames: false;57 override: false;58}> = Simplify<TInferMode extends 'insert' ? {59 [Key in keyof TColumns & string as RequiredKeyOnly<MapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>, TColumns[Key]>]: GetColumnData<TColumns[Key], 'query'>;60} & {61 [Key in keyof TColumns & string as OptionalKeyOnly<MapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>, TColumns[Key], TConfig['override']>]?: GetColumnData<TColumns[Key], 'query'> | undefined;62} : {63 [Key in keyof TColumns & string as MapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>]: GetColumnData<TColumns[Key], 'query'>;64}>;65/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`66 */67export type InferModel<TTable extends Table, TInferMode extends 'select' | 'insert' = 'select', TConfig extends {68 dbColumnNames: boolean;69} = {70 dbColumnNames: false;71}> = InferModelFromColumns<TTable['_']['columns'], TInferMode, TConfig>;72export type InferSelectModel<TTable extends Table, TConfig extends {73 dbColumnNames: boolean;74} = {75 dbColumnNames: false;76}> = InferModelFromColumns<TTable['_']['columns'], 'select', TConfig>;77export type InferInsertModel<TTable extends Table, TConfig extends {78 dbColumnNames: boolean;79 override?: boolean;80} = {81 dbColumnNames: false;82 override: false;83}> = InferModelFromColumns<TTable['_']['columns'], 'insert', TConfig>;84export type InferEnum<T> = T extends {85 enumValues: readonly (infer U)[];86} ? U : never;87 