import { NonEmptyArray, pass } from '@blackglory/prelude' type PathCollector = { [Key in keyof Obj]: Obj[Key] extends object ? ( (() => Array) & PathCollector ) : () => Array } export function createPathCollector(): PathCollector { return new Proxy(Object.create(null), { get(target, prop) { return createCallableNestedProxy([prop]) } }) function createCallableNestedProxy( path: NonEmptyArray ): PathCollector { return new Proxy(pass, { get(target, prop) { return createCallableNestedProxy([...path, prop]) } , apply(target, thisArg, args) { return path } }) as unknown as PathCollector } }