unist utility to modify an existing child list to replace all elements between all instances of two nodes
npm:
npm install unist-util-replace-all-betweenimport u from 'unist-builder' import replaceAllBetween from 'unist-util-replace-all-between' const tree = u('root', [ u('start', '1'), u('node', [u('leaf', '2'), u('node', [u('leaf', '3')])]), u('end', '4'), u('middle', '1'), u('start', '1'), u('node', '2'), u('end', '4'), ]) const newChildren = replaceAllBetween(tree, {type: 'start'}, {type: 'end'}, () => [u('replaced', '1')]) console.dir(newChildren, {depth: null})Yields:
[ { type: 'replaced', value: '1' }, { type: 'middle', value: '2' }, { type: 'replaced', value: '1' }, ]Mutate an existing parent's children to reflect function return
Parent's children are only search. None of their children (or further down) are searched
parent(Parent) — Parent to walk through children ofstart(Test) —is-compatible test (such as a type) to find the start of each sectionend(Test) —is-compatible test (such as a type) to find the end of each sectionfunc((nodes:Node[])=>Node[]) — Function used to change nodes. Return value is then set to the parent.children value
Node[] — List of children from parent post-mutation