| 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<Node | null>} | |
| */ | |
| export async function asyncWalk(ast, { enter, leave }) { | |
| const instance = new AsyncWalker(enter, leave); | |
| return await instance.visit(ast, null); | |
| } | |