structured-elements
Version:
A TypeScript package for modelling and validating data
31 lines • 1.62 kB
TypeScript
export type Mirror<Element> = {
array: Readonly<Element[]>;
collection: Readonly<Record<Mirror.Key, Element>>;
};
export declare namespace Mirror {
const build: <Element_1>(data?: Format<Element_1>, options?: Options<Element_1> | undefined) => Mirror<Element_1>;
const buildFromRecord: <Element_1, Subject extends Record<keyof Element_1, unknown>, SharedKey extends keyof Element_1 & keyof Subject = keyof Element_1 & keyof Subject>(subject: Subject, transformations: Record<SharedKey, Element_1[SharedKey] extends Subject[SharedKey] ? void | import("./buildFromRecord").Transform<Element_1, Subject, SharedKey> : import("./buildFromRecord").Transform<Element_1, Subject, SharedKey>>) => Mirror<Element_1>;
type Collection<Element> = Record<Key, Element>;
type FromRecord<Element, Transformations> = Omit<Element, keyof Transformations> & {
[Key in keyof Transformations]: Transformations[Key];
};
type Format<Element> = Collection<Element> | Element[];
type FormatId = `array` | `collection`;
type Key = string;
type Options<Element> = Element extends {
id: string;
} ? {
base?: Mirror<Element>;
extractKey?: Functions.ExtractKey<Element>;
sort?: Functions.SortElements<Element>;
} : {
base?: Mirror<Element>;
extractKey: Functions.ExtractKey<Element>;
sort?: Functions.SortElements<Element>;
};
namespace Functions {
type ExtractKey<Element> = (record: Element) => Key;
type SortElements<Element> = (a: Element, b: Element) => number;
}
}
//# sourceMappingURL=index.d.ts.map