{"version":3,"sources":["../../../src/types/snapshot.ts","../../../src/adapters/sqlite/buildWriteSql.ts","../../../src/adapters/sqlite/createExpoSqliteAdapter.ts","../../../src/adapters/sqlite/detect.ts","../../../src/types/kind.ts","../../../src/adapter/registry.ts","../../../src/adapters/sqlite/register.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { DatabaseKind } from '../types/kind';\r\n\r\nexport const SNAPSHOT_KIND_HEADER = 'x-database-kind';\r\nexport const SNAPSHOT_MIME_HEADER = 'x-snapshot-mime-type';\r\nexport const SNAPSHOT_NAME_HEADER = 'x-database-name';\r\n\r\nexport const SQLITE_SNAPSHOT_MIME_TYPE = 'application/x-sqlite3';\r\n\r\nexport type SnapshotExport = {\r\n  bytes: Uint8Array;\r\n  mimeType: string;\r\n  kind: DatabaseKind;\r\n  exportedAt?: number;\r\n};\r\n","import type {\r\n  DeleteOperation,\r\n  InsertOperation,\r\n  UpdateOperation,\r\n  WriteCellValue,\r\n} from '../../types/write';\r\n\r\nconst IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\r\n\r\nexport function quoteIdentifier(name: string): string {\r\n  if (!IDENTIFIER_PATTERN.test(name)) {\r\n    throw new Error(`Invalid identifier: ${name}`);\r\n  }\r\n\r\n  return `\"${name.replace(/\"/g, '\"\"')}\"`;\r\n}\r\n\r\nexport function buildInsertSql(operation: InsertOperation): { sql: string; params: WriteCellValue[] } {\r\n  const columns = Object.keys(operation.values);\r\n\r\n  if (columns.length === 0) {\r\n    throw new Error('Insert requires at least one column value');\r\n  }\r\n\r\n  const quotedColumns = columns.map(quoteIdentifier).join(', ');\r\n  const placeholders = columns.map(() => '?').join(', ');\r\n  const sql = `INSERT INTO ${quoteIdentifier(operation.table)} (${quotedColumns}) VALUES (${placeholders})`;\r\n  const params = columns.map((column) => operation.values[column] ?? null);\r\n\r\n  return { sql, params };\r\n}\r\n\r\nexport function buildUpdateSql(operation: UpdateOperation): { sql: string; params: WriteCellValue[] } {\r\n  const valueColumns = Object.keys(operation.values);\r\n  const pkColumns = Object.keys(operation.primaryKey);\r\n\r\n  if (valueColumns.length === 0) {\r\n    throw new Error('Update requires at least one column value');\r\n  }\r\n\r\n  if (pkColumns.length === 0) {\r\n    throw new Error('Update requires a primary key');\r\n  }\r\n\r\n  const setClause = valueColumns.map((column) => `${quoteIdentifier(column)} = ?`).join(', ');\r\n  const whereClause = pkColumns.map((column) => `${quoteIdentifier(column)} = ?`).join(' AND ');\r\n  const sql = `UPDATE ${quoteIdentifier(operation.table)} SET ${setClause} WHERE ${whereClause}`;\r\n  const params = [\r\n    ...valueColumns.map((column) => operation.values[column] ?? null),\r\n    ...pkColumns.map((column) => operation.primaryKey[column] ?? null),\r\n  ];\r\n\r\n  return { sql, params };\r\n}\r\n\r\nexport function buildDeleteSql(operation: DeleteOperation): { sql: string; params: WriteCellValue[] } {\r\n  const pkColumns = Object.keys(operation.primaryKey);\r\n\r\n  if (pkColumns.length === 0) {\r\n    throw new Error('Delete requires a primary key');\r\n  }\r\n\r\n  const whereClause = pkColumns.map((column) => `${quoteIdentifier(column)} = ?`).join(' AND ');\r\n  const sql = `DELETE FROM ${quoteIdentifier(operation.table)} WHERE ${whereClause}`;\r\n  const params = pkColumns.map((column) => operation.primaryKey[column] ?? null);\r\n\r\n  return { sql, params };\r\n}\r\n","import type { WritableDatabaseAdapter } from '../../types/adapter';\r\nimport type { WriteOperation } from '../../types/write';\r\nimport { SQLITE_SNAPSHOT_MIME_TYPE } from '../../types/snapshot';\r\nimport {\r\n  buildDeleteSql,\r\n  buildInsertSql,\r\n  buildUpdateSql,\r\n} from './buildWriteSql';\r\nimport type { ExpoSqliteDatabase } from './types';\r\n\r\nexport type CreateExpoSqliteAdapterOptions = {\r\n  database: ExpoSqliteDatabase;\r\n  id?: string;\r\n  name?: string;\r\n};\r\n\r\nexport function createExpoSqliteAdapter(\r\n  options: CreateExpoSqliteAdapterOptions,\r\n): WritableDatabaseAdapter {\r\n  const { database } = options;\r\n  let inTransaction = false;\r\n  let operationQueue: Promise<void> = Promise.resolve();\r\n\r\n  const enqueue = async <T>(operation: () => Promise<T>): Promise<T> => {\r\n    const next = operationQueue.then(operation);\r\n    operationQueue = next.then(\r\n      () => undefined,\r\n      () => undefined,\r\n    );\r\n    return next;\r\n  };\r\n\r\n  const assertTransaction = (): void => {\r\n    if (!inTransaction) {\r\n      throw new Error('No open transaction. Call beginTransaction() first.');\r\n    }\r\n  };\r\n\r\n  const runWrite = async (operation: WriteOperation) => {\r\n    assertTransaction();\r\n\r\n    let sql: string;\r\n    let params: unknown[];\r\n\r\n    switch (operation.kind) {\r\n      case 'insert': {\r\n        const built = buildInsertSql(operation);\r\n        sql = built.sql;\r\n        params = built.params;\r\n        break;\r\n      }\r\n      case 'update': {\r\n        const built = buildUpdateSql(operation);\r\n        sql = built.sql;\r\n        params = built.params;\r\n        break;\r\n      }\r\n      case 'delete': {\r\n        const built = buildDeleteSql(operation);\r\n        sql = built.sql;\r\n        params = built.params;\r\n        break;\r\n      }\r\n      default: {\r\n        const exhaustive: never = operation;\r\n        throw new Error(`Unsupported write operation: ${(exhaustive as WriteOperation).kind}`);\r\n      }\r\n    }\r\n\r\n    const result = await database.runAsync(sql, params);\r\n    return { rowsAffected: result.changes };\r\n  };\r\n\r\n  return {\r\n    kind: 'sqlite',\r\n    dialect: 'sqlite',\r\n    id: options.id ?? database.databasePath,\r\n    name: options.name ?? 'SQLite',\r\n    capabilities: {\r\n      exportSnapshot: true,\r\n      executeQuery: false,\r\n      listTables: false,\r\n      getSchema: false,\r\n      transactionalWrites: true,\r\n      observeChanges: false,\r\n      importSnapshot: false,\r\n    },\r\n    async exportSnapshot() {\r\n      return enqueue(async () => {\r\n        if (inTransaction) {\r\n          throw new Error('Cannot export while a write transaction is open');\r\n        }\r\n\r\n        await database.execAsync('PRAGMA wal_checkpoint(FULL)');\r\n        const bytes = await database.serializeAsync();\r\n\r\n        return {\r\n          bytes,\r\n          mimeType: SQLITE_SNAPSHOT_MIME_TYPE,\r\n          kind: 'sqlite' as const,\r\n          exportedAt: Date.now(),\r\n        };\r\n      });\r\n    },\r\n    async beginTransaction() {\r\n      return enqueue(async () => {\r\n        if (inTransaction) {\r\n          throw new Error('Transaction already open');\r\n        }\r\n\r\n        await database.execAsync('BEGIN IMMEDIATE');\r\n        inTransaction = true;\r\n      });\r\n    },\r\n    async commitTransaction() {\r\n      return enqueue(async () => {\r\n        assertTransaction();\r\n\r\n        try {\r\n          await database.execAsync('COMMIT');\r\n        } finally {\r\n          inTransaction = false;\r\n        }\r\n      });\r\n    },\r\n    async rollbackTransaction() {\r\n      return enqueue(async () => {\r\n        if (!inTransaction) {\r\n          return;\r\n        }\r\n\r\n        try {\r\n          await database.execAsync('ROLLBACK');\r\n        } finally {\r\n          inTransaction = false;\r\n        }\r\n      });\r\n    },\r\n    executeWrite: (operation) => enqueue(() => runWrite(operation)),\r\n  };\r\n}\r\n","import type { ExpoSqliteDatabase, ExpoSqliteInspectableDatabase } from './types';\r\n\r\nexport function detectExpoSqlite(database: unknown): database is ExpoSqliteDatabase {\r\n  return (\r\n    typeof database === 'object' &&\r\n    database !== null &&\r\n    typeof (database as ExpoSqliteDatabase).execAsync === 'function' &&\r\n    typeof (database as ExpoSqliteDatabase).serializeAsync === 'function' &&\r\n    typeof (database as ExpoSqliteDatabase).runAsync === 'function' &&\r\n    typeof (database as ExpoSqliteDatabase).databasePath === 'string'\r\n  );\r\n}\r\n\r\nexport function detectExpoSqliteInspectable(\r\n  database: unknown,\r\n): database is ExpoSqliteInspectableDatabase {\r\n  return (\r\n    detectExpoSqlite(database) &&\r\n    typeof (database as ExpoSqliteInspectableDatabase).getAllAsync === 'function' &&\r\n    typeof (database as ExpoSqliteInspectableDatabase).getFirstAsync === 'function'\r\n  );\r\n}\r\n","/** Supported database engine identifiers. */\r\nexport type DatabaseKind = 'sqlite' | 'realm' | 'duckdb' | (string & {});\r\n\r\nexport const DATABASE_DEVTOOLS_KIND = Symbol.for('@database-devtools/kind');\r\n\r\nexport function readDatabaseKindMarker(value: unknown): DatabaseKind | undefined {\r\n  if (typeof value !== 'object' || value === null) {\r\n    return undefined;\r\n  }\r\n\r\n  const marker = (value as Record<symbol, unknown>)[DATABASE_DEVTOOLS_KIND];\r\n\r\n  return typeof marker === 'string' ? (marker as DatabaseKind) : undefined;\r\n}\r\n","import { readDatabaseKindMarker } from '../types/kind';\r\nimport type { AdapterDefinition } from './types';\r\n\r\nexport class AdapterRegistry {\r\n  private readonly definitions = new Map<string, AdapterDefinition>();\r\n\r\n  register(definition: AdapterDefinition): void {\r\n    this.definitions.set(definition.kind, definition);\r\n  }\r\n\r\n  get(kind: string): AdapterDefinition | undefined {\r\n    return this.definitions.get(kind);\r\n  }\r\n\r\n  listSupported(): { kind: string; displayName: string }[] {\r\n    return [...this.definitions.values()]\r\n      .sort((left, right) => left.displayName.localeCompare(right.displayName))\r\n      .map((definition) => ({\r\n        kind: definition.kind,\r\n        displayName: definition.displayName,\r\n      }));\r\n  }\r\n\r\n  detect(database: unknown): AdapterDefinition | undefined {\r\n    const markerKind = readDatabaseKindMarker(database);\r\n\r\n    if (markerKind) {\r\n      const marked = this.definitions.get(markerKind);\r\n\r\n      if (marked) {\r\n        return marked;\r\n      }\r\n    }\r\n\r\n    const matches = [...this.definitions.values()]\r\n      .filter((definition) => {\r\n        try {\r\n          return definition.detect(database);\r\n        } catch {\r\n          return false;\r\n        }\r\n      })\r\n      .sort((left, right) => right.priority - left.priority);\r\n\r\n    return matches[0];\r\n  }\r\n}\r\n\r\nlet globalRegistry: AdapterRegistry | null = null;\r\n\r\nexport function getAdapterRegistry(): AdapterRegistry {\r\n  if (!globalRegistry) {\r\n    globalRegistry = new AdapterRegistry();\r\n  }\r\n\r\n  return globalRegistry;\r\n}\r\n\r\nexport function resetAdapterRegistry(): void {\r\n  globalRegistry = null;\r\n}\r\n","import { getAdapterRegistry } from '../../adapter/registry';\r\nimport type { AdapterDefinition } from '../../adapter/types';\r\nimport { createExpoSqliteAdapter } from './createExpoSqliteAdapter';\r\nimport { detectExpoSqlite } from './detect';\r\nimport type { ExpoSqliteDatabase } from './types';\r\n\r\nexport const sqliteAdapterDefinition: AdapterDefinition = {\r\n  kind: 'sqlite',\r\n  displayName: 'SQLite',\r\n  priority: 100,\r\n  detect: detectExpoSqlite,\r\n  create: (database) =>\r\n    createExpoSqliteAdapter({\r\n      database: database as ExpoSqliteDatabase,\r\n      name: (database as ExpoSqliteDatabase).databasePath,\r\n    }),\r\n};\r\n\r\nexport function registerSqliteAdapter(): void {\r\n  getAdapterRegistry().register(sqliteAdapterDefinition);\r\n}\r\n"]}