diff --git a/packages/core/src/Cardano/types/Asset.ts b/packages/core/src/Cardano/types/Asset.ts index a8b7d79e074..84ef0039cbb 100644 --- a/packages/core/src/Cardano/types/Asset.ts +++ b/packages/core/src/Cardano/types/Asset.ts @@ -107,6 +107,9 @@ export interface Asset { name: string; fingerprint: AssetFingerprint; quantity: bigint; + /** + * Sorted by slot + */ history: AssetMintOrBurn[]; metadata?: AssetMetadata; } diff --git a/packages/core/src/Cardano/types/AuxiliaryData.ts b/packages/core/src/Cardano/types/AuxiliaryData.ts index a1219158cec..fb69c9344ba 100644 --- a/packages/core/src/Cardano/types/AuxiliaryData.ts +++ b/packages/core/src/Cardano/types/AuxiliaryData.ts @@ -6,7 +6,7 @@ // } else if (Array.isArray(metadatum)) { // } else if (metadatum instanceof Uint8Array) { // } else { -// // a is MetadatumMap +// // metadatum is MetadatumMap // } import * as Cardano from '.'; diff --git a/packages/core/src/Cardano/util/index.ts b/packages/core/src/Cardano/util/index.ts index 14d43cb8b3f..18c96c69bd4 100644 --- a/packages/core/src/Cardano/util/index.ts +++ b/packages/core/src/Cardano/util/index.ts @@ -1,3 +1,4 @@ export * from './coalesceValueQuantities'; export * from './computeMinUtxoValue'; export * from './primitives'; +export * as metadatum from './metadatum'; diff --git a/packages/core/src/Cardano/util/metadatum.ts b/packages/core/src/Cardano/util/metadatum.ts new file mode 100644 index 00000000000..99d345a23c7 --- /dev/null +++ b/packages/core/src/Cardano/util/metadatum.ts @@ -0,0 +1,21 @@ +import { Metadatum, MetadatumMap } from '../types'; + +/** + * @returns {MetadatumMap | null} null if Metadatum is not MetadatumMap + */ +export const asMetadatumMap = (metadatum: Metadatum): MetadatumMap | null => { + if (typeof metadatum === 'object' && !Array.isArray(metadatum) && !(metadatum instanceof Uint8Array)) { + return metadatum; + } + return null; +}; + +/** + * @returns {Metadatum[] | null} null if Metadatum is not an array of metadatum + */ +export const asMetadatumArray = (metadatum: Metadatum): Metadatum[] | null => { + if (Array.isArray(metadatum)) { + return metadatum; + } + return null; +}; diff --git a/packages/core/test/Cardano/util/metadatum.test.ts b/packages/core/test/Cardano/util/metadatum.test.ts new file mode 100644 index 00000000000..31128781b60 --- /dev/null +++ b/packages/core/test/Cardano/util/metadatum.test.ts @@ -0,0 +1,27 @@ +import { Cardano } from '@cardano-sdk/core'; + +describe('Cardano.util.metadatum', () => { + describe('asMetadatumMap', () => { + it('returns argument if it is a MetadatumMap', () => { + const metadatum: Cardano.Metadatum = { some: 'metadatum' }; + expect(Cardano.util.metadatum.asMetadatumMap(metadatum)).toBe(metadatum); + }); + + it('returns null for any other metadatum type', () => { + const metadatum: Cardano.Metadatum = [{ some: 'metadatum' }]; + expect(Cardano.util.metadatum.asMetadatumMap(metadatum)).toBeNull(); + }); + }); + + describe('asMetadatumArray', () => { + it('returns argument if it is Metadatum[]', () => { + const metadatum: Cardano.Metadatum = [{ some: 'metadatum' }]; + expect(Cardano.util.metadatum.asMetadatumArray(metadatum)).toBe(metadatum); + }); + + it('returns null for any other metadatum type', () => { + const metadatum: Cardano.Metadatum = { some: 'metadatum' }; + expect(Cardano.util.metadatum.asMetadatumArray(metadatum)).toBeNull(); + }); + }); +});