ztechno_core 0.0.12 → 0.0.14

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,8 +1,16 @@
1
1
  import * as mysql from 'mysql';
2
+ type ZOnErrorCallback = (err: mysql.MysqlError) => any;
3
+ type ZOnLogCallback = (log: string) => any;
2
4
  export declare class ZSqlService {
3
- private credentials;
4
- constructor(credentials: mysql.ConnectionConfig);
5
- connect(): Promise<mysql.Connection>;
5
+ private pool;
6
+ private defaultPoolconfig;
7
+ private listeners;
8
+ constructor(options: mysql.PoolConfig);
9
+ on(eventName: 'err', listener: ZOnErrorCallback): any;
10
+ on(eventName: 'log', listener: ZOnLogCallback): any;
11
+ private triggerEvent;
12
+ private getPoolConnection;
6
13
  query(sql: string, escaped?: any[]): Promise<any>;
7
- static get(credentials?: mysql.ConnectionConfig): ZSqlService;
14
+ static get(options: mysql.PoolConfig): ZSqlService;
8
15
  }
16
+ export {};
@@ -43,36 +43,60 @@ Object.defineProperty(exports, '__esModule', { value: true });
43
43
  exports.ZSqlService = void 0;
44
44
  const mysql = __importStar(require('mysql'));
45
45
  let instance = null;
46
- const logError = (err) => {
47
- if (err) throw err;
48
- };
49
46
  class ZSqlService {
50
- constructor(credentials) {
51
- this.credentials = credentials;
47
+ constructor(options) {
48
+ this.defaultPoolconfig = {
49
+ connectionLimit: 10,
50
+ timeout: 20000,
51
+ connectTimeout: 20000,
52
+ acquireTimeout: 20000,
53
+ };
54
+ this.listeners = { err: [], log: [] };
55
+ this.pool = mysql.createPool(Object.assign({}, this.defaultPoolconfig, options));
56
+ this.pool.on('connection', (connection) => {
57
+ connection.on('error', (err) => {
58
+ this.triggerEvent('err', err);
59
+ });
60
+ connection.on('close', (err) => {
61
+ this.triggerEvent('err', err);
62
+ });
63
+ });
64
+ }
65
+ on(eventName, listener) {
66
+ if (!this.listeners.hasOwnProperty(eventName))
67
+ throw new Error(`EventName not supported for ZSqlService.on(${eventName}, ...)`);
68
+ this.listeners[eventName].push(listener);
69
+ }
70
+ triggerEvent(eventName, args) {
71
+ this.listeners[eventName].map((listener) => {
72
+ listener.apply(undefined, args);
73
+ });
52
74
  }
53
- connect() {
75
+ getPoolConnection() {
54
76
  return new Promise((resolve, reject) => {
55
- const con = mysql.createConnection(this.credentials);
56
- con.connect((err) => {
57
- if (err) return reject(err);
58
- resolve(con);
59
- });
77
+ this.pool.getConnection((err, con) => (err ? reject(err) : resolve(con)));
60
78
  });
61
79
  }
62
80
  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);
68
- });
69
- });
70
- con.end(logError);
71
- return output;
81
+ try {
82
+ const con = await this.getPoolConnection();
83
+ try {
84
+ const output = await new Promise((resolve, reject) => {
85
+ con.query(sql, escaped, (err, result) => (err ? reject(err) : resolve(result)));
86
+ });
87
+ con.release();
88
+ return output;
89
+ } catch (err) {
90
+ con.release();
91
+ throw err;
92
+ }
93
+ } catch (err) {
94
+ throw err;
95
+ }
72
96
  }
73
- static get(credentials) {
97
+ static get(options) {
74
98
  if (instance == null) {
75
- instance = new ZSqlService(credentials);
99
+ instance = new ZSqlService(options);
76
100
  }
77
101
  return instance;
78
102
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ztechno_core",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Core files for ztechno framework",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",