UNPKG

@grapi/server

Version:

Grapi Schema Generator For GraphQL Server

60 lines (59 loc) 2.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const type_1 = require("../dataModel/type"); const lodash_1 = require("../lodash"); const constants_1 = require("./constants"); const parserOrder = (order) => { if ((0, lodash_1.isEmpty)(order) === false) { return (0, lodash_1.transform)(order, (result, value, fieldName) => { if (value === "ASC") { result[fieldName] = 1; } else { result[fieldName] = -1; } return result; }); } return null; }; class OrderInputPlugin { visitModel(model, context) { const { root } = context; const modelOrderInputName = this.getOrderInputName(model); const orderInput = `input ${modelOrderInputName} { ${this.createOrderFilter(model.getFields())} }`; root.addInput(orderInput); } getOrderInputName(model) { return `${model.getNamings().capitalSingular}OrderInput`; } static parseOrder(order) { return parserOrder(order); } parseOrder(order) { return parserOrder(order); } createOrderFilter(fields) { const inputFields = []; (0, lodash_1.forEach)(fields, (field, name) => { switch (field.getType()) { case type_1.DataModelType.STRING: case type_1.DataModelType.INT: case type_1.DataModelType.FLOAT: case type_1.DataModelType.ENUM: case type_1.DataModelType.BOOLEAN: case type_1.DataModelType.CUSTOM_SCALAR: case type_1.DataModelType.ID: inputFields.push({ fieldName: name, type: constants_1.orderByInputName, }); break; } }); return inputFields.map(({ fieldName, type }) => `${fieldName}: ${type}`).join(' '); } } exports.default = OrderInputPlugin;