UNPKG

@graphql-tools/schema

Version:

A set of utils for faster development of GraphQL tools

48 lines (47 loc) 2.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.assertResolversPresent = void 0; const graphql_1 = require("graphql"); const utils_1 = require("@graphql-tools/utils"); function assertResolversPresent(schema, resolverValidationOptions = {}) { const { requireResolversForArgs, requireResolversForNonScalar, requireResolversForAllFields } = resolverValidationOptions; if (requireResolversForAllFields && (requireResolversForArgs || requireResolversForNonScalar)) { throw new TypeError('requireResolversForAllFields takes precedence over the more specific assertions. ' + 'Please configure either requireResolversForAllFields or requireResolversForArgs / ' + 'requireResolversForNonScalar, but not a combination of them.'); } (0, utils_1.forEachField)(schema, (field, typeName, fieldName) => { // requires a resolver for *every* field. if (requireResolversForAllFields) { expectResolver('requireResolversForAllFields', requireResolversForAllFields, field, typeName, fieldName); } // requires a resolver on every field that has arguments if (requireResolversForArgs && field.args.length > 0) { expectResolver('requireResolversForArgs', requireResolversForArgs, field, typeName, fieldName); } // requires a resolver on every field that returns a non-scalar type if (requireResolversForNonScalar !== 'ignore' && !(0, graphql_1.isScalarType)((0, graphql_1.getNamedType)(field.type))) { expectResolver('requireResolversForNonScalar', requireResolversForNonScalar, field, typeName, fieldName); } }); } exports.assertResolversPresent = assertResolversPresent; function expectResolver(validator, behavior, field, typeName, fieldName) { if (!field.resolve) { const message = `Resolver missing for "${typeName}.${fieldName}". To disable this validator, use: resolverValidationOptions: { ${validator}: 'ignore' }`; if (behavior === 'error') { throw new Error(message); } if (behavior === 'warn') { console.warn(message); } return; } if (typeof field.resolve !== 'function') { throw new Error(`Resolver "${typeName}.${fieldName}" must be a function`); } }