feat: review all remote HolodoriDB changes before collection

This commit is contained in:
2026-09-08 15:31:06 +09:00
parent be94ee4be6
commit c7206377f0
12 changed files with 228 additions and 73 deletions
+4 -13
View File
@@ -1,5 +1,5 @@
import { mkdir, readFile, writeFile } from 'node:fs/promises';
import { execFileSync } from 'node:child_process';
import { readHolodoriDbTable as readHolodoriDbSource } from './holodoridb-source.mjs';
import path from 'node:path';
import { formulaScoreMetadata } from './song-score-formulas.mjs';
@@ -13,19 +13,10 @@ const scoreCalibrationByKey = new Map(scoreCalibrations.charts.map((row) => [
`${row.songId}::${row.difficulty}`,
row
]));
function readHolodoriDbSource(locale, filename) {
const repositoryPath = path.resolve(`data/raw/holodoridb/${locale}`);
return JSON.parse(execFileSync('git', [
'-c', `safe.directory=${repositoryPath.replaceAll('\\', '/')}`,
'-C', repositoryPath,
'show', `origin/main:${filename}`
], { encoding: 'utf8', maxBuffer: 32 * 1024 * 1024 }));
}
const musicMaster = readHolodoriDbSource('kor', 'Music.json');
const musicById = new Map(musicMaster.map((row) => [row.data?.id ?? row.id, row.data ?? row]));
const englishMusicText = readHolodoriDbSource('eng', 'LangMusic_Eng.json');
const englishTextById = new Map(englishMusicText.map((row) => [row.data?.id ?? row.id, row.data?.text ?? row.text]));
const koreanMusicText = readHolodoriDbSource('kor', 'LangMusic_Kor.json');
const koreanTextById = new Map(koreanMusicText.map((row) => [row.data?.id ?? row.id, row.data?.text ?? row.text]));
const musicDifficultyMaster = readHolodoriDbSource('kor', 'MusicDifficulty.json');
const difficultyLevelByKey = new Map(musicDifficultyMaster.map((row) => {
const data = row.data ?? row;
@@ -266,7 +257,7 @@ async function worker() {
await writeFile(path.join(outputDirectory, fileName), JSON.stringify(output), 'utf8');
normalizedCharts.push({
songId: item.songId,
title: englishTextById.get(`la-music_title-${item.songId}`) ?? sourceEntry?.title ?? item.songId,
title: koreanTextById.get(musicById.get(item.songId)?.titleLangId ?? `la-music_title-${item.songId}`) ?? item.songId,
difficulty: item.difficulty.toLowerCase(),
difficultyLevel: difficultyLevelByKey.get(`${item.songId}::${item.difficulty.toLowerCase()}`) ??
(Number.isFinite(item.difficultyLevel) ? item.difficultyLevel : null),