UNPKG

jora

Version:

JavaScript object query engine

48 lines (39 loc) 985 B
'use strict'; const index = require('./nodes/index.cjs'); function walk(ast, options) { function walk(node) { if (index.walk.has(node.type)) { enter(node); index.walk.get(node.type)(node, ctx); leave(node); } else { throw new Error('Unknown node type "' + node.type + '"'); } } const ctx = { node: walk, nodeOrNothing(node) { if (node !== null) { walk(node); } }, list(list) { list.forEach(walk); } }; let enter = () => {}; let leave = () => {}; if (typeof options === 'function') { options = { enter: options }; } if (options) { if (typeof options.enter === 'function') { enter = options.enter; } if (typeof options.leave === 'function') { leave = options.leave; } } walk(ast); }; module.exports = walk;