@motioneffector/sql

Documentation

Types API

TypeScript type definitions exported by the library.


Database

The main database interface returned by createDatabase().

interface Database {
  // Query methods
  run(sql: string | SqlTemplate, params?: ParamArray | ParamObject): RunResult
  get<T extends Record<string, unknown>>(sql: string | SqlTemplate, params?: ParamArray | ParamObject): T | undefined
  all<T extends Record<string, unknown>>(sql: string | SqlTemplate, params?: ParamArray | ParamObject): T[]
  exec(sql: string): void

  // Migrations
  migrate(migrations: Migration[]): Promise<number[]>
  rollback(targetVersion?: number, migrations?: Migration[]): Promise<number[]>
  getMigrationVersion(): number

  // Transactions
  transaction<T>(fn: () => T | Promise<T>): Promise<T>
  readonly inTransaction: boolean

  // Table helper
  table<T extends Record<string, unknown>>(tableName: string, options?: TableOptions): TableHelper<T>

  // Export/Import
  export(): Uint8Array
  import(data: Uint8Array | ArrayBuffer): void

  // Persistence
  save(): Promise<void>
  load(): Promise<void>

  // Database info
  getTables(): string[]
  getTableInfo(tableName: string): ColumnInfo[]
  getIndexes(tableName?: string): IndexInfo[]

  // Management
  close(): void
  clone(): Promise<Database>
  clear(): void
  destroy(): Promise<void>

  // Query building
  sql(strings: TemplateStringsArray, ...values: unknown[]): SqlTemplate

  // Prepared statements
  prepare<T>(sql: string): PreparedStatement<T>

  // Batch operations
  insertMany(tableName: string, rows: Record<string, unknown>[]): number[]
}

DatabaseOptions

Configuration for createDatabase().

interface DatabaseOptions {
  data?: Uint8Array
  wasmPath?: string
  persist?: PersistConfig
  autoSave?: boolean
  autoSaveDebounce?: number
}

PersistConfig

Persistence configuration.

interface PersistConfig {
  key: string
  storage: 'indexeddb' | 'localstorage' | StorageAdapter
}

StorageAdapter

Interface for custom storage backends.

interface StorageAdapter {
  getItem(key: string): Promise<Uint8Array | null>
  setItem(key: string, value: Uint8Array): Promise<void>
  removeItem(key: string): Promise<void>
}

RunResult

Result from mutation operations.

interface RunResult {
  changes: number
  lastInsertRowId: number
}

ParamArray

Positional query parameters.

type ParamArray = unknown[]

ParamObject

Named query parameters.

type ParamObject = Record<string, unknown>

Migration

Schema migration definition.

interface Migration {
  version: number
  up: string
  down?: string
}

TableOptions

Configuration for table helpers.

interface TableOptions {
  primaryKey?: string
}

TableHelper<T>

High-level CRUD interface.

interface TableHelper<T extends Record<string, unknown>> {
  insert(data: Partial<T>): number
  find(id: unknown, options?: { key?: string }): T | undefined
  where(conditions: Partial<T>): T[]
  update(id: unknown, data: Partial<T>, options?: { key?: string }): number
  delete(id: unknown, options?: { key?: string }): number
  count(conditions?: Partial<T>): number
  all(): T[]
}

ColumnInfo

Column metadata from schema introspection.

interface ColumnInfo {
  name: string
  type: string
  nullable: boolean
  defaultValue: unknown
  primaryKey: boolean
}

IndexInfo

Index metadata from schema introspection.

interface IndexInfo {
  name: string
  table: string
  unique: boolean
  columns: string[]
}

SqlTemplate

Result of the db.sql tagged template.

interface SqlTemplate {
  sql: string
  params: unknown[]
}

PreparedStatement<T>

Reusable compiled query.

interface PreparedStatement<T> {
  run(params?: ParamArray | ParamObject): RunResult
  get(params?: ParamArray | ParamObject): T | undefined
  all(params?: ParamArray | ParamObject): T[]
  finalize(): void
}

Importing Types

All types are exported from the main module:

import type {
  Database,
  DatabaseOptions,
  PersistConfig,
  StorageAdapter,
  RunResult,
  ParamArray,
  ParamObject,
  Migration,
  TableOptions,
  TableHelper,
  ColumnInfo,
  IndexInfo,
  SqlTemplate,
  PreparedStatement,
} from '@motioneffector/sql'