UNPKG

graphql-compose-mongoose

Version:

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

137 lines 5.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareChildResolvers = prepareChildResolvers; const resolvers_1 = require("../resolvers"); function setQueryDKey(resolver, childTC, DKey, fromField) { if (resolver) { resolver.wrapResolve((next) => (resolve) => { const DName = childTC.getTypeName(); resolve.args = resolve.args ? resolve.args : {}; resolve.projection = resolve.projection ? resolve.projection : {}; if (fromField === 'records') { resolve.args[fromField] = resolve.args[fromField] || []; for (const record of resolve.args[fromField]) { record[DKey] = DName; } } else if (fromField) { resolve.args[fromField] = resolve.args[fromField] ? resolve.args[fromField] : {}; resolve.args[fromField][DKey] = DName; } else { resolve.args[DKey] = DName; } resolve.projection[DKey] = 1; return next(resolve); }); } } function hideDKey(resolver, childTC, DKey, fromField) { if (Array.isArray(fromField)) { for (const field of fromField) { hideDKey(resolver, childTC, DKey, field); } } else if (fromField && resolver.hasArg(fromField)) { const fieldTC = resolver.getArgITC(fromField); if (fieldTC) { fieldTC.removeField(DKey); } } else { resolver.removeArg(DKey); } } function copyResolverArgTypes(resolver, baseDTC, fromArg) { if (resolver && baseDTC.hasInputTypeComposer()) { if (Array.isArray(fromArg)) { for (const field of fromArg) { copyResolverArgTypes(resolver, baseDTC, field); } } else if (fromArg && resolver.hasArg(fromArg)) { if (baseDTC.hasResolver(resolver.name) && baseDTC.getResolver(resolver.name).hasArg(fromArg)) { const childResolverArgTC = resolver.getArgITC(fromArg); const baseResolverArgTC = baseDTC.getResolver(resolver.name).getArgITC(fromArg); const baseResolverArgTCFields = baseResolverArgTC.getFieldNames(); for (const baseArgField of baseResolverArgTCFields) { if (childResolverArgTC.hasField(baseArgField) && baseArgField !== '_id') { childResolverArgTC.extendField(baseArgField, { type: baseResolverArgTC.getField(baseArgField).type, }); } } } } } } function reorderFieldsRecordFilter(resolver, baseDTC, order, fromField) { if (order) { if (Array.isArray(fromField)) { for (const field of fromField) { reorderFieldsRecordFilter(resolver, baseDTC, order, field); } } else if (fromField && resolver.hasArg(fromField)) { const argTC = resolver.getArgITC(fromField); if (Array.isArray(order)) { argTC.reorderFields(order); } else { const newOrder = []; if (baseDTC.hasInputTypeComposer()) { newOrder.push(...baseDTC.getInputTypeComposer().getFieldNames()); newOrder.filter((value) => value === '_id' || value === baseDTC.getDKey()); newOrder.unshift('_id', baseDTC.getDKey()); } argTC.reorderFields(newOrder); } } } } function prepareChildResolvers(baseDTC, childTC, opts) { Object.keys(resolvers_1.resolverFactory).forEach((resolverName) => { if (childTC.hasResolver(resolverName)) { const resolver = childTC.getResolver(resolverName); switch (resolverName) { case 'createOne': setQueryDKey(resolver, childTC, baseDTC.getDKey(), 'record'); hideDKey(resolver, childTC, baseDTC.getDKey(), 'record'); break; case 'createMany': setQueryDKey(resolver, childTC, baseDTC.getDKey(), 'records'); hideDKey(resolver, childTC, baseDTC.getDKey(), 'records'); break; case 'updateById': hideDKey(resolver, childTC, baseDTC.getDKey(), 'record'); break; case 'updateOne': case 'updateMany': setQueryDKey(resolver, childTC, baseDTC.getDKey(), 'filter'); hideDKey(resolver, childTC, baseDTC.getDKey(), ['record', 'filter']); break; case 'findOne': case 'findMany': case 'findOneLean': case 'findManyLean': case 'removeOne': case 'removeMany': case 'count': case 'pagination': case 'connection': setQueryDKey(resolver, childTC, baseDTC.getDKey(), 'filter'); hideDKey(resolver, childTC, baseDTC.getDKey(), 'filter'); break; default: } copyResolverArgTypes(resolver, baseDTC, ['filter', 'record', 'records']); reorderFieldsRecordFilter(resolver, baseDTC, opts.reorderFields, [ 'filter', 'record', 'records', ]); } }); } //# sourceMappingURL=prepareChildResolvers.js.map