/** * Blueprint for `@atlex/orm` migrations. * * Collects a table's schema operations (create, alter, drop) and translates them * into Knex schema builder calls internally. */ import type { Knex } from 'knex'; import { ColumnDefinition, type RawSqlExpression } from './ColumnDefinition.js'; type ForeignKeyAction = 'restrict' | 'cascade' | 'set null' | 'no action'; declare class ForeignKeyDefinition { private readonly column; private referencesColumn; private onTable; private onDeleteAction; private onUpdateAction; constructor(column: string); references(column: string): this; on(table: string): this; onDelete(action: ForeignKeyAction): this; onUpdate(action: ForeignKeyAction): this; /** @internal */ apply(table: Knex.CreateTableBuilder | Knex.AlterTableBuilder): void; } type Operation = { kind: 'column'; column: ColumnDefinition; } | { kind: 'foreign'; fk: ForeignKeyDefinition; } | { kind: 'tableIndex'; columns: string[]; name?: string; } | { kind: 'tableUnique'; columns: string[]; name?: string; } | { kind: 'dropColumn'; name: string; } | { kind: 'drop'; ifExists: boolean; } | { kind: 'rename'; to: string; }; export declare class Blueprint { readonly tableName: string; private readonly ops; constructor(tableName: string); /** * Shortcut for `bigIncrements('id').primary()`. */ id(): ColumnDefinition; /** * Add `created_at` and `updated_at` timestamps with DB-native "now" defaults * (via Knex), not JavaScript `Date` literals (which break PostgreSQL defaults). */ timestamps(_useTimestamps?: boolean, _defaultToNow?: boolean): void; /** * SQL expression for column defaults (e.g. `table.raw('gen_random_uuid()')`). */ raw(sql: string): RawSqlExpression; /** * Add a nullable `deleted_at` timestamp. */ softDeletes(): void; /** * Add a nullable remember token (VARCHAR(100)). */ rememberToken(): ColumnDefinition; string(name: string, length?: number): ColumnDefinition; text(name: string): ColumnDefinition; integer(name: string): ColumnDefinition; bigInteger(name: string): ColumnDefinition; boolean(name: string): ColumnDefinition; decimal(name: string, precision?: number, scale?: number): ColumnDefinition; timestamp(name: string): ColumnDefinition; dateTime(name: string): ColumnDefinition; /** SQL TIME column (e.g. quiet-hours windows stored as `22:00:00`). */ time(name: string): ColumnDefinition; increments(name: string): ColumnDefinition; bigIncrements(name: string): ColumnDefinition; uuid(name: string): ColumnDefinition; enum(name: string, values: readonly string[], options?: { useNative?: boolean; enumName?: string; }): ColumnDefinition; /** * Add an index on one or more columns (`table.index('email')` or `table.index(['a','b'])`). * * @param columns - Column name(s) to index. * @param name - Optional index name; omitted names are chosen by the driver/Knex. */ index(columns: string | string[], name?: string): void; unique(columns: string | string[], name?: string): void; foreign(column: string): ForeignKeyDefinition; dropColumn(name: string): void; /** @internal */ _drop(ifExists: boolean): void; /** @internal */ _rename(to: string): void; /** * Escape hatch to access the underlying Knex table builder. * * @returns Internal operations list (intended for framework internals). */ getOperations(): readonly Operation[]; private addColumn; /** @internal */ applyTo(table: Knex.CreateTableBuilder | Knex.AlterTableBuilder, knex: Knex): void; } export {}; //# sourceMappingURL=Blueprint.d.ts.map