@live-change/db-web 0.5.25 → 0.6.1

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
@@ -8,34 +8,47 @@ const ReactiveDao = require("@live-change/dao")
8
8
  const Database = require('@live-change/db').Database
9
9
 
10
10
  class DatabaseStore {
11
- constructor(path, backend, options) {
11
+ constructor(path, backends, options) {
12
12
  this.path = path
13
- this.backend = backend
13
+ this.backends = backends
14
14
  this.stores = new Map()
15
15
 
16
- this.db = backend.createDb(path, options)
16
+ this.dbs = {}
17
+ this.dbs.default = this.backends.default.createDb(path, options)
17
18
  }
18
19
  close() {
19
- return this.backend.closeDb(this.db)
20
+ for(let key in this.dbs) {
21
+ return this.backends[key].closeDb(this.dbs[key])
22
+ }
20
23
  }
21
24
  delete() {
22
- return this.backend.deleteDb(this.db)
25
+ for(let key in this.dbs) {
26
+ return this.backends[key].deleteDb(this.dbs[key])
27
+ }
23
28
  }
24
29
  getStore(name, options = {}) {
25
30
  let store = this.stores.get(name)
26
31
  if(store) return store
27
- store = this.backend.createStore(this.db, name, options)
32
+ const backendName = options.backend ?? (options.memory ? 'memory' : 'default')
33
+ if(!this.backends[backendName]) {
34
+ throw new Error(`db ${path} backend ${backendName} not configured`)
35
+ }
36
+ if(!this.dbs[backendName]) {
37
+ this.dbs[backendName] = this.backends[backendName].createDb(this.path, options)
38
+ }
39
+ store = this.backends[backendName].createStore(this.dbs[backendName], name, options)
40
+ store.backendName = backendName
28
41
  this.stores.set(name, store)
29
42
  return store
30
43
  }
31
44
  closeStore(name) {
32
45
  let store = this.stores.get(name)
33
46
  if(!store) return;
34
- return this.backend.closeStore(store)
47
+ return this.backends[store.backendName].closeStore(store)
35
48
  }
36
49
  deleteStore(name) {
37
50
  let store = this.getStore(name)
38
- return this.backend.deleteStore(store)
51
+ return this.backends[store.backendName].deleteStore(store)
39
52
  }
40
53
  }
41
54
 
@@ -48,7 +61,26 @@ class Server {
48
61
 
49
62
  this.databasesListObservable = new ReactiveDao.ObservableList([])
50
63
 
51
- this.backend = createBackend(config)
64
+ this.backends = {}
65
+ if(config.backend && !this.backends.default) { // backward compatibility
66
+ this.backends.default = createBackend({
67
+ name: config.backend,
68
+ url: config.backendUrl,
69
+ maxDbs: config.maxDbs,
70
+ maxDbSize: config.maxDbSize,
71
+ })
72
+ }
73
+ for(let backend of config.backends || []) {
74
+ this.backends[backend.name] = createBackend(backend)
75
+ }
76
+ if(!this.backends.default) {
77
+ throw new Error("No default backend configured")
78
+ }
79
+ if(!this.backends.memory) {
80
+ this.backends.memory = createBackend({
81
+ name: "mem"
82
+ })
83
+ }
52
84
 
53
85
  this.metadataSavePromise = null
54
86
  }
@@ -116,7 +148,10 @@ class Server {
116
148
  const dbPath = `${this.config.dbPrefix || ''}_lcdb`
117
149
  let dbStore = this.databaseStores.get(dbName)
118
150
  if(!dbStore) {
119
- dbStore = new DatabaseStore(dbPath, this.backend, dbConfig.storage)
151
+ const backend = this.backends[dbConfig.backend?.name ?? dbConfig.backend ?? 'default']
152
+ dbStore = new DatabaseStore(dbPath, { ...this.backends, default: backend },
153
+ typeof dbConfig.backend == 'object' ? dbConfig.backend : dbConfig.storage
154
+ )
120
155
  this.databaseStores.set(dbName, dbStore)
121
156
  }
122
157
  const database = new Database(
package/lib/backend.js CHANGED
@@ -12,7 +12,6 @@ function createBackend(config) {
12
12
  },
13
13
  async deleteDb(db) {
14
14
  db.close()
15
- await rimraf(db.path)
16
15
  },
17
16
  createStore(db, name, options) {
18
17
  return new this.Store()
@@ -23,7 +22,81 @@ function createBackend(config) {
23
22
  await store.clear()
24
23
  }
25
24
  }
26
- } else throw new Error("Unknown backend " + config.backend)
25
+ } if(config.backend == 'indexeddb') {
26
+ return {
27
+ Store: require('@live-change/db-store-indexeddb'),
28
+ createDb(path, options) {
29
+ const db = {}
30
+ db.path = path
31
+ return db
32
+ },
33
+ closeDb(db) {
34
+ db.close()
35
+ },
36
+ async deleteDb(db) {
37
+ db.close()
38
+ db.deleteDb()
39
+ },
40
+ createStore(db, name, options) {
41
+ return new this.Store(db.path, name, options)
42
+ },
43
+ closeStore(store) {
44
+ },
45
+ async deleteStore(store) {
46
+ await store.clear()
47
+ }
48
+ }
49
+ } if(config.backend == 'local') {
50
+ return {
51
+ Store: require('@live-change/db-store-localstorage'),
52
+ createDb(path, options) {
53
+ const db = {}
54
+ db.path = path
55
+ return db
56
+ },
57
+ closeDb(db) {
58
+ db.close()
59
+ },
60
+ async deleteDb(db) {
61
+ db.close()
62
+ db.deleteDb()
63
+ },
64
+ createStore(db, name, options) {
65
+ return new this.Store(db.path, name, 'local', options)
66
+ },
67
+ closeStore(store) {
68
+ },
69
+ async deleteStore(store) {
70
+ await store.clear()
71
+ }
72
+ }
73
+ } if(config.backend == 'session') {
74
+ return {
75
+ Store: require('@live-change/db-store-localstorage'),
76
+ createDb(path, options) {
77
+ const db = {}
78
+ db.path = path
79
+ return db
80
+ },
81
+ closeDb(db) {
82
+ db.close()
83
+ },
84
+ async deleteDb(db) {
85
+ db.close()
86
+ db.deleteDb()
87
+ },
88
+ createStore(db, name, options) {
89
+ return new this.Store(db.path, name, 'session', options)
90
+ },
91
+ closeStore(store) {
92
+ },
93
+ async deleteStore(store) {
94
+ await store.clear()
95
+ }
96
+ }
97
+ } else {
98
+ throw new Error("Unknown backend " + config.backend)
99
+ }
27
100
  }
28
101
 
29
102
  module.exports = createBackend
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/db-web",
3
- "version": "0.5.25",
3
+ "version": "0.6.1",
4
4
  "author": {
5
5
  "email": "michal@laszczewski.com",
6
6
  "name": "Michał Łaszczewski",
@@ -29,10 +29,12 @@
29
29
  "tape": "^5.3.2"
30
30
  },
31
31
  "dependencies": {
32
- "@live-change/dao": "^0.5.10",
33
- "@live-change/db": "^0.5.25",
34
- "@live-change/db-store-rbtree": "^0.5.25",
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",
35
37
  "debug": "^4.3.4"
36
38
  },
37
- "gitHead": "dac1ac23bd1a4e1ba83e674d5493ab6c832f4462"
39
+ "gitHead": "f458425c609deeb9d1f38c15a3aa37759629a67e"
38
40
  }