import type { CreateExpression } from "../factories/expression";
import type { BooleanExpression } from "./boolean";
import type { DateExpression } from "./date";
import type { EnumExpression } from "./enum";
import type { NumberExpression } from "./number";
import type { StringExpression } from "./string";
import type { TupleExpression } from "./tuple";
import type { UnionExpression } from "./union";

type RecordExpression = {
  [k: string]:
    | StringExpression
    | NumberExpression
    | BooleanExpression
    | DateExpression
    | EnumExpression
    | TupleExpression
    | UnionExpression
    | ObjectExpression;
};

export type ObjectExpression = RecordExpression | readonly [CreateExpression<"object">, RecordExpression];
