import { CompiledQuery } from '../../types/types.js'; import { AbstractPowerSyncDatabase } from '../AbstractPowerSyncDatabase.js'; import { WatchCompatibleQuery } from './WatchedQuery.js'; /** * Options for {@link GetAllQuery}. */ export type GetAllQueryOptions = { sql: string; parameters?: ReadonlyArray; /** * Optional mapper function to convert raw rows into the desired RowType. * @example * ```javascript * (rawRow) => ({ * id: rawRow.id, * created_at: new Date(rawRow.created_at), * }) * ``` */ mapper?: (rawRow: Record) => RowType; }; /** * Performs a {@link AbstractPowerSyncDatabase.getAll} operation for a watched query. */ export class GetAllQuery implements WatchCompatibleQuery { constructor(protected options: GetAllQueryOptions) {} compile(): CompiledQuery { return { sql: this.options.sql, parameters: this.options.parameters ?? [] }; } async execute(options: { db: AbstractPowerSyncDatabase }): Promise { const { db } = options; const { sql, parameters = [] } = this.compile(); const rawResult = await db.getAll(sql, [...parameters]); if (this.options.mapper) { return rawResult.map(this.options.mapper); } return rawResult as RowType[]; } }