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