iagate-querykit
Version:
QueryKit: lightweight TypeScript query toolkit with models, views, triggers, events, scheduler and adapters (better-sqlite3).
167 lines • 5.17 kB
TypeScript
import type { DatabaseExecutor } from './types';
import { QueryBuilder } from './query-builder';
/**
* Passo de migração que pode ser string SQL, array de strings ou função.
* Suporta execução síncrona e assíncrona.
*/
export type MigrationStep = string | string[] | ((ctx: MigrationContext) => Promise<void> | void);
/**
* Especificação completa de uma migração.
* Define como aplicar e reverter mudanças no banco de dados.
*
* @example
* ```typescript
* // Dados iniciais
* const migration: MigrationSpec = {
* id: '001_create_users_table',
* up: 'CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)',
* down: 'DROP TABLE users',
* tags: ['schema', 'users']
* };
*
* // Como usar
* await migrateUp([migration]);
*
* // Output: Tabela 'users' criada no banco de dados
* ```
*/
export type MigrationSpec = {
/** Identificador único da migração */
id: string;
/** Passos para aplicar a migração */
up: MigrationStep;
/** Passos opcionais para reverter a migração */
down?: MigrationStep;
/** Tags opcionais para categorização */
tags?: string[];
};
/**
* Contexto passado para execução de migrações.
* Fornece acesso ao executor, dialeto e utilitários de query.
*
* @example
* ```typescript
* // Dados iniciais
* const context: MigrationContext = {
* exec: databaseExecutor,
* dialect: 'postgres',
* query: async (sql, bindings) => { executa query },
* runSync: (sql, bindings) => { executa query síncrona },
* qb: (tableName) => new QueryBuilder(tableName)
* };
*
* // Como usar
* // Contexto passado para função de migração
*
* // Output: Contexto configurado para execução de migração
* ```
*/
export type MigrationContext = {
/** Executor do banco de dados */
exec: DatabaseExecutor;
/** Dialeto SQL do banco */
dialect?: DatabaseExecutor['dialect'];
/** Função para executar queries assíncronas */
query: (sql: string, bindings?: any[]) => Promise<void>;
/** Função para executar queries síncronas */
runSync: (sql: string, bindings?: any[]) => void;
/** Factory para criar QueryBuilders */
qb: <T = any>(tableName: string) => QueryBuilder<T>;
};
/**
* Lista todas as migrações já aplicadas no banco.
*
* @param executor - Executor opcional (usa padrão se não fornecido)
* @returns Promise que resolve com array de IDs de migrações aplicadas
*
* @example
* ```typescript
* // Dados iniciais
* const executor = databaseExecutor;
*
* // Como usar
* const appliedMigrations = await listAppliedMigrations(executor);
*
* // Output: ['001_create_users', '002_add_email_column']
* ```
*/
export declare function listAppliedMigrations(executor?: DatabaseExecutor): Promise<string[]>;
/**
* Aplica migrações para cima (up) até um alvo específico.
* Executa migrações não aplicadas em ordem sequencial.
*
* @param migrations - Array de especificações de migração
* @param opts - Opções incluindo alvo e executor
* @returns Promise que resolve com lista de migrações aplicadas
*
* @example
* ```typescript
* // Dados iniciais
* const migrations = [
* { id: '001_create_users', up: 'CREATE TABLE users (id INTEGER PRIMARY KEY)' },
* { id: '002_add_email', up: 'ALTER TABLE users ADD COLUMN email TEXT' }
* ];
*
* // Como usar
* const result = await migrateUp(migrations, { to: '002_add_email' });
*
* // Output: { applied: ['001_create_users', '002_add_email'] }
* ```
*/
export declare function migrateUp(migrations: MigrationSpec[], opts?: {
to?: string;
executor?: DatabaseExecutor;
}): Promise<{
applied: string[];
}>;
/**
* Reverte migrações para baixo (down) até um alvo específico.
* Executa passos de reversão em ordem reversa.
*
* @param migrations - Array de especificações de migração
* @param opts - Opções incluindo alvo, número de passos e executor
* @returns Promise que resolve com lista de migrações revertidas
*
* @example
* ```typescript
* // Dados iniciais
* const migrations = [
* { id: '001_create_users', up: 'CREATE TABLE users', down: 'DROP TABLE users' },
* { id: '002_add_email', up: 'ALTER TABLE users ADD email', down: 'ALTER TABLE users DROP email' }
* ];
*
* // Como usar
* const result = await migrateDown(migrations, { steps: 1 });
*
* // Output: { reverted: ['002_add_email'] }
* ```
*/
export declare function migrateDown(migrations: MigrationSpec[], opts?: {
to?: string;
steps?: number;
executor?: DatabaseExecutor;
}): Promise<{
reverted: string[];
}>;
/**
* Remove completamente a tabela de migrações.
* Útil para resetar o estado de migrações.
*
* @param opts - Opções incluindo executor
* @returns Promise que resolve quando a tabela for removida
*
* @example
* ```typescript
* // Dados iniciais
* const executor = databaseExecutor;
*
* // Como usar
* await resetMigrations({ executor });
*
* // Output: Tabela de migrações removida, estado resetado
* ```
*/
export declare function resetMigrations(opts?: {
executor?: DatabaseExecutor;
}): Promise<void>;
//# sourceMappingURL=migration-manager.d.ts.map