UNPKG

@yxw007/translate

Version:

A simple library that supports multiple translation engines

2 lines (1 loc) 36.8 kB
"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;