column.d.ts 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, ColumnDataType, GeneratedColumnConfig, GeneratedIdentityConfig } from "./column-builder.js";
  2. import { entityKind } from "./entity.js";
  3. import type { DriverValueMapper, SQL, SQLWrapper } from "./sql/sql.js";
  4. import type { Table } from "./table.js";
  5. import type { Update } from "./utils.js";
  6. export interface ColumnBaseConfig<TDataType extends ColumnDataType, TColumnType extends string> extends ColumnBuilderBaseConfig<TDataType, TColumnType> {
  7. tableName: string;
  8. notNull: boolean;
  9. hasDefault: boolean;
  10. isPrimaryKey: boolean;
  11. isAutoincrement: boolean;
  12. hasRuntimeDefault: boolean;
  13. }
  14. export type ColumnTypeConfig<T extends ColumnBaseConfig<ColumnDataType, string>, TTypeConfig extends object> = T & {
  15. brand: 'Column';
  16. tableName: T['tableName'];
  17. name: T['name'];
  18. dataType: T['dataType'];
  19. columnType: T['columnType'];
  20. data: T['data'];
  21. driverParam: T['driverParam'];
  22. notNull: T['notNull'];
  23. hasDefault: T['hasDefault'];
  24. isPrimaryKey: T['isPrimaryKey'];
  25. isAutoincrement: T['isAutoincrement'];
  26. hasRuntimeDefault: T['hasRuntimeDefault'];
  27. enumValues: T['enumValues'];
  28. baseColumn: T extends {
  29. baseColumn: infer U;
  30. } ? U : unknown;
  31. generated: GeneratedColumnConfig<T['data']> | undefined;
  32. identity: undefined | 'always' | 'byDefault';
  33. } & TTypeConfig;
  34. export type ColumnRuntimeConfig<TData, TRuntimeConfig extends object> = ColumnBuilderRuntimeConfig<TData, TRuntimeConfig>;
  35. export interface Column<T extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>, TRuntimeConfig extends object = object, TTypeConfig extends object = object> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
  36. }
  37. export declare abstract class Column<T extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>, TRuntimeConfig extends object = object, TTypeConfig extends object = object> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {
  38. readonly table: Table;
  39. static readonly [entityKind]: string;
  40. readonly _: ColumnTypeConfig<T, TTypeConfig>;
  41. readonly name: string;
  42. readonly keyAsName: boolean;
  43. readonly primary: boolean;
  44. readonly notNull: boolean;
  45. readonly default: T['data'] | SQL | undefined;
  46. readonly defaultFn: (() => T['data'] | SQL) | undefined;
  47. readonly onUpdateFn: (() => T['data'] | SQL) | undefined;
  48. readonly hasDefault: boolean;
  49. readonly isUnique: boolean;
  50. readonly uniqueName: string | undefined;
  51. readonly uniqueType: string | undefined;
  52. readonly dataType: T['dataType'];
  53. readonly columnType: T['columnType'];
  54. readonly enumValues: T['enumValues'];
  55. readonly generated: GeneratedColumnConfig<T['data']> | undefined;
  56. readonly generatedIdentity: GeneratedIdentityConfig | undefined;
  57. protected config: ColumnRuntimeConfig<T['data'], TRuntimeConfig>;
  58. constructor(table: Table, config: ColumnRuntimeConfig<T['data'], TRuntimeConfig>);
  59. abstract getSQLType(): string;
  60. mapFromDriverValue(value: unknown): unknown;
  61. mapToDriverValue(value: unknown): unknown;
  62. }
  63. export type UpdateColConfig<T extends ColumnBaseConfig<ColumnDataType, string>, TUpdate extends Partial<ColumnBaseConfig<ColumnDataType, string>>> = Update<T, TUpdate>;
  64. export type AnyColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = Column<Required<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>>;
  65. export type GetColumnData<TColumn extends Column, TInferMode extends 'query' | 'raw' = 'query'> = TInferMode extends 'raw' ? TColumn['_']['data'] : TColumn['_']['notNull'] extends true ? TColumn['_']['data'] : TColumn['_']['data'] | null;
  66. export type InferColumnsDataTypes<TColumns extends Record<string, Column>> = {
  67. [Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;
  68. };