#!/usr/bin/env npx tsx /** * Combine individual deck JSONs into a single multi-deck presentation. * * Usage: * npx tsx scripts/combine.ts [deck-id ...] * * If deck IDs are provided, they define the order. * Otherwise, all JSONs in generated/ are combined alphabetically. */ import * as fs from 'fs'; import * as path from 'path'; const generatedDir = path.resolve(__dirname, '..', 'generated'); const args = process.argv.slice(2); let deckIds: string[]; if (args.length > 0) { deckIds = args; } else { deckIds = fs.readdirSync(generatedDir) .filter(f => f.endsWith('.json') && f !== 'stemedb.json') .map(f => f.replace('.json', '')) .sort(); } if (deckIds.length === 0) { console.error('No deck JSON files found in generated/'); process.exit(1); } const decks = []; for (const id of deckIds) { const filePath = path.join(generatedDir, `${id}.json`); if (!fs.existsSync(filePath)) { console.error(`Deck not found: ${filePath}`); process.exit(1); } const content = fs.readFileSync(filePath, 'utf-8'); decks.push(JSON.parse(content)); } const combined = { combined: true, meta: { id: 'stemedb', title: 'stemedb' }, decks, }; const outputPath = path.join(generatedDir, 'stemedb.json'); fs.writeFileSync(outputPath, JSON.stringify(combined, null, 2)); console.log(`Generated: ${outputPath} (${decks.length} decks)`);