@putout/engine-runner
Version:
44 lines (36 loc) • 918 B
JavaScript
import {
traverse as babelTraverse,
types,
} from '@putout/babel';
import {generate} from '@putout/engine-parser';
const {merge} = babelTraverse.visitors;
export default function superFind({rule, find, ast, options, template, traverse = babelTraverse}) {
const pushItems = [];
const push = (a) => {
pushItems.push(a);
};
const returnItems = find(ast, {
traverse: createTraverse({
rule,
options,
template,
traverse,
}),
generate,
types,
push,
options,
});
return [
...pushItems,
...returnItems || [],
];
}
const createTraverse = ({rule, options, template, traverse}) => (ast, visitor) => {
const templateVisitors = merge(template({
rule,
visitor,
options,
}));
return traverse(ast, templateVisitors);
};