import type { DataXY, DoubleArray } from 'cheminfo-types'; import { xEnsureFloat64, xyGrowingX } from 'ml-spectra-processing'; import type { FilterXYType } from './FilterXYType.ts'; import * as Filters from './filters/filters.ts'; /** * Apply filters on {x:[], y:[]} * @param data * @param filters * @returns */ export function filterXY( data: DataXY, filters: FilterXYType[], ): { logs: Array<{ name: string; time: number }>; data: DataXY } { let result = { data: xyGrowingX({ x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) }), }; const logs = []; for (const filter of filters) { const start = Date.now(); if (!filter.name) { // we ignore empty filter names continue; } const filterFct = Filters[filter.name]; if (!filterFct) { throw new Error(`Unknown filter: ${filter.name}`); } // @ts-expect-error some method have options and some other ones don't have any options result = filterFct(result.data, filter.options); result.data = xyGrowingX(result.data); logs.push({ name: filter.name, time: Date.now() - start, }); } return { logs, data: result.data }; }