@spinajs/orm-lowdb 2.0.180 → 2.0.182

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,64 +1,64 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { Log } from '@spinajs/log';
4
- import { AsyncService } from '@spinajs/di';
5
- import { IColumnDescriptor, OrmDriver, QueryBuilder, TransactionCallback, Builder, UpdateQueryBuilder, InsertQueryBuilder, DeleteQueryBuilder } from '@spinajs/orm';
6
- import { Low } from 'lowdb';
7
- import { JSONFile } from 'lowdb/node';
8
- import _ from 'lodash';
9
- import EventEmitter from 'events';
10
- declare class LowWithLodash<T> extends Low<T> {
11
- chain: _.ExpChain<this['data']>;
12
- }
13
- interface LowDBData {
14
- [key: string]: any[];
15
- }
16
- export interface LowdbDataSynchronizer extends EventEmitter {
17
- }
18
- /**
19
- * Lowdb can synchronzie db file from external source
20
- * eg. download db from api
21
- */
22
- export declare abstract class LowdbDataSynchronizer extends AsyncService {
23
- this: this;
24
- }
25
- interface ILowDbHttpSynchronizeOptions {
26
- Host: string;
27
- Port: number;
28
- Interval: number;
29
- }
30
- export declare class LowDBHttpSynchronizer extends LowdbDataSynchronizer {
31
- protected Options: ILowDbHttpSynchronizeOptions;
32
- protected Driver: OrmDriver;
33
- protected log: Log;
34
- protected syncTimer: NodeJS.Timer;
35
- constructor(Options: ILowDbHttpSynchronizeOptions, Driver: OrmDriver);
36
- resolve(): Promise<void>;
37
- dispose(): Promise<void>;
38
- }
39
- export declare class LowDBDriver extends OrmDriver {
40
- protected executionId: number;
41
- protected adapter: JSONFile<LowDBData>;
42
- protected db: LowWithLodash<LowDBData>;
43
- protected dbSchema: any;
44
- execute(builder: Builder<any>): Promise<unknown>;
45
- protected handleInsert(builder: InsertQueryBuilder): Promise<void>;
46
- protected handleDelete(builder: DeleteQueryBuilder<any>): Promise<void>;
47
- protected handleUpdate(builder: UpdateQueryBuilder<any>): Promise<void>;
48
- protected handleSelect(builder: QueryBuilder<any>): Promise<any[]>;
49
- ping(): Promise<boolean>;
50
- connect(): Promise<OrmDriver>;
51
- disconnect(): Promise<OrmDriver>;
52
- resolve(): void;
53
- transaction(_qrOrCallback: QueryBuilder[] | TransactionCallback): Promise<void>;
54
- /**
55
- *
56
- * Retrieves information about specific DB table if exists. If table not exists returns null
57
- *
58
- * @param name - table name to retrieve info
59
- * @param _schema - optional schema name
60
- */
61
- tableInfo(_name: string, _schema?: string): Promise<IColumnDescriptor[]>;
62
- }
63
- export {};
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { Log } from '@spinajs/log';
4
+ import { AsyncService } from '@spinajs/di';
5
+ import { IColumnDescriptor, OrmDriver, QueryBuilder, TransactionCallback, Builder, UpdateQueryBuilder, InsertQueryBuilder, DeleteQueryBuilder } from '@spinajs/orm';
6
+ import { Low } from 'lowdb';
7
+ import { JSONFile } from 'lowdb/node';
8
+ import _ from 'lodash';
9
+ import EventEmitter from 'events';
10
+ declare class LowWithLodash<T> extends Low<T> {
11
+ chain: _.ExpChain<this['data']>;
12
+ }
13
+ interface LowDBData {
14
+ [key: string]: any[];
15
+ }
16
+ export interface LowdbDataSynchronizer extends EventEmitter {
17
+ }
18
+ /**
19
+ * Lowdb can synchronzie db file from external source
20
+ * eg. download db from api
21
+ */
22
+ export declare abstract class LowdbDataSynchronizer extends AsyncService {
23
+ this: this;
24
+ }
25
+ interface ILowDbHttpSynchronizeOptions {
26
+ Host: string;
27
+ Port: number;
28
+ Interval: number;
29
+ }
30
+ export declare class LowDBHttpSynchronizer extends LowdbDataSynchronizer {
31
+ protected Options: ILowDbHttpSynchronizeOptions;
32
+ protected Driver: OrmDriver;
33
+ protected log: Log;
34
+ protected syncTimer: NodeJS.Timer;
35
+ constructor(Options: ILowDbHttpSynchronizeOptions, Driver: OrmDriver);
36
+ resolve(): Promise<void>;
37
+ dispose(): Promise<void>;
38
+ }
39
+ export declare class LowDBDriver extends OrmDriver {
40
+ protected executionId: number;
41
+ protected adapter: JSONFile<LowDBData>;
42
+ protected db: LowWithLodash<LowDBData>;
43
+ protected dbSchema: any;
44
+ execute(builder: Builder<any>): Promise<unknown>;
45
+ protected handleInsert(builder: InsertQueryBuilder): Promise<void>;
46
+ protected handleDelete(builder: DeleteQueryBuilder<any>): Promise<void>;
47
+ protected handleUpdate(builder: UpdateQueryBuilder<any>): Promise<void>;
48
+ protected handleSelect(builder: QueryBuilder<any>): Promise<any[]>;
49
+ ping(): Promise<boolean>;
50
+ connect(): Promise<OrmDriver>;
51
+ disconnect(): Promise<OrmDriver>;
52
+ resolve(): void;
53
+ transaction(_qrOrCallback: QueryBuilder[] | TransactionCallback): Promise<void>;
54
+ /**
55
+ *
56
+ * Retrieves information about specific DB table if exists. If table not exists returns null
57
+ *
58
+ * @param name - table name to retrieve info
59
+ * @param _schema - optional schema name
60
+ */
61
+ tableInfo(_name: string, _schema?: string): Promise<IColumnDescriptor[]>;
62
+ }
63
+ export {};
64
64
  //# sourceMappingURL=index.d.ts.map
package/lib/cjs/index.js CHANGED
@@ -1,266 +1,266 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
- return c > 3 && r && Object.defineProperty(target, key, r), r;
23
- };
24
- var __importStar = (this && this.__importStar) || function (mod) {
25
- if (mod && mod.__esModule) return mod;
26
- var result = {};
27
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
- __setModuleDefault(result, mod);
29
- return result;
30
- };
31
- var __metadata = (this && this.__metadata) || function (k, v) {
32
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
- };
34
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.LowDBDriver = exports.LowDBHttpSynchronizer = exports.LowdbDataSynchronizer = void 0;
39
- const log_1 = require("@spinajs/log");
40
- const di_1 = require("@spinajs/di");
41
- const configuration_1 = require("@spinajs/configuration");
42
- const orm_1 = require("@spinajs/orm");
43
- const lowdb_1 = require("lowdb");
44
- const node_1 = require("lowdb/node");
45
- const lodash_1 = __importDefault(require("lodash"));
46
- const orm_2 = require("@spinajs/orm");
47
- const orm_3 = require("@spinajs/orm");
48
- const fs = __importStar(require("fs"));
49
- const path_1 = __importDefault(require("path"));
50
- const typescript_mix_1 = require("typescript-mix");
51
- const events_1 = __importDefault(require("events"));
52
- class LowWithLodash extends lowdb_1.Low {
53
- constructor() {
54
- super(...arguments);
55
- this.chain = lodash_1.default.chain(this).get('data');
56
- }
57
- }
58
- ;
59
- /**
60
- * Lowdb can synchronzie db file from external source
61
- * eg. download db from api
62
- */
63
- class LowdbDataSynchronizer extends di_1.AsyncService {
64
- }
65
- __decorate([
66
- (0, typescript_mix_1.use)(events_1.default),
67
- __metadata("design:type", Object)
68
- ], LowdbDataSynchronizer.prototype, "this", void 0);
69
- exports.LowdbDataSynchronizer = LowdbDataSynchronizer;
70
- class LowDBHttpSynchronizer extends LowdbDataSynchronizer {
71
- constructor(Options, Driver) {
72
- super();
73
- this.Options = Options;
74
- this.Driver = Driver;
75
- }
76
- async resolve() {
77
- this.syncTimer = setInterval(async () => {
78
- this.log.trace(`Synchronizing lowdb database...`);
79
- const dbFileName = (0, configuration_1.format)({}, this.Driver.Options.Filename);
80
- const stat = fs.statSync(dbFileName);
81
- const result = await fetch(this.Options.Host, {
82
- method: "GET",
83
- headers: {
84
- "if-modified-since": stat.mtime.toISOString()
85
- }
86
- });
87
- if (result.status === 304) {
88
- this.log.info(`Synchronization finished, not modified`);
89
- return;
90
- }
91
- if (result.status !== 200) {
92
- this.log.error(`Synchronization failed, status: ${result.status}`);
93
- return;
94
- }
95
- const js = await result.json();
96
- fs.writeFileSync(dbFileName, js, {
97
- encoding: "utf-8"
98
- });
99
- this.log.success(`Synchronization finished, new data arrived`);
100
- this.emit('synchronized');
101
- }, this.Options.Interval);
102
- }
103
- async dispose() {
104
- if (this.syncTimer) {
105
- clearInterval(this.syncTimer);
106
- }
107
- }
108
- }
109
- __decorate([
110
- (0, log_1.Logger)('low-db-synchronizer'),
111
- __metadata("design:type", log_1.Log)
112
- ], LowDBHttpSynchronizer.prototype, "log", void 0);
113
- exports.LowDBHttpSynchronizer = LowDBHttpSynchronizer;
114
- let LowDBDriver = class LowDBDriver extends orm_1.OrmDriver {
115
- constructor() {
116
- super(...arguments);
117
- this.executionId = 0;
118
- }
119
- execute(builder) {
120
- /**
121
- * We skip all compilation process
122
- * We take builder and query lowdb data
123
- *
124
- * Support for full orm builder function is limited
125
- */
126
- switch (builder.QueryContext) {
127
- case orm_1.QueryContext.Delete:
128
- return this.handleDelete(builder);
129
- case orm_1.QueryContext.Insert:
130
- return this.handleInsert(builder);
131
- case orm_1.QueryContext.Update:
132
- return this.handleUpdate(builder);
133
- case orm_1.QueryContext.Select:
134
- return this.handleSelect(builder);
135
- }
136
- }
137
- async handleInsert(builder) {
138
- if (!this.db.data[builder.Table]) {
139
- this.db.data[builder.Table] = [];
140
- }
141
- const data = [];
142
- builder.Values.forEach((val) => {
143
- const d = {};
144
- builder.getColumns().forEach((x, cIndex) => {
145
- if (lodash_1.default.isString(x.Column)) {
146
- d[x.Column] = val[cIndex];
147
- }
148
- });
149
- data.push(d);
150
- });
151
- this.db.data[builder.Table] = this.db.data[builder.Table].concat(...data);
152
- await this.db.write();
153
- }
154
- async handleDelete(builder) {
155
- const data = await this.handleSelect(builder);
156
- if (!data || data.length === 0) {
157
- return;
158
- }
159
- this.db.data[builder.Table] = this.db.data[builder.Table].filter((x) => {
160
- return lodash_1.default.every(data, (b) => !lodash_1.default.isEqual(x, b));
161
- });
162
- await this.db.write();
163
- }
164
- async handleUpdate(builder) {
165
- const data = await this.handleSelect(builder);
166
- if (!data || data.length === 0) {
167
- return;
168
- }
169
- Object.assign(data[0], builder.Value);
170
- await this.db.write();
171
- }
172
- async handleSelect(builder) {
173
- // double cast for linter
174
- // we are sure that builder passed here implements this class
175
- // by mixins
176
- const wb = builder;
177
- return this.db.chain
178
- .get(builder.Table)
179
- .filter((x) => {
180
- if (!wb.Statements.every((qs) => {
181
- return qs instanceof orm_2.WhereStatement;
182
- })) {
183
- throw new orm_3.OrmException(`Lowdb does not support raw queries`);
184
- }
185
- return wb.Statements.every((stmt) => {
186
- if (stmt.Column instanceof orm_1.Wrap) {
187
- return false;
188
- }
189
- const val = x[stmt.Column];
190
- switch (stmt.Operator) {
191
- case orm_1.SqlOperator.EQ:
192
- return val === stmt.Value;
193
- case orm_1.SqlOperator.GT:
194
- return val > stmt.Value;
195
- case orm_1.SqlOperator.GTE:
196
- return val >= stmt.Value;
197
- case orm_1.SqlOperator.NULL:
198
- return val === null || val === undefined;
199
- case orm_1.SqlOperator.LT:
200
- return val < stmt.Value;
201
- case orm_1.SqlOperator.LTE:
202
- return val <= stmt.Value;
203
- case orm_1.SqlOperator.NOT:
204
- return val !== stmt.Value;
205
- case orm_1.SqlOperator.NOT_NULL:
206
- return val !== null && val !== undefined;
207
- case orm_1.SqlOperator.LIKE:
208
- return val.includes(stmt.Value);
209
- case orm_1.SqlOperator.IN:
210
- return stmt.Value.indexOf(val) !== -1;
211
- case orm_1.SqlOperator.NOT_IN:
212
- return stmt.Value.indexOf(val) === -1;
213
- }
214
- });
215
- })
216
- .value();
217
- }
218
- async ping() {
219
- return this.db !== null && this.db !== undefined;
220
- }
221
- async connect() {
222
- const dbFileName = (0, configuration_1.format)({}, this.Options.Filename);
223
- const path = path_1.default.parse(dbFileName);
224
- const schemaFileName = (0, configuration_1.format)({}, path_1.default.join(path.dir, `${path.name}.schema.json`));
225
- this.adapter = new node_1.JSONFile(dbFileName);
226
- this.db = new LowWithLodash(this.adapter, {});
227
- await this.db.read();
228
- if (!fs.existsSync(schemaFileName)) {
229
- this.Log.warn(`Schema file at ${schemaFileName} not exists. Lowdb will not be able to proper insert into DB`);
230
- }
231
- else {
232
- this.dbSchema = JSON.parse(fs.readFileSync(schemaFileName, 'utf-8'));
233
- }
234
- return this;
235
- }
236
- async disconnect() {
237
- return this;
238
- }
239
- resolve() {
240
- super.resolve();
241
- }
242
- async transaction(_qrOrCallback) {
243
- /**
244
- *
245
- * LOW DB have no transactions
246
- *
247
- *
248
- */
249
- }
250
- /**
251
- *
252
- * Retrieves information about specific DB table if exists. If table not exists returns null
253
- *
254
- * @param name - table name to retrieve info
255
- * @param _schema - optional schema name
256
- */
257
- async tableInfo(_name, _schema) {
258
- return Promise.resolve([]);
259
- }
260
- };
261
- LowDBDriver = __decorate([
262
- (0, di_1.Injectable)('orm-driver-lowdb'),
263
- (0, di_1.NewInstance)()
264
- ], LowDBDriver);
265
- exports.LowDBDriver = LowDBDriver;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __metadata = (this && this.__metadata) || function (k, v) {
32
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.LowDBDriver = exports.LowDBHttpSynchronizer = exports.LowdbDataSynchronizer = void 0;
39
+ const log_1 = require("@spinajs/log");
40
+ const di_1 = require("@spinajs/di");
41
+ const configuration_1 = require("@spinajs/configuration");
42
+ const orm_1 = require("@spinajs/orm");
43
+ const lowdb_1 = require("lowdb");
44
+ const node_1 = require("lowdb/node");
45
+ const lodash_1 = __importDefault(require("lodash"));
46
+ const orm_2 = require("@spinajs/orm");
47
+ const orm_3 = require("@spinajs/orm");
48
+ const fs = __importStar(require("fs"));
49
+ const path_1 = __importDefault(require("path"));
50
+ const typescript_mix_1 = require("typescript-mix");
51
+ const events_1 = __importDefault(require("events"));
52
+ class LowWithLodash extends lowdb_1.Low {
53
+ constructor() {
54
+ super(...arguments);
55
+ this.chain = lodash_1.default.chain(this).get('data');
56
+ }
57
+ }
58
+ ;
59
+ /**
60
+ * Lowdb can synchronzie db file from external source
61
+ * eg. download db from api
62
+ */
63
+ class LowdbDataSynchronizer extends di_1.AsyncService {
64
+ }
65
+ exports.LowdbDataSynchronizer = LowdbDataSynchronizer;
66
+ __decorate([
67
+ (0, typescript_mix_1.use)(events_1.default),
68
+ __metadata("design:type", Object)
69
+ ], LowdbDataSynchronizer.prototype, "this", void 0);
70
+ class LowDBHttpSynchronizer extends LowdbDataSynchronizer {
71
+ constructor(Options, Driver) {
72
+ super();
73
+ this.Options = Options;
74
+ this.Driver = Driver;
75
+ }
76
+ async resolve() {
77
+ this.syncTimer = setInterval(async () => {
78
+ this.log.trace(`Synchronizing lowdb database...`);
79
+ const dbFileName = (0, configuration_1.format)({}, this.Driver.Options.Filename);
80
+ const stat = fs.statSync(dbFileName);
81
+ const result = await fetch(this.Options.Host, {
82
+ method: "GET",
83
+ headers: {
84
+ "if-modified-since": stat.mtime.toISOString()
85
+ }
86
+ });
87
+ if (result.status === 304) {
88
+ this.log.info(`Synchronization finished, not modified`);
89
+ return;
90
+ }
91
+ if (result.status !== 200) {
92
+ this.log.error(`Synchronization failed, status: ${result.status}`);
93
+ return;
94
+ }
95
+ const js = await result.json();
96
+ fs.writeFileSync(dbFileName, js, {
97
+ encoding: "utf-8"
98
+ });
99
+ this.log.success(`Synchronization finished, new data arrived`);
100
+ this.emit('synchronized');
101
+ }, this.Options.Interval);
102
+ }
103
+ async dispose() {
104
+ if (this.syncTimer) {
105
+ clearInterval(this.syncTimer);
106
+ }
107
+ }
108
+ }
109
+ exports.LowDBHttpSynchronizer = LowDBHttpSynchronizer;
110
+ __decorate([
111
+ (0, log_1.Logger)('low-db-synchronizer'),
112
+ __metadata("design:type", log_1.Log)
113
+ ], LowDBHttpSynchronizer.prototype, "log", void 0);
114
+ let LowDBDriver = class LowDBDriver extends orm_1.OrmDriver {
115
+ constructor() {
116
+ super(...arguments);
117
+ this.executionId = 0;
118
+ }
119
+ execute(builder) {
120
+ /**
121
+ * We skip all compilation process
122
+ * We take builder and query lowdb data
123
+ *
124
+ * Support for full orm builder function is limited
125
+ */
126
+ switch (builder.QueryContext) {
127
+ case orm_1.QueryContext.Delete:
128
+ return this.handleDelete(builder);
129
+ case orm_1.QueryContext.Insert:
130
+ return this.handleInsert(builder);
131
+ case orm_1.QueryContext.Update:
132
+ return this.handleUpdate(builder);
133
+ case orm_1.QueryContext.Select:
134
+ return this.handleSelect(builder);
135
+ }
136
+ }
137
+ async handleInsert(builder) {
138
+ if (!this.db.data[builder.Table]) {
139
+ this.db.data[builder.Table] = [];
140
+ }
141
+ const data = [];
142
+ builder.Values.forEach((val) => {
143
+ const d = {};
144
+ builder.getColumns().forEach((x, cIndex) => {
145
+ if (lodash_1.default.isString(x.Column)) {
146
+ d[x.Column] = val[cIndex];
147
+ }
148
+ });
149
+ data.push(d);
150
+ });
151
+ this.db.data[builder.Table] = this.db.data[builder.Table].concat(...data);
152
+ await this.db.write();
153
+ }
154
+ async handleDelete(builder) {
155
+ const data = await this.handleSelect(builder);
156
+ if (!data || data.length === 0) {
157
+ return;
158
+ }
159
+ this.db.data[builder.Table] = this.db.data[builder.Table].filter((x) => {
160
+ return lodash_1.default.every(data, (b) => !lodash_1.default.isEqual(x, b));
161
+ });
162
+ await this.db.write();
163
+ }
164
+ async handleUpdate(builder) {
165
+ const data = await this.handleSelect(builder);
166
+ if (!data || data.length === 0) {
167
+ return;
168
+ }
169
+ Object.assign(data[0], builder.Value);
170
+ await this.db.write();
171
+ }
172
+ async handleSelect(builder) {
173
+ // double cast for linter
174
+ // we are sure that builder passed here implements this class
175
+ // by mixins
176
+ const wb = builder;
177
+ return this.db.chain
178
+ .get(builder.Table)
179
+ .filter((x) => {
180
+ if (!wb.Statements.every((qs) => {
181
+ return qs instanceof orm_2.WhereStatement;
182
+ })) {
183
+ throw new orm_3.OrmException(`Lowdb does not support raw queries`);
184
+ }
185
+ return wb.Statements.every((stmt) => {
186
+ if (stmt.Column instanceof orm_1.Wrap) {
187
+ return false;
188
+ }
189
+ const val = x[stmt.Column];
190
+ switch (stmt.Operator) {
191
+ case orm_1.SqlOperator.EQ:
192
+ return val === stmt.Value;
193
+ case orm_1.SqlOperator.GT:
194
+ return val > stmt.Value;
195
+ case orm_1.SqlOperator.GTE:
196
+ return val >= stmt.Value;
197
+ case orm_1.SqlOperator.NULL:
198
+ return val === null || val === undefined;
199
+ case orm_1.SqlOperator.LT:
200
+ return val < stmt.Value;
201
+ case orm_1.SqlOperator.LTE:
202
+ return val <= stmt.Value;
203
+ case orm_1.SqlOperator.NOT:
204
+ return val !== stmt.Value;
205
+ case orm_1.SqlOperator.NOT_NULL:
206
+ return val !== null && val !== undefined;
207
+ case orm_1.SqlOperator.LIKE:
208
+ return val.includes(stmt.Value);
209
+ case orm_1.SqlOperator.IN:
210
+ return stmt.Value.indexOf(val) !== -1;
211
+ case orm_1.SqlOperator.NOT_IN:
212
+ return stmt.Value.indexOf(val) === -1;
213
+ }
214
+ });
215
+ })
216
+ .value();
217
+ }
218
+ async ping() {
219
+ return this.db !== null && this.db !== undefined;
220
+ }
221
+ async connect() {
222
+ const dbFileName = (0, configuration_1.format)({}, this.Options.Filename);
223
+ const path = path_1.default.parse(dbFileName);
224
+ const schemaFileName = (0, configuration_1.format)({}, path_1.default.join(path.dir, `${path.name}.schema.json`));
225
+ this.adapter = new node_1.JSONFile(dbFileName);
226
+ this.db = new LowWithLodash(this.adapter, {});
227
+ await this.db.read();
228
+ if (!fs.existsSync(schemaFileName)) {
229
+ this.Log.warn(`Schema file at ${schemaFileName} not exists. Lowdb will not be able to proper insert into DB`);
230
+ }
231
+ else {
232
+ this.dbSchema = JSON.parse(fs.readFileSync(schemaFileName, 'utf-8'));
233
+ }
234
+ return this;
235
+ }
236
+ async disconnect() {
237
+ return this;
238
+ }
239
+ resolve() {
240
+ super.resolve();
241
+ }
242
+ async transaction(_qrOrCallback) {
243
+ /**
244
+ *
245
+ * LOW DB have no transactions
246
+ *
247
+ *
248
+ */
249
+ }
250
+ /**
251
+ *
252
+ * Retrieves information about specific DB table if exists. If table not exists returns null
253
+ *
254
+ * @param name - table name to retrieve info
255
+ * @param _schema - optional schema name
256
+ */
257
+ async tableInfo(_name, _schema) {
258
+ return Promise.resolve([]);
259
+ }
260
+ };
261
+ exports.LowDBDriver = LowDBDriver;
262
+ exports.LowDBDriver = LowDBDriver = __decorate([
263
+ (0, di_1.Injectable)('orm-driver-lowdb'),
264
+ (0, di_1.NewInstance)()
265
+ ], LowDBDriver);
266
266
  //# sourceMappingURL=index.js.map