import { ValueObject } from '@/data-helpers/value-object'; import { DateTime } from '@/date-time'; export interface Class { new (...args: any[]): T; prototype: T; } export type Nullable = null | undefined; export type NonNullPrimitive = string | number | bigint | boolean | symbol; export type KeyType = string | number | symbol; export type DateType = Date | DateTime; export type IndexedCollection = Array; export type KeyedCollection = Map | Set; export type WeakKeyedCollection = WeakMap | WeakSet; export type Collection = IndexedCollection | KeyedCollection; export type ValueObjectType = NonNullPrimitive | DateType | Collection | CustomObject; export type URI = string; export interface CustomObject { [key: KeyType]: Nullable | ValueObjectType | IndexedCollection | KeyedCollection | ValueObject; }