import { SyncWalker } from './sync.js'; import { AsyncWalker } from './async.js'; /** * @typedef {import('estree').Node} Node * @typedef {import('./sync.js').SyncHandler} SyncHandler * @typedef {import('./async.js').AsyncHandler} AsyncHandler */ /** * @param {Node} ast * @param {{ * enter?: SyncHandler * leave?: SyncHandler * }} walker * @returns {Node | null} */ export function walk(ast, { enter, leave }) { const instance = new SyncWalker(enter, leave); return instance.visit(ast, null); } /** * @param {Node} ast * @param {{ * enter?: AsyncHandler * leave?: AsyncHandler * }} walker * @returns {Promise} */ export async function asyncWalk(ast, { enter, leave }) { const instance = new AsyncWalker(enter, leave); return await instance.visit(ast, null); }