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