@live-change/db-web 0.6.1 → 0.6.2

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/lib/Server.js CHANGED
@@ -71,18 +71,25 @@ class Server {
71
71
  })
72
72
  }
73
73
  for(let backend of config.backends || []) {
74
+ if(typeof backend == 'string') {
75
+ backend = { name: backend }
76
+ }
74
77
  this.backends[backend.name] = createBackend(backend)
78
+ if(!this.backends.default) {
79
+ this.backends.default = this.backends[backend.name]
80
+ }
75
81
  }
76
82
  if(!this.backends.default) {
77
83
  throw new Error("No default backend configured")
78
84
  }
79
85
  if(!this.backends.memory) {
80
86
  this.backends.memory = createBackend({
81
- name: "mem"
87
+ name: "memory"
82
88
  })
83
89
  }
84
90
 
85
- this.metadataSavePromise = null
91
+ this.metadataDatabase = this.backends.default.createDb('_db_metadata', {})
92
+ this.metadataStore = this.backends.default.createStore(this.metadataDatabase, 'metadata', {})
86
93
  }
87
94
  createDao(session) {
88
95
  return new ReactiveDao(session, {
@@ -124,8 +131,7 @@ class Server {
124
131
  if(initOptions.metadata) {
125
132
  this.metadata = initOptions.metadata
126
133
  } else {
127
- const jsonStr = localStorage[`${this.config.dbPrefix || ''}_lcdb`]
128
- this.metadata = jsonStr && JSON.parse(jsonStr)
134
+ this.metadata = await this.metadataStore.objectGet('metadata')
129
135
  }
130
136
  if(!this.metadata) {
131
137
  this.metadata = {
@@ -173,7 +179,7 @@ class Server {
173
179
  }
174
180
 
175
181
  async saveMetadata() {
176
- localStorage[`${this.config.dbPrefix || ''}_lcdb`] = JSON.stringify(this.metadata)
182
+ await this.metadataStore.put({ ...this.metadata, id: 'metadata' })
177
183
  }
178
184
 
179
185
  async close() {
package/lib/backend.js CHANGED
@@ -1,5 +1,6 @@
1
1
  function createBackend(config) {
2
- if(config.backend == 'mem') {
2
+ console.log("CREATE BACKEND", config)
3
+ if(config.name == 'mem' || config.name == 'memory') {
3
4
  return {
4
5
  Store: require('@live-change/db-store-rbtree'),
5
6
  createDb(path, options) {
@@ -14,7 +15,7 @@ function createBackend(config) {
14
15
  db.close()
15
16
  },
16
17
  createStore(db, name, options) {
17
- return new this.Store()
18
+ return new this.Store(options)
18
19
  },
19
20
  closeStore(store) {
20
21
  },
@@ -22,7 +23,7 @@ function createBackend(config) {
22
23
  await store.clear()
23
24
  }
24
25
  }
25
- } if(config.backend == 'indexeddb') {
26
+ } if(config.name == 'indexeddb') {
26
27
  return {
27
28
  Store: require('@live-change/db-store-indexeddb'),
28
29
  createDb(path, options) {
@@ -46,7 +47,7 @@ function createBackend(config) {
46
47
  await store.clear()
47
48
  }
48
49
  }
49
- } if(config.backend == 'local') {
50
+ } if(config.name == 'local') {
50
51
  return {
51
52
  Store: require('@live-change/db-store-localstorage'),
52
53
  createDb(path, options) {
@@ -70,7 +71,7 @@ function createBackend(config) {
70
71
  await store.clear()
71
72
  }
72
73
  }
73
- } if(config.backend == 'session') {
74
+ } if(config.name == 'session') {
74
75
  return {
75
76
  Store: require('@live-change/db-store-localstorage'),
76
77
  createDb(path, options) {
@@ -95,7 +96,7 @@ function createBackend(config) {
95
96
  }
96
97
  }
97
98
  } else {
98
- throw new Error("Unknown backend " + config.backend)
99
+ throw new Error("Unknown backend " + config.name)
99
100
  }
100
101
  }
101
102
 
package/lib/dbDao.js CHANGED
@@ -71,11 +71,25 @@ function localRequests(server, scriptContext) {
71
71
  if(dbName == 'system') throw new Error("system database is not writable")
72
72
  const db = server.databases.get(dbName)
73
73
  if(!db) throw new Error('databaseNotFound')
74
- const table = db.table(tableName)
75
- if(!table) throw new Error("tableNotFound")
76
- const uid = table.configObservable.value.uid
77
- await db.deleteTable(tableName)
78
- await server.databases.get('system').table(dbName+'_tables').delete(uid)
74
+ if(tableName[tableName.length - 1] == "*") {
75
+ const list = db.tablesListObservable.list.slice()
76
+ for(const foundTableName of list) {
77
+ const base = tableName.slice(0, -1)
78
+ if(foundTableName.slice(0, base.length) != base) continue
79
+ const table = db.table(foundTableName)
80
+ if(!table) throw new Error("tableNotFound")
81
+ const uid = table.configObservable.value.uid
82
+ await db.deleteTable(foundTableName)
83
+ await server.databases.get('system').table(dbName + '_tables').delete(uid)
84
+ }
85
+ } else {
86
+ const table = db.table(tableName)
87
+ if(!table) throw new Error("tableNotFound")
88
+ const uid = table.configObservable.value.uid
89
+ await db.deleteTable(tableName)
90
+ await server.databases.get('system').table(dbName + '_tables').delete(uid)
91
+ }
92
+ return 'ok'
79
93
  },
80
94
  renameTable: async (dbName, tableName, newTableName) => {
81
95
  if(dbName == 'system') throw new Error("system database is not writable")
@@ -105,11 +119,24 @@ function localRequests(server, scriptContext) {
105
119
  if(dbName == 'system') throw new Error("system database is not writable")
106
120
  const db = server.databases.get(dbName)
107
121
  if(!db) throw new Error('databaseNotFound')
108
- const index = await db.index(indexName)
109
- if(!index) throw new Error("indexNotFound")
110
- const uid = index.configObservable.value.uid
111
- await db.deleteIndex(indexName)
112
- await server.databases.get('system').table(dbName+'_indexes').delete(uid)
122
+ if(indexName[indexName.length - 1] == "*") {
123
+ const base = indexName.slice(0, -1)
124
+ const list = db.indexesListObservable.list.slice()
125
+ for(const foundIndexName of list) {
126
+ if(foundIndexName.slice(0, base.length) != base) continue
127
+ const index = await db.index(foundIndexName)
128
+ if(!index) throw new Error("indexNotFound")
129
+ const uid = index.configObservable.value.uid
130
+ await db.deleteIndex(foundIndexName)
131
+ await server.databases.get('system').table(dbName + '_indexes').delete(uid)
132
+ }
133
+ } else {
134
+ const index = await db.index(indexName)
135
+ if(!index) throw new Error("indexNotFound")
136
+ const uid = index.configObservable.value.uid
137
+ await db.deleteIndex(indexName)
138
+ await server.databases.get('system').table(dbName + '_indexes').delete(uid)
139
+ }
113
140
  return 'ok'
114
141
  },
115
142
  renameIndex: async (dbName, indexName, newIndexName) => {
@@ -191,6 +218,14 @@ function localRequests(server, scriptContext) {
191
218
  if(!log) throw new Error("logNotFound")
192
219
  return log.put(object)
193
220
  },
221
+ putOldLog: (dbName, logName, object) => {
222
+ if(dbName == 'system') throw new Error("system database is not writable")
223
+ const db = server.databases.get(dbName)
224
+ if(!db) throw new Error('databaseNotFound')
225
+ const log = db.log(logName)
226
+ if(!log) throw new Error("logNotFound")
227
+ return log.putOld(object)
228
+ },
194
229
  query: (dbName, code, params) => {
195
230
  if(dbName == 'system') throw new Error("system database is not writable")
196
231
  if(!dbName) throw new Error("databaseNameRequired")
@@ -202,6 +237,133 @@ function localRequests(server, scriptContext) {
202
237
  }
203
238
  }
204
239
 
240
+ function remoteRequests(server) {
241
+ return {
242
+ createDatabase: async (dbName, options = {}) => {
243
+ if(server.metadata.databases[dbName]) throw new Error("databaseAlreadyExists")
244
+ return server.masterDao.request(['database', 'createDatabase'], dbName, options)
245
+ },
246
+ deleteDatabase: async (dbName) => {
247
+ if(!server.metadata.databases[dbName]) throw new Error("databaseNotFound")
248
+ return server.masterDao.request(['database', 'deleteDatabase'], dbName, options)
249
+ },
250
+ clearDatabaseOpLogs: async (dbName, lastTimestamp, limit) => {
251
+ const db = server.databases.get(dbName)
252
+ if(!db) throw new Error('databaseNotFound')
253
+ if(typeof lastTimestamp == 'string') lastTimestamp = new Date(lastTimestamp)
254
+ return server.masterDao.request(['database', 'clearDatabaseOpLogs'], dbName, lastTimestamp, limit)
255
+ },
256
+ clearTableOpLog: async (dbName, tableName, lastTimestamp, limit) => {
257
+ const db = server.databases.get(dbName)
258
+ if(!db) throw new Error('databaseNotFound')
259
+ const table = db.table(tableName)
260
+ if(!table) throw new Error("tableNotFound")
261
+ if(typeof lastTimestamp == 'string') lastTimestamp = new Date(lastTimestamp)
262
+ return server.masterDao.request(['database', 'clearTableOpLog'], dbName, tableName, lastTimestamp, limit)
263
+ },
264
+ clearIndexOpLog: async (dbName, indexName, lastTimestamp, limit) => {
265
+ const db = server.databases.get(dbName)
266
+ if(!db) throw new Error('databaseNotFound')
267
+ const index = db.table(indexName)
268
+ if(!index) throw new Error("indexNotFound")
269
+ if(typeof lastTimestamp == 'string') lastTimestamp = new Date(lastTimestamp)
270
+ return server.masterDao.request(['database', 'clearIndexOpLog'], dbName, indexName, lastTimestamp, limit)
271
+ },
272
+ createTable: async (dbName, tableName, options = {}) => {
273
+ const db = server.databases.get(dbName)
274
+ if(!db) throw new Error('databaseNotFound')
275
+ return server.masterDao.request(['database', 'createTable'], dbName, tableName, options)
276
+ },
277
+ deleteTable: async (dbName, tableName, options) => {
278
+ const db = server.databases.get(dbName)
279
+ if(!db) throw new Error('databaseNotFound')
280
+ return server.masterDao.request(['database', 'deleteTable'], dbName, tableName, options)
281
+ },
282
+ renameTable: async (dbName, tableName, newTableName) => {
283
+ const db = server.databases.get(dbName)
284
+ if(!db) throw new Error('databaseNotFound')
285
+ const table = db.table(tableName)
286
+ if(!table) throw new Error("tableNotFound")
287
+ return server.masterDao.request(['database', 'renameTable'], dbName, tableName, newTableName)
288
+ },
289
+ createIndex: async (dbName, indexName, code, params, options = {}) => {
290
+ const db = server.databases.get(dbName)
291
+ if(!db) throw new Error('databaseNotFound')
292
+ return server.masterDao.request(['database', 'createIndex'], dbName, indexName, code, params, options )
293
+ },
294
+ deleteIndex: async (dbName, indexName, options) => {
295
+ const db = server.databases.get(dbName)
296
+ if(!db) throw new Error('databaseNotFound')
297
+ return server.masterDao.request(['database', 'deleteIndex'], dbName, indexName, options )
298
+ },
299
+ renameIndex: async (dbName, indexName, newIndexName) => {
300
+ const db = server.databases.get(dbName)
301
+ if(!db) throw new Error('databaseNotFound')
302
+ const index = db.index(indexName)
303
+ if(!index) throw new Error("indexNotFound")
304
+ return server.masterDao.request(['database', 'renameIndex'], dbName, indexName, newIndexName )
305
+ },
306
+ createLog: async (dbName, logName, options = {}) => {
307
+ const db = server.databases.get(dbName)
308
+ if(!db) throw new Error('databaseNotFound')
309
+ return server.masterDao.request(['database', 'createLog'], dbName, logName, options )
310
+ },
311
+ deleteLog: async (dbName, logName, options) => {
312
+ const db = server.databases.get(dbName)
313
+ if(!db) throw new Error('databaseNotFound')
314
+ await db.deleteLog(logName)
315
+ return server.masterDao.request(['database', 'deleteLog'], dbName, logName, options )
316
+ },
317
+ renameLog: async (dbName, logName, newLogName) => {
318
+ const db = server.databases.get(dbName)
319
+ if(!db) throw new Error('databaseNotFound')
320
+ const log = db.log(logName)
321
+ if(!log) throw new Error("logNotFound")
322
+ return server.masterDao.request(['database', 'renameLog'], dbName, logName, newLogName )
323
+ },
324
+ put: (dbName, tableName, object) => {
325
+ const db = server.databases.get(dbName)
326
+ if(!db) throw new Error('databaseNotFound')
327
+ const table = db.table(tableName)
328
+ if(!table) throw new Error("tableNotFound")
329
+ return server.masterDao.request(['database', 'put'], dbName, tableName, object )
330
+ },
331
+ delete: (dbName, tableName, id) => {
332
+ const db = server.databases.get(dbName)
333
+ if(!db) throw new Error('databaseNotFound')
334
+ const table = db.table(tableName)
335
+ if(!table) throw new Error("tableNotFound")
336
+ return server.masterDao.request(['database', 'delete'], dbName, tableName, id )
337
+ },
338
+ update: (dbName, tableName, id, operations, options) => {
339
+ const db = server.databases.get(dbName)
340
+ if(!db) throw new Error('databaseNotFound')
341
+ const table = db.table(tableName)
342
+ if(!table) throw new Error("tableNotFound")
343
+ return server.masterDao.request(['database', 'update'], dbName, tableName, id, operations, options )
344
+ },
345
+ putLog: (dbName, logName, object) => {
346
+ const db = server.databases.get(dbName)
347
+ if(!db) throw new Error('databaseNotFound')
348
+ const log = db.log(logName)
349
+ if(!log) throw new Error("logNotFound")
350
+ return server.masterDao.request(['database', 'putLog'], dbName, logName, object )
351
+ },
352
+ putOldLog: (dbName, logName, object) => {
353
+ const db = server.databases.get(dbName)
354
+ if(!db) throw new Error('databaseNotFound')
355
+ const log = db.log(logName)
356
+ if(!log) throw new Error("logNotFound")
357
+ return server.masterDao.request(['database', 'putOldLog'], dbName, logName, object )
358
+ },
359
+ query: (dbName, code, params) => {
360
+ if(!dbName) throw new Error("databaseNameRequired")
361
+ const db = server.databases.get(dbName)
362
+ if(!db) throw new Error('databaseNotFound')
363
+ return server.masterDao.request(['database', 'query'], dbName, code, params )
364
+ }
365
+ }
366
+ }
205
367
 
206
368
  function localReads(server, scriptContext) {
207
369
  return {
@@ -350,33 +512,33 @@ function localReads(server, scriptContext) {
350
512
  }
351
513
  },
352
514
  indexConfig: {
353
- observable: (dbName, indexName, id) => {
515
+ observable: async (dbName, indexName, id) => {
354
516
  const db = server.databases.get(dbName)
355
517
  if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
356
- const index = db.index(indexName)
518
+ const index = await db.index(indexName)
357
519
  if(!index) return new ReactiveDao.ObservableError('indexNotFound')
358
520
  return index.configObservable
359
521
  },
360
522
  get: async (dbName, indexName, id) =>{
361
523
  const db = server.databases.get(dbName)
362
524
  if(!db) throw new Error('databaseNotFound')
363
- const index = db.index(indexName)
525
+ const index = await db.index(indexName)
364
526
  if(!index) throw new Error("indexNotFound")
365
527
  return index.configObservable.value
366
528
  }
367
529
  },
368
530
  indexCode: {
369
- observable: (dbName, indexName, id) => {
531
+ observable: async (dbName, indexName, id) => {
370
532
  const db = server.databases.get(dbName)
371
533
  if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
372
- const index = db.index(indexName)
534
+ const index = await db.index(indexName)
373
535
  if(!index) return new ReactiveDao.ObservableError('indexNotFound')
374
536
  return index.codeObservable
375
537
  },
376
538
  get: async (dbName, indexName, id) =>{
377
539
  const db = server.databases.get(dbName)
378
540
  if(!db) throw new Error('databaseNotFound')
379
- const index = db.index(indexName)
541
+ const index = await db.index(indexName)
380
542
  if(!index) throw new Error("indexNotFound")
381
543
  return index.codeObservable.value
382
544
  }
@@ -431,6 +593,22 @@ function localReads(server, scriptContext) {
431
593
  return table.rangeGet(range)
432
594
  }
433
595
  },
596
+ tableCount: {
597
+ observable: (dbName, tableName, range) => {
598
+ const db = server.databases.get(dbName)
599
+ if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
600
+ const table = db.table(tableName)
601
+ if(!table) return new ReactiveDao.ObservableError('tableNotFound')
602
+ return table.countObservable(range)
603
+ },
604
+ get: async (dbName, tableName, range) => {
605
+ const db = server.databases.get(dbName)
606
+ if(!db) throw new Error('databaseNotFound')
607
+ const table = db.table(tableName)
608
+ if(!table) throw new Error("tableNotFound")
609
+ return table.countGet(range)
610
+ }
611
+ },
434
612
  tableOpLogObject: {
435
613
  observable: (dbName, tableName, id) => {
436
614
  const db = server.databases.get(dbName)
@@ -463,6 +641,22 @@ function localReads(server, scriptContext) {
463
641
  return table.opLog.rangeGet(range)
464
642
  }
465
643
  },
644
+ tableOpLogCount: {
645
+ observable: (dbName, tableName, range) => {
646
+ const db = server.databases.get(dbName)
647
+ if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
648
+ const table = db.table(tableName)
649
+ if(!table) return new ReactiveDao.ObservableError('tableNotFound')
650
+ return table.opLog.countObservable(range)
651
+ },
652
+ get: async (dbName, tableName, range) => {
653
+ const db = server.databases.get(dbName)
654
+ if(!db) throw new Error('databaseNotFound')
655
+ const table = db.table(tableName)
656
+ if(!table) throw new Error("tableNotFound")
657
+ return table.opLog.countGet(range)
658
+ }
659
+ },
466
660
  indexObject: {
467
661
  observable: async (dbName, indexName, id) => {
468
662
  if(!id) return new ReactiveDao.ObservableError("id is required")
@@ -497,6 +691,22 @@ function localReads(server, scriptContext) {
497
691
  return index.rangeGet(range)
498
692
  }
499
693
  },
694
+ indexCount: {
695
+ observable: async (dbName, indexName, range) => {
696
+ const db = server.databases.get(dbName)
697
+ if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
698
+ const index = await db.index(indexName)
699
+ if(!index) return new ReactiveDao.ObservableError('indexNotFound')
700
+ return index.countObservable(range)
701
+ },
702
+ get: async (dbName, indexName, range) => {
703
+ const db = server.databases.get(dbName)
704
+ if(!db) throw new Error('databaseNotFound')
705
+ const index = await db.index(indexName)
706
+ if(!index) throw new Error("indexNotFound")
707
+ return index.countGet(range)
708
+ }
709
+ },
500
710
  indexOpLogObject: {
501
711
  observable: (dbName, indexName, id) => {
502
712
  const db = server.databases.get(dbName)
@@ -531,6 +741,24 @@ function localReads(server, scriptContext) {
531
741
  return index.opLog.rangeGet(range)
532
742
  }
533
743
  },
744
+ indexOpLogCount: {
745
+ observable: (dbName, indexName, range) => {
746
+ if(!id) return new ReactiveDao.ObservableError("id is required")
747
+ const db = server.databases.get(dbName)
748
+ if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
749
+ const index = db.index(indexName)
750
+ if(!index) return new ReactiveDao.ObservableError('indexNotFound')
751
+ return index.opLog.countObservable(range)
752
+ },
753
+ get: async (dbName, indexName, range) => {
754
+ if(!id) throw new Error("id is required")
755
+ const db = server.databases.get(dbName)
756
+ if(!db) throw new Error('databaseNotFound')
757
+ const index = db.index(indexName)
758
+ if(!index) throw new Error("indexNotFound")
759
+ return index.opLog.countGet(range)
760
+ }
761
+ },
534
762
  logObject: {
535
763
  observable: (dbName, logName, id) => {
536
764
 
@@ -564,42 +792,55 @@ function localReads(server, scriptContext) {
564
792
  return log.rangeGet(range)
565
793
  }
566
794
  },
795
+ logCount: {
796
+ observable: (dbName, logName, range) => {
797
+ const db = server.databases.get(dbName)
798
+ if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
799
+ const log = db.log(logName)
800
+ if(!log) return new ReactiveDao.ObservableError('logNotFound')
801
+ return log.countObservable(range)
802
+ },
803
+ get: async (dbName, logName, range) => {
804
+ const db = server.databases.get(dbName)
805
+ if(!db) throw new Error('databaseNotFound')
806
+ const log = db.log(logName)
807
+ if(!log) throw new Error("logNotFound")
808
+ return log.countGet(range)
809
+ }
810
+ },
567
811
  query: {
568
- observable: (dbName, code, params = {}) => {
812
+ observable: (dbName, code, params = {}, sourceName = 'query/query.js') => {
569
813
  if(!dbName) return new ReactiveDao.ObservableError("databaseNameRequired")
570
814
  const db = server.databases.get(dbName)
571
815
  if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
572
- const queryFunction = scriptContext.run(code, 'query')
573
-
816
+ const queryFunction = scriptContext.run(code, 'queryCode:' + sourceName) /// TODO: log queries, more info here
574
817
  return db.queryObservable(async (input, output) => {
575
818
  return queryFunction(input, output, params)
576
819
  })
577
820
  },
578
- get: async (dbName, code, params = {}) => {
821
+ get: async (dbName, code, params = {}, sourceName = 'query/query.js') => {
579
822
  if(!dbName) throw new Error("databaseNameRequired")
580
823
  const db = server.databases.get(dbName)
581
824
  if(!db) throw new Error('databaseNotFound')
582
- const queryFunction = scriptContext.run(code, 'query')
583
- return db.queryGet((input, output) => {
584
- return queryFunction(input, output, params)
585
- })
825
+ const queryFunction = scriptContext.run(code, 'queryCode:' + sourceName)
826
+ return db.queryGet((input, output) => queryFunction(input, output, params))
586
827
  }
587
828
  },
588
829
  queryObject: {
589
- observable: (dbName, code, params = {}) => {
830
+ observable: (dbName, code, params = {}, sourceName = 'queryObject/query.js') => {
590
831
  if(!dbName) return new ReactiveDao.ObservableError("databaseNameRequired")
591
832
  const db = server.databases.get(dbName)
592
833
  if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
593
- const queryFunction = scriptContext.run(code, 'query')
834
+ const queryFunction = scriptContext.run(code, 'queryCode:' + sourceName) /// TODO: log queries, more info here
594
835
  return db.queryObjectObservable(async (input, output) => {
595
836
  return queryFunction(input, output, params)
596
837
  })
597
838
  },
598
- get: async (dbName, code, params = {}) => {
839
+ get: async (dbName, code, params = {}, sourceName = 'queryObject/query.js') => {
599
840
  if(!dbName) throw new Error("databaseNameRequired")
600
841
  const db = server.databases.get(dbName)
601
842
  if(!db) throw new Error('databaseNotFound')
602
- const queryFunction = scriptContext.run(code, 'query')
843
+ const queryFunction = scriptContext.run(code, 'queryCode:' + sourceName)
603
844
  return db.queryObjectGet((input, output) => queryFunction(input, output, params))
604
845
  }
605
846
  }
@@ -608,5 +849,6 @@ function localReads(server, scriptContext) {
608
849
 
609
850
  module.exports = {
610
851
  localRequests,
852
+ remoteRequests,
611
853
  localReads
612
- }
854
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/db-web",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "author": {
5
5
  "email": "michal@laszczewski.com",
6
6
  "name": "Michał Łaszczewski",
@@ -30,11 +30,11 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@live-change/dao": "0.5.14",
33
- "@live-change/db": "^0.6.1",
34
- "@live-change/db-store-indexeddb": "^0.6.1",
35
- "@live-change/db-store-localstorage": "^0.6.1",
36
- "@live-change/db-store-rbtree": "^0.6.1",
33
+ "@live-change/db": "^0.6.2",
34
+ "@live-change/db-store-indexeddb": "^0.6.2",
35
+ "@live-change/db-store-localstorage": "^0.6.2",
36
+ "@live-change/db-store-rbtree": "^0.6.2",
37
37
  "debug": "^4.3.4"
38
38
  },
39
- "gitHead": "f458425c609deeb9d1f38c15a3aa37759629a67e"
39
+ "gitHead": "9a1b104864c08f3e35b009f191889e3308e3eeb0"
40
40
  }