@yxw007/translate 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -2
- package/README_zh-CN.md +15 -1
- package/dist/browser/index.cjs +242 -11
- package/dist/browser/index.esm.js +237 -12
- package/dist/browser/index.esm.min.js +1 -2
- package/dist/browser/index.min.cjs +1 -2
- package/dist/browser/index.umd.js +242 -11
- package/dist/browser/index.umd.min.js +1 -2
- package/dist/index.d.ts +2957 -19
- package/dist/node/index.cjs +242 -11
- package/dist/node/index.js +237 -12
- package/dist/node/index.min.cjs +1 -0
- package/dist/node/index.min.js +1 -0
- package/dist/package.json +4 -2
- package/package.json +4 -2
- package/dist/browser/index.cjs.map +0 -1
- package/dist/browser/index.esm.js.map +0 -1
- package/dist/browser/index.esm.min.js.map +0 -1
- package/dist/browser/index.min.cjs.map +0 -1
- package/dist/browser/index.umd.js.map +0 -1
- package/dist/browser/index.umd.min.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/node/index.cjs.map +0 -1
- package/dist/node/index.js.map +0 -1
package/dist/node/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// translate v0.
|
|
1
|
+
// translate v0.4.1 Copyright (c) 2025 Potter<aa4790139@gmail.com> and contributors
|
|
2
2
|
import 'fs/promises';
|
|
3
3
|
import 'fs';
|
|
4
4
|
import 'path';
|
|
@@ -13,6 +13,14 @@ class TranslationError extends Error {
|
|
|
13
13
|
Error.captureStackTrace(this, this.constructor);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
+
class CheckLanguageError extends Error {
|
|
17
|
+
region;
|
|
18
|
+
constructor(region, message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.region = region;
|
|
21
|
+
Error.captureStackTrace(this, this.constructor);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
16
24
|
const OPEN_AI_MODELS = [
|
|
17
25
|
"o1-preview",
|
|
18
26
|
"o1-preview-2024-09-12",
|
|
@@ -227,6 +235,22 @@ function google(options) {
|
|
|
227
235
|
}
|
|
228
236
|
return translations;
|
|
229
237
|
},
|
|
238
|
+
async checkLanguage(text) {
|
|
239
|
+
const url = `${base}?client=gtx&sl=auto&tl=en&dt=t&q=${encodeURI(text)}`;
|
|
240
|
+
const res = await fetch(url);
|
|
241
|
+
if (!res.ok) {
|
|
242
|
+
throw await throwResponseError(this.name, res);
|
|
243
|
+
}
|
|
244
|
+
const body = await res.json();
|
|
245
|
+
if (!body || body.length < 3) {
|
|
246
|
+
throw new CheckLanguageError(this.name, "Check language fail! No result returned");
|
|
247
|
+
}
|
|
248
|
+
const detectedLanguage = body[2];
|
|
249
|
+
if (!detectedLanguage) {
|
|
250
|
+
throw new CheckLanguageError(this.name, "Check language fail! Language not detected");
|
|
251
|
+
}
|
|
252
|
+
return detectedLanguage;
|
|
253
|
+
},
|
|
230
254
|
};
|
|
231
255
|
}
|
|
232
256
|
|
|
@@ -266,7 +290,7 @@ function azure$1(options) {
|
|
|
266
290
|
}
|
|
267
291
|
const bodyRes = await res.json();
|
|
268
292
|
if (bodyRes.error) {
|
|
269
|
-
throw new TranslationError(this.name, `Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);
|
|
293
|
+
throw new TranslationError(this.name, `Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);
|
|
270
294
|
}
|
|
271
295
|
const body = bodyRes;
|
|
272
296
|
if (!body || body.length === 0) {
|
|
@@ -281,6 +305,34 @@ function azure$1(options) {
|
|
|
281
305
|
}
|
|
282
306
|
return translations;
|
|
283
307
|
},
|
|
308
|
+
async checkLanguage(text) {
|
|
309
|
+
checkOptions();
|
|
310
|
+
const url = `${base}&to=en`;
|
|
311
|
+
const res = await fetch(url, {
|
|
312
|
+
method: "POST",
|
|
313
|
+
headers: {
|
|
314
|
+
"Content-Type": "application/json; charset=UTF-8",
|
|
315
|
+
"Ocp-Apim-Subscription-Key": key,
|
|
316
|
+
"Ocp-Apim-Subscription-Region": region,
|
|
317
|
+
},
|
|
318
|
+
body: JSON.stringify([{ Text: text }]),
|
|
319
|
+
});
|
|
320
|
+
if (!res.ok) {
|
|
321
|
+
throw await throwResponseError(this.name, res);
|
|
322
|
+
}
|
|
323
|
+
const bodyRes = await res.json();
|
|
324
|
+
if (bodyRes.error) {
|
|
325
|
+
throw new CheckLanguageError(this.name, `checkLanguage fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);
|
|
326
|
+
}
|
|
327
|
+
if (!bodyRes || !Array.isArray(bodyRes) || bodyRes.length === 0) {
|
|
328
|
+
throw new CheckLanguageError(this.name, "Check language fail! No result returned");
|
|
329
|
+
}
|
|
330
|
+
const detectedLanguage = bodyRes[0]?.detectedLanguage?.language;
|
|
331
|
+
if (!detectedLanguage) {
|
|
332
|
+
throw new CheckLanguageError(this.name, "Check language fail! Language not detected");
|
|
333
|
+
}
|
|
334
|
+
return detectedLanguage;
|
|
335
|
+
},
|
|
284
336
|
};
|
|
285
337
|
}
|
|
286
338
|
|
|
@@ -315,6 +367,28 @@ function amazon$1(options) {
|
|
|
315
367
|
}
|
|
316
368
|
return translations;
|
|
317
369
|
},
|
|
370
|
+
async checkLanguage(text) {
|
|
371
|
+
checkOptions();
|
|
372
|
+
const translateClient = new TranslateClient({
|
|
373
|
+
region: region,
|
|
374
|
+
credentials: { accessKeyId, secretAccessKey },
|
|
375
|
+
});
|
|
376
|
+
const command = new TranslateTextCommand({
|
|
377
|
+
SourceLanguageCode: "auto",
|
|
378
|
+
TargetLanguageCode: "en",
|
|
379
|
+
Text: text,
|
|
380
|
+
});
|
|
381
|
+
try {
|
|
382
|
+
const response = await translateClient.send(command);
|
|
383
|
+
if (!response.SourceLanguageCode) {
|
|
384
|
+
throw new TranslationError(name, "Check language fail! Source language not detected");
|
|
385
|
+
}
|
|
386
|
+
return response.SourceLanguageCode;
|
|
387
|
+
}
|
|
388
|
+
catch (error) {
|
|
389
|
+
throw new TranslationError(name, `Check language fail! ${error.message || error}`);
|
|
390
|
+
}
|
|
391
|
+
},
|
|
318
392
|
};
|
|
319
393
|
}
|
|
320
394
|
|
|
@@ -1407,7 +1481,7 @@ function requireCore () {
|
|
|
1407
1481
|
var md5Exports = md5$1.exports;
|
|
1408
1482
|
var md5 = /*@__PURE__*/getDefaultExportFromCjs(md5Exports);
|
|
1409
1483
|
|
|
1410
|
-
function baidu$
|
|
1484
|
+
function baidu$2(options) {
|
|
1411
1485
|
const { appId, secretKey } = options;
|
|
1412
1486
|
const url = "https://fanyi-api.baidu.com/api/trans/vip/fieldtranslate";
|
|
1413
1487
|
const name = "baidu";
|
|
@@ -1448,7 +1522,7 @@ function baidu$1(options) {
|
|
|
1448
1522
|
}
|
|
1449
1523
|
const data = await res.json();
|
|
1450
1524
|
if (!data || data.error_code || !data.trans_result || data.trans_result.length === 0) {
|
|
1451
|
-
throw new TranslationError(this.name, `Translate fail ! error_code:${data.error_code}, error_msg: ${data.error_msg}`);
|
|
1525
|
+
throw new TranslationError(this.name, `Translate fail ! error_code:${data.error_code}, error_msg: ${data.error_msg} \n Go to https://fanyi-api.baidu.com/product/123 view details`);
|
|
1452
1526
|
}
|
|
1453
1527
|
const translations = [];
|
|
1454
1528
|
for (const translation of data.trans_result) {
|
|
@@ -1458,6 +1532,31 @@ function baidu$1(options) {
|
|
|
1458
1532
|
}
|
|
1459
1533
|
return translations;
|
|
1460
1534
|
},
|
|
1535
|
+
async checkLanguage(text) {
|
|
1536
|
+
checkOptions();
|
|
1537
|
+
const salt = Date.now();
|
|
1538
|
+
const sign = md5(`${appId}${text}${salt}${secretKey}`).toString();
|
|
1539
|
+
const body = new URLSearchParams();
|
|
1540
|
+
body.append("q", text);
|
|
1541
|
+
body.append("appid", appId);
|
|
1542
|
+
body.append("salt", salt.toString());
|
|
1543
|
+
body.append("sign", sign);
|
|
1544
|
+
const res = await fetch("https://fanyi-api.baidu.com/api/trans/vip/language", {
|
|
1545
|
+
method: "POST",
|
|
1546
|
+
headers: {
|
|
1547
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
1548
|
+
},
|
|
1549
|
+
body: body.toString(),
|
|
1550
|
+
});
|
|
1551
|
+
if (!res.ok) {
|
|
1552
|
+
throw await throwResponseError(this.name, res);
|
|
1553
|
+
}
|
|
1554
|
+
const response = await res.json();
|
|
1555
|
+
if (!response || response.error_code != 0) {
|
|
1556
|
+
throw new CheckLanguageError(this.name, `Check language fail ! error_code:${response.error_code}, error_msg: ${response.error_msg} \n Go to https://fanyi-api.baidu.com/product/143 view details`);
|
|
1557
|
+
}
|
|
1558
|
+
return response.data.src;
|
|
1559
|
+
},
|
|
1461
1560
|
};
|
|
1462
1561
|
}
|
|
1463
1562
|
|
|
@@ -1508,6 +1607,39 @@ function deepl$2(options) {
|
|
|
1508
1607
|
const translations = body.map((t) => t.text);
|
|
1509
1608
|
return translations;
|
|
1510
1609
|
},
|
|
1610
|
+
async checkLanguage(text) {
|
|
1611
|
+
checkOptions();
|
|
1612
|
+
const res = await fetch(url, {
|
|
1613
|
+
method: "POST",
|
|
1614
|
+
headers: {
|
|
1615
|
+
"Content-Type": "application/json; charset=UTF-8",
|
|
1616
|
+
Authorization: `DeepL-Auth-Key ${key}`,
|
|
1617
|
+
Accept: "*/*",
|
|
1618
|
+
Host: "api-free.deepl.com",
|
|
1619
|
+
Connection: "keep-alive",
|
|
1620
|
+
},
|
|
1621
|
+
body: JSON.stringify({
|
|
1622
|
+
text: [text],
|
|
1623
|
+
target_lang: "EN",
|
|
1624
|
+
}),
|
|
1625
|
+
});
|
|
1626
|
+
if (!res.ok) {
|
|
1627
|
+
throw await throwResponseError(this.name, res);
|
|
1628
|
+
}
|
|
1629
|
+
const bodyRes = await res.json();
|
|
1630
|
+
if (bodyRes.error) {
|
|
1631
|
+
throw new CheckLanguageError(this.name, `Check language fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);
|
|
1632
|
+
}
|
|
1633
|
+
const body = bodyRes.translations;
|
|
1634
|
+
if (!body || body.length === 0) {
|
|
1635
|
+
throw new CheckLanguageError(this.name, "Check language fail! No result returned");
|
|
1636
|
+
}
|
|
1637
|
+
const detectedLanguage = body[0].detected_source_language;
|
|
1638
|
+
if (!detectedLanguage) {
|
|
1639
|
+
throw new CheckLanguageError(this.name, "Check language fail! Language not detected");
|
|
1640
|
+
}
|
|
1641
|
+
return detectedLanguage;
|
|
1642
|
+
},
|
|
1511
1643
|
};
|
|
1512
1644
|
}
|
|
1513
1645
|
|
|
@@ -1690,7 +1822,7 @@ function tencent$2(options) {
|
|
|
1690
1822
|
}
|
|
1691
1823
|
const data = await res.json();
|
|
1692
1824
|
if (data.Response?.Error) {
|
|
1693
|
-
throw new TranslationError(name, `Tencent translate fail: ${data.Response.Error.Code}, ${data.Response.Error.Message}`);
|
|
1825
|
+
throw new TranslationError(name, `Tencent translate fail: ${data.Response.Error.Code}, ${data.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);
|
|
1694
1826
|
}
|
|
1695
1827
|
const translatedResults = data.Response?.TargetText.split("\n") ?? [];
|
|
1696
1828
|
if (!Array.isArray(translatedResults) || translatedResults.length === 0) {
|
|
@@ -1704,6 +1836,51 @@ function tencent$2(options) {
|
|
|
1704
1836
|
throw new TranslationError(name, `Translation failed: ${error}`);
|
|
1705
1837
|
}
|
|
1706
1838
|
},
|
|
1839
|
+
async checkLanguage(text) {
|
|
1840
|
+
checkOptions();
|
|
1841
|
+
const payloadObj = {
|
|
1842
|
+
SourceText: text,
|
|
1843
|
+
Source: "auto",
|
|
1844
|
+
Target: "en",
|
|
1845
|
+
ProjectId: 0,
|
|
1846
|
+
};
|
|
1847
|
+
const payload = JSON.stringify(payloadObj);
|
|
1848
|
+
const headers = buildAuthorization({
|
|
1849
|
+
secretId,
|
|
1850
|
+
secretKey,
|
|
1851
|
+
service,
|
|
1852
|
+
host,
|
|
1853
|
+
payload,
|
|
1854
|
+
httpRequestMethod: "POST",
|
|
1855
|
+
action,
|
|
1856
|
+
apiVersion,
|
|
1857
|
+
region,
|
|
1858
|
+
});
|
|
1859
|
+
try {
|
|
1860
|
+
const res = await fetch(endpoint, {
|
|
1861
|
+
method: "POST",
|
|
1862
|
+
headers,
|
|
1863
|
+
body: payload,
|
|
1864
|
+
});
|
|
1865
|
+
if (!res.ok) {
|
|
1866
|
+
throw new CheckLanguageError(name, `HTTP ${res.status}: ${await res.text()}`);
|
|
1867
|
+
}
|
|
1868
|
+
const data = await res.json();
|
|
1869
|
+
if (data.Response?.Error) {
|
|
1870
|
+
throw new CheckLanguageError(name, `Tencent language detect fail: ${data.Response.Error.Code}, ${data.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);
|
|
1871
|
+
}
|
|
1872
|
+
const detectedLanguage = data.Response?.Source;
|
|
1873
|
+
if (!detectedLanguage) {
|
|
1874
|
+
throw new CheckLanguageError(name, "Language detect fail! No result returned");
|
|
1875
|
+
}
|
|
1876
|
+
return detectedLanguage;
|
|
1877
|
+
}
|
|
1878
|
+
catch (error) {
|
|
1879
|
+
if (error instanceof CheckLanguageError)
|
|
1880
|
+
throw error;
|
|
1881
|
+
throw new CheckLanguageError(name, `Language detection failed: ${error}`);
|
|
1882
|
+
}
|
|
1883
|
+
},
|
|
1707
1884
|
};
|
|
1708
1885
|
}
|
|
1709
1886
|
|
|
@@ -1711,7 +1888,7 @@ const engines = {
|
|
|
1711
1888
|
google,
|
|
1712
1889
|
azure: azure$1,
|
|
1713
1890
|
amazon: amazon$1,
|
|
1714
|
-
baidu: baidu$
|
|
1891
|
+
baidu: baidu$2,
|
|
1715
1892
|
deepl: deepl$2,
|
|
1716
1893
|
openai: openai$1,
|
|
1717
1894
|
tencent: tencent$2,
|
|
@@ -2101,7 +2278,7 @@ var openai = {
|
|
|
2101
2278
|
Zulu: "zu",
|
|
2102
2279
|
};
|
|
2103
2280
|
|
|
2104
|
-
var baidu = {
|
|
2281
|
+
var baidu$1 = {
|
|
2105
2282
|
Achinese: "ach",
|
|
2106
2283
|
Afrikaans: "afr",
|
|
2107
2284
|
Akan: "aka",
|
|
@@ -2451,7 +2628,7 @@ var amazon = {
|
|
|
2451
2628
|
const originLanguages = {
|
|
2452
2629
|
azure: azure,
|
|
2453
2630
|
google: openai,
|
|
2454
|
-
baidu: baidu,
|
|
2631
|
+
baidu: baidu$1,
|
|
2455
2632
|
deepl: deepl$1,
|
|
2456
2633
|
amazon: amazon,
|
|
2457
2634
|
openai: openai,
|
|
@@ -2521,13 +2698,26 @@ var tencent = {
|
|
|
2521
2698
|
const targetLanguages = {
|
|
2522
2699
|
azure: azure,
|
|
2523
2700
|
google: openai,
|
|
2524
|
-
baidu: baidu,
|
|
2701
|
+
baidu: baidu$1,
|
|
2525
2702
|
deepl: deepl,
|
|
2526
2703
|
amazon: amazon,
|
|
2527
2704
|
openai: openai,
|
|
2528
2705
|
tencent: tencent,
|
|
2529
2706
|
};
|
|
2530
2707
|
|
|
2708
|
+
var baidu = {
|
|
2709
|
+
Chinese: "zh",
|
|
2710
|
+
English: "en",
|
|
2711
|
+
Japanese: "jp",
|
|
2712
|
+
Korean: "kor",
|
|
2713
|
+
Thai: "th",
|
|
2714
|
+
Russian: "ru",
|
|
2715
|
+
};
|
|
2716
|
+
|
|
2717
|
+
const checkLanguages = Object.assign(Object.assign({}, originLanguages), {
|
|
2718
|
+
baidu: baidu,
|
|
2719
|
+
});
|
|
2720
|
+
|
|
2531
2721
|
function normalFromLanguage(from, engine) {
|
|
2532
2722
|
if (from === "auto") {
|
|
2533
2723
|
return "auto";
|
|
@@ -2606,6 +2796,42 @@ class Translator {
|
|
|
2606
2796
|
}
|
|
2607
2797
|
this.engines.delete(engineName);
|
|
2608
2798
|
}
|
|
2799
|
+
isSupportCheckLanguage(engineName) {
|
|
2800
|
+
if (!engineName || !this.engines.has(engineName)) {
|
|
2801
|
+
logger.warn("Engine name is required or not found");
|
|
2802
|
+
return false;
|
|
2803
|
+
}
|
|
2804
|
+
const engine = this.engines.get(engineName);
|
|
2805
|
+
if (!engine) {
|
|
2806
|
+
logger.warn(`Engine ${engineName} not found`);
|
|
2807
|
+
return false;
|
|
2808
|
+
}
|
|
2809
|
+
return !!engine.checkLanguage;
|
|
2810
|
+
}
|
|
2811
|
+
async checkLanguage(text, options) {
|
|
2812
|
+
const { engine = "google", max_character_num = defaultMaxCharacterNum } = options;
|
|
2813
|
+
if (!this.engines.has(engine)) {
|
|
2814
|
+
throw new CheckLanguageError(appName, `Engine ${engine} not found`);
|
|
2815
|
+
}
|
|
2816
|
+
const engineInstance = this.engines.get(engine);
|
|
2817
|
+
if (!engineInstance) {
|
|
2818
|
+
throw new CheckLanguageError(appName, `Engine ${engine} is null`);
|
|
2819
|
+
}
|
|
2820
|
+
if (!engineInstance.checkLanguage) {
|
|
2821
|
+
throw new CheckLanguageError(appName, `Engine ${engine} does not support checkLanguage method`);
|
|
2822
|
+
}
|
|
2823
|
+
const sample = max_character_num > 0 ? text.substring(0, max_character_num) : text;
|
|
2824
|
+
if (sample.length <= 0) {
|
|
2825
|
+
throw new TranslationError(appName, "Text is empty or too short to check language");
|
|
2826
|
+
}
|
|
2827
|
+
return engineInstance
|
|
2828
|
+
.checkLanguage(sample)
|
|
2829
|
+
.then((r) => r)
|
|
2830
|
+
.catch((e) => {
|
|
2831
|
+
logger.error(`${appName} Failed to check language for text: \n${getGapLine()}\n${text}\n${getGapLine()}\n error: ${getErrorMessages(e)}`);
|
|
2832
|
+
throw e;
|
|
2833
|
+
});
|
|
2834
|
+
}
|
|
2609
2835
|
async translate(text, options) {
|
|
2610
2836
|
const { engine = "google", cache_time = 60 * 1000 } = options;
|
|
2611
2837
|
let { from = "auto", to } = options;
|
|
@@ -2617,7 +2843,7 @@ class Translator {
|
|
|
2617
2843
|
}
|
|
2618
2844
|
const engineInstance = this.engines.get(engine);
|
|
2619
2845
|
if (!engineInstance) {
|
|
2620
|
-
throw new TranslationError(appName, `Engine ${engine}
|
|
2846
|
+
throw new TranslationError(appName, `Engine ${engine} is null`);
|
|
2621
2847
|
}
|
|
2622
2848
|
if (!from) {
|
|
2623
2849
|
throw new TranslationError(appName, `Invalid origin language ${from}`);
|
|
@@ -2704,5 +2930,4 @@ var index = {
|
|
|
2704
2930
|
getLanguage,
|
|
2705
2931
|
};
|
|
2706
2932
|
|
|
2707
|
-
export { Cache, OPEN_AI_MODELS, TranslationError, Translator, index as default, engines, getLanguage, translator };
|
|
2708
|
-
//# sourceMappingURL=index.js.map
|
|
2933
|
+
export { Cache, CheckLanguageError, OPEN_AI_MODELS, TranslationError, Translator, checkLanguages, index as default, engines, getLanguage, normalFromLanguage, normalToLanguage, originLanguages, targetLanguages, translator };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("fs/promises"),require("fs"),require("path");var e=require("@aws-sdk/client-translate"),a=require("crypto");class n extends Error{region;constructor(e,a){super(a),this.region=e,Error.captureStackTrace(this,this.constructor)}}class t extends Error{region;constructor(e,a){super(a),this.region=e,Error.captureStackTrace(this,this.constructor)}}const i=["o1-preview","o1-preview-2024-09-12","o1-mini-2024-09-12","o1-mini","dall-e-2","gpt-3.5-turbo","gpt-3.5-turbo-0125","babbage-002","davinci-002","dall-e-3","text-embedding-3-large","gpt-3.5-turbo-16k","tts-1-hd-1106","text-embedding-ada-002","text-embedding-3-small","tts-1-hd","whisper-1","gpt-3.5-turbo-1106","gpt-3.5-turbo-instruct","gpt-4o-mini-2024-07-18","gpt-4o-mini","tts-1","tts-1-1106","gpt-3.5-turbo-instruct-0914"];class r{cache;constructor(){this.cache=new Map}set(e,a,n){if(n<=0)throw new Error("time must be greater than 0");const t=this.cache.get(e);t&&clearTimeout(t.timeout);const i={value:a,expire:Date.now()+n};isNaN(i.expire)||(i.timeout=setTimeout(()=>this.del(e),n)),this.cache.set(e,i)}get(e){return this.cache.get(e)}delete(e){let a=!0;const n=this.cache.get(e);return n?!isNaN(n.expire)&&n.expire<Date.now()?a=!1:clearTimeout(n.timeout):a=!1,a&&this.del(e),a}del(e){this.cache.delete(e)}clear(){for(const[,e]of this.cache.entries())clearTimeout(e.timeout);this.cache.clear()}}function o(e=""){return{log(...e){this.info(...e)},info(...a){console.log(`[translate ${e}]`,...a)},error(...a){console.error(`[translate ${e}]`,...a)},warn(...a){console.warn(`[translate ${e}]`,...a)}}}function s(){return"-".repeat(20)}function c(e,a="Translate fail ! "){return e instanceof TypeError?a+(e.cause?.message??e.message):a+e.message}async function l(e,a){let t=null;try{t=await a.json()}catch(e){}return new n(e,`Translate fail ! ${a.status}: ${a.statusText} ${t?.message??""}`)}var u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function h(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var g={exports:{}};var d,m,p={exports:{}};function f(){return d||(d=1,p.exports=(e=e||function(e,a){var n;if("undefined"!=typeof window&&window.crypto&&(n=window.crypto),"undefined"!=typeof self&&self.crypto&&(n=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!=typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&void 0!==u&&u.crypto&&(n=u.crypto),!n)try{n=require("crypto")}catch(e){}var t=function(){if(n){if("function"==typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},i=Object.create||function(){function e(){}return function(a){var n;return e.prototype=a,n=new e,e.prototype=null,n}}(),r={},o=r.lib={},s=o.Base={extend:function(e){var a=i(this);return e&&a.mixIn(e),a.hasOwnProperty("init")&&this.init!==a.init||(a.init=function(){a.$super.init.apply(this,arguments)}),a.init.prototype=a,a.$super=this,a},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var a in e)e.hasOwnProperty(a)&&(this[a]=e[a]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},c=o.WordArray=s.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=n!=a?n:4*e.length},toString:function(e){return(e||h).stringify(this)},concat:function(e){var a=this.words,n=e.words,t=this.sigBytes,i=e.sigBytes;if(this.clamp(),t%4)for(var r=0;r<i;r++){var o=n[r>>>2]>>>24-r%4*8&255;a[t+r>>>2]|=o<<24-(t+r)%4*8}else for(var s=0;s<i;s+=4)a[t+s>>>2]=n[s>>>2];return this.sigBytes+=i,this},clamp:function(){var a=this.words,n=this.sigBytes;a[n>>>2]&=4294967295<<32-n%4*8,a.length=e.ceil(n/4)},clone:function(){var e=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var a=[],n=0;n<e;n+=4)a.push(t());return new c.init(a,e)}}),l=r.enc={},h=l.Hex={stringify:function(e){for(var a=e.words,n=e.sigBytes,t=[],i=0;i<n;i++){var r=a[i>>>2]>>>24-i%4*8&255;t.push((r>>>4).toString(16)),t.push((15&r).toString(16))}return t.join("")},parse:function(e){for(var a=e.length,n=[],t=0;t<a;t+=2)n[t>>>3]|=parseInt(e.substr(t,2),16)<<24-t%8*4;return new c.init(n,a/2)}},g=l.Latin1={stringify:function(e){for(var a=e.words,n=e.sigBytes,t=[],i=0;i<n;i++){var r=a[i>>>2]>>>24-i%4*8&255;t.push(String.fromCharCode(r))}return t.join("")},parse:function(e){for(var a=e.length,n=[],t=0;t<a;t++)n[t>>>2]|=(255&e.charCodeAt(t))<<24-t%4*8;return new c.init(n,a)}},d=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(g.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return g.parse(unescape(encodeURIComponent(e)))}},m=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=d.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(a){var n,t=this._data,i=t.words,r=t.sigBytes,o=this.blockSize,s=r/(4*o),l=(s=a?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*o,u=e.min(4*l,r);if(l){for(var h=0;h<l;h+=o)this._doProcessBlock(i,h);n=i.splice(0,l),t.sigBytes-=u}return new c.init(n,u)},clone:function(){var e=s.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});o.Hasher=m.extend({cfg:s.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){m.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(a,n){return new e.init(n).finalize(a)}},_createHmacHelper:function(e){return function(a,n){return new p.HMAC.init(e,n).finalize(a)}}});var p=r.algo={};return r}(Math),e)),p.exports;var e}var w=h(g.exports=(m=f(),function(e){var a=m,n=a.lib,t=n.WordArray,i=n.Hasher,r=a.algo,o=[];!function(){for(var a=0;a<64;a++)o[a]=4294967296*e.abs(e.sin(a+1))|0}();var s=r.MD5=i.extend({_doReset:function(){this._hash=new t.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,a){for(var n=0;n<16;n++){var t=a+n,i=e[t];e[t]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var r=this._hash.words,s=e[a+0],g=e[a+1],d=e[a+2],m=e[a+3],p=e[a+4],f=e[a+5],w=e[a+6],y=e[a+7],k=e[a+8],b=e[a+9],T=e[a+10],S=e[a+11],v=e[a+12],C=e[a+13],$=e[a+14],x=e[a+15],A=r[0],z=r[1],M=r[2],L=r[3];A=c(A,z,M,L,s,7,o[0]),L=c(L,A,z,M,g,12,o[1]),M=c(M,L,A,z,d,17,o[2]),z=c(z,M,L,A,m,22,o[3]),A=c(A,z,M,L,p,7,o[4]),L=c(L,A,z,M,f,12,o[5]),M=c(M,L,A,z,w,17,o[6]),z=c(z,M,L,A,y,22,o[7]),A=c(A,z,M,L,k,7,o[8]),L=c(L,A,z,M,b,12,o[9]),M=c(M,L,A,z,T,17,o[10]),z=c(z,M,L,A,S,22,o[11]),A=c(A,z,M,L,v,7,o[12]),L=c(L,A,z,M,C,12,o[13]),M=c(M,L,A,z,$,17,o[14]),A=l(A,z=c(z,M,L,A,x,22,o[15]),M,L,g,5,o[16]),L=l(L,A,z,M,w,9,o[17]),M=l(M,L,A,z,S,14,o[18]),z=l(z,M,L,A,s,20,o[19]),A=l(A,z,M,L,f,5,o[20]),L=l(L,A,z,M,T,9,o[21]),M=l(M,L,A,z,x,14,o[22]),z=l(z,M,L,A,p,20,o[23]),A=l(A,z,M,L,b,5,o[24]),L=l(L,A,z,M,$,9,o[25]),M=l(M,L,A,z,m,14,o[26]),z=l(z,M,L,A,k,20,o[27]),A=l(A,z,M,L,C,5,o[28]),L=l(L,A,z,M,d,9,o[29]),M=l(M,L,A,z,y,14,o[30]),A=u(A,z=l(z,M,L,A,v,20,o[31]),M,L,f,4,o[32]),L=u(L,A,z,M,k,11,o[33]),M=u(M,L,A,z,S,16,o[34]),z=u(z,M,L,A,$,23,o[35]),A=u(A,z,M,L,g,4,o[36]),L=u(L,A,z,M,p,11,o[37]),M=u(M,L,A,z,y,16,o[38]),z=u(z,M,L,A,T,23,o[39]),A=u(A,z,M,L,C,4,o[40]),L=u(L,A,z,M,s,11,o[41]),M=u(M,L,A,z,m,16,o[42]),z=u(z,M,L,A,w,23,o[43]),A=u(A,z,M,L,b,4,o[44]),L=u(L,A,z,M,v,11,o[45]),M=u(M,L,A,z,x,16,o[46]),A=h(A,z=u(z,M,L,A,d,23,o[47]),M,L,s,6,o[48]),L=h(L,A,z,M,y,10,o[49]),M=h(M,L,A,z,$,15,o[50]),z=h(z,M,L,A,f,21,o[51]),A=h(A,z,M,L,v,6,o[52]),L=h(L,A,z,M,m,10,o[53]),M=h(M,L,A,z,T,15,o[54]),z=h(z,M,L,A,g,21,o[55]),A=h(A,z,M,L,k,6,o[56]),L=h(L,A,z,M,x,10,o[57]),M=h(M,L,A,z,w,15,o[58]),z=h(z,M,L,A,C,21,o[59]),A=h(A,z,M,L,p,6,o[60]),L=h(L,A,z,M,S,10,o[61]),M=h(M,L,A,z,d,15,o[62]),z=h(z,M,L,A,b,21,o[63]),r[0]=r[0]+A|0,r[1]=r[1]+z|0,r[2]=r[2]+M|0,r[3]=r[3]+L|0},_doFinalize:function(){var a=this._data,n=a.words,t=8*this._nDataBytes,i=8*a.sigBytes;n[i>>>5]|=128<<24-i%32;var r=e.floor(t/4294967296),o=t;n[15+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),n[14+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),a.sigBytes=4*(n.length+1),this._process();for(var s=this._hash,c=s.words,l=0;l<4;l++){var u=c[l];c[l]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});function c(e,a,n,t,i,r,o){var s=e+(a&n|~a&t)+i+o;return(s<<r|s>>>32-r)+a}function l(e,a,n,t,i,r,o){var s=e+(a&t|n&~t)+i+o;return(s<<r|s>>>32-r)+a}function u(e,a,n,t,i,r,o){var s=e+(a^n^t)+i+o;return(s<<r|s>>>32-r)+a}function h(e,a,n,t,i,r,o){var s=e+(n^(a|~t))+i+o;return(s<<r|s>>>32-r)+a}a.MD5=i._createHelper(s),a.HmacMD5=i._createHmacHelper(s)}(Math),m.MD5));const y=o("openai");function k(e,n="",t){return t?a.createHmac("sha256",n).update(e).digest(t):a.createHmac("sha256",n).update(e).digest()}function b(e,n="hex"){return a.createHash("sha256").update(e).digest(n)}function T({secretId:e,secretKey:a,service:n,host:t,payload:i,httpRequestMethod:r,action:o,apiVersion:s,region:c}){const l=Math.floor(Date.now()/1e3),u=function(e){const a=new Date(1e3*e);return`${a.getUTCFullYear()}-${("0"+(a.getUTCMonth()+1)).slice(-2)}-${("0"+a.getUTCDate()).slice(-2)}`}(l),h="content-type:application/json; charset=utf-8\nhost:"+t+"\n",g="content-type;host",d=b(i),m="TC3-HMAC-SHA256",p=`${u}/${n}/tc3_request`,f=[m,l,p,b([r,"/","",h,g,d].join("\n"))].join("\n"),w=k(u,"TC3"+a),y=k(n,w),T=k("tc3_request",y),S={Authorization:`${m} Credential=${e}/${p}, SignedHeaders=${g}, Signature=${k(f,T,"hex")}`,"Content-Type":"application/json; charset=utf-8",Host:t,"X-TC-Action":o,"X-TC-Timestamp":l,"X-TC-Version":s};return c&&(S["X-TC-Region"]=c),S}const S={google:function(e){const a="https://translate.googleapis.com/translate_a/single";return{name:"google",async translate(e,t){const{from:i="auto",to:r}=t;Array.isArray(e)||(e=[e]);const o=e.join("\n"),s=`${a}?client=gtx&sl=${i}&tl=${r}&dt=t&q=${encodeURI(o)}`,c=await fetch(s);if(!c.ok)throw await l(this.name,c);const u=await c.json();if(!u||0===u.length)throw new n(this.name,"Translate fail ! translate's result is null or empty");const h=[];for(let e=0;u[0]&&e<u[0].length;e++){const a=u[0][e];a&&0!=a.length&&Array.isArray(a)&&a[0]&&h.push(a[0].replaceAll("\n",""))}return h},async checkLanguage(e){const n=`${a}?client=gtx&sl=auto&tl=en&dt=t&q=${encodeURI(e)}`,i=await fetch(n);if(!i.ok)throw await l(this.name,i);const r=await i.json();if(!r||r.length<3)throw new t(this.name,"Check language fail! No result returned");const o=r[2];if(!o)throw new t(this.name,"Check language fail! Language not detected");return o}}},azure:function(e){const{key:a,region:i}=e,r="azure",o=()=>{if(!a||!i)throw new n(r,`${r} key and region is required`)};o();const s="https://api.cognitive.microsofttranslator.com/translate?api-version=3.0";return{name:r,async translate(e,t){o();const{from:r,to:c}=t,u=`${s}&to=${c}${r&&"auto"!==r?`&from=${r}`:""}`;Array.isArray(e)||(e=[e]);const h=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8","Ocp-Apim-Subscription-Key":a,"Ocp-Apim-Subscription-Region":i},body:JSON.stringify(e.map(e=>({Text:e})))});if(!h.ok)throw await l(this.name,h);const g=await h.json();if(g.error)throw new n(this.name,`Translate fail ! code: ${g.error.code}, message: ${g.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);const d=g;if(!d||0===d.length)throw new n(this.name,"Translate fail ! translate's result is null or empty");const m=[];for(const e of d)e.translations&&0!=e.translations.length&&m.push(...e.translations.map(e=>e.text));return m},async checkLanguage(e){o();const n=`${s}&to=en`,r=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8","Ocp-Apim-Subscription-Key":a,"Ocp-Apim-Subscription-Region":i},body:JSON.stringify([{Text:e}])});if(!r.ok)throw await l(this.name,r);const c=await r.json();if(c.error)throw new t(this.name,`checkLanguage fail ! code: ${c.error.code}, message: ${c.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);if(!c||!Array.isArray(c)||0===c.length)throw new t(this.name,"Check language fail! No result returned");const u=c[0]?.detectedLanguage?.language;if(!u)throw new t(this.name,"Check language fail! Language not detected");return u}}},amazon:function(a){const{region:t,accessKeyId:i,secretAccessKey:r}=a,o="amazon",s=()=>{if(!t||!i||!r)throw new n(o,`${o} region, accessKeyId ,secretAccessKey is required`)};return s(),{name:o,async translate(a,n){s();const{from:o="auto",to:c}=n,l=new e.TranslateClient({region:t,credentials:{accessKeyId:i,secretAccessKey:r}});Array.isArray(a)||(a=[a]);const u=new e.TranslateTextCommand({SourceLanguageCode:o,TargetLanguageCode:c,Text:a.join("\n")}),h=await l.send(u),g=[];if(h.TranslatedText){const e=h.TranslatedText??"";g.push(...e.split("\n"))}return g},async checkLanguage(a){s();const c=new e.TranslateClient({region:t,credentials:{accessKeyId:i,secretAccessKey:r}}),l=new e.TranslateTextCommand({SourceLanguageCode:"auto",TargetLanguageCode:"en",Text:a});try{const e=await c.send(l);if(!e.SourceLanguageCode)throw new n(o,"Check language fail! Source language not detected");return e.SourceLanguageCode}catch(e){throw new n(o,`Check language fail! ${e.message||e}`)}}}},baidu:function(e){const{appId:a,secretKey:i}=e,r="baidu",o=()=>{if(!a||!i)throw new n(r,`${r} appId and secretKey is required`)};return o(),{name:r,async translate(e,t){o();const{to:r,from:s="auto",domain:c="it"}=t;Array.isArray(e)||(e=[e]);const u=e.join("\n"),h=Date.now(),g=w(`${a}${u}${h}${c}${i}`).toString(),d=new URLSearchParams;d.append("q",u),d.append("from",s),d.append("to",r),d.append("appid",a),d.append("salt",h.toString()),d.append("domain",c),d.append("sign",g);const m=await fetch("https://fanyi-api.baidu.com/api/trans/vip/fieldtranslate",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:d.toString()});if(!m.ok)throw await l(this.name,m);const p=await m.json();if(!p||p.error_code||!p.trans_result||0===p.trans_result.length)throw new n(this.name,`Translate fail ! error_code:${p.error_code}, error_msg: ${p.error_msg} \n Go to https://fanyi-api.baidu.com/product/123 view details`);const f=[];for(const e of p.trans_result)e.dst&&f.push(e.dst);return f},async checkLanguage(e){o();const n=Date.now(),r=w(`${a}${e}${n}${i}`).toString(),s=new URLSearchParams;s.append("q",e),s.append("appid",a),s.append("salt",n.toString()),s.append("sign",r);const c=await fetch("https://fanyi-api.baidu.com/api/trans/vip/language",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:s.toString()});if(!c.ok)throw await l(this.name,c);const u=await c.json();if(!u||0!=u.error_code)throw new t(this.name,`Check language fail ! error_code:${u.error_code}, error_msg: ${u.error_msg} \n Go to https://fanyi-api.baidu.com/product/143 view details`);return u.data.src}}},deepl:function(e){const{key:a}=e,i="deepl",r=()=>{if(!a)throw new n(i,`${i} key is required`)};r();const o="https://api-free.deepl.com/v2/translate";return{name:i,async translate(e,t){r();const{to:i,from:s}=t;Array.isArray(e)||(e=[e]);const c=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8",Authorization:`DeepL-Auth-Key ${a}`,Accept:"*/*",Host:"api-free.deepl.com",Connection:"keep-alive"},body:JSON.stringify({text:e,source_lang:"auto"===s?void 0:s,target_lang:i})});if(!c.ok)throw await l(this.name,c);const u=await c.json();if(u.error)throw new n(this.name,`Translate fail ! code: ${u.error.code}, message: ${u.error.message}`);const h=u.translations;if(!h||0===h.length)throw new n(this.name,"Translate fail ! translate's result is null or empty");return h.map(e=>e.text)},async checkLanguage(e){r();const n=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8",Authorization:`DeepL-Auth-Key ${a}`,Accept:"*/*",Host:"api-free.deepl.com",Connection:"keep-alive"},body:JSON.stringify({text:[e],target_lang:"EN"})});if(!n.ok)throw await l(this.name,n);const i=await n.json();if(i.error)throw new t(this.name,`Check language fail ! code: ${i.error.code}, message: ${i.error.message}`);const s=i.translations;if(!s||0===s.length)throw new t(this.name,"Check language fail! No result returned");const c=s[0].detected_source_language;if(!c)throw new t(this.name,"Check language fail! Language not detected");return c}}},openai:function(e){const{apiKey:a,model:t,maxTokens:r=2e3,outputLog:o=!1}=e,s="openai",c=()=>{if(!a)throw new n(s,`${s} apiKey is required`);if(!i.includes(t))throw new n(s,`${s} model=${t} is invalid`)};return c(),{name:s,async translate(e,i){c();const{from:s,to:u}=i;Array.isArray(e)||(e=[e]);const h={role:"user",content:`\n 满足以下4点翻译要求:\n 1.将每段文本从${s}翻译为${u}\n 2.文本内容以换行符\n进行段落分割,并以段落分割顺序进行翻译\n 3.仅翻译分割出的段落,其他任何不相关的内容都移除,比如:段落前后的空格、所有标点符号\n\n 4.仅返回要翻译的文本内容,不要返回任何其他内容\n\n 如何提取翻译文本,满足以下2点要求:\n 1.翻译从-$s$-字符标记开始至-$e$-字符标记结束,提取-$s$-至-$e$-之间的内容\n 2.-$s$-和-$e$-这2个标记不要返回,只是用来标记翻译的起始和结束位置\n\n -$s$-\n ${e.join("\n")} \n -$e$-\n `},g=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({model:t,messages:[{role:"system",content:"You are a professional translator"},h],max_tokens:r,temperature:0})});if(!g.ok)throw await l(this.name,g);const d=await g.json();if(d.error)throw new n(this.name,`Translate fail! message: ${d.error.message}`);if(!d||!d.choices||0===d.choices.length||!d.choices[0]?.message?.content)throw new n(this.name,"Translate fail ! translate's result is null or empty");const m=d.choices[0].message.content,p=["-$s$-","-$e$-"],f=m.trim().split("\n").map(e=>e.trim()).filter(Boolean).filter(e=>!p.includes(e));return o&&(y.info("prompt:",JSON.stringify(h,null,2)),y.info("translations:",JSON.stringify(f,null,2))),f}}},tencent:function(e){const{secretId:a,secretKey:i,region:r="ap-guangzhou"}=e,o="tencent",s="tmt.tencentcloudapi.com",c=`https://${s}/`,l="2018-03-21",u="TextTranslate";function h(){if(!a||!i)throw new n(o,`${o} secretId and secretKey are required`)}return{name:o,async translate(e,t){h();const{from:g="auto",to:d}=t,m="auto"===g?"auto":g,p={SourceText:Array.isArray(e)?e.join("\n"):e,Source:m,Target:d,ProjectId:0},f=JSON.stringify(p),w=T({secretId:a,secretKey:i,service:"tmt",host:s,payload:f,httpRequestMethod:"POST",action:u,apiVersion:l,region:r});try{const e=await fetch(c,{method:"POST",headers:w,body:f});if(!e.ok)throw new n(o,`HTTP ${e.status}: ${await e.text()}`);const a=await e.json();if(a.Response?.Error)throw new n(o,`Tencent translate fail: ${a.Response.Error.Code}, ${a.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);const t=a.Response?.TargetText.split("\n")??[];if(!Array.isArray(t)||0===t.length)throw new n(o,"Translate fail! No result returned");return t}catch(e){if(e instanceof n)throw e;throw new n(o,`Translation failed: ${e}`)}},async checkLanguage(e){h();const n={SourceText:e,Source:"auto",Target:"en",ProjectId:0},g=JSON.stringify(n),d=T({secretId:a,secretKey:i,service:"tmt",host:s,payload:g,httpRequestMethod:"POST",action:u,apiVersion:l,region:r});try{const e=await fetch(c,{method:"POST",headers:d,body:g});if(!e.ok)throw new t(o,`HTTP ${e.status}: ${await e.text()}`);const a=await e.json();if(a.Response?.Error)throw new t(o,`Tencent language detect fail: ${a.Response.Error.Code}, ${a.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);const n=a.Response?.Source;if(!n)throw new t(o,"Language detect fail! No result returned");return n}catch(e){if(e instanceof t)throw e;throw new t(o,`Language detection failed: ${e}`)}}}}};var v={Afrikaans:"af",Albanian:"sq",Amharic:"am",Arabic:"ar",Armenian:"hy",Assamese:"as",Azerbaijani:"az",Bashkir:"ba",Basque:"eu",Bengali:"bn",Bhojpuri:"bho",Bosnian:"bs",Bulgarian:"bg",Burmese:"my","Cantonese (Traditional)":"yue",Catalan:"ca",Chhattisgarhi:"hne",Chinese:"zh-Hans","Chinese (Literary)":"lzh","Chinese (Traditional)":"zh-Hant",Croatian:"hr",Czech:"cs",Danish:"da",Dari:"prs",Dhivehi:"dv",Dogri:"doi",Double:"lug",Dutch:"nl",English:"en",Estonian:"et","FYRO Macedonian":"mk",Faroese:"fo",Fijian:"fj",Filipino:"fil",Finnish:"fi",French:"fr","French (Canada)":"fr-CA",Galician:"gl",Georgian:"ka",German:"de",Greek:"el",Gujarati:"gu","Haitian Creole":"ht",Hausa:"ha",Hebrew:"he",Hindi:"hi",Hmong:"mww",Hungarian:"hu",Icelandic:"is",Igbo:"ig",Indonesian:"id",Inuinnaqtun:"ikt",Inuktitut:"iu","Inuktitut (Latin)":"iu-Latn",Irish:"ga",Italian:"it",Japanese:"ja",Kannada:"kn",Kashmiri:"ks",Kazakh:"kk",Khmer:"km",Kikwanda:"rw","Klingon (Latin)":"tlh-Latn","Klingon (pIqaD)":"tlh-Piqd",Konkani:"gom",Korean:"ko","Kurdish (Medium)":"ku","Kurdish (North)":"kmr",Kyrgyz:"ky",Lao:"lo",Latvian:"lv",Lingala:"ln",Lithuanian:"lt","Lower Sorbian language":"dsb",Maithili:"mai",Malagasian:"mg",Malay:"ms",Malayalam:"ml",Maltese:"mt",Manipuri:"mni",Marathi:"mr","Mongolian (Cyrillic)":"mn-Cyrl","Mongolian (Traditional)":"mn-Mong","Māori":"mi",Nepali:"ne","Norwegian Bokmål":"nb",Nyanja:"nya",Oriya:"or",Pashto:"ps",Persian:"fa",Polish:"pl","Portugal (Brazil)":"pt","Portugal (Portugal)":"pt-PT",Punjabi:"pa","Querétaro Ottomi":"otq",Romanian:"ro",Rounds:"run",Russian:"ru",Samoan:"sm","Serbia (Latin)":"sr-Latn","Serbian (Cyrillic)":"sr-Cyrl",Sesotho:"st","Sesotho at Leboa":"nso",Setswana:"tn",Shona:"sn",Sindhi:"sd",Sinhalese:"si",Slovak:"sk",Slovenian:"sl",Somali:"so",Spanish:"es",Swahili:"sw",Swedish:"sv",Tahiti:"ty",Tamil:"ta",Tatar:"tt",Telugu:"te",Thai:"th",Tibetan:"bo",Tigrinya:"ti",Tongan:"to",Turkish:"tr",Turkmen:"tk",Uighur:"ug",Ukrainian:"uk","Upper Sorbian":"hsb",Urdu:"ur",Uzbek:"uz",Vietnamese:"vi",Welsh:"cy",Will:"brx",Xhosa:"xh",Yoruba:"yo","Yucatec Maya":"yua",Zulu:"zu"},C={Abkhazian:"ab",Acehnese:"ace","Acholi language":"ach",Afar:"aa",Afrikaans:"af",Albanian:"sq",Alur:"alz",Amharic:"am",Arabic:"ar",Armenian:"hy",Assamese:"as",Avar:"av",Awadhi:"awa",Aymara:"ay",Azerbaijani:"az",Badawi:"bew",Balinese:"ban",Balochi:"bal",Bambara:"bm",Bangasinan:"pag",Bashkir:"ba",Basque:"eu",Batakkalo:"btx","Bataksi Marungon":"bts",Bataktoba:"bbc",Baure:"bci",Belarusian:"be",Bengali:"bn",Bhojpuri:"bho",Bikol:"bik",Bosnian:"bs",Breton:"br",Bulgarian:"bg",Burmese:"my","Buryat language":"bua",Cantonese:"yue",Casey:"kha",Catalan:"ca",Cebuano:"ceb","Chamorro language":"ch",Chechen:"ce",Chevi:"ak",Chicheva:"ny",Chiga:"cgg",Chinese:"zh-CN","Chinese (Traditional)":"zh-TW",Chuk:"chk",Chuvash:"cv",Conga:"ts",Corsican:"co","Crimean Tatar":"crh",Croatian:"hr",Czech:"cs",Danish:"da",Dari:"fa-AF",Dhivehi:"dv",Dinka:"din",Dogra:"doi",Dutch:"nl",Dyula:"dyu",Dzongka:"dz",Elocano:"ilo",English:"en",Esperanto:"eo",Estonian:"et",Ewe:"ee","FYRO Macedonian":"mk",Faroese:"fo","Feng language":"fon",Fijian:"fj",Filipino:"tl",Finnish:"fi",French:"fr",Frisian:"fy",Friulian:"fur",Fulani:"ff",Ga:"gaa",Galician:"gl",Georgian:"ka",German:"de",Gongen:"gom",Gorkbojok:"trp","Grace and Taoism":"ndc-ZW",Greek:"el",Greenlandic:"kl",Guarani:"gn",Gujarati:"gu","Haitian Creole":"ht",Hakachin:"cnh",Hausa:"ha",Hawaiian:"haw",Hebrew:"iw",Heligaignon:"hil",Hindi:"hi",Hmong:"hmn",Hungarian:"hu","Hunsrück":"hrx",Iban:"iba",Icelandic:"is",Igbo:"ig",Indonesian:"id",Irish:"ga",Italian:"it","Jamaica vernacular":"jam",Japanese:"ja",Javanese:"jw","Jingpo language":"kac",Kannada:"kn",Kanuri:"kr",Kazakh:"kk",Kekchi:"kek",Khmer:"km",Kikwanda:"rw",Kithuba:"ktu","Komi language":"kv",Kongo:"kg",Korean:"ko","Kurdish (Kurmanji)":"ku","Kurdish (Solani)":"ckb",Kyrgyz:"ky",Lao:"lo",Latin:"la",Latvian:"lv",Ligurian:"lij",Limburg:"li",Lingala:"ln",Lithuanian:"lt",Lombard:"lmo",Luganda:"lg",Luo:"luo",Luxembourg:"lb",Madura:"mad",Maithili:"mai",Makassar:"mak",Malagasian:"mg",Malay:"ms","Malay, Jawi":"ms-Arab",Malayalam:"ml",Maltese:"mt","Malwadi language":"mwr",Mamu:"mam",Manx:"gv",Marathi:"mr",Marshallese:"mh","Mauritius Scrio whispers":"mfe","Meitei (Manipur)":"mni-Mtei",Minan:"min",Mizo:"lus",Mongolian:"mn","Māori":"mi","Nahuatl (Eastern Vastka)":"nhe","Ndebele (Southern)":"nr",Ndombe:"dov","Nepal Language (Newar)":"new",Nepali:"ne","Nko alphabet (West African written script)":"bm-Nkoo","Northern Sotho":"nso",Norwegian:"no",Nuer:"nus",Occitan:"oc",Oriya:"or","Oromo language":"om",Ossetian:"os",Pampangja:"pam",Papiamento:"pap",Pashto:"ps",Pemba:"bem",Persian:"fa",Polish:"pl","Portugal (Brazil)":"pt","Portugal (Portugal)":"pt-PT","Punjabi (Gurumuchi)":"pa","Punjabi (Shamuki)":"pa-Arab",Quechua:"qu",Ratgale:"ltg",Romani:"rom",Romanian:"ro",Rondi:"rn",Russian:"ru",Sabatec:"zap",Sakha:"sah",Samoan:"sm",Sango:"sg",Sanskrit:"sa",Santali:"sat-Latn","Schuna language":"sn","Scottish Gaelic":"gd",Serbian:"sr","Seychellois Creole":"crs",Shan:"shn",Sicilian:"scn","Sierra Leonean Creole":"kri",Silesian:"szl",Sindhi:"sd",Sinhalese:"si",Slovak:"sk",Slovenian:"sl",Somali:"so","South Sotho":"st",Spanish:"es","Steppe Mali":"chm",Sundanese:"su","Susu language":"sus",Swahili:"sw",Swat:"ss",Swedish:"sv","Sámi (North)":"se",Tahiti:"ty",Tajik:"tg",Tamaset:"ber-Latn","Tamazight (Tifinaven)":"ber",Tamil:"ta",Tatar:"tt",Telugu:"te",Tetum:"tet",Thai:"th",Tibetan:"bo","Tiff language":"tiv",Tigrinya:"ti","Tok Pisin":"tpi",Tongan:"to",Tswana:"tn",Tulu:"tcy","Tumbuka language":"tum",Turkish:"tr",Turkmen:"tk",Tuvan:"tyv",Udmurtic:"udm",Uighur:"ug",Ukrainian:"uk",Urdu:"ur",Uzbek:"uz",Venda:"ve",Venetian:"vec",Vietnamese:"vi","Wari language":"war",Welsh:"cy","Wolof language":"wo",Xhosa:"xh",Yiddish:"yi",Yoruba:"yo","Yucatan Maya":"yua",Zulu:"zu"},$={Achinese:"ach",Afrikaans:"afr",Akan:"aka",Albanian:"alb","Algerian Arabic":"arq",Amharic:"amh","Ancient Greek":"gra",Arabic:"ara",Aragonese:"arg",Armenian:"arm",Assamese:"asm",Asturian:"ast",Aymara:"aym",Azerbaijani:"aze",Baluchi:"bal",BasaSunda:"sun",Bashkir:"bak",Basque:"baq",Belarusian:"bel",Bemba:"bem",Bengali:"ben","Berber languages":"ber",Bhojpuri:"bho",Bislama:"bis",Blin:"bli","Bokmål":"nob",Bosnian:"bos","Brazilian Portuguese":"pot",Breton:"bre",Bulgarian:"bul",Buriat:"bui",Burmese:"bur","Canadian French":"frn",Cantonese:"yue",Catalan:"cat",Cebuano:"ceb",Chechen:"che",Cherokee:"chr",Chichewa:"nya",Chinese:"zh",Chuvash:"chv","Classical Chinese":"wyw",Cornish:"cor",Corsican:"cos",Creek:"cre","Crimean Tatar":"cri",Croatian:"hrv",Czech:"cs",Danish:"dan",Divehi:"div",Dutch:"nl",Dzongkha:"dzo",English:"en",Esperanto:"epo",Estonian:"est",Faroese:"fao",Filipino:"fil",Finnish:"fin",French:"fra",Friulian:"fri",Fulani:"ful",Gaelic:"gla",Galician:"glg",Georgian:"geo",German:"de",Greek:"el",Guarani:"grn",Gujarati:"guj","Haitian Creole":"ht","Hakha Chin":"hak",Hausa:"hau",Hawaiian:"haw",Hebrew:"heb",Hiligaynon:"hil",Hindi:"hi",Hmong:"hmn",Hungarian:"hu",Hupa:"hup",Icelandic:"ice",Ido:"ido",Igbo:"ibo",Indonesian:"id",Ingush:"ing","Interlingua ":"ina",Inuktitut:"iku",Irish:"gle",Italian:"it",Japanese:"jp",Javanese:"jav",Kabyle:"kab",Kalaallisut:"kal",Kalmyk:"kam",Kannada:"kan",Kanuri:"kau",Kashmiri:"kas",Kashubian:"kah",Khmer:"hkm",Kinyarwanda:"kin",Klingon:"kli",Kongo:"kon",Konkani:"kok",Korean:"kor",Kurdish:"kur",Kyrgyz:"kir",Lao:"lao",Latgalian:"lag",Latin:"lat",Latvian:"lav",Limburgish:"lim",Lingala:"lin",Lithuanian:"lit",Lojban:"loj","Low German":"log","Lower Sorbian":"los",Luganda:"lug",Luxembourgish:"ltz",Macedonian:"mac",Maithili:"mai",Malagasy:"mg",Malay:"may",Malayalam:"mal",Maltese:"mlt",Manx:"glv",Maori:"mao",Marathi:"mar",Marshallese:"mah","Mauritian Creole":"mau","Middle French":"frm",Mongolian:"moc",Montenegrin:"mot","N'Ko":"nqo",Neapolitan:"nea",Nepali:"nep","Northern Sami":"sme","Northern Sotho":"ped",Norwegian:"nor",Nynorsk:"nno",Occitan:"oci",Ojibwa:"oji","Old English":"eno",Oriya:"ori",Oromo:"orm",Ossetian:"oss",Pampanga:"pam",Papiamento:"pap",Pashto:"pus",Persian:"per",Polish:"pl",Portuguese:"pt",Punjabi:"pan",Quechua:"que",Romanian:"rom",Romansh:"roh",Romany:"ro",Russian:"ru",Rusyn:"ruy",Samoan:"sm",Sanskrit:"san",Sardinian:"srd",Scots:"sco","Serb(Cyrillic)":"src",Serbian:"srp","Serbo-Croatian":"sec",Shan:"sha",Shona:"sna",Silesian:"sil",Sindhi:"snd",Sinhala:"sin",Slovak:"sk",Slovenian:"slo",Somali:"som","Songhai languages":"sol","Southern Ndebele":"nbl","Southern Sotho":"sot",Spanish:"spa",Swahili:"swa",Swedish:"swe",Syriac:"syr",Tagalog:"tgl",Tajik:"tgk",Tamil:"tam",Tatar:"tat",Telugu:"tel",Tetum:"tet",Thai:"th",Tibetan:"tib",Tigrinya:"tir","Traditional Chinese":"cht",Tsonga:"tso","Tunisian Arabic":"tua",Turkish:"tr",Turkmen:"tuk",Twi:"twi",Ukrainian:"ukr","Upper Sorbian":"ups",Urdu:"urd",Uyghur:"uig",Venda:"ven",Vietnamese:"vie",Walloon:"wln",Welsh:"wel","Western Frisian":"fry",Wolof:"wol",Xhosa:"xho",Yiddish:"yid",Yoruba:"yor",Zaza:"zaz",Zulu:"zul"},x={Afrikaans:"af",Albanian:"sq",Amharic:"am",Arabic:"ar",Armenian:"hy",Azerbaijani:"az",Bengali:"bn",Bosnian:"bs",Bulgarian:"bg",Catalan:"ca","Chinese (Simplified)":"zh","Chinese (Traditional)":"zh-TW",Croatian:"hr",Czech:"cs",Danish:"da",Dari:"fa-AF",Dutch:"nl",English:"en",Estonian:"et","Farsi (Persian)":"fa","Filipino, Tagalog":"tl",Finnish:"fi",French:"fr","French (Canada)":"fr-CA",Georgian:"ka",German:"de",Greek:"el",Gujarati:"gu","Haitian Creole":"ht",Hausa:"ha",Hebrew:"he",Hindi:"hi",Hungarian:"hu",Icelandic:"is",Indonesian:"id",Irish:"ga",Italian:"it",Japanese:"ja",Kannada:"kn",Kazakh:"kk",Korean:"ko",Latvian:"lv",Lithuanian:"lt",Macedonian:"mk",Malay:"ms",Malayalam:"ml",Maltese:"mt",Marathi:"mr",Mongolian:"mn","Norwegian (Bokmål)":"no",Pashto:"ps",Polish:"pl","Portuguese (Brazil)":"pt","Portuguese (Portugal)":"pt-PT",Punjabi:"pa",Romanian:"ro",Russian:"ru",Serbian:"sr",Sinhala:"si",Slovak:"sk",Slovenian:"sl",Somali:"so",Spanish:"es","Spanish (Mexico)":"es-MX",Swahili:"sw",Swedish:"sv",Tamil:"ta",Telugu:"te",Thai:"th",Turkish:"tr",Ukrainian:"uk",Urdu:"ur",Uzbek:"uz",Vietnamese:"vi",Welsh:"cy"};const A={azure:v,google:C,baidu:$,deepl:{English:"en",Bulgarian:"bg",Chinese:"zh",Croatian:"hr",Czech:"cs",Danish:"da",Dutch:"nl",Estonian:"et",Finnish:"fi",French:"fr",German:"de",Greek:"el",Hungarian:"hu",Icelandic:"is",Indonesian:"id",Irish:"ga",Italian:"it",Japanese:"ja",Korean:"ko",Latvian:"lv",Lithuanian:"lt",Maltese:"mt",Norwegian:"nb",Polish:"pl",Portuguese:"pt",Romanian:"ro",Russian:"ru",Slovak:"sk",Slovenian:"sl",Spanish:"es",Swedish:"sv",Turkish:"tr",Ukrainian:"uk"},amazon:x,openai:C,tencent:{Auto:"auto",Chinese:"zh",TraditionalChinese:"zh-TW",English:"en",Japanese:"ja",Korean:"ko",French:"fr",Spanish:"es",Italian:"it",German:"de",Turkish:"tr",Russian:"ru",Portuguese:"pt",Vietnamese:"vi",Indonesian:"id",Thai:"th",Malay:"ms",Arabic:"ar",Hindi:"hi"}};const z={azure:v,google:C,baidu:$,deepl:{"American English":"en-US","Brazilian Portuguese":"pt-BR","British English":"en-GB",Bulgarian:"bg",Chinese:"zh",Croatian:"hr",Czech:"cs",Danish:"da",Dutch:"nl",Estonian:"et","European Portuguese":"pt-PT",Finnish:"fi",French:"fr",German:"de",Greek:"el",Hungarian:"hu",Icelandic:"is",Indonesian:"id",Irish:"ga",Italian:"it",Japanese:"ja",Korean:"ko",Latvian:"lv",Lithuanian:"lt",Maltese:"mt",Norwegian:"nb",Polish:"pl",Portuguese:"pt",Romanian:"ro",Russian:"ru",Slovak:"sk",Slovenian:"sl",Spanish:"es",Swedish:"sv",Turkish:"tr",Ukrainian:"uk"},amazon:x,openai:C,tencent:{"Simplified Chinese":"zh","Traditional Chinese":"zh-TW",English:"en",Japanese:"ja",Korean:"ko",French:"fr",Spanish:"es",Italian:"it",German:"de",Turkish:"tr",Russian:"ru",Portuguese:"pt",Vietnamese:"vi",Indonesian:"id",Thai:"th",Malay:"ms",Arabic:"ar",Hindi:"hi"}};const M=Object.assign(Object.assign({},A),{baidu:{Chinese:"zh",English:"en",Japanese:"jp",Korean:"kor",Thai:"th",Russian:"ru"}});function L(e,a){if("auto"===e)return"auto";const n=A[a];if(!n)throw new Error(`Engine ${a} not found`);if(Object.keys(A[a]).includes(e))return n[e];if(Object.values(A[a]).includes(e))return e;throw new Error(`Invalid from language ${a} ${e}`)}function B(e,a){const n=z[a];if(!n)throw new Error(`Engine ${a} not found`);if(Object.keys(z[a]).includes(e))return n[e];if(Object.values(z[a]).includes(e))return e;throw new Error(`Invalid to language ${a} ${e}`)}function j(e){return{from:A[e],to:z[e]}}const P="Translate",K=1e3,I=o(),_=new r;class E{engines;cache_time;concurrencyMax;concurrencyDelay;constructor(e=6e4,a=4,n=20){this.engines=new Map,this.cache_time=e,this.concurrencyMax=a,this.concurrencyDelay=n}use(e){this.addEngine(e)}addEngine(e){this.engines.has(e.name)?I.warn("Engine already exists"):this.engines.set(e.name,e)}removeEngine(e){if(!e||!this.engines.has(e))return I.warn("Engine name is required or not found"),!1;this.engines.delete(e)}isSupportCheckLanguage(e){if(!e||!this.engines.has(e))return I.warn("Engine name is required or not found"),!1;const a=this.engines.get(e);return a?!!a.checkLanguage:(I.warn(`Engine ${e} not found`),!1)}async checkLanguage(e,a){const{engine:i="google",max_character_num:r=K}=a;if(!this.engines.has(i))throw new t(P,`Engine ${i} not found`);const o=this.engines.get(i);if(!o)throw new t(P,`Engine ${i} is null`);if(!o.checkLanguage)throw new t(P,`Engine ${i} does not support checkLanguage method`);const l=r>0?e.substring(0,r):e;if(l.length<=0)throw new n(P,"Text is empty or too short to check language");return o.checkLanguage(l).then(e=>e).catch(a=>{throw I.error(`${P} Failed to check language for text: \n${s()}\n${e}\n${s()}\n error: ${c(a)}`),a})}async translate(e,a){const{engine:t="google",cache_time:i=6e4}=a;let{from:r="auto",to:o}=a;if(r=a.from=L(r,t),o=a.to=B(o,t),!this.engines.has(t))throw new n(P,`Engine ${t} not found`);const l=this.engines.get(t);if(!l)throw new n(P,`Engine ${t} is null`);if(!r)throw new n(P,`Invalid origin language ${r}`);if(!o)throw new n(P,`Invalid target language ${o}`);const u=`${r}:${o}:${t}:${e}`;return _.get(u)?Promise.resolve(_.get(u)?.value):this.concurrencyHandle(l,e,a).then(e=>(_.set(u,e,i??this.cache_time),e)).catch(a=>{throw I.error(`${P} Failed: from=${r},to=${o},engine=${t},translate text: \n${s()}\n${e}\n${s()}\n error: ${c(a)}`),a instanceof n?a:new n(P,c(a))})}async concurrencyHandle(e,a,t){const{max_character_num:i=K}=t,r=i>0?i:K;if(Array.isArray(a)){if(function(e,a){return!(!e||e.length<=0)&&e.reduce((e,a)=>e+a.length,0)>a}(a,i))throw new n(P,"String arrays do not support automatic character splitting, and the total number of characters in a string array exceeds the limit on the number of translated characters.");return e.translate(a,t)}return this.concurrencyTranslate(e,a,t,r)}async concurrencyTranslate(e,a,n,t){const i=function(e,a){const n=[/\n\n+/,/[.。!??!\n]/,/[;;]/,/[,,]/g,/\s/],t=[];for(;e.length>0;){const i=e.slice(0,a);if(e.length<=a){t.push(e);break}let r=-1;for(const e of n){const n=new RegExp(e.source+"(?=[^]*)","g");let t,o;for(;null!==(t=n.exec(i));)t.index===n.lastIndex&&n.lastIndex++,o=null!=o?t.index>o.index?t:o:t;if(void 0!==o?.index&&o.index>=.7*a){r=o.index;break}}-1===r&&(r=i.lastIndexOf(" ",a),r=-1===r?a:r),0==r?e=e.slice(r+1):(t.push(e.slice(0,r)),e=e.slice(r))}return t}(a,t).map((e,a)=>({content:e,index:a})),r=[];let o=0;const s=this.concurrencyDelay,c=this.concurrencyMax;return new Promise((a,t)=>(function l(){for(;o<c&&i.length>0;){const{content:c,index:u}=i.shift();o++,e.translate(c,n).then(e=>{r.push({translated:e,index:u})}).catch(e=>t(e)).finally(async()=>{if(o--,0===o&&i.length<=0){r.sort((e,a)=>e.index-a.index);const e=r.reduce((e,a)=>e.concat(a.translated),[]);return a([e.join("")])}var e;await(e=s,new Promise(a=>setTimeout(a,e))),l()})}}(),r))}}const H=new E;var O={engines:S,translator:H,Translator:E,Cache:r,getLanguage:j};exports.Cache=r,exports.CheckLanguageError=t,exports.OPEN_AI_MODELS=i,exports.TranslationError=n,exports.Translator=E,exports.checkLanguages=M,exports.default=O,exports.engines=S,exports.getLanguage=j,exports.normalFromLanguage=L,exports.normalToLanguage=B,exports.originLanguages=A,exports.targetLanguages=z,exports.translator=H;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"fs/promises";import"fs";import"path";import{TranslateClient as e,TranslateTextCommand as a}from"@aws-sdk/client-translate";import n from"crypto";class t extends Error{region;constructor(e,a){super(a),this.region=e,Error.captureStackTrace(this,this.constructor)}}class i extends Error{region;constructor(e,a){super(a),this.region=e,Error.captureStackTrace(this,this.constructor)}}const r=["o1-preview","o1-preview-2024-09-12","o1-mini-2024-09-12","o1-mini","dall-e-2","gpt-3.5-turbo","gpt-3.5-turbo-0125","babbage-002","davinci-002","dall-e-3","text-embedding-3-large","gpt-3.5-turbo-16k","tts-1-hd-1106","text-embedding-ada-002","text-embedding-3-small","tts-1-hd","whisper-1","gpt-3.5-turbo-1106","gpt-3.5-turbo-instruct","gpt-4o-mini-2024-07-18","gpt-4o-mini","tts-1","tts-1-1106","gpt-3.5-turbo-instruct-0914"];class o{cache;constructor(){this.cache=new Map}set(e,a,n){if(n<=0)throw new Error("time must be greater than 0");const t=this.cache.get(e);t&&clearTimeout(t.timeout);const i={value:a,expire:Date.now()+n};isNaN(i.expire)||(i.timeout=setTimeout(()=>this.del(e),n)),this.cache.set(e,i)}get(e){return this.cache.get(e)}delete(e){let a=!0;const n=this.cache.get(e);return n?!isNaN(n.expire)&&n.expire<Date.now()?a=!1:clearTimeout(n.timeout):a=!1,a&&this.del(e),a}del(e){this.cache.delete(e)}clear(){for(const[,e]of this.cache.entries())clearTimeout(e.timeout);this.cache.clear()}}function s(e=""){return{log(...e){this.info(...e)},info(...a){console.log(`[translate ${e}]`,...a)},error(...a){console.error(`[translate ${e}]`,...a)},warn(...a){console.warn(`[translate ${e}]`,...a)}}}function c(){return"-".repeat(20)}function l(e,a="Translate fail ! "){return e instanceof TypeError?a+(e.cause?.message??e.message):a+e.message}async function u(e,a){let n=null;try{n=await a.json()}catch(e){}return new t(e,`Translate fail ! ${a.status}: ${a.statusText} ${n?.message??""}`)}var h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function g(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var d={exports:{}};var m,p,f={exports:{}};function w(){return m||(m=1,f.exports=(e=e||function(e,a){var n;if("undefined"!=typeof window&&window.crypto&&(n=window.crypto),"undefined"!=typeof self&&self.crypto&&(n=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!=typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&void 0!==h&&h.crypto&&(n=h.crypto),!n)try{n=require("crypto")}catch(e){}var t=function(){if(n){if("function"==typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},i=Object.create||function(){function e(){}return function(a){var n;return e.prototype=a,n=new e,e.prototype=null,n}}(),r={},o=r.lib={},s=o.Base={extend:function(e){var a=i(this);return e&&a.mixIn(e),a.hasOwnProperty("init")&&this.init!==a.init||(a.init=function(){a.$super.init.apply(this,arguments)}),a.init.prototype=a,a.$super=this,a},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var a in e)e.hasOwnProperty(a)&&(this[a]=e[a]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},c=o.WordArray=s.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=n!=a?n:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var a=this.words,n=e.words,t=this.sigBytes,i=e.sigBytes;if(this.clamp(),t%4)for(var r=0;r<i;r++){var o=n[r>>>2]>>>24-r%4*8&255;a[t+r>>>2]|=o<<24-(t+r)%4*8}else for(var s=0;s<i;s+=4)a[t+s>>>2]=n[s>>>2];return this.sigBytes+=i,this},clamp:function(){var a=this.words,n=this.sigBytes;a[n>>>2]&=4294967295<<32-n%4*8,a.length=e.ceil(n/4)},clone:function(){var e=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var a=[],n=0;n<e;n+=4)a.push(t());return new c.init(a,e)}}),l=r.enc={},u=l.Hex={stringify:function(e){for(var a=e.words,n=e.sigBytes,t=[],i=0;i<n;i++){var r=a[i>>>2]>>>24-i%4*8&255;t.push((r>>>4).toString(16)),t.push((15&r).toString(16))}return t.join("")},parse:function(e){for(var a=e.length,n=[],t=0;t<a;t+=2)n[t>>>3]|=parseInt(e.substr(t,2),16)<<24-t%8*4;return new c.init(n,a/2)}},g=l.Latin1={stringify:function(e){for(var a=e.words,n=e.sigBytes,t=[],i=0;i<n;i++){var r=a[i>>>2]>>>24-i%4*8&255;t.push(String.fromCharCode(r))}return t.join("")},parse:function(e){for(var a=e.length,n=[],t=0;t<a;t++)n[t>>>2]|=(255&e.charCodeAt(t))<<24-t%4*8;return new c.init(n,a)}},d=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(g.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return g.parse(unescape(encodeURIComponent(e)))}},m=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=d.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(a){var n,t=this._data,i=t.words,r=t.sigBytes,o=this.blockSize,s=r/(4*o),l=(s=a?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*o,u=e.min(4*l,r);if(l){for(var h=0;h<l;h+=o)this._doProcessBlock(i,h);n=i.splice(0,l),t.sigBytes-=u}return new c.init(n,u)},clone:function(){var e=s.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});o.Hasher=m.extend({cfg:s.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){m.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(a,n){return new e.init(n).finalize(a)}},_createHmacHelper:function(e){return function(a,n){return new p.HMAC.init(e,n).finalize(a)}}});var p=r.algo={};return r}(Math),e)),f.exports;var e}var y=g(d.exports=(p=w(),function(e){var a=p,n=a.lib,t=n.WordArray,i=n.Hasher,r=a.algo,o=[];!function(){for(var a=0;a<64;a++)o[a]=4294967296*e.abs(e.sin(a+1))|0}();var s=r.MD5=i.extend({_doReset:function(){this._hash=new t.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,a){for(var n=0;n<16;n++){var t=a+n,i=e[t];e[t]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var r=this._hash.words,s=e[a+0],g=e[a+1],d=e[a+2],m=e[a+3],p=e[a+4],f=e[a+5],w=e[a+6],y=e[a+7],k=e[a+8],b=e[a+9],T=e[a+10],S=e[a+11],v=e[a+12],C=e[a+13],$=e[a+14],A=e[a+15],x=r[0],z=r[1],M=r[2],B=r[3];x=c(x,z,M,B,s,7,o[0]),B=c(B,x,z,M,g,12,o[1]),M=c(M,B,x,z,d,17,o[2]),z=c(z,M,B,x,m,22,o[3]),x=c(x,z,M,B,p,7,o[4]),B=c(B,x,z,M,f,12,o[5]),M=c(M,B,x,z,w,17,o[6]),z=c(z,M,B,x,y,22,o[7]),x=c(x,z,M,B,k,7,o[8]),B=c(B,x,z,M,b,12,o[9]),M=c(M,B,x,z,T,17,o[10]),z=c(z,M,B,x,S,22,o[11]),x=c(x,z,M,B,v,7,o[12]),B=c(B,x,z,M,C,12,o[13]),M=c(M,B,x,z,$,17,o[14]),x=l(x,z=c(z,M,B,x,A,22,o[15]),M,B,g,5,o[16]),B=l(B,x,z,M,w,9,o[17]),M=l(M,B,x,z,S,14,o[18]),z=l(z,M,B,x,s,20,o[19]),x=l(x,z,M,B,f,5,o[20]),B=l(B,x,z,M,T,9,o[21]),M=l(M,B,x,z,A,14,o[22]),z=l(z,M,B,x,p,20,o[23]),x=l(x,z,M,B,b,5,o[24]),B=l(B,x,z,M,$,9,o[25]),M=l(M,B,x,z,m,14,o[26]),z=l(z,M,B,x,k,20,o[27]),x=l(x,z,M,B,C,5,o[28]),B=l(B,x,z,M,d,9,o[29]),M=l(M,B,x,z,y,14,o[30]),x=u(x,z=l(z,M,B,x,v,20,o[31]),M,B,f,4,o[32]),B=u(B,x,z,M,k,11,o[33]),M=u(M,B,x,z,S,16,o[34]),z=u(z,M,B,x,$,23,o[35]),x=u(x,z,M,B,g,4,o[36]),B=u(B,x,z,M,p,11,o[37]),M=u(M,B,x,z,y,16,o[38]),z=u(z,M,B,x,T,23,o[39]),x=u(x,z,M,B,C,4,o[40]),B=u(B,x,z,M,s,11,o[41]),M=u(M,B,x,z,m,16,o[42]),z=u(z,M,B,x,w,23,o[43]),x=u(x,z,M,B,b,4,o[44]),B=u(B,x,z,M,v,11,o[45]),M=u(M,B,x,z,A,16,o[46]),x=h(x,z=u(z,M,B,x,d,23,o[47]),M,B,s,6,o[48]),B=h(B,x,z,M,y,10,o[49]),M=h(M,B,x,z,$,15,o[50]),z=h(z,M,B,x,f,21,o[51]),x=h(x,z,M,B,v,6,o[52]),B=h(B,x,z,M,m,10,o[53]),M=h(M,B,x,z,T,15,o[54]),z=h(z,M,B,x,g,21,o[55]),x=h(x,z,M,B,k,6,o[56]),B=h(B,x,z,M,A,10,o[57]),M=h(M,B,x,z,w,15,o[58]),z=h(z,M,B,x,C,21,o[59]),x=h(x,z,M,B,p,6,o[60]),B=h(B,x,z,M,S,10,o[61]),M=h(M,B,x,z,d,15,o[62]),z=h(z,M,B,x,b,21,o[63]),r[0]=r[0]+x|0,r[1]=r[1]+z|0,r[2]=r[2]+M|0,r[3]=r[3]+B|0},_doFinalize:function(){var a=this._data,n=a.words,t=8*this._nDataBytes,i=8*a.sigBytes;n[i>>>5]|=128<<24-i%32;var r=e.floor(t/4294967296),o=t;n[15+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),n[14+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),a.sigBytes=4*(n.length+1),this._process();for(var s=this._hash,c=s.words,l=0;l<4;l++){var u=c[l];c[l]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});function c(e,a,n,t,i,r,o){var s=e+(a&n|~a&t)+i+o;return(s<<r|s>>>32-r)+a}function l(e,a,n,t,i,r,o){var s=e+(a&t|n&~t)+i+o;return(s<<r|s>>>32-r)+a}function u(e,a,n,t,i,r,o){var s=e+(a^n^t)+i+o;return(s<<r|s>>>32-r)+a}function h(e,a,n,t,i,r,o){var s=e+(n^(a|~t))+i+o;return(s<<r|s>>>32-r)+a}a.MD5=i._createHelper(s),a.HmacMD5=i._createHmacHelper(s)}(Math),p.MD5));const k=s("openai");function b(e,a="",t){return t?n.createHmac("sha256",a).update(e).digest(t):n.createHmac("sha256",a).update(e).digest()}function T(e,a="hex"){return n.createHash("sha256").update(e).digest(a)}function S({secretId:e,secretKey:a,service:n,host:t,payload:i,httpRequestMethod:r,action:o,apiVersion:s,region:c}){const l=Math.floor(Date.now()/1e3),u=function(e){const a=new Date(1e3*e);return`${a.getUTCFullYear()}-${("0"+(a.getUTCMonth()+1)).slice(-2)}-${("0"+a.getUTCDate()).slice(-2)}`}(l),h="content-type:application/json; charset=utf-8\nhost:"+t+"\n",g="content-type;host",d=T(i),m="TC3-HMAC-SHA256",p=`${u}/${n}/tc3_request`,f=[m,l,p,T([r,"/","",h,g,d].join("\n"))].join("\n"),w=b(u,"TC3"+a),y=b(n,w),k=b("tc3_request",y),S={Authorization:`${m} Credential=${e}/${p}, SignedHeaders=${g}, Signature=${b(f,k,"hex")}`,"Content-Type":"application/json; charset=utf-8",Host:t,"X-TC-Action":o,"X-TC-Timestamp":l,"X-TC-Version":s};return c&&(S["X-TC-Region"]=c),S}const v={google:function(e){const a="https://translate.googleapis.com/translate_a/single";return{name:"google",async translate(e,n){const{from:i="auto",to:r}=n;Array.isArray(e)||(e=[e]);const o=e.join("\n"),s=`${a}?client=gtx&sl=${i}&tl=${r}&dt=t&q=${encodeURI(o)}`,c=await fetch(s);if(!c.ok)throw await u(this.name,c);const l=await c.json();if(!l||0===l.length)throw new t(this.name,"Translate fail ! translate's result is null or empty");const h=[];for(let e=0;l[0]&&e<l[0].length;e++){const a=l[0][e];a&&0!=a.length&&Array.isArray(a)&&a[0]&&h.push(a[0].replaceAll("\n",""))}return h},async checkLanguage(e){const n=`${a}?client=gtx&sl=auto&tl=en&dt=t&q=${encodeURI(e)}`,t=await fetch(n);if(!t.ok)throw await u(this.name,t);const r=await t.json();if(!r||r.length<3)throw new i(this.name,"Check language fail! No result returned");const o=r[2];if(!o)throw new i(this.name,"Check language fail! Language not detected");return o}}},azure:function(e){const{key:a,region:n}=e,r="azure",o=()=>{if(!a||!n)throw new t(r,`${r} key and region is required`)};o();const s="https://api.cognitive.microsofttranslator.com/translate?api-version=3.0";return{name:r,async translate(e,i){o();const{from:r,to:c}=i,l=`${s}&to=${c}${r&&"auto"!==r?`&from=${r}`:""}`;Array.isArray(e)||(e=[e]);const h=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8","Ocp-Apim-Subscription-Key":a,"Ocp-Apim-Subscription-Region":n},body:JSON.stringify(e.map(e=>({Text:e})))});if(!h.ok)throw await u(this.name,h);const g=await h.json();if(g.error)throw new t(this.name,`Translate fail ! code: ${g.error.code}, message: ${g.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);const d=g;if(!d||0===d.length)throw new t(this.name,"Translate fail ! translate's result is null or empty");const m=[];for(const e of d)e.translations&&0!=e.translations.length&&m.push(...e.translations.map(e=>e.text));return m},async checkLanguage(e){o();const t=`${s}&to=en`,r=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8","Ocp-Apim-Subscription-Key":a,"Ocp-Apim-Subscription-Region":n},body:JSON.stringify([{Text:e}])});if(!r.ok)throw await u(this.name,r);const c=await r.json();if(c.error)throw new i(this.name,`checkLanguage fail ! code: ${c.error.code}, message: ${c.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);if(!c||!Array.isArray(c)||0===c.length)throw new i(this.name,"Check language fail! No result returned");const l=c[0]?.detectedLanguage?.language;if(!l)throw new i(this.name,"Check language fail! Language not detected");return l}}},amazon:function(n){const{region:i,accessKeyId:r,secretAccessKey:o}=n,s="amazon",c=()=>{if(!i||!r||!o)throw new t(s,`${s} region, accessKeyId ,secretAccessKey is required`)};return c(),{name:s,async translate(n,t){c();const{from:s="auto",to:l}=t,u=new e({region:i,credentials:{accessKeyId:r,secretAccessKey:o}});Array.isArray(n)||(n=[n]);const h=new a({SourceLanguageCode:s,TargetLanguageCode:l,Text:n.join("\n")}),g=await u.send(h),d=[];if(g.TranslatedText){const e=g.TranslatedText??"";d.push(...e.split("\n"))}return d},async checkLanguage(n){c();const l=new e({region:i,credentials:{accessKeyId:r,secretAccessKey:o}}),u=new a({SourceLanguageCode:"auto",TargetLanguageCode:"en",Text:n});try{const e=await l.send(u);if(!e.SourceLanguageCode)throw new t(s,"Check language fail! Source language not detected");return e.SourceLanguageCode}catch(e){throw new t(s,`Check language fail! ${e.message||e}`)}}}},baidu:function(e){const{appId:a,secretKey:n}=e,r="baidu",o=()=>{if(!a||!n)throw new t(r,`${r} appId and secretKey is required`)};return o(),{name:r,async translate(e,i){o();const{to:r,from:s="auto",domain:c="it"}=i;Array.isArray(e)||(e=[e]);const l=e.join("\n"),h=Date.now(),g=y(`${a}${l}${h}${c}${n}`).toString(),d=new URLSearchParams;d.append("q",l),d.append("from",s),d.append("to",r),d.append("appid",a),d.append("salt",h.toString()),d.append("domain",c),d.append("sign",g);const m=await fetch("https://fanyi-api.baidu.com/api/trans/vip/fieldtranslate",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:d.toString()});if(!m.ok)throw await u(this.name,m);const p=await m.json();if(!p||p.error_code||!p.trans_result||0===p.trans_result.length)throw new t(this.name,`Translate fail ! error_code:${p.error_code}, error_msg: ${p.error_msg} \n Go to https://fanyi-api.baidu.com/product/123 view details`);const f=[];for(const e of p.trans_result)e.dst&&f.push(e.dst);return f},async checkLanguage(e){o();const t=Date.now(),r=y(`${a}${e}${t}${n}`).toString(),s=new URLSearchParams;s.append("q",e),s.append("appid",a),s.append("salt",t.toString()),s.append("sign",r);const c=await fetch("https://fanyi-api.baidu.com/api/trans/vip/language",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:s.toString()});if(!c.ok)throw await u(this.name,c);const l=await c.json();if(!l||0!=l.error_code)throw new i(this.name,`Check language fail ! error_code:${l.error_code}, error_msg: ${l.error_msg} \n Go to https://fanyi-api.baidu.com/product/143 view details`);return l.data.src}}},deepl:function(e){const{key:a}=e,n="deepl",r=()=>{if(!a)throw new t(n,`${n} key is required`)};r();const o="https://api-free.deepl.com/v2/translate";return{name:n,async translate(e,n){r();const{to:i,from:s}=n;Array.isArray(e)||(e=[e]);const c=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8",Authorization:`DeepL-Auth-Key ${a}`,Accept:"*/*",Host:"api-free.deepl.com",Connection:"keep-alive"},body:JSON.stringify({text:e,source_lang:"auto"===s?void 0:s,target_lang:i})});if(!c.ok)throw await u(this.name,c);const l=await c.json();if(l.error)throw new t(this.name,`Translate fail ! code: ${l.error.code}, message: ${l.error.message}`);const h=l.translations;if(!h||0===h.length)throw new t(this.name,"Translate fail ! translate's result is null or empty");return h.map(e=>e.text)},async checkLanguage(e){r();const n=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8",Authorization:`DeepL-Auth-Key ${a}`,Accept:"*/*",Host:"api-free.deepl.com",Connection:"keep-alive"},body:JSON.stringify({text:[e],target_lang:"EN"})});if(!n.ok)throw await u(this.name,n);const t=await n.json();if(t.error)throw new i(this.name,`Check language fail ! code: ${t.error.code}, message: ${t.error.message}`);const s=t.translations;if(!s||0===s.length)throw new i(this.name,"Check language fail! No result returned");const c=s[0].detected_source_language;if(!c)throw new i(this.name,"Check language fail! Language not detected");return c}}},openai:function(e){const{apiKey:a,model:n,maxTokens:i=2e3,outputLog:o=!1}=e,s="openai",c=()=>{if(!a)throw new t(s,`${s} apiKey is required`);if(!r.includes(n))throw new t(s,`${s} model=${n} is invalid`)};return c(),{name:s,async translate(e,r){c();const{from:s,to:l}=r;Array.isArray(e)||(e=[e]);const h={role:"user",content:`\n 满足以下4点翻译要求:\n 1.将每段文本从${s}翻译为${l}\n 2.文本内容以换行符\n进行段落分割,并以段落分割顺序进行翻译\n 3.仅翻译分割出的段落,其他任何不相关的内容都移除,比如:段落前后的空格、所有标点符号\n\n 4.仅返回要翻译的文本内容,不要返回任何其他内容\n\n 如何提取翻译文本,满足以下2点要求:\n 1.翻译从-$s$-字符标记开始至-$e$-字符标记结束,提取-$s$-至-$e$-之间的内容\n 2.-$s$-和-$e$-这2个标记不要返回,只是用来标记翻译的起始和结束位置\n\n -$s$-\n ${e.join("\n")} \n -$e$-\n `},g=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${a}`},body:JSON.stringify({model:n,messages:[{role:"system",content:"You are a professional translator"},h],max_tokens:i,temperature:0})});if(!g.ok)throw await u(this.name,g);const d=await g.json();if(d.error)throw new t(this.name,`Translate fail! message: ${d.error.message}`);if(!d||!d.choices||0===d.choices.length||!d.choices[0]?.message?.content)throw new t(this.name,"Translate fail ! translate's result is null or empty");const m=d.choices[0].message.content,p=["-$s$-","-$e$-"],f=m.trim().split("\n").map(e=>e.trim()).filter(Boolean).filter(e=>!p.includes(e));return o&&(k.info("prompt:",JSON.stringify(h,null,2)),k.info("translations:",JSON.stringify(f,null,2))),f}}},tencent:function(e){const{secretId:a,secretKey:n,region:r="ap-guangzhou"}=e,o="tencent",s="tmt.tencentcloudapi.com",c=`https://${s}/`,l="2018-03-21",u="TextTranslate";function h(){if(!a||!n)throw new t(o,`${o} secretId and secretKey are required`)}return{name:o,async translate(e,i){h();const{from:g="auto",to:d}=i,m="auto"===g?"auto":g,p={SourceText:Array.isArray(e)?e.join("\n"):e,Source:m,Target:d,ProjectId:0},f=JSON.stringify(p),w=S({secretId:a,secretKey:n,service:"tmt",host:s,payload:f,httpRequestMethod:"POST",action:u,apiVersion:l,region:r});try{const e=await fetch(c,{method:"POST",headers:w,body:f});if(!e.ok)throw new t(o,`HTTP ${e.status}: ${await e.text()}`);const a=await e.json();if(a.Response?.Error)throw new t(o,`Tencent translate fail: ${a.Response.Error.Code}, ${a.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);const n=a.Response?.TargetText.split("\n")??[];if(!Array.isArray(n)||0===n.length)throw new t(o,"Translate fail! No result returned");return n}catch(e){if(e instanceof t)throw e;throw new t(o,`Translation failed: ${e}`)}},async checkLanguage(e){h();const t={SourceText:e,Source:"auto",Target:"en",ProjectId:0},g=JSON.stringify(t),d=S({secretId:a,secretKey:n,service:"tmt",host:s,payload:g,httpRequestMethod:"POST",action:u,apiVersion:l,region:r});try{const e=await fetch(c,{method:"POST",headers:d,body:g});if(!e.ok)throw new i(o,`HTTP ${e.status}: ${await e.text()}`);const a=await e.json();if(a.Response?.Error)throw new i(o,`Tencent language detect fail: ${a.Response.Error.Code}, ${a.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);const n=a.Response?.Source;if(!n)throw new i(o,"Language detect fail! No result returned");return n}catch(e){if(e instanceof i)throw e;throw new i(o,`Language detection failed: ${e}`)}}}}};var C={Afrikaans:"af",Albanian:"sq",Amharic:"am",Arabic:"ar",Armenian:"hy",Assamese:"as",Azerbaijani:"az",Bashkir:"ba",Basque:"eu",Bengali:"bn",Bhojpuri:"bho",Bosnian:"bs",Bulgarian:"bg",Burmese:"my","Cantonese (Traditional)":"yue",Catalan:"ca",Chhattisgarhi:"hne",Chinese:"zh-Hans","Chinese (Literary)":"lzh","Chinese (Traditional)":"zh-Hant",Croatian:"hr",Czech:"cs",Danish:"da",Dari:"prs",Dhivehi:"dv",Dogri:"doi",Double:"lug",Dutch:"nl",English:"en",Estonian:"et","FYRO Macedonian":"mk",Faroese:"fo",Fijian:"fj",Filipino:"fil",Finnish:"fi",French:"fr","French (Canada)":"fr-CA",Galician:"gl",Georgian:"ka",German:"de",Greek:"el",Gujarati:"gu","Haitian Creole":"ht",Hausa:"ha",Hebrew:"he",Hindi:"hi",Hmong:"mww",Hungarian:"hu",Icelandic:"is",Igbo:"ig",Indonesian:"id",Inuinnaqtun:"ikt",Inuktitut:"iu","Inuktitut (Latin)":"iu-Latn",Irish:"ga",Italian:"it",Japanese:"ja",Kannada:"kn",Kashmiri:"ks",Kazakh:"kk",Khmer:"km",Kikwanda:"rw","Klingon (Latin)":"tlh-Latn","Klingon (pIqaD)":"tlh-Piqd",Konkani:"gom",Korean:"ko","Kurdish (Medium)":"ku","Kurdish (North)":"kmr",Kyrgyz:"ky",Lao:"lo",Latvian:"lv",Lingala:"ln",Lithuanian:"lt","Lower Sorbian language":"dsb",Maithili:"mai",Malagasian:"mg",Malay:"ms",Malayalam:"ml",Maltese:"mt",Manipuri:"mni",Marathi:"mr","Mongolian (Cyrillic)":"mn-Cyrl","Mongolian (Traditional)":"mn-Mong","Māori":"mi",Nepali:"ne","Norwegian Bokmål":"nb",Nyanja:"nya",Oriya:"or",Pashto:"ps",Persian:"fa",Polish:"pl","Portugal (Brazil)":"pt","Portugal (Portugal)":"pt-PT",Punjabi:"pa","Querétaro Ottomi":"otq",Romanian:"ro",Rounds:"run",Russian:"ru",Samoan:"sm","Serbia (Latin)":"sr-Latn","Serbian (Cyrillic)":"sr-Cyrl",Sesotho:"st","Sesotho at Leboa":"nso",Setswana:"tn",Shona:"sn",Sindhi:"sd",Sinhalese:"si",Slovak:"sk",Slovenian:"sl",Somali:"so",Spanish:"es",Swahili:"sw",Swedish:"sv",Tahiti:"ty",Tamil:"ta",Tatar:"tt",Telugu:"te",Thai:"th",Tibetan:"bo",Tigrinya:"ti",Tongan:"to",Turkish:"tr",Turkmen:"tk",Uighur:"ug",Ukrainian:"uk","Upper Sorbian":"hsb",Urdu:"ur",Uzbek:"uz",Vietnamese:"vi",Welsh:"cy",Will:"brx",Xhosa:"xh",Yoruba:"yo","Yucatec Maya":"yua",Zulu:"zu"},$={Abkhazian:"ab",Acehnese:"ace","Acholi language":"ach",Afar:"aa",Afrikaans:"af",Albanian:"sq",Alur:"alz",Amharic:"am",Arabic:"ar",Armenian:"hy",Assamese:"as",Avar:"av",Awadhi:"awa",Aymara:"ay",Azerbaijani:"az",Badawi:"bew",Balinese:"ban",Balochi:"bal",Bambara:"bm",Bangasinan:"pag",Bashkir:"ba",Basque:"eu",Batakkalo:"btx","Bataksi Marungon":"bts",Bataktoba:"bbc",Baure:"bci",Belarusian:"be",Bengali:"bn",Bhojpuri:"bho",Bikol:"bik",Bosnian:"bs",Breton:"br",Bulgarian:"bg",Burmese:"my","Buryat language":"bua",Cantonese:"yue",Casey:"kha",Catalan:"ca",Cebuano:"ceb","Chamorro language":"ch",Chechen:"ce",Chevi:"ak",Chicheva:"ny",Chiga:"cgg",Chinese:"zh-CN","Chinese (Traditional)":"zh-TW",Chuk:"chk",Chuvash:"cv",Conga:"ts",Corsican:"co","Crimean Tatar":"crh",Croatian:"hr",Czech:"cs",Danish:"da",Dari:"fa-AF",Dhivehi:"dv",Dinka:"din",Dogra:"doi",Dutch:"nl",Dyula:"dyu",Dzongka:"dz",Elocano:"ilo",English:"en",Esperanto:"eo",Estonian:"et",Ewe:"ee","FYRO Macedonian":"mk",Faroese:"fo","Feng language":"fon",Fijian:"fj",Filipino:"tl",Finnish:"fi",French:"fr",Frisian:"fy",Friulian:"fur",Fulani:"ff",Ga:"gaa",Galician:"gl",Georgian:"ka",German:"de",Gongen:"gom",Gorkbojok:"trp","Grace and Taoism":"ndc-ZW",Greek:"el",Greenlandic:"kl",Guarani:"gn",Gujarati:"gu","Haitian Creole":"ht",Hakachin:"cnh",Hausa:"ha",Hawaiian:"haw",Hebrew:"iw",Heligaignon:"hil",Hindi:"hi",Hmong:"hmn",Hungarian:"hu","Hunsrück":"hrx",Iban:"iba",Icelandic:"is",Igbo:"ig",Indonesian:"id",Irish:"ga",Italian:"it","Jamaica vernacular":"jam",Japanese:"ja",Javanese:"jw","Jingpo language":"kac",Kannada:"kn",Kanuri:"kr",Kazakh:"kk",Kekchi:"kek",Khmer:"km",Kikwanda:"rw",Kithuba:"ktu","Komi language":"kv",Kongo:"kg",Korean:"ko","Kurdish (Kurmanji)":"ku","Kurdish (Solani)":"ckb",Kyrgyz:"ky",Lao:"lo",Latin:"la",Latvian:"lv",Ligurian:"lij",Limburg:"li",Lingala:"ln",Lithuanian:"lt",Lombard:"lmo",Luganda:"lg",Luo:"luo",Luxembourg:"lb",Madura:"mad",Maithili:"mai",Makassar:"mak",Malagasian:"mg",Malay:"ms","Malay, Jawi":"ms-Arab",Malayalam:"ml",Maltese:"mt","Malwadi language":"mwr",Mamu:"mam",Manx:"gv",Marathi:"mr",Marshallese:"mh","Mauritius Scrio whispers":"mfe","Meitei (Manipur)":"mni-Mtei",Minan:"min",Mizo:"lus",Mongolian:"mn","Māori":"mi","Nahuatl (Eastern Vastka)":"nhe","Ndebele (Southern)":"nr",Ndombe:"dov","Nepal Language (Newar)":"new",Nepali:"ne","Nko alphabet (West African written script)":"bm-Nkoo","Northern Sotho":"nso",Norwegian:"no",Nuer:"nus",Occitan:"oc",Oriya:"or","Oromo language":"om",Ossetian:"os",Pampangja:"pam",Papiamento:"pap",Pashto:"ps",Pemba:"bem",Persian:"fa",Polish:"pl","Portugal (Brazil)":"pt","Portugal (Portugal)":"pt-PT","Punjabi (Gurumuchi)":"pa","Punjabi (Shamuki)":"pa-Arab",Quechua:"qu",Ratgale:"ltg",Romani:"rom",Romanian:"ro",Rondi:"rn",Russian:"ru",Sabatec:"zap",Sakha:"sah",Samoan:"sm",Sango:"sg",Sanskrit:"sa",Santali:"sat-Latn","Schuna language":"sn","Scottish Gaelic":"gd",Serbian:"sr","Seychellois Creole":"crs",Shan:"shn",Sicilian:"scn","Sierra Leonean Creole":"kri",Silesian:"szl",Sindhi:"sd",Sinhalese:"si",Slovak:"sk",Slovenian:"sl",Somali:"so","South Sotho":"st",Spanish:"es","Steppe Mali":"chm",Sundanese:"su","Susu language":"sus",Swahili:"sw",Swat:"ss",Swedish:"sv","Sámi (North)":"se",Tahiti:"ty",Tajik:"tg",Tamaset:"ber-Latn","Tamazight (Tifinaven)":"ber",Tamil:"ta",Tatar:"tt",Telugu:"te",Tetum:"tet",Thai:"th",Tibetan:"bo","Tiff language":"tiv",Tigrinya:"ti","Tok Pisin":"tpi",Tongan:"to",Tswana:"tn",Tulu:"tcy","Tumbuka language":"tum",Turkish:"tr",Turkmen:"tk",Tuvan:"tyv",Udmurtic:"udm",Uighur:"ug",Ukrainian:"uk",Urdu:"ur",Uzbek:"uz",Venda:"ve",Venetian:"vec",Vietnamese:"vi","Wari language":"war",Welsh:"cy","Wolof language":"wo",Xhosa:"xh",Yiddish:"yi",Yoruba:"yo","Yucatan Maya":"yua",Zulu:"zu"},A={Achinese:"ach",Afrikaans:"afr",Akan:"aka",Albanian:"alb","Algerian Arabic":"arq",Amharic:"amh","Ancient Greek":"gra",Arabic:"ara",Aragonese:"arg",Armenian:"arm",Assamese:"asm",Asturian:"ast",Aymara:"aym",Azerbaijani:"aze",Baluchi:"bal",BasaSunda:"sun",Bashkir:"bak",Basque:"baq",Belarusian:"bel",Bemba:"bem",Bengali:"ben","Berber languages":"ber",Bhojpuri:"bho",Bislama:"bis",Blin:"bli","Bokmål":"nob",Bosnian:"bos","Brazilian Portuguese":"pot",Breton:"bre",Bulgarian:"bul",Buriat:"bui",Burmese:"bur","Canadian French":"frn",Cantonese:"yue",Catalan:"cat",Cebuano:"ceb",Chechen:"che",Cherokee:"chr",Chichewa:"nya",Chinese:"zh",Chuvash:"chv","Classical Chinese":"wyw",Cornish:"cor",Corsican:"cos",Creek:"cre","Crimean Tatar":"cri",Croatian:"hrv",Czech:"cs",Danish:"dan",Divehi:"div",Dutch:"nl",Dzongkha:"dzo",English:"en",Esperanto:"epo",Estonian:"est",Faroese:"fao",Filipino:"fil",Finnish:"fin",French:"fra",Friulian:"fri",Fulani:"ful",Gaelic:"gla",Galician:"glg",Georgian:"geo",German:"de",Greek:"el",Guarani:"grn",Gujarati:"guj","Haitian Creole":"ht","Hakha Chin":"hak",Hausa:"hau",Hawaiian:"haw",Hebrew:"heb",Hiligaynon:"hil",Hindi:"hi",Hmong:"hmn",Hungarian:"hu",Hupa:"hup",Icelandic:"ice",Ido:"ido",Igbo:"ibo",Indonesian:"id",Ingush:"ing","Interlingua ":"ina",Inuktitut:"iku",Irish:"gle",Italian:"it",Japanese:"jp",Javanese:"jav",Kabyle:"kab",Kalaallisut:"kal",Kalmyk:"kam",Kannada:"kan",Kanuri:"kau",Kashmiri:"kas",Kashubian:"kah",Khmer:"hkm",Kinyarwanda:"kin",Klingon:"kli",Kongo:"kon",Konkani:"kok",Korean:"kor",Kurdish:"kur",Kyrgyz:"kir",Lao:"lao",Latgalian:"lag",Latin:"lat",Latvian:"lav",Limburgish:"lim",Lingala:"lin",Lithuanian:"lit",Lojban:"loj","Low German":"log","Lower Sorbian":"los",Luganda:"lug",Luxembourgish:"ltz",Macedonian:"mac",Maithili:"mai",Malagasy:"mg",Malay:"may",Malayalam:"mal",Maltese:"mlt",Manx:"glv",Maori:"mao",Marathi:"mar",Marshallese:"mah","Mauritian Creole":"mau","Middle French":"frm",Mongolian:"moc",Montenegrin:"mot","N'Ko":"nqo",Neapolitan:"nea",Nepali:"nep","Northern Sami":"sme","Northern Sotho":"ped",Norwegian:"nor",Nynorsk:"nno",Occitan:"oci",Ojibwa:"oji","Old English":"eno",Oriya:"ori",Oromo:"orm",Ossetian:"oss",Pampanga:"pam",Papiamento:"pap",Pashto:"pus",Persian:"per",Polish:"pl",Portuguese:"pt",Punjabi:"pan",Quechua:"que",Romanian:"rom",Romansh:"roh",Romany:"ro",Russian:"ru",Rusyn:"ruy",Samoan:"sm",Sanskrit:"san",Sardinian:"srd",Scots:"sco","Serb(Cyrillic)":"src",Serbian:"srp","Serbo-Croatian":"sec",Shan:"sha",Shona:"sna",Silesian:"sil",Sindhi:"snd",Sinhala:"sin",Slovak:"sk",Slovenian:"slo",Somali:"som","Songhai languages":"sol","Southern Ndebele":"nbl","Southern Sotho":"sot",Spanish:"spa",Swahili:"swa",Swedish:"swe",Syriac:"syr",Tagalog:"tgl",Tajik:"tgk",Tamil:"tam",Tatar:"tat",Telugu:"tel",Tetum:"tet",Thai:"th",Tibetan:"tib",Tigrinya:"tir","Traditional Chinese":"cht",Tsonga:"tso","Tunisian Arabic":"tua",Turkish:"tr",Turkmen:"tuk",Twi:"twi",Ukrainian:"ukr","Upper Sorbian":"ups",Urdu:"urd",Uyghur:"uig",Venda:"ven",Vietnamese:"vie",Walloon:"wln",Welsh:"wel","Western Frisian":"fry",Wolof:"wol",Xhosa:"xho",Yiddish:"yid",Yoruba:"yor",Zaza:"zaz",Zulu:"zul"},x={Afrikaans:"af",Albanian:"sq",Amharic:"am",Arabic:"ar",Armenian:"hy",Azerbaijani:"az",Bengali:"bn",Bosnian:"bs",Bulgarian:"bg",Catalan:"ca","Chinese (Simplified)":"zh","Chinese (Traditional)":"zh-TW",Croatian:"hr",Czech:"cs",Danish:"da",Dari:"fa-AF",Dutch:"nl",English:"en",Estonian:"et","Farsi (Persian)":"fa","Filipino, Tagalog":"tl",Finnish:"fi",French:"fr","French (Canada)":"fr-CA",Georgian:"ka",German:"de",Greek:"el",Gujarati:"gu","Haitian Creole":"ht",Hausa:"ha",Hebrew:"he",Hindi:"hi",Hungarian:"hu",Icelandic:"is",Indonesian:"id",Irish:"ga",Italian:"it",Japanese:"ja",Kannada:"kn",Kazakh:"kk",Korean:"ko",Latvian:"lv",Lithuanian:"lt",Macedonian:"mk",Malay:"ms",Malayalam:"ml",Maltese:"mt",Marathi:"mr",Mongolian:"mn","Norwegian (Bokmål)":"no",Pashto:"ps",Polish:"pl","Portuguese (Brazil)":"pt","Portuguese (Portugal)":"pt-PT",Punjabi:"pa",Romanian:"ro",Russian:"ru",Serbian:"sr",Sinhala:"si",Slovak:"sk",Slovenian:"sl",Somali:"so",Spanish:"es","Spanish (Mexico)":"es-MX",Swahili:"sw",Swedish:"sv",Tamil:"ta",Telugu:"te",Thai:"th",Turkish:"tr",Ukrainian:"uk",Urdu:"ur",Uzbek:"uz",Vietnamese:"vi",Welsh:"cy"};const z={azure:C,google:$,baidu:A,deepl:{English:"en",Bulgarian:"bg",Chinese:"zh",Croatian:"hr",Czech:"cs",Danish:"da",Dutch:"nl",Estonian:"et",Finnish:"fi",French:"fr",German:"de",Greek:"el",Hungarian:"hu",Icelandic:"is",Indonesian:"id",Irish:"ga",Italian:"it",Japanese:"ja",Korean:"ko",Latvian:"lv",Lithuanian:"lt",Maltese:"mt",Norwegian:"nb",Polish:"pl",Portuguese:"pt",Romanian:"ro",Russian:"ru",Slovak:"sk",Slovenian:"sl",Spanish:"es",Swedish:"sv",Turkish:"tr",Ukrainian:"uk"},amazon:x,openai:$,tencent:{Auto:"auto",Chinese:"zh",TraditionalChinese:"zh-TW",English:"en",Japanese:"ja",Korean:"ko",French:"fr",Spanish:"es",Italian:"it",German:"de",Turkish:"tr",Russian:"ru",Portuguese:"pt",Vietnamese:"vi",Indonesian:"id",Thai:"th",Malay:"ms",Arabic:"ar",Hindi:"hi"}};const M={azure:C,google:$,baidu:A,deepl:{"American English":"en-US","Brazilian Portuguese":"pt-BR","British English":"en-GB",Bulgarian:"bg",Chinese:"zh",Croatian:"hr",Czech:"cs",Danish:"da",Dutch:"nl",Estonian:"et","European Portuguese":"pt-PT",Finnish:"fi",French:"fr",German:"de",Greek:"el",Hungarian:"hu",Icelandic:"is",Indonesian:"id",Irish:"ga",Italian:"it",Japanese:"ja",Korean:"ko",Latvian:"lv",Lithuanian:"lt",Maltese:"mt",Norwegian:"nb",Polish:"pl",Portuguese:"pt",Romanian:"ro",Russian:"ru",Slovak:"sk",Slovenian:"sl",Spanish:"es",Swedish:"sv",Turkish:"tr",Ukrainian:"uk"},amazon:x,openai:$,tencent:{"Simplified Chinese":"zh","Traditional Chinese":"zh-TW",English:"en",Japanese:"ja",Korean:"ko",French:"fr",Spanish:"es",Italian:"it",German:"de",Turkish:"tr",Russian:"ru",Portuguese:"pt",Vietnamese:"vi",Indonesian:"id",Thai:"th",Malay:"ms",Arabic:"ar",Hindi:"hi"}};const B=Object.assign(Object.assign({},z),{baidu:{Chinese:"zh",English:"en",Japanese:"jp",Korean:"kor",Thai:"th",Russian:"ru"}});function j(e,a){if("auto"===e)return"auto";const n=z[a];if(!n)throw new Error(`Engine ${a} not found`);if(Object.keys(z[a]).includes(e))return n[e];if(Object.values(z[a]).includes(e))return e;throw new Error(`Invalid from language ${a} ${e}`)}function L(e,a){const n=M[a];if(!n)throw new Error(`Engine ${a} not found`);if(Object.keys(M[a]).includes(e))return n[e];if(Object.values(M[a]).includes(e))return e;throw new Error(`Invalid to language ${a} ${e}`)}function P(e){return{from:z[e],to:M[e]}}const K="Translate",I=1e3,_=s(),H=new o;class E{engines;cache_time;concurrencyMax;concurrencyDelay;constructor(e=6e4,a=4,n=20){this.engines=new Map,this.cache_time=e,this.concurrencyMax=a,this.concurrencyDelay=n}use(e){this.addEngine(e)}addEngine(e){this.engines.has(e.name)?_.warn("Engine already exists"):this.engines.set(e.name,e)}removeEngine(e){if(!e||!this.engines.has(e))return _.warn("Engine name is required or not found"),!1;this.engines.delete(e)}isSupportCheckLanguage(e){if(!e||!this.engines.has(e))return _.warn("Engine name is required or not found"),!1;const a=this.engines.get(e);return a?!!a.checkLanguage:(_.warn(`Engine ${e} not found`),!1)}async checkLanguage(e,a){const{engine:n="google",max_character_num:r=I}=a;if(!this.engines.has(n))throw new i(K,`Engine ${n} not found`);const o=this.engines.get(n);if(!o)throw new i(K,`Engine ${n} is null`);if(!o.checkLanguage)throw new i(K,`Engine ${n} does not support checkLanguage method`);const s=r>0?e.substring(0,r):e;if(s.length<=0)throw new t(K,"Text is empty or too short to check language");return o.checkLanguage(s).then(e=>e).catch(a=>{throw _.error(`${K} Failed to check language for text: \n${c()}\n${e}\n${c()}\n error: ${l(a)}`),a})}async translate(e,a){const{engine:n="google",cache_time:i=6e4}=a;let{from:r="auto",to:o}=a;if(r=a.from=j(r,n),o=a.to=L(o,n),!this.engines.has(n))throw new t(K,`Engine ${n} not found`);const s=this.engines.get(n);if(!s)throw new t(K,`Engine ${n} is null`);if(!r)throw new t(K,`Invalid origin language ${r}`);if(!o)throw new t(K,`Invalid target language ${o}`);const u=`${r}:${o}:${n}:${e}`;return H.get(u)?Promise.resolve(H.get(u)?.value):this.concurrencyHandle(s,e,a).then(e=>(H.set(u,e,i??this.cache_time),e)).catch(a=>{throw _.error(`${K} Failed: from=${r},to=${o},engine=${n},translate text: \n${c()}\n${e}\n${c()}\n error: ${l(a)}`),a instanceof t?a:new t(K,l(a))})}async concurrencyHandle(e,a,n){const{max_character_num:i=I}=n,r=i>0?i:I;if(Array.isArray(a)){if(function(e,a){return!(!e||e.length<=0)&&e.reduce((e,a)=>e+a.length,0)>a}(a,i))throw new t(K,"String arrays do not support automatic character splitting, and the total number of characters in a string array exceeds the limit on the number of translated characters.");return e.translate(a,n)}return this.concurrencyTranslate(e,a,n,r)}async concurrencyTranslate(e,a,n,t){const i=function(e,a){const n=[/\n\n+/,/[.。!??!\n]/,/[;;]/,/[,,]/g,/\s/],t=[];for(;e.length>0;){const i=e.slice(0,a);if(e.length<=a){t.push(e);break}let r=-1;for(const e of n){const n=new RegExp(e.source+"(?=[^]*)","g");let t,o;for(;null!==(t=n.exec(i));)t.index===n.lastIndex&&n.lastIndex++,o=null!=o?t.index>o.index?t:o:t;if(void 0!==o?.index&&o.index>=.7*a){r=o.index;break}}-1===r&&(r=i.lastIndexOf(" ",a),r=-1===r?a:r),0==r?e=e.slice(r+1):(t.push(e.slice(0,r)),e=e.slice(r))}return t}(a,t).map((e,a)=>({content:e,index:a})),r=[];let o=0;const s=this.concurrencyDelay,c=this.concurrencyMax;return new Promise((a,t)=>(function l(){for(;o<c&&i.length>0;){const{content:c,index:u}=i.shift();o++,e.translate(c,n).then(e=>{r.push({translated:e,index:u})}).catch(e=>t(e)).finally(async()=>{if(o--,0===o&&i.length<=0){r.sort((e,a)=>e.index-a.index);const e=r.reduce((e,a)=>e.concat(a.translated),[]);return a([e.join("")])}var e;await(e=s,new Promise(a=>setTimeout(a,e))),l()})}}(),r))}}const O=new E;var R={engines:v,translator:O,Translator:E,Cache:o,getLanguage:P};export{o as Cache,i as CheckLanguageError,r as OPEN_AI_MODELS,t as TranslationError,E as Translator,B as checkLanguages,R as default,v as engines,P as getLanguage,j as normalFromLanguage,L as normalToLanguage,z as originLanguages,M as targetLanguages,O as translator};
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yxw007/translate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "A simple library that supports multiple translation engines",
|
|
5
5
|
"author": "Potter<aa4790139@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/yxw007/translate",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"lint": "eslint . && prettier -c src",
|
|
19
19
|
"lint:fix": "eslint . --fix && prettier -w src",
|
|
20
20
|
"build": "pnpm clean && tsx script/build.ts",
|
|
21
|
+
"build:dev": "pnpm clean && tsx script/build.ts --dev",
|
|
21
22
|
"clean": "rm -rf dist",
|
|
22
23
|
"test": "vitest --run",
|
|
23
24
|
"test:coverage": "vitest --coverage --run",
|
|
@@ -107,7 +108,8 @@
|
|
|
107
108
|
"tsx": "^4.19.2",
|
|
108
109
|
"typescript": "^5.5.4",
|
|
109
110
|
"typescript-eslint": "^8.3.0",
|
|
110
|
-
"vitest": "^2.0.5"
|
|
111
|
+
"vitest": "^2.0.5",
|
|
112
|
+
"yargs": "^18.0.0"
|
|
111
113
|
},
|
|
112
114
|
"volta": {
|
|
113
115
|
"node": "22.3.0"
|