Something went wrong. Try again.
a Page to view some global statistics about Modrinth modrinth-statistics.tobinio.dev
Something went wrong. Try again.
1.7 kB · 74 lines
TypeScript
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475import type { StatExport } from "~~/shared/types/types";
/** * limit data to <count> values */export function limit(data: StatExport, count: number): StatExport { data.labels = data.labels.slice(data.labels.length - count, undefined);
for (const value of data.data) { value.data = value.data.slice(value.data.length - count, undefined); }
return data;}
/** * get data containing absolute values and convert it to data containing absolute difference */export function fracture(data: StatExport): StatExport { data.data.map((value) => { const data = [];
for (let i = 0; i < value.data.length - 1; i++) { data.push(value.data[i + 1]! - value.data[i]!); } value.data = data;
return value; });
data.labels.pop();
return data;}
/** * summarize data to <count> values */export function summarize( data: StatExport, count: number, should_avg: boolean,): StatExport { const per_group = data.labels.length / count;
const indexes: number[] = []; for (let i = 0; i < data.labels.length; i++) { if (indexes.length * per_group <= i) { // insert reversed values so most recent data is always present indexes.push(data.labels.length - 1 - i); } }
for (let i = 0; i < indexes.length; i++) { const from = indexes[i + 1]! + 1 || 0; const to = indexes[i]!;
for (const values of data.data) { const to_avg = values.data;
let sum = 0; for (let j = from; j <= to; j++) { sum += to_avg[j] ?? 0; }
const value = should_avg ? Math.round(sum / (to - from + 1)) : sum; to_avg.splice(from, to - from + 1, value); } }
data.labels = data.labels.filter((_value, index) => indexes.includes(index));
return data;}