UNPKG

gatsby-source-morty

Version:

Gatsby source plugin for building websites using the Morty CMS as a data source

91 lines (69 loc) 2.52 kB
'use strict'; var _stringify = require('babel-runtime/core-js/json/stringify'); var _stringify2 = _interopRequireDefault(_stringify); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _lodash = require('lodash'); var _utils = require('./utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function createImageNode(node, field, _ref) { var createNode = _ref.createNode, createParentChildLink = _ref.createParentChildLink; var image = node[field]; var specialFields = (0, _keys2.default)(image).filter(function (field) { return field.slice(0, 2) === '__'; }); var item = (0, _lodash.omit)(image, specialFields); var imageNode = (0, _extends3.default)({}, item, { id: image.id, parent: node.id, children: [], internal: { type: 'MortyImage', mediaType: 'application/json', content: (0, _stringify2.default)(item), contentDigest: (0, _utils.digest)(item) } }); node[field + '___NODE'] = image.id; node.children = node.children.concat([imageNode.id]); createParentChildLink({ parent: node, child: imageNode }); createNode(imageNode); } function createDescriptionListItemNodes(node, _ref2) { var createNode = _ref2.createNode, createParentChildLink = _ref2.createParentChildLink; node.descriptionListItems.forEach(function (item) { var itemNode = (0, _extends3.default)({}, item, { id: item.id, parent: node.id, children: [], internal: { type: 'MortyDescriptionListItem', mediaType: 'application/json', contentDigest: (0, _utils.digest)(item) } }); node['descriptionListItems___NODE'] = node.children; createParentChildLink({ parent: node, child: itemNode }); createNode(itemNode); }); } function onCreateNode(_ref3, pluginOptions) { var node = _ref3.node, boundActionCreators = _ref3.boundActionCreators; if (node.internal.mediaType !== 'application/json') { return; } ['bannerImage', 'abstractPhoto', 'headshot', 'image', 'attributionPhoto'].forEach(function (iField) { if (node[iField]) { createImageNode(node, iField, boundActionCreators); } }); if (node.descriptionListItems) { createDescriptionListItemNodes(node, boundActionCreators); } } exports.onCreateNode = onCreateNode;