UNPKG

gatsby-source-sanity

Version:

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

81 lines 3.75 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 }); 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