import { DocumentChangeType, OrderByDirection, WhereFilterOp, SnapshotMetadata, SnapshotListenOptions, CollectionReference, Query as QueryOrig, QuerySnapshot as QuerySnapshotOrig } from "firebase/firestore"; import { IDocumentRef } from "./field.types"; import QuerySnapshot from "../QuerySnapshot"; import { _Query } from ".."; export interface IEntity { id: string; ref: IDocumentRef; toData(): Record; } export interface _IQuery { native: QueryOrig; buildSnapshot(nativeSnapshot: QuerySnapshotOrig): QuerySnapshot; appendNativeQuery(query: QueryOrig): _Query; } export interface _IQuerySnapshot { docs: T[]; size: number; empty: boolean; query: _IQuery; metadata: SnapshotMetadata; forEach: (callback: (doc: T, index: number) => void) => void; docChanges: (opts?: SnapshotListenOptions) => DocumentChange[]; } export interface _IDocumentSnapshot { doc: T; exists: boolean; ref: IDocumentRef; metadata: SnapshotMetadata; } export interface _ICollection { native: CollectionReference; path: string; parent?: IDocumentRef

| null; entity: new () => T; } export interface DocumentChange { doc: T; type: DocumentChangeType; newIndex: number; oldIndex: number; } export interface ICollectionConfig { name: string; } declare type WhereQuery = [keyof T, WhereFilterOp, any]; declare type OrderByQuery = [keyof T, OrderByDirection?]; declare type StartAtQuery = T | any; declare type StartAfterQuery = T | any; declare type EndAtQuery = T | any; declare type EndBeforeQuery = T | any; export interface ICollectionQuery { where?: WhereQuery[]; orderBy?: OrderByQuery[]; limit?: number; startAt?: StartAtQuery; startAfter?: StartAfterQuery; endAt?: EndAtQuery; endBefore?: EndBeforeQuery; } export interface ISubCollectionConfig extends ICollectionConfig { entity: new () => IEntity; } export {};