@apollo/composition
Version:
Apollo Federation composition utilities
85 lines • 4.6 kB
TypeScript
import { CompositeType, FieldDefinition, Operation, Schema, SchemaRootKind, NamedType } from "@apollo/federation-internals";
import { Edge, QueryGraph, RootPath, Transition, QueryGraphState, TransitionPathWithLazyIndirectPaths, RootVertex, ConditionResolver, Vertex } from "@apollo/query-graphs";
import { CompositionHint } from "./hints";
import { GraphQLError } from "graphql";
import { CompositionOptions } from './compose';
export declare class ValidationError extends Error {
readonly supergraphUnsatisfiablePath: RootPath<Transition>;
readonly subgraphsPaths: RootPath<Transition>[];
readonly witness: Operation;
constructor(message: string, supergraphUnsatisfiablePath: RootPath<Transition>, subgraphsPaths: RootPath<Transition>[], witness: Operation);
}
export declare function validateGraphComposition(supergraphSchema: Schema, subgraphNameToGraphEnumValue: Map<string, string>, supergraphAPI: QueryGraph, federatedQueryGraph: QueryGraph, compositionOptions?: CompositionOptions): {
errors?: GraphQLError[];
hints?: CompositionHint[];
};
export declare function extractValidationError(error: any): ValidationError | undefined;
export declare class ValidationContext {
readonly supergraphSchema: Schema;
readonly subgraphNameToGraphEnumValue: Map<string, string>;
private readonly joinTypeDirective;
private readonly joinFieldDirective;
private readonly typesToContexts;
constructor(supergraphSchema: Schema, subgraphNameToGraphEnumValue: Map<string, string>);
isShareable(field: FieldDefinition<CompositeType>): boolean;
matchingContexts(typeName: string): string[];
}
type SubgraphPathInfo = {
path: TransitionPathWithLazyIndirectPaths<RootVertex>;
contexts: Map<string, {
subgraphName: string;
typeName: string;
}>;
};
declare class SubgraphPathInfos {
readonly paths: SubgraphPathInfo[];
constructor(paths: SubgraphPathInfo[]);
}
declare class TopLevelMutationFieldSubgraphPathInfos {
readonly mutationField: FieldDefinition<CompositeType>;
readonly paths: Map<string, SubgraphPathInfo[]>;
constructor(mutationField: FieldDefinition<CompositeType>, paths: Map<string, SubgraphPathInfo[]>);
}
export declare class ValidationState {
readonly supergraphPath: RootPath<Transition>;
readonly subgraphPathInfos: SubgraphPathInfos | TopLevelMutationFieldSubgraphPathInfos;
selectedOverrideConditions: Map<string, boolean>;
constructor(supergraphPath: RootPath<Transition>, subgraphPathInfos: SubgraphPathInfos | TopLevelMutationFieldSubgraphPathInfos, selectedOverrideConditions?: Map<string, boolean>);
static initial({ supergraphAPI, kind, federatedQueryGraph, conditionResolver, overrideConditions, }: {
supergraphAPI: QueryGraph;
kind: SchemaRootKind;
federatedQueryGraph: QueryGraph;
conditionResolver: ConditionResolver;
overrideConditions: Map<string, boolean>;
}): ValidationState;
canSkipVisit(subgraphNameToGraphEnumValue: Map<string, string>, previousVisits: QueryGraphState<VertexVisit[]>): boolean;
canSkipVisitForSubgraphPaths(supergraphPathTail: Vertex, subgraphPathInfos: SubgraphPathInfo[], subgraphNameToGraphEnumValue: Map<string, string>, previousVisits: QueryGraphState<VertexVisit[]>): boolean;
validateTransition(context: ValidationContext, supergraphEdge: Edge, matchingContexts: string[], validationErrors: GraphQLError[], satisfiabilityErrorsByMutationFieldAndSubgraph: Map<string, Map<string, GraphQLError[]>>): {
state?: ValidationState;
hint?: CompositionHint;
};
validateTransitionForSubgraphPaths(subgraphPathInfos: SubgraphPathInfo[], newOverrideConditions: Map<string, boolean>, transition: Transition, targetType: NamedType, matchingContexts: string[], newPath: RootPath<Transition>): {
newSubgraphPathInfos: SubgraphPathInfo[];
error?: never;
} | {
newSubgraphPathInfos?: never;
error: GraphQLError;
};
private static fieldIfTopLevelMutation;
private static subgraphOfTopLevelMutation;
allSubgraphPathInfos(): SubgraphPathInfo[];
allSubgraphPathsCount(): number;
currentSubgraphNames(): string[];
currentSubgraphContextKeys(subgraphNameToGraphEnumValue: Map<string, string>, subgraphPathInfos: SubgraphPathInfo[]): Set<string>;
currentSubgraphs(): {
name: string;
schema: Schema;
}[];
toString(): string;
}
interface VertexVisit {
subgraphContextKeys: Set<string>;
overrideConditions: Map<string, boolean>;
}
export {};
//# sourceMappingURL=validate.d.ts.map