assertResolveFunctionsPresent.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. Object.defineProperty(exports, "__esModule", { value: true });
  2. var graphql_1 = require("graphql");
  3. var _1 = require(".");
  4. function assertResolveFunctionsPresent(schema, resolverValidationOptions) {
  5. if (resolverValidationOptions === void 0) { resolverValidationOptions = {}; }
  6. var _a = resolverValidationOptions.requireResolversForArgs, requireResolversForArgs = _a === void 0 ? false : _a, _b = resolverValidationOptions.requireResolversForNonScalar, requireResolversForNonScalar = _b === void 0 ? false : _b, _c = resolverValidationOptions.requireResolversForAllFields, requireResolversForAllFields = _c === void 0 ? false : _c;
  7. if (requireResolversForAllFields &&
  8. (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. _1.forEachField(schema, function (field, typeName, fieldName) {
  14. // requires a resolve function for *every* field.
  15. if (requireResolversForAllFields) {
  16. expectResolveFunction(field, typeName, fieldName);
  17. }
  18. // requires a resolve function on every field that has arguments
  19. if (requireResolversForArgs && field.args.length > 0) {
  20. expectResolveFunction(field, typeName, fieldName);
  21. }
  22. // requires a resolve function on every field that returns a non-scalar type
  23. if (requireResolversForNonScalar &&
  24. !(graphql_1.getNamedType(field.type) instanceof graphql_1.GraphQLScalarType)) {
  25. expectResolveFunction(field, typeName, fieldName);
  26. }
  27. });
  28. }
  29. function expectResolveFunction(field, typeName, fieldName) {
  30. if (!field.resolve) {
  31. console.warn(
  32. // tslint:disable-next-line: max-line-length
  33. "Resolve function missing for \"" + typeName + "." + fieldName + "\". To disable this warning check https://github.com/apollostack/graphql-tools/issues/131");
  34. return;
  35. }
  36. if (typeof field.resolve !== 'function') {
  37. throw new _1.SchemaError("Resolver \"" + typeName + "." + fieldName + "\" must be a function");
  38. }
  39. }
  40. exports.default = assertResolveFunctionsPresent;
  41. //# sourceMappingURL=assertResolveFunctionsPresent.js.map