Skip to content

Commit 2b94926

Browse files
committed
[RFC] Export all validation rules directly
It's become relatively standard to create a whitelist or blacklist of validation rules, and reaching into the package per rule can get messy. This exports all the rules at the higher levels of submodule and module as well to make this easier. For explaination of whitelist of blacklist: ```js // Whitelist import { specifiedRules, ScalarLeafs } from 'graphql'; // A ruleset which only runs one rule. const whitelistRules = [ ScalarLeafs ]; ``` ```js // Blacklist import { specifiedRules, ScalarLeafs } from 'graphql'; // A ruleset which only runs all but one rule. const blacklistRules = specifiedRules.filter(rule => rule !== ScalarLeafs); // Note: the wrong way to do a blacklist would be to import and specify all // but one rule. That's a whitelist and would fail to pick up any added // validation rules that may be amended to spec in the future. ```
1 parent ca70f60 commit 2b94926

File tree

3 files changed

+158
-0
lines changed

3 files changed

+158
-0
lines changed

src/index.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,36 @@ export type {
247247
export {
248248
validate,
249249
ValidationContext,
250+
251+
// All validation rules in the GraphQL Specification.
250252
specifiedRules,
253+
254+
// Individual validation rules.
255+
ArgumentsOfCorrectTypeRule,
256+
DefaultValuesOfCorrectTypeRule,
257+
FieldsOnCorrectTypeRule,
258+
FragmentsOnCompositeTypesRule,
259+
KnownArgumentNamesRule,
260+
KnownDirectivesRule,
261+
KnownFragmentNamesRule,
262+
KnownTypeNamesRule,
263+
LoneAnonymousOperationRule,
264+
NoFragmentCyclesRule,
265+
NoUndefinedVariablesRule,
266+
NoUnusedFragmentsRule,
267+
NoUnusedVariablesRule,
268+
OverlappingFieldsCanBeMergedRule,
269+
PossibleFragmentSpreadsRule,
270+
ProvidedNonNullArgumentsRule,
271+
ScalarLeafsRule,
272+
UniqueArgumentNamesRule,
273+
UniqueDirectivesPerLocationRule,
274+
UniqueFragmentNamesRule,
275+
UniqueInputFieldNamesRule,
276+
UniqueOperationNamesRule,
277+
UniqueVariableNamesRule,
278+
VariablesAreInputTypesRule,
279+
VariablesInAllowedPositionRule,
251280
} from './validation';
252281

253282

src/validation/index.js

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,130 @@
88
*/
99

1010
export { validate, ValidationContext } from './validate';
11+
1112
export { specifiedRules } from './specifiedRules';
13+
14+
// Spec Section: "Argument Values Type Correctness"
15+
export {
16+
ArgumentsOfCorrectType as ArgumentsOfCorrectTypeRule
17+
} from './rules/ArgumentsOfCorrectType';
18+
19+
// Spec Section: "Variable Default Values Are Correctly Typed"
20+
export {
21+
DefaultValuesOfCorrectType as DefaultValuesOfCorrectTypeRule
22+
} from './rules/DefaultValuesOfCorrectType';
23+
24+
// Spec Section: "Field Selections on Objects, Interfaces, and Unions Types"
25+
export {
26+
FieldsOnCorrectType as FieldsOnCorrectTypeRule
27+
} from './rules/FieldsOnCorrectType';
28+
29+
// Spec Section: "Fragments on Composite Types"
30+
export {
31+
FragmentsOnCompositeTypes as FragmentsOnCompositeTypesRule
32+
} from './rules/FragmentsOnCompositeTypes';
33+
34+
// Spec Section: "Argument Names"
35+
export {
36+
KnownArgumentNames as KnownArgumentNamesRule
37+
} from './rules/KnownArgumentNames';
38+
39+
// Spec Section: "Directives Are Defined"
40+
export {
41+
KnownDirectives as KnownDirectivesRule
42+
} from './rules/KnownDirectives';
43+
44+
// Spec Section: "Fragment spread target defined"
45+
export {
46+
KnownFragmentNames as KnownFragmentNamesRule
47+
} from './rules/KnownFragmentNames';
48+
49+
// Spec Section: "Fragment Spread Type Existence"
50+
export {
51+
KnownTypeNames as KnownTypeNamesRule
52+
} from './rules/KnownTypeNames';
53+
54+
// Spec Section: "Lone Anonymous Operation"
55+
export {
56+
LoneAnonymousOperation as LoneAnonymousOperationRule
57+
} from './rules/LoneAnonymousOperation';
58+
59+
// Spec Section: "Fragments must not form cycles"
60+
export {
61+
NoFragmentCycles as NoFragmentCyclesRule
62+
} from './rules/NoFragmentCycles';
63+
64+
// Spec Section: "All Variable Used Defined"
65+
export {
66+
NoUndefinedVariables as NoUndefinedVariablesRule
67+
} from './rules/NoUndefinedVariables';
68+
69+
// Spec Section: "Fragments must be used"
70+
export {
71+
NoUnusedFragments as NoUnusedFragmentsRule
72+
} from './rules/NoUnusedFragments';
73+
74+
// Spec Section: "All Variables Used"
75+
export {
76+
NoUnusedVariables as NoUnusedVariablesRule
77+
} from './rules/NoUnusedVariables';
78+
79+
// Spec Section: "Field Selection Merging"
80+
export {
81+
OverlappingFieldsCanBeMerged as OverlappingFieldsCanBeMergedRule
82+
} from './rules/OverlappingFieldsCanBeMerged';
83+
84+
// Spec Section: "Fragment spread is possible"
85+
export {
86+
PossibleFragmentSpreads as PossibleFragmentSpreadsRule
87+
} from './rules/PossibleFragmentSpreads';
88+
89+
// Spec Section: "Argument Optionality"
90+
export {
91+
ProvidedNonNullArguments as ProvidedNonNullArgumentsRule
92+
} from './rules/ProvidedNonNullArguments';
93+
94+
// Spec Section: "Leaf Field Selections"
95+
export {
96+
ScalarLeafs as ScalarLeafsRule
97+
} from './rules/ScalarLeafs';
98+
99+
// Spec Section: "Argument Uniqueness"
100+
export {
101+
UniqueArgumentNames as UniqueArgumentNamesRule
102+
} from './rules/UniqueArgumentNames';
103+
104+
// Spec Section: "Directives Are Unique Per Location"
105+
export {
106+
UniqueDirectivesPerLocation as UniqueDirectivesPerLocationRule
107+
} from './rules/UniqueDirectivesPerLocation';
108+
109+
// Spec Section: "Fragment Name Uniqueness"
110+
export {
111+
UniqueFragmentNames as UniqueFragmentNamesRule
112+
} from './rules/UniqueFragmentNames';
113+
114+
// Spec Section: "Input Object Field Uniqueness"
115+
export {
116+
UniqueInputFieldNames as UniqueInputFieldNamesRule
117+
} from './rules/UniqueInputFieldNames';
118+
119+
// Spec Section: "Operation Name Uniqueness"
120+
export {
121+
UniqueOperationNames as UniqueOperationNamesRule
122+
} from './rules/UniqueOperationNames';
123+
124+
// Spec Section: "Variable Uniqueness"
125+
export {
126+
UniqueVariableNames as UniqueVariableNamesRule
127+
} from './rules/UniqueVariableNames';
128+
129+
// Spec Section: "Variables are Input Types"
130+
export {
131+
VariablesAreInputTypes as VariablesAreInputTypesRule
132+
} from './rules/VariablesAreInputTypes';
133+
134+
// Spec Section: "All Variable Usages Are Allowed"
135+
export {
136+
VariablesInAllowedPosition as VariablesInAllowedPositionRule
137+
} from './rules/VariablesInAllowedPosition';

src/validation/specifiedRules.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ import type { ValidationContext } from './index';
9191

9292
/**
9393
* This set includes all validation rules defined by the GraphQL spec.
94+
*
95+
* The order of the rules in this list has been adjusted to lead to the
96+
* most clear output when encountering multiple validation errors.
9497
*/
9598
export const specifiedRules: Array<(context: ValidationContext) => any> = [
9699
UniqueOperationNames,

0 commit comments

Comments
 (0)