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
TypeScript
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 {};