@mblaney/holster 1.0.35 → 1.0.36
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/build/holster.js +3 -3
- package/build/holster.js.map +3 -3
- package/dist/holster.js +4 -0
- package/dist/holster.js.map +7 -0
- package/package.json +23 -5
- package/src/get.js +6 -18
- package/src/ham.js +17 -47
- package/src/holster.js +106 -28
- package/src/sea.js +0 -52
- package/src/store.js +7 -7
- package/src/wire.js +7 -1
- package/ts/src/array.ts +78 -0
- package/ts/src/buffer.ts +441 -0
- package/ts/src/dup.ts +49 -0
- package/ts/src/get.ts +83 -0
- package/ts/src/ham.ts +254 -0
- package/ts/src/holster.ts +931 -0
- package/ts/src/index.ts +35 -0
- package/ts/src/radisk.ts +585 -0
- package/ts/src/radix.ts +157 -0
- package/ts/src/schemas.ts +519 -0
- package/ts/src/sea-utils.ts +103 -0
- package/ts/src/sea.ts +388 -0
- package/ts/src/store.ts +321 -0
- package/ts/src/user.ts +381 -0
- package/ts/src/utils.ts +232 -0
- package/ts/src/wire.ts +829 -0
- package/.dockerignore +0 -9
- package/.github/workflows/node.js.yml +0 -31
- package/.github/workflows/npm-publish.yml +0 -33
- package/Dockerfile +0 -20
- package/examples/index.html +0 -33
- package/examples/index.js +0 -49
- package/examples/user.html +0 -31
- package/examples/user.js +0 -93
- package/examples/wire.html +0 -27
- package/examples/wire.js +0 -55
- package/test/holster.get.test.js +0 -94
- package/test/holster.lex.test.js +0 -196
- package/test/holster.off.test.js +0 -53
- package/test/holster.on.test.js +0 -264
- package/test/holster.put.test.js +0 -358
- package/test/holster.secure.test.js +0 -202
- package/test/holster.user.get.test.js +0 -114
- package/test/holster.user.lex.test.js +0 -149
- package/test/holster.user.off.test.js +0 -73
- package/test/holster.user.on.test.js +0 -300
- package/test/holster.user.put.test.js +0 -463
- package/test/kitty/! +0 -9
- package/test/names.js +0 -225
- package/test/radisk.cache.test.js +0 -213
- package/test/radisk.test.js +0 -331
- package/test/radix.test.js +0 -117
- package/test/sea.test.js +0 -284
- package/test/split.test.js +0 -317
- package/test/store.test.js +0 -316
- package/test/system/basic.test.js +0 -29
- package/test/system/chained-on.test.js +0 -41
- package/test/system/concurrent-listeners.test.js +0 -125
- package/test/system/immediate-read.test.js +0 -30
- package/test/system/listener-before-data.test.js +0 -51
- package/test/system/promise-wrapper.test.js +0 -47
- package/test/system/user-chained-on.test.js +0 -60
- package/test/system/user-concurrent-listeners.test.js +0 -142
- package/test/system/user-listener-before-data.test.js +0 -66
- package/test/user.test.js +0 -173
- package/test/wire.test.js +0 -158
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import fs from "fs"
|
|
2
|
-
import {Server} from "mock-socket"
|
|
3
|
-
import {describe, test} from "node:test"
|
|
4
|
-
import assert from "node:assert/strict"
|
|
5
|
-
import Holster from "../src/holster.js"
|
|
6
|
-
|
|
7
|
-
describe("holster.user.on", () => {
|
|
8
|
-
const wss = new Server("ws://localhost:1234")
|
|
9
|
-
const holster = Holster({
|
|
10
|
-
file: "test/holster.user.on",
|
|
11
|
-
wss: wss,
|
|
12
|
-
maxAge: 100,
|
|
13
|
-
wait: 500,
|
|
14
|
-
})
|
|
15
|
-
const user = holster.user()
|
|
16
|
-
|
|
17
|
-
test("user create", (t, done) => {
|
|
18
|
-
user.create("alice", "password", err => {
|
|
19
|
-
assert.equal(err, null)
|
|
20
|
-
done()
|
|
21
|
-
})
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
test("user auth", (t, done) => {
|
|
25
|
-
user.auth("alice", "password", err => {
|
|
26
|
-
assert.equal(err, null)
|
|
27
|
-
done()
|
|
28
|
-
})
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
test("calling on without get callback null", (t, done) => {
|
|
32
|
-
user.on(data => {
|
|
33
|
-
assert.equal(data, null)
|
|
34
|
-
done()
|
|
35
|
-
})
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
test("on for property then update - event", (t, done) => {
|
|
39
|
-
// Listener is now called for initial put and updates
|
|
40
|
-
let callCount = 0
|
|
41
|
-
const callback = data => {
|
|
42
|
-
callCount++
|
|
43
|
-
if (callCount === 1) {
|
|
44
|
-
assert.equal(data, "value")
|
|
45
|
-
} else if (callCount === 2) {
|
|
46
|
-
assert.equal(data, "update")
|
|
47
|
-
user.get("key").off(callback)
|
|
48
|
-
done()
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
user.get("key").on(callback)
|
|
52
|
-
|
|
53
|
-
user.get("key").put("value", err => {
|
|
54
|
-
assert.equal(err, null)
|
|
55
|
-
|
|
56
|
-
user.get("key").put("update", err => {
|
|
57
|
-
assert.equal(err, null)
|
|
58
|
-
})
|
|
59
|
-
})
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
test("on for property then update - two listeners", (t, done) => {
|
|
63
|
-
let done1 = false
|
|
64
|
-
let done2 = false
|
|
65
|
-
|
|
66
|
-
let callback1Count = 0
|
|
67
|
-
const callback1 = data => {
|
|
68
|
-
callback1Count++
|
|
69
|
-
if (callback1Count === 2) {
|
|
70
|
-
assert.equal(data, "update")
|
|
71
|
-
user.get("two").off(callback1)
|
|
72
|
-
if (done2) done()
|
|
73
|
-
else done1 = true
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
user.get("two").on(callback1)
|
|
77
|
-
|
|
78
|
-
let callback2Count = 0
|
|
79
|
-
const callback2 = data => {
|
|
80
|
-
callback2Count++
|
|
81
|
-
if (callback2Count === 2) {
|
|
82
|
-
assert.equal(data, "update")
|
|
83
|
-
user.get("two").off(callback2)
|
|
84
|
-
if (done1) done()
|
|
85
|
-
else done2 = true
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
user.get("two").on(callback2)
|
|
89
|
-
|
|
90
|
-
user.get("two").put("value", err => {
|
|
91
|
-
assert.equal(err, null)
|
|
92
|
-
user.get("two").put("update", err => {
|
|
93
|
-
assert.equal(err, null)
|
|
94
|
-
})
|
|
95
|
-
})
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
test("on for different property - no event", (t, done) => {
|
|
99
|
-
user.get("key1").on(data => {
|
|
100
|
-
console.log("should not be called for key1:", data)
|
|
101
|
-
done() // This done is not called and test would fail if it was.
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
user.get("key2").put("value2", err => {
|
|
105
|
-
assert.equal(err, null)
|
|
106
|
-
done()
|
|
107
|
-
})
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
test("on for property two updates - two events", (t, done) => {
|
|
111
|
-
user.get("key3").put("value3", err => {
|
|
112
|
-
assert.equal(err, null)
|
|
113
|
-
|
|
114
|
-
let callCount = 0
|
|
115
|
-
const callback = data => {
|
|
116
|
-
callCount++
|
|
117
|
-
if (callCount === 1) {
|
|
118
|
-
assert.equal(data, "update1")
|
|
119
|
-
} else if (callCount === 2) {
|
|
120
|
-
assert.equal(data, "update2")
|
|
121
|
-
user.get("key3").off(callback)
|
|
122
|
-
done()
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
user.get("key3").on(callback)
|
|
126
|
-
|
|
127
|
-
user.get("key3").put("update1", err => {
|
|
128
|
-
assert.equal(err, null)
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
setTimeout(() => {
|
|
132
|
-
user.get("key3").put("update2", err => {
|
|
133
|
-
assert.equal(err, null)
|
|
134
|
-
})
|
|
135
|
-
}, 200)
|
|
136
|
-
})
|
|
137
|
-
})
|
|
138
|
-
|
|
139
|
-
test("on for properties in for loop", (t, done) => {
|
|
140
|
-
;(async () => {
|
|
141
|
-
for (let i = 0; i < 5; i++) {
|
|
142
|
-
user.get("for" + i).put(i, err => {
|
|
143
|
-
assert.equal(err, null)
|
|
144
|
-
})
|
|
145
|
-
}
|
|
146
|
-
})()
|
|
147
|
-
|
|
148
|
-
// Need to wait until after all initial puts are done to set on listeners.
|
|
149
|
-
setTimeout(async () => {
|
|
150
|
-
let count = 0
|
|
151
|
-
for (let i = 0; i < 5; i++) {
|
|
152
|
-
const idx = i // Capture value
|
|
153
|
-
const callback = data => {
|
|
154
|
-
// Listener fires for updates (initial puts already completed before listener setup)
|
|
155
|
-
assert.equal(data, "update" + idx)
|
|
156
|
-
user.get("for" + idx).off(callback)
|
|
157
|
-
count++
|
|
158
|
-
}
|
|
159
|
-
user.get("for" + idx).on(callback)
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
setTimeout(async () => {
|
|
163
|
-
for (let i = 0; i < 5; i++) {
|
|
164
|
-
user.get("for" + i).put("update" + i, err => {
|
|
165
|
-
assert.equal(err, null)
|
|
166
|
-
})
|
|
167
|
-
}
|
|
168
|
-
setTimeout(() => {
|
|
169
|
-
if (count === 5) done()
|
|
170
|
-
}, 500)
|
|
171
|
-
}, 500)
|
|
172
|
-
}, 1000)
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
test("on with get flag set - data returned", (t, done) => {
|
|
176
|
-
user.get("key4").put("value4", err => {
|
|
177
|
-
assert.equal(err, null)
|
|
178
|
-
|
|
179
|
-
setTimeout(() => {
|
|
180
|
-
const callback = data => {
|
|
181
|
-
assert.equal(data, "value4")
|
|
182
|
-
user.get("key4").off(callback)
|
|
183
|
-
done()
|
|
184
|
-
}
|
|
185
|
-
user.get("key4").on(callback, true)
|
|
186
|
-
}, 100)
|
|
187
|
-
})
|
|
188
|
-
})
|
|
189
|
-
|
|
190
|
-
test("chained next before on", (t, done) => {
|
|
191
|
-
// The node needs to exist before it can be listend to for updates.
|
|
192
|
-
user
|
|
193
|
-
.get("hello")
|
|
194
|
-
.next("world!")
|
|
195
|
-
.put("ok", err => {
|
|
196
|
-
assert.equal(err, null)
|
|
197
|
-
|
|
198
|
-
const callback = data => {
|
|
199
|
-
// Listener fires for updates (initial put already completed before listener setup)
|
|
200
|
-
assert.equal(data, "update")
|
|
201
|
-
user.get("hello").next("world!").off(callback)
|
|
202
|
-
done()
|
|
203
|
-
}
|
|
204
|
-
user.get("hello").next("world!").on(callback)
|
|
205
|
-
|
|
206
|
-
setTimeout(() => {
|
|
207
|
-
user
|
|
208
|
-
.get("hello")
|
|
209
|
-
.next("world!")
|
|
210
|
-
.put("update", err => {
|
|
211
|
-
assert.equal(err, null)
|
|
212
|
-
})
|
|
213
|
-
}, 10)
|
|
214
|
-
})
|
|
215
|
-
})
|
|
216
|
-
|
|
217
|
-
test("on and put object in graph format", (t, done) => {
|
|
218
|
-
const plain = {
|
|
219
|
-
key: "plain value",
|
|
220
|
-
number: 42,
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
user.get("plain").put(plain, err => {
|
|
224
|
-
assert.equal(err, null)
|
|
225
|
-
|
|
226
|
-
const update = {
|
|
227
|
-
key: "update",
|
|
228
|
-
number: 42,
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
const callback = data => {
|
|
232
|
-
// Listener fires for updates (initial put already completed before listener setup)
|
|
233
|
-
assert.deepEqual(data, update)
|
|
234
|
-
user.get("plain").off(callback)
|
|
235
|
-
done()
|
|
236
|
-
}
|
|
237
|
-
user.get("plain").on(callback)
|
|
238
|
-
|
|
239
|
-
setTimeout(() => {
|
|
240
|
-
user.get("plain").put(update, err => {
|
|
241
|
-
assert.equal(err, null)
|
|
242
|
-
})
|
|
243
|
-
}, 10)
|
|
244
|
-
})
|
|
245
|
-
})
|
|
246
|
-
|
|
247
|
-
test("on and put nested object", (t, done) => {
|
|
248
|
-
const nested = {
|
|
249
|
-
key: "nested key",
|
|
250
|
-
child: {
|
|
251
|
-
has: "child key",
|
|
252
|
-
},
|
|
253
|
-
}
|
|
254
|
-
// The node needs to exist before it can be listend to for updates.
|
|
255
|
-
user.get("nested").put(nested, err => {
|
|
256
|
-
assert.equal(err, null)
|
|
257
|
-
|
|
258
|
-
const update = {
|
|
259
|
-
key: "nested update",
|
|
260
|
-
child: {
|
|
261
|
-
has: "child update",
|
|
262
|
-
},
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
let parentFired = false
|
|
266
|
-
const parentCallback = data => {
|
|
267
|
-
// Listener fires for updates (initial put already completed before listener setup)
|
|
268
|
-
if (!parentFired) {
|
|
269
|
-
parentFired = true
|
|
270
|
-
assert.deepEqual(data, update)
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
user.get("nested").on(parentCallback)
|
|
274
|
-
|
|
275
|
-
const childCallback = data => {
|
|
276
|
-
// Listener fires for updates (initial put already completed before listener setup)
|
|
277
|
-
assert.deepEqual(data, update.child)
|
|
278
|
-
user.get("nested").off(parentCallback)
|
|
279
|
-
user.get("nested").next("child").off(childCallback)
|
|
280
|
-
done()
|
|
281
|
-
}
|
|
282
|
-
user.get("nested").next("child").on(childCallback)
|
|
283
|
-
|
|
284
|
-
setTimeout(() => {
|
|
285
|
-
user.get("nested").put(update, err => {
|
|
286
|
-
assert.equal(err, null)
|
|
287
|
-
})
|
|
288
|
-
}, 10)
|
|
289
|
-
})
|
|
290
|
-
})
|
|
291
|
-
|
|
292
|
-
test("cleanup", (t, done) => {
|
|
293
|
-
setTimeout(() => {
|
|
294
|
-
fs.rm("test/holster.user.on", {recursive: true, force: true}, err => {
|
|
295
|
-
assert.equal(err, null)
|
|
296
|
-
done()
|
|
297
|
-
})
|
|
298
|
-
}, 100)
|
|
299
|
-
})
|
|
300
|
-
})
|