import type { Address, IEntry, ListingResult, OrderedListing } from "./types"; export function listingAsOrdered(listing: ListingResult): OrderedListing { const entries = Object.entries(listing) as [Address, IEntry][]; return entries .sort(([_, a], [__, b]) => String(a.value.c).localeCompare(b.value.c)) .sort(([_, a], [__, b]) => String(a.value.t).localeCompare(b.value.t)) .sort(([_, a], [__, b]) => a.attribute.localeCompare(b.attribute)); } export function asDict(attributes: IEntry[]) { const result = {} as { [key: string]: { [key: string]: unknown } }; attributes.forEach((entry) => { if (!result[entry.entity]) { result[entry.entity] = {}; } if (result[entry.entity][entry.attribute]) { if (!Array.isArray(result[entry.entity][entry.attribute])) { result[entry.entity][entry.attribute] = [ result[entry.entity][entry.attribute], ]; } (result[entry.entity][entry.attribute] as unknown[]).push(entry.value.c); } else { result[entry.entity][entry.attribute] = entry.value.c; } }); return result; }