57 lines
1.8 KiB
JavaScript
57 lines
1.8 KiB
JavaScript
import fetch from 'node-fetch';
|
|
import { promises as fs } from 'fs';
|
|
|
|
const API_URL =
|
|
process.env.VITE_API_URL || process.env?.NODE_ENV === 'development'
|
|
? 'https://staging-api.modrinth.com/v2/'
|
|
: 'https://api.modrinth.com/v2/';
|
|
const GENERATED_PATH = './generated/';
|
|
|
|
(async () => {
|
|
/* GAME VERSIONS */
|
|
|
|
// Fetch data
|
|
let gameVersions = await (await fetch(API_URL + 'tag/game_version')).json();
|
|
|
|
// Write JSON file
|
|
await fs.writeFile(GENERATED_PATH + 'gameVersions.json', JSON.stringify(gameVersions));
|
|
|
|
console.log('Generated gameVersions.json');
|
|
|
|
/* TAGS */
|
|
|
|
// Fetch data
|
|
let [categories, loaders, licenses, donationPlatforms] = await Promise.all([
|
|
await (await fetch(API_URL + 'tag/category')).json(),
|
|
await (await fetch(API_URL + 'tag/loader')).json(),
|
|
await (await fetch(API_URL + 'tag/license')).json(),
|
|
await (await fetch(API_URL + 'tag/donation_platform')).json(),
|
|
]);
|
|
|
|
// Create single object with icons
|
|
let tagIcons = {
|
|
...categories.reduce((a, v) => ({ ...a, [v.name]: v.icon }), {}),
|
|
...loaders.reduce((a, v) => ({ ...a, [v.name]: v.icon }), {}),
|
|
};
|
|
|
|
// Add icon class
|
|
tagIcons = Object.fromEntries(Object.entries(tagIcons).map(([k, v]) => [k, v.replace('<svg', '<svg class="icon"')]));
|
|
|
|
// Delete icons from original arrays
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
categories = categories.map(({ icon, ...rest }) => rest);
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
loaders = loaders.map(({ icon, ...rest }) => rest);
|
|
|
|
// Set project types
|
|
const projectTypes = ['mod', 'modpack'];
|
|
|
|
// Write JSON file
|
|
await fs.writeFile(
|
|
GENERATED_PATH + 'tags.json',
|
|
JSON.stringify({ categories, loaders, projectTypes, licenses, donationPlatforms, tagIcons })
|
|
);
|
|
|
|
console.log('Generated tags.json');
|
|
})();
|