import type { DocumentNode, OperationDefinitionNode, FieldNode, ArgumentNode, IntValueNode, ListValueNode, ObjectValueNode, FloatValueNode, StringValueNode, BooleanValueNode, NullValueNode, EnumValueNode, VariableNode, DirectiveNode, VariableDefinitionNode, NonNullTypeNode, ListTypeNode, NamedTypeNode, FragmentSpreadNode, InlineFragmentNode, FragmentDefinitionNode, DefinitionNode, TypeNode } from 'graphql/language'; /** * Luvio specific custom GraphQL AST * * - Omit Location * - flatten NameNode for easier value access * - Add luvioSelections for custom selections * - LuvioSelectionCustomFieldNode for fields with custom client side directives */ export interface LuvioDocumentNode extends Omit { definitions: LuvioDefinitionNode[]; } export type LuvioDefinitionNode = LuvioOperationDefinitionNode | LuvioFragmentDefinitionNode; export interface LuvioOperationDefinitionNode extends Omit { name?: string; variableDefinitions?: LuvioVariableDefinitionNode[]; directives?: LuvioDirectiveNode[]; luvioSelections: LuvioSelectionNode[]; } export interface LuvioVariableDefinitionNode extends Omit { variable: LuvioVariableNode; type: LuvioTypeNode; defaultValue?: LuvioValueNode; directives?: LuvioDirectiveNode[]; } export interface LuvioVariableNode extends Omit { name: string; } export type LuvioSelectionNode = LuvioFieldNode | LuvioFragmentSpreadNode | LuvioInlineFragmentNode; export type LuvioFieldNode = LuvioSelectionScalarFieldNode | LuvioSelectionObjectFieldNode | LuvioSelectionCustomFieldNode; export interface LuvioArgumentNode extends Omit { name: string; value: LuvioValueNode; } export interface LuvioFragmentSpreadNode extends Omit { name: string; directives?: LuvioDirectiveNode[]; } export interface LuvioInlineFragmentNode extends Omit { typeCondition?: LuvioNamedTypeNode; directives?: LuvioDirectiveNode[]; luvioSelections: LuvioSelectionNode[]; } export interface LuvioFragmentDefinitionNode extends Omit { name: string; variableDefinitions?: LuvioVariableDefinitionNode[]; typeCondition: LuvioNamedTypeNode; directives?: LuvioDirectiveNode[]; luvioSelections: LuvioSelectionNode[]; } export type LuvioValueNode = LuvioVariableNode | IntValueNode | FloatValueNode | StringValueNode | BooleanValueNode | NullValueNode | EnumValueNode | LuvioListValueNode | LuvioObjectValueNode; export interface LuvioListValueNode extends Omit { values: LuvioValueNode[]; } export interface LuvioObjectValueNode extends Omit { fields: { [name: string]: LuvioValueNode; }; } export interface LuvioDirectiveNode extends Omit { name: string; arguments?: LuvioArgumentNode[]; } export type LuvioTypeNode = LuvioNamedTypeNode | LuvioListTypeNode | LuvioNonNullTypeNode; export interface LuvioNamedTypeNode extends Omit { name: string; } export interface LuvioListTypeNode extends Omit { type: LuvioTypeNode; } export interface LuvioNonNullTypeNode extends Omit { type: LuvioNamedTypeNode | LuvioListTypeNode; } export interface LuvioSelectionScalarFieldNode extends Omit { kind: 'ScalarFieldSelection'; alias?: string; name: string; } export interface LuvioSelectionObjectFieldNode extends Omit { kind: 'ObjectFieldSelection'; alias?: string; name: string; arguments?: LuvioArgumentNode[]; directives?: LuvioDirectiveNode[]; luvioSelections?: LuvioSelectionNode[]; } export interface LuvioSelectionCustomFieldNode extends Omit { kind: 'CustomFieldSelection'; type: string; } export declare function isOperationDefinitionNode(input: DefinitionNode): input is OperationDefinitionNode; export declare function isFragmentDefinitionNode(input: DefinitionNode): input is FragmentDefinitionNode; export declare function isNamedTypeNode(input: TypeNode): input is NamedTypeNode; export declare function isListTypeNode(input: TypeNode): input is ListTypeNode; export declare function isNonNullTypeNode(input: TypeNode): input is NonNullTypeNode;