iagate-querykit
Version:
QueryKit: lightweight TypeScript query toolkit with models, views, triggers, events, scheduler and adapters (better-sqlite3).
429 lines • 13.1 kB
TypeScript
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