@yxw007/translate 0.4.1 → 1.0.0
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 +165 -56
- package/README_zh-CN.md +166 -52
- package/dist/browser/index.cjs +2303 -2886
- package/dist/browser/index.esm.js +2303 -2876
- package/dist/browser/index.esm.min.js +28 -1
- package/dist/browser/index.min.cjs +28 -1
- package/dist/browser/index.umd.js +2393 -2972
- package/dist/browser/index.umd.min.js +28 -1
- package/dist/engines/amazon.d.ts +7 -0
- package/dist/engines/azure.d.ts +9 -0
- package/dist/engines/baidu.d.ts +6 -0
- package/dist/engines/deepl.d.ts +88 -0
- package/dist/engines/google.d.ts +3 -0
- package/dist/engines/helper.d.ts +2 -0
- package/dist/engines/index.d.ts +16 -0
- package/dist/engines/openai.d.ts +8 -0
- package/dist/engines/tencent.d.ts +7 -0
- package/dist/engines/yandex.d.ts +5 -0
- package/dist/index.d.ts +20 -5342
- package/dist/language/check/baidu.d.ts +9 -0
- package/dist/language/check/index.d.ts +775 -0
- package/dist/language/engines/amazon.d.ts +158 -0
- package/dist/language/engines/azure.d.ts +278 -0
- package/dist/language/engines/baidu.d.ts +424 -0
- package/dist/language/engines/deepl.d.ts +77 -0
- package/dist/language/engines/google.d.ts +494 -0
- package/dist/language/engines/index.d.ts +1973 -0
- package/dist/language/engines/openai.d.ts +494 -0
- package/dist/language/engines/tencent.d.ts +44 -0
- package/dist/language/index.d.ts +8 -0
- package/dist/language/origin/deepl.d.ts +36 -0
- package/dist/language/origin/index.d.ts +998 -0
- package/dist/language/origin/tencent.d.ts +22 -0
- package/dist/language/target/amazon.d.ts +78 -0
- package/dist/language/target/azure.d.ts +138 -0
- package/dist/language/target/baidu.d.ts +211 -0
- package/dist/language/target/deepl.d.ts +39 -0
- package/dist/language/target/google.d.ts +246 -0
- package/dist/language/target/index.d.ts +1000 -0
- package/dist/language/target/tencent.d.ts +21 -0
- package/dist/node/index.cjs +2300 -2853
- package/dist/node/index.js +2299 -2844
- package/dist/node/index.min.cjs +28 -1
- package/dist/node/index.min.js +28 -1
- package/dist/package.json +14 -23
- package/dist/types/index.d.ts +56 -0
- package/dist/types/typescript.d.ts +1 -0
- package/dist/utils/cache.d.ts +15 -0
- package/dist/utils/check.d.ts +2 -0
- package/dist/utils/constant.d.ts +2 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/node.d.ts +2 -0
- package/dist/utils/path.d.ts +1 -0
- package/dist/utils/utils.d.ts +7 -0
- package/package.json +14 -23
package/dist/node/index.min.cjs
CHANGED
|
@@ -1 +1,28 @@
|
|
|
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;
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require(`@aws-sdk/client-translate`),u=require(`crypto-js`);u=c(u);var d=class extends Error{region;constructor(e,t){super(t),this.region=e,this.name=`TranslationError`,Error.captureStackTrace?.(this,this.constructor)}},f=class extends Error{region;constructor(e,t){super(t),this.region=e,this.name=`CheckLanguageError`,Error.captureStackTrace?.(this,this.constructor)}};const p=[`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`];var m=class{cache;constructor(){this.cache=new Map}set(e,t,n){if(n<=0)throw Error(`time must be greater than 0`);let r=this.cache.get(e);r&&clearTimeout(r.timeout);let i={value:t,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 t=!0,n=this.cache.get(e);return n?!isNaN(n.expire)&&n.expire<Date.now()?t=!1:clearTimeout(n.timeout):t=!1,t&&this.del(e),t}del(e){this.cache.delete(e)}clear(){for(let[,e]of this.cache.entries())clearTimeout(e.timeout);this.cache.clear()}};function h(e=``){return{log(...e){this.info(...e)},info(...t){console.log(`[translate ${e}]`,...t)},error(...t){console.error(`[translate ${e}]`,...t)},warn(...t){console.warn(`[translate ${e}]`,...t)}}}function g(e){return new Promise(t=>setTimeout(t,e))}function _(){return`-`.repeat(20)}function v(e,t=`Translate fail ! `){return e instanceof TypeError?t+(e.cause?.message??e.message):t+e.message}async function y(e,t){let n=null;try{n=await t.json()}catch{}return new d(e,`Translate fail ! ${t.status}: ${t.statusText} ${n?.message??``}`)}function b(e,t){let n=[/\n\n+/,/[.。!??!\n]/,/[;;]/,/[,,]/g,/\s/],r=[];for(;e.length>0;){let i=e.slice(0,t);if(e.length<=t){r.push(e);break}let a=-1;for(let e of n){let n=RegExp(e.source+`(?=[^]*)`,`g`),r,o;for(;(r=n.exec(i))!==null;)r.index===n.lastIndex&&n.lastIndex++,o=o==null||r.index>o.index?r:o;if(o?.index!==void 0&&o.index>=t*.7){a=o.index;break}}a===-1&&(a=i.lastIndexOf(` `,t),a=a===-1?t:a),a==0?e=e.slice(a+1):(r.push(e.slice(0,a)),e=e.slice(a))}return r}function x(e,t){return!e||e.length<=0?!1:e.reduce((e,t)=>e+t.length,0)>t}var S={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`};const C={from:{Auto:`auto`,...S},to:S};function w(e,t,n=!1){if(!e)return n?`auto`:``;if(n&&e===`auto`)return`auto`;let r=Object.entries(t),i=r.find(([t])=>t.toLowerCase()===e.toLowerCase());if(i)return i[1];let a=r.find(([,t])=>t.toLowerCase()===e.toLowerCase());return a?a[1]:``}function T(e){let t=`https://translate.googleapis.com/translate_a/single`,n=e?.fromLanguages??C.from,r=e?.toLanguages??C.to;return{name:`google`,getFromLanguages(){return n},getToLanguages(){return r},normalFromLanguage(e){return w(e,n,!0)},normalToLanguage(e){return w(e,r)},async translate(e,n){let{from:r=`auto`,to:i}=n;Array.isArray(e)||(e=[e]);let a=e.join(`
|
|
2
|
+
`),o=`${t}?client=gtx&sl=${r}&tl=${i}&dt=t&q=${encodeURI(a)}`,s=await fetch(o);if(!s.ok)throw await y(this.name,s);let c=await s.json();if(!c||c.length===0)throw new d(this.name,`Translate fail ! translate's result is null or empty`);let l=[];for(let e=0;c[0]&&e<c[0].length;e++){let t=c[0][e];!t||t.length==0||!Array.isArray(t)||!t[0]||l.push(t[0].replaceAll(`
|
|
3
|
+
`,``))}return l},async checkLanguage(e){let n=`${t}?client=gtx&sl=auto&tl=en&dt=t&q=${encodeURI(e)}`,r=await fetch(n);if(!r.ok)throw await y(this.name,r);let i=await r.json();if(!i||i.length<3)throw new f(this.name,`Check language fail! No result returned`);let a=i[2];if(!a)throw new f(this.name,`Check language fail! Language not detected`);return a}}}var E={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`};const D={from:{Auto:`auto`,...E},to:E};function O(e){let{key:t,region:n,fromLanguages:r=D.from,toLanguages:i=D.to}=e,a=`azure`,o=()=>{if(!t||!n)throw new d(a,`${a} key and region is required`)};o();let s=`https://api.cognitive.microsofttranslator.com/translate?api-version=3.0`;return{name:a,getFromLanguages(){return r},getToLanguages(){return i},normalFromLanguage(e){return w(e,r,!0)},normalToLanguage(e){return w(e,i)},async translate(e,r){o();let{from:i,to:a}=r,c=`${s}&to=${a}${i&&i!==`auto`?`&from=${i}`:``}`;Array.isArray(e)||(e=[e]);let l=await fetch(c,{method:`POST`,headers:{"Content-Type":`application/json; charset=UTF-8`,"Ocp-Apim-Subscription-Key":t,"Ocp-Apim-Subscription-Region":n},body:JSON.stringify(e.map(e=>({Text:e})))});if(!l.ok)throw await y(this.name,l);let u=await l.json();if(u.error)throw new d(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`);let f=u;if(!f||f.length===0)throw new d(this.name,`Translate fail ! translate's result is null or empty`);let p=[];for(let e of f)!e.translations||e.translations.length==0||p.push(...e.translations.map(e=>e.text));return p},async checkLanguage(e){o();let r=`${s}&to=en`,i=await fetch(r,{method:`POST`,headers:{"Content-Type":`application/json; charset=UTF-8`,"Ocp-Apim-Subscription-Key":t,"Ocp-Apim-Subscription-Region":n},body:JSON.stringify([{Text:e}])});if(!i.ok)throw await y(this.name,i);let a=await i.json();if(a.error)throw new f(this.name,`checkLanguage fail ! code: ${a.error.code}, message: ${a.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);if(!a||!Array.isArray(a)||a.length===0)throw new f(this.name,`Check language fail! No result returned`);let c=a[0]?.detectedLanguage?.language;if(!c)throw new f(this.name,`Check language fail! Language not detected`);return c}}}var k={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={from:{Auto:`auto`,...k},to:k};function j(e){let{region:t,accessKeyId:n,secretAccessKey:r,fromLanguages:i=A.from,toLanguages:a=A.to}=e,o=`amazon`,s=()=>{if(!t||!n||!r)throw new d(o,`${o} region, accessKeyId ,secretAccessKey is required`)};return s(),{name:o,getFromLanguages(){return i},getToLanguages(){return a},normalFromLanguage(e){return w(e,i,!0)},normalToLanguage(e){return w(e,a)},async translate(e,i){s();let{from:a=`auto`,to:o}=i,c=new l.TranslateClient({region:t,credentials:{accessKeyId:n,secretAccessKey:r}});Array.isArray(e)||(e=[e]);let u=new l.TranslateTextCommand({SourceLanguageCode:a,TargetLanguageCode:o,Text:e.join(`
|
|
4
|
+
`)}),d=await c.send(u),f=[];if(d.TranslatedText){let e=d.TranslatedText??``;f.push(...e.split(`
|
|
5
|
+
`))}return f},async checkLanguage(e){s();let i=new l.TranslateClient({region:t,credentials:{accessKeyId:n,secretAccessKey:r}}),a=new l.TranslateTextCommand({SourceLanguageCode:`auto`,TargetLanguageCode:`en`,Text:e});try{let e=await i.send(a);if(!e.SourceLanguageCode)throw new d(o,`Check language fail! Source language not detected`);return e.SourceLanguageCode}catch(e){throw new d(o,`Check language fail! ${e.message||e}`)}}}}var ee=o(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r():typeof define==`function`&&define.amd?define([],r):n.CryptoJS=r()})(e,function(){var e=e||function(e,t){var n;if(typeof window<`u`&&window.crypto&&(n=window.crypto),typeof self<`u`&&self.crypto&&(n=self.crypto),typeof globalThis<`u`&&globalThis.crypto&&(n=globalThis.crypto),!n&&typeof window<`u`&&window.msCrypto&&(n=window.msCrypto),!n&&typeof global<`u`&&global.crypto&&(n=global.crypto),!n&&typeof require==`function`)try{n=require(`crypto`)}catch{}var r=function(){if(n){if(typeof n.getRandomValues==`function`)try{return n.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof n.randomBytes==`function`)try{return n.randomBytes(4).readInt32LE()}catch{}}throw Error(`Native crypto module could not be used to get secure random number.`)},i=Object.create||function(){function e(){}return function(t){var n;return e.prototype=t,n=new e,e.prototype=null,n}}(),a={},o=a.lib={},s=o.Base=function(){return{extend:function(e){var t=i(this);return e&&t.mixIn(e),(!t.hasOwnProperty(`init`)||this.init===t.init)&&(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);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||[],n==t?this.sigBytes=e.length*4:this.sigBytes=n},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes,i=e.sigBytes;if(this.clamp(),r%4)for(var a=0;a<i;a++){var o=n[a>>>2]>>>24-a%4*8&255;t[r+a>>>2]|=o<<24-(r+a)%4*8}else for(var s=0;s<i;s+=4)t[r+s>>>2]=n[s>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.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 t=[],n=0;n<e;n+=4)t.push(r());return new c.init(t,e)}}),l=a.enc={},u=l.Hex={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push((a>>>4).toString(16)),r.push((a&15).toString(16))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new c.init(n,t/2)}},d=l.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push(String.fromCharCode(a))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(e.charCodeAt(r)&255)<<24-r%4*8;return new c.init(n,t)}},f=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(d.stringify(e)))}catch{throw Error(`Malformed UTF-8 data`)}},parse:function(e){return d.parse(unescape(encodeURIComponent(e)))}},p=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){typeof e==`string`&&(e=f.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n,r=this._data,i=r.words,a=r.sigBytes,o=this.blockSize,s=a/(o*4);s=t?e.ceil(s):e.max((s|0)-this._minBufferSize,0);var l=s*o,u=e.min(l*4,a);if(l){for(var d=0;d<l;d+=o)this._doProcessBlock(i,d);n=i.splice(0,l),r.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=p.extend({cfg:s.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){p.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:512/32,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new m.HMAC.init(e,n).finalize(t)}}});var m=a.algo={};return a}(Math);return e})})),M=c(o(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(ee()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return(function(t){var n=e,r=n.lib,i=r.WordArray,a=r.Hasher,o=n.algo,s=[];(function(){for(var e=0;e<64;e++)s[e]=t.abs(t.sin(e+1))*4294967296|0})();var c=o.MD5=a.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,i=e[r];e[r]=(i<<8|i>>>24)&16711935|(i<<24|i>>>8)&4278255360}var a=this._hash.words,o=e[t+0],c=e[t+1],p=e[t+2],m=e[t+3],h=e[t+4],g=e[t+5],_=e[t+6],v=e[t+7],y=e[t+8],b=e[t+9],x=e[t+10],S=e[t+11],C=e[t+12],w=e[t+13],T=e[t+14],E=e[t+15],D=a[0],O=a[1],k=a[2],A=a[3];D=l(D,O,k,A,o,7,s[0]),A=l(A,D,O,k,c,12,s[1]),k=l(k,A,D,O,p,17,s[2]),O=l(O,k,A,D,m,22,s[3]),D=l(D,O,k,A,h,7,s[4]),A=l(A,D,O,k,g,12,s[5]),k=l(k,A,D,O,_,17,s[6]),O=l(O,k,A,D,v,22,s[7]),D=l(D,O,k,A,y,7,s[8]),A=l(A,D,O,k,b,12,s[9]),k=l(k,A,D,O,x,17,s[10]),O=l(O,k,A,D,S,22,s[11]),D=l(D,O,k,A,C,7,s[12]),A=l(A,D,O,k,w,12,s[13]),k=l(k,A,D,O,T,17,s[14]),O=l(O,k,A,D,E,22,s[15]),D=u(D,O,k,A,c,5,s[16]),A=u(A,D,O,k,_,9,s[17]),k=u(k,A,D,O,S,14,s[18]),O=u(O,k,A,D,o,20,s[19]),D=u(D,O,k,A,g,5,s[20]),A=u(A,D,O,k,x,9,s[21]),k=u(k,A,D,O,E,14,s[22]),O=u(O,k,A,D,h,20,s[23]),D=u(D,O,k,A,b,5,s[24]),A=u(A,D,O,k,T,9,s[25]),k=u(k,A,D,O,m,14,s[26]),O=u(O,k,A,D,y,20,s[27]),D=u(D,O,k,A,w,5,s[28]),A=u(A,D,O,k,p,9,s[29]),k=u(k,A,D,O,v,14,s[30]),O=u(O,k,A,D,C,20,s[31]),D=d(D,O,k,A,g,4,s[32]),A=d(A,D,O,k,y,11,s[33]),k=d(k,A,D,O,S,16,s[34]),O=d(O,k,A,D,T,23,s[35]),D=d(D,O,k,A,c,4,s[36]),A=d(A,D,O,k,h,11,s[37]),k=d(k,A,D,O,v,16,s[38]),O=d(O,k,A,D,x,23,s[39]),D=d(D,O,k,A,w,4,s[40]),A=d(A,D,O,k,o,11,s[41]),k=d(k,A,D,O,m,16,s[42]),O=d(O,k,A,D,_,23,s[43]),D=d(D,O,k,A,b,4,s[44]),A=d(A,D,O,k,C,11,s[45]),k=d(k,A,D,O,E,16,s[46]),O=d(O,k,A,D,p,23,s[47]),D=f(D,O,k,A,o,6,s[48]),A=f(A,D,O,k,v,10,s[49]),k=f(k,A,D,O,T,15,s[50]),O=f(O,k,A,D,g,21,s[51]),D=f(D,O,k,A,C,6,s[52]),A=f(A,D,O,k,m,10,s[53]),k=f(k,A,D,O,x,15,s[54]),O=f(O,k,A,D,c,21,s[55]),D=f(D,O,k,A,y,6,s[56]),A=f(A,D,O,k,E,10,s[57]),k=f(k,A,D,O,_,15,s[58]),O=f(O,k,A,D,w,21,s[59]),D=f(D,O,k,A,h,6,s[60]),A=f(A,D,O,k,S,10,s[61]),k=f(k,A,D,O,p,15,s[62]),O=f(O,k,A,D,b,21,s[63]),a[0]=a[0]+D|0,a[1]=a[1]+O|0,a[2]=a[2]+k|0,a[3]=a[3]+A|0},_doFinalize:function(){var e=this._data,n=e.words,r=this._nDataBytes*8,i=e.sigBytes*8;n[i>>>5]|=128<<24-i%32;var a=t.floor(r/4294967296),o=r;n[(i+64>>>9<<4)+15]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360,n[(i+64>>>9<<4)+14]=(o<<8|o>>>24)&16711935|(o<<24|o>>>8)&4278255360,e.sigBytes=(n.length+1)*4,this._process();for(var s=this._hash,c=s.words,l=0;l<4;l++){var u=c[l];c[l]=(u<<8|u>>>24)&16711935|(u<<24|u>>>8)&4278255360}return s},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}});function l(e,t,n,r,i,a,o){var s=e+(t&n|~t&r)+i+o;return(s<<a|s>>>32-a)+t}function u(e,t,n,r,i,a,o){var s=e+(t&r|n&~r)+i+o;return(s<<a|s>>>32-a)+t}function d(e,t,n,r,i,a,o){var s=e+(t^n^r)+i+o;return(s<<a|s>>>32-a)+t}function f(e,t,n,r,i,a,o){var s=e+(n^(t|~r))+i+o;return(s<<a|s>>>32-a)+t}n.MD5=a._createHelper(c),n.HmacMD5=a._createHmacHelper(c)})(Math),e.MD5})}))(),1),N={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`};const P={from:{Auto:`auto`,...N},to:N};function te(e){let{appId:t,secretKey:n,fromLanguages:r=P.from,toLanguages:i=P.to}=e,a=`baidu`,o=()=>{if(!t||!n)throw new d(a,`${a} appId and secretKey is required`)};return o(),{name:a,getFromLanguages(){return r},getToLanguages(){return i},normalFromLanguage(e){return w(e,r,!0)},normalToLanguage(e){return w(e,i)},async translate(e,r){o();let{to:i,from:a=`auto`,domain:s=`it`}=r;Array.isArray(e)||(e=[e]);let c=e.join(`
|
|
6
|
+
`),l=Date.now(),u=(0,M.default)(`${t}${c}${l}${s}${n}`).toString(),f=new URLSearchParams;f.append(`q`,c),f.append(`from`,a),f.append(`to`,i),f.append(`appid`,t),f.append(`salt`,l.toString()),f.append(`domain`,s),f.append(`sign`,u);let p=await fetch(`https://fanyi-api.baidu.com/api/trans/vip/fieldtranslate`,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:f.toString()});if(!p.ok)throw await y(this.name,p);let m=await p.json();if(!m||m.error_code||!m.trans_result||m.trans_result.length===0)throw new d(this.name,`Translate fail ! error_code:${m.error_code}, error_msg: ${m.error_msg} \n Go to https://fanyi-api.baidu.com/product/123 view details`);let h=[];for(let e of m.trans_result)e.dst&&h.push(e.dst);return h},async checkLanguage(e){o();let r=Date.now(),i=(0,M.default)(`${t}${e}${r}${n}`).toString(),a=new URLSearchParams;a.append(`q`,e),a.append(`appid`,t),a.append(`salt`,r.toString()),a.append(`sign`,i);let s=await fetch(`https://fanyi-api.baidu.com/api/trans/vip/language`,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:a.toString()});if(!s.ok)throw await y(this.name,s);let c=await s.json();if(!c||c.error_code!=0)throw new f(this.name,`Check language fail ! error_code:${c.error_code}, error_msg: ${c.error_msg} \n Go to https://fanyi-api.baidu.com/product/143 view details`);return c.data.src}}}var ne={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`},re={"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`};const F={from:{Auto:`auto`,...ne},to:re};function ie(e){let{key:t,fromLanguages:n=F.from,toLanguages:r=F.to}=e,i=`deepl`,a=()=>{if(!t)throw new d(i,`${i} key is required`)};a();let o=`https://api-free.deepl.com/v2/translate`;return{name:i,getFromLanguages(){return n},getToLanguages(){return r},normalFromLanguage(e){return w(e,n,!0)},normalToLanguage(e){return w(e,r)},async translate(e,n){a();let{to:r,from:i}=n;Array.isArray(e)||(e=[e]);let s=await fetch(o,{method:`POST`,headers:{"Content-Type":`application/json; charset=UTF-8`,Authorization:`DeepL-Auth-Key ${t}`,Accept:`*/*`,Host:`api-free.deepl.com`,Connection:`keep-alive`},body:JSON.stringify({text:e,source_lang:i===`auto`?void 0:i,target_lang:r})});if(!s.ok)throw await y(this.name,s);let c=await s.json();if(c.error)throw new d(this.name,`Translate fail ! code: ${c.error.code}, message: ${c.error.message}`);let l=c.translations;if(!l||l.length===0)throw new d(this.name,`Translate fail ! translate's result is null or empty`);return l.map(e=>e.text)},async checkLanguage(e){a();let n=await fetch(o,{method:`POST`,headers:{"Content-Type":`application/json; charset=UTF-8`,Authorization:`DeepL-Auth-Key ${t}`,Accept:`*/*`,Host:`api-free.deepl.com`,Connection:`keep-alive`},body:JSON.stringify({text:[e],target_lang:`EN`})});if(!n.ok)throw await y(this.name,n);let r=await n.json();if(r.error)throw new f(this.name,`Check language fail ! code: ${r.error.code}, message: ${r.error.message}`);let i=r.translations;if(!i||i.length===0)throw new f(this.name,`Check language fail! No result returned`);let s=i[0].detected_source_language;if(!s)throw new f(this.name,`Check language fail! Language not detected`);return s}}}const I={from:{Auto:`auto`,...S},to:S},L=h(`openai`);function ae(e){let{apiKey:t,model:n,maxTokens:r=2e3,outputLog:i=!1,fromLanguages:a=I.from,toLanguages:o=I.to}=e,s=`openai`,c=()=>{if(!t)throw new d(s,`${s} apiKey is required`);if(!p.includes(n))throw new d(s,`${s} model=${n} is invalid`)};return c(),{name:s,getFromLanguages(){return a},getToLanguages(){return o},normalFromLanguage(e){return w(e,a,!0)},normalToLanguage(e){return w(e,o)},async translate(e,a){c();let{from:o,to:s}=a;Array.isArray(e)||(e=[e]);let l={role:`user`,content:`
|
|
7
|
+
满足以下4点翻译要求:
|
|
8
|
+
1.将每段文本从${o}翻译为${s}
|
|
9
|
+
2.文本内容以换行符\n进行段落分割,并以段落分割顺序进行翻译
|
|
10
|
+
3.仅翻译分割出的段落,其他任何不相关的内容都移除,比如:段落前后的空格、所有标点符号\n
|
|
11
|
+
4.仅返回要翻译的文本内容,不要返回任何其他内容
|
|
12
|
+
|
|
13
|
+
如何提取翻译文本,满足以下2点要求:
|
|
14
|
+
1.翻译从-$s$-字符标记开始至-$e$-字符标记结束,提取-$s$-至-$e$-之间的内容
|
|
15
|
+
2.-$s$-和-$e$-这2个标记不要返回,只是用来标记翻译的起始和结束位置
|
|
16
|
+
|
|
17
|
+
-$s$-
|
|
18
|
+
${e.join(`
|
|
19
|
+
`)}
|
|
20
|
+
-$e$-
|
|
21
|
+
`},u=await fetch(`https://api.openai.com/v1/chat/completions`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${t}`},body:JSON.stringify({model:n,messages:[{role:`system`,content:`You are a professional translator`},l],max_tokens:r,temperature:0})});if(!u.ok)throw await y(this.name,u);let f=await u.json();if(f.error)throw new d(this.name,`Translate fail! message: ${f.error.message}`);if(!f||!f.choices||f.choices.length===0||!f.choices[0]?.message?.content)throw new d(this.name,`Translate fail ! translate's result is null or empty`);let p=f.choices[0].message.content,m=[`-$s$-`,`-$e$-`],h=p.trim().split(`
|
|
22
|
+
`).map(e=>e.trim()).filter(Boolean).filter(e=>!m.includes(e));return i&&(L.info(`prompt:`,JSON.stringify(l,null,2)),L.info(`translations:`,JSON.stringify(h,null,2))),h}}}var oe={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`},R={"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 z={from:{...oe},to:R};function B(e,t=``,n){let r=u.default.HmacSHA256(e,t);return n===`hex`?u.default.enc.Hex.stringify(r):n===`base64`?u.default.enc.Base64.stringify(r):r}function V(e,t=`hex`){let n=u.default.SHA256(e);return t===`hex`?u.default.enc.Hex.stringify(n):n.toString()}function H(e){let t=new Date(e*1e3);return`${t.getUTCFullYear()}-${(`0`+(t.getUTCMonth()+1)).slice(-2)}-${(`0`+t.getUTCDate()).slice(-2)}`}function U({secretId:e,secretKey:t,service:n,host:r,payload:i,httpRequestMethod:a,action:o,apiVersion:s,region:c}){let l=Math.floor(Date.now()/1e3),u=H(l),d=`content-type:application/json; charset=utf-8
|
|
23
|
+
host:`+r+`
|
|
24
|
+
`,f=`content-type;host`,p=[a,`/`,``,d,f,V(i)].join(`
|
|
25
|
+
`),m=`TC3-HMAC-SHA256`,h=`${u}/${n}/tc3_request`,g={Authorization:`${m} Credential=${e}/${h}, SignedHeaders=${f}, Signature=${B([m,l,h,V(p)].join(`
|
|
26
|
+
`),B(`tc3_request`,B(n,B(u,`TC3`+t))),`hex`)}`,"Content-Type":`application/json; charset=utf-8`,Host:r,"X-TC-Action":o,"X-TC-Timestamp":l,"X-TC-Version":s};return c&&(g[`X-TC-Region`]=c),g}function W(e){let{secretId:t,secretKey:n,region:r=`ap-guangzhou`,fromLanguages:i=z.from,toLanguages:a=z.to}=e,o=`tencent`,s=`tmt.tencentcloudapi.com`,c=`https://${s}/`,l=`2018-03-21`,u=`TextTranslate`;function p(){if(!t||!n)throw new d(o,`${o} secretId and secretKey are required`)}return{name:o,getFromLanguages(){return i},getToLanguages(){return a},normalFromLanguage(e){return w(e,i,!0)},normalToLanguage(e){return w(e,a)},async translate(e,i){p();let{from:a=`auto`,to:f}=i,m=a===`auto`?`auto`:a,h={SourceText:Array.isArray(e)?e.join(`
|
|
27
|
+
`):e,Source:m,Target:f,ProjectId:0},g=JSON.stringify(h),_=U({secretId:t,secretKey:n,service:`tmt`,host:s,payload:g,httpRequestMethod:`POST`,action:u,apiVersion:l,region:r});try{let e=await fetch(c,{method:`POST`,headers:_,body:g});if(!e.ok)throw new d(o,`HTTP ${e.status}: ${await e.text()}`);let t=await e.json();if(t.Response?.Error)throw new d(o,`Tencent translate fail: ${t.Response.Error.Code}, ${t.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);let n=t.Response?.TargetText.split(`
|
|
28
|
+
`)??[];if(!Array.isArray(n)||n.length===0)throw new d(o,`Translate fail! No result returned`);return n}catch(e){throw e instanceof d?e:new d(o,`Translation failed: ${e}`)}},async checkLanguage(e){p();let i=JSON.stringify({SourceText:e,Source:`auto`,Target:`en`,ProjectId:0}),a=U({secretId:t,secretKey:n,service:`tmt`,host:s,payload:i,httpRequestMethod:`POST`,action:u,apiVersion:l,region:r});try{let e=await fetch(c,{method:`POST`,headers:a,body:i});if(!e.ok)throw new f(o,`HTTP ${e.status}: ${await e.text()}`);let t=await e.json();if(t.Response?.Error)throw new f(o,`Tencent language detect fail: ${t.Response.Error.Code}, ${t.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);let n=t.Response?.Source;if(!n)throw new f(o,`Language detect fail! No result returned`);return n}catch(e){throw e instanceof f?e:new f(o,`Language detection failed: ${e}`)}}}}const G={google:T,azure:O,amazon:j,baidu:te,deepl:ie,openai:ae,tencent:W},K={amazon:A,azure:D,baidu:P,deepl:F,google:C,openai:I,tencent:z},se={amazon:K.amazon.from,azure:K.azure.from,baidu:{Chinese:`zh`,English:`en`,Japanese:`jp`,Korean:`kor`,Thai:`th`,Russian:`ru`},deepl:K.deepl.from,google:K.google.from,openai:K.openai.from,tencent:K.tencent.from};function ce(e){if(typeof e==`string`){let t=K[e];if(!t)throw Error(`Engine ${e} not found`);return t}return{from:e.getFromLanguages(),to:e.getToLanguages()}}function q(e){let t=ce(e);return{from:t.from,to:t.to}}const J=`Translate`,Y=1e3,X=h(),Z=new m;var Q=class{engines;cache_time;concurrencyMax;concurrencyDelay;constructor(e=60*1e3,t=4,n=20){this.engines=new Map,this.cache_time=e,this.concurrencyMax=t,this.concurrencyDelay=n}use(e){this.addEngine(e)}addEngine(e){if(this.engines.has(e.name)){X.warn(`Engine already exists`);return}this.engines.set(e.name,e)}removeEngine(e){return!e||!this.engines.has(e)?(X.warn(`Engine name is required or not found`),!1):(this.engines.delete(e),!0)}getFromLanguages(e){let t=this.engines.get(e);return t?t.getFromLanguages():(X.warn(`Engine ${e} not found`),{})}getToLanguages(e){let t=this.engines.get(e);return t?t.getToLanguages():(X.warn(`Engine ${e} not found`),{})}isSupportCheckLanguage(e){if(!e||!this.engines.has(e))return X.warn(`Engine name is required or not found`),!1;let t=this.engines.get(e);return t?!!t.checkLanguage:(X.warn(`Engine ${e} not found`),!1)}async checkLanguage(e,t){let{engine:n=`google`,max_character_num:r=Y}=t;if(!this.engines.has(n))throw new f(J,`Engine ${n} not found`);let i=this.engines.get(n);if(!i)throw new f(J,`Engine ${n} is null`);if(!i.checkLanguage)throw new f(J,`Engine ${n} does not support checkLanguage method`);let a=r>0?e.substring(0,r):e;if(a.length<=0)throw new d(J,`Text is empty or too short to check language`);return i.checkLanguage(a).then(e=>e).catch(t=>{throw X.error(`${J} Failed to check language for text: \n${_()}\n${e}\n${_()}\n error: ${v(t)}`),t})}async translate(e,t){let{engine:n=`google`,cache_time:r=60*1e3}=t,{from:i=`auto`,to:a}=t;if(!this.engines.has(n))throw new d(J,`Engine ${n} not found`);let o=this.engines.get(n);if(!o)throw new d(J,`Engine ${n} is null`);let s=o.normalFromLanguage(i),c=o.normalToLanguage(a),l={...t,engine:n,from:s,to:c};if(!s)throw new d(J,`Invalid origin language ${i}`);if(!c)throw new d(J,`Invalid target language ${a}`);let u=`${s}:${c}:${n}:${e}`;return Z.get(u)?Promise.resolve(Z.get(u)?.value):this.concurrencyHandle(o,e,l).then(e=>(Z.set(u,e,r??this.cache_time),e)).catch(t=>{throw X.error(`${J} Failed: from=${s},to=${c},engine=${n},translate text: \n${_()}\n${e}\n${_()}\n error: ${v(t)}`),t instanceof d?t:new d(J,v(t))})}async concurrencyHandle(e,t,n){let{max_character_num:r=Y}=n,i=r>0?r:Y;if(Array.isArray(t)){if(x(t,r))throw new d(J,`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(t,n)}else return this.concurrencyTranslate(e,t,n,i)}async concurrencyTranslate(e,t,n,r){let i=b(t,r).map((e,t)=>({content:e,index:t})),a=[],o=0,s=this.concurrencyDelay,c=this.concurrencyMax;return new Promise((t,r)=>{function l(){for(;o<c&&i.length>0;){let{content:c,index:u}=i.shift();o++,e.translate(c,n).then(e=>{a.push({translated:e,index:u})}).catch(e=>r(e)).finally(async()=>{if(o--,o===0&&i.length<=0)return a.sort((e,t)=>e.index-t.index),t([a.reduce((e,t)=>e.concat(t.translated),[]).join(``)]);await g(s),l()})}}return l(),a})}};const $=new Q;$.addEngine(G.google());var le={engines:G,translator:$,Translator:Q,Cache:m,getLanguage:q};exports.Cache=m,exports.CheckLanguageError=f,exports.OPEN_AI_MODELS=p,exports.TranslationError=d,exports.Translator=Q,exports.checkLanguages=se,exports.default=le,exports.engines=G,exports.getLanguage=q,exports.translator=$;
|
package/dist/node/index.min.js
CHANGED
|
@@ -1 +1,28 @@
|
|
|
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};
|
|
1
|
+
import{createRequire as e}from"node:module";import{TranslateClient as t,TranslateTextCommand as n}from"@aws-sdk/client-translate";import r from"crypto-js";var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),d=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=s(t),c=0,u=i.length,d;c<u;c++)d=i[c],!l.call(e,d)&&d!==n&&a(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=o(t,d))||r.enumerable});return e},f=(e,t,n)=>(n=e==null?{}:i(c(e)),d(t||!e||!e.__esModule?a(n,`default`,{value:e,enumerable:!0}):n,e)),p=e(import.meta.url),m=class extends Error{region;constructor(e,t){super(t),this.region=e,this.name=`TranslationError`,Error.captureStackTrace?.(this,this.constructor)}},h=class extends Error{region;constructor(e,t){super(t),this.region=e,this.name=`CheckLanguageError`,Error.captureStackTrace?.(this,this.constructor)}};const g=[`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`];var _=class{cache;constructor(){this.cache=new Map}set(e,t,n){if(n<=0)throw Error(`time must be greater than 0`);let r=this.cache.get(e);r&&clearTimeout(r.timeout);let i={value:t,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 t=!0,n=this.cache.get(e);return n?!isNaN(n.expire)&&n.expire<Date.now()?t=!1:clearTimeout(n.timeout):t=!1,t&&this.del(e),t}del(e){this.cache.delete(e)}clear(){for(let[,e]of this.cache.entries())clearTimeout(e.timeout);this.cache.clear()}};function v(e=``){return{log(...e){this.info(...e)},info(...t){console.log(`[translate ${e}]`,...t)},error(...t){console.error(`[translate ${e}]`,...t)},warn(...t){console.warn(`[translate ${e}]`,...t)}}}function y(e){return new Promise(t=>setTimeout(t,e))}function b(){return`-`.repeat(20)}function x(e,t=`Translate fail ! `){return e instanceof TypeError?t+(e.cause?.message??e.message):t+e.message}async function S(e,t){let n=null;try{n=await t.json()}catch{}return new m(e,`Translate fail ! ${t.status}: ${t.statusText} ${n?.message??``}`)}function C(e,t){let n=[/\n\n+/,/[.。!??!\n]/,/[;;]/,/[,,]/g,/\s/],r=[];for(;e.length>0;){let i=e.slice(0,t);if(e.length<=t){r.push(e);break}let a=-1;for(let e of n){let n=RegExp(e.source+`(?=[^]*)`,`g`),r,o;for(;(r=n.exec(i))!==null;)r.index===n.lastIndex&&n.lastIndex++,o=o==null||r.index>o.index?r:o;if(o?.index!==void 0&&o.index>=t*.7){a=o.index;break}}a===-1&&(a=i.lastIndexOf(` `,t),a=a===-1?t:a),a==0?e=e.slice(a+1):(r.push(e.slice(0,a)),e=e.slice(a))}return r}function w(e,t){return!e||e.length<=0?!1:e.reduce((e,t)=>e+t.length,0)>t}var T={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`};const E={from:{Auto:`auto`,...T},to:T};function D(e,t,n=!1){if(!e)return n?`auto`:``;if(n&&e===`auto`)return`auto`;let r=Object.entries(t),i=r.find(([t])=>t.toLowerCase()===e.toLowerCase());if(i)return i[1];let a=r.find(([,t])=>t.toLowerCase()===e.toLowerCase());return a?a[1]:``}function O(e){let t=`https://translate.googleapis.com/translate_a/single`,n=e?.fromLanguages??E.from,r=e?.toLanguages??E.to;return{name:`google`,getFromLanguages(){return n},getToLanguages(){return r},normalFromLanguage(e){return D(e,n,!0)},normalToLanguage(e){return D(e,r)},async translate(e,n){let{from:r=`auto`,to:i}=n;Array.isArray(e)||(e=[e]);let a=e.join(`
|
|
2
|
+
`),o=`${t}?client=gtx&sl=${r}&tl=${i}&dt=t&q=${encodeURI(a)}`,s=await fetch(o);if(!s.ok)throw await S(this.name,s);let c=await s.json();if(!c||c.length===0)throw new m(this.name,`Translate fail ! translate's result is null or empty`);let l=[];for(let e=0;c[0]&&e<c[0].length;e++){let t=c[0][e];!t||t.length==0||!Array.isArray(t)||!t[0]||l.push(t[0].replaceAll(`
|
|
3
|
+
`,``))}return l},async checkLanguage(e){let n=`${t}?client=gtx&sl=auto&tl=en&dt=t&q=${encodeURI(e)}`,r=await fetch(n);if(!r.ok)throw await S(this.name,r);let i=await r.json();if(!i||i.length<3)throw new h(this.name,`Check language fail! No result returned`);let a=i[2];if(!a)throw new h(this.name,`Check language fail! Language not detected`);return a}}}var k={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`};const A={from:{Auto:`auto`,...k},to:k};function j(e){let{key:t,region:n,fromLanguages:r=A.from,toLanguages:i=A.to}=e,a=`azure`,o=()=>{if(!t||!n)throw new m(a,`${a} key and region is required`)};o();let s=`https://api.cognitive.microsofttranslator.com/translate?api-version=3.0`;return{name:a,getFromLanguages(){return r},getToLanguages(){return i},normalFromLanguage(e){return D(e,r,!0)},normalToLanguage(e){return D(e,i)},async translate(e,r){o();let{from:i,to:a}=r,c=`${s}&to=${a}${i&&i!==`auto`?`&from=${i}`:``}`;Array.isArray(e)||(e=[e]);let l=await fetch(c,{method:`POST`,headers:{"Content-Type":`application/json; charset=UTF-8`,"Ocp-Apim-Subscription-Key":t,"Ocp-Apim-Subscription-Region":n},body:JSON.stringify(e.map(e=>({Text:e})))});if(!l.ok)throw await S(this.name,l);let u=await l.json();if(u.error)throw new m(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`);let d=u;if(!d||d.length===0)throw new m(this.name,`Translate fail ! translate's result is null or empty`);let f=[];for(let e of d)!e.translations||e.translations.length==0||f.push(...e.translations.map(e=>e.text));return f},async checkLanguage(e){o();let r=`${s}&to=en`,i=await fetch(r,{method:`POST`,headers:{"Content-Type":`application/json; charset=UTF-8`,"Ocp-Apim-Subscription-Key":t,"Ocp-Apim-Subscription-Region":n},body:JSON.stringify([{Text:e}])});if(!i.ok)throw await S(this.name,i);let a=await i.json();if(a.error)throw new h(this.name,`checkLanguage fail ! code: ${a.error.code}, message: ${a.error.message} \n Go to https://learn.microsoft.com/zh-cn/azure/ai-services/translator/text-translation/reference/v3/translate view details`);if(!a||!Array.isArray(a)||a.length===0)throw new h(this.name,`Check language fail! No result returned`);let c=a[0]?.detectedLanguage?.language;if(!c)throw new h(this.name,`Check language fail! Language not detected`);return c}}}var 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 N={from:{Auto:`auto`,...M},to:M};function ee(e){let{region:r,accessKeyId:i,secretAccessKey:a,fromLanguages:o=N.from,toLanguages:s=N.to}=e,c=`amazon`,l=()=>{if(!r||!i||!a)throw new m(c,`${c} region, accessKeyId ,secretAccessKey is required`)};return l(),{name:c,getFromLanguages(){return o},getToLanguages(){return s},normalFromLanguage(e){return D(e,o,!0)},normalToLanguage(e){return D(e,s)},async translate(e,o){l();let{from:s=`auto`,to:c}=o,u=new t({region:r,credentials:{accessKeyId:i,secretAccessKey:a}});Array.isArray(e)||(e=[e]);let d=new n({SourceLanguageCode:s,TargetLanguageCode:c,Text:e.join(`
|
|
4
|
+
`)}),f=await u.send(d),p=[];if(f.TranslatedText){let e=f.TranslatedText??``;p.push(...e.split(`
|
|
5
|
+
`))}return p},async checkLanguage(e){l();let o=new t({region:r,credentials:{accessKeyId:i,secretAccessKey:a}}),s=new n({SourceLanguageCode:`auto`,TargetLanguageCode:`en`,Text:e});try{let e=await o.send(s);if(!e.SourceLanguageCode)throw new m(c,`Check language fail! Source language not detected`);return e.SourceLanguageCode}catch(e){throw new m(c,`Check language fail! ${e.message||e}`)}}}}var te=u(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r():typeof define==`function`&&define.amd?define([],r):n.CryptoJS=r()})(e,function(){var e=e||function(e,t){var n;if(typeof window<`u`&&window.crypto&&(n=window.crypto),typeof self<`u`&&self.crypto&&(n=self.crypto),typeof globalThis<`u`&&globalThis.crypto&&(n=globalThis.crypto),!n&&typeof window<`u`&&window.msCrypto&&(n=window.msCrypto),!n&&typeof global<`u`&&global.crypto&&(n=global.crypto),!n&&typeof p==`function`)try{n=p(`crypto`)}catch{}var r=function(){if(n){if(typeof n.getRandomValues==`function`)try{return n.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof n.randomBytes==`function`)try{return n.randomBytes(4).readInt32LE()}catch{}}throw Error(`Native crypto module could not be used to get secure random number.`)},i=Object.create||function(){function e(){}return function(t){var n;return e.prototype=t,n=new e,e.prototype=null,n}}(),a={},o=a.lib={},s=o.Base=function(){return{extend:function(e){var t=i(this);return e&&t.mixIn(e),(!t.hasOwnProperty(`init`)||this.init===t.init)&&(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);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||[],n==t?this.sigBytes=e.length*4:this.sigBytes=n},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes,i=e.sigBytes;if(this.clamp(),r%4)for(var a=0;a<i;a++){var o=n[a>>>2]>>>24-a%4*8&255;t[r+a>>>2]|=o<<24-(r+a)%4*8}else for(var s=0;s<i;s+=4)t[r+s>>>2]=n[s>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.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 t=[],n=0;n<e;n+=4)t.push(r());return new c.init(t,e)}}),l=a.enc={},u=l.Hex={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push((a>>>4).toString(16)),r.push((a&15).toString(16))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new c.init(n,t/2)}},d=l.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push(String.fromCharCode(a))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(e.charCodeAt(r)&255)<<24-r%4*8;return new c.init(n,t)}},f=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(d.stringify(e)))}catch{throw Error(`Malformed UTF-8 data`)}},parse:function(e){return d.parse(unescape(encodeURIComponent(e)))}},m=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){typeof e==`string`&&(e=f.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n,r=this._data,i=r.words,a=r.sigBytes,o=this.blockSize,s=a/(o*4);s=t?e.ceil(s):e.max((s|0)-this._minBufferSize,0);var l=s*o,u=e.min(l*4,a);if(l){for(var d=0;d<l;d+=o)this._doProcessBlock(i,d);n=i.splice(0,l),r.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:512/32,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new h.HMAC.init(e,n).finalize(t)}}});var h=a.algo={};return a}(Math);return e})})),P=f(u(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(te()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return(function(t){var n=e,r=n.lib,i=r.WordArray,a=r.Hasher,o=n.algo,s=[];(function(){for(var e=0;e<64;e++)s[e]=t.abs(t.sin(e+1))*4294967296|0})();var c=o.MD5=a.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,i=e[r];e[r]=(i<<8|i>>>24)&16711935|(i<<24|i>>>8)&4278255360}var a=this._hash.words,o=e[t+0],c=e[t+1],p=e[t+2],m=e[t+3],h=e[t+4],g=e[t+5],_=e[t+6],v=e[t+7],y=e[t+8],b=e[t+9],x=e[t+10],S=e[t+11],C=e[t+12],w=e[t+13],T=e[t+14],E=e[t+15],D=a[0],O=a[1],k=a[2],A=a[3];D=l(D,O,k,A,o,7,s[0]),A=l(A,D,O,k,c,12,s[1]),k=l(k,A,D,O,p,17,s[2]),O=l(O,k,A,D,m,22,s[3]),D=l(D,O,k,A,h,7,s[4]),A=l(A,D,O,k,g,12,s[5]),k=l(k,A,D,O,_,17,s[6]),O=l(O,k,A,D,v,22,s[7]),D=l(D,O,k,A,y,7,s[8]),A=l(A,D,O,k,b,12,s[9]),k=l(k,A,D,O,x,17,s[10]),O=l(O,k,A,D,S,22,s[11]),D=l(D,O,k,A,C,7,s[12]),A=l(A,D,O,k,w,12,s[13]),k=l(k,A,D,O,T,17,s[14]),O=l(O,k,A,D,E,22,s[15]),D=u(D,O,k,A,c,5,s[16]),A=u(A,D,O,k,_,9,s[17]),k=u(k,A,D,O,S,14,s[18]),O=u(O,k,A,D,o,20,s[19]),D=u(D,O,k,A,g,5,s[20]),A=u(A,D,O,k,x,9,s[21]),k=u(k,A,D,O,E,14,s[22]),O=u(O,k,A,D,h,20,s[23]),D=u(D,O,k,A,b,5,s[24]),A=u(A,D,O,k,T,9,s[25]),k=u(k,A,D,O,m,14,s[26]),O=u(O,k,A,D,y,20,s[27]),D=u(D,O,k,A,w,5,s[28]),A=u(A,D,O,k,p,9,s[29]),k=u(k,A,D,O,v,14,s[30]),O=u(O,k,A,D,C,20,s[31]),D=d(D,O,k,A,g,4,s[32]),A=d(A,D,O,k,y,11,s[33]),k=d(k,A,D,O,S,16,s[34]),O=d(O,k,A,D,T,23,s[35]),D=d(D,O,k,A,c,4,s[36]),A=d(A,D,O,k,h,11,s[37]),k=d(k,A,D,O,v,16,s[38]),O=d(O,k,A,D,x,23,s[39]),D=d(D,O,k,A,w,4,s[40]),A=d(A,D,O,k,o,11,s[41]),k=d(k,A,D,O,m,16,s[42]),O=d(O,k,A,D,_,23,s[43]),D=d(D,O,k,A,b,4,s[44]),A=d(A,D,O,k,C,11,s[45]),k=d(k,A,D,O,E,16,s[46]),O=d(O,k,A,D,p,23,s[47]),D=f(D,O,k,A,o,6,s[48]),A=f(A,D,O,k,v,10,s[49]),k=f(k,A,D,O,T,15,s[50]),O=f(O,k,A,D,g,21,s[51]),D=f(D,O,k,A,C,6,s[52]),A=f(A,D,O,k,m,10,s[53]),k=f(k,A,D,O,x,15,s[54]),O=f(O,k,A,D,c,21,s[55]),D=f(D,O,k,A,y,6,s[56]),A=f(A,D,O,k,E,10,s[57]),k=f(k,A,D,O,_,15,s[58]),O=f(O,k,A,D,w,21,s[59]),D=f(D,O,k,A,h,6,s[60]),A=f(A,D,O,k,S,10,s[61]),k=f(k,A,D,O,p,15,s[62]),O=f(O,k,A,D,b,21,s[63]),a[0]=a[0]+D|0,a[1]=a[1]+O|0,a[2]=a[2]+k|0,a[3]=a[3]+A|0},_doFinalize:function(){var e=this._data,n=e.words,r=this._nDataBytes*8,i=e.sigBytes*8;n[i>>>5]|=128<<24-i%32;var a=t.floor(r/4294967296),o=r;n[(i+64>>>9<<4)+15]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360,n[(i+64>>>9<<4)+14]=(o<<8|o>>>24)&16711935|(o<<24|o>>>8)&4278255360,e.sigBytes=(n.length+1)*4,this._process();for(var s=this._hash,c=s.words,l=0;l<4;l++){var u=c[l];c[l]=(u<<8|u>>>24)&16711935|(u<<24|u>>>8)&4278255360}return s},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}});function l(e,t,n,r,i,a,o){var s=e+(t&n|~t&r)+i+o;return(s<<a|s>>>32-a)+t}function u(e,t,n,r,i,a,o){var s=e+(t&r|n&~r)+i+o;return(s<<a|s>>>32-a)+t}function d(e,t,n,r,i,a,o){var s=e+(t^n^r)+i+o;return(s<<a|s>>>32-a)+t}function f(e,t,n,r,i,a,o){var s=e+(n^(t|~r))+i+o;return(s<<a|s>>>32-a)+t}n.MD5=a._createHelper(c),n.HmacMD5=a._createHmacHelper(c)})(Math),e.MD5})}))(),1),F={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`};const I={from:{Auto:`auto`,...F},to:F};function ne(e){let{appId:t,secretKey:n,fromLanguages:r=I.from,toLanguages:i=I.to}=e,a=`baidu`,o=()=>{if(!t||!n)throw new m(a,`${a} appId and secretKey is required`)};return o(),{name:a,getFromLanguages(){return r},getToLanguages(){return i},normalFromLanguage(e){return D(e,r,!0)},normalToLanguage(e){return D(e,i)},async translate(e,r){o();let{to:i,from:a=`auto`,domain:s=`it`}=r;Array.isArray(e)||(e=[e]);let c=e.join(`
|
|
6
|
+
`),l=Date.now(),u=(0,P.default)(`${t}${c}${l}${s}${n}`).toString(),d=new URLSearchParams;d.append(`q`,c),d.append(`from`,a),d.append(`to`,i),d.append(`appid`,t),d.append(`salt`,l.toString()),d.append(`domain`,s),d.append(`sign`,u);let f=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(!f.ok)throw await S(this.name,f);let p=await f.json();if(!p||p.error_code||!p.trans_result||p.trans_result.length===0)throw new m(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`);let h=[];for(let e of p.trans_result)e.dst&&h.push(e.dst);return h},async checkLanguage(e){o();let r=Date.now(),i=(0,P.default)(`${t}${e}${r}${n}`).toString(),a=new URLSearchParams;a.append(`q`,e),a.append(`appid`,t),a.append(`salt`,r.toString()),a.append(`sign`,i);let s=await fetch(`https://fanyi-api.baidu.com/api/trans/vip/language`,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:a.toString()});if(!s.ok)throw await S(this.name,s);let c=await s.json();if(!c||c.error_code!=0)throw new h(this.name,`Check language fail ! error_code:${c.error_code}, error_msg: ${c.error_msg} \n Go to https://fanyi-api.baidu.com/product/143 view details`);return c.data.src}}}var re={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`},ie={"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`};const L={from:{Auto:`auto`,...re},to:ie};function R(e){let{key:t,fromLanguages:n=L.from,toLanguages:r=L.to}=e,i=`deepl`,a=()=>{if(!t)throw new m(i,`${i} key is required`)};a();let o=`https://api-free.deepl.com/v2/translate`;return{name:i,getFromLanguages(){return n},getToLanguages(){return r},normalFromLanguage(e){return D(e,n,!0)},normalToLanguage(e){return D(e,r)},async translate(e,n){a();let{to:r,from:i}=n;Array.isArray(e)||(e=[e]);let s=await fetch(o,{method:`POST`,headers:{"Content-Type":`application/json; charset=UTF-8`,Authorization:`DeepL-Auth-Key ${t}`,Accept:`*/*`,Host:`api-free.deepl.com`,Connection:`keep-alive`},body:JSON.stringify({text:e,source_lang:i===`auto`?void 0:i,target_lang:r})});if(!s.ok)throw await S(this.name,s);let c=await s.json();if(c.error)throw new m(this.name,`Translate fail ! code: ${c.error.code}, message: ${c.error.message}`);let l=c.translations;if(!l||l.length===0)throw new m(this.name,`Translate fail ! translate's result is null or empty`);return l.map(e=>e.text)},async checkLanguage(e){a();let n=await fetch(o,{method:`POST`,headers:{"Content-Type":`application/json; charset=UTF-8`,Authorization:`DeepL-Auth-Key ${t}`,Accept:`*/*`,Host:`api-free.deepl.com`,Connection:`keep-alive`},body:JSON.stringify({text:[e],target_lang:`EN`})});if(!n.ok)throw await S(this.name,n);let r=await n.json();if(r.error)throw new h(this.name,`Check language fail ! code: ${r.error.code}, message: ${r.error.message}`);let i=r.translations;if(!i||i.length===0)throw new h(this.name,`Check language fail! No result returned`);let s=i[0].detected_source_language;if(!s)throw new h(this.name,`Check language fail! Language not detected`);return s}}}const z={from:{Auto:`auto`,...T},to:T},B=v(`openai`);function ae(e){let{apiKey:t,model:n,maxTokens:r=2e3,outputLog:i=!1,fromLanguages:a=z.from,toLanguages:o=z.to}=e,s=`openai`,c=()=>{if(!t)throw new m(s,`${s} apiKey is required`);if(!g.includes(n))throw new m(s,`${s} model=${n} is invalid`)};return c(),{name:s,getFromLanguages(){return a},getToLanguages(){return o},normalFromLanguage(e){return D(e,a,!0)},normalToLanguage(e){return D(e,o)},async translate(e,a){c();let{from:o,to:s}=a;Array.isArray(e)||(e=[e]);let l={role:`user`,content:`
|
|
7
|
+
满足以下4点翻译要求:
|
|
8
|
+
1.将每段文本从${o}翻译为${s}
|
|
9
|
+
2.文本内容以换行符\n进行段落分割,并以段落分割顺序进行翻译
|
|
10
|
+
3.仅翻译分割出的段落,其他任何不相关的内容都移除,比如:段落前后的空格、所有标点符号\n
|
|
11
|
+
4.仅返回要翻译的文本内容,不要返回任何其他内容
|
|
12
|
+
|
|
13
|
+
如何提取翻译文本,满足以下2点要求:
|
|
14
|
+
1.翻译从-$s$-字符标记开始至-$e$-字符标记结束,提取-$s$-至-$e$-之间的内容
|
|
15
|
+
2.-$s$-和-$e$-这2个标记不要返回,只是用来标记翻译的起始和结束位置
|
|
16
|
+
|
|
17
|
+
-$s$-
|
|
18
|
+
${e.join(`
|
|
19
|
+
`)}
|
|
20
|
+
-$e$-
|
|
21
|
+
`},u=await fetch(`https://api.openai.com/v1/chat/completions`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${t}`},body:JSON.stringify({model:n,messages:[{role:`system`,content:`You are a professional translator`},l],max_tokens:r,temperature:0})});if(!u.ok)throw await S(this.name,u);let d=await u.json();if(d.error)throw new m(this.name,`Translate fail! message: ${d.error.message}`);if(!d||!d.choices||d.choices.length===0||!d.choices[0]?.message?.content)throw new m(this.name,`Translate fail ! translate's result is null or empty`);let f=d.choices[0].message.content,p=[`-$s$-`,`-$e$-`],h=f.trim().split(`
|
|
22
|
+
`).map(e=>e.trim()).filter(Boolean).filter(e=>!p.includes(e));return i&&(B.info(`prompt:`,JSON.stringify(l,null,2)),B.info(`translations:`,JSON.stringify(h,null,2))),h}}}var oe={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`},se={"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 V={from:{...oe},to:se};function H(e,t=``,n){let i=r.HmacSHA256(e,t);return n===`hex`?r.enc.Hex.stringify(i):n===`base64`?r.enc.Base64.stringify(i):i}function U(e,t=`hex`){let n=r.SHA256(e);return t===`hex`?r.enc.Hex.stringify(n):n.toString()}function ce(e){let t=new Date(e*1e3);return`${t.getUTCFullYear()}-${(`0`+(t.getUTCMonth()+1)).slice(-2)}-${(`0`+t.getUTCDate()).slice(-2)}`}function W({secretId:e,secretKey:t,service:n,host:r,payload:i,httpRequestMethod:a,action:o,apiVersion:s,region:c}){let l=Math.floor(Date.now()/1e3),u=ce(l),d=`content-type:application/json; charset=utf-8
|
|
23
|
+
host:`+r+`
|
|
24
|
+
`,f=`content-type;host`,p=[a,`/`,``,d,f,U(i)].join(`
|
|
25
|
+
`),m=`TC3-HMAC-SHA256`,h=`${u}/${n}/tc3_request`,g={Authorization:`${m} Credential=${e}/${h}, SignedHeaders=${f}, Signature=${H([m,l,h,U(p)].join(`
|
|
26
|
+
`),H(`tc3_request`,H(n,H(u,`TC3`+t))),`hex`)}`,"Content-Type":`application/json; charset=utf-8`,Host:r,"X-TC-Action":o,"X-TC-Timestamp":l,"X-TC-Version":s};return c&&(g[`X-TC-Region`]=c),g}function le(e){let{secretId:t,secretKey:n,region:r=`ap-guangzhou`,fromLanguages:i=V.from,toLanguages:a=V.to}=e,o=`tencent`,s=`tmt.tencentcloudapi.com`,c=`https://${s}/`,l=`2018-03-21`,u=`TextTranslate`;function d(){if(!t||!n)throw new m(o,`${o} secretId and secretKey are required`)}return{name:o,getFromLanguages(){return i},getToLanguages(){return a},normalFromLanguage(e){return D(e,i,!0)},normalToLanguage(e){return D(e,a)},async translate(e,i){d();let{from:a=`auto`,to:f}=i,p=a===`auto`?`auto`:a,h={SourceText:Array.isArray(e)?e.join(`
|
|
27
|
+
`):e,Source:p,Target:f,ProjectId:0},g=JSON.stringify(h),_=W({secretId:t,secretKey:n,service:`tmt`,host:s,payload:g,httpRequestMethod:`POST`,action:u,apiVersion:l,region:r});try{let e=await fetch(c,{method:`POST`,headers:_,body:g});if(!e.ok)throw new m(o,`HTTP ${e.status}: ${await e.text()}`);let t=await e.json();if(t.Response?.Error)throw new m(o,`Tencent translate fail: ${t.Response.Error.Code}, ${t.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);let n=t.Response?.TargetText.split(`
|
|
28
|
+
`)??[];if(!Array.isArray(n)||n.length===0)throw new m(o,`Translate fail! No result returned`);return n}catch(e){throw e instanceof m?e:new m(o,`Translation failed: ${e}`)}},async checkLanguage(e){d();let i=JSON.stringify({SourceText:e,Source:`auto`,Target:`en`,ProjectId:0}),a=W({secretId:t,secretKey:n,service:`tmt`,host:s,payload:i,httpRequestMethod:`POST`,action:u,apiVersion:l,region:r});try{let e=await fetch(c,{method:`POST`,headers:a,body:i});if(!e.ok)throw new h(o,`HTTP ${e.status}: ${await e.text()}`);let t=await e.json();if(t.Response?.Error)throw new h(o,`Tencent language detect fail: ${t.Response.Error.Code}, ${t.Response.Error.Message} \n Go to https://cloud.tencent.com/document/product/551/15619 view details`);let n=t.Response?.Source;if(!n)throw new h(o,`Language detect fail! No result returned`);return n}catch(e){throw e instanceof h?e:new h(o,`Language detection failed: ${e}`)}}}}const G={google:O,azure:j,amazon:ee,baidu:ne,deepl:R,openai:ae,tencent:le},K={amazon:N,azure:A,baidu:I,deepl:L,google:E,openai:z,tencent:V},ue={amazon:K.amazon.from,azure:K.azure.from,baidu:{Chinese:`zh`,English:`en`,Japanese:`jp`,Korean:`kor`,Thai:`th`,Russian:`ru`},deepl:K.deepl.from,google:K.google.from,openai:K.openai.from,tencent:K.tencent.from};function de(e){if(typeof e==`string`){let t=K[e];if(!t)throw Error(`Engine ${e} not found`);return t}return{from:e.getFromLanguages(),to:e.getToLanguages()}}function q(e){let t=de(e);return{from:t.from,to:t.to}}const J=`Translate`,Y=1e3,X=v(),Z=new _;var Q=class{engines;cache_time;concurrencyMax;concurrencyDelay;constructor(e=60*1e3,t=4,n=20){this.engines=new Map,this.cache_time=e,this.concurrencyMax=t,this.concurrencyDelay=n}use(e){this.addEngine(e)}addEngine(e){if(this.engines.has(e.name)){X.warn(`Engine already exists`);return}this.engines.set(e.name,e)}removeEngine(e){return!e||!this.engines.has(e)?(X.warn(`Engine name is required or not found`),!1):(this.engines.delete(e),!0)}getFromLanguages(e){let t=this.engines.get(e);return t?t.getFromLanguages():(X.warn(`Engine ${e} not found`),{})}getToLanguages(e){let t=this.engines.get(e);return t?t.getToLanguages():(X.warn(`Engine ${e} not found`),{})}isSupportCheckLanguage(e){if(!e||!this.engines.has(e))return X.warn(`Engine name is required or not found`),!1;let t=this.engines.get(e);return t?!!t.checkLanguage:(X.warn(`Engine ${e} not found`),!1)}async checkLanguage(e,t){let{engine:n=`google`,max_character_num:r=Y}=t;if(!this.engines.has(n))throw new h(J,`Engine ${n} not found`);let i=this.engines.get(n);if(!i)throw new h(J,`Engine ${n} is null`);if(!i.checkLanguage)throw new h(J,`Engine ${n} does not support checkLanguage method`);let a=r>0?e.substring(0,r):e;if(a.length<=0)throw new m(J,`Text is empty or too short to check language`);return i.checkLanguage(a).then(e=>e).catch(t=>{throw X.error(`${J} Failed to check language for text: \n${b()}\n${e}\n${b()}\n error: ${x(t)}`),t})}async translate(e,t){let{engine:n=`google`,cache_time:r=60*1e3}=t,{from:i=`auto`,to:a}=t;if(!this.engines.has(n))throw new m(J,`Engine ${n} not found`);let o=this.engines.get(n);if(!o)throw new m(J,`Engine ${n} is null`);let s=o.normalFromLanguage(i),c=o.normalToLanguage(a),l={...t,engine:n,from:s,to:c};if(!s)throw new m(J,`Invalid origin language ${i}`);if(!c)throw new m(J,`Invalid target language ${a}`);let u=`${s}:${c}:${n}:${e}`;return Z.get(u)?Promise.resolve(Z.get(u)?.value):this.concurrencyHandle(o,e,l).then(e=>(Z.set(u,e,r??this.cache_time),e)).catch(t=>{throw X.error(`${J} Failed: from=${s},to=${c},engine=${n},translate text: \n${b()}\n${e}\n${b()}\n error: ${x(t)}`),t instanceof m?t:new m(J,x(t))})}async concurrencyHandle(e,t,n){let{max_character_num:r=Y}=n,i=r>0?r:Y;if(Array.isArray(t)){if(w(t,r))throw new m(J,`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(t,n)}else return this.concurrencyTranslate(e,t,n,i)}async concurrencyTranslate(e,t,n,r){let i=C(t,r).map((e,t)=>({content:e,index:t})),a=[],o=0,s=this.concurrencyDelay,c=this.concurrencyMax;return new Promise((t,r)=>{function l(){for(;o<c&&i.length>0;){let{content:c,index:u}=i.shift();o++,e.translate(c,n).then(e=>{a.push({translated:e,index:u})}).catch(e=>r(e)).finally(async()=>{if(o--,o===0&&i.length<=0)return a.sort((e,t)=>e.index-t.index),t([a.reduce((e,t)=>e.concat(t.translated),[]).join(``)]);await y(s),l()})}}return l(),a})}};const $=new Q;$.addEngine(G.google());var fe={engines:G,translator:$,Translator:Q,Cache:_,getLanguage:q};export{_ as Cache,h as CheckLanguageError,g as OPEN_AI_MODELS,m as TranslationError,Q as Translator,ue as checkLanguages,fe as default,G as engines,q as getLanguage,$ as translator};
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yxw007/translate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
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",
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
"access": "public"
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
|
-
"lint": "
|
|
19
|
-
"lint:fix": "
|
|
18
|
+
"lint": "oxlint . && oxfmt --check .",
|
|
19
|
+
"lint:fix": "oxlint . --fix && oxfmt .",
|
|
20
|
+
"format": "oxfmt .",
|
|
21
|
+
"format:check": "oxfmt --check .",
|
|
20
22
|
"build": "pnpm clean && tsx script/build.ts",
|
|
21
23
|
"build:dev": "pnpm clean && tsx script/build.ts --dev",
|
|
22
24
|
"clean": "rm -rf dist",
|
|
@@ -81,35 +83,24 @@
|
|
|
81
83
|
"license": "MIT",
|
|
82
84
|
"devDependencies": {
|
|
83
85
|
"@commitlint/config-conventional": "^19.2.2",
|
|
84
|
-
"@eslint/js": "^8.57.0",
|
|
85
|
-
"@rollup/plugin-alias": "^5.1.0",
|
|
86
|
-
"@rollup/plugin-commonjs": "^26.0.1",
|
|
87
|
-
"@rollup/plugin-json": "^6.1.0",
|
|
88
|
-
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
89
|
-
"@rollup/plugin-terser": "^0.4.4",
|
|
90
|
-
"@rollup/plugin-typescript": "^11.1.6",
|
|
91
86
|
"@types/crypto-js": "^4.2.2",
|
|
92
|
-
"@types/eslint__js": "^8.42.3",
|
|
93
87
|
"@types/node": "^22.5.0",
|
|
94
|
-
"@vitest/coverage-v8": "^
|
|
88
|
+
"@vitest/coverage-v8": "^4.1.2",
|
|
95
89
|
"chalk": "^5.3.0",
|
|
96
|
-
"changelogen": "^0.
|
|
90
|
+
"changelogen": "^0.6.2",
|
|
97
91
|
"commitlint": "^19.4.0",
|
|
98
92
|
"dotenv": "^16.4.5",
|
|
99
|
-
"eslint": "^8.57.0",
|
|
100
|
-
"globals": "^15.9.0",
|
|
101
93
|
"husky": "^9.1.5",
|
|
102
|
-
"lint-staged": "^
|
|
94
|
+
"lint-staged": "^16.4.0",
|
|
103
95
|
"maxmin": "^4.1.0",
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
96
|
+
"oxfmt": "^0.42.0",
|
|
97
|
+
"oxlint": "^1.57.0",
|
|
98
|
+
"rolldown": "1.0.0-rc.12",
|
|
107
99
|
"tslib": "^2.7.0",
|
|
108
|
-
"tsx": "^4.
|
|
100
|
+
"tsx": "^4.21.0",
|
|
109
101
|
"typescript": "^5.5.4",
|
|
110
|
-
"
|
|
111
|
-
"vitest": "^
|
|
112
|
-
"yargs": "^18.0.0"
|
|
102
|
+
"vite": "^8.0.3",
|
|
103
|
+
"vitest": "^4.1.2"
|
|
113
104
|
},
|
|
114
105
|
"volta": {
|
|
115
106
|
"node": "22.3.0"
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { BuiltinEngineLanguageMap, BuiltinFromLanguageMap, BuiltinToLanguageMap } from "../language/engines";
|
|
2
|
+
export * from "./typescript";
|
|
3
|
+
export type Engines = keyof BuiltinEngineLanguageMap;
|
|
4
|
+
export type LanguageMap = Readonly<Record<string, string>>;
|
|
5
|
+
export type LanguageName<T extends LanguageMap = LanguageMap> = Extract<keyof T, string>;
|
|
6
|
+
export type LanguageCode<T extends LanguageMap = LanguageMap> = T[LanguageName<T>];
|
|
7
|
+
export type FromLanguage<T extends string = Engines> = T extends Engines ? BuiltinFromLanguageMap[T] : string;
|
|
8
|
+
export type ToLanguage<T extends string = Engines> = T extends Engines ? BuiltinToLanguageMap[T] : string;
|
|
9
|
+
export type TranslateOptions<T extends string = Engines> = {
|
|
10
|
+
from?: FromLanguage<T>;
|
|
11
|
+
to: ToLanguage<T>;
|
|
12
|
+
engine?: T;
|
|
13
|
+
/**
|
|
14
|
+
* Cache time in milliseconds
|
|
15
|
+
*/
|
|
16
|
+
cache_time?: number | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Domain to use for translation
|
|
19
|
+
*/
|
|
20
|
+
domain?: string | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Maximum number of characters
|
|
23
|
+
* default: 1000, -1 means no limit
|
|
24
|
+
*/
|
|
25
|
+
max_character_num?: number | undefined;
|
|
26
|
+
};
|
|
27
|
+
export type CheckLanguageOptions<T extends string = Engines> = Pick<TranslateOptions<T>, "max_character_num" | "engine">;
|
|
28
|
+
export interface BaseEngineOption {
|
|
29
|
+
fromLanguages?: LanguageMap;
|
|
30
|
+
toLanguages?: LanguageMap;
|
|
31
|
+
}
|
|
32
|
+
export type EngineTranslateOptions<T extends string = string> = Omit<TranslateOptions<T>, "engine">;
|
|
33
|
+
export type Engine = {
|
|
34
|
+
name: string;
|
|
35
|
+
getFromLanguages: () => LanguageMap;
|
|
36
|
+
getToLanguages: () => LanguageMap;
|
|
37
|
+
normalFromLanguage: (language?: string) => string;
|
|
38
|
+
normalToLanguage: (language?: string) => string;
|
|
39
|
+
checkLanguage?: (text: string) => Promise<string>;
|
|
40
|
+
translate: (text: string | string[], opts: EngineTranslateOptions) => Promise<string[]>;
|
|
41
|
+
};
|
|
42
|
+
export interface CacheRecord {
|
|
43
|
+
value: unknown;
|
|
44
|
+
timeout?: number;
|
|
45
|
+
expire: number;
|
|
46
|
+
}
|
|
47
|
+
export declare class TranslationError extends Error {
|
|
48
|
+
region: string;
|
|
49
|
+
constructor(region: string, message: string);
|
|
50
|
+
}
|
|
51
|
+
export declare class CheckLanguageError extends Error {
|
|
52
|
+
region: string;
|
|
53
|
+
constructor(region: string, message: string);
|
|
54
|
+
}
|
|
55
|
+
export declare const OPEN_AI_MODELS: readonly ["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"];
|
|
56
|
+
export type OpenAIModel = (typeof OPEN_AI_MODELS)[number];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ValuesOf<T> = T[keyof T];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CacheRecord } from "../types";
|
|
2
|
+
export declare class Cache {
|
|
3
|
+
private cache;
|
|
4
|
+
constructor();
|
|
5
|
+
/**
|
|
6
|
+
* @param key
|
|
7
|
+
* @param value
|
|
8
|
+
* @param time millisecond
|
|
9
|
+
*/
|
|
10
|
+
set(key: string, value: any, time: number): void;
|
|
11
|
+
get(key: string): CacheRecord | undefined;
|
|
12
|
+
delete(key: string): boolean;
|
|
13
|
+
private del;
|
|
14
|
+
clear(): void;
|
|
15
|
+
}
|