UNPKG

@sanity/block-content-to-markdown

Version:
74 lines (54 loc) 2.57 kB
'use strict'; var _require = require('@sanity/block-content-to-hyperscript/internals'), getImageUrl = _require.getImageUrl, getSerializers = _require.getSerializers, blocksToNodes = _require.blocksToNodes, mergeSerializers = _require.mergeSerializers; var mdSerializers = require('./serializers'); var disallowedEmptyMarks = ['strike-through', 'em', 'strong', 'underline']; var sanitizeEmptyMarkedSpans = function sanitizeEmptyMarkedSpans() { var blocks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var sanitizedBlock = function sanitizedBlock(block) { if (block._type === 'block' && Array.isArray(block.children)) { var newBlock = Object.assign({}, block); newBlock.children = sanitizeEmptyMarkedSpans(block.children); return newBlock; } if (block._type === 'span' && block.text.length == 0 && Array.isArray(block.marks)) { var allowedEmptyMarks = block.marks.filter(function (mark) { return !disallowedEmptyMarks.includes(mark); }); if (allowedEmptyMarks.length == 0) { return null; } return Object.assign({}, block, { marks: allowedEmptyMarks }); } return block; }; return Array.isArray(blocks) ? blocks.map(sanitizedBlock).filter(function (block) { return !!block; }) : sanitizedBlock(blocks); }; var renderNode = function renderNode(render, props, childNodes) { var children = childNodes || props.node && props.node.children; return render(Object.assign({}, props, { children: children })); }; var _getSerializers = getSerializers(renderNode), defaultSerializers = _getSerializers.defaultSerializers, serializeSpan = _getSerializers.serializeSpan; var markdownSerializers = mergeSerializers(defaultSerializers, mdSerializers); var toMarkdown = function toMarkdown(block) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var blocks = sanitizeEmptyMarkedSpans(block || []); var serializers = mergeSerializers(markdownSerializers, options.serializers || {}); var props = Object.assign({}, options, { blocks: blocks, serializers: serializers, listNestMode: 'last-child' }); return blocksToNodes(renderNode, props, defaultSerializers, serializeSpan).trim(); }; // Expose default serializers to the user toMarkdown.defaultSerializers = defaultSerializers; // Expose logic for building image URLs from an image reference/node toMarkdown.getImageUrl = getImageUrl; module.exports = toMarkdown; //# sourceMappingURL=toMarkdown.js.map