@herdwatch/lokijs 1.5.8-dev.3 → 1.5.8-dev.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/build/loki-indexed-adapter.min.js +1 -1
- package/karma.build.conf.js +1 -0
- package/karma.conf.js +1 -0
- package/package.json +1 -1
- package/src/loki-indexed-adapter.js +127 -159
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(root,factory){if(typeof define==="function"&&define.amd){define([],factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.LokiIndexedAdapter=factory()}})(this,function(){return function(){function LokiIndexedAdapter(appname,options){this.app="loki";this.options=options||{};if(typeof appname!=="undefined"){this.app=appname}this.catalog=null;if(!this.checkAvailability()){throw new Error("indexedDB does not seem to be supported for your environment")}}LokiIndexedAdapter.prototype.closeDatabase=function(){if(this.catalog&&this.catalog.db){this.catalog.db.close();this.catalog.db=null}};LokiIndexedAdapter.prototype.checkAvailability=function(){if(typeof indexedDB!=="undefined"&&indexedDB)return true;return false};LokiIndexedAdapter.prototype.loadDatabase=function(dbname,callback){var appName=this.app;var adapter=this;if(this.catalog===null||this.catalog.db===null){this.catalog=new LokiCatalog(function(cat){adapter.catalog=cat;adapter.loadDatabase(dbname,callback)});return}this.catalog.getAppKey(appName,dbname,function(result){if(typeof callback==="function"){if(result.id===0){callback(null);return}callback(result.val)}else{console.log(result.val)}})};LokiIndexedAdapter.prototype.loadKey=LokiIndexedAdapter.prototype.loadDatabase;LokiIndexedAdapter.prototype.saveDatabase=function(dbname,dbstring,callback){var appName=this.app;var adapter=this;function saveCallback(result){if(result&&result.success===true){callback(null)}else{
|
|
1
|
+
(function(root,factory){if(typeof define==="function"&&define.amd){define([],factory)}else if(typeof exports==="object"){module.exports=factory()}else{root.LokiIndexedAdapter=factory()}})(this,function(){return function(){function LokiIndexedAdapter(appname,options){this.app="loki";this.options=options||{};if(typeof appname!=="undefined"){this.app=appname}this.catalog=null;if(!this.checkAvailability()){throw new Error("indexedDB does not seem to be supported for your environment")}}LokiIndexedAdapter.prototype.closeDatabase=function(){if(this.catalog&&this.catalog.db){this.catalog.db.close();this.catalog.db=null}};LokiIndexedAdapter.prototype.checkAvailability=function(){if(typeof indexedDB!=="undefined"&&indexedDB)return true;return false};LokiIndexedAdapter.prototype.loadDatabase=function(dbname,callback){var appName=this.app;var adapter=this;if(this.catalog===null||this.catalog.db===null){this.catalog=new LokiCatalog(function(cat){adapter.catalog=cat;adapter.loadDatabase(dbname,callback)});return}this.catalog.getAppKey(appName,dbname,function(result){if(typeof callback==="function"){if(result.id===0){callback(null);return}callback(result.val)}else{console.log(result.val)}})};LokiIndexedAdapter.prototype.loadKey=LokiIndexedAdapter.prototype.loadDatabase;LokiIndexedAdapter.prototype.saveDatabase=function(dbname,dbstring,callback){var appName=this.app;var adapter=this;function saveCallback(result){if(result&&result.success===true){callback(null)}else{console.error("Error saving database",result);callback(result)}if(adapter.options.closeAfterSave){adapter.closeDatabase()}}if(this.catalog===null||this.catalog.db===null){this.catalog=new LokiCatalog(function(cat){adapter.saveDatabase(dbname,dbstring,callback)});return}this.catalog.setAppKey(appName,dbname,dbstring,saveCallback)};LokiIndexedAdapter.prototype.saveKey=LokiIndexedAdapter.prototype.saveDatabase;LokiIndexedAdapter.prototype.deleteDatabase=function(dbname,callback){var appName=this.app;var adapter=this;if(this.catalog===null||this.catalog.db===null){this.catalog=new LokiCatalog(function(cat){adapter.catalog=cat;adapter.deleteDatabase(dbname,callback)});return}this.catalog.getAppKey(appName,dbname,function(result){var id=result.id;if(id!==0){adapter.catalog.deleteAppKey(id,callback)}else if(typeof callback==="function"){callback({success:true})}})};LokiIndexedAdapter.prototype.deleteKey=LokiIndexedAdapter.prototype.deleteDatabase;LokiIndexedAdapter.prototype.deleteDatabasePartitions=function(dbname){var self=this;this.getDatabaseList(function(result){result.forEach(function(str){if(str.startsWith(dbname)){self.deleteDatabase(str)}})})};LokiIndexedAdapter.prototype.getDatabaseList=function(callback){var appName=this.app;var adapter=this;if(this.catalog===null||this.catalog.db===null){this.catalog=new LokiCatalog(function(cat){adapter.catalog=cat;adapter.getDatabaseList(callback)});return}this.catalog.getAppKeys(appName,function(results){var names=[];for(var idx=0;idx<results.length;idx++){names.push(results[idx].key)}if(typeof callback==="function"){callback(names)}else{names.forEach(function(obj){console.log(obj)})}})};LokiIndexedAdapter.prototype.getKeyList=LokiIndexedAdapter.prototype.getDatabaseList;LokiIndexedAdapter.prototype.getCatalogSummary=function(callback){var appName=this.app;var adapter=this;if(this.catalog===null||this.catalog.db===null){this.catalog=new LokiCatalog(function(cat){adapter.catalog=cat;adapter.getCatalogSummary(callback)});return}this.catalog.getAllKeys(function(results){var entries=[];var obj,size,oapp,okey,oval;for(var idx=0;idx<results.length;idx++){obj=results[idx];oapp=obj.app||"";okey=obj.key||"";oval=obj.val||"";size=oapp.length*2+okey.length*2+oval.length+1;entries.push({app:obj.app,key:obj.key,size:size})}if(typeof callback==="function"){callback(entries)}else{entries.forEach(function(obj){console.log(obj)})}})};function LokiCatalog(callback){this.db=null;this.initializeLokiCatalog(callback)}LokiCatalog.prototype.initializeLokiCatalog=function(callback){var openRequest=indexedDB.open("LokiCatalog",1);var cat=this;openRequest.onupgradeneeded=function(e){var thisDB=e.target.result;if(thisDB.objectStoreNames.contains("LokiAKV")){thisDB.deleteObjectStore("LokiAKV")}if(!thisDB.objectStoreNames.contains("LokiAKV")){var objectStore=thisDB.createObjectStore("LokiAKV",{keyPath:"id",autoIncrement:true});objectStore.createIndex("app","app",{unique:false});objectStore.createIndex("key","key",{unique:false});objectStore.createIndex("appkey","appkey",{unique:true})}};openRequest.onsuccess=function(e){cat.db=e.target.result;if(typeof callback==="function")callback(cat)};openRequest.onerror=function(e){throw e}};LokiCatalog.prototype.getAppKey=function(app,key,callback){var transaction=this.db.transaction(["LokiAKV"],"readonly");var store=transaction.objectStore("LokiAKV");var index=store.index("appkey");var appkey=app+","+key;var request=index.get(appkey);request.onsuccess=function(usercallback){return function(e){var lres=e.target.result;if(lres===null||typeof lres==="undefined"){lres={id:0,success:false}}if(typeof usercallback==="function"){usercallback(lres)}else{console.log(lres)}}}(callback);request.onerror=function(usercallback){return function(e){if(typeof usercallback==="function"){usercallback({id:0,success:false})}else{throw e}}}(callback)};LokiCatalog.prototype.getAppKeyById=function(id,callback,data){var transaction=this.db.transaction(["LokiAKV"],"readonly");var store=transaction.objectStore("LokiAKV");var request=store.get(id);request.onsuccess=function(data,usercallback){return function(e){if(typeof usercallback==="function"){usercallback(e.target.result,data)}else{console.log(e.target.result)}}}(data,callback)};LokiCatalog.prototype.setAppKey=function(app,key,val,callback){var transaction=this.db.transaction(["LokiAKV"],"readwrite");var store=transaction.objectStore("LokiAKV");var index=store.index("appkey");var appkey=app+","+key;var request=index.get(appkey);request.onsuccess=function(e){var res=e.target.result;if(res===null||res===undefined){res={app:app,key:key,appkey:app+","+key,val:val}}else{res.val=val}var requestPut=store.put(res);requestPut.onerror=function(usercallback){return function(e){if(typeof usercallback==="function"){usercallback({success:false,error:request.error})}else{console.error("LokiCatalog.setAppKey (set) onerror");console.error(request.error)}}}(callback);requestPut.onsuccess=function(usercallback){return function(e){if(typeof usercallback==="function"){usercallback({success:true})}}}(callback)};request.onerror=function(usercallback){return function(e){if(typeof usercallback==="function"){usercallback({success:false,error:request.error})}else{console.error("LokiCatalog.setAppKey (get) onerror");console.error(request.error)}}}(callback)};LokiCatalog.prototype.deleteAppKey=function(id,callback){var transaction=this.db.transaction(["LokiAKV"],"readwrite");var store=transaction.objectStore("LokiAKV");var request=store.delete(id);request.onsuccess=function(usercallback){return function(evt){if(typeof usercallback==="function")usercallback({success:true})}}(callback);request.onerror=function(usercallback){return function(evt){if(typeof usercallback==="function"){usercallback({success:false})}else{console.error("LokiCatalog.deleteAppKey raised onerror");console.error(request.error)}}}(callback)};LokiCatalog.prototype.getAppKeys=function(app,callback){var transaction=this.db.transaction(["LokiAKV"],"readonly");var store=transaction.objectStore("LokiAKV");var index=store.index("app");var singleKeyRange=IDBKeyRange.only(app);var cursor=index.openCursor(singleKeyRange);var localdata=[];cursor.onsuccess=function(data,callback){return function(e){var cursor=e.target.result;if(cursor){var currObject=cursor.value;data.push(currObject);cursor.continue()}else{if(typeof callback==="function"){callback(data)}else{console.log(data)}}}}(localdata,callback);cursor.onerror=function(usercallback){return function(e){if(typeof usercallback==="function"){usercallback(null)}else{console.error("LokiCatalog.getAppKeys raised onerror");console.error(e)}}}(callback)};LokiCatalog.prototype.getAllKeys=function(callback){var transaction=this.db.transaction(["LokiAKV"],"readonly");var store=transaction.objectStore("LokiAKV");var cursor=store.openCursor();var localdata=[];cursor.onsuccess=function(data,callback){return function(e){var cursor=e.target.result;if(cursor){var currObject=cursor.value;data.push(currObject);cursor.continue()}else{if(typeof callback==="function"){callback(data)}else{console.log(data)}}}}(localdata,callback);cursor.onerror=function(usercallback){return function(e){if(typeof usercallback==="function")usercallback(null)}}(callback)};return LokiIndexedAdapter}()});
|
package/karma.build.conf.js
CHANGED
package/karma.conf.js
CHANGED
package/package.json
CHANGED
|
@@ -9,19 +9,18 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
(function (root, factory) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}(this, function () {
|
|
23
|
-
return (function() {
|
|
24
|
-
|
|
12
|
+
if (typeof define === 'function' && define.amd) {
|
|
13
|
+
// AMD
|
|
14
|
+
define([], factory);
|
|
15
|
+
} else if (typeof exports === 'object') {
|
|
16
|
+
// Node, CommonJS-like
|
|
17
|
+
module.exports = factory();
|
|
18
|
+
} else {
|
|
19
|
+
// Browser globals (root is window)
|
|
20
|
+
root.LokiIndexedAdapter = factory();
|
|
21
|
+
}
|
|
22
|
+
})(this, function () {
|
|
23
|
+
return (function () {
|
|
25
24
|
/**
|
|
26
25
|
* Loki persistence adapter class for indexedDb.
|
|
27
26
|
* This class fulfills abstract adapter interface which can be applied to other storage methods.
|
|
@@ -40,13 +39,11 @@
|
|
|
40
39
|
* @param {object=} options Configuration options for the adapter
|
|
41
40
|
* @param {boolean} options.closeAfterSave Whether the indexedDB database should be closed after saving.
|
|
42
41
|
*/
|
|
43
|
-
function LokiIndexedAdapter(appname, options)
|
|
44
|
-
{
|
|
42
|
+
function LokiIndexedAdapter(appname, options) {
|
|
45
43
|
this.app = 'loki';
|
|
46
44
|
this.options = options || {};
|
|
47
45
|
|
|
48
|
-
if (typeof
|
|
49
|
-
{
|
|
46
|
+
if (typeof appname !== 'undefined') {
|
|
50
47
|
this.app = appname;
|
|
51
48
|
}
|
|
52
49
|
|
|
@@ -61,8 +58,7 @@
|
|
|
61
58
|
/**
|
|
62
59
|
* Used for closing the indexeddb database.
|
|
63
60
|
*/
|
|
64
|
-
LokiIndexedAdapter.prototype.closeDatabase = function ()
|
|
65
|
-
{
|
|
61
|
+
LokiIndexedAdapter.prototype.closeDatabase = function () {
|
|
66
62
|
if (this.catalog && this.catalog.db) {
|
|
67
63
|
this.catalog.db.close();
|
|
68
64
|
this.catalog.db = null;
|
|
@@ -75,8 +71,7 @@
|
|
|
75
71
|
* @returns {boolean} true if indexeddb is available, false if not.
|
|
76
72
|
* @memberof LokiIndexedAdapter
|
|
77
73
|
*/
|
|
78
|
-
LokiIndexedAdapter.prototype.checkAvailability = function()
|
|
79
|
-
{
|
|
74
|
+
LokiIndexedAdapter.prototype.checkAvailability = function () {
|
|
80
75
|
if (typeof indexedDB !== 'undefined' && indexedDB) return true;
|
|
81
76
|
|
|
82
77
|
return false;
|
|
@@ -97,14 +92,13 @@
|
|
|
97
92
|
* @param {function} callback - callback should accept string param containing serialized db string.
|
|
98
93
|
* @memberof LokiIndexedAdapter
|
|
99
94
|
*/
|
|
100
|
-
LokiIndexedAdapter.prototype.loadDatabase = function(dbname, callback)
|
|
101
|
-
{
|
|
95
|
+
LokiIndexedAdapter.prototype.loadDatabase = function (dbname, callback) {
|
|
102
96
|
var appName = this.app;
|
|
103
97
|
var adapter = this;
|
|
104
98
|
|
|
105
99
|
// lazy open/create db reference so dont -need- callback in constructor
|
|
106
100
|
if (this.catalog === null || this.catalog.db === null) {
|
|
107
|
-
this.catalog = new LokiCatalog(function(cat) {
|
|
101
|
+
this.catalog = new LokiCatalog(function (cat) {
|
|
108
102
|
adapter.catalog = cat;
|
|
109
103
|
|
|
110
104
|
adapter.loadDatabase(dbname, callback);
|
|
@@ -114,15 +108,14 @@
|
|
|
114
108
|
}
|
|
115
109
|
|
|
116
110
|
// lookup up db string in AKV db
|
|
117
|
-
this.catalog.getAppKey(appName, dbname, function(result) {
|
|
118
|
-
if (typeof
|
|
111
|
+
this.catalog.getAppKey(appName, dbname, function (result) {
|
|
112
|
+
if (typeof callback === 'function') {
|
|
119
113
|
if (result.id === 0) {
|
|
120
114
|
callback(null);
|
|
121
115
|
return;
|
|
122
116
|
}
|
|
123
117
|
callback(result.val);
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
118
|
+
} else {
|
|
126
119
|
// support console use of api
|
|
127
120
|
console.log(result.val);
|
|
128
121
|
}
|
|
@@ -148,17 +141,19 @@
|
|
|
148
141
|
* @param {function} callback - (Optional) callback passed obj.success with true or false
|
|
149
142
|
* @memberof LokiIndexedAdapter
|
|
150
143
|
*/
|
|
151
|
-
LokiIndexedAdapter.prototype.saveDatabase = function(dbname, dbstring, callback)
|
|
152
|
-
{
|
|
144
|
+
LokiIndexedAdapter.prototype.saveDatabase = function (dbname, dbstring, callback) {
|
|
153
145
|
var appName = this.app;
|
|
154
146
|
var adapter = this;
|
|
155
147
|
|
|
148
|
+
/**
|
|
149
|
+
* @param { success: boolean, error: Error } result
|
|
150
|
+
*/
|
|
156
151
|
function saveCallback(result) {
|
|
157
152
|
if (result && result.success === true) {
|
|
158
153
|
callback(null);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
callback(
|
|
154
|
+
} else {
|
|
155
|
+
console.error('Error saving database', result);
|
|
156
|
+
callback(result);
|
|
162
157
|
}
|
|
163
158
|
|
|
164
159
|
if (adapter.options.closeAfterSave) {
|
|
@@ -168,8 +163,8 @@
|
|
|
168
163
|
|
|
169
164
|
// lazy open/create db reference so dont -need- callback in constructor
|
|
170
165
|
if (this.catalog === null || this.catalog.db === null) {
|
|
171
|
-
this.catalog = new LokiCatalog(function(cat) {
|
|
172
|
-
adapter.saveDatabase(dbname, dbstring,
|
|
166
|
+
this.catalog = new LokiCatalog(function (cat) {
|
|
167
|
+
adapter.saveDatabase(dbname, dbstring, callback);
|
|
173
168
|
});
|
|
174
169
|
|
|
175
170
|
return;
|
|
@@ -196,14 +191,13 @@
|
|
|
196
191
|
* @param {function=} callback - (Optional) executed on database delete
|
|
197
192
|
* @memberof LokiIndexedAdapter
|
|
198
193
|
*/
|
|
199
|
-
LokiIndexedAdapter.prototype.deleteDatabase = function(dbname, callback)
|
|
200
|
-
{
|
|
194
|
+
LokiIndexedAdapter.prototype.deleteDatabase = function (dbname, callback) {
|
|
201
195
|
var appName = this.app;
|
|
202
196
|
var adapter = this;
|
|
203
197
|
|
|
204
198
|
// lazy open/create db reference and pass callback ahead
|
|
205
199
|
if (this.catalog === null || this.catalog.db === null) {
|
|
206
|
-
this.catalog = new LokiCatalog(function(cat) {
|
|
200
|
+
this.catalog = new LokiCatalog(function (cat) {
|
|
207
201
|
adapter.catalog = cat;
|
|
208
202
|
|
|
209
203
|
adapter.deleteDatabase(dbname, callback);
|
|
@@ -213,12 +207,12 @@
|
|
|
213
207
|
}
|
|
214
208
|
|
|
215
209
|
// catalog was already initialized, so just lookup object and delete by id
|
|
216
|
-
this.catalog.getAppKey(appName, dbname, function(result) {
|
|
210
|
+
this.catalog.getAppKey(appName, dbname, function (result) {
|
|
217
211
|
var id = result.id;
|
|
218
212
|
|
|
219
213
|
if (id !== 0) {
|
|
220
214
|
adapter.catalog.deleteAppKey(id, callback);
|
|
221
|
-
} else if (typeof
|
|
215
|
+
} else if (typeof callback === 'function') {
|
|
222
216
|
callback({ success: true });
|
|
223
217
|
}
|
|
224
218
|
});
|
|
@@ -234,10 +228,10 @@
|
|
|
234
228
|
* @param {string} dbname - the base filename which container, partitions, or pages are derived
|
|
235
229
|
* @memberof LokiIndexedAdapter
|
|
236
230
|
*/
|
|
237
|
-
LokiIndexedAdapter.prototype.deleteDatabasePartitions = function(dbname) {
|
|
238
|
-
var self=this;
|
|
239
|
-
this.getDatabaseList(function(result) {
|
|
240
|
-
result.forEach(function(str) {
|
|
231
|
+
LokiIndexedAdapter.prototype.deleteDatabasePartitions = function (dbname) {
|
|
232
|
+
var self = this;
|
|
233
|
+
this.getDatabaseList(function (result) {
|
|
234
|
+
result.forEach(function (str) {
|
|
241
235
|
if (str.startsWith(dbname)) {
|
|
242
236
|
self.deleteDatabase(str);
|
|
243
237
|
}
|
|
@@ -259,14 +253,13 @@
|
|
|
259
253
|
* @param {function} callback - should accept array of database names in the catalog for current app.
|
|
260
254
|
* @memberof LokiIndexedAdapter
|
|
261
255
|
*/
|
|
262
|
-
LokiIndexedAdapter.prototype.getDatabaseList = function(callback)
|
|
263
|
-
{
|
|
256
|
+
LokiIndexedAdapter.prototype.getDatabaseList = function (callback) {
|
|
264
257
|
var appName = this.app;
|
|
265
258
|
var adapter = this;
|
|
266
259
|
|
|
267
260
|
// lazy open/create db reference so dont -need- callback in constructor
|
|
268
261
|
if (this.catalog === null || this.catalog.db === null) {
|
|
269
|
-
this.catalog = new LokiCatalog(function(cat) {
|
|
262
|
+
this.catalog = new LokiCatalog(function (cat) {
|
|
270
263
|
adapter.catalog = cat;
|
|
271
264
|
|
|
272
265
|
adapter.getDatabaseList(callback);
|
|
@@ -277,18 +270,17 @@
|
|
|
277
270
|
|
|
278
271
|
// catalog already initialized
|
|
279
272
|
// get all keys for current appName, and transpose results so just string array
|
|
280
|
-
this.catalog.getAppKeys(appName, function(results) {
|
|
273
|
+
this.catalog.getAppKeys(appName, function (results) {
|
|
281
274
|
var names = [];
|
|
282
275
|
|
|
283
|
-
for(var idx = 0; idx < results.length; idx++) {
|
|
276
|
+
for (var idx = 0; idx < results.length; idx++) {
|
|
284
277
|
names.push(results[idx].key);
|
|
285
278
|
}
|
|
286
279
|
|
|
287
|
-
if (typeof
|
|
280
|
+
if (typeof callback === 'function') {
|
|
288
281
|
callback(names);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
names.forEach(function(obj) {
|
|
282
|
+
} else {
|
|
283
|
+
names.forEach(function (obj) {
|
|
292
284
|
console.log(obj);
|
|
293
285
|
});
|
|
294
286
|
}
|
|
@@ -304,14 +296,13 @@
|
|
|
304
296
|
* @param {function} callback - (Optional) callback to accept result array.
|
|
305
297
|
* @memberof LokiIndexedAdapter
|
|
306
298
|
*/
|
|
307
|
-
LokiIndexedAdapter.prototype.getCatalogSummary = function(callback)
|
|
308
|
-
{
|
|
299
|
+
LokiIndexedAdapter.prototype.getCatalogSummary = function (callback) {
|
|
309
300
|
var appName = this.app;
|
|
310
301
|
var adapter = this;
|
|
311
302
|
|
|
312
303
|
// lazy open/create db reference
|
|
313
304
|
if (this.catalog === null || this.catalog.db === null) {
|
|
314
|
-
this.catalog = new LokiCatalog(function(cat) {
|
|
305
|
+
this.catalog = new LokiCatalog(function (cat) {
|
|
315
306
|
adapter.catalog = cat;
|
|
316
307
|
|
|
317
308
|
adapter.getCatalogSummary(callback);
|
|
@@ -322,15 +313,11 @@
|
|
|
322
313
|
|
|
323
314
|
// catalog already initialized
|
|
324
315
|
// get all keys for current appName, and transpose results so just string array
|
|
325
|
-
this.catalog.getAllKeys(function(results) {
|
|
316
|
+
this.catalog.getAllKeys(function (results) {
|
|
326
317
|
var entries = [];
|
|
327
|
-
var obj,
|
|
328
|
-
size,
|
|
329
|
-
oapp,
|
|
330
|
-
okey,
|
|
331
|
-
oval;
|
|
318
|
+
var obj, size, oapp, okey, oval;
|
|
332
319
|
|
|
333
|
-
for(var idx = 0; idx < results.length; idx++) {
|
|
320
|
+
for (var idx = 0; idx < results.length; idx++) {
|
|
334
321
|
obj = results[idx];
|
|
335
322
|
oapp = obj.app || '';
|
|
336
323
|
okey = obj.key || '';
|
|
@@ -339,14 +326,13 @@
|
|
|
339
326
|
// app and key are composited into an appkey column so we will mult by 2
|
|
340
327
|
size = oapp.length * 2 + okey.length * 2 + oval.length + 1;
|
|
341
328
|
|
|
342
|
-
entries.push({
|
|
329
|
+
entries.push({ app: obj.app, key: obj.key, size: size });
|
|
343
330
|
}
|
|
344
331
|
|
|
345
|
-
if (typeof
|
|
332
|
+
if (typeof callback === 'function') {
|
|
346
333
|
callback(entries);
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
entries.forEach(function(obj) {
|
|
334
|
+
} else {
|
|
335
|
+
entries.forEach(function (obj) {
|
|
350
336
|
console.log(obj);
|
|
351
337
|
});
|
|
352
338
|
}
|
|
@@ -358,79 +344,75 @@
|
|
|
358
344
|
* This non-interface class implements the actual persistence.
|
|
359
345
|
* Used by the IndexedAdapter class.
|
|
360
346
|
*/
|
|
361
|
-
function LokiCatalog(callback)
|
|
362
|
-
{
|
|
347
|
+
function LokiCatalog(callback) {
|
|
363
348
|
this.db = null;
|
|
364
349
|
this.initializeLokiCatalog(callback);
|
|
365
350
|
}
|
|
366
351
|
|
|
367
|
-
LokiCatalog.prototype.initializeLokiCatalog = function(callback) {
|
|
352
|
+
LokiCatalog.prototype.initializeLokiCatalog = function (callback) {
|
|
368
353
|
var openRequest = indexedDB.open('LokiCatalog', 1);
|
|
369
354
|
var cat = this;
|
|
370
355
|
|
|
371
356
|
// If database doesn't exist yet or its version is lower than our version specified above (2nd param in line above)
|
|
372
|
-
openRequest.onupgradeneeded = function(e) {
|
|
357
|
+
openRequest.onupgradeneeded = function (e) {
|
|
373
358
|
var thisDB = e.target.result;
|
|
374
359
|
if (thisDB.objectStoreNames.contains('LokiAKV')) {
|
|
375
360
|
thisDB.deleteObjectStore('LokiAKV');
|
|
376
361
|
}
|
|
377
362
|
|
|
378
|
-
if(!thisDB.objectStoreNames.contains('LokiAKV')) {
|
|
379
|
-
var objectStore = thisDB.createObjectStore('LokiAKV', { keyPath: 'id', autoIncrement:true });
|
|
380
|
-
objectStore.createIndex('app', 'app', {unique:false});
|
|
381
|
-
objectStore.createIndex('key', 'key', {unique:false});
|
|
363
|
+
if (!thisDB.objectStoreNames.contains('LokiAKV')) {
|
|
364
|
+
var objectStore = thisDB.createObjectStore('LokiAKV', { keyPath: 'id', autoIncrement: true });
|
|
365
|
+
objectStore.createIndex('app', 'app', { unique: false });
|
|
366
|
+
objectStore.createIndex('key', 'key', { unique: false });
|
|
382
367
|
// hack to simulate composite key since overhead is low (main size should be in val field)
|
|
383
368
|
// user (me) required to duplicate the app and key into comma delimited appkey field off object
|
|
384
369
|
// This will allow retrieving single record with that composite key as well as
|
|
385
370
|
// still supporting opening cursors on app or key alone
|
|
386
|
-
objectStore.createIndex('appkey', 'appkey', {unique:true});
|
|
371
|
+
objectStore.createIndex('appkey', 'appkey', { unique: true });
|
|
387
372
|
}
|
|
388
373
|
};
|
|
389
374
|
|
|
390
|
-
openRequest.onsuccess = function(e) {
|
|
375
|
+
openRequest.onsuccess = function (e) {
|
|
391
376
|
cat.db = e.target.result;
|
|
392
|
-
|
|
393
|
-
if (typeof (callback) === 'function') callback(cat);
|
|
377
|
+
if (typeof callback === 'function') callback(cat);
|
|
394
378
|
};
|
|
395
379
|
|
|
396
|
-
openRequest.onerror = function(e) {
|
|
380
|
+
openRequest.onerror = function (e) {
|
|
397
381
|
throw e;
|
|
398
382
|
};
|
|
399
383
|
};
|
|
400
384
|
|
|
401
|
-
LokiCatalog.prototype.getAppKey = function(app, key, callback) {
|
|
385
|
+
LokiCatalog.prototype.getAppKey = function (app, key, callback) {
|
|
402
386
|
var transaction = this.db.transaction(['LokiAKV'], 'readonly');
|
|
403
387
|
var store = transaction.objectStore('LokiAKV');
|
|
404
388
|
var index = store.index('appkey');
|
|
405
|
-
var appkey = app +
|
|
389
|
+
var appkey = app + ',' + key;
|
|
406
390
|
var request = index.get(appkey);
|
|
407
391
|
|
|
408
|
-
request.onsuccess = (function(usercallback) {
|
|
409
|
-
return function(e) {
|
|
392
|
+
request.onsuccess = (function (usercallback) {
|
|
393
|
+
return function (e) {
|
|
410
394
|
var lres = e.target.result;
|
|
411
395
|
|
|
412
|
-
if (lres === null || typeof
|
|
396
|
+
if (lres === null || typeof lres === 'undefined') {
|
|
413
397
|
lres = {
|
|
414
398
|
id: 0,
|
|
415
|
-
success: false
|
|
399
|
+
success: false,
|
|
416
400
|
};
|
|
417
401
|
}
|
|
418
402
|
|
|
419
|
-
if (typeof
|
|
403
|
+
if (typeof usercallback === 'function') {
|
|
420
404
|
usercallback(lres);
|
|
421
|
-
}
|
|
422
|
-
else {
|
|
405
|
+
} else {
|
|
423
406
|
console.log(lres);
|
|
424
407
|
}
|
|
425
408
|
};
|
|
426
409
|
})(callback);
|
|
427
410
|
|
|
428
|
-
request.onerror = (function(usercallback) {
|
|
429
|
-
return function(e) {
|
|
430
|
-
if (typeof
|
|
411
|
+
request.onerror = (function (usercallback) {
|
|
412
|
+
return function (e) {
|
|
413
|
+
if (typeof usercallback === 'function') {
|
|
431
414
|
usercallback({ id: 0, success: false });
|
|
432
|
-
}
|
|
433
|
-
else {
|
|
415
|
+
} else {
|
|
434
416
|
throw e;
|
|
435
417
|
}
|
|
436
418
|
};
|
|
@@ -442,12 +424,11 @@
|
|
|
442
424
|
var store = transaction.objectStore('LokiAKV');
|
|
443
425
|
var request = store.get(id);
|
|
444
426
|
|
|
445
|
-
request.onsuccess = (function(data, usercallback){
|
|
446
|
-
return function(e) {
|
|
447
|
-
if (typeof
|
|
427
|
+
request.onsuccess = (function (data, usercallback) {
|
|
428
|
+
return function (e) {
|
|
429
|
+
if (typeof usercallback === 'function') {
|
|
448
430
|
usercallback(e.target.result, data);
|
|
449
|
-
}
|
|
450
|
-
else {
|
|
431
|
+
} else {
|
|
451
432
|
console.log(e.target.result);
|
|
452
433
|
}
|
|
453
434
|
};
|
|
@@ -458,56 +439,52 @@
|
|
|
458
439
|
var transaction = this.db.transaction(['LokiAKV'], 'readwrite');
|
|
459
440
|
var store = transaction.objectStore('LokiAKV');
|
|
460
441
|
var index = store.index('appkey');
|
|
461
|
-
var appkey = app +
|
|
442
|
+
var appkey = app + ',' + key;
|
|
462
443
|
var request = index.get(appkey);
|
|
463
444
|
|
|
464
445
|
// first try to retrieve an existing object by that key
|
|
465
446
|
// need to do this because to update an object you need to have id in object, otherwise it will append id with new autocounter and clash the unique index appkey
|
|
466
|
-
request.onsuccess = function(e) {
|
|
447
|
+
request.onsuccess = function (e) {
|
|
467
448
|
var res = e.target.result;
|
|
468
449
|
|
|
469
450
|
if (res === null || res === undefined) {
|
|
470
451
|
res = {
|
|
471
|
-
app:app,
|
|
472
|
-
key:key,
|
|
452
|
+
app: app,
|
|
453
|
+
key: key,
|
|
473
454
|
appkey: app + ',' + key,
|
|
474
|
-
val:val
|
|
455
|
+
val: val,
|
|
475
456
|
};
|
|
476
|
-
}
|
|
477
|
-
else {
|
|
457
|
+
} else {
|
|
478
458
|
res.val = val;
|
|
479
459
|
}
|
|
480
460
|
|
|
481
461
|
var requestPut = store.put(res);
|
|
482
462
|
|
|
483
|
-
requestPut.onerror = (function(usercallback) {
|
|
484
|
-
return function(e) {
|
|
485
|
-
if (typeof
|
|
486
|
-
usercallback({ success: false });
|
|
487
|
-
}
|
|
488
|
-
else {
|
|
463
|
+
requestPut.onerror = (function (usercallback) {
|
|
464
|
+
return function (e) {
|
|
465
|
+
if (typeof usercallback === 'function') {
|
|
466
|
+
usercallback({ success: false, error: request.error });
|
|
467
|
+
} else {
|
|
489
468
|
console.error('LokiCatalog.setAppKey (set) onerror');
|
|
490
469
|
console.error(request.error);
|
|
491
470
|
}
|
|
492
471
|
};
|
|
493
|
-
|
|
494
472
|
})(callback);
|
|
495
473
|
|
|
496
|
-
requestPut.onsuccess = (function(usercallback) {
|
|
497
|
-
return function(e) {
|
|
498
|
-
if (typeof
|
|
474
|
+
requestPut.onsuccess = (function (usercallback) {
|
|
475
|
+
return function (e) {
|
|
476
|
+
if (typeof usercallback === 'function') {
|
|
499
477
|
usercallback({ success: true });
|
|
500
478
|
}
|
|
501
479
|
};
|
|
502
480
|
})(callback);
|
|
503
481
|
};
|
|
504
482
|
|
|
505
|
-
request.onerror = (function(usercallback) {
|
|
506
|
-
return function(e) {
|
|
507
|
-
if (typeof
|
|
508
|
-
usercallback({ success: false });
|
|
509
|
-
}
|
|
510
|
-
else {
|
|
483
|
+
request.onerror = (function (usercallback) {
|
|
484
|
+
return function (e) {
|
|
485
|
+
if (typeof usercallback === 'function') {
|
|
486
|
+
usercallback({ success: false, error: request.error });
|
|
487
|
+
} else {
|
|
511
488
|
console.error('LokiCatalog.setAppKey (get) onerror');
|
|
512
489
|
console.error(request.error);
|
|
513
490
|
}
|
|
@@ -520,18 +497,17 @@
|
|
|
520
497
|
var store = transaction.objectStore('LokiAKV');
|
|
521
498
|
var request = store.delete(id);
|
|
522
499
|
|
|
523
|
-
request.onsuccess = (function(usercallback) {
|
|
524
|
-
return function(evt) {
|
|
525
|
-
if (typeof
|
|
500
|
+
request.onsuccess = (function (usercallback) {
|
|
501
|
+
return function (evt) {
|
|
502
|
+
if (typeof usercallback === 'function') usercallback({ success: true });
|
|
526
503
|
};
|
|
527
504
|
})(callback);
|
|
528
505
|
|
|
529
|
-
request.onerror = (function(usercallback) {
|
|
530
|
-
return function(evt) {
|
|
531
|
-
if (typeof
|
|
506
|
+
request.onerror = (function (usercallback) {
|
|
507
|
+
return function (evt) {
|
|
508
|
+
if (typeof usercallback === 'function') {
|
|
532
509
|
usercallback({ success: false });
|
|
533
|
-
}
|
|
534
|
-
else {
|
|
510
|
+
} else {
|
|
535
511
|
console.error('LokiCatalog.deleteAppKey raised onerror');
|
|
536
512
|
console.error(request.error);
|
|
537
513
|
}
|
|
@@ -539,7 +515,7 @@
|
|
|
539
515
|
})(callback);
|
|
540
516
|
};
|
|
541
517
|
|
|
542
|
-
LokiCatalog.prototype.getAppKeys = function(app, callback) {
|
|
518
|
+
LokiCatalog.prototype.getAppKeys = function (app, callback) {
|
|
543
519
|
var transaction = this.db.transaction(['LokiAKV'], 'readonly');
|
|
544
520
|
var store = transaction.objectStore('LokiAKV');
|
|
545
521
|
var index = store.index('app');
|
|
@@ -554,8 +530,8 @@
|
|
|
554
530
|
// this.data[] when done (similar to service)
|
|
555
531
|
var localdata = [];
|
|
556
532
|
|
|
557
|
-
cursor.onsuccess = (function(data, callback) {
|
|
558
|
-
return function(e) {
|
|
533
|
+
cursor.onsuccess = (function (data, callback) {
|
|
534
|
+
return function (e) {
|
|
559
535
|
var cursor = e.target.result;
|
|
560
536
|
if (cursor) {
|
|
561
537
|
var currObject = cursor.value;
|
|
@@ -563,30 +539,26 @@
|
|
|
563
539
|
data.push(currObject);
|
|
564
540
|
|
|
565
541
|
cursor.continue();
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
if (typeof(callback) === 'function') {
|
|
542
|
+
} else {
|
|
543
|
+
if (typeof callback === 'function') {
|
|
569
544
|
callback(data);
|
|
570
|
-
}
|
|
571
|
-
else {
|
|
545
|
+
} else {
|
|
572
546
|
console.log(data);
|
|
573
547
|
}
|
|
574
548
|
}
|
|
575
549
|
};
|
|
576
550
|
})(localdata, callback);
|
|
577
551
|
|
|
578
|
-
cursor.onerror = (function(usercallback) {
|
|
579
|
-
return function(e) {
|
|
580
|
-
if (typeof
|
|
552
|
+
cursor.onerror = (function (usercallback) {
|
|
553
|
+
return function (e) {
|
|
554
|
+
if (typeof usercallback === 'function') {
|
|
581
555
|
usercallback(null);
|
|
582
|
-
}
|
|
583
|
-
else {
|
|
556
|
+
} else {
|
|
584
557
|
console.error('LokiCatalog.getAppKeys raised onerror');
|
|
585
558
|
console.error(e);
|
|
586
559
|
}
|
|
587
560
|
};
|
|
588
561
|
})(callback);
|
|
589
|
-
|
|
590
562
|
};
|
|
591
563
|
|
|
592
564
|
// Hide 'cursoring' and return array of { id: id, key: key }
|
|
@@ -597,8 +569,8 @@
|
|
|
597
569
|
|
|
598
570
|
var localdata = [];
|
|
599
571
|
|
|
600
|
-
cursor.onsuccess = (function(data, callback) {
|
|
601
|
-
return function(e) {
|
|
572
|
+
cursor.onsuccess = (function (data, callback) {
|
|
573
|
+
return function (e) {
|
|
602
574
|
var cursor = e.target.result;
|
|
603
575
|
if (cursor) {
|
|
604
576
|
var currObject = cursor.value;
|
|
@@ -606,27 +578,23 @@
|
|
|
606
578
|
data.push(currObject);
|
|
607
579
|
|
|
608
580
|
cursor.continue();
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
if (typeof(callback) === 'function') {
|
|
581
|
+
} else {
|
|
582
|
+
if (typeof callback === 'function') {
|
|
612
583
|
callback(data);
|
|
613
|
-
}
|
|
614
|
-
else {
|
|
584
|
+
} else {
|
|
615
585
|
console.log(data);
|
|
616
586
|
}
|
|
617
587
|
}
|
|
618
588
|
};
|
|
619
589
|
})(localdata, callback);
|
|
620
590
|
|
|
621
|
-
cursor.onerror = (function(usercallback) {
|
|
622
|
-
return function(e) {
|
|
623
|
-
if (typeof
|
|
591
|
+
cursor.onerror = (function (usercallback) {
|
|
592
|
+
return function (e) {
|
|
593
|
+
if (typeof usercallback === 'function') usercallback(null);
|
|
624
594
|
};
|
|
625
595
|
})(callback);
|
|
626
|
-
|
|
627
596
|
};
|
|
628
597
|
|
|
629
598
|
return LokiIndexedAdapter;
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
}));
|
|
599
|
+
})();
|
|
600
|
+
});
|