@yxw007/translate 0.3.0 → 0.3.2
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 +7 -6
- package/README_zh-CN.md +7 -7
- package/dist/browser/index.cjs +2 -2
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.esm.js +2 -2
- package/dist/browser/index.esm.js.map +1 -1
- package/dist/browser/index.esm.min.js +1 -1
- package/dist/browser/index.esm.min.js.map +1 -1
- package/dist/browser/index.min.cjs +1 -1
- package/dist/browser/index.min.cjs.map +1 -1
- package/dist/browser/index.umd.js +2 -2
- package/dist/browser/index.umd.js.map +1 -1
- package/dist/browser/index.umd.min.js +1 -1
- package/dist/browser/index.umd.min.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/node/index.cjs +2 -2
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +2 -2
- package/dist/node/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../src/engines/google.ts","../src/engines/azure.ts","../src/engines/amazon.ts","../src/engines/baidu.ts","../src/engines/deepl.ts","../src/engines/openai.ts","../src/engines/index.ts","../src/language/target/azure.ts","../src/language/target/google.ts","../src/language/target/baidu.ts","../src/language/origin/deepl.ts","../src/language/origin/tencent.ts","../src/language/target/amazon.ts","../src/types/typescript.ts","../src/language/origin/index.ts","../src/language/target/deepl.ts","../src/language/target/tencent.ts","../src/utils/cache.ts","../src/language/target/index.ts","../src/language/index.ts","../src/types/index.ts","../src/engines/tencent.ts","../src/index.ts"],"sourcesContent":["import { BaseEngineOption, Engine, EngineTranslateOptions, TranslationError } from \"../types\";\nimport { Engines } from \"..\";\nimport { throwResponseError } from \"@/utils\";\n\nexport function google(options?: BaseEngineOption): Engine {\n const base = \"https://translate.googleapis.com/translate_a/single\";\n return {\n name: \"google\",\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>): Promise<string[]> {\n const { from = \"auto\", to } = opts;\n if (!Array.isArray(text)) {\n text = [text];\n }\n const textStr = text.join(\"\\n\");\n const url = `${base}?client=gtx&sl=${from}&tl=${to}&dt=t&q=${encodeURI(textStr)}`;\n const res: any = await fetch(url);\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n const body = await res.json();\n if (!body || body.length === 0) {\n throw new TranslationError(this.name, \"Translate fail ! translate's result is null or empty\");\n }\n const translations: string[] = [];\n for (let i = 0; body[0] && i < body[0].length; i++) {\n const item = body[0][i];\n if (!item || item.length == 0 || !Array.isArray(item) || !item[0]) {\n continue;\n }\n translations.push(item[0].replaceAll(\"\\n\", \"\"));\n }\n return translations;\n },\n };\n}\n","/**\n * Azure translate documentation: https://learn.microsoft.com/zh-cn/azure/ai-services/translator/reference/v3-0-translate\n */\n\nimport { Engine, EngineTranslateOptions, BaseEngineOption, TranslationError } from \"../types\";\nimport { Engines } from \"..\";\nimport { throwResponseError } from \"@/utils\";\n\ninterface Translation {\n translations: Array<{ text: string; to: string; from: string }>;\n}\n\nexport interface AzureEngineOption extends BaseEngineOption {\n key: string;\n region: string;\n}\n\nexport function azure(options: AzureEngineOption): Engine {\n const { key, region } = options;\n const name = \"azure\";\n const checkOptions = () => {\n if (!key || !region) {\n throw new TranslationError(name, `${name} key and region is required`);\n }\n };\n checkOptions();\n const base = \"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0\";\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>): Promise<string[]> {\n checkOptions();\n const { from, to } = opts;\n const url = `${base}&to=${to}${from && from !== \"auto\" ? `&from=${from}` : \"\"}`;\n if (!Array.isArray(text)) {\n text = [text];\n }\n const res: any = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json; charset=UTF-8\",\n \"Ocp-Apim-Subscription-Key\": key,\n \"Ocp-Apim-Subscription-Region\": region,\n },\n body: JSON.stringify(text.map((it) => ({ Text: it }))),\n });\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n const bodyRes = await (res as any).json();\n if (bodyRes.error) {\n throw new TranslationError(this.name, `Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);\n }\n const body: Translation[] = bodyRes;\n if (!body || body.length === 0) {\n throw new TranslationError(this.name, \"Translate fail ! translate's result is null or empty\");\n }\n const translations: string[] = [];\n for (const translation of body) {\n if (!translation.translations || translation.translations.length == 0) {\n continue;\n }\n translations.push(...translation.translations.map((t) => t.text));\n }\n return translations;\n },\n };\n}\n","import { Engine, EngineTranslateOptions, TranslationError } from \"../types\";\nimport { TranslateClient, TranslateTextCommand, TranslateTextResponse } from \"@aws-sdk/client-translate\";\nimport { Engines } from \"..\";\n\nexport interface AmazonEngineOption {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n}\n\nexport function amazon(options: AmazonEngineOption): Engine {\n const { region, accessKeyId, secretAccessKey } = options;\n const name = \"amazon\";\n const checkOptions = () => {\n if (!region || !accessKeyId || !secretAccessKey) {\n throw new TranslationError(name, `${name} region, accessKeyId ,secretAccessKey is required`);\n }\n };\n\n checkOptions();\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>) {\n checkOptions();\n const { from = \"auto\", to } = opts;\n const translateClient = new TranslateClient({ region: region, credentials: { accessKeyId, secretAccessKey } });\n if (!Array.isArray(text)) {\n text = [text];\n }\n const command = new TranslateTextCommand({\n SourceLanguageCode: from as string,\n TargetLanguageCode: to as string,\n Text: text.join(\"\\n\"),\n });\n\n const response: TranslateTextResponse = await translateClient.send(command);\n const translations: string[] = [];\n if (response.TranslatedText) {\n const translateText = response.TranslatedText ?? \"\";\n translations.push(...translateText.split(\"\\n\"));\n }\n return translations;\n },\n };\n}\n","import { BaseEngineOption, Engine, EngineTranslateOptions, TranslationError } from \"../types\";\nimport md5 from \"crypto-js/md5\";\nimport { Engines } from \"..\";\nimport { throwResponseError } from \"@/utils\";\n\nexport interface BaiduEngineOption extends BaseEngineOption {\n appId: string;\n secretKey: string;\n}\n\nexport function baidu(options: BaiduEngineOption): Engine {\n const { appId, secretKey } = options;\n const url = \"https://fanyi-api.baidu.com/api/trans/vip/fieldtranslate\";\n const name = \"baidu\";\n const checkOptions = () => {\n if (!appId || !secretKey) {\n throw new TranslationError(name, `${name} appId and secretKey is required`);\n }\n };\n checkOptions();\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>) {\n checkOptions();\n const { to, from = \"auto\", domain = \"it\" } = opts;\n if (!Array.isArray(text)) {\n text = [text];\n }\n\n const q = text.join(\"\\n\");\n const salt = Date.now();\n const sign = md5(`${appId}${q}${salt}${domain}${secretKey}`).toString();\n const body = new URLSearchParams();\n body.append(\"q\", q);\n body.append(\"from\", from as string);\n body.append(\"to\", to as string);\n body.append(\"appid\", appId);\n body.append(\"salt\", salt.toString());\n body.append(\"domain\", domain);\n body.append(\"sign\", sign);\n\n const res: any = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: body.toString(),\n });\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n const data = await res.json();\n if (!data || data.error_code || !data.trans_result || data.trans_result.length === 0) {\n throw new TranslationError(this.name, `Translate fail ! error_code:${data.error_code}, error_msg: ${data.error_msg}`);\n }\n\n const translations: string[] = [];\n for (const translation of data.trans_result) {\n if (translation.dst) {\n translations.push(translation.dst);\n }\n }\n\n return translations;\n },\n };\n}\n","import { EngineTranslateOptions, TranslationError } from \"@/types\";\nimport { Engines } from \"..\";\nimport { throwResponseError } from \"@/utils\";\n\nexport interface DeeplEngineOption {\n key: string;\n}\n\ninterface Translation {\n text: string;\n detected_source_language: string;\n}\n\nexport function deepl(options: DeeplEngineOption) {\n const { key } = options;\n const name = \"deepl\";\n const checkOptions = () => {\n if (!key) {\n throw new TranslationError(name, `${name} key is required`);\n }\n };\n checkOptions();\n const url = \"https://api-free.deepl.com/v2/translate\";\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>) {\n checkOptions();\n const { to, from } = opts;\n if (!Array.isArray(text)) {\n text = [text];\n }\n const res: any = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json; charset=UTF-8\",\n Authorization: `DeepL-Auth-Key ${key}`,\n Accept: \"*/*\",\n Host: \"api-free.deepl.com\",\n Connection: \"keep-alive\",\n },\n body: JSON.stringify({\n text: text,\n source_lang: from === \"auto\" ? undefined : from,\n target_lang: to,\n }),\n });\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n const bodyRes = await (res as any).json();\n if (bodyRes.error) {\n throw new TranslationError(this.name, `Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);\n }\n const body: Translation[] = bodyRes.translations;\n if (!body || body.length === 0) {\n throw new TranslationError(this.name, \"Translate fail ! translate's result is null or empty\");\n }\n const translations: string[] = body.map((t) => t.text);\n return translations;\n },\n };\n}\n","import { Engine, EngineTranslateOptions, BaseEngineOption, TranslationError, OpenAIModel, OPEN_AI_MODELS } from \"../types\";\nimport { Engines } from \"..\";\nimport { throwResponseError, useLogger } from \"@/utils\";\n\nexport interface OpenAIEngineOption extends BaseEngineOption {\n apiKey: string;\n model: OpenAIModel;\n maxTokens?: number;\n outputLog?: boolean;\n}\n\nconst logger = useLogger(\"openai\");\n\nexport function openai(options: OpenAIEngineOption): Engine {\n const { apiKey, model, maxTokens = 2000, outputLog = false } = options;\n\n const name = \"openai\";\n const checkOptions = () => {\n if (!apiKey) {\n throw new TranslationError(name, `${name} apiKey is required`);\n }\n if (!OPEN_AI_MODELS.includes(model)) {\n throw new TranslationError(name, `${name} model=${model} is invalid`);\n }\n };\n checkOptions();\n const base = \"https://api.openai.com/v1/chat/completions\";\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>): Promise<string[]> {\n checkOptions();\n const { from, to } = opts;\n const url = `${base}`;\n if (!Array.isArray(text)) {\n text = [text];\n }\n\n const prompt = {\n role: \"user\",\n content: `\n 满足以下4点翻译要求:\n 1.将每段文本从${from}翻译为${to}\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 ${text.join(\"\\n\")} \n -$e$-\n `,\n };\n\n const res: any = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [{ role: \"system\", content: \"You are a professional translator\" }, prompt],\n max_tokens: maxTokens,\n temperature: 0,\n }),\n });\n\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n\n const bodyRes = await (res as any).json();\n if (bodyRes.error) {\n throw new TranslationError(this.name, `Translate fail! message: ${bodyRes.error.message}`);\n }\n\n if (!bodyRes || !bodyRes.choices || bodyRes.choices.length === 0 || !bodyRes.choices[0]?.message?.content) {\n throw new TranslationError(this.name, \"Translate fail ! translate's result is null or empty\");\n }\n\n const content = bodyRes.choices[0].message.content;\n const marks = [\"-$s$-\", \"-$e$-\"];\n const translations: string[] = content\n .trim()\n .split(\"\\n\")\n .map((item: string) => item.trim())\n .filter(Boolean)\n .filter((it: string) => !marks.includes(it));\n\n if (outputLog) {\n logger.info(\"prompt:\", JSON.stringify(prompt, null, 2));\n logger.info(\"translations:\", JSON.stringify(translations, null, 2));\n }\n\n return translations;\n },\n };\n}\n","import { google } from \"./google\";\nimport { azure } from \"./azure\";\nimport { amazon } from \"./amazon\";\nimport { baidu } from \"./baidu\";\nimport { deepl } from \"./deepl\";\nimport { openai } from \"./openai\";\nimport { tencent } from \"./tencent\";\n\nexport const engines = {\n google,\n azure,\n amazon,\n baidu,\n deepl,\n openai,\n tencent,\n} as const;\n","export default {\n Afrikaans: \"af\",\n Albanian: \"sq\",\n Amharic: \"am\",\n Arabic: \"ar\",\n Armenian: \"hy\",\n Assamese: \"as\",\n Azerbaijani: \"az\",\n Bashkir: \"ba\",\n Basque: \"eu\",\n Bengali: \"bn\",\n Bhojpuri: \"bho\",\n Bosnian: \"bs\",\n Bulgarian: \"bg\",\n Burmese: \"my\",\n \"Cantonese (Traditional)\": \"yue\",\n Catalan: \"ca\",\n Chhattisgarhi: \"hne\",\n Chinese: \"zh-Hans\",\n \"Chinese (Literary)\": \"lzh\",\n \"Chinese (Traditional)\": \"zh-Hant\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dari: \"prs\",\n Dhivehi: \"dv\",\n Dogri: \"doi\",\n Double: \"lug\",\n Dutch: \"nl\",\n English: \"en\",\n Estonian: \"et\",\n \"FYRO Macedonian\": \"mk\",\n Faroese: \"fo\",\n Fijian: \"fj\",\n Filipino: \"fil\",\n Finnish: \"fi\",\n French: \"fr\",\n \"French (Canada)\": \"fr-CA\",\n Galician: \"gl\",\n Georgian: \"ka\",\n German: \"de\",\n Greek: \"el\",\n Gujarati: \"gu\",\n \"Haitian Creole\": \"ht\",\n Hausa: \"ha\",\n Hebrew: \"he\",\n Hindi: \"hi\",\n Hmong: \"mww\",\n Hungarian: \"hu\",\n Icelandic: \"is\",\n Igbo: \"ig\",\n Indonesian: \"id\",\n Inuinnaqtun: \"ikt\",\n Inuktitut: \"iu\",\n \"Inuktitut (Latin)\": \"iu-Latn\",\n Irish: \"ga\",\n Italian: \"it\",\n Japanese: \"ja\",\n Kannada: \"kn\",\n Kashmiri: \"ks\",\n Kazakh: \"kk\",\n Khmer: \"km\",\n Kikwanda: \"rw\",\n \"Klingon (Latin)\": \"tlh-Latn\",\n \"Klingon (pIqaD)\": \"tlh-Piqd\",\n Konkani: \"gom\",\n Korean: \"ko\",\n \"Kurdish (Medium)\": \"ku\",\n \"Kurdish (North)\": \"kmr\",\n Kyrgyz: \"ky\",\n Lao: \"lo\",\n Latvian: \"lv\",\n Lingala: \"ln\",\n Lithuanian: \"lt\",\n \"Lower Sorbian language\": \"dsb\",\n Maithili: \"mai\",\n Malagasian: \"mg\",\n Malay: \"ms\",\n Malayalam: \"ml\",\n Maltese: \"mt\",\n Manipuri: \"mni\",\n Marathi: \"mr\",\n \"Mongolian (Cyrillic)\": \"mn-Cyrl\",\n \"Mongolian (Traditional)\": \"mn-Mong\",\n Māori: \"mi\",\n Nepali: \"ne\",\n \"Norwegian Bokmål\": \"nb\",\n Nyanja: \"nya\",\n Oriya: \"or\",\n Pashto: \"ps\",\n Persian: \"fa\",\n Polish: \"pl\",\n \"Portugal (Brazil)\": \"pt\",\n \"Portugal (Portugal)\": \"pt-PT\",\n Punjabi: \"pa\",\n \"Querétaro Ottomi\": \"otq\",\n Romanian: \"ro\",\n Rounds: \"run\",\n Russian: \"ru\",\n Samoan: \"sm\",\n \"Serbia (Latin)\": \"sr-Latn\",\n \"Serbian (Cyrillic)\": \"sr-Cyrl\",\n Sesotho: \"st\",\n \"Sesotho at Leboa\": \"nso\",\n Setswana: \"tn\",\n Shona: \"sn\",\n Sindhi: \"sd\",\n Sinhalese: \"si\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Somali: \"so\",\n Spanish: \"es\",\n Swahili: \"sw\",\n Swedish: \"sv\",\n Tahiti: \"ty\",\n Tamil: \"ta\",\n Tatar: \"tt\",\n Telugu: \"te\",\n Thai: \"th\",\n Tibetan: \"bo\",\n Tigrinya: \"ti\",\n Tongan: \"to\",\n Turkish: \"tr\",\n Turkmen: \"tk\",\n Uighur: \"ug\",\n Ukrainian: \"uk\",\n \"Upper Sorbian\": \"hsb\",\n Urdu: \"ur\",\n Uzbek: \"uz\",\n Vietnamese: \"vi\",\n Welsh: \"cy\",\n Will: \"brx\",\n Xhosa: \"xh\",\n Yoruba: \"yo\",\n \"Yucatec Maya\": \"yua\",\n Zulu: \"zu\",\n} as const;\n","export default {\n Abkhazian: \"ab\",\n Acehnese: \"ace\",\n \"Acholi language\": \"ach\",\n Afar: \"aa\",\n Afrikaans: \"af\",\n Albanian: \"sq\",\n Alur: \"alz\",\n Amharic: \"am\",\n Arabic: \"ar\",\n Armenian: \"hy\",\n Assamese: \"as\",\n Avar: \"av\",\n Awadhi: \"awa\",\n Aymara: \"ay\",\n Azerbaijani: \"az\",\n Badawi: \"bew\",\n Balinese: \"ban\",\n Balochi: \"bal\",\n Bambara: \"bm\",\n Bangasinan: \"pag\",\n Bashkir: \"ba\",\n Basque: \"eu\",\n Batakkalo: \"btx\",\n \"Bataksi Marungon\": \"bts\",\n Bataktoba: \"bbc\",\n Baure: \"bci\",\n Belarusian: \"be\",\n Bengali: \"bn\",\n Bhojpuri: \"bho\",\n Bikol: \"bik\",\n Bosnian: \"bs\",\n Breton: \"br\",\n Bulgarian: \"bg\",\n Burmese: \"my\",\n \"Buryat language\": \"bua\",\n Cantonese: \"yue\",\n Casey: \"kha\",\n Catalan: \"ca\",\n Cebuano: \"ceb\",\n \"Chamorro language\": \"ch\",\n Chechen: \"ce\",\n Chevi: \"ak\",\n Chicheva: \"ny\",\n Chiga: \"cgg\",\n Chinese: \"zh-CN\",\n \"Chinese (Traditional)\": \"zh-TW\",\n Chuk: \"chk\",\n Chuvash: \"cv\",\n Conga: \"ts\",\n Corsican: \"co\",\n \"Crimean Tatar\": \"crh\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dari: \"fa-AF\",\n Dhivehi: \"dv\",\n Dinka: \"din\",\n Dogra: \"doi\",\n Dutch: \"nl\",\n Dyula: \"dyu\",\n Dzongka: \"dz\",\n Elocano: \"ilo\",\n English: \"en\",\n Esperanto: \"eo\",\n Estonian: \"et\",\n Ewe: \"ee\",\n \"FYRO Macedonian\": \"mk\",\n Faroese: \"fo\",\n \"Feng language\": \"fon\",\n Fijian: \"fj\",\n Filipino: \"tl\",\n Finnish: \"fi\",\n French: \"fr\",\n Frisian: \"fy\",\n Friulian: \"fur\",\n Fulani: \"ff\",\n Ga: \"gaa\",\n Galician: \"gl\",\n Georgian: \"ka\",\n German: \"de\",\n Gongen: \"gom\",\n Gorkbojok: \"trp\",\n \"Grace and Taoism\": \"ndc-ZW\",\n Greek: \"el\",\n Greenlandic: \"kl\",\n Guarani: \"gn\",\n Gujarati: \"gu\",\n \"Haitian Creole\": \"ht\",\n Hakachin: \"cnh\",\n Hausa: \"ha\",\n Hawaiian: \"haw\",\n Hebrew: \"iw\",\n Heligaignon: \"hil\",\n Hindi: \"hi\",\n Hmong: \"hmn\",\n Hungarian: \"hu\",\n Hunsrück: \"hrx\",\n Iban: \"iba\",\n Icelandic: \"is\",\n Igbo: \"ig\",\n Indonesian: \"id\",\n Irish: \"ga\",\n Italian: \"it\",\n \"Jamaica vernacular\": \"jam\",\n Japanese: \"ja\",\n Javanese: \"jw\",\n \"Jingpo language\": \"kac\",\n Kannada: \"kn\",\n Kanuri: \"kr\",\n Kazakh: \"kk\",\n Kekchi: \"kek\",\n Khmer: \"km\",\n Kikwanda: \"rw\",\n Kithuba: \"ktu\",\n \"Komi language\": \"kv\",\n Kongo: \"kg\",\n Korean: \"ko\",\n \"Kurdish (Kurmanji)\": \"ku\",\n \"Kurdish (Solani)\": \"ckb\",\n Kyrgyz: \"ky\",\n Lao: \"lo\",\n Latin: \"la\",\n Latvian: \"lv\",\n Ligurian: \"lij\",\n Limburg: \"li\",\n Lingala: \"ln\",\n Lithuanian: \"lt\",\n Lombard: \"lmo\",\n Luganda: \"lg\",\n Luo: \"luo\",\n Luxembourg: \"lb\",\n Madura: \"mad\",\n Maithili: \"mai\",\n Makassar: \"mak\",\n Malagasian: \"mg\",\n Malay: \"ms\",\n \"Malay, Jawi\": \"ms-Arab\",\n Malayalam: \"ml\",\n Maltese: \"mt\",\n \"Malwadi language\": \"mwr\",\n Mamu: \"mam\",\n Manx: \"gv\",\n Marathi: \"mr\",\n Marshallese: \"mh\",\n \"Mauritius Scrio whispers\": \"mfe\",\n \"Meitei (Manipur)\": \"mni-Mtei\",\n Minan: \"min\",\n Mizo: \"lus\",\n Mongolian: \"mn\",\n Māori: \"mi\",\n \"Nahuatl (Eastern Vastka)\": \"nhe\",\n \"Ndebele (Southern)\": \"nr\",\n Ndombe: \"dov\",\n \"Nepal Language (Newar)\": \"new\",\n Nepali: \"ne\",\n \"Nko alphabet (West African written script)\": \"bm-Nkoo\",\n \"Northern Sotho\": \"nso\",\n Norwegian: \"no\",\n Nuer: \"nus\",\n Occitan: \"oc\",\n Oriya: \"or\",\n \"Oromo language\": \"om\",\n Ossetian: \"os\",\n Pampangja: \"pam\",\n Papiamento: \"pap\",\n Pashto: \"ps\",\n Pemba: \"bem\",\n Persian: \"fa\",\n Polish: \"pl\",\n \"Portugal (Brazil)\": \"pt\",\n \"Portugal (Portugal)\": \"pt-PT\",\n \"Punjabi (Gurumuchi)\": \"pa\",\n \"Punjabi (Shamuki)\": \"pa-Arab\",\n Quechua: \"qu\",\n Ratgale: \"ltg\",\n Romani: \"rom\",\n Romanian: \"ro\",\n Rondi: \"rn\",\n Russian: \"ru\",\n Sabatec: \"zap\",\n Sakha: \"sah\",\n Samoan: \"sm\",\n Sango: \"sg\",\n Sanskrit: \"sa\",\n Santali: \"sat-Latn\",\n \"Schuna language\": \"sn\",\n \"Scottish Gaelic\": \"gd\",\n Serbian: \"sr\",\n \"Seychellois Creole\": \"crs\",\n Shan: \"shn\",\n Sicilian: \"scn\",\n \"Sierra Leonean Creole\": \"kri\",\n Silesian: \"szl\",\n Sindhi: \"sd\",\n Sinhalese: \"si\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Somali: \"so\",\n \"South Sotho\": \"st\",\n Spanish: \"es\",\n \"Steppe Mali\": \"chm\",\n Sundanese: \"su\",\n \"Susu language\": \"sus\",\n Swahili: \"sw\",\n Swat: \"ss\",\n Swedish: \"sv\",\n \"Sámi (North)\": \"se\",\n Tahiti: \"ty\",\n Tajik: \"tg\",\n Tamaset: \"ber-Latn\",\n \"Tamazight (Tifinaven)\": \"ber\",\n Tamil: \"ta\",\n Tatar: \"tt\",\n Telugu: \"te\",\n Tetum: \"tet\",\n Thai: \"th\",\n Tibetan: \"bo\",\n \"Tiff language\": \"tiv\",\n Tigrinya: \"ti\",\n \"Tok Pisin\": \"tpi\",\n Tongan: \"to\",\n Tswana: \"tn\",\n Tulu: \"tcy\",\n \"Tumbuka language\": \"tum\",\n Turkish: \"tr\",\n Turkmen: \"tk\",\n Tuvan: \"tyv\",\n Udmurtic: \"udm\",\n Uighur: \"ug\",\n Ukrainian: \"uk\",\n Urdu: \"ur\",\n Uzbek: \"uz\",\n Venda: \"ve\",\n Venetian: \"vec\",\n Vietnamese: \"vi\",\n \"Wari language\": \"war\",\n Welsh: \"cy\",\n \"Wolof language\": \"wo\",\n Xhosa: \"xh\",\n Yiddish: \"yi\",\n Yoruba: \"yo\",\n \"Yucatan Maya\": \"yua\",\n Zulu: \"zu\",\n} as const;\n","export default {\n Achinese: \"ach\",\n Afrikaans: \"afr\",\n Akan: \"aka\",\n Albanian: \"alb\",\n \"Algerian Arabic\": \"arq\",\n Amharic: \"amh\",\n \"Ancient Greek\": \"gra\",\n Arabic: \"ara\",\n Aragonese: \"arg\",\n Armenian: \"arm\",\n Assamese: \"asm\",\n Asturian: \"ast\",\n Aymara: \"aym\",\n Azerbaijani: \"aze\",\n Baluchi: \"bal\",\n BasaSunda: \"sun\",\n Bashkir: \"bak\",\n Basque: \"baq\",\n Belarusian: \"bel\",\n Bemba: \"bem\",\n Bengali: \"ben\",\n \"Berber languages\": \"ber\",\n Bhojpuri: \"bho\",\n Bislama: \"bis\",\n Blin: \"bli\",\n Bokmål: \"nob\",\n Bosnian: \"bos\",\n \"Brazilian Portuguese\": \"pot\",\n Breton: \"bre\",\n Bulgarian: \"bul\",\n Buriat: \"bui\",\n Burmese: \"bur\",\n \"Canadian French\": \"frn\",\n Cantonese: \"yue\",\n Catalan: \"cat\",\n Cebuano: \"ceb\",\n Chechen: \"che\",\n Cherokee: \"chr\",\n Chichewa: \"nya\",\n Chinese: \"zh\",\n Chuvash: \"chv\",\n \"Classical Chinese\": \"wyw\",\n Cornish: \"cor\",\n Corsican: \"cos\",\n Creek: \"cre\",\n \"Crimean Tatar\": \"cri\",\n Croatian: \"hrv\",\n Czech: \"cs\",\n Danish: \"dan\",\n Divehi: \"div\",\n Dutch: \"nl\",\n Dzongkha: \"dzo\",\n English: \"en\",\n Esperanto: \"epo\",\n Estonian: \"est\",\n Faroese: \"fao\",\n Filipino: \"fil\",\n Finnish: \"fin\",\n French: \"fra\",\n Friulian: \"fri\",\n Fulani: \"ful\",\n Gaelic: \"gla\",\n Galician: \"glg\",\n Georgian: \"geo\",\n German: \"de\",\n Greek: \"el\",\n Guarani: \"grn\",\n Gujarati: \"guj\",\n \"Haitian Creole\": \"ht\",\n \"Hakha Chin\": \"hak\",\n Hausa: \"hau\",\n Hawaiian: \"haw\",\n Hebrew: \"heb\",\n Hiligaynon: \"hil\",\n Hindi: \"hi\",\n Hmong: \"hmn\",\n Hungarian: \"hu\",\n Hupa: \"hup\",\n Icelandic: \"ice\",\n Ido: \"ido\",\n Igbo: \"ibo\",\n Indonesian: \"id\",\n Ingush: \"ing\",\n \"Interlingua \": \"ina\",\n Inuktitut: \"iku\",\n Irish: \"gle\",\n Italian: \"it\",\n Japanese: \"jp\",\n Javanese: \"jav\",\n Kabyle: \"kab\",\n Kalaallisut: \"kal\",\n Kalmyk: \"kam\",\n Kannada: \"kan\",\n Kanuri: \"kau\",\n Kashmiri: \"kas\",\n Kashubian: \"kah\",\n Khmer: \"hkm\",\n Kinyarwanda: \"kin\",\n Klingon: \"kli\",\n Kongo: \"kon\",\n Konkani: \"kok\",\n Korean: \"kor\",\n Kurdish: \"kur\",\n Kyrgyz: \"kir\",\n Lao: \"lao\",\n Latgalian: \"lag\",\n Latin: \"lat\",\n Latvian: \"lav\",\n Limburgish: \"lim\",\n Lingala: \"lin\",\n Lithuanian: \"lit\",\n Lojban: \"loj\",\n \"Low German\": \"log\",\n \"Lower Sorbian\": \"los\",\n Luganda: \"lug\",\n Luxembourgish: \"ltz\",\n Macedonian: \"mac\",\n Maithili: \"mai\",\n Malagasy: \"mg\",\n Malay: \"may\",\n Malayalam: \"mal\",\n Maltese: \"mlt\",\n Manx: \"glv\",\n Maori: \"mao\",\n Marathi: \"mar\",\n Marshallese: \"mah\",\n \"Mauritian Creole\": \"mau\",\n \"Middle French\": \"frm\",\n Mongolian: \"moc\",\n Montenegrin: \"mot\",\n \"N'Ko\": \"nqo\",\n Neapolitan: \"nea\",\n Nepali: \"nep\",\n \"Northern Sami\": \"sme\",\n \"Northern Sotho\": \"ped\",\n Norwegian: \"nor\",\n Nynorsk: \"nno\",\n Occitan: \"oci\",\n Ojibwa: \"oji\",\n \"Old English\": \"eno\",\n Oriya: \"ori\",\n Oromo: \"orm\",\n Ossetian: \"oss\",\n Pampanga: \"pam\",\n Papiamento: \"pap\",\n Pashto: \"pus\",\n Persian: \"per\",\n Polish: \"pl\",\n Portuguese: \"pt\",\n Punjabi: \"pan\",\n Quechua: \"que\",\n Romanian: \"rom\",\n Romansh: \"roh\",\n Romany: \"ro\",\n Russian: \"ru\",\n Rusyn: \"ruy\",\n Samoan: \"sm\",\n Sanskrit: \"san\",\n Sardinian: \"srd\",\n Scots: \"sco\",\n \"Serb(Cyrillic)\": \"src\",\n Serbian: \"srp\",\n \"Serbo-Croatian\": \"sec\",\n Shan: \"sha\",\n Shona: \"sna\",\n Silesian: \"sil\",\n Sindhi: \"snd\",\n Sinhala: \"sin\",\n Slovak: \"sk\",\n Slovenian: \"slo\",\n Somali: \"som\",\n \"Songhai languages\": \"sol\",\n \"Southern Ndebele\": \"nbl\",\n \"Southern Sotho\": \"sot\",\n Spanish: \"spa\",\n Swahili: \"swa\",\n Swedish: \"swe\",\n Syriac: \"syr\",\n Tagalog: \"tgl\",\n Tajik: \"tgk\",\n Tamil: \"tam\",\n Tatar: \"tat\",\n Telugu: \"tel\",\n Tetum: \"tet\",\n Thai: \"th\",\n Tibetan: \"tib\",\n Tigrinya: \"tir\",\n \"Traditional Chinese\": \"cht\",\n Tsonga: \"tso\",\n \"Tunisian Arabic\": \"tua\",\n Turkish: \"tr\",\n Turkmen: \"tuk\",\n Twi: \"twi\",\n Ukrainian: \"ukr\",\n \"Upper Sorbian\": \"ups\",\n Urdu: \"urd\",\n Uyghur: \"uig\",\n Venda: \"ven\",\n Vietnamese: \"vie\",\n Walloon: \"wln\",\n Welsh: \"wel\",\n \"Western Frisian\": \"fry\",\n Wolof: \"wol\",\n Xhosa: \"xho\",\n Yiddish: \"yid\",\n Yoruba: \"yor\",\n Zaza: \"zaz\",\n Zulu: \"zul\",\n} as const;\n","export default {\n English: \"en\",\n Bulgarian: \"bg\",\n Chinese: \"zh\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dutch: \"nl\",\n Estonian: \"et\",\n Finnish: \"fi\",\n French: \"fr\",\n German: \"de\",\n Greek: \"el\",\n Hungarian: \"hu\",\n Icelandic: \"is\",\n Indonesian: \"id\",\n Irish: \"ga\",\n Italian: \"it\",\n Japanese: \"ja\",\n Korean: \"ko\",\n Latvian: \"lv\",\n Lithuanian: \"lt\",\n Maltese: \"mt\",\n Norwegian: \"nb\",\n Polish: \"pl\",\n Portuguese: \"pt\",\n Romanian: \"ro\",\n Russian: \"ru\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Spanish: \"es\",\n Swedish: \"sv\",\n Turkish: \"tr\",\n Ukrainian: \"uk\",\n} as const;\n","export default {\n Auto: \"auto\",\n Chinese: \"zh\",\n TraditionalChinese: \"zh-TW\",\n English: \"en\",\n Japanese: \"ja\",\n Korean: \"ko\",\n French: \"fr\",\n Spanish: \"es\",\n Italian: \"it\",\n German: \"de\",\n Turkish: \"tr\",\n Russian: \"ru\",\n Portuguese: \"pt\",\n Vietnamese: \"vi\",\n Indonesian: \"id\",\n Thai: \"th\",\n Malay: \"ms\",\n Arabic: \"ar\",\n Hindi: \"hi\",\n} as const;\n","export default {\n Afrikaans: \"af\",\n Albanian: \"sq\",\n Amharic: \"am\",\n Arabic: \"ar\",\n Armenian: \"hy\",\n Azerbaijani: \"az\",\n Bengali: \"bn\",\n Bosnian: \"bs\",\n Bulgarian: \"bg\",\n Catalan: \"ca\",\n \"Chinese (Simplified)\": \"zh\",\n \"Chinese (Traditional)\": \"zh-TW\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dari: \"fa-AF\",\n Dutch: \"nl\",\n English: \"en\",\n Estonian: \"et\",\n \"Farsi (Persian)\": \"fa\",\n \"Filipino, Tagalog\": \"tl\",\n Finnish: \"fi\",\n French: \"fr\",\n \"French (Canada)\": \"fr-CA\",\n Georgian: \"ka\",\n German: \"de\",\n Greek: \"el\",\n Gujarati: \"gu\",\n \"Haitian Creole\": \"ht\",\n Hausa: \"ha\",\n Hebrew: \"he\",\n Hindi: \"hi\",\n Hungarian: \"hu\",\n Icelandic: \"is\",\n Indonesian: \"id\",\n Irish: \"ga\",\n Italian: \"it\",\n Japanese: \"ja\",\n Kannada: \"kn\",\n Kazakh: \"kk\",\n Korean: \"ko\",\n Latvian: \"lv\",\n Lithuanian: \"lt\",\n Macedonian: \"mk\",\n Malay: \"ms\",\n Malayalam: \"ml\",\n Maltese: \"mt\",\n Marathi: \"mr\",\n Mongolian: \"mn\",\n \"Norwegian (Bokmål)\": \"no\",\n Pashto: \"ps\",\n Polish: \"pl\",\n \"Portuguese (Brazil)\": \"pt\",\n \"Portuguese (Portugal)\": \"pt-PT\",\n Punjabi: \"pa\",\n Romanian: \"ro\",\n Russian: \"ru\",\n Serbian: \"sr\",\n Sinhala: \"si\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Somali: \"so\",\n Spanish: \"es\",\n \"Spanish (Mexico)\": \"es-MX\",\n Swahili: \"sw\",\n Swedish: \"sv\",\n Tamil: \"ta\",\n Telugu: \"te\",\n Thai: \"th\",\n Turkish: \"tr\",\n Ukrainian: \"uk\",\n Urdu: \"ur\",\n Uzbek: \"uz\",\n Vietnamese: \"vi\",\n Welsh: \"cy\",\n} as const;\n","export type ValuesOf<T> = T[keyof T];\n","import azure from \"../target/azure\";\nimport google from \"../target/google\";\nimport baidu from \"../target/baidu\";\nimport deepl from \"./deepl\";\nimport tencent from \"./tencent\";\nimport amazon from \"../target/amazon\";\nimport openai from \"../target/google\";\nimport { ValuesOf } from \"../../types/typescript\";\n\nexport const originLanguages = {\n azure: azure,\n google: google,\n baidu: baidu,\n deepl: deepl,\n amazon: amazon,\n openai: openai,\n tencent: tencent,\n} as const;\n\nexport type originLanguageMapNames = {\n amazon: keyof typeof amazon;\n azure: keyof typeof azure;\n google: keyof typeof google;\n baidu: keyof typeof baidu;\n deepl: keyof typeof deepl;\n openai: keyof typeof openai;\n tencent: keyof typeof tencent;\n};\n\nexport type originLanguageMapValues = {\n amazon: ValuesOf<typeof amazon>;\n azure: ValuesOf<typeof azure>;\n google: ValuesOf<typeof google>;\n baidu: ValuesOf<typeof baidu>;\n deepl: ValuesOf<typeof deepl>;\n openai: ValuesOf<typeof openai>;\n tencent: ValuesOf<typeof tencent>;\n};\n","export default {\n \"American English\": \"en-US\",\n \"Brazilian Portuguese\": \"pt-BR\",\n \"British English\": \"en-GB\",\n Bulgarian: \"bg\",\n Chinese: \"zh\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dutch: \"nl\",\n Estonian: \"et\",\n \"European Portuguese\": \"pt-PT\",\n Finnish: \"fi\",\n French: \"fr\",\n German: \"de\",\n Greek: \"el\",\n Hungarian: \"hu\",\n Icelandic: \"is\",\n Indonesian: \"id\",\n Irish: \"ga\",\n Italian: \"it\",\n Japanese: \"ja\",\n Korean: \"ko\",\n Latvian: \"lv\",\n Lithuanian: \"lt\",\n Maltese: \"mt\",\n Norwegian: \"nb\",\n Polish: \"pl\",\n Portuguese: \"pt\",\n Romanian: \"ro\",\n Russian: \"ru\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Spanish: \"es\",\n Swedish: \"sv\",\n Turkish: \"tr\",\n Ukrainian: \"uk\",\n} as const;\n","export default {\n \"Simplified Chinese\": \"zh\",\n \"Traditional Chinese\": \"zh-TW\",\n English: \"en\",\n Japanese: \"ja\",\n Korean: \"ko\",\n French: \"fr\",\n Spanish: \"es\",\n Italian: \"it\",\n German: \"de\",\n Turkish: \"tr\",\n Russian: \"ru\",\n Portuguese: \"pt\",\n Vietnamese: \"vi\",\n Indonesian: \"id\",\n Thai: \"th\",\n Malay: \"ms\",\n Arabic: \"ar\",\n Hindi: \"hi\",\n} as const;\n","import { CacheRecord } from \"../types\";\n\nexport class Cache {\n private cache: Map<string, CacheRecord>;\n constructor() {\n this.cache = new Map<string, CacheRecord>();\n }\n /**\n * @param key\n * @param value\n * @param time millisecond\n */\n set(key: string, value: any, time: number) {\n if (time <= 0) {\n throw new Error(\"time must be greater than 0\");\n }\n const oldRecord = this.cache.get(key);\n if (oldRecord) {\n clearTimeout(oldRecord.timeout);\n }\n const record: CacheRecord = {\n value,\n expire: Date.now() + time,\n };\n if (!isNaN(record.expire)) {\n record.timeout = setTimeout(() => this.del(key), time) as unknown as number;\n }\n this.cache.set(key, record);\n }\n get(key: string) {\n return this.cache.get(key);\n }\n delete(key: string) {\n let canDelete = true;\n const oldRecord = this.cache.get(key);\n if (oldRecord) {\n if (!isNaN(oldRecord.expire) && oldRecord.expire < Date.now()) {\n canDelete = false;\n } else {\n clearTimeout(oldRecord.timeout);\n }\n } else {\n canDelete = false;\n }\n if (canDelete) {\n this.del(key);\n }\n return canDelete;\n }\n private del(key: string) {\n this.cache.delete(key);\n }\n clear() {\n for (const [, val] of this.cache.entries()) {\n clearTimeout(val.timeout);\n }\n this.cache.clear();\n }\n}\n","import azure from \"./azure\";\nimport google from \"./google\";\nimport baidu from \"./baidu\";\nimport deepl from \"./deepl\";\nimport amazon from \"./amazon\";\nimport openai from \"./google\";\nimport tencent from \"./tencent\";\nimport { ValuesOf } from \"../../utils\";\n\nexport const targetLanguages = {\n azure: azure,\n google: google,\n baidu: baidu,\n deepl: deepl,\n amazon: amazon,\n openai: openai,\n tencent: tencent,\n} as const;\n\nexport type targetLanguageMapNames = {\n amazon: keyof typeof amazon;\n azure: keyof typeof azure;\n google: keyof typeof google;\n baidu: keyof typeof baidu;\n deepl: keyof typeof deepl;\n openai: keyof typeof openai;\n tencent: keyof typeof tencent;\n};\n\nexport type targetLanguageMapValues = {\n amazon: ValuesOf<typeof amazon>;\n azure: ValuesOf<typeof azure>;\n google: ValuesOf<typeof google>;\n baidu: ValuesOf<typeof baidu>;\n deepl: ValuesOf<typeof deepl>;\n openai: ValuesOf<typeof openai>;\n tencent: ValuesOf<typeof tencent>;\n};\n","import { originLanguages, originLanguageMapNames, originLanguageMapValues } from \"./origin\";\nimport { targetLanguages, targetLanguageMapNames, targetLanguageMapValues } from \"./target\";\nimport { Engines } from \"..\";\n\nexport type KeysOfTarget<T extends keyof targetLanguageMapNames> = targetLanguageMapNames[T];\nexport type KeysOfOrigin<T extends keyof originLanguageMapNames> = originLanguageMapNames[T];\n\nexport type FromLanguage<T extends Engines> = KeysOfOrigin<T> | originLanguageMapValues[T] | \"auto\";\nexport type ToLanguage<T extends Engines> = KeysOfTarget<T> | targetLanguageMapValues[T];\n\nexport function normalFromLanguage<T extends Engines>(from: FromLanguage<T>, engine: Engines) {\n if (from === \"auto\") {\n return \"auto\";\n }\n\n const engineLanguages = originLanguages[engine];\n if (!engineLanguages) {\n throw new Error(`Engine ${engine} not found`);\n }\n\n const keys = Object.keys(originLanguages[engine]);\n if (keys.includes(from)) {\n return engineLanguages[from as keyof typeof engineLanguages];\n }\n\n const values = Object.values(originLanguages[engine]) as string[];\n if (values.includes(from)) {\n return from;\n }\n\n throw new Error(`Invalid from language ${engine} ${from}`);\n}\n\nexport function normalToLanguage<T extends Engines>(to: ToLanguage<T>, engine: Engines) {\n const engineLanguages = targetLanguages[engine];\n if (!engineLanguages) {\n throw new Error(`Engine ${engine} not found`);\n }\n\n const keys = Object.keys(targetLanguages[engine]);\n if (keys.includes(to)) {\n return engineLanguages[to as keyof typeof engineLanguages];\n }\n\n const values = Object.values(targetLanguages[engine]) as string[];\n if (values.includes(to)) {\n return to;\n }\n\n throw new Error(`Invalid to language ${engine} ${to}`);\n}\n\nexport function getLanguage(engine: Engines) {\n return {\n from: originLanguages[engine],\n to: targetLanguages[engine],\n };\n}\n\nexport {\n originLanguages,\n originLanguageMapNames,\n originLanguageMapValues,\n targetLanguages,\n targetLanguageMapNames,\n targetLanguageMapValues,\n};\n","import { engines } from \"../engines\";\nimport type { FromLanguage, ToLanguage } from \"../language\";\nexport * from \"./typescript\";\nexport type Engines = keyof typeof engines;\n\nexport type TranslateOptions<T extends Engines> = {\n from?: FromLanguage<T>;\n to: ToLanguage<T>;\n engine?: T;\n /**\n * Cache time in milliseconds\n */\n cache_time?: number | undefined;\n /**\n * Domain to use for translation\n */\n domain?: string | undefined;\n /**\n * Maximum number of characters\n * default: 1000, -1 means no limit\n */\n max_character_num?: number | undefined;\n};\n\nexport interface BaseEngineOption {}\n\nexport type EngineTranslateOptions<T extends Engines> = Omit<TranslateOptions<T>, \"engine\">;\n\nexport type Engine = {\n name: string;\n translate: <T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>) => Promise<string[]>;\n};\n\nexport interface CacheRecord {\n value: unknown;\n timeout?: number;\n expire: number;\n}\n\nexport class TranslationError extends Error {\n region: string;\n constructor(region: string, message: string) {\n super(message);\n this.region = region;\n Error.captureStackTrace(this, this.constructor);\n }\n}\n\nexport { FromLanguage, ToLanguage };\n\nexport const OPEN_AI_MODELS = [\n \"o1-preview\",\n \"o1-preview-2024-09-12\",\n \"o1-mini-2024-09-12\",\n \"o1-mini\",\n \"dall-e-2\",\n \"gpt-3.5-turbo\",\n \"gpt-3.5-turbo-0125\",\n \"babbage-002\",\n \"davinci-002\",\n \"dall-e-3\",\n \"text-embedding-3-large\",\n \"gpt-3.5-turbo-16k\",\n \"tts-1-hd-1106\",\n \"text-embedding-ada-002\",\n \"text-embedding-3-small\",\n \"tts-1-hd\",\n \"whisper-1\",\n \"gpt-3.5-turbo-1106\",\n \"gpt-3.5-turbo-instruct\",\n \"gpt-4o-mini-2024-07-18\",\n \"gpt-4o-mini\",\n \"tts-1\",\n \"tts-1-1106\",\n \"gpt-3.5-turbo-instruct-0914\",\n] as const;\n\nexport type OpenAIModel = (typeof OPEN_AI_MODELS)[number];\n","import { Engine, EngineTranslateOptions, BaseEngineOption, TranslationError } from \"../types\";\nimport { Engines } from \"..\";\nimport crypto from \"crypto\";\n\nexport interface TencentEngineOption extends BaseEngineOption {\n secretId: string;\n secretKey: string;\n region?: string;\n}\n\ninterface Authorization {\n secretId: string;\n secretKey: string;\n service: string;\n host: string;\n payload: string;\n httpRequestMethod: string;\n action: string;\n apiVersion: string;\n region?: string;\n token?: string;\n}\n\nfunction sha256(message: string, secret: string | Buffer = \"\", encoding?: \"hex\" | \"base64\"): string | Buffer {\n if (encoding) {\n return crypto.createHmac(\"sha256\", secret).update(message).digest(encoding);\n }\n return crypto.createHmac(\"sha256\", secret).update(message).digest();\n}\n\nfunction getHash(message: any, encoding: \"hex\" = \"hex\") {\n return crypto.createHash(\"sha256\").update(message).digest(encoding);\n}\n\nfunction getDate(timestamp: number): string {\n const date = new Date(timestamp * 1000);\n return `${date.getUTCFullYear()}-${(\"0\" + (date.getUTCMonth() + 1)).slice(-2)}-${(\"0\" + date.getUTCDate()).slice(-2)}`;\n}\n\nfunction buildAuthorization({ secretId, secretKey, service, host, payload, httpRequestMethod, action, apiVersion, region }: Authorization) {\n const timestamp = Math.floor(Date.now() / 1000);\n const date = getDate(timestamp);\n const canonicalUri = \"/\";\n const canonicalQueryString = \"\";\n const canonicalHeaders = \"content-type:application/json; charset=utf-8\\nhost:\" + host + \"\\n\";\n const signedHeaders = \"content-type;host\";\n const hashedRequestPayload = getHash(payload);\n const canonicalRequest = [\n httpRequestMethod,\n canonicalUri,\n canonicalQueryString,\n canonicalHeaders,\n signedHeaders,\n hashedRequestPayload,\n ].join(\"\\n\");\n\n const algorithm = \"TC3-HMAC-SHA256\";\n const credentialScope = `${date}/${service}/tc3_request`;\n const hashedCanonicalRequest = getHash(canonicalRequest);\n const stringToSign = [algorithm, timestamp, credentialScope, hashedCanonicalRequest].join(\"\\n\");\n\n const kDate = sha256(date, \"TC3\" + secretKey);\n const kService = sha256(service, kDate);\n const kSigning = sha256(\"tc3_request\", kService);\n const signature = sha256(stringToSign, kSigning, \"hex\");\n\n const authorization = `${algorithm} Credential=${secretId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n\n const headers: Record<string, any> = {\n Authorization: authorization,\n \"Content-Type\": \"application/json; charset=utf-8\",\n Host: host,\n \"X-TC-Action\": action,\n \"X-TC-Timestamp\": timestamp,\n \"X-TC-Version\": apiVersion,\n };\n if (region) headers[\"X-TC-Region\"] = region;\n\n return headers;\n}\n\nexport function tencent(options: TencentEngineOption): Engine {\n const { secretId, secretKey, region = \"ap-guangzhou\" } = options;\n const name = \"tencent\";\n const host = \"tmt.tencentcloudapi.com\";\n const endpoint = `https://${host}/`;\n const service = \"tmt\";\n const apiVersion = \"2018-03-21\";\n const action = \"TextTranslate\";\n\n function checkOptions() {\n if (!secretId || !secretKey) {\n throw new TranslationError(name, `${name} secretId and secretKey are required`);\n }\n }\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>): Promise<string[]> {\n checkOptions();\n const { from = \"auto\", to } = opts;\n const source = from === \"auto\" ? \"\" : from;\n const payloadObj = {\n SourceText: Array.isArray(text) ? text.join(\"\\n\") : text,\n Source: source,\n Target: to,\n ProjectId: 0,\n };\n const payload = JSON.stringify(payloadObj);\n\n const headers = buildAuthorization({\n secretId,\n secretKey,\n service,\n host,\n payload,\n httpRequestMethod: \"POST\",\n action,\n apiVersion,\n region,\n });\n\n try {\n const res: any = await fetch(endpoint, {\n method: \"POST\",\n headers,\n body: payload,\n });\n\n if (!res.ok) {\n throw new TranslationError(name, `HTTP ${res.status}: ${await res.text()}`);\n }\n const data = await res.json();\n if (data.Response?.Error) {\n throw new TranslationError(name, `Tencent translate fail: ${data.Response.Error.Code}, ${data.Response.Error.Message}`);\n }\n const translatedResults = data.Response?.TargetText.split(\"\\n\") ?? [];\n if (!Array.isArray(translatedResults) || translatedResults.length === 0) {\n throw new TranslationError(name, \"Translate fail! No result returned\");\n }\n return translatedResults;\n } catch (error) {\n if (error instanceof TranslationError) throw error;\n throw new TranslationError(name, `Translation failed: ${error}`);\n }\n },\n };\n}\n","import { engines } from \"./engines\";\nimport { Engine, TranslateOptions, Engines, TranslationError } from \"./types\";\nimport { useLogger, Cache, getGapLine, getErrorMessages, splitText, isOverMaxCharacterNum, sleep } from \"./utils\";\nimport { FromLanguage, getLanguage, normalFromLanguage, normalToLanguage, ToLanguage } from \"./language\";\nimport { appName, defaultMaxCharacterNum } from \"./utils/constant\";\nexport * from \"./types\";\n\nconst logger = useLogger();\nconst cache = new Cache();\n\ninterface ConcurrencyTask {\n index: number;\n content: string;\n}\n\ninterface TranslateTaskResult {\n index: number;\n translated: string[];\n}\n\nclass Translator {\n private engines: Map<string, Engine>;\n private cache_time: number;\n private concurrencyMax: number;\n private concurrencyDelay: number;\n constructor(cache_time: number = 60 * 1000, concurrencyMax: number = 4, concurrencyDelay = 20) {\n this.engines = new Map<string, Engine>();\n this.cache_time = cache_time;\n this.concurrencyMax = concurrencyMax;\n this.concurrencyDelay = concurrencyDelay;\n }\n /**\n * This method is obsolete, please use the addEngine method\n * @param engine {@link Engine} instance\n * @deprecated Use {@link addEngine} instead.\n */\n use(engine: Engine) {\n this.addEngine(engine);\n }\n addEngine(engine: Engine) {\n if (this.engines.has(engine.name)) {\n logger.warn(\"Engine already exists\");\n return;\n }\n this.engines.set(engine.name, engine);\n }\n removeEngine(engineName: string) {\n if (!engineName || !this.engines.has(engineName)) {\n logger.warn(\"Engine name is required or not found\");\n return false;\n }\n this.engines.delete(engineName);\n }\n async translate<T extends Engines>(text: string | string[], options: TranslateOptions<T>): Promise<string[]> {\n const { engine = \"google\", cache_time = 60 * 1000 } = options;\n let { from = \"auto\", to } = options;\n from = options.from = normalFromLanguage(from, engine) as FromLanguage<T>;\n to = options.to = normalToLanguage(to, engine) as ToLanguage<T>;\n\n //1. Check if engine exists\n if (!this.engines.has(engine)) {\n throw new TranslationError(appName, `Engine ${engine} not found`);\n }\n\n const engineInstance = this.engines.get(engine);\n if (!engineInstance) {\n throw new TranslationError(appName, `Engine ${engine} not found`);\n }\n\n if (!from) {\n throw new TranslationError(appName, `Invalid origin language ${from as string}`);\n }\n if (!to) {\n throw new TranslationError(appName, `Invalid target language ${to as string}`);\n }\n\n const key = `${from as string}:${to as string}:${engine}:${text}`;\n //3. If the cache is matched, the cache is used directly\n if (cache.get(key)) {\n return Promise.resolve(cache.get(key)?.value as string[]);\n }\n\n return this.concurrencyHandle(engineInstance, text, options)\n .then((translated) => {\n cache.set(key, translated, cache_time ?? this.cache_time);\n return translated;\n })\n .catch((e) => {\n logger.error(\n `${appName} Failed: from=${from},to=${to},engine=${engine},translate text: \\n${getGapLine()}\\n${text}\\n${getGapLine()}\\n error: ${getErrorMessages(e)}`\n );\n if (e instanceof TranslationError) {\n throw e;\n } else {\n throw new TranslationError(appName, getErrorMessages(e));\n }\n });\n }\n private async concurrencyHandle<T extends Engines>(\n engine: Engine,\n text: string | string[],\n options: TranslateOptions<T>\n ): Promise<string[]> {\n const { max_character_num = defaultMaxCharacterNum } = options;\n const maxCharacterNum: number = max_character_num > 0 ? max_character_num : defaultMaxCharacterNum;\n if (Array.isArray(text)) {\n if (isOverMaxCharacterNum(text, max_character_num)) {\n throw new TranslationError(\n appName,\n \"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.\"\n );\n }\n return engine.translate(text, options);\n } else {\n return this.concurrencyTranslate(engine, text, options, maxCharacterNum);\n }\n }\n private async concurrencyTranslate<T extends Engines>(\n engine: Engine,\n text: string,\n options: TranslateOptions<T>,\n maxCharacterMum: number\n ): Promise<string[]> {\n const pendingTasks: ConcurrencyTask[] = splitText(text, maxCharacterMum).map(\n (content, index) => ({ content, index }) as ConcurrencyTask\n );\n const result: TranslateTaskResult[] = [];\n let activeTasks = 0;\n const concurrencyDelay = this.concurrencyDelay;\n const concurrencyMax = this.concurrencyMax;\n\n return new Promise((resolve, reject) => {\n function processTasks() {\n while (activeTasks < concurrencyMax && pendingTasks.length > 0) {\n const { content, index } = pendingTasks.shift()!;\n activeTasks++;\n\n engine\n .translate(content, options)\n .then((res) => {\n result.push({\n translated: res,\n index,\n });\n })\n .catch((error) => reject(error))\n .finally(async () => {\n activeTasks--;\n if (activeTasks === 0 && pendingTasks.length <= 0) {\n result.sort((a, b) => a.index - b.index);\n const arr = result.reduce<string[]>((pre, cur) => pre.concat(cur.translated), []);\n return resolve([arr.join(\"\")]);\n }\n await sleep(concurrencyDelay);\n processTasks();\n });\n }\n }\n\n processTasks();\n\n return result;\n });\n }\n}\n\nconst translator = new Translator();\n\nexport default {\n engines,\n translator,\n Translator,\n Cache,\n getLanguage,\n};\nexport { engines, translator, Translator, Cache, getLanguage };\n"],"names":[],"mappings":"AACO;;ACDP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACO;;ACPA;AACP;AACA;AACA;AACA;AACO;;ACLA;AACP;AACA;AACA;AACO;;ACHA;AACP;AACA;AACO;AACP;AACA;AACA;;ACPO;AACP;AACA;AACA;AACA;AACA;AACO;;ACAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EO;;ACo9BA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACw8BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACp+BO;AACA;AACA;AACA;AAGA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACz6CO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEO;AACA;;ACvCA;AACP;AACA;AACA;AACA;AACO;;ACDP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../src/engines/google.ts","../src/engines/azure.ts","../src/engines/amazon.ts","../src/engines/baidu.ts","../src/engines/deepl.ts","../src/engines/openai.ts","../src/engines/index.ts","../src/language/target/azure.ts","../src/language/target/google.ts","../src/language/target/baidu.ts","../src/language/origin/deepl.ts","../src/language/origin/tencent.ts","../src/language/target/amazon.ts","../src/types/typescript.ts","../src/language/origin/index.ts","../src/language/target/deepl.ts","../src/language/target/tencent.ts","../src/utils/cache.ts","../src/language/target/index.ts","../src/language/index.ts","../src/types/index.ts","../src/engines/tencent.ts","../src/index.ts"],"sourcesContent":["import { BaseEngineOption, Engine, EngineTranslateOptions, TranslationError } from \"../types\";\nimport { Engines } from \"..\";\nimport { throwResponseError } from \"@/utils\";\n\nexport function google(options?: BaseEngineOption): Engine {\n const base = \"https://translate.googleapis.com/translate_a/single\";\n return {\n name: \"google\",\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>): Promise<string[]> {\n const { from = \"auto\", to } = opts;\n if (!Array.isArray(text)) {\n text = [text];\n }\n const textStr = text.join(\"\\n\");\n const url = `${base}?client=gtx&sl=${from}&tl=${to}&dt=t&q=${encodeURI(textStr)}`;\n const res: any = await fetch(url);\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n const body = await res.json();\n if (!body || body.length === 0) {\n throw new TranslationError(this.name, \"Translate fail ! translate's result is null or empty\");\n }\n const translations: string[] = [];\n for (let i = 0; body[0] && i < body[0].length; i++) {\n const item = body[0][i];\n if (!item || item.length == 0 || !Array.isArray(item) || !item[0]) {\n continue;\n }\n translations.push(item[0].replaceAll(\"\\n\", \"\"));\n }\n return translations;\n },\n };\n}\n","/**\n * Azure translate documentation: https://learn.microsoft.com/zh-cn/azure/ai-services/translator/reference/v3-0-translate\n */\n\nimport { Engine, EngineTranslateOptions, BaseEngineOption, TranslationError } from \"../types\";\nimport { Engines } from \"..\";\nimport { throwResponseError } from \"@/utils\";\n\ninterface Translation {\n translations: Array<{ text: string; to: string; from: string }>;\n}\n\nexport interface AzureEngineOption extends BaseEngineOption {\n key: string;\n region: string;\n}\n\nexport function azure(options: AzureEngineOption): Engine {\n const { key, region } = options;\n const name = \"azure\";\n const checkOptions = () => {\n if (!key || !region) {\n throw new TranslationError(name, `${name} key and region is required`);\n }\n };\n checkOptions();\n const base = \"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0\";\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>): Promise<string[]> {\n checkOptions();\n const { from, to } = opts;\n const url = `${base}&to=${to}${from && from !== \"auto\" ? `&from=${from}` : \"\"}`;\n if (!Array.isArray(text)) {\n text = [text];\n }\n const res: any = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json; charset=UTF-8\",\n \"Ocp-Apim-Subscription-Key\": key,\n \"Ocp-Apim-Subscription-Region\": region,\n },\n body: JSON.stringify(text.map((it) => ({ Text: it }))),\n });\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n const bodyRes = await (res as any).json();\n if (bodyRes.error) {\n throw new TranslationError(this.name, `Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);\n }\n const body: Translation[] = bodyRes;\n if (!body || body.length === 0) {\n throw new TranslationError(this.name, \"Translate fail ! translate's result is null or empty\");\n }\n const translations: string[] = [];\n for (const translation of body) {\n if (!translation.translations || translation.translations.length == 0) {\n continue;\n }\n translations.push(...translation.translations.map((t) => t.text));\n }\n return translations;\n },\n };\n}\n","import { Engine, EngineTranslateOptions, TranslationError } from \"../types\";\nimport { TranslateClient, TranslateTextCommand, TranslateTextResponse } from \"@aws-sdk/client-translate\";\nimport { Engines } from \"..\";\n\nexport interface AmazonEngineOption {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n}\n\nexport function amazon(options: AmazonEngineOption): Engine {\n const { region, accessKeyId, secretAccessKey } = options;\n const name = \"amazon\";\n const checkOptions = () => {\n if (!region || !accessKeyId || !secretAccessKey) {\n throw new TranslationError(name, `${name} region, accessKeyId ,secretAccessKey is required`);\n }\n };\n\n checkOptions();\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>) {\n checkOptions();\n const { from = \"auto\", to } = opts;\n const translateClient = new TranslateClient({ region: region, credentials: { accessKeyId, secretAccessKey } });\n if (!Array.isArray(text)) {\n text = [text];\n }\n const command = new TranslateTextCommand({\n SourceLanguageCode: from as string,\n TargetLanguageCode: to as string,\n Text: text.join(\"\\n\"),\n });\n\n const response: TranslateTextResponse = await translateClient.send(command);\n const translations: string[] = [];\n if (response.TranslatedText) {\n const translateText = response.TranslatedText ?? \"\";\n translations.push(...translateText.split(\"\\n\"));\n }\n return translations;\n },\n };\n}\n","import { BaseEngineOption, Engine, EngineTranslateOptions, TranslationError } from \"../types\";\nimport md5 from \"crypto-js/md5\";\nimport { Engines } from \"..\";\nimport { throwResponseError } from \"@/utils\";\n\nexport interface BaiduEngineOption extends BaseEngineOption {\n appId: string;\n secretKey: string;\n}\n\nexport function baidu(options: BaiduEngineOption): Engine {\n const { appId, secretKey } = options;\n const url = \"https://fanyi-api.baidu.com/api/trans/vip/fieldtranslate\";\n const name = \"baidu\";\n const checkOptions = () => {\n if (!appId || !secretKey) {\n throw new TranslationError(name, `${name} appId and secretKey is required`);\n }\n };\n checkOptions();\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>) {\n checkOptions();\n const { to, from = \"auto\", domain = \"it\" } = opts;\n if (!Array.isArray(text)) {\n text = [text];\n }\n\n const q = text.join(\"\\n\");\n const salt = Date.now();\n const sign = md5(`${appId}${q}${salt}${domain}${secretKey}`).toString();\n const body = new URLSearchParams();\n body.append(\"q\", q);\n body.append(\"from\", from as string);\n body.append(\"to\", to as string);\n body.append(\"appid\", appId);\n body.append(\"salt\", salt.toString());\n body.append(\"domain\", domain);\n body.append(\"sign\", sign);\n\n const res: any = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: body.toString(),\n });\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n const data = await res.json();\n if (!data || data.error_code || !data.trans_result || data.trans_result.length === 0) {\n throw new TranslationError(this.name, `Translate fail ! error_code:${data.error_code}, error_msg: ${data.error_msg}`);\n }\n\n const translations: string[] = [];\n for (const translation of data.trans_result) {\n if (translation.dst) {\n translations.push(translation.dst);\n }\n }\n\n return translations;\n },\n };\n}\n","import { EngineTranslateOptions, TranslationError } from \"@/types\";\nimport { Engines } from \"..\";\nimport { throwResponseError } from \"@/utils\";\n\nexport interface DeeplEngineOption {\n key: string;\n}\n\ninterface Translation {\n text: string;\n detected_source_language: string;\n}\n\nexport function deepl(options: DeeplEngineOption) {\n const { key } = options;\n const name = \"deepl\";\n const checkOptions = () => {\n if (!key) {\n throw new TranslationError(name, `${name} key is required`);\n }\n };\n checkOptions();\n const url = \"https://api-free.deepl.com/v2/translate\";\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>) {\n checkOptions();\n const { to, from } = opts;\n if (!Array.isArray(text)) {\n text = [text];\n }\n const res: any = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json; charset=UTF-8\",\n Authorization: `DeepL-Auth-Key ${key}`,\n Accept: \"*/*\",\n Host: \"api-free.deepl.com\",\n Connection: \"keep-alive\",\n },\n body: JSON.stringify({\n text: text,\n source_lang: from === \"auto\" ? undefined : from,\n target_lang: to,\n }),\n });\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n const bodyRes = await (res as any).json();\n if (bodyRes.error) {\n throw new TranslationError(this.name, `Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);\n }\n const body: Translation[] = bodyRes.translations;\n if (!body || body.length === 0) {\n throw new TranslationError(this.name, \"Translate fail ! translate's result is null or empty\");\n }\n const translations: string[] = body.map((t) => t.text);\n return translations;\n },\n };\n}\n","import { Engine, EngineTranslateOptions, BaseEngineOption, TranslationError, OpenAIModel, OPEN_AI_MODELS } from \"../types\";\nimport { Engines } from \"..\";\nimport { throwResponseError, useLogger } from \"@/utils\";\n\nexport interface OpenAIEngineOption extends BaseEngineOption {\n apiKey: string;\n model: OpenAIModel;\n maxTokens?: number;\n outputLog?: boolean;\n}\n\nconst logger = useLogger(\"openai\");\n\nexport function openai(options: OpenAIEngineOption): Engine {\n const { apiKey, model, maxTokens = 2000, outputLog = false } = options;\n\n const name = \"openai\";\n const checkOptions = () => {\n if (!apiKey) {\n throw new TranslationError(name, `${name} apiKey is required`);\n }\n if (!OPEN_AI_MODELS.includes(model)) {\n throw new TranslationError(name, `${name} model=${model} is invalid`);\n }\n };\n checkOptions();\n const base = \"https://api.openai.com/v1/chat/completions\";\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>): Promise<string[]> {\n checkOptions();\n const { from, to } = opts;\n const url = `${base}`;\n if (!Array.isArray(text)) {\n text = [text];\n }\n\n const prompt = {\n role: \"user\",\n content: `\n 满足以下4点翻译要求:\n 1.将每段文本从${from}翻译为${to}\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 ${text.join(\"\\n\")} \n -$e$-\n `,\n };\n\n const res: any = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [{ role: \"system\", content: \"You are a professional translator\" }, prompt],\n max_tokens: maxTokens,\n temperature: 0,\n }),\n });\n\n if (!res.ok) {\n throw await throwResponseError(this.name, res);\n }\n\n const bodyRes = await (res as any).json();\n if (bodyRes.error) {\n throw new TranslationError(this.name, `Translate fail! message: ${bodyRes.error.message}`);\n }\n\n if (!bodyRes || !bodyRes.choices || bodyRes.choices.length === 0 || !bodyRes.choices[0]?.message?.content) {\n throw new TranslationError(this.name, \"Translate fail ! translate's result is null or empty\");\n }\n\n const content = bodyRes.choices[0].message.content;\n const marks = [\"-$s$-\", \"-$e$-\"];\n const translations: string[] = content\n .trim()\n .split(\"\\n\")\n .map((item: string) => item.trim())\n .filter(Boolean)\n .filter((it: string) => !marks.includes(it));\n\n if (outputLog) {\n logger.info(\"prompt:\", JSON.stringify(prompt, null, 2));\n logger.info(\"translations:\", JSON.stringify(translations, null, 2));\n }\n\n return translations;\n },\n };\n}\n","import { google } from \"./google\";\nimport { azure } from \"./azure\";\nimport { amazon } from \"./amazon\";\nimport { baidu } from \"./baidu\";\nimport { deepl } from \"./deepl\";\nimport { openai } from \"./openai\";\nimport { tencent } from \"./tencent\";\n\nexport const engines = {\n google,\n azure,\n amazon,\n baidu,\n deepl,\n openai,\n tencent,\n} as const;\n","export default {\n Afrikaans: \"af\",\n Albanian: \"sq\",\n Amharic: \"am\",\n Arabic: \"ar\",\n Armenian: \"hy\",\n Assamese: \"as\",\n Azerbaijani: \"az\",\n Bashkir: \"ba\",\n Basque: \"eu\",\n Bengali: \"bn\",\n Bhojpuri: \"bho\",\n Bosnian: \"bs\",\n Bulgarian: \"bg\",\n Burmese: \"my\",\n \"Cantonese (Traditional)\": \"yue\",\n Catalan: \"ca\",\n Chhattisgarhi: \"hne\",\n Chinese: \"zh-Hans\",\n \"Chinese (Literary)\": \"lzh\",\n \"Chinese (Traditional)\": \"zh-Hant\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dari: \"prs\",\n Dhivehi: \"dv\",\n Dogri: \"doi\",\n Double: \"lug\",\n Dutch: \"nl\",\n English: \"en\",\n Estonian: \"et\",\n \"FYRO Macedonian\": \"mk\",\n Faroese: \"fo\",\n Fijian: \"fj\",\n Filipino: \"fil\",\n Finnish: \"fi\",\n French: \"fr\",\n \"French (Canada)\": \"fr-CA\",\n Galician: \"gl\",\n Georgian: \"ka\",\n German: \"de\",\n Greek: \"el\",\n Gujarati: \"gu\",\n \"Haitian Creole\": \"ht\",\n Hausa: \"ha\",\n Hebrew: \"he\",\n Hindi: \"hi\",\n Hmong: \"mww\",\n Hungarian: \"hu\",\n Icelandic: \"is\",\n Igbo: \"ig\",\n Indonesian: \"id\",\n Inuinnaqtun: \"ikt\",\n Inuktitut: \"iu\",\n \"Inuktitut (Latin)\": \"iu-Latn\",\n Irish: \"ga\",\n Italian: \"it\",\n Japanese: \"ja\",\n Kannada: \"kn\",\n Kashmiri: \"ks\",\n Kazakh: \"kk\",\n Khmer: \"km\",\n Kikwanda: \"rw\",\n \"Klingon (Latin)\": \"tlh-Latn\",\n \"Klingon (pIqaD)\": \"tlh-Piqd\",\n Konkani: \"gom\",\n Korean: \"ko\",\n \"Kurdish (Medium)\": \"ku\",\n \"Kurdish (North)\": \"kmr\",\n Kyrgyz: \"ky\",\n Lao: \"lo\",\n Latvian: \"lv\",\n Lingala: \"ln\",\n Lithuanian: \"lt\",\n \"Lower Sorbian language\": \"dsb\",\n Maithili: \"mai\",\n Malagasian: \"mg\",\n Malay: \"ms\",\n Malayalam: \"ml\",\n Maltese: \"mt\",\n Manipuri: \"mni\",\n Marathi: \"mr\",\n \"Mongolian (Cyrillic)\": \"mn-Cyrl\",\n \"Mongolian (Traditional)\": \"mn-Mong\",\n Māori: \"mi\",\n Nepali: \"ne\",\n \"Norwegian Bokmål\": \"nb\",\n Nyanja: \"nya\",\n Oriya: \"or\",\n Pashto: \"ps\",\n Persian: \"fa\",\n Polish: \"pl\",\n \"Portugal (Brazil)\": \"pt\",\n \"Portugal (Portugal)\": \"pt-PT\",\n Punjabi: \"pa\",\n \"Querétaro Ottomi\": \"otq\",\n Romanian: \"ro\",\n Rounds: \"run\",\n Russian: \"ru\",\n Samoan: \"sm\",\n \"Serbia (Latin)\": \"sr-Latn\",\n \"Serbian (Cyrillic)\": \"sr-Cyrl\",\n Sesotho: \"st\",\n \"Sesotho at Leboa\": \"nso\",\n Setswana: \"tn\",\n Shona: \"sn\",\n Sindhi: \"sd\",\n Sinhalese: \"si\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Somali: \"so\",\n Spanish: \"es\",\n Swahili: \"sw\",\n Swedish: \"sv\",\n Tahiti: \"ty\",\n Tamil: \"ta\",\n Tatar: \"tt\",\n Telugu: \"te\",\n Thai: \"th\",\n Tibetan: \"bo\",\n Tigrinya: \"ti\",\n Tongan: \"to\",\n Turkish: \"tr\",\n Turkmen: \"tk\",\n Uighur: \"ug\",\n Ukrainian: \"uk\",\n \"Upper Sorbian\": \"hsb\",\n Urdu: \"ur\",\n Uzbek: \"uz\",\n Vietnamese: \"vi\",\n Welsh: \"cy\",\n Will: \"brx\",\n Xhosa: \"xh\",\n Yoruba: \"yo\",\n \"Yucatec Maya\": \"yua\",\n Zulu: \"zu\",\n} as const;\n","export default {\n Abkhazian: \"ab\",\n Acehnese: \"ace\",\n \"Acholi language\": \"ach\",\n Afar: \"aa\",\n Afrikaans: \"af\",\n Albanian: \"sq\",\n Alur: \"alz\",\n Amharic: \"am\",\n Arabic: \"ar\",\n Armenian: \"hy\",\n Assamese: \"as\",\n Avar: \"av\",\n Awadhi: \"awa\",\n Aymara: \"ay\",\n Azerbaijani: \"az\",\n Badawi: \"bew\",\n Balinese: \"ban\",\n Balochi: \"bal\",\n Bambara: \"bm\",\n Bangasinan: \"pag\",\n Bashkir: \"ba\",\n Basque: \"eu\",\n Batakkalo: \"btx\",\n \"Bataksi Marungon\": \"bts\",\n Bataktoba: \"bbc\",\n Baure: \"bci\",\n Belarusian: \"be\",\n Bengali: \"bn\",\n Bhojpuri: \"bho\",\n Bikol: \"bik\",\n Bosnian: \"bs\",\n Breton: \"br\",\n Bulgarian: \"bg\",\n Burmese: \"my\",\n \"Buryat language\": \"bua\",\n Cantonese: \"yue\",\n Casey: \"kha\",\n Catalan: \"ca\",\n Cebuano: \"ceb\",\n \"Chamorro language\": \"ch\",\n Chechen: \"ce\",\n Chevi: \"ak\",\n Chicheva: \"ny\",\n Chiga: \"cgg\",\n Chinese: \"zh-CN\",\n \"Chinese (Traditional)\": \"zh-TW\",\n Chuk: \"chk\",\n Chuvash: \"cv\",\n Conga: \"ts\",\n Corsican: \"co\",\n \"Crimean Tatar\": \"crh\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dari: \"fa-AF\",\n Dhivehi: \"dv\",\n Dinka: \"din\",\n Dogra: \"doi\",\n Dutch: \"nl\",\n Dyula: \"dyu\",\n Dzongka: \"dz\",\n Elocano: \"ilo\",\n English: \"en\",\n Esperanto: \"eo\",\n Estonian: \"et\",\n Ewe: \"ee\",\n \"FYRO Macedonian\": \"mk\",\n Faroese: \"fo\",\n \"Feng language\": \"fon\",\n Fijian: \"fj\",\n Filipino: \"tl\",\n Finnish: \"fi\",\n French: \"fr\",\n Frisian: \"fy\",\n Friulian: \"fur\",\n Fulani: \"ff\",\n Ga: \"gaa\",\n Galician: \"gl\",\n Georgian: \"ka\",\n German: \"de\",\n Gongen: \"gom\",\n Gorkbojok: \"trp\",\n \"Grace and Taoism\": \"ndc-ZW\",\n Greek: \"el\",\n Greenlandic: \"kl\",\n Guarani: \"gn\",\n Gujarati: \"gu\",\n \"Haitian Creole\": \"ht\",\n Hakachin: \"cnh\",\n Hausa: \"ha\",\n Hawaiian: \"haw\",\n Hebrew: \"iw\",\n Heligaignon: \"hil\",\n Hindi: \"hi\",\n Hmong: \"hmn\",\n Hungarian: \"hu\",\n Hunsrück: \"hrx\",\n Iban: \"iba\",\n Icelandic: \"is\",\n Igbo: \"ig\",\n Indonesian: \"id\",\n Irish: \"ga\",\n Italian: \"it\",\n \"Jamaica vernacular\": \"jam\",\n Japanese: \"ja\",\n Javanese: \"jw\",\n \"Jingpo language\": \"kac\",\n Kannada: \"kn\",\n Kanuri: \"kr\",\n Kazakh: \"kk\",\n Kekchi: \"kek\",\n Khmer: \"km\",\n Kikwanda: \"rw\",\n Kithuba: \"ktu\",\n \"Komi language\": \"kv\",\n Kongo: \"kg\",\n Korean: \"ko\",\n \"Kurdish (Kurmanji)\": \"ku\",\n \"Kurdish (Solani)\": \"ckb\",\n Kyrgyz: \"ky\",\n Lao: \"lo\",\n Latin: \"la\",\n Latvian: \"lv\",\n Ligurian: \"lij\",\n Limburg: \"li\",\n Lingala: \"ln\",\n Lithuanian: \"lt\",\n Lombard: \"lmo\",\n Luganda: \"lg\",\n Luo: \"luo\",\n Luxembourg: \"lb\",\n Madura: \"mad\",\n Maithili: \"mai\",\n Makassar: \"mak\",\n Malagasian: \"mg\",\n Malay: \"ms\",\n \"Malay, Jawi\": \"ms-Arab\",\n Malayalam: \"ml\",\n Maltese: \"mt\",\n \"Malwadi language\": \"mwr\",\n Mamu: \"mam\",\n Manx: \"gv\",\n Marathi: \"mr\",\n Marshallese: \"mh\",\n \"Mauritius Scrio whispers\": \"mfe\",\n \"Meitei (Manipur)\": \"mni-Mtei\",\n Minan: \"min\",\n Mizo: \"lus\",\n Mongolian: \"mn\",\n Māori: \"mi\",\n \"Nahuatl (Eastern Vastka)\": \"nhe\",\n \"Ndebele (Southern)\": \"nr\",\n Ndombe: \"dov\",\n \"Nepal Language (Newar)\": \"new\",\n Nepali: \"ne\",\n \"Nko alphabet (West African written script)\": \"bm-Nkoo\",\n \"Northern Sotho\": \"nso\",\n Norwegian: \"no\",\n Nuer: \"nus\",\n Occitan: \"oc\",\n Oriya: \"or\",\n \"Oromo language\": \"om\",\n Ossetian: \"os\",\n Pampangja: \"pam\",\n Papiamento: \"pap\",\n Pashto: \"ps\",\n Pemba: \"bem\",\n Persian: \"fa\",\n Polish: \"pl\",\n \"Portugal (Brazil)\": \"pt\",\n \"Portugal (Portugal)\": \"pt-PT\",\n \"Punjabi (Gurumuchi)\": \"pa\",\n \"Punjabi (Shamuki)\": \"pa-Arab\",\n Quechua: \"qu\",\n Ratgale: \"ltg\",\n Romani: \"rom\",\n Romanian: \"ro\",\n Rondi: \"rn\",\n Russian: \"ru\",\n Sabatec: \"zap\",\n Sakha: \"sah\",\n Samoan: \"sm\",\n Sango: \"sg\",\n Sanskrit: \"sa\",\n Santali: \"sat-Latn\",\n \"Schuna language\": \"sn\",\n \"Scottish Gaelic\": \"gd\",\n Serbian: \"sr\",\n \"Seychellois Creole\": \"crs\",\n Shan: \"shn\",\n Sicilian: \"scn\",\n \"Sierra Leonean Creole\": \"kri\",\n Silesian: \"szl\",\n Sindhi: \"sd\",\n Sinhalese: \"si\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Somali: \"so\",\n \"South Sotho\": \"st\",\n Spanish: \"es\",\n \"Steppe Mali\": \"chm\",\n Sundanese: \"su\",\n \"Susu language\": \"sus\",\n Swahili: \"sw\",\n Swat: \"ss\",\n Swedish: \"sv\",\n \"Sámi (North)\": \"se\",\n Tahiti: \"ty\",\n Tajik: \"tg\",\n Tamaset: \"ber-Latn\",\n \"Tamazight (Tifinaven)\": \"ber\",\n Tamil: \"ta\",\n Tatar: \"tt\",\n Telugu: \"te\",\n Tetum: \"tet\",\n Thai: \"th\",\n Tibetan: \"bo\",\n \"Tiff language\": \"tiv\",\n Tigrinya: \"ti\",\n \"Tok Pisin\": \"tpi\",\n Tongan: \"to\",\n Tswana: \"tn\",\n Tulu: \"tcy\",\n \"Tumbuka language\": \"tum\",\n Turkish: \"tr\",\n Turkmen: \"tk\",\n Tuvan: \"tyv\",\n Udmurtic: \"udm\",\n Uighur: \"ug\",\n Ukrainian: \"uk\",\n Urdu: \"ur\",\n Uzbek: \"uz\",\n Venda: \"ve\",\n Venetian: \"vec\",\n Vietnamese: \"vi\",\n \"Wari language\": \"war\",\n Welsh: \"cy\",\n \"Wolof language\": \"wo\",\n Xhosa: \"xh\",\n Yiddish: \"yi\",\n Yoruba: \"yo\",\n \"Yucatan Maya\": \"yua\",\n Zulu: \"zu\",\n} as const;\n","export default {\n Achinese: \"ach\",\n Afrikaans: \"afr\",\n Akan: \"aka\",\n Albanian: \"alb\",\n \"Algerian Arabic\": \"arq\",\n Amharic: \"amh\",\n \"Ancient Greek\": \"gra\",\n Arabic: \"ara\",\n Aragonese: \"arg\",\n Armenian: \"arm\",\n Assamese: \"asm\",\n Asturian: \"ast\",\n Aymara: \"aym\",\n Azerbaijani: \"aze\",\n Baluchi: \"bal\",\n BasaSunda: \"sun\",\n Bashkir: \"bak\",\n Basque: \"baq\",\n Belarusian: \"bel\",\n Bemba: \"bem\",\n Bengali: \"ben\",\n \"Berber languages\": \"ber\",\n Bhojpuri: \"bho\",\n Bislama: \"bis\",\n Blin: \"bli\",\n Bokmål: \"nob\",\n Bosnian: \"bos\",\n \"Brazilian Portuguese\": \"pot\",\n Breton: \"bre\",\n Bulgarian: \"bul\",\n Buriat: \"bui\",\n Burmese: \"bur\",\n \"Canadian French\": \"frn\",\n Cantonese: \"yue\",\n Catalan: \"cat\",\n Cebuano: \"ceb\",\n Chechen: \"che\",\n Cherokee: \"chr\",\n Chichewa: \"nya\",\n Chinese: \"zh\",\n Chuvash: \"chv\",\n \"Classical Chinese\": \"wyw\",\n Cornish: \"cor\",\n Corsican: \"cos\",\n Creek: \"cre\",\n \"Crimean Tatar\": \"cri\",\n Croatian: \"hrv\",\n Czech: \"cs\",\n Danish: \"dan\",\n Divehi: \"div\",\n Dutch: \"nl\",\n Dzongkha: \"dzo\",\n English: \"en\",\n Esperanto: \"epo\",\n Estonian: \"est\",\n Faroese: \"fao\",\n Filipino: \"fil\",\n Finnish: \"fin\",\n French: \"fra\",\n Friulian: \"fri\",\n Fulani: \"ful\",\n Gaelic: \"gla\",\n Galician: \"glg\",\n Georgian: \"geo\",\n German: \"de\",\n Greek: \"el\",\n Guarani: \"grn\",\n Gujarati: \"guj\",\n \"Haitian Creole\": \"ht\",\n \"Hakha Chin\": \"hak\",\n Hausa: \"hau\",\n Hawaiian: \"haw\",\n Hebrew: \"heb\",\n Hiligaynon: \"hil\",\n Hindi: \"hi\",\n Hmong: \"hmn\",\n Hungarian: \"hu\",\n Hupa: \"hup\",\n Icelandic: \"ice\",\n Ido: \"ido\",\n Igbo: \"ibo\",\n Indonesian: \"id\",\n Ingush: \"ing\",\n \"Interlingua \": \"ina\",\n Inuktitut: \"iku\",\n Irish: \"gle\",\n Italian: \"it\",\n Japanese: \"jp\",\n Javanese: \"jav\",\n Kabyle: \"kab\",\n Kalaallisut: \"kal\",\n Kalmyk: \"kam\",\n Kannada: \"kan\",\n Kanuri: \"kau\",\n Kashmiri: \"kas\",\n Kashubian: \"kah\",\n Khmer: \"hkm\",\n Kinyarwanda: \"kin\",\n Klingon: \"kli\",\n Kongo: \"kon\",\n Konkani: \"kok\",\n Korean: \"kor\",\n Kurdish: \"kur\",\n Kyrgyz: \"kir\",\n Lao: \"lao\",\n Latgalian: \"lag\",\n Latin: \"lat\",\n Latvian: \"lav\",\n Limburgish: \"lim\",\n Lingala: \"lin\",\n Lithuanian: \"lit\",\n Lojban: \"loj\",\n \"Low German\": \"log\",\n \"Lower Sorbian\": \"los\",\n Luganda: \"lug\",\n Luxembourgish: \"ltz\",\n Macedonian: \"mac\",\n Maithili: \"mai\",\n Malagasy: \"mg\",\n Malay: \"may\",\n Malayalam: \"mal\",\n Maltese: \"mlt\",\n Manx: \"glv\",\n Maori: \"mao\",\n Marathi: \"mar\",\n Marshallese: \"mah\",\n \"Mauritian Creole\": \"mau\",\n \"Middle French\": \"frm\",\n Mongolian: \"moc\",\n Montenegrin: \"mot\",\n \"N'Ko\": \"nqo\",\n Neapolitan: \"nea\",\n Nepali: \"nep\",\n \"Northern Sami\": \"sme\",\n \"Northern Sotho\": \"ped\",\n Norwegian: \"nor\",\n Nynorsk: \"nno\",\n Occitan: \"oci\",\n Ojibwa: \"oji\",\n \"Old English\": \"eno\",\n Oriya: \"ori\",\n Oromo: \"orm\",\n Ossetian: \"oss\",\n Pampanga: \"pam\",\n Papiamento: \"pap\",\n Pashto: \"pus\",\n Persian: \"per\",\n Polish: \"pl\",\n Portuguese: \"pt\",\n Punjabi: \"pan\",\n Quechua: \"que\",\n Romanian: \"rom\",\n Romansh: \"roh\",\n Romany: \"ro\",\n Russian: \"ru\",\n Rusyn: \"ruy\",\n Samoan: \"sm\",\n Sanskrit: \"san\",\n Sardinian: \"srd\",\n Scots: \"sco\",\n \"Serb(Cyrillic)\": \"src\",\n Serbian: \"srp\",\n \"Serbo-Croatian\": \"sec\",\n Shan: \"sha\",\n Shona: \"sna\",\n Silesian: \"sil\",\n Sindhi: \"snd\",\n Sinhala: \"sin\",\n Slovak: \"sk\",\n Slovenian: \"slo\",\n Somali: \"som\",\n \"Songhai languages\": \"sol\",\n \"Southern Ndebele\": \"nbl\",\n \"Southern Sotho\": \"sot\",\n Spanish: \"spa\",\n Swahili: \"swa\",\n Swedish: \"swe\",\n Syriac: \"syr\",\n Tagalog: \"tgl\",\n Tajik: \"tgk\",\n Tamil: \"tam\",\n Tatar: \"tat\",\n Telugu: \"tel\",\n Tetum: \"tet\",\n Thai: \"th\",\n Tibetan: \"tib\",\n Tigrinya: \"tir\",\n \"Traditional Chinese\": \"cht\",\n Tsonga: \"tso\",\n \"Tunisian Arabic\": \"tua\",\n Turkish: \"tr\",\n Turkmen: \"tuk\",\n Twi: \"twi\",\n Ukrainian: \"ukr\",\n \"Upper Sorbian\": \"ups\",\n Urdu: \"urd\",\n Uyghur: \"uig\",\n Venda: \"ven\",\n Vietnamese: \"vie\",\n Walloon: \"wln\",\n Welsh: \"wel\",\n \"Western Frisian\": \"fry\",\n Wolof: \"wol\",\n Xhosa: \"xho\",\n Yiddish: \"yid\",\n Yoruba: \"yor\",\n Zaza: \"zaz\",\n Zulu: \"zul\",\n} as const;\n","export default {\n English: \"en\",\n Bulgarian: \"bg\",\n Chinese: \"zh\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dutch: \"nl\",\n Estonian: \"et\",\n Finnish: \"fi\",\n French: \"fr\",\n German: \"de\",\n Greek: \"el\",\n Hungarian: \"hu\",\n Icelandic: \"is\",\n Indonesian: \"id\",\n Irish: \"ga\",\n Italian: \"it\",\n Japanese: \"ja\",\n Korean: \"ko\",\n Latvian: \"lv\",\n Lithuanian: \"lt\",\n Maltese: \"mt\",\n Norwegian: \"nb\",\n Polish: \"pl\",\n Portuguese: \"pt\",\n Romanian: \"ro\",\n Russian: \"ru\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Spanish: \"es\",\n Swedish: \"sv\",\n Turkish: \"tr\",\n Ukrainian: \"uk\",\n} as const;\n","export default {\n Auto: \"auto\",\n Chinese: \"zh\",\n TraditionalChinese: \"zh-TW\",\n English: \"en\",\n Japanese: \"ja\",\n Korean: \"ko\",\n French: \"fr\",\n Spanish: \"es\",\n Italian: \"it\",\n German: \"de\",\n Turkish: \"tr\",\n Russian: \"ru\",\n Portuguese: \"pt\",\n Vietnamese: \"vi\",\n Indonesian: \"id\",\n Thai: \"th\",\n Malay: \"ms\",\n Arabic: \"ar\",\n Hindi: \"hi\",\n} as const;\n","export default {\n Afrikaans: \"af\",\n Albanian: \"sq\",\n Amharic: \"am\",\n Arabic: \"ar\",\n Armenian: \"hy\",\n Azerbaijani: \"az\",\n Bengali: \"bn\",\n Bosnian: \"bs\",\n Bulgarian: \"bg\",\n Catalan: \"ca\",\n \"Chinese (Simplified)\": \"zh\",\n \"Chinese (Traditional)\": \"zh-TW\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dari: \"fa-AF\",\n Dutch: \"nl\",\n English: \"en\",\n Estonian: \"et\",\n \"Farsi (Persian)\": \"fa\",\n \"Filipino, Tagalog\": \"tl\",\n Finnish: \"fi\",\n French: \"fr\",\n \"French (Canada)\": \"fr-CA\",\n Georgian: \"ka\",\n German: \"de\",\n Greek: \"el\",\n Gujarati: \"gu\",\n \"Haitian Creole\": \"ht\",\n Hausa: \"ha\",\n Hebrew: \"he\",\n Hindi: \"hi\",\n Hungarian: \"hu\",\n Icelandic: \"is\",\n Indonesian: \"id\",\n Irish: \"ga\",\n Italian: \"it\",\n Japanese: \"ja\",\n Kannada: \"kn\",\n Kazakh: \"kk\",\n Korean: \"ko\",\n Latvian: \"lv\",\n Lithuanian: \"lt\",\n Macedonian: \"mk\",\n Malay: \"ms\",\n Malayalam: \"ml\",\n Maltese: \"mt\",\n Marathi: \"mr\",\n Mongolian: \"mn\",\n \"Norwegian (Bokmål)\": \"no\",\n Pashto: \"ps\",\n Polish: \"pl\",\n \"Portuguese (Brazil)\": \"pt\",\n \"Portuguese (Portugal)\": \"pt-PT\",\n Punjabi: \"pa\",\n Romanian: \"ro\",\n Russian: \"ru\",\n Serbian: \"sr\",\n Sinhala: \"si\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Somali: \"so\",\n Spanish: \"es\",\n \"Spanish (Mexico)\": \"es-MX\",\n Swahili: \"sw\",\n Swedish: \"sv\",\n Tamil: \"ta\",\n Telugu: \"te\",\n Thai: \"th\",\n Turkish: \"tr\",\n Ukrainian: \"uk\",\n Urdu: \"ur\",\n Uzbek: \"uz\",\n Vietnamese: \"vi\",\n Welsh: \"cy\",\n} as const;\n","export type ValuesOf<T> = T[keyof T];\n","import azure from \"../target/azure\";\nimport google from \"../target/google\";\nimport baidu from \"../target/baidu\";\nimport deepl from \"./deepl\";\nimport tencent from \"./tencent\";\nimport amazon from \"../target/amazon\";\nimport openai from \"../target/google\";\nimport { ValuesOf } from \"../../types/typescript\";\n\nexport const originLanguages = {\n azure: azure,\n google: google,\n baidu: baidu,\n deepl: deepl,\n amazon: amazon,\n openai: openai,\n tencent: tencent,\n} as const;\n\nexport type originLanguageMapNames = {\n amazon: keyof typeof amazon;\n azure: keyof typeof azure;\n google: keyof typeof google;\n baidu: keyof typeof baidu;\n deepl: keyof typeof deepl;\n openai: keyof typeof openai;\n tencent: keyof typeof tencent;\n};\n\nexport type originLanguageMapValues = {\n amazon: ValuesOf<typeof amazon>;\n azure: ValuesOf<typeof azure>;\n google: ValuesOf<typeof google>;\n baidu: ValuesOf<typeof baidu>;\n deepl: ValuesOf<typeof deepl>;\n openai: ValuesOf<typeof openai>;\n tencent: ValuesOf<typeof tencent>;\n};\n","export default {\n \"American English\": \"en-US\",\n \"Brazilian Portuguese\": \"pt-BR\",\n \"British English\": \"en-GB\",\n Bulgarian: \"bg\",\n Chinese: \"zh\",\n Croatian: \"hr\",\n Czech: \"cs\",\n Danish: \"da\",\n Dutch: \"nl\",\n Estonian: \"et\",\n \"European Portuguese\": \"pt-PT\",\n Finnish: \"fi\",\n French: \"fr\",\n German: \"de\",\n Greek: \"el\",\n Hungarian: \"hu\",\n Icelandic: \"is\",\n Indonesian: \"id\",\n Irish: \"ga\",\n Italian: \"it\",\n Japanese: \"ja\",\n Korean: \"ko\",\n Latvian: \"lv\",\n Lithuanian: \"lt\",\n Maltese: \"mt\",\n Norwegian: \"nb\",\n Polish: \"pl\",\n Portuguese: \"pt\",\n Romanian: \"ro\",\n Russian: \"ru\",\n Slovak: \"sk\",\n Slovenian: \"sl\",\n Spanish: \"es\",\n Swedish: \"sv\",\n Turkish: \"tr\",\n Ukrainian: \"uk\",\n} as const;\n","export default {\n \"Simplified Chinese\": \"zh\",\n \"Traditional Chinese\": \"zh-TW\",\n English: \"en\",\n Japanese: \"ja\",\n Korean: \"ko\",\n French: \"fr\",\n Spanish: \"es\",\n Italian: \"it\",\n German: \"de\",\n Turkish: \"tr\",\n Russian: \"ru\",\n Portuguese: \"pt\",\n Vietnamese: \"vi\",\n Indonesian: \"id\",\n Thai: \"th\",\n Malay: \"ms\",\n Arabic: \"ar\",\n Hindi: \"hi\",\n} as const;\n","import { CacheRecord } from \"../types\";\n\nexport class Cache {\n private cache: Map<string, CacheRecord>;\n constructor() {\n this.cache = new Map<string, CacheRecord>();\n }\n /**\n * @param key\n * @param value\n * @param time millisecond\n */\n set(key: string, value: any, time: number) {\n if (time <= 0) {\n throw new Error(\"time must be greater than 0\");\n }\n const oldRecord = this.cache.get(key);\n if (oldRecord) {\n clearTimeout(oldRecord.timeout);\n }\n const record: CacheRecord = {\n value,\n expire: Date.now() + time,\n };\n if (!isNaN(record.expire)) {\n record.timeout = setTimeout(() => this.del(key), time) as unknown as number;\n }\n this.cache.set(key, record);\n }\n get(key: string) {\n return this.cache.get(key);\n }\n delete(key: string) {\n let canDelete = true;\n const oldRecord = this.cache.get(key);\n if (oldRecord) {\n if (!isNaN(oldRecord.expire) && oldRecord.expire < Date.now()) {\n canDelete = false;\n } else {\n clearTimeout(oldRecord.timeout);\n }\n } else {\n canDelete = false;\n }\n if (canDelete) {\n this.del(key);\n }\n return canDelete;\n }\n private del(key: string) {\n this.cache.delete(key);\n }\n clear() {\n for (const [, val] of this.cache.entries()) {\n clearTimeout(val.timeout);\n }\n this.cache.clear();\n }\n}\n","import azure from \"./azure\";\nimport google from \"./google\";\nimport baidu from \"./baidu\";\nimport deepl from \"./deepl\";\nimport amazon from \"./amazon\";\nimport openai from \"./google\";\nimport tencent from \"./tencent\";\nimport { ValuesOf } from \"../../utils\";\n\nexport const targetLanguages = {\n azure: azure,\n google: google,\n baidu: baidu,\n deepl: deepl,\n amazon: amazon,\n openai: openai,\n tencent: tencent,\n} as const;\n\nexport type targetLanguageMapNames = {\n amazon: keyof typeof amazon;\n azure: keyof typeof azure;\n google: keyof typeof google;\n baidu: keyof typeof baidu;\n deepl: keyof typeof deepl;\n openai: keyof typeof openai;\n tencent: keyof typeof tencent;\n};\n\nexport type targetLanguageMapValues = {\n amazon: ValuesOf<typeof amazon>;\n azure: ValuesOf<typeof azure>;\n google: ValuesOf<typeof google>;\n baidu: ValuesOf<typeof baidu>;\n deepl: ValuesOf<typeof deepl>;\n openai: ValuesOf<typeof openai>;\n tencent: ValuesOf<typeof tencent>;\n};\n","import { originLanguages, originLanguageMapNames, originLanguageMapValues } from \"./origin\";\nimport { targetLanguages, targetLanguageMapNames, targetLanguageMapValues } from \"./target\";\nimport { Engines } from \"..\";\n\nexport type KeysOfTarget<T extends keyof targetLanguageMapNames> = targetLanguageMapNames[T];\nexport type KeysOfOrigin<T extends keyof originLanguageMapNames> = originLanguageMapNames[T];\n\nexport type FromLanguage<T extends Engines> = KeysOfOrigin<T> | originLanguageMapValues[T] | \"auto\";\nexport type ToLanguage<T extends Engines> = KeysOfTarget<T> | targetLanguageMapValues[T];\n\nexport function normalFromLanguage<T extends Engines>(from: FromLanguage<T>, engine: Engines) {\n if (from === \"auto\") {\n return \"auto\";\n }\n\n const engineLanguages = originLanguages[engine];\n if (!engineLanguages) {\n throw new Error(`Engine ${engine} not found`);\n }\n\n const keys = Object.keys(originLanguages[engine]);\n if (keys.includes(from)) {\n return engineLanguages[from as keyof typeof engineLanguages];\n }\n\n const values = Object.values(originLanguages[engine]) as string[];\n if (values.includes(from)) {\n return from;\n }\n\n throw new Error(`Invalid from language ${engine} ${from}`);\n}\n\nexport function normalToLanguage<T extends Engines>(to: ToLanguage<T>, engine: Engines) {\n const engineLanguages = targetLanguages[engine];\n if (!engineLanguages) {\n throw new Error(`Engine ${engine} not found`);\n }\n\n const keys = Object.keys(targetLanguages[engine]);\n if (keys.includes(to)) {\n return engineLanguages[to as keyof typeof engineLanguages];\n }\n\n const values = Object.values(targetLanguages[engine]) as string[];\n if (values.includes(to)) {\n return to;\n }\n\n throw new Error(`Invalid to language ${engine} ${to}`);\n}\n\nexport function getLanguage(engine: Engines) {\n return {\n from: originLanguages[engine],\n to: targetLanguages[engine],\n };\n}\n\nexport {\n originLanguages,\n originLanguageMapNames,\n originLanguageMapValues,\n targetLanguages,\n targetLanguageMapNames,\n targetLanguageMapValues,\n};\n","import { engines } from \"../engines\";\nimport type { FromLanguage, ToLanguage } from \"../language\";\nexport * from \"./typescript\";\nexport type Engines = keyof typeof engines;\n\nexport type TranslateOptions<T extends Engines> = {\n from?: FromLanguage<T>;\n to: ToLanguage<T>;\n engine?: T;\n /**\n * Cache time in milliseconds\n */\n cache_time?: number | undefined;\n /**\n * Domain to use for translation\n */\n domain?: string | undefined;\n /**\n * Maximum number of characters\n * default: 1000, -1 means no limit\n */\n max_character_num?: number | undefined;\n};\n\nexport interface BaseEngineOption {}\n\nexport type EngineTranslateOptions<T extends Engines> = Omit<TranslateOptions<T>, \"engine\">;\n\nexport type Engine = {\n name: string;\n translate: <T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>) => Promise<string[]>;\n};\n\nexport interface CacheRecord {\n value: unknown;\n timeout?: number;\n expire: number;\n}\n\nexport class TranslationError extends Error {\n region: string;\n constructor(region: string, message: string) {\n super(message);\n this.region = region;\n Error.captureStackTrace(this, this.constructor);\n }\n}\n\nexport { FromLanguage, ToLanguage };\n\nexport const OPEN_AI_MODELS = [\n \"o1-preview\",\n \"o1-preview-2024-09-12\",\n \"o1-mini-2024-09-12\",\n \"o1-mini\",\n \"dall-e-2\",\n \"gpt-3.5-turbo\",\n \"gpt-3.5-turbo-0125\",\n \"babbage-002\",\n \"davinci-002\",\n \"dall-e-3\",\n \"text-embedding-3-large\",\n \"gpt-3.5-turbo-16k\",\n \"tts-1-hd-1106\",\n \"text-embedding-ada-002\",\n \"text-embedding-3-small\",\n \"tts-1-hd\",\n \"whisper-1\",\n \"gpt-3.5-turbo-1106\",\n \"gpt-3.5-turbo-instruct\",\n \"gpt-4o-mini-2024-07-18\",\n \"gpt-4o-mini\",\n \"tts-1\",\n \"tts-1-1106\",\n \"gpt-3.5-turbo-instruct-0914\",\n] as const;\n\nexport type OpenAIModel = (typeof OPEN_AI_MODELS)[number];\n","import { Engine, EngineTranslateOptions, BaseEngineOption, TranslationError } from \"../types\";\nimport { Engines } from \"..\";\nimport crypto from \"crypto\";\n\nexport interface TencentEngineOption extends BaseEngineOption {\n secretId: string;\n secretKey: string;\n region?: string;\n}\n\ninterface Authorization {\n secretId: string;\n secretKey: string;\n service: string;\n host: string;\n payload: string;\n httpRequestMethod: string;\n action: string;\n apiVersion: string;\n region?: string;\n token?: string;\n}\n\nfunction sha256(message: string, secret: string | Buffer = \"\", encoding?: \"hex\" | \"base64\"): string | Buffer {\n if (encoding) {\n return crypto.createHmac(\"sha256\", secret).update(message).digest(encoding);\n }\n return crypto.createHmac(\"sha256\", secret).update(message).digest();\n}\n\nfunction getHash(message: any, encoding: \"hex\" = \"hex\") {\n return crypto.createHash(\"sha256\").update(message).digest(encoding);\n}\n\nfunction getDate(timestamp: number): string {\n const date = new Date(timestamp * 1000);\n return `${date.getUTCFullYear()}-${(\"0\" + (date.getUTCMonth() + 1)).slice(-2)}-${(\"0\" + date.getUTCDate()).slice(-2)}`;\n}\n\nfunction buildAuthorization({ secretId, secretKey, service, host, payload, httpRequestMethod, action, apiVersion, region }: Authorization) {\n const timestamp = Math.floor(Date.now() / 1000);\n const date = getDate(timestamp);\n const canonicalUri = \"/\";\n const canonicalQueryString = \"\";\n const canonicalHeaders = \"content-type:application/json; charset=utf-8\\nhost:\" + host + \"\\n\";\n const signedHeaders = \"content-type;host\";\n const hashedRequestPayload = getHash(payload);\n const canonicalRequest = [\n httpRequestMethod,\n canonicalUri,\n canonicalQueryString,\n canonicalHeaders,\n signedHeaders,\n hashedRequestPayload,\n ].join(\"\\n\");\n\n const algorithm = \"TC3-HMAC-SHA256\";\n const credentialScope = `${date}/${service}/tc3_request`;\n const hashedCanonicalRequest = getHash(canonicalRequest);\n const stringToSign = [algorithm, timestamp, credentialScope, hashedCanonicalRequest].join(\"\\n\");\n\n const kDate = sha256(date, \"TC3\" + secretKey);\n const kService = sha256(service, kDate);\n const kSigning = sha256(\"tc3_request\", kService);\n const signature = sha256(stringToSign, kSigning, \"hex\");\n\n const authorization = `${algorithm} Credential=${secretId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n\n const headers: Record<string, any> = {\n Authorization: authorization,\n \"Content-Type\": \"application/json; charset=utf-8\",\n Host: host,\n \"X-TC-Action\": action,\n \"X-TC-Timestamp\": timestamp,\n \"X-TC-Version\": apiVersion,\n };\n if (region) headers[\"X-TC-Region\"] = region;\n\n return headers;\n}\n\nexport function tencent(options: TencentEngineOption): Engine {\n const { secretId, secretKey, region = \"ap-guangzhou\" } = options;\n const name = \"tencent\";\n const host = \"tmt.tencentcloudapi.com\";\n const endpoint = `https://${host}/`;\n const service = \"tmt\";\n const apiVersion = \"2018-03-21\";\n const action = \"TextTranslate\";\n\n function checkOptions() {\n if (!secretId || !secretKey) {\n throw new TranslationError(name, `${name} secretId and secretKey are required`);\n }\n }\n\n return {\n name,\n async translate<T extends Engines>(text: string | string[], opts: EngineTranslateOptions<T>): Promise<string[]> {\n checkOptions();\n const { from = \"auto\", to } = opts;\n const source = from === \"auto\" ? \"auto\" : from;\n const payloadObj = {\n SourceText: Array.isArray(text) ? text.join(\"\\n\") : text,\n Source: source,\n Target: to,\n ProjectId: 0,\n };\n const payload = JSON.stringify(payloadObj);\n\n const headers = buildAuthorization({\n secretId,\n secretKey,\n service,\n host,\n payload,\n httpRequestMethod: \"POST\",\n action,\n apiVersion,\n region,\n });\n\n try {\n const res: any = await fetch(endpoint, {\n method: \"POST\",\n headers,\n body: payload,\n });\n\n if (!res.ok) {\n throw new TranslationError(name, `HTTP ${res.status}: ${await res.text()}`);\n }\n const data = await res.json();\n if (data.Response?.Error) {\n throw new TranslationError(name, `Tencent translate fail: ${data.Response.Error.Code}, ${data.Response.Error.Message}`);\n }\n const translatedResults = data.Response?.TargetText.split(\"\\n\") ?? [];\n if (!Array.isArray(translatedResults) || translatedResults.length === 0) {\n throw new TranslationError(name, \"Translate fail! No result returned\");\n }\n return translatedResults;\n } catch (error) {\n if (error instanceof TranslationError) throw error;\n throw new TranslationError(name, `Translation failed: ${error}`);\n }\n },\n };\n}\n","import { engines } from \"./engines\";\nimport { Engine, TranslateOptions, Engines, TranslationError } from \"./types\";\nimport { useLogger, Cache, getGapLine, getErrorMessages, splitText, isOverMaxCharacterNum, sleep } from \"./utils\";\nimport { FromLanguage, getLanguage, normalFromLanguage, normalToLanguage, ToLanguage } from \"./language\";\nimport { appName, defaultMaxCharacterNum } from \"./utils/constant\";\nexport * from \"./types\";\n\nconst logger = useLogger();\nconst cache = new Cache();\n\ninterface ConcurrencyTask {\n index: number;\n content: string;\n}\n\ninterface TranslateTaskResult {\n index: number;\n translated: string[];\n}\n\nclass Translator {\n private engines: Map<string, Engine>;\n private cache_time: number;\n private concurrencyMax: number;\n private concurrencyDelay: number;\n constructor(cache_time: number = 60 * 1000, concurrencyMax: number = 4, concurrencyDelay = 20) {\n this.engines = new Map<string, Engine>();\n this.cache_time = cache_time;\n this.concurrencyMax = concurrencyMax;\n this.concurrencyDelay = concurrencyDelay;\n }\n /**\n * This method is obsolete, please use the addEngine method\n * @param engine {@link Engine} instance\n * @deprecated Use {@link addEngine} instead.\n */\n use(engine: Engine) {\n this.addEngine(engine);\n }\n addEngine(engine: Engine) {\n if (this.engines.has(engine.name)) {\n logger.warn(\"Engine already exists\");\n return;\n }\n this.engines.set(engine.name, engine);\n }\n removeEngine(engineName: string) {\n if (!engineName || !this.engines.has(engineName)) {\n logger.warn(\"Engine name is required or not found\");\n return false;\n }\n this.engines.delete(engineName);\n }\n async translate<T extends Engines>(text: string | string[], options: TranslateOptions<T>): Promise<string[]> {\n const { engine = \"google\", cache_time = 60 * 1000 } = options;\n let { from = \"auto\", to } = options;\n from = options.from = normalFromLanguage(from, engine) as FromLanguage<T>;\n to = options.to = normalToLanguage(to, engine) as ToLanguage<T>;\n\n //1. Check if engine exists\n if (!this.engines.has(engine)) {\n throw new TranslationError(appName, `Engine ${engine} not found`);\n }\n\n const engineInstance = this.engines.get(engine);\n if (!engineInstance) {\n throw new TranslationError(appName, `Engine ${engine} not found`);\n }\n\n if (!from) {\n throw new TranslationError(appName, `Invalid origin language ${from as string}`);\n }\n if (!to) {\n throw new TranslationError(appName, `Invalid target language ${to as string}`);\n }\n\n const key = `${from as string}:${to as string}:${engine}:${text}`;\n //3. If the cache is matched, the cache is used directly\n if (cache.get(key)) {\n return Promise.resolve(cache.get(key)?.value as string[]);\n }\n\n return this.concurrencyHandle(engineInstance, text, options)\n .then((translated) => {\n cache.set(key, translated, cache_time ?? this.cache_time);\n return translated;\n })\n .catch((e) => {\n logger.error(\n `${appName} Failed: from=${from},to=${to},engine=${engine},translate text: \\n${getGapLine()}\\n${text}\\n${getGapLine()}\\n error: ${getErrorMessages(e)}`\n );\n if (e instanceof TranslationError) {\n throw e;\n } else {\n throw new TranslationError(appName, getErrorMessages(e));\n }\n });\n }\n private async concurrencyHandle<T extends Engines>(\n engine: Engine,\n text: string | string[],\n options: TranslateOptions<T>\n ): Promise<string[]> {\n const { max_character_num = defaultMaxCharacterNum } = options;\n const maxCharacterNum: number = max_character_num > 0 ? max_character_num : defaultMaxCharacterNum;\n if (Array.isArray(text)) {\n if (isOverMaxCharacterNum(text, max_character_num)) {\n throw new TranslationError(\n appName,\n \"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.\"\n );\n }\n return engine.translate(text, options);\n } else {\n return this.concurrencyTranslate(engine, text, options, maxCharacterNum);\n }\n }\n private async concurrencyTranslate<T extends Engines>(\n engine: Engine,\n text: string,\n options: TranslateOptions<T>,\n maxCharacterMum: number\n ): Promise<string[]> {\n const pendingTasks: ConcurrencyTask[] = splitText(text, maxCharacterMum).map(\n (content, index) => ({ content, index }) as ConcurrencyTask\n );\n const result: TranslateTaskResult[] = [];\n let activeTasks = 0;\n const concurrencyDelay = this.concurrencyDelay;\n const concurrencyMax = this.concurrencyMax;\n\n return new Promise((resolve, reject) => {\n function processTasks() {\n while (activeTasks < concurrencyMax && pendingTasks.length > 0) {\n const { content, index } = pendingTasks.shift()!;\n activeTasks++;\n\n engine\n .translate(content, options)\n .then((res) => {\n result.push({\n translated: res,\n index,\n });\n })\n .catch((error) => reject(error))\n .finally(async () => {\n activeTasks--;\n if (activeTasks === 0 && pendingTasks.length <= 0) {\n result.sort((a, b) => a.index - b.index);\n const arr = result.reduce<string[]>((pre, cur) => pre.concat(cur.translated), []);\n return resolve([arr.join(\"\")]);\n }\n await sleep(concurrencyDelay);\n processTasks();\n });\n }\n }\n\n processTasks();\n\n return result;\n });\n }\n}\n\nconst translator = new Translator();\n\nexport default {\n engines,\n translator,\n Translator,\n Cache,\n getLanguage,\n};\nexport { engines, translator, Translator, Cache, getLanguage };\n"],"names":[],"mappings":"AACO;;ACDP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACO;;ACPA;AACP;AACA;AACA;AACA;AACO;;ACLA;AACP;AACA;AACA;AACO;;ACHA;AACP;AACA;AACO;AACP;AACA;AACA;;ACPO;AACP;AACA;AACA;AACA;AACA;AACO;;ACAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EO;;ACo9BA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACw8BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACp+BO;AACA;AACA;AACA;AAGA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACz6CO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEO;AACA;;ACvCA;AACP;AACA;AACA;AACA;AACO;;ACDP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// translate v0.3.
|
|
1
|
+
// translate v0.3.2 Copyright (c) 2025 Potter<aa4790139@gmail.com> and contributors
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
@@ -1664,7 +1664,7 @@ function tencent$2(options) {
|
|
|
1664
1664
|
async translate(text, opts) {
|
|
1665
1665
|
checkOptions();
|
|
1666
1666
|
const { from = "auto", to } = opts;
|
|
1667
|
-
const source = from === "auto" ? "" : from;
|
|
1667
|
+
const source = from === "auto" ? "auto" : from;
|
|
1668
1668
|
const payloadObj = {
|
|
1669
1669
|
SourceText: Array.isArray(text) ? text.join("\n") : text,
|
|
1670
1670
|
Source: source,
|