@yxw007/translate 0.4.0 → 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 +4 -1
- package/README_zh-CN.md +4 -1
- package/dist/browser/index.cjs +45 -212
- package/dist/browser/index.esm.js +45 -212
- package/dist/browser/index.esm.min.js +1 -2
- package/dist/browser/index.min.cjs +1 -2
- package/dist/browser/index.umd.js +45 -212
- package/dist/browser/index.umd.min.js +1 -2
- package/dist/index.d.ts +877 -68
- package/dist/node/index.cjs +45 -212
- package/dist/node/index.js +45 -212
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// translate v0.4.
|
|
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';
|
|
@@ -206,7 +206,7 @@ function isOverMaxCharacterNum(text, max_character_num) {
|
|
|
206
206
|
return total > max_character_num;
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
-
function google
|
|
209
|
+
function google(options) {
|
|
210
210
|
const base = "https://translate.googleapis.com/translate_a/single";
|
|
211
211
|
return {
|
|
212
212
|
name: "google",
|
|
@@ -257,7 +257,7 @@ function google$1(options) {
|
|
|
257
257
|
/**
|
|
258
258
|
* Azure translate documentation: https://learn.microsoft.com/zh-cn/azure/ai-services/translator/reference/v3-0-translate
|
|
259
259
|
*/
|
|
260
|
-
function azure$
|
|
260
|
+
function azure$1(options) {
|
|
261
261
|
const { key, region } = options;
|
|
262
262
|
const name = "azure";
|
|
263
263
|
const checkOptions = () => {
|
|
@@ -307,8 +307,8 @@ function azure$2(options) {
|
|
|
307
307
|
},
|
|
308
308
|
async checkLanguage(text) {
|
|
309
309
|
checkOptions();
|
|
310
|
-
const
|
|
311
|
-
const res = await fetch(
|
|
310
|
+
const url = `${base}&to=en`;
|
|
311
|
+
const res = await fetch(url, {
|
|
312
312
|
method: "POST",
|
|
313
313
|
headers: {
|
|
314
314
|
"Content-Type": "application/json; charset=UTF-8",
|
|
@@ -320,20 +320,23 @@ function azure$2(options) {
|
|
|
320
320
|
if (!res.ok) {
|
|
321
321
|
throw await throwResponseError(this.name, res);
|
|
322
322
|
}
|
|
323
|
-
const
|
|
324
|
-
if (
|
|
325
|
-
throw new
|
|
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
326
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
throw new TranslationError(this.name, "Check language fail! Language not detected");
|
|
327
|
+
if (!bodyRes || !Array.isArray(bodyRes) || bodyRes.length === 0) {
|
|
328
|
+
throw new CheckLanguageError(this.name, "Check language fail! No result returned");
|
|
330
329
|
}
|
|
331
|
-
|
|
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;
|
|
332
335
|
},
|
|
333
336
|
};
|
|
334
337
|
}
|
|
335
338
|
|
|
336
|
-
function amazon$
|
|
339
|
+
function amazon$1(options) {
|
|
337
340
|
const { region, accessKeyId, secretAccessKey } = options;
|
|
338
341
|
const name = "amazon";
|
|
339
342
|
const checkOptions = () => {
|
|
@@ -1591,7 +1594,7 @@ function baidu$2(options) {
|
|
|
1591
1594
|
};
|
|
1592
1595
|
}
|
|
1593
1596
|
|
|
1594
|
-
function deepl$
|
|
1597
|
+
function deepl$2(options) {
|
|
1595
1598
|
const { key } = options;
|
|
1596
1599
|
const name = "deepl";
|
|
1597
1600
|
const checkOptions = () => {
|
|
@@ -1805,7 +1808,7 @@ function buildAuthorization({ secretId, secretKey, service, host, payload, httpR
|
|
|
1805
1808
|
headers["X-TC-Region"] = region;
|
|
1806
1809
|
return headers;
|
|
1807
1810
|
}
|
|
1808
|
-
function tencent$
|
|
1811
|
+
function tencent$2(options) {
|
|
1809
1812
|
const { secretId, secretKey, region = "ap-guangzhou" } = options;
|
|
1810
1813
|
const name = "tencent";
|
|
1811
1814
|
const host = "tmt.tencentcloudapi.com";
|
|
@@ -1870,7 +1873,9 @@ function tencent$3(options) {
|
|
|
1870
1873
|
async checkLanguage(text) {
|
|
1871
1874
|
checkOptions();
|
|
1872
1875
|
const payloadObj = {
|
|
1873
|
-
|
|
1876
|
+
SourceText: text,
|
|
1877
|
+
Source: "auto",
|
|
1878
|
+
Target: "en",
|
|
1874
1879
|
ProjectId: 0,
|
|
1875
1880
|
};
|
|
1876
1881
|
const payload = JSON.stringify(payloadObj);
|
|
@@ -1881,7 +1886,7 @@ function tencent$3(options) {
|
|
|
1881
1886
|
host,
|
|
1882
1887
|
payload,
|
|
1883
1888
|
httpRequestMethod: "POST",
|
|
1884
|
-
action
|
|
1889
|
+
action,
|
|
1885
1890
|
apiVersion,
|
|
1886
1891
|
region,
|
|
1887
1892
|
});
|
|
@@ -1896,9 +1901,9 @@ function tencent$3(options) {
|
|
|
1896
1901
|
}
|
|
1897
1902
|
const data = await res.json();
|
|
1898
1903
|
if (data.Response?.Error) {
|
|
1899
|
-
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/
|
|
1904
|
+
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`);
|
|
1900
1905
|
}
|
|
1901
|
-
const detectedLanguage = data.Response?.
|
|
1906
|
+
const detectedLanguage = data.Response?.Source;
|
|
1902
1907
|
if (!detectedLanguage) {
|
|
1903
1908
|
throw new CheckLanguageError(name, "Language detect fail! No result returned");
|
|
1904
1909
|
}
|
|
@@ -1914,16 +1919,16 @@ function tencent$3(options) {
|
|
|
1914
1919
|
}
|
|
1915
1920
|
|
|
1916
1921
|
const engines = {
|
|
1917
|
-
google
|
|
1918
|
-
azure: azure$
|
|
1919
|
-
amazon: amazon$
|
|
1922
|
+
google,
|
|
1923
|
+
azure: azure$1,
|
|
1924
|
+
amazon: amazon$1,
|
|
1920
1925
|
baidu: baidu$2,
|
|
1921
|
-
deepl: deepl$
|
|
1926
|
+
deepl: deepl$2,
|
|
1922
1927
|
openai: openai$1,
|
|
1923
|
-
tencent: tencent$
|
|
1928
|
+
tencent: tencent$2,
|
|
1924
1929
|
};
|
|
1925
1930
|
|
|
1926
|
-
var azure
|
|
1931
|
+
var azure = {
|
|
1927
1932
|
Afrikaans: "af",
|
|
1928
1933
|
Albanian: "sq",
|
|
1929
1934
|
Amharic: "am",
|
|
@@ -2518,7 +2523,7 @@ var baidu$1 = {
|
|
|
2518
2523
|
Zulu: "zul",
|
|
2519
2524
|
};
|
|
2520
2525
|
|
|
2521
|
-
var deepl$
|
|
2526
|
+
var deepl$1 = {
|
|
2522
2527
|
English: "en",
|
|
2523
2528
|
Bulgarian: "bg",
|
|
2524
2529
|
Chinese: "zh",
|
|
@@ -2554,7 +2559,7 @@ var deepl$2 = {
|
|
|
2554
2559
|
Ukrainian: "uk",
|
|
2555
2560
|
};
|
|
2556
2561
|
|
|
2557
|
-
var tencent$
|
|
2562
|
+
var tencent$1 = {
|
|
2558
2563
|
Auto: "auto",
|
|
2559
2564
|
Chinese: "zh",
|
|
2560
2565
|
TraditionalChinese: "zh-TW",
|
|
@@ -2576,7 +2581,7 @@ var tencent$2 = {
|
|
|
2576
2581
|
Hindi: "hi",
|
|
2577
2582
|
};
|
|
2578
2583
|
|
|
2579
|
-
var amazon
|
|
2584
|
+
var amazon = {
|
|
2580
2585
|
Afrikaans: "af",
|
|
2581
2586
|
Albanian: "sq",
|
|
2582
2587
|
Amharic: "am",
|
|
@@ -2655,16 +2660,16 @@ var amazon$1 = {
|
|
|
2655
2660
|
};
|
|
2656
2661
|
|
|
2657
2662
|
const originLanguages = {
|
|
2658
|
-
azure: azure
|
|
2663
|
+
azure: azure,
|
|
2659
2664
|
google: openai,
|
|
2660
2665
|
baidu: baidu$1,
|
|
2661
|
-
deepl: deepl$
|
|
2662
|
-
amazon: amazon
|
|
2666
|
+
deepl: deepl$1,
|
|
2667
|
+
amazon: amazon,
|
|
2663
2668
|
openai: openai,
|
|
2664
|
-
tencent: tencent$
|
|
2669
|
+
tencent: tencent$1,
|
|
2665
2670
|
};
|
|
2666
2671
|
|
|
2667
|
-
var deepl
|
|
2672
|
+
var deepl = {
|
|
2668
2673
|
"American English": "en-US",
|
|
2669
2674
|
"Brazilian Portuguese": "pt-BR",
|
|
2670
2675
|
"British English": "en-GB",
|
|
@@ -2703,7 +2708,7 @@ var deepl$1 = {
|
|
|
2703
2708
|
Ukrainian: "uk",
|
|
2704
2709
|
};
|
|
2705
2710
|
|
|
2706
|
-
var tencent
|
|
2711
|
+
var tencent = {
|
|
2707
2712
|
"Simplified Chinese": "zh",
|
|
2708
2713
|
"Traditional Chinese": "zh-TW",
|
|
2709
2714
|
English: "en",
|
|
@@ -2725,13 +2730,13 @@ var tencent$1 = {
|
|
|
2725
2730
|
};
|
|
2726
2731
|
|
|
2727
2732
|
const targetLanguages = {
|
|
2728
|
-
azure: azure
|
|
2733
|
+
azure: azure,
|
|
2729
2734
|
google: openai,
|
|
2730
2735
|
baidu: baidu$1,
|
|
2731
|
-
deepl: deepl
|
|
2732
|
-
amazon: amazon
|
|
2736
|
+
deepl: deepl,
|
|
2737
|
+
amazon: amazon,
|
|
2733
2738
|
openai: openai,
|
|
2734
|
-
tencent: tencent
|
|
2739
|
+
tencent: tencent,
|
|
2735
2740
|
};
|
|
2736
2741
|
|
|
2737
2742
|
var baidu = {
|
|
@@ -2743,180 +2748,9 @@ var baidu = {
|
|
|
2743
2748
|
Russian: "ru",
|
|
2744
2749
|
};
|
|
2745
2750
|
|
|
2746
|
-
|
|
2747
|
-
Chinese: "zh",
|
|
2748
|
-
English: "en",
|
|
2749
|
-
Japanese: "jp",
|
|
2750
|
-
Korean: "kr",
|
|
2751
|
-
German: "de",
|
|
2752
|
-
French: "fr",
|
|
2753
|
-
Spanish: "es",
|
|
2754
|
-
Italian: "it",
|
|
2755
|
-
Turkish: "tr",
|
|
2756
|
-
Russian: "ru",
|
|
2757
|
-
Portuguese: "pt",
|
|
2758
|
-
Vietnamese: "vi",
|
|
2759
|
-
Indonesian: "id",
|
|
2760
|
-
Malay: "ms",
|
|
2761
|
-
Thai: "th",
|
|
2762
|
-
};
|
|
2763
|
-
|
|
2764
|
-
var azure = {
|
|
2765
|
-
Arabic: "ar",
|
|
2766
|
-
Bengali: "bn",
|
|
2767
|
-
Bulgarian: "bg",
|
|
2768
|
-
Catalan: "ca",
|
|
2769
|
-
Chinese: "zh-Hans",
|
|
2770
|
-
"Chinese (Traditional)": "zh-Hant",
|
|
2771
|
-
Croatian: "hr",
|
|
2772
|
-
Czech: "cs",
|
|
2773
|
-
Danish: "da",
|
|
2774
|
-
Dutch: "nl",
|
|
2775
|
-
English: "en",
|
|
2776
|
-
Finnish: "fi",
|
|
2777
|
-
French: "fr",
|
|
2778
|
-
German: "de",
|
|
2779
|
-
Greek: "el",
|
|
2780
|
-
Hebrew: "he",
|
|
2781
|
-
Hindi: "hi",
|
|
2782
|
-
Hungarian: "hu",
|
|
2783
|
-
Indonesian: "id",
|
|
2784
|
-
Italian: "it",
|
|
2785
|
-
Japanese: "ja",
|
|
2786
|
-
Korean: "ko",
|
|
2787
|
-
Malay: "ms",
|
|
2788
|
-
"Norwegian Bokmål": "nb",
|
|
2789
|
-
Persian: "fa",
|
|
2790
|
-
Polish: "pl",
|
|
2791
|
-
"Portugal (Brazil)": "pt",
|
|
2792
|
-
Romanian: "ro",
|
|
2793
|
-
Russian: "ru",
|
|
2794
|
-
Slovak: "sk",
|
|
2795
|
-
Spanish: "es",
|
|
2796
|
-
Swedish: "sv",
|
|
2797
|
-
Thai: "th",
|
|
2798
|
-
Turkish: "tr",
|
|
2799
|
-
Ukrainian: "uk",
|
|
2800
|
-
Urdu: "ur",
|
|
2801
|
-
Vietnamese: "vi",
|
|
2802
|
-
};
|
|
2803
|
-
|
|
2804
|
-
var amazon = {
|
|
2805
|
-
Arabic: "ar",
|
|
2806
|
-
Bengali: "bn",
|
|
2807
|
-
Bulgarian: "bg",
|
|
2808
|
-
Catalan: "ca",
|
|
2809
|
-
Chinese: "zh-Hans",
|
|
2810
|
-
"Chinese (Traditional)": "zh-Hant",
|
|
2811
|
-
Croatian: "hr",
|
|
2812
|
-
Czech: "cs",
|
|
2813
|
-
Danish: "da",
|
|
2814
|
-
Dutch: "nl",
|
|
2815
|
-
English: "en",
|
|
2816
|
-
Finnish: "fi",
|
|
2817
|
-
French: "fr",
|
|
2818
|
-
German: "de",
|
|
2819
|
-
Greek: "el",
|
|
2820
|
-
Hebrew: "he",
|
|
2821
|
-
Hindi: "hi",
|
|
2822
|
-
Hungarian: "hu",
|
|
2823
|
-
Indonesian: "id",
|
|
2824
|
-
Italian: "it",
|
|
2825
|
-
Japanese: "ja",
|
|
2826
|
-
Korean: "ko",
|
|
2827
|
-
Malay: "ms",
|
|
2828
|
-
Persian: "fa",
|
|
2829
|
-
Polish: "pl",
|
|
2830
|
-
"Portugal (Brazil)": "pt",
|
|
2831
|
-
Romanian: "ro",
|
|
2832
|
-
Russian: "ru",
|
|
2833
|
-
Slovak: "sk",
|
|
2834
|
-
Spanish: "es",
|
|
2835
|
-
Swedish: "sv",
|
|
2836
|
-
Thai: "th",
|
|
2837
|
-
Turkish: "tr",
|
|
2838
|
-
Ukrainian: "uk",
|
|
2839
|
-
Urdu: "ur",
|
|
2840
|
-
Vietnamese: "vi",
|
|
2841
|
-
};
|
|
2842
|
-
|
|
2843
|
-
var deepl = {
|
|
2844
|
-
"American English": "en",
|
|
2845
|
-
Bulgarian: "bg",
|
|
2846
|
-
Chinese: "zh",
|
|
2847
|
-
Czech: "cs",
|
|
2848
|
-
Danish: "da",
|
|
2849
|
-
Dutch: "nl",
|
|
2850
|
-
Estonian: "et",
|
|
2851
|
-
Finnish: "fi",
|
|
2852
|
-
French: "fr",
|
|
2853
|
-
German: "de",
|
|
2854
|
-
Greek: "el",
|
|
2855
|
-
Hungarian: "hu",
|
|
2856
|
-
Icelandic: "is",
|
|
2857
|
-
Indonesian: "id",
|
|
2858
|
-
Irish: "ga",
|
|
2859
|
-
Italian: "it",
|
|
2860
|
-
Japanese: "ja",
|
|
2861
|
-
Korean: "ko",
|
|
2862
|
-
Latvian: "lv",
|
|
2863
|
-
Lithuanian: "lt",
|
|
2864
|
-
Maltese: "mt",
|
|
2865
|
-
Norwegian: "nb",
|
|
2866
|
-
Polish: "pl",
|
|
2867
|
-
Portuguese: "pt",
|
|
2868
|
-
Romanian: "ro",
|
|
2869
|
-
Russian: "ru",
|
|
2870
|
-
Slovak: "sk",
|
|
2871
|
-
Slovenian: "sl",
|
|
2872
|
-
Spanish: "es",
|
|
2873
|
-
Swedish: "sv",
|
|
2874
|
-
Turkish: "tr",
|
|
2875
|
-
Ukrainian: "uk",
|
|
2876
|
-
};
|
|
2877
|
-
|
|
2878
|
-
var google = {
|
|
2879
|
-
English: "en",
|
|
2880
|
-
Bulgarian: "bg",
|
|
2881
|
-
Chinese: "zh-cn",
|
|
2882
|
-
Czech: "cs",
|
|
2883
|
-
Danish: "da",
|
|
2884
|
-
Dutch: "nl",
|
|
2885
|
-
Estonian: "et",
|
|
2886
|
-
Finnish: "fi",
|
|
2887
|
-
French: "fr",
|
|
2888
|
-
German: "de",
|
|
2889
|
-
Greek: "el",
|
|
2890
|
-
Hungarian: "hu",
|
|
2891
|
-
Icelandic: "is",
|
|
2892
|
-
Indonesian: "id",
|
|
2893
|
-
Irish: "ga",
|
|
2894
|
-
Italian: "it",
|
|
2895
|
-
Japanese: "ja",
|
|
2896
|
-
Korean: "ko",
|
|
2897
|
-
Latvian: "lv",
|
|
2898
|
-
Lithuanian: "lt",
|
|
2899
|
-
Maltese: "mt",
|
|
2900
|
-
Polish: "pl",
|
|
2901
|
-
Portuguese: "pt",
|
|
2902
|
-
Romanian: "ro",
|
|
2903
|
-
Russian: "ru",
|
|
2904
|
-
Slovak: "sk",
|
|
2905
|
-
Slovenian: "sl",
|
|
2906
|
-
Spanish: "es",
|
|
2907
|
-
Swedish: "sv",
|
|
2908
|
-
Turkish: "tr",
|
|
2909
|
-
Ukrainian: "uk",
|
|
2910
|
-
};
|
|
2911
|
-
|
|
2912
|
-
const checkLanguages = {
|
|
2751
|
+
const checkLanguages = Object.assign(Object.assign({}, originLanguages), {
|
|
2913
2752
|
baidu: baidu,
|
|
2914
|
-
|
|
2915
|
-
azure: azure,
|
|
2916
|
-
amazon: amazon,
|
|
2917
|
-
deepl: deepl,
|
|
2918
|
-
google: google,
|
|
2919
|
-
};
|
|
2753
|
+
});
|
|
2920
2754
|
|
|
2921
2755
|
function normalFromLanguage(from, engine) {
|
|
2922
2756
|
if (from === "auto") {
|
|
@@ -3131,4 +2965,3 @@ var index = {
|
|
|
3131
2965
|
};
|
|
3132
2966
|
|
|
3133
2967
|
export { Cache, CheckLanguageError, OPEN_AI_MODELS, TranslationError, Translator, checkLanguages, index as default, engines, getLanguage, normalFromLanguage, normalToLanguage, originLanguages, targetLanguages, translator };
|
|
3134
|
-
//# sourceMappingURL=index.esm.js.map
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import"fs/promises";import"fs";import"path";import{TranslateClient as a,TranslateTextCommand as e}from"@aws-sdk/client-translate";import n from"crypto";class t extends Error{region;constructor(a,e){super(e),this.region=a,Error.captureStackTrace(this,this.constructor)}}class i extends Error{region;constructor(a,e){super(e),this.region=a,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(a,e,n){if(n<=0)throw new Error("time must be greater than 0");const t=this.cache.get(a);t&&clearTimeout(t.timeout);const i={value:e,expire:Date.now()+n};isNaN(i.expire)||(i.timeout=setTimeout(()=>this.del(a),n)),this.cache.set(a,i)}get(a){return this.cache.get(a)}delete(a){let e=!0;const n=this.cache.get(a);return n?!isNaN(n.expire)&&n.expire<Date.now()?e=!1:clearTimeout(n.timeout):e=!1,e&&this.del(a),e}del(a){this.cache.delete(a)}clear(){for(const[,a]of this.cache.entries())clearTimeout(a.timeout);this.cache.clear()}}function s(a=""){return{log(...a){this.info(...a)},info(...e){console.log(`[translate ${a}]`,...e)},error(...e){console.error(`[translate ${a}]`,...e)},warn(...e){console.warn(`[translate ${a}]`,...e)}}}function c(){return"-".repeat(20)}function l(a,e="Translate fail ! "){return a instanceof TypeError?e+(a.cause?.message??a.message):e+a.message}async function h(a,e){let n=null;try{n=await e.json()}catch(a){}return new t(a,`Translate fail ! ${e.status}: ${e.statusText} ${n?.message??""}`)}var u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function g(a){return a&&a.__esModule&&Object.prototype.hasOwnProperty.call(a,"default")?a.default:a}function d(a){if(a.__esModule)return a;var e=a.default;if("function"==typeof e){var n=function a(){return this instanceof a?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};n.prototype=e.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(a).forEach(function(e){var t=Object.getOwnPropertyDescriptor(a,e);Object.defineProperty(n,e,t.get?t:{enumerable:!0,get:function(){return a[e]}})}),n}var m={exports:{}};var p,f,w={exports:{}},y=d(Object.freeze({__proto__:null,default:{}}));function k(){return p||(p=1,w.exports=(a=a||function(a,e){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=y}catch(a){}var t=function(){if(n){if("function"==typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(a){}if("function"==typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(a){}}throw new Error("Native crypto module could not be used to get secure random number.")},i=Object.create||function(){function a(){}return function(e){var n;return a.prototype=e,n=new a,a.prototype=null,n}}(),r={},o=r.lib={},s=o.Base={extend:function(a){var e=i(this);return a&&e.mixIn(a),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var a=this.extend();return a.init.apply(a,arguments),a},init:function(){},mixIn:function(a){for(var e in a)a.hasOwnProperty(e)&&(this[e]=a[e]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},c=o.WordArray=s.extend({init:function(a,n){a=this.words=a||[],this.sigBytes=n!=e?n:4*a.length},toString:function(a){return(a||h).stringify(this)},concat:function(a){var e=this.words,n=a.words,t=this.sigBytes,i=a.sigBytes;if(this.clamp(),t%4)for(var r=0;r<i;r++){var o=n[r>>>2]>>>24-r%4*8&255;e[t+r>>>2]|=o<<24-(t+r)%4*8}else for(var s=0;s<i;s+=4)e[t+s>>>2]=n[s>>>2];return this.sigBytes+=i,this},clamp:function(){var e=this.words,n=this.sigBytes;e[n>>>2]&=4294967295<<32-n%4*8,e.length=a.ceil(n/4)},clone:function(){var a=s.clone.call(this);return a.words=this.words.slice(0),a},random:function(a){for(var e=[],n=0;n<a;n+=4)e.push(t());return new c.init(e,a)}}),l=r.enc={},h=l.Hex={stringify:function(a){for(var e=a.words,n=a.sigBytes,t=[],i=0;i<n;i++){var r=e[i>>>2]>>>24-i%4*8&255;t.push((r>>>4).toString(16)),t.push((15&r).toString(16))}return t.join("")},parse:function(a){for(var e=a.length,n=[],t=0;t<e;t+=2)n[t>>>3]|=parseInt(a.substr(t,2),16)<<24-t%8*4;return new c.init(n,e/2)}},g=l.Latin1={stringify:function(a){for(var e=a.words,n=a.sigBytes,t=[],i=0;i<n;i++){var r=e[i>>>2]>>>24-i%4*8&255;t.push(String.fromCharCode(r))}return t.join("")},parse:function(a){for(var e=a.length,n=[],t=0;t<e;t++)n[t>>>2]|=(255&a.charCodeAt(t))<<24-t%4*8;return new c.init(n,e)}},d=l.Utf8={stringify:function(a){try{return decodeURIComponent(escape(g.stringify(a)))}catch(a){throw new Error("Malformed UTF-8 data")}},parse:function(a){return g.parse(unescape(encodeURIComponent(a)))}},m=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=d.parse(a)),this._data.concat(a),this._nDataBytes+=a.sigBytes},_process:function(e){var n,t=this._data,i=t.words,r=t.sigBytes,o=this.blockSize,s=r/(4*o),l=(s=e?a.ceil(s):a.max((0|s)-this._minBufferSize,0))*o,h=a.min(4*l,r);if(l){for(var u=0;u<l;u+=o)this._doProcessBlock(i,u);n=i.splice(0,l),t.sigBytes-=h}return new c.init(n,h)},clone:function(){var a=s.clone.call(this);return a._data=this._data.clone(),a},_minBufferSize:0});o.Hasher=m.extend({cfg:s.extend(),init:function(a){this.cfg=this.cfg.extend(a),this.reset()},reset:function(){m.reset.call(this),this._doReset()},update:function(a){return this._append(a),this._process(),this},finalize:function(a){return a&&this._append(a),this._doFinalize()},blockSize:16,_createHelper:function(a){return function(e,n){return new a.init(n).finalize(e)}},_createHmacHelper:function(a){return function(e,n){return new p.HMAC.init(a,n).finalize(e)}}});var p=r.algo={};return r}(Math),a)),w.exports;var a}var b=g(m.exports=(f=k(),function(a){var e=f,n=e.lib,t=n.WordArray,i=n.Hasher,r=e.algo,o=[];!function(){for(var e=0;e<64;e++)o[e]=4294967296*a.abs(a.sin(e+1))|0}();var s=r.MD5=i.extend({_doReset:function(){this._hash=new t.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(a,e){for(var n=0;n<16;n++){var t=e+n,i=a[t];a[t]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var r=this._hash.words,s=a[e+0],g=a[e+1],d=a[e+2],m=a[e+3],p=a[e+4],f=a[e+5],w=a[e+6],y=a[e+7],k=a[e+8],b=a[e+9],T=a[e+10],S=a[e+11],v=a[e+12],C=a[e+13],$=a[e+14],A=a[e+15],z=r[0],B=r[1],M=r[2],j=r[3];z=c(z,B,M,j,s,7,o[0]),j=c(j,z,B,M,g,12,o[1]),M=c(M,j,z,B,d,17,o[2]),B=c(B,M,j,z,m,22,o[3]),z=c(z,B,M,j,p,7,o[4]),j=c(j,z,B,M,f,12,o[5]),M=c(M,j,z,B,w,17,o[6]),B=c(B,M,j,z,y,22,o[7]),z=c(z,B,M,j,k,7,o[8]),j=c(j,z,B,M,b,12,o[9]),M=c(M,j,z,B,T,17,o[10]),B=c(B,M,j,z,S,22,o[11]),z=c(z,B,M,j,v,7,o[12]),j=c(j,z,B,M,C,12,o[13]),M=c(M,j,z,B,$,17,o[14]),z=l(z,B=c(B,M,j,z,A,22,o[15]),M,j,g,5,o[16]),j=l(j,z,B,M,w,9,o[17]),M=l(M,j,z,B,S,14,o[18]),B=l(B,M,j,z,s,20,o[19]),z=l(z,B,M,j,f,5,o[20]),j=l(j,z,B,M,T,9,o[21]),M=l(M,j,z,B,A,14,o[22]),B=l(B,M,j,z,p,20,o[23]),z=l(z,B,M,j,b,5,o[24]),j=l(j,z,B,M,$,9,o[25]),M=l(M,j,z,B,m,14,o[26]),B=l(B,M,j,z,k,20,o[27]),z=l(z,B,M,j,C,5,o[28]),j=l(j,z,B,M,d,9,o[29]),M=l(M,j,z,B,y,14,o[30]),z=h(z,B=l(B,M,j,z,v,20,o[31]),M,j,f,4,o[32]),j=h(j,z,B,M,k,11,o[33]),M=h(M,j,z,B,S,16,o[34]),B=h(B,M,j,z,$,23,o[35]),z=h(z,B,M,j,g,4,o[36]),j=h(j,z,B,M,p,11,o[37]),M=h(M,j,z,B,y,16,o[38]),B=h(B,M,j,z,T,23,o[39]),z=h(z,B,M,j,C,4,o[40]),j=h(j,z,B,M,s,11,o[41]),M=h(M,j,z,B,m,16,o[42]),B=h(B,M,j,z,w,23,o[43]),z=h(z,B,M,j,b,4,o[44]),j=h(j,z,B,M,v,11,o[45]),M=h(M,j,z,B,A,16,o[46]),z=u(z,B=h(B,M,j,z,d,23,o[47]),M,j,s,6,o[48]),j=u(j,z,B,M,y,10,o[49]),M=u(M,j,z,B,$,15,o[50]),B=u(B,M,j,z,f,21,o[51]),z=u(z,B,M,j,v,6,o[52]),j=u(j,z,B,M,m,10,o[53]),M=u(M,j,z,B,T,15,o[54]),B=u(B,M,j,z,g,21,o[55]),z=u(z,B,M,j,k,6,o[56]),j=u(j,z,B,M,A,10,o[57]),M=u(M,j,z,B,w,15,o[58]),B=u(B,M,j,z,C,21,o[59]),z=u(z,B,M,j,p,6,o[60]),j=u(j,z,B,M,S,10,o[61]),M=u(M,j,z,B,d,15,o[62]),B=u(B,M,j,z,b,21,o[63]),r[0]=r[0]+z|0,r[1]=r[1]+B|0,r[2]=r[2]+M|0,r[3]=r[3]+j|0},_doFinalize:function(){var e=this._data,n=e.words,t=8*this._nDataBytes,i=8*e.sigBytes;n[i>>>5]|=128<<24-i%32;var r=a.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),e.sigBytes=4*(n.length+1),this._process();for(var s=this._hash,c=s.words,l=0;l<4;l++){var h=c[l];c[l]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return s},clone:function(){var a=i.clone.call(this);return a._hash=this._hash.clone(),a}});function c(a,e,n,t,i,r,o){var s=a+(e&n|~e&t)+i+o;return(s<<r|s>>>32-r)+e}function l(a,e,n,t,i,r,o){var s=a+(e&t|n&~t)+i+o;return(s<<r|s>>>32-r)+e}function h(a,e,n,t,i,r,o){var s=a+(e^n^t)+i+o;return(s<<r|s>>>32-r)+e}function u(a,e,n,t,i,r,o){var s=a+(n^(e|~t))+i+o;return(s<<r|s>>>32-r)+e}e.MD5=i._createHelper(s),e.HmacMD5=i._createHmacHelper(s)}(Math),f.MD5));const T=s("openai");function S(a,e="",t){return t?n.createHmac("sha256",e).update(a).digest(t):n.createHmac("sha256",e).update(a).digest()}function v(a,e="hex"){return n.createHash("sha256").update(a).digest(e)}function C({secretId:a,secretKey:e,service:n,host:t,payload:i,httpRequestMethod:r,action:o,apiVersion:s,region:c}){const l=Math.floor(Date.now()/1e3),h=function(a){const e=new Date(1e3*a);return`${e.getUTCFullYear()}-${("0"+(e.getUTCMonth()+1)).slice(-2)}-${("0"+e.getUTCDate()).slice(-2)}`}(l),u="content-type:application/json; charset=utf-8\nhost:"+t+"\n",g="content-type;host",d=v(i),m="TC3-HMAC-SHA256",p=`${h}/${n}/tc3_request`,f=[m,l,p,v([r,"/","",u,g,d].join("\n"))].join("\n"),w=S(h,"TC3"+e),y=S(n,w),k=S("tc3_request",y),b={Authorization:`${m} Credential=${a}/${p}, SignedHeaders=${g}, Signature=${S(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&&(b["X-TC-Region"]=c),b}const $={google:function(a){const e="https://translate.googleapis.com/translate_a/single";return{name:"google",async translate(a,n){const{from:i="auto",to:r}=n;Array.isArray(a)||(a=[a]);const o=a.join("\n"),s=`${e}?client=gtx&sl=${i}&tl=${r}&dt=t&q=${encodeURI(o)}`,c=await fetch(s);if(!c.ok)throw await h(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 u=[];for(let a=0;l[0]&&a<l[0].length;a++){const e=l[0][a];e&&0!=e.length&&Array.isArray(e)&&e[0]&&u.push(e[0].replaceAll("\n",""))}return u},async checkLanguage(a){const n=`${e}?client=gtx&sl=auto&tl=en&dt=t&q=${encodeURI(a)}`,t=await fetch(n);if(!t.ok)throw await h(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(a){const{key:e,region:n}=a,i="azure",r=()=>{if(!e||!n)throw new t(i,`${i} key and region is required`)};return r(),{name:i,async translate(a,i){r();const{from:o,to:s}=i,c=`https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=${s}${o&&"auto"!==o?`&from=${o}`:""}`;Array.isArray(a)||(a=[a]);const l=await fetch(c,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8","Ocp-Apim-Subscription-Key":e,"Ocp-Apim-Subscription-Region":n},body:JSON.stringify(a.map(a=>({Text:a})))});if(!l.ok)throw await h(this.name,l);const u=await l.json();if(u.error)throw new t(this.name,`Translate fail ! code: ${u.error.code}, message: ${u.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);const g=u;if(!g||0===g.length)throw new t(this.name,"Translate fail ! translate's result is null or empty");const d=[];for(const a of g)a.translations&&0!=a.translations.length&&d.push(...a.translations.map(a=>a.text));return d},async checkLanguage(a){r();const i=await fetch("https://api.cognitive.microsofttranslator.com/detect?api-version=3.0",{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8","Ocp-Apim-Subscription-Key":e,"Ocp-Apim-Subscription-Region":n},body:JSON.stringify([{Text:a}])});if(!i.ok)throw await h(this.name,i);const o=await i.json();if(!o||!Array.isArray(o)||0===o.length)throw new t(this.name,"Check language fail! No result returned");const s=o[0];if(!s.language)throw new t(this.name,"Check language fail! Language not detected");return s.language}}},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,h=new a({region:i,credentials:{accessKeyId:r,secretAccessKey:o}});Array.isArray(n)||(n=[n]);const u=new e({SourceLanguageCode:s,TargetLanguageCode:l,Text:n.join("\n")}),g=await h.send(u),d=[];if(g.TranslatedText){const a=g.TranslatedText??"";d.push(...a.split("\n"))}return d},async checkLanguage(n){c();const l=new a({region:i,credentials:{accessKeyId:r,secretAccessKey:o}}),h=new e({SourceLanguageCode:"auto",TargetLanguageCode:"en",Text:n});try{const a=await l.send(h);if(!a.SourceLanguageCode)throw new t(s,"Check language fail! Source language not detected");return a.SourceLanguageCode}catch(a){throw new t(s,`Check language fail! ${a.message||a}`)}}}},baidu:function(a){const{appId:e,secretKey:n}=a,r="baidu",o=()=>{if(!e||!n)throw new t(r,`${r} appId and secretKey is required`)};return o(),{name:r,async translate(a,i){o();const{to:r,from:s="auto",domain:c="it"}=i;Array.isArray(a)||(a=[a]);const l=a.join("\n"),u=Date.now(),g=b(`${e}${l}${u}${c}${n}`).toString(),d=new URLSearchParams;d.append("q",l),d.append("from",s),d.append("to",r),d.append("appid",e),d.append("salt",u.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 h(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 a of p.trans_result)a.dst&&f.push(a.dst);return f},async checkLanguage(a){o();const t=Date.now(),r=b(`${e}${a}${t}${n}`).toString(),s=new URLSearchParams;s.append("q",a),s.append("appid",e),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 h(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(a){const{key:e}=a,n="deepl",r=()=>{if(!e)throw new t(n,`${n} key is required`)};r();const o="https://api-free.deepl.com/v2/translate";return{name:n,async translate(a,n){r();const{to:i,from:s}=n;Array.isArray(a)||(a=[a]);const c=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8",Authorization:`DeepL-Auth-Key ${e}`,Accept:"*/*",Host:"api-free.deepl.com",Connection:"keep-alive"},body:JSON.stringify({text:a,source_lang:"auto"===s?void 0:s,target_lang:i})});if(!c.ok)throw await h(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 u=l.translations;if(!u||0===u.length)throw new t(this.name,"Translate fail ! translate's result is null or empty");return u.map(a=>a.text)},async checkLanguage(a){r();const n=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json; charset=UTF-8",Authorization:`DeepL-Auth-Key ${e}`,Accept:"*/*",Host:"api-free.deepl.com",Connection:"keep-alive"},body:JSON.stringify({text:[a],target_lang:"EN"})});if(!n.ok)throw await h(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(a){const{apiKey:e,model:n,maxTokens:i=2e3,outputLog:o=!1}=a,s="openai",c=()=>{if(!e)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(a,r){c();const{from:s,to:l}=r;Array.isArray(a)||(a=[a]);const u={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 ${a.join("\n")} \n -$e$-\n `},g=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({model:n,messages:[{role:"system",content:"You are a professional translator"},u],max_tokens:i,temperature:0})});if(!g.ok)throw await h(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(a=>a.trim()).filter(Boolean).filter(a=>!p.includes(a));return o&&(T.info("prompt:",JSON.stringify(u,null,2)),T.info("translations:",JSON.stringify(f,null,2))),f}}},tencent:function(a){const{secretId:e,secretKey:n,region:r="ap-guangzhou"}=a,o="tencent",s="tmt.tencentcloudapi.com",c=`https://${s}/`,l="2018-03-21";function h(){if(!e||!n)throw new t(o,`${o} secretId and secretKey are required`)}return{name:o,async translate(a,i){h();const{from:u="auto",to:g}=i,d="auto"===u?"auto":u,m={SourceText:Array.isArray(a)?a.join("\n"):a,Source:d,Target:g,ProjectId:0},p=JSON.stringify(m),f=C({secretId:e,secretKey:n,service:"tmt",host:s,payload:p,httpRequestMethod:"POST",action:"TextTranslate",apiVersion:l,region:r});try{const a=await fetch(c,{method:"POST",headers:f,body:p});if(!a.ok)throw new t(o,`HTTP ${a.status}: ${await a.text()}`);const e=await a.json();if(e.Response?.Error)throw new t(o,`Tencent translate fail: ${e.Response.Error.Code}, ${e.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);const n=e.Response?.TargetText.split("\n")??[];if(!Array.isArray(n)||0===n.length)throw new t(o,"Translate fail! No result returned");return n}catch(a){if(a instanceof t)throw a;throw new t(o,`Translation failed: ${a}`)}},async checkLanguage(a){h();const t={Text:a,ProjectId:0},u=JSON.stringify(t),g=C({secretId:e,secretKey:n,service:"tmt",host:s,payload:u,httpRequestMethod:"POST",action:"LanguageDetect",apiVersion:l,region:r});try{const a=await fetch(c,{method:"POST",headers:g,body:u});if(!a.ok)throw new i(o,`HTTP ${a.status}: ${await a.text()}`);const e=await a.json();if(e.Response?.Error)throw new i(o,`Tencent language detect fail: ${e.Response.Error.Code}, ${e.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15620 view details`);const n=e.Response?.Lang;if(!n)throw new i(o,"Language detect fail! No result returned");return n}catch(a){if(a instanceof i)throw a;throw new i(o,`Language detection failed: ${a}`)}}}}};var A={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"},z={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"},B={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"},M={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 j={azure:A,google:z,baidu:B,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:M,openai:z,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 x={azure:A,google:z,baidu:B,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:M,openai:z,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 P={baidu:{Chinese:"zh",English:"en",Japanese:"jp",Korean:"kor",Thai:"th",Russian:"ru"},tencent:{Chinese:"zh",English:"en",Japanese:"jp",Korean:"kr",German:"de",French:"fr",Spanish:"es",Italian:"it",Turkish:"tr",Russian:"ru",Portuguese:"pt",Vietnamese:"vi",Indonesian:"id",Malay:"ms",Thai:"th"},azure:{Arabic:"ar",Bengali:"bn",Bulgarian:"bg",Catalan:"ca",Chinese:"zh-Hans","Chinese (Traditional)":"zh-Hant",Croatian:"hr",Czech:"cs",Danish:"da",Dutch:"nl",English:"en",Finnish:"fi",French:"fr",German:"de",Greek:"el",Hebrew:"he",Hindi:"hi",Hungarian:"hu",Indonesian:"id",Italian:"it",Japanese:"ja",Korean:"ko",Malay:"ms","Norwegian Bokmål":"nb",Persian:"fa",Polish:"pl","Portugal (Brazil)":"pt",Romanian:"ro",Russian:"ru",Slovak:"sk",Spanish:"es",Swedish:"sv",Thai:"th",Turkish:"tr",Ukrainian:"uk",Urdu:"ur",Vietnamese:"vi"},amazon:{Arabic:"ar",Bengali:"bn",Bulgarian:"bg",Catalan:"ca",Chinese:"zh-Hans","Chinese (Traditional)":"zh-Hant",Croatian:"hr",Czech:"cs",Danish:"da",Dutch:"nl",English:"en",Finnish:"fi",French:"fr",German:"de",Greek:"el",Hebrew:"he",Hindi:"hi",Hungarian:"hu",Indonesian:"id",Italian:"it",Japanese:"ja",Korean:"ko",Malay:"ms",Persian:"fa",Polish:"pl","Portugal (Brazil)":"pt",Romanian:"ro",Russian:"ru",Slovak:"sk",Spanish:"es",Swedish:"sv",Thai:"th",Turkish:"tr",Ukrainian:"uk",Urdu:"ur",Vietnamese:"vi"},deepl:{"American English":"en",Bulgarian:"bg",Chinese:"zh",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"},google:{English:"en",Bulgarian:"bg",Chinese:"zh-cn",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",Polish:"pl",Portuguese:"pt",Romanian:"ro",Russian:"ru",Slovak:"sk",Slovenian:"sl",Spanish:"es",Swedish:"sv",Turkish:"tr",Ukrainian:"uk"}};function L(a,e){if("auto"===a)return"auto";const n=j[e];if(!n)throw new Error(`Engine ${e} not found`);if(Object.keys(j[e]).includes(a))return n[a];if(Object.values(j[e]).includes(a))return a;throw new Error(`Invalid from language ${e} ${a}`)}function I(a,e){const n=x[e];if(!n)throw new Error(`Engine ${e} not found`);if(Object.keys(x[e]).includes(a))return n[a];if(Object.values(x[e]).includes(a))return a;throw new Error(`Invalid to language ${e} ${a}`)}function K(a){return{from:j[a],to:x[a]}}const H="Translate",_=1e3,E=s(),R=new o;class F{engines;cache_time;concurrencyMax;concurrencyDelay;constructor(a=6e4,e=4,n=20){this.engines=new Map,this.cache_time=a,this.concurrencyMax=e,this.concurrencyDelay=n}use(a){this.addEngine(a)}addEngine(a){this.engines.has(a.name)?E.warn("Engine already exists"):this.engines.set(a.name,a)}removeEngine(a){if(!a||!this.engines.has(a))return E.warn("Engine name is required or not found"),!1;this.engines.delete(a)}isSupportCheckLanguage(a){if(!a||!this.engines.has(a))return E.warn("Engine name is required or not found"),!1;const e=this.engines.get(a);return e?!!e.checkLanguage:(E.warn(`Engine ${a} not found`),!1)}async checkLanguage(a,e){const{engine:n="google",max_character_num:r=_}=e;if(!this.engines.has(n))throw new i(H,`Engine ${n} not found`);const o=this.engines.get(n);if(!o)throw new i(H,`Engine ${n} is null`);if(!o.checkLanguage)throw new i(H,`Engine ${n} does not support checkLanguage method`);const s=r>0?a.substring(0,r):a;if(s.length<=0)throw new t(H,"Text is empty or too short to check language");return o.checkLanguage(s).then(a=>a).catch(e=>{throw E.error(`${H} Failed to check language for text: \n${c()}\n${a}\n${c()}\n error: ${l(e)}`),e})}async translate(a,e){const{engine:n="google",cache_time:i=6e4}=e;let{from:r="auto",to:o}=e;if(r=e.from=L(r,n),o=e.to=I(o,n),!this.engines.has(n))throw new t(H,`Engine ${n} not found`);const s=this.engines.get(n);if(!s)throw new t(H,`Engine ${n} is null`);if(!r)throw new t(H,`Invalid origin language ${r}`);if(!o)throw new t(H,`Invalid target language ${o}`);const h=`${r}:${o}:${n}:${a}`;return R.get(h)?Promise.resolve(R.get(h)?.value):this.concurrencyHandle(s,a,e).then(a=>(R.set(h,a,i??this.cache_time),a)).catch(e=>{throw E.error(`${H} Failed: from=${r},to=${o},engine=${n},translate text: \n${c()}\n${a}\n${c()}\n error: ${l(e)}`),e instanceof t?e:new t(H,l(e))})}async concurrencyHandle(a,e,n){const{max_character_num:i=_}=n,r=i>0?i:_;if(Array.isArray(e)){if(function(a,e){return!(!a||a.length<=0)&&a.reduce((a,e)=>a+e.length,0)>e}(e,i))throw new t(H,"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 a.translate(e,n)}return this.concurrencyTranslate(a,e,n,r)}async concurrencyTranslate(a,e,n,t){const i=function(a,e){const n=[/\n\n+/,/[.。!??!\n]/,/[;;]/,/[,,]/g,/\s/],t=[];for(;a.length>0;){const i=a.slice(0,e);if(a.length<=e){t.push(a);break}let r=-1;for(const a of n){const n=new RegExp(a.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*e){r=o.index;break}}-1===r&&(r=i.lastIndexOf(" ",e),r=-1===r?e:r),0==r?a=a.slice(r+1):(t.push(a.slice(0,r)),a=a.slice(r))}return t}(e,t).map((a,e)=>({content:a,index:e})),r=[];let o=0;const s=this.concurrencyDelay,c=this.concurrencyMax;return new Promise((e,t)=>(function l(){for(;o<c&&i.length>0;){const{content:c,index:h}=i.shift();o++,a.translate(c,n).then(a=>{r.push({translated:a,index:h})}).catch(a=>t(a)).finally(async()=>{if(o--,0===o&&i.length<=0){r.sort((a,e)=>a.index-e.index);const a=r.reduce((a,e)=>a.concat(e.translated),[]);return e([a.join("")])}var a;await(a=s,new Promise(e=>setTimeout(e,a))),l()})}}(),r))}}const D=new F;var O={engines:$,translator:D,Translator:F,Cache:o,getLanguage:K};export{o as Cache,i as CheckLanguageError,r as OPEN_AI_MODELS,t as TranslationError,F as Translator,P as checkLanguages,O as default,$ as engines,K as getLanguage,L as normalFromLanguage,I as normalToLanguage,j as originLanguages,x as targetLanguages,D as translator};
|
|
2
|
-
//# sourceMappingURL=index.esm.min.js.map
|
|
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}function d(e){if(e.__esModule)return e;var a=e.default;if("function"==typeof a){var n=function e(){return this instanceof e?Reflect.construct(a,arguments,this.constructor):a.apply(this,arguments)};n.prototype=a.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach(function(a){var t=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(n,a,t.get?t:{enumerable:!0,get:function(){return e[a]}})}),n}var m={exports:{}};var p,f,w={exports:{}},y=d(Object.freeze({__proto__:null,default:{}}));function k(){return p||(p=1,w.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=y}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)),w.exports;var e}var b=g(m.exports=(f=k(),function(e){var a=f,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],j=r[3];x=c(x,z,M,j,s,7,o[0]),j=c(j,x,z,M,g,12,o[1]),M=c(M,j,x,z,d,17,o[2]),z=c(z,M,j,x,m,22,o[3]),x=c(x,z,M,j,p,7,o[4]),j=c(j,x,z,M,f,12,o[5]),M=c(M,j,x,z,w,17,o[6]),z=c(z,M,j,x,y,22,o[7]),x=c(x,z,M,j,k,7,o[8]),j=c(j,x,z,M,b,12,o[9]),M=c(M,j,x,z,T,17,o[10]),z=c(z,M,j,x,S,22,o[11]),x=c(x,z,M,j,v,7,o[12]),j=c(j,x,z,M,C,12,o[13]),M=c(M,j,x,z,$,17,o[14]),x=l(x,z=c(z,M,j,x,A,22,o[15]),M,j,g,5,o[16]),j=l(j,x,z,M,w,9,o[17]),M=l(M,j,x,z,S,14,o[18]),z=l(z,M,j,x,s,20,o[19]),x=l(x,z,M,j,f,5,o[20]),j=l(j,x,z,M,T,9,o[21]),M=l(M,j,x,z,A,14,o[22]),z=l(z,M,j,x,p,20,o[23]),x=l(x,z,M,j,b,5,o[24]),j=l(j,x,z,M,$,9,o[25]),M=l(M,j,x,z,m,14,o[26]),z=l(z,M,j,x,k,20,o[27]),x=l(x,z,M,j,C,5,o[28]),j=l(j,x,z,M,d,9,o[29]),M=l(M,j,x,z,y,14,o[30]),x=u(x,z=l(z,M,j,x,v,20,o[31]),M,j,f,4,o[32]),j=u(j,x,z,M,k,11,o[33]),M=u(M,j,x,z,S,16,o[34]),z=u(z,M,j,x,$,23,o[35]),x=u(x,z,M,j,g,4,o[36]),j=u(j,x,z,M,p,11,o[37]),M=u(M,j,x,z,y,16,o[38]),z=u(z,M,j,x,T,23,o[39]),x=u(x,z,M,j,C,4,o[40]),j=u(j,x,z,M,s,11,o[41]),M=u(M,j,x,z,m,16,o[42]),z=u(z,M,j,x,w,23,o[43]),x=u(x,z,M,j,b,4,o[44]),j=u(j,x,z,M,v,11,o[45]),M=u(M,j,x,z,A,16,o[46]),x=h(x,z=u(z,M,j,x,d,23,o[47]),M,j,s,6,o[48]),j=h(j,x,z,M,y,10,o[49]),M=h(M,j,x,z,$,15,o[50]),z=h(z,M,j,x,f,21,o[51]),x=h(x,z,M,j,v,6,o[52]),j=h(j,x,z,M,m,10,o[53]),M=h(M,j,x,z,T,15,o[54]),z=h(z,M,j,x,g,21,o[55]),x=h(x,z,M,j,k,6,o[56]),j=h(j,x,z,M,A,10,o[57]),M=h(M,j,x,z,w,15,o[58]),z=h(z,M,j,x,C,21,o[59]),x=h(x,z,M,j,p,6,o[60]),j=h(j,x,z,M,S,10,o[61]),M=h(M,j,x,z,d,15,o[62]),z=h(z,M,j,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]+j|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),f.MD5));const T=s("openai");function S(e,a="",t){return t?n.createHmac("sha256",a).update(e).digest(t):n.createHmac("sha256",a).update(e).digest()}function v(e,a="hex"){return n.createHash("sha256").update(e).digest(a)}function C({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=v(i),m="TC3-HMAC-SHA256",p=`${u}/${n}/tc3_request`,f=[m,l,p,v([r,"/","",h,g,d].join("\n"))].join("\n"),w=S(u,"TC3"+a),y=S(n,w),k=S("tc3_request",y),b={Authorization:`${m} Credential=${e}/${p}, SignedHeaders=${g}, Signature=${S(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&&(b["X-TC-Region"]=c),b}const $={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=b(`${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=b(`${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&&(T.info("prompt:",JSON.stringify(h,null,2)),T.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=C({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=C({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 A={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"},x={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"},z={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"},M={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 j={azure:A,google:x,baidu:z,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:M,openai:x,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 B={azure:A,google:x,baidu:z,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:M,openai:x,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 L=Object.assign(Object.assign({},j),{baidu:{Chinese:"zh",English:"en",Japanese:"jp",Korean:"kor",Thai:"th",Russian:"ru"}});function P(e,a){if("auto"===e)return"auto";const n=j[a];if(!n)throw new Error(`Engine ${a} not found`);if(Object.keys(j[a]).includes(e))return n[e];if(Object.values(j[a]).includes(e))return e;throw new Error(`Invalid from language ${a} ${e}`)}function _(e,a){const n=B[a];if(!n)throw new Error(`Engine ${a} not found`);if(Object.keys(B[a]).includes(e))return n[e];if(Object.values(B[a]).includes(e))return e;throw new Error(`Invalid to language ${a} ${e}`)}function K(e){return{from:j[e],to:B[e]}}const I="Translate",H=1e3,E=s(),O=new o;class R{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)?E.warn("Engine already exists"):this.engines.set(e.name,e)}removeEngine(e){if(!e||!this.engines.has(e))return E.warn("Engine name is required or not found"),!1;this.engines.delete(e)}isSupportCheckLanguage(e){if(!e||!this.engines.has(e))return E.warn("Engine name is required or not found"),!1;const a=this.engines.get(e);return a?!!a.checkLanguage:(E.warn(`Engine ${e} not found`),!1)}async checkLanguage(e,a){const{engine:n="google",max_character_num:r=H}=a;if(!this.engines.has(n))throw new i(I,`Engine ${n} not found`);const o=this.engines.get(n);if(!o)throw new i(I,`Engine ${n} is null`);if(!o.checkLanguage)throw new i(I,`Engine ${n} does not support checkLanguage method`);const s=r>0?e.substring(0,r):e;if(s.length<=0)throw new t(I,"Text is empty or too short to check language");return o.checkLanguage(s).then(e=>e).catch(a=>{throw E.error(`${I} 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=P(r,n),o=a.to=_(o,n),!this.engines.has(n))throw new t(I,`Engine ${n} not found`);const s=this.engines.get(n);if(!s)throw new t(I,`Engine ${n} is null`);if(!r)throw new t(I,`Invalid origin language ${r}`);if(!o)throw new t(I,`Invalid target language ${o}`);const u=`${r}:${o}:${n}:${e}`;return O.get(u)?Promise.resolve(O.get(u)?.value):this.concurrencyHandle(s,e,a).then(e=>(O.set(u,e,i??this.cache_time),e)).catch(a=>{throw E.error(`${I} 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(I,l(a))})}async concurrencyHandle(e,a,n){const{max_character_num:i=H}=n,r=i>0?i:H;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(I,"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 F=new R;var N={engines:$,translator:F,Translator:R,Cache:o,getLanguage:K};export{o as Cache,i as CheckLanguageError,r as OPEN_AI_MODELS,t as TranslationError,R as Translator,L as checkLanguages,N as default,$ as engines,K as getLanguage,P as normalFromLanguage,_ as normalToLanguage,j as originLanguages,B as targetLanguages,F as translator};
|