@terabits/grapi
Version:
Grapi Schema Generator For GraphQL Server
67 lines (66 loc) • 2.45 kB
JavaScript
;
exports.__esModule = true;
var type_1 = require("../dataModel/type");
var lodash_1 = require("../lodash");
var constants_1 = require("./constants");
var parserOrder = function (order) {
if ((0, lodash_1.isEmpty)(order) === false) {
return (0, lodash_1.transform)(order, function (result, value, fieldName) {
if (value === "ASC") {
result[fieldName] = 1;
}
else {
result[fieldName] = -1;
}
return result;
});
}
return null;
};
var OrderInputPlugin = (function () {
function OrderInputPlugin() {
}
OrderInputPlugin.prototype.visitModel = function (model, context) {
if (model.isObjectType()) {
return;
}
var root = context.root;
var modelOrderInputName = this.getOrderInputName(model);
var orderInput = "input ".concat(modelOrderInputName, " {\n ").concat(this.createOrderFilter(model.getFields()), "\n }");
root.addInput(orderInput);
};
OrderInputPlugin.prototype.getOrderInputName = function (model) {
return "".concat(model.getNamings().capitalSingular, "OrderInput");
};
OrderInputPlugin.parseOrder = function (order) {
return parserOrder(order);
};
OrderInputPlugin.prototype.parseOrder = function (order) {
return parserOrder(order);
};
OrderInputPlugin.prototype.createOrderFilter = function (fields) {
var inputFields = [];
(0, lodash_1.forEach)(fields, function (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(function (_a) {
var fieldName = _a.fieldName, type = _a.type;
return "".concat(fieldName, ": ").concat(type);
}).join(' ');
};
return OrderInputPlugin;
}());
exports["default"] = OrderInputPlugin;