1 | import { specifiedRules, validate, NoUnusedFragmentsRule, KnownFragmentNamesRule, Kind, ExecutableDefinitionsRule, LoneSchemaDefinitionRule, UniqueOperationTypesRule, UniqueTypeNamesRule, UniqueEnumValueNamesRule, UniqueFieldDefinitionNamesRule, UniqueDirectiveNamesRule, KnownTypeNamesRule, KnownDirectivesRule, UniqueDirectivesPerLocationRule, PossibleTypeExtensionsRule, UniqueArgumentNamesRule, UniqueInputFieldNamesRule, } from 'graphql';
|
2 | const specifiedSDLRules = [
|
3 | LoneSchemaDefinitionRule,
|
4 | UniqueOperationTypesRule,
|
5 | UniqueTypeNamesRule,
|
6 | UniqueEnumValueNamesRule,
|
7 | UniqueFieldDefinitionNamesRule,
|
8 | UniqueDirectiveNamesRule,
|
9 | KnownTypeNamesRule,
|
10 | KnownDirectivesRule,
|
11 | UniqueDirectivesPerLocationRule,
|
12 | PossibleTypeExtensionsRule,
|
13 | UniqueArgumentNamesRule,
|
14 | UniqueInputFieldNamesRule,
|
15 | ];
|
16 | export function validateWithCustomRules(schema, ast, customRules, isRelayCompatMode, isSchemaDocument) {
|
17 | const rules = specifiedRules.filter(rule => {
|
18 | if (rule === NoUnusedFragmentsRule || rule === ExecutableDefinitionsRule) {
|
19 | return false;
|
20 | }
|
21 | if (isRelayCompatMode && rule === KnownFragmentNamesRule) {
|
22 | return false;
|
23 | }
|
24 | return true;
|
25 | });
|
26 | if (customRules) {
|
27 | Array.prototype.push.apply(rules, customRules);
|
28 | }
|
29 | if (isSchemaDocument) {
|
30 | Array.prototype.push.apply(rules, specifiedSDLRules);
|
31 | }
|
32 | const errors = validate(schema, ast, rules);
|
33 | return errors.filter(error => {
|
34 | if (error.message.indexOf('Unknown directive') !== -1 && error.nodes) {
|
35 | const node = error.nodes[0];
|
36 | if (node && node.kind === Kind.DIRECTIVE) {
|
37 | const name = node.name.value;
|
38 | if (name === 'arguments' || name === 'argumentDefinitions') {
|
39 | return false;
|
40 | }
|
41 | }
|
42 | }
|
43 | return true;
|
44 | });
|
45 | }
|
46 |
|
\ | No newline at end of file |