@polkadot/types-codec 8.8.3-11 → 8.8.3-12
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/Int.js +17 -7
- package/base/Enum.js +18 -5
- package/base/Option.js +5 -2
- package/base/Result.js +8 -3
- package/base/Vec.js +6 -2
- package/cjs/abstract/Int.js +16 -6
- package/cjs/base/Enum.js +17 -4
- package/cjs/base/Option.js +4 -1
- package/cjs/base/Result.js +8 -4
- package/cjs/base/Vec.js +5 -1
- package/cjs/extended/BitVec.js +5 -1
- package/cjs/extended/Bytes.js +7 -2
- package/cjs/extended/U8aFixed.js +4 -1
- package/cjs/extended/WrapperKeepOpaque.js +5 -1
- package/cjs/native/Raw.js +4 -1
- package/cjs/native/Set.js +19 -4
- package/cjs/native/Struct.js +7 -2
- package/cjs/native/Text.js +7 -2
- package/cjs/packageInfo.js +1 -1
- package/extended/BitVec.js +6 -2
- package/extended/Bytes.js +8 -3
- package/extended/U8aFixed.js +5 -2
- package/extended/WrapperKeepOpaque.js +6 -2
- package/native/Raw.js +5 -2
- package/native/Set.js +19 -5
- package/native/Struct.js +8 -3
- package/native/Text.js +8 -3
- package/package.json +1 -1
- package/packageInfo.js +1 -1
package/abstract/Int.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { BN, BN_BILLION, BN_HUNDRED, BN_MILLION, BN_QUINTILL, bnToBn, bnToHex, bnToU8a, formatBalance, formatNumber, hexToBn, isBn, isHex, isNumber, isString, isU8a, u8aToBn, u8aToNumber } from '@polkadot/util';
|
|
4
4
|
export const DEFAULT_UINT_BITS = 64; // Maximum allowed integer for JS is 2^53 - 1, set limit at 52
|
|
5
5
|
// In this case however, we always print any >32 as hex
|
|
6
6
|
|
|
@@ -16,7 +16,10 @@ function toPercentage(value, divisor) {
|
|
|
16
16
|
|
|
17
17
|
function decodeAbstractInt(value, isNegative) {
|
|
18
18
|
if (isNumber(value)) {
|
|
19
|
-
|
|
19
|
+
if (!Number.isInteger(value) || value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER) {
|
|
20
|
+
throw new Error('Number needs to be an integer <= Number.MAX_SAFE_INTEGER, i.e. 2 ^ 53 - 1');
|
|
21
|
+
}
|
|
22
|
+
|
|
20
23
|
return value;
|
|
21
24
|
} else if (isString(value)) {
|
|
22
25
|
if (isHex(value, -1, true)) {
|
|
@@ -26,7 +29,10 @@ function decodeAbstractInt(value, isNegative) {
|
|
|
26
29
|
}).toString();
|
|
27
30
|
}
|
|
28
31
|
|
|
29
|
-
|
|
32
|
+
if (value.includes('.') || value.includes(',') || value.includes('e')) {
|
|
33
|
+
throw new Error('String should not contain decimal points or scientific notation');
|
|
34
|
+
}
|
|
35
|
+
|
|
30
36
|
return value;
|
|
31
37
|
} else if (isBn(value)) {
|
|
32
38
|
return value.toString();
|
|
@@ -59,10 +65,14 @@ export class AbstractInt extends BN {
|
|
|
59
65
|
this.#bitLength = bitLength;
|
|
60
66
|
this.encodedLength = this.#bitLength / 8;
|
|
61
67
|
this.isUnsigned = !isSigned;
|
|
62
|
-
const
|
|
63
|
-
const maxBits = bitLength - (isSigned &&
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
const isNegative = this.isNeg();
|
|
69
|
+
const maxBits = bitLength - (isSigned && !isNegative ? 1 : 0);
|
|
70
|
+
|
|
71
|
+
if (isNegative && !isSigned) {
|
|
72
|
+
throw new Error(`${this.toRawType()}: Negative number passed to unsigned type`);
|
|
73
|
+
} else if (super.bitLength() > maxBits) {
|
|
74
|
+
throw new Error(`${this.toRawType()}: Input too large. Found input with ${super.bitLength()} bits, expected ${maxBits}`);
|
|
75
|
+
}
|
|
66
76
|
}
|
|
67
77
|
/**
|
|
68
78
|
* @description returns a hash of the contents
|
package/base/Enum.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { isHex, isNumber, isObject, isString, isU8a, isUndefined, objectProperties, stringCamelCase, stringify, stringPascalCase, u8aConcatStrict, u8aToHex, u8aToU8a } from '@polkadot/util';
|
|
4
4
|
import { mapToTypeMap, typesToMap } from "../utils/index.js";
|
|
5
5
|
import { Null } from "./Null.js"; // export interface, this is used in Enum.with, so required as public by TS
|
|
6
6
|
|
|
@@ -12,7 +12,10 @@ function isRustEnum(def) {
|
|
|
12
12
|
const defValues = Object.values(def);
|
|
13
13
|
|
|
14
14
|
if (defValues.some(v => isNumber(v))) {
|
|
15
|
-
|
|
15
|
+
if (!defValues.every(v => isNumber(v) && v >= 0 && v <= 255)) {
|
|
16
|
+
throw new Error('Invalid number-indexed enum definition');
|
|
17
|
+
}
|
|
18
|
+
|
|
16
19
|
return false;
|
|
17
20
|
}
|
|
18
21
|
|
|
@@ -72,7 +75,11 @@ function extractDef(registry, _def) {
|
|
|
72
75
|
|
|
73
76
|
function createFromValue(registry, def, index = 0, value) {
|
|
74
77
|
const entry = Object.values(def).find(e => e.index === index);
|
|
75
|
-
|
|
78
|
+
|
|
79
|
+
if (isUndefined(entry)) {
|
|
80
|
+
throw new Error(`Unable to create Enum via index ${index}, in ${Object.keys(def).join(', ')}`);
|
|
81
|
+
}
|
|
82
|
+
|
|
76
83
|
return {
|
|
77
84
|
index,
|
|
78
85
|
value: value instanceof entry.Type ? value : new entry.Type(registry, value)
|
|
@@ -85,7 +92,10 @@ function decodeFromJSON(registry, def, key, value) {
|
|
|
85
92
|
const keys = Object.keys(def).map(k => k.toLowerCase());
|
|
86
93
|
const keyLower = key.toLowerCase();
|
|
87
94
|
const index = keys.indexOf(keyLower);
|
|
88
|
-
|
|
95
|
+
|
|
96
|
+
if (index === -1) {
|
|
97
|
+
throw new Error(`Cannot map Enum JSON, unable to find '${key}' in ${keys.join(', ')}`);
|
|
98
|
+
}
|
|
89
99
|
|
|
90
100
|
try {
|
|
91
101
|
return createFromValue(registry, def, Object.values(def)[index].index, value);
|
|
@@ -184,7 +194,10 @@ export class Enum {
|
|
|
184
194
|
});
|
|
185
195
|
objectProperties(this, isKeys, (_, i) => this.type === keys[i]);
|
|
186
196
|
objectProperties(this, asKeys, (k, i) => {
|
|
187
|
-
|
|
197
|
+
if (!this[isKeys[i]]) {
|
|
198
|
+
throw new Error(`Cannot convert '${this.type}' via ${k}`);
|
|
199
|
+
}
|
|
200
|
+
|
|
188
201
|
return this.value;
|
|
189
202
|
});
|
|
190
203
|
}
|
package/base/Option.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { isCodec, isNull, isU8a, isUndefined, u8aToHex } from '@polkadot/util';
|
|
4
4
|
import { typeToConstructor } from "../utils/index.js";
|
|
5
5
|
import { Null } from "./Null.js";
|
|
6
6
|
|
|
@@ -244,7 +244,10 @@ export class Option {
|
|
|
244
244
|
|
|
245
245
|
|
|
246
246
|
unwrap() {
|
|
247
|
-
|
|
247
|
+
if (this.isNone) {
|
|
248
|
+
throw new Error('Option: unwrapping a None value');
|
|
249
|
+
}
|
|
250
|
+
|
|
248
251
|
return this.#raw;
|
|
249
252
|
}
|
|
250
253
|
/**
|
package/base/Result.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { assert } from '@polkadot/util';
|
|
4
3
|
import { Enum } from "./Enum.js";
|
|
5
4
|
/**
|
|
6
5
|
* @name Result
|
|
@@ -32,7 +31,10 @@ export class Result extends Enum {
|
|
|
32
31
|
|
|
33
32
|
|
|
34
33
|
get asErr() {
|
|
35
|
-
|
|
34
|
+
if (!this.isErr) {
|
|
35
|
+
throw new Error('Cannot extract Err value from Ok result, check isErr first');
|
|
36
|
+
}
|
|
37
|
+
|
|
36
38
|
return this.value;
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
@@ -49,7 +51,10 @@ export class Result extends Enum {
|
|
|
49
51
|
|
|
50
52
|
|
|
51
53
|
get asOk() {
|
|
52
|
-
|
|
54
|
+
if (!this.isOk) {
|
|
55
|
+
throw new Error('Cannot extract Ok value from Err result, check isOk first');
|
|
56
|
+
}
|
|
57
|
+
|
|
53
58
|
return this.value;
|
|
54
59
|
}
|
|
55
60
|
/**
|
package/base/Vec.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { compactFromU8aLim, isU8a, logger, u8aToU8a } from '@polkadot/util';
|
|
4
4
|
import { AbstractArray } from "../abstract/Array.js";
|
|
5
5
|
import { decodeU8aVec, typeToConstructor } from "../utils/index.js";
|
|
6
6
|
const MAX_LENGTH = 64 * 1024;
|
|
@@ -17,7 +17,11 @@ function decodeVecLength(value) {
|
|
|
17
17
|
|
|
18
18
|
const u8a = u8aToU8a(value);
|
|
19
19
|
const [startAt, length] = compactFromU8aLim(u8a);
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
if (length > MAX_LENGTH) {
|
|
22
|
+
throw new Error(`Vec length ${length.toString()} exceeds ${MAX_LENGTH}`);
|
|
23
|
+
}
|
|
24
|
+
|
|
21
25
|
return [u8a, length, startAt];
|
|
22
26
|
}
|
|
23
27
|
|
package/cjs/abstract/Int.js
CHANGED
|
@@ -25,7 +25,10 @@ function toPercentage(value, divisor) {
|
|
|
25
25
|
|
|
26
26
|
function decodeAbstractInt(value, isNegative) {
|
|
27
27
|
if ((0, _util.isNumber)(value)) {
|
|
28
|
-
|
|
28
|
+
if (!Number.isInteger(value) || value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER) {
|
|
29
|
+
throw new Error('Number needs to be an integer <= Number.MAX_SAFE_INTEGER, i.e. 2 ^ 53 - 1');
|
|
30
|
+
}
|
|
31
|
+
|
|
29
32
|
return value;
|
|
30
33
|
} else if ((0, _util.isString)(value)) {
|
|
31
34
|
if ((0, _util.isHex)(value, -1, true)) {
|
|
@@ -35,7 +38,10 @@ function decodeAbstractInt(value, isNegative) {
|
|
|
35
38
|
}).toString();
|
|
36
39
|
}
|
|
37
40
|
|
|
38
|
-
|
|
41
|
+
if (value.includes('.') || value.includes(',') || value.includes('e')) {
|
|
42
|
+
throw new Error('String should not contain decimal points or scientific notation');
|
|
43
|
+
}
|
|
44
|
+
|
|
39
45
|
return value;
|
|
40
46
|
} else if ((0, _util.isBn)(value)) {
|
|
41
47
|
return value.toString();
|
|
@@ -71,10 +77,14 @@ class AbstractInt extends _util.BN {
|
|
|
71
77
|
this.#bitLength = bitLength;
|
|
72
78
|
this.encodedLength = this.#bitLength / 8;
|
|
73
79
|
this.isUnsigned = !isSigned;
|
|
74
|
-
const
|
|
75
|
-
const maxBits = bitLength - (isSigned &&
|
|
76
|
-
|
|
77
|
-
|
|
80
|
+
const isNegative = this.isNeg();
|
|
81
|
+
const maxBits = bitLength - (isSigned && !isNegative ? 1 : 0);
|
|
82
|
+
|
|
83
|
+
if (isNegative && !isSigned) {
|
|
84
|
+
throw new Error(`${this.toRawType()}: Negative number passed to unsigned type`);
|
|
85
|
+
} else if (super.bitLength() > maxBits) {
|
|
86
|
+
throw new Error(`${this.toRawType()}: Input too large. Found input with ${super.bitLength()} bits, expected ${maxBits}`);
|
|
87
|
+
}
|
|
78
88
|
}
|
|
79
89
|
/**
|
|
80
90
|
* @description returns a hash of the contents
|
package/cjs/base/Enum.js
CHANGED
|
@@ -21,7 +21,10 @@ function isRustEnum(def) {
|
|
|
21
21
|
const defValues = Object.values(def);
|
|
22
22
|
|
|
23
23
|
if (defValues.some(v => (0, _util.isNumber)(v))) {
|
|
24
|
-
|
|
24
|
+
if (!defValues.every(v => (0, _util.isNumber)(v) && v >= 0 && v <= 255)) {
|
|
25
|
+
throw new Error('Invalid number-indexed enum definition');
|
|
26
|
+
}
|
|
27
|
+
|
|
25
28
|
return false;
|
|
26
29
|
}
|
|
27
30
|
|
|
@@ -86,7 +89,11 @@ function createFromValue(registry, def) {
|
|
|
86
89
|
let index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
87
90
|
let value = arguments.length > 3 ? arguments[3] : undefined;
|
|
88
91
|
const entry = Object.values(def).find(e => e.index === index);
|
|
89
|
-
|
|
92
|
+
|
|
93
|
+
if ((0, _util.isUndefined)(entry)) {
|
|
94
|
+
throw new Error(`Unable to create Enum via index ${index}, in ${Object.keys(def).join(', ')}`);
|
|
95
|
+
}
|
|
96
|
+
|
|
90
97
|
return {
|
|
91
98
|
index,
|
|
92
99
|
value: value instanceof entry.Type ? value : new entry.Type(registry, value)
|
|
@@ -99,7 +106,10 @@ function decodeFromJSON(registry, def, key, value) {
|
|
|
99
106
|
const keys = Object.keys(def).map(k => k.toLowerCase());
|
|
100
107
|
const keyLower = key.toLowerCase();
|
|
101
108
|
const index = keys.indexOf(keyLower);
|
|
102
|
-
|
|
109
|
+
|
|
110
|
+
if (index === -1) {
|
|
111
|
+
throw new Error(`Cannot map Enum JSON, unable to find '${key}' in ${keys.join(', ')}`);
|
|
112
|
+
}
|
|
103
113
|
|
|
104
114
|
try {
|
|
105
115
|
return createFromValue(registry, def, Object.values(def)[index].index, value);
|
|
@@ -202,7 +212,10 @@ class Enum {
|
|
|
202
212
|
});
|
|
203
213
|
(0, _util.objectProperties)(this, isKeys, (_, i) => this.type === keys[i]);
|
|
204
214
|
(0, _util.objectProperties)(this, asKeys, (k, i) => {
|
|
205
|
-
|
|
215
|
+
if (!this[isKeys[i]]) {
|
|
216
|
+
throw new Error(`Cannot convert '${this.type}' via ${k}`);
|
|
217
|
+
}
|
|
218
|
+
|
|
206
219
|
return this.value;
|
|
207
220
|
});
|
|
208
221
|
}
|
package/cjs/base/Option.js
CHANGED
package/cjs/base/Result.js
CHANGED
|
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.Result = void 0;
|
|
7
7
|
|
|
8
|
-
var _util = require("@polkadot/util");
|
|
9
|
-
|
|
10
8
|
var _Enum = require("./Enum");
|
|
11
9
|
|
|
12
10
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
@@ -41,7 +39,10 @@ class Result extends _Enum.Enum {
|
|
|
41
39
|
|
|
42
40
|
|
|
43
41
|
get asErr() {
|
|
44
|
-
|
|
42
|
+
if (!this.isErr) {
|
|
43
|
+
throw new Error('Cannot extract Err value from Ok result, check isErr first');
|
|
44
|
+
}
|
|
45
|
+
|
|
45
46
|
return this.value;
|
|
46
47
|
}
|
|
47
48
|
/**
|
|
@@ -58,7 +59,10 @@ class Result extends _Enum.Enum {
|
|
|
58
59
|
|
|
59
60
|
|
|
60
61
|
get asOk() {
|
|
61
|
-
|
|
62
|
+
if (!this.isOk) {
|
|
63
|
+
throw new Error('Cannot extract Ok value from Err result, check isOk first');
|
|
64
|
+
}
|
|
65
|
+
|
|
62
66
|
return this.value;
|
|
63
67
|
}
|
|
64
68
|
/**
|
package/cjs/base/Vec.js
CHANGED
|
@@ -28,7 +28,11 @@ function decodeVecLength(value) {
|
|
|
28
28
|
|
|
29
29
|
const u8a = (0, _util.u8aToU8a)(value);
|
|
30
30
|
const [startAt, length] = (0, _util.compactFromU8aLim)(u8a);
|
|
31
|
-
|
|
31
|
+
|
|
32
|
+
if (length > MAX_LENGTH) {
|
|
33
|
+
throw new Error(`Vec length ${length.toString()} exceeds ${MAX_LENGTH}`);
|
|
34
|
+
}
|
|
35
|
+
|
|
32
36
|
return [u8a, length, startAt];
|
|
33
37
|
}
|
|
34
38
|
|
package/cjs/extended/BitVec.js
CHANGED
|
@@ -21,7 +21,11 @@ function decodeBitVecU8a(value) {
|
|
|
21
21
|
|
|
22
22
|
const [offset, length] = (0, _util.compactFromU8aLim)(value);
|
|
23
23
|
const total = offset + Math.ceil(length / 8);
|
|
24
|
-
|
|
24
|
+
|
|
25
|
+
if (total > value.length) {
|
|
26
|
+
throw new Error(`BitVec: required length less than remainder, expected at least ${total}, found ${value.length}`);
|
|
27
|
+
}
|
|
28
|
+
|
|
25
29
|
return [length, value.subarray(offset, total)];
|
|
26
30
|
}
|
|
27
31
|
/** @internal */
|
package/cjs/extended/Bytes.js
CHANGED
|
@@ -23,8 +23,13 @@ function decodeBytesU8a(value) {
|
|
|
23
23
|
|
|
24
24
|
const [offset, length] = (0, _util.compactFromU8aLim)(value);
|
|
25
25
|
const total = offset + length;
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
|
|
27
|
+
if (length > MAX_LENGTH) {
|
|
28
|
+
throw new Error(`Bytes length ${length.toString()} exceeds ${MAX_LENGTH}`);
|
|
29
|
+
} else if (total > value.length) {
|
|
30
|
+
throw new Error(`Bytes: required length less than remainder, expected at least ${total}, found ${value.length}`);
|
|
31
|
+
}
|
|
32
|
+
|
|
28
33
|
return [value.subarray(offset, total), total];
|
|
29
34
|
}
|
|
30
35
|
/**
|
package/cjs/extended/U8aFixed.js
CHANGED
|
@@ -21,7 +21,10 @@ function decodeU8aFixed(value, bitLength) {
|
|
|
21
21
|
return [new Uint8Array(byteLength), 0];
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
if ((0, _util.isU8a)(value) ? u8a.length < byteLength : u8a.length !== byteLength) {
|
|
25
|
+
throw new Error(`Expected input with ${byteLength} bytes (${bitLength} bits), found ${u8a.length} bytes`);
|
|
26
|
+
}
|
|
27
|
+
|
|
25
28
|
return [u8a.subarray(0, byteLength), byteLength];
|
|
26
29
|
}
|
|
27
30
|
/**
|
|
@@ -106,7 +106,11 @@ class WrapperKeepOpaque extends _Bytes.Bytes {
|
|
|
106
106
|
|
|
107
107
|
|
|
108
108
|
unwrap() {
|
|
109
|
-
|
|
109
|
+
if (!this.#decoded) {
|
|
110
|
+
throw new Error(`${this.#opaqueName}: unwrapping an undecodable value`);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return this.#decoded;
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
}
|
package/cjs/native/Raw.js
CHANGED
|
@@ -190,7 +190,10 @@ class Raw extends Uint8Array {
|
|
|
190
190
|
|
|
191
191
|
|
|
192
192
|
toUtf8() {
|
|
193
|
-
|
|
193
|
+
if (!this.isUtf8) {
|
|
194
|
+
throw new Error('The character sequence is not a valid Utf8 string');
|
|
195
|
+
}
|
|
196
|
+
|
|
194
197
|
return (0, _util.u8aToString)(this);
|
|
195
198
|
}
|
|
196
199
|
|
package/cjs/native/Set.js
CHANGED
|
@@ -28,7 +28,11 @@ function decodeSetArray(setValues, values) {
|
|
|
28
28
|
|
|
29
29
|
for (let i = 0; i < values.length; i++) {
|
|
30
30
|
const key = values[i];
|
|
31
|
-
|
|
31
|
+
|
|
32
|
+
if ((0, _util.isUndefined)(setValues[key])) {
|
|
33
|
+
throw new Error(`Set: Invalid key '${key}' passed to Set, allowed ${Object.keys(setValues).join(', ')}`);
|
|
34
|
+
}
|
|
35
|
+
|
|
32
36
|
result[i] = key;
|
|
33
37
|
}
|
|
34
38
|
|
|
@@ -51,7 +55,11 @@ function decodeSetNumber(setValues, _value) {
|
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
const computed = encodeSet(setValues, result);
|
|
54
|
-
|
|
58
|
+
|
|
59
|
+
if (!bn.eq(computed)) {
|
|
60
|
+
throw new Error(`Set: Mismatch decoding '${bn.toString()}', computed as '${computed.toString()}' with ${result.join(', ')}`);
|
|
61
|
+
}
|
|
62
|
+
|
|
55
63
|
return result;
|
|
56
64
|
}
|
|
57
65
|
/** @internal */
|
|
@@ -60,7 +68,11 @@ function decodeSetNumber(setValues, _value) {
|
|
|
60
68
|
function decodeSet(setValues) {
|
|
61
69
|
let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
62
70
|
let bitLength = arguments.length > 2 ? arguments[2] : undefined;
|
|
63
|
-
|
|
71
|
+
|
|
72
|
+
if (bitLength % 8 !== 0) {
|
|
73
|
+
throw new Error(`Expected valid bitLength, power of 8, found ${bitLength}`);
|
|
74
|
+
}
|
|
75
|
+
|
|
64
76
|
const byteLength = bitLength / 8;
|
|
65
77
|
|
|
66
78
|
if ((0, _util.isU8a)(value)) {
|
|
@@ -161,7 +173,10 @@ class CodecSet extends Set {
|
|
|
161
173
|
// ^^^ add = () property done to assign this instance's this, otherwise Set.add creates "some" chaos
|
|
162
174
|
// we have the isUndefined(this._setValues) in here as well, add is used internally
|
|
163
175
|
// in the Set constructor (so it is undefined at this point, and should allow)
|
|
164
|
-
|
|
176
|
+
if (this.#allowed && (0, _util.isUndefined)(this.#allowed[key])) {
|
|
177
|
+
throw new Error(`Set: Invalid key '${key}' on add`);
|
|
178
|
+
}
|
|
179
|
+
|
|
165
180
|
super.add(key);
|
|
166
181
|
return this;
|
|
167
182
|
};
|
package/cjs/native/Struct.js
CHANGED
|
@@ -22,8 +22,13 @@ function decodeStructFromObject(registry, _ref, value, jsonMap) {
|
|
|
22
22
|
let jsonObj;
|
|
23
23
|
const typeofArray = Array.isArray(value);
|
|
24
24
|
const typeofMap = value instanceof Map;
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
|
|
26
|
+
if (!typeofArray && !typeofMap && !(0, _util.isObject)(value)) {
|
|
27
|
+
throw new Error(`Struct: Cannot decode value ${(0, _util.stringify)(value)} (typeof ${typeof value}), expected an input object, map or array`);
|
|
28
|
+
} else if (typeofArray && value.length !== keys.length) {
|
|
29
|
+
throw new Error(`Struct: Unable to map ${(0, _util.stringify)(value)} array to object with known keys ${keys.join(', ')}`);
|
|
30
|
+
}
|
|
31
|
+
|
|
27
32
|
const raw = new Array(keys.length);
|
|
28
33
|
|
|
29
34
|
for (let i = 0; i < keys.length; i++) {
|
package/cjs/native/Text.js
CHANGED
|
@@ -28,8 +28,13 @@ function decodeText(value) {
|
|
|
28
28
|
|
|
29
29
|
const [offset, length] = (0, _util.compactFromU8aLim)(value);
|
|
30
30
|
const total = offset + length;
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
|
|
32
|
+
if (length > MAX_LENGTH) {
|
|
33
|
+
throw new Error(`Text: length ${length.toString()} exceeds ${MAX_LENGTH}`);
|
|
34
|
+
} else if (total > value.length) {
|
|
35
|
+
throw new Error(`Text: required length less than remainder, expected at least ${total}, found ${value.length}`);
|
|
36
|
+
}
|
|
37
|
+
|
|
33
38
|
return [(0, _util.u8aToString)(value.subarray(offset, total)), total];
|
|
34
39
|
} else if ((0, _util.isHex)(value)) {
|
|
35
40
|
return [(0, _util.u8aToString)((0, _util.hexToU8a)(value)), 0];
|
package/cjs/packageInfo.js
CHANGED
package/extended/BitVec.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { compactFromU8aLim, compactToU8a, isString, u8aConcatStrict, u8aToU8a } from '@polkadot/util';
|
|
4
4
|
import { Raw } from "../native/Raw.js";
|
|
5
5
|
/** @internal */
|
|
6
6
|
|
|
@@ -12,7 +12,11 @@ function decodeBitVecU8a(value) {
|
|
|
12
12
|
|
|
13
13
|
const [offset, length] = compactFromU8aLim(value);
|
|
14
14
|
const total = offset + Math.ceil(length / 8);
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
if (total > value.length) {
|
|
17
|
+
throw new Error(`BitVec: required length less than remainder, expected at least ${total}, found ${value.length}`);
|
|
18
|
+
}
|
|
19
|
+
|
|
16
20
|
return [length, value.subarray(offset, total)];
|
|
17
21
|
}
|
|
18
22
|
/** @internal */
|
package/extended/Bytes.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { compactAddLength, compactFromU8aLim, compactToU8a, isString, isU8a, u8aToU8a } from '@polkadot/util';
|
|
4
4
|
import { Raw } from "../native/Raw.js"; // Bytes are used for things like on-chain code, so it has a healthy limit
|
|
5
5
|
|
|
6
6
|
const MAX_LENGTH = 10 * 1024 * 1024;
|
|
@@ -14,8 +14,13 @@ function decodeBytesU8a(value) {
|
|
|
14
14
|
|
|
15
15
|
const [offset, length] = compactFromU8aLim(value);
|
|
16
16
|
const total = offset + length;
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
if (length > MAX_LENGTH) {
|
|
19
|
+
throw new Error(`Bytes length ${length.toString()} exceeds ${MAX_LENGTH}`);
|
|
20
|
+
} else if (total > value.length) {
|
|
21
|
+
throw new Error(`Bytes: required length less than remainder, expected at least ${total}, found ${value.length}`);
|
|
22
|
+
}
|
|
23
|
+
|
|
19
24
|
return [value.subarray(offset, total), total];
|
|
20
25
|
}
|
|
21
26
|
/**
|
package/extended/U8aFixed.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { isU8a, u8aToU8a } from '@polkadot/util';
|
|
4
4
|
import { Raw } from "../native/Raw.js";
|
|
5
5
|
/** @internal */
|
|
6
6
|
|
|
@@ -12,7 +12,10 @@ function decodeU8aFixed(value, bitLength) {
|
|
|
12
12
|
return [new Uint8Array(byteLength), 0];
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
if (isU8a(value) ? u8a.length < byteLength : u8a.length !== byteLength) {
|
|
16
|
+
throw new Error(`Expected input with ${byteLength} bytes (${bitLength} bits), found ${u8a.length} bytes`);
|
|
17
|
+
}
|
|
18
|
+
|
|
16
19
|
return [u8a.subarray(0, byteLength), byteLength];
|
|
17
20
|
}
|
|
18
21
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { compactAddLength, compactStripLength, compactToU8a, isHex, isU8a } from '@polkadot/util';
|
|
4
4
|
import { Raw } from "../native/Raw.js";
|
|
5
5
|
import { typeToConstructor } from "../utils/index.js";
|
|
6
6
|
import { Bytes } from "./Bytes.js";
|
|
@@ -95,7 +95,11 @@ export class WrapperKeepOpaque extends Bytes {
|
|
|
95
95
|
|
|
96
96
|
|
|
97
97
|
unwrap() {
|
|
98
|
-
|
|
98
|
+
if (!this.#decoded) {
|
|
99
|
+
throw new Error(`${this.#opaqueName}: unwrapping an undecodable value`);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return this.#decoded;
|
|
99
103
|
}
|
|
100
104
|
|
|
101
105
|
}
|
package/native/Raw.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { isAscii, isUndefined, isUtf8, u8aToHex, u8aToString, u8aToU8a } from '@polkadot/util';
|
|
4
4
|
/**
|
|
5
5
|
* @name Raw
|
|
6
6
|
* @description
|
|
@@ -182,7 +182,10 @@ export class Raw extends Uint8Array {
|
|
|
182
182
|
|
|
183
183
|
|
|
184
184
|
toUtf8() {
|
|
185
|
-
|
|
185
|
+
if (!this.isUtf8) {
|
|
186
|
+
throw new Error('The character sequence is not a valid Utf8 string');
|
|
187
|
+
}
|
|
188
|
+
|
|
186
189
|
return u8aToString(this);
|
|
187
190
|
}
|
|
188
191
|
|
package/native/Set.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { BN, bnToBn, bnToU8a, isBn, isNumber, isString, isU8a, isUndefined, objectProperties, stringify, stringPascalCase, u8aToBn, u8aToHex, u8aToU8a } from '@polkadot/util';
|
|
4
4
|
import { compareArray } from "../utils/index.js";
|
|
5
5
|
|
|
6
6
|
function encodeSet(setValues, values) {
|
|
@@ -20,7 +20,11 @@ function decodeSetArray(setValues, values) {
|
|
|
20
20
|
|
|
21
21
|
for (let i = 0; i < values.length; i++) {
|
|
22
22
|
const key = values[i];
|
|
23
|
-
|
|
23
|
+
|
|
24
|
+
if (isUndefined(setValues[key])) {
|
|
25
|
+
throw new Error(`Set: Invalid key '${key}' passed to Set, allowed ${Object.keys(setValues).join(', ')}`);
|
|
26
|
+
}
|
|
27
|
+
|
|
24
28
|
result[i] = key;
|
|
25
29
|
}
|
|
26
30
|
|
|
@@ -43,14 +47,21 @@ function decodeSetNumber(setValues, _value) {
|
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
const computed = encodeSet(setValues, result);
|
|
46
|
-
|
|
50
|
+
|
|
51
|
+
if (!bn.eq(computed)) {
|
|
52
|
+
throw new Error(`Set: Mismatch decoding '${bn.toString()}', computed as '${computed.toString()}' with ${result.join(', ')}`);
|
|
53
|
+
}
|
|
54
|
+
|
|
47
55
|
return result;
|
|
48
56
|
}
|
|
49
57
|
/** @internal */
|
|
50
58
|
|
|
51
59
|
|
|
52
60
|
function decodeSet(setValues, value = 0, bitLength) {
|
|
53
|
-
|
|
61
|
+
if (bitLength % 8 !== 0) {
|
|
62
|
+
throw new Error(`Expected valid bitLength, power of 8, found ${bitLength}`);
|
|
63
|
+
}
|
|
64
|
+
|
|
54
65
|
const byteLength = bitLength / 8;
|
|
55
66
|
|
|
56
67
|
if (isU8a(value)) {
|
|
@@ -150,7 +161,10 @@ export class CodecSet extends Set {
|
|
|
150
161
|
// ^^^ add = () property done to assign this instance's this, otherwise Set.add creates "some" chaos
|
|
151
162
|
// we have the isUndefined(this._setValues) in here as well, add is used internally
|
|
152
163
|
// in the Set constructor (so it is undefined at this point, and should allow)
|
|
153
|
-
|
|
164
|
+
if (this.#allowed && isUndefined(this.#allowed[key])) {
|
|
165
|
+
throw new Error(`Set: Invalid key '${key}' on add`);
|
|
166
|
+
}
|
|
167
|
+
|
|
154
168
|
super.add(key);
|
|
155
169
|
return this;
|
|
156
170
|
};
|
package/native/Struct.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { isBoolean, isFunction, isHex, isObject, isU8a, isUndefined, objectProperties, stringCamelCase, stringify, u8aConcatStrict, u8aToHex, u8aToU8a } from '@polkadot/util';
|
|
4
4
|
import { compareMap, decodeU8aStruct, mapToTypeMap, typesToMap } from "../utils/index.js";
|
|
5
5
|
|
|
6
6
|
function noopSetDefinition(d) {
|
|
@@ -13,8 +13,13 @@ function decodeStructFromObject(registry, [Types, keys], value, jsonMap) {
|
|
|
13
13
|
let jsonObj;
|
|
14
14
|
const typeofArray = Array.isArray(value);
|
|
15
15
|
const typeofMap = value instanceof Map;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
|
|
17
|
+
if (!typeofArray && !typeofMap && !isObject(value)) {
|
|
18
|
+
throw new Error(`Struct: Cannot decode value ${stringify(value)} (typeof ${typeof value}), expected an input object, map or array`);
|
|
19
|
+
} else if (typeofArray && value.length !== keys.length) {
|
|
20
|
+
throw new Error(`Struct: Unable to map ${stringify(value)} array to object with known keys ${keys.join(', ')}`);
|
|
21
|
+
}
|
|
22
|
+
|
|
18
23
|
const raw = new Array(keys.length);
|
|
19
24
|
|
|
20
25
|
for (let i = 0; i < keys.length; i++) {
|
package/native/Text.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2017-2022 @polkadot/types-codec authors & contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import {
|
|
3
|
+
import { compactAddLength, compactFromU8aLim, compactToU8a, hexToU8a, isHex, isString, isU8a, stringToU8a, u8aToHex, u8aToString } from '@polkadot/util';
|
|
4
4
|
import { Raw } from "./Raw.js";
|
|
5
5
|
const MAX_LENGTH = 128 * 1024;
|
|
6
6
|
/** @internal */
|
|
@@ -19,8 +19,13 @@ function decodeText(value) {
|
|
|
19
19
|
|
|
20
20
|
const [offset, length] = compactFromU8aLim(value);
|
|
21
21
|
const total = offset + length;
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
|
|
23
|
+
if (length > MAX_LENGTH) {
|
|
24
|
+
throw new Error(`Text: length ${length.toString()} exceeds ${MAX_LENGTH}`);
|
|
25
|
+
} else if (total > value.length) {
|
|
26
|
+
throw new Error(`Text: required length less than remainder, expected at least ${total}, found ${value.length}`);
|
|
27
|
+
}
|
|
28
|
+
|
|
24
29
|
return [u8aToString(value.subarray(offset, total)), total];
|
|
25
30
|
} else if (isHex(value)) {
|
|
26
31
|
return [u8aToString(hexToU8a(value)), 0];
|
package/package.json
CHANGED
package/packageInfo.js
CHANGED
|
@@ -5,5 +5,5 @@ export const packageInfo = {
|
|
|
5
5
|
name: '@polkadot/types-codec',
|
|
6
6
|
path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
|
|
7
7
|
type: 'esm',
|
|
8
|
-
version: '8.8.3-
|
|
8
|
+
version: '8.8.3-12'
|
|
9
9
|
};
|