query-core 0.1.13 → 0.1.17

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,6 +3,8 @@ 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
9
  exports.SqlLoadRepository = services_1.SqlLoader;
8
10
  exports.SqlViewRepository = services_1.SqlLoader;
@@ -20,10 +22,11 @@ exports.GenericSearchRepository = services_1.SqlSearchWriter;
20
22
  exports.GenericSearchService = services_1.SqlSearchWriter;
21
23
  exports.SqlRepository = services_1.SqlSearchWriter;
22
24
  exports.SqlService = services_1.SqlSearchWriter;
23
- exports.Repository = services_1.SqlSearchWriter;
24
25
  exports.Service = services_1.SqlSearchWriter;
25
26
  exports.SqlGenericRepository = services_1.SqlWriter;
27
+ exports.Repository = services_1.SqlWriter;
26
28
  exports.SqlGenericService = services_1.SqlWriter;
29
+ __export(require("./health"));
27
30
  __export(require("./build"));
28
31
  __export(require("./services"));
29
32
  __export(require("./batch"));
package/lib/query.js CHANGED
@@ -166,6 +166,10 @@ function buildQuery(filter, bparam, table, attrs, sort, fields, sq, strExcluding
166
166
  filters.push(field + " <= " + param(i++));
167
167
  args.push(v['max']);
168
168
  }
169
+ else if (v['top']) {
170
+ filters.push(field + " < " + param(i++));
171
+ args.push(v['top']);
172
+ }
169
173
  else if (v['endDate']) {
170
174
  filters.push(field + " <= " + param(i++));
171
175
  args.push(v['endDate']);
@@ -201,6 +205,9 @@ function buildQuery(filter, bparam, table, attrs, sort, fields, sq, strExcluding
201
205
  if (v['max']) {
202
206
  filters.push(field + " <= " + v['max']);
203
207
  }
208
+ else if (v['top']) {
209
+ filters.push(field + " < " + v['top']);
210
+ }
204
211
  else if (v['upper']) {
205
212
  filters.push(field + " < " + v['upper']);
206
213
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "query-core",
3
- "version": "0.1.13",
3
+ "version": "0.1.17",
4
4
  "description": "query",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./src/index.ts",
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
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,10 +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
29
 
27
30
  export * from './metadata';
31
+ export * from './health';
28
32
  export * from './build';
29
33
  export * from './services';
30
34
  export * from './batch';
package/src/query.ts CHANGED
@@ -149,6 +149,9 @@ export function buildQuery<S>(filter: S, bparam: LikeType|((i: number ) => strin
149
149
  if (v['max']) {
150
150
  filters.push(`${field} <= ${param(i++)}`);
151
151
  args.push(v['max']);
152
+ } else if (v['top']) {
153
+ filters.push(`${field} < ${param(i++)}`);
154
+ args.push(v['top']);
152
155
  } else if (v['endDate']) {
153
156
  filters.push(`${field} <= ${param(i++)}`);
154
157
  args.push(v['endDate']);
@@ -177,6 +180,8 @@ export function buildQuery<S>(filter: S, bparam: LikeType|((i: number ) => strin
177
180
  if (isNumberRange(v)) {
178
181
  if (v['max']) {
179
182
  filters.push(`${field} <= ${v['max']}`);
183
+ } else if (v['top']) {
184
+ filters.push(`${field} < ${v['top']}`);
180
185
  } else if (v['upper']) {
181
186
  filters.push(`${field} < ${v['upper']}`);
182
187
  }
package/src/services.ts CHANGED
@@ -13,7 +13,7 @@ export class SqlLoader<T, ID> {
13
13
  attributes: Attributes;
14
14
  bools?: Attribute[];
15
15
  constructor(public table: string,
16
- public query: (sql: string, args?: any[], m?: StringMap, bools?: Attribute[], ctx?: any) => Promise<T[]>,
16
+ public query: <K>(sql: string, args?: any[], m?: StringMap, bools?: Attribute[], ctx?: any) => Promise<K[]>,
17
17
  attrs: Attributes|string[],
18
18
  public param: (i: number) => string,
19
19
  public fromDB?: (v: T) => T) {
@@ -48,7 +48,7 @@ export class SqlLoader<T, ID> {
48
48
  }
49
49
  const fn = this.fromDB;
50
50
  if (fn) {
51
- return this.query(stmt.query, stmt.params, this.map, ctx).then(res => {
51
+ return this.query<T>(stmt.query, stmt.params, this.map, ctx).then(res => {
52
52
  if (!res || res.length === 0) {
53
53
  return null;
54
54
  } else {
@@ -57,7 +57,7 @@ export class SqlLoader<T, ID> {
57
57
  }
58
58
  });
59
59
  } else {
60
- return this.query(stmt.query, stmt.params, this.map).then(res => (!res || res.length === 0) ? null : res[0]);
60
+ return this.query<T>(stmt.query, stmt.params, this.map).then(res => (!res || res.length === 0) ? null : res[0]);
61
61
  }
62
62
  }
63
63
  exist(id: ID, ctx?: any): Promise<boolean> {
@@ -73,7 +73,7 @@ export class SqlSearchLoader<T, ID, S extends Filter> extends SqlLoader<T, ID> {
73
73
  constructor(
74
74
  protected find: (s: S, limit?: number, offset?: number|string, fields?: string[]) => Promise<SearchResult<T>>,
75
75
  table: string,
76
- query: (sql: string, args?: any[], m?: StringMap, bools?: Attribute[], ctx?: any) => Promise<T[]>,
76
+ query: <K>(sql: string, args?: any[], m?: StringMap, bools?: Attribute[], ctx?: any) => Promise<K[]>,
77
77
  attrs: Attributes|string[],
78
78
  param: (i: number) => string,
79
79
  fromDB?: (v: T) => T) {
@@ -91,6 +91,13 @@ export interface Manager {
91
91
  execBatch(statements: Statement[], firstSuccess?: boolean, ctx?: any): Promise<number>;
92
92
  query<T>(sql: string, args?: any[], m?: StringMap, bools?: Attribute[], ctx?: any): Promise<T[]>;
93
93
  }
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
+ }
94
101
  export class SqlWriter<T, ID> extends SqlLoader<T, ID> {
95
102
  version?: string;
96
103
  exec: (sql: string, args?: any[], ctx?: any) => Promise<number>;