UNPKG

graphql-compose

Version:

GraphQL schema builder from different data sources with middleware extensions.

91 lines 3.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isUnionTypeComposer = exports.isInterfaceTypeComposer = exports.isInputTypeComposer = exports.isObjectTypeComposer = exports.isEnumTypeComposer = exports.isScalarTypeComposer = exports.visitSchema = exports.getVisitKinds = void 0; const ObjectTypeComposer_1 = require("../ObjectTypeComposer"); const InputTypeComposer_1 = require("../InputTypeComposer"); const ScalarTypeComposer_1 = require("../ScalarTypeComposer"); const EnumTypeComposer_1 = require("../EnumTypeComposer"); const InterfaceTypeComposer_1 = require("../InterfaceTypeComposer"); const UnionTypeComposer_1 = require("../UnionTypeComposer"); const typeHelpers_1 = require("./typeHelpers"); function getVisitKinds(tc, schema) { let kinds = []; if (tc instanceof ObjectTypeComposer_1.ObjectTypeComposer) { kinds = ['OBJECT_TYPE', 'COMPOSITE_TYPE', 'TYPE']; if (schema.Query === tc) kinds.unshift('QUERY', 'ROOT_OBJECT'); if (schema.Mutation === tc) kinds.unshift('MUTATION', 'ROOT_OBJECT'); if (schema.Subscription === tc) kinds.unshift('SUBSCRIPTION', 'ROOT_OBJECT'); } else if (tc instanceof InputTypeComposer_1.InputTypeComposer) { kinds = ['INPUT_OBJECT_TYPE', 'TYPE']; } else if (tc instanceof InterfaceTypeComposer_1.InterfaceTypeComposer) { kinds = ['INTERFACE_TYPE', 'ABSTRACT_TYPE', 'COMPOSITE_TYPE', 'TYPE']; } else if (tc instanceof UnionTypeComposer_1.UnionTypeComposer) { kinds = ['UNION_TYPE', 'ABSTRACT_TYPE', 'COMPOSITE_TYPE', 'TYPE']; } else if (tc instanceof ScalarTypeComposer_1.ScalarTypeComposer) { kinds = ['SCALAR_TYPE', 'TYPE']; } else if (tc instanceof EnumTypeComposer_1.EnumTypeComposer) { kinds = ['ENUM_TYPE', 'TYPE']; } return kinds; } exports.getVisitKinds = getVisitKinds; function visitSchema(schema, visitor) { const visitedTCs = new WeakSet(); schema.forEach((value, key) => { if (visitedTCs.has(value)) return; visitedTCs.add(value); let tc = value; const visitKinds = getVisitKinds(tc, schema); for (const kind of visitKinds) { const visitorFn = visitor[kind]; if (visitorFn) { const result = visitorFn(tc, schema); if (result === null) { schema.delete(key); } else if (result === false) { break; } else if ((0, typeHelpers_1.isNamedTypeComposer)(result)) { tc = result; schema.set(key, tc); } } } }); } exports.visitSchema = visitSchema; function isScalarTypeComposer(type) { return type instanceof ScalarTypeComposer_1.ScalarTypeComposer; } exports.isScalarTypeComposer = isScalarTypeComposer; function isEnumTypeComposer(type) { return type instanceof EnumTypeComposer_1.EnumTypeComposer; } exports.isEnumTypeComposer = isEnumTypeComposer; function isObjectTypeComposer(type) { return type instanceof ObjectTypeComposer_1.ObjectTypeComposer; } exports.isObjectTypeComposer = isObjectTypeComposer; function isInputTypeComposer(type) { return type instanceof InputTypeComposer_1.InputTypeComposer; } exports.isInputTypeComposer = isInputTypeComposer; function isInterfaceTypeComposer(type) { return type instanceof InterfaceTypeComposer_1.InterfaceTypeComposer; } exports.isInterfaceTypeComposer = isInterfaceTypeComposer; function isUnionTypeComposer(type) { return type instanceof UnionTypeComposer_1.UnionTypeComposer; } exports.isUnionTypeComposer = isUnionTypeComposer; //# sourceMappingURL=schemaVisitor.js.map