/** * Query Builder * * Builder fluido para construir queries de Firestore de manera legible. * Alternativa más expresiva a pasar objetos QueryOptions directamente. */ import { OrderDirection, QueryOptions, WhereOperator } from '../types'; /** * Builder fluido para queries de Firestore. * * @example * ```typescript * // Construir query con builder * const options = new QueryBuilder() * .where('status', '==', 'active') * .where('age', '>=', 18) * .orderBy('createdAt', 'desc') * .limit(10) * .build(); * * // Usar con FirestoreService * const users = await firestoreService.getDocs('users', options); * * // O con método estático * const options2 = QueryBuilder.create() * .where('category', '==', 'electronics') * .orderBy('price', 'asc') * .build(); * ``` */ export declare class QueryBuilder { private whereConditions; private orderByConditions; private limitValue?; private startAfterValue?; private startAtValue?; private endBeforeValue?; private endAtValue?; /** * Crea una nueva instancia del builder (método estático alternativo). */ static create(): QueryBuilder; /** * Agrega una condición where. * * @param field - Campo a filtrar * @param operator - Operador de comparación * @param value - Valor a comparar * * @example * ```typescript * builder.where('status', '==', 'active') * builder.where('price', '>=', 100) * builder.where('tags', 'array-contains', 'featured') * builder.where('category', 'in', ['electronics', 'books']) * ``` */ where(field: string, operator: WhereOperator, value: unknown): QueryBuilder; /** * Shortcut para where con operador '=='. * * @example * ```typescript * builder.whereEquals('status', 'active') * // equivalente a: builder.where('status', '==', 'active') * ``` */ whereEquals(field: string, value: unknown): QueryBuilder; /** * Shortcut para where con operador '!='. */ whereNotEquals(field: string, value: unknown): QueryBuilder; /** * Shortcut para where con operador '>'. */ whereGreaterThan(field: string, value: unknown): QueryBuilder; /** * Shortcut para where con operador '>='. */ whereGreaterOrEqual(field: string, value: unknown): QueryBuilder; /** * Shortcut para where con operador '<'. */ whereLessThan(field: string, value: unknown): QueryBuilder; /** * Shortcut para where con operador '<='. */ whereLessOrEqual(field: string, value: unknown): QueryBuilder; /** * Shortcut para where con operador 'array-contains'. * * @example * ```typescript * builder.whereArrayContains('tags', 'featured') * ``` */ whereArrayContains(field: string, value: unknown): QueryBuilder; /** * Shortcut para where con operador 'array-contains-any'. * * @example * ```typescript * builder.whereArrayContainsAny('tags', ['featured', 'new']) * ``` */ whereArrayContainsAny(field: string, values: unknown[]): QueryBuilder; /** * Shortcut para where con operador 'in'. * * @example * ```typescript * builder.whereIn('status', ['active', 'pending']) * ``` */ whereIn(field: string, values: unknown[]): QueryBuilder; /** * Shortcut para where con operador 'not-in'. */ whereNotIn(field: string, values: unknown[]): QueryBuilder; /** * Agrega ordenamiento por un campo. * * @param field - Campo por el cual ordenar * @param direction - Dirección: 'asc' o 'desc' (default: 'asc') * * @example * ```typescript * builder.orderBy('createdAt', 'desc') * builder.orderBy('name') // asc por defecto * ``` */ orderBy(field: string, direction?: OrderDirection): QueryBuilder; /** * Shortcut para orderBy descendente. */ orderByDesc(field: string): QueryBuilder; /** * Shortcut para orderBy ascendente. */ orderByAsc(field: string): QueryBuilder; /** * Limita el número de resultados. * * @param count - Número máximo de documentos * * @example * ```typescript * builder.limit(10) * ``` */ limit(count: number): QueryBuilder; /** * Cursor para paginación: empezar después de un documento. * * @param cursor - Documento o snapshot desde donde continuar * * @example * ```typescript * // Primera página * const page1 = await service.getPaginated('users', builder.limit(10).build()); * * // Siguiente página * const page2 = await service.getPaginated('users', * builder.startAfter(page1.lastDoc).limit(10).build() * ); * ``` */ startAfter(cursor: unknown): QueryBuilder; /** * Cursor para paginación: empezar en un documento. */ startAt(cursor: unknown): QueryBuilder; /** * Cursor para paginación: terminar antes de un documento. */ endBefore(cursor: unknown): QueryBuilder; /** * Cursor para paginación: terminar en un documento. */ endAt(cursor: unknown): QueryBuilder; /** * Construye el objeto QueryOptions. * * @returns QueryOptions para usar con FirestoreService */ build(): QueryOptions; /** * Resetea el builder para reutilización. */ reset(): QueryBuilder; /** * Clona el builder actual. */ clone(): QueryBuilder; } /** * Función helper para crear un QueryBuilder. * * @example * ```typescript * import { query } from 'valtech-components'; * * const options = query() * .where('status', '==', 'active') * .orderBy('createdAt', 'desc') * .limit(10) * .build(); * ``` */ export declare function query(): QueryBuilder;