type Impossible = { [P in K]: never; }; /** * Ensures that an object has only the properties defined in type T * and no additional properties, providing strict type safety. */ export type NoExtraProperties = U & Impossible>; ///////////////////////// export interface ExecutionResult> { errors?: ReadonlyArray; data?: TData | null; } // TYPE MAP //////////// // the type of types.json object export interface ArgMap { [arg: string]: [keyType, string] | [keyType] | undefined; } export type CompressedField = [type: keyType, args?: ArgMap]; export interface CompressedFieldMap { [field: string]: CompressedField | undefined; } export type CompressedType = CompressedFieldMap; export interface CompressedTypeMap { scalars: Array; types: { [type: string]: CompressedType; }; } // normal types export type Field = { type: keyType; args?: ArgMap; }; export interface FieldMap { [field: string]: Field | undefined; } export type Type = FieldMap; export interface TypeMap { scalars: Array; types: { [type: string]: Type | undefined; }; } // LINKED TYPE //////////// export interface LinkedArgMap { [arg: string]: [LinkedType, string] | undefined; } export interface LinkedField { type: LinkedType; args?: LinkedArgMap; } export interface LinkedFieldMap { [field: string]: LinkedField | undefined; } export interface LinkedType { name: string; fields?: LinkedFieldMap; scalar?: string[]; } export interface LinkedTypeMap { [type: string]: LinkedType | undefined; }