import { Arr } from '@ephox/katamari'; import type { Gene } from '../api/Gene'; import * as Comparator from './Comparator'; const selector = (item: Gene, query: string): Gene[] => { return Arr.bind(item.children || [], (child) => { const rest = selector(child, query); return Comparator.is(child, query) ? [ child ].concat(rest) : rest; }); }; const predicate = (item: Gene, pred: (e: Gene) => boolean): Gene[] => { return Arr.bind(item.children || [], (child) => { const rest = predicate(child, pred); return pred(child) ? [ child ].concat(rest) : rest; }); }; export { selector, predicate };