/* eslint-disable @typescript-eslint/no-explicit-any */ import type { BuiltInObject } from "@effect-ts/core/Utils" type AllKeys = T extends any ? keyof T : never type OptionalKeys = T extends any ? // eslint-disable-next-line @typescript-eslint/ban-types { [K in keyof T]-?: {} extends Pick ? K : never }[keyof T] : never type Idx = T extends any ? K extends keyof T ? T[K] : D : never type PartialKeys = & Omit & Partial> extends infer O ? { [P in keyof O]: O[P] } : never export type Primitive = boolean | string | number | bigint | symbol | undefined | null export type Widen = [T] extends [BuiltInObject] | [Primitive] ? T : [T] extends [Array] ? { [K in keyof T]: Widen } : [T] extends [ReadonlyArray] ? { [K in keyof T]: Widen } : // eslint-disable-next-line @typescript-eslint/ban-types [T] extends [object] ? PartialKeys< { [K in AllKeys]: Widen> }, Exclude, keyof T> | OptionalKeys > : T