npm workspaces (Fastify+TS server, Vite+React web), SQLite schema, ao-bin-dumps downloader and parser (items, recipes, enchant upgrades, EN localization), item browser UI and debug API. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
35 lines
1.3 KiB
TypeScript
35 lines
1.3 KiB
TypeScript
import { downloadGameData } from './download.js';
|
|
import { parseGameData } from './parse.js';
|
|
import { getDb } from '../db/index.js';
|
|
|
|
const force = process.argv.includes('--force');
|
|
|
|
console.log(`Downloading game data${force ? ' (forced refresh)' : ''}...`);
|
|
const downloads = await downloadGameData(force);
|
|
for (const d of downloads) {
|
|
console.log(` ${d.file}: ${d.status} (${(d.bytes / 1024 / 1024).toFixed(1)} MB)`);
|
|
}
|
|
|
|
console.log('Parsing into database...');
|
|
const stats = parseGameData();
|
|
console.log(` items: ${stats.items}, recipes: ${stats.recipes}, inputs: ${stats.recipeInputs}, localized names: ${stats.localizedNames}`);
|
|
|
|
// Sanity check: a well-known recipe (Adept's Bag = 8 T4 leather)
|
|
const db = getDb();
|
|
const bag = db
|
|
.prepare(
|
|
`SELECT r.id, r.output_item, r.focus_cost, i.name_en
|
|
FROM recipes r JOIN items i ON i.unique_name = r.output_item
|
|
WHERE r.output_item = 'T4_BAG' AND r.source = 'crafting'`,
|
|
)
|
|
.all() as any[];
|
|
for (const r of bag) {
|
|
const inputs = db
|
|
.prepare('SELECT input_item, count, max_return_amount FROM recipe_inputs WHERE recipe_id = ?')
|
|
.all(r.id);
|
|
console.log(`Sanity check — ${r.name_en} (${r.output_item}), focus ${r.focus_cost}:`, inputs);
|
|
}
|
|
if (bag.length === 0) {
|
|
console.error('WARNING: T4_BAG recipe not found — parser needs adjustment.');
|
|
process.exitCode = 1;
|
|
}
|