import { IfNever, IsDateTime, IsNumber, IsString, Merge, UnpackList } from "./utils.js"; import { RelationalFields } from "./schema.js"; import { MappedFieldNames } from "./functions.js"; import { FieldOutputMap } from "./output.js"; //#region src/types/filters.d.ts /** * Filters */ type QueryFilter = WrapLogicalFilters>; /** * Query filters without logical filters */ type NestedQueryFilter = UnpackList extends infer FlatItem ? Partial }, MappedFieldNames extends infer Funcs ? { [Func in keyof Funcs]?: Funcs[Func] extends infer Field ? Field extends keyof FlatItem ? NestedRelationalFilter : never : never } : never>> : never; /** * Allow for relational filters */ type NestedRelationalFilter = (Field$1 extends RelationalFields ? WrapRelationalFilters> : never) | FilterOperators; /** * All regular filter operators * * TODO would love to filter this based on field type but thats not accurate enough in the schema atm */ type FilterOperators = MapFilterOperators<{ _eq: T; _neq: T; _gt: IsDateTime>; _gte: IsDateTime>; _lt: IsDateTime>; _lte: IsDateTime>; _in: T[]; _nin: T[]; _between: IsDateTime>; _nbetween: IsDateTime>; _contains: IsDateTime>; _ncontains: IsDateTime>; _icontains: IsDateTime>; _starts_with: IsDateTime>; _istarts_with: IsDateTime>; _nstarts_with: IsDateTime>; _nistarts_with: IsDateTime>; _ends_with: IsDateTime>; _iends_with: IsDateTime>; _nends_with: IsDateTime>; _niends_with: IsDateTime>; _empty: boolean; _nempty: boolean; _nnull: boolean; _null: boolean; _intersects: T; _nintersects: T; _intersects_bbox: T; _nintersects_bbox: T; }>; type MapFilterOperators = { [Key in keyof Filters as IfNever]?: Filters[Key] }; /** * Relational filter operators */ type RelationalFilterOperators = '_some' | '_none'; type WrapRelationalFilters = { [Operator in RelationalFilterOperators]?: Filters } | Filters; /** * Logical filter operations */ type LogicalFilterOperators = '_or' | '_and'; type WrapLogicalFilters = { [Operator in LogicalFilterOperators]?: WrapLogicalFilters[] } | Filters; //#endregion export { FilterOperators, LogicalFilterOperators, NestedQueryFilter, NestedRelationalFilter, QueryFilter, RelationalFilterOperators, WrapLogicalFilters, WrapRelationalFilters }; //# sourceMappingURL=filters.d.ts.map