@apollo/federation
Version:
Apollo Federation Utilities
51 lines (46 loc) • 2.04 kB
text/typescript
import { specifiedSDLRules } from 'graphql/validation/specifiedRules';
/**
* Since this module has overlapping names in the two modules (graphql-js and
* our own, local validation rules) which we are importing from, we
* intentionally are very explicit about the suffixes of imported members here,
* so that the intention is clear.
*
* First, we'll import validation rules from graphql-js which we'll omit and
* replace with our own validation rules. As noted above, we'll use aliases
* with 'FromGraphqlJs' suffixes for clarity.
*/
import {
UniqueDirectivesPerLocationRule as UniqueDirectivesPerLocationRuleFromGraphqlJs,
UniqueTypeNamesRule as UniqueTypeNamesRuleFromGraphqlJs,
UniqueEnumValueNamesRule as UniqueEnumValueNamesRuleFromGraphqlJs,
PossibleTypeExtensionsRule as PossibleTypeExtensionsRuleFromGraphqlJs,
UniqueFieldDefinitionNamesRule as UniqueFieldDefinitionNamesRuleFromGraphqlJs,
} from 'graphql';
/**
* Then, we'll import our own validation rules to take the place of those that
* we'll be customizing, taking care to alias them all to the same name with
* "FromComposition" suffixes.
*/
import {
UniqueTypeNamesWithFields as UniqueTypeNamesWithFieldsFromComposition,
MatchingEnums as MatchingEnumsFromComposition,
PossibleTypeExtensions as PossibleTypeExtensionsFromComposition,
UniqueFieldDefinitionNames as UniqueFieldDefinitionsNamesFromComposition,
UniqueUnionTypes as UniqueUnionTypesFromComposition,
} from './validate/sdl';
const omit = [
UniqueDirectivesPerLocationRuleFromGraphqlJs,
UniqueTypeNamesRuleFromGraphqlJs,
UniqueEnumValueNamesRuleFromGraphqlJs,
PossibleTypeExtensionsRuleFromGraphqlJs,
UniqueFieldDefinitionNamesRuleFromGraphqlJs,
];
export const compositionRules = specifiedSDLRules
.filter(rule => !omit.includes(rule))
.concat([
UniqueFieldDefinitionsNamesFromComposition,
UniqueTypeNamesWithFieldsFromComposition,
MatchingEnumsFromComposition,
UniqueUnionTypesFromComposition,
PossibleTypeExtensionsFromComposition,
]);