extensions.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.applyExtensions = exports.mergeExtensions = exports.extractExtensionsFromSchema = void 0;
  4. const utils_1 = require("@graphql-tools/utils");
  5. var utils_2 = require("@graphql-tools/utils");
  6. Object.defineProperty(exports, "extractExtensionsFromSchema", { enumerable: true, get: function () { return utils_2.extractExtensionsFromSchema; } });
  7. function mergeExtensions(extensions) {
  8. return (0, utils_1.mergeDeep)(extensions, false, true);
  9. }
  10. exports.mergeExtensions = mergeExtensions;
  11. function applyExtensionObject(obj, extensions) {
  12. if (!obj) {
  13. return;
  14. }
  15. obj.extensions = (0, utils_1.mergeDeep)([obj.extensions || {}, extensions || {}], false, true);
  16. }
  17. function applyExtensions(schema, extensions) {
  18. applyExtensionObject(schema, extensions.schemaExtensions);
  19. for (const [typeName, data] of Object.entries(extensions.types || {})) {
  20. const type = schema.getType(typeName);
  21. if (type) {
  22. applyExtensionObject(type, data.extensions);
  23. if (data.type === 'object' || data.type === 'interface') {
  24. for (const [fieldName, fieldData] of Object.entries(data.fields)) {
  25. const field = type.getFields()[fieldName];
  26. if (field) {
  27. applyExtensionObject(field, fieldData.extensions);
  28. for (const [arg, argData] of Object.entries(fieldData.arguments)) {
  29. applyExtensionObject(field.args.find(a => a.name === arg), argData);
  30. }
  31. }
  32. }
  33. }
  34. else if (data.type === 'input') {
  35. for (const [fieldName, fieldData] of Object.entries(data.fields)) {
  36. const field = type.getFields()[fieldName];
  37. applyExtensionObject(field, fieldData.extensions);
  38. }
  39. }
  40. else if (data.type === 'enum') {
  41. for (const [valueName, valueData] of Object.entries(data.values)) {
  42. const value = type.getValue(valueName);
  43. applyExtensionObject(value, valueData);
  44. }
  45. }
  46. }
  47. }
  48. return schema;
  49. }
  50. exports.applyExtensions = applyExtensions;