32 lines
1.3 KiB
JavaScript
32 lines
1.3 KiB
JavaScript
import { readFile, writeFile } from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
|
|
const calibrationPath = path.resolve('data/score-calibrations.json');
|
|
const catalogPath = path.resolve('src/lib/data/exact-chart-catalog.json');
|
|
const chartDirectory = path.resolve('static/data/charts');
|
|
|
|
const calibrations = JSON.parse(await readFile(calibrationPath, 'utf8'));
|
|
const catalog = JSON.parse(await readFile(catalogPath, 'utf8'));
|
|
const catalogRows = Array.isArray(catalog) ? catalog : catalog.charts;
|
|
|
|
for (const calibration of calibrations.charts) {
|
|
const difficulty = calibration.difficulty.toLowerCase();
|
|
const catalogRow = catalogRows.find((row) =>
|
|
row.songId === calibration.songId && row.difficulty.toLowerCase() === difficulty
|
|
);
|
|
|
|
// Easy/Normal 실측도 보관하되 현재 생성 대상인 Hard/Expert만 즉시 동기화한다.
|
|
if (!catalogRow) continue;
|
|
|
|
catalogRow.scoreRatio = calibration.scoreRatio;
|
|
catalogRow.scoreCalibrationSource = 'measured';
|
|
|
|
const chartPath = path.join(chartDirectory, `${calibration.songId}.${difficulty}.json`);
|
|
const chart = JSON.parse(await readFile(chartPath, 'utf8'));
|
|
chart.scoreRatio = calibration.scoreRatio;
|
|
chart.scoreCalibrationSource = 'measured';
|
|
await writeFile(chartPath, `${JSON.stringify(chart)}\n`);
|
|
}
|
|
|
|
await writeFile(catalogPath, `${JSON.stringify(catalog, null, 2)}\n`);
|