UNPKG

gatsby-source-sanity

Version:

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

107 lines 4.32 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 lodash_1 = require("lodash"); var mutator_1 = require("@sanity/mutator"); var graphql_1 = require("gatsby/graphql"); var documentIds_1 = require("./documentIds"); var unprefixDraftId_1 = require("./unprefixDraftId"); var scalarTypeNames = graphql_1.specifiedScalarTypes.map(function (def) { return def.name; }).concat(['JSON', 'Date']); // Movie => SanityMovie var typePrefix = 'Sanity'; // Node fields used internally by Gatsby. exports.RESTRICTED_NODE_FIELDS = ['id', 'children', 'parent', 'fields', 'internal']; // Transform a Sanity document into a Gatsby node function processDocument(doc, options) { var createNode = options.createNode, createNodeId = options.createNodeId, createContentDigest = options.createContentDigest, overlayDrafts = options.overlayDrafts, skipCreate = options.skipCreate; var rawAliases = getRawAliases(doc, options); var safe = prefixConflictingKeys(doc); var withRefs = rewriteNodeReferences(safe, options); var node = __assign(__assign(__assign({}, withRefs), rawAliases), { id: documentIds_1.safeId(overlayDrafts ? unprefixDraftId_1.unprefixDraftId(doc._id) : doc._id, createNodeId), parent: null, children: [], internal: { type: getTypeName(doc._type), contentDigest: createContentDigest(JSON.stringify(withRefs)), } }); if (!skipCreate) { createNode(node); } return node; } exports.processDocument = processDocument; // movie => SanityMovie // blog_post => SanityBlogPost // sanity.imageAsset => SanityImageAsset function getTypeName(type) { if (!type) { return type; } var typeName = lodash_1.startCase(type); if (scalarTypeNames.includes(typeName)) { return typeName; } return "" + typePrefix + typeName.replace(/\s+/g, '').replace(/^Sanity/, ''); } exports.getTypeName = getTypeName; // {foo: 'bar', children: []} => {foo: 'bar', sanityChildren: []} function prefixConflictingKeys(obj) { // Will be overwritten, but initialize for type safety var initial = { _id: '', _type: '' }; return Object.keys(obj).reduce(function (target, key) { var targetKey = getConflictFreeFieldName(key); target[targetKey] = obj[key]; return target; }, initial); } function getConflictFreeFieldName(fieldName) { return exports.RESTRICTED_NODE_FIELDS.includes(fieldName) ? "" + lodash_1.camelCase(typePrefix) + lodash_1.upperFirst(fieldName) : fieldName; } exports.getConflictFreeFieldName = getConflictFreeFieldName; function getRawAliases(doc, options) { var typeMap = options.typeMap; var typeName = getTypeName(doc._type); var type = typeMap.objects[typeName]; if (!type) { return {}; } var initial = {}; return Object.keys(type.fields).reduce(function (acc, fieldName) { var field = type.fields[fieldName]; var namedType = field.namedType.name.value; if (field.aliasFor) { var aliasName_1 = '_' + lodash_1.camelCase("raw_data_" + field.aliasFor); acc[aliasName_1] = doc[field.aliasFor]; return acc; } if (typeMap.scalars.includes(namedType)) { return acc; } var aliasName = '_' + lodash_1.camelCase("raw_data_" + fieldName); acc[aliasName] = doc[fieldName]; return acc; }, initial); } // Tranform Sanity refs ({_ref: 'foo'}) to Gatsby refs ({_ref: 'someOtherId'}) function rewriteNodeReferences(doc, options) { var createNodeId = options.createNodeId; var refs = mutator_1.extractWithPath('..[_ref]', doc); if (refs.length === 0) { return doc; } var newDoc = lodash_1.cloneDeep(doc); refs.forEach(function (match) { lodash_1.set(newDoc, match.path, documentIds_1.safeId(match.value, createNodeId)); }); return newDoc; } //# sourceMappingURL=normalize.js.map