upend/tools/upend_js/index.ts

31 lines
1.1 KiB
TypeScript
Raw Normal View History

2021-11-11 23:37:42 +01:00
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;
}
});
2021-11-11 23:37:42 +01:00
return result;
}