{"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 { FileSystemDatabaseStorage } from \"./filesystem.js\";\nimport { RemoteDatabaseStorage } from \"./remote.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 storage: DatabaseStorage;\n\n  /**\n   * Create a new DatabaseClient\n   * @param options Optional configuration properties for the database storage\n   */\n  constructor(options: DatabaseStorageOptions = {}) {\n    const kind =\n      options.kind ??\n      (process.env.GENSX_RUNTIME === \"cloud\" ? \"cloud\" : \"filesystem\");\n\n    if (kind === \"filesystem\") {\n      const rootDir =\n        options.kind === \"filesystem\" && options.rootDir\n          ? options.rootDir\n          : join(process.cwd(), \".gensx\", \"databases\");\n\n      this.storage = new FileSystemDatabaseStorage(rootDir);\n    } else {\n      const { project, environment } = getProjectAndEnvironment({\n        project: options.project,\n        environment: options.environment,\n      });\n      this.storage = 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    if (!this.storage.hasEnsuredDatabase(name)) {\n      await this.storage.ensureDatabase(name);\n    }\n    return this.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    return this.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    return this.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    return this.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 result = await this.storage.listDatabases();\n    return result.databases.some((db) => db.name === name);\n  }\n}\n"],"names":["join","FileSystemDatabaseStorage","getProjectAndEnvironment","RemoteDatabaseStorage"],"mappings":";;;;;;;;;;;;;AAaA;;AAEG;MACU,cAAc,CAAA;AACjB,IAAA,OAAO;AAEf;;;AAGG;AACH,IAAA,WAAA,CAAY,UAAkC,EAAE,EAAA;AAC9C,QAAA,MAAM,IAAI,GACR,OAAO,CAAC,IAAI;AACZ,aAAC,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC;AAElE,QAAA,IAAI,IAAI,KAAK,YAAY,EAAE;YACzB,MAAM,OAAO,GACX,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC;kBACrC,OAAO,CAAC;AACV,kBAAEA,SAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC;YAEhD,IAAI,CAAC,OAAO,GAAG,IAAIC,oCAAyB,CAAC,OAAO,CAAC;;aAChD;AACL,YAAA,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAGC,+BAAwB,CAAC;gBACxD,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;AACjC,aAAA,CAAC;YACF,IAAI,CAAC,OAAO,GAAG,IAAIC,4BAAqB,CAAC,OAAO,EAAE,WAAW,CAAC;;;AAIlE;;;;AAIG;IACH,MAAM,WAAW,CAAC,IAAY,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YAC1C,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;;QAEzC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;;AAGvC;;;;AAIG;IACH,MAAM,cAAc,CAAC,IAAY,EAAA;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;;AAG1C;;;;AAIG;IACH,MAAM,aAAa,CAAC,OAA6C,EAAA;QAI/D,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;;AAG5C;;;;AAIG;IACH,MAAM,cAAc,CAAC,IAAY,EAAA;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;;AAG1C;;;;AAIG;IACH,MAAM,cAAc,CAAC,IAAY,EAAA;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AACjD,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;;AAEzD;;;;"}