UNPKG

amos-tool

Version:

amos ui tool

150 lines (148 loc) 4.92 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"), _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")), _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")), _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")), InvalidStorageDB = function() { return (0, _createClass2.default)(function e() { (0, _classCallCheck2.default)(this, e); }, [ { key: "init", value: function() {} }, { key: "get", value: function() {} }, { key: "set", value: function() {} }, { key: "clear", value: function() {} } ]); }(), RayDB = function() { return (0, _createClass2.default)(function e() { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "ray-project"; (0, _classCallCheck2.default)(this, e), (0, _defineProperty2.default)(this, "eventList", []), this.projectName = t; var r = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; if (void 0 === r) return console.warn("Storage: IndexedDB not available."), new InvalidStorageDB; this.indexedDB = r, this.ready(t); }, [ { key: "ready", value: function() { var e = this, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.projectName, r = this; return new Promise(function(n, o) { if (e.db) n(e); else { e.objectStoreName = "ray-store"; var i = r.indexedDB.open(t, 1); i.onsuccess = function(t) { e.db = t.target.result, n(e); }, i.onupgradeneeded = function(t) { var r = t.target.result; r.objectStoreNames.contains(e.objectStoreName) || r.createObjectStore(e.objectStoreName); }, i.onerror = function(e) { o(e); }; } }); } }, { key: "init", value: function(e, t) { var r = this; return new Promise(function(n, o) { var i = function(e) { t && "function" == typeof t && t(!1, e), n(e); }, a = function(e) { t && "function" == typeof t && t(e), o(e); }; return r.ready().then(function() { e(i, a); }).catch(a); }); } }, { key: "triggerEvent", value: function() { for (var e = arguments.length, t = new Array(e), r = 0; r < e; r++) t[r] = arguments[r]; document.dispatchEvent(new CustomEvent("rayStorage", { detail: [].concat(t) })), this.eventList.forEach(function(e) { e.apply(void 0, t); }); } }, { key: "addEventListener", value: function(e) { this.eventList.push(e); } }, { key: "setItem", value: function(e, t, r) { var n = this; return this.init(function(r, o) { var i = n.db.transaction(n.objectStoreName, "readwrite").objectStore(n.objectStoreName).put(t, e); i.onsuccess = function() { r(t), n.triggerEvent("setItem", { key: e, value: t }, n.projectName); }, i.onerror = o; }, r); } }, { key: "getItem", value: function(e, t) { var r = this; return this.init(function(t, n) { var o = r.db.transaction(r.objectStoreName).objectStore(r.objectStoreName).get(e); o.onsuccess = function() { return t(o.result); }, o.onerror = n; }, t); } }, { key: "removeItem", value: function(e, t) { var r = this; return this.init(function(t, n) { var o = r.db.transaction(r.objectStoreName, "readwrite").objectStore(r.objectStoreName).delete(e); o.onsuccess = function() { t(e), r.triggerEvent("removeItem", { key: e }, r.projectName); }, o.onerror = n; }, t); } }, { key: "key", value: function(e, t) { var r = this; return this.init(function(t, n) { var o = r.db.transaction(r.objectStoreName).objectStore(r.objectStoreName).getAllKeys(); o.onsuccess = function() { return t(o.result[e]); }, o.onerror = n; }, t); } }, { key: "keys", value: function(e) { var t = this; return this.init(function(e, r) { var n = t.db.transaction(t.objectStoreName).objectStore(t.objectStoreName).getAllKeys(); n.onsuccess = function() { return e(n.result); }, n.onerror = r; }, e); } }, { key: "clear", value: function(e) { var t = this; return this.init(function(e, r) { var n = t.db.transaction(t.objectStoreName, "readwrite").objectStore(t.objectStoreName).clear(); n.onsuccess = function() { e(null), t.triggerEvent("clear", {}, t.projectName); }, n.onerror = r; }, e); } } ]); }(); module.exports = RayDB;