@live-change/db 0.9.62 → 0.9.64
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/ChangeStream.js +23 -0
- package/lib/Index.js +9 -1
- package/lib/queryGet.js +12 -9
- package/lib/queryObservable.js +6 -0
- package/package.json +5 -5
package/lib/ChangeStream.js
CHANGED
|
@@ -16,6 +16,9 @@ class ChangeStream {
|
|
|
16
16
|
object(id) {
|
|
17
17
|
throw new Error("abstract method - not implemented")
|
|
18
18
|
}
|
|
19
|
+
async count(range = {}) {
|
|
20
|
+
throw new Error("abstract method - not implemented")
|
|
21
|
+
}
|
|
19
22
|
async to(output) {
|
|
20
23
|
return this.onChange(async (obj, oldObj, id, timestamp) => {
|
|
21
24
|
if(obj || oldObj) await output.change(obj, oldObj, id, timestamp)
|
|
@@ -113,6 +116,26 @@ class ChangeStream {
|
|
|
113
116
|
pipe.observerPromise = Promise.all([observerPromise, otherObserverPromise])
|
|
114
117
|
return pipe
|
|
115
118
|
}
|
|
119
|
+
groupExisting(objectToRange) {
|
|
120
|
+
const pipe = new ChangeStreamPipe()
|
|
121
|
+
const observerPromise = this.onChange(async (obj, oldObj, id, timestamp) => {
|
|
122
|
+
const existingObj = obj || oldObj
|
|
123
|
+
let range = await objectToRange(existingObj)
|
|
124
|
+
if(!range) return
|
|
125
|
+
if(typeof range === 'string') {
|
|
126
|
+
range = { gte: range, lte: range + '\xFF\xFF\xFF\xFF' }
|
|
127
|
+
}
|
|
128
|
+
const count = await this.count(range)
|
|
129
|
+
if(count) {
|
|
130
|
+
await pipe.change(existingObj, null, id, timestamp)
|
|
131
|
+
} else {
|
|
132
|
+
await pipe.change(null, existingObj, id, timestamp)
|
|
133
|
+
}
|
|
134
|
+
})
|
|
135
|
+
pipe.master = this
|
|
136
|
+
pipe.observerPromise = observerPromise
|
|
137
|
+
return pipe
|
|
138
|
+
}
|
|
116
139
|
}
|
|
117
140
|
|
|
118
141
|
class ChangeStreamPipe extends ChangeStream {
|
package/lib/Index.js
CHANGED
|
@@ -50,7 +50,9 @@ class ObjectReader extends ChangeStream {
|
|
|
50
50
|
async objectGet(id) {
|
|
51
51
|
return await (await this.tableReader.table).objectGet(id)
|
|
52
52
|
}
|
|
53
|
-
|
|
53
|
+
async count(range = {}) {
|
|
54
|
+
return await (await this.tableReader.table).countGet(rangeIntersection(unitRange(this.id), range))
|
|
55
|
+
}
|
|
54
56
|
dispose() {}
|
|
55
57
|
}
|
|
56
58
|
|
|
@@ -92,6 +94,9 @@ class RangeReader extends ChangeStream {
|
|
|
92
94
|
object(id) {
|
|
93
95
|
return new ObjectReader(this.tableReader, id)
|
|
94
96
|
}
|
|
97
|
+
async count(range = {}) {
|
|
98
|
+
return await (await this.tableReader.table).countGet(rangeIntersection(this.range, range))
|
|
99
|
+
}
|
|
95
100
|
}
|
|
96
101
|
|
|
97
102
|
class TableReader extends ChangeStream {
|
|
@@ -181,6 +186,9 @@ class TableReader extends ChangeStream {
|
|
|
181
186
|
async objectGet(id) {
|
|
182
187
|
return await (await this.table).objectGet(id)
|
|
183
188
|
}
|
|
189
|
+
async count(range = {}) {
|
|
190
|
+
return await (await this.table).count(rangeIntersection(this.range, range))
|
|
191
|
+
}
|
|
184
192
|
object(id) {
|
|
185
193
|
let reader = this.objectReaders.get(id)
|
|
186
194
|
if(!reader) {
|
package/lib/queryGet.js
CHANGED
|
@@ -28,6 +28,9 @@ class ObjectReader extends ChangeStream {
|
|
|
28
28
|
range(range) {
|
|
29
29
|
return new RangeReader(this.#table, rangeIntersection(unitRange(this.#id), range))
|
|
30
30
|
}
|
|
31
|
+
async count(range = {}) {
|
|
32
|
+
return await this.#table.countGet(rangeIntersection(unitRange(this.#id), range))
|
|
33
|
+
}
|
|
31
34
|
}
|
|
32
35
|
|
|
33
36
|
class RangeReader extends ChangeStream {
|
|
@@ -61,8 +64,11 @@ class RangeReader extends ChangeStream {
|
|
|
61
64
|
object(id) {
|
|
62
65
|
return new ObjectReader(this.#table, id, this.#time)
|
|
63
66
|
}
|
|
64
|
-
objectGet(id) {
|
|
65
|
-
return this.#table.objectGet(id)
|
|
67
|
+
async objectGet(id) {
|
|
68
|
+
return await (await this.#table).objectGet(id)
|
|
69
|
+
}
|
|
70
|
+
async count(range = {}) {
|
|
71
|
+
return await this.#table.countGet(rangeIntersection(this.#range, range))
|
|
66
72
|
}
|
|
67
73
|
}
|
|
68
74
|
|
|
@@ -92,7 +98,7 @@ class TableReader extends ChangeStream {
|
|
|
92
98
|
return results
|
|
93
99
|
}
|
|
94
100
|
unobserve(obs) {}
|
|
95
|
-
rangeGet(range) {
|
|
101
|
+
async rangeGet(range) {
|
|
96
102
|
return new RangeReader(this.#table, range, this.#time)
|
|
97
103
|
}
|
|
98
104
|
range(range) {
|
|
@@ -101,14 +107,11 @@ class TableReader extends ChangeStream {
|
|
|
101
107
|
object(id) {
|
|
102
108
|
return new ObjectReader(this.#table, id, this.#time)
|
|
103
109
|
}
|
|
104
|
-
objectGet(id) {
|
|
105
|
-
return this.#table.objectGet(id)
|
|
106
|
-
}
|
|
107
|
-
async get(range = {}) {
|
|
108
|
-
return (await this.#table).rangeGet(range)
|
|
110
|
+
async objectGet(id) {
|
|
111
|
+
return await (await this.#table).objectGet(id)
|
|
109
112
|
}
|
|
110
113
|
async count(range = {}) {
|
|
111
|
-
return (await this.#table).countGet(range)
|
|
114
|
+
return await (await this.#table).countGet(range)
|
|
112
115
|
}
|
|
113
116
|
}
|
|
114
117
|
|
package/lib/queryObservable.js
CHANGED
|
@@ -144,6 +144,9 @@ class ObjectReader extends Reader {
|
|
|
144
144
|
object(id) {
|
|
145
145
|
return this.#tableReader.object(id)
|
|
146
146
|
}
|
|
147
|
+
async count(range = {}) {
|
|
148
|
+
return await this.#table.count(rangeIntersection(unitRange(this.#id), range))
|
|
149
|
+
}
|
|
147
150
|
}
|
|
148
151
|
|
|
149
152
|
class RangeReader extends Reader {
|
|
@@ -175,6 +178,9 @@ class RangeReader extends Reader {
|
|
|
175
178
|
object(id) {
|
|
176
179
|
return this.#tableReader.object(id)
|
|
177
180
|
}
|
|
181
|
+
async count(range = {}) {
|
|
182
|
+
return await this.#table.count(rangeIntersection(this.#range, range))
|
|
183
|
+
}
|
|
178
184
|
}
|
|
179
185
|
|
|
180
186
|
class TableReader extends Reader {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@live-change/db",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.64",
|
|
4
4
|
"description": "Database with observable data for live queries",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"type": "module",
|
|
23
23
|
"homepage": "https://github.com/live-change/live-change-stack",
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@live-change/db-store-level": "^0.9.
|
|
26
|
-
"@live-change/db-store-lmdb": "^0.9.
|
|
25
|
+
"@live-change/db-store-level": "^0.9.64",
|
|
26
|
+
"@live-change/db-store-lmdb": "^0.9.64",
|
|
27
27
|
"minimist": ">=1.2.3",
|
|
28
28
|
"next-tick": "^1.1.0",
|
|
29
29
|
"rimraf": "^5.0.5",
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"websocket-extensions": ">=0.1.4"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@live-change/dao": "^0.9.
|
|
35
|
+
"@live-change/dao": "^0.9.64",
|
|
36
36
|
"get-random-values": "^1.2.2",
|
|
37
37
|
"node-interval-tree": "^1.3.3"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "902581d1d78ac5ee8c2c2ed7ccd9f8a8df6df2b0"
|
|
40
40
|
}
|