diff --git a/.github/README.md b/.github/README.md index a49357485..636b31f67 100644 --- a/.github/README.md +++ b/.github/README.md @@ -106,59 +106,57 @@ One of the main issues with `Ramda` is the slow process of releasing new version <details> <summary> - Click to see the full list of 43 Ramda methods not implemented in Rambda and their status. + Click to see the full list of 46 Ramda methods not implemented in Rambda and their status. </summary> -- into -- invert +- construct - Using classes is not very functional programming oriented. +- constructN - same as above +- into - no support for transducer as it is overly complex to implement, understand and read. +- invert - overly complicated and limited use case - invertObj - invoker -- keysIn +- keysIn - we shouldn't encourage extending object with `.prototype` - lift - liftN -- mapAccum +- mapAccum - `Ramda` example doesn't looks convincing - mapAccumRight -- memoizeWith -- mergeDeepWith +- memoizeWith - hard to imagine its usage in context of `R.pipe`/`R.compose` +- mergeDeepWith - limited use case - mergeDeepWithKey - mergeWithKey -- nAry -- nthArg -- o -- otherwise -- pair -- partialRight -- pathSatisfies +- nAry - hard to argument about and hard to create meaningful TypeScript definitions +- nthArg - limited use case +- o - enough TypeScript issues with `R.pipe`/`R.compose` to add more composition methods +- otherwise - naming is confusing +- pair - `left-pad` types of debacles happens partially because of such methods that should not be hidden, bur rather part of your code base even if they need to exist. +- partialRight - I dislike `R.partial`, so I don't want to add more methods that are based on it - pipeWith -- project +- project - naming is confusing, but also limited use case - promap -- reduceRight -- reduceWhile +- reduceRight - I find `right/left` methods confusing so I added them only where it makes sense. +- reduceWhile - functions with 4 inputs - I think that even 3 is too much - reduced -- remove -- scan +- remove - nice name but it is too generic. Also, `Rambdax` has such method and there it works very differently +- scan - hard to explain - sequence - splitWhenever - symmetricDifferenceWith - andThen - toPairsIn +- transduce - currently is out of focus +- traverse - same as above - unary - uncurryN -- unfold -- unionWith +- unfold - similar to `R.scan` and I find that it doesn't help with readability +- unionWith - why it has its usage, I want to limit number of methods that accept more than 2 arguments - until -- useWith +- useWith - hard to explain - valuesIn -- xprod +- xprod - limited use case - thunkify -- default - - Most of above methods are in progress to be added to **Rambda**. The following methods are not going to be added: - __ - placeholder method allows user to further customize the method call. While, it seems useful initially, the price is too high in terms of complexity for TypeScript definitions. If it is not easy exressable in TypeScript, it is not worth it as **Rambda** is a TypeScript first library. -- construct - Using classes is not very functional programming oriented. -- constructN - same as above -- transduce - currently is out of focus -- traverse - same as above + +The following methods are not going to be added(reason for exclusion is provided as a comment): </details> [](#-missing-ramda-methods) @@ -216,7 +214,7 @@ There are methods which are benchmarked only with `Ramda` and `Rambda`(i.e. no ` Note that some of these methods, are called with and without curring. This is done in order to give more detailed performance feedback. -The benchmarks results are produced from latest versions of *Rambda*, *Lodash*(4.17.21) and *Ramda*(0.30.0). +The benchmarks results are produced from latest versions of *Rambda*, *Lodash*(4.17.21) and *Ramda*(0.30.1). </summary> @@ -6196,7 +6194,7 @@ describe('R.hasPath', () => { head(str: string): string ``` -It returns the first element of list or string `input`. +It returns the first element of list or string `input`. It returns `undefined` if array has length of 0. ```javascript const result = [ @@ -6215,6 +6213,7 @@ const result = [ ```typescript head(str: string): string; head(str: ''): undefined; +head(list: readonly[]): undefined; head<T>(list: never[]): undefined; head<T extends unknown[]>(array: T): FirstArrayElement<T> head<T extends readonly unknown[]>(array: T): FirstArrayElement<T> @@ -6288,9 +6287,9 @@ describe('R.head', () => { it('empty array', () => { const list = [] as const head(emptyList) // $ExpectType undefined - head(list) // $ExpectType never + head(list) // $ExpectType undefined last(emptyList) // $ExpectType undefined - last(list) // $ExpectType never + last(list) // $ExpectType undefined }) it('mixed', () => { @@ -6993,12 +6992,6 @@ export function isEmpty(input){ return false if (!input) return true - if (type(input.isEmpty) === 'Function') { - return input.isEmpty(); - } else if (input.isEmpty) { - return !!input.isEmpty; - } - if (inputType === 'Object'){ return Object.keys(input).length === 0 } @@ -7033,10 +7026,6 @@ test('happy', () => { expect(isEmpty(0)).toBeFalse() expect(isEmpty(NaN)).toBeFalse() expect(isEmpty([ '' ])).toBeFalse() - expect(isEmpty({ isEmpty: false})).toBeFalse() - expect(isEmpty({ isEmpty: () => false})).toBeFalse() - expect(isEmpty({ isEmpty: true})).toBeTrue() - expect(isEmpty({ isEmpty: () => true})).toBeTrue() }) ``` @@ -7122,6 +7111,27 @@ test('happy', () => { [](#isNil) +### isNotEmpty + +```typescript + +isNotEmpty<T>(value: T[]): value is NonEmptyArray<T> +``` + +<details> + +<summary>All TypeScript definitions</summary> + +```typescript +isNotEmpty<T>(value: T[]): value is NonEmptyArray<T>; +isNotEmpty<T>(value: readonly T[]): value is ReadonlyNonEmptyArray<T>; +isNotEmpty(value: any): boolean; +``` + +</details> + +[](#isNotEmpty) + ### isNotNil <a title="redirect to Rambda Repl site" href="https://rambda.now.sh?const%20result%20%3D%20%5B%0A%20%20R.isNotNil(null)%2C%0A%20%20R.isNotNil(undefined)%2C%0A%20%20R.isNotNil(%5B%5D)%2C%0A%5D%0A%2F%2F%20%3D%3E%20%5Bfalse%2C%20false%2C%20true%5D">Try this <strong>R.isNotNil</strong> example in Rambda REPL</a> @@ -7352,7 +7362,7 @@ test('happy', () => { last(str: ''): undefined ``` -It returns the last element of `input`, as the `input` can be either a string or an array. +It returns the last element of `input`, as the `input` can be either a string or an array. It returns `undefined` if array has length of 0. ```javascript const result = [ @@ -7371,9 +7381,11 @@ const result = [ ```typescript last(str: ''): undefined; last(str: string): string; +last(list: readonly[]): undefined; last(list: never[]): undefined; -last<T extends unknown[]>(array: T): LastArrayElement<T> -last<T extends readonly unknown[]>(array: T): LastArrayElement<T> +last<T extends unknown[]>(array: T): LastArrayElement<T>; +last<T extends readonly unknown[]>(array: T): LastArrayElement<T>; +last(str: string): string | undefined; ``` </details> @@ -7706,7 +7718,7 @@ export function lens(getter, setter){ <summary><strong>TypeScript</strong> test</summary> ```typescript -import {lens, assoc, lensProp, view, lensIndex, lensPath} from 'rambda' +import {lens, assoc, lensProp, view, lensIndex, over, lensPath} from 'ramda' interface Input { foo: string, @@ -7730,6 +7742,10 @@ describe('R.lensProp', () => { const result = view<Input, string>(lensProp('foo'), testObject) result // $ExpectType string }) + it('issue 740', () => { + // @ts-expect-error + over(lensProp('x'), (n) => String(n), {x: 1}) + }) }) describe('R.lensIndex', () => { @@ -9385,11 +9401,7 @@ It returns the lesser value between `x` and `y` according to `compareFn` functio ```typescript -modify<T extends object, K extends keyof T, P>( - prop: K, - fn: (a: T[K]) => P, - obj: T, -): Omit<T, K> & Record<K, P> +modify<K extends PropertyKey, T>(prop: K, fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U ``` ```javascript @@ -9404,15 +9416,12 @@ const result = R.modify() <summary>All TypeScript definitions</summary> ```typescript -modify<T extends object, K extends keyof T, P>( - prop: K, - fn: (a: T[K]) => P, - obj: T, -): Omit<T, K> & Record<K, P>; -modify<K extends string, A, P>( - prop: K, - fn: (a: A) => P, -): <T extends Record<K, A>>(target: T) => Omit<T, K> & Record<K, P>; +modify<K extends PropertyKey, T>(prop: K, fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; +modify<U, K extends keyof U>(prop: K, fn: (value: U[K]) => U[K], object: U): U; +modify<K extends PropertyKey>(prop: K): { + <T>(fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; + <T, U extends Record<K, T>>(fn: (value: T) => T, object: U): U; +}; ``` </details> @@ -9553,23 +9562,52 @@ describe('brute force', () => { <summary><strong>TypeScript</strong> test</summary> ```typescript -import {modify, add} from 'rambda' -const person = {name: 'James', age: 20} +import { add, identity, map, modify, pipe, toUpper } from 'rambda'; + +type Obj = { + foo: string; + bar: number; +}; describe('R.modify', () => { - it('happy', () => { - const {age} = modify('age', add(1), person) - const {age: ageAsString} = modify('age', String, person) + it('ramda tests', () => { + const result1 = modify('foo', toUpper, {} as Obj); + result1; // $ExpectType Obj - age // $ExpectType number - ageAsString // $ExpectType string - }) - it('curried', () => { - const {age} = modify('age', add(1))(person) + const result2 = modify('bar', add(1), {} as Obj); + result2; // $ExpectType Obj - age // $ExpectType number - }) -}) + const result3 = modify('foo', toUpper)({} as Obj); + result3; // $ExpectType Obj + + const result4 = modify('bar', add(1))({} as Obj); + result4; // $ExpectType Obj + + const result5 = modify('foo')(toUpper)({} as Obj); + result5; // $ExpectType Obj + + const result6 = modify('bar')(add(1))({} as Obj); + result6; // $ExpectType Obj + + const result7 = modify('foo')(toUpper, {} as Obj); + result7; // $ExpectType Obj + + const result8 = modify('bar')(add(1), {} as Obj); + result8; // $ExpectType Obj + + const result9 = modify('foo', identity, {} as Obj); + result9; // $ExpectType Obj + + // @ts-expect-error + modify('foo', add(1), {} as Obj); + // @ts-expect-error + modify('bar', toUpper, {} as Obj); + + const f = pipe(map<Obj, Obj>(modify('foo', toUpper))); + + f([] as Obj[]); // $ExpectType Obj[] + }); +}); ``` </details> @@ -12726,7 +12764,7 @@ describe('R.propEq', () => { const myObject: MyType = {} const valueToFind = '1111' // @ts-expect-error - propEq(valueToFind, 'optional', myObject) + let a = propEq(valueToFind, 'optional', myObject) }) it('imported from @types/ramda', () => { diff --git a/CHANGELOG.md b/CHANGELOG.md index 46f29df0b..d5aa22821 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,3 @@ -9.2.2 - -- Remove logic in `R.isEmpty` that looks for object property `isEmpty` as it is hard to be expressed in TypeScript -<!-- - Broken `Deno` build - [Issue #731](https://github.com/selfrefactor/rambda/issues/731) --> - 9.2.1 - Broken `Deno` build - [Issue #731](https://github.com/selfrefactor/rambda/issues/731) diff --git a/README.md b/README.md index 3771adbd4..c330a0e76 100644 --- a/README.md +++ b/README.md @@ -106,59 +106,57 @@ One of the main issues with `Ramda` is the slow process of releasing new version <details> <summary> - Click to see the full list of 43 Ramda methods not implemented in Rambda and their status. + Click to see the full list of 46 Ramda methods not implemented in Rambda and their status. </summary> -- into -- invert +- construct - Using classes is not very functional programming oriented. +- constructN - same as above +- into - no support for transducer as it is overly complex to implement, understand and read. +- invert - overly complicated and limited use case - invertObj - invoker -- keysIn +- keysIn - we shouldn't encourage extending object with `.prototype` - lift - liftN -- mapAccum +- mapAccum - `Ramda` example doesn't looks convincing - mapAccumRight -- memoizeWith -- mergeDeepWith +- memoizeWith - hard to imagine its usage in context of `R.pipe`/`R.compose` +- mergeDeepWith - limited use case - mergeDeepWithKey - mergeWithKey -- nAry -- nthArg -- o -- otherwise -- pair -- partialRight -- pathSatisfies +- nAry - hard to argument about and hard to create meaningful TypeScript definitions +- nthArg - limited use case +- o - enough TypeScript issues with `R.pipe`/`R.compose` to add more composition methods +- otherwise - naming is confusing +- pair - `left-pad` types of debacles happens partially because of such methods that should not be hidden, bur rather part of your code base even if they need to exist. +- partialRight - I dislike `R.partial`, so I don't want to add more methods that are based on it - pipeWith -- project +- project - naming is confusing, but also limited use case - promap -- reduceRight -- reduceWhile +- reduceRight - I find `right/left` methods confusing so I added them only where it makes sense. +- reduceWhile - functions with 4 inputs - I think that even 3 is too much - reduced -- remove -- scan +- remove - nice name but it is too generic. Also, `Rambdax` has such method and there it works very differently +- scan - hard to explain - sequence - splitWhenever - symmetricDifferenceWith - andThen - toPairsIn +- transduce - currently is out of focus +- traverse - same as above - unary - uncurryN -- unfold -- unionWith +- unfold - similar to `R.scan` and I find that it doesn't help with readability +- unionWith - why it has its usage, I want to limit number of methods that accept more than 2 arguments - until -- useWith +- useWith - hard to explain - valuesIn -- xprod +- xprod - limited use case - thunkify -- default - - Most of above methods are in progress to be added to **Rambda**. The following methods are not going to be added: - __ - placeholder method allows user to further customize the method call. While, it seems useful initially, the price is too high in terms of complexity for TypeScript definitions. If it is not easy exressable in TypeScript, it is not worth it as **Rambda** is a TypeScript first library. -- construct - Using classes is not very functional programming oriented. -- constructN - same as above -- transduce - currently is out of focus -- traverse - same as above + +The following methods are not going to be added(reason for exclusion is provided as a comment): </details> [](#-missing-ramda-methods) @@ -216,7 +214,7 @@ There are methods which are benchmarked only with `Ramda` and `Rambda`(i.e. no ` Note that some of these methods, are called with and without curring. This is done in order to give more detailed performance feedback. -The benchmarks results are produced from latest versions of *Rambda*, *Lodash*(4.17.21) and *Ramda*(0.30.0). +The benchmarks results are produced from latest versions of *Rambda*, *Lodash*(4.17.21) and *Ramda*(0.30.1). </summary> @@ -5853,7 +5851,7 @@ describe('R.hasPath', () => { head(str: string): string ``` -It returns the first element of list or string `input`. +It returns the first element of list or string `input`. It returns `undefined` if array has length of 0. <a title="redirect to Rambda Repl site" href="https://rambda.now.sh?const%20result%20%3D%20%5B%0A%20%20R.head(%5B1%2C%202%2C%203%5D)%2C%0A%20%20R.head('foo')%20%0A%5D%0A%2F%2F%20%3D%3E%20%5B1%2C%20'f'%5D">Try this <strong>R.head</strong> example in Rambda REPL</a> @@ -5864,6 +5862,7 @@ It returns the first element of list or string `input`. ```typescript head(str: string): string; head(str: ''): undefined; +head(list: readonly[]): undefined; head<T>(list: never[]): undefined; head<T extends unknown[]>(array: T): FirstArrayElement<T> head<T extends readonly unknown[]>(array: T): FirstArrayElement<T> @@ -5937,9 +5936,9 @@ describe('R.head', () => { it('empty array', () => { const list = [] as const head(emptyList) // $ExpectType undefined - head(list) // $ExpectType never + head(list) // $ExpectType undefined last(emptyList) // $ExpectType undefined - last(list) // $ExpectType never + last(list) // $ExpectType undefined }) it('mixed', () => { @@ -6595,12 +6594,6 @@ export function isEmpty(input){ return false if (!input) return true - if (type(input.isEmpty) === 'Function') { - return input.isEmpty(); - } else if (input.isEmpty) { - return !!input.isEmpty; - } - if (inputType === 'Object'){ return Object.keys(input).length === 0 } @@ -6635,10 +6628,6 @@ test('happy', () => { expect(isEmpty(0)).toBeFalse() expect(isEmpty(NaN)).toBeFalse() expect(isEmpty([ '' ])).toBeFalse() - expect(isEmpty({ isEmpty: false})).toBeFalse() - expect(isEmpty({ isEmpty: () => false})).toBeFalse() - expect(isEmpty({ isEmpty: true})).toBeTrue() - expect(isEmpty({ isEmpty: () => true})).toBeTrue() }) ``` @@ -6716,6 +6705,27 @@ test('happy', () => { [](#isNil) +### isNotEmpty + +```typescript + +isNotEmpty<T>(value: T[]): value is NonEmptyArray<T> +``` + +<details> + +<summary>All TypeScript definitions</summary> + +```typescript +isNotEmpty<T>(value: T[]): value is NonEmptyArray<T>; +isNotEmpty<T>(value: readonly T[]): value is ReadonlyNonEmptyArray<T>; +isNotEmpty(value: any): boolean; +``` + +</details> + +[](#isNotEmpty) + ### isNotNil <a title="redirect to Rambda Repl site" href="https://rambda.now.sh?const%20result%20%3D%20%5B%0A%20%20R.isNotNil(null)%2C%0A%20%20R.isNotNil(undefined)%2C%0A%20%20R.isNotNil(%5B%5D)%2C%0A%5D%0A%2F%2F%20%3D%3E%20%5Bfalse%2C%20false%2C%20true%5D">Try this <strong>R.isNotNil</strong> example in Rambda REPL</a> @@ -6930,7 +6940,7 @@ test('happy', () => { last(str: ''): undefined ``` -It returns the last element of `input`, as the `input` can be either a string or an array. +It returns the last element of `input`, as the `input` can be either a string or an array. It returns `undefined` if array has length of 0. <a title="redirect to Rambda Repl site" href="https://rambda.now.sh?const%20result%20%3D%20%5B%0A%20%20R.last(%5B1%2C%202%2C%203%5D)%2C%0A%20%20R.last('foo')%2C%0A%5D%0A%2F%2F%20%3D%3E%20%5B3%2C%20'o'%5D">Try this <strong>R.last</strong> example in Rambda REPL</a> @@ -6941,9 +6951,11 @@ It returns the last element of `input`, as the `input` can be either a string or ```typescript last(str: ''): undefined; last(str: string): string; +last(list: readonly[]): undefined; last(list: never[]): undefined; -last<T extends unknown[]>(array: T): LastArrayElement<T> -last<T extends readonly unknown[]>(array: T): LastArrayElement<T> +last<T extends unknown[]>(array: T): LastArrayElement<T>; +last<T extends readonly unknown[]>(array: T): LastArrayElement<T>; +last(str: string): string | undefined; ``` </details> @@ -7251,7 +7263,7 @@ export function lens(getter, setter){ <summary><strong>TypeScript</strong> test</summary> ```typescript -import {lens, assoc, lensProp, view, lensIndex, lensPath} from 'rambda' +import {lens, assoc, lensProp, view, lensIndex, over, lensPath} from 'ramda' interface Input { foo: string, @@ -7275,6 +7287,10 @@ describe('R.lensProp', () => { const result = view<Input, string>(lensProp('foo'), testObject) result // $ExpectType string }) + it('issue 740', () => { + // @ts-expect-error + over(lensProp('x'), (n) => String(n), {x: 1}) + }) }) describe('R.lensIndex', () => { @@ -8828,11 +8844,7 @@ It returns the lesser value between `x` and `y` according to `compareFn` functio ```typescript -modify<T extends object, K extends keyof T, P>( - prop: K, - fn: (a: T[K]) => P, - obj: T, -): Omit<T, K> & Record<K, P> +modify<K extends PropertyKey, T>(prop: K, fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U ``` <a title="redirect to Rambda Repl site" href="https://rambda.now.sh?const%20result%20%3D%20R.modify()%0A%2F%2F%20%3D%3E">Try this <strong>R.modify</strong> example in Rambda REPL</a> @@ -8842,15 +8854,12 @@ modify<T extends object, K extends keyof T, P>( <summary>All TypeScript definitions</summary> ```typescript -modify<T extends object, K extends keyof T, P>( - prop: K, - fn: (a: T[K]) => P, - obj: T, -): Omit<T, K> & Record<K, P>; -modify<K extends string, A, P>( - prop: K, - fn: (a: A) => P, -): <T extends Record<K, A>>(target: T) => Omit<T, K> & Record<K, P>; +modify<K extends PropertyKey, T>(prop: K, fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; +modify<U, K extends keyof U>(prop: K, fn: (value: U[K]) => U[K], object: U): U; +modify<K extends PropertyKey>(prop: K): { + <T>(fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; + <T, U extends Record<K, T>>(fn: (value: T) => T, object: U): U; +}; ``` </details> @@ -8991,23 +9000,52 @@ describe('brute force', () => { <summary><strong>TypeScript</strong> test</summary> ```typescript -import {modify, add} from 'rambda' -const person = {name: 'James', age: 20} +import { add, identity, map, modify, pipe, toUpper } from 'rambda'; + +type Obj = { + foo: string; + bar: number; +}; describe('R.modify', () => { - it('happy', () => { - const {age} = modify('age', add(1), person) - const {age: ageAsString} = modify('age', String, person) + it('ramda tests', () => { + const result1 = modify('foo', toUpper, {} as Obj); + result1; // $ExpectType Obj - age // $ExpectType number - ageAsString // $ExpectType string - }) - it('curried', () => { - const {age} = modify('age', add(1))(person) + const result2 = modify('bar', add(1), {} as Obj); + result2; // $ExpectType Obj - age // $ExpectType number - }) -}) + const result3 = modify('foo', toUpper)({} as Obj); + result3; // $ExpectType Obj + + const result4 = modify('bar', add(1))({} as Obj); + result4; // $ExpectType Obj + + const result5 = modify('foo')(toUpper)({} as Obj); + result5; // $ExpectType Obj + + const result6 = modify('bar')(add(1))({} as Obj); + result6; // $ExpectType Obj + + const result7 = modify('foo')(toUpper, {} as Obj); + result7; // $ExpectType Obj + + const result8 = modify('bar')(add(1), {} as Obj); + result8; // $ExpectType Obj + + const result9 = modify('foo', identity, {} as Obj); + result9; // $ExpectType Obj + + // @ts-expect-error + modify('foo', add(1), {} as Obj); + // @ts-expect-error + modify('bar', toUpper, {} as Obj); + + const f = pipe(map<Obj, Obj>(modify('foo', toUpper))); + + f([] as Obj[]); // $ExpectType Obj[] + }); +}); ``` </details> @@ -11898,7 +11936,7 @@ describe('R.propEq', () => { const myObject: MyType = {} const valueToFind = '1111' // @ts-expect-error - propEq(valueToFind, 'optional', myObject) + let a = propEq(valueToFind, 'optional', myObject) }) it('imported from @types/ramda', () => { diff --git a/dev.sh b/dev.sh index 32775b554..6c5d76577 100755 --- a/dev.sh +++ b/dev.sh @@ -1,10 +1,10 @@ #=========== # It uses dtslint to check if the typings are correct # Typescript index file is located at `source/index.ts` -yarn test:typings +# yarn test:typings # before -# yarn out && yarn docs +yarn out && yarn docs && rd build #=========== # benchmark # cd ../rambda-scripts && RAMBDA_RUN_ALL=ON RAMBDA_RUN_INDEXES=ON yarn benchmark diff --git a/dist/rambda.js b/dist/rambda.js index 14f117ecb..58408b330 100644 --- a/dist/rambda.js +++ b/dist/rambda.js @@ -877,20 +877,6 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } -function _defineProperty(obj, key, value) { - key = _toPropertyKey(key); - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - return obj; -} function compare(a, b) { return String(a) === String(b); @@ -1544,11 +1530,6 @@ function isEmpty(input) { const inputType = type(input); if (['Undefined', 'NaN', 'Number', 'Null'].includes(inputType)) return false; if (!input) return true; - if (type(input.isEmpty) === 'Function') { - return input.isEmpty(); - } else if (input.isEmpty) { - return !!input.isEmpty; - } if (inputType === 'Object') { return Object.keys(input).length === 0; } @@ -1562,6 +1543,10 @@ function isNil(x) { return x === undefined || x === null; } +function isNotEmpty(input) { + return !isEmpty(input); +} + function isNotNil(input) { return input != null; } @@ -2621,6 +2606,7 @@ exports.intersperse = intersperse; exports.is = is; exports.isEmpty = isEmpty; exports.isNil = isNil; +exports.isNotEmpty = isNotEmpty; exports.isNotNil = isNotNil; exports.join = join; exports.juxt = juxt; diff --git a/dist/rambda.umd.js b/dist/rambda.umd.js index ba757a405..4ccf54236 100644 --- a/dist/rambda.umd.js +++ b/dist/rambda.umd.js @@ -1 +1 @@ -!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((n="undefined"!=typeof globalThis?globalThis:n||self).R={})}(this,function(n){"use strict";function a(n,l){switch(n){case 0:return function(){return l.apply(this,arguments)};case 1:return function(n){return l.apply(this,arguments)};case 2:return function(n,r){return l.apply(this,arguments)};case 3:return function(n,r,t){return l.apply(this,arguments)};case 4:return function(n,r,t,e){return l.apply(this,arguments)};case 5:return function(n,r,t,e,u){return l.apply(this,arguments)};case 6:return function(n,r,t,e,u,i){return l.apply(this,arguments)};case 7:return function(n,r,t,e,u,i,o){return l.apply(this,arguments)};case 8:return function(n,r,t,e,u,i,o,c){return l.apply(this,arguments)};case 9:return function(n,r,t,e,u,i,o,c,f){return l.apply(this,arguments)};default:return function(n,r,t,e,u,i,o,c,f,a){return l.apply(this,arguments)}}}function t(r,n){if(1===arguments.length)return function(n){return t(r,n)};if(10<r)throw Error("First argument to _arity must be a non-negative integer no greater than ten");return a(r,function i(o,c,f){return function(){for(var n=0,r=0,t=c.length,e=arguments.length,u=Array(t+e);n<t;)u[n]=c[n],n++;for(;r<e;)u[t+r]=arguments[r],r++;return u.length<o?a(o-u.length,i(o,u,f)):f.apply(this,u)}}(r,[],n))}function q(u){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:function(){return 0},o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:function(n){return n+1};return t(u.length,function(){var r=arguments[0],t=arguments[arguments.length-1],e=i(t.length),n=Array.prototype.slice.call(arguments,0);return n[0]=function(){var n=r.apply(this,function(n,r){for(var t=(n=n||[]).length,e=(r=r||[]).length,u=[],i=0;i<t;)u[u.length]=n[i],i+=1;for(i=0;i<e;)u[u.length]=r[i],i+=1;return u}(arguments,[e,t]));return e=o(e),n},u.apply(this,n)})}function l(n){return Array.prototype.slice.call(n)}function C(r,n){var t,e=Object.keys(r);return Object.getOwnPropertySymbols&&(t=Object.getOwnPropertySymbols(r),n&&(t=t.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),e.push.apply(e,t)),e}function c(r){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?C(Object(t),!0).forEach(function(n){f(r,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):C(Object(t)).forEach(function(n){Object.defineProperty(r,n,Object.getOwnPropertyDescriptor(t,n))})}return r}function U(n){n=function(n,r){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0===t)return("string"===r?String:Number)(n);if("object"!=typeof(t=t.call(n,r||"default")))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}(n,"string");return"symbol"==typeof n?n:n+""}function h(n){return(h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n})(n)}function D(n,r){if(!(n instanceof r))throw new TypeError("Cannot call a class as a function")}function L(n,r){for(var t=0;t<r.length;t++){var e=r[t];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(n,U(e.key),e)}}function z(n,r,t){return r&&L(n.prototype,r),t&&L(n,t),Object.defineProperty(n,"prototype",{writable:!1}),n}function f(n,r,t){return(r=U(r))in n?Object.defineProperty(n,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[r]=t,n}function o(n,r){return function(n){if(Array.isArray(n))return n}(n)||function(n,r){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var e,u,i,o,c=[],f=!0,a=!1;try{if(i=(t=t.call(n)).next,0===r){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(c.push(e.value),c.length!==r);f=!0);}catch(n){a=!0,u=n}finally{try{if(!f&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(a)throw u}}return c}}(n,r)||M(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(n){return function(n){if(Array.isArray(n))return e(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||M(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function M(n,r){var t;if(n)return"string"==typeof n?e(n,r):"Map"===(t="Object"===(t=Object.prototype.toString.call(n).slice(8,-1))&&n.constructor?n.constructor.name:t)||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?e(n,r):void 0}function e(n,r){for(var t=0,e=Array(r=null!=r&&r<=n.length?r:n.length);t<r;t++)e[t]=n[t];return e}function p(u){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[];return function(){for(var n,r=arguments.length,t=Array(r),e=0;e<r;e++)t[e]=arguments[e];return(n=[].concat(s(i),t)).length<u.length?p(u,n):u.apply(void 0,s(n))}}var _=p(function(n,r,t){var e=n<0?t.length+n:n;return t.length<=n||e<0?t:((n=l(t))[e]=r(n[e]),n)});function J(r){return function(n){return r}}var g=Array.isArray;function i(n){var r,t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;for(r in n)!1!=n.hasOwnProperty(r)&&"constructor"!==r&&("object"===h(n[r])&&(t=Math.max(t,i(n[r]))),"function"==typeof n[r])&&(t=Math.max(t,n[r].length));return t}function v(){for(var n=[],r=0,t=arguments.length;r<t&&void 0!==arguments[r];)n[r]=arguments[r],r++;return n}function u(n,r,t,e){return n===r?0:n<r?t:e}function y(n,r,t){return Object.assign({},t,f({},n,r))}var H=p(y);function $(n){return Number.isInteger(+(""+n))}var d=Number.isInteger||function(n){return n<<0===n};function m(n,r){return"string"==typeof n?n.split(1<arguments.length&&void 0!==r?r:".").map(function(n){return d(n)?+(""+n):n}):n}function G(n,r,t){var e,u,n=m(n);return 0===n.length?r:(e=n[0],1<n.length&&(u="object"!==h(t)||null===t||!t.hasOwnProperty(e)?$(n[1])?[]:{}:t[e],r=G(Array.prototype.slice.call(n,1),r,u)),$(e)&&g(t)?((n=l(t))[e]=r,n):y(e,r,t))}var K=p(G);var Q=p(function(n,r,t){if(r<n)throw Error("min must not be greater than max in clamp(min, max, value)");return t<n||r<t?r<t?r:t<n?n:void 0:t});function b(n){var r,t=g(n)?Array(n.length):{};if(n&&n.getTime)return new Date(n.getTime());for(r in n){var e=n[r];t[r]="object"===h(e)&&null!==e?e.getTime?new Date(e.getTime()):b(e):e}return t}var V=z(function n(r){D(this,n),this.value=r});function X(n,r,t){if(null!=t){if(!g(t))throw new TypeError("reduce: list must be array or iterable");for(var e=0,u=t.length;e<u;){if((r=n(r,t[e],e,t))instanceof V)return r.value;e++}}return r}var j=p(X);function Y(n,r){return function(){return r.call(this,n.apply(this,arguments))}}function Z(){if(0===arguments.length)throw Error("pipe requires at least one argument");return a(arguments[0].length,X(Y,arguments[0],Array.prototype.slice.call(arguments,1,1/0)))}function nn(n){return"string"==typeof n?n[0]||"":n[0]}function rn(n){return n}function tn(n){return"string"==typeof n?n.split("").reverse().join(""):n.slice().reverse()}function O(r,n){return 1===arguments.length?function(n){return O(r,n)}:n.slice(0<r?r:0)}function en(n){return O(1,n)}function un(t,n){var r,e;return 0<n.length?(r=nn(n),e=en(n),a(r.length,function(){return j(function(n,r){return t.call(this,r,n)},r.apply(this,arguments),e)})):rn}function on(r,n){return 1===arguments.length?function(n){return on(r,n)}:"string"==typeof r?"".concat(r).concat(n):[].concat(s(r),s(n))}var cn="Incorrect iterable input",fn=Object.keys;function w(n,r){for(var t=2<arguments.length&&void 0!==arguments[2]&&arguments[2],e=0,u=Array(r.length);e<r.length;)u[e]=t?n(r[e],e):n(r[e]),e++;return u}function A(r,n){if(1===arguments.length)return function(n){return A(r,n)};for(var t=0,e=fn(n),u=e.length,i={};t<u;){var o=e[t];i[o]=r(n[o],o,n),t++}return i}var an=A;function E(r,n){if(1===arguments.length)return function(n){return E(r,n)};if(n)return(g(n)?w:A)(r,n);throw Error(cn)}function ln(r,n){return 1===arguments.length?function(n){return ln(r,n)}:r<n?n:r}function x(r,n){return 1===arguments.length?function(n){return x(r,n)}:null==(t=n)||!0===Number.isNaN(t)?r:n;var t}function N(n){return null===n?"Null":void 0===n?"Undefined":Number.isNaN(n)?"NaN":"AsyncFunction"===(n=Object.prototype.toString.call(n).slice(8,-1))?"Promise":n}function hn(n,r){if(!g(r))throw Error("Cannot read property 'indexOf' of ".concat(r));var t=N(n);if(!["Array","NaN","Object","RegExp"].includes(t))return r.lastIndexOf(n);for(var e=r.length,u=-1;-1<--e&&-1===u;)F(r[e],n)&&(u=e);return u}function P(n,r){if(!g(r))throw Error("Cannot read property 'indexOf' of ".concat(r));var t=N(n);if(!["Array","NaN","Object","RegExp"].includes(t))return r.indexOf(n);for(var e=-1,u=-1,i=r.length;++e<i&&-1===u;)F(r[e],n)&&(u=e);return u}function sn(n){for(var r,t=[];!(r=n.next()).done;)t.push(r.value);return t}function pn(n){return n.toDateString?[!0,n.getTime()]:[!1]}function gn(n){return n.constructor!==RegExp?[!1]:[!0,""+n]}function F(t,e){var n,u,i,r,o,c,f,a;return 1===arguments.length?function(n){return F(t,n)}:!!Object.is(t,e)||(n=N(t))===N(e)&&("Function"===n?void 0!==t.name&&t.name===e.name:!!["NaN","Null","Undefined"].includes(n)||(["BigInt","Number"].includes(n)?Object.is(-0,t)===Object.is(-0,e)&&""+t==""+e:["Boolean","String"].includes(n)?""+t==""+e:"Array"===n?""+(r=Array.from(t))==""+(u=Array.from(e))&&(i=!0,r.forEach(function(n,r){!i||n===u[r]||F(n,u[r])||(i=!1)}),i):(r=gn(t),o=gn(e),r[0]?!!o[0]&&r[1]===o[1]:!o[0]&&(r=pn(t),o=pn(e),r[0]?!!o[0]&&r[1]===o[1]:!o[0]&&(t instanceof Error?e instanceof Error&&(r=t).message===(o=e).message&&r.toString===o.toString&&""+r==""+o:"Set"===n?(o=t).size===(f=e).size&&(o=sn(o.values()),c=sn(f.values()),0===o.filter(function(n){return-1===P(n,c)}).length):"Object"===n&&(f=Object.keys(t)).length===Object.keys(e).length&&(a=!0,f.forEach(function(n){var r;a&&(r=t[n])!==(n=e[n])&&!F(r,n)&&(a=!1)}),a))))))}function S(r,n){if(1===arguments.length)return function(n){return S(r,n)};if("string"==typeof n)return n.includes(r);if(n)return!!g(n)&&-1<P(r,n);throw new TypeError("Cannot read property 'indexOf' of ".concat(n))}var vn=function(){return z(function n(){D(this,n),this.set=new Set,this.items={}},[{key:"checkUniqueness",value:function(n){var r=N(n);return["Null","Undefined","NaN"].includes(r)?!(r in this.items)&&(this.items[r]=!0):["Object","Array"].includes(r)?r in this.items?-1===P(n,this.items[r])&&(this.items[r].push(n),!0):(this.items[r]=[n],!0):(r=this.set.size,this.set.add(n),this.set.size!==r)}}])}();function yn(n){var r=new vn,t=[];return n.forEach(function(n){r.checkUniqueness(n)&&t.push(n)}),t}function dn(t,n,r){var e=[],r=o(r.length<n.length?[n,r]:[r,n],2),n=r[0],u=r[1];return n.forEach(function(r){u.some(function(n){return t(r,n)})||-1!==P(r,e)||e.push(r)}),e}var mn=p(dn);function bn(r,n){if(1===arguments.length)return function(n){return bn(r,n)};if(null!=n){var t,e=m(r,","),u={};for(t in n)!function(n,r){for(var t=-1,e=r.length;++t<e;)if(""+r[t]==""+n)return 1}(t,e)&&(u[t]=n[t]);return u}}function jn(n,r){for(var t=r,e=0,u=m(n);e<u.length;){if(null==t)return;if(null===t[u[e]])return;t=t[u[e]],e++}return t}function k(r,n){return 1===arguments.length?function(n){return k(r,n)}:null!=n?jn(r,n):void 0}function On(r,n){return 1===arguments.length?function(n){return On(r,n)}:0<r?r<n.length-1?[].concat(s(n.slice(0,r)),s(n.slice(r+1))):n.slice(0,n.length-1):n.slice(1)}function wn(n,r,t){t=l(t);return-1===n?t.fill(r,n):t.fill(r,n,n+1)}var An=p(wn);function En(n,r,t){return F(n(r),n(t))}var xn=p(En);function Nn(n,r){if(r)return r[n]}function I(r,n){return 1===arguments.length?function(n){return I(r,n)}:Nn(r,n)}var Pn=p(function(n,r,t){return F(I(n,r),I(n,t))});function Fn(t,n){return w(function(n,r){return"Function"===N(t[r])?t[r](n):n},n,!0)}function Sn(e,n){return A(function(n,r){var t;return"Object"===N(n)?"Function"===(t=N(e[r]))?e[r](n):"Object"===t?kn(e[r],n):n:"Function"===N(e[r])?e[r](n):n},n)}function kn(r,n){if(1===arguments.length)return function(n){return kn(r,n)};var t=N(r),e=N(n);if(e!==t)throw Error("iterableType !== rulesType");if(["Object","Array"].includes(t))return("Object"===e?Sn:Fn)(r,n);throw Error("'iterable' and 'rules' are from wrong type ".concat(t))}function In(n,r){var t,e={};for(t in r)n(r[t],t,r)&&(e[t]=r[t]);return e}function Tn(n,r){for(var t=2<arguments.length&&void 0!==arguments[2]&&arguments[2],e=0,u=r.length,i=[];e<u;)(t?n(r[e],e):n(r[e]))&&i.push(r[e]),e++;return i}function T(r,n){if(1===arguments.length)return function(n){return T(r,n)};if(n)return g(n)?Tn(r,n,!1):In(r,n);throw Error("Incorrect iterable input")}function Wn(n,r){for(var t=0,e=fn(r),u=e.length;t<u;){var i=e[t];n(r[i],i,r),t++}return r}function Bn(r,n){return 1===arguments.length?function(n){return Bn(r,n)}:!!n&&n.hasOwnProperty(r)}var Rn=Object.is||function(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r};var qn=p(function(n,r,t){return function(){return(!0===("boolean"==typeof n?n:n.apply(void 0,arguments))?r:t).apply(void 0,arguments)}});function Cn(n,r,t){for(var e=-1,u=n.length,i=((t=u<t?u:t)<0&&(t+=u),u=t<r?0:t-r>>>0,r>>>=0,Array(u));++e<u;)i[e]=n[e+r];return i}function Un(o,n,c){for(var r=function(n){for(var r=o,t=n,e=c,u=0,i=e.length;u<i;){if(r(t,e[u]))return 1;u+=1}},t=n,e=0,u=t.length,i=[];e<u;)r(t[e])&&(i[i.length]=t[e]),e+=1;return i}var Dn=p(Un);function Ln(n,r,t){return[].concat(s(t.slice(0,n)),[r],s(t.slice(n)))}var zn=p(Ln);function Mn(n,r,t){return[].concat(s(t.slice(0,n)),s(r),s(t.slice(n)))}var _n=p(Mn);function Jn(r,n){return 1===arguments.length?function(n){return Jn(r,n)}:null!=n&&n.constructor===r||n instanceof r}function r(t,e){return function(n){return function(r){return n(t(r)).map(function(n){return e(n,r)})}}}function Hn(r,n){var t;return 1===arguments.length?function(n){return Hn(r,n)}:(t=r<0?n.length+r:r,"[object String]"===Object.prototype.toString.call(n)?n[0|t]||"":n[t])}function $n(n,r,t){return n(t)>n(r)?t:r}var Gn=p($n);function Kn(n){return n.reduce(function(n,r){return n+r},0)}function Qn(n){return Kn(n)/n.length}function W(r,n){return 1===arguments.length?function(n){return W(r,n)}:Object.assign({},r||{},n||{})}function B(r,t){var e;return 1===arguments.length?function(n){return B(r,n)}:(e=b(r),Object.keys(t).forEach(function(n){"Object"===N(t[n])&&"Object"===N(r[n])?e[n]=B(r[n],t[n]):e[n]=t[n]}),e)}function Vn(r,n,t){var e=null!=n?n:{},u=null!=t?t:{},i={};return Object.keys(e).forEach(function(n){i[n]=void 0===u[n]?e[n]:r(e[n],u[n])}),Object.keys(u).forEach(function(n){void 0===i[n]&&(i[n]=void 0===e[n]?u[n]:r(e[n],u[n]))}),i}var Xn=p(Vn);function Yn(n,r,t){return n(t)<n(r)?t:r}var Zn=p(Yn);var nr=p(function(n,r,t){var e;return!Array.isArray(e=t)&&"Object"!==N(e)||void 0===t[n]?t:g(t)?wn(n,r(t[n]),t):c(c({},t),{},f({},n,r(t[n])))});function rr(n,r,t){n=m(n);return 1===n.length?c(c({},t),{},f({},n[0],r(t[n[0]]))):void 0===k(n,t)||(r=tr(Array.prototype.slice.call(n,1),r,t[n[0]]))===t[n[0]]?t:H(n[0],r,t)}var tr=p(rr);var er=p(function(n,r,t){if(n<0||r<0)throw Error("Rambda.move does not support negative indexes");var e;return t.length-1<n||t.length-1<r?t:((e=l(t))[n]=t[r],e[r]=t[n],e)});function ur(r,n){return 1===arguments.length?function(n){return ur(r,n)}:r*n}function ir(n,r){var t;return function(){return n&&(t=n.apply(r||this,arguments),n=null),t}}function or(r){return{x:r,map:function(n){return or(n(r))}}}var cr=p(function(n,r,t){return n(function(n){return or(r(n))})(t).x});function fr(e){for(var u=e.length,n=arguments.length,r=Array(1<n?n-1:0),t=1;t<n;t++)r[t-1]=arguments[t];var i=1===r.length&&g(r[0])?r[0]:r;return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return i.length+r.length<u?fr.apply(void 0,[e].concat([].concat(s(i),r))):e.apply(void 0,s(i).concat(r))}}function ar(t,n){var e={},u={};return Object.entries(n).forEach(function(n){var n=o(n,2),r=n[0],n=n[1];t(n,r)?e[r]=n:u[r]=n}),[e,u]}function lr(n,r){for(var t=2<arguments.length&&void 0!==arguments[2]&&arguments[2],e=[],u=[],i=-1;i++<r.length-1;)((t?n(r[i],i):n(r[i]))?e:u).push(r[i]);return[e,u]}var hr=p(function(n,r,t){return F(k(n,t),r)});var sr=p(function(n,r,t){return x(n,k(r,t))});function pr(n,r,t){if(0===r.length)throw Error("R.pathSatisfies received an empty path");return!!n(k(r,t))}var gr=p(pr);var vr=j(ur,1);var yr=p(function(n,r,t){return!!t&&F(n,I(r,t))});var dr=p(function(n,r,t){return Jn(n,t[r])});var mr=p(function(n,r,t){return t?x(n,t[r]):n});var br=p(function(n,r,t){return n(I(r,t))});function jr(r,n){if(1===arguments.length)return function(n){return jr(r,n)};if(Number.isNaN(+(""+r))||Number.isNaN(+(""+n)))throw new TypeError("Both arguments to range must be numbers");if(n<r)return[];for(var t=n-r,e=Array(t),u=0;u<t;u++)e[u]=r+u;return e}function Or(i,o,c,n){return j(function(n,r){return t=i,e=o,n=n,u=(u=c)(r=r),t=t(Bn(u,n)?n[u]:b(e),r),n[u]=t,n;var t,e,u},{},n)}var wr=p(Or);var Ar=p(function(n,r,t){return t.replace(n,r)});var Er=p(function(n,r,t){return cr(n,J(r),t)});var xr=p(function(n,r,t){return t.slice(n,r)});function R(r,n){return 1===arguments.length?function(n){return R(r,n)}:r<0?n.slice():"string"==typeof n?n.slice(0,r):Cn(n,0,r)}var Nr=p(function(n,r,t){var e,u,i,o;return g(t)||"string"==typeof t?(i=t,(e=(e=n)<0?i.length+e:e)===(u=(u=r)<0?i.length+u:u)||Math.min(e,u)<0||i.length<=Math.max(e,u)?i:"string"==typeof i?i.slice(0,e)+i[u]+i.slice(e+1,u)+i[e]+i.slice(u+1):(o=(i=i.slice())[e],i[e]=i[u],i[u]=o,i)):void 0===t[n]||void 0===t[r]?t:c(c({},t),{},f(f({},n,t[r]),r,t[n]))});function Pr(n){return["Promise","Function"].includes(N(n))}var Fr=p(function(n,r,t){return n(t)?t:r(t)});function Sr(r){return{x:r,map:function(n){return Sr(r)}}}var kr=p(function(n,r,t){return n(t)?r(t):t});var Ir=p(function(t,n,e){return R((e.length<n.length?e:n).length,n).map(function(n,r){return t(n,e[r])})});n.F=function(){return!1},n.T=function(){return!0},n.__findHighestArity=i,n._indexOf=P,n._lastIndexOf=hn,n._pipe=Y,n.add=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:+(""+t)+ +(""+n)},n.addIndex=q,n.addIndexRight=function(n){return q(n,function(n){return n-1},function(n){return n-1})},n.adjust=_,n.all=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=0;e<n.length;e++)if(!t(n[e]))return!1;return!0},n.allPass=function(r){return function(){for(var n=0;n<r.length;){if(!r[n].apply(r,arguments))return!1;n++}return!0}},n.always=J,n.and=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t&&n},n.any=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=0;e<n.length;){if(t(n[e],e))return!0;e++}return!1},n.anyPass=function(r){return function(){for(var n=0;n<r.length;){if(r[n].apply(r,arguments))return!0;n++}return!1}},n.ap=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:t.reduce(function(n,r){return[].concat(s(n),s(e.map(r)))},[])},n.aperture=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(n.length<t)return[];for(var e=0,u=n.length-(t-1),i=Array(u);e<u;)i[e]=n.slice(e,e+t),e+=1;return i},n.append=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:"string"==typeof n?n.split("").concat(t):((n=l(n)).push(t),n)},n.apply=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t.apply(this,n)},n.applySpec=function(n){var r=i(n);if(0===r)return function(){return{}};for(var t=arguments.length,e=Array(1<t?t-1:0),u=1;u<t;u++)e[u-1]=arguments[u];return function u(i,o,c){var n=o-c.length;if(1==n)return function(n){return u(i,o,v.apply(void 0,s(c).concat([n])))};if(2==n)return function(n,r){return u(i,o,v.apply(void 0,s(c).concat([n,r])))};if(3==n)return function(n,r,t){return u(i,o,v.apply(void 0,s(c).concat([n,r,t])))};if(4==n)return function(n,r,t,e){return u(i,o,v.apply(void 0,s(c).concat([n,r,t,e])))};if(4<n)return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return u(i,o,v.apply(void 0,s(c).concat(r)))};if(g(i)){for(var r=[],t=0,e=i.length;t<e;t++)"object"!==h(i[t])&&!g(i[t])||(r[t]=u(i[t],o,c)),"function"==typeof i[t]&&(r[t]=i[t].apply(i,s(c)));return r}var f,a={};for(f in i)0!=i.hasOwnProperty(f)&&"constructor"!==f&&("object"===h(i[f])?a[f]=u(i[f],o,c):"function"==typeof i[f]&&(a[f]=i[f].apply(i,s(c))));return a}(n,r,e)},n.applyTo=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n(t)},n.ascend=function t(e,n,r){return 1===arguments.length?function(n,r){return t(e,n,r)}:u(e(n),e(r),-1,1)},n.assoc=H,n.assocFn=y,n.assocPath=K,n.assocPathFn=G,n.binary=function(t){return 2<t.length?function(n,r){return t(n,r)}:t},n.bind=function r(e,u){return 1===arguments.length?function(n){return r(e,n)}:t(e.length,function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return e.apply(u,r)})},n.both=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:function(){return t.apply(void 0,arguments)&&n.apply(void 0,arguments)}},n.call=function(n){for(var r=arguments.length,t=Array(1<r?r-1:0),e=1;e<r;e++)t[e-1]=arguments[e];return n.apply(void 0,t)},n.chain=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=[]).concat.apply(e,s(n.map(t)))},n.clamp=Q,n.clone=b,n.collectBy=function r(e,n){if(1===arguments.length)return function(n){return r(e,n)};var t,u=j(function(n,r){var t=e(r);return void 0===n[t]&&(n[t]=[]),n[t].push(r),n},{},n),i=[];for(t in u)i.push(u[t]);return i},n.comparator=function(t){return function(n,r){return t(n,r)?-1:t(r,n)?1:0}},n.complement=function(n){return function(){return!n.apply(void 0,arguments)}},n.compose=function(){if(0===arguments.length)throw Error("compose requires at least one argument");return Z.apply(this,Array.prototype.slice.call(arguments,0).reverse())},n.composeWith=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:un(t,tn(n))},n.concat=on,n.cond=function(i){return function(){for(var n=arguments.length,t=Array(n),r=0;r<n;r++)t[r]=arguments[r];var e,u=!1;return i.forEach(function(n){var n=o(n,2),r=n[0],n=n[1];!u&&r.apply(void 0,t)&&(u=!0,e=n.apply(void 0,t))}),e}},n.converge=function r(e,n){return 1===arguments.length?function(n){return r(e,n)}:t(j(function(n,r){return ln(n,r.length)},0,n),function(){var r=arguments,t=this;return e.apply(this,E(function(n){return n.apply(t,r)},n))})},n.count=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:g(n)?n.filter(function(n){return t(n)}).length:0},n.countBy=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e={},n.forEach(function(n){n=t(n),e[n]?e[n]++:e[n]=1}),e)},n.createCompareFunction=u,n.curry=p,n.curryN=t,n.dec=function(n){return n-1},n.defaultTo=x,n.descend=function t(e,n,r){return 1===arguments.length?function(n,r){return t(e,n,r)}:u(e(n),e(r),1,-1)},n.difference=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:yn(t).filter(function(n){return!S(n,e)})},n.differenceWith=mn,n.differenceWithFn=dn,n.dissoc=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(null==n)return{};var e,u={};for(e in n)u[e]=n[e];return delete u[t],u},n.dissocPath=function r(t,n){var e,u,i;return 1===arguments.length?function(n){return r(t,n)}:0===(i=m(t)).length||void 0===k(i,n)?n:(e=i[0],u="object"!==h(n)||null===n||!n.hasOwnProperty(e),1<i.length?(u=u?$(i[1])?[]:{}:n[e],i=r(Array.prototype.slice.call(i,1),u,n),g(n)?An(e,i,n):c(c({},n),{},f({},e,i))):g(n)?On(e,n):bn([e],n))},n.divide=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t/n},n.drop=O,n.dropLast=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:0<t?n.slice(0,-t):n.slice()},n.dropLastWhile=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(0===n.length)return n;var e=g(n);if("function"!=typeof t)throw Error("'predicate' is from wrong type ".concat(h(t)));if(!e&&"string"!=typeof n)throw Error("'iterable' is from wrong type ".concat(h(n)));for(var u=[],i=n.length;i;){var o=n[--i];if(!t(o)){u.push(o);break}}for(;i;)u.push(n[--i]);return e?u.reverse():u.reverse().join("")},n.dropRepeats=function(n){var t;if(g(n))return t=[],n.reduce(function(n,r){return F(n,r)||t.push(r),r},void 0),t;throw Error("".concat(n," is not a list"))},n.dropRepeatsBy=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=null,n.slice().filter(function(n){if(null===e)e=t(n);else{if(n=t(n),F(e,n))return!1;e=n}return!0}))},n.dropRepeatsWith=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};var e;if(g(n))return e=[],n.reduce(function(n,r){return void 0!==n&&t(n,r)||e.push(r),r},void 0),e;throw Error("".concat(n," is not a list"))},n.dropWhile=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};var e=g(n);if(!e&&"string"!=typeof n)throw Error("`iterable` is neither list nor a string");for(var u=[],i=0;i<n.length;){var o=n[i++];if(!t(o)){u.push(o);break}}for(;i<n.length;)u.push(n[i++]);return e?u:u.join("")},n.either=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:function(){return!(!t.apply(void 0,arguments)&&!n.apply(void 0,arguments))}},n.empty=function(n){var r;return"string"==typeof n?"":Array.isArray(n)?"Uint8Array"===(r=n.constructor.name)?Uint8Array.from(""):"Float32Array"===r?new Float32Array([]):[]:"Object"===N(n)?{}:void 0},n.endsWith=function r(t,e){var u,i;return 1===arguments.length?function(n){return r(t,n)}:"string"==typeof e?e.endsWith(t):!!g(t)&&(u=e.length-t.length,i=!0,t.filter(function(n,r){return!!i&&((n=F(n,e[r+u]))||(i=!1),n)}).length===t.length)},n.eqBy=xn,n.eqByFn=En,n.eqProps=Pn,n.equals=F,n.evolve=kn,n.evolveArray=Fn,n.evolveObject=Sn,n.filter=T,n.filterArray=Tn,n.filterObject=In,n.find=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=0,u=n.length;e<u;){var i=n[e];if(t(i))return i;e++}},n.findIndex=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=n.length,u=-1;++u<e;)if(t(n[u]))return u;return-1},n.findLast=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=n.length;0<=--e;)if(t(n[e]))return n[e]},n.findLastIndex=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=n.length;0<=--e;)if(t(n[e]))return e;return-1},n.flatten=function n(r,t){for(var e=void 0===t?[]:t,u=0;u<r.length;u++)g(r[u])?n(r[u],e):e.push(r[u]);return e},n.flip=function(n){return e=n,function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];if(1===r.length)return function(n){return e(n,r[0])};if(2===r.length)return e(r[1],r[0]);if(3===r.length)return e(r[1],r[0],r[2]);if(4===r.length)return e(r[1],r[0],r[2],r[3]);throw Error("R.flip doesn't work with arity > 4")};var e},n.forEach=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(void 0!==n){if(!g(n))return Wn(t,n);for(var e=0,u=n.length;e<u;)t(n[e]),e++;return n}},n.forEachObjIndexed=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:void 0!==n?Wn(t,n):void 0},n.forEachObjIndexedFn=Wn,n.fromPairs=function(n){var r={};return n.forEach(function(n){n=o(n,2);return r[n[0]]=n[1]}),r},n.groupBy=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e={},u=0;u<n.length;u++){var i=n[u],o=t(i);e[o]||(e[o]=[]),e[o].push(i)}return e},n.groupWith=function(i,o){var n,c,f;if(g(o))return n=l(o),1===o.length?[n]:(c=[],f=[],n.reduce(function(n,r,t){var e,u;return 0!==t&&(e=i(n,r),u=0===f.length,t=t===o.length-1,e?(u&&f.push(n),f.push(r),t&&c.push(f)):u?(c.push([n]),t&&c.push([r])):(c.push(f),t&&c.push([r]),f=[])),r},void 0),c);throw new TypeError("list.reduce is not a function")},n.gt=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n<t},n.gte=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n<=t},n.has=Bn,n.hasIn=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:void 0!==Nn(t,n)},n.hasPath=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:void 0!==k(t,n)},n.head=nn,n.identical=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:Rn(t,n)},n.identity=rn,n.ifElse=qn,n.inc=function(n){return n+1},n.includes=S,n.indexBy=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if("string"==typeof t){for(var e=t,u=n,i={},o=0;o<u.length;o++){var c=u[o];i[k(e,c)]=c}return i}for(var f={},a=0;a<n.length;a++){var l=n[a];f[t(l)]=l}return f},n.indexOf=function(r,n){return 1===arguments.length?function(n){return P(r,n)}:P(r,n)},n.init=function(n){return"string"==typeof n?n.slice(0,-1):n.length?Cn(n,0,-1):[]},n.innerJoin=Dn,n.innerJoinFn=Un,n.insert=zn,n.insertAll=_n,n.insertAllFn=Mn,n.insertFn=Ln,n.intersection=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:T(function(n){return S(n,t)},n)},n.intersperse=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=-1,u=n.length,i=[];++e<u;)e===u-1?i.push(n[e]):i.push(n[e],t);return i},n.is=Jn,n.isEmpty=function(n){var r=N(n);return!["Undefined","NaN","Number","Null"].includes(r)&&(!n||("Function"===N(n.isEmpty)?n.isEmpty():n.isEmpty?!!n.isEmpty:"Object"===r?0===Object.keys(n).length:"Array"===r&&0===n.length))},n.isNil=function(n){return null==n},n.isNotNil=function(n){return null!=n},n.join=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n.join(t)},n.juxt=function(e){return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return e.map(function(n){return n.apply(void 0,r)})}},n.keys=function(n){return Object.keys(n)},n.last=function(n){return"string"==typeof n?n[n.length-1]||"":n[n.length-1]},n.lastIndexOf=function(r,n){return 1===arguments.length?function(n){return hn(r,n)}:hn(r,n)},n.length=function(n){return g(n)||"string"==typeof n?n.length:NaN},n.lens=r,n.lensIndex=function(n){return r(Hn(n),An(n))},n.lensPath=function(n){return r(k(n),K(n))},n.lensProp=function(n){return r(I(n),H(n))},n.lt=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t<n},n.map=E,n.mapArray=w,n.mapObjIndexed=an,n.mapObject=A,n.match=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:null===(n=n.match(t))?[]:n},n.mathMod=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:d(t)&&d(n)&&1<=n?(t%n+n)%n:NaN},n.max=ln,n.maxBy=Gn,n.maxByFn=$n,n.mean=Qn,n.median=function(n){var r,t=n.length;return 0===t?NaN:(r=(t-(t=2-t%2))/2,Qn(Array.prototype.slice.call(n,0).sort(function(n,r){return n===r?0:n<r?-1:1}).slice(r,r+t)))},n.merge=W,n.mergeAll=function(n){var r={};return E(function(n){r=W(r,n)},n),r},n.mergeDeepLeft=function(n,r){return B(r,n)},n.mergeDeepRight=B,n.mergeLeft=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:W(n,t)},n.mergeRight=W,n.mergeWith=Xn,n.mergeWithFn=Vn,n.min=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n<t?n:t},n.minBy=Zn,n.minByFn=Yn,n.modify=nr,n.modifyPath=tr,n.modifyPathFn=rr,n.modulo=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t%n},n.move=er,n.multiply=ur,n.negate=function(n){return-n},n.none=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=0;e<n.length;e++)if(t(n[e]))return!1;return!0},n.not=function(n){return!n},n.nth=Hn,n.objOf=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:f({},t,n)},n.of=function(n){return[n]},n.omit=bn,n.on=function t(e,u,r,n){return 3===arguments.length?function(n){return t(e,u,r,n)}:2===arguments.length?function(n,r){return t(e,u,n,r)}:e(u(r),u(n))},n.once=function(n,r){return 1===arguments.length?p(ir(n,r)):ir(n,r)},n.or=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t||n},n.over=cr,n.partial=fr,n.partialObject=function(r,t){return function(n){return r(B(n,t))}},n.partition=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:(g(n)?lr:ar)(t,n)},n.partitionArray=lr,n.partitionObject=ar,n.path=k,n.pathEq=hr,n.pathFn=jn,n.pathOr=sr,n.pathSatisfies=gr,n.pathSatisfiesFn=pr,n.paths=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:t.map(function(n){return k(n,e)})},n.pick=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(null!=n){for(var e=m(t,","),u={},i=0;i<e.length;)e[i]in n&&(u[e[i]]=n[e[i]]),i++;return u}},n.pickAll=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(null!=n){for(var e=m(t,","),u={},i=0;i<e.length;)u[e[i]]=e[i]in n?n[e[i]]:void 0,i++;return u}},n.pickBy=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:Object.keys(e).reduce(function(n,r){return t(e[r],r,e)&&(n[r]=e[r]),n},{})},n.pipe=Z,n.pipeWith=un,n.pluck=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=[],E(function(n){void 0!==n[t]&&e.push(n[t])},n),e)},n.prepend=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:[t].concat("string"==typeof n?n.split(""):n)},n.product=vr,n.prop=I,n.propEq=yr,n.propFn=Nn,n.propIs=dr,n.propOr=mr,n.propSatisfies=br,n.props=function r(t,e){if(1===arguments.length)return function(n){return r(t,n)};if(g(t))return w(function(n){return e[n]},t);throw Error("propsToPick is not a list")},n.range=jr,n.reduce=j,n.reduceBy=wr,n.reduceByFn=Or,n.reduceFn=X,n.reduceStopper=function(n){return new V(n)},n.reject=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:T(function(n){return!t(n)},n)},n.removeIndex=On,n.repeat=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:Array(n).fill(t)},n.replace=Ar,n.reverse=tn,n.set=Er,n.slice=xr,n.sort=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:l(n).sort(t)},n.sortBy=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:l(n).sort(function(n,r){return n=t(n),r=t(r),n===r?0:n<r?-1:1})},n.sortWith=function r(c,n){return 1===arguments.length?function(n){return r(c,n)}:!1===Array.isArray(n)?[]:((n=n.slice()).sort(function(n,r){for(var t=n,e=r,u=c,i=0,o=0;0===i&&o<u.length;)i=u[o](t,e),o+=1;return i}),n)},n.split=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n.split(t)},n.splitAt=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};var e,u,i;if(n)return g(n)||"string"==typeof n?(u=n.length+t<0?0:n.length+t,u=(e=(i=t)<0)&&"Function"===N(u)?u():u,i=e||"Function"!==N(i)?i:i(),[R(e=e?u:i,n),O(e,n)]):[[],[]];throw new TypeError("Cannot read property 'slice' of ".concat(n))},n.splitEvery=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(t<1)throw Error("First argument to splitEvery must be a positive integer");for(var e=[],u=0;u<n.length;)e.push(n.slice(u,u+=t));return e},n.splitWhen=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(!n)throw new TypeError("Cannot read property 'length' of ".concat(n));for(var e=[],u=[],i=!1,o=-1;o++<n.length-1;)i?u.push(n[o]):t(n[o])?(u.push(n[o]),i=!0):e.push(n[o]);return[e,u]},n.startsWith=function r(t,e){var u;return 1===arguments.length?function(n){return r(t,n)}:"string"==typeof e?e.startsWith(t):!!g(t)&&(u=!0,t.filter(function(n,r){return!!u&&((n=F(n,e[r]))||(u=!1),n)}).length===t.length)},n.subtract=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t-n},n.sum=Kn,n.swap=Nr,n.symmetricDifference=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:on(T(function(n){return!S(n,e)},t),T(function(n){return!S(n,t)},e))},n.tail=en,n.take=R,n.takeLast=function r(t,n){var e,u;return 1===arguments.length?function(n){return r(t,n)}:(e=n.length,t<0?n.slice():(u=e<t?e:t,"string"==typeof n?n.slice(e-u):Cn(n,u=e-u,e)))},n.takeLastWhile=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(0===n.length)return n;for(var e=[],u=n.length;u;){var i=n[--u];if(!t(i))break;e.push(i)}return g(n)?e.reverse():e.reverse().join("")},n.takeWhile=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};var e=g(n);if(!e&&"string"!=typeof n)throw Error("`iterable` is neither list nor a string");for(var u=[],i=0;i<n.length;){var o=n[i++];if(!t(o))break;u.push(o)}return e?u:u.join("")},n.tap=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:(t(n),n)},n.test=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if("string"==typeof t)throw new TypeError('R.test requires a value of type RegExp as its first argument; received "'.concat(t,'"'));return-1!=n.search(t)},n.times=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(!d(n)||n<0)throw new RangeError("n must be an integer");return E(t,jr(0,n))},n.toLower=function(n){return n.toLowerCase()},n.toPairs=function(n){return Object.entries(n)},n.toString=function(n){return""+n},n.toUpper=function(n){return n.toUpperCase()},n.transpose=function(n){return n.reduce(function(t,n){return n.forEach(function(n,r){return g(t[r])?t[r].push(n):t.push([n])}),t},[])},n.trim=function(n){return n.trim()},n.tryCatch=function(e,u){var i;if(Pr(e))return i=Pr(u),function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];try{return e.apply(void 0,r)}catch(n){return i?u.apply(void 0,[n].concat(r)):u}};throw Error("R.tryCatch | fn '".concat(e,"'"))},n.type=N,n.unapply=function(e){return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return e.call(this,r)}},n.union=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=l(t),n.forEach(function(n){S(n,t)||e.push(n)}),e)},n.uniq=yn,n.uniqBy=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=new vn,n.filter(function(n){return e.checkUniqueness(t(n))}))},n.uniqWith=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=-1,u=[];++e<n.length;){var i=n[e];!function(n,r,t){for(var e=!1,u=-1;++u<t.length&&!e;)n(r,t[u])&&(e=!0);return e}(t,i,u)&&u.push(i)}return u},n.unless=Fr,n.unnest=function(n){return n.reduce(function(n,r){return[].concat(s(n),Array.isArray(r)?s(r):[r])},[])},n.unwind=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:g(e[t])?w(function(n){return c(c({},e),{},f({},t,n))},e[t]):[e]},n.update=An,n.updateFn=wn,n.values=function(n){return"Object"!==N(n)?[]:Object.values(n)},n.view=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t(Sr)(n).x},n.when=kr,n.where=function r(t,n){if(void 0===n)return function(n){return r(t,n)};var e,u,i=!0;for(e in t)i&&(u=t[e](n[e]),i)&&!1===u&&(i=!1);return i},n.whereAny=function r(t,n){if(void 0===n)return function(n){return r(t,n)};for(var e in t)if(t[e](n[e]))return!0;return!1},n.whereEq=function r(t,e){var n;return 1===arguments.length?function(n){return r(t,n)}:(n=T(function(n,r){return F(n,e[r])},t),Object.keys(n).length===Object.keys(t).length)},n.without=function r(t,n){return void 0===n?function(n){return r(t,n)}:j(function(n,r){return-1<P(r,t)?n:n.concat(r)},[],n)},n.xor=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:!!t&&!n||!!n&&!t},n.zip=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=[],u=Math.min(t.length,n.length),i=0;i<u;i++)e[i]=[t[i],n[i]];return e},n.zipObj=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:R(e.length,t).reduce(function(n,r,t){return n[r]=e[t],n},{})},n.zipWith=Ir}); +!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((n="undefined"!=typeof globalThis?globalThis:n||self).R={})}(this,function(n){"use strict";function a(n,l){switch(n){case 0:return function(){return l.apply(this,arguments)};case 1:return function(n){return l.apply(this,arguments)};case 2:return function(n,r){return l.apply(this,arguments)};case 3:return function(n,r,t){return l.apply(this,arguments)};case 4:return function(n,r,t,e){return l.apply(this,arguments)};case 5:return function(n,r,t,e,u){return l.apply(this,arguments)};case 6:return function(n,r,t,e,u,i){return l.apply(this,arguments)};case 7:return function(n,r,t,e,u,i,o){return l.apply(this,arguments)};case 8:return function(n,r,t,e,u,i,o,c){return l.apply(this,arguments)};case 9:return function(n,r,t,e,u,i,o,c,f){return l.apply(this,arguments)};default:return function(n,r,t,e,u,i,o,c,f,a){return l.apply(this,arguments)}}}function t(r,n){if(1===arguments.length)return function(n){return t(r,n)};if(10<r)throw Error("First argument to _arity must be a non-negative integer no greater than ten");return a(r,function i(o,c,f){return function(){for(var n=0,r=0,t=c.length,e=arguments.length,u=Array(t+e);n<t;)u[n]=c[n],n++;for(;r<e;)u[t+r]=arguments[r],r++;return u.length<o?a(o-u.length,i(o,u,f)):f.apply(this,u)}}(r,[],n))}function q(u){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:function(){return 0},o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:function(n){return n+1};return t(u.length,function(){var r=arguments[0],t=arguments[arguments.length-1],e=i(t.length),n=Array.prototype.slice.call(arguments,0);return n[0]=function(){var n=r.apply(this,function(n,r){for(var t=(n=n||[]).length,e=(r=r||[]).length,u=[],i=0;i<t;)u[u.length]=n[i],i+=1;for(i=0;i<e;)u[u.length]=r[i],i+=1;return u}(arguments,[e,t]));return e=o(e),n},u.apply(this,n)})}function l(n){return Array.prototype.slice.call(n)}function e(n,r){for(var t=0,e=Array(r=null!=r&&r<=n.length?r:n.length);t<r;t++)e[t]=n[t];return e}function C(n,r){if(!(n instanceof r))throw new TypeError("Cannot call a class as a function")}function U(n,r){if(r)for(var t=n.prototype,e=r,u=0;u<e.length;u++){var i=e[u];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,L(i.key),i)}return Object.defineProperty(n,"prototype",{writable:!1}),n}function c(n,r,t){return(r=L(r))in n?Object.defineProperty(n,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[r]=t,n}function D(r,n){var t,e=Object.keys(r);return Object.getOwnPropertySymbols&&(t=Object.getOwnPropertySymbols(r),n&&(t=t.filter(function(n){return Object.getOwnPropertyDescriptor(r,n).enumerable})),e.push.apply(e,t)),e}function f(r){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?D(Object(t),!0).forEach(function(n){c(r,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):D(Object(t)).forEach(function(n){Object.defineProperty(r,n,Object.getOwnPropertyDescriptor(t,n))})}return r}function o(n,r){return function(n){if(Array.isArray(n))return n}(n)||function(n,r){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var e,u,i,o,c=[],f=!0,a=!1;try{if(i=(t=t.call(n)).next,0!==r)for(;!(f=(e=i.call(t)).done)&&(c.push(e.value),c.length!==r);f=!0);}catch(n){a=!0,u=n}finally{try{if(!f&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(a)throw u}}return c}}(n,r)||z(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(n){return function(n){if(Array.isArray(n))return e(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||z(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function L(n){n=function(n,r){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0===t)return("string"===r?String:Number)(n);if("object"!=typeof(t=t.call(n,r||"default")))return t;throw new TypeError("@@toPrimitive must return a primitive value.")}(n,"string");return"symbol"==typeof n?n:n+""}function s(n){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n})(n)}function z(n,r){var t;if(n)return"string"==typeof n?e(n,r):"Map"===(t="Object"===(t={}.toString.call(n).slice(8,-1))&&n.constructor?n.constructor.name:t)||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?e(n,r):void 0}function p(u){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:[];return function(){for(var n,r=arguments.length,t=Array(r),e=0;e<r;e++)t[e]=arguments[e];return(n=[].concat(h(i),t)).length<u.length?p(u,n):u.apply(void 0,h(n))}}var M=p(function(n,r,t){var e=n<0?t.length+n:n;return t.length<=n||e<0?t:((n=l(t))[e]=r(n[e]),n)});function _(r){return function(n){return r}}var g=Array.isArray;function i(n){var r,t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0;for(r in n)!1!=n.hasOwnProperty(r)&&"constructor"!==r&&("object"===s(n[r])&&(t=Math.max(t,i(n[r]))),"function"==typeof n[r])&&(t=Math.max(t,n[r].length));return t}function v(){for(var n=[],r=0,t=arguments.length;r<t&&void 0!==arguments[r];)n[r]=arguments[r],r++;return n}function u(n,r,t,e){return n===r?0:n<r?t:e}function y(n,r,t){return Object.assign({},t,c({},n,r))}var J=p(y);function H(n){return Number.isInteger(+(""+n))}var d=Number.isInteger||function(n){return n<<0===n};function m(n,r){return"string"==typeof n?n.split(1<arguments.length&&void 0!==r?r:".").map(function(n){return d(n)?+(""+n):n}):n}function $(n,r,t){var e,u,n=m(n);return 0===n.length?r:(e=n[0],1<n.length&&(u="object"!==s(t)||null===t||!t.hasOwnProperty(e)?H(n[1])?[]:{}:t[e],r=$(Array.prototype.slice.call(n,1),r,u)),H(e)&&g(t)?((n=l(t))[e]=r,n):y(e,r,t))}var G=p($);var K=p(function(n,r,t){if(r<n)throw Error("min must not be greater than max in clamp(min, max, value)");return t<n||r<t?r<t?r:t<n?n:void 0:t});function b(n){var r,t=g(n)?Array(n.length):{};if(n&&n.getTime)return new Date(n.getTime());for(r in n){var e=n[r];t[r]="object"===s(e)&&null!==e?e.getTime?new Date(e.getTime()):b(e):e}return t}var Q=U(function n(r){C(this,n),this.value=r});function V(n,r,t){if(null!=t){if(!g(t))throw new TypeError("reduce: list must be array or iterable");for(var e=0,u=t.length;e<u;){if((r=n(r,t[e],e,t))instanceof Q)return r.value;e++}}return r}var w=p(V);function X(n,r){return function(){return r.call(this,n.apply(this,arguments))}}function Y(){if(0===arguments.length)throw Error("pipe requires at least one argument");return a(arguments[0].length,V(X,arguments[0],Array.prototype.slice.call(arguments,1,1/0)))}function Z(n){return"string"==typeof n?n[0]||"":n[0]}function nn(n){return n}function rn(n){return"string"==typeof n?n.split("").reverse().join(""):n.slice().reverse()}function j(r,n){return 1===arguments.length?function(n){return j(r,n)}:n.slice(0<r?r:0)}function tn(n){return j(1,n)}function en(t,n){var r,e;return 0<n.length?(r=Z(n),e=tn(n),a(r.length,function(){return w(function(n,r){return t.call(this,r,n)},r.apply(this,arguments),e)})):nn}function un(r,n){return 1===arguments.length?function(n){return un(r,n)}:"string"==typeof r?"".concat(r).concat(n):[].concat(h(r),h(n))}var on="Incorrect iterable input",cn=Object.keys;function O(n,r){for(var t=2<arguments.length&&void 0!==arguments[2]&&arguments[2],e=0,u=Array(r.length);e<r.length;)u[e]=t?n(r[e],e):n(r[e]),e++;return u}function A(r,n){if(1===arguments.length)return function(n){return A(r,n)};for(var t=0,e=cn(n),u=e.length,i={};t<u;){var o=e[t];i[o]=r(n[o],o,n),t++}return i}var fn=A;function E(r,n){if(1===arguments.length)return function(n){return E(r,n)};if(n)return(g(n)?O:A)(r,n);throw Error(on)}function an(r,n){return 1===arguments.length?function(n){return an(r,n)}:r<n?n:r}function N(r,n){return 1===arguments.length?function(n){return N(r,n)}:null==(t=n)||!0===Number.isNaN(t)?r:n;var t}function x(n){return null===n?"Null":void 0===n?"Undefined":Number.isNaN(n)?"NaN":"AsyncFunction"===(n=Object.prototype.toString.call(n).slice(8,-1))?"Promise":n}function ln(n,r){if(!g(r))throw Error("Cannot read property 'indexOf' of ".concat(r));var t=x(n);if(!["Array","NaN","Object","RegExp"].includes(t))return r.lastIndexOf(n);for(var e=r.length,u=-1;-1<--e&&-1===u;)S(r[e],n)&&(u=e);return u}function P(n,r){if(!g(r))throw Error("Cannot read property 'indexOf' of ".concat(r));var t=x(n);if(!["Array","NaN","Object","RegExp"].includes(t))return r.indexOf(n);for(var e=-1,u=-1,i=r.length;++e<i&&-1===u;)S(r[e],n)&&(u=e);return u}function hn(n){for(var r,t=[];!(r=n.next()).done;)t.push(r.value);return t}function sn(n){return n.toDateString?[!0,n.getTime()]:[!1]}function pn(n){return n.constructor!==RegExp?[!1]:[!0,""+n]}function S(t,e){var n,u,i,r,o,c,f,a;return 1===arguments.length?function(n){return S(t,n)}:!!Object.is(t,e)||(n=x(t))===x(e)&&("Function"===n?void 0!==t.name&&t.name===e.name:!!["NaN","Null","Undefined"].includes(n)||(["BigInt","Number"].includes(n)?Object.is(-0,t)===Object.is(-0,e)&&""+t==""+e:["Boolean","String"].includes(n)?""+t==""+e:"Array"===n?""+(r=Array.from(t))==""+(u=Array.from(e))&&(i=!0,r.forEach(function(n,r){!i||n===u[r]||S(n,u[r])||(i=!1)}),i):(r=pn(t),o=pn(e),r[0]?!!o[0]&&r[1]===o[1]:!o[0]&&(r=sn(t),o=sn(e),r[0]?!!o[0]&&r[1]===o[1]:!o[0]&&(t instanceof Error?e instanceof Error&&(r=t).message===(o=e).message&&r.toString===o.toString&&""+r==""+o:"Set"===n?(o=t).size===(f=e).size&&(o=hn(o.values()),c=hn(f.values()),0===o.filter(function(n){return-1===P(n,c)}).length):"Object"===n&&(f=Object.keys(t)).length===Object.keys(e).length&&(a=!0,f.forEach(function(n){var r;a&&(r=t[n])!==(n=e[n])&&!S(r,n)&&(a=!1)}),a))))))}function k(r,n){if(1===arguments.length)return function(n){return k(r,n)};if("string"==typeof n)return n.includes(r);if(n)return!!g(n)&&-1<P(r,n);throw new TypeError("Cannot read property 'indexOf' of ".concat(n))}var gn=function(){return U(function n(){C(this,n),this.set=new Set,this.items={}},[{key:"checkUniqueness",value:function(n){var r=x(n);return["Null","Undefined","NaN"].includes(r)?!(r in this.items)&&(this.items[r]=!0):["Object","Array"].includes(r)?r in this.items?-1===P(n,this.items[r])&&(this.items[r].push(n),!0):(this.items[r]=[n],!0):(r=this.set.size,this.set.add(n),this.set.size!==r)}}])}();function vn(n){var r=new gn,t=[];return n.forEach(function(n){r.checkUniqueness(n)&&t.push(n)}),t}function yn(t,n,r){var e=[],r=o(r.length<n.length?[n,r]:[r,n],2),n=r[0],u=r[1];return n.forEach(function(r){u.some(function(n){return t(r,n)})||-1!==P(r,e)||e.push(r)}),e}var dn=p(yn);function mn(r,n){if(1===arguments.length)return function(n){return mn(r,n)};if(null!=n){var t,e=m(r,","),u={};for(t in n)!function(n,r){for(var t=-1,e=r.length;++t<e;)if(""+r[t]==""+n)return 1}(t,e)&&(u[t]=n[t]);return u}}function bn(n,r){for(var t=r,e=0,u=m(n);e<u.length;){if(null==t)return;if(null===t[u[e]])return;t=t[u[e]],e++}return t}function F(r,n){return 1===arguments.length?function(n){return F(r,n)}:null!=n?bn(r,n):void 0}function wn(r,n){return 1===arguments.length?function(n){return wn(r,n)}:0<r?r<n.length-1?[].concat(h(n.slice(0,r)),h(n.slice(r+1))):n.slice(0,n.length-1):n.slice(1)}function jn(n,r,t){t=l(t);return-1===n?t.fill(r,n):t.fill(r,n,n+1)}var On=p(jn);function An(n,r,t){return S(n(r),n(t))}var En=p(An);function Nn(n,r){if(r)return r[n]}function I(r,n){return 1===arguments.length?function(n){return I(r,n)}:Nn(r,n)}var xn=p(function(n,r,t){return S(I(n,r),I(n,t))});function Pn(t,n){return O(function(n,r){return"Function"===x(t[r])?t[r](n):n},n,!0)}function Sn(e,n){return A(function(n,r){var t;return"Object"===x(n)?"Function"===(t=x(e[r]))?e[r](n):"Object"===t?kn(e[r],n):n:"Function"===x(e[r])?e[r](n):n},n)}function kn(r,n){if(1===arguments.length)return function(n){return kn(r,n)};var t=x(r),e=x(n);if(e!==t)throw Error("iterableType !== rulesType");if(["Object","Array"].includes(t))return("Object"===e?Sn:Pn)(r,n);throw Error("'iterable' and 'rules' are from wrong type ".concat(t))}function Fn(n,r){var t,e={};for(t in r)n(r[t],t,r)&&(e[t]=r[t]);return e}function In(n,r){for(var t=2<arguments.length&&void 0!==arguments[2]&&arguments[2],e=0,u=r.length,i=[];e<u;)(t?n(r[e],e):n(r[e]))&&i.push(r[e]),e++;return i}function T(r,n){if(1===arguments.length)return function(n){return T(r,n)};if(n)return g(n)?In(r,n,!1):Fn(r,n);throw Error("Incorrect iterable input")}function Tn(n,r){for(var t=0,e=cn(r),u=e.length;t<u;){var i=e[t];n(r[i],i,r),t++}return r}function Wn(r,n){return 1===arguments.length?function(n){return Wn(r,n)}:!!n&&n.hasOwnProperty(r)}var Bn=Object.is||function(n,r){return n===r?0!==n||1/n==1/r:n!=n&&r!=r};var Rn=p(function(n,r,t){return function(){return(!0===("boolean"==typeof n?n:n.apply(void 0,arguments))?r:t).apply(void 0,arguments)}});function qn(n,r,t){for(var e=-1,u=n.length,i=((t=u<t?u:t)<0&&(t+=u),u=t<r?0:t-r>>>0,r>>>=0,Array(u));++e<u;)i[e]=n[e+r];return i}function Cn(o,n,c){for(var r=function(n){for(var r=o,t=n,e=c,u=0,i=e.length;u<i;){if(r(t,e[u]))return 1;u+=1}},t=n,e=0,u=t.length,i=[];e<u;)r(t[e])&&(i[i.length]=t[e]),e+=1;return i}var Un=p(Cn);function Dn(n,r,t){return[].concat(h(t.slice(0,n)),[r],h(t.slice(n)))}var Ln=p(Dn);function zn(n,r,t){return[].concat(h(t.slice(0,n)),h(r),h(t.slice(n)))}var Mn=p(zn);function _n(r,n){return 1===arguments.length?function(n){return _n(r,n)}:null!=n&&n.constructor===r||n instanceof r}function Jn(n){var r=x(n);return!(["Undefined","NaN","Number","Null"].includes(r)||n&&("Object"===r?0!==Object.keys(n).length:"Array"!==r||0!==n.length))}function r(t,e){return function(n){return function(r){return n(t(r)).map(function(n){return e(n,r)})}}}function Hn(r,n){var t;return 1===arguments.length?function(n){return Hn(r,n)}:(t=r<0?n.length+r:r,"[object String]"===Object.prototype.toString.call(n)?n[0|t]||"":n[t])}function $n(n,r,t){return n(t)>n(r)?t:r}var Gn=p($n);function Kn(n){return n.reduce(function(n,r){return n+r},0)}function Qn(n){return Kn(n)/n.length}function W(r,n){return 1===arguments.length?function(n){return W(r,n)}:Object.assign({},r||{},n||{})}function B(r,t){var e;return 1===arguments.length?function(n){return B(r,n)}:(e=b(r),Object.keys(t).forEach(function(n){"Object"===x(t[n])&&"Object"===x(r[n])?e[n]=B(r[n],t[n]):e[n]=t[n]}),e)}function Vn(r,n,t){var e=null!=n?n:{},u=null!=t?t:{},i={};return Object.keys(e).forEach(function(n){i[n]=void 0===u[n]?e[n]:r(e[n],u[n])}),Object.keys(u).forEach(function(n){void 0===i[n]&&(i[n]=void 0===e[n]?u[n]:r(e[n],u[n]))}),i}var Xn=p(Vn);function Yn(n,r,t){return n(t)<n(r)?t:r}var Zn=p(Yn);var nr=p(function(n,r,t){var e;return!Array.isArray(e=t)&&"Object"!==x(e)||void 0===t[n]?t:g(t)?jn(n,r(t[n]),t):f(f({},t),{},c({},n,r(t[n])))});function rr(n,r,t){n=m(n);return 1===n.length?f(f({},t),{},c({},n[0],r(t[n[0]]))):void 0===F(n,t)||(r=tr(Array.prototype.slice.call(n,1),r,t[n[0]]))===t[n[0]]?t:J(n[0],r,t)}var tr=p(rr);var er=p(function(n,r,t){if(n<0||r<0)throw Error("Rambda.move does not support negative indexes");var e;return t.length-1<n||t.length-1<r?t:((e=l(t))[n]=t[r],e[r]=t[n],e)});function ur(r,n){return 1===arguments.length?function(n){return ur(r,n)}:r*n}function ir(n,r){var t;return function(){return n&&(t=n.apply(r||this,arguments),n=null),t}}function or(r){return{x:r,map:function(n){return or(n(r))}}}var cr=p(function(n,r,t){return n(function(n){return or(r(n))})(t).x});function fr(e){for(var u=e.length,n=arguments.length,r=Array(1<n?n-1:0),t=1;t<n;t++)r[t-1]=arguments[t];var i=1===r.length&&g(r[0])?r[0]:r;return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return i.length+r.length<u?fr.apply(void 0,[e].concat([].concat(h(i),r))):e.apply(void 0,h(i).concat(r))}}function ar(t,n){var e={},u={};return Object.entries(n).forEach(function(n){var n=o(n,2),r=n[0],n=n[1];t(n,r)?e[r]=n:u[r]=n}),[e,u]}function lr(n,r){for(var t=2<arguments.length&&void 0!==arguments[2]&&arguments[2],e=[],u=[],i=-1;i++<r.length-1;)((t?n(r[i],i):n(r[i]))?e:u).push(r[i]);return[e,u]}var hr=p(function(n,r,t){return S(F(n,t),r)});var sr=p(function(n,r,t){return N(n,F(r,t))});function pr(n,r,t){if(0===r.length)throw Error("R.pathSatisfies received an empty path");return!!n(F(r,t))}var gr=p(pr);var vr=w(ur,1);var yr=p(function(n,r,t){return!!t&&S(n,I(r,t))});var dr=p(function(n,r,t){return _n(n,t[r])});var mr=p(function(n,r,t){return t?N(n,t[r]):n});var br=p(function(n,r,t){return n(I(r,t))});function wr(r,n){if(1===arguments.length)return function(n){return wr(r,n)};if(Number.isNaN(+(""+r))||Number.isNaN(+(""+n)))throw new TypeError("Both arguments to range must be numbers");if(n<r)return[];for(var t=n-r,e=Array(t),u=0;u<t;u++)e[u]=r+u;return e}function jr(i,o,c,n){return w(function(n,r){return t=i,e=o,n=n,u=(u=c)(r=r),t=t(Wn(u,n)?n[u]:b(e),r),n[u]=t,n;var t,e,u},{},n)}var Or=p(jr);var Ar=p(function(n,r,t){return t.replace(n,r)});var Er=p(function(n,r,t){return cr(n,_(r),t)});var Nr=p(function(n,r,t){return t.slice(n,r)});function R(r,n){return 1===arguments.length?function(n){return R(r,n)}:r<0?n.slice():"string"==typeof n?n.slice(0,r):qn(n,0,r)}var xr=p(function(n,r,t){var e,u,i,o;return g(t)||"string"==typeof t?(i=t,(e=(e=n)<0?i.length+e:e)===(u=(u=r)<0?i.length+u:u)||Math.min(e,u)<0||i.length<=Math.max(e,u)?i:"string"==typeof i?i.slice(0,e)+i[u]+i.slice(e+1,u)+i[e]+i.slice(u+1):(o=(i=i.slice())[e],i[e]=i[u],i[u]=o,i)):void 0===t[n]||void 0===t[r]?t:f(f({},t),{},c(c({},n,t[r]),r,t[n]))});function Pr(n){return["Promise","Function"].includes(x(n))}var Sr=p(function(n,r,t){return n(t)?t:r(t)});function kr(r){return{x:r,map:function(n){return kr(r)}}}var Fr=p(function(n,r,t){return n(t)?r(t):t});var Ir=p(function(t,n,e){return R((e.length<n.length?e:n).length,n).map(function(n,r){return t(n,e[r])})});n.F=function(){return!1},n.T=function(){return!0},n.__findHighestArity=i,n._indexOf=P,n._lastIndexOf=ln,n._pipe=X,n.add=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:+(""+t)+ +(""+n)},n.addIndex=q,n.addIndexRight=function(n){return q(n,function(n){return n-1},function(n){return n-1})},n.adjust=M,n.all=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=0;e<n.length;e++)if(!t(n[e]))return!1;return!0},n.allPass=function(r){return function(){for(var n=0;n<r.length;){if(!r[n].apply(r,arguments))return!1;n++}return!0}},n.always=_,n.and=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t&&n},n.any=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=0;e<n.length;){if(t(n[e],e))return!0;e++}return!1},n.anyPass=function(r){return function(){for(var n=0;n<r.length;){if(r[n].apply(r,arguments))return!0;n++}return!1}},n.ap=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:t.reduce(function(n,r){return[].concat(h(n),h(e.map(r)))},[])},n.aperture=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(n.length<t)return[];for(var e=0,u=n.length-(t-1),i=Array(u);e<u;)i[e]=n.slice(e,e+t),e+=1;return i},n.append=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:"string"==typeof n?n.split("").concat(t):((n=l(n)).push(t),n)},n.apply=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t.apply(this,n)},n.applySpec=function(n){var r=i(n);if(0===r)return function(){return{}};for(var t=arguments.length,e=Array(1<t?t-1:0),u=1;u<t;u++)e[u-1]=arguments[u];return function u(i,o,c){var n=o-c.length;if(1==n)return function(n){return u(i,o,v.apply(void 0,h(c).concat([n])))};if(2==n)return function(n,r){return u(i,o,v.apply(void 0,h(c).concat([n,r])))};if(3==n)return function(n,r,t){return u(i,o,v.apply(void 0,h(c).concat([n,r,t])))};if(4==n)return function(n,r,t,e){return u(i,o,v.apply(void 0,h(c).concat([n,r,t,e])))};if(4<n)return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return u(i,o,v.apply(void 0,h(c).concat(r)))};if(g(i)){for(var r=[],t=0,e=i.length;t<e;t++)"object"!==s(i[t])&&!g(i[t])||(r[t]=u(i[t],o,c)),"function"==typeof i[t]&&(r[t]=i[t].apply(i,h(c)));return r}var f,a={};for(f in i)0!=i.hasOwnProperty(f)&&"constructor"!==f&&("object"===s(i[f])?a[f]=u(i[f],o,c):"function"==typeof i[f]&&(a[f]=i[f].apply(i,h(c))));return a}(n,r,e)},n.applyTo=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n(t)},n.ascend=function t(e,n,r){return 1===arguments.length?function(n,r){return t(e,n,r)}:u(e(n),e(r),-1,1)},n.assoc=J,n.assocFn=y,n.assocPath=G,n.assocPathFn=$,n.binary=function(t){return 2<t.length?function(n,r){return t(n,r)}:t},n.bind=function r(e,u){return 1===arguments.length?function(n){return r(e,n)}:t(e.length,function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return e.apply(u,r)})},n.both=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:function(){return t.apply(void 0,arguments)&&n.apply(void 0,arguments)}},n.call=function(n){for(var r=arguments.length,t=Array(1<r?r-1:0),e=1;e<r;e++)t[e-1]=arguments[e];return n.apply(void 0,t)},n.chain=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=[]).concat.apply(e,h(n.map(t)))},n.clamp=K,n.clone=b,n.collectBy=function r(e,n){if(1===arguments.length)return function(n){return r(e,n)};var t,u=w(function(n,r){var t=e(r);return void 0===n[t]&&(n[t]=[]),n[t].push(r),n},{},n),i=[];for(t in u)i.push(u[t]);return i},n.comparator=function(t){return function(n,r){return t(n,r)?-1:t(r,n)?1:0}},n.complement=function(n){return function(){return!n.apply(void 0,arguments)}},n.compose=function(){if(0===arguments.length)throw Error("compose requires at least one argument");return Y.apply(this,Array.prototype.slice.call(arguments,0).reverse())},n.composeWith=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:en(t,rn(n))},n.concat=un,n.cond=function(i){return function(){for(var n=arguments.length,t=Array(n),r=0;r<n;r++)t[r]=arguments[r];var e,u=!1;return i.forEach(function(n){var n=o(n,2),r=n[0],n=n[1];!u&&r.apply(void 0,t)&&(u=!0,e=n.apply(void 0,t))}),e}},n.converge=function r(e,n){return 1===arguments.length?function(n){return r(e,n)}:t(w(function(n,r){return an(n,r.length)},0,n),function(){var r=arguments,t=this;return e.apply(this,E(function(n){return n.apply(t,r)},n))})},n.count=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:g(n)?n.filter(function(n){return t(n)}).length:0},n.countBy=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e={},n.forEach(function(n){n=t(n),e[n]?e[n]++:e[n]=1}),e)},n.createCompareFunction=u,n.curry=p,n.curryN=t,n.dec=function(n){return n-1},n.defaultTo=N,n.descend=function t(e,n,r){return 1===arguments.length?function(n,r){return t(e,n,r)}:u(e(n),e(r),1,-1)},n.difference=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:vn(t).filter(function(n){return!k(n,e)})},n.differenceWith=dn,n.differenceWithFn=yn,n.dissoc=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(null==n)return{};var e,u={};for(e in n)u[e]=n[e];return delete u[t],u},n.dissocPath=function r(t,n){var e,u,i;return 1===arguments.length?function(n){return r(t,n)}:0===(i=m(t)).length||void 0===F(i,n)?n:(e=i[0],u="object"!==s(n)||null===n||!n.hasOwnProperty(e),1<i.length?(u=u?H(i[1])?[]:{}:n[e],i=r(Array.prototype.slice.call(i,1),u,n),g(n)?On(e,i,n):f(f({},n),{},c({},e,i))):g(n)?wn(e,n):mn([e],n))},n.divide=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t/n},n.drop=j,n.dropLast=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:0<t?n.slice(0,-t):n.slice()},n.dropLastWhile=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(0===n.length)return n;var e=g(n);if("function"!=typeof t)throw Error("'predicate' is from wrong type ".concat(s(t)));if(!e&&"string"!=typeof n)throw Error("'iterable' is from wrong type ".concat(s(n)));for(var u=[],i=n.length;i;){var o=n[--i];if(!t(o)){u.push(o);break}}for(;i;)u.push(n[--i]);return e?u.reverse():u.reverse().join("")},n.dropRepeats=function(n){var t;if(g(n))return t=[],n.reduce(function(n,r){return S(n,r)||t.push(r),r},void 0),t;throw Error("".concat(n," is not a list"))},n.dropRepeatsBy=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=null,n.slice().filter(function(n){if(null===e)e=t(n);else{if(n=t(n),S(e,n))return!1;e=n}return!0}))},n.dropRepeatsWith=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};var e;if(g(n))return e=[],n.reduce(function(n,r){return void 0!==n&&t(n,r)||e.push(r),r},void 0),e;throw Error("".concat(n," is not a list"))},n.dropWhile=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};var e=g(n);if(!e&&"string"!=typeof n)throw Error("`iterable` is neither list nor a string");for(var u=[],i=0;i<n.length;){var o=n[i++];if(!t(o)){u.push(o);break}}for(;i<n.length;)u.push(n[i++]);return e?u:u.join("")},n.either=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:function(){return!(!t.apply(void 0,arguments)&&!n.apply(void 0,arguments))}},n.empty=function(n){var r;return"string"==typeof n?"":Array.isArray(n)?"Uint8Array"===(r=n.constructor.name)?Uint8Array.from(""):"Float32Array"===r?new Float32Array([]):[]:"Object"===x(n)?{}:void 0},n.endsWith=function r(t,e){var u,i;return 1===arguments.length?function(n){return r(t,n)}:"string"==typeof e?e.endsWith(t):!!g(t)&&(u=e.length-t.length,i=!0,t.filter(function(n,r){return!!i&&((n=S(n,e[r+u]))||(i=!1),n)}).length===t.length)},n.eqBy=En,n.eqByFn=An,n.eqProps=xn,n.equals=S,n.evolve=kn,n.evolveArray=Pn,n.evolveObject=Sn,n.filter=T,n.filterArray=In,n.filterObject=Fn,n.find=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=0,u=n.length;e<u;){var i=n[e];if(t(i))return i;e++}},n.findIndex=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=n.length,u=-1;++u<e;)if(t(n[u]))return u;return-1},n.findLast=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=n.length;0<=--e;)if(t(n[e]))return n[e]},n.findLastIndex=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=n.length;0<=--e;)if(t(n[e]))return e;return-1},n.flatten=function n(r,t){for(var e=void 0===t?[]:t,u=0;u<r.length;u++)g(r[u])?n(r[u],e):e.push(r[u]);return e},n.flip=function(n){return e=n,function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];if(1===r.length)return function(n){return e(n,r[0])};if(2===r.length)return e(r[1],r[0]);if(3===r.length)return e(r[1],r[0],r[2]);if(4===r.length)return e(r[1],r[0],r[2],r[3]);throw Error("R.flip doesn't work with arity > 4")};var e},n.forEach=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(void 0!==n){if(!g(n))return Tn(t,n);for(var e=0,u=n.length;e<u;)t(n[e]),e++;return n}},n.forEachObjIndexed=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:void 0!==n?Tn(t,n):void 0},n.forEachObjIndexedFn=Tn,n.fromPairs=function(n){var r={};return n.forEach(function(n){n=o(n,2);return r[n[0]]=n[1]}),r},n.groupBy=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e={},u=0;u<n.length;u++){var i=n[u],o=t(i);e[o]||(e[o]=[]),e[o].push(i)}return e},n.groupWith=function(i,o){var n,c,f;if(g(o))return n=l(o),1===o.length?[n]:(c=[],f=[],n.reduce(function(n,r,t){var e,u;return 0!==t&&(e=i(n,r),u=0===f.length,t=t===o.length-1,e?(u&&f.push(n),f.push(r),t&&c.push(f)):u?(c.push([n]),t&&c.push([r])):(c.push(f),t&&c.push([r]),f=[])),r},void 0),c);throw new TypeError("list.reduce is not a function")},n.gt=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n<t},n.gte=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n<=t},n.has=Wn,n.hasIn=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:void 0!==Nn(t,n)},n.hasPath=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:void 0!==F(t,n)},n.head=Z,n.identical=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:Bn(t,n)},n.identity=nn,n.ifElse=Rn,n.inc=function(n){return n+1},n.includes=k,n.indexBy=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if("string"==typeof t){for(var e=t,u=n,i={},o=0;o<u.length;o++){var c=u[o];i[F(e,c)]=c}return i}for(var f={},a=0;a<n.length;a++){var l=n[a];f[t(l)]=l}return f},n.indexOf=function(r,n){return 1===arguments.length?function(n){return P(r,n)}:P(r,n)},n.init=function(n){return"string"==typeof n?n.slice(0,-1):n.length?qn(n,0,-1):[]},n.innerJoin=Un,n.innerJoinFn=Cn,n.insert=Ln,n.insertAll=Mn,n.insertAllFn=zn,n.insertFn=Dn,n.intersection=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:T(function(n){return k(n,t)},n)},n.intersperse=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=-1,u=n.length,i=[];++e<u;)e===u-1?i.push(n[e]):i.push(n[e],t);return i},n.is=_n,n.isEmpty=Jn,n.isNil=function(n){return null==n},n.isNotEmpty=function(n){return!Jn(n)},n.isNotNil=function(n){return null!=n},n.join=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n.join(t)},n.juxt=function(e){return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return e.map(function(n){return n.apply(void 0,r)})}},n.keys=function(n){return Object.keys(n)},n.last=function(n){return"string"==typeof n?n[n.length-1]||"":n[n.length-1]},n.lastIndexOf=function(r,n){return 1===arguments.length?function(n){return ln(r,n)}:ln(r,n)},n.length=function(n){return g(n)||"string"==typeof n?n.length:NaN},n.lens=r,n.lensIndex=function(n){return r(Hn(n),On(n))},n.lensPath=function(n){return r(F(n),G(n))},n.lensProp=function(n){return r(I(n),J(n))},n.lt=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t<n},n.lte=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t<=n},n.map=E,n.mapArray=O,n.mapObjIndexed=fn,n.mapObject=A,n.match=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:null===(n=n.match(t))?[]:n},n.mathMod=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:d(t)&&d(n)&&1<=n?(t%n+n)%n:NaN},n.max=an,n.maxBy=Gn,n.maxByFn=$n,n.mean=Qn,n.median=function(n){var r,t=n.length;return 0===t?NaN:(r=(t-(t=2-t%2))/2,Qn(Array.prototype.slice.call(n,0).sort(function(n,r){return n===r?0:n<r?-1:1}).slice(r,r+t)))},n.merge=W,n.mergeAll=function(n){var r={};return E(function(n){r=W(r,n)},n),r},n.mergeDeepLeft=function(n,r){return B(r,n)},n.mergeDeepRight=B,n.mergeLeft=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:W(n,t)},n.mergeRight=W,n.mergeWith=Xn,n.mergeWithFn=Vn,n.min=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n<t?n:t},n.minBy=Zn,n.minByFn=Yn,n.modify=nr,n.modifyPath=tr,n.modifyPathFn=rr,n.modulo=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t%n},n.move=er,n.multiply=ur,n.negate=function(n){return-n},n.none=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=0;e<n.length;e++)if(t(n[e]))return!1;return!0},n.not=function(n){return!n},n.nth=Hn,n.objOf=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:c({},t,n)},n.of=function(n){return[n]},n.omit=mn,n.on=function t(e,u,r,n){return 3===arguments.length?function(n){return t(e,u,r,n)}:2===arguments.length?function(n,r){return t(e,u,n,r)}:e(u(r),u(n))},n.once=function(n,r){return 1===arguments.length?p(ir(n,r)):ir(n,r)},n.or=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t||n},n.over=cr,n.partial=fr,n.partialObject=function(r,t){return function(n){return r(B(n,t))}},n.partition=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:(g(n)?lr:ar)(t,n)},n.partitionArray=lr,n.partitionObject=ar,n.path=F,n.pathEq=hr,n.pathFn=bn,n.pathOr=sr,n.pathSatisfies=gr,n.pathSatisfiesFn=pr,n.paths=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:t.map(function(n){return F(n,e)})},n.pick=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(null!=n){for(var e=m(t,","),u={},i=0;i<e.length;)e[i]in n&&(u[e[i]]=n[e[i]]),i++;return u}},n.pickAll=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(null!=n){for(var e=m(t,","),u={},i=0;i<e.length;)u[e[i]]=e[i]in n?n[e[i]]:void 0,i++;return u}},n.pickBy=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:Object.keys(e).reduce(function(n,r){return t(e[r],r,e)&&(n[r]=e[r]),n},{})},n.pipe=Y,n.pipeWith=en,n.pluck=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=[],E(function(n){void 0!==n[t]&&e.push(n[t])},n),e)},n.prepend=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:[t].concat("string"==typeof n?n.split(""):n)},n.product=vr,n.prop=I,n.propEq=yr,n.propFn=Nn,n.propIs=dr,n.propOr=mr,n.propSatisfies=br,n.props=function r(t,e){if(1===arguments.length)return function(n){return r(t,n)};if(g(t))return O(function(n){return e[n]},t);throw Error("propsToPick is not a list")},n.range=wr,n.reduce=w,n.reduceBy=Or,n.reduceByFn=jr,n.reduceFn=V,n.reduceStopper=function(n){return new Q(n)},n.reject=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:T(function(n){return!t(n)},n)},n.removeIndex=wn,n.repeat=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:Array(n).fill(t)},n.replace=Ar,n.reverse=rn,n.set=Er,n.slice=Nr,n.sort=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:l(n).sort(t)},n.sortBy=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:l(n).sort(function(n,r){return n=t(n),r=t(r),n===r?0:n<r?-1:1})},n.sortWith=function r(c,n){return 1===arguments.length?function(n){return r(c,n)}:!1===Array.isArray(n)?[]:((n=n.slice()).sort(function(n,r){for(var t=n,e=r,u=c,i=0,o=0;0===i&&o<u.length;)i=u[o](t,e),o+=1;return i}),n)},n.split=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:n.split(t)},n.splitAt=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};var e,u,i;if(n)return g(n)||"string"==typeof n?(u=n.length+t<0?0:n.length+t,u=(e=(i=t)<0)&&"Function"===x(u)?u():u,i=e||"Function"!==x(i)?i:i(),[R(e=e?u:i,n),j(e,n)]):[[],[]];throw new TypeError("Cannot read property 'slice' of ".concat(n))},n.splitEvery=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(t<1)throw Error("First argument to splitEvery must be a positive integer");for(var e=[],u=0;u<n.length;)e.push(n.slice(u,u+=t));return e},n.splitWhen=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(!n)throw new TypeError("Cannot read property 'length' of ".concat(n));for(var e=[],u=[],i=!1,o=-1;o++<n.length-1;)i?u.push(n[o]):t(n[o])?(u.push(n[o]),i=!0):e.push(n[o]);return[e,u]},n.startsWith=function r(t,e){var u;return 1===arguments.length?function(n){return r(t,n)}:"string"==typeof e?e.startsWith(t):!!g(t)&&(u=!0,t.filter(function(n,r){return!!u&&((n=S(n,e[r]))||(u=!1),n)}).length===t.length)},n.subtract=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t-n},n.sum=Kn,n.swap=xr,n.symmetricDifference=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:un(T(function(n){return!k(n,e)},t),T(function(n){return!k(n,t)},e))},n.tail=tn,n.take=R,n.takeLast=function r(t,n){var e,u;return 1===arguments.length?function(n){return r(t,n)}:(e=n.length,t<0?n.slice():(u=e<t?e:t,"string"==typeof n?n.slice(e-u):qn(n,u=e-u,e)))},n.takeLastWhile=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(0===n.length)return n;for(var e=[],u=n.length;u;){var i=n[--u];if(!t(i))break;e.push(i)}return g(n)?e.reverse():e.reverse().join("")},n.takeWhile=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};var e=g(n);if(!e&&"string"!=typeof n)throw Error("`iterable` is neither list nor a string");for(var u=[],i=0;i<n.length;){var o=n[i++];if(!t(o))break;u.push(o)}return e?u:u.join("")},n.tap=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:(t(n),n)},n.test=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if("string"==typeof t)throw new TypeError('R.test requires a value of type RegExp as its first argument; received "'.concat(t,'"'));return-1!=n.search(t)},n.times=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};if(!d(n)||n<0)throw new RangeError("n must be an integer");return E(t,wr(0,n))},n.toLower=function(n){return n.toLowerCase()},n.toPairs=function(n){return Object.entries(n)},n.toString=function(n){return""+n},n.toUpper=function(n){return n.toUpperCase()},n.transpose=function(n){return n.reduce(function(t,n){return n.forEach(function(n,r){return g(t[r])?t[r].push(n):t.push([n])}),t},[])},n.trim=function(n){return n.trim()},n.tryCatch=function(e,u){var i;if(Pr(e))return i=Pr(u),function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];try{return e.apply(void 0,r)}catch(n){return i?u.apply(void 0,[n].concat(r)):u}};throw Error("R.tryCatch | fn '".concat(e,"'"))},n.type=x,n.unapply=function(e){return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return e.call(this,r)}},n.union=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=l(t),n.forEach(function(n){k(n,t)||e.push(n)}),e)},n.uniq=vn,n.uniqBy=function r(t,n){var e;return 1===arguments.length?function(n){return r(t,n)}:(e=new gn,n.filter(function(n){return e.checkUniqueness(t(n))}))},n.uniqWith=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=-1,u=[];++e<n.length;){var i=n[e];!function(n,r,t){for(var e=!1,u=-1;++u<t.length&&!e;)n(r,t[u])&&(e=!0);return e}(t,i,u)&&u.push(i)}return u},n.unless=Sr,n.unnest=function(n){return n.reduce(function(n,r){return[].concat(h(n),Array.isArray(r)?h(r):[r])},[])},n.unwind=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:g(e[t])?O(function(n){return f(f({},e),{},c({},t,n))},e[t]):[e]},n.update=On,n.updateFn=jn,n.values=function(n){return"Object"!==x(n)?[]:Object.values(n)},n.view=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:t(kr)(n).x},n.when=Fr,n.where=function r(t,n){if(void 0===n)return function(n){return r(t,n)};var e,u,i=!0;for(e in t)i&&(u=t[e](n[e]),i)&&!1===u&&(i=!1);return i},n.whereAny=function r(t,n){if(void 0===n)return function(n){return r(t,n)};for(var e in t)if(t[e](n[e]))return!0;return!1},n.whereEq=function r(t,e){var n;return 1===arguments.length?function(n){return r(t,n)}:(n=T(function(n,r){return S(n,e[r])},t),Object.keys(n).length===Object.keys(t).length)},n.without=function r(t,n){return void 0===n?function(n){return r(t,n)}:w(function(n,r){return-1<P(r,t)?n:n.concat(r)},[],n)},n.xor=function r(t,n){return 1===arguments.length?function(n){return r(t,n)}:!!t&&!n||!!n&&!t},n.zip=function r(t,n){if(1===arguments.length)return function(n){return r(t,n)};for(var e=[],u=Math.min(t.length,n.length),i=0;i<u;i++)e[i]=[t[i],n[i]];return e},n.zipObj=function r(t,e){return 1===arguments.length?function(n){return r(t,n)}:R(e.length,t).reduce(function(n,r,t){return n[r]=e[t],n},{})},n.zipWith=Ir}); diff --git a/docs/README.md b/docs/README.md index 3771adbd4..c330a0e76 100644 --- a/docs/README.md +++ b/docs/README.md @@ -106,59 +106,57 @@ One of the main issues with `Ramda` is the slow process of releasing new version <details> <summary> - Click to see the full list of 43 Ramda methods not implemented in Rambda and their status. + Click to see the full list of 46 Ramda methods not implemented in Rambda and their status. </summary> -- into -- invert +- construct - Using classes is not very functional programming oriented. +- constructN - same as above +- into - no support for transducer as it is overly complex to implement, understand and read. +- invert - overly complicated and limited use case - invertObj - invoker -- keysIn +- keysIn - we shouldn't encourage extending object with `.prototype` - lift - liftN -- mapAccum +- mapAccum - `Ramda` example doesn't looks convincing - mapAccumRight -- memoizeWith -- mergeDeepWith +- memoizeWith - hard to imagine its usage in context of `R.pipe`/`R.compose` +- mergeDeepWith - limited use case - mergeDeepWithKey - mergeWithKey -- nAry -- nthArg -- o -- otherwise -- pair -- partialRight -- pathSatisfies +- nAry - hard to argument about and hard to create meaningful TypeScript definitions +- nthArg - limited use case +- o - enough TypeScript issues with `R.pipe`/`R.compose` to add more composition methods +- otherwise - naming is confusing +- pair - `left-pad` types of debacles happens partially because of such methods that should not be hidden, bur rather part of your code base even if they need to exist. +- partialRight - I dislike `R.partial`, so I don't want to add more methods that are based on it - pipeWith -- project +- project - naming is confusing, but also limited use case - promap -- reduceRight -- reduceWhile +- reduceRight - I find `right/left` methods confusing so I added them only where it makes sense. +- reduceWhile - functions with 4 inputs - I think that even 3 is too much - reduced -- remove -- scan +- remove - nice name but it is too generic. Also, `Rambdax` has such method and there it works very differently +- scan - hard to explain - sequence - splitWhenever - symmetricDifferenceWith - andThen - toPairsIn +- transduce - currently is out of focus +- traverse - same as above - unary - uncurryN -- unfold -- unionWith +- unfold - similar to `R.scan` and I find that it doesn't help with readability +- unionWith - why it has its usage, I want to limit number of methods that accept more than 2 arguments - until -- useWith +- useWith - hard to explain - valuesIn -- xprod +- xprod - limited use case - thunkify -- default - - Most of above methods are in progress to be added to **Rambda**. The following methods are not going to be added: - __ - placeholder method allows user to further customize the method call. While, it seems useful initially, the price is too high in terms of complexity for TypeScript definitions. If it is not easy exressable in TypeScript, it is not worth it as **Rambda** is a TypeScript first library. -- construct - Using classes is not very functional programming oriented. -- constructN - same as above -- transduce - currently is out of focus -- traverse - same as above + +The following methods are not going to be added(reason for exclusion is provided as a comment): </details> [](#-missing-ramda-methods) @@ -216,7 +214,7 @@ There are methods which are benchmarked only with `Ramda` and `Rambda`(i.e. no ` Note that some of these methods, are called with and without curring. This is done in order to give more detailed performance feedback. -The benchmarks results are produced from latest versions of *Rambda*, *Lodash*(4.17.21) and *Ramda*(0.30.0). +The benchmarks results are produced from latest versions of *Rambda*, *Lodash*(4.17.21) and *Ramda*(0.30.1). </summary> @@ -5853,7 +5851,7 @@ describe('R.hasPath', () => { head(str: string): string ``` -It returns the first element of list or string `input`. +It returns the first element of list or string `input`. It returns `undefined` if array has length of 0. <a title="redirect to Rambda Repl site" href="https://rambda.now.sh?const%20result%20%3D%20%5B%0A%20%20R.head(%5B1%2C%202%2C%203%5D)%2C%0A%20%20R.head('foo')%20%0A%5D%0A%2F%2F%20%3D%3E%20%5B1%2C%20'f'%5D">Try this <strong>R.head</strong> example in Rambda REPL</a> @@ -5864,6 +5862,7 @@ It returns the first element of list or string `input`. ```typescript head(str: string): string; head(str: ''): undefined; +head(list: readonly[]): undefined; head<T>(list: never[]): undefined; head<T extends unknown[]>(array: T): FirstArrayElement<T> head<T extends readonly unknown[]>(array: T): FirstArrayElement<T> @@ -5937,9 +5936,9 @@ describe('R.head', () => { it('empty array', () => { const list = [] as const head(emptyList) // $ExpectType undefined - head(list) // $ExpectType never + head(list) // $ExpectType undefined last(emptyList) // $ExpectType undefined - last(list) // $ExpectType never + last(list) // $ExpectType undefined }) it('mixed', () => { @@ -6595,12 +6594,6 @@ export function isEmpty(input){ return false if (!input) return true - if (type(input.isEmpty) === 'Function') { - return input.isEmpty(); - } else if (input.isEmpty) { - return !!input.isEmpty; - } - if (inputType === 'Object'){ return Object.keys(input).length === 0 } @@ -6635,10 +6628,6 @@ test('happy', () => { expect(isEmpty(0)).toBeFalse() expect(isEmpty(NaN)).toBeFalse() expect(isEmpty([ '' ])).toBeFalse() - expect(isEmpty({ isEmpty: false})).toBeFalse() - expect(isEmpty({ isEmpty: () => false})).toBeFalse() - expect(isEmpty({ isEmpty: true})).toBeTrue() - expect(isEmpty({ isEmpty: () => true})).toBeTrue() }) ``` @@ -6716,6 +6705,27 @@ test('happy', () => { [](#isNil) +### isNotEmpty + +```typescript + +isNotEmpty<T>(value: T[]): value is NonEmptyArray<T> +``` + +<details> + +<summary>All TypeScript definitions</summary> + +```typescript +isNotEmpty<T>(value: T[]): value is NonEmptyArray<T>; +isNotEmpty<T>(value: readonly T[]): value is ReadonlyNonEmptyArray<T>; +isNotEmpty(value: any): boolean; +``` + +</details> + +[](#isNotEmpty) + ### isNotNil <a title="redirect to Rambda Repl site" href="https://rambda.now.sh?const%20result%20%3D%20%5B%0A%20%20R.isNotNil(null)%2C%0A%20%20R.isNotNil(undefined)%2C%0A%20%20R.isNotNil(%5B%5D)%2C%0A%5D%0A%2F%2F%20%3D%3E%20%5Bfalse%2C%20false%2C%20true%5D">Try this <strong>R.isNotNil</strong> example in Rambda REPL</a> @@ -6930,7 +6940,7 @@ test('happy', () => { last(str: ''): undefined ``` -It returns the last element of `input`, as the `input` can be either a string or an array. +It returns the last element of `input`, as the `input` can be either a string or an array. It returns `undefined` if array has length of 0. <a title="redirect to Rambda Repl site" href="https://rambda.now.sh?const%20result%20%3D%20%5B%0A%20%20R.last(%5B1%2C%202%2C%203%5D)%2C%0A%20%20R.last('foo')%2C%0A%5D%0A%2F%2F%20%3D%3E%20%5B3%2C%20'o'%5D">Try this <strong>R.last</strong> example in Rambda REPL</a> @@ -6941,9 +6951,11 @@ It returns the last element of `input`, as the `input` can be either a string or ```typescript last(str: ''): undefined; last(str: string): string; +last(list: readonly[]): undefined; last(list: never[]): undefined; -last<T extends unknown[]>(array: T): LastArrayElement<T> -last<T extends readonly unknown[]>(array: T): LastArrayElement<T> +last<T extends unknown[]>(array: T): LastArrayElement<T>; +last<T extends readonly unknown[]>(array: T): LastArrayElement<T>; +last(str: string): string | undefined; ``` </details> @@ -7251,7 +7263,7 @@ export function lens(getter, setter){ <summary><strong>TypeScript</strong> test</summary> ```typescript -import {lens, assoc, lensProp, view, lensIndex, lensPath} from 'rambda' +import {lens, assoc, lensProp, view, lensIndex, over, lensPath} from 'ramda' interface Input { foo: string, @@ -7275,6 +7287,10 @@ describe('R.lensProp', () => { const result = view<Input, string>(lensProp('foo'), testObject) result // $ExpectType string }) + it('issue 740', () => { + // @ts-expect-error + over(lensProp('x'), (n) => String(n), {x: 1}) + }) }) describe('R.lensIndex', () => { @@ -8828,11 +8844,7 @@ It returns the lesser value between `x` and `y` according to `compareFn` functio ```typescript -modify<T extends object, K extends keyof T, P>( - prop: K, - fn: (a: T[K]) => P, - obj: T, -): Omit<T, K> & Record<K, P> +modify<K extends PropertyKey, T>(prop: K, fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U ``` <a title="redirect to Rambda Repl site" href="https://rambda.now.sh?const%20result%20%3D%20R.modify()%0A%2F%2F%20%3D%3E">Try this <strong>R.modify</strong> example in Rambda REPL</a> @@ -8842,15 +8854,12 @@ modify<T extends object, K extends keyof T, P>( <summary>All TypeScript definitions</summary> ```typescript -modify<T extends object, K extends keyof T, P>( - prop: K, - fn: (a: T[K]) => P, - obj: T, -): Omit<T, K> & Record<K, P>; -modify<K extends string, A, P>( - prop: K, - fn: (a: A) => P, -): <T extends Record<K, A>>(target: T) => Omit<T, K> & Record<K, P>; +modify<K extends PropertyKey, T>(prop: K, fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; +modify<U, K extends keyof U>(prop: K, fn: (value: U[K]) => U[K], object: U): U; +modify<K extends PropertyKey>(prop: K): { + <T>(fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; + <T, U extends Record<K, T>>(fn: (value: T) => T, object: U): U; +}; ``` </details> @@ -8991,23 +9000,52 @@ describe('brute force', () => { <summary><strong>TypeScript</strong> test</summary> ```typescript -import {modify, add} from 'rambda' -const person = {name: 'James', age: 20} +import { add, identity, map, modify, pipe, toUpper } from 'rambda'; + +type Obj = { + foo: string; + bar: number; +}; describe('R.modify', () => { - it('happy', () => { - const {age} = modify('age', add(1), person) - const {age: ageAsString} = modify('age', String, person) + it('ramda tests', () => { + const result1 = modify('foo', toUpper, {} as Obj); + result1; // $ExpectType Obj - age // $ExpectType number - ageAsString // $ExpectType string - }) - it('curried', () => { - const {age} = modify('age', add(1))(person) + const result2 = modify('bar', add(1), {} as Obj); + result2; // $ExpectType Obj - age // $ExpectType number - }) -}) + const result3 = modify('foo', toUpper)({} as Obj); + result3; // $ExpectType Obj + + const result4 = modify('bar', add(1))({} as Obj); + result4; // $ExpectType Obj + + const result5 = modify('foo')(toUpper)({} as Obj); + result5; // $ExpectType Obj + + const result6 = modify('bar')(add(1))({} as Obj); + result6; // $ExpectType Obj + + const result7 = modify('foo')(toUpper, {} as Obj); + result7; // $ExpectType Obj + + const result8 = modify('bar')(add(1), {} as Obj); + result8; // $ExpectType Obj + + const result9 = modify('foo', identity, {} as Obj); + result9; // $ExpectType Obj + + // @ts-expect-error + modify('foo', add(1), {} as Obj); + // @ts-expect-error + modify('bar', toUpper, {} as Obj); + + const f = pipe(map<Obj, Obj>(modify('foo', toUpper))); + + f([] as Obj[]); // $ExpectType Obj[] + }); +}); ``` </details> @@ -11898,7 +11936,7 @@ describe('R.propEq', () => { const myObject: MyType = {} const valueToFind = '1111' // @ts-expect-error - propEq(valueToFind, 'optional', myObject) + let a = propEq(valueToFind, 'optional', myObject) }) it('imported from @types/ramda', () => { diff --git a/immutable.d.ts b/immutable.d.ts index b42c756d3..47c693927 100644 --- a/immutable.d.ts +++ b/immutable.d.ts @@ -1,5 +1,8 @@ export type RambdaTypes = "Object" | "Number" | "Boolean" | "String" | "Null" | "Array" | "RegExp" | "NaN" | "Function" | "Undefined" | "Async" | "Promise" | "Symbol" | "Set" | "Error" | "Map" | "WeakMap" | "Generator" | "GeneratorFunction" | "BigInt" | "ArrayBuffer" | "Date" +export type NonEmptyArray<T> = readonly [T, ...readonly T[]]; +export type ReadonlyNonEmptyArray<T> = readonly [T, ...readonly T[]]; + type LastArrayElement<ValueType extends readonly unknown[]> = ValueType extends readonly [infer ElementType] ? ElementType @@ -25,7 +28,7 @@ type Ord = number | string | boolean | Date; type Ordering = -1 | 0 | 1; type Path = string | readonly (number | string)[]; export type RamdaPath = readonly (number | string)[]; -type Predicate<T> = (x: T) => boolean; +export type Predicate<T> = (x: T) => boolean; export type IndexedPredicate<T> = (x: T, i: number) => boolean; export type ObjectPredicate<T> = (x: T, prop: string, inputObj: Dictionary<T>) => boolean; type CondPair<T extends readonly any[], R> = readonly [(...val: T) => boolean, (...val: T) => R] @@ -89,10 +92,6 @@ type EvolveValue<V, E> = ? EvolveNestedValue<V, E> : never; -interface AssocPartialOne<K extends keyof any> { - <T>(val: T): <U>(obj: U) => Record<K, T> & U; - <T, U>(val: T, obj: U): Record<K, T> & U; -} type AtLeastOneFunctionsFlowFromRightToLeft<TArgs extends readonly any[], TResult> = | readonly [(...args: any) => TResult, ...ReadonlyArray<(args: any) => any>, (...args: TArgs) => any] | readonly [(...args: TArgs) => TResult]; @@ -113,7 +112,7 @@ type RegExpReplacerFn = | ((m: string, p1: string, p2: string, p3: string, p4: string, p5: string, p6: string, p7: string, p8: string, p9: string, offset: number, s: string, groups?: Record<string, string>) => string) type RegExpReplacer = string | RegExpReplacerFn -/** `TSuper`, when `TSuper` is a supertype of `T`; otherwise `never`. */ +/** `First`, when `First` is a supertype of `Second`; otherwise `never`. */ type IsFirstSubtypeOfSecond<First, Second> = (First extends Second ? Second : never); // RAMBDAX INTERFACES @@ -121,9 +120,9 @@ type IsFirstSubtypeOfSecond<First, Second> = (First extends Second ? Second : ne type Func<T> = (input: any) => T; type VoidInputFunc<T> = () => T; type Fn<In, Out> = (x: In) => Out; -type SortObjectPredicate<T> = (aProp: string, bProp: string, aValue: T, bValue: T) => number; +export type SortObjectPredicate<T> = (aProp: string, bProp: string, aValue: T, bValue: T) => number; -type IdentityFunction<T> = (x: T) => T; +export type IdentityFunction<T> = (x: T) => T; interface Filter<T> { (list: readonly T[]): readonly T[]; @@ -156,9 +155,9 @@ export interface IsValidAsync { readonly schema: Schema | SchemaAsync; } -type ProduceRules<Output,K extends keyof Output, Input> = { readonly [P in K]: (input: Input) => Output[P]; +export type ProduceRules<Output,K extends keyof Output, Input> = { readonly [P in K]: (input: Input) => Output[P]; }; -type ProduceAsyncRules<Output,K extends keyof Output, Input> = { readonly [P in K]: (input: Input) => Promise<Output[P]>; +export type ProduceAsyncRules<Output,K extends keyof Output, Input> = { readonly [P in K]: (input: Input) => Promise<Output[P]>; }; type ProduceAsyncRule<Input> = (input: Input) => Promise<any>; type Async<T> = (x: any) => Promise<T>; @@ -168,10 +167,10 @@ type AsyncPredicate<T> = (x: T) => Promise<boolean>; type AsyncPredicateIndexed<T> = (x: T, i: number) => Promise<boolean>; type AsyncWithProp<T> = (x: any, prop?: string) => Promise<T>; -type ApplyDiffUpdate = {readonly op:'update', readonly path: string, readonly value: any}; -type ApplyDiffAdd = {readonly op:'add', readonly path: string, readonly value: any}; -type ApplyDiffRemove = {readonly op:'remove', readonly path: string}; -type ApplyDiffRule = ApplyDiffUpdate | ApplyDiffAdd | ApplyDiffRemove; +export type ApplyDiffUpdate = {readonly op:'update', readonly path: string, readonly value: any}; +export type ApplyDiffAdd = {readonly op:'add', readonly path: string, readonly value: any}; +export type ApplyDiffRemove = {readonly op:'remove', readonly path: string}; +export type ApplyDiffRule = ApplyDiffUpdate | ApplyDiffAdd | ApplyDiffRemove; export function F(): boolean; @@ -279,9 +278,14 @@ export function ascend<T>(fn: (obj: T) => Ord): (a: T, b: T) => Ordering; /** * It makes a shallow clone of `obj` with setting or overriding the property `prop` with `newValue`. */ -export function assoc<T, U, K extends string>(prop: K, val: T, obj: U): Record<K, T> & Omit<U, K>; -export function assoc<T, K extends string>(prop: K, val: T): <U>(obj: U) => Record<K, T> & Omit<U, K>; -export function assoc<K extends string>(prop: K): AssocPartialOne<K>; +export function assoc<K extends PropertyKey>(prop: K): { + <T>(val: T): <U extends Record<K, T>>(obj: U) => U; + <U extends Record<K, T>, T>(val: T, obj: U): U; +}; +export function assoc<T, K extends PropertyKey>(prop: K, val: T): { + <U>(obj: U): U extends Record<K, any> ? U[K] extends T ? U : Record<K, T> & Omit<U, K> : U & Record<K, T>; +}; +export function assoc<U, K extends keyof U, T extends U[K]>(prop: K, val: T, obj: U): U; /** * It makes a shallow clone of `obj` with setting or overriding with `newValue` the property found with `path`. @@ -511,8 +515,8 @@ export function differenceWith<T1, T2>( /** * It returns a new object that does not contain property `prop`. */ -export function dissoc<T extends object, K extends keyof T>(prop: K, obj: T): Omit<T, K>; -export function dissoc<K extends string | number>(prop: K): <T extends object>(obj: T) => Omit<T, K>; +export function dissoc<K extends PropertyKey>(prop: K): <U extends { readonly [P in K]?: any}>(obj: string extends keyof U ? U : undefined extends U[K] ? U : never) => U; +export function dissoc<U, K extends keyof U>(prop: string extends keyof U ? K : undefined extends U[K] ? K : never, obj: U): U; export function dissocPath<T>(path: Path, obj: any): T; export function dissocPath<T>(path: Path): (obj: any) => T; @@ -722,10 +726,11 @@ export function hasPath<T>( ): (input: object) => boolean; /** - * It returns the first element of list or string `input`. + * It returns the first element of list or string `input`. It returns `undefined` if array has length of 0. */ export function head(str: string): string; export function head(str: ''): undefined; +export function head(list: readonly[]): undefined; export function head<T>(list: readonly never[]): undefined; export function head<T extends readonly unknown[]>(array: T): FirstArrayElement<T> export function head<T extends readonly unknown[]>(array: T): FirstArrayElement<T> @@ -848,6 +853,10 @@ export function isEmpty<T>(x: T): boolean; */ export function isNil(x: any): x is null | undefined; +export function isNotEmpty<T>(value: readonly T[]): value is NonEmptyArray<T>; +export function isNotEmpty<T>(value: readonly T[]): value is ReadonlyNonEmptyArray<T>; +export function isNotEmpty(value: any): boolean; + export function isNotNil<T>(value: T): value is NonNullable<T>; /** @@ -873,13 +882,15 @@ export function keys<T extends object>(x: T): readonly (keyof T & string)[]; export function keys<T>(x: T): readonly string[]; /** - * It returns the last element of `input`, as the `input` can be either a string or an array. + * It returns the last element of `input`, as the `input` can be either a string or an array. It returns `undefined` if array has length of 0. */ export function last(str: ''): undefined; export function last(str: string): string; +export function last(list: readonly[]): undefined; export function last(list: readonly never[]): undefined; -export function last<T extends readonly unknown[]>(array: T): LastArrayElement<T> -export function last<T extends readonly unknown[]>(array: T): LastArrayElement<T> +export function last<T extends readonly unknown[]>(array: T): LastArrayElement<T>; +export function last<T extends readonly unknown[]>(array: T): LastArrayElement<T>; +export function last(str: string): string | undefined; /** * It returns the last index of `target` in `list` array. @@ -1075,15 +1086,12 @@ export function minBy<T>(compareFn: (input: T) => Ord, x: T, y: T): T; export function minBy<T>(compareFn: (input: T) => Ord, x: T): (y: T) => T; export function minBy<T>(compareFn: (input: T) => Ord): (x: T) => (y: T) => T; -export function modify<T extends object, K extends keyof T, P>( - prop: K, - fn: (a: T[K]) => P, - obj: T, -): Omit<T, K> & Record<K, P>; -export function modify<K extends string, A, P>( - prop: K, - fn: (a: A) => P, -): <T extends Record<K, A>>(target: T) => Omit<T, K> & Record<K, P>; +export function modify<K extends PropertyKey, T>(prop: K, fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; +export function modify<U, K extends keyof U>(prop: K, fn: (value: U[K]) => U[K], object: U): U; +export function modify<K extends PropertyKey>(prop: K): { + <T>(fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; + <T, U extends Record<K, T>>(fn: (value: T) => T, object: U): U; +}; /** * It changes a property of object on the base of provided path and transformer function. diff --git a/index.d.ts b/index.d.ts index 147079553..4ee5d6814 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,5 +1,8 @@ export type RambdaTypes = "Object" | "Number" | "Boolean" | "String" | "Null" | "Array" | "RegExp" | "NaN" | "Function" | "Undefined" | "Async" | "Promise" | "Symbol" | "Set" | "Error" | "Map" | "WeakMap" | "Generator" | "GeneratorFunction" | "BigInt" | "ArrayBuffer" | "Date" +export type NonEmptyArray<T> = [T, ...T[]]; +export type ReadonlyNonEmptyArray<T> = readonly [T, ...T[]]; + type LastArrayElement<ValueType extends readonly unknown[]> = ValueType extends readonly [infer ElementType] ? ElementType @@ -25,7 +28,7 @@ type Ord = number | string | boolean | Date; type Ordering = -1 | 0 | 1; type Path = string | (number | string)[]; export type RamdaPath = (number | string)[]; -type Predicate<T> = (x: T) => boolean; +export type Predicate<T> = (x: T) => boolean; export type IndexedPredicate<T> = (x: T, i: number) => boolean; export type ObjectPredicate<T> = (x: T, prop: string, inputObj: Dictionary<T>) => boolean; type CondPair<T extends any[], R> = [(...val: T) => boolean, (...val: T) => R] @@ -89,10 +92,6 @@ type EvolveValue<V, E> = ? EvolveNestedValue<V, E> : never; -interface AssocPartialOne<K extends keyof any> { - <T>(val: T): <U>(obj: U) => Record<K, T> & U; - <T, U>(val: T, obj: U): Record<K, T> & U; -} type AtLeastOneFunctionsFlowFromRightToLeft<TArgs extends any[], TResult> = | [(...args: any) => TResult, ...Array<(args: any) => any>, (...args: TArgs) => any] | [(...args: TArgs) => TResult]; @@ -113,7 +112,7 @@ type RegExpReplacerFn = | ((m: string, p1: string, p2: string, p3: string, p4: string, p5: string, p6: string, p7: string, p8: string, p9: string, offset: number, s: string, groups?: Record<string, string>) => string) type RegExpReplacer = string | RegExpReplacerFn -/** `TSuper`, when `TSuper` is a supertype of `T`; otherwise `never`. */ +/** `First`, when `First` is a supertype of `Second`; otherwise `never`. */ type IsFirstSubtypeOfSecond<First, Second> = (First extends Second ? Second : never); // RAMBDAX INTERFACES @@ -121,9 +120,9 @@ type IsFirstSubtypeOfSecond<First, Second> = (First extends Second ? Second : ne type Func<T> = (input: any) => T; type VoidInputFunc<T> = () => T; type Fn<In, Out> = (x: In) => Out; -type SortObjectPredicate<T> = (aProp: string, bProp: string, aValue: T, bValue: T) => number; +export type SortObjectPredicate<T> = (aProp: string, bProp: string, aValue: T, bValue: T) => number; -type IdentityFunction<T> = (x: T) => T; +export type IdentityFunction<T> = (x: T) => T; interface Filter<T> { (list: T[]): T[]; @@ -156,9 +155,9 @@ export interface IsValidAsync { schema: Schema | SchemaAsync; } -type ProduceRules<Output,K extends keyof Output, Input> = { [P in K]: (input: Input) => Output[P]; +export type ProduceRules<Output,K extends keyof Output, Input> = { [P in K]: (input: Input) => Output[P]; }; -type ProduceAsyncRules<Output,K extends keyof Output, Input> = { [P in K]: (input: Input) => Promise<Output[P]>; +export type ProduceAsyncRules<Output,K extends keyof Output, Input> = { [P in K]: (input: Input) => Promise<Output[P]>; }; type ProduceAsyncRule<Input> = (input: Input) => Promise<any>; type Async<T> = (x: any) => Promise<T>; @@ -168,10 +167,10 @@ type AsyncPredicate<T> = (x: T) => Promise<boolean>; type AsyncPredicateIndexed<T> = (x: T, i: number) => Promise<boolean>; type AsyncWithProp<T> = (x: any, prop?: string) => Promise<T>; -type ApplyDiffUpdate = {op:'update', path: string, value: any}; -type ApplyDiffAdd = {op:'add', path: string, value: any}; -type ApplyDiffRemove = {op:'remove', path: string}; -type ApplyDiffRule = ApplyDiffUpdate | ApplyDiffAdd | ApplyDiffRemove; +export type ApplyDiffUpdate = {op:'update', path: string, value: any}; +export type ApplyDiffAdd = {op:'add', path: string, value: any}; +export type ApplyDiffRemove = {op:'remove', path: string}; +export type ApplyDiffRule = ApplyDiffUpdate | ApplyDiffAdd | ApplyDiffRemove; export function F(): boolean; @@ -279,9 +278,14 @@ export function ascend<T>(fn: (obj: T) => Ord): (a: T, b: T) => Ordering; /** * It makes a shallow clone of `obj` with setting or overriding the property `prop` with `newValue`. */ -export function assoc<T, U, K extends string>(prop: K, val: T, obj: U): Record<K, T> & Omit<U, K>; -export function assoc<T, K extends string>(prop: K, val: T): <U>(obj: U) => Record<K, T> & Omit<U, K>; -export function assoc<K extends string>(prop: K): AssocPartialOne<K>; +export function assoc<K extends PropertyKey>(prop: K): { + <T>(val: T): <U extends Record<K, T>>(obj: U) => U; + <U extends Record<K, T>, T>(val: T, obj: U): U; +}; +export function assoc<T, K extends PropertyKey>(prop: K, val: T): { + <U>(obj: U): U extends Record<K, any> ? U[K] extends T ? U : Record<K, T> & Omit<U, K> : U & Record<K, T>; +}; +export function assoc<U, K extends keyof U, T extends U[K]>(prop: K, val: T, obj: U): U; /** * It makes a shallow clone of `obj` with setting or overriding with `newValue` the property found with `path`. @@ -511,8 +515,8 @@ export function differenceWith<T1, T2>( /** * It returns a new object that does not contain property `prop`. */ -export function dissoc<T extends object, K extends keyof T>(prop: K, obj: T): Omit<T, K>; -export function dissoc<K extends string | number>(prop: K): <T extends object>(obj: T) => Omit<T, K>; +export function dissoc<K extends PropertyKey>(prop: K): <U extends { [P in K]?: any}>(obj: string extends keyof U ? U : undefined extends U[K] ? U : never) => U; +export function dissoc<U, K extends keyof U>(prop: string extends keyof U ? K : undefined extends U[K] ? K : never, obj: U): U; export function dissocPath<T>(path: Path, obj: any): T; export function dissocPath<T>(path: Path): (obj: any) => T; @@ -722,10 +726,11 @@ export function hasPath<T>( ): (input: object) => boolean; /** - * It returns the first element of list or string `input`. + * It returns the first element of list or string `input`. It returns `undefined` if array has length of 0. */ export function head(str: string): string; export function head(str: ''): undefined; +export function head(list: readonly[]): undefined; export function head<T>(list: never[]): undefined; export function head<T extends unknown[]>(array: T): FirstArrayElement<T> export function head<T extends readonly unknown[]>(array: T): FirstArrayElement<T> @@ -848,6 +853,10 @@ export function isEmpty<T>(x: T): boolean; */ export function isNil(x: any): x is null | undefined; +export function isNotEmpty<T>(value: T[]): value is NonEmptyArray<T>; +export function isNotEmpty<T>(value: readonly T[]): value is ReadonlyNonEmptyArray<T>; +export function isNotEmpty(value: any): boolean; + export function isNotNil<T>(value: T): value is NonNullable<T>; /** @@ -873,13 +882,15 @@ export function keys<T extends object>(x: T): (keyof T & string)[]; export function keys<T>(x: T): string[]; /** - * It returns the last element of `input`, as the `input` can be either a string or an array. + * It returns the last element of `input`, as the `input` can be either a string or an array. It returns `undefined` if array has length of 0. */ export function last(str: ''): undefined; export function last(str: string): string; +export function last(list: readonly[]): undefined; export function last(list: never[]): undefined; -export function last<T extends unknown[]>(array: T): LastArrayElement<T> -export function last<T extends readonly unknown[]>(array: T): LastArrayElement<T> +export function last<T extends unknown[]>(array: T): LastArrayElement<T>; +export function last<T extends readonly unknown[]>(array: T): LastArrayElement<T>; +export function last(str: string): string | undefined; /** * It returns the last index of `target` in `list` array. @@ -1075,15 +1086,12 @@ export function minBy<T>(compareFn: (input: T) => Ord, x: T, y: T): T; export function minBy<T>(compareFn: (input: T) => Ord, x: T): (y: T) => T; export function minBy<T>(compareFn: (input: T) => Ord): (x: T) => (y: T) => T; -export function modify<T extends object, K extends keyof T, P>( - prop: K, - fn: (a: T[K]) => P, - obj: T, -): Omit<T, K> & Record<K, P>; -export function modify<K extends string, A, P>( - prop: K, - fn: (a: A) => P, -): <T extends Record<K, A>>(target: T) => Omit<T, K> & Record<K, P>; +export function modify<K extends PropertyKey, T>(prop: K, fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; +export function modify<U, K extends keyof U>(prop: K, fn: (value: U[K]) => U[K], object: U): U; +export function modify<K extends PropertyKey>(prop: K): { + <T>(fn: (value: T) => T): <U extends Record<K, T>>(object: U) => U; + <T, U extends Record<K, T>>(fn: (value: T) => T, object: U): U; +}; /** * It changes a property of object on the base of provided path and transformer function. diff --git a/rambda.js b/rambda.js index e5a2b19a9..24b86fb96 100644 --- a/rambda.js +++ b/rambda.js @@ -95,6 +95,7 @@ export * from './src/intersperse.js' export * from './src/is.js' export * from './src/isEmpty.js' export * from './src/isNil.js' +export * from './src/isNotEmpty.js' export * from './src/isNotNil.js' export * from './src/join.js' export * from './src/juxt.js' @@ -219,4 +220,3 @@ export * from './src/xor.js' export * from './src/zip.js' export * from './src/zipObj.js' export * from './src/zipWith.js' - diff --git a/src/forEachObjIndexed.js b/src/forEachObjIndexed.js index 197ae60ae..afa218ec5 100644 --- a/src/forEachObjIndexed.js +++ b/src/forEachObjIndexed.js @@ -18,7 +18,6 @@ export function forEachObjIndexedFn(fn, obj){ export function forEachObjIndexed(fn, list){ if (arguments.length === 1) return _list => forEachObjIndexed(fn, _list) - if (list === undefined) return return forEachObjIndexedFn(fn, list) diff --git a/src/isEmpty.js b/src/isEmpty.js index 8182cc20c..8d14d1c70 100644 --- a/src/isEmpty.js +++ b/src/isEmpty.js @@ -6,13 +6,6 @@ export function isEmpty(input){ return false if (!input) return true - if (type(input.isEmpty) === 'Function') { - return input.isEmpty(); - } else if (input.isEmpty) { - return !!input.isEmpty; - } - - if (inputType === 'Object'){ return Object.keys(input).length === 0 } diff --git a/src/isNotEmpty.js b/src/isNotEmpty.js new file mode 100644 index 000000000..4fab0dbc6 --- /dev/null +++ b/src/isNotEmpty.js @@ -0,0 +1,5 @@ +import { isEmpty } from './isEmpty.js'; + +export function isNotEmpty(input) { + return !isEmpty(input); +}