Something went wrong. Try again.
a Page to view some global statistics about Modrinth modrinth-statistics.tobinio.dev
Something went wrong. Try again.
1.4 kB · 57 lines
TypeScript
at commit dd18b097
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758import type { StatExport } from "~~/shared/types/types";
// get data containing absolute values and convert it to data containing absolute differenceexport 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> valuesexport 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;}