gatsby-source-sanity
Version:
Gatsby source plugin for building websites using Sanity.io as a backend.
60 lines • 2.46 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var normalize_1 = require("./normalize");
function getGraphQLResolverMap(typeMap) {
var resolvers = {};
Object.keys(typeMap.objects).forEach(function (typeName) {
var objectType = typeMap.objects[typeName];
var resolveFields = Object.keys(objectType.fields)
.map(function (fieldName) { return (__assign({ fieldName: fieldName }, objectType.fields[fieldName])); })
.filter(function (field) {
return 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(function (fields, field) {
var 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 function (source, args, context) {
if (field.isList) {
var items = source[field.fieldName] || [];
return items && Array.isArray(items)
? items.map(function (item) { return maybeResolveReference(item, context.nodeModel); })
: [];
}
var 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 __assign(__assign({}, item), { internal: { type: normalize_1.getTypeName(item._type) } });
}
return item;
}
//# sourceMappingURL=getGraphQLResolverMap.js.map