68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import Bun from 'bun';
|
|
import path from 'node:path';
|
|
import { parseArgs } from 'node:util';
|
|
import fs, { mkdirSync } from 'node:fs';
|
|
import { featurize } from '../preprocess/featurize';
|
|
import { parseTja } from '../preprocess/parse'
|
|
|
|
const { values } = parseArgs({
|
|
args: Bun.argv,
|
|
options: {
|
|
workingDir: {
|
|
type: "string"
|
|
},
|
|
dataDir: {
|
|
type: "string"
|
|
},
|
|
fileName: {
|
|
type: "string"
|
|
}
|
|
},
|
|
allowPositionals: true,
|
|
})
|
|
|
|
if (!values.dataDir || !values.workingDir) {
|
|
console.error("--workingDir --dataDir");
|
|
process.exit(1);
|
|
}
|
|
|
|
const workingDir = values.workingDir ?? '';
|
|
if (!fs.existsSync(workingDir)) mkdirSync(workingDir)
|
|
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(workingDir, values.fileName ?? 'features.json');
|
|
fs.writeFileSync(featurePath, JSON.stringify(features, null, 2), 'utf-8');
|
|
console.log(`Successfully saved factors to ${featurePath}`);
|