{"version":3,"sources":["../../src/zerodb/QueryBuilder.ts","../../src/zerodb/ZeroDBClient.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Fluent Query Builder for ZeroDB\n *\n * Provides a fluent API for building complex database queries with\n * type safety and method chaining.\n */\n\nimport {\n  IQueryBuilder,\n  QueryOptions,\n  Filter,\n  FilterCondition,\n  FilterOperator,\n  SortDirection,\n  SortSpec,\n  QueryResult,\n} from './types'\n\nexport class QueryBuilder<T = any> implements IQueryBuilder<T> {\n  private tableName: string\n  private options: QueryOptions = {}\n  private filters: Filter[] = []\n  private orFilters: Filter[] = []\n  private notFilters: Filter[] = []\n  private executor: (table: string, options: QueryOptions) => Promise<QueryResult<T>>\n\n  constructor(\n    table: string,\n    executor: (table: string, options: QueryOptions) => Promise<QueryResult<T>>\n  ) {\n    this.tableName = table\n    this.executor = executor\n  }\n\n  /**\n   * Select specific fields\n   */\n  select(...fields: string[]): IQueryBuilder<T> {\n    this.options.select = [...(this.options.select || []), ...fields]\n    return this\n  }\n\n  /**\n   * Add WHERE condition\n   */\n  where(field: string, operator: FilterOperator, value: any): IQueryBuilder<T> {\n    const condition: FilterCondition = { field, operator, value }\n    this.filters.push({ condition })\n    return this\n  }\n\n  /**\n   * Add AND condition\n   */\n  and(field: string, operator: FilterOperator, value: any): IQueryBuilder<T> {\n    return this.where(field, operator, value)\n  }\n\n  /**\n   * Add OR condition\n   */\n  or(field: string, operator: FilterOperator, value: any): IQueryBuilder<T> {\n    const condition: FilterCondition = { field, operator, value }\n    this.orFilters.push({ condition })\n    return this\n  }\n\n  /**\n   * Add NOT condition\n   */\n  not(field: string, operator: FilterOperator, value: any): IQueryBuilder<T> {\n    const condition: FilterCondition = { field, operator, value }\n    this.notFilters.push({ condition })\n    return this\n  }\n\n  /**\n   * Add ORDER BY\n   */\n  orderBy(field: string, direction: SortDirection = 'asc'): IQueryBuilder<T> {\n    const sort: SortSpec = { field, direction }\n    this.options.sort = [...(this.options.sort || []), sort]\n    return this\n  }\n\n  /**\n   * Add LIMIT\n   */\n  limit(limit: number): IQueryBuilder<T> {\n    this.options.limit = limit\n    return this\n  }\n\n  /**\n   * Add OFFSET\n   */\n  offset(offset: number): IQueryBuilder<T> {\n    this.options.offset = offset\n    return this\n  }\n\n  /**\n   * Add JOIN\n   */\n  join(\n    table: string,\n    on: { left: string; right: string },\n    type: 'inner' | 'left' | 'right' | 'full' = 'inner'\n  ): IQueryBuilder<T> {\n    this.options.joins = [\n      ...(this.options.joins || []),\n      { table, type, on },\n    ]\n    return this\n  }\n\n  /**\n   * Add GROUP BY\n   */\n  groupBy(..._fields: string[]): IQueryBuilder<T> {\n    // Store group by fields in metadata for later processing\n    if (!this.options.select) {\n      this.options.select = []\n    }\n    // Note: Actual GROUP BY implementation would require additional options\n    return this\n  }\n\n  /**\n   * Add HAVING\n   */\n  having(_field: string, _operator: FilterOperator, _value: any): IQueryBuilder<T> {\n    // Note: HAVING implementation would require GROUP BY support\n    return this\n  }\n\n  /**\n   * Build the final filter\n   */\n  private buildFilter(): Filter | undefined {\n    if (this.filters.length === 0 && this.orFilters.length === 0 && this.notFilters.length === 0) {\n      return undefined\n    }\n\n    const filter: Filter = {}\n\n    if (this.filters.length > 0) {\n      filter.and = this.filters\n    }\n\n    if (this.orFilters.length > 0) {\n      if (filter.and) {\n        filter.and.push({ or: this.orFilters })\n      } else {\n        filter.or = this.orFilters\n      }\n    }\n\n    if (this.notFilters.length > 0) {\n      const notFilter: Filter = { or: this.notFilters }\n      if (filter.and) {\n        filter.and.push({ not: notFilter })\n      } else {\n        filter.not = notFilter\n      }\n    }\n\n    return filter\n  }\n\n  /**\n   * Execute query\n   */\n  async execute(): Promise<QueryResult<T>> {\n    const filter = this.buildFilter()\n    if (filter) {\n      this.options.filter = filter\n    }\n\n    return this.executor(this.tableName, this.options)\n  }\n\n  /**\n   * Get first result\n   */\n  async first(): Promise<T | null> {\n    this.limit(1)\n    const result = await this.execute()\n    return result.rows[0] || null\n  }\n\n  /**\n   * Get all results\n   */\n  async all(): Promise<T[]> {\n    const result = await this.execute()\n    return result.rows\n  }\n\n  /**\n   * Count results\n   */\n  async count(): Promise<number> {\n    this.options.count = true\n    const result = await this.execute()\n    return result.count || 0\n  }\n\n  /**\n   * Clone the query builder\n   */\n  clone(): QueryBuilder<T> {\n    const cloned = new QueryBuilder<T>(this.tableName, this.executor)\n    cloned.options = { ...this.options }\n    cloned.filters = [...this.filters]\n    cloned.orFilters = [...this.orFilters]\n    cloned.notFilters = [...this.notFilters]\n    return cloned\n  }\n\n  /**\n   * Reset the query builder\n   */\n  reset(): IQueryBuilder<T> {\n    this.options = {}\n    this.filters = []\n    this.orFilters = []\n    this.notFilters = []\n    return this\n  }\n\n  /**\n   * Paginate results\n   */\n  paginate(page: number, pageSize: number): IQueryBuilder<T> {\n    const offset = (page - 1) * pageSize\n    return this.limit(pageSize).offset(offset)\n  }\n\n  /**\n   * Get query options (for debugging)\n   */\n  getOptions(): QueryOptions {\n    const filter = this.buildFilter()\n    return {\n      ...this.options,\n      filter,\n    }\n  }\n}\n","/**\n * ZeroDB CRUD Client\n *\n * Comprehensive client for performing CRUD operations on ZeroDB with support for:\n * - Full CRUD operations (Create, Read, Update, Delete)\n * - Query builder with fluent API\n * - Transaction support\n * - Connection pooling\n * - Automatic retries\n * - Health checks\n */\n\nimport { EventEmitter } from 'events'\nimport { QueryBuilder } from './QueryBuilder'\nimport {\n  ZeroDBConfig,\n  IZeroDBClient,\n  IQueryBuilder,\n  InsertOptions,\n  QueryOptions,\n  UpdateOptions,\n  DeleteOptions,\n  TransactionOptions,\n  BatchOperation,\n  CRUDResult,\n  QueryResult,\n  TransactionResult,\n  HealthStatus,\n  PoolStats,\n} from './types'\n\n/**\n * Connection pool for managing database connections\n */\nclass ConnectionPool {\n  private config: Required<ZeroDBConfig>\n  private activeConnections: number = 0\n  private idleConnections: number = 0\n  private waitingRequests: number = 0\n\n  constructor(config: Required<ZeroDBConfig>) {\n    this.config = config\n    this.idleConnections = config.pool.min || 0\n  }\n\n  async acquire(): Promise<void> {\n    if (this.activeConnections >= (this.config.pool.max || 10)) {\n      this.waitingRequests++\n      await this.waitForConnection()\n      this.waitingRequests--\n    }\n\n    if (this.idleConnections > 0) {\n      this.idleConnections--\n    }\n    this.activeConnections++\n  }\n\n  release(): void {\n    if (this.activeConnections > 0) {\n      this.activeConnections--\n      this.idleConnections++\n    }\n  }\n\n  private async waitForConnection(): Promise<void> {\n    const timeout = this.config.pool.acquireTimeout || 5000\n    return new Promise((resolve, reject) => {\n      const startTime = Date.now()\n      const interval = setInterval(() => {\n        if (this.activeConnections < (this.config.pool.max || 10)) {\n          clearInterval(interval)\n          resolve()\n        } else if (Date.now() - startTime > timeout) {\n          clearInterval(interval)\n          reject(new Error('Connection acquisition timeout'))\n        }\n      }, 100)\n    })\n  }\n\n  getStats(): PoolStats {\n    return {\n      total: this.activeConnections + this.idleConnections,\n      active: this.activeConnections,\n      idle: this.idleConnections,\n      waiting: this.waitingRequests,\n    }\n  }\n\n  async close(): Promise<void> {\n    // Wait for active connections to finish\n    while (this.activeConnections > 0) {\n      await new Promise(resolve => setTimeout(resolve, 100))\n    }\n    this.idleConnections = 0\n  }\n}\n\n/**\n * ZeroDB Client implementation\n */\nexport class ZeroDBClient extends EventEmitter implements IZeroDBClient {\n  private config: Required<ZeroDBConfig>\n  private pool: ConnectionPool\n  private closed: boolean = false\n  private transactionId: string | null = null\n\n  constructor(config: ZeroDBConfig) {\n    super()\n\n    // Set defaults\n    this.config = {\n      projectId: config.projectId,\n      apiKey: config.apiKey,\n      baseUrl: config.baseUrl || 'https://api.zerodb.io',\n      pool: {\n        min: config.pool?.min || 2,\n        max: config.pool?.max || 10,\n        idleTimeout: config.pool?.idleTimeout || 30000,\n        acquireTimeout: config.pool?.acquireTimeout || 5000,\n        validate: config.pool?.validate ?? true,\n      },\n      retry: {\n        maxRetries: config.retry?.maxRetries || 3,\n        initialDelay: config.retry?.initialDelay || 1000,\n        maxDelay: config.retry?.maxDelay || 10000,\n        backoffMultiplier: config.retry?.backoffMultiplier || 2,\n        retryableErrors: config.retry?.retryableErrors || ['ECONNRESET', 'ETIMEDOUT', 'ENOTFOUND'],\n      },\n      timeout: config.timeout || 30000,\n      debug: config.debug || false,\n    }\n\n    this.pool = new ConnectionPool(this.config)\n    this.emit('connect')\n  }\n\n  /**\n   * Execute API request with retry logic\n   */\n  private async executeRequest<T>(\n    operation: string,\n    params: any\n  ): Promise<T> {\n    if (this.closed) {\n      throw new Error('Client is closed')\n    }\n\n    await this.pool.acquire()\n\n    try {\n      const result = await this.retryWithBackoff(async () => {\n        const startTime = Date.now()\n\n        // In a real implementation, this would make an HTTP request to ZeroDB API\n        // For now, we'll simulate the response\n        const response = await this.mockApiCall(operation, params)\n\n        const duration = Date.now() - startTime\n        this.emit('query', operation, duration)\n\n        if (this.config.debug) {\n          console.log(`[ZeroDB] ${operation} completed in ${duration}ms`)\n        }\n\n        return response as T\n      })\n\n      return result\n    } finally {\n      this.pool.release()\n    }\n  }\n\n  /**\n   * Mock API call (to be replaced with actual HTTP requests)\n   */\n  private async mockApiCall(operation: string, params: any): Promise<any> {\n    // Simulate network delay\n    await new Promise(resolve => setTimeout(resolve, Math.random() * 100))\n\n    // Mock responses based on operation\n    switch (operation) {\n      case 'insert':\n        return {\n          success: true,\n          rowsAffected: Array.isArray(params.data) ? params.data.length : 1,\n          rows: params.options?.returning ? params.data : undefined,\n        }\n\n      case 'select':\n        return {\n          rows: [],\n          count: 0,\n        }\n\n      case 'update':\n        return {\n          success: true,\n          rowsAffected: 0,\n          rows: params.options?.returning ? [] : undefined,\n        }\n\n      case 'delete':\n        return {\n          success: true,\n          rowsAffected: 0,\n          rows: params.options?.returning ? [] : undefined,\n        }\n\n      case 'healthCheck':\n        return {\n          connected: true,\n          responseTime: 10,\n          pool: this.pool.getStats(),\n        }\n\n      default:\n        throw new Error(`Unknown operation: ${operation}`)\n    }\n  }\n\n  /**\n   * Retry with exponential backoff\n   */\n  private async retryWithBackoff<T>(\n    fn: () => Promise<T>,\n    attempt: number = 0\n  ): Promise<T> {\n    try {\n      return await fn()\n    } catch (error) {\n      const isRetryable = this.isRetryableError(error)\n      const maxRetries = this.config.retry.maxRetries ?? 3\n      const shouldRetry = attempt < maxRetries && isRetryable\n\n      if (!shouldRetry) {\n        throw error\n      }\n\n      const initialDelay = this.config.retry.initialDelay ?? 1000\n      const backoffMultiplier = this.config.retry.backoffMultiplier ?? 2\n      const maxDelay = this.config.retry.maxDelay ?? 10000\n\n      const delay = Math.min(\n        initialDelay * Math.pow(backoffMultiplier, attempt),\n        maxDelay\n      )\n\n      if (this.config.debug) {\n        console.log(`[ZeroDB] Retrying after ${delay}ms (attempt ${attempt + 1}/${maxRetries})`)\n      }\n\n      await new Promise(resolve => setTimeout(resolve, delay))\n      return this.retryWithBackoff(fn, attempt + 1)\n    }\n  }\n\n  /**\n   * Check if error is retryable\n   */\n  private isRetryableError(error: unknown): boolean {\n    if (!error) return false\n\n    const errorCode = (error as any)?.code || (error as any)?.errno\n    if (!errorCode) return false\n\n    const retryableErrors = this.config.retry.retryableErrors ?? ['ECONNRESET', 'ETIMEDOUT', 'ENOTFOUND']\n    return retryableErrors.includes(errorCode)\n  }\n\n  /**\n   * Insert records\n   */\n  async insert<T = any>(\n    table: string,\n    data: Record<string, any> | Record<string, any>[],\n    options?: InsertOptions\n  ): Promise<CRUDResult<T>> {\n    const result = await this.executeRequest<CRUDResult<T>>('insert', {\n      table,\n      data,\n      options,\n      transactionId: this.transactionId,\n    })\n\n    return result\n  }\n\n  /**\n   * Select records\n   */\n  async select<T = any>(\n    table: string,\n    options?: QueryOptions\n  ): Promise<QueryResult<T>> {\n    const result = await this.executeRequest<QueryResult<T>>('select', {\n      table,\n      options,\n      transactionId: this.transactionId,\n    })\n\n    return result\n  }\n\n  /**\n   * Update records\n   */\n  async update<T = any>(\n    table: string,\n    data: Record<string, any>,\n    options?: UpdateOptions\n  ): Promise<CRUDResult<T>> {\n    if (!options?.filter) {\n      throw new Error('Update requires a filter to prevent accidental full table updates')\n    }\n\n    const result = await this.executeRequest<CRUDResult<T>>('update', {\n      table,\n      data,\n      options,\n      transactionId: this.transactionId,\n    })\n\n    return result\n  }\n\n  /**\n   * Delete records\n   */\n  async delete<T = any>(\n    table: string,\n    options?: DeleteOptions\n  ): Promise<CRUDResult<T>> {\n    if (!options?.filter) {\n      throw new Error('Delete requires a filter to prevent accidental full table deletion')\n    }\n\n    const result = await this.executeRequest<CRUDResult<T>>('delete', {\n      table,\n      options,\n      transactionId: this.transactionId,\n    })\n\n    return result\n  }\n\n  /**\n   * Upsert records (insert or update on conflict)\n   */\n  async upsert<T = any>(\n    table: string,\n    data: Record<string, any> | Record<string, any>[],\n    options?: InsertOptions\n  ): Promise<CRUDResult<T>> {\n    // Upsert is implemented as insert with onConflict option\n    const upsertOptions: InsertOptions = {\n      ...options,\n      onConflict: options?.onConflict || {\n        target: ['id'],\n        action: 'update',\n      },\n    }\n\n    return this.insert<T>(table, data, upsertOptions)\n  }\n\n  /**\n   * Execute batch operations\n   */\n  async batch(operations: BatchOperation[]): Promise<TransactionResult> {\n    return this.transaction(async (client) => {\n      let totalRowsAffected = 0\n      let operationsExecuted = 0\n\n      for (const op of operations) {\n        try {\n          switch (op.type) {\n            case 'insert':\n              const insertResult = await client.insert(op.table, op.data!, op.options as InsertOptions)\n              totalRowsAffected += insertResult.rowsAffected\n              break\n\n            case 'update':\n              const updateResult = await client.update(op.table, op.data!, op.options as UpdateOptions)\n              totalRowsAffected += updateResult.rowsAffected\n              break\n\n            case 'delete':\n              const deleteResult = await client.delete(op.table, op.options as DeleteOptions)\n              totalRowsAffected += deleteResult.rowsAffected\n              break\n          }\n          operationsExecuted++\n        } catch (error) {\n          throw new Error(`Batch operation failed at index ${operationsExecuted}: ${error}`)\n        }\n      }\n\n      return {\n        success: true,\n        operationsExecuted,\n        totalRowsAffected,\n      }\n    })\n  }\n\n  /**\n   * Create query builder\n   */\n  query<T = any>(table: string): IQueryBuilder<T> {\n    return new QueryBuilder<T>(table, (tbl, opts) => this.select<T>(tbl, opts))\n  }\n\n  /**\n   * Execute transaction\n   */\n  async transaction<T>(\n    callback: (client: IZeroDBClient) => Promise<T>,\n    _options?: TransactionOptions\n  ): Promise<T> {\n    const txId = this.generateTransactionId()\n    const previousTxId = this.transactionId\n\n    try {\n      this.transactionId = txId\n      this.emit('transactionStart', txId)\n\n      if (this.config.debug) {\n        console.log(`[ZeroDB] Transaction started: ${txId}`)\n      }\n\n      const result = await callback(this)\n\n      this.emit('transactionCommit', txId)\n\n      if (this.config.debug) {\n        console.log(`[ZeroDB] Transaction committed: ${txId}`)\n      }\n\n      return result\n    } catch (error) {\n      this.emit('transactionRollback', txId)\n\n      if (this.config.debug) {\n        console.log(`[ZeroDB] Transaction rolled back: ${txId}`)\n      }\n\n      throw error\n    } finally {\n      this.transactionId = previousTxId\n    }\n  }\n\n  /**\n   * Generate unique transaction ID\n   */\n  private generateTransactionId(): string {\n    return `tx_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n  }\n\n  /**\n   * Check connection health\n   */\n  async healthCheck(): Promise<HealthStatus> {\n    try {\n      const startTime = Date.now()\n      await this.executeRequest<HealthStatus>('healthCheck', {})\n      const responseTime = Date.now() - startTime\n\n      return {\n        connected: true,\n        responseTime,\n        pool: this.pool.getStats(),\n      }\n    } catch (error) {\n      return {\n        connected: false,\n        error: error instanceof Error ? error.message : 'Unknown error',\n        pool: this.pool.getStats(),\n      }\n    }\n  }\n\n  /**\n   * Close connection\n   */\n  async close(): Promise<void> {\n    if (this.closed) {\n      return\n    }\n\n    this.closed = true\n    await this.pool.close()\n    this.emit('disconnect')\n\n    if (this.config.debug) {\n      console.log('[ZeroDB] Connection closed')\n    }\n  }\n\n  /**\n   * Get pool statistics\n   */\n  getPoolStats(): PoolStats {\n    return this.pool.getStats()\n  }\n\n  /**\n   * Check if client is closed\n   */\n  isClosed(): boolean {\n    return this.closed\n  }\n\n  /**\n   * Get configuration (excluding sensitive data)\n   */\n  getConfig(): Partial<ZeroDBConfig> {\n    return {\n      projectId: this.config.projectId,\n      baseUrl: this.config.baseUrl,\n      pool: this.config.pool,\n      retry: this.config.retry,\n      timeout: this.config.timeout,\n      debug: this.config.debug,\n    }\n  }\n}\n\n/**\n * Create a new ZeroDB client\n */\nexport function createZeroDBClient(config: ZeroDBConfig): ZeroDBClient {\n  return new ZeroDBClient(config)\n}\n"]}