2024-12-19 14:30:54 +01:00
|
|
|
import * as fs from 'node:fs';
|
|
|
|
import * as path from 'node:path';
|
|
|
|
import dotenv from 'dotenv';
|
2025-04-17 19:04:49 +02:00
|
|
|
import { callTolgee } from './utils/callTolgee';
|
|
|
|
import {
|
|
|
|
buildTree,
|
|
|
|
getEncounterGroupKey,
|
|
|
|
getEncounterKey,
|
|
|
|
writeEncounter,
|
|
|
|
writeEncounterStructure,
|
|
|
|
} from './utils/entities/encounter';
|
|
|
|
import { TolgeeKey, TolgeeTranslationsResponse } from './types';
|
|
|
|
import { writeQuest } from './utils/entities/quest';
|
|
|
|
import { writeBook } from './utils/entities/book';
|
|
|
|
import { writeSpeech } from './utils/entities/speech';
|
2024-12-19 14:30:54 +01:00
|
|
|
|
|
|
|
dotenv.config({ path: '.env' }).parsed;
|
|
|
|
|
|
|
|
(async () => {
|
|
|
|
const args = process.argv.slice(2);
|
2025-03-01 21:46:55 +01:00
|
|
|
const addonDir = path.join(process.cwd(), `../Addon/Data/${args[0]}`);
|
2024-12-19 14:30:54 +01:00
|
|
|
|
2025-04-17 19:04:49 +02:00
|
|
|
const addonData: TolgeeKey[][] = [];
|
2024-12-19 14:30:54 +01:00
|
|
|
let pageNumber = 0;
|
|
|
|
|
|
|
|
try {
|
|
|
|
// load all data from tolgee
|
|
|
|
while (true) {
|
|
|
|
const response = await callTolgee<TolgeeTranslationsResponse>('GET', `/translations`, {
|
|
|
|
filterTranslatedInLang: 'cs',
|
2025-03-01 21:46:55 +01:00
|
|
|
languages: 'cs,csf,en',
|
2025-04-17 19:04:49 +02:00
|
|
|
size: 1000,
|
2024-12-19 14:30:54 +01:00
|
|
|
page: pageNumber,
|
|
|
|
});
|
|
|
|
const translations = response.data?._embedded?.keys ?? [];
|
|
|
|
if (response.data?.page.totalPages > response.data?.page.number) {
|
2025-04-17 19:04:49 +02:00
|
|
|
addonData[pageNumber] = [];
|
2024-12-19 14:30:54 +01:00
|
|
|
for (const tolgeeKey of translations) {
|
2025-04-17 19:04:49 +02:00
|
|
|
addonData[pageNumber].push(tolgeeKey);
|
2024-12-19 14:30:54 +01:00
|
|
|
}
|
2025-04-17 19:04:49 +02:00
|
|
|
pageNumber++;
|
2024-12-19 14:30:54 +01:00
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-04-17 19:04:49 +02:00
|
|
|
const encounterKeys: Record<string, string[]> = {};
|
|
|
|
let fileIndex = 0;
|
2024-12-19 14:30:54 +01:00
|
|
|
|
2025-04-17 19:04:49 +02:00
|
|
|
addonData.forEach((chunk, index) => {
|
|
|
|
fileIndex = index;
|
|
|
|
const fileName = path.join(addonDir, `${fileIndex++}.lua`);
|
2024-12-19 14:30:54 +01:00
|
|
|
try {
|
|
|
|
fs.unlinkSync(fileName);
|
|
|
|
} catch (e) {}
|
2025-03-07 12:52:37 +01:00
|
|
|
fs.appendFileSync(fileName, 'local _, addon = ...\n', 'utf8');
|
2025-03-30 17:56:47 +02:00
|
|
|
|
2025-04-17 19:04:49 +02:00
|
|
|
for (const [, key] of Object.entries(chunk)) {
|
|
|
|
switch (key.keyNamespace) {
|
|
|
|
case 'quest':
|
|
|
|
fs.appendFileSync(fileName, writeQuest(key), 'utf8');
|
|
|
|
break;
|
|
|
|
case 'book':
|
|
|
|
fs.appendFileSync(fileName, writeBook(key), 'utf8');
|
|
|
|
break;
|
|
|
|
case 'speech':
|
|
|
|
fs.appendFileSync(fileName, writeSpeech(key), 'utf8');
|
|
|
|
break;
|
|
|
|
case 'encounter':
|
|
|
|
const groupId = getEncounterGroupKey(key);
|
|
|
|
encounterKeys[groupId] = encounterKeys[groupId] ?? [];
|
|
|
|
encounterKeys[groupId].push(getEncounterKey(key));
|
|
|
|
fs.appendFileSync(fileName, writeEncounter(key), 'utf8');
|
|
|
|
break;
|
2025-03-30 17:56:47 +02:00
|
|
|
}
|
2024-12-19 14:30:54 +01:00
|
|
|
}
|
|
|
|
});
|
2025-04-17 19:04:49 +02:00
|
|
|
|
|
|
|
const fileName = path.join(addonDir, `${fileIndex++}.lua`);
|
|
|
|
try {
|
|
|
|
fs.unlinkSync(fileName);
|
|
|
|
} catch (e) {}
|
|
|
|
fs.appendFileSync(fileName, 'local _, addon = ...\n', 'utf8');
|
|
|
|
Object.entries(encounterKeys).forEach(([key, encounterKeys]) => {
|
|
|
|
const structure = buildTree(encounterKeys);
|
|
|
|
fs.appendFileSync(fileName, writeEncounterStructure(key, structure), 'utf8');
|
|
|
|
});
|
2024-12-19 14:30:54 +01:00
|
|
|
} catch (e) {
|
|
|
|
throw e;
|
|
|
|
}
|
|
|
|
})();
|