@live-change/db 0.9.62 → 0.9.63

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.
@@ -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
 
@@ -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.62",
3
+ "version": "0.9.63",
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.62",
26
- "@live-change/db-store-lmdb": "^0.9.62",
25
+ "@live-change/db-store-level": "^0.9.63",
26
+ "@live-change/db-store-lmdb": "^0.9.63",
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.62",
35
+ "@live-change/dao": "^0.9.63",
36
36
  "get-random-values": "^1.2.2",
37
37
  "node-interval-tree": "^1.3.3"
38
38
  },
39
- "gitHead": "b1b605b7f1fa4fc3de4720afbb401e2cfff080cf"
39
+ "gitHead": "89b9647aeaff9fc66add1f07d225fe4f44d91a39"
40
40
  }