import Bun from 'bun'; import path from 'node:path'; import { parseArgs } from 'node:util'; import fs, { mkdirSync } from 'node:fs'; import { Song } from 'tja-parser'; import { featurize } from '../preprocess/featurize'; import { parseTja } from '../preprocess/parse' const { values } = parseArgs({ args: Bun.argv, options: { outputDir: { type: "string" }, dataDir: { type: "string" } }, strict: true, allowPositionals: true, }) if (!values.dataDir || !values.outputDir) { console.error("--outputDir --dataDir"); process.exit(1); } const outputDir = values.outputDir ?? ''; if (!fs.existsSync(outputDir)) mkdirSync(outputDir) const dataDir = values.dataDir ?? ''; const tjaDir = path.join(dataDir, 'tja'); const files = fs.readdirSync(tjaDir); const features: ({ songno: string, difficulty: 'oni' | 'ura' } & {})[] = []; for (const file of files) { const tja = fs.readFileSync(path.join(tjaDir, file), 'utf-8'); const songno = path.basename(file, '.tja'); try { const parsed = parseTja(tja); const oni = parsed?.oni; const edit = parsed?.edit; if (oni) { features.push({ songno, difficulty: 'oni', ...featurize(oni) }) } if (edit) { features.push({ songno, difficulty: 'ura', ...featurize(edit) }) } } catch (err) { console.error(err); console.error(file); } } const featurePath = path.join(outputDir, 'features.json'); fs.writeFileSync(featurePath, JSON.stringify(features, null, 2), 'utf-8');