@k3000/store 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.
package/test.mjs ADDED
@@ -0,0 +1,766 @@
1
+ import test from "node:test";
2
+ import assert from "node:assert";
3
+ import upgrade, {
4
+ Bigint,
5
+ bigintSerialize,
6
+ BigUint,
7
+ Buffer,
8
+ Float,
9
+ Id,
10
+ Int,
11
+ String,
12
+ Text,
13
+ Time,
14
+ Uint
15
+ } from './generator.mjs?test=true'
16
+ // } from 'dmb3/generator.mjs'
17
+ import {existsSync, readdirSync, rmdirSync, statSync, unlinkSync} from "node:fs";
18
+ import {json} from "node:stream/consumers";
19
+
20
+ test('测试类型类', async t => {
21
+
22
+ await t.test('测试Id类型缺省配置', _ => {
23
+
24
+ assert.strictEqual(
25
+ Id('备注').toString(),
26
+ '{"type":0,"remark":"备注","index":[],"value":1,"length":4,"step":1}')
27
+ })
28
+
29
+ await t.test('测试Id类型完整配置', _ => {
30
+
31
+ assert.strictEqual(
32
+ Id()
33
+ .index(false)
34
+ .value('2')
35
+ .step(2)
36
+ .remark('备注')
37
+ .toString(),
38
+ '{"type":0,"remark":"备注","value":2,"length":4,"step":2}')
39
+ })
40
+
41
+ await t.test('测试Uint类型缺省配置', _ => {
42
+
43
+ assert.strictEqual(
44
+ Uint('备注').toString(),
45
+ '{"type":1,"remark":"备注","length":4}')
46
+ })
47
+
48
+ await t.test('测试Uint类型完整配置', _ => {
49
+
50
+ assert.strictEqual(
51
+ Uint()
52
+ .index(false)
53
+ .value(2)
54
+ .step(2)
55
+ .remark('备注')
56
+ .toString(),
57
+ '{"type":1,"remark":"备注","value":2,"length":4,"step":2}')
58
+ })
59
+
60
+ await t.test('测试Uint类型异常配置', _ => {
61
+
62
+ assert.strictEqual(
63
+ Uint()
64
+ .index()
65
+ .value()
66
+ .step()
67
+ .remark()
68
+ .toString(),
69
+ '{"type":1,"remark":"","index":[],"value":0,"length":4,"step":1}')
70
+ })
71
+
72
+ await t.test('测试Int类型缺省配置', _ => {
73
+
74
+ assert.strictEqual(
75
+ Int('备注').toString(),
76
+ '{"type":2,"remark":"备注","length":4}')
77
+ })
78
+
79
+ await t.test('测试Int类型完整配置', _ => {
80
+
81
+ assert.strictEqual(
82
+ Int()
83
+ .index(false)
84
+ .value(2)
85
+ .step(2)
86
+ .remark('备注')
87
+ .toString(),
88
+ '{"type":2,"remark":"备注","value":2,"length":4,"step":2}')
89
+ })
90
+
91
+ await t.test('测试Int类型异常配置', _ => {
92
+
93
+ assert.strictEqual(
94
+ Int()
95
+ .index()
96
+ .value()
97
+ .step()
98
+ .remark()
99
+ .toString(),
100
+ '{"type":2,"remark":"","index":[],"value":0,"length":4,"step":1}')
101
+ })
102
+
103
+ await t.test('测试BigUint类型缺省配置', _ => {
104
+
105
+ assert.strictEqual(
106
+ BigUint('备注').toString(),
107
+ '{"type":3,"remark":"备注","length":8}')
108
+ })
109
+
110
+ await t.test('测试BigUint类型完整配置', _ => {
111
+
112
+ assert.strictEqual(
113
+ BigUint()
114
+ .index(false)
115
+ .value(1n)
116
+ .step(1n)
117
+ .remark('备注')
118
+ .toString(),
119
+ '{"type":3,"remark":"备注","value":"1","length":8,"step":1}')
120
+ })
121
+
122
+ await t.test('测试BigUint类型异常配置', _ => {
123
+
124
+ assert.strictEqual(
125
+ BigUint()
126
+ .index()
127
+ .value()
128
+ .step()
129
+ .remark()
130
+ .toString(),
131
+ '{"type":3,"remark":"","index":[],"value":"0","length":8,"step":1}')
132
+ })
133
+
134
+ await t.test('测试Bigint类型缺省配置', _ => {
135
+
136
+ assert.strictEqual(
137
+ Bigint('备注').toString(),
138
+ '{"type":4,"remark":"备注","length":8}')
139
+ })
140
+
141
+ await t.test('测试Bigint类型完整配置', _ => {
142
+
143
+ assert.strictEqual(
144
+ Bigint()
145
+ .index(false)
146
+ .value(1n)
147
+ .step(1n)
148
+ .remark('备注')
149
+ .toString(),
150
+ '{"type":4,"remark":"备注","value":"1","length":8,"step":1}')
151
+ })
152
+
153
+ await t.test('测试Bigint类型异常配置', _ => {
154
+
155
+ assert.strictEqual(
156
+ Bigint()
157
+ .index()
158
+ .value()
159
+ .step()
160
+ .remark()
161
+ .toString(),
162
+ '{"type":4,"remark":"","index":[],"value":"0","length":8,"step":1}')
163
+ })
164
+
165
+ await t.test('测试Time类型缺省配置', _ => {
166
+
167
+ assert.strictEqual(
168
+ Time('备注').toString(),
169
+ '{"type":5,"remark":"备注","length":6}')
170
+ })
171
+
172
+ await t.test('测试Time类型完整配置', _ => {
173
+
174
+ assert.strictEqual(
175
+ Time()
176
+ .index(false)
177
+ .value(Time.update)
178
+ .remark('备注')
179
+ .toString(),
180
+ '{"type":5,"remark":"备注","value":-2,"length":6}')
181
+ })
182
+
183
+ await t.test('测试Time类型异常配置', _ => {
184
+
185
+ assert.strictEqual(
186
+ Time()
187
+ .index()
188
+ .value()
189
+ .step()
190
+ .remark()
191
+ .toString(),
192
+ '{"type":5,"remark":"","index":[],"value":0,"length":6}')
193
+ })
194
+
195
+ await t.test('测试Float类型缺省配置', _ => {
196
+
197
+ assert.strictEqual(
198
+ Float('备注').toString(),
199
+ '{"type":6,"remark":"备注","length":8}')
200
+ })
201
+
202
+ await t.test('测试Float类型完整配置', _ => {
203
+
204
+ assert.strictEqual(
205
+ Float()
206
+ .index(false)
207
+ .value(0.1)
208
+ .step(0.1)
209
+ .remark('备注')
210
+ .toString(),
211
+ '{"type":6,"remark":"备注","value":0.1,"length":8,"step":0.1}')
212
+ })
213
+
214
+ await t.test('测试Float类型异常配置', _ => {
215
+
216
+ assert.strictEqual(
217
+ Float()
218
+ .index()
219
+ .value()
220
+ .step()
221
+ .remark()
222
+ .toString(),
223
+ '{"type":6,"remark":"","index":[],"value":0,"length":8,"step":1}')
224
+ })
225
+
226
+ await t.test('测试String类型缺省配置', _ => {
227
+
228
+ assert.strictEqual(
229
+ String('备注').toString(),
230
+ '{"type":7,"remark":"备注","length":12}')
231
+ })
232
+
233
+ await t.test('测试String类型完整配置', _ => {
234
+
235
+ assert.strictEqual(
236
+ String()
237
+ .index(false)
238
+ .value('123456')
239
+ .length(8)
240
+ .remark('备注')
241
+ .toString(),
242
+ '{"type":7,"remark":"备注","value":"123456","length":8}')
243
+ })
244
+
245
+ await t.test('测试String类型异常配置', _ => {
246
+
247
+ assert.strictEqual(
248
+ String()
249
+ .index()
250
+ .value()
251
+ .step()
252
+ .remark()
253
+ .toString(),
254
+ '{"type":7,"remark":"","index":[],"value":"","length":12}')
255
+ })
256
+
257
+ await t.test('测试Buffer类型缺省配置', _ => {
258
+
259
+ assert.strictEqual(
260
+ Buffer('备注').toString(),
261
+ '{"type":8,"remark":"备注","length":1}')
262
+ })
263
+
264
+ await t.test('测试Buffer类型完整配置', _ => {
265
+
266
+ assert.strictEqual(
267
+ Buffer()
268
+ .remark('备注')
269
+ .toString(),
270
+ '{"type":8,"remark":"备注","length":1}')
271
+ })
272
+
273
+ await t.test('测试Buffer类型异常配置', _ => {
274
+
275
+ assert.strictEqual(
276
+ Buffer()
277
+ .index()
278
+ .value()
279
+ .step()
280
+ .remark()
281
+ .toString(),
282
+ '{"type":8,"remark":"","length":1}')
283
+ })
284
+
285
+ await t.test('测试Text类型缺省配置', _ => {
286
+
287
+ assert.strictEqual(
288
+ Text('备注').toString(),
289
+ '{"type":9,"remark":"备注","length":1}')
290
+ })
291
+
292
+ await t.test('测试Text类型完整配置', _ => {
293
+
294
+ assert.strictEqual(
295
+ Text()
296
+ .remark('备注')
297
+ .toString(),
298
+ '{"type":9,"remark":"备注","length":1}')
299
+ })
300
+
301
+ await t.test('测试Text类型异常配置', _ => {
302
+
303
+ assert.strictEqual(
304
+ Text()
305
+ .index()
306
+ .value()
307
+ .step()
308
+ .remark()
309
+ .toString(),
310
+ '{"type":9,"remark":"","length":1}')
311
+ })
312
+ })
313
+
314
+ if (!existsSync('test/1')) {
315
+
316
+ const {appendSet, submit} = upgrade('test')
317
+
318
+ appendSet('admin', {
319
+ id: Id,
320
+ uid: String('账号').index(true),
321
+ pwd: String('密码').value('123456'),
322
+ valid: Uint(1).index(true).value(0).remark('是否有效'),
323
+ time: Time('登录时间').index(true).value(Time.update),
324
+ })
325
+
326
+ appendSet('log', {
327
+ id: Id,
328
+ uid: String('账号').index(true),
329
+ type: Uint(2).remark('类型'),
330
+ time: Time('创建时间').index(true).value(Time.now),
331
+ content: String('内容').length(256)
332
+ })
333
+
334
+ appendSet('test', {
335
+ id: Id,
336
+ uint: Uint,
337
+ int: Int(3),
338
+ bigint: Bigint,
339
+ bigUint: BigUint,
340
+ time: Time,
341
+ float: Float,
342
+ string: String,
343
+ buffer: Buffer,
344
+ text: Text,
345
+ })
346
+
347
+ submit()
348
+ }
349
+
350
+ function deleteDir(dir) {
351
+
352
+ for (const name of readdirSync(dir)) {
353
+
354
+ const path = `${dir}/${name}`
355
+
356
+ if (statSync(path).isDirectory()) {
357
+
358
+ deleteDir(path)
359
+
360
+ } else {
361
+
362
+ unlinkSync(path)
363
+ }
364
+ }
365
+
366
+ rmdirSync(dir)
367
+ }
368
+
369
+ import('./test/1/index.mjs').then(m => {
370
+
371
+ const storage = m.default
372
+
373
+ test('测试基础操作', async t => {
374
+
375
+ const test = {
376
+ id: 1,
377
+ uid: 'test',
378
+ pwd: '123456',
379
+ time: new Date('2022/01/01'),
380
+ }
381
+
382
+ const root = {
383
+ id: 2,
384
+ uid: 'root',
385
+ pwd: '123123',
386
+ valid: 1,
387
+ time: new Date('2022/01/01'),
388
+ }
389
+
390
+ const predicate = item => item.uid === 'root' && item.pwd === '123123'
391
+
392
+ await t.test('测试查找操作(filter)', _ => {
393
+
394
+ const result = storage.admin.filter(predicate)
395
+
396
+ assert.strictEqual(
397
+ JSON.stringify(result),
398
+ '[{"id":2,"pwd":"123123","time":1640966400000,"uid":"root","valid":1}]')
399
+ })
400
+
401
+ await t.test('测试查找操作(page)', _ => {
402
+
403
+ const params = {key: 'name', index: 1, size: 1}
404
+
405
+ assert.strictEqual(
406
+ JSON.stringify(storage.admin.page(_ => 1, 1, 1)),
407
+ JSON.stringify(storage.admin.page(_ => 1, 'index', 'size', params)))
408
+ })
409
+
410
+ await t.test('测试查找操作(find)', _ => {
411
+
412
+ const result = storage.admin.find(predicate)
413
+
414
+ assert.strictEqual(
415
+ JSON.stringify({...result}),
416
+ '{"id":2,"pwd":"123123","time":1640966400000,"uid":"root","valid":1}')
417
+ })
418
+
419
+ await t.test('测试查找操作(findIndex)', _ => {
420
+
421
+ const result = storage.admin[storage.admin.findIndex(predicate)]
422
+
423
+ assert.strictEqual(
424
+ JSON.stringify(result),
425
+ '{"id":2,"pwd":"123123","time":1640966400000,"uid":"root","valid":1}')
426
+ })
427
+
428
+ await t.test('测试查找操作(some)', _ => {
429
+
430
+ assert.strictEqual(storage.admin.some(predicate), true)
431
+ })
432
+
433
+ await t.test('测试查找操作(通过索引)', _ => {
434
+
435
+ const result = storage.admin.indexByUid('root')
436
+
437
+ assert.strictEqual(
438
+ JSON.stringify(result),
439
+ '[{"id":2,"pwd":"123123","time":1640966400000,"uid":"root","valid":1}]')
440
+ })
441
+
442
+ await t.test('测试查找操作(通过索引时间)', _ => {
443
+
444
+ const result = storage.admin.indexByTime({before: -Infinity, after: new Date('2023/01/01')})
445
+
446
+ assert.strictEqual(
447
+ JSON.stringify(result),
448
+ '[{"id":2,"pwd":"123123","time":1640966400000,"uid":"root","valid":1},{"id":1,"pwd":"123456","time":1640966400000,"uid":"test","valid":0}]')
449
+ })
450
+
451
+ await t.test('测试添加操作(push)', _ => {
452
+
453
+ storage.admin.remove(...storage.admin.filter(item => ['test', 'root'].includes(item.uid)))
454
+
455
+ storage.admin.push(test)
456
+
457
+ storage.admin.push(root)
458
+
459
+ assert.strictEqual(
460
+ JSON.stringify(storage.admin),
461
+ '[{"id":1,"pwd":"123456","time":1640966400000,"uid":"test","valid":0},{"id":2,"pwd":"123123","time":1640966400000,"uid":"root","valid":1}]')
462
+ })
463
+
464
+ await t.test('测试添加操作(pop)', _ => {
465
+
466
+ storage.admin.pop()
467
+
468
+ assert.strictEqual(storage.admin.length, 1)
469
+
470
+ storage.admin.remove(...storage.admin.filter(item => ['test', 'root'].includes(item.uid)))
471
+
472
+ storage.admin.push(test)
473
+
474
+ storage.admin.push(root)
475
+ })
476
+
477
+ await t.test('测试添加操作(unshift)', _ => {
478
+
479
+ storage.admin.remove(...storage.admin.indexByUid('root'))
480
+
481
+ storage.admin.unshift(root)
482
+
483
+ assert.strictEqual(
484
+ JSON.stringify(storage.admin),
485
+ '[{"id":2,"pwd":"123123","time":1640966400000,"uid":"root","valid":1},{"id":1,"pwd":"123456","time":1640966400000,"uid":"test","valid":0}]')
486
+ })
487
+
488
+ await t.test('测试添加操作(splice)', _ => {
489
+
490
+ storage.admin.remove(...storage.admin.indexByUid('root'))
491
+
492
+ storage.admin.splice(0, 0, root)
493
+
494
+ assert.strictEqual(
495
+ JSON.stringify(storage.admin),
496
+ '[{"id":2,"pwd":"123123","time":1640966400000,"uid":"root","valid":1},{"id":1,"pwd":"123456","time":1640966400000,"uid":"test","valid":0}]')
497
+ })
498
+
499
+ await t.test('测试联合查询(filterFlat)', _ => {
500
+
501
+ assert.strictEqual(
502
+ JSON.stringify(storage.admin.filterFlat(storage.log, (a, b) => a.uid === b.uid)),
503
+ '[{"content":"login","id":1,"time":1640966400000,"type":0,"uid":"test","pwd":"123456","valid":0}'
504
+ + ',{"content":"test","id":1,"time":1640966400000,"type":0,"uid":"test","pwd":"123456","valid":0}]')
505
+ })
506
+
507
+ await t.test('测试联合查询(eachFlat)', _ => {
508
+
509
+ assert.strictEqual(
510
+ JSON.stringify(storage.admin.eachFlat(storage.log, (a, b) => a.uid === b.uid)),
511
+ '[{"id":2,"pwd":"123123","time":1640966400000,"uid":"root","valid":1},{"content":"login","id":1,'
512
+ + '"time":1640966400000,"type":0,"uid":"test","pwd":"123456","valid":0},{"content":"test","id":1,"time":1640966400000,'
513
+ + '"type":0,"uid":"test","pwd":"123456","valid":0}]')
514
+ })
515
+
516
+ await t.test('测试修改操作', _ => {
517
+
518
+ let result = storage.admin.filter(predicate)
519
+
520
+ result[0].pwd = '111111'
521
+ result[0].time = new Date('2022/01/01')
522
+
523
+ result = storage.admin.filter(item => item.uid === 'root' && item.pwd === '111111')
524
+
525
+ assert.strictEqual(
526
+ JSON.stringify(result),
527
+ '[{"id":2,"pwd":"111111","time":1640966400000,"uid":"root","valid":1}]')
528
+ })
529
+
530
+ await t.test('测试删除操作', _ => {
531
+
532
+ storage.admin.remove(...storage.admin.filter(item => !item.valid))
533
+
534
+ assert.strictEqual(
535
+ JSON.stringify(storage.admin),
536
+ '[{"id":2,"pwd":"111111","time":1640966400000,"uid":"root","valid":1}]')
537
+ })
538
+
539
+ storage.admin.remove(...storage.admin)
540
+
541
+ storage.admin.push(test)
542
+
543
+ storage.admin.push(root)
544
+
545
+ storage.log.remove(...storage.log)
546
+
547
+ storage.log.push({
548
+ uid: 'test',
549
+ id: 2,
550
+ time: new Date('2022/01/01'),
551
+ content: 'login'
552
+ })
553
+
554
+ storage.log.push({
555
+ uid: 'test',
556
+ id: 1,
557
+ time: new Date('2022/01/02'),
558
+ content: 'test'
559
+ })
560
+
561
+ storage.close()
562
+ })
563
+
564
+ }).catch(e => console.error(e))
565
+
566
+ test('测试结构操作', async t => {
567
+
568
+ if (existsSync('test/2')) {
569
+
570
+ deleteDir('test/2')
571
+ }
572
+
573
+ if (existsSync('test/3')) {
574
+
575
+ deleteDir('test/3')
576
+ }
577
+
578
+ if (existsSync('test/4')) {
579
+
580
+ deleteDir('test/4')
581
+ }
582
+
583
+ if (existsSync('test/5')) {
584
+
585
+ deleteDir('test/5')
586
+ }
587
+
588
+ if (existsSync('test/6')) {
589
+
590
+ deleteDir('test/6')
591
+ }
592
+
593
+ if (existsSync('test/7')) {
594
+
595
+ deleteDir('test/7')
596
+ }
597
+
598
+ await new Promise(resolve => {
599
+
600
+ t.test('测试添加操作(appendSet)', _ => {
601
+
602
+ const {appendSet, submit} = upgrade('test', {version: 2})
603
+
604
+ appendSet('test2', {
605
+ uid: String(`账
606
+ 户`),
607
+ pwd: String(),
608
+ test: Bigint,
609
+ test3: Int(2)
610
+ }, '账号表')
611
+
612
+ submit().then(() => import('./test/2/index.mjs?v=2')).then(m => {
613
+
614
+ const storage = m.default
615
+
616
+ storage.test2.push({
617
+ uid: 'test',
618
+ pwd: '123456',
619
+ test: 123123n,
620
+ test3: 111
621
+ })
622
+
623
+ assert.strictEqual(
624
+ JSON.stringify(storage.test2, bigintSerialize),
625
+ '[{"pwd":"123456","test":"123123","test3":111,"uid":"test"}]')
626
+
627
+ storage.close()
628
+
629
+ resolve()
630
+
631
+ }).catch(e => console.error(e))
632
+ })
633
+ })
634
+
635
+ await new Promise(resolve => {
636
+
637
+ t.test('测试更新操作(updateCol)', _ => {
638
+
639
+ const {updateCol, submit} = upgrade('test', {version: 3})
640
+
641
+ updateCol('test2', {
642
+ test: String,
643
+ test2: String(),
644
+ test3: Int(3)
645
+ })
646
+
647
+ submit().then(() => import('./test/3/index.mjs')).then(m => {
648
+
649
+ const storage = m.default
650
+
651
+ storage.test2[0].test2 = '456456'
652
+
653
+ assert.strictEqual(
654
+ JSON.stringify(storage.test2),
655
+ '[{"pwd":"123456","test":"123123","test2":"456456","test3":111,"uid":"test"}]')
656
+
657
+ storage.close()
658
+
659
+ resolve()
660
+
661
+ }).catch(e => console.error(e))
662
+ })
663
+ })
664
+
665
+ await new Promise(resolve => {
666
+
667
+ t.test('测试更名操作(renameSet,renameCol)', _ => {
668
+
669
+ const {renameSet, renameCol, submit} = upgrade('test', {version: 4})
670
+
671
+ renameSet('test2', 'test3')
672
+
673
+ renameCol('test3', {
674
+ test2: 'test3',
675
+ })
676
+
677
+ submit().then(() => import('./test/4/index.mjs')).then(m => {
678
+
679
+ const storage = m.default
680
+
681
+ assert.strictEqual(
682
+ JSON.stringify(storage.test3),
683
+ '[{"pwd":"123456","test":"123123","test2":"456456","test3":111,"uid":"test"}]')
684
+
685
+ storage.close()
686
+
687
+ resolve()
688
+
689
+ }).catch(e => console.error(e))
690
+ })
691
+ })
692
+
693
+ await new Promise(resolve => {
694
+
695
+ t.test('测试备注操作(updateSetRemark)', _ => {
696
+
697
+ const {updateSetRemark, submit} = upgrade('test', {version: 5})
698
+
699
+ updateSetRemark('test3', `备注
700
+ 备注`)
701
+
702
+ submit().then(() => import('./test/5/index.mjs?newPwd=123123')).then(m => {
703
+
704
+ const storage = m.default
705
+
706
+ assert.strictEqual(1, 1)
707
+
708
+ storage.close()
709
+
710
+ resolve()
711
+
712
+ }).catch(e => console.error(e))
713
+ })
714
+ })
715
+
716
+ await new Promise(resolve => {
717
+
718
+ t.test('测试删除操作(deleteSet,deleteCol)', _ => {
719
+
720
+ const {deleteSet, deleteCol, submit} = upgrade('test', {version: 6, password: '123123'})
721
+
722
+ deleteSet('test')
723
+
724
+ deleteCol('test3', 'test3')
725
+
726
+ submit().then(() => import('./test/6/index.mjs?password=123123')).then(m => {
727
+
728
+ const storage = m.default
729
+
730
+ assert.strictEqual(
731
+ JSON.stringify(storage.test3) === '[{"pwd":"123456","test":"123123","test2":"456456","uid":"test"}]',
732
+ storage.test === undefined)
733
+
734
+ storage.close()
735
+
736
+ resolve()
737
+
738
+ }).catch(e => console.error(e))
739
+ })
740
+ })
741
+
742
+ await new Promise(resolve => {
743
+
744
+ t.test('测试最小化大小操作', _ => {
745
+
746
+ const {submit} = upgrade('test', {
747
+ version: 7,
748
+ prod: true,
749
+ password: '123123',
750
+ newPwd: '111111'
751
+ })
752
+
753
+ submit().then(() => import('./test/7/index.mjs?password=111111')).then(m => {
754
+
755
+ const storage = m.default
756
+
757
+ assert.strictEqual(1, 1)
758
+
759
+ storage.close()
760
+
761
+ resolve()
762
+
763
+ }).catch(e => console.error(e))
764
+ })
765
+ })
766
+ })