@live-change/db-store-level 0.6.22 → 0.7.0
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/index.js +2 -1
- package/lib/Store.js +4 -3
- package/package.json +6 -5
- package/tests/limited-range-observable.js +41 -34
- package/tests/limited-reverse-range-observable.js +40 -34
- package/tests/object-observable.js +8 -10
- package/tests/range-observable.js +39 -31
- package/tests/reverse-range-observable.js +38 -31
- package/tests/store-non-reactive.js +47 -42
- package/yarn-error.log +7140 -0
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import levelup from 'levelup'
|
|
3
|
+
import leveldown from 'leveldown'
|
|
4
|
+
import encoding from 'encoding-down'
|
|
5
|
+
import { rimraf } from 'rimraf'
|
|
6
|
+
|
|
7
|
+
import Store from '../lib/Store.js'
|
|
8
|
+
|
|
9
|
+
import PQueue from 'p-queue'
|
|
10
|
+
const testQueue = new PQueue({ concurrency: 1 })
|
|
11
|
+
function queued(fn) {
|
|
12
|
+
return async t => {
|
|
13
|
+
return await testQueue.add(() => fn(t))
|
|
14
|
+
}
|
|
15
|
+
}
|
|
8
16
|
|
|
9
17
|
const dbPath = `./test.rro.db`
|
|
10
18
|
rimraf.sync(dbPath)
|
|
@@ -51,39 +59,40 @@ test("store range observable", t => {
|
|
|
51
59
|
let values = await getNextValue()
|
|
52
60
|
t.deepEqual(values, [ { v: 3, id: 'c' }, { v: 1, id: 'a' } ], 'range value' )
|
|
53
61
|
|
|
54
|
-
t.test("remove object 'a' from observed range", async t => {
|
|
62
|
+
t.test("remove object 'a' from observed range", queued(async t => {
|
|
55
63
|
t.plan(1)
|
|
56
64
|
await store.delete('a')
|
|
57
65
|
let values = await getNextValue()
|
|
58
66
|
t.deepEqual(values, [ { v: 3, id: 'c' } ], 'range value' )
|
|
59
|
-
})
|
|
67
|
+
}))
|
|
60
68
|
|
|
61
|
-
t.test("add object 'a' to observed range", async t => {
|
|
69
|
+
t.test("add object 'a' to observed range", queued(async t => {
|
|
62
70
|
t.plan(1)
|
|
63
71
|
await store.put({ id: 'a', v: 4 })
|
|
64
72
|
let values = await getNextValue()
|
|
65
73
|
t.deepEqual(values, [ { v: 3, id: 'c' }, { v: 4, id: 'a' } ], 'range value' )
|
|
66
|
-
})
|
|
74
|
+
}))
|
|
67
75
|
|
|
68
|
-
t.test("add object 'b' to observed range", async t => {
|
|
76
|
+
t.test("add object 'b' to observed range", queued(async t => {
|
|
69
77
|
t.plan(1)
|
|
70
78
|
await store.put({ id: 'b', v: 5 })
|
|
71
79
|
let values = await getNextValue()
|
|
72
80
|
t.deepEqual(values, [ { v: 3, id: 'c' }, { v: 5, id: 'b' }, { v: 4, id: 'a' } ], 'range value' )
|
|
73
|
-
})
|
|
81
|
+
}))
|
|
74
82
|
|
|
75
|
-
t.test("add object 'd' to observed range", async t => {
|
|
83
|
+
t.test("add object 'd' to observed range", queued(async t => {
|
|
76
84
|
t.plan(1)
|
|
77
85
|
await store.put({ id: 'd', v: 6 })
|
|
78
86
|
let values = await getNextValue()
|
|
79
87
|
t.deepEqual(values, [ { v: 6, id: 'd' }, { v: 3, id: 'c' }, { v: 5, id: 'b' }, { v: 4, id: 'a' } ], 'range value' )
|
|
80
|
-
})
|
|
88
|
+
}))
|
|
81
89
|
|
|
82
|
-
t.test("unobserve range", async t => {
|
|
90
|
+
t.test("unobserve range", queued(async t => {
|
|
83
91
|
t.plan(1)
|
|
84
92
|
rangeObservable.unobserve(rangeObserver)
|
|
85
93
|
t.pass('unobserved')
|
|
86
|
-
})
|
|
94
|
+
}))
|
|
95
|
+
|
|
87
96
|
})
|
|
88
97
|
|
|
89
98
|
t.test("observe reverse range (d, a)", async t => {
|
|
@@ -93,45 +102,43 @@ test("store range observable", t => {
|
|
|
93
102
|
let values = await getNextValue()
|
|
94
103
|
t.deepEqual(values, [ { v: 3, id: 'c' }, { v: 5, id: 'b' } ], 'range value' )
|
|
95
104
|
|
|
96
|
-
t.test("remove object 'd' outside observed range", async t => {
|
|
105
|
+
t.test("remove object 'd' outside observed range", queued(async t => {
|
|
97
106
|
t.plan(1)
|
|
98
107
|
await store.delete('d')
|
|
99
108
|
t.pass('deleted')
|
|
100
|
-
})
|
|
109
|
+
}))
|
|
101
110
|
|
|
102
|
-
t.test("remove object 'a' outside observed range", async t => {
|
|
111
|
+
t.test("remove object 'a' outside observed range", queued(async t => {
|
|
103
112
|
t.plan(1)
|
|
104
113
|
await store.delete('a')
|
|
105
114
|
t.pass('deleted')
|
|
106
|
-
})
|
|
115
|
+
}))
|
|
107
116
|
|
|
108
|
-
t.test("add object 'ab' to observed range", async t => {
|
|
117
|
+
t.test("add object 'ab' to observed range", queued(async t => {
|
|
109
118
|
t.plan(1)
|
|
110
119
|
await store.put({ id: 'ab', v: 7 })
|
|
111
120
|
let values = await getNextValue()
|
|
112
121
|
t.deepEqual(values, [ { v: 3, id: 'c' }, { v: 5, id: 'b' }, { v: 7, id: 'ab' } ], 'range value' )
|
|
113
|
-
})
|
|
122
|
+
}))
|
|
114
123
|
|
|
115
|
-
t.test("remove object 'ab' from observed range", async t => {
|
|
124
|
+
t.test("remove object 'ab' from observed range", queued(async t => {
|
|
116
125
|
t.plan(1)
|
|
117
126
|
await store.delete('ab')
|
|
118
127
|
let values = await getNextValue()
|
|
119
128
|
t.deepEqual(values, [ { v: 3, id: 'c' }, { v: 5, id: 'b' } ], 'range value' )
|
|
120
|
-
})
|
|
129
|
+
}))
|
|
121
130
|
|
|
122
|
-
t.test("unobserve range", async t => {
|
|
131
|
+
t.test("unobserve range", queued(async t => {
|
|
123
132
|
t.plan(1)
|
|
124
133
|
rangeObservable.unobserve(rangeObserver)
|
|
125
134
|
t.pass('unobserved')
|
|
126
|
-
})
|
|
135
|
+
}))
|
|
127
136
|
})
|
|
128
137
|
|
|
129
138
|
t.test("close and remove database", async t => {
|
|
130
139
|
t.plan(1)
|
|
131
140
|
await level.close()
|
|
132
|
-
rimraf(dbPath
|
|
133
|
-
|
|
134
|
-
t.pass('removed')
|
|
135
|
-
})
|
|
141
|
+
await rimraf(dbPath)
|
|
142
|
+
t.pass('removed')
|
|
136
143
|
})
|
|
137
144
|
})
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import test from 'tape'
|
|
2
|
+
import levelup from 'levelup'
|
|
3
|
+
import leveldown from 'leveldown'
|
|
4
|
+
import encoding from 'encoding-down'
|
|
5
|
+
import { rimraf } from 'rimraf'
|
|
6
|
+
|
|
7
|
+
import Store from '../lib/Store.js'
|
|
8
|
+
|
|
9
|
+
import PQueue from 'p-queue'
|
|
10
|
+
const testQueue = new PQueue({ concurrency: 1 })
|
|
11
|
+
function queued(fn) {
|
|
12
|
+
return async t => {
|
|
13
|
+
return await testQueue.add(() => fn(t))
|
|
14
|
+
}
|
|
15
|
+
}
|
|
8
16
|
|
|
9
17
|
const dbPath = `./test.nr.db`
|
|
10
18
|
rimraf.sync(dbPath)
|
|
@@ -24,105 +32,102 @@ test("store non-reactive properties", t => {
|
|
|
24
32
|
t.test("non reactive operations", async t => {
|
|
25
33
|
t.plan(15)
|
|
26
34
|
|
|
27
|
-
t.test("put value", async t => {
|
|
35
|
+
t.test("put value", queued(async t => {
|
|
28
36
|
t.plan(1)
|
|
29
37
|
await store.put({ id:'a', v: 1 })
|
|
30
38
|
t.pass('value written')
|
|
31
|
-
})
|
|
39
|
+
}))
|
|
32
40
|
|
|
33
|
-
t.test("get value", async t => {
|
|
41
|
+
t.test("get value", queued(async t => {
|
|
34
42
|
t.plan(1)
|
|
35
43
|
const v = await store.objectGet('a')
|
|
36
44
|
t.deepEqual(v, { v: 1, id: 'a' }, 'value read')
|
|
37
|
-
})
|
|
38
|
-
|
|
45
|
+
}))
|
|
39
46
|
|
|
40
|
-
t.test("put another values", async t => {
|
|
47
|
+
t.test("put another values", queued(async t => {
|
|
41
48
|
t.plan(1)
|
|
42
49
|
await store.put({ id: 'c', v: 3 })
|
|
43
50
|
await store.put({ id: 'b', v: 2 })
|
|
44
51
|
t.pass('values written')
|
|
45
|
-
})
|
|
52
|
+
}))
|
|
46
53
|
|
|
47
|
-
t.test("get range [a,c]", async t => {
|
|
54
|
+
t.test("get range [a,c]", queued(async t => {
|
|
48
55
|
t.plan(1)
|
|
49
56
|
let values = await store.rangeGet({ gte: 'a', lte: 'c' })
|
|
50
57
|
t.deepEqual(values, [ { v: 1, id: 'a' }, { v: 2, id: 'b' }, { v: 3, id: 'c' } ], 'range read' )
|
|
51
|
-
})
|
|
58
|
+
}))
|
|
52
59
|
|
|
53
|
-
t.test("get reverse range [c,a]", async t => {
|
|
60
|
+
t.test("get reverse range [c,a]", queued(async t => {
|
|
54
61
|
t.plan(1)
|
|
55
62
|
let values = await store.rangeGet({ gte: 'a', lte: 'c', reverse: true })
|
|
56
63
|
t.deepEqual(values, [ { v: 3, id: 'c' }, { v: 2, id: 'b' }, { v: 1, id: 'a' } ], 'range read' )
|
|
57
|
-
})
|
|
64
|
+
}))
|
|
58
65
|
|
|
59
|
-
t.test("get range [a,c] with limit 2", async t => {
|
|
66
|
+
t.test("get range [a,c] with limit 2", queued(async t => {
|
|
60
67
|
t.plan(1)
|
|
61
68
|
let values = await store.rangeGet({ gte: 'a', lte: 'c', limit: 2 })
|
|
62
69
|
t.deepEqual(values, [ { v: 1, id: 'a' }, { v: 2, id: 'b' } ], 'range read' )
|
|
63
|
-
})
|
|
70
|
+
}))
|
|
64
71
|
|
|
65
|
-
t.test("get reverse range [c,a] with limit 2", async t => {
|
|
72
|
+
t.test("get reverse range [c,a] with limit 2", queued(async t => {
|
|
66
73
|
t.plan(1)
|
|
67
74
|
let values = await store.rangeGet({ gte: 'a', lte: 'c', reverse: true, limit: 2 })
|
|
68
75
|
t.deepEqual(values, [ { v: 3, id: 'c' }, { v: 2, id: 'b' } ], 'range read' )
|
|
69
|
-
})
|
|
76
|
+
}))
|
|
70
77
|
|
|
71
|
-
t.test("get range (a,c]", async t => {
|
|
78
|
+
t.test("get range (a,c]", queued(async t => {
|
|
72
79
|
t.plan(1)
|
|
73
80
|
let values = await store.rangeGet({ gt: 'a', lte: 'c' })
|
|
74
81
|
t.deepEqual(values, [ { v: 2, id: 'b' }, { v: 3, id: 'c' } ], 'range read' )
|
|
75
|
-
})
|
|
82
|
+
}))
|
|
76
83
|
|
|
77
|
-
t.test("get reverse range [c,a)", async t => {
|
|
84
|
+
t.test("get reverse range [c,a)", queued(async t => {
|
|
78
85
|
t.plan(1)
|
|
79
86
|
let values = await store.rangeGet({ gt: 'a', lte: 'c', reverse: true })
|
|
80
87
|
t.deepEqual(values, [ { v: 3, id: 'c' }, { v: 2, id: 'b' }, ], 'range read' )
|
|
81
|
-
})
|
|
88
|
+
}))
|
|
82
89
|
|
|
83
|
-
t.test("get range [a,c)", async t => {
|
|
90
|
+
t.test("get range [a,c)", queued(async t => {
|
|
84
91
|
t.plan(1)
|
|
85
92
|
let values = await store.rangeGet({ gte: 'a', lt: 'c' })
|
|
86
93
|
t.deepEqual(values, [ { v: 1, id: 'a' }, { v: 2, id: 'b' } ], 'range read' )
|
|
87
|
-
})
|
|
94
|
+
}))
|
|
88
95
|
|
|
89
|
-
t.test("get reverse range (c,a]", async t => {
|
|
96
|
+
t.test("get reverse range (c,a]", queued(async t => {
|
|
90
97
|
t.plan(1)
|
|
91
98
|
let values = await store.rangeGet({ gte: 'a', lt: 'c', reverse: true })
|
|
92
99
|
t.deepEqual(values, [ { v: 2, id: 'b' }, { v: 1, id: 'a' } ], 'range read' )
|
|
93
|
-
})
|
|
100
|
+
}))
|
|
94
101
|
|
|
95
|
-
t.test("get range (a,c)", async t => {
|
|
102
|
+
t.test("get range (a,c)", queued(async t => {
|
|
96
103
|
t.plan(1)
|
|
97
104
|
let values = await store.rangeGet({ gt: 'a', lt: 'c' })
|
|
98
105
|
t.deepEqual(values, [ { v: 2, id: 'b' } ], 'range read' )
|
|
99
|
-
})
|
|
106
|
+
}))
|
|
100
107
|
|
|
101
|
-
t.test("get reverse range (a,c)", async t => {
|
|
108
|
+
t.test("get reverse range (a,c)", queued(async t => {
|
|
102
109
|
t.plan(1)
|
|
103
110
|
let values = await store.rangeGet({ gt: 'a', lt: 'c', reverse: true })
|
|
104
111
|
t.deepEqual(values, [ { v: 2, id: 'b' } ], 'range read' )
|
|
105
|
-
})
|
|
112
|
+
}))
|
|
106
113
|
|
|
107
|
-
t.test("remove 'b'", async t => {
|
|
114
|
+
t.test("remove 'b'", queued(async t => {
|
|
108
115
|
t.plan(1)
|
|
109
116
|
await store.delete('b')
|
|
110
117
|
t.pass("removed")
|
|
111
|
-
})
|
|
118
|
+
}))
|
|
112
119
|
|
|
113
|
-
t.test("get range [a,c]", async t => {
|
|
120
|
+
t.test("get range [a,c]", queued(async t => {
|
|
114
121
|
t.plan(1)
|
|
115
122
|
let values = await store.rangeGet({ gte: 'a', lte: 'c' })
|
|
116
123
|
t.deepEqual(values, [ { v: 1, id: 'a' }, { v: 3, id: 'c' } ], 'range read' )
|
|
117
|
-
})
|
|
124
|
+
}))
|
|
118
125
|
})
|
|
119
126
|
|
|
120
127
|
t.test("close and remove database", async t => {
|
|
121
128
|
t.plan(1)
|
|
122
129
|
await level.close()
|
|
123
|
-
rimraf(dbPath
|
|
124
|
-
|
|
125
|
-
t.pass('removed')
|
|
126
|
-
})
|
|
130
|
+
await rimraf(dbPath)
|
|
131
|
+
t.pass('removed')
|
|
127
132
|
})
|
|
128
133
|
})
|