38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
import fs from "node:fs";
|
|
import path from "node:path";
|
|
|
|
const root = process.cwd();
|
|
const cardsRoot = path.join(root, "assets", "cards");
|
|
const manifestPath = path.join(cardsRoot, "card-manifest.json");
|
|
const availablePath = path.join(cardsRoot, "available-assets.json");
|
|
|
|
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
const assets = [];
|
|
|
|
for (const character of manifest.characters) {
|
|
for (const art of character.art) {
|
|
const absolute = path.join(root, art.path);
|
|
if (!fs.existsSync(absolute)) continue;
|
|
const stat = fs.statSync(absolute);
|
|
assets.push({
|
|
characterId: character.id,
|
|
damageStage: art.damageStage,
|
|
path: art.path.replaceAll("\\", "/"),
|
|
bytes: stat.size,
|
|
updatedAt: stat.mtime.toISOString(),
|
|
});
|
|
}
|
|
}
|
|
|
|
const payload = {
|
|
schemaVersion: 1,
|
|
generatedAt: new Date().toISOString(),
|
|
expectedImageCount: manifest.expectedImageCount,
|
|
completedImageCount: assets.length,
|
|
completedCharacterCount: new Set(assets.map((asset) => asset.characterId)).size,
|
|
assets,
|
|
};
|
|
|
|
fs.writeFileSync(availablePath, JSON.stringify(payload, null, 2), "utf8");
|
|
console.log(JSON.stringify(payload, null, 2));
|