export type DeepReadonly = T extends (...parameters: any[]) => any ? T : T extends ReadonlyMap ? ReadonlyMap, DeepReadonly> : T extends ReadonlySet ? ReadonlySet> : T extends object ? { readonly [Key in keyof T]: DeepReadonly } : T export type Flat = { [K in keyof R]: R[K] } export type ViewOf = T extends { READONLY_VIEW: infer View } ? View : T extends Array ? readonly [...T] : T extends Set ? ReadonlySet> : T extends Map ? ReadonlyMap, ViewOf> : T