just-curry-it
Advanced tools
Comparing version 5.0.1 to 5.1.0
export default curry; | ||
// TODO: get more specific with permssible param types for returned function | ||
declare function curry( | ||
fn: Function, | ||
arity?: number, | ||
) : Function; | ||
type MakeTuple<LEN extends number, T extends any = any, C extends T[] = []> = C['length'] extends LEN ? C : MakeTuple<LEN, T, [T, ...C]> | ||
type CurryOverload<F extends (...args: any[]) => any, N extends unknown[], P extends unknown[]> = | ||
N extends [infer L, ...infer R] | ||
? ((...args: [...P, L]) => CurryInternal<F, R>) & CurryOverload<F, R, [...P, L]> | ||
: () => CurryInternal<F, P> | ||
type CurryInternal<F extends (...args: any[]) => any, N extends unknown[]> = | ||
0 extends N['length'] ? ReturnType<F> : CurryOverload<F, N, []> | ||
type Curry<F extends (...args: any[]) => any, LEN extends number | undefined = undefined, I extends any = any> = | ||
0 extends (LEN extends undefined ? Parameters<F>['length'] : LEN) | ||
? () => ReturnType<F> | ||
: CurryInternal<F, LEN extends undefined ? Parameters<F> : MakeTuple<LEN extends undefined ? 0 : LEN, I>> | ||
declare function curry<F extends (...args: any[]) => any, L extends number>( | ||
fn: F, | ||
arity?: L | undefined, | ||
) : Curry<F, number extends L ? undefined : L, Parameters<F>[number]>; |
@@ -15,7 +15,47 @@ import curry from './index' | ||
curry(add, 1)(1); | ||
function many(a: string, b: number, c: boolean, d: bigint, e: number[], f: string | undefined, g: Record<any, any>): boolean { | ||
return true | ||
} | ||
const return1 = curry(many)('')(123)(false)(BigInt(2))([1])(undefined)({}) | ||
const return2 = curry(many)('', 123)(false, BigInt(2))([1], '123')({}) | ||
const return3 = curry(many)('', 123, false)(BigInt(2), [1], undefined)({}) | ||
const return4 = curry(many)('', 123, false, BigInt(2))([1], undefined, {}) | ||
const return5 = curry(many)('', 123, false, BigInt(2), [1])(undefined, {}) | ||
const return6 = curry(many)('', 123, false, BigInt(2), [1], undefined)({}) | ||
const return7 = curry(many)('', 123, false)(BigInt(2), [1])(undefined)({}) | ||
const returns: boolean[] = [return1, return2, return3, return4, return5, return6, return7] | ||
function dynamic(...args: string[]): number { | ||
return args.length | ||
} | ||
const dy1 = curry(dynamic, 1)('') | ||
const dy2 = curry(dynamic, 2)('')('') | ||
const dy3 = curry(dynamic, 3)('')('')('') | ||
const dys: number[] = [dy1, dy2, dy3] | ||
// not OK | ||
// @ts-expect-error | ||
curry(add, 1)(1)(2); | ||
// @ts-expect-error | ||
curry(add, 1)(1)(2)(3); | ||
// @ts-expect-error | ||
curry(add, 4)(''); | ||
// not OK | ||
// @ts-expect-error | ||
curry(many)(123) | ||
// @ts-expect-error | ||
curry(many)('', 123)(123) | ||
// @ts-expect-error | ||
curry(many)('', 123, true)('') | ||
// @ts-expect-error | ||
curry(many)('', 123, true, BigInt(2))('') | ||
// @ts-expect-error | ||
curry(many)('', 123, true, BigInt(2), [1])(123) | ||
// @ts-expect-error | ||
curry(many)('', 123, true, BigInt(2), [1,1], '')('') | ||
// @ts-expect-error | ||
curry(dynamic)(123) | ||
// @ts-expect-error | ||
curry(); | ||
@@ -22,0 +62,0 @@ // @ts-expect-error |
{ | ||
"name": "just-curry-it", | ||
"version": "5.0.1", | ||
"version": "5.1.0", | ||
"description": "return a curried function", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -0,1 +1,4 @@ | ||
<!-- DO NOT EDIT THIS FILE! THIS FILE WAS AUTOGENERATED BY TEMPLATE-MATE --> | ||
<!-- SEE https://github.com/angus-c/just/blob/master/CONTRIBUTING.md#readme-template --> | ||
## just-curry-it | ||
@@ -2,0 +5,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
7681
9
155
44