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; }