@polkadot/types-codec 8.8.3-1 → 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.
Files changed (84) hide show
  1. package/abstract/{AbstractArray.d.ts → Array.d.ts} +0 -0
  2. package/abstract/{AbstractArray.js → Array.js} +0 -0
  3. package/{base → abstract}/Base.d.ts +2 -2
  4. package/{base → abstract}/Base.js +2 -7
  5. package/abstract/{AbstractInt.d.ts → Int.d.ts} +1 -4
  6. package/abstract/{AbstractInt.js → Int.js} +23 -20
  7. package/abstract/index.d.ts +3 -2
  8. package/abstract/index.js +3 -2
  9. package/base/Compact.d.ts +0 -2
  10. package/base/Compact.js +15 -16
  11. package/base/Enum.js +23 -10
  12. package/base/Int.d.ts +1 -1
  13. package/base/Int.js +1 -1
  14. package/base/Null.d.ts +2 -8
  15. package/base/Null.js +2 -16
  16. package/base/Option.d.ts +1 -4
  17. package/base/Option.js +6 -12
  18. package/base/Result.js +8 -3
  19. package/base/Tuple.d.ts +1 -1
  20. package/base/Tuple.js +3 -4
  21. package/base/UInt.d.ts +1 -1
  22. package/base/UInt.js +1 -1
  23. package/base/Vec.d.ts +1 -1
  24. package/base/Vec.js +8 -5
  25. package/base/VecAny.d.ts +1 -1
  26. package/base/VecAny.js +1 -1
  27. package/base/VecFixed.d.ts +1 -1
  28. package/base/VecFixed.js +2 -3
  29. package/base/index.d.ts +0 -1
  30. package/base/index.js +0 -1
  31. package/cjs/abstract/{AbstractArray.js → Array.js} +0 -0
  32. package/cjs/{base → abstract}/Base.js +4 -9
  33. package/cjs/abstract/{AbstractInt.js → Int.js} +22 -19
  34. package/cjs/abstract/index.js +12 -4
  35. package/cjs/base/Compact.js +15 -16
  36. package/cjs/base/Enum.js +22 -9
  37. package/cjs/base/Int.js +2 -2
  38. package/cjs/base/Null.js +2 -16
  39. package/cjs/base/Option.js +5 -11
  40. package/cjs/base/Result.js +8 -4
  41. package/cjs/base/Tuple.js +4 -5
  42. package/cjs/base/UInt.js +2 -2
  43. package/cjs/base/Vec.js +8 -5
  44. package/cjs/base/VecAny.js +2 -2
  45. package/cjs/base/VecFixed.js +3 -4
  46. package/cjs/base/index.js +0 -8
  47. package/cjs/extended/BitVec.js +5 -1
  48. package/cjs/extended/Bytes.js +8 -3
  49. package/cjs/extended/Map.js +2 -2
  50. package/cjs/extended/OptionBool.js +1 -8
  51. package/cjs/extended/U8aFixed.js +4 -1
  52. package/cjs/extended/WrapperKeepOpaque.js +5 -1
  53. package/cjs/native/Raw.js +4 -1
  54. package/cjs/native/Set.js +19 -4
  55. package/cjs/native/Struct.js +9 -9
  56. package/cjs/native/Text.js +8 -12
  57. package/cjs/packageInfo.js +1 -1
  58. package/cjs/utils/decodeU8a.js +63 -20
  59. package/cjs/utils/index.js +6 -0
  60. package/cjs/utils/mapToTypeMap.js +1 -1
  61. package/cjs/utils/sanitize.js +17 -37
  62. package/extended/BitVec.js +6 -2
  63. package/extended/Bytes.js +9 -4
  64. package/extended/Map.js +1 -1
  65. package/extended/OptionBool.d.ts +0 -4
  66. package/extended/OptionBool.js +1 -8
  67. package/extended/U8aFixed.js +5 -2
  68. package/extended/WrapperKeepOpaque.js +6 -2
  69. package/native/Raw.d.ts +1 -1
  70. package/native/Raw.js +5 -2
  71. package/native/Set.js +19 -5
  72. package/native/Struct.d.ts +1 -1
  73. package/native/Struct.js +11 -11
  74. package/native/Text.d.ts +2 -5
  75. package/native/Text.js +9 -13
  76. package/package.json +15 -15
  77. package/packageInfo.js +1 -1
  78. package/utils/decodeU8a.d.ts +16 -1
  79. package/utils/decodeU8a.js +57 -19
  80. package/utils/index.d.ts +1 -1
  81. package/utils/index.js +1 -1
  82. package/utils/mapToTypeMap.js +1 -1
  83. package/utils/sanitize.d.ts +3 -5
  84. package/utils/sanitize.js +17 -37
package/native/Raw.d.ts CHANGED
@@ -10,9 +10,9 @@ import type { AnyJson, AnyU8a, Inspect, IU8a, Registry } from '../types';
10
10
  * @noInheritDoc
11
11
  */
12
12
  export declare class Raw extends Uint8Array implements IU8a {
13
- readonly registry: Registry;
14
13
  createdAtHash?: IU8a;
15
14
  readonly initialU8aLength?: number;
15
+ readonly registry: Registry;
16
16
  constructor(registry: Registry, value?: AnyU8a, initialU8aLength?: number);
17
17
  /**
18
18
  * @description The length of the value when encoded as a Uint8Array
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 { assert, isAscii, isUndefined, isUtf8, u8aToHex, u8aToString, u8aToU8a } from '@polkadot/util';
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
- assert(this.isUtf8, 'The character sequence is not a valid Utf8 string');
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 { assert, BN, bnToBn, bnToU8a, isBn, isNumber, isString, isU8a, isUndefined, objectProperties, stringify, stringPascalCase, u8aToBn, u8aToHex, u8aToU8a } from '@polkadot/util';
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
- assert(!isUndefined(setValues[key]), () => `Set: Invalid key '${key}' passed to Set, allowed ${Object.keys(setValues).join(', ')}`);
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
- assert(bn.eq(computed), () => `Set: Mismatch decoding '${bn.toString()}', computed as '${computed.toString()}' with ${result.join(', ')}`);
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
- assert(bitLength % 8 === 0, () => `Expected valid bitLength, power of 8, found ${bitLength}`);
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
- assert(isUndefined(this.#allowed) || !isUndefined(this.#allowed[key]), () => `Set: Invalid key '${key}' on add`);
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
  };
@@ -28,6 +28,7 @@ export declare class Struct<S extends TypesDef = TypesDef, V extends {
28
28
  #private;
29
29
  createdAtHash?: IU8a;
30
30
  readonly initialU8aLength?: number;
31
+ readonly registry: Registry;
31
32
  constructor(registry: Registry, Types: S, value?: V | Map<unknown, unknown> | unknown[] | HexString | null, jsonMap?: Map<string, string>, { definition, setDefinition }?: Options);
32
33
  static with<S extends TypesDef>(Types: S, jsonMap?: Map<string, string>): CodecClass<Struct<S>>;
33
34
  /**
@@ -51,7 +52,6 @@ export declare class Struct<S extends TypesDef = TypesDef, V extends {
51
52
  * @description returns a hash of the contents
52
53
  */
53
54
  get hash(): IU8a;
54
- get registry(): Registry;
55
55
  /**
56
56
  * @description Compares the value of the input to see if there is a match
57
57
  */
package/native/Struct.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // Copyright 2017-2022 @polkadot/types-codec authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { assert, isBoolean, isFunction, isHex, isObject, isU8a, isUndefined, objectProperties, stringCamelCase, stringify, u8aConcatStrict, u8aToHex, u8aToU8a } from '@polkadot/util';
4
- import { compareMap, decodeU8a, mapToTypeMap, typesToMap } from "../utils/index.js";
3
+ import { isBoolean, isFunction, isHex, isObject, isU8a, isUndefined, objectProperties, stringCamelCase, stringify, u8aConcatStrict, u8aToHex, u8aToU8a } from '@polkadot/util';
4
+ import { compareMap, decodeU8aStruct, mapToTypeMap, typesToMap } from "../utils/index.js";
5
5
 
6
6
  function noopSetDefinition(d) {
7
7
  return 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
- assert(typeofArray || typeofMap || isObject(value), () => `Struct: Cannot decode value ${stringify(value)} (typeof ${typeof value}), expected an input object, map or array`);
17
- assert(!typeofArray || value.length === keys.length, () => `Struct: Unable to map ${stringify(value)} array to object with known keys ${keys.join(', ')}`);
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++) {
@@ -73,7 +78,6 @@ function decodeStructFromObject(registry, [Types, keys], value, jsonMap) {
73
78
 
74
79
 
75
80
  export class Struct extends Map {
76
- #registry;
77
81
  #jsonMap;
78
82
  #Types;
79
83
 
@@ -82,10 +86,10 @@ export class Struct extends Map {
82
86
  setDefinition = noopSetDefinition
83
87
  } = {}) {
84
88
  const typeMap = definition || setDefinition(mapToTypeMap(registry, Types));
85
- const [decoded, decodedLength] = isU8a(value) || isHex(value) ? decodeU8a(registry, new Array(typeMap[0].length), u8aToU8a(value), typeMap, true) : value instanceof Struct ? [value, 0] : decodeStructFromObject(registry, typeMap, value || {}, jsonMap);
89
+ const [decoded, decodedLength] = isU8a(value) || isHex(value) ? decodeU8aStruct(registry, new Array(typeMap[0].length), u8aToU8a(value), typeMap) : value instanceof Struct ? [value, 0] : decodeStructFromObject(registry, typeMap, value || {}, jsonMap);
86
90
  super(decoded);
87
- this.#registry = registry;
88
91
  this.initialU8aLength = decodedLength;
92
+ this.registry = registry;
89
93
  this.#jsonMap = jsonMap;
90
94
  this.#Types = typeMap;
91
95
  }
@@ -170,10 +174,6 @@ export class Struct extends Map {
170
174
  get hash() {
171
175
  return this.registry.hash(this.toU8a());
172
176
  }
173
-
174
- get registry() {
175
- return this.#registry;
176
- }
177
177
  /**
178
178
  * @description Compares the value of the input to see if there is a match
179
179
  */
package/native/Text.d.ts CHANGED
@@ -10,8 +10,9 @@ import type { AnyString, AnyU8a, Inspect, IText, IU8a, Registry } from '../types
10
10
  */
11
11
  export declare class Text extends String implements IText {
12
12
  #private;
13
- readonly registry: Registry;
14
13
  createdAtHash?: IU8a;
14
+ readonly initialU8aLength?: number;
15
+ readonly registry: Registry;
15
16
  constructor(registry: Registry, value?: null | AnyString | AnyU8a | {
16
17
  toString: () => string;
17
18
  });
@@ -19,10 +20,6 @@ export declare class Text extends String implements IText {
19
20
  * @description The length of the value when encoded as a Uint8Array
20
21
  */
21
22
  get encodedLength(): number;
22
- /**
23
- * @description The length of the initial encoded value (Only available when constructed from a Uint8Array)
24
- */
25
- get initialU8aLength(): number | undefined;
26
23
  /**
27
24
  * @description returns a hash of the contents
28
25
  */
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 { assert, compactAddLength, compactFromU8aLim, compactToU8a, hexToU8a, isHex, isString, isU8a, stringToU8a, u8aToHex, u8aToString } from '@polkadot/util';
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
- assert(length <= MAX_LENGTH, () => `Text: length ${length.toString()} exceeds ${MAX_LENGTH}`);
23
- assert(total <= value.length, () => `Text: required length less than remainder, expected at least ${total}, found ${value.length}`);
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];
@@ -39,14 +44,13 @@ function decodeText(value) {
39
44
 
40
45
 
41
46
  export class Text extends String {
42
- #initialU8aLength;
43
47
  #override = null;
44
48
 
45
49
  constructor(registry, value) {
46
50
  const [str, decodedLength] = decodeText(value);
47
51
  super(str);
48
52
  this.registry = registry;
49
- this.#initialU8aLength = decodedLength;
53
+ this.initialU8aLength = decodedLength;
50
54
  }
51
55
  /**
52
56
  * @description The length of the value when encoded as a Uint8Array
@@ -56,14 +60,6 @@ export class Text extends String {
56
60
  get encodedLength() {
57
61
  return this.toU8a().length;
58
62
  }
59
- /**
60
- * @description The length of the initial encoded value (Only available when constructed from a Uint8Array)
61
- */
62
-
63
-
64
- get initialU8aLength() {
65
- return this.#initialU8aLength;
66
- }
67
63
  /**
68
64
  * @description returns a hash of the contents
69
65
  */
package/package.json CHANGED
@@ -20,7 +20,7 @@
20
20
  "./cjs/detectPackage.js"
21
21
  ],
22
22
  "type": "module",
23
- "version": "8.8.3-1",
23
+ "version": "8.8.3-12",
24
24
  "main": "./cjs/index.js",
25
25
  "module": "./index.js",
26
26
  "types": "./index.d.ts",
@@ -37,26 +37,26 @@
37
37
  "require": "./cjs/abstract/index.js",
38
38
  "default": "./abstract/index.js"
39
39
  },
40
- "./abstract/AbstractArray": {
41
- "types": "./abstract/AbstractArray.d.ts",
42
- "require": "./cjs/abstract/AbstractArray.js",
43
- "default": "./abstract/AbstractArray.js"
40
+ "./abstract/Array": {
41
+ "types": "./abstract/Array.d.ts",
42
+ "require": "./cjs/abstract/Array.js",
43
+ "default": "./abstract/Array.js"
44
44
  },
45
- "./abstract/AbstractInt": {
46
- "types": "./abstract/AbstractInt.d.ts",
47
- "require": "./cjs/abstract/AbstractInt.js",
48
- "default": "./abstract/AbstractInt.js"
45
+ "./abstract/Base": {
46
+ "types": "./abstract/Base.d.ts",
47
+ "require": "./cjs/abstract/Base.js",
48
+ "default": "./abstract/Base.js"
49
+ },
50
+ "./abstract/Int": {
51
+ "types": "./abstract/Int.d.ts",
52
+ "require": "./cjs/abstract/Int.js",
53
+ "default": "./abstract/Int.js"
49
54
  },
50
55
  "./base": {
51
56
  "types": "./base/index.d.ts",
52
57
  "require": "./cjs/base/index.js",
53
58
  "default": "./base/index.js"
54
59
  },
55
- "./base/Base": {
56
- "types": "./base/Base.d.ts",
57
- "require": "./cjs/base/Base.js",
58
- "default": "./base/Base.js"
59
- },
60
60
  "./base/Compact": {
61
61
  "types": "./base/Compact.d.ts",
62
62
  "require": "./cjs/base/Compact.js",
@@ -415,6 +415,6 @@
415
415
  },
416
416
  "dependencies": {
417
417
  "@babel/runtime": "^7.18.3",
418
- "@polkadot/util": "^9.4.1"
418
+ "@polkadot/util": "^9.4.2-22"
419
419
  }
420
420
  }
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-1'
8
+ version: '8.8.3-12'
9
9
  };
@@ -1,5 +1,7 @@
1
1
  import type { Codec, CodecClass, Registry } from '../types';
2
2
  /**
3
+ * @internal
4
+ *
3
5
  * Given an u8a, and an array of Type constructors, decode the u8a against the
4
6
  * types, and return an array of decoded values.
5
7
  *
@@ -7,5 +9,18 @@ import type { Codec, CodecClass, Registry } from '../types';
7
9
  * @param result - The result array (will be returned with values pushed)
8
10
  * @param types - The array of CodecClass to decode the U8a against.
9
11
  */
10
- export declare function decodeU8a<T extends Codec = Codec, E = T>(registry: Registry, result: unknown[], u8a: Uint8Array, [Types, keys]: [CodecClass[], string[]], withZip?: boolean): [E[], number];
12
+ export declare function decodeU8a<T extends Codec = Codec>(registry: Registry, result: T[], u8a: Uint8Array, [Types, keys]: [CodecClass<T>[], string[]]): [T[], number];
13
+ /**
14
+ * @internal
15
+ *
16
+ * Split from decodeU8a since this is specialized to zip returns ... while we duplicate, this
17
+ * is all on the hot-path, so it is not great, however there is (some) method behind the madness
18
+ */
19
+ export declare function decodeU8aStruct(registry: Registry, result: [string, Codec][], u8a: Uint8Array, [Types, keys]: [CodecClass[], string[]]): [[string, Codec][], number];
20
+ /**
21
+ * @internal
22
+ *
23
+ * Split from decodeU8a since this is specialized to 1 instance ... while we duplicate, this
24
+ * is all on the hot-path, so it is not great, however there is (some) method behind the madness
25
+ */
11
26
  export declare function decodeU8aVec<T extends Codec = Codec>(registry: Registry, result: unknown[], u8a: Uint8Array, startAt: number, Type: CodecClass<T>): [number, number];
@@ -1,19 +1,23 @@
1
1
  // Copyright 2017-2022 @polkadot/types-codec authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { u8aToHex } from '@polkadot/util';
4
+ /** @internal */
4
5
 
5
- function formatFailure(error, type, u8a, key) {
6
- return `decodeU8a: failed at ${u8aToHex(u8a)}…${key ? ` on ${key}` : ''}${type ? `: ${type}` : ''}:: ${error.message}`;
7
- }
6
+ function formatFailure(registry, {
7
+ message
8
+ }, u8a, i, count, Type, key) {
9
+ let type = '';
8
10
 
9
- function getRawType(registry, Type) {
10
11
  try {
11
- return new Type(registry).toRawType();
12
- } catch {
13
- return null;
12
+ type = `: ${new Type(registry).toRawType()}`;
13
+ } catch {// ignore
14
14
  }
15
+
16
+ return `decodeU8a: failed at ${u8aToHex(u8a.subarray(0, 16))}…${key ? ` on ${key}` : ''} (index ${i}/${count})${type}:: ${message}`;
15
17
  }
16
18
  /**
19
+ * @internal
20
+ *
17
21
  * Given an u8a, and an array of Type constructors, decode the u8a against the
18
22
  * types, and return an array of decoded values.
19
23
  *
@@ -23,36 +27,70 @@ function getRawType(registry, Type) {
23
27
  */
24
28
 
25
29
 
26
- export function decodeU8a(registry, result, u8a, [Types, keys], withZip) {
30
+ export function decodeU8a(registry, result, u8a, [Types, keys]) {
27
31
  const count = result.length;
28
32
  let offset = 0;
33
+ let i = 0;
29
34
 
30
- for (let i = 0; i < count; i++) {
31
- try {
35
+ try {
36
+ while (i < count) {
32
37
  const value = new Types[i](registry, u8a.subarray(offset));
33
38
  offset += value.initialU8aLength || value.encodedLength;
34
- result[i] = withZip ? [keys[i], value] : value;
35
- } catch (error) {
36
- throw new Error(formatFailure(error, getRawType(registry, Types[i]), u8a.subarray(offset, offset + 16), keys[i]));
39
+ result[i] = value;
40
+ i++;
37
41
  }
42
+ } catch (error) {
43
+ throw new Error(formatFailure(registry, error, u8a.subarray(offset), i, count, Types[i], keys[i]));
38
44
  }
39
45
 
40
46
  return [result, offset];
41
- } // Split from decodeU8a since this is specialized to 1 instance ... yes duplication, but
42
- // since we have to do less checks (and these are intensive anyway), much faster
47
+ }
48
+ /**
49
+ * @internal
50
+ *
51
+ * Split from decodeU8a since this is specialized to zip returns ... while we duplicate, this
52
+ * is all on the hot-path, so it is not great, however there is (some) method behind the madness
53
+ */
54
+
55
+ export function decodeU8aStruct(registry, result, u8a, [Types, keys]) {
56
+ const count = result.length;
57
+ let offset = 0;
58
+ let i = 0;
59
+
60
+ try {
61
+ while (i < count) {
62
+ const value = new Types[i](registry, u8a.subarray(offset));
63
+ offset += value.initialU8aLength || value.encodedLength;
64
+ result[i] = [keys[i], value];
65
+ i++;
66
+ }
67
+ } catch (error) {
68
+ throw new Error(formatFailure(registry, error, u8a.subarray(offset), i, count, Types[i], keys[i]));
69
+ }
70
+
71
+ return [result, offset];
72
+ }
73
+ /**
74
+ * @internal
75
+ *
76
+ * Split from decodeU8a since this is specialized to 1 instance ... while we duplicate, this
77
+ * is all on the hot-path, so it is not great, however there is (some) method behind the madness
78
+ */
43
79
 
44
80
  export function decodeU8aVec(registry, result, u8a, startAt, Type) {
45
81
  const count = result.length;
46
82
  let offset = startAt;
83
+ let i = 0;
47
84
 
48
- for (let i = 0; i < count; i++) {
49
- try {
85
+ try {
86
+ while (i < count) {
50
87
  const value = new Type(registry, u8a.subarray(offset));
51
88
  offset += value.initialU8aLength || value.encodedLength;
52
89
  result[i] = value;
53
- } catch (error) {
54
- throw new Error(formatFailure(error, getRawType(registry, Type), u8a.subarray(offset, offset + 16)));
90
+ i++;
55
91
  }
92
+ } catch (error) {
93
+ throw new Error(formatFailure(registry, error, u8a.subarray(offset), i, count, Type));
56
94
  }
57
95
 
58
96
  return [offset, offset - startAt];
package/utils/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { compareArray } from './compareArray';
2
2
  export { compareMap } from './compareMap';
3
3
  export { compareSet } from './compareSet';
4
- export { decodeU8a, decodeU8aVec } from './decodeU8a';
4
+ export { decodeU8a, decodeU8aStruct, decodeU8aVec } from './decodeU8a';
5
5
  export { mapToTypeMap } from './mapToTypeMap';
6
6
  export { typeToConstructor } from './typeToConstructor';
7
7
  export { sanitize } from './sanitize';
package/utils/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  export { compareArray } from "./compareArray.js";
4
4
  export { compareMap } from "./compareMap.js";
5
5
  export { compareSet } from "./compareSet.js";
6
- export { decodeU8a, decodeU8aVec } from "./decodeU8a.js";
6
+ export { decodeU8a, decodeU8aStruct, decodeU8aVec } from "./decodeU8a.js";
7
7
  export { mapToTypeMap } from "./mapToTypeMap.js";
8
8
  export { typeToConstructor } from "./typeToConstructor.js";
9
9
  export { sanitize } from "./sanitize.js";
@@ -10,7 +10,7 @@ export function mapToTypeMap(registry, input) {
10
10
  const count = entries.length;
11
11
  const output = [new Array(count), new Array(count)];
12
12
 
13
- for (let i = 0; i < entries.length; i++) {
13
+ for (let i = 0; i < count; i++) {
14
14
  output[1][i] = entries[i][0];
15
15
  output[0][i] = typeToConstructor(registry, entries[i][1]);
16
16
  }
@@ -1,7 +1,5 @@
1
- interface SanitizeOptions {
2
- allowNamespaces?: boolean;
3
- }
4
- declare type Mapper = (value: string, options?: SanitizeOptions) => string;
1
+ import { AnyString } from '../types';
2
+ declare type Mapper = (value: string) => string;
5
3
  export declare function trim(): Mapper;
6
4
  export declare function findClosing(value: string, start: number): number;
7
5
  export declare function alias(src: string, dest: string, withChecks?: boolean): Mapper;
@@ -13,5 +11,5 @@ export declare function removeGenerics(): Mapper;
13
11
  export declare function removePairOf(): Mapper;
14
12
  export declare function removeTraits(): Mapper;
15
13
  export declare function removeWrap(check: string): Mapper;
16
- export declare function sanitize(value: String | string, options?: SanitizeOptions): string;
14
+ export declare function sanitize(value: AnyString): string;
17
15
  export {};
package/utils/sanitize.js CHANGED
@@ -117,9 +117,7 @@ export function removeExtensions(type, isSized) {
117
117
  };
118
118
  }
119
119
  export function removeColons() {
120
- return (value, {
121
- allowNamespaces
122
- } = {}) => {
120
+ return value => {
123
121
  let index = 0;
124
122
 
125
123
  while (index !== -1) {
@@ -128,10 +126,6 @@ export function removeColons() {
128
126
  if (index === 0) {
129
127
  value = value.substring(2);
130
128
  } else if (index !== -1) {
131
- if (allowNamespaces) {
132
- return value;
133
- }
134
-
135
129
  let start = index;
136
130
 
137
131
  while (start !== -1 && !BOX_PRECEDING.includes(value[start])) {
@@ -152,7 +146,7 @@ export function removeGenerics() {
152
146
  // check against the allowed wrappers, be it Vec<..>, Option<...> ...
153
147
  const box = ALLOWED_BOXES.find(box => {
154
148
  const start = index - box.length;
155
- return start >= 0 && value.substring(start, start + box.length) === box && ( // make sure it is stand-alone, i.e. don't catch ElectionResult<...> as Result<...>
149
+ return start >= 0 && value.substring(start, index) === box && ( // make sure it is stand-alone, i.e. don't catch ElectionResult<...> as Result<...>
156
150
  start === 0 || BOX_PRECEDING.includes(value[start - 1]));
157
151
  }); // we have not found anything, unwrap generic innards
158
152
 
@@ -165,16 +159,12 @@ export function removeGenerics() {
165
159
 
166
160
  return value;
167
161
  };
168
- }
169
- /** @internal */
170
-
171
- function pairOfReplacer(v) {
172
- return `(${v},${v})`;
173
162
  } // remove the PairOf wrappers
174
163
 
175
-
176
164
  export function removePairOf() {
177
- return value => replaceTagWith(value, 'PairOf<', pairOfReplacer);
165
+ const replacer = v => `(${v},${v})`;
166
+
167
+ return value => replaceTagWith(value, 'PairOf<', replacer);
178
168
  } // remove the type traits
179
169
 
180
170
  export function removeTraits() {
@@ -199,38 +189,28 @@ export function removeTraits() {
199
189
  .replace(from5, 'Lookup') // replace `<...>::Type`
200
190
  .replace(from6, '');
201
191
  };
202
- }
203
- /** @internal */
204
-
205
- function wrapReplacer(v) {
206
- return v;
207
192
  } // remove wrapping values, i.e. Box<Proposal> -> Proposal
208
193
 
209
-
210
194
  export function removeWrap(check) {
211
- return value => replaceTagWith(value, check, wrapReplacer);
212
- }
213
- const sanitizeMap = new Map(); // eslint-disable-next-line @typescript-eslint/ban-types
195
+ const replacer = v => v;
214
196
 
215
- export function sanitize(value, options) {
197
+ return value => replaceTagWith(value, check, replacer);
198
+ }
199
+ const sanitizeMap = new Map();
200
+ export function sanitize(value) {
216
201
  const startValue = value.toString();
217
- let result = startValue;
202
+ const memoized = sanitizeMap.get(startValue);
218
203
 
219
- if (!options) {
220
- const memoized = sanitizeMap.get(startValue);
221
-
222
- if (memoized) {
223
- return memoized;
224
- }
204
+ if (memoized) {
205
+ return memoized;
225
206
  }
226
207
 
227
- for (let i = 0; i < mappings.length; i++) {
228
- result = mappings[i](result, options);
229
- }
208
+ let result = startValue;
230
209
 
231
- if (!options) {
232
- sanitizeMap.set(startValue, result);
210
+ for (let i = 0; i < mappings.length; i++) {
211
+ result = mappings[i](result);
233
212
  }
234
213
 
214
+ sanitizeMap.set(startValue, result);
235
215
  return result;
236
216
  }