UNPKG

@synerty/vortexjs

Version:

Custom observable data serialisation and routing based on Angular 2+

66 lines 11 kB
import { Inject, Injectable } from "@angular/core"; import { TupleStorageIndexedDbService } from "../storage/TupleStorageIndexedDbService"; import { TupleStorageNullService } from "../storage/TupleStorageNullService"; import { TupleStorageFactoryService } from "./TupleStorageFactoryService"; import { TupleActionStorageIndexedDbService } from "../action-storage/TupleActionStorageIndexedDbService"; import { supportsIndexedDb } from "../storage-api/indexeddb-api"; import { SqlFactoryService } from "../storage-api/sql-api-factory"; import { TupleStorageWebSqlService } from "../storage/TupleStorageWebSqlService"; import { TupleActionStorageSqlService } from "../action-storage/tuple-action-storage-sql.service"; import { dateStr } from "../UtilMisc"; import * as i0 from "@angular/core"; export class TupleStorageFactoryServiceWeb extends TupleStorageFactoryService { sqlFactory; constructor(sqlFactory) { super(); this.sqlFactory = sqlFactory; } create(name) { // Prefer Web SQL if (this.sqlFactory.isSupported() && !this.sqlFactory.hasStorageLimitations()) { console.log(`${dateStr()} TupleStorageFactoryService: Choosing ` + this.sqlFactory.storageName + " Storage"); return new TupleStorageWebSqlService(this.sqlFactory, name); } // Fallback to Indexed DB, It gives mega space on mobile iOS if (supportsIndexedDb()) { console.log(`${dateStr()} TupleStorageFactoryService: Choosing IndexedDB Storage`); return new TupleStorageIndexedDbService(name); } // Otherwise, the null service just silently does nothing. console.log(`${dateStr()} TupleStorageFactoryService: Choosing Null Storage`); return new TupleStorageNullService(name); } createActionStorage() { // Prefer Web SQL if (this.sqlFactory.isSupported() && !this.sqlFactory.hasStorageLimitations()) { console.log(`${dateStr()} TupleStorageFactoryService: Choosing ` + this.sqlFactory.storageName + " Storage"); return new TupleActionStorageSqlService(this.sqlFactory); } // Fallback to Indexed DB, It gives mega space on mobile iOS if (supportsIndexedDb()) { console.log(`${dateStr()} TupleStorageFactoryService: Choosing IndexedDB Storage`); return new TupleActionStorageIndexedDbService(); } // Otheriwse, raise an exception. console.log(`${dateStr()} TupleStorageFactoryService: Choosing Null Storage`); throw new Error("Failed to choose a suitable storage backend for" + " offline TupleActions"); // Maybe we could have an in memory tuple action cache, but it wouldn't be the // same. } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TupleStorageFactoryServiceWeb, deps: [{ token: SqlFactoryService }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TupleStorageFactoryServiceWeb }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TupleStorageFactoryServiceWeb, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [SqlFactoryService] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHVwbGVTdG9yYWdlRmFjdG9yeVNlcnZpY2VXZWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdm9ydGV4L3N0b3JhZ2UtZmFjdG9yeS9UdXBsZVN0b3JhZ2VGYWN0b3J5U2VydmljZVdlYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUd0QyxNQUFNLE9BQU8sNkJBQThCLFNBQVEsMEJBQTBCO0lBQzFCO0lBQS9DLFlBQStDLFVBQVU7UUFDckQsS0FBSyxFQUFFLENBQUM7UUFEbUMsZUFBVSxHQUFWLFVBQVUsQ0FBQTtJQUV6RCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQW9DO1FBQ3ZDLGlCQUFpQjtRQUNqQixJQUNJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQzdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxFQUMxQztZQUNFLE9BQU8sQ0FBQyxHQUFHLENBQ1AsR0FBRyxPQUFPLEVBQUUsd0NBQXdDO2dCQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7Z0JBQzNCLFVBQVUsQ0FDakIsQ0FBQztZQUNGLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQy9EO1FBRUQsNERBQTREO1FBQzVELElBQUksaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixPQUFPLENBQUMsR0FBRyxDQUNQLEdBQUcsT0FBTyxFQUFFLHlEQUF5RCxDQUN4RSxDQUFDO1lBQ0YsT0FBTyxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsMERBQTBEO1FBQzFELE9BQU8sQ0FBQyxHQUFHLENBQ1AsR0FBRyxPQUFPLEVBQUUsb0RBQW9ELENBQ25FLENBQUM7UUFDRixPQUFPLElBQUksdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELG1CQUFtQjtRQUNmLGlCQUFpQjtRQUNqQixJQUNJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQzdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxFQUMxQztZQUNFLE9BQU8sQ0FBQyxHQUFHLENBQ1AsR0FBRyxPQUFPLEVBQUUsd0NBQXdDO2dCQUNoRCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7Z0JBQzNCLFVBQVUsQ0FDakIsQ0FBQztZQUNGLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDNUQ7UUFFRCw0REFBNEQ7UUFDNUQsSUFBSSxpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQ1AsR0FBRyxPQUFPLEVBQUUseURBQXlELENBQ3hFLENBQUM7WUFDRixPQUFPLElBQUksa0NBQWtDLEVBQUUsQ0FBQztTQUNuRDtRQUVELGlDQUFpQztRQUNqQyxPQUFPLENBQUMsR0FBRyxDQUNQLEdBQUcsT0FBTyxFQUFFLG9EQUFvRCxDQUNuRSxDQUFDO1FBQ0YsTUFBTSxJQUFJLEtBQUssQ0FDWCxpREFBaUQ7WUFDN0MsdUJBQXVCLENBQzlCLENBQUM7UUFFRiw4RUFBOEU7UUFDOUUsUUFBUTtJQUNaLENBQUM7d0dBbkVRLDZCQUE2QixrQkFDbEIsaUJBQWlCOzRHQUQ1Qiw2QkFBNkI7OzRGQUE3Qiw2QkFBNkI7a0JBRHpDLFVBQVU7OzBCQUVNLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFR1cGxlU3RvcmFnZVNlcnZpY2VBQkMgfSBmcm9tIFwiLi4vc3RvcmFnZS9UdXBsZVN0b3JhZ2VTZXJ2aWNlQUJDXCI7XG5pbXBvcnQgeyBUdXBsZU9mZmxpbmVTdG9yYWdlTmFtZVNlcnZpY2UgfSBmcm9tIFwiLi4vc3RvcmFnZS9UdXBsZU9mZmxpbmVTdG9yYWdlTmFtZVNlcnZpY2VcIjtcbmltcG9ydCB7IFR1cGxlU3RvcmFnZUluZGV4ZWREYlNlcnZpY2UgfSBmcm9tIFwiLi4vc3RvcmFnZS9UdXBsZVN0b3JhZ2VJbmRleGVkRGJTZXJ2aWNlXCI7XG5pbXBvcnQgeyBUdXBsZVN0b3JhZ2VOdWxsU2VydmljZSB9IGZyb20gXCIuLi9zdG9yYWdlL1R1cGxlU3RvcmFnZU51bGxTZXJ2aWNlXCI7XG5pbXBvcnQgeyBUdXBsZVN0b3JhZ2VGYWN0b3J5U2VydmljZSB9IGZyb20gXCIuL1R1cGxlU3RvcmFnZUZhY3RvcnlTZXJ2aWNlXCI7XG5pbXBvcnQgeyBUdXBsZUFjdGlvblN0b3JhZ2VTZXJ2aWNlQUJDIH0gZnJvbSBcIi4uL2FjdGlvbi1zdG9yYWdlL1R1cGxlQWN0aW9uU3RvcmFnZVNlcnZpY2VBQkNcIjtcbmltcG9ydCB7IFR1cGxlQWN0aW9uU3RvcmFnZUluZGV4ZWREYlNlcnZpY2UgfSBmcm9tIFwiLi4vYWN0aW9uLXN0b3JhZ2UvVHVwbGVBY3Rpb25TdG9yYWdlSW5kZXhlZERiU2VydmljZVwiO1xuaW1wb3J0IHsgc3VwcG9ydHNJbmRleGVkRGIgfSBmcm9tIFwiLi4vc3RvcmFnZS1hcGkvaW5kZXhlZGRiLWFwaVwiO1xuaW1wb3J0IHsgU3FsRmFjdG9yeVNlcnZpY2UgfSBmcm9tIFwiLi4vc3RvcmFnZS1hcGkvc3FsLWFwaS1mYWN0b3J5XCI7XG5pbXBvcnQgeyBUdXBsZVN0b3JhZ2VXZWJTcWxTZXJ2aWNlIH0gZnJvbSBcIi4uL3N0b3JhZ2UvVHVwbGVTdG9yYWdlV2ViU3FsU2VydmljZVwiO1xuaW1wb3J0IHsgVHVwbGVBY3Rpb25TdG9yYWdlU3FsU2VydmljZSB9IGZyb20gXCIuLi9hY3Rpb24tc3RvcmFnZS90dXBsZS1hY3Rpb24tc3RvcmFnZS1zcWwuc2VydmljZVwiO1xuaW1wb3J0IHsgZGF0ZVN0ciB9IGZyb20gXCIuLi9VdGlsTWlzY1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHVwbGVTdG9yYWdlRmFjdG9yeVNlcnZpY2VXZWIgZXh0ZW5kcyBUdXBsZVN0b3JhZ2VGYWN0b3J5U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoQEluamVjdChTcWxGYWN0b3J5U2VydmljZSkgcHJpdmF0ZSBzcWxGYWN0b3J5KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlKG5hbWU6IFR1cGxlT2ZmbGluZVN0b3JhZ2VOYW1lU2VydmljZSk6IFR1cGxlU3RvcmFnZVNlcnZpY2VBQkMge1xuICAgICAgICAvLyBQcmVmZXIgV2ViIFNRTFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNxbEZhY3RvcnkuaXNTdXBwb3J0ZWQoKSAmJlxuICAgICAgICAgICAgIXRoaXMuc3FsRmFjdG9yeS5oYXNTdG9yYWdlTGltaXRhdGlvbnMoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGAke2RhdGVTdHIoKX0gVHVwbGVTdG9yYWdlRmFjdG9yeVNlcnZpY2U6IENob29zaW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNxbEZhY3Rvcnkuc3RvcmFnZU5hbWUgK1xuICAgICAgICAgICAgICAgICAgICBcIiBTdG9yYWdlXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFR1cGxlU3RvcmFnZVdlYlNxbFNlcnZpY2UodGhpcy5zcWxGYWN0b3J5LCBuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIEluZGV4ZWQgREIsIEl0IGdpdmVzIG1lZ2Egc3BhY2Ugb24gbW9iaWxlIGlPU1xuICAgICAgICBpZiAoc3VwcG9ydHNJbmRleGVkRGIoKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgYCR7ZGF0ZVN0cigpfSBUdXBsZVN0b3JhZ2VGYWN0b3J5U2VydmljZTogQ2hvb3NpbmcgSW5kZXhlZERCIFN0b3JhZ2VgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUdXBsZVN0b3JhZ2VJbmRleGVkRGJTZXJ2aWNlKG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgbnVsbCBzZXJ2aWNlIGp1c3Qgc2lsZW50bHkgZG9lcyBub3RoaW5nLlxuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAke2RhdGVTdHIoKX0gVHVwbGVTdG9yYWdlRmFjdG9yeVNlcnZpY2U6IENob29zaW5nIE51bGwgU3RvcmFnZWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZVN0b3JhZ2VOdWxsU2VydmljZShuYW1lKTtcbiAgICB9XG5cbiAgICBjcmVhdGVBY3Rpb25TdG9yYWdlKCk6IFR1cGxlQWN0aW9uU3RvcmFnZVNlcnZpY2VBQkMge1xuICAgICAgICAvLyBQcmVmZXIgV2ViIFNRTFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNxbEZhY3RvcnkuaXNTdXBwb3J0ZWQoKSAmJlxuICAgICAgICAgICAgIXRoaXMuc3FsRmFjdG9yeS5oYXNTdG9yYWdlTGltaXRhdGlvbnMoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGAke2RhdGVTdHIoKX0gVHVwbGVTdG9yYWdlRmFjdG9yeVNlcnZpY2U6IENob29zaW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNxbEZhY3Rvcnkuc3RvcmFnZU5hbWUgK1xuICAgICAgICAgICAgICAgICAgICBcIiBTdG9yYWdlXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFR1cGxlQWN0aW9uU3RvcmFnZVNxbFNlcnZpY2UodGhpcy5zcWxGYWN0b3J5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIEluZGV4ZWQgREIsIEl0IGdpdmVzIG1lZ2Egc3BhY2Ugb24gbW9iaWxlIGlPU1xuICAgICAgICBpZiAoc3VwcG9ydHNJbmRleGVkRGIoKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgYCR7ZGF0ZVN0cigpfSBUdXBsZVN0b3JhZ2VGYWN0b3J5U2VydmljZTogQ2hvb3NpbmcgSW5kZXhlZERCIFN0b3JhZ2VgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUdXBsZUFjdGlvblN0b3JhZ2VJbmRleGVkRGJTZXJ2aWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcml3c2UsIHJhaXNlIGFuIGV4Y2VwdGlvbi5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgJHtkYXRlU3RyKCl9IFR1cGxlU3RvcmFnZUZhY3RvcnlTZXJ2aWNlOiBDaG9vc2luZyBOdWxsIFN0b3JhZ2VgXG4gICAgICAgICk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiRmFpbGVkIHRvIGNob29zZSBhIHN1aXRhYmxlIHN0b3JhZ2UgYmFja2VuZCBmb3JcIiArXG4gICAgICAgICAgICAgICAgXCIgb2ZmbGluZSBUdXBsZUFjdGlvbnNcIlxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1heWJlIHdlIGNvdWxkIGhhdmUgYW4gaW4gbWVtb3J5IHR1cGxlIGFjdGlvbiBjYWNoZSwgYnV0IGl0IHdvdWxkbid0IGJlIHRoZVxuICAgICAgICAvLyBzYW1lLlxuICAgIH1cbn1cbiJdfQ==