UNPKG

graphql-compose-mongoose

Version:

Plugin for `graphql-compose` which derive a graphql types from a mongoose model.

122 lines (102 loc) 4.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareBaseResolvers = prepareBaseResolvers; var _graphqlCompose = require("graphql-compose"); var _resolvers = require("../resolvers"); var _DiscriminatorTypeComposer = require("./DiscriminatorTypeComposer"); const GraphQLList = _graphqlCompose.graphql.GraphQLList, GraphQLNonNull = _graphqlCompose.graphql.GraphQLNonNull; // change type on DKey generated by composeWithMongoose // set it to created enum TypeComposer for DKey DKeyETC // only sets on filter and record typeComposers, since they contain our DKey function setDKeyEnumOnITCArgs(resolver, baseTC) { // setDKeyEnum for filter types, and on record types if (resolver) { const argNames = resolver.getArgNames(); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = argNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { const argName = _step.value; if (argName === 'filter' || argName === 'record' || argName === 'records') { const filterArgTC = resolver.getArgTC(argName); if (filterArgTC) { filterArgTC.extendField(baseTC.getDKey(), { type: baseTC.getDKeyETC() }); } } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } } // recomposing sets up the DInterface as the return types for // Also sets up DKey enum as type for DKey field on composers with filter and/or record args // composeWithMongoose composers function prepareBaseResolvers(baseTC) { for (const resolverName in _resolvers.EMCResolvers) { if (_resolvers.EMCResolvers.hasOwnProperty(resolverName) && baseTC.hasResolver(resolverName)) { const resolver = baseTC.getResolver(resolverName); switch (resolverName) { case _resolvers.EMCResolvers.findMany: case _resolvers.EMCResolvers.findByIds: resolver.setType(new GraphQLList(baseTC.getDInterface().getType())); break; case _resolvers.EMCResolvers.findById: case _resolvers.EMCResolvers.findOne: resolver.setType(baseTC.getDInterface()); break; case _resolvers.EMCResolvers.createOne: case _resolvers.EMCResolvers.updateOne: case _resolvers.EMCResolvers.updateById: case _resolvers.EMCResolvers.removeOne: case _resolvers.EMCResolvers.removeById: resolver.getTypeComposer().extendField('record', { type: baseTC.getDInterface() }); break; case _resolvers.EMCResolvers.createMany: resolver.getTypeComposer().extendField('records', { type: new GraphQLNonNull(GraphQLList(baseTC.getDInterface().getType())) }); break; case _resolvers.EMCResolvers.pagination: resolver.getTypeComposer().extendField('items', { type: new GraphQLList(baseTC.getDInterface().getType()) }); break; case _resolvers.EMCResolvers.connection: const edgesTC = resolver // eslint-disable-line no-case-declarations .getTypeComposer().getFieldTC('edges').clone(`${baseTC.getTypeName()}Edge`); edgesTC.extendField('node', { type: new GraphQLNonNull(baseTC.getDInterface().getType()) }); resolver.getTypeComposer().setField('edges', new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(edgesTC.getType())))); break; default: } setDKeyEnumOnITCArgs(resolver, baseTC); // set DKey as required field to create from base // must be done after setting DKeyEnum if (resolverName === _resolvers.EMCResolvers.createOne || resolverName === _resolvers.EMCResolvers.createMany) { const fieldName = resolverName === _resolvers.EMCResolvers.createMany ? 'records' : 'record'; resolver.getArgTC(fieldName).extendField(baseTC.getDKey(), { type: baseTC.getDKeyETC().getTypeNonNull() }); } } } }