addon/.support/index.ts

92 lines
2.6 KiB
TypeScript
Raw Normal View History

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<TolgeeTranslationsResponse>('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<string, string[]> = {};
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;
}
})();