@atlaskit/adf-utils
Version:
Set of utilities to traverse, modify and create ADF documents.
50 lines (49 loc) • 1.59 kB
JavaScript
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;
}
});
});