{"version":3,"file":"curry.cjs","names":[],"sources":["../../src/function/curry.ts"],"sourcesContent":["type Curried = {\n  (...args: unknown[]): Curried;\n};\n\n/**\n * Creates a function that accepts arguments of func and either invokes func returning\n * its result, if at least arity number of arguments have been provided, or returns a\n * function that accepts the remaining func arguments, and so on.\n *\n * @template T - The type of the function to curry\n * @param func - The function to curry\n * @param arity - The arity of func (default: func.length)\n * @returns Returns the new curried function\n *\n * @example\n * const add = (a: number, b: number, c: number) => a + b + c;\n * const curried = curry(add);\n * curried(1)(2)(3); // => 6\n * curried(1, 2)(3); // => 6\n * curried(1)(2, 3); // => 6\n * curried(1, 2, 3); // => 6\n *\n * @example\n * const greet = (greeting: string, name: string) => `${greeting}, ${name}!`;\n * const curriedGreet = curry(greet);\n * const sayHello = curriedGreet('Hello');\n * sayHello('Alice'); // => 'Hello, Alice!'\n * sayHello('Bob'); // => 'Hello, Bob!'\n */\nexport function curry<T extends (...args: never[]) => unknown>(func: T, arity: number = func.length): Curried {\n  const call = (thisArg: unknown, args: unknown[]): unknown =>\n    (func as (this: unknown, ...args: never[]) => unknown).apply(thisArg, args as never[]);\n\n  function curried(this: unknown, ...args: unknown[]): unknown {\n    if (args.length >= arity) {\n      return call(this, args);\n    }\n    return function (this: unknown, ...nextArgs: unknown[]): unknown {\n      return curried.apply(this, [...args, ...nextArgs]);\n    };\n  }\n\n  return curried as Curried;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,MAA+C,MAAS,QAAgB,KAAK,QAAiB;CAC5G,MAAM,QAAQ,SAAkB,SAC7B,KAAsD,MAAM,SAAS,IAAe;CAEvF,SAAS,QAAuB,GAAG,MAA0B;EAC3D,IAAI,KAAK,UAAU,OACjB,OAAO,KAAK,MAAM,IAAI;EAExB,OAAO,SAAyB,GAAG,UAA8B;GAC/D,OAAO,QAAQ,MAAM,MAAM,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;EACnD;CACF;CAEA,OAAO;AACT"}