UNPKG

2.34 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.assertResolversPresent = void 0;
4const graphql_1 = require("graphql");
5const utils_1 = require("@graphql-tools/utils");
6function assertResolversPresent(schema, resolverValidationOptions = {}) {
7 const { requireResolversForArgs, requireResolversForNonScalar, requireResolversForAllFields } = resolverValidationOptions;
8 if (requireResolversForAllFields && (requireResolversForArgs || requireResolversForNonScalar)) {
9 throw new TypeError('requireResolversForAllFields takes precedence over the more specific assertions. ' +
10 'Please configure either requireResolversForAllFields or requireResolversForArgs / ' +
11 'requireResolversForNonScalar, but not a combination of them.');
12 }
13 (0, utils_1.forEachField)(schema, (field, typeName, fieldName) => {
14 // requires a resolver for *every* field.
15 if (requireResolversForAllFields) {
16 expectResolver('requireResolversForAllFields', requireResolversForAllFields, field, typeName, fieldName);
17 }
18 // requires a resolver on every field that has arguments
19 if (requireResolversForArgs && field.args.length > 0) {
20 expectResolver('requireResolversForArgs', requireResolversForArgs, field, typeName, fieldName);
21 }
22 // requires a resolver on every field that returns a non-scalar type
23 if (requireResolversForNonScalar !== 'ignore' && !(0, graphql_1.isScalarType)((0, graphql_1.getNamedType)(field.type))) {
24 expectResolver('requireResolversForNonScalar', requireResolversForNonScalar, field, typeName, fieldName);
25 }
26 });
27}
28exports.assertResolversPresent = assertResolversPresent;
29function expectResolver(validator, behavior, field, typeName, fieldName) {
30 if (!field.resolve) {
31 const message = `Resolver missing for "${typeName}.${fieldName}".
32To disable this validator, use:
33 resolverValidationOptions: {
34 ${validator}: 'ignore'
35 }`;
36 if (behavior === 'error') {
37 throw new Error(message);
38 }
39 if (behavior === 'warn') {
40 console.warn(message);
41 }
42 return;
43 }
44 if (typeof field.resolve !== 'function') {
45 throw new Error(`Resolver "${typeName}.${fieldName}" must be a function`);
46 }
47}