36 lines
842 B
JavaScript
36 lines
842 B
JavaScript
// @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);
|
|
}
|