function isNumericArray(data: unknown[]): data is number[] { return data.every(i => !Number.isNaN(i)) ? true : false; } import { ISummaryBuiltIns } from './p-table-types'; export const builtInSummaryFns: Record any> = { avg: data => { if (isNumericArray(data)) { return data.length > 0 ? data.reduce((acc, item) => acc + item, 0) / data.length : undefined; } else { console.warn(`Attempt to average a non-numeric column`, data); } }, mean: data => { if (isNumericArray(data)) { const length = data.length; if (length === 0) return undefined; const mid = Math.floor(length / 2); return data.length % 2 ? data[mid] : builtInSummaryFns.avg([data[mid], data[mid - 1]]); } else { console.warn(`Attempt to get the "mean" of a non-numeric column`, data); } }, min: data => { if (isNumericArray(data)) { return data.length > 0 ? Math.min(...data) : undefined; } else { console.warn(`Attempt to find a "max" of a non-numeric column`, data); } }, max: data => { if (isNumericArray(data)) { return data.length > 0 ? Math.max(...data) : undefined; } else { console.warn(`Attempt to find a "max" of a non-numeric column`, data); } }, };