Something went wrong. Try again.
a Page to view some global statistics about Modrinth modrinth-statistics.tobinio.dev
Something went wrong. Try again.
2.3 kB · 96 lines
TypeScript
at redesign
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697import { getGameVersions } from "~~/server/utils/processing/gameVersions/fetching";import type { GameVersionData, GameVersions,} from "~~/server/utils/processing/gameVersions/types";import type { GameVersion, SupportedVersions,} from "~~/server/utils/processing/gameVersions/types";import type { Version } from "~~/server/utils/processing/projects/types";
export async function updateGameVersions() { const versions = await getGameVersions(); const gameVersions = groupGameVersions(versions);
const storage = useStorage("statistics");
await storage.setItem("gameVersions", gameVersions);}
// returns what versionGroup (all, minor, major) a specif projectVersion supportsexport function getSupportedGameVersions( gameVersions: GameVersions, version: Version,): SupportedVersions { const data = { all: new Set<string>(), major: new Set<string>(), minor: new Set<string>(), };
for (const gameVersion of version.game_versions) { data.all.add(gameVersion);
for (const majorVersion of gameVersions.major) { if (majorVersion.contains.includes(gameVersion)) { data.major.add(majorVersion.name); } }
for (const minorVersion of gameVersions.minor) { if (minorVersion.contains.includes(gameVersion)) { data.minor.add(minorVersion.name); } } }
return { all: Array.from(data.all), major: Array.from(data.major), minor: Array.from(data.minor), };}
function groupGameVersions(versions: GameVersion[]): GameVersions { const all = versions.map((value) => { return { name: value.name, contains: [value.name] }; });
const minor: GameVersionData = [];
let currentContains: string[] = []; for (const version of versions) { currentContains.push(version.name);
if (version.fullVersion) { minor.push({ name: version.name, contains: currentContains }); currentContains = []; } }
const major: GameVersionData = [];
for (const version of minor) { const gameVersionName = version.name.split(".").slice(0, 2).join(".");
if ( major.length === 0 || major[major.length - 1].name !== gameVersionName ) { major.push({ name: gameVersionName, contains: Array.from(version.contains), }); continue; }
major[major.length - 1].contains.push(...version.contains); }
return { all, minor, major, };}