@live-change/db-server 0.5.3 → 0.5.6
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 +1 -1
- package/lib/Server.js +127 -61
- package/lib/backend.js +0 -1
- package/lib/dbDao.js +76 -0
- package/package.json +17 -16
package/Dockerfile
CHANGED
package/lib/Server.js
CHANGED
|
@@ -19,6 +19,12 @@ const Database = require('@live-change/db').Database
|
|
|
19
19
|
|
|
20
20
|
const debug = require('debug')('db-server')
|
|
21
21
|
|
|
22
|
+
const {
|
|
23
|
+
SsrServer,
|
|
24
|
+
createLoopbackDao
|
|
25
|
+
} = require("@live-change/server")
|
|
26
|
+
const packageInfo = require("@live-change/db-server/package.json");
|
|
27
|
+
|
|
22
28
|
class DatabaseStore {
|
|
23
29
|
constructor(path, backend, options) {
|
|
24
30
|
this.path = path
|
|
@@ -93,71 +99,111 @@ class Server {
|
|
|
93
99
|
}
|
|
94
100
|
}
|
|
95
101
|
createDao(session) {
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
if(this.config.master) {
|
|
101
|
-
return new ReactiveDao(session, {
|
|
102
|
-
remoteUrl: this.config.master,
|
|
103
|
-
database: {
|
|
104
|
-
type: 'local',
|
|
102
|
+
const packageInfo = require('@live-change/db-server/package.json')
|
|
103
|
+
|
|
104
|
+
const store = { /// Low level data access
|
|
105
|
+
type: 'local',
|
|
105
106
|
source: new ReactiveDao.SimpleDao({
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
},
|
|
111
|
-
values: {
|
|
112
|
-
...dbDao.localReads(this, scriptContext)
|
|
113
|
-
}
|
|
114
|
-
})
|
|
107
|
+
methods: {
|
|
108
|
+
...(profileLog.started
|
|
109
|
+
? profileLog.profileFunctions(storeDao.localRequests(this))
|
|
110
|
+
: storeDao.localRequests(this))
|
|
115
111
|
},
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
generator: ReactiveDao.ObservableList
|
|
119
|
-
}*/
|
|
120
|
-
store: { /// Low level data access
|
|
121
|
-
type: 'local',
|
|
122
|
-
source: new ReactiveDao.SimpleDao({
|
|
123
|
-
methods: { // No write access to replica store
|
|
124
|
-
},
|
|
125
|
-
values: {
|
|
126
|
-
...storeDao.localReads(this)
|
|
127
|
-
}
|
|
128
|
-
})
|
|
112
|
+
values: {
|
|
113
|
+
...storeDao.localReads(this)
|
|
129
114
|
}
|
|
130
115
|
})
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const version = {
|
|
119
|
+
type: 'local',
|
|
120
|
+
source: new ReactiveDao.SimpleDao({
|
|
121
|
+
methods: {},
|
|
122
|
+
values: {
|
|
123
|
+
version: {
|
|
124
|
+
observable() {
|
|
125
|
+
return new ReactiveDao.ObservableValue(packageInfo.version)
|
|
140
126
|
},
|
|
141
|
-
|
|
142
|
-
|
|
127
|
+
async get() {
|
|
128
|
+
return packageInfo.version
|
|
143
129
|
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
})
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const emptyServices = {
|
|
136
|
+
observable(parameters) {
|
|
137
|
+
return ReactiveDao.ObservableList([])
|
|
138
|
+
},
|
|
139
|
+
async get(parameters) {
|
|
140
|
+
return []
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const sessionInfo = {
|
|
144
|
+
client: { session: 'dbRoot' },
|
|
145
|
+
services: []
|
|
146
|
+
}
|
|
147
|
+
const metadata = {
|
|
148
|
+
type: "local",
|
|
149
|
+
source: new ReactiveDao.SimpleDao({
|
|
150
|
+
methods: {},
|
|
151
|
+
values: {
|
|
152
|
+
serviceNames: emptyServices,
|
|
153
|
+
serviceDefinitions: emptyServices,
|
|
154
|
+
api: {
|
|
155
|
+
observable(parameters) {
|
|
156
|
+
ReactiveDao.ObservableValue(sessionInfo)
|
|
153
157
|
},
|
|
154
|
-
|
|
155
|
-
|
|
158
|
+
async get(parameters) {
|
|
159
|
+
return sessionInfo
|
|
156
160
|
}
|
|
157
|
-
}
|
|
161
|
+
}
|
|
158
162
|
}
|
|
159
163
|
})
|
|
160
164
|
}
|
|
165
|
+
|
|
166
|
+
const scriptContext = new ScriptContext({
|
|
167
|
+
/// TODO: script available routines
|
|
168
|
+
console
|
|
169
|
+
})
|
|
170
|
+
let database
|
|
171
|
+
if(this.config.master) {
|
|
172
|
+
database = {
|
|
173
|
+
type: 'local',
|
|
174
|
+
source: new ReactiveDao.SimpleDao({
|
|
175
|
+
methods: {
|
|
176
|
+
...(profileLog.started
|
|
177
|
+
? profileLog.profileFunctions(dbDao.remoteRequests(this))
|
|
178
|
+
: dbDao.remoteRequests(this))
|
|
179
|
+
},
|
|
180
|
+
values: {
|
|
181
|
+
...dbDao.localReads(this, scriptContext)
|
|
182
|
+
}
|
|
183
|
+
})
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
} else {
|
|
187
|
+
database = {
|
|
188
|
+
type: 'local',
|
|
189
|
+
source: new ReactiveDao.SimpleDao({
|
|
190
|
+
methods: {
|
|
191
|
+
...(profileLog.started
|
|
192
|
+
? profileLog.profileFunctions(dbDao.localRequests(this, scriptContext))
|
|
193
|
+
: dbDao.localRequests(this, scriptContext))
|
|
194
|
+
},
|
|
195
|
+
values: {
|
|
196
|
+
...dbDao.localReads(this, scriptContext)
|
|
197
|
+
}
|
|
198
|
+
})
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return new ReactiveDao(session, {
|
|
202
|
+
remoteUrl: this.config.master,
|
|
203
|
+
database,
|
|
204
|
+
serverDatabase: database,
|
|
205
|
+
store, version, metadata
|
|
206
|
+
})
|
|
161
207
|
}
|
|
162
208
|
async initialize(initOptions = {}) {
|
|
163
209
|
if(!this.config.temporary) {
|
|
@@ -265,8 +311,10 @@ class Server {
|
|
|
265
311
|
await this.metadataSavePromise
|
|
266
312
|
}
|
|
267
313
|
|
|
268
|
-
getHttp() {
|
|
269
|
-
if(
|
|
314
|
+
async getHttp() {
|
|
315
|
+
if(this.http) return this.http
|
|
316
|
+
if(this.httpPromise) return this.httpPromise
|
|
317
|
+
this.httpPromise = (async () => {
|
|
270
318
|
const app = express()
|
|
271
319
|
const sockJsServer = sockjs.createServer({ prefix: '/api/sockjs' })
|
|
272
320
|
sockJsServer.on('connection', (conn) => {
|
|
@@ -282,18 +330,36 @@ class Server {
|
|
|
282
330
|
this.apiServer.handleConnection(serverConnection)
|
|
283
331
|
})
|
|
284
332
|
sockJsServer.attach(server)
|
|
333
|
+
|
|
334
|
+
const ssrRoot = path.dirname(require.resolve("@live-change/db-admin/front/vite.config.js"))
|
|
335
|
+
const dev = await fs.promises.access(path.resolve(ssrRoot, './dist'), fs.constants.R_OK)
|
|
336
|
+
.then(r => false).catch(r => true)
|
|
337
|
+
if(dev) console.log("STARTING ADMIN IN DEV MODE!")
|
|
338
|
+
const manifest = dev ? null : require(path.resolve(ssrRoot, 'dist/client/ssr-manifest.json'))
|
|
339
|
+
const admin = new SsrServer(app, manifest, {
|
|
340
|
+
dev,
|
|
341
|
+
fastAuth: true,
|
|
342
|
+
root: ssrRoot,
|
|
343
|
+
daoFactory: async (credentials, ip) => {
|
|
344
|
+
return await createLoopbackDao(credentials, () => this.apiServer.daoFactory(credentials, ip))
|
|
345
|
+
}
|
|
346
|
+
})
|
|
347
|
+
admin.start()
|
|
348
|
+
|
|
285
349
|
this.http = {
|
|
286
350
|
app,
|
|
287
351
|
sockJsServer,
|
|
288
352
|
wsServer,
|
|
289
|
-
server
|
|
353
|
+
server,
|
|
354
|
+
admin
|
|
290
355
|
}
|
|
291
|
-
|
|
292
|
-
|
|
356
|
+
return this.http
|
|
357
|
+
})()
|
|
358
|
+
return this.httpPromise
|
|
293
359
|
}
|
|
294
360
|
|
|
295
|
-
listen(...args) {
|
|
296
|
-
this.getHttp().server.listen(...args)
|
|
361
|
+
async listen(...args) {
|
|
362
|
+
(await this.getHttp()).server.listen(...args)
|
|
297
363
|
}
|
|
298
364
|
|
|
299
365
|
async close() {
|
package/lib/backend.js
CHANGED
package/lib/dbDao.js
CHANGED
|
@@ -372,6 +372,10 @@ function localReads(server, scriptContext) {
|
|
|
372
372
|
observable: () => server.databasesListObservable,
|
|
373
373
|
get: async () => server.databasesListObservable.list
|
|
374
374
|
},
|
|
375
|
+
databases: {
|
|
376
|
+
observable: () => server.databasesListObservable.next(list => list.map(dbName => ({ id: dbName }))),
|
|
377
|
+
get: async () => server.databasesListObservable.list.map(dbName => ({ id: dbName }))
|
|
378
|
+
},
|
|
375
379
|
databaseConfig: {
|
|
376
380
|
observable: (dbName) => {
|
|
377
381
|
const db = server.databases.get(dbName)
|
|
@@ -420,6 +424,78 @@ function localReads(server, scriptContext) {
|
|
|
420
424
|
return db.logsListObservable.list
|
|
421
425
|
}
|
|
422
426
|
},
|
|
427
|
+
tablesCount: {
|
|
428
|
+
observable: (dbName, tableName, id) => {
|
|
429
|
+
const db = server.databases.get(dbName)
|
|
430
|
+
if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
|
|
431
|
+
return db.tablesListObservable.next(tables => tables.length ?? 0)
|
|
432
|
+
},
|
|
433
|
+
get: async (dbName, tableName, id) =>{
|
|
434
|
+
const db = server.databases.get(dbName)
|
|
435
|
+
if(!db) throw new Error('databaseNotFound')
|
|
436
|
+
return db.tablesListObservable.list.length
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
indexesCount: {
|
|
440
|
+
observable: (dbName, tableName, id) => {
|
|
441
|
+
const db = server.databases.get(dbName)
|
|
442
|
+
if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
|
|
443
|
+
return db.indexesListObservable.next(tables => tables.length ?? 0)
|
|
444
|
+
},
|
|
445
|
+
get: async (dbName, tableName, id) =>{
|
|
446
|
+
const db = server.databases.get(dbName)
|
|
447
|
+
if(!db) throw new Error('databaseNotFound')
|
|
448
|
+
return db.indexesListObservable.list.length
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
logsCount: {
|
|
452
|
+
observable: (dbName, tableName, id) => {
|
|
453
|
+
const db = server.databases.get(dbName)
|
|
454
|
+
if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
|
|
455
|
+
return db.logsListObservable.next(tables => tables.length ?? 0)
|
|
456
|
+
},
|
|
457
|
+
get: async (dbName, tableName, id) =>{
|
|
458
|
+
const db = server.databases.get(dbName)
|
|
459
|
+
if(!db) throw new Error('databaseNotFound')
|
|
460
|
+
return db.logsListObservable.list.length
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
tables: {
|
|
464
|
+
observable: (dbName, tableName, id) => {
|
|
465
|
+
const db = server.databases.get(dbName)
|
|
466
|
+
if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
|
|
467
|
+
return db.tablesListObservable.next(list => list.map(dbName => ({ id: dbName })))
|
|
468
|
+
},
|
|
469
|
+
get: async (dbName, tableName, id) =>{
|
|
470
|
+
const db = server.databases.get(dbName)
|
|
471
|
+
if(!db) throw new Error('databaseNotFound')
|
|
472
|
+
return db.tablesListObservable.list.map(dbName => ({ id: dbName }))
|
|
473
|
+
}
|
|
474
|
+
},
|
|
475
|
+
indexes: {
|
|
476
|
+
observable: (dbName, indexName, id) => {
|
|
477
|
+
const db = server.databases.get(dbName)
|
|
478
|
+
if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
|
|
479
|
+
return db.indexesListObservable.next(list => list.map(dbName => ({ id: dbName })))
|
|
480
|
+
},
|
|
481
|
+
get: async (dbName, indexName, id) =>{
|
|
482
|
+
const db = server.databases.get(dbName)
|
|
483
|
+
if(!db) throw new Error('databaseNotFound')
|
|
484
|
+
return db.indexesListObservable.list.map(dbName => ({ id: dbName }))
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
logs: {
|
|
488
|
+
observable: (dbName, logName, id) => {
|
|
489
|
+
const db = server.databases.get(dbName)
|
|
490
|
+
if(!db) return new ReactiveDao.ObservableError('databaseNotFound')
|
|
491
|
+
return db.logsListObservable.next(list => list.map(dbName => ({ id: dbName })))
|
|
492
|
+
},
|
|
493
|
+
get: async (dbName, logName, id) => {
|
|
494
|
+
const db = server.databases.get(dbName)
|
|
495
|
+
if(!db) throw new Error('databaseNotFound')
|
|
496
|
+
return db.logsListObservable.list.map(dbName => ({ id: dbName }))
|
|
497
|
+
}
|
|
498
|
+
},
|
|
423
499
|
tableConfig: {
|
|
424
500
|
observable: (dbName, tableName, id) => {
|
|
425
501
|
const db = server.databases.get(dbName)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@live-change/db-server",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.6",
|
|
4
4
|
"description": "Database with observable data for live queries",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
|
-
"url": "git+https://github.com/live-change/db
|
|
15
|
+
"url": "git+https://github.com/live-change/live-change-db.git"
|
|
16
16
|
},
|
|
17
17
|
"author": {
|
|
18
18
|
"email": "m8@em8.pl",
|
|
@@ -21,22 +21,23 @@
|
|
|
21
21
|
},
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"bugs": {
|
|
24
|
-
"url": "https://github.com/live-change/db
|
|
24
|
+
"url": "https://github.com/live-change/live-change-db/issues"
|
|
25
25
|
},
|
|
26
|
-
"homepage": "https://github.com/live-change/db
|
|
26
|
+
"homepage": "https://github.com/live-change/live-change-db",
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"tape": "^5.
|
|
28
|
+
"tape": "^5.3.2"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@live-change/dao": "
|
|
32
|
-
"@live-change/dao-sockjs": "
|
|
33
|
-
"@live-change/dao-websocket": "
|
|
34
|
-
"@live-change/db": "^0.5.
|
|
35
|
-
"@live-change/db-
|
|
36
|
-
"@live-change/db-
|
|
37
|
-
"@live-change/db-store-
|
|
38
|
-
"@live-change/db-store-
|
|
39
|
-
"@live-change/db-store-
|
|
31
|
+
"@live-change/dao": "0.4.6",
|
|
32
|
+
"@live-change/dao-sockjs": "0.4.5",
|
|
33
|
+
"@live-change/dao-websocket": "0.4.6",
|
|
34
|
+
"@live-change/db": "^0.5.6",
|
|
35
|
+
"@live-change/db-admin": "^0.5.6",
|
|
36
|
+
"@live-change/db-client": "^0.5.6",
|
|
37
|
+
"@live-change/db-store-level": "^0.5.6",
|
|
38
|
+
"@live-change/db-store-lmdb": "^0.5.6",
|
|
39
|
+
"@live-change/db-store-observable-db": "^0.5.6",
|
|
40
|
+
"@live-change/db-store-rbtree": "^0.5.6",
|
|
40
41
|
"@live-change/sockjs": "^0.4.0-rc.1",
|
|
41
42
|
"express": "^4.17.1",
|
|
42
43
|
"line-reader": "^0.4.0",
|
|
@@ -46,7 +47,7 @@
|
|
|
46
47
|
"rimraf-promise": "^2.0.0",
|
|
47
48
|
"segfault-handler": "^1.3.0",
|
|
48
49
|
"websocket": "^1.0.34",
|
|
49
|
-
"yargs": "^17.0
|
|
50
|
+
"yargs": "^17.3.0"
|
|
50
51
|
},
|
|
51
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "265e047dee05dbb0965a870d61d834242dad1af0"
|
|
52
53
|
}
|