UNPKG

@synerty/orb-vortexjs

Version:

Custom observable data serialisation and routing based on Angular2

210 lines 9.88 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require("@angular/core"); var UtilMisc_1 = require("../UtilMisc"); var Payload_1 = require("../Payload"); var TupleActionStorageServiceABC_1 = require("./TupleActionStorageServiceABC"); var IndexedDb_1 = require("../storage/IndexedDb"); // ---------------------------------------------------------------------------- function now() { return new Date(); } var DB_NAME = "tupleActions"; var ACTION_STORE = "tupleActions"; var ACTION_KEY_PATH = "scopeUuid"; /** Tuple Storage IndexedDB * * This class handles storing and retrieving tuples to/from indexed db. * */ var TupleActionStorageIndexedDbService = (function (_super) { __extends(TupleActionStorageIndexedDbService, _super); function TupleActionStorageIndexedDbService() { var _this = _super.call(this) || this; _this.openInProgressPromise = null; return _this; } TupleActionStorageIndexedDbService.prototype.storeAction = function (scope, tupleAction, payload) { var startTime = now(); var retval = this.transaction(true) .then(function (tx) { var store = tx.objectStore(ACTION_STORE); return new Payload_1.Payload({}, [tupleAction]).toVortexMsg() .then(function (vortexMsg) { var item = { scope: scope, scopeUuid: scope + "|" + tupleAction.uuid, encodedPayload: vortexMsg }; var timeTaken = now() - startTime; console.log(UtilMisc_1.dateStr() + " IndexedDB: toVortexMsg took " + timeTaken + "ms "); startTime = now(); return new Promise(function (resolve, reject) { // Run the inserts var response = store.put(item); IndexedDb_1.addIndexedDbHandlers(response, function () { reject(UtilMisc_1.dateStr() + " IndexedDB: saveTuples \"put\" error"); throw new IndexedDb_1.IDBException("Put error"); }); response.oncomplete = function () { var timeTaken = now() - startTime; console.log(UtilMisc_1.dateStr() + " IndexedDB: storeAction" + (" took " + timeTaken + "ms (in thread)")); resolve(); }; }); }); }); return retval; }; TupleActionStorageIndexedDbService.prototype.loadNextAction = function () { return this.transaction(false) .then(function (tx) { var store = tx.objectStore(ACTION_STORE); return new Promise(function (resolve, reject) { // Run the inserts var response = store.openCursor(); IndexedDb_1.addIndexedDbHandlers(response, function () { reject(UtilMisc_1.dateStr() + " IndexedDB: saveTuples \"put\" error"); throw new IndexedDb_1.IDBException("Put error"); }); response.oncomplete = function (ev) { var cursor = response.result || ev.target.result; if (!!cursor == false) { resolve(new Payload_1.Payload()); return; } Payload_1.Payload.fromVortexMsg(cursor.value.encodedPayload) .then(function (payload) { resolve(payload); try { tx.abort(); } catch (e) { console.log(e); } }) .catch(function (e) { return reject(e); }); }; }); }); }; TupleActionStorageIndexedDbService.prototype.countActions = function () { return this.transaction(false) .then(function (tx) { var store = tx.objectStore(ACTION_STORE); return new Promise(function (resolve, reject) { // Run the inserts var response = store.count(); IndexedDb_1.addIndexedDbHandlers(response, function () { reject(UtilMisc_1.dateStr() + " IndexedDB: saveTuples \"put\" error"); throw new IndexedDb_1.IDBException("Put error"); }); response.oncomplete = function () { resolve(response.result); }; }); }); }; TupleActionStorageIndexedDbService.prototype.deleteAction = function (scope, actionUuid) { var scopeUuid = scope + "|" + actionUuid; return this.transaction(true) .then(function (tx) { var store = tx.objectStore(ACTION_STORE); return new Promise(function (resolve, reject) { // Run the inserts var response = store.delete(scopeUuid); IndexedDb_1.addIndexedDbHandlers(response, function () { reject(UtilMisc_1.dateStr() + " IndexedDB: saveTuples \"put\" error"); throw new IndexedDb_1.IDBException("Put error"); }); response.oncomplete = function () { resolve(); }; }); }); }; // ---------------------------------------------------------------------------- // Open the indexed db database TupleActionStorageIndexedDbService.prototype.open = function () { var _this = this; if (this.isOpen()) return Promise.resolve(); if (this.openInProgressPromise != null) return this.openInProgressPromise; this.openInProgressPromise = new Promise(function (resolve, reject) { // DISP Store var request = IndexedDb_1.indexedDB.open(DB_NAME, 1); IndexedDb_1.addIndexedDbHandlers(request, function () { var msg = UtilMisc_1.dateStr() + " IndexedDB : \"" + DB_NAME + "\" " + "Failed to open IndexedDB database"; _this.openInProgressPromise = null; reject(msg); throw new IndexedDb_1.IDBException(msg); }); request.onsuccess = function (event) { console.log(UtilMisc_1.dateStr() + " IndexedDB : \"" + DB_NAME + "\" Success opening DB"); if (_this.db == null) { _this.db = event.target.result; _this.openInProgressPromise = null; resolve(); } }; request.onupgradeneeded = function (event) { console.log(UtilMisc_1.dateStr() + " IndexedDB : \"" + DB_NAME + "\" Upgrading"); var db = event.target.result; // SCHEMA for database points // Schema Version 1 db.createObjectStore(ACTION_STORE, { keyPath: ACTION_KEY_PATH }); console.log(UtilMisc_1.dateStr() + " IndexedDB : \"" + DB_NAME + "\" Upgrade Success"); }; }); return this.openInProgressPromise; }; // ---------------------------------------------------------------------------- // Check if the DB is open TupleActionStorageIndexedDbService.prototype.isOpen = function () { return this.db != null; }; TupleActionStorageIndexedDbService.prototype.close = function () { if (!this.isOpen()) { throw new Error("IndexedDB \"" + DB_NAME + "\" is not open"); } this.db.close(); this.db = null; }; TupleActionStorageIndexedDbService.prototype.transaction = function (forWrite) { var _this = this; return this.open() .then(function () { // Get the Read Only case out the way, it's easy return _this.db.transaction(ACTION_STORE, forWrite ? "readwrite" : "readonly"); }); }; return TupleActionStorageIndexedDbService; }(TupleActionStorageServiceABC_1.TupleActionStorageServiceABC)); TupleActionStorageIndexedDbService = __decorate([ core_1.Injectable(), __metadata("design:paramtypes", []) ], TupleActionStorageIndexedDbService); exports.TupleActionStorageIndexedDbService = TupleActionStorageIndexedDbService; //# sourceMappingURL=/Users/jchesney/skyorb-dev/orb-vortexjs/src/vortex/action-storage/TupleActionStorageIndexedDbService.js.map