UNPKG

@terabits/grapi

Version:

Grapi Schema Generator For GraphQL Server

106 lines (105 loc) 4.97 kB
"use strict"; 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;