123456789101112131415161718192021222324252627282930 |
- 'use strict';
- exports.__esModule = true;
- /** @type {import('./visit').default} */
- exports.default = function visit(node, keys, visitorSpec) {
- if (!node || !keys) {
- return;
- }
- const type = node.type;
- const visitor = visitorSpec[type];
- if (typeof visitor === 'function') {
- visitor(node);
- }
- const childFields = keys[type];
- if (!childFields) {
- return;
- }
- childFields.forEach((fieldName) => {
- // @ts-expect-error TS sucks with concat
- [].concat(node[fieldName]).forEach((item) => {
- visit(item, keys, visitorSpec);
- });
- });
- const exit = visitorSpec[`${type}:Exit`];
- if (typeof exit === 'function') {
- exit(node);
- }
- };
|