I see that estraverse.replace and estraverse.traverse return a tree, but it seems to be the same tree that is passed in, so it seems that the original tree is modified in place. Is the return value needed? What if someone doesn't want to modify the original tree, should they copy duplicate the tree in their own way first?