@herdwatch/lokijs 1.5.8-dev.7 → 1.5.8-dev.9

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/index.d.ts CHANGED
@@ -203,6 +203,17 @@ declare class Loki extends LokiEventEmitter {
203
203
  databaseVersion: number;
204
204
  engineVersion: number;
205
205
  autosave: boolean;
206
+ /**
207
+ * A flag that determines whether the autosave functionality should be ignored.
208
+ * If set to true, the autosave operation will be bypassed.
209
+ */
210
+ ignoreAutosave: boolean;
211
+ /**
212
+ * A boolean flag indicating whether the database should be serialized
213
+ * before saving. When set to true, the database content is converted
214
+ * to a serialized format to ensure data integrity during storage.
215
+ */
216
+ serializeDatabaseBeforeSave: boolean;
206
217
  autosaveInterval: number;
207
218
  autosaveHandle: number | null;
208
219
  persistenceAdapter: LokiPersistenceAdapter | null | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herdwatch/lokijs",
3
- "version": "1.5.8-dev.7",
3
+ "version": "1.5.8-dev.9",
4
4
  "description": "Fast document oriented javascript in-memory database",
5
5
  "homepage": "http://lokijs.org",
6
6
  "types": "index.d.ts",
@@ -147,6 +147,9 @@
147
147
  * @memberof LokiIndexedAdapter
148
148
  */
149
149
  LokiIndexedAdapter.prototype.saveDatabase = function (dbname, dbstring, callback) {
150
+ if(localStorage.getItem('debug-lokijs')){
151
+ console.time(`saveDatabase_${dbname}`);
152
+ }
150
153
  var appName = this.app;
151
154
  var adapter = this;
152
155
 
@@ -156,6 +159,12 @@
156
159
  function saveCallback(result) {
157
160
  if (result && result.success === true) {
158
161
  callback(null);
162
+ if (localStorage.getItem('debug-lokijs')) {
163
+ console.timeEnd(`saveDatabase_${dbname}`);
164
+ const bytes = dbstring.length * 2;
165
+ const kb = bytes / 1024;
166
+ console.log(kb.toFixed(2) + ' KB');
167
+ }
159
168
  } else {
160
169
  console.error('saveDatabase->saveCallback, Error saving database', result);
161
170
  callback(result);
package/src/lokijs.js CHANGED
@@ -868,8 +868,10 @@
868
868
  // pass autosave: true, autosaveInterval: 6000 in options to set 6 second autosave
869
869
  this.autosave = false;
870
870
  this.autosaveInterval = 5000;
871
+ this.ignoreAutosave = false;
871
872
  this.autosaveHandle = null;
872
873
  this.throttledSaves = true;
874
+ this.serializeDatabaseBeforeSave = true;
873
875
 
874
876
  this.options = {};
875
877
 
@@ -2674,7 +2676,7 @@
2674
2676
  // or autosave won't work if an update occurs between here and the callback
2675
2677
  // TODO: This should be stored and rolled back in case of DB save failure
2676
2678
  // TODO: Reference mode adapter should have the same behavior
2677
- if (this.persistenceAdapter.mode !== "reference") {
2679
+ if (this.serializeDatabaseBeforeSave && this.persistenceAdapter.mode !== "reference") {
2678
2680
  this.autosaveClearFlags();
2679
2681
  }
2680
2682
 
@@ -2707,6 +2709,14 @@
2707
2709
  self.autosaveClearFlags();
2708
2710
  cFun(err);
2709
2711
  });
2712
+ } else if (this.serializeDatabaseBeforeSave === false){
2713
+ if(localStorage.getItem('debug-lokijs')){
2714
+ console.log("Performing full database save...");
2715
+ }
2716
+ this.persistenceAdapter.saveDatabase(this.filename, this, function saveDatabasecallback(err) {
2717
+ self.autosaveClearFlags();
2718
+ cFun(err);
2719
+ });
2710
2720
  }
2711
2721
  // otherwise just pass the serialized database to adapter
2712
2722
  else {
@@ -2852,7 +2862,7 @@
2852
2862
  // so next step will be to implement collection level dirty flags set on insert/update/remove
2853
2863
  // along with loki level isdirty() function which iterates all collections to see if any are dirty
2854
2864
 
2855
- if (self.autosaveDirty()) {
2865
+ if (self.autosaveDirty() && !self.ignoreAutosave) {
2856
2866
  self.saveDatabase(callback);
2857
2867
  }
2858
2868
  }, delay);