@yxw007/translate 0.0.14 → 0.0.15

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.
@@ -1,10 +1,19 @@
1
- // translate v0.0.14 Copyright (c) 2024 Potter<aa4790139@gmail.com> and contributors
1
+ // translate v0.0.15 Copyright (c) 2024 Potter<aa4790139@gmail.com> and contributors
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@aws-sdk/client-translate'), require('deepl-node')) :
4
4
  typeof define === 'function' && define.amd ? define(['exports', '@aws-sdk/client-translate', 'deepl-node'], factory) :
5
5
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.translate = {}, global.clientTranslate, global.deeplEngine));
6
6
  })(this, (function (exports, clientTranslate, deeplEngine) { 'use strict';
7
7
 
8
+ class TranslationError extends Error {
9
+ region;
10
+ constructor(region, message) {
11
+ super(`${region}: ${message}`);
12
+ this.region = region;
13
+ Error.captureStackTrace(this, this.constructor);
14
+ }
15
+ }
16
+
8
17
  function google$1(options) {
9
18
  const base = "https://translate.googleapis.com/translate_a/single";
10
19
  return {
@@ -19,7 +28,7 @@
19
28
  const res = await fetch(url);
20
29
  const body = await res.json();
21
30
  if (!body || body.length === 0) {
22
- throw new Error("Translate fail ! translate's result is null or empty");
31
+ throw new TranslationError(this.name, "Translate fail ! translate's result is null or empty");
23
32
  }
24
33
  const translations = [];
25
34
  for (let i = 0; body[0] && i < body[0].length; i++) {
@@ -39,10 +48,18 @@
39
48
  */
40
49
  function azure$1(options) {
41
50
  const { key, region } = options;
51
+ const name = "azure";
52
+ const checkOptions = () => {
53
+ if (!key || !region) {
54
+ throw new TranslationError(name, `${name} key and region is required`);
55
+ }
56
+ };
57
+ checkOptions();
42
58
  const base = "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0";
43
59
  return {
44
- name: "azure",
60
+ name,
45
61
  async translate(text, opts) {
62
+ checkOptions();
46
63
  const { from, to } = opts;
47
64
  const url = `${base}&to=${to}${from && from !== "auto" ? `&from=${from}` : ""}`;
48
65
  if (!Array.isArray(text)) {
@@ -59,11 +76,11 @@
59
76
  });
60
77
  const bodyRes = await res.json();
61
78
  if (bodyRes.error) {
62
- throw new Error(`Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);
79
+ throw new TranslationError(this.name, `Translate fail ! code: ${bodyRes.error.code}, message: ${bodyRes.error.message}`);
63
80
  }
64
81
  const body = bodyRes;
65
82
  if (!body || body.length === 0) {
66
- throw new Error("Translate fail ! translate's result is null or empty");
83
+ throw new TranslationError(this.name, "Translate fail ! translate's result is null or empty");
67
84
  }
68
85
  const translations = [];
69
86
  for (const translation of body) {
@@ -79,9 +96,17 @@
79
96
 
80
97
  function amazon$1(options) {
81
98
  const { region, accessKeyId, secretAccessKey } = options;
99
+ const name = "amazon";
100
+ const checkOptions = () => {
101
+ if (!region || !accessKeyId || !secretAccessKey) {
102
+ throw new TranslationError(name, `${name} region, accessKeyId ,secretAccessKey is required`);
103
+ }
104
+ };
105
+ checkOptions();
82
106
  return {
83
- name: "amazon",
107
+ name,
84
108
  async translate(text, opts) {
109
+ checkOptions();
85
110
  const { from = "auto", to } = opts;
86
111
  const translateClient = new clientTranslate.TranslateClient({ region: region, credentials: { accessKeyId, secretAccessKey } });
87
112
  if (!Array.isArray(text)) {
@@ -1229,9 +1254,17 @@
1229
1254
  function baidu$1(options) {
1230
1255
  const { appId, secretKey } = options;
1231
1256
  const url = "https://fanyi-api.baidu.com/api/trans/vip/fieldtranslate";
1257
+ const name = "baidu";
1258
+ const checkOptions = () => {
1259
+ if (!appId || !secretKey) {
1260
+ throw new TranslationError(name, `${name} appId and secretKey is required`);
1261
+ }
1262
+ };
1263
+ checkOptions();
1232
1264
  return {
1233
- name: "baidu",
1265
+ name,
1234
1266
  async translate(text, opts) {
1267
+ checkOptions();
1235
1268
  const { to, from = "auto", domain = "it" } = opts;
1236
1269
  if (!Array.isArray(text)) {
1237
1270
  text = [text];
@@ -1256,7 +1289,7 @@
1256
1289
  });
1257
1290
  const data = await res.json();
1258
1291
  if (!data || data.error_code || !data.trans_result || data.trans_result.length === 0) {
1259
- throw new Error("Failed to translate text");
1292
+ throw new TranslationError(this.name, `Translate fail ! error_code:${data.error_code}, error_msg: ${data.error_msg}`);
1260
1293
  }
1261
1294
  const translations = [];
1262
1295
  for (const translation of data.trans_result) {
@@ -1271,10 +1304,18 @@
1271
1304
 
1272
1305
  function deepl$2(options) {
1273
1306
  const { key } = options;
1307
+ const name = "deepl";
1308
+ const checkOptions = () => {
1309
+ if (!key) {
1310
+ throw new TranslationError(name, `${name} key is required`);
1311
+ }
1312
+ };
1313
+ checkOptions();
1274
1314
  const translator = new deeplEngine.Translator(key);
1275
1315
  return {
1276
- name: "deepl",
1316
+ name,
1277
1317
  async translate(text, opts) {
1318
+ checkOptions();
1278
1319
  const { to, from = "auto" } = opts;
1279
1320
  if (!Array.isArray(text)) {
1280
1321
  text = [text];
@@ -1377,6 +1418,12 @@
1377
1418
  function getGapLine() {
1378
1419
  return "-".repeat(20);
1379
1420
  }
1421
+ function getErrorMessages(e, prefix = "Translate fail ! ") {
1422
+ if (e instanceof TypeError) {
1423
+ return prefix + (e.cause.message ?? e.message);
1424
+ }
1425
+ return prefix + e.message;
1426
+ }
1380
1427
 
1381
1428
  var azure = {
1382
1429
  Afrikaans: "af",
@@ -2182,6 +2229,8 @@
2182
2229
  };
2183
2230
  }
2184
2231
 
2232
+ const appName = "Translate";
2233
+
2185
2234
  const logger = useLogger();
2186
2235
  const cache = new Cache();
2187
2236
  class Translator {
@@ -2205,17 +2254,17 @@
2205
2254
  to = options.to = normalToLanguage(to, engine);
2206
2255
  //1. Check if engine exists
2207
2256
  if (!this.engines.has(engine)) {
2208
- throw new Error(`Engine ${engine} not found`);
2257
+ throw new TranslationError(appName, `Engine ${engine} not found`);
2209
2258
  }
2210
2259
  const engineInstance = this.engines.get(engine);
2211
2260
  if (!engineInstance) {
2212
- throw new Error(`Engine ${engine} not found`);
2261
+ throw new TranslationError(appName, `Engine ${engine} not found`);
2213
2262
  }
2214
2263
  if (!from) {
2215
- throw new Error(`Invalid origin language ${from}`);
2264
+ throw new TranslationError(appName, `Invalid origin language ${from}`);
2216
2265
  }
2217
2266
  if (!to) {
2218
- throw new Error(`Invalid target language ${to}`);
2267
+ throw new TranslationError(appName, `Invalid target language ${to}`);
2219
2268
  }
2220
2269
  const key = `${from}:${to}:${engine}:${text}`;
2221
2270
  //3. If the cache is matched, the cache is used directly
@@ -2225,12 +2274,17 @@
2225
2274
  return engineInstance
2226
2275
  .translate(text, options)
2227
2276
  .then((translated) => {
2228
- cache.set(key, translated, cache_time);
2277
+ cache.set(key, translated, cache_time ?? this.cache_time);
2229
2278
  return translated;
2230
2279
  })
2231
2280
  .catch((e) => {
2232
- logger.error(`Translate Failed: from=${from},to=${to},engine=${engine},translate text: \n${getGapLine()}\n${text}\n${getGapLine()}\n error: ${e.message}`);
2233
- throw e;
2281
+ logger.error(`${appName} Failed: from=${from},to=${to},engine=${engine},translate text: \n${getGapLine()}\n${text}\n${getGapLine()}\n error: ${getErrorMessages(e)}`);
2282
+ if (e instanceof TranslationError) {
2283
+ throw e;
2284
+ }
2285
+ else {
2286
+ throw new TranslationError(appName, getErrorMessages(e));
2287
+ }
2234
2288
  });
2235
2289
  }
2236
2290
  }
@@ -2244,6 +2298,7 @@
2244
2298
  };
2245
2299
 
2246
2300
  exports.Cache = Cache;
2301
+ exports.TranslationError = TranslationError;
2247
2302
  exports.Translator = Translator;
2248
2303
  exports.default = index;
2249
2304
  exports.engines = engines;