UNPKG

scyllinx

Version:

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

149 lines (148 loc) 4.19 kB
import type { Model } from "./Model"; /** * Registry for managing model classes and their aliases. * Provides centralized model registration and retrieval with support for aliases and auto-discovery. * * @example * * const registry = ModelRegistry.getInstance(); * * // Register models * registry.register('User', User, ['user', 'users']); * registry.register('Post', Post); * * // Retrieve models * const UserModel = registry.get('User'); * const user = new UserModel({ name: 'John' }); * * // Use aliases * const SameUserModel = registry.get('users'); * */ export declare class ModelRegistry { /** Singleton instance */ private static instance; /** Map of model names to model classes */ private models; /** Map of aliases to model names */ private aliases; /** * Gets the singleton instance of ModelRegistry. * * @returns The ModelRegistry instance * * @example * * const registry = ModelRegistry.getInstance(); * */ static getInstance(): ModelRegistry; /** * Registers a model class with optional aliases. * * @template TAttrs - Model attributes type * @param name - Primary name for the model * @param modelClass - Model class constructor * @param aliases - Optional array of alias names * @returns This registry instance for chaining * * @example * * registry.register('User', User, ['user', 'users']) * .register('Post', Post, ['post', 'posts']) * .register('Comment', Comment); * */ register<TAttrs extends Record<string, any>>(name: string, modelClass: new (attributes?: Partial<TAttrs>) => Model<TAttrs>, aliases?: string[]): this; /** * Retrieves a model class by name or alias. * * @template TAttrs - Model attributes type * @template TModel - Model class type * @param name - Model name or alias * @returns Model class constructor * @throws {Error} When model is not found * * @example * * const User = registry.get<UserAttributes, User>('User'); * const user = new User({ name: 'John' }); * * // Using alias * const SameUser = registry.get('users'); * */ get<TAttrs extends Record<string, any>, TModel extends Model<TAttrs> = Model<TAttrs>>(name: string): new (attributes?: Partial<TAttrs>) => TModel; /** * Checks if a model is registered. * * @param name - Model name or alias to check * @returns True if model exists in registry * * @example * * if (registry.has('User')) { * console.log('User model is registered'); * } * * if (registry.has('users')) { * console.log('User model found by alias'); * } * */ has(name: string): boolean; /** * Gets all registered models. * * @returns Map of model names to model classes * * @example * * const allModels = registry.all(); * for (const [name, ModelClass] of allModels) { * console.log(`Registered model: ${name}`); * } * */ all(): Map<string, new () => Model<any>>; /** * Gets all registered model names. * * @returns Array of model names * * @example * * const modelNames = registry.getModelNames(); * console.log('Registered models:', modelNames); // ['User', 'Post', 'Comment'] * */ getModelNames(): string[]; /** * Auto-discovers models in a directory. * Note: This is a placeholder implementation for future enhancement. * * @param directory - Directory path to scan for models * * @example * * registry.autoDiscover('./app/Models'); * */ autoDiscover(directory?: string): void; /** * Converts a singular word to plural form. * Simple pluralization rules for English words. * * @private * @param word - Word to pluralize * @returns Pluralized word * * @example * * pluralize('user') // 'users' * pluralize('category') // 'categories' * pluralize('box') // 'boxes' * */ private pluralize; }