@polkadot/types-codec 9.14.2 → 10.0.1

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 (157) hide show
  1. package/abstract/Array.js +140 -155
  2. package/abstract/Base.js +95 -112
  3. package/abstract/Int.js +212 -220
  4. package/abstract/Object.js +34 -45
  5. package/abstract/index.js +3 -6
  6. package/base/Compact.js +149 -165
  7. package/base/DoNotConstruct.js +61 -64
  8. package/base/Enum.js +345 -382
  9. package/base/Int.js +14 -18
  10. package/base/Null.js +71 -82
  11. package/base/Option.js +217 -226
  12. package/base/Result.js +54 -67
  13. package/base/Tuple.js +96 -101
  14. package/base/UInt.js +11 -15
  15. package/base/Vec.js +84 -89
  16. package/base/VecAny.js +8 -12
  17. package/base/VecFixed.js +59 -70
  18. package/base/index.js +12 -15
  19. package/bundle.js +7 -10
  20. package/cjs/abstract/Array.js +138 -159
  21. package/cjs/abstract/Base.js +96 -117
  22. package/cjs/abstract/Int.js +215 -238
  23. package/cjs/abstract/Object.js +30 -49
  24. package/cjs/abstract/index.js +8 -25
  25. package/cjs/base/Compact.js +151 -173
  26. package/cjs/base/DoNotConstruct.js +63 -70
  27. package/cjs/base/Enum.js +350 -396
  28. package/cjs/base/Int.js +16 -24
  29. package/cjs/base/Null.js +70 -86
  30. package/cjs/base/Option.js +220 -234
  31. package/cjs/base/Result.js +56 -71
  32. package/cjs/base/Tuple.js +103 -109
  33. package/cjs/base/UInt.js +13 -19
  34. package/cjs/base/Vec.js +94 -101
  35. package/cjs/base/VecAny.js +10 -16
  36. package/cjs/base/VecFixed.js +66 -79
  37. package/cjs/base/index.js +26 -88
  38. package/cjs/bundle.js +11 -86
  39. package/cjs/detectOther.js +2 -10
  40. package/cjs/detectPackage.js +6 -11
  41. package/cjs/extended/BTreeMap.js +10 -16
  42. package/cjs/extended/BTreeSet.js +162 -178
  43. package/cjs/extended/BitVec.js +70 -77
  44. package/cjs/extended/Bytes.js +59 -62
  45. package/cjs/extended/HashMap.js +10 -16
  46. package/cjs/extended/Linkage.js +50 -60
  47. package/cjs/extended/Map.js +176 -181
  48. package/cjs/extended/OptionBool.js +65 -68
  49. package/cjs/extended/Range.js +37 -46
  50. package/cjs/extended/RangeInclusive.js +13 -21
  51. package/cjs/extended/Type.js +14 -22
  52. package/cjs/extended/U8aFixed.js +33 -43
  53. package/cjs/extended/WrapperKeepOpaque.js +99 -99
  54. package/cjs/extended/WrapperOpaque.js +19 -28
  55. package/cjs/extended/index.js +31 -108
  56. package/cjs/index.js +3 -15
  57. package/cjs/native/Bool.js +101 -116
  58. package/cjs/native/Date.js +125 -151
  59. package/cjs/native/Float.js +95 -114
  60. package/cjs/native/Json.js +102 -124
  61. package/cjs/native/Raw.js +128 -150
  62. package/cjs/native/Set.js +200 -220
  63. package/cjs/native/Struct.data.js +2 -9
  64. package/cjs/native/Struct.js +238 -251
  65. package/cjs/native/Text.js +137 -149
  66. package/cjs/native/index.js +21 -78
  67. package/cjs/packageInfo.js +2 -16
  68. package/cjs/primitive/F32.js +8 -11
  69. package/cjs/primitive/F64.js +8 -11
  70. package/cjs/primitive/I128.js +8 -11
  71. package/cjs/primitive/I16.js +8 -11
  72. package/cjs/primitive/I256.js +8 -11
  73. package/cjs/primitive/I32.js +8 -11
  74. package/cjs/primitive/I64.js +8 -11
  75. package/cjs/primitive/I8.js +8 -11
  76. package/cjs/primitive/U128.js +8 -11
  77. package/cjs/primitive/U16.js +8 -11
  78. package/cjs/primitive/U256.js +8 -11
  79. package/cjs/primitive/U32.js +8 -11
  80. package/cjs/primitive/U64.js +8 -11
  81. package/cjs/primitive/U8.js +8 -11
  82. package/cjs/primitive/USize.js +7 -13
  83. package/cjs/primitive/index.js +47 -199
  84. package/cjs/types/codec.js +2 -1
  85. package/cjs/types/helpers.js +2 -1
  86. package/cjs/types/index.js +6 -48
  87. package/cjs/types/interfaces.js +2 -1
  88. package/cjs/types/registry.js +2 -1
  89. package/cjs/utils/compareArray.js +12 -17
  90. package/cjs/utils/compareMap.js +23 -26
  91. package/cjs/utils/compareSet.js +17 -23
  92. package/cjs/utils/decodeU8a.js +63 -74
  93. package/cjs/utils/index.js +24 -91
  94. package/cjs/utils/mapToTypeMap.js +13 -18
  95. package/cjs/utils/sanitize.js +198 -204
  96. package/cjs/utils/sortValues.js +39 -49
  97. package/cjs/utils/typeToConstructor.js +8 -11
  98. package/cjs/utils/typesToMap.js +10 -16
  99. package/cjs/utils/util.js +6 -11
  100. package/detectOther.js +0 -5
  101. package/detectPackage.js +2 -7
  102. package/extended/BTreeMap.js +8 -11
  103. package/extended/BTreeSet.js +159 -171
  104. package/extended/BitVec.js +63 -70
  105. package/extended/Bytes.js +56 -57
  106. package/extended/HashMap.js +8 -11
  107. package/extended/Linkage.js +46 -51
  108. package/extended/Map.js +173 -173
  109. package/extended/OptionBool.js +62 -62
  110. package/extended/Range.js +31 -39
  111. package/extended/RangeInclusive.js +11 -16
  112. package/extended/Type.js +12 -17
  113. package/extended/U8aFixed.js +30 -36
  114. package/extended/WrapperKeepOpaque.js +92 -91
  115. package/extended/WrapperOpaque.js +17 -23
  116. package/extended/index.js +14 -17
  117. package/index.js +2 -5
  118. package/native/Bool.js +102 -111
  119. package/native/Date.js +126 -144
  120. package/native/Float.js +94 -107
  121. package/native/Json.js +104 -114
  122. package/native/Raw.js +130 -146
  123. package/native/Set.js +194 -209
  124. package/native/Struct.data.js +0 -3
  125. package/native/Struct.js +233 -241
  126. package/native/Text.js +135 -143
  127. package/native/index.js +8 -11
  128. package/package.json +8 -5
  129. package/packageInfo.js +1 -11
  130. package/primitive/F32.js +3 -7
  131. package/primitive/F64.js +3 -7
  132. package/primitive/I128.js +3 -7
  133. package/primitive/I16.js +3 -7
  134. package/primitive/I256.js +3 -7
  135. package/primitive/I32.js +3 -7
  136. package/primitive/I64.js +3 -7
  137. package/primitive/I8.js +3 -7
  138. package/primitive/U128.js +3 -7
  139. package/primitive/U16.js +3 -7
  140. package/primitive/U256.js +3 -7
  141. package/primitive/U32.js +3 -7
  142. package/primitive/U64.js +3 -7
  143. package/primitive/U8.js +3 -7
  144. package/primitive/USize.js +5 -9
  145. package/primitive/index.js +15 -18
  146. package/types/index.js +4 -7
  147. package/utils/compareArray.js +7 -11
  148. package/utils/compareMap.js +18 -19
  149. package/utils/compareSet.js +12 -16
  150. package/utils/decodeU8a.js +54 -61
  151. package/utils/index.js +9 -12
  152. package/utils/mapToTypeMap.js +9 -13
  153. package/utils/sanitize.js +182 -185
  154. package/utils/sortValues.js +32 -36
  155. package/utils/typeToConstructor.js +3 -4
  156. package/utils/typesToMap.js +5 -8
  157. package/utils/util.js +1 -4
package/native/Set.js CHANGED
@@ -1,66 +1,63 @@
1
- // Copyright 2017-2023 @polkadot/types-codec authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
1
  import { BN, bnToBn, bnToU8a, isBn, isNumber, isString, isU8a, isUndefined, objectProperties, stringify, stringPascalCase, u8aToBn, u8aToHex, u8aToU8a } from '@polkadot/util';
5
- import { compareArray } from "../utils/index.js";
2
+ import { compareArray } from '../utils/index.js';
6
3
  function encodeSet(setValues, values) {
7
- const encoded = new BN(0);
8
- for (let i = 0; i < values.length; i++) {
9
- encoded.ior(bnToBn(setValues[values[i]] || 0));
10
- }
11
- return encoded;
4
+ const encoded = new BN(0);
5
+ for (let i = 0; i < values.length; i++) {
6
+ encoded.ior(bnToBn(setValues[values[i]] || 0));
7
+ }
8
+ return encoded;
12
9
  }
13
-
14
10
  /** @internal */
15
11
  function decodeSetArray(setValues, values) {
16
- const result = new Array(values.length);
17
- for (let i = 0; i < values.length; i++) {
18
- const key = values[i];
19
- if (isUndefined(setValues[key])) {
20
- throw new Error(`Set: Invalid key '${key}' passed to Set, allowed ${Object.keys(setValues).join(', ')}`);
21
- }
22
- result[i] = key;
23
- }
24
- return result;
12
+ const result = new Array(values.length);
13
+ for (let i = 0; i < values.length; i++) {
14
+ const key = values[i];
15
+ if (isUndefined(setValues[key])) {
16
+ throw new Error(`Set: Invalid key '${key}' passed to Set, allowed ${Object.keys(setValues).join(', ')}`);
17
+ }
18
+ result[i] = key;
19
+ }
20
+ return result;
25
21
  }
26
-
27
22
  /** @internal */
28
23
  function decodeSetNumber(setValues, _value) {
29
- const bn = bnToBn(_value);
30
- const keys = Object.keys(setValues);
31
- const result = [];
32
- for (let i = 0; i < keys.length; i++) {
33
- const key = keys[i];
34
- if (bn.and(bnToBn(setValues[key])).eq(bnToBn(setValues[key]))) {
35
- result.push(key);
36
- }
37
- }
38
- const computed = encodeSet(setValues, result);
39
- if (!bn.eq(computed)) {
40
- throw new Error(`Set: Mismatch decoding '${bn.toString()}', computed as '${computed.toString()}' with ${result.join(', ')}`);
41
- }
42
- return result;
24
+ const bn = bnToBn(_value);
25
+ const keys = Object.keys(setValues);
26
+ const result = [];
27
+ for (let i = 0; i < keys.length; i++) {
28
+ const key = keys[i];
29
+ if (bn.and(bnToBn(setValues[key])).eq(bnToBn(setValues[key]))) {
30
+ result.push(key);
31
+ }
32
+ }
33
+ const computed = encodeSet(setValues, result);
34
+ if (!bn.eq(computed)) {
35
+ throw new Error(`Set: Mismatch decoding '${bn.toString()}', computed as '${computed.toString()}' with ${result.join(', ')}`);
36
+ }
37
+ return result;
43
38
  }
44
-
45
39
  /** @internal */
46
40
  function decodeSet(setValues, value = 0, bitLength) {
47
- if (bitLength % 8 !== 0) {
48
- throw new Error(`Expected valid bitLength, power of 8, found ${bitLength}`);
49
- }
50
- const byteLength = bitLength / 8;
51
- if (isU8a(value)) {
52
- return value.length === 0 ? [] : decodeSetNumber(setValues, u8aToBn(value.subarray(0, byteLength), {
53
- isLe: true
54
- }));
55
- } else if (isString(value)) {
56
- return decodeSet(setValues, u8aToU8a(value), byteLength);
57
- } else if (value instanceof Set || Array.isArray(value)) {
58
- const input = Array.isArray(value) ? value : [...value.values()];
59
- return decodeSetArray(setValues, input);
60
- }
61
- return decodeSetNumber(setValues, value);
41
+ if (bitLength % 8 !== 0) {
42
+ throw new Error(`Expected valid bitLength, power of 8, found ${bitLength}`);
43
+ }
44
+ const byteLength = bitLength / 8;
45
+ if (isU8a(value)) {
46
+ return value.length === 0
47
+ ? []
48
+ : decodeSetNumber(setValues, u8aToBn(value.subarray(0, byteLength), { isLe: true }));
49
+ }
50
+ else if (isString(value)) {
51
+ return decodeSet(setValues, u8aToU8a(value), byteLength);
52
+ }
53
+ else if (value instanceof Set || Array.isArray(value)) {
54
+ const input = Array.isArray(value)
55
+ ? value
56
+ : [...value.values()];
57
+ return decodeSetArray(setValues, input);
58
+ }
59
+ return decodeSetNumber(setValues, value);
62
60
  }
63
-
64
61
  /**
65
62
  * @name Set
66
63
  * @description
@@ -68,163 +65,151 @@ function decodeSet(setValues, value = 0, bitLength) {
68
65
  * a bitwise representation of the values.
69
66
  */
70
67
  export class CodecSet extends Set {
71
- #allowed;
72
- #byteLength;
73
- constructor(registry, setValues, value, bitLength = 8) {
74
- super(decodeSet(setValues, value, bitLength));
75
- this.registry = registry;
76
- this.#allowed = setValues;
77
- this.#byteLength = bitLength / 8;
78
- }
79
- static with(values, bitLength) {
80
- var _class;
81
- return _class = class extends CodecSet {
82
- constructor(registry, value) {
83
- super(registry, values, value, bitLength);
84
- }
85
- }, (() => {
86
- const keys = Object.keys(values);
87
- const isKeys = new Array(keys.length);
88
- for (let i = 0; i < keys.length; i++) {
89
- isKeys[i] = `is${stringPascalCase(keys[i])}`;
90
- }
91
- objectProperties(_class.prototype, isKeys, (_, i, self) => self.strings.includes(keys[i]));
92
- })(), _class;
93
- }
94
-
95
- /**
96
- * @description The length of the value when encoded as a Uint8Array
97
- */
98
- get encodedLength() {
99
- return this.#byteLength;
100
- }
101
-
102
- /**
103
- * @description returns a hash of the contents
104
- */
105
- get hash() {
106
- return this.registry.hash(this.toU8a());
107
- }
108
-
109
- /**
110
- * @description true is the Set contains no values
111
- */
112
- get isEmpty() {
113
- return this.size === 0;
114
- }
115
-
116
- /**
117
- * @description The actual set values as a string[]
118
- */
119
- get strings() {
120
- return [...super.values()];
121
- }
122
-
123
- /**
124
- * @description The encoded value for the set members
125
- */
126
- get valueEncoded() {
127
- return encodeSet(this.#allowed, this.strings);
128
- }
129
-
130
- /**
131
- * @description adds a value to the Set (extended to allow for validity checking)
132
- */
133
- add = key => {
134
- // ^^^ add = () property done to assign this instance's this, otherwise Set.add creates "some" chaos
135
- // we have the isUndefined(this._setValues) in here as well, add is used internally
136
- // in the Set constructor (so it is undefined at this point, and should allow)
137
- if (this.#allowed && isUndefined(this.#allowed[key])) {
138
- throw new Error(`Set: Invalid key '${key}' on add`);
139
- }
140
- super.add(key);
141
- return this;
142
- };
143
-
144
- /**
145
- * @description Compares the value of the input to see if there is a match
146
- */
147
- eq(other) {
148
- if (Array.isArray(other)) {
149
- // we don't actually care about the order, sort the values
150
- return compareArray(this.strings.sort(), other.sort());
151
- } else if (other instanceof Set) {
152
- return this.eq([...other.values()]);
153
- } else if (isNumber(other) || isBn(other)) {
154
- return this.valueEncoded.eq(bnToBn(other));
155
- }
156
- return false;
157
- }
158
-
159
- /**
160
- * @description Returns a breakdown of the hex encoding for this Codec
161
- */
162
- inspect() {
163
- return {
164
- outer: [this.toU8a()]
68
+ registry;
69
+ createdAtHash;
70
+ initialU8aLength;
71
+ isStorageFallback;
72
+ #allowed;
73
+ #byteLength;
74
+ constructor(registry, setValues, value, bitLength = 8) {
75
+ super(decodeSet(setValues, value, bitLength));
76
+ this.registry = registry;
77
+ this.#allowed = setValues;
78
+ this.#byteLength = bitLength / 8;
79
+ }
80
+ static with(values, bitLength) {
81
+ return class extends CodecSet {
82
+ static {
83
+ const keys = Object.keys(values);
84
+ const isKeys = new Array(keys.length);
85
+ for (let i = 0; i < keys.length; i++) {
86
+ isKeys[i] = `is${stringPascalCase(keys[i])}`;
87
+ }
88
+ objectProperties(this.prototype, isKeys, (_, i, self) => self.strings.includes(keys[i]));
89
+ }
90
+ constructor(registry, value) {
91
+ super(registry, values, value, bitLength);
92
+ }
93
+ };
94
+ }
95
+ /**
96
+ * @description The length of the value when encoded as a Uint8Array
97
+ */
98
+ get encodedLength() {
99
+ return this.#byteLength;
100
+ }
101
+ /**
102
+ * @description returns a hash of the contents
103
+ */
104
+ get hash() {
105
+ return this.registry.hash(this.toU8a());
106
+ }
107
+ /**
108
+ * @description true is the Set contains no values
109
+ */
110
+ get isEmpty() {
111
+ return this.size === 0;
112
+ }
113
+ /**
114
+ * @description The actual set values as a string[]
115
+ */
116
+ get strings() {
117
+ return [...super.values()];
118
+ }
119
+ /**
120
+ * @description The encoded value for the set members
121
+ */
122
+ get valueEncoded() {
123
+ return encodeSet(this.#allowed, this.strings);
124
+ }
125
+ /**
126
+ * @description adds a value to the Set (extended to allow for validity checking)
127
+ */
128
+ add = (key) => {
129
+ // ^^^ add = () property done to assign this instance's this, otherwise Set.add creates "some" chaos
130
+ // we have the isUndefined(this._setValues) in here as well, add is used internally
131
+ // in the Set constructor (so it is undefined at this point, and should allow)
132
+ if (this.#allowed && isUndefined(this.#allowed[key])) {
133
+ throw new Error(`Set: Invalid key '${key}' on add`);
134
+ }
135
+ super.add(key);
136
+ return this;
165
137
  };
166
- }
167
-
168
- /**
169
- * @description Returns a hex string representation of the value
170
- */
171
- toHex() {
172
- return u8aToHex(this.toU8a());
173
- }
174
-
175
- /**
176
- * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
177
- */
178
- toHuman() {
179
- return this.toJSON();
180
- }
181
-
182
- /**
183
- * @description Converts the Object to JSON, typically used for RPC transfers
184
- */
185
- toJSON() {
186
- return this.strings;
187
- }
188
-
189
- /**
190
- * @description The encoded value for the set members
191
- */
192
- toNumber() {
193
- return this.valueEncoded.toNumber();
194
- }
195
-
196
- /**
197
- * @description Converts the value in a best-fit primitive form
198
- */
199
- toPrimitive() {
200
- return this.toJSON();
201
- }
202
-
203
- /**
204
- * @description Returns the base runtime type name for this instance
205
- */
206
- toRawType() {
207
- return stringify({
208
- _set: this.#allowed
209
- });
210
- }
211
-
212
- /**
213
- * @description Returns the string representation of the value
214
- */
215
- toString() {
216
- return `[${this.strings.join(', ')}]`;
217
- }
218
-
219
- /**
220
- * @description Encodes the value as a Uint8Array as per the SCALE specifications
221
- * @param isBare true when the value has none of the type-specific prefixes (internal)
222
- */
223
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
224
- toU8a(isBare) {
225
- return bnToU8a(this.valueEncoded, {
226
- bitLength: this.#byteLength * 8,
227
- isLe: true
228
- });
229
- }
138
+ /**
139
+ * @description Compares the value of the input to see if there is a match
140
+ */
141
+ eq(other) {
142
+ if (Array.isArray(other)) {
143
+ // we don't actually care about the order, sort the values
144
+ return compareArray(this.strings.sort(), other.sort());
145
+ }
146
+ else if (other instanceof Set) {
147
+ return this.eq([...other.values()]);
148
+ }
149
+ else if (isNumber(other) || isBn(other)) {
150
+ return this.valueEncoded.eq(bnToBn(other));
151
+ }
152
+ return false;
153
+ }
154
+ /**
155
+ * @description Returns a breakdown of the hex encoding for this Codec
156
+ */
157
+ inspect() {
158
+ return {
159
+ outer: [this.toU8a()]
160
+ };
161
+ }
162
+ /**
163
+ * @description Returns a hex string representation of the value
164
+ */
165
+ toHex() {
166
+ return u8aToHex(this.toU8a());
167
+ }
168
+ /**
169
+ * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
170
+ */
171
+ toHuman() {
172
+ return this.toJSON();
173
+ }
174
+ /**
175
+ * @description Converts the Object to JSON, typically used for RPC transfers
176
+ */
177
+ toJSON() {
178
+ return this.strings;
179
+ }
180
+ /**
181
+ * @description The encoded value for the set members
182
+ */
183
+ toNumber() {
184
+ return this.valueEncoded.toNumber();
185
+ }
186
+ /**
187
+ * @description Converts the value in a best-fit primitive form
188
+ */
189
+ toPrimitive() {
190
+ return this.toJSON();
191
+ }
192
+ /**
193
+ * @description Returns the base runtime type name for this instance
194
+ */
195
+ toRawType() {
196
+ return stringify({ _set: this.#allowed });
197
+ }
198
+ /**
199
+ * @description Returns the string representation of the value
200
+ */
201
+ toString() {
202
+ return `[${this.strings.join(', ')}]`;
203
+ }
204
+ /**
205
+ * @description Encodes the value as a Uint8Array as per the SCALE specifications
206
+ * @param isBare true when the value has none of the type-specific prefixes (internal)
207
+ */
208
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
209
+ toU8a(isBare) {
210
+ return bnToU8a(this.valueEncoded, {
211
+ bitLength: this.#byteLength * 8,
212
+ isLe: true
213
+ });
214
+ }
230
215
  }