@live-change/db-server 0.6.23 → 0.7.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/bin/server.js +20 -14
- package/index.js +3 -1
- package/lib/Replicator.js +1 -1
- package/lib/Server.js +23 -24
- package/lib/backend.js +9 -7
- package/lib/dbDao.js +2 -2
- package/lib/profileOutput.js +3 -3
- package/lib/storeDao.js +1 -1
- package/package.json +17 -17
- package/tests/getServer.js +25 -21
- package/tests/index.js +3 -2
- package/vole-apps/metadata.json.bak +1796 -0
package/bin/server.js
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
import path from 'path'
|
|
3
|
+
import fs from 'fs'
|
|
4
|
+
import service from "os-service"
|
|
5
|
+
import Server from '../lib/Server.js'
|
|
6
|
+
import { client as WSClient } from "@live-change/dao-websocket"
|
|
7
|
+
import ReactiveDao from '@live-change/dao'
|
|
8
|
+
import * as db from "@live-change/db"
|
|
9
|
+
import profileOutput from "../lib/profileOutput.js"
|
|
10
|
+
import { performance } from 'perf_hooks'
|
|
11
|
+
import yargs from 'yargs'
|
|
12
|
+
import { fileURLToPath } from 'url'
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
import {
|
|
13
15
|
SsrServer,
|
|
14
16
|
createLoopbackDao
|
|
15
|
-
}
|
|
17
|
+
} from "@live-change/server"
|
|
16
18
|
|
|
17
19
|
process.on('unhandledRejection', (reason, p) => {
|
|
18
20
|
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason)
|
|
@@ -73,7 +75,7 @@ function serviceOptions(yargs) {
|
|
|
73
75
|
})
|
|
74
76
|
}
|
|
75
77
|
|
|
76
|
-
const argv =
|
|
78
|
+
const argv = yargs(process.argv.slice(2)) // eslint-disable-line
|
|
77
79
|
.command('create', 'create database root', (yargs) => {
|
|
78
80
|
storeOptions(yargs)
|
|
79
81
|
}, (argv) => create(argv))
|
|
@@ -157,7 +159,9 @@ async function serve(argv) {
|
|
|
157
159
|
if(verbose) console.info(`database initialized!`)
|
|
158
160
|
if(verbose) console.info(`listening on: ${argv.host}:${argv.port}`)
|
|
159
161
|
|
|
160
|
-
const ssrRoot = path.dirname(
|
|
162
|
+
const ssrRoot = path.dirname(
|
|
163
|
+
fileURLToPath(import.meta.resolve("@live-change/db-admin/front/vite.config.js"))
|
|
164
|
+
)
|
|
161
165
|
|
|
162
166
|
const http = await server.getHttp()
|
|
163
167
|
const { app } = http
|
|
@@ -165,7 +169,9 @@ async function serve(argv) {
|
|
|
165
169
|
const dev = await fs.promises.access(path.resolve(ssrRoot, './dist'), fs.constants.R_OK)
|
|
166
170
|
.then(r => false).catch(r => true)
|
|
167
171
|
if(dev) console.log("STARTING ADMIN IN DEV MODE!")
|
|
168
|
-
const manifest = dev
|
|
172
|
+
const manifest = (dev || argv.spa)
|
|
173
|
+
? null
|
|
174
|
+
: JSON.parse(fs.readFileSync((path.resolve(ssrRoot, 'dist/client/.vite/ssr-manifest.json'))))
|
|
169
175
|
const admin = new SsrServer(app, manifest, {
|
|
170
176
|
dev,
|
|
171
177
|
fastAuth: true,
|
package/index.js
CHANGED
package/lib/Replicator.js
CHANGED
package/lib/Server.js
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import fs from 'fs'
|
|
2
|
+
import path from 'path'
|
|
3
|
+
import http from 'http'
|
|
4
|
+
import express from 'express'
|
|
5
|
+
import sockjs from '@live-change/sockjs'
|
|
6
|
+
import { server as WebSocketServer } from 'websocket'
|
|
7
|
+
import { server as ReactiveDaoWebsocketServer, client as ReactiveDaoWebsocketClient } from '@live-change/dao-websocket'
|
|
8
|
+
import ScriptContext from '@live-change/db/lib/ScriptContext.js'
|
|
9
|
+
import * as dbDao from './dbDao.js'
|
|
10
|
+
import * as storeDao from './storeDao.js'
|
|
11
|
+
import createBackend from './backend.js'
|
|
12
|
+
import Replicator from './Replicator.js'
|
|
13
|
+
import { profileLog } from '@live-change/db'
|
|
14
|
+
import { Database } from '@live-change/db'
|
|
15
|
+
import ReactiveDao from '@live-change/dao'
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const Database = require('@live-change/db').Database
|
|
19
|
-
|
|
20
|
-
const debug = require('debug')('db-server')
|
|
17
|
+
import Debug from 'debug'
|
|
18
|
+
const debug = Debug('db-server')
|
|
21
19
|
|
|
22
20
|
class DatabaseStore {
|
|
23
21
|
constructor(path, backends, options) {
|
|
@@ -131,7 +129,8 @@ class Server {
|
|
|
131
129
|
}
|
|
132
130
|
}
|
|
133
131
|
createDao(session) {
|
|
134
|
-
|
|
132
|
+
|
|
133
|
+
const packageInfo = eval('import("@live-change/db-server/package.json"'+', { assert: { type: "json" } })')
|
|
135
134
|
|
|
136
135
|
const store = { /// Low level data access
|
|
137
136
|
type: 'local',
|
|
@@ -153,11 +152,11 @@ class Server {
|
|
|
153
152
|
methods: {},
|
|
154
153
|
values: {
|
|
155
154
|
version: {
|
|
156
|
-
observable() {
|
|
157
|
-
return new ReactiveDao.ObservableValue(packageInfo.version)
|
|
155
|
+
async observable() {
|
|
156
|
+
return new ReactiveDao.ObservableValue((await packageInfo).version)
|
|
158
157
|
},
|
|
159
158
|
async get() {
|
|
160
|
-
return packageInfo.version
|
|
159
|
+
return (await packageInfo).version
|
|
161
160
|
}
|
|
162
161
|
}
|
|
163
162
|
}
|
|
@@ -432,4 +431,4 @@ class Server {
|
|
|
432
431
|
}
|
|
433
432
|
}
|
|
434
433
|
|
|
435
|
-
|
|
434
|
+
export default Server
|
package/lib/backend.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import fs from 'fs'
|
|
2
|
+
import { rimraf } from "rimraf"
|
|
3
|
+
import lmdb from 'node-lmdb'
|
|
4
|
+
import lmdbStore from'@live-change/db-store-lmdb'
|
|
5
|
+
import rbTreeStore from'@live-change/db-store-rbtree'
|
|
4
6
|
|
|
5
7
|
function createBackend({ name, url, maxDbs, mapSize }) {
|
|
6
8
|
if(name == 'leveldb') {
|
|
@@ -92,7 +94,7 @@ function createBackend({ name, url, maxDbs, mapSize }) {
|
|
|
92
94
|
}
|
|
93
95
|
} else if(name == 'mem' || name == 'memory') {
|
|
94
96
|
return {
|
|
95
|
-
Store:
|
|
97
|
+
Store: rbTreeStore,
|
|
96
98
|
createDb(path, options) {
|
|
97
99
|
const db = {}
|
|
98
100
|
db.path = path
|
|
@@ -112,8 +114,8 @@ function createBackend({ name, url, maxDbs, mapSize }) {
|
|
|
112
114
|
}
|
|
113
115
|
} else if(name == 'lmdb') {
|
|
114
116
|
return {
|
|
115
|
-
lmdb
|
|
116
|
-
Store:
|
|
117
|
+
lmdb,
|
|
118
|
+
Store: lmdbStore,
|
|
117
119
|
createDb(path, options) {
|
|
118
120
|
fs.mkdirSync(path, { recursive: true })
|
|
119
121
|
const env = new this.lmdb.Env()
|
|
@@ -192,4 +194,4 @@ function createBackend({ name, url, maxDbs, mapSize }) {
|
|
|
192
194
|
} else throw new Error("Unknown backend " + name)
|
|
193
195
|
}
|
|
194
196
|
|
|
195
|
-
|
|
197
|
+
export default createBackend
|
package/lib/dbDao.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import ReactiveDao from "@live-change/dao"
|
|
2
2
|
|
|
3
3
|
function localRequests(server, scriptContext) {
|
|
4
4
|
return {
|
|
@@ -848,7 +848,7 @@ function localReads(server, scriptContext) {
|
|
|
848
848
|
}
|
|
849
849
|
}
|
|
850
850
|
|
|
851
|
-
|
|
851
|
+
export {
|
|
852
852
|
localRequests,
|
|
853
853
|
remoteRequests,
|
|
854
854
|
localReads
|
package/lib/profileOutput.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import fs from 'fs'
|
|
2
|
+
import { once } from 'events'
|
|
3
3
|
|
|
4
4
|
function profileOutput(path) {
|
|
5
5
|
const profileLogStream = fs.createWriteStream(path)
|
|
@@ -23,4 +23,4 @@ function profileOutput(path) {
|
|
|
23
23
|
return write
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
export default profileOutput
|
package/lib/storeDao.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@live-change/db-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "Database with observable data for live queries",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -24,30 +24,30 @@
|
|
|
24
24
|
"url": "https://github.com/live-change/live-change-db/issues"
|
|
25
25
|
},
|
|
26
26
|
"homepage": "https://github.com/live-change/live-change-db",
|
|
27
|
+
"type": "module",
|
|
27
28
|
"devDependencies": {
|
|
28
|
-
"tape": "^5.
|
|
29
|
+
"tape": "^5.7.4"
|
|
29
30
|
},
|
|
30
31
|
"dependencies": {
|
|
31
|
-
"@live-change/dao": "0.
|
|
32
|
-
"@live-change/dao-message": "0.
|
|
33
|
-
"@live-change/dao-sockjs": "0.
|
|
34
|
-
"@live-change/dao-websocket": "0.
|
|
35
|
-
"@live-change/db": "^0.
|
|
36
|
-
"@live-change/db-admin": "^0.
|
|
37
|
-
"@live-change/db-client": "^0.
|
|
38
|
-
"@live-change/db-store-level": "^0.
|
|
39
|
-
"@live-change/db-store-lmdb": "^0.
|
|
40
|
-
"@live-change/db-store-observable-db": "^0.
|
|
41
|
-
"@live-change/db-store-rbtree": "^0.
|
|
32
|
+
"@live-change/dao": "0.6.0",
|
|
33
|
+
"@live-change/dao-message": "0.6.0",
|
|
34
|
+
"@live-change/dao-sockjs": "0.6.0",
|
|
35
|
+
"@live-change/dao-websocket": "0.6.0",
|
|
36
|
+
"@live-change/db": "^0.7.2",
|
|
37
|
+
"@live-change/db-admin": "^0.7.2",
|
|
38
|
+
"@live-change/db-client": "^0.7.2",
|
|
39
|
+
"@live-change/db-store-level": "^0.7.2",
|
|
40
|
+
"@live-change/db-store-lmdb": "^0.7.2",
|
|
41
|
+
"@live-change/db-store-observable-db": "^0.7.2",
|
|
42
|
+
"@live-change/db-store-rbtree": "^0.7.2",
|
|
42
43
|
"@live-change/sockjs": "0.4.1",
|
|
43
44
|
"express": "^4.18.2",
|
|
44
45
|
"line-reader": "^0.4.0",
|
|
45
46
|
"node-interval-tree": "^1.3.3",
|
|
46
47
|
"os-service": "^2.2.0",
|
|
47
|
-
"rimraf": "^
|
|
48
|
-
"rimraf-promise": "^2.0.0",
|
|
48
|
+
"rimraf": "^5.0.5",
|
|
49
49
|
"websocket": "^1.0.34",
|
|
50
|
-
"yargs": "^17.
|
|
50
|
+
"yargs": "^17.7.2"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "36d5b8a4430d82526b8b63290c44209e6187da96"
|
|
53
53
|
}
|
package/tests/getServer.js
CHANGED
|
@@ -1,28 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { rimrafSync } from 'rimraf'
|
|
2
|
+
import fs from 'fs'
|
|
3
|
+
import Server from '../lib/Server.js'
|
|
4
|
+
import ReactiveDao from '@live-change/dao'
|
|
5
5
|
|
|
6
|
-
serverPromise =
|
|
7
|
-
rimraf.sync('test.db')
|
|
8
|
-
await fs.promises.mkdir('test.db')
|
|
9
|
-
const server = new Server({
|
|
10
|
-
backend: process.env.DB_BACKEND || 'lmdb',
|
|
11
|
-
dbRoot: 'test.db'
|
|
12
|
-
})
|
|
13
|
-
await server.initialize()
|
|
14
|
-
server.connect = (sessionId, delay = 50) => new Promise((resolve, reject) => {
|
|
15
|
-
const client = new ReactiveDao.LoopbackConnection(sessionId, server.apiServer, {
|
|
16
|
-
onConnect: () => resolve(client),
|
|
17
|
-
delay
|
|
18
|
-
})
|
|
19
|
-
})
|
|
20
|
-
return server
|
|
21
|
-
})()
|
|
6
|
+
let serverPromise = null
|
|
22
7
|
|
|
23
8
|
process.on('unhandledRejection', (reason, p) => {
|
|
24
9
|
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
|
25
10
|
// application specific logging, throwing an error, or other logic here
|
|
26
11
|
})
|
|
27
12
|
|
|
28
|
-
|
|
13
|
+
export default function getServer() {
|
|
14
|
+
if(serverPromise) return serverPromise
|
|
15
|
+
serverPromise = (async () => {
|
|
16
|
+
rimrafSync('test.db')
|
|
17
|
+
await fs.promises.mkdir('test.db')
|
|
18
|
+
const server = new Server({
|
|
19
|
+
backend: process.env.DB_BACKEND || 'lmdb',
|
|
20
|
+
dbRoot: 'test.db'
|
|
21
|
+
})
|
|
22
|
+
await server.initialize()
|
|
23
|
+
server.connect = (sessionId, delay = 50) => new Promise((resolve, reject) => {
|
|
24
|
+
const client = new ReactiveDao.LoopbackConnection(sessionId, server.apiServer, {
|
|
25
|
+
onConnect: () => resolve(client),
|
|
26
|
+
delay
|
|
27
|
+
})
|
|
28
|
+
})
|
|
29
|
+
return server
|
|
30
|
+
})()
|
|
31
|
+
return serverPromise
|
|
32
|
+
}
|
package/tests/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import getServer from './getServer.js'
|
|
2
3
|
|
|
3
4
|
let users = [
|
|
4
5
|
{ id: '1', name: 'david' },
|
|
@@ -33,7 +34,7 @@ test("index", t => {
|
|
|
33
34
|
|
|
34
35
|
t.test('connect to server and create database', async t => {
|
|
35
36
|
t.plan(1)
|
|
36
|
-
server = await
|
|
37
|
+
server = await getServer()
|
|
37
38
|
client = await server.connect(1)
|
|
38
39
|
await client.request(['database', 'createDatabase'], 'index.test')
|
|
39
40
|
t.pass('opened')
|