@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/abstract/Int.js CHANGED
@@ -1,237 +1,229 @@
1
- // Copyright 2017-2023 @polkadot/types-codec authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
1
  import { BN, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_QUINTILL, bnToBn, bnToHex, bnToU8a, formatBalance, formatNumber, hexToBn, isBigInt, isBn, isFunction, isHex, isNumber, isObject, isString, isU8a, u8aToBn, u8aToNumber } from '@polkadot/util';
5
2
  export const DEFAULT_UINT_BITS = 64;
6
-
7
- // Maximum allowed integer for JS is 2^53 - 1, set limit at 52
8
- // In this case however, we always print any >32 as hex
9
3
  const MAX_NUMBER_BITS = 52;
10
- const MUL_P = new BN(10000);
11
- const FORMATTERS = [['Perquintill', BN_QUINTILL], ['Perbill', BN_BILLION], ['Permill', BN_MILLION], ['Percent', BN_HUNDRED]];
4
+ const MUL_P = new BN(1_00_00);
5
+ const FORMATTERS = [
6
+ ['Perquintill', BN_QUINTILL],
7
+ ['Perbill', BN_BILLION],
8
+ ['Permill', BN_MILLION],
9
+ ['Percent', BN_HUNDRED]
10
+ ];
12
11
  function isToBn(value) {
13
- return isFunction(value.toBn);
12
+ return isFunction(value.toBn);
14
13
  }
15
14
  function toPercentage(value, divisor) {
16
- return `${(value.mul(MUL_P).div(divisor).toNumber() / 100).toFixed(2)}%`;
15
+ return `${(value.mul(MUL_P).div(divisor).toNumber() / 100).toFixed(2)}%`;
17
16
  }
18
-
19
17
  /** @internal */
20
18
  function decodeAbstractInt(value, isNegative) {
21
- if (isNumber(value)) {
22
- if (!Number.isInteger(value) || value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER) {
23
- throw new Error('Number needs to be an integer <= Number.MAX_SAFE_INTEGER, i.e. 2 ^ 53 - 1');
24
- }
25
- return value;
26
- } else if (isString(value)) {
27
- if (isHex(value, -1, true)) {
28
- return hexToBn(value, {
29
- isLe: false,
30
- isNegative
31
- }).toString();
32
- }
33
- if (value.includes('.') || value.includes(',') || value.includes('e')) {
34
- throw new Error('String should not contain decimal points or scientific notation');
35
- }
36
- return value;
37
- } else if (isBn(value) || isBigInt(value)) {
38
- return value.toString();
39
- } else if (isObject(value)) {
40
- if (isToBn(value)) {
41
- return value.toBn().toString();
42
- }
43
-
44
- // Allow the construction from an object with a single top-level key. This means that
45
- // single key objects can be treated equivalently to numbers, assuming they meet the
46
- // specific requirements. (This is useful in Weights 1.5 where Objects are compact)
47
- const keys = Object.keys(value);
48
- if (keys.length !== 1) {
49
- throw new Error('Unable to construct number from multi-key object');
50
- }
51
- return decodeAbstractInt(value[keys[0]], isNegative);
52
- } else if (!value) {
53
- return 0;
54
- }
55
- throw new Error(`Unable to create BN from unknown type ${typeof value}`);
19
+ if (isNumber(value)) {
20
+ if (!Number.isInteger(value) || value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER) {
21
+ throw new Error('Number needs to be an integer <= Number.MAX_SAFE_INTEGER, i.e. 2 ^ 53 - 1');
22
+ }
23
+ return value;
24
+ }
25
+ else if (isString(value)) {
26
+ if (isHex(value, -1, true)) {
27
+ return hexToBn(value, { isLe: false, isNegative }).toString();
28
+ }
29
+ if (value.includes('.') || value.includes(',') || value.includes('e')) {
30
+ throw new Error('String should not contain decimal points or scientific notation');
31
+ }
32
+ return value;
33
+ }
34
+ else if (isBn(value) || isBigInt(value)) {
35
+ return value.toString();
36
+ }
37
+ else if (isObject(value)) {
38
+ if (isToBn(value)) {
39
+ return value.toBn().toString();
40
+ }
41
+ // Allow the construction from an object with a single top-level key. This means that
42
+ // single key objects can be treated equivalently to numbers, assuming they meet the
43
+ // specific requirements. (This is useful in Weights 1.5 where Objects are compact)
44
+ const keys = Object.keys(value);
45
+ if (keys.length !== 1) {
46
+ throw new Error('Unable to construct number from multi-key object');
47
+ }
48
+ return decodeAbstractInt(value[keys[0]], isNegative);
49
+ }
50
+ else if (!value) {
51
+ return 0;
52
+ }
53
+ throw new Error(`Unable to create BN from unknown type ${typeof value}`);
56
54
  }
57
-
58
55
  /**
59
56
  * @name AbstractInt
60
57
  * @ignore
61
58
  * @noInheritDoc
62
59
  */
63
60
  export class AbstractInt extends BN {
64
- #bitLength;
65
- constructor(registry, value = 0, bitLength = DEFAULT_UINT_BITS, isSigned = false) {
66
- // Construct via a string/number, which will be passed in the BN constructor.
67
- // It would be ideal to actually return a BN, but there is an issue:
68
- // https://github.com/indutny/bn.js/issues/206
69
- super(
70
- // shortcut isU8a as used in SCALE decoding
71
- isU8a(value) ? bitLength <= 48 ? u8aToNumber(value.subarray(0, bitLength / 8), {
72
- isNegative: isSigned
73
- }) : u8aToBn(value.subarray(0, bitLength / 8), {
74
- isLe: true,
75
- isNegative: isSigned
76
- }).toString() : decodeAbstractInt(value, isSigned));
77
- this.registry = registry;
78
- this.#bitLength = bitLength;
79
- this.encodedLength = this.#bitLength / 8;
80
- this.initialU8aLength = this.#bitLength / 8;
81
- this.isUnsigned = !isSigned;
82
- const isNegative = this.isNeg();
83
- const maxBits = bitLength - (isSigned && !isNegative ? 1 : 0);
84
- if (isNegative && !isSigned) {
85
- throw new Error(`${this.toRawType()}: Negative number passed to unsigned type`);
86
- } else if (super.bitLength() > maxBits) {
87
- throw new Error(`${this.toRawType()}: Input too large. Found input with ${super.bitLength()} bits, expected ${maxBits}`);
88
- }
89
- }
90
-
91
- /**
92
- * @description returns a hash of the contents
93
- */
94
- get hash() {
95
- return this.registry.hash(this.toU8a());
96
- }
97
-
98
- /**
99
- * @description Checks if the value is a zero value (align elsewhere)
100
- */
101
- get isEmpty() {
102
- return this.isZero();
103
- }
104
-
105
- /**
106
- * @description Returns the number of bits in the value
107
- */
108
- bitLength() {
109
- return this.#bitLength;
110
- }
111
-
112
- /**
113
- * @description Compares the value of the input to see if there is a match
114
- */
115
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
116
- eq(other) {
117
- // Here we are actually overriding the built-in .eq to take care of both
118
- // number and BN inputs (no `.eqn` needed) - numbers will be converted
119
- return super.eq(isHex(other) ? hexToBn(other.toString(), {
120
- isLe: false,
121
- isNegative: !this.isUnsigned
122
- }) : bnToBn(other));
123
- }
124
-
125
- /**
126
- * @description Returns a breakdown of the hex encoding for this Codec
127
- */
128
- inspect() {
129
- return {
130
- outer: [this.toU8a()]
131
- };
132
- }
133
-
134
- /**
135
- * @description True if this value is the max of the type
136
- */
137
- isMax() {
138
- const u8a = this.toU8a().filter(b => b === 0xff);
139
- return u8a.length === this.#bitLength / 8;
140
- }
141
-
142
- /**
143
- * @description Returns a BigInt representation of the number
144
- */
145
- toBigInt() {
146
- return BigInt(this.toString());
147
- }
148
-
149
- /**
150
- * @description Returns the BN representation of the number. (Compatibility)
151
- */
152
- toBn() {
153
- return this;
154
- }
155
-
156
- /**
157
- * @description Returns a hex string representation of the value
158
- */
159
- toHex(isLe = false) {
160
- // For display/JSON, this is BE, for compare, use isLe
161
- return bnToHex(this, {
162
- bitLength: this.bitLength(),
163
- isLe,
164
- isNegative: !this.isUnsigned
165
- });
166
- }
167
-
168
- /**
169
- * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
170
- */
171
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
172
- toHuman(isExpanded) {
173
- const rawType = this.toRawType();
174
- if (rawType === 'Balance') {
175
- return this.isMax() ? 'everything'
176
- // FIXME In the case of multiples we need some way of detecting which instance this belongs
177
- // to. as it stands we will always format (incorrectly) against the first token defined
178
- : formatBalance(this, {
179
- decimals: this.registry.chainDecimals[0],
180
- withSi: true,
181
- withUnit: this.registry.chainTokens[0]
182
- });
183
- }
184
- const [, divisor] = FORMATTERS.find(([type]) => type === rawType) || [];
185
- return divisor ? toPercentage(this, divisor) : formatNumber(this);
186
- }
187
-
188
- /**
189
- * @description Converts the Object to JSON, typically used for RPC transfers
190
- */
191
- toJSON(onlyHex = false) {
192
- // FIXME this return type should by string | number, however BN returns string
193
- // Options here are
194
- // - super.bitLength() - the actual used bits
195
- // - this.#bitLength - the type bits (this should be used, however contracts RPC is problematic)
196
- return onlyHex || super.bitLength() > MAX_NUMBER_BITS ? this.toHex() : this.toNumber();
197
- }
198
-
199
- /**
200
- * @description Returns the value in a primitive form, either number when <= 52 bits, or string otherwise
201
- */
202
- toPrimitive() {
203
- return super.bitLength() > MAX_NUMBER_BITS ? this.toString() : this.toNumber();
204
- }
205
-
206
- /**
207
- * @description Returns the base runtime type name for this instance
208
- */
209
- toRawType() {
210
- // NOTE In the case of balances, which have a special meaning on the UI
211
- // and can be interpreted differently, return a specific value for it so
212
- // underlying it always matches (no matter which length it actually is)
213
- return this instanceof this.registry.createClassUnsafe('Balance') ? 'Balance' : `${this.isUnsigned ? 'u' : 'i'}${this.bitLength()}`;
214
- }
215
-
216
- /**
217
- * @description Returns the string representation of the value
218
- * @param base The base to use for the conversion
219
- */
220
- toString(base) {
221
- // only included here since we do not inherit docs
222
- return super.toString(base);
223
- }
224
-
225
- /**
226
- * @description Encodes the value as a Uint8Array as per the SCALE specifications
227
- * @param isBare true when the value has none of the type-specific prefixes (internal)
228
- */
229
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
230
- toU8a(isBare) {
231
- return bnToU8a(this, {
232
- bitLength: this.bitLength(),
233
- isLe: true,
234
- isNegative: !this.isUnsigned
235
- });
236
- }
61
+ registry;
62
+ encodedLength;
63
+ isUnsigned;
64
+ createdAtHash;
65
+ initialU8aLength;
66
+ isStorageFallback;
67
+ #bitLength;
68
+ constructor(registry, value = 0, bitLength = DEFAULT_UINT_BITS, isSigned = false) {
69
+ // Construct via a string/number, which will be passed in the BN constructor.
70
+ // It would be ideal to actually return a BN, but there is an issue:
71
+ // https://github.com/indutny/bn.js/issues/206
72
+ super(
73
+ // shortcut isU8a as used in SCALE decoding
74
+ isU8a(value)
75
+ ? bitLength <= 48
76
+ ? u8aToNumber(value.subarray(0, bitLength / 8), { isNegative: isSigned })
77
+ : u8aToBn(value.subarray(0, bitLength / 8), { isLe: true, isNegative: isSigned }).toString()
78
+ : decodeAbstractInt(value, isSigned));
79
+ this.registry = registry;
80
+ this.#bitLength = bitLength;
81
+ this.encodedLength = this.#bitLength / 8;
82
+ this.initialU8aLength = this.#bitLength / 8;
83
+ this.isUnsigned = !isSigned;
84
+ const isNegative = this.isNeg();
85
+ const maxBits = bitLength - (isSigned && !isNegative ? 1 : 0);
86
+ if (isNegative && !isSigned) {
87
+ throw new Error(`${this.toRawType()}: Negative number passed to unsigned type`);
88
+ }
89
+ else if (super.bitLength() > maxBits) {
90
+ throw new Error(`${this.toRawType()}: Input too large. Found input with ${super.bitLength()} bits, expected ${maxBits}`);
91
+ }
92
+ }
93
+ /**
94
+ * @description returns a hash of the contents
95
+ */
96
+ get hash() {
97
+ return this.registry.hash(this.toU8a());
98
+ }
99
+ /**
100
+ * @description Checks if the value is a zero value (align elsewhere)
101
+ */
102
+ get isEmpty() {
103
+ return this.isZero();
104
+ }
105
+ /**
106
+ * @description Returns the number of bits in the value
107
+ */
108
+ bitLength() {
109
+ return this.#bitLength;
110
+ }
111
+ /**
112
+ * @description Compares the value of the input to see if there is a match
113
+ */
114
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
115
+ eq(other) {
116
+ // Here we are actually overriding the built-in .eq to take care of both
117
+ // number and BN inputs (no `.eqn` needed) - numbers will be converted
118
+ return super.eq(isHex(other)
119
+ ? hexToBn(other.toString(), { isLe: false, isNegative: !this.isUnsigned })
120
+ : bnToBn(other));
121
+ }
122
+ /**
123
+ * @description Returns a breakdown of the hex encoding for this Codec
124
+ */
125
+ inspect() {
126
+ return {
127
+ outer: [this.toU8a()]
128
+ };
129
+ }
130
+ /**
131
+ * @description True if this value is the max of the type
132
+ */
133
+ isMax() {
134
+ const u8a = this.toU8a().filter((b) => b === 0xff);
135
+ return u8a.length === (this.#bitLength / 8);
136
+ }
137
+ /**
138
+ * @description Returns a BigInt representation of the number
139
+ */
140
+ toBigInt() {
141
+ return BigInt(this.toString());
142
+ }
143
+ /**
144
+ * @description Returns the BN representation of the number. (Compatibility)
145
+ */
146
+ toBn() {
147
+ return this;
148
+ }
149
+ /**
150
+ * @description Returns a hex string representation of the value
151
+ */
152
+ toHex(isLe = false) {
153
+ // For display/JSON, this is BE, for compare, use isLe
154
+ return bnToHex(this, {
155
+ bitLength: this.bitLength(),
156
+ isLe,
157
+ isNegative: !this.isUnsigned
158
+ });
159
+ }
160
+ /**
161
+ * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
162
+ */
163
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
164
+ toHuman(isExpanded) {
165
+ const rawType = this.toRawType();
166
+ if (rawType === 'Balance') {
167
+ return this.isMax()
168
+ ? 'everything'
169
+ // FIXME In the case of multiples we need some way of detecting which instance this belongs
170
+ // to. as it stands we will always format (incorrectly) against the first token defined
171
+ : formatBalance(this, { decimals: this.registry.chainDecimals[0], withSi: true, withUnit: this.registry.chainTokens[0] });
172
+ }
173
+ const [, divisor] = FORMATTERS.find(([type]) => type === rawType) || [];
174
+ return divisor
175
+ ? toPercentage(this, divisor)
176
+ : formatNumber(this);
177
+ }
178
+ /**
179
+ * @description Converts the Object to JSON, typically used for RPC transfers
180
+ */
181
+ toJSON(onlyHex = false) {
182
+ // FIXME this return type should by string | number, however BN returns string
183
+ // Options here are
184
+ // - super.bitLength() - the actual used bits
185
+ // - this.#bitLength - the type bits (this should be used, however contracts RPC is problematic)
186
+ return onlyHex || (super.bitLength() > MAX_NUMBER_BITS)
187
+ ? this.toHex()
188
+ : this.toNumber();
189
+ }
190
+ /**
191
+ * @description Returns the value in a primitive form, either number when <= 52 bits, or string otherwise
192
+ */
193
+ toPrimitive() {
194
+ return super.bitLength() > MAX_NUMBER_BITS
195
+ ? this.toString()
196
+ : this.toNumber();
197
+ }
198
+ /**
199
+ * @description Returns the base runtime type name for this instance
200
+ */
201
+ toRawType() {
202
+ // NOTE In the case of balances, which have a special meaning on the UI
203
+ // and can be interpreted differently, return a specific value for it so
204
+ // underlying it always matches (no matter which length it actually is)
205
+ return this instanceof this.registry.createClassUnsafe('Balance')
206
+ ? 'Balance'
207
+ : `${this.isUnsigned ? 'u' : 'i'}${this.bitLength()}`;
208
+ }
209
+ /**
210
+ * @description Returns the string representation of the value
211
+ * @param base The base to use for the conversion
212
+ */
213
+ toString(base) {
214
+ // only included here since we do not inherit docs
215
+ return super.toString(base);
216
+ }
217
+ /**
218
+ * @description Encodes the value as a Uint8Array as per the SCALE specifications
219
+ * @param isBare true when the value has none of the type-specific prefixes (internal)
220
+ */
221
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
222
+ toU8a(isBare) {
223
+ return bnToU8a(this, {
224
+ bitLength: this.bitLength(),
225
+ isLe: true,
226
+ isNegative: !this.isUnsigned
227
+ });
228
+ }
237
229
  }
@@ -1,51 +1,40 @@
1
- // Copyright 2017-2023 @polkadot/types-codec authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
1
  /**
5
2
  * @name Object
6
3
  * @description A type extends the Base class, when it holds a value
7
4
  */
8
5
  export class AbstractObject {
9
- constructor(registry, value, initialU8aLength) {
10
- this.$ = value;
11
- this.initialU8aLength = initialU8aLength;
12
- this.registry = registry;
13
- }
14
-
15
- /**
16
- * @description The length of the value when encoded as a Uint8Array
17
- */
18
- get encodedLength() {
19
- return this.toU8a().length;
20
- }
21
-
22
- /**
23
- * @description returns a hash of the contents
24
- */
25
- get hash() {
26
- return this.registry.hash(this.toU8a());
27
- }
28
-
29
- /**
30
- * @description Checks if the value is an empty value
31
- */
32
-
33
- /**
34
- * @description Returns the string representation of the value
35
- */
36
- toString() {
37
- return this.$.toString();
38
- }
39
-
40
- /**
41
- * @description Encodes the value as a Uint8Array as per the SCALE specifications
42
- * @param isBare true when the value has none of the type-specific prefixes (internal)
43
- */
44
-
45
- /**
46
- * @description Return the internal value (JS-aligned, same result as $)
47
- */
48
- valueOf() {
49
- return this.$;
50
- }
6
+ registry;
7
+ createdAtHash;
8
+ initialU8aLength;
9
+ isStorageFallback;
10
+ $;
11
+ constructor(registry, value, initialU8aLength) {
12
+ this.$ = value;
13
+ this.initialU8aLength = initialU8aLength;
14
+ this.registry = registry;
15
+ }
16
+ /**
17
+ * @description The length of the value when encoded as a Uint8Array
18
+ */
19
+ get encodedLength() {
20
+ return this.toU8a().length;
21
+ }
22
+ /**
23
+ * @description returns a hash of the contents
24
+ */
25
+ get hash() {
26
+ return this.registry.hash(this.toU8a());
27
+ }
28
+ /**
29
+ * @description Returns the string representation of the value
30
+ */
31
+ toString() {
32
+ return this.$.toString();
33
+ }
34
+ /**
35
+ * @description Return the internal value (JS-aligned, same result as $)
36
+ */
37
+ valueOf() {
38
+ return this.$;
39
+ }
51
40
  }
package/abstract/index.js CHANGED
@@ -1,6 +1,3 @@
1
- // Copyright 2017-2023 @polkadot/types-codec authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- export { AbstractArray } from "./Array.js";
5
- export { AbstractBase } from "./Base.js";
6
- export { AbstractInt } from "./Int.js";
1
+ export { AbstractArray } from './Array.js';
2
+ export { AbstractBase } from './Base.js';
3
+ export { AbstractInt } from './Int.js';