UNPKG

@voilajsx/appkit

Version:

Minimal and framework agnostic Node.js toolkit designed for AI agentic backend development

106 lines 3.25 kB
/** * Simplified Mongoose adapter with app discovery and tenant middleware * @module @voilajsx/appkit/database * @file src/database/adapters/mongoose.ts * * @llm-rule WHEN: Using Mongoose ODM with MongoDB databases in VoilaJSX framework * @llm-rule AVOID: Using with SQL databases - use prisma adapter instead * @llm-rule NOTE: Auto-discovers apps from /apps directory structure, applies tenant filtering */ interface MongooseClientConfig { url: string; appName?: string; maxPoolSize?: number; timeout?: number; connectionOptions?: Record<string, any>; } interface DiscoveredApp { name: string; modelsPath: string; } interface TenantMiddlewareOptions { fieldName?: string; orgId?: string; } interface MongooseConnection { db: any; close: () => Promise<void>; model: (name: string, schema?: any, collection?: string) => any; models: Record<string, any>; on: (event: string, callback: (...args: any[]) => void) => void; _appKit?: boolean; _appName?: string; _url?: string; _tenantId?: string; _tenantFiltered?: boolean; [key: string]: any; } /** * Simplified Mongoose adapter with VoilaJSX app discovery */ export declare class MongooseAdapter { private options; private connections; private discoveredApps; private isDevelopment; private mongoose; constructor(options?: Record<string, any>); /** * Creates Mongoose connection with app discovery and automatic connection management */ createClient(config: MongooseClientConfig): Promise<MongooseConnection>; /** * Apply tenant filtering middleware to Mongoose connection */ applyTenantMiddleware(connection: MongooseConnection, tenantId: string, options?: TenantMiddlewareOptions): Promise<MongooseConnection>; /** * Auto-discover VoilaJSX apps with Mongoose models */ discoverApps(): Promise<DiscoveredApp[]>; /** * Check if tenant registry collection exists */ hasTenantRegistry(connection: MongooseConnection): Promise<boolean>; /** * Create tenant registry entry */ createTenantRegistryEntry(connection: MongooseConnection, tenantId: string): Promise<void>; /** * Delete tenant registry entry */ deleteTenantRegistryEntry(connection: MongooseConnection, tenantId: string): Promise<void>; /** * Check if tenant exists in registry */ tenantExistsInRegistry(connection: MongooseConnection, tenantId: string): Promise<boolean>; /** * Get all tenants from registry */ getTenantsFromRegistry(connection: MongooseConnection): Promise<string[]>; /** * Disconnect all cached connections */ disconnect(): Promise<void>; /** * Detect current app from file path (VoilaJSX structure) */ private _detectCurrentApp; /** * Find apps directory in project structure */ private _findAppsDirectory; /** * Load models for specific app */ private _loadModelsForApp; /** * Setup connection event handlers */ private _setupConnectionEvents; /** * Mask URL for logging (hide credentials) */ private _maskUrl; } export {}; //# sourceMappingURL=mongoose.d.ts.map