@pezkuwi/types-create 16.5.5

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 (43) hide show
  1. package/README.md +3 -0
  2. package/build/bundle.d.ts +3 -0
  3. package/build/create/class.d.ts +5 -0
  4. package/build/create/index.d.ts +2 -0
  5. package/build/create/type.d.ts +3 -0
  6. package/build/exports.d.ts +2 -0
  7. package/build/index.d.ts +2 -0
  8. package/build/packageDetect.d.ts +1 -0
  9. package/build/packageInfo.d.ts +6 -0
  10. package/build/types/augmentRegistry.d.ts +11 -0
  11. package/build/types/index.d.ts +4 -0
  12. package/build/types/lookup.d.ts +14 -0
  13. package/build/types/types.d.ts +43 -0
  14. package/build/util/encodeTypes.d.ts +11 -0
  15. package/build/util/getTypeDef.d.ts +8 -0
  16. package/build/util/index.d.ts +4 -0
  17. package/build/util/typeSplit.d.ts +1 -0
  18. package/build/util/xcm.d.ts +2 -0
  19. package/package.json +31 -0
  20. package/src/bundle.ts +9 -0
  21. package/src/create/class.ts +257 -0
  22. package/src/create/index.ts +5 -0
  23. package/src/create/type.ts +94 -0
  24. package/src/exports.ts +6 -0
  25. package/src/index.ts +6 -0
  26. package/src/mod.ts +4 -0
  27. package/src/packageDetect.ts +12 -0
  28. package/src/packageInfo.ts +6 -0
  29. package/src/types/augmentRegistry.ts +19 -0
  30. package/src/types/index.ts +11 -0
  31. package/src/types/lookup.ts +21 -0
  32. package/src/types/types.ts +47 -0
  33. package/src/util/encodeTypes.spec.ts +217 -0
  34. package/src/util/encodeTypes.ts +205 -0
  35. package/src/util/getTypeDef.spec.ts +704 -0
  36. package/src/util/getTypeDef.ts +279 -0
  37. package/src/util/index.ts +7 -0
  38. package/src/util/typeSplit.spec.ts +50 -0
  39. package/src/util/typeSplit.ts +56 -0
  40. package/src/util/xcm.ts +12 -0
  41. package/tsconfig.build.json +15 -0
  42. package/tsconfig.build.tsbuildinfo +1 -0
  43. package/tsconfig.spec.json +17 -0
@@ -0,0 +1,704 @@
1
+ // Copyright 2017-2025 @polkadot/types authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /// <reference types="@pezkuwi/dev-test/globals.d.ts" />
5
+
6
+ import { TypeRegistry } from '@pezkuwi/types';
7
+ import { getTypeDef, TypeDefInfo } from '@pezkuwi/types-create';
8
+ import { stringify } from '@pezkuwi/util';
9
+
10
+ describe('getTypeDef', (): void => {
11
+ it('maps empty tuples to empty tuple', (): void => {
12
+ expect(
13
+ getTypeDef('()')
14
+ ).toEqual({
15
+ displayName: undefined,
16
+ info: TypeDefInfo.Tuple,
17
+ name: undefined,
18
+ sub: [],
19
+ type: '()'
20
+ });
21
+ });
22
+
23
+ it('properly decodes a BTreeMap<u32, Text>', (): void => {
24
+ expect(
25
+ getTypeDef('BTreeMap<u32, Text>')
26
+ ).toEqual({
27
+ displayName: undefined,
28
+ info: TypeDefInfo.BTreeMap,
29
+ name: undefined,
30
+ sub: [
31
+ {
32
+ displayName: undefined,
33
+ info: TypeDefInfo.Plain,
34
+ name: undefined,
35
+ type: 'u32'
36
+ },
37
+ {
38
+ displayName: undefined,
39
+ info: TypeDefInfo.Plain,
40
+ name: undefined,
41
+ type: 'Text'
42
+ }
43
+ ],
44
+ type: 'BTreeMap<u32,Text>'
45
+ });
46
+ });
47
+
48
+ it('properly decodes a BTreeSet<Text>', (): void => {
49
+ expect(
50
+ getTypeDef('BTreeSet<Text>')
51
+ ).toEqual({
52
+ displayName: undefined,
53
+ info: TypeDefInfo.BTreeSet,
54
+ name: undefined,
55
+ sub: {
56
+ displayName: undefined,
57
+ info: TypeDefInfo.Plain,
58
+ name: undefined,
59
+ type: 'Text'
60
+ },
61
+ type: 'BTreeSet<Text>'
62
+ });
63
+ });
64
+
65
+ it('properly decodes a Result<u32, Text>', (): void => {
66
+ expect(
67
+ getTypeDef('Result<u32, Text>')
68
+ ).toEqual({
69
+ displayName: undefined,
70
+ info: TypeDefInfo.Result,
71
+ name: undefined,
72
+ sub: [
73
+ {
74
+ displayName: undefined,
75
+ info: TypeDefInfo.Plain,
76
+ name: undefined,
77
+ type: 'u32'
78
+ },
79
+ {
80
+ displayName: undefined,
81
+ info: TypeDefInfo.Plain,
82
+ name: undefined,
83
+ type: 'Text'
84
+ }
85
+ ],
86
+ type: 'Result<u32,Text>'
87
+ });
88
+ });
89
+
90
+ it('properly decodes a Result<Result<(), u32>, Text>', (): void => {
91
+ expect(
92
+ getTypeDef('Result<Result<Null,u32>,Text>')
93
+ ).toEqual({
94
+ displayName: undefined,
95
+ info: TypeDefInfo.Result,
96
+ name: undefined,
97
+ sub: [
98
+ {
99
+ displayName: undefined,
100
+ info: TypeDefInfo.Result,
101
+ name: undefined,
102
+ sub: [
103
+ {
104
+ displayName: undefined,
105
+ info: TypeDefInfo.Plain,
106
+ name: undefined,
107
+ type: 'Null'
108
+ },
109
+ {
110
+ displayName: undefined,
111
+ info: TypeDefInfo.Plain,
112
+ name: undefined,
113
+ type: 'u32'
114
+ }
115
+ ],
116
+ type: 'Result<Null,u32>'
117
+ },
118
+ {
119
+ displayName: undefined,
120
+ info: TypeDefInfo.Plain,
121
+ name: undefined,
122
+ type: 'Text'
123
+ }
124
+ ],
125
+ type: 'Result<Result<Null,u32>,Text>'
126
+ });
127
+ });
128
+
129
+ it('returns a type structure', (): void => {
130
+ expect(
131
+ getTypeDef('(u32, Compact<u32>, Vec<u64>, Option<u128>, (Text,Vec<(Bool,u128)>))')
132
+ ).toEqual({
133
+ displayName: undefined,
134
+ info: TypeDefInfo.Tuple,
135
+ name: undefined,
136
+ sub: [
137
+ {
138
+ displayName: undefined,
139
+ info: TypeDefInfo.Plain,
140
+ name: undefined,
141
+ type: 'u32'
142
+ },
143
+ {
144
+ displayName: undefined,
145
+ info: TypeDefInfo.Compact,
146
+ name: undefined,
147
+ sub: {
148
+ displayName: undefined,
149
+ info: TypeDefInfo.Plain,
150
+ name: undefined,
151
+ type: 'u32'
152
+ },
153
+ type: 'Compact<u32>'
154
+ },
155
+ {
156
+ displayName: undefined,
157
+ info: TypeDefInfo.Vec,
158
+ name: undefined,
159
+ sub: {
160
+ displayName: undefined,
161
+ info: TypeDefInfo.Plain,
162
+ name: undefined,
163
+ type: 'u64'
164
+ },
165
+ type: 'Vec<u64>'
166
+ },
167
+ {
168
+ displayName: undefined,
169
+ info: TypeDefInfo.Option,
170
+ name: undefined,
171
+ sub: {
172
+ displayName: undefined,
173
+ info: TypeDefInfo.Plain,
174
+ name: undefined,
175
+ type: 'u128'
176
+ },
177
+ type: 'Option<u128>'
178
+ },
179
+ {
180
+ displayName: undefined,
181
+ info: TypeDefInfo.Tuple,
182
+ name: undefined,
183
+ sub: [
184
+ {
185
+ displayName: undefined,
186
+ info: TypeDefInfo.Plain,
187
+ name: undefined,
188
+ type: 'Text'
189
+ },
190
+ {
191
+ displayName: undefined,
192
+ info: TypeDefInfo.Vec,
193
+ name: undefined,
194
+ sub: {
195
+ displayName: undefined,
196
+ info: TypeDefInfo.Tuple,
197
+ name: undefined,
198
+ sub: [
199
+ {
200
+ displayName: undefined,
201
+ info: TypeDefInfo.Plain,
202
+ name: undefined,
203
+ type: 'Bool'
204
+ },
205
+ {
206
+ displayName: undefined,
207
+ info: TypeDefInfo.Plain,
208
+ name: undefined,
209
+ type: 'u128'
210
+ }
211
+ ],
212
+ type: '(Bool,u128)'
213
+ },
214
+ type: 'Vec<(Bool,u128)>'
215
+ }
216
+ ],
217
+ type: '(Text,Vec<(Bool,u128)>)'
218
+ }
219
+ ],
220
+ type: '(u32,Compact<u32>,Vec<u64>,Option<u128>,(Text,Vec<(Bool,u128)>))'
221
+ });
222
+ });
223
+
224
+ it('returns a type structure (sanitized)', (): void => {
225
+ expect(
226
+ getTypeDef('Vec<(Box<PropIndex>, Proposal,Lookup::Target)>')
227
+ ).toEqual({
228
+ displayName: undefined,
229
+ info: TypeDefInfo.Vec,
230
+ name: undefined,
231
+ sub: {
232
+ displayName: undefined,
233
+ info: TypeDefInfo.Tuple,
234
+ name: undefined,
235
+ sub: [
236
+ {
237
+ displayName: undefined,
238
+ info: TypeDefInfo.Plain,
239
+ name: undefined,
240
+ type: 'PropIndex'
241
+ },
242
+ {
243
+ displayName: undefined,
244
+ info: TypeDefInfo.Plain,
245
+ name: undefined,
246
+ type: 'Proposal'
247
+ },
248
+ {
249
+ displayName: undefined,
250
+ info: TypeDefInfo.Plain,
251
+ name: undefined,
252
+ type: 'LookupTarget'
253
+ }
254
+ ],
255
+ type: '(PropIndex,Proposal,LookupTarget)'
256
+ },
257
+ type: 'Vec<(PropIndex,Proposal,LookupTarget)>'
258
+ });
259
+ });
260
+
261
+ it('returns a type structure (actual)', (): void => {
262
+ expect(
263
+ getTypeDef('Vec<(PropIndex, Proposal, AccountId)>')
264
+ ).toEqual({
265
+ displayName: undefined,
266
+ info: TypeDefInfo.Vec,
267
+ name: undefined,
268
+ sub: {
269
+ displayName: undefined,
270
+ info: TypeDefInfo.Tuple,
271
+ name: undefined,
272
+ sub: [
273
+ {
274
+ displayName: undefined,
275
+ info: TypeDefInfo.Plain,
276
+ name: undefined,
277
+ type: 'PropIndex'
278
+ },
279
+ {
280
+ displayName: undefined,
281
+ info: TypeDefInfo.Plain,
282
+ name: undefined,
283
+ type: 'Proposal'
284
+ },
285
+ {
286
+ displayName: undefined,
287
+ info: TypeDefInfo.Plain,
288
+ name: undefined,
289
+ type: 'AccountId'
290
+ }
291
+ ],
292
+ type: '(PropIndex,Proposal,AccountId)'
293
+ },
294
+ type: 'Vec<(PropIndex,Proposal,AccountId)>'
295
+ });
296
+ });
297
+
298
+ it('returns an actual Struct', (): void => {
299
+ expect(
300
+ getTypeDef('{"balance":"Balance","account_id":"AccountId","log":"(u64, Signature)"}')
301
+ ).toEqual({
302
+ alias: undefined,
303
+ displayName: undefined,
304
+ fallbackType: undefined,
305
+ info: TypeDefInfo.Struct,
306
+ name: undefined,
307
+ sub: [
308
+ {
309
+ displayName: undefined,
310
+ info: TypeDefInfo.Plain,
311
+ name: 'balance',
312
+ type: 'Balance'
313
+ },
314
+ {
315
+ displayName: undefined,
316
+ info: TypeDefInfo.Plain,
317
+ name: 'account_id',
318
+ type: 'AccountId'
319
+ },
320
+ {
321
+ displayName: undefined,
322
+ info: TypeDefInfo.Tuple,
323
+ name: 'log',
324
+ sub: [
325
+ {
326
+ displayName: undefined,
327
+ info: TypeDefInfo.Plain,
328
+ name: undefined,
329
+ type: 'u64'
330
+ },
331
+ {
332
+ displayName: undefined,
333
+ info: TypeDefInfo.Plain,
334
+ name: undefined,
335
+ type: 'Signature'
336
+ }
337
+ ],
338
+ type: '(u64,Signature)'
339
+ }
340
+ ],
341
+ type: '{"balance":"Balance","account_id":"AccountId","log":"(u64,Signature)"}'
342
+ });
343
+ });
344
+
345
+ it('creates a nested fixed vec', (): void => {
346
+ expect(
347
+ getTypeDef('[[[bool; 3]; 6]; 9]')
348
+ ).toEqual({
349
+ displayName: undefined,
350
+ info: TypeDefInfo.VecFixed,
351
+ length: 9,
352
+ name: undefined,
353
+ sub: {
354
+ displayName: undefined,
355
+ info: TypeDefInfo.VecFixed,
356
+ length: 6,
357
+ name: undefined,
358
+ sub: {
359
+ displayName: undefined,
360
+ info: TypeDefInfo.VecFixed,
361
+ length: 3,
362
+ name: undefined,
363
+ sub: {
364
+ displayName: undefined,
365
+ info: TypeDefInfo.Plain,
366
+ name: undefined,
367
+ type: 'bool'
368
+ },
369
+ type: '[bool;3]'
370
+ },
371
+ type: '[[bool;3];6]'
372
+ },
373
+ type: '[[[bool;3];6];9]'
374
+ });
375
+ });
376
+
377
+ it('creates a nested fixed vec (named)', (): void => {
378
+ expect(
379
+ getTypeDef('[[bool; 6]; 3; MyType]')
380
+ ).toEqual({
381
+ displayName: 'MyType',
382
+ info: TypeDefInfo.VecFixed,
383
+ length: 3,
384
+ name: undefined,
385
+ sub: {
386
+ displayName: undefined,
387
+ info: TypeDefInfo.VecFixed,
388
+ length: 6,
389
+ name: undefined,
390
+ sub: {
391
+ displayName: undefined,
392
+ info: TypeDefInfo.Plain,
393
+ name: undefined,
394
+ type: 'bool'
395
+ },
396
+ type: '[bool;6]'
397
+ },
398
+ type: '[[bool;6];3;MyType]'
399
+ });
400
+ });
401
+
402
+ it('creates a nested tuple', (): void => {
403
+ expect(
404
+ getTypeDef('((u32, u64), u128)')
405
+ ).toEqual({
406
+ displayName: undefined,
407
+ info: TypeDefInfo.Tuple,
408
+ name: undefined,
409
+ sub: [
410
+ {
411
+ displayName: undefined,
412
+ info: TypeDefInfo.Tuple,
413
+ name: undefined,
414
+ sub: [
415
+ {
416
+ displayName: undefined,
417
+ info: TypeDefInfo.Plain,
418
+ name: undefined,
419
+ type: 'u32'
420
+ },
421
+ {
422
+ displayName: undefined,
423
+ info: TypeDefInfo.Plain,
424
+ name: undefined,
425
+ type: 'u64'
426
+ }
427
+ ],
428
+ type: '(u32,u64)'
429
+ },
430
+ {
431
+ displayName: undefined,
432
+ info: TypeDefInfo.Plain,
433
+ name: undefined,
434
+ type: 'u128'
435
+ }
436
+ ],
437
+ type: '((u32,u64),u128)'
438
+ });
439
+ });
440
+
441
+ it('creates a nested enum with tuple/struct', (): void => {
442
+ expect(
443
+ getTypeDef(stringify({
444
+ _enum: {
445
+ A: 'u32',
446
+ B: '(u32, bool)',
447
+ C: {
448
+ d: 'AccountId',
449
+ e: 'Balance'
450
+ }
451
+ }
452
+ }))
453
+ ).toEqual({
454
+ displayName: undefined,
455
+ fallbackType: undefined,
456
+ info: TypeDefInfo.Enum,
457
+ name: undefined,
458
+ sub: [
459
+ {
460
+ displayName: undefined,
461
+ index: 0,
462
+ info: TypeDefInfo.Plain,
463
+ name: 'A',
464
+ type: 'u32'
465
+ },
466
+ {
467
+ displayName: undefined,
468
+ index: 1,
469
+ info: TypeDefInfo.Tuple,
470
+ name: 'B',
471
+ sub: [
472
+ {
473
+ displayName: undefined,
474
+ info: TypeDefInfo.Plain,
475
+ name: undefined,
476
+ type: 'u32'
477
+ },
478
+ {
479
+ displayName: undefined,
480
+ info: TypeDefInfo.Plain,
481
+ name: undefined,
482
+ type: 'bool'
483
+ }
484
+ ],
485
+ type: '(u32,bool)'
486
+ },
487
+ {
488
+ alias: undefined,
489
+ displayName: undefined,
490
+ fallbackType: undefined,
491
+ index: 2,
492
+ info: TypeDefInfo.Struct,
493
+ name: 'C',
494
+ sub: [
495
+ {
496
+ displayName: undefined,
497
+ info: TypeDefInfo.Plain,
498
+ name: 'd',
499
+ type: 'AccountId'
500
+ },
501
+ {
502
+ displayName: undefined,
503
+ info: TypeDefInfo.Plain,
504
+ name: 'e',
505
+ type: 'Balance'
506
+ }
507
+ ],
508
+ type: '{"d":"AccountId","e":"Balance"}'
509
+ }
510
+ ],
511
+ type: '{"_enum":{"A":"u32","B":"(u32,bool)","C":{"d":"AccountId","e":"Balance"}}}'
512
+ });
513
+ });
514
+
515
+ it('creates a nested struct with struct/tuple', (): void => {
516
+ expect(
517
+ getTypeDef(stringify({
518
+ a: 'u32',
519
+ b: '(u32, bool)',
520
+ c: {
521
+ d: 'AccountId',
522
+ e: 'Balance'
523
+ }
524
+ }))
525
+ ).toEqual({
526
+ alias: undefined,
527
+ displayName: undefined,
528
+ fallbackType: undefined,
529
+ info: TypeDefInfo.Struct,
530
+ name: undefined,
531
+ sub: [
532
+ {
533
+ displayName: undefined,
534
+ info: TypeDefInfo.Plain,
535
+ name: 'a',
536
+ type: 'u32'
537
+ },
538
+ {
539
+ displayName: undefined,
540
+ info: TypeDefInfo.Tuple,
541
+ name: 'b',
542
+ sub: [
543
+ {
544
+ displayName: undefined,
545
+ info: TypeDefInfo.Plain,
546
+ name: undefined,
547
+ type: 'u32'
548
+ },
549
+ {
550
+ displayName: undefined,
551
+ info: TypeDefInfo.Plain,
552
+ name: undefined,
553
+ type: 'bool'
554
+ }
555
+ ],
556
+ type: '(u32,bool)'
557
+ },
558
+ {
559
+ alias: undefined,
560
+ displayName: undefined,
561
+ fallbackType: undefined,
562
+ info: TypeDefInfo.Struct,
563
+ name: 'c',
564
+ sub: [
565
+ {
566
+ displayName: undefined,
567
+ info: TypeDefInfo.Plain,
568
+ name: 'd',
569
+ type: 'AccountId'
570
+ },
571
+ {
572
+ displayName: undefined,
573
+ info: TypeDefInfo.Plain,
574
+ name: 'e',
575
+ type: 'Balance'
576
+ }
577
+ ],
578
+ type: '{"d":"AccountId","e":"Balance"}'
579
+ }
580
+ ],
581
+ type: '{"a":"u32","b":"(u32,bool)","c":{"d":"AccountId","e":"Balance"}}'
582
+ });
583
+ });
584
+
585
+ it('creates a Vec with nested fixed', (): void => {
586
+ expect(
587
+ getTypeDef('Vec<[[[bool; 3]; 6]; 9]>')
588
+ ).toEqual({
589
+ displayName: undefined,
590
+ info: TypeDefInfo.Vec,
591
+ name: undefined,
592
+ sub: {
593
+ displayName: undefined,
594
+ info: TypeDefInfo.VecFixed,
595
+ length: 9,
596
+ name: undefined,
597
+ sub: {
598
+ displayName: undefined,
599
+ info: TypeDefInfo.VecFixed,
600
+ length: 6,
601
+ name: undefined,
602
+ sub: {
603
+ displayName: undefined,
604
+ info: TypeDefInfo.VecFixed,
605
+ length: 3,
606
+ name: undefined,
607
+ sub: {
608
+ displayName: undefined,
609
+ info: TypeDefInfo.Plain,
610
+ name: undefined,
611
+ type: 'bool'
612
+ },
613
+ type: '[bool;3]'
614
+ },
615
+ type: '[[bool;3];6]'
616
+ },
617
+ type: '[[[bool;3];6];9]'
618
+ },
619
+ type: 'Vec<[[[bool;3];6];9]>'
620
+ });
621
+ });
622
+
623
+ it('creates a Vec with nested struct', (): void => {
624
+ expect(
625
+ getTypeDef('Vec<{ "a": "u32", "b": "(u32, bool)" }>')
626
+ ).toEqual({
627
+ displayName: undefined,
628
+ info: TypeDefInfo.Vec,
629
+ name: undefined,
630
+ sub: {
631
+ alias: undefined,
632
+ displayName: undefined,
633
+ fallbackType: undefined,
634
+ info: TypeDefInfo.Struct,
635
+ name: undefined,
636
+ sub: [
637
+ {
638
+ displayName: undefined,
639
+ info: TypeDefInfo.Plain,
640
+ name: 'a',
641
+ type: 'u32'
642
+ },
643
+ {
644
+ displayName: undefined,
645
+ info: TypeDefInfo.Tuple,
646
+ name: 'b',
647
+ sub: [
648
+ {
649
+ displayName: undefined,
650
+ info: TypeDefInfo.Plain,
651
+ name: undefined,
652
+ type: 'u32'
653
+ },
654
+ {
655
+ displayName: undefined,
656
+ info: TypeDefInfo.Plain,
657
+ name: undefined,
658
+ type: 'bool'
659
+ }
660
+ ],
661
+ type: '(u32,bool)'
662
+ }
663
+ ],
664
+ type: '{"a":"u32","b":"(u32,bool)"}'
665
+ },
666
+ type: 'Vec<{"a":"u32","b":"(u32,bool)"}>'
667
+ });
668
+ });
669
+
670
+ it('creates recursive structures', (): void => {
671
+ const registry = new TypeRegistry();
672
+
673
+ registry.register({
674
+ Recursive: {
675
+ data: 'Vec<Recursive>'
676
+ }
677
+ });
678
+
679
+ const raw = registry.createType('Recursive').toRawType();
680
+
681
+ expect(
682
+ getTypeDef(raw)
683
+ ).toEqual({
684
+ alias: undefined,
685
+ displayName: undefined,
686
+ fallbackType: undefined,
687
+ info: TypeDefInfo.Struct,
688
+ name: undefined,
689
+ sub: [{
690
+ displayName: undefined,
691
+ info: TypeDefInfo.Vec,
692
+ name: 'data',
693
+ sub: {
694
+ displayName: undefined,
695
+ info: TypeDefInfo.Plain,
696
+ name: undefined,
697
+ type: 'Recursive'
698
+ },
699
+ type: 'Vec<Recursive>'
700
+ }],
701
+ type: '{"data":"Vec<Recursive>"}'
702
+ });
703
+ });
704
+ });