ztechno_core 0.0.5 → 0.0.7

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.
@@ -41,37 +41,35 @@ var __importStar =
41
41
  };
42
42
  Object.defineProperty(exports, '__esModule', { value: true });
43
43
  exports.ZCryptoService = void 0;
44
- var crypto = __importStar(require('crypto'));
45
- var algorithm = 'aes-256-cbc';
46
- var key = Buffer.from([
44
+ const crypto = __importStar(require('crypto'));
45
+ const algorithm = 'aes-256-cbc';
46
+ const key = Buffer.from([
47
47
  253, 144, 73, 128, 71, 94, 34, 3, 28, 128, 194, 166, 132, 154, 14, 87, 221, 202, 92, 56, 139, 10, 38, 122, 120, 7,
48
48
  149, 40, 211, 218, 217, 3,
49
49
  ]);
50
- var iv = Buffer.from([0, 209, 223, 20, 147, 45, 14, 107, 93, 6, 76, 206, 176, 55, 245, 134]);
51
- var ZCryptoService = /** @class */ (function () {
52
- function ZCryptoService() {}
53
- ZCryptoService.encrypt = function (text) {
54
- var cipher = crypto.createCipheriv(algorithm, Buffer.from(key), iv);
55
- var encrypted = cipher.update(text);
50
+ const iv = Buffer.from([0, 209, 223, 20, 147, 45, 14, 107, 93, 6, 76, 206, 176, 55, 245, 134]);
51
+ class ZCryptoService {
52
+ static encrypt(text) {
53
+ const cipher = crypto.createCipheriv(algorithm, Buffer.from(key), iv);
54
+ let encrypted = cipher.update(text);
56
55
  encrypted = Buffer.concat([encrypted, cipher.final()]);
57
56
  return { iv: iv.toString('hex'), encryptedData: encrypted.toString('hex') };
58
- };
59
- ZCryptoService.decrypt = function (data) {
60
- var niv = Buffer.from(data.iv, 'hex');
61
- var encryptedText = Buffer.from(data.encryptedData, 'hex');
62
- var decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), niv);
63
- var decrypted = decipher.update(encryptedText);
57
+ }
58
+ static decrypt(data) {
59
+ const niv = Buffer.from(data.iv, 'hex');
60
+ const encryptedText = Buffer.from(data.encryptedData, 'hex');
61
+ const decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), niv);
62
+ let decrypted = decipher.update(encryptedText);
64
63
  decrypted = Buffer.concat([decrypted, decipher.final()]);
65
64
  return decrypted.toString();
66
- };
67
- ZCryptoService.decryptJSON = function (data) {
65
+ }
66
+ static decryptJSON(data) {
68
67
  try {
69
- var decrypted = ZCryptoService.decrypt(data);
68
+ const decrypted = ZCryptoService.decrypt(data);
70
69
  return JSON.parse(decrypted);
71
70
  } catch (err) {
72
- throw new Error("Couldn't decrypt JSON ".concat(JSON.stringify(data)));
71
+ throw new Error(`Couldn't decrypt JSON ${JSON.stringify(data)}`);
73
72
  }
74
- };
75
- return ZCryptoService;
76
- })();
73
+ }
74
+ }
77
75
  exports.ZCryptoService = ZCryptoService;
package/lib/index.js CHANGED
@@ -1,28 +1,28 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, '__esModule', { value: true });
3
3
  exports.ZTranslateService = exports.ZSqlService = exports.ZMailService = exports.ZCryptoService = void 0;
4
- var crypto_service_1 = require('./crypto_service');
4
+ const crypto_service_1 = require('./crypto_service');
5
5
  Object.defineProperty(exports, 'ZCryptoService', {
6
6
  enumerable: true,
7
7
  get: function () {
8
8
  return crypto_service_1.ZCryptoService;
9
9
  },
10
10
  });
11
- var mail_service_1 = require('./mail_service');
11
+ const mail_service_1 = require('./mail_service');
12
12
  Object.defineProperty(exports, 'ZMailService', {
13
13
  enumerable: true,
14
14
  get: function () {
15
15
  return mail_service_1.ZMailService;
16
16
  },
17
17
  });
18
- var sql_service_1 = require('./sql_service');
18
+ const sql_service_1 = require('./sql_service');
19
19
  Object.defineProperty(exports, 'ZSqlService', {
20
20
  enumerable: true,
21
21
  get: function () {
22
22
  return sql_service_1.ZSqlService;
23
23
  },
24
24
  });
25
- var translate_service_1 = require('./translate_service');
25
+ const translate_service_1 = require('./translate_service');
26
26
  Object.defineProperty(exports, 'ZTranslateService', {
27
27
  enumerable: true,
28
28
  get: function () {
@@ -1,35 +1,34 @@
1
1
  'use strict';
2
2
  Object.defineProperty(exports, '__esModule', { value: true });
3
3
  exports.ZMailService = void 0;
4
- var nodemailer = require('nodemailer');
5
- var instance = null;
6
- var ZMailService = /** @class */ (function () {
7
- function ZMailService(opt) {
4
+ const nodemailer = require('nodemailer');
5
+ let instance = null;
6
+ class ZMailService {
7
+ constructor(opt) {
8
8
  this.opt = opt;
9
9
  }
10
- ZMailService.prototype.send = function (mailOpts) {
11
- var mailTransporter = nodemailer.createTransport({
10
+ send(mailOpts) {
11
+ const mailTransporter = nodemailer.createTransport({
12
12
  service: 'gmail',
13
13
  auth: this.opt.auth,
14
14
  });
15
- var mailDetails = {
15
+ const mailDetails = {
16
16
  from: this.opt.mailSender,
17
17
  to: mailOpts.recipient,
18
18
  subject: mailOpts.subject,
19
19
  text: mailOpts.body,
20
20
  };
21
- return new Promise(function (resolve, reject) {
21
+ return new Promise((resolve, reject) => {
22
22
  mailTransporter.sendMail(mailDetails, function (err, data) {
23
23
  return err ? reject(err) : resolve('success'); // data)
24
24
  });
25
25
  });
26
- };
27
- ZMailService.get = function (opt) {
26
+ }
27
+ static get(opt) {
28
28
  if (instance == null) {
29
29
  instance = new ZMailService(opt);
30
30
  }
31
31
  return instance;
32
- };
33
- return ZMailService;
34
- })();
32
+ }
33
+ }
35
34
  exports.ZMailService = ZMailService;
@@ -39,185 +39,42 @@ var __importStar =
39
39
  __setModuleDefault(result, mod);
40
40
  return result;
41
41
  };
42
- var __awaiter =
43
- (this && this.__awaiter) ||
44
- function (thisArg, _arguments, P, generator) {
45
- function adopt(value) {
46
- return value instanceof P
47
- ? value
48
- : new P(function (resolve) {
49
- resolve(value);
50
- });
51
- }
52
- return new (P || (P = Promise))(function (resolve, reject) {
53
- function fulfilled(value) {
54
- try {
55
- step(generator.next(value));
56
- } catch (e) {
57
- reject(e);
58
- }
59
- }
60
- function rejected(value) {
61
- try {
62
- step(generator['throw'](value));
63
- } catch (e) {
64
- reject(e);
65
- }
66
- }
67
- function step(result) {
68
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
69
- }
70
- step((generator = generator.apply(thisArg, _arguments || [])).next());
71
- });
72
- };
73
- var __generator =
74
- (this && this.__generator) ||
75
- function (thisArg, body) {
76
- var _ = {
77
- label: 0,
78
- sent: function () {
79
- if (t[0] & 1) throw t[1];
80
- return t[1];
81
- },
82
- trys: [],
83
- ops: [],
84
- },
85
- f,
86
- y,
87
- t,
88
- g;
89
- return (
90
- (g = { next: verb(0), throw: verb(1), return: verb(2) }),
91
- typeof Symbol === 'function' &&
92
- (g[Symbol.iterator] = function () {
93
- return this;
94
- }),
95
- g
96
- );
97
- function verb(n) {
98
- return function (v) {
99
- return step([n, v]);
100
- };
101
- }
102
- function step(op) {
103
- if (f) throw new TypeError('Generator is already executing.');
104
- while ((g && ((g = 0), op[0] && (_ = 0)), _))
105
- try {
106
- if (
107
- ((f = 1),
108
- y &&
109
- (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) &&
110
- !(t = t.call(y, op[1])).done)
111
- )
112
- return t;
113
- if (((y = 0), t)) op = [op[0] & 2, t.value];
114
- switch (op[0]) {
115
- case 0:
116
- case 1:
117
- t = op;
118
- break;
119
- case 4:
120
- _.label++;
121
- return { value: op[1], done: false };
122
- case 5:
123
- _.label++;
124
- y = op[1];
125
- op = [0];
126
- continue;
127
- case 7:
128
- op = _.ops.pop();
129
- _.trys.pop();
130
- continue;
131
- default:
132
- if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) {
133
- _ = 0;
134
- continue;
135
- }
136
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
137
- _.label = op[1];
138
- break;
139
- }
140
- if (op[0] === 6 && _.label < t[1]) {
141
- _.label = t[1];
142
- t = op;
143
- break;
144
- }
145
- if (t && _.label < t[2]) {
146
- _.label = t[2];
147
- _.ops.push(op);
148
- break;
149
- }
150
- if (t[2]) _.ops.pop();
151
- _.trys.pop();
152
- continue;
153
- }
154
- op = body.call(thisArg, _);
155
- } catch (e) {
156
- op = [6, e];
157
- y = 0;
158
- } finally {
159
- f = t = 0;
160
- }
161
- if (op[0] & 5) throw op[1];
162
- return { value: op[0] ? op[1] : void 0, done: true };
163
- }
164
- };
165
42
  Object.defineProperty(exports, '__esModule', { value: true });
166
43
  exports.ZSqlService = void 0;
167
- var mysql = __importStar(require('mysql'));
168
- var instance = null;
169
- var logError = function (err) {
44
+ const mysql = __importStar(require('mysql'));
45
+ let instance = null;
46
+ const logError = (err) => {
170
47
  if (err) throw err;
171
48
  };
172
- var ZSqlService = /** @class */ (function () {
173
- function ZSqlService(credentials) {
49
+ class ZSqlService {
50
+ constructor(credentials) {
174
51
  this.credentials = credentials;
175
52
  }
176
- ZSqlService.prototype.connect = function () {
177
- var _this = this;
178
- return new Promise(function (resolve, reject) {
179
- var con = mysql.createConnection(_this.credentials);
180
- con.connect(function (err) {
53
+ connect() {
54
+ return new Promise((resolve, reject) => {
55
+ const con = mysql.createConnection(this.credentials);
56
+ con.connect((err) => {
181
57
  if (err) return reject(err);
182
58
  resolve(con);
183
59
  });
184
60
  });
185
- };
186
- ZSqlService.prototype.query = function (sql, escaped) {
187
- if (escaped === void 0) {
188
- escaped = [];
189
- }
190
- return __awaiter(this, void 0, void 0, function () {
191
- var con, output;
192
- return __generator(this, function (_a) {
193
- switch (_a.label) {
194
- case 0:
195
- return [4 /*yield*/, this.connect()];
196
- case 1:
197
- con = _a.sent();
198
- return [
199
- 4 /*yield*/,
200
- new Promise(function (resolve, reject) {
201
- con.query(sql, escaped, function (err, result) {
202
- if (err) return reject(err);
203
- resolve(result);
204
- });
205
- }),
206
- ];
207
- case 2:
208
- output = _a.sent();
209
- con.end(logError);
210
- return [2 /*return*/, output];
211
- }
61
+ }
62
+ async query(sql, escaped = []) {
63
+ const con = await this.connect();
64
+ const output = await new Promise((resolve, reject) => {
65
+ con.query(sql, escaped, (err, result) => {
66
+ if (err) return reject(err);
67
+ resolve(result);
212
68
  });
213
69
  });
214
- };
215
- ZSqlService.get = function (credentials) {
70
+ con.end(logError);
71
+ return output;
72
+ }
73
+ static get(credentials) {
216
74
  if (instance == null) {
217
75
  instance = new ZSqlService(credentials);
218
76
  }
219
77
  return instance;
220
- };
221
- return ZSqlService;
222
- })();
78
+ }
79
+ }
223
80
  exports.ZSqlService = ZSqlService;
@@ -1,3 +1,4 @@
1
+ import { ZSqlService } from './sql_service';
1
2
  type TranslateData = {
2
3
  value: string;
3
4
  meta?: {
@@ -11,12 +12,13 @@ type dbTranslationRow = {
11
12
  value: string;
12
13
  };
13
14
  export declare class ZTranslateService {
15
+ private sql;
14
16
  private localCache;
15
17
  surpressErrors: boolean;
16
18
  getLanguages(): string[];
17
19
  getSourceLang(): string;
18
20
  getDefaultLang(): string;
19
- constructor();
21
+ constructor(sql: ZSqlService);
20
22
  static init(opt: { key: string }): void;
21
23
  private codes;
22
24
  getLang(cookies: { [key: string]: string }): string;
@@ -40,6 +42,6 @@ export declare class ZTranslateService {
40
42
  [key: string]: dbTranslationRow[];
41
43
  }>;
42
44
  private fetchAll;
43
- static get(): ZTranslateService;
45
+ static get(sqlService: ZSqlService): ZTranslateService;
44
46
  }
45
47
  export {};
@@ -1,303 +1,134 @@
1
1
  'use strict';
2
- var __awaiter =
3
- (this && this.__awaiter) ||
4
- function (thisArg, _arguments, P, generator) {
5
- function adopt(value) {
6
- return value instanceof P
7
- ? value
8
- : new P(function (resolve) {
9
- resolve(value);
10
- });
11
- }
12
- return new (P || (P = Promise))(function (resolve, reject) {
13
- function fulfilled(value) {
14
- try {
15
- step(generator.next(value));
16
- } catch (e) {
17
- reject(e);
18
- }
19
- }
20
- function rejected(value) {
21
- try {
22
- step(generator['throw'](value));
23
- } catch (e) {
24
- reject(e);
25
- }
26
- }
27
- function step(result) {
28
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
29
- }
30
- step((generator = generator.apply(thisArg, _arguments || [])).next());
31
- });
32
- };
33
- var __generator =
34
- (this && this.__generator) ||
35
- function (thisArg, body) {
36
- var _ = {
37
- label: 0,
38
- sent: function () {
39
- if (t[0] & 1) throw t[1];
40
- return t[1];
41
- },
42
- trys: [],
43
- ops: [],
44
- },
45
- f,
46
- y,
47
- t,
48
- g;
49
- return (
50
- (g = { next: verb(0), throw: verb(1), return: verb(2) }),
51
- typeof Symbol === 'function' &&
52
- (g[Symbol.iterator] = function () {
53
- return this;
54
- }),
55
- g
56
- );
57
- function verb(n) {
58
- return function (v) {
59
- return step([n, v]);
60
- };
61
- }
62
- function step(op) {
63
- if (f) throw new TypeError('Generator is already executing.');
64
- while ((g && ((g = 0), op[0] && (_ = 0)), _))
65
- try {
66
- if (
67
- ((f = 1),
68
- y &&
69
- (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) &&
70
- !(t = t.call(y, op[1])).done)
71
- )
72
- return t;
73
- if (((y = 0), t)) op = [op[0] & 2, t.value];
74
- switch (op[0]) {
75
- case 0:
76
- case 1:
77
- t = op;
78
- break;
79
- case 4:
80
- _.label++;
81
- return { value: op[1], done: false };
82
- case 5:
83
- _.label++;
84
- y = op[1];
85
- op = [0];
86
- continue;
87
- case 7:
88
- op = _.ops.pop();
89
- _.trys.pop();
90
- continue;
91
- default:
92
- if (!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2)) {
93
- _ = 0;
94
- continue;
95
- }
96
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
97
- _.label = op[1];
98
- break;
99
- }
100
- if (op[0] === 6 && _.label < t[1]) {
101
- _.label = t[1];
102
- t = op;
103
- break;
104
- }
105
- if (t && _.label < t[2]) {
106
- _.label = t[2];
107
- _.ops.push(op);
108
- break;
109
- }
110
- if (t[2]) _.ops.pop();
111
- _.trys.pop();
112
- continue;
113
- }
114
- op = body.call(thisArg, _);
115
- } catch (e) {
116
- op = [6, e];
117
- y = 0;
118
- } finally {
119
- f = t = 0;
120
- }
121
- if (op[0] & 5) throw op[1];
122
- return { value: op[0] ? op[1] : void 0, done: true };
123
- }
124
- };
125
2
  Object.defineProperty(exports, '__esModule', { value: true });
126
3
  exports.ZTranslateService = void 0;
127
- var sql_service_1 = require('./sql_service');
128
- var DomParser = require('dom-parser');
129
- var translate = require('translate');
130
- var htmlParser = new DomParser();
131
- var sql = sql_service_1.ZSqlService.get();
132
- var instance = null;
133
- var ZTranslateService = /** @class */ (function () {
134
- function ZTranslateService() {
135
- var _a;
136
- var _this = this;
137
- this.localCache = {};
138
- this.surpressErrors = true;
139
- this.codes =
140
- ((_a = {}),
141
- (_a['&#39'] = "'"),
142
- (_a['&#34'] = '"'),
143
- (_a['&#8220'] = '\u201C'),
144
- (_a['&#8221'] = '\u201D'),
145
- (_a['&#169'] = '\u00A9'),
146
- (_a['&#174'] = '\u00AE'),
147
- (_a['&#8364'] = '\u20AC'),
148
- (_a['&#163'] = '\u00A3'),
149
- (_a['&#8482'] = '\u2122'),
150
- _a);
151
- this.getLanguages().map(function (lang) {
152
- return (_this.localCache[lang] = {});
153
- });
154
- setInterval(function () {
155
- return _this.clearLocalCache();
156
- }, 1000 * 60 * 60); // Every Hour
157
- }
158
- ZTranslateService.prototype.getLanguages = function () {
4
+ const DomParser = require('dom-parser');
5
+ const translate = require('translate');
6
+ const htmlParser = new DomParser();
7
+ let instance = null;
8
+ class ZTranslateService {
9
+ getLanguages() {
159
10
  return ['en', 'nl'];
160
- };
161
- ZTranslateService.prototype.getSourceLang = function () {
11
+ }
12
+ getSourceLang() {
162
13
  return 'nl';
163
- };
164
- ZTranslateService.prototype.getDefaultLang = function () {
14
+ }
15
+ getDefaultLang() {
165
16
  return 'nl';
166
- };
167
- ZTranslateService.init = function (opt) {
17
+ }
18
+ constructor(sql) {
19
+ this.sql = sql;
20
+ this.localCache = {};
21
+ this.surpressErrors = true;
22
+ this.codes = {
23
+ [`&#39`]: `'`,
24
+ [`&#34`]: `"`,
25
+ [`&#8220`]: `“`,
26
+ [`&#8221`]: `”`,
27
+ [`&#169`]: `©`,
28
+ [`&#174`]: `®`,
29
+ [`&#8364`]: `€`,
30
+ [`&#163`]: `£`,
31
+ [`&#8482`]: `™`,
32
+ };
33
+ this.getLanguages().map((lang) => (this.localCache[lang] = {}));
34
+ setInterval(() => this.clearLocalCache(), 1000 * 60 * 60); // Every Hour
35
+ }
36
+ static init(opt) {
168
37
  translate.key = opt.key;
169
- };
170
- ZTranslateService.prototype.getLang = function (cookies) {
171
- var defaultLang = this.getDefaultLang();
172
- var langKey = (cookies.lang || defaultLang).toLowerCase();
173
- var langs = this.getLanguages();
38
+ }
39
+ getLang(cookies) {
40
+ const defaultLang = this.getDefaultLang();
41
+ const langKey = (cookies.lang || defaultLang).toLowerCase();
42
+ const langs = this.getLanguages();
174
43
  if (!langs.includes(langKey)) {
175
44
  return defaultLang;
176
45
  }
177
46
  return langKey;
178
- };
179
- ZTranslateService.prototype.translateText = function (langOrReq, text) {
180
- return __awaiter(this, void 0, void 0, function () {
181
- var lang, replaceCount, codeIndexStart, first, codeLength, code, localCached, remoteCached, result, err_1;
182
- return __generator(this, function (_a) {
183
- switch (_a.label) {
184
- case 0:
185
- lang = typeof langOrReq === 'string' ? langOrReq : this.getLang(langOrReq.cookies);
186
- text = text.trim();
187
- if (text.length === 1) {
188
- return [2 /*return*/, text];
189
- }
190
- replaceCount = 0;
191
- while (text.includes('&#')) {
192
- codeIndexStart = text.indexOf('&#');
193
- first = text.substring(codeIndexStart);
194
- codeLength = first.indexOf('') + 1;
195
- code = first.substring(0, codeLength);
196
- if (this.codes[code] === undefined) {
197
- throw new Error('Cant recognize character code="'.concat(code, '"\n for text=').concat(text, '\n\n'));
198
- // return text
199
- }
200
- text = text.substring(0, codeIndexStart) + this.codes[text] + text.substring(codeIndexStart + codeLength);
201
- // text = text.replace(code, codes[text])
202
- if (replaceCount++ > 1000) {
203
- throw new Error(
204
- 'Replace Count > 1000!!! character code="'.concat(code, '"\n for text=').concat(text, '\n\n'),
205
- );
206
- // return text
207
- }
208
- }
209
- localCached = this.checkLocalCache(text, lang);
210
- if (localCached !== false) {
211
- return [2 /*return*/, localCached.value];
212
- }
213
- return [4 /*yield*/, this.fetch(text, lang)];
214
- case 1:
215
- remoteCached = _a.sent();
216
- if (remoteCached !== false) {
217
- return [2 /*return*/, remoteCached.value];
218
- }
219
- _a.label = 2;
220
- case 2:
221
- _a.trys.push([2, 4, , 5]);
222
- return [
223
- 4 /*yield*/,
224
- translate(text, {
225
- from: this.getSourceLang(),
226
- to: lang,
227
- }),
228
- ];
229
- case 3:
230
- result = _a.sent();
231
- return [3 /*break*/, 5];
232
- case 4:
233
- err_1 = _a.sent();
234
- result = '?';
235
- return [3 /*break*/, 5];
236
- case 5:
237
- return [4 /*yield*/, this.insert(text, lang, { value: result })];
238
- case 6:
239
- _a.sent();
240
- return [2 /*return*/, result];
241
- }
242
- });
243
- });
244
- };
245
- ZTranslateService.prototype.translateHtml = function (html, cookies) {
246
- return __awaiter(this, void 0, void 0, function () {
247
- var lang, defaultLang, dom, htmlNodes, mainNodes, isView, domNode, node, promises, output;
248
- return __generator(this, function (_a) {
249
- switch (_a.label) {
250
- case 0:
251
- lang = this.getLang(cookies);
252
- defaultLang = this.getDefaultLang();
253
- dom = htmlParser.parseFromString(html);
254
- htmlNodes = dom.getElementsByTagName('html');
255
- mainNodes = dom.getElementsByTagName('main');
256
- isView = htmlNodes.length === 0;
257
- domNode = isView ? mainNodes[0] : htmlNodes[0];
258
- if (!(lang !== defaultLang)) return [3 /*break*/, 2];
259
- node = isView ? domNode : domNode.getElementsByTagName('body')[0];
260
- promises = [];
261
- this.translateHtmlRec(lang, node, promises);
262
- return [4 /*yield*/, Promise.all(promises)];
263
- case 1:
264
- _a.sent();
265
- _a.label = 2;
266
- case 2:
267
- output = domNode ? domNode.outerHTML : html;
268
- return [2 /*return*/, output.startsWith('<!DOCTYPE html>') ? output : '<!DOCTYPE html>\r\n'.concat(output)];
269
- }
47
+ }
48
+ async translateText(langOrReq, text) {
49
+ const lang = typeof langOrReq === 'string' ? langOrReq : this.getLang(langOrReq.cookies);
50
+ text = text.trim();
51
+ if (text.length === 1) {
52
+ return text;
53
+ }
54
+ let replaceCount = 0;
55
+ while (text.includes('&#')) {
56
+ const codeIndexStart = text.indexOf('&#');
57
+ const first = text.substring(codeIndexStart);
58
+ const codeLength = first.indexOf('') + 1;
59
+ const code = first.substring(0, codeLength);
60
+ if (this.codes[code] === undefined) {
61
+ throw new Error(`Cant recognize character code="${code}"\n for text=${text}\n\n`);
62
+ // return text
63
+ }
64
+ text = text.substring(0, codeIndexStart) + this.codes[text] + text.substring(codeIndexStart + codeLength);
65
+ // text = text.replace(code, codes[text])
66
+ if (replaceCount++ > 1000) {
67
+ throw new Error(`Replace Count > 1000!!! character code="${code}"\n for text=${text}\n\n`);
68
+ // return text
69
+ }
70
+ }
71
+ const localCached = this.checkLocalCache(text, lang);
72
+ if (localCached !== false) {
73
+ return localCached.value;
74
+ }
75
+ const remoteCached = await this.fetch(text, lang);
76
+ if (remoteCached !== false) {
77
+ return remoteCached.value;
78
+ }
79
+ let result;
80
+ try {
81
+ result = await translate(text, {
82
+ from: this.getSourceLang(),
83
+ to: lang,
270
84
  });
271
- });
272
- };
273
- ZTranslateService.prototype.translateHtmlRec = function (lang, node, promises, skipTranslate) {
274
- var _this = this;
275
- if (skipTranslate === void 0) {
276
- skipTranslate = false;
85
+ } catch (err) {
86
+ result = '?';
87
+ }
88
+ await this.insert(text, lang, { value: result });
89
+ return result;
90
+ }
91
+ async translateHtml(html, cookies) {
92
+ const lang = this.getLang(cookies);
93
+ const defaultLang = this.getDefaultLang();
94
+ const dom = htmlParser.parseFromString(html);
95
+ const htmlNodes = dom.getElementsByTagName('html');
96
+ const mainNodes = dom.getElementsByTagName('main');
97
+ const isView = htmlNodes.length === 0;
98
+ const domNode = isView ? mainNodes[0] : htmlNodes[0];
99
+ if (lang !== defaultLang) {
100
+ const node = isView ? domNode : domNode.getElementsByTagName('body')[0];
101
+ const promises = [];
102
+ this.translateHtmlRec(lang, node, promises);
103
+ await Promise.all(promises);
277
104
  }
105
+ const output = domNode ? domNode.outerHTML : html;
106
+ return output.startsWith(`<!DOCTYPE html>`) ? output : `<!DOCTYPE html>\r\n${output}`;
107
+ }
108
+ translateHtmlRec(lang, node, promises, skipTranslate = false) {
278
109
  if (node.getAttribute('notranslate') != null) {
279
110
  skipTranslate = true;
280
111
  }
281
112
  if (node.nodeName === '#text') {
282
- var nodeText = node;
283
- var text_1 = nodeText.text.replace(/[\r|\n|\r\n]+/g, ' ').replace(/\s\s+/g, ' ');
284
- var value = text_1.trim();
285
- var meta_1 = {
286
- prefix: genSpaces(text_1.length - text_1.trimStart().length),
287
- suffix: genSpaces(text_1.length - text_1.trimEnd().length),
113
+ const nodeText = node;
114
+ const text = nodeText.text.replace(/[\r|\n|\r\n]+/g, ' ').replace(/\s\s+/g, ' ');
115
+ const value = text.trim();
116
+ const meta = {
117
+ prefix: genSpaces(text.length - text.trimStart().length),
118
+ suffix: genSpaces(text.length - text.trimEnd().length),
288
119
  };
289
- if (skipTranslate === true || text_1.length === 0 || !strContainsLetters(text_1)) {
290
- node.text = meta_1.prefix + text_1 + meta_1.suffix;
120
+ if (skipTranslate === true || text.length === 0 || !strContainsLetters(text)) {
121
+ node.text = meta.prefix + text + meta.suffix;
291
122
  return;
292
123
  }
293
124
  promises.push(
294
125
  this.translateText(lang, value)
295
- .then(function (translatedText) {
296
- node.text = meta_1.prefix + translatedText + meta_1.suffix;
126
+ .then((translatedText) => {
127
+ node.text = meta.prefix + translatedText + meta.suffix;
297
128
  })
298
- .catch(function (err) {
299
- node.text = text_1;
300
- if (!_this.surpressErrors) {
129
+ .catch((err) => {
130
+ node.text = text;
131
+ if (!this.surpressErrors) {
301
132
  throw err; // TODO: Find out if surpressing is better
302
133
  }
303
134
  }),
@@ -305,131 +136,95 @@ var ZTranslateService = /** @class */ (function () {
305
136
  return;
306
137
  }
307
138
  // const hasChildren = node.childNodes !== undefined
308
- for (var _i = 0, _a = node.childNodes || []; _i < _a.length; _i++) {
309
- var child = _a[_i];
139
+ for (const child of node.childNodes || []) {
310
140
  this.translateHtmlRec(lang, child, promises, skipTranslate);
311
141
  }
312
- };
313
- ZTranslateService.prototype.update = function (key, lang, data) {
314
- return __awaiter(this, void 0, void 0, function () {
315
- return __generator(this, function (_a) {
316
- switch (_a.label) {
317
- case 0:
318
- return [
319
- 4 /*yield*/,
320
- sql.query(
321
- '\n INSERT INTO translations\n (`key`, `lang`, `value`)\n VALUES\n (?, ?, ?)\n ON DUPLICATE KEY UPDATE value=?\n ',
322
- [key, lang, data.value, data.value],
323
- ),
324
- ];
325
- case 1:
326
- return [2 /*return*/, _a.sent()];
327
- }
328
- });
329
- });
330
- };
331
- ZTranslateService.prototype.checkLocalCache = function (key, lang) {
332
- var hasLocal = !this.localCache[lang].hasOwnProperty(key);
142
+ }
143
+ async update(key, lang, data) {
144
+ return await this.sql.query(
145
+ `
146
+ INSERT INTO translations
147
+ (\`key\`, \`lang\`, \`value\`)
148
+ VALUES
149
+ (?, ?, ?)
150
+ ON DUPLICATE KEY UPDATE value=?
151
+ `,
152
+ [key, lang, data.value, data.value],
153
+ );
154
+ }
155
+ checkLocalCache(key, lang) {
156
+ const hasLocal = !this.localCache[lang].hasOwnProperty(key);
333
157
  return hasLocal ? false : this.localCache[lang][key];
334
- };
335
- ZTranslateService.prototype.insertLocalCache = function (key, lang, data) {
158
+ }
159
+ insertLocalCache(key, lang, data) {
336
160
  if (this.localCache[lang].hasOwnProperty(key)) {
337
161
  // console.warn(`Translations already cached!`, { key, lang, data})
338
162
  return;
339
163
  }
340
164
  this.localCache[lang][key] = data;
341
- };
342
- ZTranslateService.prototype.clearLocalCache = function () {
343
- var _this = this;
344
- Object.keys(this.localCache).map(function (k) {
345
- _this.localCache[k] = {};
346
- });
347
- };
348
- ZTranslateService.prototype.fetch = function (key, lang) {
349
- return __awaiter(this, void 0, void 0, function () {
350
- var results, value;
351
- return __generator(this, function (_a) {
352
- switch (_a.label) {
353
- case 0:
354
- return [4 /*yield*/, sql.query('SELECT `value` FROM translations WHERE `lang`=? AND `key`=?', [lang, key])];
355
- case 1:
356
- results = _a.sent();
357
- if (results.length > 0) {
358
- value = results[0].value;
359
- this.insertLocalCache(key, lang, { value: value });
360
- return [2 /*return*/, { value: value }];
361
- }
362
- return [2 /*return*/, false];
363
- }
364
- });
365
- });
366
- };
367
- ZTranslateService.prototype.insert = function (key, lang, data) {
368
- return __awaiter(this, void 0, void 0, function () {
369
- return __generator(this, function (_a) {
370
- switch (_a.label) {
371
- case 0:
372
- return [
373
- 4 /*yield*/,
374
- sql.query('INSERT IGNORE INTO translations (`key`, `lang`, `value`) VALUES (?, ?, ?)', [
375
- key,
376
- lang,
377
- data.value,
378
- ]),
379
- ];
380
- case 1:
381
- _a.sent();
382
- return [2 /*return*/];
383
- }
384
- });
165
+ }
166
+ clearLocalCache() {
167
+ Object.keys(this.localCache).map((k) => {
168
+ this.localCache[k] = {};
385
169
  });
386
- };
387
- ZTranslateService.prototype.fetchLang = function (lang) {
388
- return sql.query('SELECT `key`, `lang`, `value`, `verified`, `created_at` FROM translations WHERE `lang`=?', [
170
+ }
171
+ async fetch(key, lang) {
172
+ const results = await this.sql.query(`SELECT \`value\` FROM translations WHERE \`lang\`=? AND \`key\`=?`, [
389
173
  lang,
174
+ key,
390
175
  ]);
391
- };
392
- ZTranslateService.prototype.fetchAllGrouped = function () {
393
- return __awaiter(this, void 0, void 0, function () {
394
- var output, allTranslations;
395
- return __generator(this, function (_a) {
396
- switch (_a.label) {
397
- case 0:
398
- output = {};
399
- return [4 /*yield*/, this.fetchAll()];
400
- case 1:
401
- allTranslations = _a.sent();
402
- allTranslations.map(function (translation) {
403
- var key = translation.key;
404
- if (!output.hasOwnProperty(key)) {
405
- output[key] = [];
406
- }
407
- output[key].push(translation);
408
- });
409
- return [2 /*return*/, output];
410
- }
411
- });
176
+ if (results.length > 0) {
177
+ // api.query(`UPDATE translations SET last_used=CURRENT_TIMESTAMP WHERE \`lang\`=? AND \`key\`=?`, [lang, key])
178
+ // .catch(err => console.error(err))
179
+ const { value } = results[0];
180
+ this.insertLocalCache(key, lang, { value });
181
+ return { value };
182
+ }
183
+ return false;
184
+ }
185
+ async insert(key, lang, data) {
186
+ await this.sql.query(`INSERT IGNORE INTO translations (\`key\`, \`lang\`, \`value\`) VALUES (?, ?, ?)`, [
187
+ key,
188
+ lang,
189
+ data.value,
190
+ ]);
191
+ }
192
+ fetchLang(lang) {
193
+ return this.sql.query(
194
+ `SELECT \`key\`, \`lang\`, \`value\`, \`verified\`, \`created_at\` FROM translations WHERE \`lang\`=?`,
195
+ [lang],
196
+ );
197
+ }
198
+ async fetchAllGrouped() {
199
+ const output = {};
200
+ const allTranslations = await this.fetchAll();
201
+ allTranslations.map((translation) => {
202
+ const { key } = translation;
203
+ if (!output.hasOwnProperty(key)) {
204
+ output[key] = [];
205
+ }
206
+ output[key].push(translation);
412
207
  });
413
- };
414
- ZTranslateService.prototype.fetchAll = function () {
415
- return sql.query('SELECT `key`, `lang`, `value`, `verified`, `created_at` FROM translations');
416
- };
417
- ZTranslateService.get = function () {
208
+ return output;
209
+ }
210
+ fetchAll() {
211
+ return this.sql.query(`SELECT \`key\`, \`lang\`, \`value\`, \`verified\`, \`created_at\` FROM translations`);
212
+ }
213
+ static get(sqlService) {
418
214
  if (instance == null) {
419
- instance = new ZTranslateService();
215
+ instance = new ZTranslateService(sqlService);
420
216
  }
421
217
  return instance;
422
- };
423
- return ZTranslateService;
424
- })();
218
+ }
219
+ }
425
220
  exports.ZTranslateService = ZTranslateService;
426
221
  function strContainsLetters(text) {
427
- var regExp = /[a-zA-Z]/g;
222
+ const regExp = /[a-zA-Z]/g;
428
223
  return regExp.test(text);
429
224
  }
430
225
  function genSpaces(length) {
431
- var output = '';
432
- for (var i = 0; i < length; i++) {
226
+ let output = '';
227
+ for (let i = 0; i < length; i++) {
433
228
  output += ' ';
434
229
  }
435
230
  return output;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ztechno_core",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "Core files for ztechno framework",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -17,7 +17,8 @@
17
17
  "lint": "tslint -p tsconfig.json",
18
18
  "preversion": "npm run lint",
19
19
  "version": "npm run format && git add -A src",
20
- "postversion": "git push && git push --tags"
20
+ "postversion": "git push && git push --tags",
21
+ "update": "npm run build && npm version patch && npm publish"
21
22
  },
22
23
  "keywords": [
23
24
  "ztechno",