@grapi/server
Version:
Grapi Schema Generator For GraphQL Server
62 lines (61 loc) • 2.56 kB
JavaScript
;
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;