@mblaney/holster 0.1.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.
Files changed (46) hide show
  1. package/.github/workflows/node.js.yml +31 -0
  2. package/LICENSE.md +55 -0
  3. package/README.md +24 -0
  4. package/build/holster.js +4 -0
  5. package/build/holster.js.map +7 -0
  6. package/examples/index.html +33 -0
  7. package/examples/index.js +49 -0
  8. package/examples/user.html +31 -0
  9. package/examples/user.js +88 -0
  10. package/examples/wire.html +27 -0
  11. package/examples/wire.js +55 -0
  12. package/package.json +44 -0
  13. package/src/array.js +34 -0
  14. package/src/buffer.js +83 -0
  15. package/src/dup.js +23 -0
  16. package/src/get.js +19 -0
  17. package/src/ham.js +151 -0
  18. package/src/holster.js +502 -0
  19. package/src/index.js +21 -0
  20. package/src/radisk.js +438 -0
  21. package/src/radix.js +106 -0
  22. package/src/sea-utils.js +65 -0
  23. package/src/sea.js +224 -0
  24. package/src/store.js +225 -0
  25. package/src/user.js +330 -0
  26. package/src/utils.js +124 -0
  27. package/src/wire.js +290 -0
  28. package/test/holster.get.test.js +60 -0
  29. package/test/holster.lex.test.js +196 -0
  30. package/test/holster.off.test.js +53 -0
  31. package/test/holster.on.test.js +168 -0
  32. package/test/holster.put.test.js +278 -0
  33. package/test/holster.secure.test.js +210 -0
  34. package/test/holster.user.get.test.js +86 -0
  35. package/test/holster.user.lex.test.js +148 -0
  36. package/test/holster.user.off.test.js +72 -0
  37. package/test/holster.user.on.test.js +185 -0
  38. package/test/holster.user.put.test.js +381 -0
  39. package/test/kitty/! +9 -0
  40. package/test/names.js +225 -0
  41. package/test/radisk.test.js +191 -0
  42. package/test/radix.test.js +117 -0
  43. package/test/sea.test.js +284 -0
  44. package/test/store.test.js +316 -0
  45. package/test/user.test.js +173 -0
  46. package/test/wire.test.js +159 -0
@@ -0,0 +1,381 @@
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.put", () => {
8
+ const wss = new Server("ws://localhost:1234")
9
+ const holster = Holster({
10
+ file: "test/holster.user.put",
11
+ wss: wss,
12
+ maxAge: 100,
13
+ })
14
+ const user = holster.user()
15
+ let alice = ""
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
+ assert.equal(user.is.username, "alice")
28
+ alice = user.is.pub
29
+ done()
30
+ })
31
+ })
32
+
33
+ test("put and get string", (t, done) => {
34
+ user.get("key").put("value", err => {
35
+ assert.equal(err, null)
36
+
37
+ user.get("key", data => {
38
+ assert.equal(data, "value")
39
+ done()
40
+ })
41
+ })
42
+ })
43
+
44
+ test("put value to null", (t, done) => {
45
+ user.get("key").put(null, err => {
46
+ assert.equal(err, null)
47
+
48
+ user.get("key", data => {
49
+ assert.equal(data, null)
50
+ done()
51
+ })
52
+ })
53
+ })
54
+
55
+ test("put and get true", (t, done) => {
56
+ user.get("true").put(true, err => {
57
+ assert.equal(err, null)
58
+
59
+ user.get("true", data => {
60
+ assert.equal(data, true)
61
+ done()
62
+ })
63
+ })
64
+ })
65
+
66
+ test("put and get false", (t, done) => {
67
+ user.get("false").put(false, err => {
68
+ assert.equal(err, null)
69
+
70
+ user.get("false", data => {
71
+ assert.equal(data, false)
72
+ done()
73
+ })
74
+ })
75
+ })
76
+
77
+ test("put and get number", (t, done) => {
78
+ user.get("pi").put(3.14159, err => {
79
+ assert.equal(err, null)
80
+
81
+ user.get("pi", data => {
82
+ assert.equal(data, 3.14159)
83
+ done()
84
+ })
85
+ })
86
+ })
87
+
88
+ test("chained get before put", (t, done) => {
89
+ user
90
+ .get("hello")
91
+ .next("world!")
92
+ .put("ok", err => {
93
+ assert.equal(err, null)
94
+
95
+ user.get("hello").next("world!", data => {
96
+ assert.equal(data, "ok")
97
+ done()
98
+ })
99
+ })
100
+ })
101
+
102
+ test("more chained gets before put", (t, done) => {
103
+ user
104
+ .get("1")
105
+ .next("2")
106
+ .next("3")
107
+ .put("4", err => {
108
+ assert.equal(err, null)
109
+
110
+ user
111
+ .get("1")
112
+ .next("2")
113
+ .next("3", data => {
114
+ assert.equal(data, "4")
115
+ done()
116
+ })
117
+ })
118
+ })
119
+
120
+ test("put and get object in graph format", (t, done) => {
121
+ const plain = {
122
+ key: "plain value",
123
+ true: true,
124
+ false: false,
125
+ number: 42,
126
+ }
127
+ user.get("plain").put(plain, err => {
128
+ assert.equal(err, null)
129
+
130
+ user.get("plain", data => {
131
+ assert.deepEqual(data, plain)
132
+ done()
133
+ })
134
+ })
135
+ })
136
+
137
+ test("put object to null", (t, done) => {
138
+ user.get("plain").put(null, err => {
139
+ assert.equal(err, null)
140
+
141
+ user.get("plain", data => {
142
+ assert.equal(data, null)
143
+ done()
144
+ })
145
+ })
146
+ })
147
+
148
+ test("chained get before put object in graph format", (t, done) => {
149
+ const plain = {
150
+ key: "hello plain value",
151
+ }
152
+ user
153
+ .get("hello")
154
+ .next("plain")
155
+ .put(plain, err => {
156
+ assert.equal(err, null)
157
+
158
+ user.get("hello").next("plain", data => {
159
+ assert.deepEqual(data, plain)
160
+ done()
161
+ })
162
+ })
163
+ })
164
+
165
+ test("put and get nested object", (t, done) => {
166
+ const nested = {
167
+ key: "nested value",
168
+ child: {
169
+ has: "child value",
170
+ },
171
+ }
172
+ user.get("nested").put(nested, err => {
173
+ assert.equal(err, null)
174
+
175
+ // Getting a nested object requires waiting for radisk to write to disk,
176
+ // as it will batch the writes. (Default wait is 1 millisecond.)
177
+ setTimeout(() => {
178
+ user.get("nested", data => {
179
+ assert.deepEqual(data, nested)
180
+
181
+ user.get("nested").next("key", data => {
182
+ assert.equal(data, "nested value")
183
+
184
+ user.get("nested").next("child", data => {
185
+ assert.deepEqual(data, {has: "child value"})
186
+ done()
187
+ })
188
+ })
189
+ })
190
+ }, 2)
191
+ })
192
+ })
193
+
194
+ test("chained get before put nested object", (t, done) => {
195
+ const nested = {
196
+ key: "hello nested value",
197
+ child: {
198
+ has: "hello child value",
199
+ },
200
+ }
201
+ user
202
+ .get("hello")
203
+ .next("nested")
204
+ .put(nested, err => {
205
+ assert.equal(err, null)
206
+
207
+ setTimeout(() => {
208
+ user.get("hello").next("nested", data => {
209
+ assert.deepEqual(data, nested)
210
+
211
+ user
212
+ .get("hello")
213
+ .next("nested")
214
+ .next("key", data => {
215
+ assert.equal(data, "hello nested value")
216
+
217
+ user
218
+ .get("hello")
219
+ .next("nested")
220
+ .next("child", data => {
221
+ assert.deepEqual(data, {has: "hello child value"})
222
+ done()
223
+ })
224
+ })
225
+ })
226
+ }, 2)
227
+ })
228
+ })
229
+
230
+ test("put and get two nested objects", (t, done) => {
231
+ const two = {
232
+ key: "two nested values",
233
+ child1: {
234
+ has: "child value 1",
235
+ },
236
+ child2: {
237
+ has: "child value 2",
238
+ },
239
+ }
240
+ user.get("two").put(two, err => {
241
+ assert.equal(err, null)
242
+
243
+ setTimeout(() => {
244
+ user.get("two", data => {
245
+ assert.deepEqual(data, two)
246
+
247
+ user.get("two").next("child1", data => {
248
+ assert.deepEqual(data, {has: "child value 1"})
249
+
250
+ user.get("two").next("child2", data => {
251
+ assert.deepEqual(data, {has: "child value 2"})
252
+ done()
253
+ })
254
+ })
255
+ })
256
+ }, 2)
257
+ })
258
+ })
259
+
260
+ test("put and get multiple nested object", (t, done) => {
261
+ const multiple = {
262
+ key: "multiple nested values",
263
+ child: {
264
+ has: "child value",
265
+ grandchild: {
266
+ has: "grandchild value",
267
+ other: "(not returned in lex query)",
268
+ },
269
+ },
270
+ }
271
+ user.get("multiple").put(multiple, err => {
272
+ assert.equal(err, null)
273
+
274
+ setTimeout(() => {
275
+ user.get("multiple", data => {
276
+ assert.deepEqual(data, multiple)
277
+
278
+ user.get("multiple").next("child", {".": "has"}, data => {
279
+ assert.deepEqual(data, {has: "child value"})
280
+
281
+ user
282
+ .get("multiple")
283
+ .next("child")
284
+ .next("grandchild", {".": "has"}, data => {
285
+ assert.deepEqual(data, {has: "grandchild value"})
286
+ done()
287
+ })
288
+ })
289
+ })
290
+ }, 2)
291
+ })
292
+ })
293
+
294
+ test("get number using public key", (t, done) => {
295
+ user.leave()
296
+
297
+ holster.user(alice).get("pi", data => {
298
+ assert.equal(data, 3.14159)
299
+ done()
300
+ })
301
+ })
302
+
303
+ test("chained get in graph format using public key", (t, done) => {
304
+ const plain = {
305
+ key: "hello plain value",
306
+ }
307
+ holster
308
+ .user(alice)
309
+ .get("hello")
310
+ .next("plain", data => {
311
+ assert.deepEqual(data, plain)
312
+ done()
313
+ })
314
+ })
315
+
316
+ test("get nested object using public key", (t, done) => {
317
+ const nested = {
318
+ key: "nested value",
319
+ child: {
320
+ has: "child value",
321
+ },
322
+ }
323
+ holster.user(alice).get("nested", data => {
324
+ assert.deepEqual(data, nested)
325
+
326
+ holster
327
+ .user(alice)
328
+ .get("nested")
329
+ .next("key", data => {
330
+ assert.equal(data, "nested value")
331
+
332
+ holster
333
+ .user(alice)
334
+ .get("nested")
335
+ .next("child", data => {
336
+ assert.deepEqual(data, {has: "child value"})
337
+ done()
338
+ })
339
+ })
340
+ })
341
+ })
342
+
343
+ test("chained get nested object using public key", (t, done) => {
344
+ const nested = {
345
+ key: "hello nested value",
346
+ child: {
347
+ has: "hello child value",
348
+ },
349
+ }
350
+ holster
351
+ .user(alice)
352
+ .get("hello")
353
+ .next("nested", data => {
354
+ assert.deepEqual(data, nested)
355
+
356
+ holster
357
+ .user(alice)
358
+ .get("hello")
359
+ .next("nested")
360
+ .next("key", data => {
361
+ assert.equal(data, "hello nested value")
362
+
363
+ holster
364
+ .user(alice)
365
+ .get("hello")
366
+ .next("nested")
367
+ .next("child", data => {
368
+ assert.deepEqual(data, {has: "hello child value"})
369
+ done()
370
+ })
371
+ })
372
+ })
373
+ })
374
+
375
+ test("cleanup", (t, done) => {
376
+ fs.rm("test/holster.user.put", {recursive: true, force: true}, err => {
377
+ assert.equal(err, null)
378
+ done()
379
+ })
380
+ })
381
+ })
package/test/kitty/! ADDED
@@ -0,0 +1,9 @@
1
+ +0#"ASDF
2
+ +1#"boss=#FDSA2
3
+ +1#"name="Mark Nadal2
4
+ +0#"FDSA
5
+ +1#"color="ginger3
6
+ +1#"name="Fluffy2
7
+ +1#"s
8
+ +2#"lave=#ASDF2
9
+ +2#"pecies="felis silvestris2
package/test/names.js ADDED
@@ -0,0 +1,225 @@
1
+ const Names = () => {
2
+ return [
3
+ "Adalard",
4
+ "Adora",
5
+ "Aia",
6
+ "Albertina",
7
+ "Alfie",
8
+ "Allyn",
9
+ "Amabil",
10
+ "Ammamaria",
11
+ "Andy",
12
+ "Anselme",
13
+ "Ardeen",
14
+ "Armand",
15
+ "Ashelman",
16
+ "Aube",
17
+ "Averyl",
18
+ "Baker",
19
+ "Barger",
20
+ "Baten",
21
+ "Bee",
22
+ "Benia",
23
+ "Bernat",
24
+ "Bevers",
25
+ "Bittner",
26
+ "Bobbe",
27
+ "Bonny",
28
+ "Boyce",
29
+ "Breech",
30
+ "Brittaney",
31
+ "Bryn",
32
+ "Burkitt",
33
+ "Cadmann",
34
+ "Campagna",
35
+ "Carlee",
36
+ "Carver",
37
+ "Cavallaro",
38
+ "Chainey",
39
+ "Chaunce",
40
+ "Ching",
41
+ "Cianca",
42
+ "Claudina",
43
+ "Clyve",
44
+ "Colon",
45
+ "Cooke",
46
+ "Corrina",
47
+ "Crawley",
48
+ "Cullie",
49
+ "Dacy",
50
+ "Daniela",
51
+ "Daryn",
52
+ "Deedee",
53
+ "Denie",
54
+ "Devland",
55
+ "Dimitri",
56
+ "Dolphin",
57
+ "Dorinda",
58
+ "Dream",
59
+ "Dunham",
60
+ "Eachelle",
61
+ "Edina",
62
+ "Eisenstark",
63
+ "Elish",
64
+ "Elvis",
65
+ "Eng",
66
+ "Erland",
67
+ "Ethan",
68
+ "Evelyn",
69
+ "Fairman",
70
+ "Faus",
71
+ "Fenner",
72
+ "Fillander",
73
+ "Flip",
74
+ "Foskett",
75
+ "Fredette",
76
+ "Fullerton",
77
+ "Gamali",
78
+ "Gaspar",
79
+ "Gemina",
80
+ "Germana",
81
+ "Gilberto",
82
+ "Giuditta",
83
+ "Goer",
84
+ "Gotcher",
85
+ "Greenstein",
86
+ "Grosvenor",
87
+ "Guthrey",
88
+ "Haldane",
89
+ "Hankins",
90
+ "Harriette",
91
+ "Hayman",
92
+ "Heise",
93
+ "Hepsiba",
94
+ "Hewie",
95
+ "Hiroshi",
96
+ "Holtorf",
97
+ "Howlond",
98
+ "Hurless",
99
+ "Ieso",
100
+ "Ingold",
101
+ "Isidora",
102
+ "Jacoba",
103
+ "Janelle",
104
+ "Jaye",
105
+ "Jennee",
106
+ "Jillana",
107
+ "Johnson",
108
+ "Josy",
109
+ "Justinian",
110
+ "Kannan",
111
+ "Kast",
112
+ "Keeley",
113
+ "Kennett",
114
+ "Kho",
115
+ "Kiran",
116
+ "Knowles",
117
+ "Koser",
118
+ "Kroll",
119
+ "LaMori",
120
+ "Lanctot",
121
+ "Lasky",
122
+ "Laverna",
123
+ "Leff",
124
+ "Leonanie",
125
+ "Lewert",
126
+ "Lilybel",
127
+ "Lissak",
128
+ "Longerich",
129
+ "Lou",
130
+ "Ludeman",
131
+ "Lyman",
132
+ "Madai",
133
+ "Maia",
134
+ "Malvina",
135
+ "Marcy",
136
+ "Maris",
137
+ "Martens",
138
+ "Mathilda",
139
+ "Maye",
140
+ "McLain",
141
+ "Melamie",
142
+ "Meras",
143
+ "Micco",
144
+ "Millburn",
145
+ "Mittel",
146
+ "Montfort",
147
+ "Moth",
148
+ "Mutz",
149
+ "Nananne",
150
+ "Nazler",
151
+ "Nesta",
152
+ "Nicolina",
153
+ "Noellyn",
154
+ "Nuli",
155
+ "Ody",
156
+ "Olympie",
157
+ "Orlena",
158
+ "Other",
159
+ "Pain",
160
+ "Parry",
161
+ "Paynter",
162
+ "Pentheas",
163
+ "Pettifer",
164
+ "Phyllida",
165
+ "Plath",
166
+ "Posehn",
167
+ "Proulx",
168
+ "Quinlan",
169
+ "Raimes",
170
+ "Ras",
171
+ "Redmer",
172
+ "Renelle",
173
+ "Ricard",
174
+ "Rior",
175
+ "Rocky",
176
+ "Ron",
177
+ "Rosetta",
178
+ "Rubia",
179
+ "Ruttger",
180
+ "Salbu",
181
+ "Sandy",
182
+ "Saw",
183
+ "Scholz",
184
+ "Secor",
185
+ "September",
186
+ "Shanleigh",
187
+ "Shenan",
188
+ "Sholes",
189
+ "Sig",
190
+ "Sisely",
191
+ "Soble",
192
+ "Spanos",
193
+ "Stanwinn",
194
+ "Stevie",
195
+ "Stu",
196
+ "Suzanne",
197
+ "Tacy",
198
+ "Tanney",
199
+ "Tekla",
200
+ "Thackeray",
201
+ "Thomasin",
202
+ "Tilla",
203
+ "Tomas",
204
+ "Tracay",
205
+ "Tristis",
206
+ "Ty",
207
+ "Urana",
208
+ "Valdis",
209
+ "Vasta",
210
+ "Vezza",
211
+ "Vitoria",
212
+ "Wait",
213
+ "Warring",
214
+ "Weissmann",
215
+ "Whetstone",
216
+ "Williamson",
217
+ "Wittenburg",
218
+ "Wymore",
219
+ "Yoho",
220
+ "Zamir",
221
+ "Zimmermann",
222
+ ]
223
+ }
224
+
225
+ export default Names