gatsby-source-sanity
Version:
Gatsby source plugin for building websites using Sanity.io as a backend.
47 lines • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const normalize_1 = require("./normalize");
function getGraphQLResolverMap(typeMap) {
const resolvers = {};
Object.keys(typeMap.objects).forEach(typeName => {
const objectType = typeMap.objects[typeName];
const resolveFields = Object.keys(objectType.fields)
.map(fieldName => (Object.assign({ fieldName }, objectType.fields[fieldName])))
.filter(field => field.fieldName !== 'children' &&
(field.isList ||
field.isReference ||
typeMap.unions[normalize_1.getTypeName(field.namedType.name.value)]));
if (!resolveFields.length) {
return;
}
resolvers[objectType.name] = resolveFields.reduce((fields, field) => {
const targetField = normalize_1.getConflictFreeFieldName(field.fieldName);
fields[targetField] = { resolve: getResolver(field) };
return fields;
}, resolvers[objectType.name] || {});
});
return resolvers;
}
exports.getGraphQLResolverMap = getGraphQLResolverMap;
function getResolver(field) {
return (source, args, context) => {
if (field.isList) {
const items = source[field.fieldName] || [];
return items && Array.isArray(items)
? items.map(item => maybeResolveReference(item, context.nodeModel))
: [];
}
const item = source[field.fieldName];
return maybeResolveReference(item, context.nodeModel);
};
}
function maybeResolveReference(item, nodeModel) {
if (item && typeof item._ref === 'string') {
return nodeModel.getNodeById({ id: item._ref });
}
if (item && typeof item._type === 'string' && !item.internal) {
return Object.assign(Object.assign({}, item), { internal: { type: normalize_1.getTypeName(item._type) } });
}
return item;
}
//# sourceMappingURL=getGraphQLResolverMap.js.map