graphql-compose
Version:
GraphQL schema builder from different data sources with middleware extensions.
65 lines (57 loc) • 2.17 kB
JavaScript
/* eslint-disable no-param-reassign, no-use-before-define */
import TypeMapper from '../typeMapper';
import { isFunction, isObject } from './is';
export function resolveOutputConfigsAsThunk(fieldMap, typeName) {
if (isObject(fieldMap)) {
Object.keys(fieldMap).forEach(function (name) {
if (isFunction(fieldMap[name])) {
var fieldConfig = TypeMapper.convertOutputFieldConfig(fieldMap[name](), name, typeName);
fieldConfig._fieldAsThunk = fieldMap[name];
fieldMap[name] = fieldConfig;
}
if (isFunction(fieldMap[name].type)) {
fieldMap[name]._typeAsThunk = fieldMap[name].type;
var _fieldConfig = TypeMapper.convertOutputFieldConfig(fieldMap[name].type(), name, typeName);
fieldMap[name].type = _fieldConfig.type;
}
if (isObject(fieldMap[name].args)) {
fieldMap[name].args = resolveInputConfigsAsThunk(fieldMap[name].args, typeName + '.' + name + '.args');
}
});
}
return fieldMap;
}
export function resolveInputConfigsAsThunk(fieldMap, typeName) {
if (isObject(fieldMap)) {
Object.keys(fieldMap).forEach(function (name) {
if (isFunction(fieldMap[name])) {
var fieldConfig = TypeMapper.convertInputFieldConfig(fieldMap[name](), name, typeName);
fieldConfig._fieldAsThunk = fieldMap[name];
fieldMap[name] = fieldConfig;
}
if (isFunction(fieldMap[name].type)) {
fieldMap[name]._typeAsThunk = fieldMap[name].type;
var _fieldConfig2 = TypeMapper.convertInputFieldConfig(fieldMap[name].type(), name, typeName);
fieldMap[name].type = _fieldConfig2.type;
}
});
}
return fieldMap;
}
export function keepConfigsAsThunk(fieldMap) {
if (isObject(fieldMap)) {
Object.keys(fieldMap).forEach(function (key) {
if (fieldMap[key]._fieldAsThunk) {
fieldMap[key] = fieldMap[key]._fieldAsThunk;
} else {
if (fieldMap[key]._typeAsThunk) {
fieldMap[key].type = fieldMap[key]._typeAsThunk;
}
if (fieldMap[key].args) {
fieldMap[key].args = keepConfigsAsThunk(fieldMap[key].args);
}
}
});
}
return fieldMap;
}