UNPKG

@grapi/server

Version:

Grapi Schema Generator For GraphQL Server

97 lines (96 loc) 4.18 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.printRelations = exports.printModels = void 0; const chalk_1 = __importDefault(require("chalk")); const dataModel_1 = require("../dataModel"); const lodash_1 = require("../lodash"); const SPACE = ' '; const graphqlType = (field) => { let value = field.getTypename(); if (field.isList()) { value = field.isNonNullItem() ? `[${value}!]` : `[${value}]`; } if (field.isNonNull()) { value = `${value}!`; } return value; }; const fieldMessages = (fields) => { return (0, lodash_1.values)((0, lodash_1.mapValues)(fields, (field, key) => { const relationMessage = field instanceof dataModel_1.RelationField ? `@relation(name: ${field.getRelationName()})` : ''; return `${SPACE.repeat(4)}${chalk_1.default.green('Field')}: ${key} ${chalk_1.default.cyan(`\`${graphqlType(field)}\``)} ${relationMessage}`; })); }; const modelMessages = (models) => { return (0, lodash_1.flatten)(models.map(model => { const modelType = 'Model'; const title = `${SPACE.repeat(4)}- ${modelType} ${chalk_1.default.bold(model.getNamings().capitalSingular)} ${chalk_1.default.gray(`(generated from '${model.getName()}')`)}`; return [title, ...fieldMessages(model.getFields()), '\n']; })); }; const getReadableNameOfRelationType = (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 ${relationType} found`); } }; const getSidesOfRelation = (relation) => { const sourceName = relation.source.getNamings().capitalSingular; const targetName = relation.target.getNamings().capitalSingular; let 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 ${relation.type} found`); } return `${relationSymbol} on \`${sourceName}\`-\`${targetName}\``; }; const relationMessages = (relations) => { return (0, lodash_1.flatten)(relations.map(relation => { const title = `${SPACE.repeat(4)}Relation ${chalk_1.default.bold(relation.name)}`; const type = `${SPACE.repeat(6)}* ${chalk_1.default.cyan('Type')}: ${getReadableNameOfRelationType(relation.type)}`; const sides = `${SPACE.repeat(6)}* ${chalk_1.default.cyan('Relationship')}: ${getSidesOfRelation(relation)}`; return [title, type, sides, '\n']; })); }; const printModels = (models) => { console.log(chalk_1.default.bold(`${SPACE.repeat(2)}- Grapi Models`)); modelMessages(models).forEach(line => console.log(line)); }; exports.printModels = printModels; const printRelations = (relations) => { if ((0, lodash_1.isEmpty)(relations)) { return; } console.log(chalk_1.default.bold(`${SPACE.repeat(2)}- Relations`)); relationMessages(relations).forEach(line => console.log(line)); }; exports.printRelations = printRelations;