foreign-keys.d.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { entityKind } from "../entity.js";
  2. import type { AnyMySqlColumn, MySqlColumn } from "./columns/index.js";
  3. import type { MySqlTable } from "./table.js";
  4. export type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';
  5. export type Reference = () => {
  6. readonly name?: string;
  7. readonly columns: MySqlColumn[];
  8. readonly foreignTable: MySqlTable;
  9. readonly foreignColumns: MySqlColumn[];
  10. };
  11. export declare class ForeignKeyBuilder {
  12. static readonly [entityKind]: string;
  13. constructor(config: () => {
  14. name?: string;
  15. columns: MySqlColumn[];
  16. foreignColumns: MySqlColumn[];
  17. }, actions?: {
  18. onUpdate?: UpdateDeleteAction;
  19. onDelete?: UpdateDeleteAction;
  20. } | undefined);
  21. onUpdate(action: UpdateDeleteAction): this;
  22. onDelete(action: UpdateDeleteAction): this;
  23. }
  24. export type AnyForeignKeyBuilder = ForeignKeyBuilder;
  25. export declare class ForeignKey {
  26. readonly table: MySqlTable;
  27. static readonly [entityKind]: string;
  28. readonly reference: Reference;
  29. readonly onUpdate: UpdateDeleteAction | undefined;
  30. readonly onDelete: UpdateDeleteAction | undefined;
  31. constructor(table: MySqlTable, builder: ForeignKeyBuilder);
  32. getName(): string;
  33. }
  34. type ColumnsWithTable<TTableName extends string, TColumns extends MySqlColumn[]> = {
  35. [Key in keyof TColumns]: AnyMySqlColumn<{
  36. tableName: TTableName;
  37. }>;
  38. };
  39. export type GetColumnsTable<TColumns extends MySqlColumn | MySqlColumn[]> = (TColumns extends MySqlColumn ? TColumns : TColumns extends MySqlColumn[] ? TColumns[number] : never) extends AnyMySqlColumn<{
  40. tableName: infer TTableName extends string;
  41. }> ? TTableName : never;
  42. export declare function foreignKey<TTableName extends string, TForeignTableName extends string, TColumns extends [AnyMySqlColumn<{
  43. tableName: TTableName;
  44. }>, ...AnyMySqlColumn<{
  45. tableName: TTableName;
  46. }>[]]>(config: {
  47. name?: string;
  48. columns: TColumns;
  49. foreignColumns: ColumnsWithTable<TForeignTableName, TColumns>;
  50. }): ForeignKeyBuilder;
  51. export {};