import { type DocumentReference, type DocumentSnapshot, type Firestore, type Query as FirestoreQuery, Transaction, type WriteBatch } from '@firebase/firestore'; import type { AggregateQuery, Aggregated } from 'firestore-repository/aggregate'; import type { WriteDocumentData } from 'firestore-repository/document'; import type { Query } from 'firestore-repository/query'; import type * as repository from 'firestore-repository/repository'; import { type CollectionSchema, type DocPathElement, type Id, type Model, type ParentId } from 'firestore-repository/schema'; export type Env = { transaction: Transaction; writeBatch: WriteBatch; query: FirestoreQuery; }; export type TransactionOption = repository.TransactionOption; export type WriteTransactionOption = repository.WriteTransactionOption; export declare class Repository implements repository.Repository { readonly collection: T; readonly db: Firestore; constructor(collection: T, db: Firestore); get(id: Id, options?: TransactionOption): Promise | undefined>; getOnSnapshot(id: Id, next: (snapshot: Model | undefined) => void, error?: (error: Error) => void, complete?: () => void): repository.Unsubscribe; list(query: Query): Promise[]>; listOnSnapshot(query: Query, next: (snapshot: Model[]) => void, error?: (error: Error) => void, complete?: () => void): repository.Unsubscribe; aggregate>(aggregate: U): Promise>; set(doc: Model, options?: WriteTransactionOption): Promise; delete(id: Id, options?: WriteTransactionOption): Promise; batchSet(docs: Model[], options?: WriteTransactionOption): Promise; batchDelete(ids: Id[], options?: WriteTransactionOption): Promise; protected batchWriteOperation(targets: U[], runner: { batch: (batch: WriteBatch, target: U) => void; transaction: (transaction: Transaction, target: U) => void; }, options?: WriteTransactionOption): Promise; protected docRef(id: Id): DocumentReference; protected collectionRef(parentId: ParentId): import("@firebase/firestore").CollectionReference; protected fromFirestore(doc: DocumentSnapshot): Model | undefined; protected toFirestoreData(data: Model): WriteDocumentData; } /** * Obtain document path elements from DocumentReference */ export declare const docPathElements: (doc: DocumentReference) => [DocPathElement, ...DocPathElement[]]; export declare const toFirestoreQuery: (db: Firestore, query: Query) => FirestoreQuery;