1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.assertResolversPresent = void 0;
|
4 | const graphql_1 = require("graphql");
|
5 | const utils_1 = require("@graphql-tools/utils");
|
6 | function 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 |
|
15 | if (requireResolversForAllFields) {
|
16 | expectResolver('requireResolversForAllFields', requireResolversForAllFields, field, typeName, fieldName);
|
17 | }
|
18 |
|
19 | if (requireResolversForArgs && field.args.length > 0) {
|
20 | expectResolver('requireResolversForArgs', requireResolversForArgs, field, typeName, fieldName);
|
21 | }
|
22 |
|
23 | if (requireResolversForNonScalar !== 'ignore' && !(0, graphql_1.isScalarType)((0, graphql_1.getNamedType)(field.type))) {
|
24 | expectResolver('requireResolversForNonScalar', requireResolversForNonScalar, field, typeName, fieldName);
|
25 | }
|
26 | });
|
27 | }
|
28 | exports.assertResolversPresent = assertResolversPresent;
|
29 | function expectResolver(validator, behavior, field, typeName, fieldName) {
|
30 | if (!field.resolve) {
|
31 | const message = `Resolver missing for "${typeName}.${fieldName}".
|
32 | To 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 | }
|