UNPKG

@grapi/server

Version:

Grapi Schema Generator For GraphQL Server

62 lines (61 loc) 2.56 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.recursiveCreateType = exports.parseRelationConfig = void 0; const dataModel_1 = require("../dataModel"); const objectField_1 = __importDefault(require("../dataModel/objectField")); const type_1 = require("../dataModel/type"); const lodash_1 = require("../lodash"); const graphqlType = (field) => { let value = field.getTypename(); if (field.isList()) { value = field.isNonNullItem() ? `[${value}!]` : `[${value}]`; } if (field.isNonNull()) { value = `${value}!`; } return value; }; const recursiveCreateType = (fields, context) => { const { root } = context; const content = []; (0, lodash_1.forEach)(fields, (field, name) => { if (field instanceof objectField_1.default) { const typeFields = recursiveCreateType(field.getFields(), context); const objectTypename = (0, lodash_1.upperFirst)(name); root.addObjectType(`type ${objectTypename} { ${typeFields.join(' ')} }`); } let argumentsField = ``; if (!field.isScalar() && field.getType() !== type_1.DataModelType.OBJECT) { const relationField = field; const relationType = relationField.getRelationType(); const relationTo = relationField.getRelationTo(); const relationNamings = relationTo.getNamings(); if (relationType === dataModel_1.RelationType.biManyToMany || (relationField.isList() && (relationType === dataModel_1.RelationType.biOneToMany || relationType === dataModel_1.RelationType.uniOneToMany))) { argumentsField = `( orderBy: ${relationNamings.capitalSingular}OrderInput where: ${relationNamings.capitalSingular}WhereInput )`; } } content.push(`${name}${argumentsField}: ${graphqlType(field)}`); }); return content; }; exports.recursiveCreateType = recursiveCreateType; const parseRelationConfig = (relationConfig) => { return (0, lodash_1.transform)(relationConfig, (result, value, key) => { if (value instanceof Object) { result.foreignKey = value.key; result.side = value.side; } else { result[key] = value; } }); }; exports.parseRelationConfig = parseRelationConfig;