@quanxiaoxiao/datav 0.4.0 → 0.5.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 (64) hide show
  1. package/README.md +680 -165
  2. package/dist/createArrayAccessor.d.ts +2 -0
  3. package/dist/createArrayAccessor.d.ts.map +1 -0
  4. package/dist/createArrayAccessor.js +38 -0
  5. package/dist/createArrayAccessor.js.map +1 -0
  6. package/dist/createDataAccessor.d.ts +2 -0
  7. package/dist/createDataAccessor.d.ts.map +1 -0
  8. package/dist/createDataAccessor.js +23 -0
  9. package/dist/createDataAccessor.js.map +1 -0
  10. package/dist/createDataTransformer.d.ts +14 -0
  11. package/dist/createDataTransformer.d.ts.map +1 -0
  12. package/dist/createDataTransformer.js +124 -0
  13. package/dist/createDataTransformer.js.map +1 -0
  14. package/dist/createPathAccessor.d.ts +2 -0
  15. package/dist/createPathAccessor.d.ts.map +1 -0
  16. package/dist/createPathAccessor.js +38 -0
  17. package/dist/createPathAccessor.js.map +1 -0
  18. package/dist/index.d.ts +5 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +5 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/parseDotPath.d.ts +2 -0
  23. package/dist/parseDotPath.d.ts.map +1 -0
  24. package/dist/parseDotPath.js +14 -0
  25. package/dist/parseDotPath.js.map +1 -0
  26. package/dist/parseValueByType.d.ts +11 -0
  27. package/dist/parseValueByType.d.ts.map +1 -0
  28. package/dist/parseValueByType.js +122 -0
  29. package/dist/parseValueByType.js.map +1 -0
  30. package/dist/utils.d.ts +3 -0
  31. package/dist/utils.d.ts.map +1 -0
  32. package/dist/utils.js +22 -0
  33. package/dist/utils.js.map +1 -0
  34. package/dist/validateExpressSchema.d.ts +7 -0
  35. package/dist/validateExpressSchema.d.ts.map +1 -0
  36. package/dist/validateExpressSchema.js +53 -0
  37. package/dist/validateExpressSchema.js.map +1 -0
  38. package/package.json +47 -8
  39. package/src/createArrayAccessor.test.ts +181 -0
  40. package/src/createArrayAccessor.ts +48 -0
  41. package/src/createDataAccessor.test.ts +220 -0
  42. package/src/createDataAccessor.ts +26 -0
  43. package/src/createDataTransformer.test.ts +847 -0
  44. package/src/createDataTransformer.ts +173 -0
  45. package/src/createPathAccessor.test.ts +217 -0
  46. package/src/createPathAccessor.ts +45 -0
  47. package/src/index.ts +11 -0
  48. package/src/parseDotPath.test.ts +132 -0
  49. package/src/parseDotPath.ts +13 -0
  50. package/src/parseValueByType.test.ts +342 -0
  51. package/src/parseValueByType.ts +165 -0
  52. package/src/utils.test.ts +85 -0
  53. package/src/utils.ts +22 -0
  54. package/src/validateExpressSchema.test.ts +295 -0
  55. package/src/validateExpressSchema.ts +62 -0
  56. package/.editorconfig +0 -13
  57. package/eslint.config.mjs +0 -89
  58. package/src/checkout.mjs +0 -131
  59. package/src/checkout.test.mjs +0 -144
  60. package/src/index.mjs +0 -7
  61. package/src/select/check.mjs +0 -63
  62. package/src/select/check.test.mjs +0 -76
  63. package/src/select/index.mjs +0 -117
  64. package/src/select/index.test.mjs +0 -1145
@@ -1,1145 +0,0 @@
1
- import assert from 'node:assert';
2
- import test from 'node:test';
3
-
4
- import select from './index.mjs';
5
-
6
- test('select > index', () => {
7
- assert.throws(() => {
8
- select('number');
9
- });
10
- assert.throws(() => {
11
- select(['name']);
12
- });
13
- assert.throws(() => {
14
- select(['name', []]);
15
- });
16
- assert.throws(() => {
17
- select(['name', 'xxx']);
18
- });
19
- assert.equal(select({ type: 'number' })('1'), 1);
20
- assert.equal(select({ type: 'number' })('1.1'), 1.1);
21
- assert.equal(select({ type: 'number' })(1.1), 1.1);
22
- assert.equal(select({ type: 'integer' })('1.1'), 1);
23
- assert.equal(select({ type: 'boolean' })('true'), true);
24
- assert.equal(select({ type: 'boolean' })('false'), false);
25
- assert.equal(select({ type: 'boolean' })('true1'), null);
26
- assert.equal(select({ type: 'number' })('33.3'), 33.3);
27
- assert.equal(select({ type: 'integer' })('33.3'), 33);
28
- assert.deepEqual(
29
- select({
30
- type: 'object',
31
- properties: {
32
- name: {
33
- type: 'string',
34
- },
35
- age: {
36
- type: 'integer',
37
- },
38
- },
39
- })({ name: 'quan', age: '22.2', foo: 'bar' }),
40
- { name: 'quan', age: 22 },
41
- );
42
- assert.equal(select(['age', { type: 'integer' }])({ age: '33.3' }), 33);
43
- assert.equal(select(['sub.age', { type: 'integer' }])({ name: 'quan', sub: { age: 33.3 } }), 33);
44
- });
45
-
46
- test('select > index, pathname', () => {
47
- assert.equal(select({
48
- type: 'integer',
49
- properties: ['age', { type: 'number' }],
50
- })('333.3'), 333);
51
- assert.equal(select(['age', { type: 'integer' }])({ age: '2.2' }), 2);
52
- assert.equal(select(['ages', { type: 'integer' }])({ age: '2.2' }), null);
53
- });
54
-
55
- test('select > index, []', () => {
56
- assert.equal(select(['age', { type: 'integer' }])({ age: '33.33' }), 33);
57
- assert.equal(select(['obj.age', { type: 'integer' }])({ obj: { age: '33.33' } }), 33);
58
- });
59
-
60
- test('select > index, type with object', () => {
61
- assert.throws(() => {
62
- select({
63
- type: 'object',
64
- });
65
- });
66
- assert.throws(() => {
67
- select({
68
- type: 'object',
69
- properties: [],
70
- });
71
- });
72
- assert.throws(() => {
73
- select(['obj', {
74
- type: 'object',
75
- }]);
76
- });
77
- assert.throws(() => {
78
- select({
79
- type: 'object',
80
- properties: 'xxx',
81
- });
82
- });
83
- assert.deepEqual(select({
84
- type: 'object',
85
- properties: {
86
- name: {
87
- type: 'string',
88
- },
89
- age: {
90
- type: 'integer',
91
- },
92
- },
93
- })({
94
- name: 'quan',
95
- age: '22.5',
96
- obj: {
97
- age: '33.3',
98
- big: 'xxx',
99
- },
100
- }), { name: 'quan', age: 22 });
101
- assert.deepEqual(select([
102
- 'obj',
103
- {
104
- type: 'object',
105
- properties: {
106
- name: {
107
- type: 'string',
108
- },
109
- age: {
110
- type: 'integer',
111
- },
112
- },
113
- },
114
- ])({
115
- name: 'quan',
116
- age: '22.5',
117
- obj: {
118
- name: 'xxx',
119
- age: '33.3',
120
- big: 'foo',
121
- },
122
- }), { name: 'xxx', age: 33 });
123
- assert.deepEqual(select([
124
- 'obj',
125
- {
126
- type: 'object',
127
- properties: {},
128
- },
129
- ])({
130
- name: 'quan',
131
- age: '22.5',
132
- obj: {
133
- name: 'xxx',
134
- age: '33.3',
135
- big: 'foo',
136
- },
137
- }), {
138
- name: 'xxx',
139
- age: '33.3',
140
- big: 'foo',
141
- });
142
- assert.deepEqual(select([
143
- 'obj',
144
- {
145
- type: 'object',
146
- properties: {},
147
- },
148
- ])({
149
- name: 'quan',
150
- age: '22.5',
151
- obj: 'aaa',
152
- }), {});
153
- assert.deepEqual(select(
154
- {
155
- type: 'object',
156
- properties: {},
157
- },
158
- )({
159
- name: 'quan',
160
- age: '22.5',
161
- obj: 'aaa',
162
- }), {
163
- name: 'quan',
164
- age: '22.5',
165
- obj: 'aaa',
166
- });
167
- assert.deepEqual(select([
168
- 'obj',
169
- {
170
- type: 'object',
171
- properties: {
172
- name: {
173
- type: 'string',
174
- },
175
- },
176
- },
177
- ])({
178
- name: 'quan',
179
- age: '22.5',
180
- obj: {
181
- name: 'xxx',
182
- age: '33.3',
183
- big: 'foo',
184
- },
185
- }), { name: 'xxx' });
186
- assert.deepEqual(select({
187
- type: 'object',
188
- properties: {
189
- name: {
190
- type: 'string',
191
- },
192
- age: {
193
- type: 'number',
194
- },
195
- obj: {
196
- type: 'object',
197
- properties: {
198
- name: {
199
- type: 'string',
200
- },
201
- age: {
202
- type: 'integer',
203
- },
204
- },
205
- },
206
- },
207
- })({
208
- name: 'quan',
209
- age: '22.5',
210
- obj: {
211
- name: 'xxx',
212
- age: '33.3',
213
- big: 'foo',
214
- },
215
- }), {
216
- name: 'quan',
217
- age: 22.5,
218
- obj: {
219
- name: 'xxx',
220
- age: 33,
221
- },
222
- });
223
- assert.deepEqual(select({
224
- type: 'object',
225
- properties: {
226
- name: {
227
- type: 'string',
228
- },
229
- ding: ['age', {
230
- type: 'integer',
231
- }],
232
- },
233
- })({
234
- name: 'quan',
235
- age: '22.5',
236
- }), {
237
- name: 'quan',
238
- ding: 22,
239
- });
240
- assert.deepEqual(select({
241
- type: 'object',
242
- properties: {
243
- name: {
244
- type: 'string',
245
- },
246
- age: {
247
- type: 'number',
248
- },
249
- ding: ['obj.big', {
250
- type: 'string',
251
- }],
252
- },
253
- })({
254
- name: 'quan',
255
- age: '22.5',
256
- obj: {
257
- name: 'xxx',
258
- age: '33.3',
259
- big: 'foo',
260
- },
261
- }), {
262
- name: 'quan',
263
- age: 22.5,
264
- ding: 'foo',
265
- });
266
- assert.deepEqual(select({
267
- type: 'object',
268
- properties: {
269
- name: {
270
- type: 'string',
271
- },
272
- age: {
273
- type: 'number',
274
- },
275
- ddd: ['obj.name', { type: 'string' }],
276
- sub: ['obj', {
277
- type: 'object',
278
- properties: {
279
- name: {
280
- type: 'string',
281
- },
282
- age: {
283
- type: 'integer',
284
- },
285
- cqq: ['big', { type: 'string' }],
286
- },
287
- }],
288
- },
289
- })({
290
- name: 'quan',
291
- age: '22.5',
292
- obj: {
293
- name: 'xxx',
294
- age: '33.3',
295
- big: 'foo',
296
- },
297
- }), {
298
- name: 'quan',
299
- age: 22.5,
300
- ddd: 'xxx',
301
- sub: {
302
- name: 'xxx',
303
- age: 33,
304
- cqq: 'foo',
305
- },
306
- });
307
- assert.deepEqual(select(['obj', {
308
- type: 'object',
309
- properties: {
310
- name: {
311
- type: 'string',
312
- },
313
- age: {
314
- type: 'integer',
315
- },
316
- },
317
- }])({
318
- name: 'quan',
319
- age: '22.5',
320
- obj: {
321
- name: 'xxx',
322
- age: '33.3',
323
- big: 'foo',
324
- },
325
- }), {
326
- name: 'xxx',
327
- age: 33,
328
- });
329
- assert.deepEqual(select(['obj', {
330
- type: 'object',
331
- properties: {
332
- name: {
333
- type: 'string',
334
- },
335
- bb: ['age', { type: 'number' }],
336
- age: {
337
- type: 'integer',
338
- },
339
- },
340
- }])({
341
- name: 'quan',
342
- age: '22.5',
343
- obj: {
344
- name: 'xxx',
345
- age: '33.3',
346
- big: 'foo',
347
- },
348
- }), {
349
- bb: 33.3,
350
- name: 'xxx',
351
- age: 33,
352
- });
353
- assert.deepEqual(select({
354
- type: 'object',
355
- properties: {
356
- obj: ['arr.0', {
357
- type: 'object',
358
- properties: {
359
- name: {
360
- type: 'string',
361
- },
362
- foo: ['age', { type: 'integer' }],
363
- },
364
- }],
365
- },
366
- })({
367
- name: 'xxxx',
368
- arr: [{
369
- name: 'aaa',
370
- age: '99.9',
371
- }],
372
- }), {
373
- obj: {
374
- name: 'aaa',
375
- foo: 99,
376
- },
377
- });
378
- assert.equal(select(['1', {
379
- type: 'number',
380
- }])(['44', '33.3']), 33.3);
381
- assert.equal(select(['1.age', {
382
- type: 'number',
383
- }])(['44', '33.3']), null);
384
- });
385
-
386
- test('select > index array', () => {
387
- assert.deepEqual(select({
388
- type: 'array',
389
- properties: ['.', {
390
- type: 'integer',
391
- }],
392
- })(['33.3', '22.8']), [33, 22]);
393
- assert.deepEqual(select({
394
- type: 'array',
395
- properties: {
396
- age: {
397
- type: 'integer',
398
- },
399
- },
400
- })([{ age: '33.3' }]), [{ age: 33 }]);
401
- assert.deepEqual(select({
402
- type: 'array',
403
- properties: {
404
- age: {
405
- type: 'integer',
406
- },
407
- },
408
- })({ age: '33.3' }), [{ age: 33 }]);
409
- assert.deepEqual(select({
410
- type: 'array',
411
- properties: ['.', { type: 'integer' }],
412
- })(['1.1', '3', '4']), [1, 3, 4]);
413
- assert.deepEqual(select({
414
- type: 'array',
415
- properties: ['age', { type: 'integer' }],
416
- })([
417
- {
418
- age: '1.1',
419
- },
420
- {
421
- age: '3',
422
- },
423
- {
424
- age: '4',
425
- },
426
- ]), [1, 3, 4]);
427
- assert.deepEqual(
428
- select({
429
- type: 'array',
430
- properties: ['$age', { type: 'integer' }],
431
- })({ name: 'aa', age: '44.4' }),
432
- [44],
433
- );
434
- assert.deepEqual(
435
- select({
436
- type: 'array',
437
- properties: ['$ages', { type: 'integer' }],
438
- })({ name: 'aa', age: '44.4' }),
439
- [],
440
- );
441
- assert.deepEqual(
442
- select({
443
- type: 'array',
444
- properties: ['age', { type: 'integer' }],
445
- })({ name: 'aa', age: '44.4' }),
446
- [],
447
- );
448
- assert.deepEqual(
449
- select({
450
- type: 'object',
451
- properties: {
452
- name: {
453
- type: 'string',
454
- },
455
- arr: {
456
- type: 'array',
457
- properties: {
458
- name: ['$foo.name', { type: 'string' }],
459
- age: ['$big.age', { type: 'integer' }],
460
- },
461
- },
462
- },
463
- })({
464
- name: 'aaa',
465
- foo: {
466
- name: 'bbb',
467
- },
468
- big: {
469
- age: '99.99',
470
- },
471
- }),
472
- {
473
- name: 'aaa',
474
- arr: [{
475
- name: 'bbb',
476
- age: 99,
477
- }],
478
- },
479
- );
480
- });
481
-
482
- test('select > index, array to object', () => {
483
- assert.deepEqual(
484
- select(
485
- ['0', {
486
- type: 'object',
487
- properties: {
488
- name: {
489
- type: 'string',
490
- },
491
- id: {
492
- type: 'number',
493
- },
494
- _id: ['id', { type: 'string' }],
495
- },
496
- }],
497
- )([{ name: 'quan', id: 11 }]),
498
- { name: 'quan', id: 11, _id: '11' },
499
- );
500
- assert.deepEqual(
501
- select(
502
- ['0', {
503
- type: 'object',
504
- properties: {
505
- name: {
506
- type: 'string',
507
- },
508
- id: {
509
- type: 'number',
510
- },
511
- _id: ['id', { type: 'string' }],
512
- },
513
- }],
514
- )([]),
515
- { name: null, id: null, _id: null },
516
- );
517
- });
518
-
519
- test('select > index', () => {
520
- assert.deepEqual(
521
- select({
522
- type: 'object',
523
- properties: {
524
- name: {
525
- type: 'string',
526
- },
527
- quan: ['foo.big', {
528
- type: 'object',
529
- properties: {
530
- name: {
531
- type: 'string',
532
- },
533
- age: {
534
- type: 'integer',
535
- },
536
- ding: ['$cqq', { type: 'number' }],
537
- jj: ['$other.age', { type: 'integer' }],
538
- },
539
- }],
540
- },
541
- })({
542
- name: 'aaa',
543
- cqq: '44.44',
544
- other: {
545
- age: '66.6',
546
- },
547
- foo: {
548
- name: 'bbb',
549
- dd: 'ee',
550
- big: {
551
- name: 'cccc',
552
- age: '33.3',
553
- },
554
- },
555
- }),
556
- {
557
- name: 'aaa',
558
- quan: {
559
- name: 'cccc',
560
- age: 33,
561
- jj: 66,
562
- ding: 44.44,
563
- },
564
- },
565
- );
566
-
567
- assert.deepEqual(
568
- select({
569
- type: 'array',
570
- properties: {
571
- name: {
572
- type: 'string',
573
- },
574
- },
575
- })({ names: 'quan' }),
576
- [{ name: null }],
577
- );
578
-
579
- assert.deepEqual(
580
- select({
581
- type: 'array',
582
- properties: {
583
- name: {
584
- type: 'string',
585
- },
586
- },
587
- })({ name: 'quan' }),
588
- [{ name: 'quan' }],
589
- );
590
-
591
- assert.deepEqual(
592
- select({
593
- type: 'array',
594
- properties: {
595
- },
596
- })({ names: 'quan' }),
597
- [],
598
- );
599
-
600
- assert.deepEqual(
601
- select({
602
- type: 'object',
603
- properties: {
604
- name: {
605
- type: 'string',
606
- },
607
- arr: {
608
- type: 'array',
609
- properties: {
610
- name: {
611
- type: 'string',
612
- },
613
- age: ['_age', { type: 'integer' }],
614
- test: ['empty', { type: 'string' }],
615
- big: ['$obj.big', { type: 'number' }],
616
- },
617
- },
618
- },
619
- })({
620
- name: 'root',
621
- obj: {
622
- big: '66.66',
623
- },
624
- arr: [
625
- {
626
- name: '11',
627
- _age: '22.2',
628
- },
629
- {
630
- name: '22',
631
- _age: '23.3',
632
- },
633
- ],
634
- }),
635
- {
636
- name: 'root',
637
- arr: [
638
- {
639
- name: '11',
640
- age: 22,
641
- test: null,
642
- big: 66.66,
643
- },
644
- {
645
- name: '22',
646
- age: 23,
647
- test: null,
648
- big: 66.66,
649
- },
650
- ],
651
- },
652
- );
653
- });
654
-
655
- test('select > index, resolve', () => {
656
- assert.equal(
657
- select({
658
- type: 'integer',
659
- resolve: (v) => v + 1,
660
- })(88),
661
- 89,
662
- );
663
- assert.equal(
664
- select(['age', {
665
- type: 'integer',
666
- resolve: (v) => `${v + 1}`,
667
- }])({ age: 88 }),
668
- 89,
669
- );
670
- assert.deepEqual(
671
- select({
672
- type: 'object',
673
- properties: {
674
- name: {
675
- type: 'string',
676
- resolve: (a, b) => `${a}_${b.aa}`,
677
- },
678
- age: {
679
- type: 'integer',
680
- resolve: (a) => a + 1,
681
- },
682
- },
683
- })({
684
- name: 'quan',
685
- aa: 'xx',
686
- age: 33,
687
- }),
688
- {
689
- name: 'quan_xx',
690
- age: 34,
691
- },
692
- );
693
- assert.deepEqual(
694
- select({
695
- type: 'object',
696
- properties: {
697
- name: {
698
- type: 'string',
699
- },
700
- age: {
701
- type: 'integer',
702
- resolve: () => 99,
703
- },
704
- },
705
- })({
706
- name: 'quan',
707
- }),
708
- {
709
- name: 'quan',
710
- age: 99,
711
- },
712
- );
713
- assert.deepEqual(
714
- select({
715
- type: 'object',
716
- properties: {
717
- name: {
718
- type: 'string',
719
- resolve: (a, b) => `${a}_${b.aa}`,
720
- },
721
- age: ['big', {
722
- type: 'integer',
723
- resolve: (a) => a + 1,
724
- }],
725
- },
726
- })({
727
- name: 'quan',
728
- aa: 'xx',
729
- big: 33,
730
- }),
731
- {
732
- name: 'quan_xx',
733
- age: 34,
734
- },
735
- );
736
- assert.deepEqual(
737
- select({
738
- type: 'object',
739
- properties: {
740
- name: {
741
- type: 'string',
742
- resolve: (a, b) => `${a}_${b.aa}`,
743
- },
744
- obj: {
745
- type: 'object',
746
- properties: {
747
- name: {
748
- type: 'string',
749
- },
750
- age: ['big', {
751
- type: 'integer',
752
- resolve: (a) => a + 1,
753
- }],
754
- ding: {
755
- type: 'string',
756
- resolve: (a, b) => `${b.name}_${a}`,
757
- },
758
- },
759
- },
760
- },
761
- })({
762
- name: 'quan',
763
- aa: 'xx',
764
- obj: {
765
- name: 'rice',
766
- big: 33,
767
- ding: 'aaa',
768
- },
769
- }),
770
- {
771
- name: 'quan_xx',
772
- obj: {
773
- name: 'rice',
774
- age: 34,
775
- ding: 'quan_aaa',
776
- },
777
- },
778
- );
779
- assert.deepEqual(
780
- select(
781
- {
782
- type: 'object',
783
- properties: {
784
- name: {
785
- type: 'string',
786
- },
787
- resolve: {
788
- type: 'string',
789
- },
790
- },
791
- },
792
- )({ name: 'aaa', resolve: 'resolve' }),
793
- { name: 'aaa', resolve: 'resolve' },
794
- );
795
- assert.deepEqual(
796
- select(
797
- {
798
- type: 'object',
799
- resolve: () => ({ name: 'xxx' }),
800
- properties: {
801
- name: {
802
- type: 'string',
803
- },
804
- resolve: {
805
- type: 'string',
806
- },
807
- },
808
- },
809
- )({ name: 'aaa', resolve: 'resolve' }),
810
- { name: 'aaa', resolve: 'resolve' },
811
- );
812
- });
813
-
814
- test('select > index, resolve pathList', () => {
815
- const ret = select(
816
- {
817
- type: 'object',
818
- properties: {
819
- count: {
820
- type: 'integer',
821
- },
822
- list: {
823
- type: 'array',
824
- properties: {
825
- token: ['.', {
826
- type: 'string',
827
- resolve: (d) => `${d.name}_${d.age}`,
828
- }],
829
- name: {
830
- type: 'string',
831
- },
832
- },
833
- },
834
- },
835
- },
836
- )({
837
- count: 20,
838
- list: [
839
- {
840
- name: 'big',
841
- age: 11,
842
- },
843
- {
844
- name: 'bar',
845
- age: 22,
846
- },
847
- ],
848
- });
849
- assert.deepEqual(ret, {
850
- count: 20,
851
- list: [
852
- {
853
- name: 'big',
854
- token: 'big_11',
855
- },
856
- {
857
- name: 'bar',
858
- token: 'bar_22',
859
- },
860
- ],
861
- });
862
- });
863
-
864
- test('select > index, resolve pathList 2', () => {
865
- const ret = select(
866
- {
867
- type: 'object',
868
- properties: {
869
- count: {
870
- type: 'integer',
871
- },
872
- list: {
873
- type: 'array',
874
- properties: ['.name', {
875
- type: 'string',
876
- }],
877
- },
878
- },
879
- },
880
- )({
881
- count: 20,
882
- list: [
883
- {
884
- name: 'big',
885
- age: 11,
886
- },
887
- {
888
- name: 'bar',
889
- age: 22,
890
- },
891
- ],
892
- });
893
- assert.deepEqual(ret, {
894
- count: 20,
895
- list: ['big', 'bar'],
896
- });
897
- });
898
-
899
- test('select array222', () => {
900
- const data = {
901
- data: [
902
- {
903
- name: 'aa',
904
- age: 22,
905
- },
906
- {
907
- name: 'bb',
908
- age: 33,
909
- },
910
- ],
911
- };
912
- const ret = select(['.data', {
913
- type: 'array',
914
- properties: {
915
- name: {
916
- type: 'string',
917
- },
918
- },
919
- }])(data);
920
- assert.deepEqual(ret, [{ name: 'aa' }, { name: 'bb' }]);
921
- });
922
-
923
- test('select array array array', () => {
924
- const array = [[['11', 22], ['33', 44]], [[1], [2]]];
925
- const ret = select({
926
- type: 'array',
927
- properties: ['.', {
928
- type: 'array',
929
- properties: ['.', {
930
- type: 'array',
931
- properties: ['.', { type: 'number' }],
932
- }],
933
- }],
934
- })(array);
935
- assert.deepEqual(ret, [[[11, 22], [33, 44]], [[1], [2]]]);
936
- });
937
-
938
- test('select object array array array', () => {
939
- const obj = {
940
- name: 'xxx',
941
- arr: [[['11', 22], ['33', 44]], [[1], [2]]],
942
- };
943
- const ret = select({
944
- type: 'object',
945
- properties: {
946
- name: {
947
- type: 'string',
948
- },
949
- arr: ['arr', {
950
- type: 'array',
951
- properties: ['.', {
952
- type: 'array',
953
- properties: ['.', {
954
- type: 'array',
955
- properties: ['.', { type: 'number' }],
956
- }],
957
- }],
958
- }],
959
- },
960
- })(obj);
961
- assert.deepEqual(ret.arr, [[[11, 22], [33, 44]], [[1], [2]]]);
962
- });
963
-
964
- test('select 222', () => {
965
- const obj = {
966
- data: {
967
- key: 'aaaabbb',
968
- },
969
- };
970
- assert.equal(select(['.data.key', { type: 'string' }])(obj), obj.data.key);
971
- });
972
-
973
- test('select 333', () => {
974
- const obj = {
975
- data: ['222', '333'],
976
- };
977
- assert.deepEqual(select(['.data', { type: 'array', properties: ['.', { type: 'string' }] }])(obj), obj.data);
978
- });
979
-
980
- test('select 444', () => {
981
- const key = '111222';
982
-
983
- const ret = select({
984
- type: 'object',
985
- properties: {
986
- name: ['.', {
987
- type: 'string',
988
- }],
989
- },
990
- })(key);
991
- assert.deepEqual(ret, { name: key });
992
- });
993
-
994
- test('select 5555', () => {
995
- const data = {
996
- deviceId: '101007351946',
997
- channelId: '2',
998
- sn: '286329',
999
- name: null,
1000
- sumNum: 4,
1001
- count: 4,
1002
- lastTime: null,
1003
- recordList: [
1004
- {
1005
- deviceId: '101007351946',
1006
- startTime: '2024-06-25 10:09:37',
1007
- endTime: '2024-06-25 13:45:32',
1008
- },
1009
- {
1010
- deviceId: '101007351946',
1011
- startTime: '2024-06-25 13:47:16',
1012
- endTime: '2024-06-25 17:01:19',
1013
- },
1014
- {
1015
- deviceId: '101007351946',
1016
- startTime: '2024-06-25 17:01:19',
1017
- endTime: '2024-06-25 17:01:21',
1018
- },
1019
- {
1020
- deviceId: '101007351946',
1021
- startTime: '2024-06-25 17:01:21',
1022
- endTime: '2024-06-25 18:11:39',
1023
- },
1024
- ],
1025
- };
1026
- const ret = select(['.recordList', {
1027
- type: 'array',
1028
- properties: {
1029
- dateTimeNameStart: ['.startTime', { type: 'string' }],
1030
- dateTimeNameEnd: ['.endTime', { type: 'string' }],
1031
- },
1032
- }])(data);
1033
- assert.deepEqual(
1034
- ret,
1035
- data.recordList.map((d) => ({
1036
- dateTimeNameStart: d.startTime,
1037
- dateTimeNameEnd: d.endTime,
1038
- })),
1039
- );
1040
- });
1041
-
1042
- test('select 666', () => {
1043
- const ret = select({
1044
- type: 'object',
1045
- properties: {
1046
- chl: {
1047
- type: 'array',
1048
- properties: ['$channel', { type: 'string' }],
1049
- },
1050
- },
1051
- })({
1052
- channel: '1',
1053
- });
1054
- assert.deepEqual(ret, { chl: ['1'] });
1055
- });
1056
-
1057
- test('select 777', () => {
1058
- const ret = select({
1059
- type: 'object',
1060
- properties: {
1061
- key: {
1062
- type: 'string',
1063
- },
1064
- params: {
1065
- type: 'array',
1066
- properties: {
1067
- task: ['$taskId', { type: 'number' }],
1068
- date: ['$dateName', { type: 'string' }],
1069
- },
1070
- },
1071
- },
1072
- })({
1073
- key: '123',
1074
- taskId: '999',
1075
- dateName: '2024-06-06',
1076
- });
1077
- assert.deepEqual(ret, {
1078
- key: '123',
1079
- params: [
1080
- {
1081
- task: '999',
1082
- date: '2024-06-06',
1083
- },
1084
- ],
1085
- });
1086
- });
1087
-
1088
- test('select 888', () => {
1089
- const ret = select({
1090
- type: 'object',
1091
- properties: {
1092
- dir: ['.data.0.dir', { type: 'string' }],
1093
- name: ['.data.0.name', { type: 'string' }],
1094
- },
1095
- })({
1096
- data: [
1097
- {
1098
- dir: 'QzpcVmlkZW9ccXExMjM0XDIwMTctMDYtMTlccmVjb3JkXDE=',
1099
- name: 'qq1234-170619-000000-002000-01p401000000.264',
1100
- },
1101
- {
1102
- dir: 'QzpcVmlkZW9ccXExMjM0XDIwMTctMDYtMTlccmVjb3JkXDE=',
1103
- name: 'qq1234-170619-000000-002000-01p401000000.mp4',
1104
- },
1105
- ],
1106
- errorcode: 200,
1107
- });
1108
- assert.deepEqual(ret, {
1109
- dir: 'QzpcVmlkZW9ccXExMjM0XDIwMTctMDYtMTlccmVjb3JkXDE=',
1110
- name: 'qq1234-170619-000000-002000-01p401000000.264',
1111
- });
1112
- });
1113
-
1114
- test('select object empty properties', () => {
1115
- const data = {
1116
- code: 0,
1117
- data: {
1118
- name: 'data111',
1119
- '/aaa': {
1120
- name: '123',
1121
- '/ccc': {
1122
- name: 'ccc',
1123
- },
1124
- },
1125
- '/sss': {
1126
- name: '999',
1127
- },
1128
- },
1129
- };
1130
- const ret = select({
1131
- type: 'object',
1132
- properties: {
1133
- route: ['.data', {
1134
- type: 'object',
1135
- properties: {},
1136
- }],
1137
- },
1138
- })(data);
1139
- assert.deepEqual(
1140
- {
1141
- route: data.data,
1142
- },
1143
- ret,
1144
- );
1145
- });