/* eslint-disable @typescript-eslint/no-explicit-any */ import type { BuiltInObject } from "effect-app/utils" type AllKeys = T extends any ? keyof T : never type OptionalKeys = T extends any ? { [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 } : [T] extends [object] ? PartialKeys< { [K in AllKeys]: Widen> }, Exclude, keyof T> | OptionalKeys > : T