Move tolgee downloader into this repository and refactor translation storage architecture
This commit is contained in:
parent
c052c438eb
commit
990f75d9ba
95 changed files with 80964 additions and 43454 deletions
9
downloader/.prettierrc
Normal file
9
downloader/.prettierrc
Normal file
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"useTabs": true,
|
||||
"tabWidth": 2,
|
||||
"semi": true,
|
||||
"singleQuote": true,
|
||||
"parser": "typescript",
|
||||
"printWidth": 120,
|
||||
"bracketSameLine": true
|
||||
}
|
221
downloader/index.ts
Normal file
221
downloader/index.ts
Normal file
|
@ -0,0 +1,221 @@
|
|||
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 prepareLuaWithFemaleVersion = (quest: Quest, type: keyof Quest, key: string) => {
|
||||
let text = '';
|
||||
const value = quest[type] as string;
|
||||
text += '\t' + key + 'Male = "' + (value?.[0]?.replace(/\n/g, '\\n') ?? '').replace(/"/g, "'") + '", \n';
|
||||
text += '\t' + key + 'Female = "' + (value?.[1]?.replace(/\n/g, '\\n') ?? '').replace(/"/g, "'") + '", \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;
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const args = process.argv.slice(2);
|
||||
const addonDir = path.join(process.cwd(), `../Quests/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',
|
||||
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.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,
|
||||
],
|
||||
}),
|
||||
name: tolgeeKey.keyDescription,
|
||||
id: tolgeeKey.keyName.replace('q', '').replace('i', ''),
|
||||
questItem: 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) {}
|
||||
for (const [, czechQuest] of Object.entries(chunk)) {
|
||||
// prepare variables
|
||||
let variableTable = 'quest';
|
||||
let variableId = czechQuest.id;
|
||||
|
||||
// if quest is quest item witch pages, store it inside item table
|
||||
if (czechQuest.questItem) {
|
||||
variableTable = 'item';
|
||||
const page = czechQuest.id.split('_page')?.[1] ?? null;
|
||||
variableId = `"${czechQuest.name}${page ? `__${page}` : ''}"`;
|
||||
}
|
||||
|
||||
let luaQuestRecord = '';
|
||||
luaQuestRecord += `CzechQuestsAddon.data.${variableTable}[${variableId}] = {\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');
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
})();
|
||||
|
||||
type AddonData = Record<string, Quest>;
|
||||
|
||||
type Quest = {
|
||||
id: string;
|
||||
name: string;
|
||||
names?: (string | null)[];
|
||||
description?: string;
|
||||
descriptions?: (string | null)[];
|
||||
progress?: string;
|
||||
progresses?: (string | null)[];
|
||||
completion?: string;
|
||||
completions?: (string | null)[];
|
||||
objective?: string;
|
||||
objectives?: (string | null)[];
|
||||
questItem: 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
downloader/package.json
Normal file
19
downloader/package.json
Normal 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
|
||||
}
|
258
downloader/pnpm-lock.yaml
generated
Normal file
258
downloader/pnpm-lock.yaml
generated
Normal file
|
@ -0,0 +1,258 @@
|
|||
lockfileVersion: '9.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
importers:
|
||||
|
||||
.:
|
||||
dependencies:
|
||||
axios:
|
||||
specifier: ^1.7.2
|
||||
version: 1.7.9
|
||||
dotenv:
|
||||
specifier: ^16.4.5
|
||||
version: 16.4.7
|
||||
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'}
|
||||
|
||||
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'}
|
||||
|
||||
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==}
|
||||
|
||||
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==}
|
||||
|
||||
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: {}
|
||||
|
||||
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
|
||||
|
||||
prettier@3.2.5: {}
|
||||
|
||||
proxy-from-env@1.1.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: {}
|
||||
|
||||
yn@3.1.1: {}
|
12
downloader/tsconfig.json
Normal file
12
downloader/tsconfig.json
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2015",
|
||||
"downlevelIteration": true,
|
||||
"module": "commonjs",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
},
|
||||
"exclude": ["node_modules"]
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue