UNPKG

scyllinx

Version:

A modern TypeScript ORM for ScyllaDB and SQL databases with Laravel-inspired syntax

110 lines (109 loc) 3.35 kB
import type { ModelFactory } from "./ModelFactory"; /** * Base class for database seeders. * Extend this class and implement the `run()` method to insert or manipulate data. * * @example * // Example seeder: * import { Seeder } from "@/seeders/Seeder" * import { User } from "@/models/User" * * export class UserSeeder extends Seeder { * async run() { * // Clear existing records * await this.truncate("users") * * // Insert new records via factory * const users = this.factory(() => User.factory()).makeMany(10) * for (const user of users) { * await user.save() * } * } * } * * // Register and run: * SeederRunner.register(UserSeeder) * await SeederRunner.run() */ export declare abstract class Seeder { /** Underlying database connection */ protected connection: import("..").Connection; /** * Perform the seeding operations. * Must be implemented by subclasses. * * @returns Promise that resolves when seeding is complete. */ abstract run(): Promise<void>; /** * Invoke another seeder from within this seeder. * * @param SeederClass - The seeder class to call. * @example * // Within a seeder: * await this.call(OtherSeeder) */ protected call(SeederClass: new () => Seeder): Promise<void>; /** * Access a model factory for generating test data. * * @template TFactory - A subclass of ModelFactory * @param factory - A function returning the factory instance * @returns The factory instance * @example * // Get the Post factory: * const postFactory = this.factory(() => Post.factory()) * const posts = postFactory.makeMany(5) */ protected factory<TFactory extends ModelFactory<any, any>>(factory: () => TFactory): TFactory; /** * Truncate (empty) the given table. * * @param tableName - Name of the table to truncate. * @returns Promise that resolves when truncation is complete. * @example * // Clear the comments table: * await this.truncate("comments") */ protected truncate(tableName: string): Promise<void>; } /** * Manages and runs registered seeders. * * @example * import { SeederRunner } from "@/seeders/Seeder" * import { UserSeeder } from "@/seeders/UserSeeder" * * // Register multiple: * SeederRunner.register(UserSeeder) * * // Run all: * await SeederRunner.run() * * // Or run a single: * await SeederRunner.runOne(UserSeeder) */ export declare class SeederRunner { /** Internal list of registered seeder classes */ private static seeders; /** * Register a seeder class to be run later. * * @param seederClass - Seeder class constructor. */ static register(seederClass: new () => Seeder): void; /** * Run all registered seeders, or a provided list. * * @param seeders - Optional array of seeder classes to run instead of all registered. * @returns Promise that resolves when all runs complete. */ static run(seeders?: (new () => Seeder)[]): Promise<void>; /** * Run a single seeder class. * * @param seederClass - The seeder class to execute. * @returns Promise that resolves when the run completes. */ static runOne(seederClass: new () => Seeder): Promise<void>; }