Move support files into own folder

This commit is contained in:
Roman Jaroš 2025-03-09 09:02:31 +01:00
parent c8fc9f08ef
commit 63563bc2e9
7 changed files with 5 additions and 4 deletions

9
.support/.prettierrc Normal file
View file

@ -0,0 +1,9 @@
{
"useTabs": true,
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"parser": "typescript",
"printWidth": 120,
"bracketSameLine": true
}

262
.support/index.ts Normal file
View file

@ -0,0 +1,262 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
import axios from 'axios';
import dotenv from 'dotenv';
dotenv.config({ path: '.env' }).parsed;
const normalizeTranslation = (translation: string | null | undefined) => {
if (translation == null) {
return '';
}
return translation.replace(/\n/g, '\\n').replace(/"/g, "'");
};
const prepareLuaWithFemaleVersion = (quest: Quest, type: keyof Quest, key: string) => {
let text = '';
const value = quest[type] as string;
const normalizedMaleValue = normalizeTranslation(value?.[0]);
const normalizedFemaleValue = normalizeTranslation(value?.[1]);
if (normalizedMaleValue != '') {
text += '\t' + key + 'Male = "' + normalizedMaleValue + '", \n';
}
if (normalizedFemaleValue != '') {
text += '\t' + key + 'Female = "' + normalizedFemaleValue + '", \n';
}
return text;
};
const callTolgee = async <R>(
method: 'GET' | 'POST' | 'PUT' | 'DELETE' = 'GET',
path: string,
params?: any,
data?: any,
) => {
const args = process.argv.slice(2);
const projectId = args[1];
try {
return await axios<R>(`https://translate.romanjaros.local/v2/projects/${projectId}${path}`, {
method,
data,
params,
headers: {
'X-API-KEY': process.env.TOLGEE_PAT as string,
},
});
} catch (e) {
throw e;
}
};
function makeChunks(input: AddonData, chunkSize: number = 1000) {
const keys = Object.keys(input);
const result = [];
for (let i = 0; i < keys.length; i += chunkSize) {
const chunk = keys.slice(i, i + chunkSize).reduce((acc: AddonData, key) => {
acc[key] = input[key];
return acc;
}, {});
result.push(chunk);
}
return result;
}
const splitFirst = (text: string, delimiter: string) => {
const index = text.indexOf(delimiter);
if (index === -1) return text;
return text.slice(index + delimiter.length);
};
(async () => {
const args = process.argv.slice(2);
const addonDir = path.join(process.cwd(), `../Addon/Data/${args[0]}`);
const addonData: Record<string, Quest> = {};
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: 2000,
page: pageNumber,
});
const translations = response.data?._embedded?.keys ?? [];
if (response.data?.page.totalPages > response.data?.page.number) {
pageNumber++;
// for each page from tolgee
for (const tolgeeKey of translations) {
addonData[tolgeeKey.keyName] = {
...addonData[tolgeeKey.keyName],
...(tolgeeKey.keyNamespace === 'name' && {
names: [
tolgeeKey.translations.cs.text,
tolgeeKey.translations.cs.text === tolgeeKey.translations.csf.text
? null
: tolgeeKey.translations.csf.text,
],
}),
...(tolgeeKey.keyNamespace === 'objective' && {
objectives: [
tolgeeKey.translations.cs.text,
tolgeeKey.translations.cs.text === tolgeeKey.translations.csf.text
? null
: tolgeeKey.translations.csf.text,
],
}),
...(tolgeeKey.keyNamespace === 'description' && {
descriptions: [
tolgeeKey.translations.cs.text,
tolgeeKey.translations.cs.text === tolgeeKey.translations.csf.text
? null
: tolgeeKey.translations.csf.text,
tolgeeKey.translations.en.text,
],
}),
...(tolgeeKey.keyNamespace === 'progress' && {
progresses: [
tolgeeKey.translations.cs.text,
tolgeeKey.translations.cs.text === tolgeeKey.translations.csf.text
? null
: tolgeeKey.translations.csf.text,
],
}),
...(tolgeeKey.keyNamespace === 'completion' && {
completions: [
tolgeeKey.translations.cs.text,
tolgeeKey.translations.cs.text === tolgeeKey.translations.csf.text
? null
: tolgeeKey.translations.csf.text,
],
}),
...(tolgeeKey.keyNamespace === 'speech' && {
speeches: [
tolgeeKey.translations.cs.text,
tolgeeKey.translations.cs.text === tolgeeKey.translations.csf.text
? null
: tolgeeKey.translations.csf.text,
tolgeeKey.translations.en.text,
],
}),
name: tolgeeKey.keyDescription,
id: tolgeeKey.keyName.replace('q', '').replace('i', ''),
isQuest: tolgeeKey.keyName.startsWith('q'),
isQuestItem: tolgeeKey.keyName.startsWith('i'),
};
}
} else {
break;
}
}
// split into chunks
const chunks = makeChunks(addonData);
// build addon file
chunks.forEach((chunk, index) => {
const fileName = path.join(addonDir, `${index++}.lua`);
try {
fs.unlinkSync(fileName);
} catch (e) {}
fs.appendFileSync(fileName, 'local _, addon = ...\n', 'utf8');
for (const [, czechQuest] of Object.entries(chunk)) {
// prepare variables
if (czechQuest.isQuest) {
let luaQuestRecord = '';
luaQuestRecord += `addon.data.quest[${czechQuest.id}] = {\n`;
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'names', 'title');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'objectives', 'objective');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'descriptions', 'description');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'progresses', 'progress');
luaQuestRecord += prepareLuaWithFemaleVersion(czechQuest, 'completions', 'completion');
luaQuestRecord += `}\n`;
fs.appendFileSync(fileName, luaQuestRecord, 'utf8');
}
if (czechQuest.isQuestItem) {
const page = czechQuest.id.split('_page')?.[1] ?? null;
const variableId = `"${czechQuest.name}${page ? `__${page}` : ''}"`;
let luaQuestRecord = '';
luaQuestRecord += `addon.data.item[${variableId}] = {\n`;
luaQuestRecord += '\ttitle = "' + normalizeTranslation(czechQuest.name) + '", \n';
luaQuestRecord += '\ttext = "' + normalizeTranslation(czechQuest.descriptions?.[0]) + '", \n';
luaQuestRecord += `}\n`;
fs.appendFileSync(fileName, luaQuestRecord, 'utf8');
}
if (czechQuest.speeches) {
let luaQuestRecord = '';
const key = splitFirst(normalizeTranslation(czechQuest.speeches?.[2]) ?? '', ':').trim();
luaQuestRecord += `addon.data.speech["${key}"] = {\n`;
luaQuestRecord += '\ttext = "' + normalizeTranslation(czechQuest.speeches?.[0]).trim() + '", \n';
luaQuestRecord += `}\n`;
fs.appendFileSync(fileName, luaQuestRecord, 'utf8');
}
}
});
} catch (e) {
throw e;
}
})();
type AddonData = Record<string, Quest>;
type Quest = {
id: string;
name: string;
names?: (string | null)[];
descriptions?: (string | null)[];
progresses?: (string | null)[];
completions?: (string | null)[];
objectives?: (string | null)[];
speeches?: (string | null)[];
isQuest: boolean;
isQuestItem: boolean;
};
type TolgeeKeysData = {
keyId: number;
keyName: string;
keyNamespace: string;
keyDescription: string;
keyTags: TolgeeTag[];
translations: {
en: {
id: number;
text: string;
state: 'REVIEWED' | 'TRANSLATED';
};
cs: {
id: number;
text: string | null;
state: 'REVIEWED' | 'TRANSLATED';
};
csf: {
id: number;
text: string | null;
state: 'REVIEWED' | 'TRANSLATED';
};
};
};
type TolgeeTag = {
name: string;
};
type TolgeeTranslationsResponse = {
_embedded: {
keys: TolgeeKeysData[];
};
page: {
size: number;
totalElements: number;
totalPages: number;
number: number;
};
};

19
.support/package.json Normal file
View file

@ -0,0 +1,19 @@
{
"name": "tolgee_downloader",
"version": "1.0.0",
"description": "",
"scripts": {
"classic_era": "ts-node index.ts classic_era 6",
"retail": "ts-node index.ts retail 7"
},
"dependencies": {
"axios": "^1.7.2",
"dotenv": "^16.4.5",
"typescript": "5.4.2"
},
"devDependencies": {
"prettier": "3.2.5",
"ts-node": "10.9.2"
},
"private": true
}

377
.support/pnpm-lock.yaml generated Normal file
View file

@ -0,0 +1,377 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
dependencies:
axios:
specifier: ^1.7.2
version: 1.7.9
diff:
specifier: ^7.0.0
version: 7.0.0
dotenv:
specifier: ^16.4.5
version: 16.4.7
pg:
specifier: ^8.13.3
version: 8.13.3
typescript:
specifier: 5.4.2
version: 5.4.2
devDependencies:
prettier:
specifier: 3.2.5
version: 3.2.5
ts-node:
specifier: 10.9.2
version: 10.9.2(@types/node@22.10.2)(typescript@5.4.2)
packages:
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@tsconfig/node10@1.0.11':
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
'@tsconfig/node12@1.0.11':
resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
'@tsconfig/node14@1.0.3':
resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
'@tsconfig/node16@1.0.4':
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
'@types/node@22.10.2':
resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==}
acorn-walk@8.3.4:
resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
engines: {node: '>=0.4.0'}
acorn@8.14.0:
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
engines: {node: '>=0.4.0'}
hasBin: true
arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
axios@1.7.9:
resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==}
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
create-require@1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
diff@4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
diff@7.0.0:
resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==}
engines: {node: '>=0.3.1'}
dotenv@16.4.7:
resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
engines: {node: '>=12'}
follow-redirects@1.15.9:
resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
debug:
optional: true
form-data@4.0.1:
resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
engines: {node: '>= 6'}
make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
pg-cloudflare@1.1.1:
resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==}
pg-connection-string@2.7.0:
resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==}
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
pg-pool@3.7.1:
resolution: {integrity: sha512-xIOsFoh7Vdhojas6q3596mXFsR8nwBQBXX5JiV7p9buEVAGqYL4yFzclON5P9vFrpu1u7Zwl2oriyDa89n0wbw==}
peerDependencies:
pg: '>=8.0'
pg-protocol@1.7.1:
resolution: {integrity: sha512-gjTHWGYWsEgy9MsY0Gp6ZJxV24IjDqdpTW7Eh0x+WfJLFsm/TJx1MzL6T0D88mBvkpxotCQ6TwW6N+Kko7lhgQ==}
pg-types@2.2.0:
resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
engines: {node: '>=4'}
pg@8.13.3:
resolution: {integrity: sha512-P6tPt9jXbL9HVu/SSRERNYaYG++MjnscnegFh9pPHihfoBSujsrka0hyuymMzeJKFWrcG8wvCKy8rCe8e5nDUQ==}
engines: {node: '>= 8.0.0'}
peerDependencies:
pg-native: '>=3.0.1'
peerDependenciesMeta:
pg-native:
optional: true
pgpass@1.0.5:
resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==}
postgres-array@2.0.0:
resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
engines: {node: '>=4'}
postgres-bytea@1.0.0:
resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
engines: {node: '>=0.10.0'}
postgres-date@1.0.7:
resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
engines: {node: '>=0.10.0'}
postgres-interval@1.2.0:
resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
engines: {node: '>=0.10.0'}
prettier@3.2.5:
resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
engines: {node: '>=14'}
hasBin: true
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
split2@4.2.0:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
ts-node@10.9.2:
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
peerDependencies:
'@swc/core': '>=1.2.50'
'@swc/wasm': '>=1.2.50'
'@types/node': '*'
typescript: '>=2.7'
peerDependenciesMeta:
'@swc/core':
optional: true
'@swc/wasm':
optional: true
typescript@5.4.2:
resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==}
engines: {node: '>=14.17'}
hasBin: true
undici-types@6.20.0:
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
yn@3.1.1:
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
engines: {node: '>=6'}
snapshots:
'@cspotcode/source-map-support@0.8.1':
dependencies:
'@jridgewell/trace-mapping': 0.3.9
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/sourcemap-codec@1.5.0': {}
'@jridgewell/trace-mapping@0.3.9':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
'@tsconfig/node10@1.0.11': {}
'@tsconfig/node12@1.0.11': {}
'@tsconfig/node14@1.0.3': {}
'@tsconfig/node16@1.0.4': {}
'@types/node@22.10.2':
dependencies:
undici-types: 6.20.0
acorn-walk@8.3.4:
dependencies:
acorn: 8.14.0
acorn@8.14.0: {}
arg@4.1.3: {}
asynckit@0.4.0: {}
axios@1.7.9:
dependencies:
follow-redirects: 1.15.9
form-data: 4.0.1
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
create-require@1.1.1: {}
delayed-stream@1.0.0: {}
diff@4.0.2: {}
diff@7.0.0: {}
dotenv@16.4.7: {}
follow-redirects@1.15.9: {}
form-data@4.0.1:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
mime-types: 2.1.35
make-error@1.3.6: {}
mime-db@1.52.0: {}
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
pg-cloudflare@1.1.1:
optional: true
pg-connection-string@2.7.0: {}
pg-int8@1.0.1: {}
pg-pool@3.7.1(pg@8.13.3):
dependencies:
pg: 8.13.3
pg-protocol@1.7.1: {}
pg-types@2.2.0:
dependencies:
pg-int8: 1.0.1
postgres-array: 2.0.0
postgres-bytea: 1.0.0
postgres-date: 1.0.7
postgres-interval: 1.2.0
pg@8.13.3:
dependencies:
pg-connection-string: 2.7.0
pg-pool: 3.7.1(pg@8.13.3)
pg-protocol: 1.7.1
pg-types: 2.2.0
pgpass: 1.0.5
optionalDependencies:
pg-cloudflare: 1.1.1
pgpass@1.0.5:
dependencies:
split2: 4.2.0
postgres-array@2.0.0: {}
postgres-bytea@1.0.0: {}
postgres-date@1.0.7: {}
postgres-interval@1.2.0:
dependencies:
xtend: 4.0.2
prettier@3.2.5: {}
proxy-from-env@1.1.0: {}
split2@4.2.0: {}
ts-node@10.9.2(@types/node@22.10.2)(typescript@5.4.2):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 22.10.2
acorn: 8.14.0
acorn-walk: 8.3.4
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 5.4.2
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
typescript@5.4.2: {}
undici-types@6.20.0: {}
v8-compile-cache-lib@3.0.1: {}
xtend@4.0.2: {}
yn@3.1.1: {}

21
.support/sync.sh Normal file
View file

@ -0,0 +1,21 @@
#!/bin/bash
#wow_source_folder="retail"
#wow_destiny_folder="retail"
#wow_source_folder="beta"
#wow_destiny_folder="retail"
wow_source_folder="classic_era"
wow_destiny_folder="classic_era"
src_folder="."
dest_folder="/Applications/World of Warcraft/_${wow_destiny_folder}_/Interface/AddOns/CzechQuests"
fswatch -o "$src_folder" | while read -r change; do
rsync -avu --delete "$src_folder" "$dest_folder" --exclude={'.*','*.png','*.sh','*.md','Addon/Data/**',"lib/**","Jenkinsfile"}
rsync -au --delete "$src_folder/Addon/Data/$wow_source_folder/" "$dest_folder/Addon/Data/"
echo "Dest: $dest_folder"
cp "$src_folder/Addon/Data/other.lua" "$dest_folder/Addon/Data/"
done

12
.support/tsconfig.json Normal file
View file

@ -0,0 +1,12 @@
{
"compilerOptions": {
"target": "es2015",
"downlevelIteration": true,
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
},
"exclude": ["node_modules"]
}