UNPKG

groq-builder

Version:

A **schema-aware**, strongly-typed GROQ query builder. It enables you to build GROQ queries using **auto-completion**, **type-checking**, and **runtime validation**.

34 lines (33 loc) 1.63 kB
import { ExtractDocumentTypes } from "../types/schema-types"; import { ResultItem } from "../types/result-types"; import { ExtractConditionalByTypeProjectionResults, ConditionalByTypeProjectionMap, ConditionalConfig } from "./conditional-types"; declare module "../groq-builder" { interface GroqBuilder<TResult, TQueryConfig> { /** * Creates an inline conditional projection, based on the `_type` field. * * This is similar to `.conditional`, * but provides stronger types and auto-completion. * * @example * q.star.filterByType("product", "category").project(sub => ({ * name: q.string(), * ...sub.conditionalByType({ * product: { * price: q.number(), * }, * category: { * title: q.string(), * }, * }), * })) */ conditionalByType<TConditionalProjections extends ConditionalByTypeProjectionMap<ResultItem.Infer<TResult>, TQueryConfig>, TKey extends string = typeof DEFAULT_KEY, /** * Did we supply a condition for all possible _type values? */ TIsExhaustive extends boolean = ExtractDocumentTypes<ResultItem.Infer<TResult>> extends keyof TConditionalProjections ? true : false>(conditionalProjections: TConditionalProjections, config?: Partial<ConditionalConfig<TKey, TIsExhaustive>>): ExtractConditionalByTypeProjectionResults<ResultItem.Infer<TResult>, TConditionalProjections, ConditionalConfig<TKey, TIsExhaustive>>; } } declare const DEFAULT_KEY: "[BY_TYPE]"; export {};