electrodb 1.10.0 → 1.11.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.
@@ -1,2507 +0,0 @@
1
- import {
2
- Schema,
3
- IndexCollections,
4
- EntityCollections,
5
- ItemTypeDescription,
6
- RequiredAttributes,
7
- HiddenAttributes,
8
- ReadOnlyAttributes,
9
- TableIndexes,
10
- TableIndexName,
11
- PKCompositeAttributes,
12
- SKCompositeAttributes,
13
- TableIndexPKCompositeAttributes,
14
- TableIndexSKCompositeAttributes,
15
- TableIndexPKAttributes,
16
- TableIndexSKAttributes,
17
- TableIndexCompositeAttributes,
18
- AllTableIndexCompositeAttributes,
19
- IndexPKAttributes,
20
- IndexSKAttributes,
21
- TableItem,
22
- ResponseItem,
23
- RequiredPutItems,
24
- PutItem,
25
-
26
- CreatedItem,
27
- UpdateData,
28
- RemoveItem,
29
- AppendItem,
30
- SetItem,
31
- AddItem,
32
- SubtractItem,
33
- DeleteItem,
34
- } from './schema';
35
- import { expectType, expectError, expectNotType } from 'tsd';
36
-
37
- type Resolve<T> = T extends Function | string | number | boolean
38
- ? T : {[Key in keyof T]: Resolve<T[Key]>}
39
-
40
- const troubleshoot = <Params extends any[], Response>(fn: (...params: Params) => Response, response: Response) => {};
41
- const magnify = <T>(value: T): Resolve<T> => { return {} as Resolve<T> };
42
-
43
- class MockEntity<A extends string, F extends string, C extends string, S extends Schema<A,F,C>> {
44
- readonly schema: S;
45
- constructor(schema: S) {
46
- this.schema = schema;
47
- };
48
-
49
- // done
50
- getIndexCollections(): IndexCollections<A,F,C,S> {
51
- return {} as IndexCollections<A,F,C,S>
52
- }
53
-
54
- // done
55
- getEntityCollections(): EntityCollections<A,F,C,S> {
56
- return {} as EntityCollections<A,F,C,S>;
57
- }
58
-
59
- // done
60
- getItemTypeDescription(): ItemTypeDescription<A,F,C,S> {
61
- return {} as ItemTypeDescription<A,F,C,S>;
62
- }
63
-
64
- // done
65
- getRequiredAttributes(): RequiredAttributes<A,F,C,S> {
66
- return {} as RequiredAttributes<A,F,C,S>;
67
- }
68
-
69
- // done
70
- getHiddenAttributes(): HiddenAttributes<A,F,C,S> {
71
- return {} as HiddenAttributes<A,F,C,S>;
72
- }
73
-
74
- // done
75
- getReadOnlyAttributes(): ReadOnlyAttributes<A,F,C,S> {
76
- return {} as ReadOnlyAttributes<A,F,C,S>;
77
- }
78
-
79
- // done
80
- getTableIndexes(): TableIndexes<A,F,C,S> {
81
- return {} as TableIndexes<A,F,C,S>;
82
- }
83
-
84
- // done
85
- getTableIndexName(): TableIndexName<A,F,C,S> {
86
- return {} as TableIndexName<A,F,C,S>;
87
- }
88
-
89
- // done
90
- getPKCompositeAttributes(): PKCompositeAttributes<A,F,C,S> {
91
- return {} as PKCompositeAttributes<A,F,C,S>;
92
- }
93
-
94
- // done
95
- getSKCompositeAttributes(): SKCompositeAttributes<A,F,C,S> {
96
- return {} as SKCompositeAttributes<A,F,C,S>;
97
- }
98
-
99
- // done
100
- getTableIndexPKCompositeAttributes(): TableIndexPKCompositeAttributes<A,F,C,S> {
101
- return {} as TableIndexPKCompositeAttributes<A,F,C,S>;
102
- }
103
-
104
- // done
105
- getTableIndexSKCompositeAttributes(): TableIndexSKCompositeAttributes<A,F,C,S> {
106
- return {} as TableIndexSKCompositeAttributes<A,F,C,S>;
107
- }
108
-
109
- getTableIndexPKAttributes(): TableIndexPKAttributes<A,F,C,S> {
110
- return {} as TableIndexPKAttributes<A,F,C,S>;
111
- }
112
-
113
- getTableIndexSKAttributes(): TableIndexSKAttributes<A,F,C,S> {
114
- return {} as TableIndexSKAttributes<A,F,C,S>;
115
- }
116
-
117
- getTableIndexCompositeAttributes(): Resolve<TableIndexCompositeAttributes<A,F,C,S>> {
118
- return {} as Resolve<TableIndexCompositeAttributes<A,F,C,S>>;
119
- }
120
-
121
- getIndexPKAttributes<I extends keyof S['indexes']>(index: I): Resolve<IndexPKAttributes<A,F,C,S,I>> {
122
- return {} as Resolve<IndexPKAttributes<A,F,C,S,I>>;
123
- }
124
-
125
- getIndexSKAttributes<I extends keyof S['indexes']>(index: I): IndexSKAttributes<A,F,C,S,I> {
126
- return {} as IndexSKAttributes<A,F,C,S,I>;
127
- }
128
-
129
- getAllTableIndexCompositeAttributes(): Resolve<AllTableIndexCompositeAttributes<A,F,C,S>> {
130
- return {} as Resolve<AllTableIndexCompositeAttributes<A,F,C,S>>;
131
- }
132
-
133
- getTableItem(): Resolve<TableItem<A,F,C,S>> {
134
- return {} as Resolve<TableItem<A,F,C,S>>;
135
- }
136
-
137
- getResponseItem(): ResponseItem<A,F,C,S> {
138
- return {} as ResponseItem<A,F,C,S>;
139
- }
140
-
141
- getRequiredPutItems(): RequiredPutItems<A,F,C,S> {
142
- return {} as RequiredPutItems<A,F,C,S>;
143
- }
144
-
145
- getCreatedItem(): CreatedItem<A,F,C,S,S['attributes']> {
146
- return {} as CreatedItem<A,F,C,S,S['attributes']>
147
- }
148
-
149
- getPutItem(): Resolve<PutItem<A,F,C,S>> {
150
- return {} as Resolve<PutItem<A,F,C,S>>;
151
- }
152
-
153
- getUpdateData(): Resolve<UpdateData<A,F,C,S>> {
154
- return {} as Resolve<UpdateData<A,F,C,S>>;
155
- }
156
-
157
- getRemoveItem(): Resolve<RemoveItem<A,F,C,S>> {
158
- return {} as Resolve<RemoveItem<A,F,C,S>>;
159
- }
160
-
161
- getAppendItem(): AppendItem<A,F,C,S> {
162
- return {} as AppendItem<A,F,C,S>;
163
- }
164
-
165
- getSetItem(): Resolve<SetItem<A,F,C,S>> {
166
- return {} as Resolve<SetItem<A,F,C,S>>;
167
- }
168
-
169
- getAddItem(): Resolve<AddItem<A,F,C,S>> {
170
- return {} as Resolve<AddItem<A,F,C,S>>;
171
- }
172
-
173
- getSubtractItem(): Resolve<SubtractItem<A,F,C,S>> {
174
- return {} as Resolve<SubtractItem<A,F,C,S>>;
175
- }
176
-
177
- getDeleteItem(): Resolve<DeleteItem<A,F,C,S>> {
178
- return {} as Resolve<DeleteItem<A,F,C,S>>;
179
- }
180
-
181
- }
182
-
183
- const entityWithoutCollection = new MockEntity({
184
- model: {
185
- entity: "entity2",
186
- service: "myservice",
187
- version: "myversion"
188
- },
189
- attributes: {
190
- attr1: {
191
- type: "string",
192
- },
193
- attr2: {
194
- type: "string",
195
- }
196
- },
197
- indexes: {
198
- myIndex: {
199
- pk: {
200
- field: "pk",
201
- composite: ["attr1"]
202
- },
203
- sk: {
204
- field: "sk",
205
- composite: ["attr2"]
206
- }
207
- },
208
- myIndex2: {
209
- index: "index2",
210
- pk: {
211
- field: "index2pk",
212
- composite: ["attr1"]
213
- },
214
- sk: {
215
- field: "index2sk",
216
- composite: ["attr2"]
217
- }
218
- },
219
- }
220
- });
221
-
222
- const entityWithSK = new MockEntity({
223
- model: {
224
- entity: "abc",
225
- service: "myservice",
226
- version: "myversion"
227
- },
228
- attributes: {
229
- attr1: {
230
- type: "string",
231
- default: "abc",
232
- get: (val) => val + 123,
233
- set: (val) => (val ?? "") + 456,
234
- validate: (val) => !!val,
235
- },
236
- attr2: {
237
- type: "string",
238
- // default: () => "sfg",
239
- // required: false,
240
- validate: (val) => val.length > 0
241
- },
242
- attr3: {
243
- type: ["123", "def", "ghi"] as const,
244
- default: "def"
245
- },
246
- attr4: {
247
- type: ["abc", "ghi"] as const,
248
- required: true
249
- },
250
- attr5: {
251
- type: "string"
252
- },
253
- attr6: {
254
- type: "number",
255
- default: () => 100,
256
- get: (val) => val + 5,
257
- set: (val) => (val ?? 0) + 5,
258
- validate: (val) => true,
259
- },
260
- attr7: {
261
- type: "any",
262
- default: () => false,
263
- get: (val) => ({key: "value"}),
264
- set: (val) => (val ?? 0) + 5,
265
- validate: (val) => true,
266
- },
267
- attr8: {
268
- type: "boolean",
269
- required: true,
270
- get: (val) => !!val,
271
- set: (val) => !!val,
272
- validate: (val) => !!val,
273
- },
274
- attr9: {
275
- type: "number"
276
- },
277
- attr10: {
278
- type: "boolean"
279
- }
280
- },
281
- indexes: {
282
- myIndex: {
283
- collection: "mycollection2",
284
- pk: {
285
- field: "pk",
286
- composite: ["attr1"]
287
- },
288
- sk: {
289
- field: "sk",
290
- composite: ["attr2"]
291
- }
292
- },
293
- myIndex2: {
294
- collection: "mycollection1",
295
- index: "gsi1",
296
- pk: {
297
- field: "gsipk1",
298
- composite: ["attr6", "attr9"]
299
- },
300
- sk: {
301
- field: "gsisk1",
302
- composite: ["attr4", "attr5"]
303
- }
304
- },
305
- myIndex3: {
306
- collection: "mycollection",
307
- index: "gsi2",
308
- pk: {
309
- field: "gsipk2",
310
- composite: ["attr5"]
311
- },
312
- sk: {
313
- field: "gsisk2",
314
- composite: ["attr4", "attr3", "attr9"]
315
- }
316
- }
317
- }
318
- });
319
-
320
- const entityWithoutSK = new MockEntity({
321
- model: {
322
- entity: "abc",
323
- service: "myservice",
324
- version: "myversion"
325
- },
326
- attributes: {
327
- attr1: {
328
- type: "string",
329
- // default: "abc",
330
- get: (val) => val + 123,
331
- set: (val) => (val ?? "0") + 456,
332
- validate: (val) => !!val,
333
- },
334
- attr2: {
335
- type: "string",
336
- // default: () => "sfg",
337
- // required: false,
338
- validate: (val) => val.length > 0
339
- },
340
- attr3: {
341
- type: ["123", "def", "ghi"] as const,
342
- default: "def"
343
- },
344
- attr4: {
345
- type: ["abc", "def"] as const,
346
- required: true
347
- },
348
- attr5: {
349
- type: "string"
350
- },
351
- attr6: {
352
- type: "number",
353
- default: () => 100,
354
- get: (val) => val + 5,
355
- set: (val) => (val ?? 0) + 5,
356
- validate: (val) => true,
357
- },
358
- attr7: {
359
- type: "any",
360
- default: () => false,
361
- get: (val) => ({key: "value"}),
362
- set: (val) => (val ?? 0) + 5,
363
- validate: (val) => true,
364
- },
365
- attr8: {
366
- type: "boolean",
367
- required: true,
368
- default: () => false,
369
- get: (val) => !!val,
370
- set: (val) => !!val,
371
- validate: (val) => !!val,
372
- },
373
- attr9: {
374
- type: "number"
375
- }
376
- },
377
- indexes: {
378
- myIndex: {
379
- pk: {
380
- field: "pk",
381
- composite: ["attr1"]
382
- }
383
- },
384
- myIndex2: {
385
- index: "gsi1",
386
- collection: "mycollection1",
387
- pk: {
388
- field: "gsipk1",
389
- composite: ["attr6", "attr9"]
390
- },
391
- sk: {
392
- field: "gsisk1",
393
- composite: []
394
- }
395
- },
396
- myIndex3: {
397
- collection: "mycollection",
398
- index: "gsi2",
399
- pk: {
400
- field: "gsipk2",
401
- composite: ["attr5"]
402
- },
403
- sk: {
404
- field: "gsisk2",
405
- composite: []
406
- }
407
- }
408
- }
409
- });
410
-
411
- const standAloneEntity = new MockEntity({
412
- model: {
413
- entity: "standalone",
414
- service: "myservice",
415
- version: "1"
416
- },
417
- attributes: {
418
- prop1: {
419
- type: "string",
420
- default: "abc"
421
- },
422
- prop2: {
423
- type: "string"
424
- },
425
- prop3: {
426
- type: "string"
427
- }
428
- },
429
- indexes: {
430
- index1: {
431
- pk: {
432
- field: "pk",
433
- composite: ["prop1", "prop2"]
434
- },
435
- sk: {
436
- field: "sk",
437
- composite: ["prop3"]
438
- }
439
- }
440
- }
441
- });
442
-
443
- const standAloneEntityWithDefault = new MockEntity({
444
- model: {
445
- entity: "standalone",
446
- service: "myservice",
447
- version: "1"
448
- },
449
- attributes: {
450
- prop1: {
451
- type: "string",
452
- default: "abc"
453
- },
454
- prop2: {
455
- type: "string"
456
- },
457
- prop3: {
458
- type: "string"
459
- },
460
- prop4: {
461
- type: "string",
462
- default: "abc"
463
- },
464
- prop5: {
465
- type: 'string',
466
- default: 'abc',
467
- required: true,
468
- }
469
- },
470
- indexes: {
471
- index1: {
472
- pk: {
473
- field: "pk",
474
- composite: ["prop1", "prop2"]
475
- },
476
- sk: {
477
- field: "sk",
478
- composite: ["prop3"]
479
- }
480
- }
481
- }
482
- });
483
-
484
- const standAloneEntity2 = new MockEntity({
485
- model: {
486
- entity: "standalone2",
487
- service: "myservice",
488
- version: "1"
489
- },
490
- attributes: {
491
- prop1: {
492
- type: "string",
493
- default: "abc"
494
- },
495
- prop2: {
496
- type: "string"
497
- },
498
- prop3: {
499
- type: "string",
500
- default: 'abc'
501
- },
502
- prop4: {
503
- type: 'map',
504
- required: true,
505
- properties: {
506
- prop1: {
507
- type: 'string',
508
- },
509
- prop2: {
510
- type: 'string',
511
- required: true,
512
- },
513
- prop3: {
514
- type: 'string',
515
- required: true,
516
- default: 'abc'
517
- }
518
- }
519
- },
520
- prop5: {
521
- type: 'map',
522
- required: true,
523
- default: {
524
- prop2: 'abc',
525
- prop3: 'abc',
526
- },
527
- properties: {
528
- prop1: {
529
- type: 'string',
530
- },
531
- prop2: {
532
- type: 'string',
533
- required: true,
534
- },
535
- prop3: {
536
- type: 'string',
537
- required: true,
538
- default: 'abc'
539
- }
540
- }
541
- }
542
- },
543
- indexes: {
544
- index1: {
545
- pk: {
546
- field: "pk",
547
- composite: ["prop1", "prop2"]
548
- },
549
- sk: {
550
- field: "sk",
551
- composite: ["prop3"]
552
- }
553
- }
554
- }
555
- });
556
-
557
- const normalEntity1 = new MockEntity({
558
- model: {
559
- entity: "normalEntity1",
560
- service: "myservice",
561
- version: "1"
562
- },
563
- attributes: {
564
- prop1: {
565
- type: "string",
566
- default: "abc"
567
- },
568
- prop2: {
569
- type: "string"
570
- },
571
- prop3: {
572
- type: "string",
573
- required: true
574
- },
575
- prop4: {
576
- type: "number"
577
- },
578
- prop10: {
579
- type: "boolean"
580
- }
581
- },
582
- indexes: {
583
- tableIndex: {
584
- collection: "normalcollection",
585
- pk: {
586
- field: "pk",
587
- composite: ["prop1", "prop2"]
588
- },
589
- sk: {
590
- field: "sk",
591
- composite: ["prop4"]
592
- }
593
- }
594
- }
595
- });
596
-
597
- const normalEntity2 = new MockEntity({
598
- model: {
599
- entity: "normalEntity2",
600
- service: "myservice",
601
- version: "1"
602
- },
603
- attributes: {
604
- prop1: {
605
- type: "string"
606
- },
607
- prop2: {
608
- type: "string"
609
- },
610
- prop3: {
611
- type: "string",
612
- required: true
613
- },
614
- prop5: {
615
- type: "number"
616
- },
617
- attr6: {
618
- type: "number",
619
- default: () => 100,
620
- get: (val) => val + 5,
621
- set: (val) => (val ?? 0) + 5,
622
- validate: (val) => true,
623
- },
624
- attr9: {
625
- type: "number"
626
- },
627
- },
628
- indexes: {
629
- indexTable: {
630
- collection: "normalcollection",
631
- pk: {
632
- field: "pk",
633
- composite: ["prop1", "prop2"]
634
- },
635
- sk: {
636
- field: "sk",
637
- composite: ["prop5"]
638
- }
639
- },
640
- anotherIndex: {
641
- index: "gsi1",
642
- collection: "mycollection1",
643
- pk: {
644
- field: "gsipk1",
645
- composite: ["attr6", "attr9"]
646
- },
647
- sk: {
648
- field: "gsisk1",
649
- composite: []
650
- }
651
- }
652
- }
653
- });
654
-
655
- const entityWithHiddenAttributes1 = new MockEntity({
656
- model: {
657
- entity: "e1",
658
- service: "s1",
659
- version: "1"
660
- },
661
- attributes: {
662
- prop1: {
663
- type: "string"
664
- },
665
- prop2: {
666
- type: "string"
667
- },
668
- prop3: {
669
- type: "string",
670
- required: true,
671
- hidden: true
672
- }
673
- },
674
- indexes: {
675
- record: {
676
- collection: "collection1",
677
- pk: {
678
- field: "pk",
679
- composite: ["prop1"]
680
- },
681
- sk: {
682
- field: "sk",
683
- composite: ["prop2"]
684
- }
685
- }
686
- }
687
- });
688
-
689
- let entityWithHiddenAttributes2 = new MockEntity({
690
- model: {
691
- entity: "e2",
692
- service: "s1",
693
- version: "1"
694
- },
695
- attributes: {
696
- prop1: {
697
- type: "string"
698
- },
699
- prop2: {
700
- type: "string"
701
- },
702
- prop4: {
703
- type: "string",
704
- hidden: true
705
- },
706
- prop5: {
707
- type: "string",
708
- }
709
- },
710
- indexes: {
711
- record: {
712
- collection: "collection1",
713
- pk: {
714
- field: "pk",
715
- composite: ["prop1"]
716
- },
717
- sk: {
718
- field: "sk",
719
- composite: ["prop2"]
720
- }
721
- }
722
- }
723
- });
724
-
725
- const entityWithMultipleCollections2 = new MockEntity({
726
- model: {
727
- entity: "entity2",
728
- service: "myservice",
729
- version: "myversion"
730
- },
731
- attributes: {
732
- attr1: {
733
- type: "string",
734
- },
735
- attr2: {
736
- type: "string",
737
- }
738
- },
739
- indexes: {
740
- myIndex: {
741
- collection: ["outercollection", "innercollection"] as const,
742
- pk: {
743
- field: "pk",
744
- composite: ["attr1"]
745
- },
746
- sk: {
747
- field: "sk",
748
- composite: ["attr2"]
749
- }
750
- },
751
- myIndex2: {
752
- index: "index2",
753
- collection: ["extracollection"] as const,
754
- pk: {
755
- field: "index2pk",
756
- composite: ["attr1"]
757
- },
758
- sk: {
759
- field: "index2sk",
760
- composite: ["attr2"]
761
- }
762
- },
763
- }
764
- });
765
-
766
- const entityWithMultipleCollections3 = new MockEntity({
767
- model: {
768
- entity: "entity3",
769
- service: "myservice",
770
- version: "myversion"
771
- },
772
- attributes: {
773
- attr1: {
774
- type: "string",
775
- },
776
- attr2: {
777
- type: "string",
778
- }
779
- },
780
- indexes: {
781
- myIndex: {
782
- collection: "outercollection" as const,
783
- pk: {
784
- field: "pk",
785
- composite: ["attr1"]
786
- },
787
- sk: {
788
- field: "sk",
789
- composite: ["attr2"]
790
- }
791
- },
792
- myIndex2: {
793
- index: "index2",
794
- collection: "extracollection" as const,
795
- pk: {
796
- field: "index2pk",
797
- composite: ["attr1"]
798
- },
799
- sk: {
800
- field: "index2sk",
801
- composite: ["attr2"]
802
- }
803
- },
804
- }
805
- });
806
-
807
- const entityWithWatchAll = new MockEntity({
808
- model: {
809
- entity: "withwatchall",
810
- service: "service",
811
- version: "1"
812
- },
813
- attributes: {
814
- prop1: {
815
- type: "string"
816
- },
817
- prop2: {
818
- type: "string"
819
- },
820
- prop3: {
821
- type: "string",
822
- watch: "*",
823
- set: (value) => {
824
- return value;
825
- }
826
- },
827
- },
828
- indexes: {
829
- record: {
830
- pk: {
831
- field: "pk",
832
- composite: ["prop1"]
833
- },
834
- sk: {
835
- field: "sk",
836
- composite: ["prop2"]
837
- }
838
- }
839
- }
840
- });
841
-
842
- const entityWithComplexShapes = new MockEntity({
843
- model: {
844
- entity: "entity",
845
- service: "service",
846
- version: "1"
847
- },
848
- attributes: {
849
- prop1: {
850
- type: "string",
851
- label: "props"
852
- },
853
- prop2: {
854
- type: "string",
855
- },
856
- prop3: {
857
- type: "map",
858
- properties: {
859
- val1: {
860
- type: "string"
861
- }
862
- }
863
- },
864
- prop4: {
865
- type: "list",
866
- items: {
867
- type: "map",
868
- properties: {
869
- val2: {
870
- type: "number",
871
- },
872
- val3: {
873
- type: "list",
874
- items: {
875
- type: "string"
876
- }
877
- },
878
- val4: {
879
- type: "set",
880
- items: "number"
881
- }
882
- }
883
- }
884
- },
885
- prop5: {
886
- type: "set",
887
- items: "string"
888
- },
889
- prop6: {
890
- type: "set",
891
- items: "string"
892
- }
893
- },
894
- indexes: {
895
- record: {
896
- collection: "mops",
897
- pk: {
898
- field: "pk",
899
- composite: ["prop1"]
900
- },
901
- sk: {
902
- field: "sk",
903
- composite: ["prop2"]
904
- }
905
- }
906
- }
907
- });
908
-
909
- const entityWithComplexShapesRequired = new MockEntity({
910
- model: {
911
- entity: "entity",
912
- service: "service",
913
- version: "1"
914
- },
915
- attributes: {
916
- prop1: {
917
- type: "string",
918
- label: "props"
919
- },
920
- prop2: {
921
- type: "string",
922
- },
923
- attr3: {
924
- type: "map",
925
- properties: {
926
- val1: {
927
- type: "string",
928
- required: true
929
- }
930
- },
931
- required: true
932
- },
933
- attr4: {
934
- type: "list",
935
- items: {
936
- type: "map",
937
- properties: {
938
- val2: {
939
- type: "number",
940
- required: true
941
- },
942
- val3: {
943
- type: "list",
944
- items: {
945
- type: "string",
946
- required: true
947
- },
948
- required: true
949
- },
950
- val4: {
951
- type: "set",
952
- items: "number",
953
- required: true
954
- }
955
- }
956
- },
957
- required: true
958
- },
959
- attr5: {
960
- type: "set",
961
- items: "string",
962
- required: true
963
- },
964
- attr6: {
965
- type: "set",
966
- items: "string",
967
- required: true
968
- }
969
- },
970
- indexes: {
971
- record: {
972
- collection: "mops",
973
- pk: {
974
- field: "pk",
975
- composite: ["prop1"]
976
- },
977
- sk: {
978
- field: "sk",
979
- composite: ["prop2"]
980
- }
981
- }
982
- }
983
- });
984
-
985
- const entityWithComplexShapesRequiredOnEdge = new MockEntity({
986
- model: {
987
- entity: "entity",
988
- service: "service",
989
- version: "1"
990
- },
991
- attributes: {
992
- prop1: {
993
- type: "string",
994
- label: "props"
995
- },
996
- prop2: {
997
- type: "string",
998
- },
999
- attrz3: {
1000
- type: "map",
1001
- properties: {
1002
- val1: {
1003
- type: "string",
1004
- required: true,
1005
- validate: /./gi
1006
- }
1007
- }
1008
- },
1009
- attrz4: {
1010
- type: "list",
1011
- items: {
1012
- type: "map",
1013
- properties: {
1014
- val2: {
1015
- type: "number",
1016
- required: true,
1017
- },
1018
- val3: {
1019
- type: "list",
1020
- items: {
1021
- type: "string",
1022
- required: true
1023
- },
1024
- },
1025
- val4: {
1026
- type: "set",
1027
- items: "number",
1028
- },
1029
- val5: {
1030
- type: "map",
1031
- properties: {
1032
- val6: {
1033
- type: "string",
1034
- required: true
1035
- }
1036
- }
1037
- }
1038
- }
1039
- },
1040
- },
1041
- attrz5: {
1042
- type: "set",
1043
- items: "string",
1044
- },
1045
- attrz6: {
1046
- type: "set",
1047
- items: "string",
1048
- }
1049
- },
1050
- indexes: {
1051
- record: {
1052
- collection: "mops",
1053
- pk: {
1054
- field: "pk",
1055
- composite: ["prop1"]
1056
- },
1057
- sk: {
1058
- field: "sk",
1059
- composite: ["prop2"]
1060
- }
1061
- }
1062
- }
1063
- });
1064
-
1065
- const entityWithComplexShapesRequiredOnEdgeWithDefault = new MockEntity({
1066
- model: {
1067
- entity: "entity",
1068
- service: "service",
1069
- version: "1"
1070
- },
1071
- attributes: {
1072
- prop1: {
1073
- type: "string",
1074
- label: "props"
1075
- },
1076
- prop2: {
1077
- type: "string",
1078
- default: '42',
1079
- },
1080
- attrz3: {
1081
- type: "map",
1082
- properties: {
1083
- val1: {
1084
- type: "string",
1085
- required: true,
1086
- validate: /./gi
1087
- }
1088
- }
1089
- },
1090
- attrz4: {
1091
- type: "list",
1092
- items: {
1093
- type: "map",
1094
- properties: {
1095
- val2: {
1096
- type: "number",
1097
- required: true,
1098
- default: 42,
1099
- },
1100
- val3: {
1101
- type: "list",
1102
- items: {
1103
- type: "string",
1104
- required: true
1105
- },
1106
- },
1107
- val4: {
1108
- type: "set",
1109
- items: "number",
1110
- },
1111
- val5: {
1112
- type: "map",
1113
- properties: {
1114
- val6: {
1115
- type: "string",
1116
- required: true,
1117
- default: '42'
1118
- }
1119
- },
1120
- },
1121
- val6: {
1122
- type: 'boolean'
1123
- }
1124
- }
1125
- },
1126
- },
1127
- attrz5: {
1128
- type: "set",
1129
- items: "string",
1130
- },
1131
- attrz6: {
1132
- type: "set",
1133
- items: "string",
1134
- }
1135
- },
1136
- indexes: {
1137
- record: {
1138
- collection: "mops",
1139
- pk: {
1140
- field: "pk",
1141
- composite: ["prop1"]
1142
- },
1143
- sk: {
1144
- field: "sk",
1145
- composite: ["prop2"]
1146
- }
1147
- }
1148
- }
1149
- });
1150
-
1151
- const deepMap = new MockEntity({
1152
- model: {
1153
- entity: "deepmap",
1154
- service: "versioncontrol",
1155
- version: "1"
1156
- },
1157
- attributes: {
1158
- prop1: {
1159
- type: 'string'
1160
- },
1161
- prop2: {
1162
- type: 'map',
1163
- properties: {
1164
- prop3: {
1165
- type: 'map',
1166
- properties: {
1167
- prop4: {
1168
- type: 'map',
1169
- properties: {
1170
- type5: {
1171
- type: 'string'
1172
- }
1173
- }
1174
- }
1175
- }
1176
- }
1177
- }
1178
- }
1179
- },
1180
- indexes: {
1181
- record: {
1182
- pk: {
1183
- field: 'pk',
1184
- composite: ['prop1']
1185
- }
1186
- }
1187
- }
1188
- })
1189
-
1190
- const complex = new MockEntity({
1191
- model: {
1192
- entity: "user",
1193
- service: "versioncontrol",
1194
- version: "1"
1195
- },
1196
- attributes: {
1197
- stringVal: {
1198
- type: "string",
1199
- default: () => "abc",
1200
- validate: (value) => value !== undefined,
1201
- get: (value) => {
1202
- return value;
1203
- },
1204
- set: (value) => {
1205
- return value;
1206
- }
1207
- },
1208
- enumVal: {
1209
- type: ["abc", "def"] as const,
1210
- validate: (value: "abc" | "def") => value !== undefined,
1211
- default: () => "abc",
1212
- get: (value: "abc" | "def") => {
1213
- return value;
1214
- },
1215
- set: (value?: "abc" | "def") => {
1216
- return value;
1217
- }
1218
- },
1219
- numVal: {
1220
- type: "number",
1221
- validate: (value) => value !== undefined,
1222
- default: () => 123,
1223
- get: (value) => {
1224
- return value;
1225
- },
1226
- set: (value) => {
1227
- return value;
1228
- }
1229
- },
1230
- boolValue: {
1231
- type: "boolean",
1232
- validate: (value) => value !== undefined,
1233
- default: () => true,
1234
- get: (value) => {
1235
- return value;
1236
- },
1237
- set: (value) => {
1238
- return value;
1239
- }
1240
- },
1241
- stringSetValue: {
1242
- type: "set",
1243
- items: "string",
1244
- validate: (value) => value !== undefined,
1245
- default: () => ["abc"],
1246
- get: (value) => {
1247
- return value;
1248
- },
1249
- set: (value) => {
1250
- return value;
1251
- }
1252
- },
1253
- numberSetValue: {
1254
- type: "set",
1255
- items: "number",
1256
- validate: (value) => value !== undefined,
1257
- default: () => [1],
1258
- get: (value) => {
1259
- return value;
1260
- },
1261
- set: (value) => {
1262
- return value;
1263
- }
1264
- },
1265
- stringListValue: {
1266
- type: "list",
1267
- items: {
1268
- type: "string",
1269
- default: "abc",
1270
- validate: (value) => value !== undefined,
1271
- get: (value) => {
1272
- return value;
1273
- },
1274
- set: (value) => {
1275
- return value;
1276
- }
1277
- },
1278
- default: ["abc"],
1279
- validate: (value: string[]) => value !== undefined,
1280
- get: (value: string[]) => {
1281
- return value;
1282
- },
1283
- set: (value?: string[]) => {
1284
- return value;
1285
- }
1286
- },
1287
- numberListValue: {
1288
- type: "list",
1289
- items: {
1290
- type: "number",
1291
- validate: (value) => value !== undefined,
1292
- default: 0,
1293
- get: (value) => {
1294
- return value;
1295
- },
1296
- set: (value) => {
1297
- return value;
1298
- }
1299
- },
1300
- default: [],
1301
- validate: (value: number[]) => value !== undefined,
1302
- get: (value: number[]) => {
1303
- return value;
1304
- },
1305
- set: (value?: number[]) => {
1306
- return value;
1307
- }
1308
- },
1309
- mapListValue: {
1310
- type: "list",
1311
- items: {
1312
- type: "map",
1313
- properties: {
1314
- stringVal: {
1315
- type: "string",
1316
- default: "def",
1317
- validate: (value) => value !== undefined,
1318
- get: (value) => {
1319
- return value;
1320
- },
1321
- set: (value) => {
1322
- return value;
1323
- }
1324
- },
1325
- numVal: {
1326
- type: "number",
1327
- default: 5,
1328
- validate: (value) => value !== undefined,
1329
- get: (value) => {
1330
- return value;
1331
- },
1332
- set: (value) => {
1333
- return value;
1334
- }
1335
- },
1336
- boolValue: {
1337
- type: "boolean",
1338
- default: false,
1339
- validate: (value) => value !== undefined,
1340
- get: (value) => {
1341
- return value;
1342
- },
1343
- set: (value) => {
1344
- return value;
1345
- }
1346
- },
1347
- enumVal: {
1348
- type: ["abc", "def"] as const,
1349
- validate: (value: "abc" | "def") => value !== undefined,
1350
- default: () => "abc",
1351
- get: (value: "abc" | "def") => {
1352
- return value;
1353
- },
1354
- set: (value?: "abc" | "def") => {
1355
- return value;
1356
- }
1357
- },
1358
- },
1359
- validate: (value) => value !== undefined,
1360
- default: {
1361
- stringVal: "abc",
1362
- numVal: 123,
1363
- boolValue: false,
1364
- },
1365
- get: (value) => {
1366
- return value;
1367
- },
1368
- set: (value) => {
1369
- return value;
1370
- }
1371
- },
1372
- get: (value: any) => {
1373
- return value;
1374
- },
1375
- set: (value: any) => {
1376
- return value;
1377
- }
1378
- },
1379
- mapValue: {
1380
- type: "map",
1381
- properties: {
1382
- stringVal: {
1383
- type: "string",
1384
- default: () => "abc",
1385
- validate: (value) => value !== undefined,
1386
- get: (value) => {
1387
- return value;
1388
- },
1389
- set: (value) => {
1390
- return value;
1391
- }
1392
- },
1393
- numVal: {
1394
- type: "number",
1395
- default: () => 10,
1396
- validate: (value) => value !== undefined,
1397
- get: (value) => {
1398
- return value;
1399
- },
1400
- set: (value) => {
1401
- return value;
1402
- }
1403
- },
1404
- boolValue: {
1405
- type: "boolean",
1406
- default: () => false,
1407
- validate: (value) => value !== undefined,
1408
- get: (value) => {
1409
- return value;
1410
- },
1411
- set: (value) => {
1412
- return value;
1413
- }
1414
- },
1415
- enumVal: {
1416
- type: ["abc", "def"] as const,
1417
- validate: (value: "abc" | "def") => value !== undefined,
1418
- default: () => "abc",
1419
- get: (value: "abc" | "def") => {
1420
- return value;
1421
- },
1422
- set: (value?: "abc" | "def") => {
1423
- return value;
1424
- }
1425
- },
1426
- stringListValue: {
1427
- type: "list",
1428
- items: {
1429
- type: "string",
1430
- default: "abc",
1431
- validate: (value) => value !== undefined,
1432
- get: (value) => {
1433
- return value;
1434
- },
1435
- set: (value) => {
1436
- return value;
1437
- }
1438
- },
1439
- default: [],
1440
- validate: (value: string[]) => value !== undefined,
1441
- get: (value: string[]) => {
1442
- return value;
1443
- },
1444
- set: (value?: string[]) => {
1445
- return value;
1446
- }
1447
- },
1448
- numberListValue: {
1449
- type: "list",
1450
- items: {
1451
- type: "number",
1452
- default: () => 100,
1453
- validate: (value) => value !== undefined,
1454
- get: (value) => {
1455
- return value;
1456
- },
1457
- set: (value) => {
1458
- return value;
1459
- }
1460
- },
1461
- default: [123, 123],
1462
- validate: (value: number[]) => value !== undefined,
1463
- get: (value: number[]) => {
1464
- return value;
1465
- },
1466
- set: (value?: number[]) => {
1467
- return value;
1468
- }
1469
- },
1470
- mapListValue: {
1471
- type: "list",
1472
- items: {
1473
- type: "map",
1474
- properties: {
1475
- stringVal: {
1476
- type: "string",
1477
- default: "def",
1478
- validate: (value) => value !== undefined,
1479
- get: (value) => {
1480
- return value;
1481
- },
1482
- set: (value) => {
1483
- return value;
1484
- }
1485
- },
1486
- numVal: {
1487
- type: "number",
1488
- default: 100,
1489
- validate: (value) => value !== undefined,
1490
- get: (value) => {
1491
- return value;
1492
- },
1493
- set: (value) => {
1494
- return value;
1495
- }
1496
- },
1497
- boolValue: {
1498
- type: "boolean",
1499
- default: () => false,
1500
- validate: (value) => value !== undefined,
1501
- get: (value) => {
1502
- return value;
1503
- },
1504
- set: (value) => {
1505
- return value;
1506
- }
1507
- },
1508
- stringSetValue: {
1509
- type: "set",
1510
- items: "string",
1511
- default: ["abc"],
1512
- validate: (value) => value !== undefined,
1513
- get: (value) => {
1514
- return value;
1515
- },
1516
- set: (value) => {
1517
- return value;
1518
- }
1519
- },
1520
- numberSetValue: {
1521
- type: "set",
1522
- items: "number",
1523
- default: [5],
1524
- validate: (value) => value !== undefined,
1525
- get: (value) => {
1526
- return value;
1527
- },
1528
- set: (value) => {
1529
- return value;
1530
- }
1531
- },
1532
- enumVal: {
1533
- type: ["abc", "def"] as const,
1534
- validate: (value: "abc" | "def") => value !== undefined,
1535
- default: () => "abc",
1536
- get: (value: "abc" | "def") => {
1537
- return value;
1538
- },
1539
- set: (value?: "abc" | "def") => {
1540
- return value;
1541
- }
1542
- },
1543
- },
1544
- default: () => ({
1545
- stringVal: "anx",
1546
- numVal: 13,
1547
- boolValue: true,
1548
- emumValue: "abc",
1549
- stringSetValue: ["def"],
1550
- numberSetValue: [10],
1551
- }),
1552
- validate: (value) => value !== undefined,
1553
- get: (value) => {
1554
- return value;
1555
- },
1556
- set: (value) => {
1557
- return value;
1558
- }
1559
- },
1560
- default: [],
1561
- validate: (value: Record<string, any>[]) => value !== undefined,
1562
- get: (value: Record<string, any>[]) => {
1563
- return value;
1564
- },
1565
- set: (value?: Record<string, any>[]) => {
1566
- return value;
1567
- }
1568
- },
1569
- },
1570
- default: () => undefined,
1571
- validate: (value) => value !== undefined,
1572
- get: (value) => {
1573
- return value;
1574
- },
1575
- set: (value) => {
1576
- return value;
1577
- }
1578
- }
1579
- },
1580
- indexes: {
1581
- user: {
1582
- collection: "complexShapes",
1583
- pk: {
1584
- composite: ["username"],
1585
- field: "pk"
1586
- },
1587
- sk: {
1588
- composite: [],
1589
- field: "sk"
1590
- }
1591
- },
1592
- _: {
1593
- collection: "owned",
1594
- index: "gsi1pk-gsi1sk-index",
1595
- pk: {
1596
- composite: ["username"],
1597
- field: "gsi1pk"
1598
- },
1599
- sk: {
1600
- field: "gsi1sk",
1601
- composite: []
1602
- }
1603
- }
1604
- }
1605
- });
1606
-
1607
- const mapTests = new MockEntity({
1608
- model: {
1609
- entity: "mapTests",
1610
- service: "tests",
1611
- version: "1"
1612
- },
1613
- attributes: {
1614
- username: {
1615
- type: "string"
1616
- },
1617
- mapObject: {
1618
- type: "map",
1619
- properties: {
1620
- minimal: {
1621
- type: "string"
1622
- },
1623
- required: {
1624
- type: "string",
1625
- required: true
1626
- },
1627
- hidden: {
1628
- type: "string",
1629
- hidden: true
1630
- },
1631
- readOnly: {
1632
- type: "string",
1633
- readOnly: true
1634
- },
1635
- anotherMap: {
1636
- type: "map",
1637
- properties: {
1638
- minimal: {
1639
- type: "string"
1640
- },
1641
- required: {
1642
- type: "string",
1643
- required: true
1644
- },
1645
- hidden: {
1646
- type: "string",
1647
- hidden: true
1648
- },
1649
- readOnly: {
1650
- type: "string",
1651
- readOnly: true
1652
- }
1653
- }
1654
- }
1655
- }
1656
- }
1657
- },
1658
- indexes: {
1659
- user: {
1660
- collection: "complexShapes",
1661
- pk: {
1662
- composite: ["username"],
1663
- field: "pk"
1664
- },
1665
- sk: {
1666
- composite: [],
1667
- field: "sk"
1668
- }
1669
- }
1670
- }
1671
- });
1672
-
1673
- // casing property on schema
1674
- const casingEntity = new MockEntity({
1675
- model: {
1676
- service: "MallStoreDirectory",
1677
- entity: "MallStores",
1678
- version: "1",
1679
- },
1680
- attributes: {
1681
- id: {
1682
- type: "string",
1683
- field: "id",
1684
- },
1685
- mall: {
1686
- type: "string",
1687
- required: true,
1688
- field: "mall",
1689
- },
1690
- stores: {
1691
- type: "number",
1692
- },
1693
- value: {
1694
- type: "string"
1695
- }
1696
- },
1697
- indexes: {
1698
- store: {
1699
- collection: ["myCollection"],
1700
- pk: {
1701
- field: "parition_key",
1702
- composite: ["id"],
1703
- casing: "lower",
1704
- },
1705
- sk: {
1706
- field: "sort_key",
1707
- composite: ["mall", "stores"],
1708
- casing: "upper",
1709
- }
1710
- },
1711
- other: {
1712
- index: "idx1",
1713
- collection: "otherCollection",
1714
- pk: {
1715
- field: "parition_key_idx1",
1716
- composite: ["mall"],
1717
- casing: "upper",
1718
- },
1719
- sk: {
1720
- field: "sort_key_idx1",
1721
- composite: ["id", "stores"],
1722
- casing: "default",
1723
- }
1724
- }
1725
- }
1726
- });
1727
-
1728
- const readOnlyEntity = new MockEntity({
1729
- model: {
1730
- entity: "readOnlyEntity",
1731
- service: "tests",
1732
- version: "1"
1733
- },
1734
- attributes: {
1735
- prop1: {
1736
- type: 'string',
1737
- readOnly: true,
1738
- },
1739
- prop2: {
1740
- type: 'number',
1741
- readOnly: false,
1742
- },
1743
- prop3: {
1744
- type: 'boolean',
1745
- readOnly: false,
1746
- },
1747
- prop4: {
1748
- type: ['abc'] as const,
1749
- readOnly: true,
1750
- },
1751
- prop5: {
1752
- type: 'map',
1753
- readOnly: true,
1754
- properties: {
1755
- mapProperty: {
1756
- type: 'string'
1757
- }
1758
- }
1759
- },
1760
- prop6: {
1761
- type: 'list',
1762
- readOnly: true,
1763
- items: {
1764
- type: 'string'
1765
- }
1766
- },
1767
- prop7: {
1768
- type: 'set',
1769
- readOnly: true,
1770
- items: 'string'
1771
- },
1772
- },
1773
- indexes: {
1774
- record: {
1775
- collection: "complexShapes",
1776
- pk: {
1777
- composite: ["prop1"],
1778
- field: "pk"
1779
- },
1780
- sk: {
1781
- composite: ["prop2"],
1782
- field: "sk"
1783
- }
1784
- }
1785
- }
1786
- });
1787
-
1788
- const diverseTableKeyTypes = new MockEntity({
1789
- model: {
1790
- service: "test",
1791
- entity: "diverseTableKeyTypes",
1792
- version: "1",
1793
- },
1794
- attributes: {
1795
- prop1: {
1796
- type: 'string',
1797
- readOnly: true,
1798
- },
1799
- prop2: {
1800
- type: 'number',
1801
- readOnly: false,
1802
- },
1803
- prop3: {
1804
- type: 'boolean',
1805
- readOnly: false,
1806
- },
1807
- prop4: {
1808
- type: ['abc'] as const,
1809
- readOnly: true,
1810
- },
1811
- prop5: {
1812
- type: 'string',
1813
- readOnly: true,
1814
- },
1815
- prop6: {
1816
- type: 'number',
1817
- readOnly: false,
1818
- },
1819
- prop7: {
1820
- type: 'boolean',
1821
- readOnly: false,
1822
- },
1823
- prop8: {
1824
- type: ['abc'] as const,
1825
- readOnly: true,
1826
- },
1827
- },
1828
- indexes: {
1829
- record: {
1830
- pk: {
1831
- field: 'pk',
1832
- composite: ['prop1', 'prop2', 'prop3', 'prop4']
1833
- },
1834
- sk: {
1835
- field: 'sk',
1836
- composite: ['prop5', 'prop6', 'prop7', 'prop8']
1837
- }
1838
- }
1839
- }
1840
- })
1841
-
1842
- // getEntityCollections
1843
- expectType<{normalcollection: 'tableIndex'}>(normalEntity1.getEntityCollections());
1844
-
1845
- expectType<{
1846
- normalcollection: 'indexTable';
1847
- mycollection1: 'anotherIndex'
1848
- }>(normalEntity2.getEntityCollections());
1849
-
1850
- expectType<{}>(entityWithoutCollection.getEntityCollections());
1851
-
1852
- expectType<{
1853
- outercollection: 'myIndex',
1854
- innercollection: 'myIndex',
1855
- extracollection: 'myIndex2'
1856
- }>(entityWithMultipleCollections2.getEntityCollections());
1857
-
1858
- expectType<{
1859
- outercollection: 'myIndex',
1860
- extracollection: 'myIndex2'
1861
- }>(entityWithMultipleCollections3.getEntityCollections());
1862
-
1863
- // getIndexCollections
1864
- expectType<'normalcollection'>(normalEntity1.getIndexCollections());
1865
- expectType<'normalcollection' | 'mycollection1'>(normalEntity2.getIndexCollections());
1866
- expectType<never>(entityWithoutCollection.getIndexCollections());
1867
- expectType<'outercollection' | 'innercollection' | 'extracollection'>(entityWithMultipleCollections2.getIndexCollections());
1868
- expectType<'outercollection' | 'extracollection'>(entityWithMultipleCollections3.getIndexCollections());
1869
-
1870
- // ItemTypeDescription
1871
- // todo: current implementation is shallow, is that a problem?
1872
- expectType<{attr1: 'string', attr2: 'string'}>(entityWithMultipleCollections2.getItemTypeDescription());
1873
- expectType<{
1874
- attr1: 'string';
1875
- attr2: 'string';
1876
- attr3: Readonly<["123", "def", "ghi"]>;
1877
- attr4: Readonly<['abc', 'def']>;
1878
- attr5: 'string';
1879
- attr6: 'number';
1880
- attr7: 'any';
1881
- attr8: 'boolean';
1882
- attr9: 'number';
1883
- }>(entityWithoutSK.getItemTypeDescription());
1884
-
1885
- expectType<{
1886
- username: 'string',
1887
- mapObject: 'map'
1888
- }>(mapTests.getItemTypeDescription())
1889
-
1890
- // getRequiredAttributes
1891
- expectType<'attr4' | 'attr8'>(entityWithoutSK.getRequiredAttributes());
1892
- expectType<'prop3'>(normalEntity2.getRequiredAttributes());
1893
- expectType<'attr3' | 'attr4' | 'attr5' | 'attr6'>(entityWithComplexShapesRequired.getRequiredAttributes());
1894
-
1895
-
1896
- // getHiddenAttributes
1897
- expectType<'prop4'>(entityWithHiddenAttributes2.getHiddenAttributes());
1898
-
1899
- // getReadOnlyAttributes
1900
- expectType<'prop1' | 'prop4' | 'prop5' | 'prop6' | 'prop7'>(readOnlyEntity.getReadOnlyAttributes());
1901
-
1902
- // getTableIndexes
1903
- expectType<{
1904
- store: 'table',
1905
- other: 'secondary'
1906
- }>(casingEntity.getTableIndexes());
1907
-
1908
- expectType<{
1909
- myIndex: 'table';
1910
- myIndex2: 'secondary';
1911
- myIndex3: 'secondary';
1912
- }>(entityWithSK.getTableIndexes());
1913
-
1914
- expectType<{
1915
- myIndex: 'table';
1916
- myIndex2: 'secondary';
1917
- myIndex3: 'secondary';
1918
- }>(entityWithoutSK.getTableIndexes());
1919
-
1920
- // getTableIndexName
1921
- expectType<'store'>(casingEntity.getTableIndexName());
1922
- expectType<'myIndex'>(entityWithSK.getTableIndexName());
1923
- expectType<'myIndex'>(entityWithoutSK.getTableIndexName());
1924
-
1925
- // getPKCompositeAttributes
1926
- expectType<{
1927
- tableIndex: 'prop1' | 'prop2';
1928
- }>(normalEntity1.getPKCompositeAttributes());
1929
-
1930
- expectType<{
1931
- myIndex: 'attr1';
1932
- myIndex2: 'attr6' | 'attr9';
1933
- myIndex3: 'attr5';
1934
- }>(entityWithSK.getPKCompositeAttributes());
1935
-
1936
- expectType<{
1937
- myIndex: 'attr1';
1938
- myIndex2: 'attr6' | 'attr9';
1939
- myIndex3: 'attr5';
1940
- }>(entityWithoutSK.getPKCompositeAttributes());
1941
-
1942
- // getSKCompositeAttributes
1943
- expectType<{
1944
- tableIndex: 'prop4'
1945
- }>(normalEntity1.getSKCompositeAttributes());
1946
-
1947
- expectType<{
1948
- myIndex: 'attr2';
1949
- myIndex2: 'attr4' | 'attr5';
1950
- myIndex3: 'attr4' | 'attr3' | 'attr9';
1951
- }>(entityWithSK.getSKCompositeAttributes());
1952
-
1953
- expectType<{
1954
- myIndex: never;
1955
- myIndex2: never;
1956
- myIndex3: never;
1957
- }>(entityWithoutSK.getSKCompositeAttributes());
1958
-
1959
- // getTableIndexPKCompositeAttributes
1960
- expectType<{
1961
- tableIndex: 'prop1' | 'prop2';
1962
- }>(normalEntity1.getTableIndexPKCompositeAttributes());
1963
-
1964
- expectType<{
1965
- myIndex: 'attr1';
1966
- }>(entityWithSK.getTableIndexPKCompositeAttributes());
1967
-
1968
- expectType<{
1969
- myIndex: 'attr1';
1970
- }>(entityWithoutSK.getTableIndexPKCompositeAttributes());
1971
-
1972
- // getTableIndexSKCompositeAttributes
1973
- expectType<{
1974
- tableIndex: 'prop4'
1975
- }>(normalEntity1.getTableIndexSKCompositeAttributes());
1976
-
1977
- expectType<{
1978
- myIndex: 'attr2';
1979
- }>(entityWithSK.getTableIndexSKCompositeAttributes());
1980
-
1981
- expectType<{
1982
- myIndex: never;
1983
- }>(entityWithoutSK.getTableIndexSKCompositeAttributes());
1984
-
1985
- // getTableIndexPKAttributes
1986
- expectType<{attr1: string}>(entityWithSK.getTableIndexPKAttributes());
1987
- expectType<{prop1: string, prop2: string}>(normalEntity2.getTableIndexPKAttributes());
1988
- expectType<{
1989
- prop1: string,
1990
- prop2: number,
1991
- prop3: boolean,
1992
- prop4: 'abc',
1993
- }>(diverseTableKeyTypes.getTableIndexPKAttributes());
1994
-
1995
- // getTableIndexSKAttributes
1996
- expectType<{attr2: string}>(entityWithSK.getTableIndexSKAttributes());
1997
- expectType<{}>(entityWithoutSK.getTableIndexSKAttributes());
1998
- expectType<{prop5: number}>(normalEntity2.getTableIndexSKAttributes());
1999
- expectType<{
2000
- prop5: string,
2001
- prop6: number,
2002
- prop7: boolean,
2003
- prop8: 'abc',
2004
- }>(diverseTableKeyTypes.getTableIndexSKAttributes());
2005
-
2006
- // getTableIndexCompositeAttributes
2007
- expectType<{
2008
- attr1: string;
2009
- attr2?: string | undefined;
2010
- }>(entityWithSK.getTableIndexCompositeAttributes());
2011
-
2012
- expectType<{
2013
- attr1: string;
2014
- }>(entityWithoutSK.getTableIndexCompositeAttributes());
2015
-
2016
- expectType<{
2017
- prop1: string;
2018
- prop2: string;
2019
- prop5?: number | undefined;
2020
- }>(normalEntity2.getTableIndexCompositeAttributes());
2021
-
2022
- expectType<{
2023
- prop1: string;
2024
- prop2: number;
2025
- prop3: boolean;
2026
- prop4: 'abc';
2027
- prop5?: string | undefined;
2028
- prop6?: number | undefined;
2029
- prop7?: boolean | undefined;
2030
- prop8?: 'abc' | undefined;
2031
- }>(diverseTableKeyTypes.getTableIndexCompositeAttributes());
2032
-
2033
- // getIndexPKAttributes
2034
- expectType<{
2035
- attr1: string;
2036
- }>(entityWithSK.getIndexPKAttributes('myIndex'));
2037
-
2038
- expectType<{
2039
- attr6: number;
2040
- attr9: number;
2041
- }>(entityWithSK.getIndexPKAttributes('myIndex2'));
2042
-
2043
- expectType<{
2044
- attr5: string;
2045
- }>(entityWithSK.getIndexPKAttributes('myIndex3'));
2046
-
2047
- expectType<{
2048
- attr1: string;
2049
- }>(entityWithoutSK.getIndexPKAttributes('myIndex'));
2050
-
2051
- expectType<{
2052
- attr6: number;
2053
- attr9: number;
2054
- }>(entityWithoutSK.getIndexPKAttributes('myIndex2'));
2055
-
2056
- expectType<{
2057
- attr5: string;
2058
- }>(entityWithoutSK.getIndexPKAttributes('myIndex3'));
2059
-
2060
- expectType<{
2061
- prop1: string;
2062
- prop2: string;
2063
- }>(normalEntity2.getIndexPKAttributes('indexTable'));
2064
-
2065
- expectType<{
2066
- attr6: number;
2067
- attr9: number;
2068
- }>(normalEntity2.getIndexPKAttributes('anotherIndex'));
2069
-
2070
- expectType<{
2071
- prop1: string;
2072
- prop2: number;
2073
- prop3: boolean;
2074
- prop4: 'abc';
2075
- }>(diverseTableKeyTypes.getIndexPKAttributes('record'));
2076
-
2077
- // getIndexSKAttributes
2078
- expectType<{
2079
- attr2: string;
2080
- }>(entityWithSK.getIndexSKAttributes('myIndex'));
2081
-
2082
- // troubleshoot(() => entityWithSK.getIndexSKAttributes('myIndex'), {attr2: 'poop'})
2083
-
2084
- expectType<{
2085
- attr4: "abc" | "ghi";
2086
- attr5: string;
2087
- }>(entityWithSK.getIndexSKAttributes('myIndex2'));
2088
-
2089
-
2090
- expectType<{
2091
- attr4: "abc" | "ghi";
2092
- attr3: "123" | "def" | "ghi";
2093
- attr9: number;
2094
- }>(entityWithSK.getIndexSKAttributes('myIndex3'));
2095
-
2096
- expectType<{}>(entityWithoutSK.getIndexSKAttributes('myIndex'));
2097
- expectType<{}>(entityWithoutSK.getIndexSKAttributes('myIndex2'));
2098
- expectType<{}>(entityWithoutSK.getIndexSKAttributes('myIndex3'));
2099
-
2100
- expectType<{
2101
- prop5: number;
2102
- }>(normalEntity2.getIndexSKAttributes('indexTable'));
2103
-
2104
- expectType<{}>(normalEntity2.getIndexSKAttributes('anotherIndex'));
2105
-
2106
- expectType<{
2107
- prop5: string;
2108
- prop6: number;
2109
- prop7: boolean;
2110
- prop8: 'abc';
2111
- }>(diverseTableKeyTypes.getIndexSKAttributes('record'));
2112
-
2113
- // getAllTableIndexCompositeAttributes
2114
- expectType<{
2115
- attr1: string;
2116
- attr2: string;
2117
- }>(entityWithSK.getAllTableIndexCompositeAttributes());
2118
-
2119
- expectType<{
2120
- attr1: string;
2121
- }>(entityWithoutSK.getAllTableIndexCompositeAttributes());
2122
-
2123
- expectType<{
2124
- prop1: string;
2125
- prop2: string;
2126
- prop5: number;
2127
- }>(normalEntity2.getAllTableIndexCompositeAttributes());
2128
-
2129
- expectType<{
2130
- prop1: string;
2131
- prop2: number;
2132
- prop3: boolean;
2133
- prop4: 'abc';
2134
- prop5: string;
2135
- prop6: number;
2136
- prop7: boolean;
2137
- prop8: 'abc';
2138
- }>(diverseTableKeyTypes.getAllTableIndexCompositeAttributes());
2139
-
2140
- // getTableItem
2141
-
2142
- expectType<{
2143
- prop1: string;
2144
- prop2: string;
2145
- prop3?: {
2146
- val1?: string | undefined
2147
- } | undefined;
2148
- prop4?: {
2149
- val2?: number | undefined;
2150
- val3?: string[] | undefined;
2151
- val4?: number[] | undefined;
2152
- }[]
2153
- prop5?: string[] | undefined;
2154
- prop6?: string[] | undefined;
2155
- }>(entityWithComplexShapes.getTableItem());
2156
-
2157
- expectType<{
2158
- id: string;
2159
- mall: string;
2160
- stores: number;
2161
- value?: string | undefined;
2162
- }>(casingEntity.getTableItem());
2163
-
2164
- expectType<{
2165
- prop1: string;
2166
- prop2: string;
2167
- prop3?: string | undefined;
2168
- }>(entityWithWatchAll.getTableItem());
2169
-
2170
- expectType<{
2171
- prop1: string;
2172
- prop2: string;
2173
- attr3: {
2174
- val1: string;
2175
- };
2176
- attr4: Array<{
2177
- val2: number;
2178
- val3: string[];
2179
- val4: number[];
2180
- }>;
2181
- attr5: string[];
2182
- attr6: string[];
2183
- }>(entityWithComplexShapesRequired.getTableItem());
2184
-
2185
- expectType<{
2186
- prop1: string;
2187
- prop2: string;
2188
- attrz3?: {
2189
- val1: string;
2190
- } | undefined;
2191
- attrz4?: {
2192
- val2: number;
2193
- val3?: string[] | undefined;
2194
- val4?: number[] | undefined;
2195
- val5?: {
2196
- val6: string;
2197
- } | undefined
2198
- }[] | undefined;
2199
- attrz5?: string[] | undefined
2200
- attrz6?: string[] | undefined
2201
- }>(entityWithComplexShapesRequiredOnEdge.getTableItem());
2202
-
2203
- expectType<{
2204
- prop1: string;
2205
- prop2: string;
2206
- prop3?: {
2207
- val1?: string | undefined;
2208
- } | undefined;
2209
- prop4?: {
2210
- val2?: number | undefined;
2211
- val3?: string[] | undefined;
2212
- val4?: number[] | undefined;
2213
- }[] | undefined;
2214
- prop5?: string[] | undefined;
2215
- prop6?: string[] | undefined;
2216
- }>(entityWithComplexShapes.getTableItem());
2217
-
2218
- expectNotType<{
2219
- prop1: string;
2220
- prop2: string;
2221
- attrz3: {
2222
- val1?: string | undefined;
2223
- };
2224
- attrz4: Array<{
2225
- val2: number | undefined;
2226
- val3: string[];
2227
- val4: number[];
2228
- val5: {
2229
- val6?: string | undefined;
2230
- };
2231
- }>;
2232
- attr5: string[];
2233
- attr6: string[];
2234
- }>(entityWithComplexShapesRequiredOnEdge.getTableItem());
2235
-
2236
- expectType<{
2237
- prop1: string;
2238
- prop2: string;
2239
- prop3: string;
2240
- }>(entityWithHiddenAttributes1.getTableItem());
2241
-
2242
- // getResponseItem
2243
- expectType<{
2244
- prop1: string;
2245
- prop2: string;
2246
- }>(entityWithHiddenAttributes1.getResponseItem());
2247
-
2248
- function hiddenKeysOnRoot() {
2249
- const item = entityWithHiddenAttributes1.getResponseItem();
2250
- if (item) {
2251
- const keys = "" as keyof typeof item;
2252
- expectType<'prop1' | 'prop2'>(keys);
2253
- expectNotType<'hidden'>(keys);
2254
- }
2255
- }
2256
-
2257
- expectType<{
2258
- username: string;
2259
- mapObject?: {
2260
- minimal?: string | undefined;
2261
- readOnly?: string | undefined;
2262
- required: string;
2263
- anotherMap?: {
2264
- minimal?: string | undefined;
2265
- readOnly?: string | undefined;
2266
- required: string;
2267
- } | undefined
2268
- } | undefined
2269
- }>(magnify(mapTests.getResponseItem()));
2270
-
2271
- function hiddenKeysInMap() {
2272
- const item = mapTests.getResponseItem();
2273
- if (item.mapObject) {
2274
- const keys = "" as keyof typeof item.mapObject;
2275
- expectType<'required' | 'readOnly' | 'minimal' | 'anotherMap'>(keys);
2276
- expectNotType<'hidden'>(keys);
2277
- }
2278
- }
2279
-
2280
- expectType<{
2281
- prop1: string;
2282
- prop2: string;
2283
- prop3: string;
2284
- prop4?: string | undefined;
2285
- prop5: string;
2286
- }>(standAloneEntityWithDefault.getResponseItem());
2287
-
2288
- // RequiredPutItems
2289
- expectType<{
2290
- username: true,
2291
- mapObject: false,
2292
- }>(mapTests.getRequiredPutItems());
2293
-
2294
- expectType<{
2295
- prop1: false // is pk, but has default
2296
- prop2: true, // is pk
2297
- prop3: true, // is required
2298
- prop4: true, // is sk
2299
- prop10: false // optional default
2300
- }>(normalEntity1.getRequiredPutItems());
2301
-
2302
- expectType<{
2303
- prop1: false // is pk, but has default
2304
- prop2: true, // is pk
2305
- prop3: false, // is sk, but has default
2306
- prop4: true, // is required
2307
- prop5: false, // is required, but has default
2308
- }>(standAloneEntity2.getRequiredPutItems());
2309
-
2310
- // PutItem
2311
- expectType<{
2312
- username: string,
2313
- mapObject?: {
2314
- minimal?: string | undefined;
2315
- required: string;
2316
- readOnly?: string | undefined;
2317
- anotherMap?: {
2318
- minimal?: string | undefined;
2319
- required: string;
2320
- readOnly?: string | undefined;
2321
- } | undefined
2322
- } | undefined,
2323
- }>(mapTests.getPutItem());
2324
-
2325
- expectType<{
2326
- prop1?: string | undefined;
2327
- prop2: string;
2328
- prop3: string;
2329
- prop4?: string | undefined;
2330
- prop5?: string | undefined;
2331
- }>(standAloneEntityWithDefault.getPutItem());
2332
-
2333
-
2334
- expectType<{
2335
- prop1: string;
2336
- prop2?: string | undefined;
2337
- attrz3?: {
2338
- val1: string;
2339
- } | undefined;
2340
- attrz4?: {
2341
- val2?: number | undefined;
2342
- val3?: string[] | undefined;
2343
- val4?: number[] | undefined;
2344
- val6?: boolean | undefined;
2345
- val5?: {
2346
- val6?: string | undefined;
2347
- } | undefined
2348
- }[] | undefined;
2349
- attrz5?: string[] | undefined
2350
- attrz6?: string[] | undefined
2351
- }>(entityWithComplexShapesRequiredOnEdgeWithDefault.getPutItem());
2352
-
2353
- expectType<{
2354
- prop1?: string | undefined // is pk, but has default
2355
- prop2: string, // is pk
2356
- prop3: string, // is required
2357
- prop4: number, // is sk
2358
- prop10?: boolean | undefined // optional default
2359
- }>(normalEntity1.getPutItem());
2360
-
2361
- expectType<{
2362
- prop1?: string | undefined // is pk, but has default
2363
- prop2: string, // is pk
2364
- prop3?: string | undefined, // is sk, but has default
2365
- prop4: {
2366
- prop1?: string | undefined;
2367
- prop2: string;
2368
- prop3?: string | undefined;
2369
- }, // is required
2370
- prop5?: {
2371
- prop1?: string | undefined;
2372
- prop2: string;
2373
- prop3?: string | undefined;
2374
- } | undefined, // is required, but has default
2375
- }>(standAloneEntity2.getPutItem());
2376
-
2377
- // UpdateData
2378
- expectType<{
2379
- mapObject: {
2380
- minimal: string;
2381
- required: string;
2382
- hidden: string;
2383
- anotherMap: {
2384
- minimal: string;
2385
- required: string;
2386
- hidden: string;
2387
- }
2388
- }
2389
- }>(mapTests.getUpdateData());
2390
-
2391
- expectType<{prop3: boolean}>(
2392
- readOnlyEntity.getUpdateData()
2393
- );
2394
-
2395
- // RemoveItem
2396
- expectType<Array<'mapObject'>>(mapTests.getRemoveItem());
2397
-
2398
- expectType<Array<'prop3'>>(
2399
- readOnlyEntity.getRemoveItem()
2400
- );
2401
-
2402
- expectType<Array<'prop10'>>(normalEntity1.getRemoveItem())
2403
-
2404
- expectType<
2405
- Array<"attr3" | "attr5" | "attr6" | "attr7" | "attr9" | "attr10">
2406
- >(entityWithSK.getRemoveItem())
2407
-
2408
- // AppendItem
2409
- expectType<{}>(magnify(readOnlyEntity.getAppendItem)());
2410
-
2411
- expectType<{
2412
- prop4?: {
2413
- val2?: number | undefined;
2414
- val3?: string[] | undefined;
2415
- val4?: number[] | undefined;
2416
- }[] | undefined;
2417
- }>(magnify(entityWithComplexShapes.getAppendItem()));
2418
-
2419
- expectType<{
2420
- attr4?: {
2421
- val2: number;
2422
- val3: string[];
2423
- val4: number[];
2424
- }[] | undefined;
2425
- }>(magnify(entityWithComplexShapesRequired.getAppendItem()));
2426
-
2427
- expectType<{
2428
- attrz4?: {
2429
- val2: number;
2430
- val3?: string[] | undefined;
2431
- val4?: number[] | undefined;
2432
- val5?: {
2433
- val6: string;
2434
- } | undefined;
2435
- }[] | undefined;
2436
- }>(magnify(entityWithComplexShapesRequiredOnEdge.getAppendItem()));
2437
-
2438
- // AddItem
2439
- expectType<{
2440
-
2441
- }>(complex.getAppendItem())
2442
-
2443
- expectType<{
2444
- attr5?: string[] | undefined;
2445
- attr6?: string[] | undefined;
2446
- }>(entityWithComplexShapesRequired.getAddItem());
2447
-
2448
- expectType<{
2449
- attrz5?: string[] | undefined;
2450
- attrz6?: string[] | undefined;
2451
- }>(entityWithComplexShapesRequiredOnEdge.getAddItem());
2452
-
2453
- expectType<{
2454
- // todo: would be great for these not to show up at all
2455
- prop4?: undefined
2456
- }>(normalEntity1.getAddItem());
2457
-
2458
- expectType<{
2459
- attr6?: number | undefined;
2460
- attr7?: any;
2461
- attr9?: number | undefined;
2462
- }>(entityWithSK.getAddItem())
2463
-
2464
- expectType<{
2465
- // todo: would be great for these not to show up at all
2466
- prop2?: undefined;
2467
- prop7?: undefined;
2468
- }>(readOnlyEntity.getAddItem());
2469
-
2470
- // SubtractItem
2471
- expectType<{
2472
- attr6?: number | undefined;
2473
- attr7?: any;
2474
- attr9?: number | undefined;
2475
- }>(entityWithSK.getSubtractItem());
2476
-
2477
- expectType<{
2478
- // todo: would be great for these not to show up at all
2479
- prop4?: undefined
2480
- }>(normalEntity1.getSubtractItem());
2481
-
2482
- // DeleteItem
2483
- expectType<{
2484
- attr5?: string[] | undefined;
2485
- attr6?: string[] | undefined;
2486
- }>(entityWithComplexShapesRequired.getDeleteItem());
2487
-
2488
- expectType<{
2489
- attrz5?: string[] | undefined;
2490
- attrz6?: string[] | undefined;
2491
- }>(entityWithComplexShapesRequiredOnEdge.getDeleteItem());
2492
-
2493
- expectType<{
2494
- // todo: would be great for these not to show up at all
2495
- prop2?: undefined;
2496
- }>(readOnlyEntity.getSubtractItem());
2497
-
2498
- expectType<{}>(normalEntity1.getDeleteItem());
2499
-
2500
- expectType<{
2501
- attr7?: any;
2502
- }>(entityWithSK.getDeleteItem())
2503
-
2504
- expectType<{
2505
- // todo: would be great for these not to show up at all
2506
- prop7?: undefined;
2507
- }>(readOnlyEntity.getDeleteItem());