Newer
Older
export const yams = {
String: () => ({ type: "String" }),
Date: () => ({ type: "Date" }),
Float: () => ({ type: "Float" }),
Int: () => ({ type: "Int" }),
} as const;
export type BuildObj = ReturnType<typeof yams[keyof typeof yams]>;
export type Cardinality = "*" | "1" | "?" | "+";
export type CardinalityPair = `${Cardinality}${Cardinality}`;
export type Relationships<E> = Record<
string,
{
cardinality: CardinalityPair;
subject: Array<keyof E>;
object: Array<keyof E>;
}
>;
export type ETypes = {
[etypeName: string]: {
[attributeName: string]: BuildObj;
};
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type Schema<E extends ETypes = any, R extends Relationships<E> = any> = {
etypes: E;
relationships: R;
};
export type ETypesNames<S extends Schema> = keyof S["etypes"];