/**
 * Utility type that adds a parameter to the beginning of a function's parameter list.
 *
 * This type is used to transform methods that operate on a node into methods that
 * take the node as their first parameter.
 *
 * @template F - The original function type
 * @template T - The type of the parameter to prepend
 */

export type PrependArgument<F extends (...args: any[]) => any, T> = F extends (
  ...args: infer A
) => infer R
  ? (first: T, ...args: A) => R
  : never
