@polkadot/types-codec 9.14.1 → 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/base/Int.js CHANGED
@@ -1,8 +1,4 @@
1
- // Copyright 2017-2023 @polkadot/types-codec authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
- import { AbstractInt } from "../abstract/Int.js";
5
-
1
+ import { AbstractInt } from '../abstract/Int.js';
6
2
  /**
7
3
  * @name Int
8
4
  * @description
@@ -14,17 +10,17 @@ import { AbstractInt } from "../abstract/Int.js";
14
10
  * @noInheritDoc
15
11
  */
16
12
  export class Int extends AbstractInt {
17
- constructor(registry, value = 0, bitLength) {
18
- super(registry, value, bitLength, true);
19
- }
20
- static with(bitLength, typeName) {
21
- return class extends Int {
22
- constructor(registry, value) {
23
- super(registry, value, bitLength);
24
- }
25
- toRawType() {
26
- return typeName || super.toRawType();
27
- }
28
- };
29
- }
13
+ constructor(registry, value = 0, bitLength) {
14
+ super(registry, value, bitLength, true);
15
+ }
16
+ static with(bitLength, typeName) {
17
+ return class extends Int {
18
+ constructor(registry, value) {
19
+ super(registry, value, bitLength);
20
+ }
21
+ toRawType() {
22
+ return typeName || super.toRawType();
23
+ }
24
+ };
25
+ }
30
26
  }
package/base/Null.js CHANGED
@@ -1,90 +1,79 @@
1
- // Copyright 2017-2023 @polkadot/types-codec authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
1
  import { isNull } from '@polkadot/util';
5
-
6
2
  /**
7
3
  * @name Null
8
4
  * @description
9
5
  * Implements a type that does not contain anything (apart from `null`)
10
6
  */
11
7
  export class Null {
12
- encodedLength = 0;
13
- isEmpty = true;
14
- initialU8aLength = 0;
15
- constructor(registry) {
16
- this.registry = registry;
17
- }
18
-
19
- /**
20
- * @description returns a hash of the contents
21
- */
22
- get hash() {
23
- throw new Error('.hash is not implemented on Null');
24
- }
25
-
26
- /**
27
- * @description Compares the value of the input to see if there is a match
28
- */
29
- eq(other) {
30
- return other instanceof Null || isNull(other);
31
- }
32
-
33
- /**
34
- * @description Returns a breakdown of the hex encoding for this Codec
35
- */
36
- inspect() {
37
- return {};
38
- }
39
-
40
- /**
41
- * @description Returns a hex string representation of the value
42
- */
43
- toHex() {
44
- return '0x';
45
- }
46
-
47
- /**
48
- * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
49
- */
50
- toHuman() {
51
- return this.toJSON();
52
- }
53
-
54
- /**
55
- * @description Converts the Object to JSON, typically used for RPC transfers
56
- */
57
- toJSON() {
58
- return null;
59
- }
60
-
61
- /**
62
- * @description Converts the value in a best-fit primitive form
63
- */
64
- toPrimitive() {
65
- return null;
66
- }
67
-
68
- /**
69
- * @description Returns the base runtime type name for this instance
70
- */
71
- toRawType() {
72
- return 'Null';
73
- }
74
-
75
- /**
76
- * @description Returns the string representation of the value
77
- */
78
- toString() {
79
- return '';
80
- }
81
-
82
- /**
83
- * @description Encodes the value as a Uint8Array as per the SCALE specifications
84
- * @param isBare true when the value has none of the type-specific prefixes (internal)
85
- */
86
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
87
- toU8a(isBare) {
88
- return new Uint8Array();
89
- }
8
+ encodedLength = 0;
9
+ isEmpty = true;
10
+ registry;
11
+ createdAtHash;
12
+ initialU8aLength = 0;
13
+ isStorageFallback;
14
+ constructor(registry) {
15
+ this.registry = registry;
16
+ }
17
+ /**
18
+ * @description returns a hash of the contents
19
+ */
20
+ get hash() {
21
+ throw new Error('.hash is not implemented on Null');
22
+ }
23
+ /**
24
+ * @description Compares the value of the input to see if there is a match
25
+ */
26
+ eq(other) {
27
+ return other instanceof Null || isNull(other);
28
+ }
29
+ /**
30
+ * @description Returns a breakdown of the hex encoding for this Codec
31
+ */
32
+ inspect() {
33
+ return {};
34
+ }
35
+ /**
36
+ * @description Returns a hex string representation of the value
37
+ */
38
+ toHex() {
39
+ return '0x';
40
+ }
41
+ /**
42
+ * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
43
+ */
44
+ toHuman() {
45
+ return this.toJSON();
46
+ }
47
+ /**
48
+ * @description Converts the Object to JSON, typically used for RPC transfers
49
+ */
50
+ toJSON() {
51
+ return null;
52
+ }
53
+ /**
54
+ * @description Converts the value in a best-fit primitive form
55
+ */
56
+ toPrimitive() {
57
+ return null;
58
+ }
59
+ /**
60
+ * @description Returns the base runtime type name for this instance
61
+ */
62
+ toRawType() {
63
+ return 'Null';
64
+ }
65
+ /**
66
+ * @description Returns the string representation of the value
67
+ */
68
+ toString() {
69
+ return '';
70
+ }
71
+ /**
72
+ * @description Encodes the value as a Uint8Array as per the SCALE specifications
73
+ * @param isBare true when the value has none of the type-specific prefixes (internal)
74
+ */
75
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
76
+ toU8a(isBare) {
77
+ return new Uint8Array();
78
+ }
90
79
  }
package/base/Option.js CHANGED
@@ -1,48 +1,48 @@
1
- // Copyright 2017-2023 @polkadot/types-codec authors & contributors
2
- // SPDX-License-Identifier: Apache-2.0
3
-
4
1
  import { isCodec, isNull, isU8a, isUndefined, u8aToHex } from '@polkadot/util';
5
- import { typeToConstructor } from "../utils/index.js";
6
- import { Null } from "./Null.js";
2
+ import { typeToConstructor } from '../utils/index.js';
3
+ import { Null } from './Null.js';
7
4
  function noopSetDefinition(d) {
8
- return d;
5
+ return d;
9
6
  }
10
7
  class None extends Null {
11
- /**
12
- * @description Returns the base runtime type name for this instance
13
- */
14
- toRawType() {
15
- return 'None';
16
- }
8
+ /**
9
+ * @description Returns the base runtime type name for this instance
10
+ */
11
+ toRawType() {
12
+ return 'None';
13
+ }
17
14
  }
18
-
19
15
  /** @internal */
20
16
  function decodeOption(registry, Type, value) {
21
- if (value instanceof Type) {
22
- // don't re-create, use as it (which also caters for derived types)
23
- return value;
24
- } else if (value instanceof Option) {
25
- if (value.value instanceof Type) {
26
- // same instance, return it
27
- return value.value;
28
- } else if (value.isNone) {
29
- // internal is None, we are also none
30
- return new None(registry);
31
- }
32
-
33
- // convert the actual value into known
34
- return new Type(registry, value.value);
35
- } else if (isNull(value) || isUndefined(value) || value === '0x' || value instanceof None) {
36
- // anyhting empty we pass as-is
37
- return new None(registry);
38
- } else if (isU8a(value)) {
39
- // the isU8a check happens last in the if-tree - since the wrapped value
40
- // may be an instance of it, so Type and Option checks go in first
41
- return !value.length || value[0] === 0 ? new None(registry) : new Type(registry, value.subarray(1));
42
- }
43
- return new Type(registry, value);
17
+ if (value instanceof Type) {
18
+ // don't re-create, use as it (which also caters for derived types)
19
+ return value;
20
+ }
21
+ else if (value instanceof Option) {
22
+ if (value.value instanceof Type) {
23
+ // same instance, return it
24
+ return value.value;
25
+ }
26
+ else if (value.isNone) {
27
+ // internal is None, we are also none
28
+ return new None(registry);
29
+ }
30
+ // convert the actual value into known
31
+ return new Type(registry, value.value);
32
+ }
33
+ else if (isNull(value) || isUndefined(value) || value === '0x' || value instanceof None) {
34
+ // anyhting empty we pass as-is
35
+ return new None(registry);
36
+ }
37
+ else if (isU8a(value)) {
38
+ // the isU8a check happens last in the if-tree - since the wrapped value
39
+ // may be an instance of it, so Type and Option checks go in first
40
+ return !value.length || value[0] === 0
41
+ ? new None(registry)
42
+ : new Type(registry, value.subarray(1));
43
+ }
44
+ return new Type(registry, value);
44
45
  }
45
-
46
46
  /**
47
47
  * @name Option
48
48
  * @description
@@ -52,193 +52,184 @@ function decodeOption(registry, Type, value) {
52
52
  * with a value if/as required/found.
53
53
  */
54
54
  export class Option {
55
- #Type;
56
- #raw;
57
- constructor(registry, typeName, value, {
58
- definition,
59
- setDefinition = noopSetDefinition
60
- } = {}) {
61
- const Type = definition || setDefinition(typeToConstructor(registry, typeName));
62
- const decoded = isU8a(value) && value.length && !isCodec(value) ? value[0] === 0 ? new None(registry) : new Type(registry, value.subarray(1)) : decodeOption(registry, Type, value);
63
- this.registry = registry;
64
- this.#Type = Type;
65
- this.#raw = decoded;
66
- if (decoded != null && decoded.initialU8aLength) {
67
- this.initialU8aLength = 1 + decoded.initialU8aLength;
68
- }
69
- }
70
- static with(Type) {
71
- let definition;
72
- const setDefinition = d => {
73
- definition = d;
74
- return d;
75
- };
76
- return class extends Option {
77
- constructor(registry, value) {
78
- super(registry, Type, value, {
79
- definition,
80
- setDefinition
81
- });
82
- }
83
- };
84
- }
85
-
86
- /**
87
- * @description The length of the value when encoded as a Uint8Array
88
- */
89
- get encodedLength() {
90
- // boolean byte (has value, doesn't have) along with wrapped length
91
- return 1 + this.#raw.encodedLength;
92
- }
93
-
94
- /**
95
- * @description returns a hash of the contents
96
- */
97
- get hash() {
98
- return this.registry.hash(this.toU8a());
99
- }
100
-
101
- /**
102
- * @description Checks if the Option has no value
103
- */
104
- get isEmpty() {
105
- return this.isNone;
106
- }
107
-
108
- /**
109
- * @description Checks if the Option has no value
110
- */
111
- get isNone() {
112
- return this.#raw instanceof None;
113
- }
114
-
115
- /**
116
- * @description Checks if the Option has a value
117
- */
118
- get isSome() {
119
- return !this.isNone;
120
- }
121
-
122
- /**
123
- * @description The actual value for the Option
124
- */
125
- get value() {
126
- return this.#raw;
127
- }
128
-
129
- /**
130
- * @description Compares the value of the input to see if there is a match
131
- */
132
- eq(other) {
133
- if (other instanceof Option) {
134
- return this.isSome === other.isSome && this.value.eq(other.value);
135
- }
136
- return this.value.eq(other);
137
- }
138
-
139
- /**
140
- * @description Returns a breakdown of the hex encoding for this Codec
141
- */
142
- inspect() {
143
- if (this.isNone) {
144
- return {
145
- outer: [new Uint8Array([0])]
146
- };
147
- }
148
- const {
149
- inner,
150
- outer = []
151
- } = this.#raw.inspect();
152
- return {
153
- inner,
154
- outer: [new Uint8Array([1]), ...outer]
155
- };
156
- }
157
-
158
- /**
159
- * @description Returns a hex string representation of the value
160
- */
161
- toHex() {
162
- // This attempts to align with the JSON encoding - actually in this case
163
- // the isSome value is correct, however the `isNone` may be problematic
164
- return this.isNone ? '0x' : u8aToHex(this.toU8a().subarray(1));
165
- }
166
-
167
- /**
168
- * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
169
- */
170
- toHuman(isExtended) {
171
- return this.#raw.toHuman(isExtended);
172
- }
173
-
174
- /**
175
- * @description Converts the Object to JSON, typically used for RPC transfers
176
- */
177
- toJSON() {
178
- return this.isNone ? null : this.#raw.toJSON();
179
- }
180
-
181
- /**
182
- * @description Converts the value in a best-fit primitive form
183
- */
184
- toPrimitive() {
185
- return this.isNone ? null : this.#raw.toPrimitive();
186
- }
187
-
188
- /**
189
- * @description Returns the base runtime type name for this instance
190
- */
191
- toRawType(isBare) {
192
- const wrapped = this.registry.getClassName(this.#Type) || new this.#Type(this.registry).toRawType();
193
- return isBare ? wrapped : `Option<${wrapped}>`;
194
- }
195
-
196
- /**
197
- * @description Returns the string representation of the value
198
- */
199
- toString() {
200
- return this.#raw.toString();
201
- }
202
-
203
- /**
204
- * @description Encodes the value as a Uint8Array as per the SCALE specifications
205
- * @param isBare true when the value has none of the type-specific prefixes (internal)
206
- */
207
- toU8a(isBare) {
208
- if (isBare) {
209
- return this.#raw.toU8a(true);
210
- }
211
- const u8a = new Uint8Array(this.encodedLength);
212
- if (this.isSome) {
213
- u8a.set([1]);
214
- u8a.set(this.#raw.toU8a(), 1);
215
- }
216
- return u8a;
217
- }
218
-
219
- /**
220
- * @description Returns the value that the Option represents (if available), throws if null
221
- */
222
- unwrap() {
223
- if (this.isNone) {
224
- throw new Error('Option: unwrapping a None value');
225
- }
226
- return this.#raw;
227
- }
228
-
229
- /**
230
- * @description Returns the value that the Option represents (if available) or defaultValue if none
231
- * @param defaultValue The value to return if the option isNone
232
- */
233
- unwrapOr(defaultValue) {
234
- return this.isSome ? this.unwrap() : defaultValue;
235
- }
236
-
237
- /**
238
- * @description Returns the value that the Option represents (if available) or defaultValue if none
239
- * @param defaultValue The value to return if the option isNone
240
- */
241
- unwrapOrDefault() {
242
- return this.isSome ? this.unwrap() : new this.#Type(this.registry);
243
- }
55
+ registry;
56
+ createdAtHash;
57
+ initialU8aLength;
58
+ isStorageFallback;
59
+ #Type;
60
+ #raw;
61
+ constructor(registry, typeName, value, { definition, setDefinition = noopSetDefinition } = {}) {
62
+ const Type = definition || setDefinition(typeToConstructor(registry, typeName));
63
+ const decoded = isU8a(value) && value.length && !isCodec(value)
64
+ ? value[0] === 0
65
+ ? new None(registry)
66
+ : new Type(registry, value.subarray(1))
67
+ : decodeOption(registry, Type, value);
68
+ this.registry = registry;
69
+ this.#Type = Type;
70
+ this.#raw = decoded;
71
+ if (decoded?.initialU8aLength) {
72
+ this.initialU8aLength = 1 + decoded.initialU8aLength;
73
+ }
74
+ }
75
+ static with(Type) {
76
+ let definition;
77
+ const setDefinition = (d) => {
78
+ definition = d;
79
+ return d;
80
+ };
81
+ return class extends Option {
82
+ constructor(registry, value) {
83
+ super(registry, Type, value, { definition, setDefinition });
84
+ }
85
+ };
86
+ }
87
+ /**
88
+ * @description The length of the value when encoded as a Uint8Array
89
+ */
90
+ get encodedLength() {
91
+ // boolean byte (has value, doesn't have) along with wrapped length
92
+ return 1 + this.#raw.encodedLength;
93
+ }
94
+ /**
95
+ * @description returns a hash of the contents
96
+ */
97
+ get hash() {
98
+ return this.registry.hash(this.toU8a());
99
+ }
100
+ /**
101
+ * @description Checks if the Option has no value
102
+ */
103
+ get isEmpty() {
104
+ return this.isNone;
105
+ }
106
+ /**
107
+ * @description Checks if the Option has no value
108
+ */
109
+ get isNone() {
110
+ return this.#raw instanceof None;
111
+ }
112
+ /**
113
+ * @description Checks if the Option has a value
114
+ */
115
+ get isSome() {
116
+ return !this.isNone;
117
+ }
118
+ /**
119
+ * @description The actual value for the Option
120
+ */
121
+ get value() {
122
+ return this.#raw;
123
+ }
124
+ /**
125
+ * @description Compares the value of the input to see if there is a match
126
+ */
127
+ eq(other) {
128
+ if (other instanceof Option) {
129
+ return (this.isSome === other.isSome) && this.value.eq(other.value);
130
+ }
131
+ return this.value.eq(other);
132
+ }
133
+ /**
134
+ * @description Returns a breakdown of the hex encoding for this Codec
135
+ */
136
+ inspect() {
137
+ if (this.isNone) {
138
+ return { outer: [new Uint8Array([0])] };
139
+ }
140
+ const { inner, outer = [] } = this.#raw.inspect();
141
+ return {
142
+ inner,
143
+ outer: [new Uint8Array([1]), ...outer]
144
+ };
145
+ }
146
+ /**
147
+ * @description Returns a hex string representation of the value
148
+ */
149
+ toHex() {
150
+ // This attempts to align with the JSON encoding - actually in this case
151
+ // the isSome value is correct, however the `isNone` may be problematic
152
+ return this.isNone
153
+ ? '0x'
154
+ : u8aToHex(this.toU8a().subarray(1));
155
+ }
156
+ /**
157
+ * @description Converts the Object to to a human-friendly JSON, with additional fields, expansion and formatting of information
158
+ */
159
+ toHuman(isExtended) {
160
+ return this.#raw.toHuman(isExtended);
161
+ }
162
+ /**
163
+ * @description Converts the Object to JSON, typically used for RPC transfers
164
+ */
165
+ toJSON() {
166
+ return this.isNone
167
+ ? null
168
+ : this.#raw.toJSON();
169
+ }
170
+ /**
171
+ * @description Converts the value in a best-fit primitive form
172
+ */
173
+ toPrimitive() {
174
+ return this.isNone
175
+ ? null
176
+ : this.#raw.toPrimitive();
177
+ }
178
+ /**
179
+ * @description Returns the base runtime type name for this instance
180
+ */
181
+ toRawType(isBare) {
182
+ const wrapped = this.registry.getClassName(this.#Type) || new this.#Type(this.registry).toRawType();
183
+ return isBare
184
+ ? wrapped
185
+ : `Option<${wrapped}>`;
186
+ }
187
+ /**
188
+ * @description Returns the string representation of the value
189
+ */
190
+ toString() {
191
+ return this.#raw.toString();
192
+ }
193
+ /**
194
+ * @description Encodes the value as a Uint8Array as per the SCALE specifications
195
+ * @param isBare true when the value has none of the type-specific prefixes (internal)
196
+ */
197
+ toU8a(isBare) {
198
+ if (isBare) {
199
+ return this.#raw.toU8a(true);
200
+ }
201
+ const u8a = new Uint8Array(this.encodedLength);
202
+ if (this.isSome) {
203
+ u8a.set([1]);
204
+ u8a.set(this.#raw.toU8a(), 1);
205
+ }
206
+ return u8a;
207
+ }
208
+ /**
209
+ * @description Returns the value that the Option represents (if available), throws if null
210
+ */
211
+ unwrap() {
212
+ if (this.isNone) {
213
+ throw new Error('Option: unwrapping a None value');
214
+ }
215
+ return this.#raw;
216
+ }
217
+ /**
218
+ * @description Returns the value that the Option represents (if available) or defaultValue if none
219
+ * @param defaultValue The value to return if the option isNone
220
+ */
221
+ unwrapOr(defaultValue) {
222
+ return this.isSome
223
+ ? this.unwrap()
224
+ : defaultValue;
225
+ }
226
+ /**
227
+ * @description Returns the value that the Option represents (if available) or defaultValue if none
228
+ * @param defaultValue The value to return if the option isNone
229
+ */
230
+ unwrapOrDefault() {
231
+ return this.isSome
232
+ ? this.unwrap()
233
+ : new this.#Type(this.registry);
234
+ }
244
235
  }