@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.
@@ -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{callback(new Error("Error saving database"))}if(adapter.options.closeAfterSave){adapter.closeDatabase()}}if(this.catalog===null||this.catalog.db===null){this.catalog=new LokiCatalog(function(cat){adapter.saveDatabase(dbname,dbstring,saveCallback)});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})}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})}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}()});
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}()});
@@ -18,6 +18,7 @@ module.exports = function (config) {
18
18
  files: [
19
19
  'build/lokijs.min.js',
20
20
  'src/incremental-indexeddb-adapter.js',
21
+ 'src/loki-indexed-adapter.js',
21
22
  'spec/helpers/assert-helpers.js',
22
23
  'spec/generic/*.js',
23
24
  'spec/browser/*.js'
package/karma.conf.js CHANGED
@@ -18,6 +18,7 @@ module.exports = function (config) {
18
18
  files: [
19
19
  'src/lokijs.js',
20
20
  'src/incremental-indexeddb-adapter.js',
21
+ 'src/loki-indexed-adapter.js',
21
22
  'spec/helpers/assert-helpers.js',
22
23
  'spec/generic/*.js',
23
24
  'spec/browser/*.js'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herdwatch/lokijs",
3
- "version": "1.5.8-dev.3",
3
+ "version": "1.5.8-dev.5",
4
4
  "description": "Fast document oriented javascript in-memory database",
5
5
  "homepage": "http://lokijs.org",
6
6
  "types": "index.d.ts",
@@ -9,19 +9,18 @@
9
9
  */
10
10
 
11
11
  (function (root, factory) {
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() {
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 (appname) !== 'undefined')
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 (callback) === 'function') {
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
- else {
161
- callback(new Error("Error saving database"));
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, saveCallback);
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 (callback) === 'function') {
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 (callback) === 'function') {
280
+ if (typeof callback === 'function') {
288
281
  callback(names);
289
- }
290
- else {
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({ "app": obj.app, "key": obj.key, "size": size });
329
+ entries.push({ app: obj.app, key: obj.key, size: size });
343
330
  }
344
331
 
345
- if (typeof (callback) === 'function') {
332
+ if (typeof callback === 'function') {
346
333
  callback(entries);
347
- }
348
- else {
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 + "," + key;
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(lres) === 'undefined') {
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(usercallback) === 'function') {
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(usercallback) === 'function') {
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(usercallback) === 'function') {
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 + "," + key;
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(usercallback) === 'function') {
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(usercallback) === 'function') {
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(usercallback) === 'function') {
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(usercallback) === 'function') usercallback({ success: true });
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(usercallback) === 'function') {
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
- else {
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(usercallback) === 'function') {
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
- else {
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(usercallback) === 'function') usercallback(null);
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
+ });