You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

functional.js

Package Overview
Dependencies
Maintainers
1
Versions
86
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

functional.js - npm Package Compare versions

Comparing version
1.0.0
to
1.0.2
+10
-32
dist/index.cjs

@@ -44,14 +44,7 @@ 'use strict';

if (func.length === 2) {
const curried2 = function(a, b, ...rest2) {
const curried2 = function(a, b) {
if (arguments.length >= 2) {
if (rest2.length === 0) {
return func(a, b);
}
let accumulated = func(a, b);
for (let i = 0; i < rest2.length; i++) {
accumulated = func(accumulated, rest2[i], i);
}
return accumulated;
return func(a, b);
}
return (next, ...more) => curried2(a, next, ...more);
return (next) => curried2(a, next);
};

@@ -61,21 +54,14 @@ return curried2;

if (func.length === 3) {
const curried3 = function(a, b, c, ...rest2) {
const curried3 = function(a, b, c) {
if (arguments.length >= 3) {
if (rest2.length === 0) {
return func(a, b, c);
}
let accumulated = func(a, b, c);
for (let i = 0; i < rest2.length; i++) {
accumulated = func(accumulated, rest2[i], i);
}
return accumulated;
return func(a, b, c);
}
if (arguments.length === 2) {
return (next, ...more) => curried3(a, b, next, ...more);
return (next) => curried3(a, b, next);
}
return function(nextB, nextC, ...more) {
return function(nextB, nextC) {
if (arguments.length >= 2) {
return curried3(a, nextB, nextC, ...more);
return curried3(a, nextB, nextC);
}
return (next, ...moreNext) => curried3(a, nextB, next, ...moreNext);
return (next) => curried3(a, nextB, next);
};

@@ -90,11 +76,3 @@ };

if (args.length >= func.length) {
if (args.length === func.length) {
return func(...args);
}
let accumulated = func(...args.slice(0, func.length));
const remaining = args.slice(func.length);
for (let i = 0; i < remaining.length; i++) {
accumulated = func(accumulated, remaining[i], i);
}
return accumulated;
return func(...args.slice(0, func.length));
}

@@ -101,0 +79,0 @@ return (...nextArgs) => curried(...args, ...nextArgs);

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/typeChecks.ts","../src/curry.ts","../src/array.ts","../src/composition.ts","../src/object.ts","../src/utilities.ts","../src/pipe.ts","../src/objectOps.ts","../src/arrayOps.ts","../src/async.ts","../src/index.ts"],"names":["rest","truthy","falsy","unique"],"mappings":"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","file":"index.cjs","sourcesContent":["export function isFunction(obj: unknown): obj is (...args: any[]) => unknown {\n return !!(obj && (obj as any).constructor && (obj as any).call && (obj as any).apply);\n}\n\nexport function isObject(obj: unknown): obj is object {\n return isFunction(obj) || (!!obj && typeof obj === \"object\");\n}\n\nexport function isArray<T = unknown>(obj: unknown): obj is T[] {\n return Array.isArray(obj);\n}\n\nexport function isArguments(obj: unknown): obj is IArguments {\n return Object.prototype.toString.call(obj) === \"[object Arguments]\";\n}\n\nexport function isDate(obj: unknown): obj is Date {\n return Object.prototype.toString.call(obj) === \"[object Date]\";\n}\n\nexport function isNumber(obj: unknown): obj is number {\n return Object.prototype.toString.call(obj) === \"[object Number]\";\n}\n\nexport function isRegExp(obj: unknown): obj is RegExp {\n return Object.prototype.toString.call(obj) === \"[object RegExp]\";\n}\n\nexport function isString(obj: unknown): obj is string {\n return Object.prototype.toString.call(obj) === \"[object String]\";\n}\n\nexport function exists<T>(obj: T | null | undefined): obj is T {\n return obj != null;\n}\n\nexport function truthy<T>(obj: T | null | undefined | false): obj is T {\n return exists(obj) && obj !== false;\n}\n\nexport function falsy(obj: unknown): obj is null | undefined | false {\n return !truthy(obj);\n}\n","import type { AnyFunction, CurriedFunction } from \"./types\";\nimport { isFunction } from \"./typeChecks\";\n\nexport function curry<T extends AnyFunction>(func: T): CurriedFunction<T> {\n if (!isFunction(func)) {\n throw new Error(\"fjs Error: Invalid function\");\n }\n\n if (func.length === 2) {\n const curried2 = function (a: any, b?: any, ...rest: any[]): any {\n if (arguments.length >= 2) {\n if (rest.length === 0) {\n return func(a, b);\n }\n let accumulated = func(a, b);\n for (let i = 0; i < rest.length; i++) {\n accumulated = (func as AnyFunction)(accumulated, rest[i], i);\n }\n return accumulated;\n }\n return (next: any, ...more: any[]) => curried2(a, next, ...more);\n };\n return curried2 as CurriedFunction<T>;\n }\n\n if (func.length === 3) {\n const curried3 = function (a: any, b?: any, c?: any, ...rest: any[]): any {\n if (arguments.length >= 3) {\n if (rest.length === 0) {\n return func(a, b, c);\n }\n let accumulated = func(a, b, c);\n for (let i = 0; i < rest.length; i++) {\n accumulated = (func as AnyFunction)(accumulated, rest[i], i);\n }\n return accumulated;\n }\n if (arguments.length === 2) {\n return (next: any, ...more: any[]) => curried3(a, b, next, ...more);\n }\n return function (nextB: any, nextC?: any, ...more: any[]): any {\n if (arguments.length >= 2) {\n return curried3(a, nextB, nextC, ...more);\n }\n return (next: any, ...moreNext: any[]) => curried3(a, nextB, next, ...moreNext);\n };\n };\n return curried3 as CurriedFunction<T>;\n }\n\n function curried(...args: any[]): any {\n if (args.length === 0) {\n return curried;\n }\n\n if (args.length >= func.length) {\n if (args.length === func.length) {\n return func(...args);\n }\n\n let accumulated = func(...args.slice(0, func.length));\n const remaining = args.slice(func.length);\n\n for (let i = 0; i < remaining.length; i++) {\n accumulated = (func as AnyFunction)(accumulated, remaining[i], i);\n }\n\n return accumulated;\n }\n\n return (...nextArgs: any[]) => curried(...args, ...nextArgs);\n }\n\n return curried as CurriedFunction<T>;\n}\n","import type { Mapper, Predicate, Reducer, Comparator } from \"./types\";\nimport { isArray, exists } from \"./typeChecks\";\n\nconst HARD_RETURN = Symbol(\"hardReturn\");\n\nconst eachArray = <T>(iterator: (value: T, index: number) => any, items: T[]): void => {\n for (let i = 0; i < items.length; i++) {\n if (iterator(items[i]!, i) === HARD_RETURN) {\n return;\n }\n }\n};\n\nconst mapArray = <T, U>(iterator: Mapper<T, U>, items: T[]): U[] => {\n const length = items.length;\n const mapped = new Array<U>(length);\n const fn = iterator;\n if (length > 0 && typeof items[0] === \"number\" && fn.length === 1) {\n for (let i = 0; i < length; i++) {\n mapped[i] = fn(items[i]!, i);\n }\n return mapped;\n }\n for (let i = 0; i < length; i++) {\n mapped[i] = fn(items[i]!, i);\n }\n return mapped;\n};\n\nconst foldArray = <T, U>(iterator: Reducer<T, U>, cumulate: U, items: T[]): U => {\n let acc = cumulate;\n if (items.length > 0 && typeof items[0] === \"number\" && typeof acc === \"number\") {\n let numberAcc = acc as unknown as number;\n for (let i = 0; i < items.length; i++) {\n numberAcc = iterator(numberAcc as unknown as U, items[i]!, i) as unknown as number;\n }\n return numberAcc as unknown as U;\n }\n for (let i = 0; i < items.length; i++) {\n acc = iterator(acc, items[i]!, i);\n }\n return acc;\n};\n\nconst reduceArray = <T>(iterator: Reducer<T, T>, items: T[]): T => {\n let acc = items[0];\n if (items.length > 1 && typeof acc === \"number\" && typeof items[1] === \"number\") {\n let numberAcc = acc as unknown as number;\n for (let i = 1; i < items.length; i++) {\n numberAcc = iterator(numberAcc as unknown as T, items[i]!, i - 1) as unknown as number;\n }\n return numberAcc as unknown as T;\n }\n for (let i = 1; i < items.length; i++) {\n acc = iterator(acc as T, items[i]!, i - 1);\n }\n return acc as T;\n};\n\nconst filterArray = <T>(iterator: Predicate<T>, items: T[]): T[] => {\n const filtered: T[] = [];\n const length = items.length;\n const fn = iterator;\n if (length > 0 && typeof items[0] === \"number\" && fn.length === 1) {\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n }\n if (fn.length >= 2) {\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n }\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n};\n\nexport function each<T>(iterator: (value: T, index: number) => any, items: T[]): void;\nexport function each<T>(iterator: (value: T, index: number) => any): (items: T[]) => void;\nexport function each<T>(iterator: (value: T, index: number) => any, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => each(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return;\n }\n eachArray(iterator, items);\n}\n\nexport function map<T, U>(iterator: Mapper<T, U>, items: T[]): U[];\nexport function map<T, U>(iterator: Mapper<T, U>): (items: T[]) => U[];\nexport function map<T, U>(iterator: Mapper<T, U>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => map(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n return mapArray(iterator, items);\n}\n\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate: U, items: T[]): U;\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate: U): (items: T[]) => U;\nexport function fold<T, U>(\n iterator: Reducer<T, U>\n): {\n (cumulate: U, items: T[]): U;\n (cumulate: U): (items: T[]) => U;\n};\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate?: U, items?: T[]): any {\n if (arguments.length >= 3) {\n if (!exists(items) || !isArray(items)) {\n return cumulate as U;\n }\n return foldArray(iterator, cumulate as U, items);\n }\n if (arguments.length === 2) {\n return (next: T[]) => fold(iterator, cumulate as U, next);\n }\n return function (nextCumulate: U, nextItems?: T[]): any {\n if (arguments.length >= 2) {\n return fold(iterator, nextCumulate, nextItems as T[]);\n }\n return (next: T[]) => fold(iterator, nextCumulate, next);\n };\n}\n\nexport const foldl = fold;\n\nexport function reduce<T>(iterator: Reducer<T, T>, items: T[]): T;\nexport function reduce<T>(iterator: Reducer<T, T>): (items: T[]) => T;\nexport function reduce<T>(iterator: Reducer<T, T>, items?: T[]): T | ((items: T[]) => T) {\n if (arguments.length < 2) {\n return (next: T[]) => reduce(iterator, next);\n }\n if (!exists(items) || !isArray(items) || items.length === 0) {\n throw new Error(\"fjs Error: Cannot reduce empty array without initial value\");\n }\n return reduceArray(iterator, items);\n}\n\nexport const reducel = reduce;\nexport const foldll = reduce;\n\nexport function clone<T>(items: T[]): T[] {\n const input = items ?? [];\n const result = new Array<T>(input.length);\n for (let i = 0; i < input.length; i++) {\n result[i] = input[i]!;\n }\n return result;\n}\n\nexport function first<T>(iterator: Predicate<T>, items: T[]): T | undefined;\nexport function first<T>(iterator: Predicate<T>): (items: T[]) => T | undefined;\nexport function first<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => first(iterator, next);\n }\n let result: T | undefined;\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n result = item;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return result;\n}\n\nexport const head = first;\nexport const take = first;\n\nexport function rest<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function rest<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function rest<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => rest(iterator, next);\n }\n const result = select(iterator, items as T[]);\n result.shift();\n return result;\n}\n\nexport const tail = rest;\nexport const drop = rest;\n\nexport function last<T>(iterator: Predicate<T>, items: T[]): T | undefined;\nexport function last<T>(iterator: Predicate<T>): (items: T[]) => T | undefined;\nexport function last<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => last(iterator, next);\n }\n const itemsClone = clone(items as T[]);\n return first(iterator, itemsClone.reverse());\n}\n\nexport function every<T>(iterator: Predicate<T>, items: T[]): boolean;\nexport function every<T>(iterator: Predicate<T>): (items: T[]) => boolean;\nexport function every<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => every(iterator, next);\n }\n let isEvery = true;\n each((item: T, index: number) => {\n if (!iterator(item, index)) {\n isEvery = false;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return isEvery;\n}\n\nexport const all = every;\n\nexport function any<T>(iterator: Predicate<T>, items: T[]): boolean;\nexport function any<T>(iterator: Predicate<T>): (items: T[]) => boolean;\nexport function any<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => any(iterator, next);\n }\n let isAny = false;\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n isAny = true;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return isAny;\n}\n\nexport const contains = any;\n\nexport function select<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function select<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function select<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => select(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n return filterArray(iterator, items);\n}\n\nexport const filter = select;\n\nexport function best<T>(iterator: Comparator<T>, items: T[]): T | undefined;\nexport function best<T>(iterator: Comparator<T>): (items: T[]) => T | undefined;\nexport function best<T>(iterator: Comparator<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => best(iterator, next);\n }\n const compare = (arg1: T, arg2: T): T => {\n return iterator(arg1, arg2) ? arg1 : arg2;\n };\n return reduce(compare, items as T[]);\n}\n\nexport function whilst<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function whilst<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function whilst<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => whilst(iterator, next);\n }\n const result: T[] = [];\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n result.push(item);\n } else {\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return result;\n}\n\nexport function partition<T>(iterator: Predicate<T>, items: T[]): [T[], T[]];\nexport function partition<T>(iterator: Predicate<T>): (items: T[]) => [T[], T[]];\nexport function partition<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => partition(iterator, next);\n }\n const truthy: T[] = [];\n const falsy: T[] = [];\n each((item: T, index: number) => {\n (iterator(item, index) ? truthy : falsy).push(item);\n }, items as T[]);\n return [truthy, falsy];\n}\n\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K,\n items: T[]\n): Record<K, T[]>;\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K\n): (items: T[]) => Record<K, T[]>;\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K,\n items?: T[]\n): any {\n if (arguments.length < 2) {\n return (next: T[]) => group(iterator, next);\n }\n const result = {} as Record<K, T[]>;\n each((item: T) => {\n const key = iterator(item);\n const existing = result[key];\n if (existing) {\n existing.push(item);\n return;\n }\n result[key] = [item];\n }, items as T[]);\n return result;\n}\n\nexport function shuffle<T>(items: T[]): T[] {\n const result = clone(items);\n for (let i = 0; i < result.length; i++) {\n const j = Math.floor(Math.random() * (i + 1));\n const t = result[i]!;\n result[i] = result[j]!;\n result[j] = t;\n }\n return result;\n}\n\nexport const strictEquals = <T>(a: T, b: T): boolean => a === b;\n\nexport function nub<T>(comparator: Comparator<T>, items: T[]): T[];\nexport function nub<T>(comparator: Comparator<T>): (items: T[]) => T[];\nexport function nub<T>(comparator: Comparator<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => nub(comparator, next);\n }\n const input = items as T[];\n if (comparator === strictEquals) {\n return Array.from(new Set(input));\n }\n const unique: T[] = input.length > 0 ? [input[0]!] : [];\n each((item: T) => {\n if (!any((value: T) => comparator(item, value), unique)) {\n unique.push(item);\n }\n }, input);\n return unique;\n}\n\nexport const unique = nub;\nexport const distinct = nub;\n","import type { UnaryFn, AnyFunction } from \"./types\";\nimport { isFunction } from \"./typeChecks\";\nimport { any } from \"./array\";\n\nexport function compose<A>(f: UnaryFn<A, A>): UnaryFn<A, A>;\nexport function compose<A, B>(f: UnaryFn<B, A>, g: UnaryFn<A, B>): UnaryFn<A, A>;\nexport function compose<A, B, C>(\n f: UnaryFn<C, A>,\n g: UnaryFn<B, C>,\n h: UnaryFn<A, B>\n): UnaryFn<A, A>;\nexport function compose<A, B, C, D>(\n f: UnaryFn<D, A>,\n g: UnaryFn<C, D>,\n h: UnaryFn<B, C>,\n i: UnaryFn<A, B>\n): UnaryFn<A, A>;\nexport function compose(...funcs: UnaryFn<any, any>[]): UnaryFn<any, any>;\nexport function compose(...funcs: UnaryFn<any, any>[]): UnaryFn<any, any> {\n const anyInvalid = any((func: unknown) => !isFunction(func));\n const total = funcs.length;\n\n if (anyInvalid(funcs)) {\n throw new Error(\"fjs Error: Invalid function to compose\");\n }\n\n return function (this: any, ...args: any[]) {\n let result: any = (funcs[total - 1] as AnyFunction).apply(this, args);\n for (let i = total - 2; i >= 0; i--) {\n result = (funcs[i] as AnyFunction).call(this, result);\n }\n return result;\n };\n}\n","import type { Curried2 } from \"./types\";\nimport { curry } from \"./curry\";\nimport { map } from \"./array\";\nimport { isArray } from \"./typeChecks\";\n\nexport function toArray<T extends Record<string, any>>(obj: T): Array<[keyof T, T[keyof T]]> {\n return map((key: keyof T) => [key, obj[key]], Object.keys(obj) as Array<keyof T>);\n}\n\nexport const apply = curry(<T extends Record<string, any>, K extends keyof T>(\n func: K | [K, ...any[]],\n items: T[]\n): any[] => {\n let method: K;\n let args: any[] = [];\n\n if (isArray(func)) {\n [method, ...args] = func as [K, ...any[]];\n } else {\n method = func;\n }\n\n return map((item: T) => {\n const fn = item[method];\n if (typeof fn === \"function\") {\n return fn.apply(item, args);\n }\n return fn;\n }, items);\n}) as unknown as Curried2<any, any[], any[]>;\n\nexport const assign = curry(<T extends Record<string, any>, U extends Record<string, any>>(\n obj1: T,\n obj2: U\n): U & T => {\n return { ...obj2, ...obj1 };\n}) as unknown as Curried2<Record<string, any>, Record<string, any>, Record<string, any>>;\n\nexport const extend = assign;\n\nexport function prop<K extends string | number | symbol>(property: K) {\n return function <T extends Record<K, any>>(obj: T): T[K] {\n return obj[property];\n };\n}\n\nexport const pluck = curry(<T, K extends keyof T>(property: K, items: T[]): Array<T[K]> => {\n return map(prop(property), items);\n}) as unknown as Curried2<any, any[], any[]>;\n","export function identity<T>(value: T): T {\n return value;\n}\n\nexport function constant<T>(value: T): () => T {\n return () => value;\n}\n\nexport function tap<T>(fn: (value: T) => void) {\n return (value: T): T => {\n fn(value);\n return value;\n };\n}\n","import type { UnaryFn } from \"./types\";\n\nexport function pipe<A>(value: A): A;\nexport function pipe<A, B>(value: A, fn1: UnaryFn<A, B>): B;\nexport function pipe<A, B, C>(value: A, fn1: UnaryFn<A, B>, fn2: UnaryFn<B, C>): C;\nexport function pipe<A, B, C, D>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>\n): D;\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>\n): E;\nexport function pipe<A, B, C, D, E, F>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>,\n fn5: UnaryFn<E, F>\n): F;\nexport function pipe(value: any, ...fns: UnaryFn<any, any>[]): any {\n let result = value;\n for (let i = 0; i < fns.length; i++) {\n result = fns[i]!(result);\n }\n return result;\n}\n\nexport function flow<A, B>(fn1: UnaryFn<A, B>): UnaryFn<A, B>;\nexport function flow<A, B, C>(fn1: UnaryFn<A, B>, fn2: UnaryFn<B, C>): UnaryFn<A, C>;\nexport function flow<A, B, C, D>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>\n): UnaryFn<A, D>;\nexport function flow<A, B, C, D, E>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>\n): UnaryFn<A, E>;\nexport function flow<A, B, C, D, E, F>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>,\n fn5: UnaryFn<E, F>\n): UnaryFn<A, F>;\nexport function flow(...fns: UnaryFn<any, any>[]): UnaryFn<any, any> {\n return (value: any) => {\n let result = value;\n for (let i = 0; i < fns.length; i++) {\n result = fns[i]!(result);\n }\n return result;\n };\n}\n","import type { Curried2, Curried3 } from \"./types\";\nimport { curry } from \"./curry\";\n\nexport const pick = curry(<T extends object, K extends keyof T>(\n keys: K[],\n obj: T\n): Pick<T, K> => {\n const result = {} as Pick<T, K>;\n keys.forEach((key) => {\n if (key in obj) {\n result[key] = obj[key];\n }\n });\n return result;\n}) as unknown as Curried2<string[], any, any>;\n\nexport const omit = curry(<T extends object, K extends keyof T>(\n keys: K[],\n obj: T\n): Omit<T, K> => {\n const result = { ...obj } as any;\n keys.forEach((key) => {\n delete result[key];\n });\n return result as Omit<T, K>;\n}) as unknown as Curried2<string[], any, any>;\n\nexport const path = curry(<T = any>(pathArray: Array<string | number>, obj: any): T | undefined => {\n let current = obj;\n for (const key of pathArray) {\n if (current == null) {\n return undefined;\n }\n current = current[key];\n }\n return current as T;\n}) as unknown as Curried2<Array<string | number>, any, any>;\n\nexport const assoc = curry(<T extends object, K extends keyof T>(\n key: K,\n value: T[K],\n obj: T\n): T => {\n return { ...obj, [key]: value };\n}) as unknown as Curried3<string, any, any, any>;\n\nexport const dissoc = curry(<T extends object, K extends keyof T>(key: K, obj: T): Omit<T, K> => {\n const result = { ...obj } as any;\n delete result[key];\n return result as Omit<T, K>;\n}) as unknown as Curried2<string, any, any>;\n","import type { Curried2, Curried3 } from \"./types\";\nimport { curry } from \"./curry\";\nimport { each } from \"./array\";\nimport { exists, isArray } from \"./typeChecks\";\n\nexport const flatMap = curry(<T, U>(fn: (value: T, index: number) => U[], items: T[]): U[] => {\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n const input = items;\n const length = input.length;\n const result: U[] = [];\n const mapper = fn;\n for (let i = 0; i < length; i++) {\n const mapped = mapper(input[i]!, i);\n if (!exists(mapped) || !isArray(mapped)) {\n continue;\n }\n const mappedItems = mapped;\n for (let j = 0; j < mappedItems.length; j++) {\n result.push(mappedItems[j]!);\n }\n }\n return result;\n}) as unknown as Curried2<(value: any, index: number) => any[], any[], any[]>;\n\nexport const chain = flatMap;\n\nexport const flatten = <T>(items: T[][]): T[] => {\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n const input = items;\n const result: T[] = [];\n for (let i = 0; i < input.length; i++) {\n const subArray = input[i]!;\n if (!exists(subArray) || !isArray(subArray)) {\n continue;\n }\n for (let j = 0; j < subArray.length; j++) {\n result.push(subArray[j]!);\n }\n }\n return result;\n};\n\nexport const zip = curry(<T, U>(arr1: T[], arr2: U[]): Array<[T, U]> => {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n for (let i = 0; i < length; i++) {\n result.push([arr1[i]!, arr2[i]!]);\n }\n return result;\n}) as unknown as Curried2<any[], any[], Array<[any, any]>>;\n\nexport const zipWith = curry(<T, U, R>(\n fn: (a: T, b: U) => R,\n arr1: T[],\n arr2: U[]\n): R[] => {\n const length = Math.min(arr1.length, arr2.length);\n const result = new Array<R>(length);\n for (let i = 0; i < length; i++) {\n result[i] = fn(arr1[i]!, arr2[i]!);\n }\n return result;\n}) as unknown as Curried3<(a: any, b: any) => any, any[], any[], any[]>;\n\nexport const uniq = <T>(items: T[]): T[] => {\n return Array.from(new Set(items));\n};\n\nexport const uniqBy = curry(<T, K>(fn: (value: T) => K, items: T[]): T[] => {\n const seen = new Set<K>();\n const result: T[] = [];\n each((item: T) => {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }, items);\n return result;\n}) as unknown as Curried2<(value: any) => any, any[], any[]>;\n","import type { Curried2, Curried3, UnaryFn } from \"./types\";\nimport { curry } from \"./curry\";\n\nexport const mapAsync = curry(async <T, U>(\n fn: (value: T, index: number) => Promise<U>,\n items: T[]\n): Promise<U[]> => {\n const length = items.length;\n const promises = new Array<Promise<U>>(length);\n for (let i = 0; i < length; i++) {\n promises[i] = fn(items[i]!, i);\n }\n return Promise.all(promises);\n}) as unknown as Curried2<(value: any, index: number) => Promise<any>, any[], Promise<any[]>>;\n\nexport const filterAsync = curry(async <T>(\n predicate: (value: T, index: number) => Promise<boolean>,\n items: T[]\n): Promise<T[]> => {\n const length = items.length;\n const promises = new Array<Promise<boolean>>(length);\n for (let i = 0; i < length; i++) {\n promises[i] = predicate(items[i]!, i);\n }\n const results = await Promise.all(promises);\n const filtered: T[] = [];\n for (let i = 0; i < length; i++) {\n if (results[i]) {\n filtered.push(items[i]!);\n }\n }\n return filtered;\n}) as unknown as Curried2<(value: any, index: number) => Promise<boolean>, any[], Promise<any[]>>;\n\nexport const reduceAsync = curry(async <T>(\n fn: (accumulator: T, value: T, index: number) => Promise<T>,\n items: T[]\n): Promise<T> => {\n if (!items || items.length === 0) {\n throw new Error(\"fjs Error: Cannot reduce empty array without initial value\");\n }\n let accumulator: any = items[0]!;\n for (let i = 1; i < items.length; i++) {\n accumulator = (await fn(accumulator, items[i]!, i)) as T;\n }\n return accumulator;\n}) as unknown as Curried2<(accumulator: any, value: any, index: number) => Promise<any>, any[], Promise<any>>;\n\nexport const foldAsync = curry(async <T, U>(\n fn: (accumulator: U, value: T, index: number) => Promise<U>,\n initial: U,\n items: T[]\n): Promise<U> => {\n let accumulator = initial;\n for (let i = 0; i < items.length; i++) {\n accumulator = await fn(accumulator, items[i]!, i);\n }\n return accumulator;\n}) as unknown as Curried3<\n (accumulator: any, value: any, index: number) => Promise<any>,\n any,\n any[],\n Promise<any>\n>;\n\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items: T[]\n): Promise<R>;\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R\n): (items: T[]) => Promise<R>;\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items?: T[]\n): Promise<R> | ((items: T[]) => Promise<R>) {\n if (arguments.length < 5) {\n return (next: T[]) => mapFilterReduceAsync(mapFn, filterFn, reduceFn, initial, next);\n }\n return (async () => {\n const input = items as T[];\n let accumulator = initial;\n for (let i = 0; i < input.length; i++) {\n const mapped = await mapFn(input[i]!, i);\n const keep = await filterFn(mapped, i);\n if (keep) {\n accumulator = await reduceFn(accumulator, mapped, i);\n }\n }\n return accumulator;\n })();\n}\n\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items: T[]\n): Promise<R>;\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R\n): (items: T[]) => Promise<R>;\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items?: T[]\n): Promise<R> | ((items: T[]) => Promise<R>) {\n if (arguments.length < 5) {\n return (next: T[]) => mapFilterReduceAsyncParallel(mapFn, filterFn, reduceFn, initial, next);\n }\n return (async () => {\n const input = items as T[];\n const length = input.length;\n const mappedPromises = new Array<Promise<U>>(length);\n for (let i = 0; i < length; i++) {\n mappedPromises[i] = Promise.resolve(mapFn(input[i]!, i));\n }\n const mapped = await Promise.all(mappedPromises);\n const filterPromises = new Array<Promise<boolean>>(length);\n for (let i = 0; i < length; i++) {\n filterPromises[i] = Promise.resolve(filterFn(mapped[i]!, i));\n }\n const keep = await Promise.all(filterPromises);\n let accumulator = initial;\n for (let i = 0; i < length; i++) {\n if (keep[i]) {\n accumulator = await reduceFn(accumulator, mapped[i]!, i);\n }\n }\n return accumulator;\n })();\n}\n\nexport const eachAsync = curry(async <T>(\n fn: (value: T, index: number) => Promise<void>,\n items: T[]\n): Promise<void> => {\n for (let i = 0; i < items.length; i++) {\n await fn(items[i]!, i);\n }\n}) as unknown as Curried2<(value: any, index: number) => Promise<void>, any[], Promise<void>>;\n\nexport async function pipeAsync<A>(value: A): Promise<A>;\nexport async function pipeAsync<A, B>(value: A, fn1: UnaryFn<A, Promise<B>>): Promise<B>;\nexport async function pipeAsync<A, B, C>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>\n): Promise<C>;\nexport async function pipeAsync<A, B, C, D>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>\n): Promise<D>;\nexport async function pipeAsync<A, B, C, D, E>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>,\n fn4: UnaryFn<D, Promise<E>>\n): Promise<E>;\nexport async function pipeAsync(value: any, ...fns: UnaryFn<any, Promise<any>>[]): Promise<any> {\n let result = value;\n for (const fn of fns) {\n result = await fn(result);\n }\n return result;\n}\n\nexport function flowAsync<A, B>(fn1: UnaryFn<A, Promise<B>>): UnaryFn<A, Promise<B>>;\nexport function flowAsync<A, B, C>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>\n): UnaryFn<A, Promise<C>>;\nexport function flowAsync<A, B, C, D>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>\n): UnaryFn<A, Promise<D>>;\nexport function flowAsync<A, B, C, D, E>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>,\n fn4: UnaryFn<D, Promise<E>>\n): UnaryFn<A, Promise<E>>;\nexport function flowAsync(...fns: UnaryFn<any, Promise<any>>[]): UnaryFn<any, Promise<any>> {\n return async (value: any) => {\n let result = value;\n for (const fn of fns) {\n result = await fn(result);\n }\n return result;\n };\n}\n\nexport const composeAsync = (...fns: UnaryFn<any, Promise<any>>[]): UnaryFn<any, Promise<any>> => {\n return async (value: any) => {\n let result = value;\n for (let i = fns.length - 1; i >= 0; i--) {\n result = await fns[i]!(result);\n }\n return result;\n };\n};\n","import { curry } from \"./curry\";\nimport {\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct\n} from \"./array\";\nimport { compose } from \"./composition\";\nimport { toArray, apply, assign, extend, prop, pluck } from \"./object\";\nimport {\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy\n} from \"./typeChecks\";\nimport { identity, constant, tap } from \"./utilities\";\nimport { pipe, flow } from \"./pipe\";\nimport { pick, omit, path, assoc, dissoc } from \"./objectOps\";\nimport { flatMap, chain, flatten, zip, zipWith, uniq, uniqBy } from \"./arrayOps\";\nimport {\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n} from \"./async\";\n\nexport { curry } from \"./curry\";\n\nexport {\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct\n} from \"./array\";\n\nexport { compose } from \"./composition\";\n\nexport { toArray, apply, assign, extend, prop, pluck } from \"./object\";\n\nexport {\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy\n} from \"./typeChecks\";\n\nexport { identity, constant, tap } from \"./utilities\";\n\nexport { pipe, flow } from \"./pipe\";\n\nexport { pick, omit, path, assoc, dissoc } from \"./objectOps\";\n\nexport { flatMap, chain, flatten, zip, zipWith, uniq, uniqBy } from \"./arrayOps\";\n\nexport {\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n} from \"./async\";\n\nexport type {\n Predicate,\n Comparator,\n Mapper,\n Reducer,\n UnaryFn,\n Curried2,\n Curried3,\n Curried4,\n AnyFunction,\n CurriedFunction\n} from \"./types\";\n\nexport const fjs = {\n curry,\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct,\n compose,\n toArray,\n apply,\n assign,\n extend,\n prop,\n pluck,\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy,\n identity,\n constant,\n tap,\n pipe,\n flow,\n pick,\n omit,\n path,\n assoc,\n dissoc,\n flatMap,\n chain,\n flatten,\n zip,\n zipWith,\n uniq,\n uniqBy,\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n};\n"]}
{"version":3,"sources":["../src/typeChecks.ts","../src/curry.ts","../src/array.ts","../src/composition.ts","../src/object.ts","../src/utilities.ts","../src/pipe.ts","../src/objectOps.ts","../src/arrayOps.ts","../src/async.ts","../src/index.ts"],"names":["truthy","falsy","unique"],"mappings":"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","file":"index.cjs","sourcesContent":["export function isFunction(obj: unknown): obj is (...args: any[]) => unknown {\n return !!(obj && (obj as any).constructor && (obj as any).call && (obj as any).apply);\n}\n\nexport function isObject(obj: unknown): obj is object {\n return isFunction(obj) || (!!obj && typeof obj === \"object\");\n}\n\nexport function isArray<T = unknown>(obj: unknown): obj is T[] {\n return Array.isArray(obj);\n}\n\nexport function isArguments(obj: unknown): obj is IArguments {\n return Object.prototype.toString.call(obj) === \"[object Arguments]\";\n}\n\nexport function isDate(obj: unknown): obj is Date {\n return Object.prototype.toString.call(obj) === \"[object Date]\";\n}\n\nexport function isNumber(obj: unknown): obj is number {\n return Object.prototype.toString.call(obj) === \"[object Number]\";\n}\n\nexport function isRegExp(obj: unknown): obj is RegExp {\n return Object.prototype.toString.call(obj) === \"[object RegExp]\";\n}\n\nexport function isString(obj: unknown): obj is string {\n return Object.prototype.toString.call(obj) === \"[object String]\";\n}\n\nexport function exists<T>(obj: T | null | undefined): obj is T {\n return obj != null;\n}\n\nexport function truthy<T>(obj: T | null | undefined | false): obj is T {\n return exists(obj) && obj !== false;\n}\n\nexport function falsy(obj: unknown): obj is null | undefined | false {\n return !truthy(obj);\n}\n","import type { AnyFunction, CurriedFunction } from \"./types\";\nimport { isFunction } from \"./typeChecks\";\n\nexport function curry<T extends AnyFunction>(func: T): CurriedFunction<T> {\n if (!isFunction(func)) {\n throw new Error(\"fjs Error: Invalid function\");\n }\n\n if (func.length === 2) {\n const curried2 = function (a: any, b?: any): any {\n if (arguments.length >= 2) {\n return func(a, b);\n }\n return (next: any) => curried2(a, next);\n };\n return curried2 as CurriedFunction<T>;\n }\n\n if (func.length === 3) {\n const curried3 = function (a: any, b?: any, c?: any): any {\n if (arguments.length >= 3) {\n return func(a, b, c);\n }\n if (arguments.length === 2) {\n return (next: any) => curried3(a, b, next);\n }\n return function (nextB: any, nextC?: any): any {\n if (arguments.length >= 2) {\n return curried3(a, nextB, nextC);\n }\n return (next: any) => curried3(a, nextB, next);\n };\n };\n return curried3 as CurriedFunction<T>;\n }\n\n function curried(...args: any[]): any {\n if (args.length === 0) {\n return curried;\n }\n\n if (args.length >= func.length) {\n return func(...args.slice(0, func.length));\n }\n\n return (...nextArgs: any[]) => curried(...args, ...nextArgs);\n }\n\n return curried as CurriedFunction<T>;\n}\n","import type { Mapper, Predicate, Reducer, Comparator } from \"./types\";\nimport { isArray, exists } from \"./typeChecks\";\n\nconst HARD_RETURN = Symbol(\"hardReturn\");\n\nconst eachArray = <T>(iterator: (value: T, index: number) => any, items: T[]): void => {\n for (let i = 0; i < items.length; i++) {\n if (iterator(items[i]!, i) === HARD_RETURN) {\n return;\n }\n }\n};\n\nconst mapArray = <T, U>(iterator: Mapper<T, U>, items: T[]): U[] => {\n const length = items.length;\n const mapped = new Array<U>(length);\n const fn = iterator;\n if (length > 0 && typeof items[0] === \"number\" && fn.length === 1) {\n for (let i = 0; i < length; i++) {\n mapped[i] = fn(items[i]!, i);\n }\n return mapped;\n }\n for (let i = 0; i < length; i++) {\n mapped[i] = fn(items[i]!, i);\n }\n return mapped;\n};\n\nconst foldArray = <T, U>(iterator: Reducer<T, U>, cumulate: U, items: T[]): U => {\n let acc = cumulate;\n if (items.length > 0 && typeof items[0] === \"number\" && typeof acc === \"number\") {\n let numberAcc = acc as unknown as number;\n for (let i = 0; i < items.length; i++) {\n numberAcc = iterator(numberAcc as unknown as U, items[i]!, i) as unknown as number;\n }\n return numberAcc as unknown as U;\n }\n for (let i = 0; i < items.length; i++) {\n acc = iterator(acc, items[i]!, i);\n }\n return acc;\n};\n\nconst reduceArray = <T>(iterator: Reducer<T, T>, items: T[]): T => {\n let acc = items[0];\n if (items.length > 1 && typeof acc === \"number\" && typeof items[1] === \"number\") {\n let numberAcc = acc as unknown as number;\n for (let i = 1; i < items.length; i++) {\n numberAcc = iterator(numberAcc as unknown as T, items[i]!, i - 1) as unknown as number;\n }\n return numberAcc as unknown as T;\n }\n for (let i = 1; i < items.length; i++) {\n acc = iterator(acc as T, items[i]!, i - 1);\n }\n return acc as T;\n};\n\nconst filterArray = <T>(iterator: Predicate<T>, items: T[]): T[] => {\n const filtered: T[] = [];\n const length = items.length;\n const fn = iterator;\n if (length > 0 && typeof items[0] === \"number\" && fn.length === 1) {\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n }\n if (fn.length >= 2) {\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n }\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n};\n\nexport function each<T>(iterator: (value: T, index: number) => any, items: T[]): void;\nexport function each<T>(iterator: (value: T, index: number) => any): (items: T[]) => void;\nexport function each<T>(iterator: (value: T, index: number) => any, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => each(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return;\n }\n eachArray(iterator, items);\n}\n\nexport function map<T, U>(iterator: Mapper<T, U>, items: T[]): U[];\nexport function map<T, U>(iterator: Mapper<T, U>): (items: T[]) => U[];\nexport function map<T, U>(iterator: Mapper<T, U>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => map(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n return mapArray(iterator, items);\n}\n\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate: U, items: T[]): U;\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate: U): (items: T[]) => U;\nexport function fold<T, U>(\n iterator: Reducer<T, U>\n): {\n (cumulate: U, items: T[]): U;\n (cumulate: U): (items: T[]) => U;\n};\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate?: U, items?: T[]): any {\n if (arguments.length >= 3) {\n if (!exists(items) || !isArray(items)) {\n return cumulate as U;\n }\n return foldArray(iterator, cumulate as U, items);\n }\n if (arguments.length === 2) {\n return (next: T[]) => fold(iterator, cumulate as U, next);\n }\n return function (nextCumulate: U, nextItems?: T[]): any {\n if (arguments.length >= 2) {\n return fold(iterator, nextCumulate, nextItems as T[]);\n }\n return (next: T[]) => fold(iterator, nextCumulate, next);\n };\n}\n\nexport const foldl = fold;\n\nexport function reduce<T>(iterator: Reducer<T, T>, items: T[]): T;\nexport function reduce<T>(iterator: Reducer<T, T>): (items: T[]) => T;\nexport function reduce<T>(iterator: Reducer<T, T>, items?: T[]): T | ((items: T[]) => T) {\n if (arguments.length < 2) {\n return (next: T[]) => reduce(iterator, next);\n }\n if (!exists(items) || !isArray(items) || items.length === 0) {\n throw new Error(\"fjs Error: Cannot reduce empty array without initial value\");\n }\n return reduceArray(iterator, items);\n}\n\nexport const reducel = reduce;\nexport const foldll = reduce;\n\nexport function clone<T>(items: T[]): T[] {\n const input = items ?? [];\n const result = new Array<T>(input.length);\n for (let i = 0; i < input.length; i++) {\n result[i] = input[i]!;\n }\n return result;\n}\n\nexport function first<T>(iterator: Predicate<T>, items: T[]): T | undefined;\nexport function first<T>(iterator: Predicate<T>): (items: T[]) => T | undefined;\nexport function first<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => first(iterator, next);\n }\n let result: T | undefined;\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n result = item;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return result;\n}\n\nexport const head = first;\nexport const take = first;\n\nexport function rest<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function rest<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function rest<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => rest(iterator, next);\n }\n const result = select(iterator, items as T[]);\n result.shift();\n return result;\n}\n\nexport const tail = rest;\nexport const drop = rest;\n\nexport function last<T>(iterator: Predicate<T>, items: T[]): T | undefined;\nexport function last<T>(iterator: Predicate<T>): (items: T[]) => T | undefined;\nexport function last<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => last(iterator, next);\n }\n const itemsClone = clone(items as T[]);\n return first(iterator, itemsClone.reverse());\n}\n\nexport function every<T>(iterator: Predicate<T>, items: T[]): boolean;\nexport function every<T>(iterator: Predicate<T>): (items: T[]) => boolean;\nexport function every<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => every(iterator, next);\n }\n let isEvery = true;\n each((item: T, index: number) => {\n if (!iterator(item, index)) {\n isEvery = false;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return isEvery;\n}\n\nexport const all = every;\n\nexport function any<T>(iterator: Predicate<T>, items: T[]): boolean;\nexport function any<T>(iterator: Predicate<T>): (items: T[]) => boolean;\nexport function any<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => any(iterator, next);\n }\n let isAny = false;\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n isAny = true;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return isAny;\n}\n\nexport const contains = any;\n\nexport function select<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function select<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function select<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => select(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n return filterArray(iterator, items);\n}\n\nexport const filter = select;\n\nexport function best<T>(iterator: Comparator<T>, items: T[]): T | undefined;\nexport function best<T>(iterator: Comparator<T>): (items: T[]) => T | undefined;\nexport function best<T>(iterator: Comparator<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => best(iterator, next);\n }\n const compare = (arg1: T, arg2: T): T => {\n return iterator(arg1, arg2) ? arg1 : arg2;\n };\n return reduce(compare, items as T[]);\n}\n\nexport function whilst<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function whilst<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function whilst<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => whilst(iterator, next);\n }\n const result: T[] = [];\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n result.push(item);\n } else {\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return result;\n}\n\nexport function partition<T>(iterator: Predicate<T>, items: T[]): [T[], T[]];\nexport function partition<T>(iterator: Predicate<T>): (items: T[]) => [T[], T[]];\nexport function partition<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => partition(iterator, next);\n }\n const truthy: T[] = [];\n const falsy: T[] = [];\n each((item: T, index: number) => {\n (iterator(item, index) ? truthy : falsy).push(item);\n }, items as T[]);\n return [truthy, falsy];\n}\n\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K,\n items: T[]\n): Record<K, T[]>;\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K\n): (items: T[]) => Record<K, T[]>;\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K,\n items?: T[]\n): any {\n if (arguments.length < 2) {\n return (next: T[]) => group(iterator, next);\n }\n const result = {} as Record<K, T[]>;\n each((item: T) => {\n const key = iterator(item);\n const existing = result[key];\n if (existing) {\n existing.push(item);\n return;\n }\n result[key] = [item];\n }, items as T[]);\n return result;\n}\n\nexport function shuffle<T>(items: T[]): T[] {\n const result = clone(items);\n for (let i = 0; i < result.length; i++) {\n const j = Math.floor(Math.random() * (i + 1));\n const t = result[i]!;\n result[i] = result[j]!;\n result[j] = t;\n }\n return result;\n}\n\nexport const strictEquals = <T>(a: T, b: T): boolean => a === b;\n\nexport function nub<T>(comparator: Comparator<T>, items: T[]): T[];\nexport function nub<T>(comparator: Comparator<T>): (items: T[]) => T[];\nexport function nub<T>(comparator: Comparator<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => nub(comparator, next);\n }\n const input = items as T[];\n if (comparator === strictEquals) {\n return Array.from(new Set(input));\n }\n const unique: T[] = input.length > 0 ? [input[0]!] : [];\n each((item: T) => {\n if (!any((value: T) => comparator(item, value), unique)) {\n unique.push(item);\n }\n }, input);\n return unique;\n}\n\nexport const unique = nub;\nexport const distinct = nub;\n","import type { UnaryFn, AnyFunction } from \"./types\";\nimport { isFunction } from \"./typeChecks\";\nimport { any } from \"./array\";\n\nexport function compose<A>(f: UnaryFn<A, A>): UnaryFn<A, A>;\nexport function compose<A, B>(f: UnaryFn<B, A>, g: UnaryFn<A, B>): UnaryFn<A, A>;\nexport function compose<A, B, C>(\n f: UnaryFn<C, A>,\n g: UnaryFn<B, C>,\n h: UnaryFn<A, B>\n): UnaryFn<A, A>;\nexport function compose<A, B, C, D>(\n f: UnaryFn<D, A>,\n g: UnaryFn<C, D>,\n h: UnaryFn<B, C>,\n i: UnaryFn<A, B>\n): UnaryFn<A, A>;\nexport function compose(...funcs: UnaryFn<any, any>[]): UnaryFn<any, any>;\nexport function compose(...funcs: UnaryFn<any, any>[]): UnaryFn<any, any> {\n const anyInvalid = any((func: unknown) => !isFunction(func));\n const total = funcs.length;\n\n if (anyInvalid(funcs)) {\n throw new Error(\"fjs Error: Invalid function to compose\");\n }\n\n return function (this: any, ...args: any[]) {\n let result: any = (funcs[total - 1] as AnyFunction).apply(this, args);\n for (let i = total - 2; i >= 0; i--) {\n result = (funcs[i] as AnyFunction).call(this, result);\n }\n return result;\n };\n}\n","import type { Curried2 } from \"./types\";\nimport { curry } from \"./curry\";\nimport { map } from \"./array\";\nimport { isArray } from \"./typeChecks\";\n\nexport function toArray<T extends Record<string, any>>(obj: T): Array<[keyof T, T[keyof T]]> {\n return map((key: keyof T) => [key, obj[key]], Object.keys(obj) as Array<keyof T>);\n}\n\nexport const apply = curry(<T extends Record<string, any>, K extends keyof T>(\n func: K | [K, ...any[]],\n items: T[]\n): any[] => {\n let method: K;\n let args: any[] = [];\n\n if (isArray(func)) {\n [method, ...args] = func as [K, ...any[]];\n } else {\n method = func;\n }\n\n return map((item: T) => {\n const fn = item[method];\n if (typeof fn === \"function\") {\n return fn.apply(item, args);\n }\n return fn;\n }, items);\n}) as unknown as Curried2<any, any[], any[]>;\n\nexport const assign = curry(<T extends Record<string, any>, U extends Record<string, any>>(\n obj1: T,\n obj2: U\n): U & T => {\n return { ...obj2, ...obj1 };\n}) as unknown as Curried2<Record<string, any>, Record<string, any>, Record<string, any>>;\n\nexport const extend = assign;\n\nexport function prop<K extends string | number | symbol>(property: K) {\n return function <T extends Record<K, any>>(obj: T): T[K] {\n return obj[property];\n };\n}\n\nexport const pluck = curry(<T, K extends keyof T>(property: K, items: T[]): Array<T[K]> => {\n return map(prop(property), items);\n}) as unknown as Curried2<any, any[], any[]>;\n","export function identity<T>(value: T): T {\n return value;\n}\n\nexport function constant<T>(value: T): () => T {\n return () => value;\n}\n\nexport function tap<T>(fn: (value: T) => void) {\n return (value: T): T => {\n fn(value);\n return value;\n };\n}\n","import type { UnaryFn } from \"./types\";\n\nexport function pipe<A>(value: A): A;\nexport function pipe<A, B>(value: A, fn1: UnaryFn<A, B>): B;\nexport function pipe<A, B, C>(value: A, fn1: UnaryFn<A, B>, fn2: UnaryFn<B, C>): C;\nexport function pipe<A, B, C, D>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>\n): D;\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>\n): E;\nexport function pipe<A, B, C, D, E, F>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>,\n fn5: UnaryFn<E, F>\n): F;\nexport function pipe(value: any, ...fns: UnaryFn<any, any>[]): any {\n let result = value;\n for (let i = 0; i < fns.length; i++) {\n result = fns[i]!(result);\n }\n return result;\n}\n\nexport function flow<A, B>(fn1: UnaryFn<A, B>): UnaryFn<A, B>;\nexport function flow<A, B, C>(fn1: UnaryFn<A, B>, fn2: UnaryFn<B, C>): UnaryFn<A, C>;\nexport function flow<A, B, C, D>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>\n): UnaryFn<A, D>;\nexport function flow<A, B, C, D, E>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>\n): UnaryFn<A, E>;\nexport function flow<A, B, C, D, E, F>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>,\n fn5: UnaryFn<E, F>\n): UnaryFn<A, F>;\nexport function flow(...fns: UnaryFn<any, any>[]): UnaryFn<any, any> {\n return (value: any) => {\n let result = value;\n for (let i = 0; i < fns.length; i++) {\n result = fns[i]!(result);\n }\n return result;\n };\n}\n","import type { Curried2, Curried3 } from \"./types\";\nimport { curry } from \"./curry\";\n\nexport const pick = curry(<T extends object, K extends keyof T>(\n keys: K[],\n obj: T\n): Pick<T, K> => {\n const result = {} as Pick<T, K>;\n keys.forEach((key) => {\n if (key in obj) {\n result[key] = obj[key];\n }\n });\n return result;\n}) as unknown as Curried2<string[], any, any>;\n\nexport const omit = curry(<T extends object, K extends keyof T>(\n keys: K[],\n obj: T\n): Omit<T, K> => {\n const result = { ...obj } as any;\n keys.forEach((key) => {\n delete result[key];\n });\n return result as Omit<T, K>;\n}) as unknown as Curried2<string[], any, any>;\n\nexport const path = curry(<T = any>(pathArray: Array<string | number>, obj: any): T | undefined => {\n let current = obj;\n for (const key of pathArray) {\n if (current == null) {\n return undefined;\n }\n current = current[key];\n }\n return current as T;\n}) as unknown as Curried2<Array<string | number>, any, any>;\n\nexport const assoc = curry(<T extends object, K extends keyof T>(\n key: K,\n value: T[K],\n obj: T\n): T => {\n return { ...obj, [key]: value };\n}) as unknown as Curried3<string, any, any, any>;\n\nexport const dissoc = curry(<T extends object, K extends keyof T>(key: K, obj: T): Omit<T, K> => {\n const result = { ...obj } as any;\n delete result[key];\n return result as Omit<T, K>;\n}) as unknown as Curried2<string, any, any>;\n","import type { Curried2, Curried3 } from \"./types\";\nimport { curry } from \"./curry\";\nimport { each } from \"./array\";\nimport { exists, isArray } from \"./typeChecks\";\n\nexport const flatMap = curry(<T, U>(fn: (value: T, index: number) => U[], items: T[]): U[] => {\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n const input = items;\n const length = input.length;\n const result: U[] = [];\n const mapper = fn;\n for (let i = 0; i < length; i++) {\n const mapped = mapper(input[i]!, i);\n if (!exists(mapped) || !isArray(mapped)) {\n continue;\n }\n const mappedItems = mapped;\n for (let j = 0; j < mappedItems.length; j++) {\n result.push(mappedItems[j]!);\n }\n }\n return result;\n}) as unknown as Curried2<(value: any, index: number) => any[], any[], any[]>;\n\nexport const chain = flatMap;\n\nexport const flatten = <T>(items: T[][]): T[] => {\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n const input = items;\n const result: T[] = [];\n for (let i = 0; i < input.length; i++) {\n const subArray = input[i]!;\n if (!exists(subArray) || !isArray(subArray)) {\n continue;\n }\n for (let j = 0; j < subArray.length; j++) {\n result.push(subArray[j]!);\n }\n }\n return result;\n};\n\nexport const zip = curry(<T, U>(arr1: T[], arr2: U[]): Array<[T, U]> => {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n for (let i = 0; i < length; i++) {\n result.push([arr1[i]!, arr2[i]!]);\n }\n return result;\n}) as unknown as Curried2<any[], any[], Array<[any, any]>>;\n\nexport const zipWith = curry(<T, U, R>(\n fn: (a: T, b: U) => R,\n arr1: T[],\n arr2: U[]\n): R[] => {\n const length = Math.min(arr1.length, arr2.length);\n const result = new Array<R>(length);\n for (let i = 0; i < length; i++) {\n result[i] = fn(arr1[i]!, arr2[i]!);\n }\n return result;\n}) as unknown as Curried3<(a: any, b: any) => any, any[], any[], any[]>;\n\nexport const uniq = <T>(items: T[]): T[] => {\n return Array.from(new Set(items));\n};\n\nexport const uniqBy = curry(<T, K>(fn: (value: T) => K, items: T[]): T[] => {\n const seen = new Set<K>();\n const result: T[] = [];\n each((item: T) => {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }, items);\n return result;\n}) as unknown as Curried2<(value: any) => any, any[], any[]>;\n","import type { Curried2, Curried3, UnaryFn } from \"./types\";\nimport { curry } from \"./curry\";\n\nexport const mapAsync = curry(async <T, U>(\n fn: (value: T, index: number) => Promise<U>,\n items: T[]\n): Promise<U[]> => {\n const length = items.length;\n const promises = new Array<Promise<U>>(length);\n for (let i = 0; i < length; i++) {\n promises[i] = fn(items[i]!, i);\n }\n return Promise.all(promises);\n}) as unknown as Curried2<(value: any, index: number) => Promise<any>, any[], Promise<any[]>>;\n\nexport const filterAsync = curry(async <T>(\n predicate: (value: T, index: number) => Promise<boolean>,\n items: T[]\n): Promise<T[]> => {\n const length = items.length;\n const promises = new Array<Promise<boolean>>(length);\n for (let i = 0; i < length; i++) {\n promises[i] = predicate(items[i]!, i);\n }\n const results = await Promise.all(promises);\n const filtered: T[] = [];\n for (let i = 0; i < length; i++) {\n if (results[i]) {\n filtered.push(items[i]!);\n }\n }\n return filtered;\n}) as unknown as Curried2<(value: any, index: number) => Promise<boolean>, any[], Promise<any[]>>;\n\nexport const reduceAsync = curry(async <T>(\n fn: (accumulator: T, value: T, index: number) => Promise<T>,\n items: T[]\n): Promise<T> => {\n if (!items || items.length === 0) {\n throw new Error(\"fjs Error: Cannot reduce empty array without initial value\");\n }\n let accumulator: any = items[0]!;\n for (let i = 1; i < items.length; i++) {\n accumulator = (await fn(accumulator, items[i]!, i)) as T;\n }\n return accumulator;\n}) as unknown as Curried2<(accumulator: any, value: any, index: number) => Promise<any>, any[], Promise<any>>;\n\nexport const foldAsync = curry(async <T, U>(\n fn: (accumulator: U, value: T, index: number) => Promise<U>,\n initial: U,\n items: T[]\n): Promise<U> => {\n let accumulator = initial;\n for (let i = 0; i < items.length; i++) {\n accumulator = await fn(accumulator, items[i]!, i);\n }\n return accumulator;\n}) as unknown as Curried3<\n (accumulator: any, value: any, index: number) => Promise<any>,\n any,\n any[],\n Promise<any>\n>;\n\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items: T[]\n): Promise<R>;\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R\n): (items: T[]) => Promise<R>;\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items?: T[]\n): Promise<R> | ((items: T[]) => Promise<R>) {\n if (arguments.length < 5) {\n return (next: T[]) => mapFilterReduceAsync(mapFn, filterFn, reduceFn, initial, next);\n }\n return (async () => {\n const input = items as T[];\n let accumulator = initial;\n for (let i = 0; i < input.length; i++) {\n const mapped = await mapFn(input[i]!, i);\n const keep = await filterFn(mapped, i);\n if (keep) {\n accumulator = await reduceFn(accumulator, mapped, i);\n }\n }\n return accumulator;\n })();\n}\n\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items: T[]\n): Promise<R>;\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R\n): (items: T[]) => Promise<R>;\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items?: T[]\n): Promise<R> | ((items: T[]) => Promise<R>) {\n if (arguments.length < 5) {\n return (next: T[]) => mapFilterReduceAsyncParallel(mapFn, filterFn, reduceFn, initial, next);\n }\n return (async () => {\n const input = items as T[];\n const length = input.length;\n const mappedPromises = new Array<Promise<U>>(length);\n for (let i = 0; i < length; i++) {\n mappedPromises[i] = Promise.resolve(mapFn(input[i]!, i));\n }\n const mapped = await Promise.all(mappedPromises);\n const filterPromises = new Array<Promise<boolean>>(length);\n for (let i = 0; i < length; i++) {\n filterPromises[i] = Promise.resolve(filterFn(mapped[i]!, i));\n }\n const keep = await Promise.all(filterPromises);\n let accumulator = initial;\n for (let i = 0; i < length; i++) {\n if (keep[i]) {\n accumulator = await reduceFn(accumulator, mapped[i]!, i);\n }\n }\n return accumulator;\n })();\n}\n\nexport const eachAsync = curry(async <T>(\n fn: (value: T, index: number) => Promise<void>,\n items: T[]\n): Promise<void> => {\n for (let i = 0; i < items.length; i++) {\n await fn(items[i]!, i);\n }\n}) as unknown as Curried2<(value: any, index: number) => Promise<void>, any[], Promise<void>>;\n\nexport async function pipeAsync<A>(value: A): Promise<A>;\nexport async function pipeAsync<A, B>(value: A, fn1: UnaryFn<A, Promise<B>>): Promise<B>;\nexport async function pipeAsync<A, B, C>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>\n): Promise<C>;\nexport async function pipeAsync<A, B, C, D>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>\n): Promise<D>;\nexport async function pipeAsync<A, B, C, D, E>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>,\n fn4: UnaryFn<D, Promise<E>>\n): Promise<E>;\nexport async function pipeAsync(value: any, ...fns: UnaryFn<any, Promise<any>>[]): Promise<any> {\n let result = value;\n for (const fn of fns) {\n result = await fn(result);\n }\n return result;\n}\n\nexport function flowAsync<A, B>(fn1: UnaryFn<A, Promise<B>>): UnaryFn<A, Promise<B>>;\nexport function flowAsync<A, B, C>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>\n): UnaryFn<A, Promise<C>>;\nexport function flowAsync<A, B, C, D>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>\n): UnaryFn<A, Promise<D>>;\nexport function flowAsync<A, B, C, D, E>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>,\n fn4: UnaryFn<D, Promise<E>>\n): UnaryFn<A, Promise<E>>;\nexport function flowAsync(...fns: UnaryFn<any, Promise<any>>[]): UnaryFn<any, Promise<any>> {\n return async (value: any) => {\n let result = value;\n for (const fn of fns) {\n result = await fn(result);\n }\n return result;\n };\n}\n\nexport const composeAsync = (...fns: UnaryFn<any, Promise<any>>[]): UnaryFn<any, Promise<any>> => {\n return async (value: any) => {\n let result = value;\n for (let i = fns.length - 1; i >= 0; i--) {\n result = await fns[i]!(result);\n }\n return result;\n };\n};\n","import { curry } from \"./curry\";\nimport {\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct\n} from \"./array\";\nimport { compose } from \"./composition\";\nimport { toArray, apply, assign, extend, prop, pluck } from \"./object\";\nimport {\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy\n} from \"./typeChecks\";\nimport { identity, constant, tap } from \"./utilities\";\nimport { pipe, flow } from \"./pipe\";\nimport { pick, omit, path, assoc, dissoc } from \"./objectOps\";\nimport { flatMap, chain, flatten, zip, zipWith, uniq, uniqBy } from \"./arrayOps\";\nimport {\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n} from \"./async\";\n\nexport { curry } from \"./curry\";\n\nexport {\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct\n} from \"./array\";\n\nexport { compose } from \"./composition\";\n\nexport { toArray, apply, assign, extend, prop, pluck } from \"./object\";\n\nexport {\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy\n} from \"./typeChecks\";\n\nexport { identity, constant, tap } from \"./utilities\";\n\nexport { pipe, flow } from \"./pipe\";\n\nexport { pick, omit, path, assoc, dissoc } from \"./objectOps\";\n\nexport { flatMap, chain, flatten, zip, zipWith, uniq, uniqBy } from \"./arrayOps\";\n\nexport {\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n} from \"./async\";\n\nexport type {\n Predicate,\n Comparator,\n Mapper,\n Reducer,\n UnaryFn,\n Curried2,\n Curried3,\n Curried4,\n AnyFunction,\n CurriedFunction\n} from \"./types\";\n\nexport const fjs = {\n curry,\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct,\n compose,\n toArray,\n apply,\n assign,\n extend,\n prop,\n pluck,\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy,\n identity,\n constant,\n tap,\n pipe,\n flow,\n pick,\n omit,\n path,\n assoc,\n dissoc,\n flatMap,\n chain,\n flatten,\n zip,\n zipWith,\n uniq,\n uniqBy,\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n};\n"]}

@@ -42,14 +42,7 @@ // src/typeChecks.ts

if (func.length === 2) {
const curried2 = function(a, b, ...rest2) {
const curried2 = function(a, b) {
if (arguments.length >= 2) {
if (rest2.length === 0) {
return func(a, b);
}
let accumulated = func(a, b);
for (let i = 0; i < rest2.length; i++) {
accumulated = func(accumulated, rest2[i], i);
}
return accumulated;
return func(a, b);
}
return (next, ...more) => curried2(a, next, ...more);
return (next) => curried2(a, next);
};

@@ -59,21 +52,14 @@ return curried2;

if (func.length === 3) {
const curried3 = function(a, b, c, ...rest2) {
const curried3 = function(a, b, c) {
if (arguments.length >= 3) {
if (rest2.length === 0) {
return func(a, b, c);
}
let accumulated = func(a, b, c);
for (let i = 0; i < rest2.length; i++) {
accumulated = func(accumulated, rest2[i], i);
}
return accumulated;
return func(a, b, c);
}
if (arguments.length === 2) {
return (next, ...more) => curried3(a, b, next, ...more);
return (next) => curried3(a, b, next);
}
return function(nextB, nextC, ...more) {
return function(nextB, nextC) {
if (arguments.length >= 2) {
return curried3(a, nextB, nextC, ...more);
return curried3(a, nextB, nextC);
}
return (next, ...moreNext) => curried3(a, nextB, next, ...moreNext);
return (next) => curried3(a, nextB, next);
};

@@ -88,11 +74,3 @@ };

if (args.length >= func.length) {
if (args.length === func.length) {
return func(...args);
}
let accumulated = func(...args.slice(0, func.length));
const remaining = args.slice(func.length);
for (let i = 0; i < remaining.length; i++) {
accumulated = func(accumulated, remaining[i], i);
}
return accumulated;
return func(...args.slice(0, func.length));
}

@@ -99,0 +77,0 @@ return (...nextArgs) => curried(...args, ...nextArgs);

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/typeChecks.ts","../src/curry.ts","../src/array.ts","../src/composition.ts","../src/object.ts","../src/utilities.ts","../src/pipe.ts","../src/objectOps.ts","../src/arrayOps.ts","../src/async.ts","../src/index.ts"],"names":["rest","truthy","falsy","unique"],"mappings":"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","file":"index.js","sourcesContent":["export function isFunction(obj: unknown): obj is (...args: any[]) => unknown {\n return !!(obj && (obj as any).constructor && (obj as any).call && (obj as any).apply);\n}\n\nexport function isObject(obj: unknown): obj is object {\n return isFunction(obj) || (!!obj && typeof obj === \"object\");\n}\n\nexport function isArray<T = unknown>(obj: unknown): obj is T[] {\n return Array.isArray(obj);\n}\n\nexport function isArguments(obj: unknown): obj is IArguments {\n return Object.prototype.toString.call(obj) === \"[object Arguments]\";\n}\n\nexport function isDate(obj: unknown): obj is Date {\n return Object.prototype.toString.call(obj) === \"[object Date]\";\n}\n\nexport function isNumber(obj: unknown): obj is number {\n return Object.prototype.toString.call(obj) === \"[object Number]\";\n}\n\nexport function isRegExp(obj: unknown): obj is RegExp {\n return Object.prototype.toString.call(obj) === \"[object RegExp]\";\n}\n\nexport function isString(obj: unknown): obj is string {\n return Object.prototype.toString.call(obj) === \"[object String]\";\n}\n\nexport function exists<T>(obj: T | null | undefined): obj is T {\n return obj != null;\n}\n\nexport function truthy<T>(obj: T | null | undefined | false): obj is T {\n return exists(obj) && obj !== false;\n}\n\nexport function falsy(obj: unknown): obj is null | undefined | false {\n return !truthy(obj);\n}\n","import type { AnyFunction, CurriedFunction } from \"./types\";\nimport { isFunction } from \"./typeChecks\";\n\nexport function curry<T extends AnyFunction>(func: T): CurriedFunction<T> {\n if (!isFunction(func)) {\n throw new Error(\"fjs Error: Invalid function\");\n }\n\n if (func.length === 2) {\n const curried2 = function (a: any, b?: any, ...rest: any[]): any {\n if (arguments.length >= 2) {\n if (rest.length === 0) {\n return func(a, b);\n }\n let accumulated = func(a, b);\n for (let i = 0; i < rest.length; i++) {\n accumulated = (func as AnyFunction)(accumulated, rest[i], i);\n }\n return accumulated;\n }\n return (next: any, ...more: any[]) => curried2(a, next, ...more);\n };\n return curried2 as CurriedFunction<T>;\n }\n\n if (func.length === 3) {\n const curried3 = function (a: any, b?: any, c?: any, ...rest: any[]): any {\n if (arguments.length >= 3) {\n if (rest.length === 0) {\n return func(a, b, c);\n }\n let accumulated = func(a, b, c);\n for (let i = 0; i < rest.length; i++) {\n accumulated = (func as AnyFunction)(accumulated, rest[i], i);\n }\n return accumulated;\n }\n if (arguments.length === 2) {\n return (next: any, ...more: any[]) => curried3(a, b, next, ...more);\n }\n return function (nextB: any, nextC?: any, ...more: any[]): any {\n if (arguments.length >= 2) {\n return curried3(a, nextB, nextC, ...more);\n }\n return (next: any, ...moreNext: any[]) => curried3(a, nextB, next, ...moreNext);\n };\n };\n return curried3 as CurriedFunction<T>;\n }\n\n function curried(...args: any[]): any {\n if (args.length === 0) {\n return curried;\n }\n\n if (args.length >= func.length) {\n if (args.length === func.length) {\n return func(...args);\n }\n\n let accumulated = func(...args.slice(0, func.length));\n const remaining = args.slice(func.length);\n\n for (let i = 0; i < remaining.length; i++) {\n accumulated = (func as AnyFunction)(accumulated, remaining[i], i);\n }\n\n return accumulated;\n }\n\n return (...nextArgs: any[]) => curried(...args, ...nextArgs);\n }\n\n return curried as CurriedFunction<T>;\n}\n","import type { Mapper, Predicate, Reducer, Comparator } from \"./types\";\nimport { isArray, exists } from \"./typeChecks\";\n\nconst HARD_RETURN = Symbol(\"hardReturn\");\n\nconst eachArray = <T>(iterator: (value: T, index: number) => any, items: T[]): void => {\n for (let i = 0; i < items.length; i++) {\n if (iterator(items[i]!, i) === HARD_RETURN) {\n return;\n }\n }\n};\n\nconst mapArray = <T, U>(iterator: Mapper<T, U>, items: T[]): U[] => {\n const length = items.length;\n const mapped = new Array<U>(length);\n const fn = iterator;\n if (length > 0 && typeof items[0] === \"number\" && fn.length === 1) {\n for (let i = 0; i < length; i++) {\n mapped[i] = fn(items[i]!, i);\n }\n return mapped;\n }\n for (let i = 0; i < length; i++) {\n mapped[i] = fn(items[i]!, i);\n }\n return mapped;\n};\n\nconst foldArray = <T, U>(iterator: Reducer<T, U>, cumulate: U, items: T[]): U => {\n let acc = cumulate;\n if (items.length > 0 && typeof items[0] === \"number\" && typeof acc === \"number\") {\n let numberAcc = acc as unknown as number;\n for (let i = 0; i < items.length; i++) {\n numberAcc = iterator(numberAcc as unknown as U, items[i]!, i) as unknown as number;\n }\n return numberAcc as unknown as U;\n }\n for (let i = 0; i < items.length; i++) {\n acc = iterator(acc, items[i]!, i);\n }\n return acc;\n};\n\nconst reduceArray = <T>(iterator: Reducer<T, T>, items: T[]): T => {\n let acc = items[0];\n if (items.length > 1 && typeof acc === \"number\" && typeof items[1] === \"number\") {\n let numberAcc = acc as unknown as number;\n for (let i = 1; i < items.length; i++) {\n numberAcc = iterator(numberAcc as unknown as T, items[i]!, i - 1) as unknown as number;\n }\n return numberAcc as unknown as T;\n }\n for (let i = 1; i < items.length; i++) {\n acc = iterator(acc as T, items[i]!, i - 1);\n }\n return acc as T;\n};\n\nconst filterArray = <T>(iterator: Predicate<T>, items: T[]): T[] => {\n const filtered: T[] = [];\n const length = items.length;\n const fn = iterator;\n if (length > 0 && typeof items[0] === \"number\" && fn.length === 1) {\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n }\n if (fn.length >= 2) {\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n }\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n};\n\nexport function each<T>(iterator: (value: T, index: number) => any, items: T[]): void;\nexport function each<T>(iterator: (value: T, index: number) => any): (items: T[]) => void;\nexport function each<T>(iterator: (value: T, index: number) => any, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => each(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return;\n }\n eachArray(iterator, items);\n}\n\nexport function map<T, U>(iterator: Mapper<T, U>, items: T[]): U[];\nexport function map<T, U>(iterator: Mapper<T, U>): (items: T[]) => U[];\nexport function map<T, U>(iterator: Mapper<T, U>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => map(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n return mapArray(iterator, items);\n}\n\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate: U, items: T[]): U;\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate: U): (items: T[]) => U;\nexport function fold<T, U>(\n iterator: Reducer<T, U>\n): {\n (cumulate: U, items: T[]): U;\n (cumulate: U): (items: T[]) => U;\n};\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate?: U, items?: T[]): any {\n if (arguments.length >= 3) {\n if (!exists(items) || !isArray(items)) {\n return cumulate as U;\n }\n return foldArray(iterator, cumulate as U, items);\n }\n if (arguments.length === 2) {\n return (next: T[]) => fold(iterator, cumulate as U, next);\n }\n return function (nextCumulate: U, nextItems?: T[]): any {\n if (arguments.length >= 2) {\n return fold(iterator, nextCumulate, nextItems as T[]);\n }\n return (next: T[]) => fold(iterator, nextCumulate, next);\n };\n}\n\nexport const foldl = fold;\n\nexport function reduce<T>(iterator: Reducer<T, T>, items: T[]): T;\nexport function reduce<T>(iterator: Reducer<T, T>): (items: T[]) => T;\nexport function reduce<T>(iterator: Reducer<T, T>, items?: T[]): T | ((items: T[]) => T) {\n if (arguments.length < 2) {\n return (next: T[]) => reduce(iterator, next);\n }\n if (!exists(items) || !isArray(items) || items.length === 0) {\n throw new Error(\"fjs Error: Cannot reduce empty array without initial value\");\n }\n return reduceArray(iterator, items);\n}\n\nexport const reducel = reduce;\nexport const foldll = reduce;\n\nexport function clone<T>(items: T[]): T[] {\n const input = items ?? [];\n const result = new Array<T>(input.length);\n for (let i = 0; i < input.length; i++) {\n result[i] = input[i]!;\n }\n return result;\n}\n\nexport function first<T>(iterator: Predicate<T>, items: T[]): T | undefined;\nexport function first<T>(iterator: Predicate<T>): (items: T[]) => T | undefined;\nexport function first<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => first(iterator, next);\n }\n let result: T | undefined;\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n result = item;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return result;\n}\n\nexport const head = first;\nexport const take = first;\n\nexport function rest<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function rest<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function rest<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => rest(iterator, next);\n }\n const result = select(iterator, items as T[]);\n result.shift();\n return result;\n}\n\nexport const tail = rest;\nexport const drop = rest;\n\nexport function last<T>(iterator: Predicate<T>, items: T[]): T | undefined;\nexport function last<T>(iterator: Predicate<T>): (items: T[]) => T | undefined;\nexport function last<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => last(iterator, next);\n }\n const itemsClone = clone(items as T[]);\n return first(iterator, itemsClone.reverse());\n}\n\nexport function every<T>(iterator: Predicate<T>, items: T[]): boolean;\nexport function every<T>(iterator: Predicate<T>): (items: T[]) => boolean;\nexport function every<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => every(iterator, next);\n }\n let isEvery = true;\n each((item: T, index: number) => {\n if (!iterator(item, index)) {\n isEvery = false;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return isEvery;\n}\n\nexport const all = every;\n\nexport function any<T>(iterator: Predicate<T>, items: T[]): boolean;\nexport function any<T>(iterator: Predicate<T>): (items: T[]) => boolean;\nexport function any<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => any(iterator, next);\n }\n let isAny = false;\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n isAny = true;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return isAny;\n}\n\nexport const contains = any;\n\nexport function select<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function select<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function select<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => select(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n return filterArray(iterator, items);\n}\n\nexport const filter = select;\n\nexport function best<T>(iterator: Comparator<T>, items: T[]): T | undefined;\nexport function best<T>(iterator: Comparator<T>): (items: T[]) => T | undefined;\nexport function best<T>(iterator: Comparator<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => best(iterator, next);\n }\n const compare = (arg1: T, arg2: T): T => {\n return iterator(arg1, arg2) ? arg1 : arg2;\n };\n return reduce(compare, items as T[]);\n}\n\nexport function whilst<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function whilst<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function whilst<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => whilst(iterator, next);\n }\n const result: T[] = [];\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n result.push(item);\n } else {\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return result;\n}\n\nexport function partition<T>(iterator: Predicate<T>, items: T[]): [T[], T[]];\nexport function partition<T>(iterator: Predicate<T>): (items: T[]) => [T[], T[]];\nexport function partition<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => partition(iterator, next);\n }\n const truthy: T[] = [];\n const falsy: T[] = [];\n each((item: T, index: number) => {\n (iterator(item, index) ? truthy : falsy).push(item);\n }, items as T[]);\n return [truthy, falsy];\n}\n\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K,\n items: T[]\n): Record<K, T[]>;\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K\n): (items: T[]) => Record<K, T[]>;\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K,\n items?: T[]\n): any {\n if (arguments.length < 2) {\n return (next: T[]) => group(iterator, next);\n }\n const result = {} as Record<K, T[]>;\n each((item: T) => {\n const key = iterator(item);\n const existing = result[key];\n if (existing) {\n existing.push(item);\n return;\n }\n result[key] = [item];\n }, items as T[]);\n return result;\n}\n\nexport function shuffle<T>(items: T[]): T[] {\n const result = clone(items);\n for (let i = 0; i < result.length; i++) {\n const j = Math.floor(Math.random() * (i + 1));\n const t = result[i]!;\n result[i] = result[j]!;\n result[j] = t;\n }\n return result;\n}\n\nexport const strictEquals = <T>(a: T, b: T): boolean => a === b;\n\nexport function nub<T>(comparator: Comparator<T>, items: T[]): T[];\nexport function nub<T>(comparator: Comparator<T>): (items: T[]) => T[];\nexport function nub<T>(comparator: Comparator<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => nub(comparator, next);\n }\n const input = items as T[];\n if (comparator === strictEquals) {\n return Array.from(new Set(input));\n }\n const unique: T[] = input.length > 0 ? [input[0]!] : [];\n each((item: T) => {\n if (!any((value: T) => comparator(item, value), unique)) {\n unique.push(item);\n }\n }, input);\n return unique;\n}\n\nexport const unique = nub;\nexport const distinct = nub;\n","import type { UnaryFn, AnyFunction } from \"./types\";\nimport { isFunction } from \"./typeChecks\";\nimport { any } from \"./array\";\n\nexport function compose<A>(f: UnaryFn<A, A>): UnaryFn<A, A>;\nexport function compose<A, B>(f: UnaryFn<B, A>, g: UnaryFn<A, B>): UnaryFn<A, A>;\nexport function compose<A, B, C>(\n f: UnaryFn<C, A>,\n g: UnaryFn<B, C>,\n h: UnaryFn<A, B>\n): UnaryFn<A, A>;\nexport function compose<A, B, C, D>(\n f: UnaryFn<D, A>,\n g: UnaryFn<C, D>,\n h: UnaryFn<B, C>,\n i: UnaryFn<A, B>\n): UnaryFn<A, A>;\nexport function compose(...funcs: UnaryFn<any, any>[]): UnaryFn<any, any>;\nexport function compose(...funcs: UnaryFn<any, any>[]): UnaryFn<any, any> {\n const anyInvalid = any((func: unknown) => !isFunction(func));\n const total = funcs.length;\n\n if (anyInvalid(funcs)) {\n throw new Error(\"fjs Error: Invalid function to compose\");\n }\n\n return function (this: any, ...args: any[]) {\n let result: any = (funcs[total - 1] as AnyFunction).apply(this, args);\n for (let i = total - 2; i >= 0; i--) {\n result = (funcs[i] as AnyFunction).call(this, result);\n }\n return result;\n };\n}\n","import type { Curried2 } from \"./types\";\nimport { curry } from \"./curry\";\nimport { map } from \"./array\";\nimport { isArray } from \"./typeChecks\";\n\nexport function toArray<T extends Record<string, any>>(obj: T): Array<[keyof T, T[keyof T]]> {\n return map((key: keyof T) => [key, obj[key]], Object.keys(obj) as Array<keyof T>);\n}\n\nexport const apply = curry(<T extends Record<string, any>, K extends keyof T>(\n func: K | [K, ...any[]],\n items: T[]\n): any[] => {\n let method: K;\n let args: any[] = [];\n\n if (isArray(func)) {\n [method, ...args] = func as [K, ...any[]];\n } else {\n method = func;\n }\n\n return map((item: T) => {\n const fn = item[method];\n if (typeof fn === \"function\") {\n return fn.apply(item, args);\n }\n return fn;\n }, items);\n}) as unknown as Curried2<any, any[], any[]>;\n\nexport const assign = curry(<T extends Record<string, any>, U extends Record<string, any>>(\n obj1: T,\n obj2: U\n): U & T => {\n return { ...obj2, ...obj1 };\n}) as unknown as Curried2<Record<string, any>, Record<string, any>, Record<string, any>>;\n\nexport const extend = assign;\n\nexport function prop<K extends string | number | symbol>(property: K) {\n return function <T extends Record<K, any>>(obj: T): T[K] {\n return obj[property];\n };\n}\n\nexport const pluck = curry(<T, K extends keyof T>(property: K, items: T[]): Array<T[K]> => {\n return map(prop(property), items);\n}) as unknown as Curried2<any, any[], any[]>;\n","export function identity<T>(value: T): T {\n return value;\n}\n\nexport function constant<T>(value: T): () => T {\n return () => value;\n}\n\nexport function tap<T>(fn: (value: T) => void) {\n return (value: T): T => {\n fn(value);\n return value;\n };\n}\n","import type { UnaryFn } from \"./types\";\n\nexport function pipe<A>(value: A): A;\nexport function pipe<A, B>(value: A, fn1: UnaryFn<A, B>): B;\nexport function pipe<A, B, C>(value: A, fn1: UnaryFn<A, B>, fn2: UnaryFn<B, C>): C;\nexport function pipe<A, B, C, D>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>\n): D;\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>\n): E;\nexport function pipe<A, B, C, D, E, F>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>,\n fn5: UnaryFn<E, F>\n): F;\nexport function pipe(value: any, ...fns: UnaryFn<any, any>[]): any {\n let result = value;\n for (let i = 0; i < fns.length; i++) {\n result = fns[i]!(result);\n }\n return result;\n}\n\nexport function flow<A, B>(fn1: UnaryFn<A, B>): UnaryFn<A, B>;\nexport function flow<A, B, C>(fn1: UnaryFn<A, B>, fn2: UnaryFn<B, C>): UnaryFn<A, C>;\nexport function flow<A, B, C, D>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>\n): UnaryFn<A, D>;\nexport function flow<A, B, C, D, E>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>\n): UnaryFn<A, E>;\nexport function flow<A, B, C, D, E, F>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>,\n fn5: UnaryFn<E, F>\n): UnaryFn<A, F>;\nexport function flow(...fns: UnaryFn<any, any>[]): UnaryFn<any, any> {\n return (value: any) => {\n let result = value;\n for (let i = 0; i < fns.length; i++) {\n result = fns[i]!(result);\n }\n return result;\n };\n}\n","import type { Curried2, Curried3 } from \"./types\";\nimport { curry } from \"./curry\";\n\nexport const pick = curry(<T extends object, K extends keyof T>(\n keys: K[],\n obj: T\n): Pick<T, K> => {\n const result = {} as Pick<T, K>;\n keys.forEach((key) => {\n if (key in obj) {\n result[key] = obj[key];\n }\n });\n return result;\n}) as unknown as Curried2<string[], any, any>;\n\nexport const omit = curry(<T extends object, K extends keyof T>(\n keys: K[],\n obj: T\n): Omit<T, K> => {\n const result = { ...obj } as any;\n keys.forEach((key) => {\n delete result[key];\n });\n return result as Omit<T, K>;\n}) as unknown as Curried2<string[], any, any>;\n\nexport const path = curry(<T = any>(pathArray: Array<string | number>, obj: any): T | undefined => {\n let current = obj;\n for (const key of pathArray) {\n if (current == null) {\n return undefined;\n }\n current = current[key];\n }\n return current as T;\n}) as unknown as Curried2<Array<string | number>, any, any>;\n\nexport const assoc = curry(<T extends object, K extends keyof T>(\n key: K,\n value: T[K],\n obj: T\n): T => {\n return { ...obj, [key]: value };\n}) as unknown as Curried3<string, any, any, any>;\n\nexport const dissoc = curry(<T extends object, K extends keyof T>(key: K, obj: T): Omit<T, K> => {\n const result = { ...obj } as any;\n delete result[key];\n return result as Omit<T, K>;\n}) as unknown as Curried2<string, any, any>;\n","import type { Curried2, Curried3 } from \"./types\";\nimport { curry } from \"./curry\";\nimport { each } from \"./array\";\nimport { exists, isArray } from \"./typeChecks\";\n\nexport const flatMap = curry(<T, U>(fn: (value: T, index: number) => U[], items: T[]): U[] => {\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n const input = items;\n const length = input.length;\n const result: U[] = [];\n const mapper = fn;\n for (let i = 0; i < length; i++) {\n const mapped = mapper(input[i]!, i);\n if (!exists(mapped) || !isArray(mapped)) {\n continue;\n }\n const mappedItems = mapped;\n for (let j = 0; j < mappedItems.length; j++) {\n result.push(mappedItems[j]!);\n }\n }\n return result;\n}) as unknown as Curried2<(value: any, index: number) => any[], any[], any[]>;\n\nexport const chain = flatMap;\n\nexport const flatten = <T>(items: T[][]): T[] => {\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n const input = items;\n const result: T[] = [];\n for (let i = 0; i < input.length; i++) {\n const subArray = input[i]!;\n if (!exists(subArray) || !isArray(subArray)) {\n continue;\n }\n for (let j = 0; j < subArray.length; j++) {\n result.push(subArray[j]!);\n }\n }\n return result;\n};\n\nexport const zip = curry(<T, U>(arr1: T[], arr2: U[]): Array<[T, U]> => {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n for (let i = 0; i < length; i++) {\n result.push([arr1[i]!, arr2[i]!]);\n }\n return result;\n}) as unknown as Curried2<any[], any[], Array<[any, any]>>;\n\nexport const zipWith = curry(<T, U, R>(\n fn: (a: T, b: U) => R,\n arr1: T[],\n arr2: U[]\n): R[] => {\n const length = Math.min(arr1.length, arr2.length);\n const result = new Array<R>(length);\n for (let i = 0; i < length; i++) {\n result[i] = fn(arr1[i]!, arr2[i]!);\n }\n return result;\n}) as unknown as Curried3<(a: any, b: any) => any, any[], any[], any[]>;\n\nexport const uniq = <T>(items: T[]): T[] => {\n return Array.from(new Set(items));\n};\n\nexport const uniqBy = curry(<T, K>(fn: (value: T) => K, items: T[]): T[] => {\n const seen = new Set<K>();\n const result: T[] = [];\n each((item: T) => {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }, items);\n return result;\n}) as unknown as Curried2<(value: any) => any, any[], any[]>;\n","import type { Curried2, Curried3, UnaryFn } from \"./types\";\nimport { curry } from \"./curry\";\n\nexport const mapAsync = curry(async <T, U>(\n fn: (value: T, index: number) => Promise<U>,\n items: T[]\n): Promise<U[]> => {\n const length = items.length;\n const promises = new Array<Promise<U>>(length);\n for (let i = 0; i < length; i++) {\n promises[i] = fn(items[i]!, i);\n }\n return Promise.all(promises);\n}) as unknown as Curried2<(value: any, index: number) => Promise<any>, any[], Promise<any[]>>;\n\nexport const filterAsync = curry(async <T>(\n predicate: (value: T, index: number) => Promise<boolean>,\n items: T[]\n): Promise<T[]> => {\n const length = items.length;\n const promises = new Array<Promise<boolean>>(length);\n for (let i = 0; i < length; i++) {\n promises[i] = predicate(items[i]!, i);\n }\n const results = await Promise.all(promises);\n const filtered: T[] = [];\n for (let i = 0; i < length; i++) {\n if (results[i]) {\n filtered.push(items[i]!);\n }\n }\n return filtered;\n}) as unknown as Curried2<(value: any, index: number) => Promise<boolean>, any[], Promise<any[]>>;\n\nexport const reduceAsync = curry(async <T>(\n fn: (accumulator: T, value: T, index: number) => Promise<T>,\n items: T[]\n): Promise<T> => {\n if (!items || items.length === 0) {\n throw new Error(\"fjs Error: Cannot reduce empty array without initial value\");\n }\n let accumulator: any = items[0]!;\n for (let i = 1; i < items.length; i++) {\n accumulator = (await fn(accumulator, items[i]!, i)) as T;\n }\n return accumulator;\n}) as unknown as Curried2<(accumulator: any, value: any, index: number) => Promise<any>, any[], Promise<any>>;\n\nexport const foldAsync = curry(async <T, U>(\n fn: (accumulator: U, value: T, index: number) => Promise<U>,\n initial: U,\n items: T[]\n): Promise<U> => {\n let accumulator = initial;\n for (let i = 0; i < items.length; i++) {\n accumulator = await fn(accumulator, items[i]!, i);\n }\n return accumulator;\n}) as unknown as Curried3<\n (accumulator: any, value: any, index: number) => Promise<any>,\n any,\n any[],\n Promise<any>\n>;\n\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items: T[]\n): Promise<R>;\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R\n): (items: T[]) => Promise<R>;\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items?: T[]\n): Promise<R> | ((items: T[]) => Promise<R>) {\n if (arguments.length < 5) {\n return (next: T[]) => mapFilterReduceAsync(mapFn, filterFn, reduceFn, initial, next);\n }\n return (async () => {\n const input = items as T[];\n let accumulator = initial;\n for (let i = 0; i < input.length; i++) {\n const mapped = await mapFn(input[i]!, i);\n const keep = await filterFn(mapped, i);\n if (keep) {\n accumulator = await reduceFn(accumulator, mapped, i);\n }\n }\n return accumulator;\n })();\n}\n\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items: T[]\n): Promise<R>;\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R\n): (items: T[]) => Promise<R>;\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items?: T[]\n): Promise<R> | ((items: T[]) => Promise<R>) {\n if (arguments.length < 5) {\n return (next: T[]) => mapFilterReduceAsyncParallel(mapFn, filterFn, reduceFn, initial, next);\n }\n return (async () => {\n const input = items as T[];\n const length = input.length;\n const mappedPromises = new Array<Promise<U>>(length);\n for (let i = 0; i < length; i++) {\n mappedPromises[i] = Promise.resolve(mapFn(input[i]!, i));\n }\n const mapped = await Promise.all(mappedPromises);\n const filterPromises = new Array<Promise<boolean>>(length);\n for (let i = 0; i < length; i++) {\n filterPromises[i] = Promise.resolve(filterFn(mapped[i]!, i));\n }\n const keep = await Promise.all(filterPromises);\n let accumulator = initial;\n for (let i = 0; i < length; i++) {\n if (keep[i]) {\n accumulator = await reduceFn(accumulator, mapped[i]!, i);\n }\n }\n return accumulator;\n })();\n}\n\nexport const eachAsync = curry(async <T>(\n fn: (value: T, index: number) => Promise<void>,\n items: T[]\n): Promise<void> => {\n for (let i = 0; i < items.length; i++) {\n await fn(items[i]!, i);\n }\n}) as unknown as Curried2<(value: any, index: number) => Promise<void>, any[], Promise<void>>;\n\nexport async function pipeAsync<A>(value: A): Promise<A>;\nexport async function pipeAsync<A, B>(value: A, fn1: UnaryFn<A, Promise<B>>): Promise<B>;\nexport async function pipeAsync<A, B, C>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>\n): Promise<C>;\nexport async function pipeAsync<A, B, C, D>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>\n): Promise<D>;\nexport async function pipeAsync<A, B, C, D, E>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>,\n fn4: UnaryFn<D, Promise<E>>\n): Promise<E>;\nexport async function pipeAsync(value: any, ...fns: UnaryFn<any, Promise<any>>[]): Promise<any> {\n let result = value;\n for (const fn of fns) {\n result = await fn(result);\n }\n return result;\n}\n\nexport function flowAsync<A, B>(fn1: UnaryFn<A, Promise<B>>): UnaryFn<A, Promise<B>>;\nexport function flowAsync<A, B, C>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>\n): UnaryFn<A, Promise<C>>;\nexport function flowAsync<A, B, C, D>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>\n): UnaryFn<A, Promise<D>>;\nexport function flowAsync<A, B, C, D, E>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>,\n fn4: UnaryFn<D, Promise<E>>\n): UnaryFn<A, Promise<E>>;\nexport function flowAsync(...fns: UnaryFn<any, Promise<any>>[]): UnaryFn<any, Promise<any>> {\n return async (value: any) => {\n let result = value;\n for (const fn of fns) {\n result = await fn(result);\n }\n return result;\n };\n}\n\nexport const composeAsync = (...fns: UnaryFn<any, Promise<any>>[]): UnaryFn<any, Promise<any>> => {\n return async (value: any) => {\n let result = value;\n for (let i = fns.length - 1; i >= 0; i--) {\n result = await fns[i]!(result);\n }\n return result;\n };\n};\n","import { curry } from \"./curry\";\nimport {\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct\n} from \"./array\";\nimport { compose } from \"./composition\";\nimport { toArray, apply, assign, extend, prop, pluck } from \"./object\";\nimport {\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy\n} from \"./typeChecks\";\nimport { identity, constant, tap } from \"./utilities\";\nimport { pipe, flow } from \"./pipe\";\nimport { pick, omit, path, assoc, dissoc } from \"./objectOps\";\nimport { flatMap, chain, flatten, zip, zipWith, uniq, uniqBy } from \"./arrayOps\";\nimport {\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n} from \"./async\";\n\nexport { curry } from \"./curry\";\n\nexport {\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct\n} from \"./array\";\n\nexport { compose } from \"./composition\";\n\nexport { toArray, apply, assign, extend, prop, pluck } from \"./object\";\n\nexport {\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy\n} from \"./typeChecks\";\n\nexport { identity, constant, tap } from \"./utilities\";\n\nexport { pipe, flow } from \"./pipe\";\n\nexport { pick, omit, path, assoc, dissoc } from \"./objectOps\";\n\nexport { flatMap, chain, flatten, zip, zipWith, uniq, uniqBy } from \"./arrayOps\";\n\nexport {\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n} from \"./async\";\n\nexport type {\n Predicate,\n Comparator,\n Mapper,\n Reducer,\n UnaryFn,\n Curried2,\n Curried3,\n Curried4,\n AnyFunction,\n CurriedFunction\n} from \"./types\";\n\nexport const fjs = {\n curry,\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct,\n compose,\n toArray,\n apply,\n assign,\n extend,\n prop,\n pluck,\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy,\n identity,\n constant,\n tap,\n pipe,\n flow,\n pick,\n omit,\n path,\n assoc,\n dissoc,\n flatMap,\n chain,\n flatten,\n zip,\n zipWith,\n uniq,\n uniqBy,\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n};\n"]}
{"version":3,"sources":["../src/typeChecks.ts","../src/curry.ts","../src/array.ts","../src/composition.ts","../src/object.ts","../src/utilities.ts","../src/pipe.ts","../src/objectOps.ts","../src/arrayOps.ts","../src/async.ts","../src/index.ts"],"names":["truthy","falsy","unique"],"mappings":";AAAO,SAAS,WAAW,GAAA,EAAkD;AACzE,EAAA,OAAO,CAAC,EAAE,GAAA,IAAQ,IAAY,WAAA,IAAgB,GAAA,CAAY,QAAS,GAAA,CAAY,KAAA,CAAA;AACnF;AAEO,SAAS,SAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,WAAW,GAAG,CAAA,IAAM,CAAC,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA;AACvD;AAEO,SAAS,QAAqB,GAAA,EAA0B;AAC3D,EAAA,OAAO,KAAA,CAAM,QAAQ,GAAG,CAAA;AAC5B;AAEO,SAAS,YAAY,GAAA,EAAiC;AACzD,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,oBAAA;AACnD;AAEO,SAAS,OAAO,GAAA,EAA2B;AAC9C,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,eAAA;AACnD;AAEO,SAAS,SAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,iBAAA;AACnD;AAEO,SAAS,SAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,iBAAA;AACnD;AAEO,SAAS,SAAS,GAAA,EAA6B;AAClD,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,iBAAA;AACnD;AAEO,SAAS,OAAU,GAAA,EAAqC;AAC3D,EAAA,OAAO,GAAA,IAAO,IAAA;AAClB;AAEO,SAAS,OAAU,GAAA,EAA6C;AACnE,EAAA,OAAO,MAAA,CAAO,GAAG,CAAA,IAAK,GAAA,KAAQ,KAAA;AAClC;AAEO,SAAS,MAAM,GAAA,EAA+C;AACjE,EAAA,OAAO,CAAC,OAAO,GAAG,CAAA;AACtB;;;ACvCO,SAAS,MAA6B,IAAA,EAA6B;AACtE,EAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG;AACnB,IAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,EACjD;AAEA,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,IAAA,MAAM,QAAA,GAAW,SAAU,CAAA,EAAQ,CAAA,EAAc;AAC7C,MAAA,IAAI,SAAA,CAAU,UAAU,CAAA,EAAG;AACvB,QAAA,OAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,MACpB;AACA,MAAA,OAAO,CAAC,IAAA,KAAc,QAAA,CAAS,CAAA,EAAG,IAAI,CAAA;AAAA,IAC1C,CAAA;AACA,IAAA,OAAO,QAAA;AAAA,EACX;AAEA,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,IAAA,MAAM,QAAA,GAAW,SAAU,CAAA,EAAQ,CAAA,EAAS,CAAA,EAAc;AACtD,MAAA,IAAI,SAAA,CAAU,UAAU,CAAA,EAAG;AACvB,QAAA,OAAO,IAAA,CAAK,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAAA,MACvB;AACA,MAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AACxB,QAAA,OAAO,CAAC,IAAA,KAAc,QAAA,CAAS,CAAA,EAAG,GAAG,IAAI,CAAA;AAAA,MAC7C;AACA,MAAA,OAAO,SAAU,OAAY,KAAA,EAAkB;AAC3C,QAAA,IAAI,SAAA,CAAU,UAAU,CAAA,EAAG;AACvB,UAAA,OAAO,QAAA,CAAS,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AAAA,QACnC;AACA,QAAA,OAAO,CAAC,IAAA,KAAc,QAAA,CAAS,CAAA,EAAG,OAAO,IAAI,CAAA;AAAA,MACjD,CAAA;AAAA,IACJ,CAAA;AACA,IAAA,OAAO,QAAA;AAAA,EACX;AAEA,EAAA,SAAS,WAAW,IAAA,EAAkB;AAClC,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,MAAA,OAAO,OAAA;AAAA,IACX;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,EAAQ;AAC5B,MAAA,OAAO,KAAK,GAAG,IAAA,CAAK,MAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,OAAO,IAAI,QAAA,KAAoB,OAAA,CAAQ,GAAG,IAAA,EAAM,GAAG,QAAQ,CAAA;AAAA,EAC/D;AAEA,EAAA,OAAO,OAAA;AACX;;;AC9CA,IAAM,WAAA,0BAAqB,YAAY,CAAA;AAEvC,IAAM,SAAA,GAAY,CAAI,QAAA,EAA4C,KAAA,KAAqB;AACnF,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,IAAI,SAAS,KAAA,CAAM,CAAC,CAAA,EAAI,CAAC,MAAM,WAAA,EAAa;AACxC,MAAA;AAAA,IACJ;AAAA,EACJ;AACJ,CAAA;AAEA,IAAM,QAAA,GAAW,CAAO,QAAA,EAAwB,KAAA,KAAoB;AAChE,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAS,MAAM,CAAA;AAClC,EAAA,MAAM,EAAA,GAAK,QAAA;AACX,EAAA,IAAI,MAAA,GAAS,KAAK,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAA,IAAY,EAAA,CAAG,MAAA,KAAW,CAAA,EAAG;AAC/D,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,EAAA,CAAG,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AAAA,IAC/B;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,EAAA,CAAG,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,MAAA;AACX,CAAA;AAEA,IAAM,SAAA,GAAY,CAAO,QAAA,EAAyB,QAAA,EAAa,KAAA,KAAkB;AAC7E,EAAA,IAAI,GAAA,GAAM,QAAA;AACV,EAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAA,IAAY,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC7E,IAAA,IAAI,SAAA,GAAY,GAAA;AAChB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,SAAA,GAAY,QAAA,CAAS,SAAA,EAA2B,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,SAAA;AAAA,EACX;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,GAAA,GAAM,QAAA,CAAS,GAAA,EAAK,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,GAAA;AACX,CAAA;AAEA,IAAM,WAAA,GAAc,CAAI,QAAA,EAAyB,KAAA,KAAkB;AAC/D,EAAA,IAAI,GAAA,GAAM,MAAM,CAAC,CAAA;AACjB,EAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,OAAO,GAAA,KAAQ,YAAY,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAA,EAAU;AAC7E,IAAA,IAAI,SAAA,GAAY,GAAA;AAChB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,SAAA,GAAY,SAAS,SAAA,EAA2B,KAAA,CAAM,CAAC,CAAA,EAAI,IAAI,CAAC,CAAA;AAAA,IACpE;AACA,IAAA,OAAO,SAAA;AAAA,EACX;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,GAAA,GAAM,SAAS,GAAA,EAAU,KAAA,CAAM,CAAC,CAAA,EAAI,IAAI,CAAC,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,GAAA;AACX,CAAA;AAEA,IAAM,WAAA,GAAc,CAAI,QAAA,EAAwB,KAAA,KAAoB;AAChE,EAAA,MAAM,WAAgB,EAAC;AACvB,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,MAAM,EAAA,GAAK,QAAA;AACX,EAAA,IAAI,MAAA,GAAS,KAAK,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,QAAA,IAAY,EAAA,CAAG,MAAA,KAAW,CAAA,EAAG;AAC/D,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,MAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,MAAA,IAAI,EAAA,CAAG,KAAA,EAAO,CAAC,CAAA,EAAG;AACd,QAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,MACvB;AAAA,IACJ;AACA,IAAA,OAAO,QAAA;AAAA,EACX;AACA,EAAA,IAAI,EAAA,CAAG,UAAU,CAAA,EAAG;AAChB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,MAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,MAAA,IAAI,EAAA,CAAG,KAAA,EAAO,CAAC,CAAA,EAAG;AACd,QAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,MACvB;AAAA,IACJ;AACA,IAAA,OAAO,QAAA;AAAA,EACX;AACA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,IAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,IAAA,IAAI,EAAA,CAAG,KAAA,EAAO,CAAC,CAAA,EAAG;AACd,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,IACvB;AAAA,EACJ;AACA,EAAA,OAAO,QAAA;AACX,CAAA;AAIO,SAAS,IAAA,CAAQ,UAA4C,KAAA,EAAkB;AAClF,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,IAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AAAA,EAC7C;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,KAAK,KAAK,CAAC,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnC,IAAA;AAAA,EACJ;AACA,EAAA,SAAA,CAAU,UAAU,KAAK,CAAA;AAC7B;AAIO,SAAS,GAAA,CAAU,UAAwB,KAAA,EAAkB;AAChE,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA;AAAA,EAC5C;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,KAAK,KAAK,CAAC,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnC,IAAA,OAAO,EAAC;AAAA,EACZ;AACA,EAAA,OAAO,QAAA,CAAS,UAAU,KAAK,CAAA;AACnC;AAUO,SAAS,IAAA,CAAW,QAAA,EAAyB,QAAA,EAAc,KAAA,EAAkB;AAChF,EAAA,IAAI,SAAA,CAAU,UAAU,CAAA,EAAG;AACvB,IAAA,IAAI,CAAC,MAAA,CAAO,KAAK,KAAK,CAAC,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnC,MAAA,OAAO,QAAA;AAAA,IACX;AACA,IAAA,OAAO,SAAA,CAAU,QAAA,EAAU,QAAA,EAAe,KAAK,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,CAAC,IAAA,KAAc,IAAA,CAAK,QAAA,EAAU,UAAe,IAAI,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,SAAU,cAAiB,SAAA,EAAsB;AACpD,IAAA,IAAI,SAAA,CAAU,UAAU,CAAA,EAAG;AACvB,MAAA,OAAO,IAAA,CAAK,QAAA,EAAU,YAAA,EAAc,SAAgB,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,CAAC,IAAA,KAAc,IAAA,CAAK,QAAA,EAAU,cAAc,IAAI,CAAA;AAAA,EAC3D,CAAA;AACJ;AAEO,IAAM,KAAA,GAAQ;AAId,SAAS,MAAA,CAAU,UAAyB,KAAA,EAAsC;AACrF,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,MAAA,CAAO,QAAA,EAAU,IAAI,CAAA;AAAA,EAC/C;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,QAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AACzD,IAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,EAChF;AACA,EAAA,OAAO,WAAA,CAAY,UAAU,KAAK,CAAA;AACtC;AAEO,IAAM,OAAA,GAAU;AAChB,IAAM,MAAA,GAAS;AAEf,SAAS,MAAS,KAAA,EAAiB;AACtC,EAAA,MAAM,KAAA,GAAQ,SAAS,EAAC;AACxB,EAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAS,KAAA,CAAM,MAAM,CAAA;AACxC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,MAAA;AACX;AAIO,SAAS,KAAA,CAAS,UAAwB,KAAA,EAAkB;AAC/D,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,KAAA,CAAM,QAAA,EAAU,IAAI,CAAA;AAAA,EAC9C;AACA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAA,CAAK,CAAC,MAAS,KAAA,KAAkB;AAC7B,IAAA,IAAI,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA,EAAG;AACvB,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,OAAO,MAAA;AAAA,EACX,GAAG,KAAY,CAAA;AACf,EAAA,OAAO,MAAA;AACX;AAEO,IAAM,IAAA,GAAO;AACb,IAAM,IAAA,GAAO;AAIb,SAAS,IAAA,CAAQ,UAAwB,KAAA,EAAkB;AAC9D,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,IAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AAAA,EAC7C;AACA,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,EAAU,KAAY,CAAA;AAC5C,EAAA,MAAA,CAAO,KAAA,EAAM;AACb,EAAA,OAAO,MAAA;AACX;AAEO,IAAM,IAAA,GAAO;AACb,IAAM,IAAA,GAAO;AAIb,SAAS,IAAA,CAAQ,UAAwB,KAAA,EAAkB;AAC9D,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,IAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AAAA,EAC7C;AACA,EAAA,MAAM,UAAA,GAAa,MAAM,KAAY,CAAA;AACrC,EAAA,OAAO,KAAA,CAAM,QAAA,EAAU,UAAA,CAAW,OAAA,EAAS,CAAA;AAC/C;AAIO,SAAS,KAAA,CAAS,UAAwB,KAAA,EAAkB;AAC/D,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,KAAA,CAAM,QAAA,EAAU,IAAI,CAAA;AAAA,EAC9C;AACA,EAAA,IAAI,OAAA,GAAU,IAAA;AACd,EAAA,IAAA,CAAK,CAAC,MAAS,KAAA,KAAkB;AAC7B,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA,EAAG;AACxB,MAAA,OAAA,GAAU,KAAA;AACV,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,OAAO,MAAA;AAAA,EACX,GAAG,KAAY,CAAA;AACf,EAAA,OAAO,OAAA;AACX;AAEO,IAAM,GAAA,GAAM;AAIZ,SAAS,GAAA,CAAO,UAAwB,KAAA,EAAkB;AAC7D,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA;AAAA,EAC5C;AACA,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,IAAA,CAAK,CAAC,MAAS,KAAA,KAAkB;AAC7B,IAAA,IAAI,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA,EAAG;AACvB,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,OAAO,MAAA;AAAA,EACX,GAAG,KAAY,CAAA;AACf,EAAA,OAAO,KAAA;AACX;AAEO,IAAM,QAAA,GAAW;AAIjB,SAAS,MAAA,CAAU,UAAwB,KAAA,EAAkB;AAChE,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,MAAA,CAAO,QAAA,EAAU,IAAI,CAAA;AAAA,EAC/C;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,KAAK,KAAK,CAAC,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnC,IAAA,OAAO,EAAC;AAAA,EACZ;AACA,EAAA,OAAO,WAAA,CAAY,UAAU,KAAK,CAAA;AACtC;AAEO,IAAM,MAAA,GAAS;AAIf,SAAS,IAAA,CAAQ,UAAyB,KAAA,EAAkB;AAC/D,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,IAAA,CAAK,QAAA,EAAU,IAAI,CAAA;AAAA,EAC7C;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,EAAS,IAAA,KAAe;AACrC,IAAA,OAAO,QAAA,CAAS,IAAA,EAAM,IAAI,CAAA,GAAI,IAAA,GAAO,IAAA;AAAA,EACzC,CAAA;AACA,EAAA,OAAO,MAAA,CAAO,SAAS,KAAY,CAAA;AACvC;AAIO,SAAS,MAAA,CAAU,UAAwB,KAAA,EAAkB;AAChE,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,MAAA,CAAO,QAAA,EAAU,IAAI,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,SAAc,EAAC;AACrB,EAAA,IAAA,CAAK,CAAC,MAAS,KAAA,KAAkB;AAC7B,IAAA,IAAI,QAAA,CAAS,IAAA,EAAM,KAAK,CAAA,EAAG;AACvB,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IACpB,CAAA,MAAO;AACH,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,OAAO,MAAA;AAAA,EACX,GAAG,KAAY,CAAA;AACf,EAAA,OAAO,MAAA;AACX;AAIO,SAAS,SAAA,CAAa,UAAwB,KAAA,EAAkB;AACnE,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,SAAA,CAAU,QAAA,EAAU,IAAI,CAAA;AAAA,EAClD;AACA,EAAA,MAAMA,UAAc,EAAC;AACrB,EAAA,MAAMC,SAAa,EAAC;AACpB,EAAA,IAAA,CAAK,CAAC,MAAS,KAAA,KAAkB;AAC7B,IAAA,CAAC,SAAS,IAAA,EAAM,KAAK,IAAID,OAAAA,GAASC,MAAAA,EAAO,KAAK,IAAI,CAAA;AAAA,EACtD,GAAG,KAAY,CAAA;AACf,EAAA,OAAO,CAACD,SAAQC,MAAK,CAAA;AACzB;AASO,SAAS,KAAA,CACZ,UACA,KAAA,EACG;AACH,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,KAAA,CAAM,QAAA,EAAU,IAAI,CAAA;AAAA,EAC9C;AACA,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,IAAA,CAAK,CAAC,IAAA,KAAY;AACd,IAAA,MAAM,GAAA,GAAM,SAAS,IAAI,CAAA;AACzB,IAAA,MAAM,QAAA,GAAW,OAAO,GAAG,CAAA;AAC3B,IAAA,IAAI,QAAA,EAAU;AACV,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAClB,MAAA;AAAA,IACJ;AACA,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,CAAC,IAAI,CAAA;AAAA,EACvB,GAAG,KAAY,CAAA;AACf,EAAA,OAAO,MAAA;AACX;AAEO,SAAS,QAAW,KAAA,EAAiB;AACxC,EAAA,MAAM,MAAA,GAAS,MAAM,KAAK,CAAA;AAC1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,IAAI,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,IAAK,IAAI,CAAA,CAAE,CAAA;AAC5C,IAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AACpB,IAAA,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,MAAA;AACX;AAEO,IAAM,YAAA,GAAe,CAAI,CAAA,EAAM,CAAA,KAAkB,CAAA,KAAM;AAIvD,SAAS,GAAA,CAAO,YAA2B,KAAA,EAAkB;AAChE,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,GAAA,CAAI,UAAA,EAAY,IAAI,CAAA;AAAA,EAC9C;AACA,EAAA,MAAM,KAAA,GAAQ,KAAA;AACd,EAAA,IAAI,eAAe,YAAA,EAAc;AAC7B,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EACpC;AACA,EAAA,MAAMC,OAAAA,GAAc,MAAM,MAAA,GAAS,CAAA,GAAI,CAAC,KAAA,CAAM,CAAC,CAAE,CAAA,GAAI,EAAC;AACtD,EAAA,IAAA,CAAK,CAAC,IAAA,KAAY;AACd,IAAA,IAAI,CAAC,IAAI,CAAC,KAAA,KAAa,WAAW,IAAA,EAAM,KAAK,CAAA,EAAGA,OAAM,CAAA,EAAG;AACrD,MAAAA,OAAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IACpB;AAAA,EACJ,GAAG,KAAK,CAAA;AACR,EAAA,OAAOA,OAAAA;AACX;AAEO,IAAM,MAAA,GAAS;AACf,IAAM,QAAA,GAAW;;;AC5VjB,SAAS,WAAW,KAAA,EAA+C;AACtE,EAAA,MAAM,aAAa,GAAA,CAAI,CAAC,SAAkB,CAAC,UAAA,CAAW,IAAI,CAAC,CAAA;AAC3D,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,EAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AACnB,IAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,YAAwB,IAAA,EAAa;AACxC,IAAA,IAAI,SAAe,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CAAkB,KAAA,CAAM,MAAM,IAAI,CAAA;AACpE,IAAA,KAAA,IAAS,CAAA,GAAI,KAAA,GAAQ,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACjC,MAAA,MAAA,GAAU,KAAA,CAAM,CAAC,CAAA,CAAkB,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,MAAA;AAAA,EACX,CAAA;AACJ;;;AC5BO,SAAS,QAAuC,GAAA,EAAsC;AACzF,EAAA,OAAO,GAAA,CAAI,CAAC,GAAA,KAAiB,CAAC,GAAA,EAAK,GAAA,CAAI,GAAG,CAAC,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,GAAG,CAAmB,CAAA;AACpF;AAEO,IAAM,KAAA,GAAQ,KAAA,CAAM,CACvB,IAAA,EACA,KAAA,KACQ;AACR,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,OAAc,EAAC;AAEnB,EAAA,IAAI,OAAA,CAAQ,IAAI,CAAA,EAAG;AACf,IAAA,CAAC,MAAA,EAAQ,GAAG,IAAI,CAAA,GAAI,IAAA;AAAA,EACxB,CAAA,MAAO;AACH,IAAA,MAAA,GAAS,IAAA;AAAA,EACb;AAEA,EAAA,OAAO,GAAA,CAAI,CAAC,IAAA,KAAY;AACpB,IAAA,MAAM,EAAA,GAAK,KAAK,MAAM,CAAA;AACtB,IAAA,IAAI,OAAO,OAAO,UAAA,EAAY;AAC1B,MAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IAC9B;AACA,IAAA,OAAO,EAAA;AAAA,EACX,GAAG,KAAK,CAAA;AACZ,CAAC;AAEM,IAAM,MAAA,GAAS,KAAA,CAAM,CACxB,IAAA,EACA,IAAA,KACQ;AACR,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAG,IAAA,EAAK;AAC9B,CAAC;AAEM,IAAM,MAAA,GAAS;AAEf,SAAS,KAAyC,QAAA,EAAa;AAClE,EAAA,OAAO,SAAoC,GAAA,EAAc;AACrD,IAAA,OAAO,IAAI,QAAQ,CAAA;AAAA,EACvB,CAAA;AACJ;AAEO,IAAM,KAAA,GAAQ,KAAA,CAAM,CAAuB,QAAA,EAAa,KAAA,KAA4B;AACvF,EAAA,OAAO,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAK,CAAA;AACpC,CAAC;;;AChDM,SAAS,SAAY,KAAA,EAAa;AACrC,EAAA,OAAO,KAAA;AACX;AAEO,SAAS,SAAY,KAAA,EAAmB;AAC3C,EAAA,OAAO,MAAM,KAAA;AACjB;AAEO,SAAS,IAAO,EAAA,EAAwB;AAC3C,EAAA,OAAO,CAAC,KAAA,KAAgB;AACpB,IAAA,EAAA,CAAG,KAAK,CAAA;AACR,IAAA,OAAO,KAAA;AAAA,EACX,CAAA;AACJ;;;ACaO,SAAS,IAAA,CAAK,UAAe,GAAA,EAA+B;AAC/D,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAG,MAAM,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,MAAA;AACX;AAsBO,SAAS,QAAQ,GAAA,EAA6C;AACjE,EAAA,OAAO,CAAC,KAAA,KAAe;AACnB,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACjC,MAAA,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA,CAAG,MAAM,CAAA;AAAA,IAC3B;AACA,IAAA,OAAO,MAAA;AAAA,EACX,CAAA;AACJ;;;AC3DO,IAAM,IAAA,GAAO,KAAA,CAAM,CACtB,IAAA,EACA,GAAA,KACa;AACb,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAClB,IAAA,IAAI,OAAO,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA,CAAI,GAAG,CAAA;AAAA,IACzB;AAAA,EACJ,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACX,CAAC;AAEM,IAAM,IAAA,GAAO,KAAA,CAAM,CACtB,IAAA,EACA,GAAA,KACa;AACb,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAClB,IAAA,OAAO,OAAO,GAAG,CAAA;AAAA,EACrB,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACX,CAAC;AAEM,IAAM,IAAA,GAAO,KAAA,CAAM,CAAU,SAAA,EAAmC,GAAA,KAA4B;AAC/F,EAAA,IAAI,OAAA,GAAU,GAAA;AACd,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AACzB,IAAA,IAAI,WAAW,IAAA,EAAM;AACjB,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,OAAA;AACX,CAAC;AAEM,IAAM,KAAA,GAAQ,KAAA,CAAM,CACvB,GAAA,EACA,OACA,GAAA,KACI;AACJ,EAAA,OAAO,EAAE,GAAG,GAAA,EAAK,CAAC,GAAG,GAAG,KAAA,EAAM;AAClC,CAAC;AAEM,IAAM,MAAA,GAAS,KAAA,CAAM,CAAsC,GAAA,EAAQ,GAAA,KAAuB;AAC7F,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,EAAA,OAAO,OAAO,GAAG,CAAA;AACjB,EAAA,OAAO,MAAA;AACX,CAAC;;;AC7CM,IAAM,OAAA,GAAU,KAAA,CAAM,CAAO,EAAA,EAAsC,KAAA,KAAoB;AAC1F,EAAA,IAAI,CAAC,MAAA,CAAO,KAAK,KAAK,CAAC,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnC,IAAA,OAAO,EAAC;AAAA,EACZ;AACA,EAAA,MAAM,KAAA,GAAQ,KAAA;AACd,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,MAAM,SAAc,EAAC;AACrB,EAAA,MAAM,MAAA,GAAS,EAAA;AACf,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AAClC,IAAA,IAAI,CAAC,MAAA,CAAO,MAAM,KAAK,CAAC,OAAA,CAAQ,MAAM,CAAA,EAAG;AACrC,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,WAAA,GAAc,MAAA;AACpB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA,EAAA,EAAK;AACzC,MAAA,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,CAAC,CAAE,CAAA;AAAA,IAC/B;AAAA,EACJ;AACA,EAAA,OAAO,MAAA;AACX,CAAC;AAEM,IAAM,KAAA,GAAQ;AAEd,IAAM,OAAA,GAAU,CAAI,KAAA,KAAsB;AAC7C,EAAA,IAAI,CAAC,MAAA,CAAO,KAAK,KAAK,CAAC,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnC,IAAA,OAAO,EAAC;AAAA,EACZ;AACA,EAAA,MAAM,KAAA,GAAQ,KAAA;AACd,EAAA,MAAM,SAAc,EAAC;AACrB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,IAAA,IAAI,CAAC,MAAA,CAAO,QAAQ,KAAK,CAAC,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACzC,MAAA;AAAA,IACJ;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,CAAC,CAAE,CAAA;AAAA,IAC5B;AAAA,EACJ;AACA,EAAA,OAAO,MAAA;AACX;AAEO,IAAM,GAAA,GAAM,KAAA,CAAM,CAAO,IAAA,EAAW,IAAA,KAA6B;AACpE,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAM,CAAA;AAChD,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,IAAA,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,CAAK,CAAC,GAAI,IAAA,CAAK,CAAC,CAAE,CAAC,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,MAAA;AACX,CAAC;AAEM,IAAM,OAAA,GAAU,KAAA,CAAM,CACzB,EAAA,EACA,MACA,IAAA,KACM;AACN,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,MAAM,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAS,MAAM,CAAA;AAClC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,IAAA,MAAA,CAAO,CAAC,IAAI,EAAA,CAAG,IAAA,CAAK,CAAC,CAAA,EAAI,IAAA,CAAK,CAAC,CAAE,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,MAAA;AACX,CAAC;AAEM,IAAM,IAAA,GAAO,CAAI,KAAA,KAAoB;AACxC,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AACpC;AAEO,IAAM,MAAA,GAAS,KAAA,CAAM,CAAO,EAAA,EAAqB,KAAA,KAAoB;AACxE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAO;AACxB,EAAA,MAAM,SAAc,EAAC;AACrB,EAAA,IAAA,CAAK,CAAC,IAAA,KAAY;AACd,IAAA,MAAM,GAAA,GAAM,GAAG,IAAI,CAAA;AACnB,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AAChB,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IACpB;AAAA,EACJ,GAAG,KAAK,CAAA;AACR,EAAA,OAAO,MAAA;AACX,CAAC;;;AChFM,IAAM,QAAA,GAAW,KAAA,CAAM,OAC1B,EAAA,EACA,KAAA,KACe;AACf,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,MAAM,QAAA,GAAW,IAAI,KAAA,CAAkB,MAAM,CAAA;AAC7C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,IAAA,QAAA,CAAS,CAAC,CAAA,GAAI,EAAA,CAAG,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAC/B,CAAC;AAEM,IAAM,WAAA,GAAc,KAAA,CAAM,OAC7B,SAAA,EACA,KAAA,KACe;AACf,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,MAAM,QAAA,GAAW,IAAI,KAAA,CAAwB,MAAM,CAAA;AACnD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,IAAA,QAAA,CAAS,CAAC,CAAA,GAAI,SAAA,CAAU,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AAAA,EACxC;AACA,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAC1C,EAAA,MAAM,WAAgB,EAAC;AACvB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,IAAA,IAAI,OAAA,CAAQ,CAAC,CAAA,EAAG;AACZ,MAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAE,CAAA;AAAA,IAC3B;AAAA,EACJ;AACA,EAAA,OAAO,QAAA;AACX,CAAC;AAEM,IAAM,WAAA,GAAc,KAAA,CAAM,OAC7B,EAAA,EACA,KAAA,KACa;AACb,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAC9B,IAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,WAAA,GAAmB,MAAM,CAAC,CAAA;AAC9B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,WAAA,GAAe,MAAM,EAAA,CAAG,WAAA,EAAa,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AAAA,EACrD;AACA,EAAA,OAAO,WAAA;AACX,CAAC;AAEM,IAAM,SAAA,GAAY,KAAA,CAAM,OAC3B,EAAA,EACA,SACA,KAAA,KACa;AACb,EAAA,IAAI,WAAA,GAAc,OAAA;AAClB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,WAAA,GAAc,MAAM,EAAA,CAAG,WAAA,EAAa,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,WAAA;AACX,CAAC;AAoBM,SAAS,oBAAA,CACZ,KAAA,EACA,QAAA,EACA,QAAA,EACA,SACA,KAAA,EACyC;AACzC,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,oBAAA,CAAqB,OAAO,QAAA,EAAU,QAAA,EAAU,SAAS,IAAI,CAAA;AAAA,EACvF;AACA,EAAA,OAAA,CAAQ,YAAY;AAChB,IAAA,MAAM,KAAA,GAAQ,KAAA;AACd,IAAA,IAAI,WAAA,GAAc,OAAA;AAClB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,MAAA,MAAM,SAAS,MAAM,KAAA,CAAM,KAAA,CAAM,CAAC,GAAI,CAAC,CAAA;AACvC,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,MAAA,EAAQ,CAAC,CAAA;AACrC,MAAA,IAAI,IAAA,EAAM;AACN,QAAA,WAAA,GAAc,MAAM,QAAA,CAAS,WAAA,EAAa,MAAA,EAAQ,CAAC,CAAA;AAAA,MACvD;AAAA,IACJ;AACA,IAAA,OAAO,WAAA;AAAA,EACX,CAAA,GAAG;AACP;AAeO,SAAS,4BAAA,CACZ,KAAA,EACA,QAAA,EACA,QAAA,EACA,SACA,KAAA,EACyC;AACzC,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,CAAC,IAAA,KAAc,4BAAA,CAA6B,OAAO,QAAA,EAAU,QAAA,EAAU,SAAS,IAAI,CAAA;AAAA,EAC/F;AACA,EAAA,OAAA,CAAQ,YAAY;AAChB,IAAA,MAAM,KAAA,GAAQ,KAAA;AACd,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,cAAA,GAAiB,IAAI,KAAA,CAAkB,MAAM,CAAA;AACnD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,MAAA,cAAA,CAAe,CAAC,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAM,KAAA,CAAM,CAAC,CAAA,EAAI,CAAC,CAAC,CAAA;AAAA,IAC3D;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AAC/C,IAAA,MAAM,cAAA,GAAiB,IAAI,KAAA,CAAwB,MAAM,CAAA;AACzD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,MAAA,cAAA,CAAe,CAAC,IAAI,OAAA,CAAQ,OAAA,CAAQ,SAAS,MAAA,CAAO,CAAC,CAAA,EAAI,CAAC,CAAC,CAAA;AAAA,IAC/D;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA;AAC7C,IAAA,IAAI,WAAA,GAAc,OAAA;AAClB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC7B,MAAA,IAAI,IAAA,CAAK,CAAC,CAAA,EAAG;AACT,QAAA,WAAA,GAAc,MAAM,QAAA,CAAS,WAAA,EAAa,MAAA,CAAO,CAAC,GAAI,CAAC,CAAA;AAAA,MAC3D;AAAA,IACJ;AACA,IAAA,OAAO,WAAA;AAAA,EACX,CAAA,GAAG;AACP;AAEO,IAAM,SAAA,GAAY,KAAA,CAAM,OAC3B,EAAA,EACA,KAAA,KACgB;AAChB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,EAAA,CAAG,KAAA,CAAM,CAAC,CAAA,EAAI,CAAC,CAAA;AAAA,EACzB;AACJ,CAAC;AAsBD,eAAsB,SAAA,CAAU,UAAe,GAAA,EAAiD;AAC5F,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AAClB,IAAA,MAAA,GAAS,MAAM,GAAG,MAAM,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,MAAA;AACX;AAkBO,SAAS,aAAa,GAAA,EAA+D;AACxF,EAAA,OAAO,OAAO,KAAA,KAAe;AACzB,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AAClB,MAAA,MAAA,GAAS,MAAM,GAAG,MAAM,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,MAAA;AAAA,EACX,CAAA;AACJ;AAEO,IAAM,YAAA,GAAe,IAAI,GAAA,KAAkE;AAC9F,EAAA,OAAO,OAAO,KAAA,KAAe;AACzB,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,KAAA,IAAS,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACtC,MAAA,MAAA,GAAS,MAAM,GAAA,CAAI,CAAC,CAAA,CAAG,MAAM,CAAA;AAAA,IACjC;AACA,IAAA,OAAO,MAAA;AAAA,EACX,CAAA;AACJ;;;ACnEO,IAAM,GAAA,GAAM;AAAA,EACf,KAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACJ","file":"index.js","sourcesContent":["export function isFunction(obj: unknown): obj is (...args: any[]) => unknown {\n return !!(obj && (obj as any).constructor && (obj as any).call && (obj as any).apply);\n}\n\nexport function isObject(obj: unknown): obj is object {\n return isFunction(obj) || (!!obj && typeof obj === \"object\");\n}\n\nexport function isArray<T = unknown>(obj: unknown): obj is T[] {\n return Array.isArray(obj);\n}\n\nexport function isArguments(obj: unknown): obj is IArguments {\n return Object.prototype.toString.call(obj) === \"[object Arguments]\";\n}\n\nexport function isDate(obj: unknown): obj is Date {\n return Object.prototype.toString.call(obj) === \"[object Date]\";\n}\n\nexport function isNumber(obj: unknown): obj is number {\n return Object.prototype.toString.call(obj) === \"[object Number]\";\n}\n\nexport function isRegExp(obj: unknown): obj is RegExp {\n return Object.prototype.toString.call(obj) === \"[object RegExp]\";\n}\n\nexport function isString(obj: unknown): obj is string {\n return Object.prototype.toString.call(obj) === \"[object String]\";\n}\n\nexport function exists<T>(obj: T | null | undefined): obj is T {\n return obj != null;\n}\n\nexport function truthy<T>(obj: T | null | undefined | false): obj is T {\n return exists(obj) && obj !== false;\n}\n\nexport function falsy(obj: unknown): obj is null | undefined | false {\n return !truthy(obj);\n}\n","import type { AnyFunction, CurriedFunction } from \"./types\";\nimport { isFunction } from \"./typeChecks\";\n\nexport function curry<T extends AnyFunction>(func: T): CurriedFunction<T> {\n if (!isFunction(func)) {\n throw new Error(\"fjs Error: Invalid function\");\n }\n\n if (func.length === 2) {\n const curried2 = function (a: any, b?: any): any {\n if (arguments.length >= 2) {\n return func(a, b);\n }\n return (next: any) => curried2(a, next);\n };\n return curried2 as CurriedFunction<T>;\n }\n\n if (func.length === 3) {\n const curried3 = function (a: any, b?: any, c?: any): any {\n if (arguments.length >= 3) {\n return func(a, b, c);\n }\n if (arguments.length === 2) {\n return (next: any) => curried3(a, b, next);\n }\n return function (nextB: any, nextC?: any): any {\n if (arguments.length >= 2) {\n return curried3(a, nextB, nextC);\n }\n return (next: any) => curried3(a, nextB, next);\n };\n };\n return curried3 as CurriedFunction<T>;\n }\n\n function curried(...args: any[]): any {\n if (args.length === 0) {\n return curried;\n }\n\n if (args.length >= func.length) {\n return func(...args.slice(0, func.length));\n }\n\n return (...nextArgs: any[]) => curried(...args, ...nextArgs);\n }\n\n return curried as CurriedFunction<T>;\n}\n","import type { Mapper, Predicate, Reducer, Comparator } from \"./types\";\nimport { isArray, exists } from \"./typeChecks\";\n\nconst HARD_RETURN = Symbol(\"hardReturn\");\n\nconst eachArray = <T>(iterator: (value: T, index: number) => any, items: T[]): void => {\n for (let i = 0; i < items.length; i++) {\n if (iterator(items[i]!, i) === HARD_RETURN) {\n return;\n }\n }\n};\n\nconst mapArray = <T, U>(iterator: Mapper<T, U>, items: T[]): U[] => {\n const length = items.length;\n const mapped = new Array<U>(length);\n const fn = iterator;\n if (length > 0 && typeof items[0] === \"number\" && fn.length === 1) {\n for (let i = 0; i < length; i++) {\n mapped[i] = fn(items[i]!, i);\n }\n return mapped;\n }\n for (let i = 0; i < length; i++) {\n mapped[i] = fn(items[i]!, i);\n }\n return mapped;\n};\n\nconst foldArray = <T, U>(iterator: Reducer<T, U>, cumulate: U, items: T[]): U => {\n let acc = cumulate;\n if (items.length > 0 && typeof items[0] === \"number\" && typeof acc === \"number\") {\n let numberAcc = acc as unknown as number;\n for (let i = 0; i < items.length; i++) {\n numberAcc = iterator(numberAcc as unknown as U, items[i]!, i) as unknown as number;\n }\n return numberAcc as unknown as U;\n }\n for (let i = 0; i < items.length; i++) {\n acc = iterator(acc, items[i]!, i);\n }\n return acc;\n};\n\nconst reduceArray = <T>(iterator: Reducer<T, T>, items: T[]): T => {\n let acc = items[0];\n if (items.length > 1 && typeof acc === \"number\" && typeof items[1] === \"number\") {\n let numberAcc = acc as unknown as number;\n for (let i = 1; i < items.length; i++) {\n numberAcc = iterator(numberAcc as unknown as T, items[i]!, i - 1) as unknown as number;\n }\n return numberAcc as unknown as T;\n }\n for (let i = 1; i < items.length; i++) {\n acc = iterator(acc as T, items[i]!, i - 1);\n }\n return acc as T;\n};\n\nconst filterArray = <T>(iterator: Predicate<T>, items: T[]): T[] => {\n const filtered: T[] = [];\n const length = items.length;\n const fn = iterator;\n if (length > 0 && typeof items[0] === \"number\" && fn.length === 1) {\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n }\n if (fn.length >= 2) {\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n }\n for (let i = 0; i < length; i++) {\n const value = items[i]!;\n if (fn(value, i)) {\n filtered.push(value);\n }\n }\n return filtered;\n};\n\nexport function each<T>(iterator: (value: T, index: number) => any, items: T[]): void;\nexport function each<T>(iterator: (value: T, index: number) => any): (items: T[]) => void;\nexport function each<T>(iterator: (value: T, index: number) => any, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => each(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return;\n }\n eachArray(iterator, items);\n}\n\nexport function map<T, U>(iterator: Mapper<T, U>, items: T[]): U[];\nexport function map<T, U>(iterator: Mapper<T, U>): (items: T[]) => U[];\nexport function map<T, U>(iterator: Mapper<T, U>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => map(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n return mapArray(iterator, items);\n}\n\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate: U, items: T[]): U;\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate: U): (items: T[]) => U;\nexport function fold<T, U>(\n iterator: Reducer<T, U>\n): {\n (cumulate: U, items: T[]): U;\n (cumulate: U): (items: T[]) => U;\n};\nexport function fold<T, U>(iterator: Reducer<T, U>, cumulate?: U, items?: T[]): any {\n if (arguments.length >= 3) {\n if (!exists(items) || !isArray(items)) {\n return cumulate as U;\n }\n return foldArray(iterator, cumulate as U, items);\n }\n if (arguments.length === 2) {\n return (next: T[]) => fold(iterator, cumulate as U, next);\n }\n return function (nextCumulate: U, nextItems?: T[]): any {\n if (arguments.length >= 2) {\n return fold(iterator, nextCumulate, nextItems as T[]);\n }\n return (next: T[]) => fold(iterator, nextCumulate, next);\n };\n}\n\nexport const foldl = fold;\n\nexport function reduce<T>(iterator: Reducer<T, T>, items: T[]): T;\nexport function reduce<T>(iterator: Reducer<T, T>): (items: T[]) => T;\nexport function reduce<T>(iterator: Reducer<T, T>, items?: T[]): T | ((items: T[]) => T) {\n if (arguments.length < 2) {\n return (next: T[]) => reduce(iterator, next);\n }\n if (!exists(items) || !isArray(items) || items.length === 0) {\n throw new Error(\"fjs Error: Cannot reduce empty array without initial value\");\n }\n return reduceArray(iterator, items);\n}\n\nexport const reducel = reduce;\nexport const foldll = reduce;\n\nexport function clone<T>(items: T[]): T[] {\n const input = items ?? [];\n const result = new Array<T>(input.length);\n for (let i = 0; i < input.length; i++) {\n result[i] = input[i]!;\n }\n return result;\n}\n\nexport function first<T>(iterator: Predicate<T>, items: T[]): T | undefined;\nexport function first<T>(iterator: Predicate<T>): (items: T[]) => T | undefined;\nexport function first<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => first(iterator, next);\n }\n let result: T | undefined;\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n result = item;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return result;\n}\n\nexport const head = first;\nexport const take = first;\n\nexport function rest<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function rest<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function rest<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => rest(iterator, next);\n }\n const result = select(iterator, items as T[]);\n result.shift();\n return result;\n}\n\nexport const tail = rest;\nexport const drop = rest;\n\nexport function last<T>(iterator: Predicate<T>, items: T[]): T | undefined;\nexport function last<T>(iterator: Predicate<T>): (items: T[]) => T | undefined;\nexport function last<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => last(iterator, next);\n }\n const itemsClone = clone(items as T[]);\n return first(iterator, itemsClone.reverse());\n}\n\nexport function every<T>(iterator: Predicate<T>, items: T[]): boolean;\nexport function every<T>(iterator: Predicate<T>): (items: T[]) => boolean;\nexport function every<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => every(iterator, next);\n }\n let isEvery = true;\n each((item: T, index: number) => {\n if (!iterator(item, index)) {\n isEvery = false;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return isEvery;\n}\n\nexport const all = every;\n\nexport function any<T>(iterator: Predicate<T>, items: T[]): boolean;\nexport function any<T>(iterator: Predicate<T>): (items: T[]) => boolean;\nexport function any<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => any(iterator, next);\n }\n let isAny = false;\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n isAny = true;\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return isAny;\n}\n\nexport const contains = any;\n\nexport function select<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function select<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function select<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => select(iterator, next);\n }\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n return filterArray(iterator, items);\n}\n\nexport const filter = select;\n\nexport function best<T>(iterator: Comparator<T>, items: T[]): T | undefined;\nexport function best<T>(iterator: Comparator<T>): (items: T[]) => T | undefined;\nexport function best<T>(iterator: Comparator<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => best(iterator, next);\n }\n const compare = (arg1: T, arg2: T): T => {\n return iterator(arg1, arg2) ? arg1 : arg2;\n };\n return reduce(compare, items as T[]);\n}\n\nexport function whilst<T>(iterator: Predicate<T>, items: T[]): T[];\nexport function whilst<T>(iterator: Predicate<T>): (items: T[]) => T[];\nexport function whilst<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => whilst(iterator, next);\n }\n const result: T[] = [];\n each((item: T, index: number) => {\n if (iterator(item, index)) {\n result.push(item);\n } else {\n return HARD_RETURN;\n }\n return undefined;\n }, items as T[]);\n return result;\n}\n\nexport function partition<T>(iterator: Predicate<T>, items: T[]): [T[], T[]];\nexport function partition<T>(iterator: Predicate<T>): (items: T[]) => [T[], T[]];\nexport function partition<T>(iterator: Predicate<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => partition(iterator, next);\n }\n const truthy: T[] = [];\n const falsy: T[] = [];\n each((item: T, index: number) => {\n (iterator(item, index) ? truthy : falsy).push(item);\n }, items as T[]);\n return [truthy, falsy];\n}\n\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K,\n items: T[]\n): Record<K, T[]>;\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K\n): (items: T[]) => Record<K, T[]>;\nexport function group<T, K extends string | number | symbol>(\n iterator: (value: T) => K,\n items?: T[]\n): any {\n if (arguments.length < 2) {\n return (next: T[]) => group(iterator, next);\n }\n const result = {} as Record<K, T[]>;\n each((item: T) => {\n const key = iterator(item);\n const existing = result[key];\n if (existing) {\n existing.push(item);\n return;\n }\n result[key] = [item];\n }, items as T[]);\n return result;\n}\n\nexport function shuffle<T>(items: T[]): T[] {\n const result = clone(items);\n for (let i = 0; i < result.length; i++) {\n const j = Math.floor(Math.random() * (i + 1));\n const t = result[i]!;\n result[i] = result[j]!;\n result[j] = t;\n }\n return result;\n}\n\nexport const strictEquals = <T>(a: T, b: T): boolean => a === b;\n\nexport function nub<T>(comparator: Comparator<T>, items: T[]): T[];\nexport function nub<T>(comparator: Comparator<T>): (items: T[]) => T[];\nexport function nub<T>(comparator: Comparator<T>, items?: T[]): any {\n if (arguments.length < 2) {\n return (next: T[]) => nub(comparator, next);\n }\n const input = items as T[];\n if (comparator === strictEquals) {\n return Array.from(new Set(input));\n }\n const unique: T[] = input.length > 0 ? [input[0]!] : [];\n each((item: T) => {\n if (!any((value: T) => comparator(item, value), unique)) {\n unique.push(item);\n }\n }, input);\n return unique;\n}\n\nexport const unique = nub;\nexport const distinct = nub;\n","import type { UnaryFn, AnyFunction } from \"./types\";\nimport { isFunction } from \"./typeChecks\";\nimport { any } from \"./array\";\n\nexport function compose<A>(f: UnaryFn<A, A>): UnaryFn<A, A>;\nexport function compose<A, B>(f: UnaryFn<B, A>, g: UnaryFn<A, B>): UnaryFn<A, A>;\nexport function compose<A, B, C>(\n f: UnaryFn<C, A>,\n g: UnaryFn<B, C>,\n h: UnaryFn<A, B>\n): UnaryFn<A, A>;\nexport function compose<A, B, C, D>(\n f: UnaryFn<D, A>,\n g: UnaryFn<C, D>,\n h: UnaryFn<B, C>,\n i: UnaryFn<A, B>\n): UnaryFn<A, A>;\nexport function compose(...funcs: UnaryFn<any, any>[]): UnaryFn<any, any>;\nexport function compose(...funcs: UnaryFn<any, any>[]): UnaryFn<any, any> {\n const anyInvalid = any((func: unknown) => !isFunction(func));\n const total = funcs.length;\n\n if (anyInvalid(funcs)) {\n throw new Error(\"fjs Error: Invalid function to compose\");\n }\n\n return function (this: any, ...args: any[]) {\n let result: any = (funcs[total - 1] as AnyFunction).apply(this, args);\n for (let i = total - 2; i >= 0; i--) {\n result = (funcs[i] as AnyFunction).call(this, result);\n }\n return result;\n };\n}\n","import type { Curried2 } from \"./types\";\nimport { curry } from \"./curry\";\nimport { map } from \"./array\";\nimport { isArray } from \"./typeChecks\";\n\nexport function toArray<T extends Record<string, any>>(obj: T): Array<[keyof T, T[keyof T]]> {\n return map((key: keyof T) => [key, obj[key]], Object.keys(obj) as Array<keyof T>);\n}\n\nexport const apply = curry(<T extends Record<string, any>, K extends keyof T>(\n func: K | [K, ...any[]],\n items: T[]\n): any[] => {\n let method: K;\n let args: any[] = [];\n\n if (isArray(func)) {\n [method, ...args] = func as [K, ...any[]];\n } else {\n method = func;\n }\n\n return map((item: T) => {\n const fn = item[method];\n if (typeof fn === \"function\") {\n return fn.apply(item, args);\n }\n return fn;\n }, items);\n}) as unknown as Curried2<any, any[], any[]>;\n\nexport const assign = curry(<T extends Record<string, any>, U extends Record<string, any>>(\n obj1: T,\n obj2: U\n): U & T => {\n return { ...obj2, ...obj1 };\n}) as unknown as Curried2<Record<string, any>, Record<string, any>, Record<string, any>>;\n\nexport const extend = assign;\n\nexport function prop<K extends string | number | symbol>(property: K) {\n return function <T extends Record<K, any>>(obj: T): T[K] {\n return obj[property];\n };\n}\n\nexport const pluck = curry(<T, K extends keyof T>(property: K, items: T[]): Array<T[K]> => {\n return map(prop(property), items);\n}) as unknown as Curried2<any, any[], any[]>;\n","export function identity<T>(value: T): T {\n return value;\n}\n\nexport function constant<T>(value: T): () => T {\n return () => value;\n}\n\nexport function tap<T>(fn: (value: T) => void) {\n return (value: T): T => {\n fn(value);\n return value;\n };\n}\n","import type { UnaryFn } from \"./types\";\n\nexport function pipe<A>(value: A): A;\nexport function pipe<A, B>(value: A, fn1: UnaryFn<A, B>): B;\nexport function pipe<A, B, C>(value: A, fn1: UnaryFn<A, B>, fn2: UnaryFn<B, C>): C;\nexport function pipe<A, B, C, D>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>\n): D;\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>\n): E;\nexport function pipe<A, B, C, D, E, F>(\n value: A,\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>,\n fn5: UnaryFn<E, F>\n): F;\nexport function pipe(value: any, ...fns: UnaryFn<any, any>[]): any {\n let result = value;\n for (let i = 0; i < fns.length; i++) {\n result = fns[i]!(result);\n }\n return result;\n}\n\nexport function flow<A, B>(fn1: UnaryFn<A, B>): UnaryFn<A, B>;\nexport function flow<A, B, C>(fn1: UnaryFn<A, B>, fn2: UnaryFn<B, C>): UnaryFn<A, C>;\nexport function flow<A, B, C, D>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>\n): UnaryFn<A, D>;\nexport function flow<A, B, C, D, E>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>\n): UnaryFn<A, E>;\nexport function flow<A, B, C, D, E, F>(\n fn1: UnaryFn<A, B>,\n fn2: UnaryFn<B, C>,\n fn3: UnaryFn<C, D>,\n fn4: UnaryFn<D, E>,\n fn5: UnaryFn<E, F>\n): UnaryFn<A, F>;\nexport function flow(...fns: UnaryFn<any, any>[]): UnaryFn<any, any> {\n return (value: any) => {\n let result = value;\n for (let i = 0; i < fns.length; i++) {\n result = fns[i]!(result);\n }\n return result;\n };\n}\n","import type { Curried2, Curried3 } from \"./types\";\nimport { curry } from \"./curry\";\n\nexport const pick = curry(<T extends object, K extends keyof T>(\n keys: K[],\n obj: T\n): Pick<T, K> => {\n const result = {} as Pick<T, K>;\n keys.forEach((key) => {\n if (key in obj) {\n result[key] = obj[key];\n }\n });\n return result;\n}) as unknown as Curried2<string[], any, any>;\n\nexport const omit = curry(<T extends object, K extends keyof T>(\n keys: K[],\n obj: T\n): Omit<T, K> => {\n const result = { ...obj } as any;\n keys.forEach((key) => {\n delete result[key];\n });\n return result as Omit<T, K>;\n}) as unknown as Curried2<string[], any, any>;\n\nexport const path = curry(<T = any>(pathArray: Array<string | number>, obj: any): T | undefined => {\n let current = obj;\n for (const key of pathArray) {\n if (current == null) {\n return undefined;\n }\n current = current[key];\n }\n return current as T;\n}) as unknown as Curried2<Array<string | number>, any, any>;\n\nexport const assoc = curry(<T extends object, K extends keyof T>(\n key: K,\n value: T[K],\n obj: T\n): T => {\n return { ...obj, [key]: value };\n}) as unknown as Curried3<string, any, any, any>;\n\nexport const dissoc = curry(<T extends object, K extends keyof T>(key: K, obj: T): Omit<T, K> => {\n const result = { ...obj } as any;\n delete result[key];\n return result as Omit<T, K>;\n}) as unknown as Curried2<string, any, any>;\n","import type { Curried2, Curried3 } from \"./types\";\nimport { curry } from \"./curry\";\nimport { each } from \"./array\";\nimport { exists, isArray } from \"./typeChecks\";\n\nexport const flatMap = curry(<T, U>(fn: (value: T, index: number) => U[], items: T[]): U[] => {\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n const input = items;\n const length = input.length;\n const result: U[] = [];\n const mapper = fn;\n for (let i = 0; i < length; i++) {\n const mapped = mapper(input[i]!, i);\n if (!exists(mapped) || !isArray(mapped)) {\n continue;\n }\n const mappedItems = mapped;\n for (let j = 0; j < mappedItems.length; j++) {\n result.push(mappedItems[j]!);\n }\n }\n return result;\n}) as unknown as Curried2<(value: any, index: number) => any[], any[], any[]>;\n\nexport const chain = flatMap;\n\nexport const flatten = <T>(items: T[][]): T[] => {\n if (!exists(items) || !isArray(items)) {\n return [];\n }\n const input = items;\n const result: T[] = [];\n for (let i = 0; i < input.length; i++) {\n const subArray = input[i]!;\n if (!exists(subArray) || !isArray(subArray)) {\n continue;\n }\n for (let j = 0; j < subArray.length; j++) {\n result.push(subArray[j]!);\n }\n }\n return result;\n};\n\nexport const zip = curry(<T, U>(arr1: T[], arr2: U[]): Array<[T, U]> => {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n for (let i = 0; i < length; i++) {\n result.push([arr1[i]!, arr2[i]!]);\n }\n return result;\n}) as unknown as Curried2<any[], any[], Array<[any, any]>>;\n\nexport const zipWith = curry(<T, U, R>(\n fn: (a: T, b: U) => R,\n arr1: T[],\n arr2: U[]\n): R[] => {\n const length = Math.min(arr1.length, arr2.length);\n const result = new Array<R>(length);\n for (let i = 0; i < length; i++) {\n result[i] = fn(arr1[i]!, arr2[i]!);\n }\n return result;\n}) as unknown as Curried3<(a: any, b: any) => any, any[], any[], any[]>;\n\nexport const uniq = <T>(items: T[]): T[] => {\n return Array.from(new Set(items));\n};\n\nexport const uniqBy = curry(<T, K>(fn: (value: T) => K, items: T[]): T[] => {\n const seen = new Set<K>();\n const result: T[] = [];\n each((item: T) => {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }, items);\n return result;\n}) as unknown as Curried2<(value: any) => any, any[], any[]>;\n","import type { Curried2, Curried3, UnaryFn } from \"./types\";\nimport { curry } from \"./curry\";\n\nexport const mapAsync = curry(async <T, U>(\n fn: (value: T, index: number) => Promise<U>,\n items: T[]\n): Promise<U[]> => {\n const length = items.length;\n const promises = new Array<Promise<U>>(length);\n for (let i = 0; i < length; i++) {\n promises[i] = fn(items[i]!, i);\n }\n return Promise.all(promises);\n}) as unknown as Curried2<(value: any, index: number) => Promise<any>, any[], Promise<any[]>>;\n\nexport const filterAsync = curry(async <T>(\n predicate: (value: T, index: number) => Promise<boolean>,\n items: T[]\n): Promise<T[]> => {\n const length = items.length;\n const promises = new Array<Promise<boolean>>(length);\n for (let i = 0; i < length; i++) {\n promises[i] = predicate(items[i]!, i);\n }\n const results = await Promise.all(promises);\n const filtered: T[] = [];\n for (let i = 0; i < length; i++) {\n if (results[i]) {\n filtered.push(items[i]!);\n }\n }\n return filtered;\n}) as unknown as Curried2<(value: any, index: number) => Promise<boolean>, any[], Promise<any[]>>;\n\nexport const reduceAsync = curry(async <T>(\n fn: (accumulator: T, value: T, index: number) => Promise<T>,\n items: T[]\n): Promise<T> => {\n if (!items || items.length === 0) {\n throw new Error(\"fjs Error: Cannot reduce empty array without initial value\");\n }\n let accumulator: any = items[0]!;\n for (let i = 1; i < items.length; i++) {\n accumulator = (await fn(accumulator, items[i]!, i)) as T;\n }\n return accumulator;\n}) as unknown as Curried2<(accumulator: any, value: any, index: number) => Promise<any>, any[], Promise<any>>;\n\nexport const foldAsync = curry(async <T, U>(\n fn: (accumulator: U, value: T, index: number) => Promise<U>,\n initial: U,\n items: T[]\n): Promise<U> => {\n let accumulator = initial;\n for (let i = 0; i < items.length; i++) {\n accumulator = await fn(accumulator, items[i]!, i);\n }\n return accumulator;\n}) as unknown as Curried3<\n (accumulator: any, value: any, index: number) => Promise<any>,\n any,\n any[],\n Promise<any>\n>;\n\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items: T[]\n): Promise<R>;\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R\n): (items: T[]) => Promise<R>;\nexport function mapFilterReduceAsync<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items?: T[]\n): Promise<R> | ((items: T[]) => Promise<R>) {\n if (arguments.length < 5) {\n return (next: T[]) => mapFilterReduceAsync(mapFn, filterFn, reduceFn, initial, next);\n }\n return (async () => {\n const input = items as T[];\n let accumulator = initial;\n for (let i = 0; i < input.length; i++) {\n const mapped = await mapFn(input[i]!, i);\n const keep = await filterFn(mapped, i);\n if (keep) {\n accumulator = await reduceFn(accumulator, mapped, i);\n }\n }\n return accumulator;\n })();\n}\n\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items: T[]\n): Promise<R>;\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R\n): (items: T[]) => Promise<R>;\nexport function mapFilterReduceAsyncParallel<T, U, R>(\n mapFn: (value: T, index: number) => Promise<U> | U,\n filterFn: (value: U, index: number) => Promise<boolean> | boolean,\n reduceFn: (accumulator: R, value: U, index: number) => Promise<R> | R,\n initial: R,\n items?: T[]\n): Promise<R> | ((items: T[]) => Promise<R>) {\n if (arguments.length < 5) {\n return (next: T[]) => mapFilterReduceAsyncParallel(mapFn, filterFn, reduceFn, initial, next);\n }\n return (async () => {\n const input = items as T[];\n const length = input.length;\n const mappedPromises = new Array<Promise<U>>(length);\n for (let i = 0; i < length; i++) {\n mappedPromises[i] = Promise.resolve(mapFn(input[i]!, i));\n }\n const mapped = await Promise.all(mappedPromises);\n const filterPromises = new Array<Promise<boolean>>(length);\n for (let i = 0; i < length; i++) {\n filterPromises[i] = Promise.resolve(filterFn(mapped[i]!, i));\n }\n const keep = await Promise.all(filterPromises);\n let accumulator = initial;\n for (let i = 0; i < length; i++) {\n if (keep[i]) {\n accumulator = await reduceFn(accumulator, mapped[i]!, i);\n }\n }\n return accumulator;\n })();\n}\n\nexport const eachAsync = curry(async <T>(\n fn: (value: T, index: number) => Promise<void>,\n items: T[]\n): Promise<void> => {\n for (let i = 0; i < items.length; i++) {\n await fn(items[i]!, i);\n }\n}) as unknown as Curried2<(value: any, index: number) => Promise<void>, any[], Promise<void>>;\n\nexport async function pipeAsync<A>(value: A): Promise<A>;\nexport async function pipeAsync<A, B>(value: A, fn1: UnaryFn<A, Promise<B>>): Promise<B>;\nexport async function pipeAsync<A, B, C>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>\n): Promise<C>;\nexport async function pipeAsync<A, B, C, D>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>\n): Promise<D>;\nexport async function pipeAsync<A, B, C, D, E>(\n value: A,\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>,\n fn4: UnaryFn<D, Promise<E>>\n): Promise<E>;\nexport async function pipeAsync(value: any, ...fns: UnaryFn<any, Promise<any>>[]): Promise<any> {\n let result = value;\n for (const fn of fns) {\n result = await fn(result);\n }\n return result;\n}\n\nexport function flowAsync<A, B>(fn1: UnaryFn<A, Promise<B>>): UnaryFn<A, Promise<B>>;\nexport function flowAsync<A, B, C>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>\n): UnaryFn<A, Promise<C>>;\nexport function flowAsync<A, B, C, D>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>\n): UnaryFn<A, Promise<D>>;\nexport function flowAsync<A, B, C, D, E>(\n fn1: UnaryFn<A, Promise<B>>,\n fn2: UnaryFn<B, Promise<C>>,\n fn3: UnaryFn<C, Promise<D>>,\n fn4: UnaryFn<D, Promise<E>>\n): UnaryFn<A, Promise<E>>;\nexport function flowAsync(...fns: UnaryFn<any, Promise<any>>[]): UnaryFn<any, Promise<any>> {\n return async (value: any) => {\n let result = value;\n for (const fn of fns) {\n result = await fn(result);\n }\n return result;\n };\n}\n\nexport const composeAsync = (...fns: UnaryFn<any, Promise<any>>[]): UnaryFn<any, Promise<any>> => {\n return async (value: any) => {\n let result = value;\n for (let i = fns.length - 1; i >= 0; i--) {\n result = await fns[i]!(result);\n }\n return result;\n };\n};\n","import { curry } from \"./curry\";\nimport {\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct\n} from \"./array\";\nimport { compose } from \"./composition\";\nimport { toArray, apply, assign, extend, prop, pluck } from \"./object\";\nimport {\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy\n} from \"./typeChecks\";\nimport { identity, constant, tap } from \"./utilities\";\nimport { pipe, flow } from \"./pipe\";\nimport { pick, omit, path, assoc, dissoc } from \"./objectOps\";\nimport { flatMap, chain, flatten, zip, zipWith, uniq, uniqBy } from \"./arrayOps\";\nimport {\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n} from \"./async\";\n\nexport { curry } from \"./curry\";\n\nexport {\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct\n} from \"./array\";\n\nexport { compose } from \"./composition\";\n\nexport { toArray, apply, assign, extend, prop, pluck } from \"./object\";\n\nexport {\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy\n} from \"./typeChecks\";\n\nexport { identity, constant, tap } from \"./utilities\";\n\nexport { pipe, flow } from \"./pipe\";\n\nexport { pick, omit, path, assoc, dissoc } from \"./objectOps\";\n\nexport { flatMap, chain, flatten, zip, zipWith, uniq, uniqBy } from \"./arrayOps\";\n\nexport {\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n} from \"./async\";\n\nexport type {\n Predicate,\n Comparator,\n Mapper,\n Reducer,\n UnaryFn,\n Curried2,\n Curried3,\n Curried4,\n AnyFunction,\n CurriedFunction\n} from \"./types\";\n\nexport const fjs = {\n curry,\n each,\n map,\n fold,\n foldl,\n reduce,\n reducel,\n foldll,\n clone,\n first,\n head,\n take,\n rest,\n tail,\n drop,\n last,\n every,\n all,\n any,\n contains,\n select,\n filter,\n best,\n whilst,\n partition,\n group,\n shuffle,\n nub,\n strictEquals,\n unique,\n distinct,\n compose,\n toArray,\n apply,\n assign,\n extend,\n prop,\n pluck,\n isFunction,\n isObject,\n isArray,\n isArguments,\n isDate,\n isNumber,\n isRegExp,\n isString,\n exists,\n truthy,\n falsy,\n identity,\n constant,\n tap,\n pipe,\n flow,\n pick,\n omit,\n path,\n assoc,\n dissoc,\n flatMap,\n chain,\n flatten,\n zip,\n zipWith,\n uniq,\n uniqBy,\n mapAsync,\n filterAsync,\n reduceAsync,\n foldAsync,\n eachAsync,\n pipeAsync,\n flowAsync,\n composeAsync,\n mapFilterReduceAsync,\n mapFilterReduceAsyncParallel\n};\n"]}

@@ -1,1 +0,1 @@

function m(n){return !!(n&&n.constructor&&n.call&&n.apply)}function N(n){return m(n)||!!n&&typeof n=="object"}function y(n){return Array.isArray(n)}function W(n){return Object.prototype.toString.call(n)==="[object Arguments]"}function H(n){return Object.prototype.toString.call(n)==="[object Date]"}function _(n){return Object.prototype.toString.call(n)==="[object Number]"}function G(n){return Object.prototype.toString.call(n)==="[object RegExp]"}function J(n){return Object.prototype.toString.call(n)==="[object String]"}function f(n){return n!=null}function v(n){return f(n)&&n!==false}function L(n){return !v(n)}function s(n){if(!m(n))throw new Error("fjs Error: Invalid function");if(n.length===2){let e=function(r,o,...a){if(arguments.length>=2){if(a.length===0)return n(r,o);let i=n(r,o);for(let u=0;u<a.length;u++)i=n(i,a[u],u);return i}return (i,...u)=>e(r,i,...u)};return e}if(n.length===3){let e=function(r,o,a,...i){if(arguments.length>=3){if(i.length===0)return n(r,o,a);let u=n(r,o,a);for(let c=0;c<i.length;c++)u=n(u,i[c],c);return u}return arguments.length===2?(u,...c)=>e(r,o,u,...c):function(u,c,...T){return arguments.length>=2?e(r,u,c,...T):(I,...b)=>e(r,u,I,...b)}};return e}function t(...e){if(e.length===0)return t;if(e.length>=n.length){if(e.length===n.length)return n(...e);let r=n(...e.slice(0,n.length)),o=e.slice(n.length);for(let a=0;a<o.length;a++)r=n(r,o[a],a);return r}return (...r)=>t(...e,...r)}return t}var C=Symbol("hardReturn"),On=(n,t)=>{for(let e=0;e<t.length;e++)if(n(t[e],e)===C)return},Sn=(n,t)=>{let e=t.length,r=new Array(e),o=n;if(e>0&&typeof t[0]=="number"&&o.length===1){for(let a=0;a<e;a++)r[a]=o(t[a],a);return r}for(let a=0;a<e;a++)r[a]=o(t[a],a);return r},zn=(n,t,e)=>{let r=t;if(e.length>0&&typeof e[0]=="number"&&typeof r=="number"){let o=r;for(let a=0;a<e.length;a++)o=n(o,e[a],a);return o}for(let o=0;o<e.length;o++)r=n(r,e[o],o);return r},In=(n,t)=>{let e=t[0];if(t.length>1&&typeof e=="number"&&typeof t[1]=="number"){let r=e;for(let o=1;o<t.length;o++)r=n(r,t[o],o-1);return r}for(let r=1;r<t.length;r++)e=n(e,t[r],r-1);return e},Nn=(n,t)=>{let e=[],r=t.length,o=n;if(r>0&&typeof t[0]=="number"&&o.length===1){for(let a=0;a<r;a++){let i=t[a];o(i,a)&&e.push(i);}return e}if(o.length>=2){for(let a=0;a<r;a++){let i=t[a];o(i,a)&&e.push(i);}return e}for(let a=0;a<r;a++){let i=t[a];o(i,a)&&e.push(i);}return e};function p(n,t){if(arguments.length<2)return e=>p(n,e);!f(t)||!y(t)||On(n,t);}function d(n,t){return arguments.length<2?e=>d(n,e):!f(t)||!y(t)?[]:Sn(n,t)}function U(n,t,e){return arguments.length>=3?!f(e)||!y(e)?t:zn(n,t,e):arguments.length===2?r=>U(n,t,r):function(r,o){return arguments.length>=2?U(n,r,o):a=>U(n,r,a)}}var Q=U;function A(n,t){if(arguments.length<2)return e=>A(n,e);if(!f(t)||!y(t)||t.length===0)throw new Error("fjs Error: Cannot reduce empty array without initial value");return In(n,t)}var V=A,X=A;function w(n){let t=n??[],e=new Array(t.length);for(let r=0;r<t.length;r++)e[r]=t[r];return e}function g(n,t){if(arguments.length<2)return r=>g(n,r);let e;return p((r,o)=>{if(n(r,o))return e=r,C},t),e}var Y=g,Z=g;function h(n,t){if(arguments.length<2)return r=>h(n,r);let e=F(n,t);return e.shift(),e}var $=h,nn=h;function B(n,t){if(arguments.length<2)return r=>B(n,r);let e=w(t);return g(n,e.reverse())}function R(n,t){if(arguments.length<2)return r=>R(n,r);let e=true;return p((r,o)=>{if(!n(r,o))return e=false,C},t),e}var en=R;function x(n,t){if(arguments.length<2)return r=>x(n,r);let e=false;return p((r,o)=>{if(n(r,o))return e=true,C},t),e}var rn=x;function F(n,t){return arguments.length<2?e=>F(n,e):!f(t)||!y(t)?[]:Nn(n,t)}var tn=F;function k(n,t){return arguments.length<2?r=>k(n,r):A((r,o)=>n(r,o)?r:o,t)}function D(n,t){if(arguments.length<2)return r=>D(n,r);let e=[];return p((r,o)=>{if(n(r,o))e.push(r);else return C},t),e}function K(n,t){if(arguments.length<2)return o=>K(n,o);let e=[],r=[];return p((o,a)=>{(n(o,a)?e:r).push(o);},t),[e,r]}function E(n,t){if(arguments.length<2)return r=>E(n,r);let e={};return p(r=>{let o=n(r),a=e[o];if(a){a.push(r);return}e[o]=[r];},t),e}function on(n){let t=w(n);for(let e=0;e<t.length;e++){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o;}return t}var j=(n,t)=>n===t;function P(n,t){if(arguments.length<2)return o=>P(n,o);let e=t;if(n===j)return Array.from(new Set(e));let r=e.length>0?[e[0]]:[];return p(o=>{x(a=>n(o,a),r)||r.push(o);},e),r}var an=P,un=P;function sn(...n){let t=x(r=>!m(r)),e=n.length;if(t(n))throw new Error("fjs Error: Invalid function to compose");return function(...r){let o=n[e-1].apply(this,r);for(let a=e-2;a>=0;a--)o=n[a].call(this,o);return o}}function cn(n){return d(t=>[t,n[t]],Object.keys(n))}var ln=s((n,t)=>{let e,r=[];return y(n)?[e,...r]=n:e=n,d(o=>{let a=o[e];return typeof a=="function"?a.apply(o,r):a},t)}),q=s((n,t)=>({...t,...n})),yn=q;function M(n){return function(t){return t[n]}}var fn=s((n,t)=>d(M(n),t));function pn(n){return n}function Tn(n){return ()=>n}function mn(n){return t=>(n(t),t)}function dn(n,...t){let e=n;for(let r=0;r<t.length;r++)e=t[r](e);return e}function xn(...n){return t=>{let e=t;for(let r=0;r<n.length;r++)e=n[r](e);return e}}var Un=s((n,t)=>{let e={};return n.forEach(r=>{r in t&&(e[r]=t[r]);}),e}),An=s((n,t)=>{let e={...t};return n.forEach(r=>{delete e[r];}),e}),gn=s((n,t)=>{let e=t;for(let r of n){if(e==null)return;e=e[r];}return e}),hn=s((n,t,e)=>({...e,[n]:t})),Fn=s((n,t)=>{let e={...t};return delete e[n],e});var O=s((n,t)=>{if(!f(t)||!y(t))return [];let e=t,r=e.length,o=[],a=n;for(let i=0;i<r;i++){let u=a(e[i],i);if(!f(u)||!y(u))continue;let c=u;for(let T=0;T<c.length;T++)o.push(c[T]);}return o}),Pn=O,bn=n=>{if(!f(n)||!y(n))return [];let t=n,e=[];for(let r=0;r<t.length;r++){let o=t[r];if(!(!f(o)||!y(o)))for(let a=0;a<o.length;a++)e.push(o[a]);}return e},Cn=s((n,t)=>{let e=Math.min(n.length,t.length),r=[];for(let o=0;o<e;o++)r.push([n[o],t[o]]);return r}),wn=s((n,t,e)=>{let r=Math.min(t.length,e.length),o=new Array(r);for(let a=0;a<r;a++)o[a]=n(t[a],e[a]);return o}),Rn=n=>Array.from(new Set(n)),vn=s((n,t)=>{let e=new Set,r=[];return p(o=>{let a=n(o);e.has(a)||(e.add(a),r.push(o));},t),r});var Bn=s(async(n,t)=>{let e=t.length,r=new Array(e);for(let o=0;o<e;o++)r[o]=n(t[o],o);return Promise.all(r)}),kn=s(async(n,t)=>{let e=t.length,r=new Array(e);for(let i=0;i<e;i++)r[i]=n(t[i],i);let o=await Promise.all(r),a=[];for(let i=0;i<e;i++)o[i]&&a.push(t[i]);return a}),Dn=s(async(n,t)=>{if(!t||t.length===0)throw new Error("fjs Error: Cannot reduce empty array without initial value");let e=t[0];for(let r=1;r<t.length;r++)e=await n(e,t[r],r);return e}),Kn=s(async(n,t,e)=>{let r=t;for(let o=0;o<e.length;o++)r=await n(r,e[o],o);return r});function S(n,t,e,r,o){return arguments.length<5?a=>S(n,t,e,r,a):(async()=>{let a=o,i=r;for(let u=0;u<a.length;u++){let c=await n(a[u],u);await t(c,u)&&(i=await e(i,c,u));}return i})()}function z(n,t,e,r,o){return arguments.length<5?a=>z(n,t,e,r,a):(async()=>{let a=o,i=a.length,u=new Array(i);for(let l=0;l<i;l++)u[l]=Promise.resolve(n(a[l],l));let c=await Promise.all(u),T=new Array(i);for(let l=0;l<i;l++)T[l]=Promise.resolve(t(c[l],l));let I=await Promise.all(T),b=r;for(let l=0;l<i;l++)I[l]&&(b=await e(b,c[l],l));return b})()}var En=s(async(n,t)=>{for(let e=0;e<t.length;e++)await n(t[e],e);});async function jn(n,...t){let e=n;for(let r of t)e=await r(e);return e}function qn(...n){return async t=>{let e=t;for(let r of n)e=await r(e);return e}}var Mn=(...n)=>async t=>{let e=t;for(let r=n.length-1;r>=0;r--)e=await n[r](e);return e};var ge={curry:s,each:p,map:d,fold:U,foldl:Q,reduce:A,reducel:V,foldll:X,clone:w,first:g,head:Y,take:Z,rest:h,tail:$,drop:nn,last:B,every:R,all:en,any:x,contains:rn,select:F,filter:tn,best:k,whilst:D,partition:K,group:E,shuffle:on,nub:P,strictEquals:j,unique:an,distinct:un,compose:sn,toArray:cn,apply:ln,assign:q,extend:yn,prop:M,pluck:fn,isFunction:m,isObject:N,isArray:y,isArguments:W,isDate:H,isNumber:_,isRegExp:G,isString:J,exists:f,truthy:v,falsy:L,identity:pn,constant:Tn,tap:mn,pipe:dn,flow:xn,pick:Un,omit:An,path:gn,assoc:hn,dissoc:Fn,flatMap:O,chain:Pn,flatten:bn,zip:Cn,zipWith:wn,uniq:Rn,uniqBy:vn,mapAsync:Bn,filterAsync:kn,reduceAsync:Dn,foldAsync:Kn,eachAsync:En,pipeAsync:jn,flowAsync:qn,composeAsync:Mn,mapFilterReduceAsync:S,mapFilterReduceAsyncParallel:z};export{en as all,x as any,ln as apply,q as assign,hn as assoc,k as best,Pn as chain,w as clone,sn as compose,Mn as composeAsync,Tn as constant,rn as contains,s as curry,Fn as dissoc,un as distinct,nn as drop,p as each,En as eachAsync,R as every,f as exists,yn as extend,L as falsy,tn as filter,kn as filterAsync,g as first,ge as fjs,O as flatMap,bn as flatten,xn as flow,qn as flowAsync,U as fold,Kn as foldAsync,Q as foldl,X as foldll,E as group,Y as head,pn as identity,W as isArguments,y as isArray,H as isDate,m as isFunction,_ as isNumber,N as isObject,G as isRegExp,J as isString,B as last,d as map,Bn as mapAsync,S as mapFilterReduceAsync,z as mapFilterReduceAsyncParallel,P as nub,An as omit,K as partition,gn as path,Un as pick,dn as pipe,jn as pipeAsync,fn as pluck,M as prop,A as reduce,Dn as reduceAsync,V as reducel,h as rest,F as select,on as shuffle,j as strictEquals,$ as tail,Z as take,mn as tap,cn as toArray,v as truthy,Rn as uniq,vn as uniqBy,an as unique,D as whilst,Cn as zip,wn as zipWith};
function T(n){return !!(n&&n.constructor&&n.call&&n.apply)}function I(n){return T(n)||!!n&&typeof n=="object"}function c(n){return Array.isArray(n)}function N(n){return Object.prototype.toString.call(n)==="[object Arguments]"}function W(n){return Object.prototype.toString.call(n)==="[object Date]"}function H(n){return Object.prototype.toString.call(n)==="[object Number]"}function _(n){return Object.prototype.toString.call(n)==="[object RegExp]"}function G(n){return Object.prototype.toString.call(n)==="[object String]"}function y(n){return n!=null}function R(n){return y(n)&&n!==false}function J(n){return !R(n)}function u(n){if(!T(n))throw new Error("fjs Error: Invalid function");if(n.length===2){let e=function(t,o){return arguments.length>=2?n(t,o):a=>e(t,a)};return e}if(n.length===3){let e=function(t,o,a){return arguments.length>=3?n(t,o,a):arguments.length===2?i=>e(t,o,i):function(i,l){return arguments.length>=2?e(t,i,l):p=>e(t,i,p)}};return e}function r(...e){return e.length===0?r:e.length>=n.length?n(...e.slice(0,n.length)):(...t)=>r(...e,...t)}return r}var b=Symbol("hardReturn"),On=(n,r)=>{for(let e=0;e<r.length;e++)if(n(r[e],e)===b)return},Sn=(n,r)=>{let e=r.length,t=new Array(e),o=n;if(e>0&&typeof r[0]=="number"&&o.length===1){for(let a=0;a<e;a++)t[a]=o(r[a],a);return t}for(let a=0;a<e;a++)t[a]=o(r[a],a);return t},zn=(n,r,e)=>{let t=r;if(e.length>0&&typeof e[0]=="number"&&typeof t=="number"){let o=t;for(let a=0;a<e.length;a++)o=n(o,e[a],a);return o}for(let o=0;o<e.length;o++)t=n(t,e[o],o);return t},In=(n,r)=>{let e=r[0];if(r.length>1&&typeof e=="number"&&typeof r[1]=="number"){let t=e;for(let o=1;o<r.length;o++)t=n(t,r[o],o-1);return t}for(let t=1;t<r.length;t++)e=n(e,r[t],t-1);return e},Nn=(n,r)=>{let e=[],t=r.length,o=n;if(t>0&&typeof r[0]=="number"&&o.length===1){for(let a=0;a<t;a++){let i=r[a];o(i,a)&&e.push(i);}return e}if(o.length>=2){for(let a=0;a<t;a++){let i=r[a];o(i,a)&&e.push(i);}return e}for(let a=0;a<t;a++){let i=r[a];o(i,a)&&e.push(i);}return e};function f(n,r){if(arguments.length<2)return e=>f(n,e);!y(r)||!c(r)||On(n,r);}function m(n,r){return arguments.length<2?e=>m(n,e):!y(r)||!c(r)?[]:Sn(n,r)}function U(n,r,e){return arguments.length>=3?!y(e)||!c(e)?r:zn(n,r,e):arguments.length===2?t=>U(n,r,t):function(t,o){return arguments.length>=2?U(n,t,o):a=>U(n,t,a)}}var L=U;function A(n,r){if(arguments.length<2)return e=>A(n,e);if(!y(r)||!c(r)||r.length===0)throw new Error("fjs Error: Cannot reduce empty array without initial value");return In(n,r)}var Q=A,V=A;function C(n){let r=n??[],e=new Array(r.length);for(let t=0;t<r.length;t++)e[t]=r[t];return e}function g(n,r){if(arguments.length<2)return t=>g(n,t);let e;return f((t,o)=>{if(n(t,o))return e=t,b},r),e}var X=g,Y=g;function h(n,r){if(arguments.length<2)return t=>h(n,t);let e=F(n,r);return e.shift(),e}var Z=h,$=h;function v(n,r){if(arguments.length<2)return t=>v(n,t);let e=C(r);return g(n,e.reverse())}function w(n,r){if(arguments.length<2)return t=>w(n,t);let e=true;return f((t,o)=>{if(!n(t,o))return e=false,b},r),e}var nn=w;function d(n,r){if(arguments.length<2)return t=>d(n,t);let e=false;return f((t,o)=>{if(n(t,o))return e=true,b},r),e}var en=d;function F(n,r){return arguments.length<2?e=>F(n,e):!y(r)||!c(r)?[]:Nn(n,r)}var rn=F;function B(n,r){return arguments.length<2?t=>B(n,t):A((t,o)=>n(t,o)?t:o,r)}function k(n,r){if(arguments.length<2)return t=>k(n,t);let e=[];return f((t,o)=>{if(n(t,o))e.push(t);else return b},r),e}function D(n,r){if(arguments.length<2)return o=>D(n,o);let e=[],t=[];return f((o,a)=>{(n(o,a)?e:t).push(o);},r),[e,t]}function K(n,r){if(arguments.length<2)return t=>K(n,t);let e={};return f(t=>{let o=n(t),a=e[o];if(a){a.push(t);return}e[o]=[t];},r),e}function tn(n){let r=C(n);for(let e=0;e<r.length;e++){let t=Math.floor(Math.random()*(e+1)),o=r[e];r[e]=r[t],r[t]=o;}return r}var E=(n,r)=>n===r;function P(n,r){if(arguments.length<2)return o=>P(n,o);let e=r;if(n===E)return Array.from(new Set(e));let t=e.length>0?[e[0]]:[];return f(o=>{d(a=>n(o,a),t)||t.push(o);},e),t}var on=P,an=P;function un(...n){let r=d(t=>!T(t)),e=n.length;if(r(n))throw new Error("fjs Error: Invalid function to compose");return function(...t){let o=n[e-1].apply(this,t);for(let a=e-2;a>=0;a--)o=n[a].call(this,o);return o}}function sn(n){return m(r=>[r,n[r]],Object.keys(n))}var cn=u((n,r)=>{let e,t=[];return c(n)?[e,...t]=n:e=n,m(o=>{let a=o[e];return typeof a=="function"?a.apply(o,t):a},r)}),j=u((n,r)=>({...r,...n})),ln=j;function q(n){return function(r){return r[n]}}var yn=u((n,r)=>m(q(n),r));function fn(n){return n}function pn(n){return ()=>n}function Tn(n){return r=>(n(r),r)}function mn(n,...r){let e=n;for(let t=0;t<r.length;t++)e=r[t](e);return e}function dn(...n){return r=>{let e=r;for(let t=0;t<n.length;t++)e=n[t](e);return e}}var xn=u((n,r)=>{let e={};return n.forEach(t=>{t in r&&(e[t]=r[t]);}),e}),Un=u((n,r)=>{let e={...r};return n.forEach(t=>{delete e[t];}),e}),An=u((n,r)=>{let e=r;for(let t of n){if(e==null)return;e=e[t];}return e}),gn=u((n,r,e)=>({...e,[n]:r})),hn=u((n,r)=>{let e={...r};return delete e[n],e});var M=u((n,r)=>{if(!y(r)||!c(r))return [];let e=r,t=e.length,o=[],a=n;for(let i=0;i<t;i++){let l=a(e[i],i);if(!y(l)||!c(l))continue;let p=l;for(let x=0;x<p.length;x++)o.push(p[x]);}return o}),Fn=M,Pn=n=>{if(!y(n)||!c(n))return [];let r=n,e=[];for(let t=0;t<r.length;t++){let o=r[t];if(!(!y(o)||!c(o)))for(let a=0;a<o.length;a++)e.push(o[a]);}return e},bn=u((n,r)=>{let e=Math.min(n.length,r.length),t=[];for(let o=0;o<e;o++)t.push([n[o],r[o]]);return t}),Cn=u((n,r,e)=>{let t=Math.min(r.length,e.length),o=new Array(t);for(let a=0;a<t;a++)o[a]=n(r[a],e[a]);return o}),wn=n=>Array.from(new Set(n)),Rn=u((n,r)=>{let e=new Set,t=[];return f(o=>{let a=n(o);e.has(a)||(e.add(a),t.push(o));},r),t});var vn=u(async(n,r)=>{let e=r.length,t=new Array(e);for(let o=0;o<e;o++)t[o]=n(r[o],o);return Promise.all(t)}),Bn=u(async(n,r)=>{let e=r.length,t=new Array(e);for(let i=0;i<e;i++)t[i]=n(r[i],i);let o=await Promise.all(t),a=[];for(let i=0;i<e;i++)o[i]&&a.push(r[i]);return a}),kn=u(async(n,r)=>{if(!r||r.length===0)throw new Error("fjs Error: Cannot reduce empty array without initial value");let e=r[0];for(let t=1;t<r.length;t++)e=await n(e,r[t],t);return e}),Dn=u(async(n,r,e)=>{let t=r;for(let o=0;o<e.length;o++)t=await n(t,e[o],o);return t});function O(n,r,e,t,o){return arguments.length<5?a=>O(n,r,e,t,a):(async()=>{let a=o,i=t;for(let l=0;l<a.length;l++){let p=await n(a[l],l);await r(p,l)&&(i=await e(i,p,l));}return i})()}function S(n,r,e,t,o){return arguments.length<5?a=>S(n,r,e,t,a):(async()=>{let a=o,i=a.length,l=new Array(i);for(let s=0;s<i;s++)l[s]=Promise.resolve(n(a[s],s));let p=await Promise.all(l),x=new Array(i);for(let s=0;s<i;s++)x[s]=Promise.resolve(r(p[s],s));let Mn=await Promise.all(x),z=t;for(let s=0;s<i;s++)Mn[s]&&(z=await e(z,p[s],s));return z})()}var Kn=u(async(n,r)=>{for(let e=0;e<r.length;e++)await n(r[e],e);});async function En(n,...r){let e=n;for(let t of r)e=await t(e);return e}function jn(...n){return async r=>{let e=r;for(let t of n)e=await t(e);return e}}var qn=(...n)=>async r=>{let e=r;for(let t=n.length-1;t>=0;t--)e=await n[t](e);return e};var ge={curry:u,each:f,map:m,fold:U,foldl:L,reduce:A,reducel:Q,foldll:V,clone:C,first:g,head:X,take:Y,rest:h,tail:Z,drop:$,last:v,every:w,all:nn,any:d,contains:en,select:F,filter:rn,best:B,whilst:k,partition:D,group:K,shuffle:tn,nub:P,strictEquals:E,unique:on,distinct:an,compose:un,toArray:sn,apply:cn,assign:j,extend:ln,prop:q,pluck:yn,isFunction:T,isObject:I,isArray:c,isArguments:N,isDate:W,isNumber:H,isRegExp:_,isString:G,exists:y,truthy:R,falsy:J,identity:fn,constant:pn,tap:Tn,pipe:mn,flow:dn,pick:xn,omit:Un,path:An,assoc:gn,dissoc:hn,flatMap:M,chain:Fn,flatten:Pn,zip:bn,zipWith:Cn,uniq:wn,uniqBy:Rn,mapAsync:vn,filterAsync:Bn,reduceAsync:kn,foldAsync:Dn,eachAsync:Kn,pipeAsync:En,flowAsync:jn,composeAsync:qn,mapFilterReduceAsync:O,mapFilterReduceAsyncParallel:S};export{nn as all,d as any,cn as apply,j as assign,gn as assoc,B as best,Fn as chain,C as clone,un as compose,qn as composeAsync,pn as constant,en as contains,u as curry,hn as dissoc,an as distinct,$ as drop,f as each,Kn as eachAsync,w as every,y as exists,ln as extend,J as falsy,rn as filter,Bn as filterAsync,g as first,ge as fjs,M as flatMap,Pn as flatten,dn as flow,jn as flowAsync,U as fold,Dn as foldAsync,L as foldl,V as foldll,K as group,X as head,fn as identity,N as isArguments,c as isArray,W as isDate,T as isFunction,H as isNumber,I as isObject,_ as isRegExp,G as isString,v as last,m as map,vn as mapAsync,O as mapFilterReduceAsync,S as mapFilterReduceAsyncParallel,P as nub,Un as omit,D as partition,An as path,xn as pick,mn as pipe,En as pipeAsync,yn as pluck,q as prop,A as reduce,kn as reduceAsync,Q as reducel,h as rest,F as select,tn as shuffle,E as strictEquals,Z as tail,Y as take,Tn as tap,sn as toArray,R as truthy,wn as uniq,Rn as uniqBy,on as unique,k as whilst,bn as zip,Cn as zipWith};

@@ -9,3 +9,3 @@ # functional.js

- Auto-curried by default
- <6KB gzipped, zero dependencies
- ~3KB gzipped, zero dependencies
- Pure, immutable-by-default utilities

@@ -338,2 +338,3 @@

- Data comes LAST, not first (e.g., `map(fn, array)` not `map(array, fn)`)
- `curry` ignores extra arguments beyond the function's arity (standard currying behavior)

@@ -344,3 +345,3 @@ ## Comparison Matrix

| ------------- | ----------- | ---------- | ---------- | -------------- |
| functional.js | ~6KB | Strong | Yes | Low |
| functional.js | ~3KB | Strong | Yes | Low |
| Ramda | ~50KB | Medium | Yes | Medium |

@@ -347,0 +348,0 @@ | lodash/fp | ~24KB | Medium | Yes | Low |

{
"name": "functional.js",
"version": "1.0.0",
"version": "1.0.2",
"author": "Lee Crossley <leee@hotmail.co.uk> (http://ilee.co.uk/)",
"description": "A lightweight, TypeScript-first functional programming library with excellent type inference",
"homepage": "http://functionaljs.com",
"homepage": "https://functionaljs.com",
"type": "module",

@@ -85,11 +85,11 @@ "main": "./dist/index.cjs",

"@typescript-eslint/parser": "^6.19.1",
"@vitest/coverage-v8": "^1.2.1",
"@vitest/coverage-v8": "^4.0.18",
"eslint": "^8.56.0",
"expect-type": "^0.17.3",
"prettier": "^3.2.4",
"tsup": "^8.0.1",
"tsup": "^8.5.1",
"typescript": "^5.3.3",
"vitest": "^1.2.1"
"vitest": "^4.0.18"
},
"packageManager": "pnpm@8.15.1"
}

@@ -10,14 +10,7 @@ import type { AnyFunction, CurriedFunction } from "./types";

if (func.length === 2) {
const curried2 = function (a: any, b?: any, ...rest: any[]): any {
const curried2 = function (a: any, b?: any): any {
if (arguments.length >= 2) {
if (rest.length === 0) {
return func(a, b);
}
let accumulated = func(a, b);
for (let i = 0; i < rest.length; i++) {
accumulated = (func as AnyFunction)(accumulated, rest[i], i);
}
return accumulated;
return func(a, b);
}
return (next: any, ...more: any[]) => curried2(a, next, ...more);
return (next: any) => curried2(a, next);
};

@@ -28,21 +21,14 @@ return curried2 as CurriedFunction<T>;

if (func.length === 3) {
const curried3 = function (a: any, b?: any, c?: any, ...rest: any[]): any {
const curried3 = function (a: any, b?: any, c?: any): any {
if (arguments.length >= 3) {
if (rest.length === 0) {
return func(a, b, c);
}
let accumulated = func(a, b, c);
for (let i = 0; i < rest.length; i++) {
accumulated = (func as AnyFunction)(accumulated, rest[i], i);
}
return accumulated;
return func(a, b, c);
}
if (arguments.length === 2) {
return (next: any, ...more: any[]) => curried3(a, b, next, ...more);
return (next: any) => curried3(a, b, next);
}
return function (nextB: any, nextC?: any, ...more: any[]): any {
return function (nextB: any, nextC?: any): any {
if (arguments.length >= 2) {
return curried3(a, nextB, nextC, ...more);
return curried3(a, nextB, nextC);
}
return (next: any, ...moreNext: any[]) => curried3(a, nextB, next, ...moreNext);
return (next: any) => curried3(a, nextB, next);
};

@@ -59,14 +45,3 @@ };

if (args.length >= func.length) {
if (args.length === func.length) {
return func(...args);
}
let accumulated = func(...args.slice(0, func.length));
const remaining = args.slice(func.length);
for (let i = 0; i < remaining.length; i++) {
accumulated = (func as AnyFunction)(accumulated, remaining[i], i);
}
return accumulated;
return func(...args.slice(0, func.length));
}

@@ -73,0 +48,0 @@

@@ -36,25 +36,26 @@ import { describe, it, expect } from "vitest";

it("should extend the arity using curry", () => {
const add = fjs.curry((arg1: number, arg2: number) => arg1 + arg2);
const add3 = add(3);
expect(add(1, 2, 3)).toEqual(6);
expect(add3(1, 2, 3, 4, 5)).toEqual(18);
it("should ignore extra arguments beyond function arity", () => {
const add = fjs.curry((a: number, b: number) => a + b);
expect(add(1, 2)).toEqual(3);
expect(add(1, 2, 999)).toEqual(3);
expect(add(1, 2, 999, 888)).toEqual(3);
});
it("should extend arity for 2-arg curry", () => {
const add2 = fjs.curry((a: number, b: number) => a + b);
expect(add2(1, 2, 3)).toEqual(6);
expect(add2(1)(2, 3)).toEqual(6);
expect(add2(1, 2, 3, 4)).toEqual(10);
it("should ignore extra arguments for 3-arg functions", () => {
const addAndMult = fjs.curry((x: number, y: number, z: number) => (x + y) * z);
expect(addAndMult(2, 6, 3)).toEqual(24);
expect(addAndMult(2, 6, 3, 1)).toEqual(24);
expect(addAndMult(2, 6, 3, 1, 2)).toEqual(24);
expect(addAndMult(2, 6, 3, 1, 2, 3)).toEqual(24);
});
it("should extend arity for 3-arg curry", () => {
const add3 = fjs.curry((a: number, b: number, c: number) => a + b + c);
expect(add3(1, 2, 3, 4)).toEqual(10);
expect(add3(1)(2, 3, 4)).toEqual(10);
expect(add3(1)(2)(3, 4)).toEqual(10);
expect(add3(1, 2, 3, 4, 5)).toEqual(16);
it("should ignore extra arguments for n-arg functions", () => {
const sum4 = fjs.curry((a: number, b: number, c: number, d: number) => a + b + c + d);
expect(sum4(1, 2, 3, 4)).toEqual(10);
expect(sum4(1, 2, 3, 4, 5)).toEqual(10);
expect(sum4(1, 2, 3, 4, 5, 6, 7)).toEqual(10);
});
it("should curry 3-arg with partial two args", () => {

@@ -69,3 +70,2 @@ const add3 = fjs.curry((a: number, b: number, c: number) => a + b + c);

expect(add4(1, 2, 3, 4)).toEqual(10);
expect(add4(1, 2, 3, 4, 5)).toEqual(15);
expect(add4(1)(2)(3)(4)).toEqual(10);

@@ -541,10 +541,9 @@ });

it("should be curryable and extend arity", () => {
it("should be curryable", () => {
const obj1 = { prop1: "obj1prop1", prop2: "obj1prop2" };
const obj2 = { prop2: "obj2prop2", prop3: "obj2prop3", prop4: "obj2prop4" };
const obj3 = { prop4: "obj3prop4", prop5: "obj3prop5" };
const assignToObj1 = fjs.assign(obj1);
const result1 = assignToObj1(obj2, obj3);
const result2 = fjs.assign(obj1, obj2, obj3);
const result1 = assignToObj1(obj2);
const result2 = fjs.assign(obj1, obj2);

@@ -555,4 +554,3 @@ expect(result1).toEqual({

prop3: "obj2prop3",
prop4: "obj2prop4",
prop5: "obj3prop5"
prop4: "obj2prop4"
});

@@ -559,0 +557,0 @@ expect(result1).toEqual(result2);