import { GroqBuilder, GroqBuilderRoot, GroqBuilderSubquery } from "../groq-builder"; import { ExtractDocumentTypes } from "../types/document-types"; import { QueryConfig } from "../types/query-config"; declare module "../groq-builder" { interface GroqBuilderRoot extends AsDefinitions { } interface GroqBuilderSubquery extends AsDefinitions { } interface GroqBuilder extends AsDefinitions { } interface AsDefinitions { /** * Overrides the result type to anything you specify. * * Use this carefully, since it's essentially "lying" to TypeScript, and there's no runtime validation. * * @example * q.star.filterBy("slug.current == $productSlug").as()... * */ as(): GroqBuilderOfType; /** * Overrides the result type to a specific document type. * * Use this carefully, since it's essentially "lying" to TypeScript, and there's no runtime validation. * * @example * q.star.filterBy("slug.current == $productSlug").asType<"product">()... */ asType<_type extends ExtractDocumentTypes>(): GroqBuilderOfType, TQueryConfig, ReturnType>; } } export type GroqBuilderOfType = ReturnType extends "root" ? GroqBuilderRoot : ReturnType extends "subquery" ? GroqBuilderSubquery : GroqBuilder;