@synerty/vortexjs
Version:
Custom observable data serialisation and routing based on Angular 2+
66 lines • 11 kB
JavaScript
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==