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-between
import 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 of -
start
(Test
) —is
-compatible test (such as a type) to find the start of each section -
end
(Test
) —is
-compatible test (such as a type) to find the end of each section -
func
((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