0.0.1•Updated a month ago
import type { I_Menu } from "../../classes/entities/menu.ts";
export declare namespace SchemaReference {
type Types = 'ledger' | 'supply' | 'audience' | 'menu';
type Base<T extends Types> = {
$ref: T;
label: string;
description?: string;
required?: boolean;
multiple?: boolean;
}
type Config = {
[name: string]: { [R in Types]: Base<R> & { $ref: R } }[Types];
};
type IsOptional<F> =
F extends { required: false } ? true : false;
type IsMultiple<R> =
R extends { multiple: true} ? true : false;
// deno-lint-ignore no-explicit-any
type ReturnType<R extends Base<any>> = Readonly<
R['$ref'] extends 'ledger'
? { entries: { id: number, amount: number }[], name: "Some Test Ledger" }
: R['$ref'] extends 'supply'
? { items: { id: number, value: number, name: string }[], name: "A Supply" }
: R['$ref'] extends 'audience'
? { users: { name: string, surname: string }[] }
: R['$ref'] extends 'menu'
? Omit<I_Menu, '__parent_class'>
: undefined
>;
type MapLink<R extends Config> = {
[K in keyof R]:
IsMultiple<R[K]> extends true
? string[]
: string
}
type Map<R extends Config> = {
[K in keyof R]:
IsMultiple<R[K]> extends true
? ReturnType<R[K]>[]
: IsOptional<R[K]> extends true
? ReturnType<R[K]> | undefined
: ReturnType<R[K]>
}
}