refactor
add NodeVisitor
refactor Node.ts