{"version":3,"file":"index.cjs","names":["familySync","GLIBC","MUSL","LibSQLStore"],"sources":["../src/client.ts","../src/support.ts","../src/index.ts"],"sourcesContent":["import type {\n  SqliteClient,\n  SqliteInArgs,\n  SqliteInValue,\n  SqliteResultSet,\n  SqliteStatement,\n  SqliteTransaction,\n  SqliteTransactionMode,\n  SqliteValue,\n} from '@mastra/libsql';\nimport type { Database } from '@tursodatabase/database';\n\nexport type TursoExperimentalFeature =\n  | 'views'\n  | 'strict'\n  | 'encryption'\n  | 'index_method'\n  | 'custom_types'\n  | 'autovacuum'\n  | 'vacuum'\n  | 'triggers'\n  | 'attach'\n  | 'generated_columns'\n  | 'multiprocess_wal'\n  | 'without_rowid';\n\nexport interface TursoClientConfig {\n  path: string;\n  readonly?: boolean;\n  fileMustExist?: boolean;\n  timeout?: number;\n  defaultQueryTimeout?: number;\n  tracing?: 'info' | 'debug' | 'trace';\n  experimental?: TursoExperimentalFeature[];\n}\n\ntype TransactionDecision = 'commit' | 'rollback';\n\nconst ROLLBACK = Symbol('turso-transaction-rollback');\n\nclass TursoSqliteError extends Error {\n  readonly code: string;\n  readonly rawCode?: number;\n\n  constructor(error: Error, code: string) {\n    super(error.message, { cause: error });\n    this.name = 'TursoSqliteError';\n    this.code = code;\n    const rawCode = (error as Error & { rawCode?: unknown }).rawCode;\n    if (typeof rawCode === 'number') this.rawCode = rawCode;\n  }\n}\n\nfunction normalizeError(error: unknown): unknown {\n  if (!(error instanceof Error)) return error;\n\n  const code = (error as Error & { code?: unknown }).code;\n  if (typeof code === 'string' && code.startsWith('SQLITE_')) return error;\n\n  const message = error.message.toLowerCase();\n  if (message.includes('unique constraint')) return new TursoSqliteError(error, 'SQLITE_CONSTRAINT_UNIQUE');\n  if (message.includes('primary key constraint')) return new TursoSqliteError(error, 'SQLITE_CONSTRAINT_PRIMARYKEY');\n  if (message.includes('not null constraint')) return new TursoSqliteError(error, 'SQLITE_CONSTRAINT_NOTNULL');\n  if (message.includes('foreign key constraint')) return new TursoSqliteError(error, 'SQLITE_CONSTRAINT_FOREIGNKEY');\n  if (message.includes('check constraint')) return new TursoSqliteError(error, 'SQLITE_CONSTRAINT_CHECK');\n  if (message.includes('database is locked') || message.includes('database is busy')) {\n    return new TursoSqliteError(error, 'SQLITE_BUSY');\n  }\n  return error;\n}\n\nfunction deferred<T>() {\n  let resolve!: (value: T | PromiseLike<T>) => void;\n  let reject!: (reason?: unknown) => void;\n  const promise = new Promise<T>((resolvePromise, rejectPromise) => {\n    resolve = resolvePromise;\n    reject = rejectPromise;\n  });\n  return { promise, resolve, reject };\n}\n\nclass AsyncMutex {\n  #tail = Promise.resolve();\n\n  async acquire(): Promise<() => void> {\n    const previous = this.#tail;\n    const next = deferred<void>();\n    this.#tail = previous.then(\n      () => next.promise,\n      () => next.promise,\n    );\n    await previous;\n\n    let released = false;\n    return () => {\n      if (released) return;\n      released = true;\n      next.resolve();\n    };\n  }\n}\n\nfunction normalizeInput(value: SqliteInValue): unknown {\n  if (typeof value === 'boolean') return value ? 1 : 0;\n  if (value instanceof Date) return value.toISOString();\n  if (value instanceof ArrayBuffer) return new Uint8Array(value);\n  return value;\n}\n\nfunction normalizeArgs(args?: SqliteInArgs): unknown[] | Record<string, unknown> | undefined {\n  if (!args) return undefined;\n  if (Array.isArray(args)) return args.map(normalizeInput);\n  return Object.fromEntries(Object.entries(args).map(([key, value]) => [key, normalizeInput(value)]));\n}\n\nfunction normalizeStatement(statement: SqliteStatement) {\n  const args = normalizeArgs(statement.args);\n  if (!Array.isArray(args) || !statement.sql.toLowerCase().includes('jsonb(?)')) {\n    return { sql: statement.sql, ...(args ? { args } : {}) };\n  }\n\n  let argumentIndex = 0;\n  const normalizedArgs: unknown[] = [];\n  const sql = statement.sql.replace(/jsonb\\(\\?\\)|\\?/gi, token => {\n    const value = args[argumentIndex++];\n    if (token.toLowerCase() === 'jsonb(?)' && value === null) return 'NULL';\n    normalizedArgs.push(value);\n    return token;\n  });\n\n  return { sql, args: normalizedArgs };\n}\n\nfunction toNativeStatement(statement: string | SqliteStatement) {\n  return typeof statement === 'string' ? statement : normalizeStatement(statement);\n}\n\nfunction normalizeValue(value: unknown): SqliteValue {\n  if (typeof value === 'bigint') {\n    return value <= BigInt(Number.MAX_SAFE_INTEGER) && value >= BigInt(Number.MIN_SAFE_INTEGER) ? Number(value) : value;\n  }\n  if (value instanceof Uint8Array) return Uint8Array.from(value).buffer;\n  if (value === null || typeof value === 'string' || typeof value === 'number' || value instanceof ArrayBuffer) {\n    return value;\n  }\n  throw new TypeError(`Unsupported Turso result value: ${typeof value}`);\n}\n\nfunction normalizeResult(result: {\n  columns: string[];\n  columnTypes: string[];\n  rows: Array<Record<string, unknown> | unknown[]>;\n  rowsAffected: number;\n}): SqliteResultSet {\n  const rows = result.rows.map(row => {\n    if (Array.isArray(row)) {\n      return Object.fromEntries(result.columns.map((column, index) => [column, normalizeValue(row[index])]));\n    }\n    return Object.fromEntries(Object.entries(row).map(([key, value]) => [key, normalizeValue(value)]));\n  });\n\n  return {\n    columns: result.columns,\n    columnTypes: result.columnTypes,\n    rows,\n    rowsAffected: result.rowsAffected,\n  };\n}\n\nexport class TursoSqliteClient implements SqliteClient {\n  readonly protocol = 'turso';\n\n  readonly #mutex = new AsyncMutex();\n  readonly #readiness: Promise<Database>;\n  #state: 'open' | 'closing' | 'closed' = 'open';\n  #closePromise?: Promise<void>;\n  #activeRollback?: () => Promise<void>;\n\n  constructor(config: TursoClientConfig) {\n    this.#readiness = this.#connect(config);\n    void this.#readiness.catch(() => undefined);\n  }\n\n  get closed(): boolean {\n    return this.#state !== 'open';\n  }\n\n  async execute(statement: string | SqliteStatement): Promise<SqliteResultSet> {\n    return this.#runExclusive(async db => normalizeResult((await db.batch([toNativeStatement(statement)]))[0]!));\n  }\n\n  async batch(statements: Array<string | SqliteStatement>, mode?: SqliteTransactionMode): Promise<SqliteResultSet[]> {\n    return this.#runExclusive(async db => {\n      const results = await db.batch(statements.map(toNativeStatement), mode);\n      return results.map(normalizeResult);\n    });\n  }\n\n  async transaction(mode: SqliteTransactionMode = 'write'): Promise<SqliteTransaction> {\n    this.#assertOpen();\n    const release = await this.#mutex.acquire();\n\n    try {\n      this.#assertOpen();\n      const db = await this.#readiness;\n      this.#assertOpen();\n      const entered = deferred<void>();\n      const decision = deferred<TransactionDecision>();\n      let transactionClosed = false;\n      let operationTail = Promise.resolve();\n      let completion: Promise<void> | undefined;\n      let runner!: Promise<void>;\n\n      const execute = (statement: string | SqliteStatement): Promise<SqliteResultSet> => {\n        if (transactionClosed) return Promise.reject(new Error('Turso transaction is closed.'));\n        const operation = operationTail.then(async () => {\n          try {\n            return normalizeResult((await db.batch([toNativeStatement(statement)]))[0]!);\n          } catch (error) {\n            throw normalizeError(error);\n          }\n        });\n        operationTail = operation.then(\n          () => undefined,\n          () => undefined,\n        );\n        return operation;\n      };\n\n      const finish = (outcome: TransactionDecision): Promise<void> => {\n        if (completion) return completion;\n        transactionClosed = true;\n        completion = (async () => {\n          await operationTail;\n          decision.resolve(outcome);\n          try {\n            await runner;\n          } catch (error) {\n            if (outcome !== 'rollback' || error !== ROLLBACK) throw error;\n          }\n        })();\n        return completion;\n      };\n\n      const transaction: SqliteTransaction = {\n        execute,\n        commit: () => finish('commit'),\n        rollback: () => finish('rollback'),\n        close: () => finish('rollback'),\n        get closed() {\n          return transactionClosed;\n        },\n      };\n\n      const rollback = () => finish('rollback');\n      this.#activeRollback = rollback;\n\n      const nativeTransaction = db.transaction(async () => {\n        entered.resolve();\n        if ((await decision.promise) === 'rollback') throw ROLLBACK;\n      });\n      const nativeRunner = mode === 'write' ? nativeTransaction.immediate() : nativeTransaction.deferred();\n      runner = nativeRunner.catch(error => {\n        throw normalizeError(error);\n      });\n      runner.then(\n        () => {\n          if (this.#activeRollback === rollback) this.#activeRollback = undefined;\n          release();\n        },\n        error => {\n          entered.reject(error);\n          if (this.#activeRollback === rollback) this.#activeRollback = undefined;\n          release();\n        },\n      );\n\n      await entered.promise;\n      if (this.#state !== 'open') {\n        await rollback();\n        throw new Error('Turso client is closed.');\n      }\n      return transaction;\n    } catch (error) {\n      release();\n      throw error;\n    }\n  }\n\n  close(): Promise<void> {\n    this.#closePromise ??= this.#close();\n    return this.#closePromise;\n  }\n\n  async #connect(config: TursoClientConfig): Promise<Database> {\n    const { connect } = await import('@tursodatabase/database');\n    const db = await connect(config.path, {\n      ...(config.readonly === undefined ? {} : { readonly: config.readonly }),\n      ...(config.fileMustExist === undefined ? {} : { fileMustExist: config.fileMustExist }),\n      ...(config.timeout === undefined ? {} : { timeout: config.timeout }),\n      ...(config.defaultQueryTimeout === undefined ? {} : { defaultQueryTimeout: config.defaultQueryTimeout }),\n      ...(config.tracing === undefined ? {} : { tracing: config.tracing }),\n      ...(config.experimental === undefined ? {} : { experimental: config.experimental }),\n    });\n    db.defaultSafeIntegers(true);\n    return db;\n  }\n\n  async #runExclusive<T>(operation: (db: Database) => Promise<T>): Promise<T> {\n    this.#assertOpen();\n    const release = await this.#mutex.acquire();\n    try {\n      this.#assertOpen();\n      const db = await this.#readiness;\n      this.#assertOpen();\n      try {\n        return await operation(db);\n      } catch (error) {\n        throw normalizeError(error);\n      }\n    } finally {\n      release();\n    }\n  }\n\n  async #close(): Promise<void> {\n    if (this.#state === 'closed') return;\n    this.#state = 'closing';\n    await this.#activeRollback?.();\n\n    const release = await this.#mutex.acquire();\n    try {\n      const db = await this.#readiness.catch(() => undefined);\n      await db?.close();\n    } finally {\n      this.#state = 'closed';\n      release();\n    }\n  }\n\n  #assertOpen(): void {\n    if (this.#state !== 'open') throw new Error('Turso client is closed.');\n  }\n}\n","import { familySync, GLIBC, MUSL } from 'detect-libc';\n\nexport type TursoLinuxLibc = 'glibc' | 'musl' | 'unknown';\n\nexport interface TursoDatabaseSupportOptions {\n  platform?: NodeJS.Platform;\n  arch?: string;\n  linuxLibc?: TursoLinuxLibc;\n}\n\nexport interface TursoDatabaseSupport {\n  supported: boolean;\n  platform: NodeJS.Platform;\n  arch: string;\n  linuxLibc?: TursoLinuxLibc;\n  reason?: string;\n}\n\nfunction detectLinuxLibc(): TursoLinuxLibc {\n  const family = familySync();\n  if (family === GLIBC) return 'glibc';\n  if (family === MUSL) return 'musl';\n  return 'unknown';\n}\n\nexport function getTursoDatabaseSupport(options: TursoDatabaseSupportOptions = {}): TursoDatabaseSupport {\n  const platform = options.platform ?? process.platform;\n  const arch = options.arch ?? process.arch;\n\n  if (platform === 'darwin' && arch === 'arm64') return { supported: true, platform, arch };\n  if (platform === 'win32' && arch === 'x64') return { supported: true, platform, arch };\n\n  if (platform === 'linux') {\n    const linuxLibc = options.linuxLibc ?? detectLinuxLibc();\n    const supported = (arch === 'x64' || arch === 'arm64') && linuxLibc === 'glibc';\n    return {\n      supported,\n      platform,\n      arch,\n      linuxLibc,\n      ...(supported\n        ? {}\n        : { reason: `Turso Database requires Linux x64 or arm64 with glibc; detected ${arch}/${linuxLibc}.` }),\n    };\n  }\n\n  return {\n    supported: false,\n    platform,\n    arch,\n    reason: `Turso Database does not provide a native binding for ${platform}/${arch}.`,\n  };\n}\n","import type { RetentionConfig } from '@mastra/core/storage';\nimport type { SqliteClient } from '@mastra/libsql';\nimport { LibSQLStore } from '@mastra/libsql';\n\nimport { TursoSqliteClient } from './client';\nimport type { TursoClientConfig, TursoExperimentalFeature } from './client';\nimport { getTursoDatabaseSupport } from './support';\n\nexport type { TursoExperimentalFeature } from './client';\nexport type { TursoDatabaseSupport, TursoDatabaseSupportOptions, TursoLinuxLibc } from './support';\nexport { getTursoDatabaseSupport } from './support';\n\nexport interface TursoStoreBaseConfig {\n  id: string;\n  maxRetries?: number;\n  initialBackoffMs?: number;\n  disableInit?: boolean;\n  retention?: RetentionConfig;\n}\n\nexport type TursoStoreConfig = TursoStoreBaseConfig &\n  (\n    | {\n        path: string;\n        client?: never;\n        readonly?: boolean;\n        fileMustExist?: boolean;\n        timeout?: number;\n        defaultQueryTimeout?: number;\n        tracing?: 'info' | 'debug' | 'trace';\n        experimental?: TursoExperimentalFeature[];\n      }\n    | {\n        client: SqliteClient;\n        path?: never;\n      }\n  );\n\nexport class TursoStore extends LibSQLStore {\n  #closePromise?: Promise<void>;\n\n  constructor(config: TursoStoreConfig) {\n    if (!config.id || typeof config.id !== 'string' || config.id.trim() === '') {\n      throw new Error('TursoStore: id must be provided and cannot be empty.');\n    }\n\n    let client: SqliteClient;\n    if ('client' in config && config.client) {\n      client = config.client;\n    } else {\n      if (!config.path || typeof config.path !== 'string' || config.path.trim() === '') {\n        throw new Error('TursoStore: path must be provided and cannot be empty.');\n      }\n      const support = getTursoDatabaseSupport();\n      if (!support.supported) {\n        throw new Error(support.reason ?? `Turso Database is not supported on ${support.platform}/${support.arch}.`);\n      }\n      const clientConfig: TursoClientConfig = {\n        path: config.path,\n        ...(config.readonly === undefined ? {} : { readonly: config.readonly }),\n        ...(config.fileMustExist === undefined ? {} : { fileMustExist: config.fileMustExist }),\n        ...(config.timeout === undefined ? {} : { timeout: config.timeout }),\n        ...(config.defaultQueryTimeout === undefined ? {} : { defaultQueryTimeout: config.defaultQueryTimeout }),\n        ...(config.tracing === undefined ? {} : { tracing: config.tracing }),\n        ...(config.experimental === undefined ? {} : { experimental: config.experimental }),\n      };\n      client = new TursoSqliteClient(clientConfig);\n    }\n\n    super({\n      id: config.id,\n      client,\n      ...(config.maxRetries === undefined ? {} : { maxRetries: config.maxRetries }),\n      ...(config.initialBackoffMs === undefined ? {} : { initialBackoffMs: config.initialBackoffMs }),\n      ...(config.disableInit === undefined ? {} : { disableInit: config.disableInit }),\n      ...(config.retention === undefined ? {} : { retention: config.retention }),\n    });\n    this.name = 'TursoStore';\n  }\n\n  override close(): Promise<void> {\n    this.#closePromise ??= super.close();\n    return this.#closePromise;\n  }\n}\n"],"mappings":"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"}