import * as fs from 'node:fs'; import * as path from 'node:path'; import dotenv from 'dotenv'; 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'; dotenv.config({ path: '.env' }).parsed; (async () => { const args = process.argv.slice(2); const addonDir = path.join(process.cwd(), `../Addon/Data/${args[0]}`); const addonData: TolgeeKey[][] = []; let pageNumber = 0; try { // load all data from tolgee while (true) { const response = await callTolgee('GET', `/translations`, { filterTranslatedInLang: 'cs', languages: 'cs,csf,en', size: 1000, page: pageNumber, }); const translations = response.data?._embedded?.keys ?? []; if (response.data?.page.totalPages > response.data?.page.number) { addonData[pageNumber] = []; for (const tolgeeKey of translations) { addonData[pageNumber].push(tolgeeKey); } pageNumber++; } else { break; } } const encounterKeys: Record = {}; let fileIndex = 0; addonData.forEach((chunk, index) => { fileIndex = index; const fileName = path.join(addonDir, `${fileIndex++}.lua`); try { fs.unlinkSync(fileName); } catch (e) {} fs.appendFileSync(fileName, 'local _, addon = ...\n', 'utf8'); 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; } } }); 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'); }); } catch (e) { throw e; } })();