@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.
- package/abstract/Array.js +140 -155
- package/abstract/Base.js +95 -112
- package/abstract/Int.js +212 -220
- package/abstract/Object.js +34 -45
- package/abstract/index.js +3 -6
- package/base/Compact.js +149 -165
- package/base/DoNotConstruct.js +61 -64
- package/base/Enum.js +345 -382
- package/base/Int.js +14 -18
- package/base/Null.js +71 -82
- package/base/Option.js +217 -226
- package/base/Result.js +54 -67
- package/base/Tuple.js +96 -101
- package/base/UInt.js +11 -15
- package/base/Vec.js +84 -89
- package/base/VecAny.js +8 -12
- package/base/VecFixed.js +59 -70
- package/base/index.js +12 -15
- package/bundle.js +7 -10
- package/cjs/abstract/Array.js +138 -159
- package/cjs/abstract/Base.js +96 -117
- package/cjs/abstract/Int.js +215 -238
- package/cjs/abstract/Object.js +30 -49
- package/cjs/abstract/index.js +8 -25
- package/cjs/base/Compact.js +151 -173
- package/cjs/base/DoNotConstruct.js +63 -70
- package/cjs/base/Enum.js +350 -396
- package/cjs/base/Int.js +16 -24
- package/cjs/base/Null.js +70 -86
- package/cjs/base/Option.js +220 -234
- package/cjs/base/Result.js +56 -71
- package/cjs/base/Tuple.js +103 -109
- package/cjs/base/UInt.js +13 -19
- package/cjs/base/Vec.js +94 -101
- package/cjs/base/VecAny.js +10 -16
- package/cjs/base/VecFixed.js +66 -79
- package/cjs/base/index.js +26 -88
- package/cjs/bundle.js +11 -86
- package/cjs/detectOther.js +2 -10
- package/cjs/detectPackage.js +6 -11
- package/cjs/extended/BTreeMap.js +10 -16
- package/cjs/extended/BTreeSet.js +162 -178
- package/cjs/extended/BitVec.js +70 -77
- package/cjs/extended/Bytes.js +59 -62
- package/cjs/extended/HashMap.js +10 -16
- package/cjs/extended/Linkage.js +50 -60
- package/cjs/extended/Map.js +176 -181
- package/cjs/extended/OptionBool.js +65 -68
- package/cjs/extended/Range.js +37 -46
- package/cjs/extended/RangeInclusive.js +13 -21
- package/cjs/extended/Type.js +14 -22
- package/cjs/extended/U8aFixed.js +33 -43
- package/cjs/extended/WrapperKeepOpaque.js +99 -99
- package/cjs/extended/WrapperOpaque.js +19 -28
- package/cjs/extended/index.js +31 -108
- package/cjs/index.js +3 -15
- package/cjs/native/Bool.js +101 -116
- package/cjs/native/Date.js +125 -151
- package/cjs/native/Float.js +95 -114
- package/cjs/native/Json.js +102 -124
- package/cjs/native/Raw.js +128 -150
- package/cjs/native/Set.js +200 -220
- package/cjs/native/Struct.data.js +2 -9
- package/cjs/native/Struct.js +238 -251
- package/cjs/native/Text.js +137 -149
- package/cjs/native/index.js +21 -78
- package/cjs/packageInfo.js +2 -16
- package/cjs/primitive/F32.js +8 -11
- package/cjs/primitive/F64.js +8 -11
- package/cjs/primitive/I128.js +8 -11
- package/cjs/primitive/I16.js +8 -11
- package/cjs/primitive/I256.js +8 -11
- package/cjs/primitive/I32.js +8 -11
- package/cjs/primitive/I64.js +8 -11
- package/cjs/primitive/I8.js +8 -11
- package/cjs/primitive/U128.js +8 -11
- package/cjs/primitive/U16.js +8 -11
- package/cjs/primitive/U256.js +8 -11
- package/cjs/primitive/U32.js +8 -11
- package/cjs/primitive/U64.js +8 -11
- package/cjs/primitive/U8.js +8 -11
- package/cjs/primitive/USize.js +7 -13
- package/cjs/primitive/index.js +47 -199
- package/cjs/types/codec.js +2 -1
- package/cjs/types/helpers.js +2 -1
- package/cjs/types/index.js +6 -48
- package/cjs/types/interfaces.js +2 -1
- package/cjs/types/registry.js +2 -1
- package/cjs/utils/compareArray.js +12 -17
- package/cjs/utils/compareMap.js +23 -26
- package/cjs/utils/compareSet.js +17 -23
- package/cjs/utils/decodeU8a.js +63 -74
- package/cjs/utils/index.js +24 -91
- package/cjs/utils/mapToTypeMap.js +13 -18
- package/cjs/utils/sanitize.js +198 -204
- package/cjs/utils/sortValues.js +39 -49
- package/cjs/utils/typeToConstructor.js +8 -11
- package/cjs/utils/typesToMap.js +10 -16
- package/cjs/utils/util.js +6 -11
- package/detectOther.js +0 -5
- package/detectPackage.js +2 -7
- package/extended/BTreeMap.js +8 -11
- package/extended/BTreeSet.js +159 -171
- package/extended/BitVec.js +63 -70
- package/extended/Bytes.js +56 -57
- package/extended/HashMap.js +8 -11
- package/extended/Linkage.js +46 -51
- package/extended/Map.js +173 -173
- package/extended/OptionBool.js +62 -62
- package/extended/Range.js +31 -39
- package/extended/RangeInclusive.js +11 -16
- package/extended/Type.js +12 -17
- package/extended/U8aFixed.js +30 -36
- package/extended/WrapperKeepOpaque.js +92 -91
- package/extended/WrapperOpaque.js +17 -23
- package/extended/index.js +14 -17
- package/index.js +2 -5
- package/native/Bool.js +102 -111
- package/native/Date.js +126 -144
- package/native/Float.js +94 -107
- package/native/Json.js +104 -114
- package/native/Raw.js +130 -146
- package/native/Set.js +194 -209
- package/native/Struct.data.js +0 -3
- package/native/Struct.js +233 -241
- package/native/Text.js +135 -143
- package/native/index.js +8 -11
- package/package.json +8 -5
- package/packageInfo.js +1 -11
- package/primitive/F32.js +3 -7
- package/primitive/F64.js +3 -7
- package/primitive/I128.js +3 -7
- package/primitive/I16.js +3 -7
- package/primitive/I256.js +3 -7
- package/primitive/I32.js +3 -7
- package/primitive/I64.js +3 -7
- package/primitive/I8.js +3 -7
- package/primitive/U128.js +3 -7
- package/primitive/U16.js +3 -7
- package/primitive/U256.js +3 -7
- package/primitive/U32.js +3 -7
- package/primitive/U64.js +3 -7
- package/primitive/U8.js +3 -7
- package/primitive/USize.js +5 -9
- package/primitive/index.js +15 -18
- package/types/index.js +4 -7
- package/utils/compareArray.js +7 -11
- package/utils/compareMap.js +18 -19
- package/utils/compareSet.js +12 -16
- package/utils/decodeU8a.js +54 -61
- package/utils/index.js +9 -12
- package/utils/mapToTypeMap.js +9 -13
- package/utils/sanitize.js +182 -185
- package/utils/sortValues.js +32 -36
- package/utils/typeToConstructor.js +3 -4
- package/utils/typesToMap.js +5 -8
- package/utils/util.js +1 -4
package/base/Result.js
CHANGED
|
@@ -1,76 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
|
-
import { Enum } from "./Enum.js";
|
|
5
|
-
|
|
1
|
+
import { Enum } from './Enum.js';
|
|
6
2
|
/**
|
|
7
3
|
* @name Result
|
|
8
4
|
* @description
|
|
9
5
|
* A Result maps to the Rust Result type, that can either wrap a success or error value
|
|
10
6
|
*/
|
|
11
7
|
export class Result extends Enum {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Ok,
|
|
17
|
-
Err
|
|
18
|
-
}, value);
|
|
19
|
-
}
|
|
20
|
-
static with(Types) {
|
|
21
|
-
return class extends Result {
|
|
22
|
-
constructor(registry, value) {
|
|
23
|
-
super(registry, Types.Ok, Types.Err, value);
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @description Returns the wrapper Err value (if isErr)
|
|
30
|
-
*/
|
|
31
|
-
get asErr() {
|
|
32
|
-
if (!this.isErr) {
|
|
33
|
-
throw new Error('Cannot extract Err value from Ok result, check isErr first');
|
|
8
|
+
constructor(registry, Ok, Err, value) {
|
|
9
|
+
// NOTE This is order-dependent, Ok (with index 0) needs to be first
|
|
10
|
+
// eslint-disable-next-line sort-keys
|
|
11
|
+
super(registry, { Ok, Err }, value);
|
|
34
12
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
13
|
+
static with(Types) {
|
|
14
|
+
return class extends Result {
|
|
15
|
+
constructor(registry, value) {
|
|
16
|
+
super(registry, Types.Ok, Types.Err, value);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @description Returns the wrapper Err value (if isErr)
|
|
22
|
+
*/
|
|
23
|
+
get asErr() {
|
|
24
|
+
if (!this.isErr) {
|
|
25
|
+
throw new Error('Cannot extract Err value from Ok result, check isErr first');
|
|
26
|
+
}
|
|
27
|
+
return this.value;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @description Returns the wrapper Ok value (if isOk)
|
|
31
|
+
*/
|
|
32
|
+
get asOk() {
|
|
33
|
+
if (!this.isOk) {
|
|
34
|
+
throw new Error('Cannot extract Ok value from Err result, check isOk first');
|
|
35
|
+
}
|
|
36
|
+
return this.value;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @description Checks if the Result has no value
|
|
40
|
+
*/
|
|
41
|
+
get isEmpty() {
|
|
42
|
+
return this.isOk && this.value.isEmpty;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @description Checks if the Result wraps an Err value
|
|
46
|
+
*/
|
|
47
|
+
get isErr() {
|
|
48
|
+
return !this.isOk;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @description Checks if the Result wraps an Ok value
|
|
52
|
+
*/
|
|
53
|
+
get isOk() {
|
|
54
|
+
return this.index === 0;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* @description Returns the base runtime type name for this instance
|
|
58
|
+
*/
|
|
59
|
+
toRawType() {
|
|
60
|
+
const Types = this._toRawStruct();
|
|
61
|
+
return `Result<${Types.Ok},${Types.Err}>`;
|
|
44
62
|
}
|
|
45
|
-
return this.value;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* @description Checks if the Result has no value
|
|
50
|
-
*/
|
|
51
|
-
get isEmpty() {
|
|
52
|
-
return this.isOk && this.value.isEmpty;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* @description Checks if the Result wraps an Err value
|
|
57
|
-
*/
|
|
58
|
-
get isErr() {
|
|
59
|
-
return !this.isOk;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* @description Checks if the Result wraps an Ok value
|
|
64
|
-
*/
|
|
65
|
-
get isOk() {
|
|
66
|
-
return this.index === 0;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* @description Returns the base runtime type name for this instance
|
|
71
|
-
*/
|
|
72
|
-
toRawType() {
|
|
73
|
-
const Types = this._toRawStruct();
|
|
74
|
-
return `Result<${Types.Ok},${Types.Err}>`;
|
|
75
|
-
}
|
|
76
63
|
}
|
package/base/Tuple.js
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
// Copyright 2017-2023 @polkadot/types-codec authors & contributors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
1
|
import { isFunction, isHex, isString, isU8a, stringify, u8aConcatStrict, u8aToU8a } from '@polkadot/util';
|
|
5
|
-
import { AbstractArray } from
|
|
6
|
-
import { decodeU8a, mapToTypeMap, typeToConstructor } from
|
|
2
|
+
import { AbstractArray } from '../abstract/Array.js';
|
|
3
|
+
import { decodeU8a, mapToTypeMap, typeToConstructor } from '../utils/index.js';
|
|
7
4
|
function noopSetDefinition(d) {
|
|
8
|
-
|
|
5
|
+
return d;
|
|
9
6
|
}
|
|
10
|
-
|
|
11
7
|
/** @internal */
|
|
12
8
|
function decodeTuple(registry, result, value, Classes) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
9
|
+
if (Array.isArray(value)) {
|
|
10
|
+
const Types = Classes[0];
|
|
11
|
+
for (let i = 0; i < Types.length; i++) {
|
|
12
|
+
try {
|
|
13
|
+
const entry = value?.[i];
|
|
14
|
+
result[i] = entry instanceof Types[i]
|
|
15
|
+
? entry
|
|
16
|
+
: new Types[i](registry, entry);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
throw new Error(`Tuple: failed on ${i}:: ${error.message}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return [result, 0];
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return decodeU8a(registry, result, u8aToU8a(value), Classes);
|
|
26
|
-
} else if (!value || !result.length) {
|
|
27
|
-
const Types = Classes[0];
|
|
28
|
-
for (let i = 0; i < Types.length; i++) {
|
|
29
|
-
result[i] = new Types[i](registry);
|
|
24
|
+
else if (isHex(value)) {
|
|
25
|
+
return decodeU8a(registry, result, u8aToU8a(value), Classes);
|
|
30
26
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
else if (!value || !result.length) {
|
|
28
|
+
const Types = Classes[0];
|
|
29
|
+
for (let i = 0; i < Types.length; i++) {
|
|
30
|
+
result[i] = new Types[i](registry);
|
|
31
|
+
}
|
|
32
|
+
return [result, 0];
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`Expected array input to Tuple decoding, found ${typeof value}: ${stringify(value)}`);
|
|
34
35
|
}
|
|
35
|
-
|
|
36
36
|
/**
|
|
37
37
|
* @name Tuple
|
|
38
38
|
* @description
|
|
@@ -40,79 +40,74 @@ function decodeTuple(registry, result, value, Classes) {
|
|
|
40
40
|
* own type. It extends the base JS `Array` object.
|
|
41
41
|
*/
|
|
42
42
|
export class Tuple extends AbstractArray {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
43
|
+
#Types;
|
|
44
|
+
constructor(registry, Types, value, { definition, setDefinition = noopSetDefinition } = {}) {
|
|
45
|
+
const Classes = definition || setDefinition(Array.isArray(Types)
|
|
46
|
+
? [Types.map((t) => typeToConstructor(registry, t)), []]
|
|
47
|
+
: isFunction(Types) || isString(Types)
|
|
48
|
+
? [[typeToConstructor(registry, Types)], []]
|
|
49
|
+
: mapToTypeMap(registry, Types));
|
|
50
|
+
super(registry, Classes[0].length);
|
|
51
|
+
this.initialU8aLength = (isU8a(value)
|
|
52
|
+
? decodeU8a(registry, this, value, Classes)
|
|
53
|
+
: decodeTuple(registry, this, value, Classes))[1];
|
|
54
|
+
this.#Types = Classes;
|
|
55
|
+
}
|
|
56
|
+
static with(Types) {
|
|
57
|
+
let definition;
|
|
58
|
+
// eslint-disable-next-line no-return-assign
|
|
59
|
+
const setDefinition = (d) => definition = d;
|
|
60
|
+
return class extends Tuple {
|
|
61
|
+
constructor(registry, value) {
|
|
62
|
+
super(registry, Types, value, { definition, setDefinition });
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @description The length of the value when encoded as a Uint8Array
|
|
68
|
+
*/
|
|
69
|
+
get encodedLength() {
|
|
70
|
+
let total = 0;
|
|
71
|
+
for (let i = 0; i < this.length; i++) {
|
|
72
|
+
total += this[i].encodedLength;
|
|
73
|
+
}
|
|
74
|
+
return total;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @description The types definition of the tuple
|
|
78
|
+
*/
|
|
79
|
+
get Types() {
|
|
80
|
+
return this.#Types[1].length
|
|
81
|
+
? this.#Types[1]
|
|
82
|
+
: this.#Types[0].map((T) => new T(this.registry).toRawType());
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @description Returns a breakdown of the hex encoding for this Codec
|
|
86
|
+
*/
|
|
87
|
+
inspect() {
|
|
88
|
+
return {
|
|
89
|
+
inner: this.inspectInner()
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* @description Returns the base runtime type name for this instance
|
|
94
|
+
*/
|
|
95
|
+
toRawType() {
|
|
96
|
+
const types = this.#Types[0].map((T) => this.registry.getClassName(T) || new T(this.registry).toRawType());
|
|
97
|
+
return `(${types.join(',')})`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @description Returns the string representation of the value
|
|
101
|
+
*/
|
|
102
|
+
toString() {
|
|
103
|
+
// Overwrite the default toString representation of Array.
|
|
104
|
+
return stringify(this.toJSON());
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* @description Encodes the value as a Uint8Array as per the SCALE specifications
|
|
108
|
+
* @param isBare true when the value has none of the type-specific prefixes (internal)
|
|
109
|
+
*/
|
|
110
|
+
toU8a(isBare) {
|
|
111
|
+
return u8aConcatStrict(this.toU8aInner(isBare));
|
|
75
112
|
}
|
|
76
|
-
return total;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* @description The types definition of the tuple
|
|
81
|
-
*/
|
|
82
|
-
get Types() {
|
|
83
|
-
return this.#Types[1].length ? this.#Types[1] : this.#Types[0].map(T => new T(this.registry).toRawType());
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* @description Returns a breakdown of the hex encoding for this Codec
|
|
88
|
-
*/
|
|
89
|
-
inspect() {
|
|
90
|
-
return {
|
|
91
|
-
inner: this.inspectInner()
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* @description Returns the base runtime type name for this instance
|
|
97
|
-
*/
|
|
98
|
-
toRawType() {
|
|
99
|
-
const types = this.#Types[0].map(T => this.registry.getClassName(T) || new T(this.registry).toRawType());
|
|
100
|
-
return `(${types.join(',')})`;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* @description Returns the string representation of the value
|
|
105
|
-
*/
|
|
106
|
-
toString() {
|
|
107
|
-
// Overwrite the default toString representation of Array.
|
|
108
|
-
return stringify(this.toJSON());
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* @description Encodes the value as a Uint8Array as per the SCALE specifications
|
|
113
|
-
* @param isBare true when the value has none of the type-specific prefixes (internal)
|
|
114
|
-
*/
|
|
115
|
-
toU8a(isBare) {
|
|
116
|
-
return u8aConcatStrict(this.toU8aInner(isBare));
|
|
117
|
-
}
|
|
118
113
|
}
|
package/base/UInt.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
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 UInt
|
|
8
4
|
* @description
|
|
@@ -14,14 +10,14 @@ import { AbstractInt } from "../abstract/Int.js";
|
|
|
14
10
|
* @noInheritDoc
|
|
15
11
|
*/
|
|
16
12
|
export class UInt extends AbstractInt {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
13
|
+
static with(bitLength, typeName) {
|
|
14
|
+
return class extends UInt {
|
|
15
|
+
constructor(registry, value) {
|
|
16
|
+
super(registry, value, bitLength);
|
|
17
|
+
}
|
|
18
|
+
toRawType() {
|
|
19
|
+
return typeName || super.toRawType();
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
27
23
|
}
|
package/base/Vec.js
CHANGED
|
@@ -1,52 +1,53 @@
|
|
|
1
|
-
// Copyright 2017-2023 @polkadot/types-codec authors & contributors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
1
|
import { compactFromU8aLim, isHex, isU8a, logger, stringify, u8aToU8a } from '@polkadot/util';
|
|
5
|
-
import { AbstractArray } from
|
|
6
|
-
import { decodeU8aVec, typeToConstructor } from
|
|
2
|
+
import { AbstractArray } from '../abstract/Array.js';
|
|
3
|
+
import { decodeU8aVec, typeToConstructor } from '../utils/index.js';
|
|
7
4
|
const MAX_LENGTH = 64 * 1024;
|
|
8
5
|
const l = logger('Vec');
|
|
9
6
|
function noopSetDefinition(d) {
|
|
10
|
-
|
|
7
|
+
return d;
|
|
11
8
|
}
|
|
12
9
|
function decodeVecLength(value) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
} else if (isU8a(value) || isHex(value)) {
|
|
16
|
-
const u8a = u8aToU8a(value);
|
|
17
|
-
const [startAt, length] = compactFromU8aLim(u8a);
|
|
18
|
-
if (length > MAX_LENGTH) {
|
|
19
|
-
throw new Error(`Vec length ${length.toString()} exceeds ${MAX_LENGTH}`);
|
|
10
|
+
if (Array.isArray(value)) {
|
|
11
|
+
return [value, value.length, 0];
|
|
20
12
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
13
|
+
else if (isU8a(value) || isHex(value)) {
|
|
14
|
+
const u8a = u8aToU8a(value);
|
|
15
|
+
const [startAt, length] = compactFromU8aLim(u8a);
|
|
16
|
+
if (length > MAX_LENGTH) {
|
|
17
|
+
throw new Error(`Vec length ${length.toString()} exceeds ${MAX_LENGTH}`);
|
|
18
|
+
}
|
|
19
|
+
return [u8a, length, startAt];
|
|
20
|
+
}
|
|
21
|
+
else if (!value) {
|
|
22
|
+
return [null, 0, 0];
|
|
23
|
+
}
|
|
24
|
+
throw new Error(`Expected array/hex input to Vec<*> decoding, found ${typeof value}: ${stringify(value)}`);
|
|
26
25
|
}
|
|
27
26
|
export function decodeVec(registry, result, value, startAt, Type) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
if (Array.isArray(value)) {
|
|
28
|
+
const count = result.length;
|
|
29
|
+
for (let i = 0; i < count; i++) {
|
|
30
|
+
// 26/08/2022 this is actually a false positive - after recent eslint upgdates
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
32
|
+
const entry = value[i];
|
|
33
|
+
try {
|
|
34
|
+
result[i] = entry instanceof Type
|
|
35
|
+
? entry
|
|
36
|
+
: new Type(registry, entry);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
l.error(`Unable to decode on index ${i}`, error.message);
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return [0, 0];
|
|
40
44
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// we don't need more checks, we already limited it via the length decoding
|
|
47
|
-
return decodeU8aVec(registry, result, u8aToU8a(value), startAt, Type);
|
|
45
|
+
else if (!value) {
|
|
46
|
+
return [0, 0];
|
|
47
|
+
}
|
|
48
|
+
// we don't need more checks, we already limited it via the length decoding
|
|
49
|
+
return decodeU8aVec(registry, result, u8aToU8a(value), startAt, Type);
|
|
48
50
|
}
|
|
49
|
-
|
|
50
51
|
/**
|
|
51
52
|
* @name Vec
|
|
52
53
|
* @description
|
|
@@ -55,56 +56,50 @@ export function decodeVec(registry, result, value, startAt, Type) {
|
|
|
55
56
|
* specific encoding/decoding on top of the base type.
|
|
56
57
|
*/
|
|
57
58
|
export class Vec extends AbstractArray {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
59
|
+
#Type;
|
|
60
|
+
constructor(registry, Type, value = [], { definition, setDefinition = noopSetDefinition } = {}) {
|
|
61
|
+
const [decodeFrom, length, startAt] = decodeVecLength(value);
|
|
62
|
+
super(registry, length);
|
|
63
|
+
this.#Type = definition || setDefinition(typeToConstructor(registry, Type));
|
|
64
|
+
this.initialU8aLength = (isU8a(decodeFrom)
|
|
65
|
+
? decodeU8aVec(registry, this, decodeFrom, startAt, this.#Type)
|
|
66
|
+
: decodeVec(registry, this, decodeFrom, startAt, this.#Type))[0];
|
|
67
|
+
}
|
|
68
|
+
static with(Type) {
|
|
69
|
+
let definition;
|
|
70
|
+
// eslint-disable-next-line no-return-assign
|
|
71
|
+
const setDefinition = (d) => (definition = d);
|
|
72
|
+
return class extends Vec {
|
|
73
|
+
constructor(registry, value) {
|
|
74
|
+
super(registry, Type, value, { definition, setDefinition });
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @description The type for the items
|
|
80
|
+
*/
|
|
81
|
+
get Type() {
|
|
82
|
+
return this.#Type.name;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @description Finds the index of the value in the array
|
|
86
|
+
*/
|
|
87
|
+
indexOf(_other) {
|
|
88
|
+
// convert type first, this removes overhead from the eq
|
|
89
|
+
const other = _other instanceof this.#Type
|
|
90
|
+
? _other
|
|
91
|
+
: new this.#Type(this.registry, _other);
|
|
92
|
+
for (let i = 0; i < this.length; i++) {
|
|
93
|
+
if (other.eq(this[i])) {
|
|
94
|
+
return i;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return -1;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @description Returns the base runtime type name for this instance
|
|
101
|
+
*/
|
|
102
|
+
toRawType() {
|
|
103
|
+
return `Vec<${this.registry.getClassName(this.#Type) || new this.#Type(this.registry).toRawType()}>`;
|
|
100
104
|
}
|
|
101
|
-
return -1;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* @description Returns the base runtime type name for this instance
|
|
106
|
-
*/
|
|
107
|
-
toRawType() {
|
|
108
|
-
return `Vec<${this.registry.getClassName(this.#Type) || new this.#Type(this.registry).toRawType()}>`;
|
|
109
|
-
}
|
|
110
105
|
}
|
package/base/VecAny.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
|
-
import { AbstractArray } from "../abstract/Array.js";
|
|
5
|
-
|
|
1
|
+
import { AbstractArray } from '../abstract/Array.js';
|
|
6
2
|
/**
|
|
7
3
|
* @name VecAny
|
|
8
4
|
* @description
|
|
@@ -11,11 +7,11 @@ import { AbstractArray } from "../abstract/Array.js";
|
|
|
11
7
|
* any types
|
|
12
8
|
*/
|
|
13
9
|
export class VecAny extends AbstractArray {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
10
|
+
/**
|
|
11
|
+
* @description Returns the base runtime type name for this instance
|
|
12
|
+
*/
|
|
13
|
+
toRawType() {
|
|
14
|
+
// FIXME This is basically an any type, cannot instantiate via createType
|
|
15
|
+
return 'Vec<Codec>';
|
|
16
|
+
}
|
|
21
17
|
}
|