UNPKG

gatsby-source-sanity

Version:

Gatsby source plugin for building websites using Sanity.io as a backend.

47 lines 1.99 kB
"use strict"; 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