gatsby-source-sanity
Version:
Gatsby source plugin for building websites using Sanity.io as a backend.
81 lines • 3.75 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 });
exports.getGraphQLResolverMap = void 0;
var lodash_1 = require("lodash");
var resolveReferences_1 = require("./resolveReferences");
var normalize_1 = require("./normalize");
function getGraphQLResolverMap(typeMap, pluginConfig, context) {
var resolvers = {};
Object.keys(typeMap.objects).forEach(function (typeName) {
var objectType = typeMap.objects[typeName];
var fieldNames = Object.keys(objectType.fields);
// Add resolvers for lists
resolvers[objectType.name] = fieldNames
.map(function (fieldName) { return (__assign({ fieldName: fieldName }, objectType.fields[fieldName])); })
.filter(function (field) { return field.isList; })
.reduce(function (fields, field) {
var targetField = objectType.isDocument
? (0, normalize_1.getConflictFreeFieldName)(field.fieldName, pluginConfig.typePrefix)
: field.fieldName;
fields[targetField] = { resolve: getResolver(field, pluginConfig.typePrefix) };
return fields;
}, resolvers[objectType.name] || {});
// Add raw resolvers
resolvers[objectType.name] = fieldNames
.map(function (fieldName) { return (__assign({ fieldName: fieldName }, objectType.fields[fieldName])); })
.filter(function (field) { return field.aliasFor; })
.reduce(function (fields, field) {
fields[field.fieldName] = { resolve: getRawResolver(field, pluginConfig, context) };
return fields;
}, resolvers[objectType.name] || {});
});
return resolvers;
}
exports.getGraphQLResolverMap = getGraphQLResolverMap;
function getResolver(field, typePrefix) {
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, typePrefix); })
: [];
}
var item = source[field.fieldName];
return maybeResolveReference(item, context.nodeModel, typePrefix);
};
}
function maybeResolveReference(item, nodeModel, typePrefix) {
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: (0, normalize_1.getTypeName)(item._type, typePrefix) } });
}
return item;
}
function getRawResolver(field, pluginConfig, context) {
var fieldName = field.fieldName;
var aliasName = '_' + (0, lodash_1.camelCase)("raw ".concat(fieldName));
return function (obj, args) {
var raw = "_".concat((0, lodash_1.camelCase)("raw_data_".concat(field.aliasFor || fieldName)));
var value = obj[raw] || obj[aliasName] || obj[field.aliasFor || fieldName] || obj[fieldName];
return args.resolveReferences
? (0, resolveReferences_1.resolveReferences)(value, context, {
maxDepth: args.resolveReferences.maxDepth,
overlayDrafts: pluginConfig.overlayDrafts,
})
: value;
};
}
//# sourceMappingURL=getGraphQLResolverMap.js.map
;