rambda 7.2.0 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +1615 -1474
- package/dist/rambda.js +96 -82
- package/dist/rambda.mjs +95 -83
- package/dist/rambda.umd.js +1 -1
- package/immutable.d.ts +15 -5
- package/index.d.ts +15 -5
- package/package.json +17 -14
- package/src/_internals/constants.js +1 -0
- package/src/_internals/isArray.js +1 -0
- package/src/_internals/isFalsy.js +2 -2
- package/src/_internals/isInteger.js +5 -0
- package/src/_internals/isIterable.js +5 -0
- package/src/_internals/isObject.js +1 -1
- package/src/_internals/isTruthy.js +2 -2
- package/src/_internals/keys.js +1 -0
- package/src/_internals/{_objectIs.js → objectIs.js} +2 -2
- package/src/applySpec.js +3 -3
- package/src/assocPath.js +7 -7
- package/src/clone.js +2 -2
- package/src/count.js +2 -2
- package/src/dropLastWhile.js +2 -2
- package/src/dropRepeats.js +2 -2
- package/src/dropRepeatsWith.js +2 -2
- package/src/dropWhile.js +2 -2
- package/src/endsWith.js +2 -2
- package/src/equals.js +3 -3
- package/src/evolve.js +1 -1
- package/src/filter.js +2 -2
- package/src/flatten.js +2 -2
- package/src/forEach.js +6 -6
- package/src/groupWith.js +2 -2
- package/src/identical.js +2 -2
- package/src/includes.js +2 -2
- package/src/isPromise.js +1 -1
- package/src/length.js +2 -2
- package/src/map.js +7 -7
- package/src/mathMod.js +2 -2
- package/src/merge.js +1 -1
- package/src/mergeDeepRight.js +2 -1
- package/src/mergeRight.js +2 -1
- package/src/modify.js +23 -0
- package/src/modifyPath.js +2 -2
- package/src/partialObject.js +1 -11
- package/src/partition.js +2 -2
- package/src/props.js +2 -2
- package/src/reduce.js +2 -3
- package/src/splitAt.js +2 -2
- package/src/startsWith.js +2 -2
- package/src/takeLastWhile.js +2 -2
- package/src/takeWhile.js +2 -2
- package/src/times.js +2 -1
- package/src/transpose.js +2 -2
- package/src/unwind.js +4 -3
- package/src/update.js +1 -1
- package/src/where.js +1 -0
- package/src/_internals/_isArray.js +0 -1
- package/src/_internals/_isInteger.js +0 -5
- package/src/_internals/_keys.js +0 -1
package/src/flatten.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
2
|
|
|
3
3
|
export function flatten(list, input){
|
|
4
4
|
const willReturn = input === undefined ? [] : input
|
|
5
5
|
|
|
6
6
|
for (let i = 0; i < list.length; i++){
|
|
7
|
-
if (
|
|
7
|
+
if (isArray(list[ i ])){
|
|
8
8
|
flatten(list[ i ], willReturn)
|
|
9
9
|
} else {
|
|
10
10
|
willReturn.push(list[ i ])
|
package/src/forEach.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
|
+
import { keys } from './_internals/keys.js'
|
|
3
3
|
|
|
4
4
|
export function forEach(fn, list){
|
|
5
5
|
if (arguments.length === 1) return _list => forEach(fn, _list)
|
|
@@ -8,7 +8,7 @@ export function forEach(fn, list){
|
|
|
8
8
|
return
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
if (
|
|
11
|
+
if (isArray(list)){
|
|
12
12
|
let index = 0
|
|
13
13
|
const len = list.length
|
|
14
14
|
|
|
@@ -18,11 +18,11 @@ export function forEach(fn, list){
|
|
|
18
18
|
}
|
|
19
19
|
} else {
|
|
20
20
|
let index = 0
|
|
21
|
-
const
|
|
22
|
-
const len =
|
|
21
|
+
const listKeys = keys(list)
|
|
22
|
+
const len = listKeys.length
|
|
23
23
|
|
|
24
24
|
while (index < len){
|
|
25
|
-
const key =
|
|
25
|
+
const key = listKeys[ index ]
|
|
26
26
|
fn(
|
|
27
27
|
list[ key ], key, list
|
|
28
28
|
)
|
package/src/groupWith.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { _isArray } from './_internals/_isArray.js'
|
|
2
1
|
import { cloneList } from './_internals/cloneList.js'
|
|
2
|
+
import { isArray } from './_internals/isArray.js'
|
|
3
3
|
|
|
4
4
|
export function groupWith(compareFn, list){
|
|
5
|
-
if (!
|
|
5
|
+
if (!isArray(list)) throw new TypeError('list.reduce is not a function')
|
|
6
6
|
|
|
7
7
|
const clone = cloneList(list)
|
|
8
8
|
|
package/src/identical.js
CHANGED
package/src/includes.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
2
|
import { _indexOf } from './equals.js'
|
|
3
3
|
|
|
4
4
|
export function includes(valueToFind, iterable){
|
|
@@ -10,7 +10,7 @@ export function includes(valueToFind, iterable){
|
|
|
10
10
|
if (!iterable){
|
|
11
11
|
throw new TypeError(`Cannot read property \'indexOf\' of ${ iterable }`)
|
|
12
12
|
}
|
|
13
|
-
if (!
|
|
13
|
+
if (!isArray(iterable)) return false
|
|
14
14
|
|
|
15
15
|
return _indexOf(valueToFind, iterable) > -1
|
|
16
16
|
}
|
package/src/isPromise.js
CHANGED
package/src/length.js
CHANGED
package/src/map.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
|
+
import { keys } from './_internals/keys.js'
|
|
3
3
|
|
|
4
4
|
export function mapArray(
|
|
5
5
|
fn, list, isIndexed = false
|
|
@@ -21,12 +21,12 @@ export function mapObject(fn, obj){
|
|
|
21
21
|
return _obj => mapObject(fn, _obj)
|
|
22
22
|
}
|
|
23
23
|
let index = 0
|
|
24
|
-
const
|
|
25
|
-
const len =
|
|
24
|
+
const objKeys = keys(obj)
|
|
25
|
+
const len = objKeys.length
|
|
26
26
|
const willReturn = {}
|
|
27
27
|
|
|
28
28
|
while (index < len){
|
|
29
|
-
const key =
|
|
29
|
+
const key = objKeys[ index ]
|
|
30
30
|
willReturn[ key ] = fn(
|
|
31
31
|
obj[ key ], key, obj
|
|
32
32
|
)
|
|
@@ -41,10 +41,10 @@ export const mapObjIndexed = mapObject
|
|
|
41
41
|
export function map(fn, iterable){
|
|
42
42
|
if (arguments.length === 1) return _iterable => map(fn, _iterable)
|
|
43
43
|
if (!iterable){
|
|
44
|
-
throw new Error(
|
|
44
|
+
throw new Error(INCORRECT_ITERABLE_INPUT)
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
if (
|
|
47
|
+
if (isArray(iterable)) return mapArray(fn, iterable)
|
|
48
48
|
|
|
49
49
|
return mapObject(fn, iterable)
|
|
50
50
|
}
|
package/src/mathMod.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { isInteger } from './_internals/isInteger.js'
|
|
2
2
|
|
|
3
3
|
export function mathMod(x, y){
|
|
4
4
|
if (arguments.length === 1) return _y => mathMod(x, _y)
|
|
5
|
-
if (!
|
|
5
|
+
if (!isInteger(x) || !isInteger(y) || y < 1) return NaN
|
|
6
6
|
|
|
7
7
|
return (x % y + y) % y
|
|
8
8
|
}
|
package/src/merge.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {mergeRight as merge} from './mergeRight.js'
|
|
1
|
+
export { mergeRight as merge } from './mergeRight.js'
|
package/src/mergeDeepRight.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { clone } from './clone.js'
|
|
1
2
|
import { type } from './type.js'
|
|
2
3
|
|
|
3
4
|
export function mergeDeepRight(target, source){
|
|
@@ -5,7 +6,7 @@ export function mergeDeepRight(target, source){
|
|
|
5
6
|
return sourceHolder => mergeDeepRight(target, sourceHolder)
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
const willReturn =
|
|
9
|
+
const willReturn = clone(target)
|
|
9
10
|
|
|
10
11
|
Object.keys(source).forEach(key => {
|
|
11
12
|
if (type(source[ key ]) === 'Object'){
|
package/src/mergeRight.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export function mergeRight(target, newProps){
|
|
2
|
-
if (arguments.length === 1)
|
|
2
|
+
if (arguments.length === 1)
|
|
3
|
+
return _newProps => mergeRight(target, _newProps)
|
|
3
4
|
|
|
4
5
|
return Object.assign(
|
|
5
6
|
{}, target || {}, newProps || {}
|
package/src/modify.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
|
+
import { isIterable } from './_internals/isIterable.js'
|
|
3
|
+
import { curry } from './curry.js'
|
|
4
|
+
import { updateFn } from './update.js'
|
|
5
|
+
|
|
6
|
+
function modifyFn(
|
|
7
|
+
property, fn, iterable
|
|
8
|
+
){
|
|
9
|
+
if (!isIterable(iterable)) return iterable
|
|
10
|
+
if (iterable[ property ] === undefined) return iterable
|
|
11
|
+
if (isArray(iterable)){
|
|
12
|
+
return updateFn(
|
|
13
|
+
property, fn(iterable[ property ]), iterable
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
...iterable,
|
|
19
|
+
[ property ] : fn(iterable[ property ]),
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const modify = curry(modifyFn)
|
package/src/modifyPath.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _isArray } from './_internals/_isArray.js'
|
|
2
1
|
import { createPath } from './_internals/createPath.js'
|
|
2
|
+
import { isArray } from './_internals/isArray.js'
|
|
3
3
|
import { assoc } from './assoc.js'
|
|
4
4
|
import { curry } from './curry.js'
|
|
5
5
|
import { path as pathModule } from './path.js'
|
|
@@ -11,7 +11,7 @@ export function modifyPathFn(
|
|
|
11
11
|
if (path.length === 1){
|
|
12
12
|
return {
|
|
13
13
|
...object,
|
|
14
|
-
[ path[0] ] : fn(object[ path[0] ]),
|
|
14
|
+
[ path[ 0 ] ] : fn(object[ path[ 0 ] ]),
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
if (pathModule(path, object) === undefined) return object
|
package/src/partialObject.js
CHANGED
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
import { mergeDeepRight } from './mergeDeepRight.js'
|
|
2
|
-
import { type } from './type.js'
|
|
3
2
|
|
|
4
3
|
export function partialObject(fn, input){
|
|
5
|
-
return
|
|
6
|
-
if (type(fn) === 'Async'){
|
|
7
|
-
return new Promise((resolve, reject) => {
|
|
8
|
-
fn(mergeDeepRight(rest, input)).then(resolve)
|
|
9
|
-
.catch(reject)
|
|
10
|
-
})
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
return fn(mergeDeepRight(rest, input))
|
|
14
|
-
}
|
|
4
|
+
return nextInput => fn(mergeDeepRight(nextInput, input))
|
|
15
5
|
}
|
package/src/partition.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
2
|
|
|
3
3
|
export function partitionObject(predicate, iterable){
|
|
4
4
|
const yes = {}
|
|
@@ -38,7 +38,7 @@ export function partition(predicate, iterable){
|
|
|
38
38
|
if (arguments.length === 1){
|
|
39
39
|
return listHolder => partition(predicate, listHolder)
|
|
40
40
|
}
|
|
41
|
-
if (!
|
|
41
|
+
if (!isArray(iterable)) return partitionObject(predicate, iterable)
|
|
42
42
|
|
|
43
43
|
return partitionArray(predicate, iterable)
|
|
44
44
|
}
|
package/src/props.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
2
|
import { mapArray } from './map.js'
|
|
3
3
|
|
|
4
4
|
export function props(propsToPick, obj){
|
|
5
5
|
if (arguments.length === 1){
|
|
6
6
|
return _obj => props(propsToPick, _obj)
|
|
7
7
|
}
|
|
8
|
-
if (!
|
|
8
|
+
if (!isArray(propsToPick)){
|
|
9
9
|
throw new Error('propsToPick is not a list')
|
|
10
10
|
}
|
|
11
11
|
|
package/src/reduce.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { _keys } from './_internals/_keys.js'
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
3
2
|
import { curry } from './curry.js'
|
|
4
3
|
|
|
5
4
|
class ReduceStopper{
|
|
@@ -11,7 +10,7 @@ class ReduceStopper{
|
|
|
11
10
|
export function reduceFn(
|
|
12
11
|
reducer, acc, list
|
|
13
12
|
){
|
|
14
|
-
if (!
|
|
13
|
+
if (!isArray(list)){
|
|
15
14
|
throw new TypeError('reduce: list must be array or iterable')
|
|
16
15
|
}
|
|
17
16
|
let index = 0
|
package/src/splitAt.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
2
|
import { drop } from './drop.js'
|
|
3
3
|
import { maybe } from './maybe.js'
|
|
4
4
|
import { take } from './take.js'
|
|
@@ -9,7 +9,7 @@ export function splitAt(index, input){
|
|
|
9
9
|
}
|
|
10
10
|
if (!input) throw new TypeError(`Cannot read property 'slice' of ${ input }`)
|
|
11
11
|
|
|
12
|
-
if (!
|
|
12
|
+
if (!isArray(input) && typeof input !== 'string') return [ [], [] ]
|
|
13
13
|
|
|
14
14
|
const correctIndex = maybe(
|
|
15
15
|
index < 0,
|
package/src/startsWith.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
2
|
import { equals } from './equals.js'
|
|
3
3
|
|
|
4
4
|
export function startsWith(target, iterable){
|
|
@@ -8,7 +8,7 @@ export function startsWith(target, iterable){
|
|
|
8
8
|
if (typeof iterable === 'string'){
|
|
9
9
|
return iterable.startsWith(target)
|
|
10
10
|
}
|
|
11
|
-
if (!
|
|
11
|
+
if (!isArray(target)) return false
|
|
12
12
|
|
|
13
13
|
let correct = true
|
|
14
14
|
const filtered = target.filter((x, index) => {
|
package/src/takeLastWhile.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
2
|
|
|
3
3
|
export function takeLastWhile(predicate, input){
|
|
4
4
|
if (arguments.length === 1){
|
|
@@ -18,5 +18,5 @@ export function takeLastWhile(predicate, input){
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
return
|
|
21
|
+
return isArray(input) ? toReturn.reverse() : toReturn.reverse().join('')
|
|
22
22
|
}
|
package/src/takeWhile.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray as isArrayModule } from './_internals/isArray.js'
|
|
2
2
|
|
|
3
3
|
export function takeWhile(predicate, iterable){
|
|
4
4
|
if (arguments.length === 1){
|
|
5
5
|
return _iterable => takeWhile(predicate, _iterable)
|
|
6
6
|
}
|
|
7
|
-
const isArray =
|
|
7
|
+
const isArray = isArrayModule(iterable)
|
|
8
8
|
if (!isArray && typeof iterable !== 'string'){
|
|
9
9
|
throw new Error('`iterable` is neither list nor a string')
|
|
10
10
|
}
|
package/src/times.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { isInteger } from './_internals/isInteger.js'
|
|
1
2
|
import { map } from './map.js'
|
|
2
3
|
import { range } from './range.js'
|
|
3
4
|
|
|
4
5
|
export function times(fn, howMany){
|
|
5
6
|
if (arguments.length === 1) return _howMany => times(fn, _howMany)
|
|
6
|
-
if (!
|
|
7
|
+
if (!isInteger(howMany) || howMany < 0){
|
|
7
8
|
throw new RangeError('n must be an integer')
|
|
8
9
|
}
|
|
9
10
|
|
package/src/transpose.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
2
|
|
|
3
3
|
export function transpose(array){
|
|
4
4
|
return array.reduce((acc, el) => {
|
|
5
5
|
el.forEach((nestedEl, i) =>
|
|
6
|
-
|
|
6
|
+
isArray(acc[ i ]) ? acc[ i ].push(nestedEl) : acc.push([ nestedEl ]))
|
|
7
7
|
|
|
8
8
|
return acc
|
|
9
9
|
}, [])
|
package/src/unwind.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isArray } from './_internals/isArray.js'
|
|
2
2
|
import { mapArray } from './map.js'
|
|
3
3
|
|
|
4
4
|
export function unwind(property, obj){
|
|
@@ -6,10 +6,11 @@ export function unwind(property, obj){
|
|
|
6
6
|
return _obj => unwind(property, _obj)
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
if (!
|
|
9
|
+
if (!isArray(obj[ property ])) return [ obj ]
|
|
10
10
|
|
|
11
11
|
return mapArray(x => ({
|
|
12
12
|
...obj,
|
|
13
13
|
[ property ] : x,
|
|
14
|
-
}),
|
|
14
|
+
}),
|
|
15
|
+
obj[ property ])
|
|
15
16
|
}
|
package/src/update.js
CHANGED
package/src/where.js
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const _isArray = Array.isArray
|
package/src/_internals/_keys.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export const _keys = Object.keys
|