@terabits/grapi
Version:
Grapi Schema Generator For GraphQL Server
106 lines (105 loc) • 4.97 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
exports.printRelations = exports.printModels = void 0;
var chalk_1 = __importDefault(require("chalk"));
var dataModel_1 = require("../dataModel");
var lodash_1 = require("../lodash");
var SPACE = ' ';
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 fieldMessages = function (fields) {
return (0, lodash_1.values)((0, lodash_1.mapValues)(fields, function (field, key) {
var relationMessage = field instanceof dataModel_1.RelationField ? "@relation(name: ".concat(field.getRelationName(), ")") : '';
return "".concat(SPACE.repeat(4)).concat(chalk_1["default"].green('Field'), ": ").concat(key, " ").concat(chalk_1["default"].cyan("`".concat(graphqlType(field), "`")), " ").concat(relationMessage);
}));
};
var modelMessages = function (models) {
return (0, lodash_1.flatten)(models.map(function (model) {
var modelType = model.isObjectType() ? 'ObjectModel' : 'Model';
var title = "".concat(SPACE.repeat(4), "- ").concat(modelType, " ").concat(chalk_1["default"].bold(model.getNamings().capitalSingular), " ").concat(chalk_1["default"].gray("(generated from '".concat(model.getName(), "')")));
return __spreadArray(__spreadArray([title], fieldMessages(model.getFields()), true), ['\n'], false);
}));
};
var getReadableNameOfRelationType = function (relationType) {
switch (relationType) {
case dataModel_1.RelationType.uniManyToOne:
return 'Unidirectional Many-to-One';
case dataModel_1.RelationType.uniOneToMany:
return 'Unidirectional One-to-Many';
case dataModel_1.RelationType.uniOneToOne:
return 'Unidirectional One-to-One';
case dataModel_1.RelationType.biOneToOne:
return 'Bidirectional One-to-One';
case dataModel_1.RelationType.biOneToMany:
return 'Bidirectional One-to-Many';
case dataModel_1.RelationType.biManyToMany:
return 'Bidirectional Many-to-Many';
default:
throw new Error("no relationType ".concat(relationType, " found"));
}
};
var getSidesOfRelation = function (relation) {
var sourceName = relation.source.getNamings().capitalSingular;
var targetName = relation.target.getNamings().capitalSingular;
var relationSymbol;
switch (relation.type) {
case dataModel_1.RelationType.uniManyToOne:
relationSymbol = '*-1';
break;
case dataModel_1.RelationType.uniOneToMany:
case dataModel_1.RelationType.biOneToMany:
relationSymbol = '1-*';
break;
case dataModel_1.RelationType.uniOneToOne:
case dataModel_1.RelationType.biOneToOne:
relationSymbol = '1-1';
break;
case dataModel_1.RelationType.biManyToMany:
relationSymbol = '*-*';
break;
default:
throw new Error("no relationType ".concat(relation.type, " found"));
}
return "".concat(relationSymbol, " on `").concat(sourceName, "`-`").concat(targetName, "`");
};
var relationMessages = function (relations) {
return (0, lodash_1.flatten)(relations.map(function (relation) {
var title = "".concat(SPACE.repeat(4), "Relation ").concat(chalk_1["default"].bold(relation.name));
var type = "".concat(SPACE.repeat(6), "* ").concat(chalk_1["default"].cyan('Type'), ": ").concat(getReadableNameOfRelationType(relation.type));
var sides = "".concat(SPACE.repeat(6), "* ").concat(chalk_1["default"].cyan('Relationship'), ": ").concat(getSidesOfRelation(relation));
return [title, type, sides, '\n'];
}));
};
var printModels = function (models) {
console.log(chalk_1["default"].bold("".concat(SPACE.repeat(2), "- Grapi Models")));
modelMessages(models).forEach(function (line) { return console.log(line); });
};
exports.printModels = printModels;
var printRelations = function (relations) {
if ((0, lodash_1.isEmpty)(relations)) {
return;
}
console.log(chalk_1["default"].bold("".concat(SPACE.repeat(2), "- Relations")));
relationMessages(relations).forEach(function (line) { return console.log(line); });
};
exports.printRelations = printRelations;