@live-change/db-server 0.4.79 → 0.4.83

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/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM node:latest
1
+ FROM node:15
2
2
  USER root
3
3
 
4
4
  RUN npm -g config set user root
package/bin/server.js CHANGED
@@ -53,7 +53,7 @@ function storeOptions(yargs, defaults = {}) {
53
53
  default: defaults.dbRoot || '.'
54
54
  })
55
55
  yargs.option('backend', {
56
- describe: 'database backend engine ( lmdb | leveldb | rocksdb | mem )',
56
+ describe: 'database backend engine ( lmdb | leveldb | rocksdb | memdown | mem )',
57
57
  type: "string",
58
58
  default: defaults.backend || 'lmdb'
59
59
  })
package/lib/Server.js CHANGED
@@ -21,6 +21,7 @@ class DatabaseStore {
21
21
  constructor(path, backend, options) {
22
22
  this.path = path
23
23
  this.backend = backend
24
+ this.options = options
24
25
  this.stores = new Map()
25
26
  this.db = backend.createDb(path, options)
26
27
  }
@@ -157,22 +158,24 @@ class Server {
157
158
  }
158
159
  }
159
160
  async initialize(initOptions = {}) {
160
- const normalMetadataPath = path.resolve(this.config.dbRoot, 'metadata.json')
161
- const backupMetadataPath = path.resolve(this.config.dbRoot, 'metadata.json.bak')
162
- const normalMetadataExists = await fs.promises.access(normalMetadataPath).catch(err => false)
163
- const backupMetadataExists = await fs.promises.access(backupMetadataPath).catch(err => false)
164
- if(initOptions.forceNew && (normalMetadataExists || backupMetadataExists))
165
- throw new Error("database already exists")
166
- const normalMetadata = await fs.promises.readFile(normalMetadataPath, "utf8")
167
- .then(json => JSON.parse(json)).catch(err => null)
168
- const backupMetadata = await fs.promises.readFile(backupMetadataPath, "utf8")
169
- .then(json => JSON.parse(json)).catch(err => null)
170
- this.metadata = normalMetadata
171
- if(!normalMetadata) this.metadata = backupMetadata
172
- if(this.metadata && backupMetadata && this.metadata.timestamp < backupMetadata.timestamp)
173
- this.metadata = backupMetadata
161
+ if(!this.config.temporary) {
162
+ const normalMetadataPath = path.resolve(this.config.dbRoot, 'metadata.json')
163
+ const backupMetadataPath = path.resolve(this.config.dbRoot, 'metadata.json.bak')
164
+ const normalMetadataExists = await fs.promises.access(normalMetadataPath).catch(err => false)
165
+ const backupMetadataExists = await fs.promises.access(backupMetadataPath).catch(err => false)
166
+ if(initOptions.forceNew && (normalMetadataExists || backupMetadataExists))
167
+ throw new Error("database already exists")
168
+ const normalMetadata = await fs.promises.readFile(normalMetadataPath, "utf8")
169
+ .then(json => JSON.parse(json)).catch(err => null)
170
+ const backupMetadata = await fs.promises.readFile(backupMetadataPath, "utf8")
171
+ .then(json => JSON.parse(json)).catch(err => null)
172
+ this.metadata = normalMetadata
173
+ if(!normalMetadata) this.metadata = backupMetadata
174
+ if(this.metadata && backupMetadata && this.metadata.timestamp < backupMetadata.timestamp)
175
+ this.metadata = backupMetadata
176
+ if(!this.metadata && (normalMetadataExists || backupMetadataExists)) throw new Error("database is broken")
177
+ }
174
178
  if(!this.metadata) {
175
- if(normalMetadataExists || backupMetadataExists) throw new Error("database is broken")
176
179
  this.metadata = {
177
180
  databases: {
178
181
  system: {
@@ -218,7 +221,7 @@ class Server {
218
221
  }
219
222
  }
220
223
  async initDatabase(dbName, dbConfig) {
221
- const dbPath = path.resolve(this.config.dbRoot, dbName+'.db')
224
+ const dbPath = this.config.temporary ? 'memory' : path.resolve(this.config.dbRoot, dbName+'.db')
222
225
  let dbStore = this.databaseStores.get(dbName)
223
226
  if(!dbStore) {
224
227
  console.log("CREATE DB", dbPath, dbConfig.storage)
@@ -226,14 +229,16 @@ class Server {
226
229
  this.databaseStores.set(dbName, dbStore)
227
230
  }
228
231
  const database = new Database(
229
- dbConfig,
230
- (name, config) => dbStore.getStore(name, config),
231
- (configToSave) => {
232
- this.metadata.databases[dbName] = configToSave
233
- this.saveMetadata()
234
- },
235
- (name) => dbStore.deleteStore(name),
236
- dbName)
232
+ dbConfig,
233
+ (name, config) => dbStore.getStore(name, config),
234
+ (configToSave) => {
235
+ this.metadata.databases[dbName] = configToSave
236
+ this.saveMetadata()
237
+ },
238
+ (name) => dbStore.deleteStore(name),
239
+ dbName,
240
+ (context) => new ScriptContext(context)
241
+ )
237
242
  database.onAutoRemoveIndex = (name, uid) => {
238
243
  this.databases.get('system').table(dbName+'_indexes').delete(uid)
239
244
  }
@@ -244,6 +249,7 @@ class Server {
244
249
  }
245
250
 
246
251
  async doSaveMetadata() {
252
+ if(this.config.temporary) return
247
253
  //console.log("SAVE METADATA\n"+JSON.stringify(this.metadata, null, " "))
248
254
  const normalMetadataPath = path.resolve(this.config.dbRoot, 'metadata.json')
249
255
  const backupMetadataPath = path.resolve(this.config.dbRoot, 'metadata.json.bak')
@@ -289,6 +295,9 @@ class Server {
289
295
  }
290
296
 
291
297
  async close() {
298
+ if(this.http) {
299
+ this.http.server.close()
300
+ }
292
301
  for(const db of this.databaseStores.values()) db.close()
293
302
  }
294
303
 
package/lib/backend.js CHANGED
@@ -61,7 +61,7 @@ function createBackend(config) {
61
61
  await store.clear()
62
62
  }
63
63
  }
64
- } else if(config.backend == 'mem') {
64
+ } else if(config.backend == 'memdown') {
65
65
  return {
66
66
  levelup: require('levelup'),
67
67
  memdown: require('memdown'),
@@ -90,6 +90,27 @@ function createBackend(config) {
90
90
  await store.clear()
91
91
  }
92
92
  }
93
+ } else if(config.backend == 'mem') {
94
+ return {
95
+ Store: require('@live-change/db-store-rbtree'),
96
+ createDb(path, options) {
97
+ const db = {}
98
+ db.path = path
99
+ return db
100
+ },
101
+ closeDb(db) {
102
+ },
103
+ async deleteDb(db) {
104
+ },
105
+ createStore(db, name, options) {
106
+ return new this.Store()
107
+ },
108
+ closeStore(store) {
109
+ },
110
+ async deleteStore(store) {
111
+ await store.clear()
112
+ }
113
+ }
93
114
  } else if(config.backend == 'lmdb') {
94
115
  return {
95
116
  lmdb: require('node-lmdb'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/db-server",
3
- "version": "0.4.79",
3
+ "version": "0.4.83",
4
4
  "description": "Database with observable data for live queries",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -25,25 +25,25 @@
25
25
  },
26
26
  "homepage": "https://github.com/live-change/db-server",
27
27
  "devDependencies": {
28
- "encoding-down": "^6.3.0",
28
+ "encoding-down": "^7.0.0",
29
29
  "level-rocksdb": "^4.0.0",
30
- "leveldown": "^5.6.0",
31
- "levelup": "^4.4.0",
32
- "memdown": "^5.1.0",
33
- "node-lmdb": "^0.8.0",
34
- "rocksdb": "^4.1.0",
35
- "subleveldown": "^4.1.4",
36
- "tape": "^4.13.3"
30
+ "leveldown": "^6.0.0",
31
+ "levelup": "^5.0.1",
32
+ "memdown": "^6.0.0",
33
+ "node-lmdb": "^0.9.5",
34
+ "subleveldown": "^5.0.1",
35
+ "tape": "^5.2.2"
37
36
  },
38
37
  "dependencies": {
39
- "@live-change/dao": "^0.2.43",
40
- "@live-change/dao-sockjs": "^0.1.19",
41
- "@live-change/dao-websocket": "^0.2.21",
42
- "@live-change/db": "^0.3.61",
38
+ "@live-change/dao": "^0.3.3",
39
+ "@live-change/dao-sockjs": "^0.2.0",
40
+ "@live-change/dao-websocket": "^0.3.1",
41
+ "@live-change/db": "^0.3.63",
43
42
  "@live-change/db-client": "^0.4.70",
44
- "@live-change/db-store-level": "^0.1.13",
43
+ "@live-change/db-store-level": "^0.1.14",
45
44
  "@live-change/db-store-lmdb": "^0.1.21",
46
45
  "@live-change/db-store-observable-db": "^0.1.1",
46
+ "@live-change/db-store-rbtree": "^0.1.1",
47
47
  "express": "^4.17.1",
48
48
  "line-reader": "^0.4.0",
49
49
  "node-interval-tree": "^1.3.3",
@@ -53,6 +53,6 @@
53
53
  "segfault-handler": "^1.3.0",
54
54
  "sockjs": "^0.3.21",
55
55
  "websocket": "^1.0.34",
56
- "yargs": "^15.4.1"
56
+ "yargs": "^17.0.1"
57
57
  }
58
58
  }