UNPKG

2.06 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.OperationsMustHaveNames = OperationsMustHaveNames;
7exports.RequiredFields = RequiredFields;
8exports.typeNamesShouldBeCapitalized = typeNamesShouldBeCapitalized;
9
10var _graphql = require('graphql');
11
12function OperationsMustHaveNames(context) {
13 return {
14 OperationDefinition: function OperationDefinition(node) {
15 if (!node.name) {
16 context.reportError(new _graphql.GraphQLError("All operations must be named", [node]));
17 }
18 }
19 };
20}
21
22function RequiredFields(context, options) {
23 return {
24 Field: function Field(node) {
25 var def = context.getFieldDef();
26 if (!def) {
27 return;
28 }
29 var requiredFields = options.requiredFields;
30
31 requiredFields.forEach(function (field) {
32 var fieldAvaliableOnType = def.type && def.type._fields && def.type._fields[field];
33
34 function recursivelyCheckOnType(ofType, field) {
35 return ofType._fields && ofType._fields[field] || ofType.ofType && recursivelyCheckOnType(ofType.ofType, field);
36 }
37
38 var fieldAvaliableOnOfType = false;
39 if (def.type && def.type.ofType) {
40 fieldAvaliableOnOfType = recursivelyCheckOnType(def.type.ofType, field);
41 }
42 if (fieldAvaliableOnType || fieldAvaliableOnOfType) {
43 var fieldWasRequested = !!node.selectionSet.selections.find(function (n) {
44 return n.name.value === field || n.kind === 'FragmentSpread';
45 });
46 if (!fieldWasRequested) {
47 context.reportError(new _graphql.GraphQLError('\'' + field + '\' field required on \'' + node.name.value + '\'', [node]));
48 }
49 }
50 });
51 }
52 };
53}
54
55function typeNamesShouldBeCapitalized(context) {
56 return {
57 NamedType: function NamedType(node) {
58 var typeName = node.name.value;
59 if (typeName[0] == typeName[0].toLowerCase()) {
60 context.reportError(new _graphql.GraphQLError("All type names should start with a capital letter", [node]));
61 }
62 }
63 };
64}
\No newline at end of file