ztechno_core 0.0.4 → 0.0.6

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;
@@ -1,7 +1,8 @@
1
1
  import * as mysql from 'mysql';
2
2
  export declare class ZSqlService {
3
- static init(credentials: mysql.ConnectionConfig): void;
3
+ private credentials;
4
+ constructor(credentials: mysql.ConnectionConfig);
4
5
  connect(): Promise<mysql.Connection>;
5
6
  query(sql: string, escaped?: any[]): Promise<any>;
6
- static get(): ZSqlService;
7
+ static get(credentials?: mysql.ConnectionConfig): ZSqlService;
7
8
  }
@@ -39,186 +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 creds;
173
- var ZSqlService = /** @class */ (function () {
174
- function ZSqlService() {}
175
- ZSqlService.init = function (credentials) {
176
- creds = credentials;
177
- };
178
- ZSqlService.prototype.connect = function () {
179
- return new Promise(function (resolve, reject) {
180
- var con = mysql.createConnection(creds);
181
- con.connect(function (err) {
49
+ class ZSqlService {
50
+ constructor(credentials) {
51
+ this.credentials = credentials;
52
+ }
53
+ connect() {
54
+ return new Promise((resolve, reject) => {
55
+ const con = mysql.createConnection(this.credentials);
56
+ con.connect((err) => {
182
57
  if (err) return reject(err);
183
58
  resolve(con);
184
59
  });
185
60
  });
186
- };
187
- ZSqlService.prototype.query = function (sql, escaped) {
188
- if (escaped === void 0) {
189
- escaped = [];
190
- }
191
- return __awaiter(this, void 0, void 0, function () {
192
- var con, output;
193
- return __generator(this, function (_a) {
194
- switch (_a.label) {
195
- case 0:
196
- return [4 /*yield*/, this.connect()];
197
- case 1:
198
- con = _a.sent();
199
- return [
200
- 4 /*yield*/,
201
- new Promise(function (resolve, reject) {
202
- con.query(sql, escaped, function (err, result) {
203
- if (err) return reject(err);
204
- resolve(result);
205
- });
206
- }),
207
- ];
208
- case 2:
209
- output = _a.sent();
210
- con.end(logError);
211
- return [2 /*return*/, output];
212
- }
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);
213
68
  });
214
69
  });
215
- };
216
- ZSqlService.get = function () {
70
+ con.end(logError);
71
+ return output;
72
+ }
73
+ static get(credentials) {
217
74
  if (instance == null) {
218
- instance = new ZSqlService();
75
+ instance = new ZSqlService(credentials);
219
76
  }
220
77
  return instance;
221
- };
222
- return ZSqlService;
223
- })();
78
+ }
79
+ }
224
80
  exports.ZSqlService = ZSqlService;
@@ -1,303 +1,135 @@
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 sql_service_1 = require('./sql_service');
5
+ const DomParser = require('dom-parser');
6
+ const translate = require('translate');
7
+ const htmlParser = new DomParser();
8
+ const sql = sql_service_1.ZSqlService.get();
9
+ let instance = null;
10
+ class ZTranslateService {
11
+ getLanguages() {
159
12
  return ['en', 'nl'];
160
- };
161
- ZTranslateService.prototype.getSourceLang = function () {
13
+ }
14
+ getSourceLang() {
162
15
  return 'nl';
163
- };
164
- ZTranslateService.prototype.getDefaultLang = function () {
16
+ }
17
+ getDefaultLang() {
165
18
  return 'nl';
166
- };
167
- ZTranslateService.init = function (opt) {
19
+ }
20
+ constructor() {
21
+ this.localCache = {};
22
+ this.surpressErrors = true;
23
+ this.codes = {
24
+ [`&#39`]: `'`,
25
+ [`&#34`]: `"`,
26
+ [`&#8220`]: `“`,
27
+ [`&#8221`]: `”`,
28
+ [`&#169`]: `©`,
29
+ [`&#174`]: `®`,
30
+ [`&#8364`]: `€`,
31
+ [`&#163`]: `£`,
32
+ [`&#8482`]: `™`,
33
+ };
34
+ this.getLanguages().map((lang) => (this.localCache[lang] = {}));
35
+ setInterval(() => this.clearLocalCache(), 1000 * 60 * 60); // Every Hour
36
+ }
37
+ static init(opt) {
168
38
  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();
39
+ }
40
+ getLang(cookies) {
41
+ const defaultLang = this.getDefaultLang();
42
+ const langKey = (cookies.lang || defaultLang).toLowerCase();
43
+ const langs = this.getLanguages();
174
44
  if (!langs.includes(langKey)) {
175
45
  return defaultLang;
176
46
  }
177
47
  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
- }
48
+ }
49
+ async translateText(langOrReq, text) {
50
+ const lang = typeof langOrReq === 'string' ? langOrReq : this.getLang(langOrReq.cookies);
51
+ text = text.trim();
52
+ if (text.length === 1) {
53
+ return text;
54
+ }
55
+ let replaceCount = 0;
56
+ while (text.includes('&#')) {
57
+ const codeIndexStart = text.indexOf('&#');
58
+ const first = text.substring(codeIndexStart);
59
+ const codeLength = first.indexOf('') + 1;
60
+ const code = first.substring(0, codeLength);
61
+ if (this.codes[code] === undefined) {
62
+ throw new Error(`Cant recognize character code="${code}"\n for text=${text}\n\n`);
63
+ // return text
64
+ }
65
+ text = text.substring(0, codeIndexStart) + this.codes[text] + text.substring(codeIndexStart + codeLength);
66
+ // text = text.replace(code, codes[text])
67
+ if (replaceCount++ > 1000) {
68
+ throw new Error(`Replace Count > 1000!!! character code="${code}"\n for text=${text}\n\n`);
69
+ // return text
70
+ }
71
+ }
72
+ const localCached = this.checkLocalCache(text, lang);
73
+ if (localCached !== false) {
74
+ return localCached.value;
75
+ }
76
+ const remoteCached = await this.fetch(text, lang);
77
+ if (remoteCached !== false) {
78
+ return remoteCached.value;
79
+ }
80
+ let result;
81
+ try {
82
+ result = await translate(text, {
83
+ from: this.getSourceLang(),
84
+ to: lang,
270
85
  });
271
- });
272
- };
273
- ZTranslateService.prototype.translateHtmlRec = function (lang, node, promises, skipTranslate) {
274
- var _this = this;
275
- if (skipTranslate === void 0) {
276
- skipTranslate = false;
86
+ } catch (err) {
87
+ result = '?';
88
+ }
89
+ await this.insert(text, lang, { value: result });
90
+ return result;
91
+ }
92
+ async translateHtml(html, cookies) {
93
+ const lang = this.getLang(cookies);
94
+ const defaultLang = this.getDefaultLang();
95
+ const dom = htmlParser.parseFromString(html);
96
+ const htmlNodes = dom.getElementsByTagName('html');
97
+ const mainNodes = dom.getElementsByTagName('main');
98
+ const isView = htmlNodes.length === 0;
99
+ const domNode = isView ? mainNodes[0] : htmlNodes[0];
100
+ if (lang !== defaultLang) {
101
+ const node = isView ? domNode : domNode.getElementsByTagName('body')[0];
102
+ const promises = [];
103
+ this.translateHtmlRec(lang, node, promises);
104
+ await Promise.all(promises);
277
105
  }
106
+ const output = domNode ? domNode.outerHTML : html;
107
+ return output.startsWith(`<!DOCTYPE html>`) ? output : `<!DOCTYPE html>\r\n${output}`;
108
+ }
109
+ translateHtmlRec(lang, node, promises, skipTranslate = false) {
278
110
  if (node.getAttribute('notranslate') != null) {
279
111
  skipTranslate = true;
280
112
  }
281
113
  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),
114
+ const nodeText = node;
115
+ const text = nodeText.text.replace(/[\r|\n|\r\n]+/g, ' ').replace(/\s\s+/g, ' ');
116
+ const value = text.trim();
117
+ const meta = {
118
+ prefix: genSpaces(text.length - text.trimStart().length),
119
+ suffix: genSpaces(text.length - text.trimEnd().length),
288
120
  };
289
- if (skipTranslate === true || text_1.length === 0 || !strContainsLetters(text_1)) {
290
- node.text = meta_1.prefix + text_1 + meta_1.suffix;
121
+ if (skipTranslate === true || text.length === 0 || !strContainsLetters(text)) {
122
+ node.text = meta.prefix + text + meta.suffix;
291
123
  return;
292
124
  }
293
125
  promises.push(
294
126
  this.translateText(lang, value)
295
- .then(function (translatedText) {
296
- node.text = meta_1.prefix + translatedText + meta_1.suffix;
127
+ .then((translatedText) => {
128
+ node.text = meta.prefix + translatedText + meta.suffix;
297
129
  })
298
- .catch(function (err) {
299
- node.text = text_1;
300
- if (!_this.surpressErrors) {
130
+ .catch((err) => {
131
+ node.text = text;
132
+ if (!this.surpressErrors) {
301
133
  throw err; // TODO: Find out if surpressing is better
302
134
  }
303
135
  }),
@@ -305,131 +137,92 @@ var ZTranslateService = /** @class */ (function () {
305
137
  return;
306
138
  }
307
139
  // const hasChildren = node.childNodes !== undefined
308
- for (var _i = 0, _a = node.childNodes || []; _i < _a.length; _i++) {
309
- var child = _a[_i];
140
+ for (const child of node.childNodes || []) {
310
141
  this.translateHtmlRec(lang, child, promises, skipTranslate);
311
142
  }
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);
143
+ }
144
+ async update(key, lang, data) {
145
+ return await sql.query(
146
+ `
147
+ INSERT INTO translations
148
+ (\`key\`, \`lang\`, \`value\`)
149
+ VALUES
150
+ (?, ?, ?)
151
+ ON DUPLICATE KEY UPDATE value=?
152
+ `,
153
+ [key, lang, data.value, data.value],
154
+ );
155
+ }
156
+ checkLocalCache(key, lang) {
157
+ const hasLocal = !this.localCache[lang].hasOwnProperty(key);
333
158
  return hasLocal ? false : this.localCache[lang][key];
334
- };
335
- ZTranslateService.prototype.insertLocalCache = function (key, lang, data) {
159
+ }
160
+ insertLocalCache(key, lang, data) {
336
161
  if (this.localCache[lang].hasOwnProperty(key)) {
337
162
  // console.warn(`Translations already cached!`, { key, lang, data})
338
163
  return;
339
164
  }
340
165
  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
- });
166
+ }
167
+ clearLocalCache() {
168
+ Object.keys(this.localCache).map((k) => {
169
+ this.localCache[k] = {};
385
170
  });
386
- };
387
- ZTranslateService.prototype.fetchLang = function (lang) {
388
- return sql.query('SELECT `key`, `lang`, `value`, `verified`, `created_at` FROM translations WHERE `lang`=?', [
171
+ }
172
+ async fetch(key, lang) {
173
+ const results = await sql.query(`SELECT \`value\` FROM translations WHERE \`lang\`=? AND \`key\`=?`, [lang, key]);
174
+ if (results.length > 0) {
175
+ // api.query(`UPDATE translations SET last_used=CURRENT_TIMESTAMP WHERE \`lang\`=? AND \`key\`=?`, [lang, key])
176
+ // .catch(err => console.error(err))
177
+ const { value } = results[0];
178
+ this.insertLocalCache(key, lang, { value });
179
+ return { value };
180
+ }
181
+ return false;
182
+ }
183
+ async insert(key, lang, data) {
184
+ await sql.query(`INSERT IGNORE INTO translations (\`key\`, \`lang\`, \`value\`) VALUES (?, ?, ?)`, [
185
+ key,
389
186
  lang,
187
+ data.value,
390
188
  ]);
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
- });
189
+ }
190
+ fetchLang(lang) {
191
+ return sql.query(
192
+ `SELECT \`key\`, \`lang\`, \`value\`, \`verified\`, \`created_at\` FROM translations WHERE \`lang\`=?`,
193
+ [lang],
194
+ );
195
+ }
196
+ async fetchAllGrouped() {
197
+ const output = {};
198
+ const allTranslations = await this.fetchAll();
199
+ allTranslations.map((translation) => {
200
+ const { key } = translation;
201
+ if (!output.hasOwnProperty(key)) {
202
+ output[key] = [];
203
+ }
204
+ output[key].push(translation);
412
205
  });
413
- };
414
- ZTranslateService.prototype.fetchAll = function () {
415
- return sql.query('SELECT `key`, `lang`, `value`, `verified`, `created_at` FROM translations');
416
- };
417
- ZTranslateService.get = function () {
206
+ return output;
207
+ }
208
+ fetchAll() {
209
+ return sql.query(`SELECT \`key\`, \`lang\`, \`value\`, \`verified\`, \`created_at\` FROM translations`);
210
+ }
211
+ static get() {
418
212
  if (instance == null) {
419
213
  instance = new ZTranslateService();
420
214
  }
421
215
  return instance;
422
- };
423
- return ZTranslateService;
424
- })();
216
+ }
217
+ }
425
218
  exports.ZTranslateService = ZTranslateService;
426
219
  function strContainsLetters(text) {
427
- var regExp = /[a-zA-Z]/g;
220
+ const regExp = /[a-zA-Z]/g;
428
221
  return regExp.test(text);
429
222
  }
430
223
  function genSpaces(length) {
431
- var output = '';
432
- for (var i = 0; i < length; i++) {
224
+ let output = '';
225
+ for (let i = 0; i < length; i++) {
433
226
  output += ' ';
434
227
  }
435
228
  return output;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ztechno_core",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "Core files for ztechno framework",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",