db-wrapper 0.0.8 → 2.0.0

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.
Files changed (39) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +24 -24
  3. package/esm2020/db-wrapper.mjs +5 -0
  4. package/esm2020/lib/db-wrapper.models.mjs +45 -0
  5. package/esm2020/lib/db-wrapper.module.mjs +22 -0
  6. package/esm2020/lib/db-wrapper.service.mjs +405 -0
  7. package/esm2020/lib/window.service.mjs +17 -0
  8. package/esm2020/public-api.mjs +7 -0
  9. package/fesm2015/{db-wrapper.js → db-wrapper.mjs} +484 -479
  10. package/fesm2015/db-wrapper.mjs.map +1 -0
  11. package/fesm2020/db-wrapper.mjs +495 -0
  12. package/fesm2020/db-wrapper.mjs.map +1 -0
  13. package/{db-wrapper.d.ts → index.d.ts} +5 -4
  14. package/lib/db-wrapper.models.d.ts +119 -119
  15. package/lib/db-wrapper.module.d.ts +9 -5
  16. package/lib/db-wrapper.service.d.ts +39 -39
  17. package/lib/window.service.d.ts +6 -3
  18. package/package.json +24 -14
  19. package/public-api.d.ts +3 -3
  20. package/bundles/db-wrapper.umd.js +0 -752
  21. package/bundles/db-wrapper.umd.js.map +0 -1
  22. package/bundles/db-wrapper.umd.min.js +0 -16
  23. package/bundles/db-wrapper.umd.min.js.map +0 -1
  24. package/db-wrapper.metadata.json +0 -1
  25. package/esm2015/db-wrapper.js +0 -5
  26. package/esm2015/lib/db-wrapper.models.js +0 -45
  27. package/esm2015/lib/db-wrapper.module.js +0 -21
  28. package/esm2015/lib/db-wrapper.service.js +0 -408
  29. package/esm2015/lib/window.service.js +0 -16
  30. package/esm2015/public-api.js +0 -7
  31. package/esm5/db-wrapper.js +0 -5
  32. package/esm5/lib/db-wrapper.models.js +0 -45
  33. package/esm5/lib/db-wrapper.module.js +0 -25
  34. package/esm5/lib/db-wrapper.service.js +0 -434
  35. package/esm5/lib/window.service.js +0 -23
  36. package/esm5/public-api.js +0 -7
  37. package/fesm2015/db-wrapper.js.map +0 -1
  38. package/fesm5/db-wrapper.js +0 -529
  39. package/fesm5/db-wrapper.js.map +0 -1
@@ -1,408 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { InjectionToken } from '@angular/core';
3
- import { WindowService } from './window.service';
4
- export class DbWrapperService {
5
- constructor(dbConfig, dbSchema) {
6
- this._dbName = dbConfig.dbName;
7
- this._location = dbConfig.location || 'default';
8
- this._iosDatabaseLocation = dbConfig.iosDatabaseLocation || 'Library';
9
- const window = (new WindowService()).nativeWindow;
10
- if (dbSchema) {
11
- this.schema = dbSchema;
12
- }
13
- this._readyPromise = new Promise((resolve, reject) => {
14
- if (typeof window.cordova === 'undefined') {
15
- setTimeout(() => {
16
- this.init(dbSchema).then(() => {
17
- resolve();
18
- })
19
- .catch((err) => {
20
- reject(err);
21
- });
22
- }, 500);
23
- }
24
- else {
25
- document.addEventListener('deviceready', () => {
26
- console.log('dbWrapper: device ready.');
27
- this.initDevice(dbSchema).then(() => resolve()).catch((err) => reject(err));
28
- });
29
- }
30
- });
31
- }
32
- ready() {
33
- return this._readyPromise;
34
- }
35
- initDevice(dbSchema) {
36
- const window = (new WindowService()).nativeWindow;
37
- return new Promise((resolve, reject) => {
38
- this.db = window.sqlitePlugin.openDatabase({
39
- name: this._dbName,
40
- location: this._location,
41
- androidLockWorkaround: 1
42
- });
43
- if (dbSchema) {
44
- this.generate(dbSchema).catch(err => {
45
- reject(err);
46
- }).then(() => { resolve(); });
47
- }
48
- else {
49
- resolve();
50
- }
51
- });
52
- }
53
- init(dbSchema) {
54
- const window = (new WindowService()).nativeWindow;
55
- return new Promise((resolve, reject) => {
56
- this.db = window.openDatabase(this._dbName, '1.0', 'database', -1);
57
- if (dbSchema) {
58
- this.generate(dbSchema).catch(err => {
59
- reject(err);
60
- }).then(() => {
61
- resolve();
62
- });
63
- }
64
- else {
65
- resolve();
66
- }
67
- });
68
- }
69
- generate(schema) {
70
- const sentences = [];
71
- this.schema = schema;
72
- if (schema.tables) {
73
- schema.tables.forEach(table => {
74
- sentences.push(this.createTable(table));
75
- });
76
- }
77
- if (schema.views) {
78
- schema.views.forEach(view => {
79
- sentences.push(this.createView(view));
80
- });
81
- }
82
- if (sentences.length === 0) {
83
- throw new Error('Esquema de la base de datos vacia.');
84
- }
85
- return Promise.all(sentences);
86
- }
87
- createTable(table) {
88
- return __awaiter(this, void 0, void 0, function* () {
89
- let sql = '', onConflictPrimary;
90
- const sentences = [], newColumns = [];
91
- const tableDDL = yield this._tableExists(table.name);
92
- if (tableDDL) {
93
- table.columns.forEach(col => {
94
- if (!this._columnExists(tableDDL, col.name)) {
95
- newColumns.push(this.addColumn(table.name, col));
96
- }
97
- });
98
- }
99
- else {
100
- table.columns.forEach(col => {
101
- sentences.push(this.defColumn(col));
102
- });
103
- }
104
- onConflictPrimary = 'on conflict fail';
105
- if (Array.isArray(table.primary)) {
106
- sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary.join(',') + ') ' + onConflictPrimary);
107
- }
108
- if (typeof table.primary === 'string') {
109
- sentences.push(' CONSTRAINT identificador PRIMARY KEY (' + table.primary + ') ' + onConflictPrimary);
110
- }
111
- if (table.uniques) {
112
- table.uniques.forEach(uniq => {
113
- sentences.push(this.defUnique(uniq));
114
- });
115
- }
116
- if (table.foreigns) {
117
- table.foreigns.forEach(fore => {
118
- sentences.push(this.defForeign(fore));
119
- });
120
- }
121
- if (tableDDL && newColumns.length !== 0) {
122
- return Promise.all(newColumns)
123
- .then(() => { console.log(`Table ${table.name} altered.`); })
124
- .catch((err) => {
125
- console.error(`Table ${table.name}: ${err.message}`);
126
- throw new Error(`Table ${table.name}: ${err.message}`);
127
- });
128
- }
129
- else if (!tableDDL) {
130
- sql = 'CREATE TABLE IF NOT EXISTS ' + table.name + ' (' + sentences.join(',') + ')';
131
- return this.query(sql)
132
- .then(() => { console.log(`Table ${table.name} created.`); })
133
- .catch((err) => {
134
- console.error(`Table ${table.name}: ${err.message}`);
135
- throw new Error(`Table ${table.name}: ${err.message}`);
136
- });
137
- }
138
- else {
139
- return Promise.resolve().then(() => { console.log(`Table ${table.name} initialized.`); });
140
- }
141
- });
142
- }
143
- createView(view) {
144
- let sql;
145
- sql = 'CREATE VIEW IF NOT EXISTS ' + view.name
146
- + ' AS ' + view.sql;
147
- return this.query(sql);
148
- }
149
- getSchemaTable(tableName) {
150
- let res;
151
- this.schema.tables.forEach(table => {
152
- if (table.name === tableName) {
153
- res = table;
154
- }
155
- });
156
- return res;
157
- }
158
- getUniquesTable(table) {
159
- let res;
160
- table.uniques.forEach(uniq => {
161
- res[uniq.name] = uniq;
162
- });
163
- return res;
164
- }
165
- query(query, bindings = []) {
166
- return new Promise((resolve, reject) => {
167
- if (query.indexOf('select') === 0) {
168
- this.db.readTransaction((transaction) => {
169
- transaction.executeSql(query, bindings, (transaction, result) => {
170
- resolve(result);
171
- }, (transaction, error) => {
172
- reject(error);
173
- });
174
- }, (err) => reject(err));
175
- }
176
- else {
177
- this.db.transaction((transaction) => {
178
- transaction.executeSql(query, bindings, (transaction, result) => {
179
- resolve(result);
180
- }, (transaction, error) => {
181
- reject(error);
182
- });
183
- }, (err) => reject(err));
184
- }
185
- });
186
- }
187
- Count(query, bindings = []) {
188
- return this.query(query, bindings).then(rows => {
189
- return this.rowsCount(rows);
190
- });
191
- }
192
- insert(table, bindings) {
193
- let sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
194
- sql = sql + 'insert into ' + table + ' ';
195
- for (const index in bindings) {
196
- if (bindings.hasOwnProperty(index)) {
197
- sqlKeys.push(index);
198
- sqlValues.push(bindings[index]);
199
- sqlBinds.push('?');
200
- }
201
- }
202
- sql = sql + '(' + sqlKeys.join(',') + ') values (' + sqlBinds.join(',') + ')';
203
- return new Promise((resolve, reject) => {
204
- this.db.transaction(transaction => {
205
- transaction.executeSql(sql, sqlValues, (transaction, result) => {
206
- resolve(result);
207
- }, (transaction, error) => {
208
- reject(error);
209
- });
210
- });
211
- });
212
- }
213
- update(table, bindings, where) {
214
- let sql = '', sqlBinds = [], sqlKeys = [], sqlValues = [];
215
- sql = sql + 'update ' + table + ' set ';
216
- for (let index in bindings) {
217
- if (bindings.hasOwnProperty(index)) {
218
- let newObj = bindings[index];
219
- if (typeof newObj === 'object' && newObj !== null) {
220
- sqlValues.push(newObj.value);
221
- if (newObj.ifnull) {
222
- sqlBinds.push(index + ' = ifnull( ' + index + ',0) + ?');
223
- }
224
- else if (newObj.operator) {
225
- sqlBinds.push(index + ' = ' + index + newObj.operator + ' ?');
226
- }
227
- else {
228
- sqlBinds.push(index + ' = ?');
229
- }
230
- }
231
- else {
232
- sqlBinds.push(index + ' = ?');
233
- sqlValues.push(bindings[index]);
234
- }
235
- }
236
- }
237
- for (let index in where) {
238
- if (where.hasOwnProperty(index)) {
239
- if (typeof where[index] === 'object' && where[index] !== null) {
240
- sqlKeys.push(index + ' ' + where[index].operator + ' ?');
241
- sqlValues.push(where[index].value);
242
- }
243
- else {
244
- sqlKeys.push(index + ' = ?');
245
- sqlValues.push(where[index]);
246
- }
247
- }
248
- }
249
- sql = sql + sqlBinds.join(',') + ' where ' + sqlKeys.join(' and ');
250
- return new Promise((resolve, reject) => {
251
- this.db.transaction(transaction => {
252
- transaction.executeSql(sql, sqlValues, (transaction, result) => {
253
- resolve(result);
254
- }, (transaction, error) => {
255
- reject(error);
256
- });
257
- });
258
- });
259
- }
260
- dropTable(tables) {
261
- let cont = 1;
262
- cont = tables.length;
263
- return new Promise((resolve, reject) => {
264
- tables.some(table => {
265
- if (cont !== 0) {
266
- this.query('DROP TABLE ' + table)
267
- .then(() => {
268
- if (cont === 1) {
269
- resolve();
270
- }
271
- else {
272
- cont--;
273
- }
274
- }, err => {
275
- cont = 0;
276
- reject(err);
277
- return true;
278
- });
279
- return false;
280
- }
281
- });
282
- });
283
- }
284
- fetchAll(result) {
285
- let output = [];
286
- for (let i = 0; i < result.rows.length; i++) {
287
- output.push(result.rows.item(i));
288
- }
289
- return output;
290
- }
291
- fetch(result) {
292
- let objeto = undefined, newObj = undefined;
293
- if (result.rows.length !== 0) {
294
- objeto = result.rows.item(0);
295
- newObj = {};
296
- const keys = Object.keys(objeto);
297
- for (let key in keys) {
298
- newObj[keys[key]] = objeto[keys[key]];
299
- }
300
- }
301
- return newObj;
302
- }
303
- rowsCount(result) {
304
- return result.rows.length;
305
- }
306
- tableExists(table) {
307
- return this.query('select sql from sqlite_master ' +
308
- 'where type=\'table\' and name=\'' + table + '\'')
309
- .then(result => (this.rowsCount(result) === 1));
310
- }
311
- columnExists(table, column) {
312
- return this._tableExists(table)
313
- .then((tableDDL) => {
314
- if (tableDDL) {
315
- return this._columnExists(tableDDL, column);
316
- }
317
- else {
318
- return false;
319
- }
320
- });
321
- }
322
- /* Private */
323
- defColumn(col) {
324
- let colSql;
325
- colSql = col.name + ' ' + col.type;
326
- if (!col.isNullable) {
327
- colSql += ' NOT NULL ';
328
- }
329
- if (col.default) {
330
- colSql += ' DEFAULT ' + col.default + ' ';
331
- }
332
- if (col.type === 'text' && col.length) {
333
- colSql += ` CONSTRAINT ${col.name}_length CHECK ( `;
334
- if (col.isNullable) {
335
- colSql += `${col.name} is null OR `;
336
- }
337
- colSql += `length(${col.name}) <= ${col.length} )`;
338
- }
339
- return colSql;
340
- }
341
- defUnique(unique) {
342
- let uniqSql;
343
- // depende del entorno, producción o desarrollo
344
- const onConflictUnique = 'on conflict replace';
345
- if (Array.isArray(unique.fields)) {
346
- uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields.join(',')} ) ${onConflictUnique} `;
347
- }
348
- if (typeof unique.fields === 'string') {
349
- uniqSql = ` CONSTRAINT ${unique.name} UNIQUE ( ${unique.fields} ) ${onConflictUnique} `;
350
- }
351
- return uniqSql;
352
- }
353
- defForeign(fore) {
354
- let foreSql;
355
- if (Array.isArray(fore.foreignKey)) {
356
- foreSql = ` FOREIGN KEY ( ${fore.foreignKey.join(',')} ) `;
357
- }
358
- if (typeof fore.foreignKey === 'string') {
359
- foreSql = ` FOREIGN KEY ( ${fore.foreignKey} ) `;
360
- }
361
- if (Array.isArray(fore.primaryKey)) {
362
- foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey.join(',')} ) `;
363
- }
364
- if (typeof fore.primaryKey === 'string') {
365
- foreSql = ` REFERENCES ${fore.referenceTable} ( ${fore.primaryKey} ) `;
366
- }
367
- return foreSql;
368
- }
369
- _tableExists(table) {
370
- return this.query('select sql from sqlite_master ' +
371
- 'where type=\'table\' and name=\'' + table + '\'')
372
- .then(result => {
373
- if (this.rowsCount(result) === 1) {
374
- return this.fetch(result).sql;
375
- }
376
- else {
377
- return false;
378
- }
379
- });
380
- }
381
- _columnExists(tableDDL, column) {
382
- if (tableDDL.indexOf(column) === -1) {
383
- return false;
384
- }
385
- else {
386
- return true;
387
- }
388
- }
389
- addColumn(table, col) {
390
- const colSql = this.defColumn(col);
391
- const query = 'alter TABLE ' + table + ' add COLUMN ' + colSql;
392
- return this.query(query);
393
- }
394
- }
395
- export const DB_CONFIG = new InjectionToken('dbWrapperConfig');
396
- export const DB_SCHEMA = new InjectionToken('dbWrapperSchema');
397
- export function getDefaultDbConfig() {
398
- return {
399
- dbName: 'db.sqlite',
400
- location: 'default',
401
- iosDatabaseLocation: 'Library'
402
- };
403
- }
404
- export function provideDbWrapper(dbConfig, dbSchema) {
405
- const config = !!dbConfig ? dbConfig : getDefaultDbConfig();
406
- return new DbWrapperService(config, dbSchema);
407
- }
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItd3JhcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGItd3JhcHBlci8iLCJzb3VyY2VzIjpbImxpYi9kYi13cmFwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSWpELE1BQU0sT0FBTyxnQkFBZ0I7SUFRM0IsWUFBWSxRQUFrQixFQUFFLFFBQW1CO1FBRWpELElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsbUJBQW1CLElBQUksU0FBUyxDQUFDO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNsRCxJQUFJLFFBQVEsRUFBRTtZQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1NBQUU7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLE9BQU8sQ0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyRCxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7Z0JBQ3pDLFVBQVUsQ0FBRSxHQUFHLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3RCLEdBQUcsRUFBRTt3QkFDSCxPQUFPLEVBQUUsQ0FBQztvQkFDWixDQUFDLENBQUU7eUJBQ0YsS0FBSyxDQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNkLENBQUMsQ0FBRSxDQUFDO2dCQUNSLENBQUMs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WUFBRyxPQUFPLElBQUksQ0FBQztTQUFFO0lBQy9FLENBQUM7SUFFTyxTQUFTLENBQUMsS0FBYSxFQUFFLEdBQWE7UUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLEtBQUssR0FBRyxjQUFjLEdBQUcsS0FBSyxHQUFHLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FFRjtBQUlELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBVyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBVyxpQkFBaUIsQ0FBQyxDQUFDO0FBRXpFLE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTztRQUNMLE1BQU0sRUFBRSxXQUFXO1FBQ25CLFFBQVEsRUFBRSxTQUFTO1FBQ25CLG1CQUFtQixFQUFFLFNBQVM7S0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsUUFBa0IsRUFBRSxRQUFtQjtJQUN0RSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUQsT0FBTyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgV2luZG93U2VydmljZSB9IGZyb20gJy4vd2luZG93LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEQlRhYmxlLCBEYkNvbmZpZywgREJTY2hlbWEsIERCVmlldyxcclxuICBEQkNvbHVtbiwgREJVbmlxdWUsIERCRm9yZWlnbiwgU3FsVHJhbnNhY3Rpb24sIFNxbFJlc3VsdFNldCwgU3FsRXJyb3IsIERlZmF1bHRUeXBlIH0gZnJvbSAnLi9kYi13cmFwcGVyLm1vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRGJXcmFwcGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBfZGJOYW1lOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfbG9jYXRpb246IHN0cmluZztcclxuICBwcml2YXRlIF9pb3NEYXRhYmFzZUxvY2F0aW9uOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfcmVhZHlQcm9taXNlOiBQcm9taXNlPHZvaWQ+O1xyXG4gIHNjaGVtYTogREJTY2hlbWE7XHJcbiAgZGI6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoZGJDb25maWc6IERiQ29uZmlnLCBkYlNjaGVtYT86IERCU2NoZW1hKSB7XHJcblxyXG4gICAgdGhpcy5fZGJOYW1lID0gZGJDb25maWcuZGJOYW1lO1xyXG4gICAgdGhpcy5fbG9jYXRpb24gPSBkYkNvbmZpZy5sb2NhdGlvbiB8fCAnZGVmYXVsdCc7XHJcbiAgICB0aGlzLl9pb3NEYXRhYmFzZUxvY2F0aW9uID0gZGJDb25maWcuaW9zRGF0YWJhc2VMb2NhdGlvbiB8fCAnTGlicmFyeSc7XHJcbiAgICBjb25zdCB3aW5kb3cgPSAobmV3IFdpbmRvd1NlcnZpY2UoKSkubmF0aXZlV2luZG93O1xyXG4gICAgaWYgKGRiU2NoZW1hKSB7IHRoaXMuc2NoZW1hID0gZGJTY2hlbWE7IH1cclxuICAgIHRoaXMuX3JlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlICggKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdy5jb3Jkb3ZhID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaW5pdChkYlNjaGVtYSkudGhlbiAoXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0gKVxyXG4gICAgICAgICAgICAuY2F0Y2ggKCAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH0gKTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RldmljZXJlYWR5JywgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2RiV3JhcHBlcjogZGV2aWNlIHJlYWR5LicpO1xyXG4gICAgICAgICAgdGhpcy5pbml0RGV2aWNlKGRiU2NoZW1hKS50aGVuICggKCkgPT4gcmVzb2x2ZSgpICkuY2F0Y2ggKCAoZXJyKSA9PiByZWplY3QoZXJyKSApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlYWR5UHJvbWlzZTtcclxuICB9XHJcblxyXG4gIGluaXREZXZpY2UoZGJTY2hlbWE6IERCU2NoZW1hKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB3aW5kb3cgPSAobmV3IFdpbmRvd1NlcnZpY2UoKSkubmF0aXZlV2luZG93O1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKCAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuZGIgPSB3aW5kb3cuc3FsaXRlUGx1Z2luLm9wZW5EYXRhYmFzZSh7XHJcbiAgICAgICAgbmFtZTogdGhpcy5fZGJOYW1lLFxyXG4gICAgICAgIGxvY2F0aW9uOiB0aGlzLl9sb2NhdGlvbixcclxuICAgICAgICBhbmRyb2lkTG9ja1dvcmthcm91bmQ6IDFcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoZGJTY2hlbWEpIHtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlKGRiU2NoZW1hKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7IHJlc29sdmUoKTsgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXQoZGJTY2hlbWE6IERCU2NoZW1hKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB3aW5kb3cgPSAobmV3IFdpbmRvd1NlcnZpY2UoKSkubmF0aXZlV2luZG93O1xyXG4gICAgcmV0dXJuICBuZXcgUHJvbWlzZSAoIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5kYiA9IHdpbmRvdy5vcGVuRGF0YWJhc2UodGhpcy5fZGJOYW1lLCAnMS4wJywgJ2RhdGFiYXNlJywgLTEpO1xyXG4gICAgICBpZiAoZGJTY2hlbWEpIHtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlKGRiU2NoZW1hKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICB9KS50aGVuKCAoKSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlKHNjaGVtYTogREJTY2hlbWEpOiBQcm9taXNlPGFueT4ge1xyXG5cclxuICAgIGNvbnN0IHNlbnRlbmNlcyA9IFtdO1xyXG4gICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XHJcblxyXG4gICAgaWYgKHNjaGVtYS50YWJsZXMpIHtcclxuICAgICAgc2NoZW1hLnRhYmxlcy5mb3JFYWNoKHRhYmxlID0+IHtcclxuICAgICAgICBzZW50ZW5jZXMucHVzaCh0aGlzLmNyZWF0ZVRhYmxlKHRhYmxlKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjaGVtYS52aWV3cykge1xyXG4gICAgICBzY2hlbWEudmlld3MuZm9yRWFjaCggdmlldyA9PiB7XHJcbiAgICAgICAgc2VudGVuY2VzLnB1c2godGhpcy5jcmVhdGVWaWV3KHZpZXcpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VudGVuY2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VzcXVlbWEgZGUgbGEgYmFzZSBkZSBkYXRvcyB2YWNpYS4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBQcm9taXNlLmFsbChzZW50ZW5jZXMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlVGFibGUodGFibGU6IERCVGFibGUpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IHNxbCA9ICcnLCAgb25Db25mbGljdFByaW1hcnk7XHJcbiAgICBjb25zdCBzZW50ZW5jZXMgPSBbXSwgIG5ld0NvbHVtbnMgPSBbXVxyXG5cclxuICAgIGNvbnN0IHRhYmxlRERMID0gYXdhaXQgdGhpcy5fdGFibGVFeGlzdHModGFibGUubmFtZSk7XHJcbiAgICBpZiAodGFibGVEREwpIHtcclxuICAgICAgICB0YWJsZS5jb2x1bW5zLmZvckVhY2goIGNvbCA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX2NvbHVtbkV4aXN0cyh0YWJsZURETCBhcyBzdHJpbmcsIGNvbC5uYW1lKSApIHtcclxuICAgICAgICAgICAgbmV3Q29sdW1ucy5wdXNoKHRoaXMuYWRkQ29sdW1uKHRhYmxlLm5hbWUsIGNvbCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGFibGUuY29sdW1ucy5mb3JFYWNoKCBjb2wgPT4ge1xyXG4gICAgICAgIHNlbnRlbmNlcy5wdXNoKHRoaXMuZGVmQ29sdW1uKGNvbCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIG9uQ29uZmxpY3RQcmltYXJ5ID0gJ29uIGNvbmZsaWN0IGZhaWwnO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRhYmxlLnByaW1hcnkpICkgIHtcclxuICAgICAgc2VudGVuY2VzLnB1c2ggKCcgQ09OU1RSQUlOVCBpZGVudGlmaWNhZG9yIFBSSU1BUlkgS0VZICgnICsgdGFibGUucHJpbWFyeS5qb2luKCcsJykgKyAnKSAnICsgb25Db25mbGljdFByaW1hcnkgKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdGFibGUucHJpbWFyeSA9PT0gJ3N0cmluZycpICAge1xyXG4gICAgICBzZW50ZW5jZXMucHVzaCAoJyBDT05TVFJBSU5UIGlkZW50aWZpY2Fkb3IgUFJJTUFSWSBLRVkgKCcgKyB0YWJsZS5wcmltYXJ5ICsgJykgJyArIG9uQ29uZmxpY3RQcmltYXJ5ICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGFibGUudW5pcXVlcykge1xyXG4gICAgICB0YWJsZS51bmlxdWVzLmZvckVhY2goIHVuaXEgPT4ge1xyXG4gICAgICAgIHNlbnRlbmNlcy5wdXNoKHRoaXMuZGVmVW5pcXVlKHVuaXEpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRhYmxlLmZvcmVpZ25zKSB7XHJcbiAgICAgIHRhYmxlLmZvcmVpZ25zLmZvckVhY2ggKCBmb3JlID0+IHtcclxuICAgICAgICBzZW50ZW5jZXMucHVzaCh0aGlzLmRlZkZvcmVpZ24oZm9yZSkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFibGVEREwgJiYgbmV3Q29sdW1ucy5sZW5ndGggIT09IDApIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG5ld0NvbHVtbnMpXHJcbiAgICAgIC50aGVuKCAoKSA9PiB7IGNvbnNvbGUubG9nKGBUYWJsZSAke3RhYmxlLm5hbWV9IGFsdGVyZWQuYCk7IH0gKVxyXG4gICAgICAuY2F0Y2goIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yIChgVGFibGUgJHt0YWJsZS5uYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlICR7dGFibGUubmFtZX06ICR7ZXJyLm1lc3NhZ2V9YCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoIXRhYmxlRERMKSB7XHJcbiAgICAgIHNxbCA9ICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAnICsgdGFibGUubmFtZSArICcgKCcgKyBzZW50ZW5jZXMuam9pbignLCcpICsgJyknO1xyXG4gICAgICByZXR1cm4gdGhpcy5xdWVyeShzcWwpXHJcbiAgICAgIC50aGVuKCAoKSA9PiB7IGNvbnNvbGUubG9nKGBUYWJsZSAke3RhYmxlLm5hbWV9IGNyZWF0ZWQuYCk7IH0pXHJcbiAgICAgIC5jYXRjaCggKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgKGBUYWJsZSAke3RhYmxlLm5hbWV9OiAke2Vyci5tZXNzYWdlfWApO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgJHt0YWJsZS5uYW1lfTogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbiggKCkgPT4geyBjb25zb2xlLmxvZyhgVGFibGUgJHt0YWJsZS5uYW1lfSBpbml0aWFsaXplZC5gKTsgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgY3JlYXRlVmlldyh2aWV3OiBEQlZpZXcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IHNxbDogc3RyaW5nO1xyXG5cclxuICAgIHNxbCA9ICdDUkVBVEUgVklFVyBJRiBOT1QgRVhJU1RTICcgKyB2aWV3Lm5hbWVcclxuICAgICAgKyAnIEFTICcgKyB2aWV3LnNxbDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5xdWVyeShzcWwpO1xyXG5cclxuICB9XHJcblxyXG4gIGdldFNjaGVtYVRhYmxlKHRhYmxlTmFtZTogc3RyaW5nKTogREJUYWJsZSB7XHJcbiAgICBsZXQgcmVzOiBEQlRhYmxlO1xyXG5cclxuICAgIHRoaXMuc2NoZW1hLnRhYmxlcy5mb3JFYWNoKCB0YWJsZSA9PiB7XHJcbiAgICAgIGlmICh0YWJsZS5uYW1lID09PSB0YWJsZU5hbWUpIHtcclxuICAgICAgICByZXMgPSB0YWJsZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzO1xyXG5cclxuICB9XHJcblxyXG4gIGdldFVuaXF1ZXNUYWJsZSh0YWJsZTogREJUYWJsZSk6IG9iamVjdCB7XHJcbiAgICBsZXQgcmVzOiB7fTtcclxuICAgIHRhYmxlLnVuaXF1ZXMuZm9yRWFjaCh1bmlxID0+IHtcclxuICAgICAgcmVzW3VuaXEubmFtZV0gPSB1bmlxO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgcXVlcnkocXVlcnk6IHN0cmluZywgYmluZGluZ3M6IGFueVtdPSBbXSk6IFByb21pc2U8U3FsUmVzdWx0U2V0PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAocXVlcnkuaW5kZXhPZignc2VsZWN0JykgPT09IDApIHtcclxuICAgICAgICB0aGlzLmRiLnJlYWRUcmFuc2FjdGlvbigodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwocXVlcnksIGJpbmRpbmdzLCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCByZXN1bHQ6IFNxbFJlc3VsdFNldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICB9LCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCBlcnJvcjogU3FsRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIChlcnI6IFNxbEVycm9yKSA9PiByZWplY3QoZXJyKSApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGIudHJhbnNhY3Rpb24oKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvbi5leGVjdXRlU3FsKHF1ZXJ5LCBiaW5kaW5ncywgKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgcmVzdWx0OiBTcWxSZXN1bHRTZXQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgfSwgKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgZXJyb3I6IFNxbEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAoZXJyOiBTcWxFcnJvcikgPT4gcmVqZWN0KGVycikgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBDb3VudChxdWVyeTogc3RyaW5nLCBiaW5kaW5nczogYW55W109IFtdKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHJldHVybiB0aGlzLnF1ZXJ5KHF1ZXJ5LCBiaW5kaW5ncykudGhlbihyb3dzID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb3dzQ291bnQocm93cyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluc2VydCh0YWJsZTogc3RyaW5nLCBiaW5kaW5nczoge30pOiBQcm9taXNlPFNxbFJlc3VsdFNldD4ge1xyXG4gICAgbGV0IHNxbCA9ICcnLCBzcWxCaW5kcyA9IFtdLCBzcWxLZXlzID0gW10sIHNxbFZhbHVlcyA9IFtdIDtcclxuXHJcbiAgICBzcWwgPSBzcWwgKyAnaW5zZXJ0IGludG8gJyArIHRhYmxlICsgJyAnO1xyXG5cclxuICAgIGZvciAoY29uc3QgaW5kZXggaW4gYmluZGluZ3MpIHtcclxuICAgICAgIGlmIChiaW5kaW5ncy5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcclxuICAgICAgICAgICAgc3FsS2V5cy5wdXNoKGluZGV4KTtcclxuICAgICAgICAgICAgc3FsVmFsdWVzLnB1c2goYmluZGluZ3NbaW5kZXhdKTtcclxuICAgICAgICAgICAgc3FsQmluZHMucHVzaCgnPycpO1xyXG4gICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNxbCA9IHNxbCArICcoJyArIHNxbEtleXMuam9pbignLCcpICsgJykgdmFsdWVzICgnICsgc3FsQmluZHMuam9pbignLCcpICsgJyknO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5kYi50cmFuc2FjdGlvbih0cmFuc2FjdGlvbiA9PiB7XHJcbiAgICAgICAgICB0cmFuc2FjdGlvbi5leGVjdXRlU3FsKHNxbCwgc3FsVmFsdWVzLCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCByZXN1bHQ6IFNxbFJlc3VsdFNldCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgIH0sICh0cmFuc2FjdGlvbjogU3FsVHJhbnNhY3Rpb24sIGVycm9yOiBTcWxFcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSh0YWJsZTogc3RyaW5nLCBiaW5kaW5nczoge30sIHdoZXJlOiB7fSk6IFByb21pc2U8U3FsUmVzdWx0U2V0PiB7XHJcbiAgICBsZXQgc3FsID0gJycsIHNxbEJpbmRzID0gW10sIHNxbEtleXMgPVtdLCBzcWxWYWx1ZXMgPSBbXSA7XHJcblxyXG4gICAgc3FsID0gc3FsICsgJ3VwZGF0ZSAnICsgdGFibGUgKyAnIHNldCAnO1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4IGluIGJpbmRpbmdzKSB7XHJcbiAgICAgICBpZiAoYmluZGluZ3MuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdPYmogPSBiaW5kaW5nc1tpbmRleF07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3T2JqID09PSAnb2JqZWN0JyAmJiBuZXdPYmogIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5wdXNoKG5ld09iai52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3T2JqLmlmbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNxbEJpbmRzLnB1c2goaW5kZXggKyAnID0gaWZudWxsKCAnICsgaW5kZXggKyAnLDApICsgPycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdPYmoub3BlcmF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBzcWxCaW5kcy5wdXNoKGluZGV4ICsgJyA9ICcgKyBpbmRleCArIG5ld09iai5vcGVyYXRvciArICcgPycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzcWxCaW5kcy5wdXNoKGluZGV4ICsgJyA9ID8nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzcWxCaW5kcy5wdXNoKGluZGV4ICsgJyA9ID8nKTtcclxuICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5wdXNoKGJpbmRpbmdzW2luZGV4XSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggaW4gd2hlcmUpIHtcclxuICAgICAgIGlmICh3aGVyZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aGVyZVtpbmRleF0gPT09ICdvYmplY3QnICAmJiB3aGVyZVtpbmRleF0gIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgc3FsS2V5cy5wdXNoKGluZGV4ICsgJyAnICsgd2hlcmVbaW5kZXhdLm9wZXJhdG9yICsgJyA/Jyk7XHJcbiAgICAgICAgICAgICAgICBzcWxWYWx1ZXMucHVzaCh3aGVyZVtpbmRleF0udmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3FsS2V5cy5wdXNoKGluZGV4ICsgJyA9ID8nKTtcclxuICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5wdXNoKHdoZXJlW2luZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzcWwgPSBzcWwgKyBzcWxCaW5kcy5qb2luKCcsJykgKyAnIHdoZXJlICcgKyBzcWxLZXlzLmpvaW4oJyBhbmQgJyk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmRiLnRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uID0+IHtcclxuICAgICAgICB0cmFuc2FjdGlvbi5leGVjdXRlU3FsKHNxbCwgc3FsVmFsdWVzLCAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCByZXN1bHQ6IFNxbFJlc3VsdFNldCkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSwgKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgZXJyb3I6IFNxbEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkcm9wVGFibGUgKHRhYmxlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBjb250ID0gMTtcclxuXHJcbiAgICBjb250ID0gdGFibGVzLmxlbmd0aDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRhYmxlcy5zb21lKCB0YWJsZSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbnQgIT09IDApIHtcclxuICAgICAgICAgIHRoaXMucXVlcnkoJ0RST1AgVEFCTEUgJyArIHRhYmxlKVxyXG4gICAgICAgICAgLnRoZW4oICgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoY29udCA9PT0gMSApIHsgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7IGNvbnQtLTsgfVxyXG4gICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgY29udCA9IDA7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZmV0Y2hBbGwocmVzdWx0OiBTcWxSZXN1bHRTZXQpOiBvYmplY3RbXSB7XHJcbiAgICBsZXQgb3V0cHV0ID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG91dHB1dC5wdXNoKHJlc3VsdC5yb3dzLml0ZW0oaSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgfVxyXG5cclxuICBmZXRjaChyZXN1bHQ6IFNxbFJlc3VsdFNldCk6IG9iamVjdCB7XHJcbiAgICAgIGxldCBvYmpldG8gPSB1bmRlZmluZWQsIG5ld09iaj0gdW5kZWZpbmVkO1xyXG4gICAgICBpZiAocmVzdWx0LnJvd3MubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICBvYmpldG8gPSByZXN1bHQucm93cy5pdGVtKDApO1xyXG4gICAgICAgICAgbmV3T2JqID0ge307XHJcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZXRvKTtcclxuICAgICAgICAgIGZvciAobGV0IGtleSBpbiBrZXlzKSB7XHJcbiAgICAgICAgICAgICAgbmV3T2JqW2tleXNba2V5XV0gPSBvYmpldG9ba2V5c1trZXldXTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV3T2JqO1xyXG4gIH1cclxuXHJcblxyXG4gIHJvd3NDb3VudChyZXN1bHQ6IFNxbFJlc3VsdFNldCk6IG51bWJlciB7XHJcbiAgICAgIHJldHVybiByZXN1bHQucm93cy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICB0YWJsZUV4aXN0cyh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgnc2VsZWN0ICBzcWwgZnJvbSBzcWxpdGVfbWFzdGVyICcgK1xyXG4gICAgICAgICd3aGVyZSB0eXBlPVxcJ3RhYmxlXFwnIGFuZCBuYW1lPVxcJycgKyB0YWJsZSArICdcXCcnKVxyXG4gICAgLnRoZW4ocmVzdWx0ID0+ICAodGhpcy5yb3dzQ291bnQocmVzdWx0KSA9PT0gMSkgKTtcclxuICB9ICBcclxuXHJcbiAgY29sdW1uRXhpc3RzKHRhYmxlOiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFibGVFeGlzdHModGFibGUpXHJcbiAgICAgIC50aGVuKCh0YWJsZURETCkgPT4ge1xyXG4gICAgICAgIGlmICh0YWJsZURETCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkV4aXN0cygodGFibGVEREwgYXMgc3RyaW5nKSwgY29sdW1uKTtcclxuICAgICAgICB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuLyogUHJpdmF0ZSAqL1xyXG5cclxuICBwcml2YXRlIGRlZkNvbHVtbihjb2w6IERCQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIGxldCBjb2xTcWw6IHN0cmluZztcclxuXHJcbiAgICBjb2xTcWwgPSBjb2wubmFtZSArICcgJyArIGNvbC50eXBlO1xyXG4gICAgaWYgKCFjb2wuaXNOdWxsYWJsZSkge1xyXG4gICAgICBjb2xTcWwgKz0gICcgTk9UIE5VTEwgJztcclxuICAgIH1cclxuICAgIGlmIChjb2wuZGVmYXVsdCkge1xyXG4gICAgICBjb2xTcWwgKz0gJyBERUZBVUxUICcgKyBjb2wuZGVmYXVsdCArICcgJztcclxuICAgIH1cclxuICAgIGlmIChjb2wudHlwZSA9PT0gJ3RleHQnICYmIGNvbC5sZW5ndGgpIHtcclxuICAgICAgY29sU3FsICs9IGAgQ09OU1RSQUlOVCAke2NvbC5uYW1lfV9sZW5ndGggQ0hFQ0sgKCBgO1xyXG4gICAgICBpZiAoY29sLmlzTnVsbGFibGUpIHtcclxuICAgICAgICBjb2xTcWwgKz0gYCR7Y29sLm5hbWV9IGlzIG51bGwgT1IgYDtcclxuICAgICAgfVxyXG4gICAgICBjb2xTcWwgKz0gYGxlbmd0aCgke2NvbC5uYW1lfSkgPD0gJHtjb2wubGVuZ3RofSApYDtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbFNxbDtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlZlVuaXF1ZSh1bmlxdWU6IERCVW5pcXVlKTogc3RyaW5nIHtcclxuICAgIGxldCB1bmlxU3FsOiBzdHJpbmc7XHJcblxyXG4gICAgLy8gZGVwZW5kZSBkZWwgZW50b3JubywgcHJvZHVjY2nDs24gbyBkZXNhcnJvbGxvXHJcbiAgICBjb25zdCBvbkNvbmZsaWN0VW5pcXVlID0gJ29uIGNvbmZsaWN0IHJlcGxhY2UnO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHVuaXF1ZS5maWVsZHMpICkgIHtcclxuICAgICAgdW5pcVNxbCA9IGAgQ09OU1RSQUlOVCAke3VuaXF1ZS5uYW1lfSBVTklRVUUgKCAke3VuaXF1ZS5maWVsZHMuam9pbignLCcpfSApICR7b25Db25mbGljdFVuaXF1ZX0gYDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdW5pcXVlLmZpZWxkcyA9PT0gJ3N0cmluZycpICAge1xyXG4gICAgICB1bmlxU3FsID0gYCBDT05TVFJBSU5UICR7dW5pcXVlLm5hbWV9IFVOSVFVRSAoICR7dW5pcXVlLmZpZWxkc30gKSAke29uQ29uZmxpY3RVbmlxdWV9IGA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuaXFTcWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlZkZvcmVpZ24oZm9yZTogREJGb3JlaWduKTogc3RyaW5nIHtcclxuICAgIGxldCBmb3JlU3FsOiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9yZS5mb3JlaWduS2V5KSApICB7XHJcbiAgICAgIGZvcmVTcWwgPSBgIEZPUkVJR04gS0VZICggICR7Zm9yZS5mb3JlaWduS2V5LmpvaW4oJywnKX0gKSBgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZm9yZS5mb3JlaWduS2V5ID09PSAnc3RyaW5nJykgICB7XHJcbiAgICAgIGZvcmVTcWwgPSBgIEZPUkVJR04gS0VZICggICR7Zm9yZS5mb3JlaWduS2V5fSApIGA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9yZS5wcmltYXJ5S2V5KSApICB7XHJcbiAgICAgIGZvcmVTcWwgPSBgIFJFRkVSRU5DRVMgJHtmb3JlLnJlZmVyZW5jZVRhYmxlfSAoICAke2ZvcmUucHJpbWFyeUtleS5qb2luKCcsJyl9ICkgYDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGZvcmUucHJpbWFyeUtleSA9PT0gJ3N0cmluZycpICAge1xyXG4gICAgICBmb3JlU3FsID0gYCBSRUZFUkVOQ0VTICR7Zm9yZS5yZWZlcmVuY2VUYWJsZX0gKCAgJHtmb3JlLnByaW1hcnlLZXl9ICkgYDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9yZVNxbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RhYmxlRXhpc3RzKHRhYmxlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdzZWxlY3QgIHNxbCBmcm9tIHNxbGl0ZV9tYXN0ZXIgJyArXHJcbiAgICAgICAgJ3doZXJlIHR5cGU9XFwndGFibGVcXCcgYW5kIG5hbWU9XFwnJyArIHRhYmxlICsgJ1xcJycpXHJcbiAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJvd3NDb3VudChyZXN1bHQpID09PSAxKSB7IHJldHVybiAodGhpcy5mZXRjaChyZXN1bHQpIGFzIGFueSkuc3FsIGFzIHN0cmluZzsgfSBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbHVtbkV4aXN0cyh0YWJsZURETDogc3RyaW5nLCBjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGlmICh0YWJsZURETC5pbmRleE9mKGNvbHVtbikgPT09IC0xKSB7IHJldHVybiBmYWxzZTsgfSBlbHNlIHsgIHJldHVybiB0cnVlOyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZENvbHVtbih0YWJsZTogc3RyaW5nLCBjb2w6IERCQ29sdW1uKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGNvbFNxbCA9IHRoaXMuZGVmQ29sdW1uKGNvbCk7XHJcbiAgICBjb25zdCBxdWVyeSA9ICdhbHRlciBUQUJMRSAnICsgdGFibGUgKyAnIGFkZCBDT0xVTU4gJyArIGNvbFNxbDtcclxuICAgIHJldHVybiB0aGlzLnF1ZXJ5KHF1ZXJ5KTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBEQl9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48RGJDb25maWc+KCdkYldyYXBwZXJDb25maWcnKTtcclxuZXhwb3J0IGNvbnN0IERCX1NDSEVNQSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEQlNjaGVtYT4oJ2RiV3JhcHBlclNjaGVtYScpO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHREYkNvbmZpZygpOiBEYkNvbmZpZyB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGRiTmFtZTogJ2RiLnNxbGl0ZScsXHJcbiAgICBsb2NhdGlvbjogJ2RlZmF1bHQnLFxyXG4gICAgaW9zRGF0YWJhc2VMb2NhdGlvbjogJ0xpYnJhcnknXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVEYldyYXBwZXIoZGJDb25maWc6IERiQ29uZmlnLCBkYlNjaGVtYT86IERCU2NoZW1hKTogRGJXcmFwcGVyU2VydmljZSB7XHJcbiAgY29uc3QgY29uZmlnID0gISFkYkNvbmZpZyA/IGRiQ29uZmlnIDogZ2V0RGVmYXVsdERiQ29uZmlnKCk7XHJcbiAgcmV0dXJuIG5ldyBEYldyYXBwZXJTZXJ2aWNlKGNvbmZpZywgZGJTY2hlbWEpO1xyXG59XHJcblxyXG5cclxuXHJcbiJdfQ==
@@ -1,16 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- let WindowService = class WindowService {
4
- get nativeWindow() {
5
- return _window();
6
- }
7
- };
8
- WindowService = __decorate([
9
- Injectable()
10
- ], WindowService);
11
- export { WindowService };
12
- function _window() {
13
- // Return the global native browser window object
14
- return typeof window !== 'undefined' ? window : undefined;
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kYi13cmFwcGVyLyIsInNvdXJjZXMiOlsibGliL3dpbmRvdy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLElBQWEsYUFBYSxHQUExQixNQUFhLGFBQWE7SUFFeEIsSUFBSSxZQUFZO1FBQ2QsT0FBTyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0NBQ0YsQ0FBQTtBQUxZLGFBQWE7SUFEekIsVUFBVSxFQUFFO0dBQ0EsYUFBYSxDQUt6QjtTQUxZLGFBQWE7QUFPMUIsU0FBUyxPQUFPO0lBQ2QsaURBQWlEO0lBQ2pELE9BQU8sT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgV2luZG93U2VydmljZSB7XHJcblxyXG4gIGdldCBuYXRpdmVXaW5kb3coKTogYW55IHtcclxuICAgIHJldHVybiBfd2luZG93KCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfd2luZG93KCk6IGFueSB7XHJcbiAgLy8gUmV0dXJuIHRoZSBnbG9iYWwgbmF0aXZlIGJyb3dzZXIgd2luZG93IG9iamVjdFxyXG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHVuZGVmaW5lZDtcclxufSJdfQ==
@@ -1,7 +0,0 @@
1
- /*
2
- * Public API Surface of db-wrapper
3
- */
4
- export * from './lib/db-wrapper.service';
5
- export * from './lib/db-wrapper.module';
6
- export * from './lib/db-wrapper.models';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2RiLXdyYXBwZXIvIiwic291cmNlcyI6WyJwdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBRUgsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBkYi13cmFwcGVyXHJcbiAqL1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGItd3JhcHBlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGItd3JhcHBlci5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYi13cmFwcGVyLm1vZGVscyc7XHJcbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2RiLXdyYXBwZXIvIiwic291cmNlcyI6WyJkYi13cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -1,45 +0,0 @@
1
- export var DataType;
2
- (function (DataType) {
3
- DataType["Integer"] = "integer";
4
- DataType["Int"] = "integer";
5
- DataType["TinyInt"] = "integer";
6
- DataType["SmallInt"] = "integer";
7
- DataType["BigInt"] = "integer";
8
- DataType["Text"] = "text";
9
- DataType["Char"] = "text";
10
- DataType["NChar"] = "text";
11
- DataType["VarChar"] = "text";
12
- DataType["NVarChar"] = "text";
13
- DataType["CLOB"] = "text";
14
- DataType["BLOB"] = "blob";
15
- DataType["Real"] = "real";
16
- DataType["Double"] = "real";
17
- DataType["Decimal"] = "real";
18
- DataType["Float"] = "real";
19
- DataType["Boolean"] = "integer";
20
- DataType["DateTime"] = "text";
21
- DataType["Date"] = "text";
22
- })(DataType || (DataType = {}));
23
- export var DefaultType;
24
- (function (DefaultType) {
25
- DefaultType["Integer"] = "0";
26
- DefaultType["Int"] = "0";
27
- DefaultType["TinyInt"] = "0";
28
- DefaultType["SmallInt"] = "0";
29
- DefaultType["BigInt"] = "0";
30
- DefaultType["Text"] = "''";
31
- DefaultType["Char"] = "''";
32
- DefaultType["NChar"] = "''";
33
- DefaultType["VarChar"] = "''";
34
- DefaultType["NVarChar"] = "''";
35
- DefaultType["CLOB"] = "''";
36
- DefaultType["BLOB"] = "0";
37
- DefaultType["Real"] = "0.0";
38
- DefaultType["Double"] = "0.0";
39
- DefaultType["Decimal"] = "0.0";
40
- DefaultType["Float"] = "0.0";
41
- DefaultType["Boolean"] = "0";
42
- DefaultType["DateTime"] = "(datetime('now', 'localtime'))";
43
- DefaultType["Date"] = "(date('now', 'localtime'))";
44
- })(DefaultType || (DefaultType = {}));
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItd3JhcHBlci5tb2RlbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kYi13cmFwcGVyLyIsInNvdXJjZXMiOlsibGliL2RiLXdyYXBwZXIubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE1BQU0sQ0FBTixJQUFZLFFBcUJYO0FBckJELFdBQVksUUFBUTtJQUNoQiwrQkFBbUIsQ0FBQTtJQUNuQiwyQkFBZSxDQUFBO0lBQ2YsK0JBQW1CLENBQUE7SUFDbkIsZ0NBQW9CLENBQUE7SUFDcEIsOEJBQWtCLENBQUE7SUFDbEIseUJBQWEsQ0FBQTtJQUNiLHlCQUFhLENBQUE7SUFDYiwwQkFBYyxDQUFBO0lBQ2QsNEJBQWdCLENBQUE7SUFDaEIsNkJBQWlCLENBQUE7SUFDakIseUJBQWEsQ0FBQTtJQUNiLHlCQUFhLENBQUE7SUFDYix5QkFBYSxDQUFBO0lBQ2IsMkJBQWUsQ0FBQTtJQUNmLDRCQUFnQixDQUFBO0lBQ2hCLDBCQUFjLENBQUE7SUFDZCwrQkFBbUIsQ0FBQTtJQUNuQiw2QkFBaUIsQ0FBQTtJQUNqQix5QkFBYSxDQUFBO0FBRWpCLENBQUMsRUFyQlcsUUFBUSxLQUFSLFFBQVEsUUFxQm5CO0FBRUQsTUFBTSxDQUFOLElBQVksV0FvQlg7QUFwQkQsV0FBWSxXQUFXO0lBQ25CLDRCQUFhLENBQUE7SUFDYix3QkFBUyxDQUFBO0lBQ1QsNEJBQWEsQ0FBQTtJQUNiLDZCQUFjLENBQUE7SUFDZCwyQkFBWSxDQUFBO0lBQ1osMEJBQWEsQ0FBQTtJQUNiLDBCQUFhLENBQUE7SUFDYiwyQkFBYyxDQUFBO0lBQ2QsNkJBQWdCLENBQUE7SUFDaEIsOEJBQWlCLENBQUE7SUFDakIsMEJBQWEsQ0FBQTtJQUNiLHlCQUFVLENBQUE7SUFDViwyQkFBWSxDQUFBO0lBQ1osNkJBQWMsQ0FBQTtJQUNkLDhCQUFlLENBQUE7SUFDZiw0QkFBYSxDQUFBO0lBQ2IsNEJBQWEsQ0FBQTtJQUNiLDBEQUErQyxDQUFBO0lBQy9DLGtEQUF1QyxDQUFBO0FBQzNDLENBQUMsRUFwQlcsV0FBVyxLQUFYLFdBQVcsUUFvQnRCIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCBlbnVtIERhdGFUeXBlIHtcclxuICAgIEludGVnZXIgPSAnaW50ZWdlcicsXHJcbiAgICBJbnQgPSAnaW50ZWdlcicsXHJcbiAgICBUaW55SW50ID0gJ2ludGVnZXInLFxyXG4gICAgU21hbGxJbnQgPSAnaW50ZWdlcicsXHJcbiAgICBCaWdJbnQgPSAnaW50ZWdlcicsXHJcbiAgICBUZXh0ID0gJ3RleHQnLFxyXG4gICAgQ2hhciA9ICd0ZXh0JyxcclxuICAgIE5DaGFyID0gJ3RleHQnLFxyXG4gICAgVmFyQ2hhciA9ICd0ZXh0JyxcclxuICAgIE5WYXJDaGFyID0gJ3RleHQnLFxyXG4gICAgQ0xPQiA9ICd0ZXh0JyxcclxuICAgIEJMT0IgPSAnYmxvYicsXHJcbiAgICBSZWFsID0gJ3JlYWwnLFxyXG4gICAgRG91YmxlID0gJ3JlYWwnLFxyXG4gICAgRGVjaW1hbCA9ICdyZWFsJyxcclxuICAgIEZsb2F0ID0gJ3JlYWwnLFxyXG4gICAgQm9vbGVhbiA9ICdpbnRlZ2VyJyxcclxuICAgIERhdGVUaW1lID0gJ3RleHQnLFxyXG4gICAgRGF0ZSA9ICd0ZXh0J1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGVudW0gRGVmYXVsdFR5cGUge1xyXG4gICAgSW50ZWdlciA9ICcwJyxcclxuICAgIEludCA9ICcwJyxcclxuICAgIFRpbnlJbnQgPSAnMCcsXHJcbiAgICBTbWFsbEludCA9ICcwJyxcclxuICAgIEJpZ0ludCA9ICcwJyxcclxuICAgIFRleHQgPSAnXFwnXFwnJyxcclxuICAgIENoYXIgPSAnXFwnXFwnJyxcclxuICAgIE5DaGFyID0gJ1xcJ1xcJycsXHJcbiAgICBWYXJDaGFyID0gJ1xcJ1xcJycsXHJcbiAgICBOVmFyQ2hhciA9ICdcXCdcXCcnLFxyXG4gICAgQ0xPQiA9ICdcXCdcXCcnLFxyXG4gICAgQkxPQiA9ICcwJyxcclxuICAgIFJlYWwgPSAnMC4wJyxcclxuICAgIERvdWJsZSA9ICcwLjAnLFxyXG4gICAgRGVjaW1hbCA9ICcwLjAnLFxyXG4gICAgRmxvYXQgPSAnMC4wJyxcclxuICAgIEJvb2xlYW4gPSAnMCcsXHJcbiAgICBEYXRlVGltZSA9ICcoZGF0ZXRpbWUoXFwnbm93XFwnLCBcXCdsb2NhbHRpbWVcXCcpKScsXHJcbiAgICBEYXRlID0gJyhkYXRlKFxcJ25vd1xcJywgXFwnbG9jYWx0aW1lXFwnKSknXHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNxbFRyYW5zYWN0aW9uIHtcclxuICAgIC8qKlxyXG4gICAgICogRXhlY3V0ZXMgU1FMIHN0YXRlbWVudCB2aWEgY3VycmVudCB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBwYXJhbSBzcWwgU1FMIHN0YXRlbWVudCB0byBleGVjdXRlLlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBTUUwgc3RldGVtZW50IGFyZ3VtZW50cy5cclxuICAgICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgQ2FsbGVkIGluIGNhc2Ugb2YgcXVlcnkgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGRvbmUuXHJcbiAgICAgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayAgIENhbGxlZCwgd2hlbiBxdWVyeSBmYWlscy4gUmV0dXJuIGZhbHNlIHRvIGNvbnRpbnVlIHRyYW5zYWN0aW9uOyB0cnVlIG9yIG5vIHJldHVybiB0byByb2xsYmFjay5cclxuICAgICAqL1xyXG4gICAgZXhlY3V0ZVNxbChzcWw6IHN0cmluZyxcclxuICAgICAgICBwYXJhbXM/OiBhbnlbXSxcclxuICAgICAgICBzdWNjZXNzQ2FsbGJhY2s/OiAodHJhbnNhY3Rpb246IFNxbFRyYW5zYWN0aW9uLCByZXN1bHRTZXQ6IFNxbFJlc3VsdFNldCkgPT4gdm9pZCxcclxuICAgICAgICBlcnJvckNhbGxiYWNrPzogKHRyYW5zYWN0aW9uOiBTcWxUcmFuc2FjdGlvbiwgZXJyb3I6IFNxbEVycm9yKSA9PiBhbnkpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNxbFJlc3VsdFNldCB7XHJcbiAgICBpbnNlcnRJZDogbnVtYmVyO1xyXG4gICAgcm93c0FmZmVjdGVkOiBudW1iZXI7XHJcbiAgICByb3dzOiBTcWxSZXN1bHRTZXRSb3dMaXN0O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNxbFJlc3VsdFNldFJvd0xpc3Qge1xyXG4gICAgbGVuZ3RoOiBudW1iZXI7XHJcbiAgICBpdGVtKGluZGV4OiBudW1iZXIpOiBPYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3FsRXJyb3Ige1xyXG4gICAgY29kZTogbnVtYmVyO1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogSW50ZXJmYXogY29uIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIHdlYnNxbFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBEYkNvbmZpZyB7XHJcbiAgICAvKipcclxuICAgICAqICBub21icmUgZGUgbGEgYmFzZSBkZSBkYXRvc1xyXG4gICAgKi9cclxuICAgIGRiTmFtZTogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0ICdkZWZhdWx0J1xyXG4gICAgKi9cclxuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0ICdMaWJyYXJ5J1xyXG4gICAgKi9cclxuICAgIGlvc0RhdGFiYXNlTG9jYXRpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbnRlZmF6IHBhcmEgZGVmaW5pciB1biBjb25zdHJhaW50IHVuaXF1ZVxyXG4gKlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBEQlVuaXF1ZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7IC8qKiBub21icmUgICovXHJcbiAgICBmaWVsZHM6IHN0cmluZyB8IHN0cmluZ1tdOyAvKiogbGlzdGEgZGUgY2FtcG9zICovXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgREJGb3JlaWduIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGZvcmVpZ25LZXk6IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gICAgcmVmZXJlbmNlVGFibGU6IHN0cmluZztcclxuICAgIHByaW1hcnlLZXk6IHN0cmluZyB8IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERCQ29sdW1uIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHR5cGU6IERhdGFUeXBlO1xyXG4gICAgbGVuZ3RoPzogbnVtYmVyO1xyXG4gICAgaXNOdWxsYWJsZT86IGJvb2xlYW47XHJcbiAgICBkZWZhdWx0PzogRGVmYXVsdFR5cGUgfCBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgREJUYWJsZSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBjb2x1bW5zOiBEQkNvbHVtbltdO1xyXG4gICAgcHJpbWFyeTogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgICB1bmlxdWVzPzogREJVbmlxdWVbXTtcclxuICAgIGZvcmVpZ25zPzogREJGb3JlaWduW107XHJcbiAgICBzeW5jPzogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEQlZpZXcge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgc3FsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgREJTY2hlbWEge1xyXG4gICAgdGFibGVzOiBEQlRhYmxlW10sXHJcbiAgICB2aWV3cz86IERCVmlld1tdXHJcbn1cclxuXHJcbiJdfQ==
@@ -1,25 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { NgModule } from '@angular/core';
3
- import { DB_CONFIG, provideDbWrapper, DbWrapperService, DB_SCHEMA } from './db-wrapper.service';
4
- var DbWrapperModule = /** @class */ (function () {
5
- function DbWrapperModule() {
6
- }
7
- DbWrapperModule_1 = DbWrapperModule;
8
- DbWrapperModule.forRoot = function (dbConfig, schema) {
9
- return {
10
- ngModule: DbWrapperModule_1,
11
- providers: [
12
- { provide: DB_CONFIG, useValue: dbConfig },
13
- { provide: DB_SCHEMA, useValue: schema },
14
- { provide: DbWrapperService, useFactory: provideDbWrapper, deps: [DB_CONFIG, DB_SCHEMA] }
15
- ]
16
- };
17
- };
18
- var DbWrapperModule_1;
19
- DbWrapperModule = DbWrapperModule_1 = __decorate([
20
- NgModule()
21
- ], DbWrapperModule);
22
- return DbWrapperModule;
23
- }());
24
- export { DbWrapperModule };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItd3JhcHBlci5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kYi13cmFwcGVyLyIsInNvdXJjZXMiOlsibGliL2RiLXdyYXBwZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2hHO0lBQUE7SUFZQSxDQUFDO3dCQVpZLGVBQWU7SUFDbkIsdUJBQU8sR0FBZCxVQUFlLFFBQWtCLEVBQUUsTUFBaUI7UUFDbEQsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBZTtZQUN6QixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFHLFFBQVEsRUFBRSxRQUFRLEVBQUU7Z0JBQzNDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUN4QyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFO2FBQzFGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0lBVlUsZUFBZTtRQUQzQixRQUFRLEVBQUU7T0FDRSxlQUFlLENBWTNCO0lBQUQsc0JBQUM7Q0FBQSxBQVpELElBWUM7U0FaWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGJDb25maWcsIERCU2NoZW1hIH0gZnJvbSAnLi9kYi13cmFwcGVyLm1vZGVscyc7XHJcbmltcG9ydCB7IERCX0NPTkZJRywgcHJvdmlkZURiV3JhcHBlciwgRGJXcmFwcGVyU2VydmljZSwgREJfU0NIRU1BIH0gZnJvbSAnLi9kYi13cmFwcGVyLnNlcnZpY2UnO1xyXG5cclxuQE5nTW9kdWxlKClcclxuZXhwb3J0IGNsYXNzIERiV3JhcHBlck1vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QoZGJDb25maWc6IERiQ29uZmlnLCBzY2hlbWE/OiBEQlNjaGVtYSk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IERiV3JhcHBlck1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBEQl9DT05GSUcsICB1c2VWYWx1ZTogZGJDb25maWcgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IERCX1NDSEVNQSwgdXNlVmFsdWU6IHNjaGVtYSB9LFxyXG4gICAgICAgIHsgcHJvdmlkZTogRGJXcmFwcGVyU2VydmljZSwgdXNlRmFjdG9yeTogcHJvdmlkZURiV3JhcHBlciwgZGVwczogW0RCX0NPTkZJRywgREJfU0NIRU1BXSB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=