From 732f19c79a1abf671e9d5d076e6736fbba159a00 Mon Sep 17 00:00:00 2001 From: Marc Fornos Date: Tue, 4 Jul 2023 11:19:43 +0200 Subject: [PATCH] fix converter type --- packages/core/src/converters/base.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/core/src/converters/base.ts b/packages/core/src/converters/base.ts index 5d43d19..fd83b85 100644 --- a/packages/core/src/converters/base.ts +++ b/packages/core/src/converters/base.ts @@ -39,6 +39,10 @@ function isBlock(object: any): object is Block { return object.header !== undefined && object.extrinsics !== undefined; } +function isRecord(obj: AnyJson): obj is Record { + return obj !== null && typeof obj === 'object' && Object.getOwnPropertySymbols(obj).length === 0; +} + /** * Maps the `Event` data names to its corresponding values. */ @@ -169,8 +173,12 @@ function signedBlockToNamedPrimitive(data: SignedBlock) { }; } -function codecToNamedPrimitive(data: Codec) { - return data.toPrimitive(); +function codecToNamedPrimitive(data: Codec) +: Record { + const converted = data.toPrimitive(); + return isRecord(converted) + ? converted + : { value: converted}; } /** @@ -186,7 +194,7 @@ function codecToNamedPrimitive(data: Codec) { */ // We are leveraging on guards for type inference. // eslint-disable-next-line complexity -function toNamedPrimitive(data: T): AnyJson { +function toNamedPrimitive(data: T): Record { switch (true) { case isEventRecord(data): return eventRecordToNamedPrimitive(data as EventRecord); @@ -223,13 +231,13 @@ function toNamedPrimitive(data: T): AnyJson { * @returns An array of objects in a primitive representation with named fields. * @see toNamedPrimitive */ -function toNamedPrimitives(data: T): AnyJson[] { +function toNamedPrimitives(data: T): Record[] { return Array.isArray(data) ? data.map(toNamedPrimitive) : [toNamedPrimitive(data)]; } export interface Converter { - toNamedPrimitive: (data: T) => AnyJson; - toNamedPrimitives: (data: T) =>AnyJson[]; + toNamedPrimitive: (data: T) => Record; + toNamedPrimitives: (data: T) =>Record[]; } export const base : Converter = {