UNPKG

@grapi/server

Version:

Grapi Schema Generator For GraphQL Server

51 lines (50 loc) 2.09 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const lodash_1 = require("../lodash"); const baseType_1 = __importDefault(require("./baseType")); const whereInput_1 = __importDefault(require("./whereInput")); const parsePaginationFromArgs = (args) => { if (!args) { return null; } return (0, lodash_1.pick)(args, ['first', 'last', 'before', 'after']); }; class RelayPlugin { whereInputPlugin; baseTypePlugin; setPlugins(plugins) { this.whereInputPlugin = plugins.find(plugin => plugin instanceof whereInput_1.default); this.baseTypePlugin = plugins.find(plugin => plugin instanceof baseType_1.default); } visitModel(model, context) { const { root } = context; const connectionType = RelayPlugin.createConnectionType(model); root.addObjectType(`type ${connectionType} { totalCount: Int! }`); const queryName = RelayPlugin.createConnectionQueryName(model); const whereInputName = this.whereInputPlugin.getWhereInputName(model); root.addQuery(`${queryName}( where: ${whereInputName} ): ${connectionType}!`); } resolveInQuery({ model, dataSource, }) { const queryName = RelayPlugin.createConnectionQueryName(model); return { [queryName]: async (root, args, context) => { const where = this.whereInputPlugin.parseWhere(args.where, model); const pagination = parsePaginationFromArgs(args); const response = await dataSource.find({ where, pagination }, context); return { totalCount: response.total, }; }, }; } static createConnectionQueryName(model) { return `${model.getNamings().plural}Connection`; } static createConnectionType(model) { return `${model.getNamings().capitalSingular}Connection`; } } exports.default = RelayPlugin;