query-core 0.1.11 → 0.1.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.
package/lib/health.js ADDED
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ var Checker = (function () {
40
+ function Checker(select, query, service, timeout) {
41
+ this.select = select;
42
+ this.query = query;
43
+ this.timeout = (timeout ? timeout : 4200);
44
+ this.service = (service ? service : 'sql');
45
+ this.check = this.check.bind(this);
46
+ this.name = this.name.bind(this);
47
+ this.build = this.build.bind(this);
48
+ }
49
+ Checker.prototype.check = function () {
50
+ return __awaiter(this, void 0, void 0, function () {
51
+ var obj, promise;
52
+ return __generator(this, function (_a) {
53
+ obj = {};
54
+ promise = this.select(this.query).then(function (r) { return obj; });
55
+ if (this.timeout > 0) {
56
+ return [2, promiseTimeOut(this.timeout, promise)];
57
+ }
58
+ else {
59
+ return [2, promise];
60
+ }
61
+ return [2];
62
+ });
63
+ });
64
+ };
65
+ Checker.prototype.name = function () {
66
+ return this.service;
67
+ };
68
+ Checker.prototype.build = function (data, err) {
69
+ if (err) {
70
+ if (!data) {
71
+ data = {};
72
+ }
73
+ data['error'] = err;
74
+ }
75
+ return data;
76
+ };
77
+ return Checker;
78
+ }());
79
+ exports.Checker = Checker;
80
+ function promiseTimeOut(timeoutInMilliseconds, promise) {
81
+ return Promise.race([
82
+ promise,
83
+ new Promise(function (resolve, reject) {
84
+ setTimeout(function () {
85
+ reject("Timed out in: " + timeoutInMilliseconds + " milliseconds!");
86
+ }, timeoutInMilliseconds);
87
+ })
88
+ ]);
89
+ }
90
+ exports.driverMap = {
91
+ 'oracle': 'SELECT SYSDATE FROM DUAL',
92
+ 'postgres': 'select now()',
93
+ 'mssql': 'select getdate()',
94
+ 'mysql': 'select current_time',
95
+ 'sqlite': 'select date()'
96
+ };
97
+ function createChecker(query, sql, service, timeout) {
98
+ if (typeof query === 'function') {
99
+ if (!sql) {
100
+ sql = 'select getdate()';
101
+ }
102
+ return new Checker(query, sql, service, timeout);
103
+ }
104
+ else {
105
+ var db = query;
106
+ var s = exports.driverMap[db.driver];
107
+ if (!s) {
108
+ s = 'select getdate()';
109
+ }
110
+ if (!service) {
111
+ service = db.driver;
112
+ }
113
+ return new Checker(db.query, s, service, timeout);
114
+ }
115
+ }
116
+ exports.createChecker = createChecker;
package/lib/index.js CHANGED
@@ -3,13 +3,9 @@ function __export(m) {
3
3
  for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
4
4
  }
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ var health_1 = require("./health");
7
+ exports.SqlChecker = health_1.Checker;
6
8
  var services_1 = require("./services");
7
- exports.createGenericSearchRepository = services_1.createSqlSearchWriter;
8
- exports.createGenericSearchService = services_1.createSqlSearchWriter;
9
- exports.createRepository = services_1.createSqlSearchWriter;
10
- exports.createService = services_1.createSqlSearchWriter;
11
- exports.createGenericRepository = services_1.createSqlWriter;
12
- exports.createGenericService = services_1.createSqlWriter;
13
9
  exports.SqlLoadRepository = services_1.SqlLoader;
14
10
  exports.SqlViewRepository = services_1.SqlLoader;
15
11
  exports.SqlLoadService = services_1.SqlLoader;
@@ -26,10 +22,11 @@ exports.GenericSearchRepository = services_1.SqlSearchWriter;
26
22
  exports.GenericSearchService = services_1.SqlSearchWriter;
27
23
  exports.SqlRepository = services_1.SqlSearchWriter;
28
24
  exports.SqlService = services_1.SqlSearchWriter;
29
- exports.Repository = services_1.SqlSearchWriter;
30
25
  exports.Service = services_1.SqlSearchWriter;
31
26
  exports.SqlGenericRepository = services_1.SqlWriter;
27
+ exports.Repository = services_1.SqlWriter;
32
28
  exports.SqlGenericService = services_1.SqlWriter;
29
+ __export(require("./health"));
33
30
  __export(require("./build"));
34
31
  __export(require("./services"));
35
32
  __export(require("./batch"));
package/lib/services.js CHANGED
@@ -91,18 +91,14 @@ var SqlSearchLoader = (function (_super) {
91
91
  return SqlSearchLoader;
92
92
  }(SqlLoader));
93
93
  exports.SqlSearchLoader = SqlSearchLoader;
94
- function createSqlWriter(table, manager, attrs, buildParam, toDB, fromDB) {
95
- var writer = new SqlWriter(table, manager.query, manager.exec, attrs, buildParam, toDB, fromDB);
96
- return writer;
97
- }
98
- exports.createSqlWriter = createSqlWriter;
99
94
  var SqlWriter = (function (_super) {
100
95
  __extends(SqlWriter, _super);
101
- function SqlWriter(table, query, exec, attrs, buildParam, toDB, fromDB) {
102
- var _this = _super.call(this, table, query, attrs, buildParam, fromDB) || this;
103
- _this.exec = exec;
96
+ function SqlWriter(manager, table, attrs, toDB, fromDB) {
97
+ var _this = _super.call(this, table, manager.query, attrs, manager.param, fromDB) || this;
104
98
  _this.toDB = toDB;
105
99
  var x = build_1.version(attrs);
100
+ _this.exec = manager.exec;
101
+ _this.execBatch = manager.execBatch;
106
102
  if (x) {
107
103
  _this.version = x.name;
108
104
  }
@@ -162,8 +158,8 @@ var SqlWriter = (function (_super) {
162
158
  exports.SqlWriter = SqlWriter;
163
159
  var SqlSearchWriter = (function (_super) {
164
160
  __extends(SqlSearchWriter, _super);
165
- function SqlSearchWriter(find, table, query, exec, attrs, buildParam, toDB, fromDB) {
166
- var _this = _super.call(this, table, query, exec, attrs, buildParam, toDB, fromDB) || this;
161
+ function SqlSearchWriter(find, manager, table, attrs, toDB, fromDB) {
162
+ var _this = _super.call(this, manager, table, attrs, toDB, fromDB) || this;
167
163
  _this.find = find;
168
164
  _this.search = _this.search.bind(_this);
169
165
  return _this;
@@ -174,8 +170,3 @@ var SqlSearchWriter = (function (_super) {
174
170
  return SqlSearchWriter;
175
171
  }(SqlWriter));
176
172
  exports.SqlSearchWriter = SqlSearchWriter;
177
- function createSqlSearchWriter(find, table, manager, attrs, buildParam, toDB, fromDB) {
178
- var writer = new SqlSearchWriter(find, table, manager.query, manager.exec, attrs, buildParam, toDB, fromDB);
179
- return writer;
180
- }
181
- exports.createSqlSearchWriter = createSqlSearchWriter;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "query-core",
3
- "version": "0.1.11",
3
+ "version": "0.1.15",
4
4
  "description": "query",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./src/index.ts",
@@ -21,6 +21,7 @@
21
21
  },
22
22
  "keywords": [
23
23
  "query",
24
+ "query-core",
24
25
  "sql"
25
26
  ]
26
27
  }
package/src/health.ts ADDED
@@ -0,0 +1,78 @@
1
+ import {StringMap} from './metadata';
2
+
3
+ export interface SimpleDB {
4
+ driver: string;
5
+ query<T>(sql: string): Promise<T[]>;
6
+ }
7
+ export interface AnyMap {
8
+ [key: string]: any;
9
+ }
10
+ export class Checker {
11
+ timeout: number;
12
+ service: string;
13
+ constructor(public select: (sql: string) => Promise<any[]>, public query: string, service?: string, timeout?: number) {
14
+ this.timeout = (timeout ? timeout : 4200);
15
+ this.service = (service ? service : 'sql');
16
+ this.check = this.check.bind(this);
17
+ this.name = this.name.bind(this);
18
+ this.build = this.build.bind(this);
19
+ }
20
+ async check(): Promise<AnyMap> {
21
+ const obj = {} as AnyMap;
22
+ const promise = this.select(this.query).then(r => obj);
23
+ if (this.timeout > 0) {
24
+ return promiseTimeOut(this.timeout, promise);
25
+ } else {
26
+ return promise;
27
+ }
28
+ }
29
+ name(): string {
30
+ return this.service;
31
+ }
32
+ build(data: AnyMap, err: any): AnyMap {
33
+ if (err) {
34
+ if (!data) {
35
+ data = {} as AnyMap;
36
+ }
37
+ data['error'] = err;
38
+ }
39
+ return data;
40
+ }
41
+ }
42
+
43
+ function promiseTimeOut(timeoutInMilliseconds: number, promise: Promise<any>): Promise<any> {
44
+ return Promise.race([
45
+ promise,
46
+ new Promise((resolve, reject) => {
47
+ setTimeout(() => {
48
+ reject(`Timed out in: ${timeoutInMilliseconds} milliseconds!`);
49
+ }, timeoutInMilliseconds);
50
+ })
51
+ ]);
52
+ }
53
+
54
+ export const driverMap: StringMap = {
55
+ 'oracle': 'SELECT SYSDATE FROM DUAL',
56
+ 'postgres': 'select now()',
57
+ 'mssql': 'select getdate()',
58
+ 'mysql': 'select current_time',
59
+ 'sqlite': 'select date()'
60
+ };
61
+ export function createChecker(query: SimpleDB|((sql: string) => Promise<any[]>), sql?: string, service?: string, timeout?: number): Checker {
62
+ if (typeof query === 'function') {
63
+ if (!sql) {
64
+ sql = 'select getdate()';
65
+ }
66
+ return new Checker(query, sql, service, timeout);
67
+ } else {
68
+ const db = query as SimpleDB;
69
+ let s = driverMap[db.driver];
70
+ if (!s) {
71
+ s = 'select getdate()';
72
+ }
73
+ if (!service) {
74
+ service = db.driver;
75
+ }
76
+ return new Checker(db.query, s, service, timeout);
77
+ }
78
+ }
package/src/index.ts CHANGED
@@ -1,8 +1,12 @@
1
+ import {Checker} from './health';
2
+ export {Checker as SqlChecker};
3
+
1
4
  import {Attribute, StringMap} from './metadata';
2
- import {createSqlSearchWriter, createSqlWriter, SqlLoader, SqlSearchLoader, SqlSearchWriter, SqlWriter} from './services';
5
+ import {SqlLoader, SqlSearchLoader, SqlSearchWriter, SqlWriter} from './services';
3
6
  export {SqlLoader as SqlLoadRepository};
4
7
  export {SqlLoader as SqlViewRepository};
5
8
  export {SqlWriter as SqlGenericRepository};
9
+ export {SqlWriter as Repository};
6
10
 
7
11
  export {SqlLoader as SqlLoadService};
8
12
  export {SqlLoader as SqlViewService};
@@ -21,16 +25,10 @@ export {SqlSearchWriter as GenericSearchRepository};
21
25
  export {SqlSearchWriter as GenericSearchService};
22
26
  export {SqlSearchWriter as SqlRepository};
23
27
  export {SqlSearchWriter as SqlService};
24
- export {SqlSearchWriter as Repository};
25
28
  export {SqlSearchWriter as Service};
26
- export {createSqlWriter as createGenericRepository};
27
- export {createSqlWriter as createGenericService};
28
- export {createSqlSearchWriter as createGenericSearchRepository};
29
- export {createSqlSearchWriter as createGenericSearchService};
30
- export {createSqlSearchWriter as createRepository};
31
- export {createSqlSearchWriter as createService};
32
29
 
33
30
  export * from './metadata';
31
+ export * from './health';
34
32
  export * from './build';
35
33
  export * from './services';
36
34
  export * from './batch';
package/src/services.ts CHANGED
@@ -15,8 +15,8 @@ export class SqlLoader<T, ID> {
15
15
  constructor(public table: string,
16
16
  public query: (sql: string, args?: any[], m?: StringMap, bools?: Attribute[], ctx?: any) => Promise<T[]>,
17
17
  attrs: Attributes|string[],
18
- protected param: (i: number) => string,
19
- protected fromDB?: (v: T) => T) {
18
+ public param: (i: number) => string,
19
+ public fromDB?: (v: T) => T) {
20
20
  if (Array.isArray(attrs)) {
21
21
  this.primaryKeys = attributes(attrs);
22
22
  this.attributes = {} as any;
@@ -85,31 +85,31 @@ export class SqlSearchLoader<T, ID, S extends Filter> extends SqlLoader<T, ID> {
85
85
  }
86
86
  }
87
87
  export interface Manager {
88
+ driver: string;
89
+ param(i: number): string;
88
90
  exec(sql: string, args?: any[], ctx?: any): Promise<number>;
89
91
  execBatch(statements: Statement[], firstSuccess?: boolean, ctx?: any): Promise<number>;
90
92
  query<T>(sql: string, args?: any[], m?: StringMap, bools?: Attribute[], ctx?: any): Promise<T[]>;
91
93
  }
92
- export function createSqlWriter<T, ID>(table: string,
93
- manager: Manager,
94
- attrs: Attributes,
95
- buildParam: (i: number) => string,
96
- toDB?: (v: T) => T,
97
- fromDB?: (v: T) => T) {
98
- const writer = new SqlWriter<T, ID>(table, manager.query, manager.exec, attrs, buildParam, toDB, fromDB);
99
- return writer;
94
+ export interface DB {
95
+ driver: string;
96
+ param(i: number): string;
97
+ exec(sql: string, args?: any[], ctx?: any): Promise<number>;
98
+ execBatch(statements: Statement[], firstSuccess?: boolean, ctx?: any): Promise<number>;
99
+ query<T>(sql: string, args?: any[], m?: StringMap, bools?: Attribute[], ctx?: any): Promise<T[]>;
100
100
  }
101
-
102
101
  export class SqlWriter<T, ID> extends SqlLoader<T, ID> {
103
102
  version?: string;
104
- constructor(table: string,
105
- query: (sql: string, args?: any[], m?: StringMap, ctx?: any) => Promise<T[]>,
106
- public exec: (sql: string, args?: any[], ctx?: any) => Promise<number>,
103
+ exec: (sql: string, args?: any[], ctx?: any) => Promise<number>;
104
+ execBatch: (statements: Statement[], firstSuccess?: boolean, ctx?: any) => Promise<number>;
105
+ constructor(manager: Manager, table: string,
107
106
  attrs: Attributes,
108
- buildParam: (i: number) => string,
109
- protected toDB?: (v: T) => T,
107
+ public toDB?: (v: T) => T,
110
108
  fromDB?: (v: T) => T) {
111
- super(table, query, attrs, buildParam, fromDB);
109
+ super(table, manager.query, attrs, manager.param, fromDB);
112
110
  const x = version(attrs);
111
+ this.exec = manager.exec;
112
+ this.execBatch = manager.execBatch;
113
113
  if (x) {
114
114
  this.version = x.name;
115
115
  }
@@ -163,28 +163,15 @@ export class SqlWriter<T, ID> extends SqlLoader<T, ID> {
163
163
  export class SqlSearchWriter<T, ID, S extends Filter> extends SqlWriter<T, ID> {
164
164
  constructor(
165
165
  protected find: (s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>,
166
+ manager: Manager,
166
167
  table: string,
167
- query: (sql: string, args?: any[], m?: StringMap, ctx?: any) => Promise<T[]>,
168
- exec: (sql: string, args?: any[], ctx?: any) => Promise<number>,
169
168
  attrs: Attributes,
170
- buildParam: (i: number) => string,
171
169
  toDB?: (v: T) => T,
172
170
  fromDB?: (v: T) => T) {
173
- super(table, query, exec, attrs, buildParam, toDB, fromDB);
171
+ super(manager, table, attrs, toDB, fromDB);
174
172
  this.search = this.search.bind(this);
175
173
  }
176
174
  search(s: S, limit?: number, offset?: number|string, fields?: string[]): Promise<SearchResult<T>> {
177
175
  return this.find(s, limit, offset, fields);
178
176
  }
179
177
  }
180
- export function createSqlSearchWriter<T, ID, S extends Filter>(
181
- find: (s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>,
182
- table: string,
183
- manager: Manager,
184
- attrs: Attributes,
185
- buildParam: (i: number) => string,
186
- toDB?: (v: T) => T,
187
- fromDB?: (v: T) => T) {
188
- const writer = new SqlSearchWriter<T, ID, S>(find, table, manager.query, manager.exec, attrs, buildParam, toDB, fromDB);
189
- return writer;
190
- }