scyllinx
Version:
A modern TypeScript ORM for ScyllaDB and SQL databases with Laravel-inspired syntax
110 lines (109 loc) • 3.35 kB
TypeScript
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>;
}