UNPKG

gatsby-source-sanity

Version:

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

60 lines 2.46 kB
"use strict"; 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