UNPKG

@atlaskit/adf-utils

Version:

Set of utilities to traverse, modify and create ADF documents.

50 lines (49 loc) 1.59 kB
import { traverse } from '../traverse/traverse'; import { scrubAttrs, scrubStr, scrubLink } from './scrub-content'; import { defaultNodeReplacements } from './default-node-replacements'; import { defaultValueReplacements } from './default-value-replacements'; export default ((adf, options = {}) => { const nodeReplacements = { ...defaultNodeReplacements, ...options.nodeReplacements }; const valueReplacements = { ...defaultValueReplacements, ...options.valueReplacements }; return traverse(adf, { any: (node, parent) => { const replacement = nodeReplacements[node.type]; if (typeof replacement === 'function') { const result = replacement(node, { parent, valueReplacements }); if (result !== false) { return result; } } // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any const updatedNode = {}; Object.entries(node).forEach(([key, value]) => { if (['version', 'type', 'content', 'marks'].includes(key)) { updatedNode[key] = value; } }); if (node.text && node.marks) { var _node$marks; updatedNode.marks = scrubLink((_node$marks = node.marks) !== null && _node$marks !== void 0 ? _node$marks : [], { valueReplacements }); } if (node.text) { updatedNode.text = scrubStr(node.text); } if (node.attrs) { updatedNode.attrs = scrubAttrs(node.type, node.attrs); } return updatedNode; } }); });