index.js 842 B

1234567891011121314151617181920212223242526272829303132333435
  1. // @ts-check
  2. import { SyncWalker } from './sync.js';
  3. import { AsyncWalker } from './async.js';
  4. /** @typedef { import('estree').BaseNode} BaseNode */
  5. /** @typedef { import('./sync.js').SyncHandler} SyncHandler */
  6. /** @typedef { import('./async.js').AsyncHandler} AsyncHandler */
  7. /**
  8. *
  9. * @param {BaseNode} ast
  10. * @param {{
  11. * enter?: SyncHandler
  12. * leave?: SyncHandler
  13. * }} walker
  14. * @returns {BaseNode}
  15. */
  16. export function walk(ast, { enter, leave }) {
  17. const instance = new SyncWalker(enter, leave);
  18. return instance.visit(ast, null);
  19. }
  20. /**
  21. *
  22. * @param {BaseNode} ast
  23. * @param {{
  24. * enter?: AsyncHandler
  25. * leave?: AsyncHandler
  26. * }} walker
  27. * @returns {Promise<BaseNode>}
  28. */
  29. export async function asyncWalk(ast, { enter, leave }) {
  30. const instance = new AsyncWalker(enter, leave);
  31. return await instance.visit(ast, null);
  32. }