@gensx/storage
Version:
Cloud storage, blobs, sqlite, and vector database providers/hooks for GenSX.
1 lines • 6.03 kB
Source Map (JSON)
{"version":3,"file":"databaseClient.cjs","sources":["@gensx/storage/../../../../src/database/databaseClient.ts"],"sourcesContent":["import { join } from \"path\";\n\nimport { getProjectAndEnvironment } from \"../utils/config.js\";\nimport {\n Database,\n DatabaseStorage,\n DatabaseStorageOptions,\n DeleteDatabaseResult,\n EnsureDatabaseResult,\n} from \"./types.js\";\n\n/**\n * Client for interacting with database functionality outside of JSX context\n */\nexport class DatabaseClient {\n private storagePromise: Promise<DatabaseStorage> | null = null;\n private options: DatabaseStorageOptions;\n\n /**\n * Create a new DatabaseClient\n * @param options Optional configuration properties for the database storage\n */\n constructor(options: DatabaseStorageOptions = {}) {\n this.options = options;\n }\n\n /**\n * Lazy initialization of storage\n */\n private async getStorage(): Promise<DatabaseStorage> {\n this.storagePromise ??= this.initializeStorage().catch((error: unknown) => {\n // Clear the failed promise to allow retry on next call\n this.storagePromise = null;\n throw error;\n });\n return this.storagePromise;\n }\n\n private async initializeStorage(): Promise<DatabaseStorage> {\n const kind =\n this.options.kind ??\n (process.env.GENSX_RUNTIME === \"cloud\" ? \"cloud\" : \"filesystem\");\n\n if (kind === \"filesystem\") {\n const { FileSystemDatabaseStorage } = await import(\"./filesystem.js\");\n\n const rootDir =\n this.options.kind === \"filesystem\" && this.options.rootDir\n ? this.options.rootDir\n : join(process.cwd(), \".gensx\", \"databases\");\n\n return new FileSystemDatabaseStorage(rootDir);\n } else {\n const { RemoteDatabaseStorage } = await import(\"./remote.js\");\n\n const { project, environment } = getProjectAndEnvironment({\n project: this.options.project,\n environment: this.options.environment,\n });\n return new RemoteDatabaseStorage(project, environment);\n }\n }\n\n /**\n * Get a database (ensures it exists first)\n * @param name The database name\n * @returns A Promise resolving to a Database\n */\n async getDatabase(name: string): Promise<Database> {\n const storage = await this.getStorage();\n if (!storage.hasEnsuredDatabase(name)) {\n await storage.ensureDatabase(name);\n }\n return storage.getDatabase(name);\n }\n\n /**\n * Ensure a database exists (idempotent operation)\n * @param name The database name\n * @returns A Promise resolving to the ensure result\n */\n async ensureDatabase(name: string): Promise<EnsureDatabaseResult> {\n const storage = await this.getStorage();\n return storage.ensureDatabase(name);\n }\n\n /**\n * List all databases\n * @param options Optional pagination options\n * @returns A Promise resolving to an array of database names and optional next cursor\n */\n async listDatabases(options?: { limit?: number; cursor?: string }): Promise<{\n databases: { name: string; createdAt: Date }[];\n nextCursor?: string;\n }> {\n const storage = await this.getStorage();\n return storage.listDatabases(options);\n }\n\n /**\n * Delete a database\n * @param name The database name\n * @returns A Promise resolving to the deletion result\n */\n async deleteDatabase(name: string): Promise<DeleteDatabaseResult> {\n const storage = await this.getStorage();\n return storage.deleteDatabase(name);\n }\n\n /**\n * Check if a database exists\n * @param name The database name\n * @returns A Promise resolving to a boolean indicating if the database exists\n */\n async databaseExists(name: string): Promise<boolean> {\n const storage = await this.getStorage();\n const result = await storage.listDatabases();\n return result.databases.some((db) => db.name === name);\n }\n}\n"],"names":["join","getProjectAndEnvironment"],"mappings":"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"}