@fireproof/core 0.3.2 → 0.3.3

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.
Files changed (51) hide show
  1. package/README.md +1 -1
  2. package/dist/src/blockstore.d.ts +115 -0
  3. package/dist/src/blockstore.d.ts.map +1 -0
  4. package/dist/src/clock.d.ts +98 -0
  5. package/dist/src/clock.d.ts.map +1 -0
  6. package/dist/src/crypto.d.ts +18 -0
  7. package/dist/src/crypto.d.ts.map +1 -0
  8. package/dist/src/db-index.d.ts +116 -0
  9. package/dist/src/db-index.d.ts.map +1 -0
  10. package/dist/src/fireproof.d.ts +167 -0
  11. package/dist/src/fireproof.d.ts.map +1 -0
  12. package/dist/src/hydrator.d.ts +6 -0
  13. package/dist/src/hydrator.d.ts.map +1 -0
  14. package/dist/src/index.d.ts +6 -0
  15. package/dist/src/index.d.ts.map +1 -0
  16. package/dist/src/listener.d.ts +36 -0
  17. package/dist/src/listener.d.ts.map +1 -0
  18. package/dist/src/prolly.d.ts +83 -0
  19. package/dist/src/prolly.d.ts.map +1 -0
  20. package/dist/src/sha1.d.ts +9 -0
  21. package/dist/src/sha1.d.ts.map +1 -0
  22. package/dist/src/valet.d.ts +34 -0
  23. package/dist/src/valet.d.ts.map +1 -0
  24. package/dist/tsconfig.tsbuildinfo +1 -0
  25. package/package.json +33 -3
  26. package/src/blockstore.js +3 -2
  27. package/src/clock.js +4 -3
  28. package/src/crypto.js +1 -0
  29. package/src/db-index.js +10 -5
  30. package/src/fireproof.js +15 -10
  31. package/src/hydrator.js +3 -3
  32. package/src/index.js +6 -0
  33. package/src/listener.js +2 -1
  34. package/src/prolly.js +11 -24
  35. package/src/sha1.js +2 -1
  36. package/src/valet.js +7 -5
  37. package/hooks/use-fireproof.js +0 -135
  38. package/index.js +0 -6
  39. package/scripts/keygen.js +0 -3
  40. package/test/block.js +0 -65
  41. package/test/clock.test.js +0 -694
  42. package/test/db-index.test.js +0 -261
  43. package/test/fireproof.test.js +0 -493
  44. package/test/fulltext.test.js +0 -66
  45. package/test/helpers.js +0 -45
  46. package/test/hydrator.test.js +0 -81
  47. package/test/listener.test.js +0 -102
  48. package/test/prolly.test.js +0 -190
  49. package/test/proofs.test.js +0 -53
  50. package/test/reproduce-fixture-bug.test.js +0 -65
  51. package/test/valet.test.js +0 -59
@@ -1,261 +0,0 @@
1
- import { describe, it, beforeEach } from 'mocha'
2
- import assert from 'node:assert'
3
- import Blockstore from '../src/blockstore.js'
4
- import Fireproof from '../src/fireproof.js'
5
- import DbIndex from '../src/db-index.js'
6
- import Hydrator from '../src/hydrator.js'
7
- console.x = function () {}
8
-
9
- describe('DbIndex query', () => {
10
- let database, index
11
- beforeEach(async () => {
12
- database = Fireproof.storage()
13
- const docs = [
14
- { _id: 'a1s3b32a-3c3a-4b5e-9c1c-8c5c0c5c0c5c', name: 'alice', age: 40 },
15
- { _id: 'b2s3b32a-3c3a-4b5e-9c1c-8c5c0c5c0c5c', name: 'bob', age: 40 },
16
- { _id: 'c3s3b32a-3c3a-4b5e-9c1c-8c5c0c5c0c5c', name: 'carol', age: 43 },
17
- { _id: 'd4s3b32a-3c3a-4b5e-9c1c-8c5c0c5c0c5c', name: 'dave', age: 48 },
18
- { _id: 'e4s3b32a-3c3a-4b5e-9c1c-8c5c0c5c0c5c', name: 'emily', age: 4 },
19
- { _id: 'f4s3b32a-3c3a-4b5e-9c1c-8c5c0c5c0c5c', name: 'frank', age: 7 }
20
- ]
21
- for (const doc of docs) {
22
- const id = doc._id
23
- const response = await database.put(doc)
24
- assert(response)
25
- assert(response.id, 'should have id')
26
- assert.equal(response.id, id)
27
- }
28
- index = new DbIndex(database, function (doc, map) {
29
- map(doc.age, doc.name)
30
- }, null, { name: 'namesByAge' })
31
- })
32
- it('has a name', () => {
33
- assert.equal(index.name, 'namesByAge')
34
- })
35
- it('query index range', async () => {
36
- const result = await index.query({ range: [41, 49] })
37
- assert(result, 'did return result')
38
- assert(result.rows)
39
- assert.equal(result.rows.length, 2, 'two row matched')
40
- assert.equal(result.rows[0].key, 43)
41
- assert(result.rows[0].value === 'carol', 'correct value')
42
- })
43
- it('query exact key', async () => {
44
- let result = await index.query({ range: [41, 44] })
45
- assert(result.rows[0].key === 43, 'correct key')
46
- result = await index.query({ key: 43 })
47
- assert(result, 'did return result')
48
- assert(result.rows)
49
- assert.equal(result.rows.length, 1, 'one row matched')
50
- assert.equal(result.rows[0].key, 43)
51
- assert(result.rows[0].value === 'carol', 'correct value')
52
- })
53
- it('query index all', async () => {
54
- const result = await index.query()
55
- assert(result, 'did return result')
56
- assert(result.rows)
57
- assert.equal(result.rows.length, 6, 'six row matched')
58
- assert.equal(result.rows[0].key, 4)
59
- assert.equal(result.rows[0].value, 'emily')
60
- assert.equal(result.rows[result.rows.length - 1].value, 'dave')
61
- })
62
- it('query index limit', async () => {
63
- const result = await index.query({ limit: 3 })
64
- assert(result, 'did return result')
65
- assert(result.rows)
66
- assert.equal(result.rows.length, 3, 'six row matched')
67
- assert.equal(result.rows[0].key, 4)
68
- assert.equal(result.rows[0].value, 'emily')
69
- })
70
- it('query index NaN', async () => {
71
- const result = await index.query({ range: [NaN, 44] })
72
- assert(result, 'did return result')
73
- assert(result.rows)
74
- assert.equal(result.rows.length, 5, 'six row matched')
75
- assert.equal(result.rows[0].key, 4)
76
- assert.equal(result.rows[0].value, 'emily')
77
- assert.equal(result.rows[result.rows.length - 1].value, 'carol')
78
- })
79
- it('query index Infinity', async () => {
80
- const result = await index.query({ range: [42, Infinity] })
81
- assert(result, 'did return result')
82
- assert(result.rows)
83
- assert.equal(result.rows.length, 2, 'six row matched')
84
- assert.equal(result.rows[0].key, 43)
85
- assert.equal(result.rows[0].value, 'carol')
86
- assert.equal(result.rows[result.rows.length - 1].value, 'dave')
87
- })
88
- it('query twice', async () => {
89
- let result = await index.query({ range: [41, 44] })
90
- assert(result, 'did return result')
91
- assert(result.rows)
92
- assert.equal(result.rows.length, 1, 'one row matched')
93
- result = await index.query({ range: [41, 44] })
94
- assert(result.rows[0].key === 43, 'correct key')
95
- assert(result.rows[0].value === 'carol', 'correct value')
96
- })
97
- it('query two rows oops', async () => {
98
- const result = await index.query({ range: [39, 41] })
99
- assert(result, 'did return result')
100
- assert(result.rows)
101
- assert.equal(result.rows[0].key, 40, 'correct key') // TODO fix this is currently collating as strings - use gson?
102
- assert.equal(result.rows.length, 2, '2 row matched')
103
- assert(result.rows[0].value === 'alice', 'correct value')
104
- })
105
- it('query two rows easy', async () => {
106
- const result = await index.query({ range: [40, 41] })
107
- assert(result, 'did return result')
108
- assert(result.rows)
109
- assert.equal(result.rows.length, 2, '2 row matched')
110
- assert(result.rows[0].key === 40, 'correct key')
111
- assert(result.rows[0].value === 'alice', 'correct value')
112
- })
113
- it('update index', async () => {
114
- const bresult = await index.query({ range: [2, 90] })
115
- assert(bresult, 'did return bresult')
116
- // console.x('bresult.rows', bresult.rows)
117
- assert.equal(bresult.rows.length, 6, 'all row matched')
118
-
119
- const snapClock = database.clock
120
-
121
- const notYet = await database.get('xxxx-3c3a-4b5e-9c1c-8c5c0c5c0c5c').catch((e) => e)
122
- assert.equal(notYet.message, 'Not found', 'not yet there')
123
- console.x('initial Xander 53', notYet)
124
- const response = await database.put({ _id: 'xxxx-3c3a-4b5e-9c1c-8c5c0c5c0c5c', name: 'Xander', age: 53 })
125
- assert(response)
126
- assert(response.id, 'should have id')
127
-
128
- const gotX = await database.get(response.id)
129
- assert(gotX)
130
- assert(gotX.name === 'Xander', 'got Xander')
131
- console.x('got X')
132
-
133
- const snap = Hydrator.snapshot(database, snapClock)
134
-
135
- const aliceOld = await snap.get('a1s3b32a-3c3a-4b5e-9c1c-8c5c0c5c0c5c')// .catch((e) => e)
136
- console.x('aliceOld', aliceOld)
137
- assert.equal(aliceOld.name, 'alice', 'alice old')
138
-
139
- const noX = await snap.get(response.id).catch((e) => e)
140
- assert.equal(noX.message, 'Not found', 'not yet there')
141
-
142
- const allresult = await index.query({ range: [2, 90] })
143
- assert.equal(allresult.rows.length, 7, 'all row matched')
144
-
145
- const result = await index.query({ range: [51, 54] })
146
- assert(result, 'did return result')
147
- assert(result.rows)
148
- assert.equal(result.rows.length, 1, '1 row matched')
149
- assert(result.rows[0].key === 53, 'correct key')
150
- })
151
- it('update index with document update to different key', async () => {
152
- await index.query({ range: [51, 54] })
153
-
154
- console.x('--- make Xander 53')
155
- const DOCID = 'xander-doc'
156
- const r1 = await database.put({ _id: DOCID, name: 'Xander', age: 53 })
157
- assert(r1.id, 'should have id')
158
-
159
- const result = await index.query({ range: [51, 54] })
160
- assert(result, 'did return result')
161
- assert(result.rows)
162
- console.x('result.rows', result.rows)
163
- assert.equal(result.rows.length, 1, '1 row matched')
164
- assert(result.rows[0].key === 53, 'correct key')
165
-
166
- const snap = Hydrator.snapshot(database)
167
-
168
- console.x('--- make Xander 63')
169
- const response = await database.put({ _id: DOCID, name: 'Xander', age: 63 })
170
- assert(response)
171
- assert(response.id, 'should have id')
172
-
173
- const oldXander = await snap.get(r1.id)
174
- assert.equal(oldXander.age, 53, 'old xander')
175
- // console.x('--- test snapshot', snap.clock)
176
-
177
- const newZander = await database.get(r1.id)
178
- assert.equal(newZander.age, 63, 'new xander')
179
-
180
- // console.x('--- test liveshot', database.clock)
181
-
182
- const result2 = await index.query({ range: [61, 64] })
183
- assert(result2, 'did return result')
184
- assert(result2.rows)
185
- assert.equal(result2.rows.length, 1, '1 row matched')
186
- assert(result2.rows[0].key === 63, 'correct key')
187
-
188
- const resultempty = await index.query({ range: [51, 54] })
189
- assert(resultempty, 'did return resultempty')
190
- assert(resultempty.rows)
191
- console.x('resultempty.rows', resultempty.rows)
192
- assert(resultempty.rows.length === 0, 'old Xander should be gone')
193
-
194
- const allresult = await index.query({ range: [2, 90] })
195
- console.x('allresult.rows', allresult.rows)
196
- // todo
197
- assert.equal(allresult.rows.length, 7, 'all row matched')
198
- })
199
- it('update index with document deletion', async () => {
200
- await index.query({ range: [51, 54] })
201
-
202
- console.x('--- make Xander 53')
203
- const DOCID = 'xxxx-3c3a-4b5e-9c1c-8c5c0c5c0c5c'
204
- const r1 = await database.put({ _id: DOCID, name: 'Xander', age: 53 })
205
- assert(r1.id, 'should have id')
206
-
207
- const result = await index.query({ range: [51, 54] })
208
- assert(result, 'did return result')
209
- assert(result.rows)
210
- console.x('result.rows', result.rows)
211
- assert.equal(result.rows.length, 1, '1 row matched')
212
- assert(result.rows[0].key === 53, 'correct key')
213
-
214
- const snap = Hydrator.snapshot(database)
215
-
216
- console.x('--- delete Xander 53')
217
- const response = await database.del(DOCID)
218
- assert(response)
219
- assert(response.id, 'should have id')
220
-
221
- const oldXander = await snap.get(r1.id)
222
- assert.equal(oldXander.age, 53, 'old xander')
223
- // console.x('--- test snapshot', snap.clock)
224
-
225
- const newZander = await database.get(r1.id).catch((e) => e)
226
- assert.equal(newZander.message, 'Not found', 'new xander')
227
- // console.x('--- test liveshot', database.clock)
228
-
229
- const allresult = await index.query({ range: [2, 90] })
230
- console.x('allresult.rows', allresult.rows)
231
- // todo
232
- assert.equal(allresult.rows.length, 6, 'all row matched')
233
-
234
- const result2 = await index.query({ range: [51, 54] })
235
- assert(result2, 'did return result')
236
- assert(result2.rows)
237
- assert.equal(result2.rows.length, 0, '0 row matched')
238
- })
239
- })
240
-
241
- describe('DbIndex query with bad index definition', () => {
242
- let database, index
243
- beforeEach(async () => {
244
- database = new Fireproof(new Blockstore(), []) // todo: these need a cloud name aka w3name, add this after we have cloud storage of blocks
245
- await database.put({ _id: 'a1s3b32a-3c3a-4b5e-9c1c-8c5c0c5c0c5c', name: 'alice', age: 40 })
246
- index = new DbIndex(database, function (doc, map) {
247
- map(doc.oops.missingField, doc.name)
248
- })
249
- })
250
- it('has a default name', () => {
251
- assert.equal(index.name, 'doc.oops.missingField, doc.name')
252
- })
253
- it('query index range', async () => {
254
- const oldErrFn = console.error
255
- console.error = () => {}
256
- await index.query({ range: [41, 44] }).catch((e) => {
257
- assert(/missingField/.test(e.message))
258
- console.error = oldErrFn
259
- })
260
- })
261
- })