ngx-universal-zone 1.0.4 → 1.0.5
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/database/db.module.d.ts +7 -4
- package/fesm2022/ngx-universal-zone-database.mjs +16 -236
- package/fesm2022/ngx-universal-zone-database.mjs.map +1 -1
- package/fesm2022/ngx-universal-zone.mjs +16 -236
- package/fesm2022/ngx-universal-zone.mjs.map +1 -1
- package/package.json +1 -1
- package/database/db-sql.service.d.ts +0 -48
package/database/db.module.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { EnvironmentProviders } from '@angular/core';
|
|
1
|
+
import { EnvironmentProviders, Type } from '@angular/core';
|
|
2
2
|
import { SchemaService } from './schema.service';
|
|
3
3
|
import { DbWebService } from './db-web.service';
|
|
4
|
-
import {
|
|
5
|
-
export declare function dbFactory(schemaSvc: SchemaService): DbWebService |
|
|
6
|
-
|
|
4
|
+
import { DbService } from './db-base.service';
|
|
5
|
+
export declare function dbFactory(schemaSvc: SchemaService, customDbService?: Type<DbService>): DbWebService | DbService;
|
|
6
|
+
/**
|
|
7
|
+
* Optionally accepts a custom DbService class (e.g., from ngx-ionic-zone).
|
|
8
|
+
*/
|
|
9
|
+
export declare function provideDb(customDbService?: Type<DbService>): EnvironmentProviders;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Observable, Subject, switchMap, of, forkJoin } from 'rxjs';
|
|
2
2
|
import Dexie from 'dexie';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Injectable, makeEnvironmentProviders } from '@angular/core';
|
|
4
|
+
import { Injectable, inject, makeEnvironmentProviders } from '@angular/core';
|
|
5
5
|
|
|
6
6
|
// @ts-ignore
|
|
7
7
|
class DbServiceConfig {
|
|
@@ -350,255 +350,35 @@ const DbSettingConfig = {
|
|
|
350
350
|
}
|
|
351
351
|
};
|
|
352
352
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
this.config = config;
|
|
356
|
-
this.schemaSvc = schemaSvc;
|
|
357
|
-
this._isDbInitialized = false;
|
|
358
|
-
this.dbInitialized = new Subject();
|
|
359
|
-
this.dbInitialized$ = this.dbInitialized.asObservable();
|
|
360
|
-
this._dbName = config.dbName;
|
|
361
|
-
// await this._deleteDatabase();
|
|
362
|
-
// this._db = CapacitorSQLite;
|
|
363
|
-
this._db.open({ database: this._dbName }).then(async (response) => {
|
|
364
|
-
if (response.result) {
|
|
365
|
-
await this._dbSuccess();
|
|
366
|
-
this.initializeDb();
|
|
367
|
-
}
|
|
368
|
-
}, (e) => {
|
|
369
|
-
this._dbError(e);
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
getAllRx(store, opt) {
|
|
373
|
-
throw new Error('Method not implemented.');
|
|
374
|
-
}
|
|
375
|
-
testDb() {
|
|
376
|
-
this._db.transaction((tr) => {
|
|
377
|
-
tr.executeSql('SELECT upper(?) AS upperString', ['Test string'], (tr, rs) => {
|
|
378
|
-
console.log('Got upperString result: ' + rs.rows.item(0).upperString);
|
|
379
|
-
});
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
initializeDb() {
|
|
383
|
-
const delay = 50;
|
|
384
|
-
//workaround: don't proceed unless db is initialized...wait everytime 50ms
|
|
385
|
-
const _self = this;
|
|
386
|
-
let timerId = setTimeout(async function request() {
|
|
387
|
-
if (!_self._isDbInitialized) {
|
|
388
|
-
//retry
|
|
389
|
-
timerId = setTimeout(request, delay);
|
|
390
|
-
}
|
|
391
|
-
else {
|
|
392
|
-
//clear timeout
|
|
393
|
-
clearTimeout(timerId);
|
|
394
|
-
timerId = null;
|
|
395
|
-
await _self._prepareTables();
|
|
396
|
-
// heavy database operations should start from this...
|
|
397
|
-
_self.dbInitialized.next(_self._db);
|
|
398
|
-
}
|
|
399
|
-
}, delay);
|
|
400
|
-
}
|
|
401
|
-
get Db() {
|
|
402
|
-
return this._db;
|
|
403
|
-
}
|
|
404
|
-
putLocal(store, data) {
|
|
405
|
-
return new Promise(async (resolve, reject) => {
|
|
406
|
-
let sql = `BEGIN TRANSACTION;`;
|
|
407
|
-
const values = [];
|
|
408
|
-
const total = await this.count(store);
|
|
409
|
-
if (total) {
|
|
410
|
-
//update
|
|
411
|
-
sql = `UPDATE ${store} SET `;
|
|
412
|
-
//columns
|
|
413
|
-
for (let prop in data) {
|
|
414
|
-
if (data.hasOwnProperty(prop)) {
|
|
415
|
-
sql += `${prop}='${data[prop]}',`;
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
//remove extra ',' at the end
|
|
419
|
-
sql = sql.substr(0, sql.length - 1);
|
|
420
|
-
}
|
|
421
|
-
else {
|
|
422
|
-
//insert
|
|
423
|
-
sql = `INSERT INTO ${store} `;
|
|
424
|
-
//columns
|
|
425
|
-
sql += `(`;
|
|
426
|
-
for (let prop in data) {
|
|
427
|
-
if (data.hasOwnProperty(prop)) {
|
|
428
|
-
sql += `${prop},`;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
//remove extra ',' at the end
|
|
432
|
-
sql = sql.substr(0, sql.length - 1);
|
|
433
|
-
sql += `)`;
|
|
434
|
-
//values
|
|
435
|
-
sql += ` VALUES (`;
|
|
436
|
-
for (let prop in data) {
|
|
437
|
-
sql += `?,`;
|
|
438
|
-
values.push(data[prop]);
|
|
439
|
-
}
|
|
440
|
-
sql = sql.substr(0, sql.length - 1);
|
|
441
|
-
sql += `)`;
|
|
442
|
-
}
|
|
443
|
-
sql += `COMMIT TRANSACTION;`;
|
|
444
|
-
const { changes } = await this._db.execute({
|
|
445
|
-
statements: sql,
|
|
446
|
-
values: values,
|
|
447
|
-
});
|
|
448
|
-
resolve(changes);
|
|
449
|
-
// this._db.transaction(async (tx) => {
|
|
450
|
-
// const res = await this._executeSql<{ rowsAffected, insertId }>(tx, sql, values);
|
|
451
|
-
// resolve(res);
|
|
452
|
-
// }, (error) => reject(error));
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
putLocalRx(store, data) {
|
|
456
|
-
return new Observable((observer) => {
|
|
457
|
-
this.putLocal(store, data).then((result) => {
|
|
458
|
-
observer.next(result);
|
|
459
|
-
observer.complete();
|
|
460
|
-
});
|
|
461
|
-
});
|
|
462
|
-
}
|
|
463
|
-
get(store, key) {
|
|
464
|
-
return new Promise(async (resolve, reject) => {
|
|
465
|
-
//get primary key field form schema
|
|
466
|
-
const table = this.schemaSvc.schema.stores.filter((s) => s.name === store)[0];
|
|
467
|
-
const pk = table.columns.filter((c) => c.isPrimaryKey)[0];
|
|
468
|
-
const pkName = pk.name;
|
|
469
|
-
let sql = `SELECT * FROM ${store} WHERE ${pkName} = '${key}' LIMIT 1`;
|
|
470
|
-
try {
|
|
471
|
-
let data;
|
|
472
|
-
const { values } = await this._db.query({ statement: sql, values: [] });
|
|
473
|
-
if (values.length) {
|
|
474
|
-
data = values[0];
|
|
475
|
-
}
|
|
476
|
-
resolve(data);
|
|
477
|
-
}
|
|
478
|
-
catch (e) {
|
|
479
|
-
reject(e);
|
|
480
|
-
}
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
getRx(store, key) {
|
|
484
|
-
// @ts-ignore
|
|
485
|
-
return;
|
|
486
|
-
}
|
|
487
|
-
getAll(store, opt) {
|
|
488
|
-
return new Promise(async (resolve, reject) => {
|
|
489
|
-
let sql = `SELECT * FROM ${store}`;
|
|
490
|
-
try {
|
|
491
|
-
let data;
|
|
492
|
-
const { values } = await this._db.query({ statement: sql, values: [] });
|
|
493
|
-
resolve(values);
|
|
494
|
-
}
|
|
495
|
-
catch (e) {
|
|
496
|
-
reject(e);
|
|
497
|
-
}
|
|
498
|
-
});
|
|
499
|
-
}
|
|
500
|
-
remove(store, key) {
|
|
501
|
-
return new Promise((resolve, reject) => {
|
|
502
|
-
throw 'remove not impleted in db-sql yet';
|
|
503
|
-
});
|
|
504
|
-
}
|
|
505
|
-
removeRx(store, key) {
|
|
506
|
-
throw 'remove not impleted in db-sql yet';
|
|
507
|
-
}
|
|
508
|
-
removeAll(store) {
|
|
509
|
-
return new Promise((resolve, reject) => {
|
|
510
|
-
throw 'removeAll not impleted in db-sql yet';
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
removeAllRx(store) {
|
|
514
|
-
throw 'removeAllRx not impleted in db-sql yet';
|
|
515
|
-
}
|
|
516
|
-
count(store, opts) {
|
|
517
|
-
return new Promise(async (resolve, reject) => {
|
|
518
|
-
let sql = `SELECT count(*) AS total FROM ${store} `;
|
|
519
|
-
const { values } = await this._db.query({ statement: sql, values: [] });
|
|
520
|
-
resolve(values);
|
|
521
|
-
});
|
|
522
|
-
}
|
|
523
|
-
countRx(store, opts) {
|
|
524
|
-
return new Observable((observer) => {
|
|
525
|
-
this.count(store, opts).then((result) => {
|
|
526
|
-
observer.next(result);
|
|
527
|
-
observer.complete();
|
|
528
|
-
}, (error) => observer.error(error));
|
|
529
|
-
});
|
|
530
|
-
}
|
|
531
|
-
deleteDb() {
|
|
532
|
-
return this._deleteDatabase();
|
|
533
|
-
}
|
|
534
|
-
deleteTable(store) {
|
|
535
|
-
throw 'deleteTable not impleted in db-sql yet';
|
|
536
|
-
}
|
|
537
|
-
_prepareTables() {
|
|
538
|
-
return new Promise(async (resolve, reject) => {
|
|
539
|
-
const schemas = this.schemaSvc.schema.stores;
|
|
540
|
-
const promises = [];
|
|
541
|
-
for (let schema of schemas) {
|
|
542
|
-
let sql = `BEGIN TRANSACTION;`;
|
|
543
|
-
sql += `CREATE TABLE IF NOT EXISTS ${schema.name} `;
|
|
544
|
-
sql += `(`;
|
|
545
|
-
for (let col of schema.columns) {
|
|
546
|
-
//TODO: for user table, need to fix primary key
|
|
547
|
-
// const ikPkTypeNumber = col['type'] == 'INTEGER';
|
|
548
|
-
sql += `${col.name}${col.type ? ' ' + col.type : ''}${col['isPrimaryKey'] ? ' PRIMARY KEY' : ''},`;
|
|
549
|
-
}
|
|
550
|
-
//remove extra ',' at the end
|
|
551
|
-
sql = sql.substr(0, sql.length - 1);
|
|
552
|
-
sql += `)`;
|
|
553
|
-
sql += `COMMIT TRANSACTION;`;
|
|
554
|
-
const promise = this._db.execute({ statements: sql });
|
|
555
|
-
promises.push(promise);
|
|
556
|
-
}
|
|
557
|
-
try {
|
|
558
|
-
await Promise.all(promises);
|
|
559
|
-
resolve(null);
|
|
560
|
-
}
|
|
561
|
-
catch (e) {
|
|
562
|
-
reject(e);
|
|
563
|
-
}
|
|
564
|
-
});
|
|
565
|
-
}
|
|
566
|
-
_deleteDatabase() {
|
|
567
|
-
return this._db.deleteDatabase({ database: this._dbName });
|
|
568
|
-
}
|
|
569
|
-
_dbSuccess() {
|
|
570
|
-
this._isDbInitialized = true;
|
|
571
|
-
}
|
|
572
|
-
_dbError(err) {
|
|
573
|
-
alert('Open database ERROR: ' + JSON.stringify(err));
|
|
574
|
-
}
|
|
575
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DbSqliteService, deps: [{ token: DbServiceConfig }, { token: SchemaService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
576
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DbSqliteService }); }
|
|
577
|
-
}
|
|
578
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DbSqliteService, decorators: [{
|
|
579
|
-
type: Injectable
|
|
580
|
-
}], ctorParameters: () => [{ type: DbServiceConfig }, { type: SchemaService }] });
|
|
581
|
-
|
|
582
|
-
function dbFactory(schemaSvc) {
|
|
353
|
+
// Accept an optional custom DbService provider (e.g., for SQLite)
|
|
354
|
+
function dbFactory(schemaSvc, customDbService) {
|
|
583
355
|
const dbConfig = schemaSvc.config;
|
|
356
|
+
if (customDbService) {
|
|
357
|
+
// If a custom DbService is provided (e.g., SQLite), instantiate it
|
|
358
|
+
return inject(customDbService, { optional: false });
|
|
359
|
+
}
|
|
584
360
|
switch (dbConfig.dbType) {
|
|
585
361
|
case DbServiceType.IndexDd:
|
|
586
362
|
return new DbWebService(dbConfig, schemaSvc);
|
|
587
|
-
case
|
|
588
|
-
|
|
363
|
+
// Remove Sqlite case from here
|
|
364
|
+
default:
|
|
365
|
+
throw new Error('Unsupported dbType or missing customDbService');
|
|
589
366
|
}
|
|
590
367
|
}
|
|
591
|
-
|
|
368
|
+
/**
|
|
369
|
+
* Optionally accepts a custom DbService class (e.g., from ngx-ionic-zone).
|
|
370
|
+
*/
|
|
371
|
+
function provideDb(customDbService) {
|
|
592
372
|
const providers = [
|
|
593
373
|
SchemaService,
|
|
594
374
|
{
|
|
595
375
|
provide: DbService,
|
|
596
|
-
useFactory: dbFactory,
|
|
376
|
+
useFactory: (schemaSvc) => dbFactory(schemaSvc, customDbService),
|
|
597
377
|
deps: [SchemaService],
|
|
598
378
|
}
|
|
599
379
|
];
|
|
600
380
|
return makeEnvironmentProviders(providers);
|
|
601
|
-
}
|
|
381
|
+
}
|
|
602
382
|
|
|
603
383
|
/**
|
|
604
384
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-universal-zone-database.mjs","sources":["../../../projects/ngx-universal-zone/database/db-base.service.ts","../../../projects/ngx-universal-zone/database/db-web.service.ts","../../../projects/ngx-universal-zone/database/schema.service.ts","../../../projects/ngx-universal-zone/database/db-setting-constant.ts","../../../projects/ngx-universal-zone/database/db-sql.service.ts","../../../projects/ngx-universal-zone/database/db.module.ts","../../../projects/ngx-universal-zone/database/ngx-universal-zone-database.ts"],"sourcesContent":["// @ts-ignore\n\nimport { Observable } from \"rxjs\";\n\nimport { ITableOptions } from \"./schema.service\";\nimport { DbFilter } from \"./db-web.service\";\n\nexport class DbServiceConfig {\n dbType!: DbServiceType;\n dbName!: string;\n schema!: ITableOptions[];\n}\n\nexport enum DbServiceType {\n IndexDd,\n Sqlite\n}\n\nexport abstract class DbService {\n dbInitialized$ = new Observable<any>();\n\n get Db(): any {\n return;\n }\n\n putLocal(store, data): Promise<{ rowsAffected; insertId }> {\n // @ts-ignore\n\n return;\n }\n\n putLocalRx(store, data): Observable<any> {\n // @ts-ignore\n return;\n }\n\n get<T>(store: string, key: any): Promise<T> {\n // @ts-ignore\n return;\n }\n getRx<T>(store: string, key: any): Observable<T> { \n // @ts-ignore\n return; \n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n // @ts-ignore\n return;\n }\n\n getAllRx<T>(store: string, opt?: DbFilter): Observable<T> {\n // @ts-ignore\n return;\n }\n\n remove(store, id): Promise<any> {\n // @ts-ignore\n return;\n }\n\n removeRx(store, key): Observable<any> {\n // @ts-ignore\n return;\n }\n\n removeAll(store): Promise<any> {\n // @ts-ignore\n return;\n }\n\n removeAllRx(store: string): Observable<any> {\n // @ts-ignore\n return;\n }\n\n count(store, opts?: { key }): Promise<number> {\n // @ts-ignore\n return;\n }\n\n countRx(store, opts?: { key }): Observable<number> {\n // @ts-ignore\n return;\n }\n\n deleteDb(): Promise<any> {\n // @ts-ignore\n return;\n }\n\n deleteTable(store): Observable<void> {\n // @ts-ignore\n return;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport Dexie, { IndexableType } from 'dexie';\nimport { forkJoin, Observable, of, Subject, switchMap } from 'rxjs';\n\nimport { SchemaService } from './schema.service';\nimport { DbService, DbServiceConfig } from './db-base.service';\n\n// @Injectable()\nexport class DbWebService extends Dexie implements DbService {\n private _db!: Dexie;\n private dbInitialized = new Subject<any>();\n\n constructor(\n private config: DbServiceConfig,\n private schemaService: SchemaService\n ) {\n super(config.dbName);\n\n const schema: {\n [tableName: string]: string | null;\n } = {};\n schemaService.schema.stores.forEach((s) => {\n let cols = ``;\n for (let c of s.columns) {\n cols += `${c.isPrimaryKey ? `++${c.name}` : `,${c.name}`}`;\n }\n schema[s.name] = cols;\n });\n this.version(1).stores(schema);\n this.open()\n .then((d) => {\n this._db = d;\n\n this.dbInitialized.next(d);\n })\n .catch((e) => alert(e));\n }\n \n dbInitialized$ = this.dbInitialized.asObservable();\n\n get Db() {\n return this._db;\n }\n\n putLocal(store, data): Promise<{ rowsAffected; insertId }> {\n return new Promise(async (resolve, reject) => {\n const schema = this.schemaService.schema.stores.filter(\n (s) => s.name == store\n )[0];\n const key = schema.columns.filter((s) => s.isPrimaryKey)[0];\n\n const exist = data[key.name] ? await this.get(store, data[key.name]) : null;\n if (exist) {\n //update\n this.Db\n .table(store)\n .update(data[key.name], data)\n .then(\n (r) => resolve(null as any),\n (e) => reject(e)\n );\n } else {\n this.Db\n .table(store)\n .add(data)\n .then(\n (r) => resolve(null as any),\n (e) => reject(e)\n );\n }\n });\n }\n\n putLocalRx(store, data) {\n return new Observable((observer) => {\n this.putLocal(store, data).then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n get<T>(store: string, key: any): Promise<T> {\n return new Promise((resolve, reject) => {\n if(!this.Db) {\n return reject('Database not initialized. Please wait for dbInitialized$ to emit.');\n }\n \n this.Db\n .table(store)\n .get(key)\n .then((r) => {\n resolve(<T>r);\n }, (e) => reject(e));\n });\n }\n\n getRx<T>(store: string, key: any) {\n return new Observable<T>((observer) => {\n this.get<T>(store, key).then((value) => {\n observer.next(value);\n observer.complete();\n });\n });\n }\n\n getByFieldName<T>(storeName, fieldName, key): Promise<Array<T>> {\n const filter = {};\n filter[fieldName] = key;\n return this.Db.table(storeName).where(filter).toArray();\n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n return new Promise(async (resolve, reject) => {\n if(!this.Db) {\n return reject('Database not initialized. Please wait for dbInitialized$ to emit.');\n }\n\n let table = this.Db.table(store);\n let collection = table.toCollection();\n\n if(opt?.sortBy) {\n collection = table.orderBy(opt.sortBy);\n }\n\n if(opt?.sortType && opt?.sortType == 'desc') {\n collection = table.reverse();\n }\n\n // collection = this.Db.table(store).toCollection();\n if (opt && opt.key && opt.value) {\n if(!opt.keyRange) {\n opt.keyRange = KeyRangeType.equalTo;\n }\n\n switch (opt.keyRange) {\n case KeyRangeType.startsWithIgnoreCase:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .startsWithIgnoreCase(opt.value);\n break;\n case KeyRangeType.equalTo:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .equals(opt.value);\n break;\n case KeyRangeType.notEqualTo:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .notEqual(opt.value);\n break;\n case KeyRangeType.equalToIgnoreCase:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .equalsIgnoreCase(opt.value);\n break;\n }\n }\n\n if(opt?.pageIndex != null) {\n collection = collection.offset((opt.pageIndex - 1) * opt.pageSize);\n }\n\n if(opt?.pageSize != null) {\n collection = collection.limit(opt.pageSize)\n }\n\n // let data!: T;\n // if(opt?.sortBy) {\n // data = <T>await collection.sortBy(opt.sortBy);\n // } else {\n // data = <T>await collection.toArray();\n // }\n\n // if(opt.sortType == 'desc') {\n // data = <T>(<any[]>data).reverse();\n // }\n\n const data = <T>await collection.toArray();\n resolve(data);\n });\n }\n\n getAllRx<T>(store: string, opt?: DbFilter) {\n return new Observable<T>((observer) => {\n this.getAll<T>(store, opt).then((value) => {\n observer.next(value);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n remove(store, key): Promise<any> {\n return this.Db.table(store).delete(key);\n }\n\n removeRx(store, key): Observable<any> {\n return new Observable((observer) => {\n this.remove(store, key).then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n async removeAll(store) {\n const all = await this.getAll<any[]>(store);\n const schema = this.schemaService.schema.stores.filter(\n (s) => s.name == store\n )[0];\n const key = schema.columns.filter((s) => s.isPrimaryKey)[0];\n\n const promises: any = [];\n for (let r of all) {\n promises.push(this.Db.table(store).delete(key.name));\n }\n\n await Promise.all(promises);\n }\n\n removeAllRx(store: string) {\n return this.getAllRx<any[]>(store).pipe(\n switchMap((entries) => {\n const observables: Array<Observable<any>> = [];\n for(let entry of entries) {\n observables.push(this.removeRx(store, entry.id));\n }\n \n if(!observables.length) {\n return of(null);\n }\n\n return forkJoin(observables);\n })\n );\n }\n\n count(store, opts?: { key }): Promise<number> {\n if (opts && opts.key) {\n const pk = this.schemaService.schema.stores\n .filter((s) => s.name == store)[0]\n .columns.filter((s) => s.isPrimaryKey)[0];\n return this.Db.table(store).where(pk.name).equals(opts.key).count();\n }\n\n return this.Db.table(store).count();\n }\n\n countRx(store, opts?: { key }) {\n return new Observable<number>((observer) => {\n this.count(store, opts).then((value) => {\n observer.next(value);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n deleteDb() {\n return new Promise(async (resolve, reject) => {\n await this.Db.delete();\n resolve(null);\n });\n }\n\n deleteTable(store) {\n return new Observable<void>((observer) => {\n this.Db.table(store).clear().then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n}\n\nexport interface DbFilter {\n key?: any;\n value?: any;\n keyRange?: KeyRangeType;\n pageIndex?: number;\n pageSize?: number;\n sortBy?: any;\n sortType?: 'asc' | 'desc';\n}\n\nexport enum KeyRangeType {\n equalToIgnoreCase = 1,\n startsWithIgnoreCase = 2,\n equalTo = 3,\n notEqualTo = 4\n}\n","import { Injectable } from '@angular/core';\nimport { DbServiceConfig } from './db-base.service';\n\n\nexport interface ITableOptions {\n name: string;\n columns: Array<{ name; isPrimaryKey?; type? }>;\n}\n\n@Injectable()\nexport class SchemaService {\n schema = {\n stores: <ITableOptions[]>[]\n };\n tables: Record<string, string> = {};\n\n private _config = {} as DbServiceConfig;\n\n /**\n * Represents a SchemaService that manages the database schema.\n */\n constructor() {\n\n }\n\n get config() {\n return this._config;\n }\n\n init(config: DbServiceConfig) {\n this._config = config;\n\n if(config.schema && config.schema.length) {\n this.schema.stores = this.config.schema;\n this.schema.stores.forEach((s) => this.tables[s.name] = s.name);\n }\n }\n}","import { ITableOptions } from \"./schema.service\";\r\n\r\nexport class DbSettingConstant {\r\n public static readonly SETTING = 'setting';\r\n}\r\n\r\nexport const DbSettingConfig = {\r\n schema: <ITableOptions>{\r\n name: DbSettingConstant.SETTING,\r\n columns: [\r\n {\r\n name: 'key',\r\n isPrimaryKey: true,\r\n type: 'TEXT',\r\n },\r\n {\r\n name: 'value',\r\n type: 'TEXT',\r\n },\r\n ],\r\n }\r\n};","import { Injectable } from '@angular/core';\n\nimport { Observable, of, Subject } from 'rxjs';\n// import * as CapacitorSQLPlugin from 'capacitor-sqlite';\n\nimport { SchemaService, ITableOptions } from './schema.service';\nimport { DbService, DbServiceConfig } from './db-base.service';\nimport { DbFilter } from './db-web.service';\n\n@Injectable()\nexport class DbSqliteService implements DbService {\n private _dbName: string;\n private _db: any;\n private _isDbInitialized = false;\n private dbInitialized = new Subject<any>();\n\n constructor(\n private config: DbServiceConfig,\n private schemaSvc: SchemaService\n ) {\n this._dbName = config.dbName;\n // await this._deleteDatabase();\n // this._db = CapacitorSQLite;\n\n this._db.open({ database: this._dbName }).then(\n async (response: { result: boolean; message: string }) => {\n if (response.result) {\n await this._dbSuccess();\n\n this.initializeDb();\n }\n }, (e) => {\n this._dbError(e);\n });\n }\n getAllRx<T>(store: string, opt?: DbFilter): Observable<T> {\n throw new Error('Method not implemented.');\n }\n\n testDb() {\n this._db.transaction((tr) => {\n tr.executeSql(\n 'SELECT upper(?) AS upperString',\n ['Test string'],\n (tr, rs) => {\n console.log('Got upperString result: ' + rs.rows.item(0).upperString);\n }\n );\n });\n }\n\n initializeDb() {\n const delay = 50;\n //workaround: don't proceed unless db is initialized...wait everytime 50ms\n const _self = this;\n let timerId: any = setTimeout(async function request() {\n if (!_self._isDbInitialized) {\n //retry\n timerId = setTimeout(request, delay);\n } else {\n //clear timeout\n clearTimeout(timerId);\n timerId = null;\n\n await _self._prepareTables();\n\n // heavy database operations should start from this...\n _self.dbInitialized.next(_self._db);\n }\n }, delay);\n }\n\n dbInitialized$ = this.dbInitialized.asObservable();\n\n get Db() {\n return this._db;\n }\n\n putLocal(store, data: any): Promise<{ rowsAffected; insertId }> {\n return new Promise(async (resolve, reject) => {\n let sql = `BEGIN TRANSACTION;`;\n const values: any[] = [];\n\n const total = await this.count(store);\n if (total) {\n //update\n sql = `UPDATE ${store} SET `;\n //columns\n for (let prop in data) {\n if (data.hasOwnProperty(prop)) {\n sql += `${prop}='${data[prop]}',`;\n }\n }\n //remove extra ',' at the end\n sql = sql.substr(0, sql.length - 1);\n } else {\n //insert\n sql = `INSERT INTO ${store} `;\n //columns\n sql += `(`;\n for (let prop in data) {\n if (data.hasOwnProperty(prop)) {\n sql += `${prop},`;\n }\n }\n //remove extra ',' at the end\n sql = sql.substr(0, sql.length - 1);\n sql += `)`;\n\n //values\n sql += ` VALUES (`;\n for (let prop in data) {\n sql += `?,`;\n values.push(data[prop]);\n }\n sql = sql.substr(0, sql.length - 1);\n sql += `)`;\n }\n\n sql += `COMMIT TRANSACTION;`;\n const { changes } = await this._db.execute({\n statements: sql,\n values: values,\n });\n resolve(changes);\n // this._db.transaction(async (tx) => {\n // const res = await this._executeSql<{ rowsAffected, insertId }>(tx, sql, values);\n // resolve(res);\n // }, (error) => reject(error));\n });\n }\n\n putLocalRx(store, data) {\n return new Observable((observer) => {\n this.putLocal(store, data).then((result) => {\n observer.next(result);\n observer.complete();\n });\n });\n }\n\n get<T>(store: string, key: any): Promise<T> {\n return new Promise(async (resolve, reject) => {\n //get primary key field form schema\n const table: any = this.schemaSvc.schema.stores.filter(\n (s) => s.name === store\n )[0];\n const pk = table.columns.filter((c) => c.isPrimaryKey)[0];\n const pkName = pk.name;\n\n let sql = `SELECT * FROM ${store} WHERE ${pkName} = '${key}' LIMIT 1`;\n try {\n let data;\n const { values } = await this._db.query({ statement: sql, values: [] });\n if (values.length) {\n data = values[0];\n }\n resolve(data);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n getRx<T>(store: string, key: any): Observable<T> { \n // @ts-ignore\n return; \n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n return new Promise(async (resolve, reject) => {\n let sql = `SELECT * FROM ${store}`;\n\n try {\n let data;\n const { values } = await this._db.query({ statement: sql, values: [] });\n resolve(values);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n remove(store, key): Promise<any> {\n return new Promise((resolve, reject) => {\n throw 'remove not impleted in db-sql yet';\n });\n }\n\n removeRx(store, key): Observable<any> {\n throw 'remove not impleted in db-sql yet';\n }\n\n removeAll(store) {\n return new Promise((resolve, reject) => {\n throw 'removeAll not impleted in db-sql yet';\n });\n }\n\n removeAllRx(store: string): Observable<any> {\n throw 'removeAllRx not impleted in db-sql yet';\n }\n\n count(store, opts?: { key }): Promise<number> {\n return new Promise(async (resolve, reject) => {\n let sql = `SELECT count(*) AS total FROM ${store} `;\n\n const { values } = await this._db.query({ statement: sql, values: [] });\n resolve(values);\n });\n }\n\n countRx(store, opts?: { key }) {\n return new Observable<number>((observer) => {\n this.count(store, opts).then((result) => {\n observer.next(result);\n observer.complete();\n }, (error) => observer.error(error));\n });\n }\n\n deleteDb() {\n return this._deleteDatabase();\n }\n\n \n deleteTable(store): Observable<void> {\n throw 'deleteTable not impleted in db-sql yet';\n }\n\n private _prepareTables() {\n return new Promise(async (resolve, reject) => {\n const schemas = this.schemaSvc.schema.stores;\n\n const promises: any[] = [];\n for (let schema of schemas) {\n let sql = `BEGIN TRANSACTION;`;\n\n sql += `CREATE TABLE IF NOT EXISTS ${schema.name} `;\n sql += `(`;\n\n for (let col of schema.columns) {\n //TODO: for user table, need to fix primary key\n // const ikPkTypeNumber = col['type'] == 'INTEGER';\n sql += `${col.name}${col.type ? ' ' + col.type : ''}${\n col['isPrimaryKey'] ? ' PRIMARY KEY' : ''\n },`;\n }\n\n //remove extra ',' at the end\n sql = sql.substr(0, sql.length - 1);\n sql += `)`;\n\n sql += `COMMIT TRANSACTION;`;\n\n const promise = this._db.execute({ statements: sql });\n promises.push(promise);\n }\n\n try {\n await Promise.all(promises);\n resolve(null);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n private _deleteDatabase(): Promise<{ result: boolean; message: string }> {\n return this._db.deleteDatabase({ database: this._dbName });\n }\n\n private _dbSuccess() {\n this._isDbInitialized = true;\n }\n\n private _dbError(err) {\n alert('Open database ERROR: ' + JSON.stringify(err));\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\r\n\r\nimport { SchemaService } from './schema.service';\r\nimport { DbWebService } from './db-web.service';\r\nimport { DbService, DbServiceType } from './db-base.service';\r\nimport { DbSqliteService } from './db-sql.service';\r\n\r\nexport function dbFactory(schemaSvc: SchemaService) {\r\n const dbConfig = schemaSvc.config;\r\n\r\n switch (dbConfig.dbType) {\r\n case DbServiceType.IndexDd:\r\n return new DbWebService(dbConfig, schemaSvc);\r\n case DbServiceType.Sqlite:\r\n return new DbSqliteService(dbConfig, schemaSvc);\r\n }\r\n}\r\n\r\nexport const provideDb = (): EnvironmentProviders => {\r\n const providers: Provider[] = [\r\n SchemaService,\r\n {\r\n provide: DbService,\r\n useFactory: dbFactory,\r\n deps: [SchemaService],\r\n }\r\n ];\r\n\r\n return makeEnvironmentProviders(providers);\r\n};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DbServiceConfig","i2.SchemaService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-universal-zone-database.mjs","sources":["../../../projects/ngx-universal-zone/database/db-base.service.ts","../../../projects/ngx-universal-zone/database/db-web.service.ts","../../../projects/ngx-universal-zone/database/schema.service.ts","../../../projects/ngx-universal-zone/database/db-setting-constant.ts","../../../projects/ngx-universal-zone/database/db.module.ts","../../../projects/ngx-universal-zone/database/ngx-universal-zone-database.ts"],"sourcesContent":["// @ts-ignore\n\nimport { Observable } from \"rxjs\";\n\nimport { ITableOptions } from \"./schema.service\";\nimport { DbFilter } from \"./db-web.service\";\n\nexport class DbServiceConfig {\n dbType!: DbServiceType;\n dbName!: string;\n schema!: ITableOptions[];\n}\n\nexport enum DbServiceType {\n IndexDd,\n Sqlite\n}\n\nexport abstract class DbService {\n dbInitialized$ = new Observable<any>();\n\n get Db(): any {\n return;\n }\n\n putLocal(store, data): Promise<{ rowsAffected; insertId }> {\n // @ts-ignore\n\n return;\n }\n\n putLocalRx(store, data): Observable<any> {\n // @ts-ignore\n return;\n }\n\n get<T>(store: string, key: any): Promise<T> {\n // @ts-ignore\n return;\n }\n getRx<T>(store: string, key: any): Observable<T> { \n // @ts-ignore\n return; \n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n // @ts-ignore\n return;\n }\n\n getAllRx<T>(store: string, opt?: DbFilter): Observable<T> {\n // @ts-ignore\n return;\n }\n\n remove(store, id): Promise<any> {\n // @ts-ignore\n return;\n }\n\n removeRx(store, key): Observable<any> {\n // @ts-ignore\n return;\n }\n\n removeAll(store): Promise<any> {\n // @ts-ignore\n return;\n }\n\n removeAllRx(store: string): Observable<any> {\n // @ts-ignore\n return;\n }\n\n count(store, opts?: { key }): Promise<number> {\n // @ts-ignore\n return;\n }\n\n countRx(store, opts?: { key }): Observable<number> {\n // @ts-ignore\n return;\n }\n\n deleteDb(): Promise<any> {\n // @ts-ignore\n return;\n }\n\n deleteTable(store): Observable<void> {\n // @ts-ignore\n return;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport Dexie, { IndexableType } from 'dexie';\nimport { forkJoin, Observable, of, Subject, switchMap } from 'rxjs';\n\nimport { SchemaService } from './schema.service';\nimport { DbService, DbServiceConfig } from './db-base.service';\n\n// @Injectable()\nexport class DbWebService extends Dexie implements DbService {\n private _db!: Dexie;\n private dbInitialized = new Subject<any>();\n\n constructor(\n private config: DbServiceConfig,\n private schemaService: SchemaService\n ) {\n super(config.dbName);\n\n const schema: {\n [tableName: string]: string | null;\n } = {};\n schemaService.schema.stores.forEach((s) => {\n let cols = ``;\n for (let c of s.columns) {\n cols += `${c.isPrimaryKey ? `++${c.name}` : `,${c.name}`}`;\n }\n schema[s.name] = cols;\n });\n this.version(1).stores(schema);\n this.open()\n .then((d) => {\n this._db = d;\n\n this.dbInitialized.next(d);\n })\n .catch((e) => alert(e));\n }\n \n dbInitialized$ = this.dbInitialized.asObservable();\n\n get Db() {\n return this._db;\n }\n\n putLocal(store, data): Promise<{ rowsAffected; insertId }> {\n return new Promise(async (resolve, reject) => {\n const schema = this.schemaService.schema.stores.filter(\n (s) => s.name == store\n )[0];\n const key = schema.columns.filter((s) => s.isPrimaryKey)[0];\n\n const exist = data[key.name] ? await this.get(store, data[key.name]) : null;\n if (exist) {\n //update\n this.Db\n .table(store)\n .update(data[key.name], data)\n .then(\n (r) => resolve(null as any),\n (e) => reject(e)\n );\n } else {\n this.Db\n .table(store)\n .add(data)\n .then(\n (r) => resolve(null as any),\n (e) => reject(e)\n );\n }\n });\n }\n\n putLocalRx(store, data) {\n return new Observable((observer) => {\n this.putLocal(store, data).then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n get<T>(store: string, key: any): Promise<T> {\n return new Promise((resolve, reject) => {\n if(!this.Db) {\n return reject('Database not initialized. Please wait for dbInitialized$ to emit.');\n }\n \n this.Db\n .table(store)\n .get(key)\n .then((r) => {\n resolve(<T>r);\n }, (e) => reject(e));\n });\n }\n\n getRx<T>(store: string, key: any) {\n return new Observable<T>((observer) => {\n this.get<T>(store, key).then((value) => {\n observer.next(value);\n observer.complete();\n });\n });\n }\n\n getByFieldName<T>(storeName, fieldName, key): Promise<Array<T>> {\n const filter = {};\n filter[fieldName] = key;\n return this.Db.table(storeName).where(filter).toArray();\n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n return new Promise(async (resolve, reject) => {\n if(!this.Db) {\n return reject('Database not initialized. Please wait for dbInitialized$ to emit.');\n }\n\n let table = this.Db.table(store);\n let collection = table.toCollection();\n\n if(opt?.sortBy) {\n collection = table.orderBy(opt.sortBy);\n }\n\n if(opt?.sortType && opt?.sortType == 'desc') {\n collection = table.reverse();\n }\n\n // collection = this.Db.table(store).toCollection();\n if (opt && opt.key && opt.value) {\n if(!opt.keyRange) {\n opt.keyRange = KeyRangeType.equalTo;\n }\n\n switch (opt.keyRange) {\n case KeyRangeType.startsWithIgnoreCase:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .startsWithIgnoreCase(opt.value);\n break;\n case KeyRangeType.equalTo:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .equals(opt.value);\n break;\n case KeyRangeType.notEqualTo:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .notEqual(opt.value);\n break;\n case KeyRangeType.equalToIgnoreCase:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .equalsIgnoreCase(opt.value);\n break;\n }\n }\n\n if(opt?.pageIndex != null) {\n collection = collection.offset((opt.pageIndex - 1) * opt.pageSize);\n }\n\n if(opt?.pageSize != null) {\n collection = collection.limit(opt.pageSize)\n }\n\n // let data!: T;\n // if(opt?.sortBy) {\n // data = <T>await collection.sortBy(opt.sortBy);\n // } else {\n // data = <T>await collection.toArray();\n // }\n\n // if(opt.sortType == 'desc') {\n // data = <T>(<any[]>data).reverse();\n // }\n\n const data = <T>await collection.toArray();\n resolve(data);\n });\n }\n\n getAllRx<T>(store: string, opt?: DbFilter) {\n return new Observable<T>((observer) => {\n this.getAll<T>(store, opt).then((value) => {\n observer.next(value);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n remove(store, key): Promise<any> {\n return this.Db.table(store).delete(key);\n }\n\n removeRx(store, key): Observable<any> {\n return new Observable((observer) => {\n this.remove(store, key).then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n async removeAll(store) {\n const all = await this.getAll<any[]>(store);\n const schema = this.schemaService.schema.stores.filter(\n (s) => s.name == store\n )[0];\n const key = schema.columns.filter((s) => s.isPrimaryKey)[0];\n\n const promises: any = [];\n for (let r of all) {\n promises.push(this.Db.table(store).delete(key.name));\n }\n\n await Promise.all(promises);\n }\n\n removeAllRx(store: string) {\n return this.getAllRx<any[]>(store).pipe(\n switchMap((entries) => {\n const observables: Array<Observable<any>> = [];\n for(let entry of entries) {\n observables.push(this.removeRx(store, entry.id));\n }\n \n if(!observables.length) {\n return of(null);\n }\n\n return forkJoin(observables);\n })\n );\n }\n\n count(store, opts?: { key }): Promise<number> {\n if (opts && opts.key) {\n const pk = this.schemaService.schema.stores\n .filter((s) => s.name == store)[0]\n .columns.filter((s) => s.isPrimaryKey)[0];\n return this.Db.table(store).where(pk.name).equals(opts.key).count();\n }\n\n return this.Db.table(store).count();\n }\n\n countRx(store, opts?: { key }) {\n return new Observable<number>((observer) => {\n this.count(store, opts).then((value) => {\n observer.next(value);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n deleteDb() {\n return new Promise(async (resolve, reject) => {\n await this.Db.delete();\n resolve(null);\n });\n }\n\n deleteTable(store) {\n return new Observable<void>((observer) => {\n this.Db.table(store).clear().then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n}\n\nexport interface DbFilter {\n key?: any;\n value?: any;\n keyRange?: KeyRangeType;\n pageIndex?: number;\n pageSize?: number;\n sortBy?: any;\n sortType?: 'asc' | 'desc';\n}\n\nexport enum KeyRangeType {\n equalToIgnoreCase = 1,\n startsWithIgnoreCase = 2,\n equalTo = 3,\n notEqualTo = 4\n}\n","import { Injectable } from '@angular/core';\nimport { DbServiceConfig } from './db-base.service';\n\n\nexport interface ITableOptions {\n name: string;\n columns: Array<{ name; isPrimaryKey?; type? }>;\n}\n\n@Injectable()\nexport class SchemaService {\n schema = {\n stores: <ITableOptions[]>[]\n };\n tables: Record<string, string> = {};\n\n private _config = {} as DbServiceConfig;\n\n /**\n * Represents a SchemaService that manages the database schema.\n */\n constructor() {\n\n }\n\n get config() {\n return this._config;\n }\n\n init(config: DbServiceConfig) {\n this._config = config;\n\n if(config.schema && config.schema.length) {\n this.schema.stores = this.config.schema;\n this.schema.stores.forEach((s) => this.tables[s.name] = s.name);\n }\n }\n}","import { ITableOptions } from \"./schema.service\";\r\n\r\nexport class DbSettingConstant {\r\n public static readonly SETTING = 'setting';\r\n}\r\n\r\nexport const DbSettingConfig = {\r\n schema: <ITableOptions>{\r\n name: DbSettingConstant.SETTING,\r\n columns: [\r\n {\r\n name: 'key',\r\n isPrimaryKey: true,\r\n type: 'TEXT',\r\n },\r\n {\r\n name: 'value',\r\n type: 'TEXT',\r\n },\r\n ],\r\n }\r\n};","import { EnvironmentProviders, makeEnvironmentProviders, Provider, inject, Optional, Type } from '@angular/core';\r\n\r\nimport { SchemaService } from './schema.service';\r\nimport { DbWebService } from './db-web.service';\r\nimport { DbService, DbServiceType } from './db-base.service';\r\n\r\n// Accept an optional custom DbService provider (e.g., for SQLite)\r\nexport function dbFactory(schemaSvc: SchemaService, customDbService?: Type<DbService>) {\r\n const dbConfig = schemaSvc.config;\r\n\r\n if (customDbService) {\r\n // If a custom DbService is provided (e.g., SQLite), instantiate it\r\n return inject(customDbService, { optional: false });\r\n }\r\n\r\n switch (dbConfig.dbType) {\r\n case DbServiceType.IndexDd:\r\n return new DbWebService(dbConfig, schemaSvc);\r\n // Remove Sqlite case from here\r\n default:\r\n throw new Error('Unsupported dbType or missing customDbService');\r\n }\r\n}\r\n\r\n/**\r\n * Optionally accepts a custom DbService class (e.g., from ngx-ionic-zone).\r\n */\r\nexport function provideDb(customDbService?: Type<DbService>): EnvironmentProviders {\r\n const providers: Provider[] = [\r\n SchemaService,\r\n {\r\n provide: DbService,\r\n useFactory: (schemaSvc: SchemaService) => dbFactory(schemaSvc, customDbService),\r\n deps: [SchemaService],\r\n }\r\n ];\r\n\r\n return makeEnvironmentProviders(providers);\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAAA;MAOa,eAAe,CAAA;AAI3B;IAEW;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACR,CAAC,EAHW,aAAa,KAAb,aAAa,GAGxB,EAAA,CAAA,CAAA;MAEqB,SAAS,CAAA;AAA/B,IAAA,WAAA,GAAA;AACE,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,UAAU,EAAO;;AAEtC,IAAA,IAAI,EAAE,GAAA;QACJ;;IAGF,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAA;;QAGlB;;IAGF,UAAU,CAAC,KAAK,EAAE,IAAI,EAAA;;QAEpB;;IAGF,GAAG,CAAI,KAAa,EAAE,GAAQ,EAAA;;QAE5B;;IAEF,KAAK,CAAI,KAAa,EAAE,GAAQ,EAAA;;QAE9B;;IAGF,MAAM,CAAI,KAAa,EAAE,GAAc,EAAA;;QAErC;;IAGF,QAAQ,CAAI,KAAa,EAAE,GAAc,EAAA;;QAEvC;;IAGF,MAAM,CAAC,KAAK,EAAE,EAAE,EAAA;;QAEd;;IAGF,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAA;;QAEjB;;AAGF,IAAA,SAAS,CAAC,KAAK,EAAA;;QAEb;;AAGF,IAAA,WAAW,CAAC,KAAa,EAAA;;QAEvB;;IAGF,KAAK,CAAC,KAAK,EAAE,IAAc,EAAA;;QAEzB;;IAGF,OAAO,CAAC,KAAK,EAAE,IAAc,EAAA;;QAE3B;;IAGF,QAAQ,GAAA;;QAEN;;AAGF,IAAA,WAAW,CAAC,KAAK,EAAA;;QAEf;;AAEH;;ACtFD;AACM,MAAO,YAAa,SAAQ,KAAK,CAAA;IAIrC,WACU,CAAA,MAAuB,EACvB,aAA4B,EAAA;AAEpC,QAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAHZ,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAa,CAAA,aAAA,GAAb,aAAa;AAJf,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAO;AA4B1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;QApBhD,MAAM,MAAM,GAER,EAAE;QACN,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACxC,IAAI,IAAI,GAAG,CAAA,CAAE;AACb,YAAA,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;gBACvB,IAAI,IAAI,GAAG,CAAC,CAAC,YAAY,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,CAAE,CAAA,GAAG,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,CAAE,CAAA,CAAA,CAAE;;AAE5D,YAAA,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;AACvB,SAAC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,IAAI;AACN,aAAA,IAAI,CAAC,CAAC,CAAC,KAAI;AACV,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AAEZ,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,SAAC;aACA,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;;AAK3B,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG;;IAGjB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAA;QAClB,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAI;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CACpD,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,CACvB,CAAC,CAAC,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAE3D,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI;YAC3E,IAAI,KAAK,EAAE;;AAET,gBAAA,IAAI,CAAC;qBACF,KAAK,CAAC,KAAK;qBACX,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI;qBAC3B,IAAI,CACH,CAAC,CAAC,KAAK,OAAO,CAAC,IAAW,CAAC,EAC3B,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CACjB;;iBACE;AACL,gBAAA,IAAI,CAAC;qBACF,KAAK,CAAC,KAAK;qBACX,GAAG,CAAC,IAAI;qBACR,IAAI,CACH,CAAC,CAAC,KAAK,OAAO,CAAC,IAAW,CAAC,EAC3B,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CACjB;;AAEP,SAAC,CAAC;;IAGJ,UAAU,CAAC,KAAK,EAAE,IAAI,EAAA;AACpB,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACzC,gBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAC,CAAC;;IAGJ,GAAG,CAAI,KAAa,EAAE,GAAQ,EAAA;QAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAG,CAAC,IAAI,CAAC,EAAE,EAAE;AACX,gBAAA,OAAO,MAAM,CAAC,mEAAmE,CAAC;;AAGlF,YAAA,IAAI,CAAC;iBACJ,KAAK,CAAC,KAAK;iBACX,GAAG,CAAC,GAAG;AACP,iBAAA,IAAI,CAAC,CAAC,CAAC,KAAI;gBACV,OAAO,CAAI,CAAC,CAAC;aACd,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,SAAC,CAAC;;IAGJ,KAAK,CAAI,KAAa,EAAE,GAAQ,EAAA;AAC9B,QAAA,OAAO,IAAI,UAAU,CAAI,CAAC,QAAQ,KAAI;AACpC,YAAA,IAAI,CAAC,GAAG,CAAI,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACrC,gBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBACpB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC,CAAC;AACJ,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAI,SAAS,EAAE,SAAS,EAAE,GAAG,EAAA;QACzC,MAAM,MAAM,GAAG,EAAE;AACjB,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG;AACvB,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;;IAGzD,MAAM,CAAI,KAAa,EAAE,GAAc,EAAA;QACrC,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,IAAG,CAAC,IAAI,CAAC,EAAE,EAAE;AACX,gBAAA,OAAO,MAAM,CAAC,mEAAmE,CAAC;;YAGpF,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE;AAErC,YAAA,IAAG,GAAG,EAAE,MAAM,EAAE;gBACd,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;;YAGxC,IAAG,GAAG,EAAE,QAAQ,IAAI,GAAG,EAAE,QAAQ,IAAI,MAAM,EAAE;AAC3C,gBAAA,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE;;;YAI9B,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE;AAC/B,gBAAA,IAAG,CAAC,GAAG,CAAC,QAAQ,EAAE;AAChB,oBAAA,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC,OAAO;;AAGrC,gBAAA,QAAQ,GAAG,CAAC,QAAQ;oBAClB,KAAK,YAAY,CAAC,oBAAoB;wBACpC,UAAU,GAAG,IAAI,CAAC;6BACf,KAAK,CAAC,KAAK;AACX,6BAAA,KAAK,CAAC,GAAG,CAAC,GAAG;AACb,6BAAA,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;wBAClC;oBACA,KAAK,YAAY,CAAC,OAAO;wBACvB,UAAU,GAAG,IAAI,CAAC;6BACf,KAAK,CAAC,KAAK;AACX,6BAAA,KAAK,CAAC,GAAG,CAAC,GAAG;AACb,6BAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;wBACpB;oBACF,KAAK,YAAY,CAAC,UAAU;wBAC1B,UAAU,GAAG,IAAI,CAAC;6BACf,KAAK,CAAC,KAAK;AACX,6BAAA,KAAK,CAAC,GAAG,CAAC,GAAG;AACb,6BAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;wBACtB;oBACF,KAAK,YAAY,CAAC,iBAAiB;wBACjC,UAAU,GAAG,IAAI,CAAC;6BACf,KAAK,CAAC,KAAK;AACX,6BAAA,KAAK,CAAC,GAAG,CAAC,GAAG;AACb,6BAAA,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;wBAC9B;;;AAIR,YAAA,IAAG,GAAG,EAAE,SAAS,IAAI,IAAI,EAAE;AACzB,gBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC;;AAGpE,YAAA,IAAG,GAAG,EAAE,QAAQ,IAAI,IAAI,EAAE;gBACxB,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;;;;;;;;;;;AAc7C,YAAA,MAAM,IAAI,GAAM,MAAM,UAAU,CAAC,OAAO,EAAE;YAC1C,OAAO,CAAC,IAAI,CAAC;AACf,SAAC,CAAC;;IAGJ,QAAQ,CAAI,KAAa,EAAE,GAAc,EAAA;AACvC,QAAA,OAAO,IAAI,UAAU,CAAI,CAAC,QAAQ,KAAI;AACpC,YAAA,IAAI,CAAC,MAAM,CAAI,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACxC,gBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBACpB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAC,CAAC;;IAGJ,MAAM,CAAC,KAAK,EAAE,GAAG,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;;IAGzC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAA;AACjB,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AACtC,gBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAC,CAAC;;IAGJ,MAAM,SAAS,CAAC,KAAK,EAAA;QACnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAQ,KAAK,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CACpD,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,CACvB,CAAC,CAAC,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAE3D,MAAM,QAAQ,GAAQ,EAAE;AACxB,QAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE;AACjB,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;AAGtD,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAG7B,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAQ,KAAK,CAAC,CAAC,IAAI,CACrC,SAAS,CAAC,CAAC,OAAO,KAAI;YACpB,MAAM,WAAW,GAA2B,EAAE;AAC9C,YAAA,KAAI,IAAI,KAAK,IAAI,OAAO,EAAE;AACxB,gBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;;AAGlD,YAAA,IAAG,CAAC,WAAW,CAAC,MAAM,EAAE;AACtB,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;AAGjB,YAAA,OAAO,QAAQ,CAAC,WAAW,CAAC;SAC7B,CAAC,CACH;;IAGH,KAAK,CAAC,KAAK,EAAE,IAAc,EAAA;AACzB,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAClC,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;AAChC,iBAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;;QAGrE,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE;;IAGrC,OAAO,CAAC,KAAK,EAAE,IAAc,EAAA;AAC3B,QAAA,OAAO,IAAI,UAAU,CAAS,CAAC,QAAQ,KAAI;AACzC,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACrC,gBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBACpB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAC,CAAC;;IAGJ,QAAQ,GAAA;QACN,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAI;AAC3C,YAAA,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YACtB,OAAO,CAAC,IAAI,CAAC;AACf,SAAC,CAAC;;AAGJ,IAAA,WAAW,CAAC,KAAK,EAAA;AACf,QAAA,OAAO,IAAI,UAAU,CAAO,CAAC,QAAQ,KAAI;AACvC,YAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAC3C,gBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAC,CAAC;;AAEL;IAYW;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAqB;AACrB,IAAA,YAAA,CAAA,YAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAwB;AACxB,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,YAAA,CAAA,YAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc;AAChB,CAAC,EALW,YAAY,KAAZ,YAAY,GAKvB,EAAA,CAAA,CAAA;;MC5RY,aAAa,CAAA;AAQxB;;AAEG;AACH,IAAA,WAAA,GAAA;AAVA,QAAA,IAAA,CAAA,MAAM,GAAG;AACP,YAAA,MAAM,EAAmB;SAC1B;QACD,IAAM,CAAA,MAAA,GAA2B,EAAE;QAE3B,IAAO,CAAA,OAAA,GAAG,EAAqB;;AASvC,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;;AAGrB,IAAA,IAAI,CAAC,MAAuB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QAErB,IAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YACxC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;YACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;;;8GAxBxD,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAb,aAAa,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;MCPY,iBAAiB,CAAA;aACH,IAAO,CAAA,OAAA,GAAG,SAAS,CAAC;;AAGlC,MAAA,eAAe,GAAG;AAC3B,IAAA,MAAM,EAAiB;QACrB,IAAI,EAAE,iBAAiB,CAAC,OAAO;AAC/B,QAAA,OAAO,EAAE;AACP,YAAA;AACE,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,IAAI,EAAE,MAAM;AACb,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,MAAM;AACb,aAAA;AACF,SAAA;AACF;;;ACdL;AACgB,SAAA,SAAS,CAAC,SAAwB,EAAE,eAAiC,EAAA;AACnF,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM;IAEjC,IAAI,eAAe,EAAE;;QAEnB,OAAO,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;AAGrD,IAAA,QAAQ,QAAQ,CAAC,MAAM;QACrB,KAAK,aAAa,CAAC,OAAO;AACxB,YAAA,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC;;AAE9C,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;;AAEtE;AAEA;;AAEG;AACG,SAAU,SAAS,CAAC,eAAiC,EAAA;AACzD,IAAA,MAAM,SAAS,GAAe;QAC5B,aAAa;AACb,QAAA;AACE,YAAA,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,CAAC,SAAwB,KAAK,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;YAC/E,IAAI,EAAE,CAAC,aAAa,CAAC;AACtB;KACF;AAED,IAAA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;;ACtCA;;AAEG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, makeEnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { Injectable, inject, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { Observable, Subject, switchMap, of, forkJoin, defer, delay } from 'rxjs';
|
|
4
4
|
import Dexie from 'dexie';
|
|
5
5
|
import { filter } from 'rxjs/operators';
|
|
@@ -363,255 +363,35 @@ const DbSettingConfig = {
|
|
|
363
363
|
}
|
|
364
364
|
};
|
|
365
365
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
this.config = config;
|
|
369
|
-
this.schemaSvc = schemaSvc;
|
|
370
|
-
this._isDbInitialized = false;
|
|
371
|
-
this.dbInitialized = new Subject();
|
|
372
|
-
this.dbInitialized$ = this.dbInitialized.asObservable();
|
|
373
|
-
this._dbName = config.dbName;
|
|
374
|
-
// await this._deleteDatabase();
|
|
375
|
-
// this._db = CapacitorSQLite;
|
|
376
|
-
this._db.open({ database: this._dbName }).then(async (response) => {
|
|
377
|
-
if (response.result) {
|
|
378
|
-
await this._dbSuccess();
|
|
379
|
-
this.initializeDb();
|
|
380
|
-
}
|
|
381
|
-
}, (e) => {
|
|
382
|
-
this._dbError(e);
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
getAllRx(store, opt) {
|
|
386
|
-
throw new Error('Method not implemented.');
|
|
387
|
-
}
|
|
388
|
-
testDb() {
|
|
389
|
-
this._db.transaction((tr) => {
|
|
390
|
-
tr.executeSql('SELECT upper(?) AS upperString', ['Test string'], (tr, rs) => {
|
|
391
|
-
console.log('Got upperString result: ' + rs.rows.item(0).upperString);
|
|
392
|
-
});
|
|
393
|
-
});
|
|
394
|
-
}
|
|
395
|
-
initializeDb() {
|
|
396
|
-
const delay = 50;
|
|
397
|
-
//workaround: don't proceed unless db is initialized...wait everytime 50ms
|
|
398
|
-
const _self = this;
|
|
399
|
-
let timerId = setTimeout(async function request() {
|
|
400
|
-
if (!_self._isDbInitialized) {
|
|
401
|
-
//retry
|
|
402
|
-
timerId = setTimeout(request, delay);
|
|
403
|
-
}
|
|
404
|
-
else {
|
|
405
|
-
//clear timeout
|
|
406
|
-
clearTimeout(timerId);
|
|
407
|
-
timerId = null;
|
|
408
|
-
await _self._prepareTables();
|
|
409
|
-
// heavy database operations should start from this...
|
|
410
|
-
_self.dbInitialized.next(_self._db);
|
|
411
|
-
}
|
|
412
|
-
}, delay);
|
|
413
|
-
}
|
|
414
|
-
get Db() {
|
|
415
|
-
return this._db;
|
|
416
|
-
}
|
|
417
|
-
putLocal(store, data) {
|
|
418
|
-
return new Promise(async (resolve, reject) => {
|
|
419
|
-
let sql = `BEGIN TRANSACTION;`;
|
|
420
|
-
const values = [];
|
|
421
|
-
const total = await this.count(store);
|
|
422
|
-
if (total) {
|
|
423
|
-
//update
|
|
424
|
-
sql = `UPDATE ${store} SET `;
|
|
425
|
-
//columns
|
|
426
|
-
for (let prop in data) {
|
|
427
|
-
if (data.hasOwnProperty(prop)) {
|
|
428
|
-
sql += `${prop}='${data[prop]}',`;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
//remove extra ',' at the end
|
|
432
|
-
sql = sql.substr(0, sql.length - 1);
|
|
433
|
-
}
|
|
434
|
-
else {
|
|
435
|
-
//insert
|
|
436
|
-
sql = `INSERT INTO ${store} `;
|
|
437
|
-
//columns
|
|
438
|
-
sql += `(`;
|
|
439
|
-
for (let prop in data) {
|
|
440
|
-
if (data.hasOwnProperty(prop)) {
|
|
441
|
-
sql += `${prop},`;
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
//remove extra ',' at the end
|
|
445
|
-
sql = sql.substr(0, sql.length - 1);
|
|
446
|
-
sql += `)`;
|
|
447
|
-
//values
|
|
448
|
-
sql += ` VALUES (`;
|
|
449
|
-
for (let prop in data) {
|
|
450
|
-
sql += `?,`;
|
|
451
|
-
values.push(data[prop]);
|
|
452
|
-
}
|
|
453
|
-
sql = sql.substr(0, sql.length - 1);
|
|
454
|
-
sql += `)`;
|
|
455
|
-
}
|
|
456
|
-
sql += `COMMIT TRANSACTION;`;
|
|
457
|
-
const { changes } = await this._db.execute({
|
|
458
|
-
statements: sql,
|
|
459
|
-
values: values,
|
|
460
|
-
});
|
|
461
|
-
resolve(changes);
|
|
462
|
-
// this._db.transaction(async (tx) => {
|
|
463
|
-
// const res = await this._executeSql<{ rowsAffected, insertId }>(tx, sql, values);
|
|
464
|
-
// resolve(res);
|
|
465
|
-
// }, (error) => reject(error));
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
putLocalRx(store, data) {
|
|
469
|
-
return new Observable((observer) => {
|
|
470
|
-
this.putLocal(store, data).then((result) => {
|
|
471
|
-
observer.next(result);
|
|
472
|
-
observer.complete();
|
|
473
|
-
});
|
|
474
|
-
});
|
|
475
|
-
}
|
|
476
|
-
get(store, key) {
|
|
477
|
-
return new Promise(async (resolve, reject) => {
|
|
478
|
-
//get primary key field form schema
|
|
479
|
-
const table = this.schemaSvc.schema.stores.filter((s) => s.name === store)[0];
|
|
480
|
-
const pk = table.columns.filter((c) => c.isPrimaryKey)[0];
|
|
481
|
-
const pkName = pk.name;
|
|
482
|
-
let sql = `SELECT * FROM ${store} WHERE ${pkName} = '${key}' LIMIT 1`;
|
|
483
|
-
try {
|
|
484
|
-
let data;
|
|
485
|
-
const { values } = await this._db.query({ statement: sql, values: [] });
|
|
486
|
-
if (values.length) {
|
|
487
|
-
data = values[0];
|
|
488
|
-
}
|
|
489
|
-
resolve(data);
|
|
490
|
-
}
|
|
491
|
-
catch (e) {
|
|
492
|
-
reject(e);
|
|
493
|
-
}
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
getRx(store, key) {
|
|
497
|
-
// @ts-ignore
|
|
498
|
-
return;
|
|
499
|
-
}
|
|
500
|
-
getAll(store, opt) {
|
|
501
|
-
return new Promise(async (resolve, reject) => {
|
|
502
|
-
let sql = `SELECT * FROM ${store}`;
|
|
503
|
-
try {
|
|
504
|
-
let data;
|
|
505
|
-
const { values } = await this._db.query({ statement: sql, values: [] });
|
|
506
|
-
resolve(values);
|
|
507
|
-
}
|
|
508
|
-
catch (e) {
|
|
509
|
-
reject(e);
|
|
510
|
-
}
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
remove(store, key) {
|
|
514
|
-
return new Promise((resolve, reject) => {
|
|
515
|
-
throw 'remove not impleted in db-sql yet';
|
|
516
|
-
});
|
|
517
|
-
}
|
|
518
|
-
removeRx(store, key) {
|
|
519
|
-
throw 'remove not impleted in db-sql yet';
|
|
520
|
-
}
|
|
521
|
-
removeAll(store) {
|
|
522
|
-
return new Promise((resolve, reject) => {
|
|
523
|
-
throw 'removeAll not impleted in db-sql yet';
|
|
524
|
-
});
|
|
525
|
-
}
|
|
526
|
-
removeAllRx(store) {
|
|
527
|
-
throw 'removeAllRx not impleted in db-sql yet';
|
|
528
|
-
}
|
|
529
|
-
count(store, opts) {
|
|
530
|
-
return new Promise(async (resolve, reject) => {
|
|
531
|
-
let sql = `SELECT count(*) AS total FROM ${store} `;
|
|
532
|
-
const { values } = await this._db.query({ statement: sql, values: [] });
|
|
533
|
-
resolve(values);
|
|
534
|
-
});
|
|
535
|
-
}
|
|
536
|
-
countRx(store, opts) {
|
|
537
|
-
return new Observable((observer) => {
|
|
538
|
-
this.count(store, opts).then((result) => {
|
|
539
|
-
observer.next(result);
|
|
540
|
-
observer.complete();
|
|
541
|
-
}, (error) => observer.error(error));
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
deleteDb() {
|
|
545
|
-
return this._deleteDatabase();
|
|
546
|
-
}
|
|
547
|
-
deleteTable(store) {
|
|
548
|
-
throw 'deleteTable not impleted in db-sql yet';
|
|
549
|
-
}
|
|
550
|
-
_prepareTables() {
|
|
551
|
-
return new Promise(async (resolve, reject) => {
|
|
552
|
-
const schemas = this.schemaSvc.schema.stores;
|
|
553
|
-
const promises = [];
|
|
554
|
-
for (let schema of schemas) {
|
|
555
|
-
let sql = `BEGIN TRANSACTION;`;
|
|
556
|
-
sql += `CREATE TABLE IF NOT EXISTS ${schema.name} `;
|
|
557
|
-
sql += `(`;
|
|
558
|
-
for (let col of schema.columns) {
|
|
559
|
-
//TODO: for user table, need to fix primary key
|
|
560
|
-
// const ikPkTypeNumber = col['type'] == 'INTEGER';
|
|
561
|
-
sql += `${col.name}${col.type ? ' ' + col.type : ''}${col['isPrimaryKey'] ? ' PRIMARY KEY' : ''},`;
|
|
562
|
-
}
|
|
563
|
-
//remove extra ',' at the end
|
|
564
|
-
sql = sql.substr(0, sql.length - 1);
|
|
565
|
-
sql += `)`;
|
|
566
|
-
sql += `COMMIT TRANSACTION;`;
|
|
567
|
-
const promise = this._db.execute({ statements: sql });
|
|
568
|
-
promises.push(promise);
|
|
569
|
-
}
|
|
570
|
-
try {
|
|
571
|
-
await Promise.all(promises);
|
|
572
|
-
resolve(null);
|
|
573
|
-
}
|
|
574
|
-
catch (e) {
|
|
575
|
-
reject(e);
|
|
576
|
-
}
|
|
577
|
-
});
|
|
578
|
-
}
|
|
579
|
-
_deleteDatabase() {
|
|
580
|
-
return this._db.deleteDatabase({ database: this._dbName });
|
|
581
|
-
}
|
|
582
|
-
_dbSuccess() {
|
|
583
|
-
this._isDbInitialized = true;
|
|
584
|
-
}
|
|
585
|
-
_dbError(err) {
|
|
586
|
-
alert('Open database ERROR: ' + JSON.stringify(err));
|
|
587
|
-
}
|
|
588
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DbSqliteService, deps: [{ token: DbServiceConfig }, { token: SchemaService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
589
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DbSqliteService }); }
|
|
590
|
-
}
|
|
591
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DbSqliteService, decorators: [{
|
|
592
|
-
type: Injectable
|
|
593
|
-
}], ctorParameters: () => [{ type: DbServiceConfig }, { type: SchemaService }] });
|
|
594
|
-
|
|
595
|
-
function dbFactory(schemaSvc) {
|
|
366
|
+
// Accept an optional custom DbService provider (e.g., for SQLite)
|
|
367
|
+
function dbFactory(schemaSvc, customDbService) {
|
|
596
368
|
const dbConfig = schemaSvc.config;
|
|
369
|
+
if (customDbService) {
|
|
370
|
+
// If a custom DbService is provided (e.g., SQLite), instantiate it
|
|
371
|
+
return inject(customDbService, { optional: false });
|
|
372
|
+
}
|
|
597
373
|
switch (dbConfig.dbType) {
|
|
598
374
|
case DbServiceType.IndexDd:
|
|
599
375
|
return new DbWebService(dbConfig, schemaSvc);
|
|
600
|
-
case
|
|
601
|
-
|
|
376
|
+
// Remove Sqlite case from here
|
|
377
|
+
default:
|
|
378
|
+
throw new Error('Unsupported dbType or missing customDbService');
|
|
602
379
|
}
|
|
603
380
|
}
|
|
604
|
-
|
|
381
|
+
/**
|
|
382
|
+
* Optionally accepts a custom DbService class (e.g., from ngx-ionic-zone).
|
|
383
|
+
*/
|
|
384
|
+
function provideDb(customDbService) {
|
|
605
385
|
const providers = [
|
|
606
386
|
SchemaService,
|
|
607
387
|
{
|
|
608
388
|
provide: DbService,
|
|
609
|
-
useFactory: dbFactory,
|
|
389
|
+
useFactory: (schemaSvc) => dbFactory(schemaSvc, customDbService),
|
|
610
390
|
deps: [SchemaService],
|
|
611
391
|
}
|
|
612
392
|
];
|
|
613
393
|
return makeEnvironmentProviders(providers);
|
|
614
|
-
}
|
|
394
|
+
}
|
|
615
395
|
|
|
616
396
|
class AppSettingService {
|
|
617
397
|
static { this.settingCache = new Map(); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-universal-zone.mjs","sources":["../../../projects/ngx-universal-zone/shared/app-injector.ts","../../../projects/ngx-universal-zone/database/db-base.service.ts","../../../projects/ngx-universal-zone/database/db-web.service.ts","../../../projects/ngx-universal-zone/database/schema.service.ts","../../../projects/ngx-universal-zone/database/db-setting-constant.ts","../../../projects/ngx-universal-zone/database/db-sql.service.ts","../../../projects/ngx-universal-zone/database/db.module.ts","../../../projects/ngx-universal-zone/shared/app-setting.service.ts","../../../projects/ngx-universal-zone/shared/helper.service.ts","../../../projects/ngx-universal-zone/shared/universal-zone.module.ts","../../../projects/ngx-universal-zone/shared/message-bus/message-bus.ts","../../../projects/ngx-universal-zone/shared/message-bus/models.ts","../../../projects/ngx-universal-zone/shared/message-bus/message-bus.testing.ts","../../../projects/ngx-universal-zone/shared/message-bus/messages.ts","../../../projects/ngx-universal-zone/shared/flag-based-preloading-strategy.ts","../../../projects/ngx-universal-zone/public-api.ts","../../../projects/ngx-universal-zone/ngx-universal-zone.ts"],"sourcesContent":["import { Injector } from '@angular/core';\n\n// https://blogs.msdn.microsoft.com/premier_developer/2018/06/17/angular-how-to-simplify-components-with-typescript-inheritance/\nexport class AppInjector {\n private static injector: Injector;\n\n static setInjector(injector: Injector) {\n AppInjector.injector = injector;\n }\n\n static getInjector(): Injector {\n return AppInjector.injector;\n }\n}\n","// @ts-ignore\n\nimport { Observable } from \"rxjs\";\n\nimport { ITableOptions } from \"./schema.service\";\nimport { DbFilter } from \"./db-web.service\";\n\nexport class DbServiceConfig {\n dbType!: DbServiceType;\n dbName!: string;\n schema!: ITableOptions[];\n}\n\nexport enum DbServiceType {\n IndexDd,\n Sqlite\n}\n\nexport abstract class DbService {\n dbInitialized$ = new Observable<any>();\n\n get Db(): any {\n return;\n }\n\n putLocal(store, data): Promise<{ rowsAffected; insertId }> {\n // @ts-ignore\n\n return;\n }\n\n putLocalRx(store, data): Observable<any> {\n // @ts-ignore\n return;\n }\n\n get<T>(store: string, key: any): Promise<T> {\n // @ts-ignore\n return;\n }\n getRx<T>(store: string, key: any): Observable<T> { \n // @ts-ignore\n return; \n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n // @ts-ignore\n return;\n }\n\n getAllRx<T>(store: string, opt?: DbFilter): Observable<T> {\n // @ts-ignore\n return;\n }\n\n remove(store, id): Promise<any> {\n // @ts-ignore\n return;\n }\n\n removeRx(store, key): Observable<any> {\n // @ts-ignore\n return;\n }\n\n removeAll(store): Promise<any> {\n // @ts-ignore\n return;\n }\n\n removeAllRx(store: string): Observable<any> {\n // @ts-ignore\n return;\n }\n\n count(store, opts?: { key }): Promise<number> {\n // @ts-ignore\n return;\n }\n\n countRx(store, opts?: { key }): Observable<number> {\n // @ts-ignore\n return;\n }\n\n deleteDb(): Promise<any> {\n // @ts-ignore\n return;\n }\n\n deleteTable(store): Observable<void> {\n // @ts-ignore\n return;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport Dexie, { IndexableType } from 'dexie';\nimport { forkJoin, Observable, of, Subject, switchMap } from 'rxjs';\n\nimport { SchemaService } from './schema.service';\nimport { DbService, DbServiceConfig } from './db-base.service';\n\n// @Injectable()\nexport class DbWebService extends Dexie implements DbService {\n private _db!: Dexie;\n private dbInitialized = new Subject<any>();\n\n constructor(\n private config: DbServiceConfig,\n private schemaService: SchemaService\n ) {\n super(config.dbName);\n\n const schema: {\n [tableName: string]: string | null;\n } = {};\n schemaService.schema.stores.forEach((s) => {\n let cols = ``;\n for (let c of s.columns) {\n cols += `${c.isPrimaryKey ? `++${c.name}` : `,${c.name}`}`;\n }\n schema[s.name] = cols;\n });\n this.version(1).stores(schema);\n this.open()\n .then((d) => {\n this._db = d;\n\n this.dbInitialized.next(d);\n })\n .catch((e) => alert(e));\n }\n \n dbInitialized$ = this.dbInitialized.asObservable();\n\n get Db() {\n return this._db;\n }\n\n putLocal(store, data): Promise<{ rowsAffected; insertId }> {\n return new Promise(async (resolve, reject) => {\n const schema = this.schemaService.schema.stores.filter(\n (s) => s.name == store\n )[0];\n const key = schema.columns.filter((s) => s.isPrimaryKey)[0];\n\n const exist = data[key.name] ? await this.get(store, data[key.name]) : null;\n if (exist) {\n //update\n this.Db\n .table(store)\n .update(data[key.name], data)\n .then(\n (r) => resolve(null as any),\n (e) => reject(e)\n );\n } else {\n this.Db\n .table(store)\n .add(data)\n .then(\n (r) => resolve(null as any),\n (e) => reject(e)\n );\n }\n });\n }\n\n putLocalRx(store, data) {\n return new Observable((observer) => {\n this.putLocal(store, data).then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n get<T>(store: string, key: any): Promise<T> {\n return new Promise((resolve, reject) => {\n if(!this.Db) {\n return reject('Database not initialized. Please wait for dbInitialized$ to emit.');\n }\n \n this.Db\n .table(store)\n .get(key)\n .then((r) => {\n resolve(<T>r);\n }, (e) => reject(e));\n });\n }\n\n getRx<T>(store: string, key: any) {\n return new Observable<T>((observer) => {\n this.get<T>(store, key).then((value) => {\n observer.next(value);\n observer.complete();\n });\n });\n }\n\n getByFieldName<T>(storeName, fieldName, key): Promise<Array<T>> {\n const filter = {};\n filter[fieldName] = key;\n return this.Db.table(storeName).where(filter).toArray();\n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n return new Promise(async (resolve, reject) => {\n if(!this.Db) {\n return reject('Database not initialized. Please wait for dbInitialized$ to emit.');\n }\n\n let table = this.Db.table(store);\n let collection = table.toCollection();\n\n if(opt?.sortBy) {\n collection = table.orderBy(opt.sortBy);\n }\n\n if(opt?.sortType && opt?.sortType == 'desc') {\n collection = table.reverse();\n }\n\n // collection = this.Db.table(store).toCollection();\n if (opt && opt.key && opt.value) {\n if(!opt.keyRange) {\n opt.keyRange = KeyRangeType.equalTo;\n }\n\n switch (opt.keyRange) {\n case KeyRangeType.startsWithIgnoreCase:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .startsWithIgnoreCase(opt.value);\n break;\n case KeyRangeType.equalTo:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .equals(opt.value);\n break;\n case KeyRangeType.notEqualTo:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .notEqual(opt.value);\n break;\n case KeyRangeType.equalToIgnoreCase:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .equalsIgnoreCase(opt.value);\n break;\n }\n }\n\n if(opt?.pageIndex != null) {\n collection = collection.offset((opt.pageIndex - 1) * opt.pageSize);\n }\n\n if(opt?.pageSize != null) {\n collection = collection.limit(opt.pageSize)\n }\n\n // let data!: T;\n // if(opt?.sortBy) {\n // data = <T>await collection.sortBy(opt.sortBy);\n // } else {\n // data = <T>await collection.toArray();\n // }\n\n // if(opt.sortType == 'desc') {\n // data = <T>(<any[]>data).reverse();\n // }\n\n const data = <T>await collection.toArray();\n resolve(data);\n });\n }\n\n getAllRx<T>(store: string, opt?: DbFilter) {\n return new Observable<T>((observer) => {\n this.getAll<T>(store, opt).then((value) => {\n observer.next(value);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n remove(store, key): Promise<any> {\n return this.Db.table(store).delete(key);\n }\n\n removeRx(store, key): Observable<any> {\n return new Observable((observer) => {\n this.remove(store, key).then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n async removeAll(store) {\n const all = await this.getAll<any[]>(store);\n const schema = this.schemaService.schema.stores.filter(\n (s) => s.name == store\n )[0];\n const key = schema.columns.filter((s) => s.isPrimaryKey)[0];\n\n const promises: any = [];\n for (let r of all) {\n promises.push(this.Db.table(store).delete(key.name));\n }\n\n await Promise.all(promises);\n }\n\n removeAllRx(store: string) {\n return this.getAllRx<any[]>(store).pipe(\n switchMap((entries) => {\n const observables: Array<Observable<any>> = [];\n for(let entry of entries) {\n observables.push(this.removeRx(store, entry.id));\n }\n \n if(!observables.length) {\n return of(null);\n }\n\n return forkJoin(observables);\n })\n );\n }\n\n count(store, opts?: { key }): Promise<number> {\n if (opts && opts.key) {\n const pk = this.schemaService.schema.stores\n .filter((s) => s.name == store)[0]\n .columns.filter((s) => s.isPrimaryKey)[0];\n return this.Db.table(store).where(pk.name).equals(opts.key).count();\n }\n\n return this.Db.table(store).count();\n }\n\n countRx(store, opts?: { key }) {\n return new Observable<number>((observer) => {\n this.count(store, opts).then((value) => {\n observer.next(value);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n deleteDb() {\n return new Promise(async (resolve, reject) => {\n await this.Db.delete();\n resolve(null);\n });\n }\n\n deleteTable(store) {\n return new Observable<void>((observer) => {\n this.Db.table(store).clear().then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n}\n\nexport interface DbFilter {\n key?: any;\n value?: any;\n keyRange?: KeyRangeType;\n pageIndex?: number;\n pageSize?: number;\n sortBy?: any;\n sortType?: 'asc' | 'desc';\n}\n\nexport enum KeyRangeType {\n equalToIgnoreCase = 1,\n startsWithIgnoreCase = 2,\n equalTo = 3,\n notEqualTo = 4\n}\n","import { Injectable } from '@angular/core';\nimport { DbServiceConfig } from './db-base.service';\n\n\nexport interface ITableOptions {\n name: string;\n columns: Array<{ name; isPrimaryKey?; type? }>;\n}\n\n@Injectable()\nexport class SchemaService {\n schema = {\n stores: <ITableOptions[]>[]\n };\n tables: Record<string, string> = {};\n\n private _config = {} as DbServiceConfig;\n\n /**\n * Represents a SchemaService that manages the database schema.\n */\n constructor() {\n\n }\n\n get config() {\n return this._config;\n }\n\n init(config: DbServiceConfig) {\n this._config = config;\n\n if(config.schema && config.schema.length) {\n this.schema.stores = this.config.schema;\n this.schema.stores.forEach((s) => this.tables[s.name] = s.name);\n }\n }\n}","import { ITableOptions } from \"./schema.service\";\r\n\r\nexport class DbSettingConstant {\r\n public static readonly SETTING = 'setting';\r\n}\r\n\r\nexport const DbSettingConfig = {\r\n schema: <ITableOptions>{\r\n name: DbSettingConstant.SETTING,\r\n columns: [\r\n {\r\n name: 'key',\r\n isPrimaryKey: true,\r\n type: 'TEXT',\r\n },\r\n {\r\n name: 'value',\r\n type: 'TEXT',\r\n },\r\n ],\r\n }\r\n};","import { Injectable } from '@angular/core';\n\nimport { Observable, of, Subject } from 'rxjs';\n// import * as CapacitorSQLPlugin from 'capacitor-sqlite';\n\nimport { SchemaService, ITableOptions } from './schema.service';\nimport { DbService, DbServiceConfig } from './db-base.service';\nimport { DbFilter } from './db-web.service';\n\n@Injectable()\nexport class DbSqliteService implements DbService {\n private _dbName: string;\n private _db: any;\n private _isDbInitialized = false;\n private dbInitialized = new Subject<any>();\n\n constructor(\n private config: DbServiceConfig,\n private schemaSvc: SchemaService\n ) {\n this._dbName = config.dbName;\n // await this._deleteDatabase();\n // this._db = CapacitorSQLite;\n\n this._db.open({ database: this._dbName }).then(\n async (response: { result: boolean; message: string }) => {\n if (response.result) {\n await this._dbSuccess();\n\n this.initializeDb();\n }\n }, (e) => {\n this._dbError(e);\n });\n }\n getAllRx<T>(store: string, opt?: DbFilter): Observable<T> {\n throw new Error('Method not implemented.');\n }\n\n testDb() {\n this._db.transaction((tr) => {\n tr.executeSql(\n 'SELECT upper(?) AS upperString',\n ['Test string'],\n (tr, rs) => {\n console.log('Got upperString result: ' + rs.rows.item(0).upperString);\n }\n );\n });\n }\n\n initializeDb() {\n const delay = 50;\n //workaround: don't proceed unless db is initialized...wait everytime 50ms\n const _self = this;\n let timerId: any = setTimeout(async function request() {\n if (!_self._isDbInitialized) {\n //retry\n timerId = setTimeout(request, delay);\n } else {\n //clear timeout\n clearTimeout(timerId);\n timerId = null;\n\n await _self._prepareTables();\n\n // heavy database operations should start from this...\n _self.dbInitialized.next(_self._db);\n }\n }, delay);\n }\n\n dbInitialized$ = this.dbInitialized.asObservable();\n\n get Db() {\n return this._db;\n }\n\n putLocal(store, data: any): Promise<{ rowsAffected; insertId }> {\n return new Promise(async (resolve, reject) => {\n let sql = `BEGIN TRANSACTION;`;\n const values: any[] = [];\n\n const total = await this.count(store);\n if (total) {\n //update\n sql = `UPDATE ${store} SET `;\n //columns\n for (let prop in data) {\n if (data.hasOwnProperty(prop)) {\n sql += `${prop}='${data[prop]}',`;\n }\n }\n //remove extra ',' at the end\n sql = sql.substr(0, sql.length - 1);\n } else {\n //insert\n sql = `INSERT INTO ${store} `;\n //columns\n sql += `(`;\n for (let prop in data) {\n if (data.hasOwnProperty(prop)) {\n sql += `${prop},`;\n }\n }\n //remove extra ',' at the end\n sql = sql.substr(0, sql.length - 1);\n sql += `)`;\n\n //values\n sql += ` VALUES (`;\n for (let prop in data) {\n sql += `?,`;\n values.push(data[prop]);\n }\n sql = sql.substr(0, sql.length - 1);\n sql += `)`;\n }\n\n sql += `COMMIT TRANSACTION;`;\n const { changes } = await this._db.execute({\n statements: sql,\n values: values,\n });\n resolve(changes);\n // this._db.transaction(async (tx) => {\n // const res = await this._executeSql<{ rowsAffected, insertId }>(tx, sql, values);\n // resolve(res);\n // }, (error) => reject(error));\n });\n }\n\n putLocalRx(store, data) {\n return new Observable((observer) => {\n this.putLocal(store, data).then((result) => {\n observer.next(result);\n observer.complete();\n });\n });\n }\n\n get<T>(store: string, key: any): Promise<T> {\n return new Promise(async (resolve, reject) => {\n //get primary key field form schema\n const table: any = this.schemaSvc.schema.stores.filter(\n (s) => s.name === store\n )[0];\n const pk = table.columns.filter((c) => c.isPrimaryKey)[0];\n const pkName = pk.name;\n\n let sql = `SELECT * FROM ${store} WHERE ${pkName} = '${key}' LIMIT 1`;\n try {\n let data;\n const { values } = await this._db.query({ statement: sql, values: [] });\n if (values.length) {\n data = values[0];\n }\n resolve(data);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n getRx<T>(store: string, key: any): Observable<T> { \n // @ts-ignore\n return; \n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n return new Promise(async (resolve, reject) => {\n let sql = `SELECT * FROM ${store}`;\n\n try {\n let data;\n const { values } = await this._db.query({ statement: sql, values: [] });\n resolve(values);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n remove(store, key): Promise<any> {\n return new Promise((resolve, reject) => {\n throw 'remove not impleted in db-sql yet';\n });\n }\n\n removeRx(store, key): Observable<any> {\n throw 'remove not impleted in db-sql yet';\n }\n\n removeAll(store) {\n return new Promise((resolve, reject) => {\n throw 'removeAll not impleted in db-sql yet';\n });\n }\n\n removeAllRx(store: string): Observable<any> {\n throw 'removeAllRx not impleted in db-sql yet';\n }\n\n count(store, opts?: { key }): Promise<number> {\n return new Promise(async (resolve, reject) => {\n let sql = `SELECT count(*) AS total FROM ${store} `;\n\n const { values } = await this._db.query({ statement: sql, values: [] });\n resolve(values);\n });\n }\n\n countRx(store, opts?: { key }) {\n return new Observable<number>((observer) => {\n this.count(store, opts).then((result) => {\n observer.next(result);\n observer.complete();\n }, (error) => observer.error(error));\n });\n }\n\n deleteDb() {\n return this._deleteDatabase();\n }\n\n \n deleteTable(store): Observable<void> {\n throw 'deleteTable not impleted in db-sql yet';\n }\n\n private _prepareTables() {\n return new Promise(async (resolve, reject) => {\n const schemas = this.schemaSvc.schema.stores;\n\n const promises: any[] = [];\n for (let schema of schemas) {\n let sql = `BEGIN TRANSACTION;`;\n\n sql += `CREATE TABLE IF NOT EXISTS ${schema.name} `;\n sql += `(`;\n\n for (let col of schema.columns) {\n //TODO: for user table, need to fix primary key\n // const ikPkTypeNumber = col['type'] == 'INTEGER';\n sql += `${col.name}${col.type ? ' ' + col.type : ''}${\n col['isPrimaryKey'] ? ' PRIMARY KEY' : ''\n },`;\n }\n\n //remove extra ',' at the end\n sql = sql.substr(0, sql.length - 1);\n sql += `)`;\n\n sql += `COMMIT TRANSACTION;`;\n\n const promise = this._db.execute({ statements: sql });\n promises.push(promise);\n }\n\n try {\n await Promise.all(promises);\n resolve(null);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n private _deleteDatabase(): Promise<{ result: boolean; message: string }> {\n return this._db.deleteDatabase({ database: this._dbName });\n }\n\n private _dbSuccess() {\n this._isDbInitialized = true;\n }\n\n private _dbError(err) {\n alert('Open database ERROR: ' + JSON.stringify(err));\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\r\n\r\nimport { SchemaService } from './schema.service';\r\nimport { DbWebService } from './db-web.service';\r\nimport { DbService, DbServiceType } from './db-base.service';\r\nimport { DbSqliteService } from './db-sql.service';\r\n\r\nexport function dbFactory(schemaSvc: SchemaService) {\r\n const dbConfig = schemaSvc.config;\r\n\r\n switch (dbConfig.dbType) {\r\n case DbServiceType.IndexDd:\r\n return new DbWebService(dbConfig, schemaSvc);\r\n case DbServiceType.Sqlite:\r\n return new DbSqliteService(dbConfig, schemaSvc);\r\n }\r\n}\r\n\r\nexport const provideDb = (): EnvironmentProviders => {\r\n const providers: Provider[] = [\r\n SchemaService,\r\n {\r\n provide: DbService,\r\n useFactory: dbFactory,\r\n deps: [SchemaService],\r\n }\r\n ];\r\n\r\n return makeEnvironmentProviders(providers);\r\n};","import { Injectable, Optional } from '@angular/core';\n\nimport { DbService, SchemaService, DbSettingConstant } from '../database';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class AppSettingService {\n protected static settingCache = new Map();\n\n constructor(private _dbService: DbService, private _schemaSvc: SchemaService) {\n }\n\n protected get<T>(key: string): Promise<T> {\n if (AppSettingService.settingCache.has(key)) {\n return new Promise((resolve, reject) => {\n let settingCacheMap = AppSettingService.settingCache.get(key);\n resolve(settingCacheMap);\n });\n } else {\n return this._dbService\n .get<any>(this._schemaSvc.tables[DbSettingConstant.SETTING], key)\n .then((setting) => {\n if (setting && setting.value) {\n AppSettingService.settingCache.set(key, setting.value);\n return setting.value;\n }\n return null;\n });\n }\n }\n\n protected getRx<T>(key: string) {\n return new Observable<T>((obs) => {\n this.get<T>(key).then((setting) => {\n obs.next(setting);\n obs.complete(); \n }, (error) => obs.error(error));\n });\n }\n\n protected put(key: string, values) {\n return this._dbService\n .putLocal(this._schemaSvc.tables[DbSettingConstant.SETTING], {\n key: key,\n value: values,\n })\n .then(() => {\n AppSettingService.settingCache.set(key, values);\n });\n }\n\n protected putRx(key: string, values) {\n return new Observable<void>((obs) => {\n this.put(key, values).then(() => {\n obs.next();\n obs.complete(); \n }, (error) => obs.error(error));\n });\n }\n\n protected remove(key: string) {\n return this._dbService\n .remove(this._schemaSvc.tables[DbSettingConstant.SETTING], key)\n .then(() => {\n AppSettingService.settingCache.delete(key);\n });\n }\n\n protected removeRx(key: string) {\n return new Observable<void>((obs) => {\n this.remove(key).then(() => {\n obs.next();\n obs.complete(); \n }, (error) => obs.error(error));\n });\n }\n\n protected removeCache(key: string) {\n AppSettingService.settingCache.delete(key);\n }\n}\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class HelperService {\r\n constructor() {}\r\n\r\n deepCopy(obj: any) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime());\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return obj.reduce((arr, item, i) => {\r\n arr[i] = this.deepCopy(item);\r\n return arr;\r\n }, []);\r\n }\r\n\r\n if (obj instanceof Object) {\r\n return Object.keys(obj).reduce((newObj, key) => {\r\n newObj[key] = this.deepCopy(obj[key]);\r\n return newObj;\r\n }, {});\r\n }\r\n }\r\n\r\n //https://stackoverflow.com/a/20285053/859968\r\n toDataURL(url) {\r\n return new Promise((resolve) => {\r\n let xhr = new XMLHttpRequest();\r\n xhr.onload = function () {\r\n const reader = new FileReader();\r\n reader.onloadend = function () {\r\n resolve(reader.result);\r\n };\r\n reader.readAsDataURL(xhr.response);\r\n };\r\n xhr.open('GET', url);\r\n xhr.responseType = 'blob';\r\n xhr.send();\r\n });\r\n }\r\n\r\n //https://stackoverflow.com/a/2117523/859968\r\n generateGuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\r\n /[xy]/g,\r\n function (c) {\r\n var r = (Math.random() * 16) | 0,\r\n v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n }\r\n );\r\n }\r\n\r\n getRandomNumber() {\r\n const random = new Date().getTime() + Math.floor(Math.random() * 1000000);\r\n return random;\r\n }\r\n\r\n getRandomColor() {\r\n var letters = '0123456789ABCDEF';\r\n var color = '#';\r\n for (var i = 0; i < 6; i++) {\r\n color += letters[Math.floor(Math.random() * 16)];\r\n }\r\n return color;\r\n }\r\n\r\n getFormValidationErrors(formName) {\r\n Object.keys(formName.controls).forEach((key) => {\r\n const controlErrors = formName.get(key).errors;\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach((keyError) => {\r\n console.log(\r\n 'Key control: ' + key + ', keyError: ' + keyError + ', err value: ',\r\n controlErrors[keyError]\r\n );\r\n });\r\n }\r\n });\r\n }\r\n\r\n removeFormValidationErrors(formName, controlName, errorKey) {\r\n const controlErrors = formName.get(controlName).errors;\r\n if (controlErrors != null) {\r\n const error = Object.keys(controlErrors).filter((k) => k == errorKey);\r\n if (error) {\r\n controlErrors[errorKey] = undefined;\r\n delete controlErrors[errorKey];\r\n }\r\n }\r\n }\r\n\r\n downloadCanvasAsImage(canvas: HTMLCanvasElement) {\r\n // const download = document.getElementById(\"download\");\r\n const image = canvas\r\n .toDataURL('image/png')\r\n .replace('image/png', 'image/octet-stream');\r\n\r\n const link = document.createElement('a');\r\n link.setAttribute('href', image);\r\n link.download = `${this.generateGuid()}.png`;\r\n link.click();\r\n\r\n // setTimeout(() => {\r\n // link.remove();\r\n // });\r\n }\r\n\r\n getParamsObjectsFromUrl(url) {\r\n let obj;\r\n if (url) {\r\n url = decodeURI(url);\r\n }\r\n let urlArr = url.split(';');\r\n if (urlArr.length) {\r\n urlArr.shift();\r\n }\r\n for (const urlItem of urlArr) {\r\n if (!obj) {\r\n obj = {};\r\n }\r\n //e.g key = value\r\n const urlItemObj = urlItem.split('=');\r\n obj[urlItemObj[0]] = urlItemObj[1];\r\n }\r\n return obj;\r\n }\r\n}\r\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from \"@angular/core\";\r\n\r\nimport { AppSettingService } from \"./app-setting.service\";\r\nimport { HelperService } from \"./helper.service\";\r\n\r\nexport const provideUniversalZone = (): EnvironmentProviders => {\r\n const providers: Provider[] = [\r\n AppSettingService, HelperService\r\n ];\r\n\r\n return makeEnvironmentProviders(providers);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { Message } from './models';\r\n\r\nexport const EVENT_NAME = 'uz-message-bus';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class MessageBus {\r\n private readonly eventHandler: (customEvent: CustomEvent<Message>) => void;\r\n private messageSubject = new Subject<Message>();\r\n event$ = this.messageSubject.asObservable();\r\n\r\n constructor() {\r\n this.eventHandler = this.handleEvent.bind(this);\r\n }\r\n\r\n dispatch(message: Message) {\r\n const event = new CustomEvent(EVENT_NAME, { detail: message });\r\n document.dispatchEvent(event);\r\n }\r\n\r\n startListening() {\r\n document.addEventListener(EVENT_NAME, this.eventHandler);\r\n }\r\n\r\n stopListening() {\r\n document.removeEventListener(EVENT_NAME, this.eventHandler);\r\n }\r\n\r\n private handleEvent(customEvent: CustomEvent<Message>) {\r\n this.messageSubject.next(customEvent.detail);\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n/* eslint-disable @typescript-eslint/ban-types */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport { OperatorFunction } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n/**\r\n * Messaging system is taken from NGRX (Actions) and adapted to fit our needs.\r\n */\r\n\r\nexport interface Message {\r\n type: string;\r\n}\r\n\r\n// declare to make it property-renaming safe\r\nexport declare interface TypedMessage<T extends string> extends Message {\r\n readonly type: T;\r\n}\r\n\r\nexport function props<P extends object>(): Props<P> {\r\n return { _as: 'props', _p: undefined! };\r\n}\r\n\r\nexport type FunctionWithParametersType<P extends unknown[], R = void> = (...args: P) => R;\r\n\r\n/**\r\n * A function that returns an object in the shape of the `Action` interface. Configured using `createAction`.\r\n */\r\nexport type Creator<P extends any[] = any[], R extends object = object> = FunctionWithParametersType<P, R>;\r\n\r\nexport interface Props<T> {\r\n _as: 'props';\r\n _p: T;\r\n}\r\n\r\n/**\r\n * See `Creator`.\r\n */\r\nexport type MessageCreator<T extends string = string, C extends Creator = Creator> = C & TypedMessage<T>;\r\n\r\nexport const arraysAreNotAllowedMsg = 'arrays are not allowed in action creators';\r\ntype ArraysAreNotAllowed = typeof arraysAreNotAllowedMsg;\r\n\r\nexport const typePropertyIsNotAllowedMsg = 'type property is not allowed in action creators';\r\ntype TypePropertyIsNotAllowed = typeof typePropertyIsNotAllowedMsg;\r\n\r\nexport type NotAllowedCheck<T extends object> = T extends any[]\r\n ? ArraysAreNotAllowed\r\n : T extends { type: any }\r\n ? TypePropertyIsNotAllowed\r\n : unknown;\r\n\r\nexport function createMessage<T extends string>(type: T): MessageCreator<T, () => TypedMessage<T>>;\r\nexport function createMessage<T extends string, P extends object>(\r\n type: T,\r\n config: Props<P> & NotAllowedCheck<P>\r\n): MessageCreator<T, (props: P & NotAllowedCheck<P>) => P & TypedMessage<T>>;\r\nexport function createMessage<T extends string, P extends any[], R extends object>(\r\n type: T,\r\n creator: Creator<P, R> & NotAllowedCheck<R>\r\n): FunctionWithParametersType<P, R & TypedMessage<T>> & TypedMessage<T>;\r\n\r\nexport function createMessage<T extends string, C extends Creator>(type: T, config?: { _as: 'props' } | C): MessageCreator<T> {\r\n if (typeof config === 'function') {\r\n return defineType(type, (...args: any[]) => ({\r\n ...config(...args),\r\n type,\r\n }));\r\n }\r\n const as = config ? config._as : 'empty';\r\n switch (as) {\r\n case 'empty':\r\n return defineType(type, () => ({ type }));\r\n case 'props':\r\n return defineType(type, (propz: object) => ({\r\n ...propz,\r\n type,\r\n }));\r\n default:\r\n throw new Error('Unexpected config.');\r\n }\r\n}\r\n\r\nfunction defineType<T extends string>(type: T, creator: Creator): MessageCreator<T> {\r\n return Object.defineProperty(creator, 'type', {\r\n value: type,\r\n writable: false,\r\n }) as Creator & { type: T }; // Cast added to fix type system.\r\n}\r\n\r\nexport function ofMessageType<AC extends MessageCreator<string, Creator>[], U extends Message = Message, V = ReturnType<AC[number]>>(\r\n ...allowedTypes: AC\r\n): OperatorFunction<U, V>;\r\n\r\nexport function ofMessageType<\r\n E extends Extract<U, { type: T1 }>,\r\n AC extends MessageCreator<string, Creator>,\r\n T1 extends string | AC,\r\n U extends Message = Message,\r\n V = T1 extends string ? E : ReturnType<Extract<T1, AC>>\r\n>(t1: T1): OperatorFunction<U, V>;\r\n\r\nexport function ofMessageType(...allowedTypes: Array<string | MessageCreator<string, Creator>>): OperatorFunction<Message, Message> {\r\n return filter((action: Message) =>\r\n allowedTypes.some((typeOrActionCreator) => {\r\n if (typeof typeOrActionCreator === 'string') {\r\n // Comparing the string to type\r\n return typeOrActionCreator === action.type;\r\n }\r\n\r\n // We are filtering by ActionCreator\r\n return typeOrActionCreator.type === action.type;\r\n })\r\n );\r\n}\r\n","import { defer, Observable } from 'rxjs';\r\n\r\nimport { MessageBus } from './message-bus';\r\nimport { Message } from './models';\r\n\r\nexport function provideTestMessages(getMessages: () => Observable<Message>) {\r\n return {\r\n provide: MessageBus,\r\n useFactory: () => ({\r\n event$: defer(getMessages),\r\n }),\r\n };\r\n}\r\n","import { createMessage } from './models';\r\n\r\n/** Indicates that the global styling has changed & loaded (Light/Dark) */\r\n// export const applicationStylesChanged = createMessage('Application styles changed');\r\n","import { Injectable } from \"@angular/core\";\nimport { PreloadingStrategy, Route, Router } from \"@angular/router\";\n\nimport { delay, Observable, of, switchMap } from \"rxjs\";\n\ndeclare const navigator: any;\n\n@Injectable({ providedIn: \"root\" })\nexport class FlagBasedPreloadingStrategy extends PreloadingStrategy {\n constructor(private router: Router) {\n super();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n preload(route: Route, load: () => Observable<any>): Observable<any> {\n const preload = route.data?.[\"preload\"];\n const preloadNextRoutes = this.getCurrentRouteData()?.['preloadNextRoutes'] as string[] ?? [];\n\n if(preload || preloadNextRoutes.length) {\n if(preload) {\n return load();\n }\n\n if(preloadNextRoutes.includes(route.path)) {\n const delayTime = route.data?.[\"delay\"] ?? 0;\n return of(null).pipe(\n delay(delayTime),\n switchMap(() => this.waitForNetworkIdle()),\n switchMap(() => {\n return load();\n })\n );\n }\n }\n \n return of(null);\n }\n\n private getCurrentRouteData() {\n let route = this.router.routerState.snapshot.root;\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route.data;\n }\n\n private waitForNetworkIdle(): Observable<void> {\n return new Observable<void>((observer) => {\n if (navigator.connection && navigator.connection.downlink > 0) {\n observer.next();\n observer.complete();\n } else {\n const onNetworkIdle = () => {\n if (navigator.connection.downlink > 0) {\n observer.next();\n observer.complete();\n navigator.connection.removeEventListener('change', onNetworkIdle);\n }\n };\n navigator.connection.addEventListener('change', onNetworkIdle);\n }\n });\n }\n}\n","/*\r\n * Public API Surface of ngx-universal-zone\r\n */\r\n\r\n//fix: Internal error: failed to get symbol for entrypoint\r\n// export default {};\r\nexport * from './shared/app-injector';\r\nexport * from './shared/app-setting.service';\r\nexport * from './shared/helper.service';\r\n\r\nexport * from './shared/universal-zone.module';\r\nexport * from './shared/message-bus';\r\nexport * from './shared/flag-based-preloading-strategy';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DbServiceConfig","i2.SchemaService","i1.DbService","i1.SchemaService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-universal-zone.mjs","sources":["../../../projects/ngx-universal-zone/shared/app-injector.ts","../../../projects/ngx-universal-zone/database/db-base.service.ts","../../../projects/ngx-universal-zone/database/db-web.service.ts","../../../projects/ngx-universal-zone/database/schema.service.ts","../../../projects/ngx-universal-zone/database/db-setting-constant.ts","../../../projects/ngx-universal-zone/database/db.module.ts","../../../projects/ngx-universal-zone/shared/app-setting.service.ts","../../../projects/ngx-universal-zone/shared/helper.service.ts","../../../projects/ngx-universal-zone/shared/universal-zone.module.ts","../../../projects/ngx-universal-zone/shared/message-bus/message-bus.ts","../../../projects/ngx-universal-zone/shared/message-bus/models.ts","../../../projects/ngx-universal-zone/shared/message-bus/message-bus.testing.ts","../../../projects/ngx-universal-zone/shared/message-bus/messages.ts","../../../projects/ngx-universal-zone/shared/flag-based-preloading-strategy.ts","../../../projects/ngx-universal-zone/public-api.ts","../../../projects/ngx-universal-zone/ngx-universal-zone.ts"],"sourcesContent":["import { Injector } from '@angular/core';\n\n// https://blogs.msdn.microsoft.com/premier_developer/2018/06/17/angular-how-to-simplify-components-with-typescript-inheritance/\nexport class AppInjector {\n private static injector: Injector;\n\n static setInjector(injector: Injector) {\n AppInjector.injector = injector;\n }\n\n static getInjector(): Injector {\n return AppInjector.injector;\n }\n}\n","// @ts-ignore\n\nimport { Observable } from \"rxjs\";\n\nimport { ITableOptions } from \"./schema.service\";\nimport { DbFilter } from \"./db-web.service\";\n\nexport class DbServiceConfig {\n dbType!: DbServiceType;\n dbName!: string;\n schema!: ITableOptions[];\n}\n\nexport enum DbServiceType {\n IndexDd,\n Sqlite\n}\n\nexport abstract class DbService {\n dbInitialized$ = new Observable<any>();\n\n get Db(): any {\n return;\n }\n\n putLocal(store, data): Promise<{ rowsAffected; insertId }> {\n // @ts-ignore\n\n return;\n }\n\n putLocalRx(store, data): Observable<any> {\n // @ts-ignore\n return;\n }\n\n get<T>(store: string, key: any): Promise<T> {\n // @ts-ignore\n return;\n }\n getRx<T>(store: string, key: any): Observable<T> { \n // @ts-ignore\n return; \n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n // @ts-ignore\n return;\n }\n\n getAllRx<T>(store: string, opt?: DbFilter): Observable<T> {\n // @ts-ignore\n return;\n }\n\n remove(store, id): Promise<any> {\n // @ts-ignore\n return;\n }\n\n removeRx(store, key): Observable<any> {\n // @ts-ignore\n return;\n }\n\n removeAll(store): Promise<any> {\n // @ts-ignore\n return;\n }\n\n removeAllRx(store: string): Observable<any> {\n // @ts-ignore\n return;\n }\n\n count(store, opts?: { key }): Promise<number> {\n // @ts-ignore\n return;\n }\n\n countRx(store, opts?: { key }): Observable<number> {\n // @ts-ignore\n return;\n }\n\n deleteDb(): Promise<any> {\n // @ts-ignore\n return;\n }\n\n deleteTable(store): Observable<void> {\n // @ts-ignore\n return;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport Dexie, { IndexableType } from 'dexie';\nimport { forkJoin, Observable, of, Subject, switchMap } from 'rxjs';\n\nimport { SchemaService } from './schema.service';\nimport { DbService, DbServiceConfig } from './db-base.service';\n\n// @Injectable()\nexport class DbWebService extends Dexie implements DbService {\n private _db!: Dexie;\n private dbInitialized = new Subject<any>();\n\n constructor(\n private config: DbServiceConfig,\n private schemaService: SchemaService\n ) {\n super(config.dbName);\n\n const schema: {\n [tableName: string]: string | null;\n } = {};\n schemaService.schema.stores.forEach((s) => {\n let cols = ``;\n for (let c of s.columns) {\n cols += `${c.isPrimaryKey ? `++${c.name}` : `,${c.name}`}`;\n }\n schema[s.name] = cols;\n });\n this.version(1).stores(schema);\n this.open()\n .then((d) => {\n this._db = d;\n\n this.dbInitialized.next(d);\n })\n .catch((e) => alert(e));\n }\n \n dbInitialized$ = this.dbInitialized.asObservable();\n\n get Db() {\n return this._db;\n }\n\n putLocal(store, data): Promise<{ rowsAffected; insertId }> {\n return new Promise(async (resolve, reject) => {\n const schema = this.schemaService.schema.stores.filter(\n (s) => s.name == store\n )[0];\n const key = schema.columns.filter((s) => s.isPrimaryKey)[0];\n\n const exist = data[key.name] ? await this.get(store, data[key.name]) : null;\n if (exist) {\n //update\n this.Db\n .table(store)\n .update(data[key.name], data)\n .then(\n (r) => resolve(null as any),\n (e) => reject(e)\n );\n } else {\n this.Db\n .table(store)\n .add(data)\n .then(\n (r) => resolve(null as any),\n (e) => reject(e)\n );\n }\n });\n }\n\n putLocalRx(store, data) {\n return new Observable((observer) => {\n this.putLocal(store, data).then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n get<T>(store: string, key: any): Promise<T> {\n return new Promise((resolve, reject) => {\n if(!this.Db) {\n return reject('Database not initialized. Please wait for dbInitialized$ to emit.');\n }\n \n this.Db\n .table(store)\n .get(key)\n .then((r) => {\n resolve(<T>r);\n }, (e) => reject(e));\n });\n }\n\n getRx<T>(store: string, key: any) {\n return new Observable<T>((observer) => {\n this.get<T>(store, key).then((value) => {\n observer.next(value);\n observer.complete();\n });\n });\n }\n\n getByFieldName<T>(storeName, fieldName, key): Promise<Array<T>> {\n const filter = {};\n filter[fieldName] = key;\n return this.Db.table(storeName).where(filter).toArray();\n }\n\n getAll<T>(store: string, opt?: DbFilter): Promise<T> {\n return new Promise(async (resolve, reject) => {\n if(!this.Db) {\n return reject('Database not initialized. Please wait for dbInitialized$ to emit.');\n }\n\n let table = this.Db.table(store);\n let collection = table.toCollection();\n\n if(opt?.sortBy) {\n collection = table.orderBy(opt.sortBy);\n }\n\n if(opt?.sortType && opt?.sortType == 'desc') {\n collection = table.reverse();\n }\n\n // collection = this.Db.table(store).toCollection();\n if (opt && opt.key && opt.value) {\n if(!opt.keyRange) {\n opt.keyRange = KeyRangeType.equalTo;\n }\n\n switch (opt.keyRange) {\n case KeyRangeType.startsWithIgnoreCase:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .startsWithIgnoreCase(opt.value);\n break;\n case KeyRangeType.equalTo:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .equals(opt.value);\n break;\n case KeyRangeType.notEqualTo:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .notEqual(opt.value);\n break;\n case KeyRangeType.equalToIgnoreCase:\n collection = this.Db\n .table(store)\n .where(opt.key)\n .equalsIgnoreCase(opt.value);\n break;\n }\n }\n\n if(opt?.pageIndex != null) {\n collection = collection.offset((opt.pageIndex - 1) * opt.pageSize);\n }\n\n if(opt?.pageSize != null) {\n collection = collection.limit(opt.pageSize)\n }\n\n // let data!: T;\n // if(opt?.sortBy) {\n // data = <T>await collection.sortBy(opt.sortBy);\n // } else {\n // data = <T>await collection.toArray();\n // }\n\n // if(opt.sortType == 'desc') {\n // data = <T>(<any[]>data).reverse();\n // }\n\n const data = <T>await collection.toArray();\n resolve(data);\n });\n }\n\n getAllRx<T>(store: string, opt?: DbFilter) {\n return new Observable<T>((observer) => {\n this.getAll<T>(store, opt).then((value) => {\n observer.next(value);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n remove(store, key): Promise<any> {\n return this.Db.table(store).delete(key);\n }\n\n removeRx(store, key): Observable<any> {\n return new Observable((observer) => {\n this.remove(store, key).then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n async removeAll(store) {\n const all = await this.getAll<any[]>(store);\n const schema = this.schemaService.schema.stores.filter(\n (s) => s.name == store\n )[0];\n const key = schema.columns.filter((s) => s.isPrimaryKey)[0];\n\n const promises: any = [];\n for (let r of all) {\n promises.push(this.Db.table(store).delete(key.name));\n }\n\n await Promise.all(promises);\n }\n\n removeAllRx(store: string) {\n return this.getAllRx<any[]>(store).pipe(\n switchMap((entries) => {\n const observables: Array<Observable<any>> = [];\n for(let entry of entries) {\n observables.push(this.removeRx(store, entry.id));\n }\n \n if(!observables.length) {\n return of(null);\n }\n\n return forkJoin(observables);\n })\n );\n }\n\n count(store, opts?: { key }): Promise<number> {\n if (opts && opts.key) {\n const pk = this.schemaService.schema.stores\n .filter((s) => s.name == store)[0]\n .columns.filter((s) => s.isPrimaryKey)[0];\n return this.Db.table(store).where(pk.name).equals(opts.key).count();\n }\n\n return this.Db.table(store).count();\n }\n\n countRx(store, opts?: { key }) {\n return new Observable<number>((observer) => {\n this.count(store, opts).then((value) => {\n observer.next(value);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n\n deleteDb() {\n return new Promise(async (resolve, reject) => {\n await this.Db.delete();\n resolve(null);\n });\n }\n\n deleteTable(store) {\n return new Observable<void>((observer) => {\n this.Db.table(store).clear().then((result) => {\n observer.next(result);\n observer.complete();\n }, (e) => observer.error(e));\n });\n }\n}\n\nexport interface DbFilter {\n key?: any;\n value?: any;\n keyRange?: KeyRangeType;\n pageIndex?: number;\n pageSize?: number;\n sortBy?: any;\n sortType?: 'asc' | 'desc';\n}\n\nexport enum KeyRangeType {\n equalToIgnoreCase = 1,\n startsWithIgnoreCase = 2,\n equalTo = 3,\n notEqualTo = 4\n}\n","import { Injectable } from '@angular/core';\nimport { DbServiceConfig } from './db-base.service';\n\n\nexport interface ITableOptions {\n name: string;\n columns: Array<{ name; isPrimaryKey?; type? }>;\n}\n\n@Injectable()\nexport class SchemaService {\n schema = {\n stores: <ITableOptions[]>[]\n };\n tables: Record<string, string> = {};\n\n private _config = {} as DbServiceConfig;\n\n /**\n * Represents a SchemaService that manages the database schema.\n */\n constructor() {\n\n }\n\n get config() {\n return this._config;\n }\n\n init(config: DbServiceConfig) {\n this._config = config;\n\n if(config.schema && config.schema.length) {\n this.schema.stores = this.config.schema;\n this.schema.stores.forEach((s) => this.tables[s.name] = s.name);\n }\n }\n}","import { ITableOptions } from \"./schema.service\";\r\n\r\nexport class DbSettingConstant {\r\n public static readonly SETTING = 'setting';\r\n}\r\n\r\nexport const DbSettingConfig = {\r\n schema: <ITableOptions>{\r\n name: DbSettingConstant.SETTING,\r\n columns: [\r\n {\r\n name: 'key',\r\n isPrimaryKey: true,\r\n type: 'TEXT',\r\n },\r\n {\r\n name: 'value',\r\n type: 'TEXT',\r\n },\r\n ],\r\n }\r\n};","import { EnvironmentProviders, makeEnvironmentProviders, Provider, inject, Optional, Type } from '@angular/core';\r\n\r\nimport { SchemaService } from './schema.service';\r\nimport { DbWebService } from './db-web.service';\r\nimport { DbService, DbServiceType } from './db-base.service';\r\n\r\n// Accept an optional custom DbService provider (e.g., for SQLite)\r\nexport function dbFactory(schemaSvc: SchemaService, customDbService?: Type<DbService>) {\r\n const dbConfig = schemaSvc.config;\r\n\r\n if (customDbService) {\r\n // If a custom DbService is provided (e.g., SQLite), instantiate it\r\n return inject(customDbService, { optional: false });\r\n }\r\n\r\n switch (dbConfig.dbType) {\r\n case DbServiceType.IndexDd:\r\n return new DbWebService(dbConfig, schemaSvc);\r\n // Remove Sqlite case from here\r\n default:\r\n throw new Error('Unsupported dbType or missing customDbService');\r\n }\r\n}\r\n\r\n/**\r\n * Optionally accepts a custom DbService class (e.g., from ngx-ionic-zone).\r\n */\r\nexport function provideDb(customDbService?: Type<DbService>): EnvironmentProviders {\r\n const providers: Provider[] = [\r\n SchemaService,\r\n {\r\n provide: DbService,\r\n useFactory: (schemaSvc: SchemaService) => dbFactory(schemaSvc, customDbService),\r\n deps: [SchemaService],\r\n }\r\n ];\r\n\r\n return makeEnvironmentProviders(providers);\r\n}","import { Injectable, Optional } from '@angular/core';\n\nimport { DbService, SchemaService, DbSettingConstant } from '../database';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class AppSettingService {\n protected static settingCache = new Map();\n\n constructor(private _dbService: DbService, private _schemaSvc: SchemaService) {\n }\n\n protected get<T>(key: string): Promise<T> {\n if (AppSettingService.settingCache.has(key)) {\n return new Promise((resolve, reject) => {\n let settingCacheMap = AppSettingService.settingCache.get(key);\n resolve(settingCacheMap);\n });\n } else {\n return this._dbService\n .get<any>(this._schemaSvc.tables[DbSettingConstant.SETTING], key)\n .then((setting) => {\n if (setting && setting.value) {\n AppSettingService.settingCache.set(key, setting.value);\n return setting.value;\n }\n return null;\n });\n }\n }\n\n protected getRx<T>(key: string) {\n return new Observable<T>((obs) => {\n this.get<T>(key).then((setting) => {\n obs.next(setting);\n obs.complete(); \n }, (error) => obs.error(error));\n });\n }\n\n protected put(key: string, values) {\n return this._dbService\n .putLocal(this._schemaSvc.tables[DbSettingConstant.SETTING], {\n key: key,\n value: values,\n })\n .then(() => {\n AppSettingService.settingCache.set(key, values);\n });\n }\n\n protected putRx(key: string, values) {\n return new Observable<void>((obs) => {\n this.put(key, values).then(() => {\n obs.next();\n obs.complete(); \n }, (error) => obs.error(error));\n });\n }\n\n protected remove(key: string) {\n return this._dbService\n .remove(this._schemaSvc.tables[DbSettingConstant.SETTING], key)\n .then(() => {\n AppSettingService.settingCache.delete(key);\n });\n }\n\n protected removeRx(key: string) {\n return new Observable<void>((obs) => {\n this.remove(key).then(() => {\n obs.next();\n obs.complete(); \n }, (error) => obs.error(error));\n });\n }\n\n protected removeCache(key: string) {\n AppSettingService.settingCache.delete(key);\n }\n}\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class HelperService {\r\n constructor() {}\r\n\r\n deepCopy(obj: any) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime());\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return obj.reduce((arr, item, i) => {\r\n arr[i] = this.deepCopy(item);\r\n return arr;\r\n }, []);\r\n }\r\n\r\n if (obj instanceof Object) {\r\n return Object.keys(obj).reduce((newObj, key) => {\r\n newObj[key] = this.deepCopy(obj[key]);\r\n return newObj;\r\n }, {});\r\n }\r\n }\r\n\r\n //https://stackoverflow.com/a/20285053/859968\r\n toDataURL(url) {\r\n return new Promise((resolve) => {\r\n let xhr = new XMLHttpRequest();\r\n xhr.onload = function () {\r\n const reader = new FileReader();\r\n reader.onloadend = function () {\r\n resolve(reader.result);\r\n };\r\n reader.readAsDataURL(xhr.response);\r\n };\r\n xhr.open('GET', url);\r\n xhr.responseType = 'blob';\r\n xhr.send();\r\n });\r\n }\r\n\r\n //https://stackoverflow.com/a/2117523/859968\r\n generateGuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\r\n /[xy]/g,\r\n function (c) {\r\n var r = (Math.random() * 16) | 0,\r\n v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n }\r\n );\r\n }\r\n\r\n getRandomNumber() {\r\n const random = new Date().getTime() + Math.floor(Math.random() * 1000000);\r\n return random;\r\n }\r\n\r\n getRandomColor() {\r\n var letters = '0123456789ABCDEF';\r\n var color = '#';\r\n for (var i = 0; i < 6; i++) {\r\n color += letters[Math.floor(Math.random() * 16)];\r\n }\r\n return color;\r\n }\r\n\r\n getFormValidationErrors(formName) {\r\n Object.keys(formName.controls).forEach((key) => {\r\n const controlErrors = formName.get(key).errors;\r\n if (controlErrors != null) {\r\n Object.keys(controlErrors).forEach((keyError) => {\r\n console.log(\r\n 'Key control: ' + key + ', keyError: ' + keyError + ', err value: ',\r\n controlErrors[keyError]\r\n );\r\n });\r\n }\r\n });\r\n }\r\n\r\n removeFormValidationErrors(formName, controlName, errorKey) {\r\n const controlErrors = formName.get(controlName).errors;\r\n if (controlErrors != null) {\r\n const error = Object.keys(controlErrors).filter((k) => k == errorKey);\r\n if (error) {\r\n controlErrors[errorKey] = undefined;\r\n delete controlErrors[errorKey];\r\n }\r\n }\r\n }\r\n\r\n downloadCanvasAsImage(canvas: HTMLCanvasElement) {\r\n // const download = document.getElementById(\"download\");\r\n const image = canvas\r\n .toDataURL('image/png')\r\n .replace('image/png', 'image/octet-stream');\r\n\r\n const link = document.createElement('a');\r\n link.setAttribute('href', image);\r\n link.download = `${this.generateGuid()}.png`;\r\n link.click();\r\n\r\n // setTimeout(() => {\r\n // link.remove();\r\n // });\r\n }\r\n\r\n getParamsObjectsFromUrl(url) {\r\n let obj;\r\n if (url) {\r\n url = decodeURI(url);\r\n }\r\n let urlArr = url.split(';');\r\n if (urlArr.length) {\r\n urlArr.shift();\r\n }\r\n for (const urlItem of urlArr) {\r\n if (!obj) {\r\n obj = {};\r\n }\r\n //e.g key = value\r\n const urlItemObj = urlItem.split('=');\r\n obj[urlItemObj[0]] = urlItemObj[1];\r\n }\r\n return obj;\r\n }\r\n}\r\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from \"@angular/core\";\r\n\r\nimport { AppSettingService } from \"./app-setting.service\";\r\nimport { HelperService } from \"./helper.service\";\r\n\r\nexport const provideUniversalZone = (): EnvironmentProviders => {\r\n const providers: Provider[] = [\r\n AppSettingService, HelperService\r\n ];\r\n\r\n return makeEnvironmentProviders(providers);\r\n};\r\n\r\n\r\n\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { Message } from './models';\r\n\r\nexport const EVENT_NAME = 'uz-message-bus';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class MessageBus {\r\n private readonly eventHandler: (customEvent: CustomEvent<Message>) => void;\r\n private messageSubject = new Subject<Message>();\r\n event$ = this.messageSubject.asObservable();\r\n\r\n constructor() {\r\n this.eventHandler = this.handleEvent.bind(this);\r\n }\r\n\r\n dispatch(message: Message) {\r\n const event = new CustomEvent(EVENT_NAME, { detail: message });\r\n document.dispatchEvent(event);\r\n }\r\n\r\n startListening() {\r\n document.addEventListener(EVENT_NAME, this.eventHandler);\r\n }\r\n\r\n stopListening() {\r\n document.removeEventListener(EVENT_NAME, this.eventHandler);\r\n }\r\n\r\n private handleEvent(customEvent: CustomEvent<Message>) {\r\n this.messageSubject.next(customEvent.detail);\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\r\n/* eslint-disable @typescript-eslint/ban-types */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport { OperatorFunction } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n/**\r\n * Messaging system is taken from NGRX (Actions) and adapted to fit our needs.\r\n */\r\n\r\nexport interface Message {\r\n type: string;\r\n}\r\n\r\n// declare to make it property-renaming safe\r\nexport declare interface TypedMessage<T extends string> extends Message {\r\n readonly type: T;\r\n}\r\n\r\nexport function props<P extends object>(): Props<P> {\r\n return { _as: 'props', _p: undefined! };\r\n}\r\n\r\nexport type FunctionWithParametersType<P extends unknown[], R = void> = (...args: P) => R;\r\n\r\n/**\r\n * A function that returns an object in the shape of the `Action` interface. Configured using `createAction`.\r\n */\r\nexport type Creator<P extends any[] = any[], R extends object = object> = FunctionWithParametersType<P, R>;\r\n\r\nexport interface Props<T> {\r\n _as: 'props';\r\n _p: T;\r\n}\r\n\r\n/**\r\n * See `Creator`.\r\n */\r\nexport type MessageCreator<T extends string = string, C extends Creator = Creator> = C & TypedMessage<T>;\r\n\r\nexport const arraysAreNotAllowedMsg = 'arrays are not allowed in action creators';\r\ntype ArraysAreNotAllowed = typeof arraysAreNotAllowedMsg;\r\n\r\nexport const typePropertyIsNotAllowedMsg = 'type property is not allowed in action creators';\r\ntype TypePropertyIsNotAllowed = typeof typePropertyIsNotAllowedMsg;\r\n\r\nexport type NotAllowedCheck<T extends object> = T extends any[]\r\n ? ArraysAreNotAllowed\r\n : T extends { type: any }\r\n ? TypePropertyIsNotAllowed\r\n : unknown;\r\n\r\nexport function createMessage<T extends string>(type: T): MessageCreator<T, () => TypedMessage<T>>;\r\nexport function createMessage<T extends string, P extends object>(\r\n type: T,\r\n config: Props<P> & NotAllowedCheck<P>\r\n): MessageCreator<T, (props: P & NotAllowedCheck<P>) => P & TypedMessage<T>>;\r\nexport function createMessage<T extends string, P extends any[], R extends object>(\r\n type: T,\r\n creator: Creator<P, R> & NotAllowedCheck<R>\r\n): FunctionWithParametersType<P, R & TypedMessage<T>> & TypedMessage<T>;\r\n\r\nexport function createMessage<T extends string, C extends Creator>(type: T, config?: { _as: 'props' } | C): MessageCreator<T> {\r\n if (typeof config === 'function') {\r\n return defineType(type, (...args: any[]) => ({\r\n ...config(...args),\r\n type,\r\n }));\r\n }\r\n const as = config ? config._as : 'empty';\r\n switch (as) {\r\n case 'empty':\r\n return defineType(type, () => ({ type }));\r\n case 'props':\r\n return defineType(type, (propz: object) => ({\r\n ...propz,\r\n type,\r\n }));\r\n default:\r\n throw new Error('Unexpected config.');\r\n }\r\n}\r\n\r\nfunction defineType<T extends string>(type: T, creator: Creator): MessageCreator<T> {\r\n return Object.defineProperty(creator, 'type', {\r\n value: type,\r\n writable: false,\r\n }) as Creator & { type: T }; // Cast added to fix type system.\r\n}\r\n\r\nexport function ofMessageType<AC extends MessageCreator<string, Creator>[], U extends Message = Message, V = ReturnType<AC[number]>>(\r\n ...allowedTypes: AC\r\n): OperatorFunction<U, V>;\r\n\r\nexport function ofMessageType<\r\n E extends Extract<U, { type: T1 }>,\r\n AC extends MessageCreator<string, Creator>,\r\n T1 extends string | AC,\r\n U extends Message = Message,\r\n V = T1 extends string ? E : ReturnType<Extract<T1, AC>>\r\n>(t1: T1): OperatorFunction<U, V>;\r\n\r\nexport function ofMessageType(...allowedTypes: Array<string | MessageCreator<string, Creator>>): OperatorFunction<Message, Message> {\r\n return filter((action: Message) =>\r\n allowedTypes.some((typeOrActionCreator) => {\r\n if (typeof typeOrActionCreator === 'string') {\r\n // Comparing the string to type\r\n return typeOrActionCreator === action.type;\r\n }\r\n\r\n // We are filtering by ActionCreator\r\n return typeOrActionCreator.type === action.type;\r\n })\r\n );\r\n}\r\n","import { defer, Observable } from 'rxjs';\r\n\r\nimport { MessageBus } from './message-bus';\r\nimport { Message } from './models';\r\n\r\nexport function provideTestMessages(getMessages: () => Observable<Message>) {\r\n return {\r\n provide: MessageBus,\r\n useFactory: () => ({\r\n event$: defer(getMessages),\r\n }),\r\n };\r\n}\r\n","import { createMessage } from './models';\r\n\r\n/** Indicates that the global styling has changed & loaded (Light/Dark) */\r\n// export const applicationStylesChanged = createMessage('Application styles changed');\r\n","import { Injectable } from \"@angular/core\";\nimport { PreloadingStrategy, Route, Router } from \"@angular/router\";\n\nimport { delay, Observable, of, switchMap } from \"rxjs\";\n\ndeclare const navigator: any;\n\n@Injectable({ providedIn: \"root\" })\nexport class FlagBasedPreloadingStrategy extends PreloadingStrategy {\n constructor(private router: Router) {\n super();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n preload(route: Route, load: () => Observable<any>): Observable<any> {\n const preload = route.data?.[\"preload\"];\n const preloadNextRoutes = this.getCurrentRouteData()?.['preloadNextRoutes'] as string[] ?? [];\n\n if(preload || preloadNextRoutes.length) {\n if(preload) {\n return load();\n }\n\n if(preloadNextRoutes.includes(route.path)) {\n const delayTime = route.data?.[\"delay\"] ?? 0;\n return of(null).pipe(\n delay(delayTime),\n switchMap(() => this.waitForNetworkIdle()),\n switchMap(() => {\n return load();\n })\n );\n }\n }\n \n return of(null);\n }\n\n private getCurrentRouteData() {\n let route = this.router.routerState.snapshot.root;\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route.data;\n }\n\n private waitForNetworkIdle(): Observable<void> {\n return new Observable<void>((observer) => {\n if (navigator.connection && navigator.connection.downlink > 0) {\n observer.next();\n observer.complete();\n } else {\n const onNetworkIdle = () => {\n if (navigator.connection.downlink > 0) {\n observer.next();\n observer.complete();\n navigator.connection.removeEventListener('change', onNetworkIdle);\n }\n };\n navigator.connection.addEventListener('change', onNetworkIdle);\n }\n });\n }\n}\n","/*\r\n * Public API Surface of ngx-universal-zone\r\n */\r\n\r\n//fix: Internal error: failed to get symbol for entrypoint\r\n// export default {};\r\nexport * from './shared/app-injector';\r\nexport * from './shared/app-setting.service';\r\nexport * from './shared/helper.service';\r\n\r\nexport * from './shared/universal-zone.module';\r\nexport * from './shared/message-bus';\r\nexport * from './shared/flag-based-preloading-strategy';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DbService","i1.SchemaService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { SchemaService } from './schema.service';
|
|
3
|
-
import { DbService, DbServiceConfig } from './db-base.service';
|
|
4
|
-
import { DbFilter } from './db-web.service';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class DbSqliteService implements DbService {
|
|
7
|
-
private config;
|
|
8
|
-
private schemaSvc;
|
|
9
|
-
private _dbName;
|
|
10
|
-
private _db;
|
|
11
|
-
private _isDbInitialized;
|
|
12
|
-
private dbInitialized;
|
|
13
|
-
constructor(config: DbServiceConfig, schemaSvc: SchemaService);
|
|
14
|
-
getAllRx<T>(store: string, opt?: DbFilter): Observable<T>;
|
|
15
|
-
testDb(): void;
|
|
16
|
-
initializeDb(): void;
|
|
17
|
-
dbInitialized$: Observable<any>;
|
|
18
|
-
get Db(): any;
|
|
19
|
-
putLocal(store: any, data: any): Promise<{
|
|
20
|
-
rowsAffected: any;
|
|
21
|
-
insertId: any;
|
|
22
|
-
}>;
|
|
23
|
-
putLocalRx(store: any, data: any): Observable<unknown>;
|
|
24
|
-
get<T>(store: string, key: any): Promise<T>;
|
|
25
|
-
getRx<T>(store: string, key: any): Observable<T>;
|
|
26
|
-
getAll<T>(store: string, opt?: DbFilter): Promise<T>;
|
|
27
|
-
remove(store: any, key: any): Promise<any>;
|
|
28
|
-
removeRx(store: any, key: any): Observable<any>;
|
|
29
|
-
removeAll(store: any): Promise<unknown>;
|
|
30
|
-
removeAllRx(store: string): Observable<any>;
|
|
31
|
-
count(store: any, opts?: {
|
|
32
|
-
key: any;
|
|
33
|
-
}): Promise<number>;
|
|
34
|
-
countRx(store: any, opts?: {
|
|
35
|
-
key: any;
|
|
36
|
-
}): Observable<number>;
|
|
37
|
-
deleteDb(): Promise<{
|
|
38
|
-
result: boolean;
|
|
39
|
-
message: string;
|
|
40
|
-
}>;
|
|
41
|
-
deleteTable(store: any): Observable<void>;
|
|
42
|
-
private _prepareTables;
|
|
43
|
-
private _deleteDatabase;
|
|
44
|
-
private _dbSuccess;
|
|
45
|
-
private _dbError;
|
|
46
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DbSqliteService, never>;
|
|
47
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<DbSqliteService>;
|
|
48
|
-
}
|