UNPKG

iagate-querykit

Version:

QueryKit: lightweight TypeScript query toolkit with models, views, triggers, events, scheduler and adapters (better-sqlite3).

429 lines 13.1 kB
import type { MigrationContext, MigrationStep } from './migration-manager'; /** * Tipos de colunas suportados pelo sistema de migração. * Cada tipo é mapeado para o tipo SQL apropriado baseado no dialeto do banco. * * @example * ```typescript * // Dados iniciais * const columnType = ColumnType.String; * * // Como usar * // Passado para definições de coluna em migrações * * // Output: Tipo de coluna configurado para string * ``` */ export declare enum ColumnType { Int = "Int", BigInt = "BigInt", Float = "Float", Double = "Double", Decimal = "Decimal", String = "String", Text = "Text", Varchar = "Varchar", Date = "Date", Time = "Time", DateTime = "DateTime", Timestamp = "Timestamp", TimestampTz = "TimestampTz", Boolean = "Boolean", Json = "Json", Uuid = "Uuid", Binary = "Binary" } /** * Valores padrão especiais para colunas. * Fornece valores padrão comuns como timestamp atual e UUID v4. * * @example * ```typescript * // Dados iniciais * const defaultValue = ColumnDefault.CurrentTimestamp; * * // Como usar * // Passado para opções de coluna em migrações * * // Output: Valor padrão configurado para timestamp atual * ``` */ export declare enum ColumnDefault { CurrentTimestamp = "CurrentTimestamp", UuidV4 = "UuidV4" } /** * Opções para chaves estrangeiras. * Define comportamento de referência e ações de cascata. * * @example * ```typescript * // Dados iniciais * const fkOptions: ForeignKeyOptions = { * table: 'users', * column: 'id', * onDelete: 'CASCADE', * onUpdate: 'RESTRICT' * }; * * // Como usar * // Passado para opções de coluna em migrações * * // Output: Opções de chave estrangeira configuradas * ``` */ export type ForeignKeyOptions = { /** Tabela referenciada */ table: string; /** Coluna referenciada (padrão: 'id') */ column?: string; /** Ação quando registro referenciado for deletado */ onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'NO ACTION'; /** Ação quando registro referenciado for atualizado */ onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'NO ACTION'; }; /** * Opções completas para definição de colunas. * Controla comportamento, restrições e valores padrão. * * @example * ```typescript * // Dados iniciais * const columnOptions: ColumnOptions = { * primaryKey: true, * notNull: true, * unique: true, * autoIncrement: { mode: 'always', start: 1, increment: 1 }, * default: ColumnDefault.CurrentTimestamp * }; * * // Como usar * // Passado para definições de coluna em migrações * * // Output: Opções de coluna configuradas com todas as propriedades * ``` */ export type ColumnOptions = { /** Se a coluna é chave primária */ primaryKey?: boolean; /** Se a coluna não pode ser nula */ notNull?: boolean; /** Se a coluna deve ter valores únicos */ unique?: boolean; /** Valor padrão para a coluna */ default?: string | number | boolean | null | ColumnDefault; /** Comprimento para tipos de string */ length?: number; /** Precisão para tipos decimais */ precision?: number; /** Escala para tipos decimais */ scale?: number; /** Configuração de auto-incremento */ autoIncrement?: boolean | { mode?: 'always' | 'default' | 'serial'; start?: number; increment?: number; }; /** Referência para chave estrangeira */ references?: ForeignKeyOptions; }; /** * Construtor de migrações com DSL fluente. * Permite definir operações de migração de forma declarativa e legível. * Suporta múltiplos dialetos SQL com mapeamento automático de tipos. * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder * .createTable('users', { * id: { type: ColumnType.Int, primaryKey: true, autoIncrement: true }, * name: { type: ColumnType.String, length: 255, notNull: true }, * email: { type: ColumnType.String, length: 255, unique: true } * }) * .createIndex('users', ['email'], { unique: true }); * * // Output: Builder configurado com operações de migração * ``` */ export declare class MigrationBuilder { private steps; /** * Mapeia tipos de coluna para tipos SQL específicos do dialeto. * * @param dialect - Dialeto SQL do banco * @param t - Tipo de coluna do enum ColumnType * @param len - Comprimento opcional para strings * @param prec - Precisão opcional para decimais * @param scale - Escala opcional para decimais * @returns String SQL do tipo de coluna */ private typeFor; /** * Mapeia valores padrão para SQL específico do dialeto. * * @param dialect - Dialeto SQL do banco * @param t - Tipo de coluna * @param v - Valor padrão para mapear * @returns String SQL do valor padrão */ private defaultFor; /** * Constrói definição completa de coluna em SQL. * * @param dialect - Dialeto SQL do banco * @param name - Nome da coluna * @param type - Tipo da coluna * @param opts - Opções da coluna * @returns String SQL da definição da coluna */ private colDef; /** * Adiciona operação para criar tabela. * * @param name - Nome da tabela * @param columns - Definições das colunas * @returns Instância do builder para method chaining * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder.createTable('users', { * id: { type: ColumnType.Int, primaryKey: true, autoIncrement: true }, * name: { type: ColumnType.String, length: 255, notNull: true }, * email: { type: ColumnType.String, length: 255, unique: true } * }); * * // Output: Operação de criação de tabela adicionada ao builder * ``` */ createTable(name: string, columns: Record<string, { type: ColumnType; } & ColumnOptions>): this; /** * Adiciona operação para remover tabela. * * @param name - Nome da tabela * @returns Instância do builder para method chaining * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder.dropTable('old_users'); * * // Output: Operação de remoção de tabela adicionada ao builder * ``` */ dropTable(name: string): this; /** * Adiciona operação para adicionar coluna. * * @param table - Nome da tabela * @param column - Nome da coluna * @param def - Definição da coluna * @returns Instância do builder para method chaining * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder.addColumn('users', 'age', { * type: ColumnType.Int, * notNull: false, * default: 18 * }); * * // Output: Operação de adição de coluna adicionada ao builder * ``` */ addColumn(table: string, column: string, def: { type: ColumnType; } & ColumnOptions): this; /** * Adiciona operação para remover coluna. * * @param table - Nome da tabela * @param column - Nome da coluna * @returns Instância do builder para method chaining * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder.dropColumn('users', 'old_field'); * * // Output: Operação de remoção de coluna adicionada ao builder * ``` */ dropColumn(table: string, column: string): this; /** * Adiciona operação para renomear coluna. * * @param table - Nome da tabela * @param from - Nome atual da coluna * @param to - Novo nome da coluna * @returns Instância do builder para method chaining * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder.renameColumn('users', 'user_name', 'name'); * * // Output: Operação de renomeação de coluna adicionada ao builder * ``` */ renameColumn(table: string, from: string, to: string): this; /** * Adiciona operação para criar índice. * * @param table - Nome da tabela * @param columns - Colunas para o índice * @param opts - Opções do índice * @returns Instância do builder para method chaining * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder.createIndex('users', ['email'], { unique: true }); * migrationBuilder.createIndex('users', ['name', 'age'], { name: 'users_name_age_idx' }); * * // Output: Operação de criação de índice adicionada ao builder * ``` */ createIndex(table: string, columns: string[], opts?: { unique?: boolean; name?: string; }): this; /** * Adiciona operação para remover índice. * * @param name - Nome do índice * @returns Instância do builder para method chaining * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder.dropIndex('users_email_idx'); * * // Output: Operação de remoção de índice adicionada ao builder * ``` */ dropIndex(name: string): this; /** * Adiciona operação para criar tabela de junção (many-to-many). * * @param name - Nome da tabela de junção * @param leftTable - Tabela esquerda * @param rightTable - Tabela direita * @param opts - Opções da tabela de junção * @returns Instância do builder para method chaining * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder.createJoinTable('user_roles', 'users', 'roles', { * cascade: true, * leftKeyName: 'user_id', * rightKeyName: 'role_id' * }); * * // Output: Operação de criação de tabela de junção adicionada ao builder * ``` */ createJoinTable(name: string, leftTable: string, rightTable: string, opts?: { cascade?: boolean; leftKeyName?: string; rightKeyName?: string; }): this; /** * Adiciona operação para executar SQL raw. * * @param sql - SQL raw para executar * @returns Instância do builder para method chaining * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * * // Como usar * migrationBuilder.raw('INSERT INTO settings (key, value) VALUES ("version", "2.0")'); * * // Output: Operação de SQL raw adicionada ao builder * ``` */ raw(sql: string): this; /** * Aplica todas as operações de migração em sequência. * * @param ctx - Contexto da migração * @returns Promise que resolve quando todas as operações forem executadas * * @example * ```typescript * // Dados iniciais * const migrationBuilder = new MigrationBuilder(); * migrationBuilder.createTable('users', { ... }); * const ctx = migrationContext; * * // Como usar * await migrationBuilder.apply(ctx); * * // Output: Todas as operações de migração executadas com sucesso * ``` */ apply(ctx: MigrationContext): Promise<void>; } /** * Factory function para criar passos de migração usando DSL. * Permite definir migrações de forma declarativa e legível. * * @param dsl - Função que recebe MigrationBuilder para configurar operações * @returns MigrationStep que pode ser executado pelo sistema de migração * * @example * ```typescript * // Dados iniciais * const migrationStep = migration((builder) => { * builder * .createTable('users', { * id: { type: ColumnType.Int, primaryKey: true, autoIncrement: true }, * name: { type: ColumnType.String, length: 255, notNull: true }, * email: { type: ColumnType.String, length: 255, unique: true } * }) * .createIndex('users', ['email'], { unique: true }); * }); * * // Como usar * await migrateUp([{ id: '001_create_users', up: migrationStep }]); * * // Output: Migração executada criando tabela users com índice único em email * ``` */ export declare function migration(dsl: (b: MigrationBuilder) => void): MigrationStep; //# sourceMappingURL=migration-dsl.d.ts.map