@dqcai/sqlite
Version:
Universal SQLite adapter for Node.js, Browser, Deno, Bun, and React Native with a unified API and query builder.
218 lines • 6.85 kB
TypeScript
import { DatabaseSchema, ImportOptions, ImportResult, ColumnMapping } from "../types";
import { UniversalDAO } from "./universal-dao";
export type DatabaseConnections = {
[key: string]: UniversalDAO;
};
export interface RoleConfig {
roleName: string;
requiredDatabases: string[];
optionalDatabases?: string[];
priority?: number;
}
export type RoleRegistry = {
[roleName: string]: RoleConfig;
};
export interface DatabaseImportConfig {
databaseKey: string;
tableName: string;
data: Record<string, any>[];
options?: Partial<ImportOptions>;
columnMappings?: ColumnMapping[];
}
export interface BulkImportResult {
totalDatabases: number;
successDatabases: number;
results: Record<string, ImportResult>;
errors: Record<string, Error>;
executionTime: number;
}
export interface SchemaManager {
getSchema(key: string): DatabaseSchema | undefined;
registerSchema(key: string, schema: DatabaseSchema): void;
getAllSchemaKeys(): string[];
hasSchema(key: string): boolean;
}
export declare class DatabaseManager {
private static maxConnections;
private static connections;
private static isInitialized;
private static roleRegistry;
private static currentRole;
private static currentUserRoles;
private static activeDatabases;
private static isClosingConnections;
private static schemaConfigurations;
private static schemaManager;
private static eventListeners;
/**
* Get the maximum number of allowed database connections
*/
static getMaxConnections(): number;
/**
* Set the maximum number of allowed database connections
* @param maxConnections - The maximum number of connections (must be positive)
* @throws Error if maxConnections is not positive or if current connections exceed the new limit
*/
static setMaxConnections(maxConnections: number): void;
/**
* Set a schema manager for dynamic schema handling
*/
static setSchemaManager(manager: SchemaManager): void;
/**
* Register a schema configuration dynamically
*/
static registerSchema(key: string, schema: DatabaseSchema): void;
/**
* Register multiple schemas at once
*/
static registerSchemas(schemas: Record<string, DatabaseSchema>): void;
/**
* Get schema from internal store or external manager
*/
private static getSchema;
/**
* Get all available schema keys
*/
static getAvailableSchemas(): string[];
/**
* Register a role configuration
*/
static registerRole(roleConfig: RoleConfig): void;
/**
* Register multiple roles
*/
static registerRoles(roleConfigs: RoleConfig[]): void;
/**
* Get all registered roles
*/
static getRegisteredRoles(): RoleRegistry;
/**
* Get databases for a specific role
*/
static getRoleDatabases(roleName: string): string[];
/**
* Get databases for current user roles
*/
static getCurrentUserDatabases(): string[];
/**
* Initialize core database connection
*/
static initializeCoreConnection(): Promise<void>;
/**
* Set current user roles and initialize connections
*/
static setCurrentUserRoles(userRoles: string[], primaryRole?: string): Promise<void>;
/**
* Get current user roles
*/
static getCurrentUserRoles(): string[];
/**
* Get current primary role
*/
static getCurrentRole(): string | null;
/**
* Initialize connections for current user roles
*/
private static initializeUserRoleConnections;
/**
* Cleanup unused connections
*/
private static cleanupUnusedConnections;
/**
* Check if current user has access to database
*/
static hasAccessToDatabase(dbKey: string): boolean;
/**
* Get database connection
*/
static get(key: string): UniversalDAO;
/**
* Register event listener for database reconnection
*/
static onDatabaseReconnect(schemaName: string, callback: (dao: UniversalDAO) => void): void;
/**
* Remove event listener for database reconnection
*/
static offDatabaseReconnect(schemaName: string, callback: (dao: UniversalDAO) => void): void;
/**
* Notify listeners of database reconnection
*/
private static notifyDatabaseReconnect;
/**
* Close all connections
*/
private static closeAllConnections;
/**
* Reopen connections
*/
static reopenConnections(): Promise<void>;
/**
* Ensure database connection exists and is active
*/
static ensureDatabaseConnection(key: string): Promise<UniversalDAO>;
/**
* Get all connections
*/
static getConnections(): DatabaseConnections;
/**
* Open all existing databases
*/
static openAllExisting(databaseKeys: string[]): Promise<boolean>;
/**
* Initialize databases lazily
*/
static initLazySchema(databaseKeys: string[]): Promise<boolean>;
/**
* Initialize all available databases
*/
static initializeAll(): Promise<void>;
/**
* Get database with lazy loading
*/
static getLazyLoading(key: string): Promise<UniversalDAO>;
/**
* Execute cross-schema transaction
*/
static executeCrossSchemaTransaction(schemas: string[], callback: (daos: Record<string, UniversalDAO>) => Promise<void>): Promise<void>;
/**
* Import data to table
*/
static importDataToTable(databaseKey: string, tableName: string, data: Record<string, any>[], options?: Partial<ImportOptions>): Promise<ImportResult>;
/**
* Import data with column mapping
*/
static importDataWithMapping(databaseKey: string, tableName: string, data: Record<string, any>[], columnMappings: ColumnMapping[], options?: Partial<ImportOptions>): Promise<ImportResult>;
/**
* Bulk import data
*/
static bulkImport(importConfigs: DatabaseImportConfig[]): Promise<BulkImportResult>;
/**
* Import from CSV
*/
static importFromCSV(databaseKey: string, tableName: string, csvData: string, options?: {
delimiter?: string;
hasHeader?: boolean;
columnMappings?: ColumnMapping[];
} & Partial<ImportOptions>): Promise<ImportResult>;
/**
* Get connection count
*/
static getConnectionCount(): number;
/**
* List all active connections
*/
static listConnections(): string[];
/**
* Close specific connection
*/
static closeConnection(dbKey: string): Promise<void>;
/**
* Close all connections and reset state
*/
static closeAll(): Promise<void>;
/**
* Logout user - close role-specific connections
*/
static logout(): Promise<void>;
}
//# sourceMappingURL=database-manager.d.ts.map