@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 +45 -10
- package/lib/backend.js +75 -2
- package/package.json +7 -5
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,
|
|
11
|
+
constructor(path, backends, options) {
|
|
12
12
|
this.path = path
|
|
13
|
-
this.
|
|
13
|
+
this.backends = backends
|
|
14
14
|
this.stores = new Map()
|
|
15
15
|
|
|
16
|
-
this.
|
|
16
|
+
this.dbs = {}
|
|
17
|
+
this.dbs.default = this.backends.default.createDb(path, options)
|
|
17
18
|
}
|
|
18
19
|
close() {
|
|
19
|
-
|
|
20
|
+
for(let key in this.dbs) {
|
|
21
|
+
return this.backends[key].closeDb(this.dbs[key])
|
|
22
|
+
}
|
|
20
23
|
}
|
|
21
24
|
delete() {
|
|
22
|
-
|
|
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
|
-
|
|
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.
|
|
47
|
+
return this.backends[store.backendName].closeStore(store)
|
|
35
48
|
}
|
|
36
49
|
deleteStore(name) {
|
|
37
50
|
let store = this.getStore(name)
|
|
38
|
-
return this.
|
|
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.
|
|
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
|
-
|
|
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
|
-
}
|
|
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.
|
|
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": "
|
|
33
|
-
"@live-change/db": "^0.
|
|
34
|
-
"@live-change/db-store-
|
|
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": "
|
|
39
|
+
"gitHead": "f458425c609deeb9d1f38c15a3aa37759629a67e"
|
|
38
40
|
}
|