import { createElement, Fragment } from "preact"; import { useMemo } from "preact/hooks"; // import { SummaryList } from "./SummaryList"; import { SummaryTable } from "./SummaryTable"; /** * @typedef {[number, number, number]} SeveritySummary * @typedef {{ codes: SeveritySummary; deopts: SeveritySummary; ics: SeveritySummary }} FileSeverities * @typedef {Record<string, FileSeverities>} PerFileStats * @param {import('..').AppProps["deoptInfo"]} deoptInfo * @returns {PerFileStats} */ function getPerFileStats(deoptInfo) { /** @type {PerFileStats} */ const results = {}; const files = Object.keys(deoptInfo.files); for (let fileName of files) { const fileDepotInfo = deoptInfo.files[fileName]; results[fileName] = { codes: [0, 0, 0], deopts: [0, 0, 0], ics: [0, 0, 0], }; for (let kind of ["codes", "deopts", "ics"]) { const entries = fileDepotInfo[kind]; for (let entry of entries) { results[fileName][kind][entry.severity - 1]++; } } } return results; } /** * @typedef {{ deoptInfo: import('..').PerFileDeoptInfoWithSources; perFileStats: PerFileStats }} SummaryProps * @param {import('..').AppProps} props */ export function Summary({ deoptInfo }) { const perFileStats = useMemo(() => getPerFileStats(deoptInfo), [deoptInfo]); return ( <Fragment> {/* <SummaryList deoptInfo={deoptInfo} perFileStats={perFileStats} /> */} <SummaryTable deoptInfo={deoptInfo} perFileStats={perFileStats} /> </Fragment> ); }