@sanity/block-content-to-markdown
Version:
Transforming Sanity block content to markdown
74 lines (54 loc) • 2.57 kB
JavaScript
;
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