import type { array, join } from "./arrays.ts"; import type { Fn } from "./functions.ts"; import type { conform } from "./generics.ts"; export type stringifyUnion = join, delimiter>; export type unionToTuple = _unionToTuple extends infer result ? conform : never; type _unionToTuple = getLastBranch extends infer current ? [ t ] extends [never] ? result : _unionToTuple, [current, ...result]> : never; type getLastBranch = intersectUnion void : never> extends ((x: infer branch) => void) ? branch : never; export type intersectUnion = (t extends unknown ? (_: t) => void : never) extends ((_: infer intersection) => void) ? intersection : never; export type intersectOverloadReturns = intersectUnion>>; export type overloadOf = Exclude never) & fn, givenArgs, unknown>, fn extends () => never ? never : () => never>; type collectSignatures = result & fn extends (...args: infer args) => infer returns ? result extends fn ? never : collectSignatures & result & ((...args: args) => returns)> | (args extends givenArgs ? (...args: args) => returns : never) : never; export {};