From fca973cd531ebed405bfb09df8472ac10ae14f9f Mon Sep 17 00:00:00 2001 From: Jaco Date: Wed, 8 Sep 2021 09:07:07 +0300 Subject: [PATCH] Enhance type narrow checks (#3939) --- packages/types/src/extrinsic/ExtrinsicEra.ts | 8 +++++--- packages/types/src/metadata/Metadata.ts | 10 +++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/types/src/extrinsic/ExtrinsicEra.ts b/packages/types/src/extrinsic/ExtrinsicEra.ts index 66c9208267..e77bc7ed02 100644 --- a/packages/types/src/extrinsic/ExtrinsicEra.ts +++ b/packages/types/src/extrinsic/ExtrinsicEra.ts @@ -208,12 +208,14 @@ export class GenericExtrinsicEra extends Enum implements IExtrinsicEra { /** @internal */ // eslint-disable-next-line @typescript-eslint/ban-types private static _decodeExtrinsicEra (value: IExtrinsicEra | MortalMethod | MortalEnumDef | ImmortalEnumDef | Uint8Array | string = new Uint8Array()): Uint8Array | Object | undefined { - if (value instanceof GenericExtrinsicEra) { + if (!value) { + return new Uint8Array([0]); + } else if (value instanceof GenericExtrinsicEra) { return GenericExtrinsicEra._decodeExtrinsicEra(value.toU8a()); } else if (isHex(value)) { return GenericExtrinsicEra._decodeExtrinsicEra(hexToU8a(value)); - } else if (!value || isU8a(value)) { - return (!value?.length || value[0] === 0) + } else if (isU8a(value)) { + return (!value.length || value[0] === 0) ? new Uint8Array([0]) : new Uint8Array([1, value[0], value[1]]); } else if (isObject(value)) { diff --git a/packages/types/src/metadata/Metadata.ts b/packages/types/src/metadata/Metadata.ts index 9260a50329..c5c75df0aa 100644 --- a/packages/types/src/metadata/Metadata.ts +++ b/packages/types/src/metadata/Metadata.ts @@ -15,11 +15,15 @@ const EMPTY_METADATA = new Uint8Array([0x6d, 0x65, 0x74, 0x61, 9]); const EMPTY_U8A = new Uint8Array(); function toU8a (value: Uint8Array | string = EMPTY_U8A): Uint8Array { - return isHex(value) - ? toU8a(u8aToU8a(value)) - : isU8a(value) && value.length === 0 + if (isHex(value)) { + return toU8a(u8aToU8a(value)); + } else if (isU8a(value)) { + return value.length === 0 ? EMPTY_METADATA : value; + } + + throw new Error('Invalid type passed to Metadata constructor'); } function decodeMetadata (registry: Registry, _value?: Uint8Array | string | Map | Record): MetadataVersioned {