@terabits/grapi
Version:
Grapi Schema Generator For GraphQL Server
63 lines (62 loc) • 2.88 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
exports.recursiveCreateType = exports.parseRelationConfig = void 0;
var dataModel_1 = require("../dataModel");
var enumField_1 = __importDefault(require("../dataModel/enumField"));
var objectField_1 = __importDefault(require("../dataModel/objectField"));
var type_1 = require("../dataModel/type");
var lodash_1 = require("../lodash");
var graphqlType = function (field) {
var value = field.getTypename();
if (field.isList()) {
value = field.isNonNullItem() ? "[".concat(value, "!]") : "[".concat(value, "]");
}
if (field.isNonNull()) {
value = "".concat(value, "!");
}
return value;
};
var recursiveCreateType = function (fields, context) {
var root = context.root;
var content = [];
(0, lodash_1.forEach)(fields, function (field, name) {
if (field instanceof enumField_1["default"]) {
root.addEnum("enum ".concat(field.getTypename(), " { ").concat(field.getValues().join(', '), " }"), field.getDescription());
}
if (field instanceof objectField_1["default"]) {
var typeFields = recursiveCreateType(field.getFields(), context);
var objectTypename = field.getTypename();
root.addObjectType("type ".concat(objectTypename, " { ").concat(typeFields.join(' '), " }"));
}
var argumentsField = "";
if (!field.isScalar() && field.getType() !== type_1.DataModelType.OBJECT) {
var relationField = field;
var relationType = relationField.getRelationType();
var relationTo = relationField.getRelationTo();
var relationNamings = relationTo.getNamings();
if (relationType === dataModel_1.RelationType.biManyToMany ||
(relationField.isList() && (relationType === dataModel_1.RelationType.biOneToMany ||
relationType === dataModel_1.RelationType.uniOneToMany))) {
argumentsField = "(\n orderBy: ".concat(relationNamings.capitalSingular, "OrderInput\n where: ").concat(relationNamings.capitalSingular, "WhereInput\n )");
}
}
content.push("".concat(name).concat(argumentsField, ": ").concat(graphqlType(field)));
});
return content;
};
exports.recursiveCreateType = recursiveCreateType;
var parseRelationConfig = function (relationConfig) {
return (0, lodash_1.transform)(relationConfig, function (result, value, key) {
if (value instanceof Object) {
result.foreignKey = value.key;
result.side = value.side;
}
else {
result[key] = value;
}
});
};
exports.parseRelationConfig = parseRelationConfig;