UNPKG

iagate-querykit

Version:

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

148 lines 4.24 kB
import type { DatabaseExecutor } from './types'; import { QueryBuilder } from './query-builder'; /** * Contexto passado para execução de seeds. * Fornece acesso ao executor e factory de QueryBuilder. * * @example * ```typescript * // Dados iniciais * const context: SeedContext = { * exec: databaseExecutor, * qb: (tableName) => new QueryBuilder(tableName) * }; * * // Como usar * // Contexto passado para função de seed * * // Output: Contexto configurado para execução de seed * ``` */ export type SeedContext = { /** Executor do banco de dados */ exec: DatabaseExecutor; /** Factory para criar QueryBuilders */ qb: <T = any>(table: string) => QueryBuilder<T>; }; /** * Interface para seeds executáveis. * Define contrato para classes de seed customizadas. * * @example * ```typescript * // Dados iniciais * class UserSeed implements SeedRunnable<User> { * async run(ctx: SeedContext): Promise<Partial<User>[]> { * return [ * { name: 'John Doe', email: 'john@example.com' }, * { name: 'Jane Smith', email: 'jane@example.com' } * ]; * } * } * * // Como usar * await runSeed('users', new UserSeed()); * * // Output: Usuários inseridos no banco de dados * ``` */ export interface SeedRunnable<T = any> { /** * Executa o seed e retorna dados para inserção. * * @param ctx - Contexto com executor e QueryBuilder * @returns Promise ou array com dados para inserção */ run(ctx: SeedContext): Promise<Partial<T>[]> | Partial<T>[]; } /** * Classe base para seeds customizadas. * Implementa SeedRunnable com comportamento padrão vazio. * * @example * ```typescript * // Dados iniciais * class ProductSeed extends Seed<Product> { * async run(ctx: SeedContext): Promise<Partial<Product>[]> { * return [ * { name: 'Product A', price: 100 }, * { name: 'Product B', price: 200 } * ]; * } * } * * // Como usar * await runSeed('products', new ProductSeed()); * * // Output: Produtos inseridos no banco de dados * ``` */ export declare class Seed<T = any> implements SeedRunnable<T> { /** * Método padrão que retorna array vazio. * Deve ser sobrescrito em classes filhas. * * @param _ctx - Contexto da execução (não usado na implementação padrão) * @returns Array vazio */ run(_ctx: SeedContext): Promise<Partial<T>[]>; } /** * Opções para execução de seeds. * Controla comportamento de inserção e tratamento de duplicatas. * * @example * ```typescript * // Dados iniciais * const options: RunSeedOptions<User> = { * truncate: true, * uniqueBy: ['email'], * upsert: true * }; * * // Como usar * await runSeed('users', userData, options); * * // Output: Tabela truncada e dados inseridos com upsert por email * ``` */ export type RunSeedOptions<T = any> = { /** Se deve truncar a tabela antes de inserir */ truncate?: boolean; /** Colunas para verificar duplicatas */ uniqueBy?: (keyof T)[] | string[]; /** Se deve fazer upsert em vez de insert simples */ upsert?: boolean; /** Se deve ignorar duplicatas em vez de falhar */ ignoreDuplicates?: boolean; }; /** * Executa um seed em uma tabela específica. * Suporta dados diretos ou classes SeedRunnable. * Oferece opções para truncate, upsert e tratamento de duplicatas. * * @param table - Nome da tabela para executar o seed * @param dataOrSeed - Dados para inserir ou classe seed executável * @param opts - Opções de execução * @returns Promise que resolve com número de linhas inseridas * @throws Error se não houver executor configurado * * @example * ```typescript * // Dados iniciais * const userData = [ * { name: 'John Doe', email: 'john@example.com' }, * { name: 'Jane Smith', email: 'jane@example.com' } * ]; * * // Como usar * const insertedRows = await runSeed('users', userData, { * truncate: true, * uniqueBy: ['email'] * }); * * // Output: 2 (número de usuários inseridos) * ``` */ export declare function runSeed<T = any>(table: string, dataOrSeed: Partial<T>[] | SeedRunnable<T>, opts?: RunSeedOptions<T>): Promise<number>; //# sourceMappingURL=seed.d.ts.map