rubico 2.6.5 → 2.7.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/Transducer.d.ts +1 -1
- package/Transducer.js +65 -16
- package/__.js +10 -1
- package/all.d.ts +2 -2
- package/all.js +11 -2
- package/always.js +8 -0
- package/and.js +6 -0
- package/assign.js +9 -0
- package/compose.js +33 -8
- package/curry.js +18 -0
- package/dist/Transducer.es.js +2 -2
- package/dist/Transducer.es.min.js +2 -2
- package/dist/Transducer.js +2 -2
- package/dist/Transducer.min.js +2 -2
- package/dist/Transducer.mjs +2 -2
- package/dist/__.es.js +2 -2
- package/dist/__.es.min.js +2 -2
- package/dist/__.js +2 -2
- package/dist/__.min.js +2 -2
- package/dist/__.mjs +2 -2
- package/dist/all.es.js +2 -22
- package/dist/all.es.min.js +2 -2
- package/dist/all.js +2 -22
- package/dist/all.min.js +2 -2
- package/dist/all.mjs +2 -22
- package/dist/always.es.js +2 -2
- package/dist/always.es.min.js +2 -2
- package/dist/always.js +2 -2
- package/dist/always.min.js +2 -2
- package/dist/always.mjs +2 -2
- package/dist/and.es.js +2 -2
- package/dist/and.es.min.js +2 -2
- package/dist/and.js +2 -2
- package/dist/and.min.js +2 -2
- package/dist/and.mjs +2 -2
- package/dist/assign.es.js +2 -2
- package/dist/assign.es.min.js +2 -2
- package/dist/assign.js +2 -2
- package/dist/assign.min.js +2 -2
- package/dist/assign.mjs +2 -2
- package/dist/compose.es.js +6 -2
- package/dist/compose.es.min.js +3 -3
- package/dist/compose.js +6 -2
- package/dist/compose.min.js +3 -3
- package/dist/compose.mjs +6 -2
- package/dist/curry.es.js +2 -2
- package/dist/curry.es.min.js +2 -2
- package/dist/curry.js +2 -2
- package/dist/curry.min.js +2 -2
- package/dist/curry.mjs +2 -2
- package/dist/eq.es.js +2 -2
- package/dist/eq.es.min.js +2 -2
- package/dist/eq.js +2 -2
- package/dist/eq.min.js +2 -2
- package/dist/eq.mjs +2 -2
- package/dist/every.es.js +2 -2
- package/dist/every.es.min.js +2 -2
- package/dist/every.js +2 -2
- package/dist/every.min.js +2 -2
- package/dist/every.mjs +2 -2
- package/dist/filter.es.js +5 -3
- package/dist/filter.es.min.js +3 -3
- package/dist/filter.js +5 -3
- package/dist/filter.min.js +3 -3
- package/dist/filter.mjs +5 -3
- package/dist/flatMap.es.js +2 -2
- package/dist/flatMap.es.min.js +2 -2
- package/dist/flatMap.js +2 -2
- package/dist/flatMap.min.js +2 -2
- package/dist/flatMap.mjs +2 -2
- package/dist/forEach.es.js +2 -2
- package/dist/forEach.es.min.js +2 -2
- package/dist/forEach.js +2 -2
- package/dist/forEach.min.js +2 -2
- package/dist/forEach.mjs +2 -2
- package/dist/get.es.js +2 -2
- package/dist/get.es.min.js +2 -2
- package/dist/get.js +2 -2
- package/dist/get.min.js +2 -2
- package/dist/get.mjs +2 -2
- package/dist/gt.es.js +2 -2
- package/dist/gt.es.min.js +2 -2
- package/dist/gt.js +2 -2
- package/dist/gt.min.js +2 -2
- package/dist/gt.mjs +2 -2
- package/dist/gte.es.js +2 -2
- package/dist/gte.es.min.js +2 -2
- package/dist/gte.js +2 -2
- package/dist/gte.min.js +2 -2
- package/dist/gte.mjs +2 -2
- package/dist/lt.es.js +2 -2
- package/dist/lt.es.min.js +2 -2
- package/dist/lt.js +2 -2
- package/dist/lt.min.js +2 -2
- package/dist/lt.mjs +2 -2
- package/dist/lte.es.js +2 -2
- package/dist/lte.es.min.js +2 -2
- package/dist/lte.js +2 -2
- package/dist/lte.min.js +2 -2
- package/dist/lte.mjs +2 -2
- package/dist/map.es.js +31 -31
- package/dist/map.es.min.js +3 -3
- package/dist/map.js +31 -31
- package/dist/map.min.js +3 -3
- package/dist/map.mjs +31 -31
- package/dist/not.es.js +2 -2
- package/dist/not.es.min.js +2 -2
- package/dist/not.js +2 -2
- package/dist/not.min.js +2 -2
- package/dist/not.mjs +2 -2
- package/dist/omit.es.js +2 -2
- package/dist/omit.es.min.js +2 -2
- package/dist/omit.js +2 -2
- package/dist/omit.min.js +2 -2
- package/dist/omit.mjs +2 -2
- package/dist/or.es.js +2 -2
- package/dist/or.es.min.js +2 -2
- package/dist/or.js +2 -2
- package/dist/or.min.js +2 -2
- package/dist/or.mjs +2 -2
- package/dist/pick.es.js +2 -2
- package/dist/pick.es.min.js +2 -2
- package/dist/pick.js +2 -2
- package/dist/pick.min.js +2 -2
- package/dist/pick.mjs +2 -2
- package/dist/pipe.es.js +6 -2
- package/dist/pipe.es.min.js +3 -3
- package/dist/pipe.js +6 -2
- package/dist/pipe.min.js +3 -3
- package/dist/pipe.mjs +6 -2
- package/dist/reduce.es.js +9 -9
- package/dist/reduce.es.min.js +2 -2
- package/dist/reduce.js +9 -9
- package/dist/reduce.min.js +2 -2
- package/dist/reduce.mjs +9 -9
- package/dist/rubico.es.js +49 -59
- package/dist/rubico.es.min.js +3 -3
- package/dist/rubico.global.js +49 -59
- package/dist/rubico.global.min.js +3 -3
- package/dist/rubico.js +49 -59
- package/dist/rubico.min.js +3 -3
- package/dist/rubico.mjs +49 -59
- package/dist/set.es.js +2 -2
- package/dist/set.es.min.js +2 -2
- package/dist/set.js +2 -2
- package/dist/set.min.js +2 -2
- package/dist/set.mjs +2 -2
- package/dist/some.es.js +2 -2
- package/dist/some.es.min.js +2 -2
- package/dist/some.js +2 -2
- package/dist/some.min.js +2 -2
- package/dist/some.mjs +2 -2
- package/dist/switchCase.es.js +2 -2
- package/dist/switchCase.es.min.js +2 -2
- package/dist/switchCase.js +2 -2
- package/dist/switchCase.min.js +2 -2
- package/dist/switchCase.mjs +2 -2
- package/dist/tap.es.js +2 -2
- package/dist/tap.es.min.js +2 -2
- package/dist/tap.js +2 -2
- package/dist/tap.min.js +2 -2
- package/dist/tap.mjs +2 -2
- package/dist/thunkify.es.js +2 -2
- package/dist/thunkify.es.min.js +2 -2
- package/dist/thunkify.js +2 -2
- package/dist/thunkify.min.js +2 -2
- package/dist/thunkify.mjs +2 -2
- package/dist/transform.es.js +2 -2
- package/dist/transform.es.min.js +2 -2
- package/dist/transform.js +2 -2
- package/dist/transform.min.js +2 -2
- package/dist/transform.mjs +2 -2
- package/dist/tryCatch.es.js +2 -2
- package/dist/tryCatch.es.min.js +2 -2
- package/dist/tryCatch.js +2 -2
- package/dist/tryCatch.min.js +2 -2
- package/dist/tryCatch.mjs +2 -2
- package/dist/x/append.es.js +2 -2
- package/dist/x/append.es.min.js +2 -2
- package/dist/x/append.js +2 -2
- package/dist/x/append.min.js +2 -2
- package/dist/x/append.mjs +2 -2
- package/dist/x/callProp.es.js +2 -2
- package/dist/x/callProp.es.min.js +2 -2
- package/dist/x/callProp.js +2 -2
- package/dist/x/callProp.min.js +2 -2
- package/dist/x/callProp.mjs +2 -2
- package/dist/x/defaultsDeep.es.js +2 -2
- package/dist/x/defaultsDeep.es.min.js +2 -2
- package/dist/x/defaultsDeep.js +2 -2
- package/dist/x/defaultsDeep.min.js +2 -2
- package/dist/x/defaultsDeep.mjs +2 -2
- package/dist/x/differenceWith.es.js +2 -2
- package/dist/x/differenceWith.es.min.js +2 -2
- package/dist/x/differenceWith.js +2 -2
- package/dist/x/differenceWith.min.js +2 -2
- package/dist/x/differenceWith.mjs +2 -2
- package/dist/x/filterOut.es.js +5 -3
- package/dist/x/filterOut.es.min.js +3 -3
- package/dist/x/filterOut.js +5 -3
- package/dist/x/filterOut.min.js +3 -3
- package/dist/x/filterOut.mjs +5 -3
- package/dist/x/find.es.js +2 -2
- package/dist/x/find.es.min.js +2 -2
- package/dist/x/find.js +2 -2
- package/dist/x/find.min.js +2 -2
- package/dist/x/find.mjs +2 -2
- package/dist/x/findIndex.es.js +2 -2
- package/dist/x/findIndex.es.min.js +2 -2
- package/dist/x/findIndex.js +2 -2
- package/dist/x/findIndex.min.js +2 -2
- package/dist/x/findIndex.mjs +2 -2
- package/dist/x/first.es.js +2 -2
- package/dist/x/first.es.min.js +2 -2
- package/dist/x/first.js +2 -2
- package/dist/x/first.min.js +2 -2
- package/dist/x/first.mjs +2 -2
- package/dist/x/flatten.es.js +2 -2
- package/dist/x/flatten.es.min.js +2 -2
- package/dist/x/flatten.js +2 -2
- package/dist/x/flatten.min.js +2 -2
- package/dist/x/flatten.mjs +2 -2
- package/dist/x/groupBy.es.js +9 -9
- package/dist/x/groupBy.es.min.js +2 -2
- package/dist/x/groupBy.js +9 -9
- package/dist/x/groupBy.min.js +2 -2
- package/dist/x/groupBy.mjs +9 -9
- package/dist/x/has.es.js +2 -2
- package/dist/x/has.es.min.js +2 -2
- package/dist/x/has.js +2 -2
- package/dist/x/has.min.js +2 -2
- package/dist/x/has.mjs +2 -2
- package/dist/x/identity.es.js +2 -2
- package/dist/x/identity.es.min.js +2 -2
- package/dist/x/identity.js +2 -2
- package/dist/x/identity.min.js +2 -2
- package/dist/x/identity.mjs +2 -2
- package/dist/x/includes.es.js +2 -2
- package/dist/x/includes.es.min.js +2 -2
- package/dist/x/includes.js +2 -2
- package/dist/x/includes.min.js +2 -2
- package/dist/x/includes.mjs +2 -2
- package/dist/x/isDeepEqual.es.js +2 -2
- package/dist/x/isDeepEqual.es.min.js +2 -2
- package/dist/x/isDeepEqual.js +2 -2
- package/dist/x/isDeepEqual.min.js +2 -2
- package/dist/x/isDeepEqual.mjs +2 -2
- package/dist/x/isEmpty.es.js +2 -2
- package/dist/x/isEmpty.es.min.js +2 -2
- package/dist/x/isEmpty.js +2 -2
- package/dist/x/isEmpty.min.js +2 -2
- package/dist/x/isEmpty.mjs +2 -2
- package/dist/x/isEqual.es.js +2 -2
- package/dist/x/isEqual.es.min.js +2 -2
- package/dist/x/isEqual.js +2 -2
- package/dist/x/isEqual.min.js +2 -2
- package/dist/x/isEqual.mjs +2 -2
- package/dist/x/isFunction.es.js +2 -2
- package/dist/x/isFunction.es.min.js +2 -2
- package/dist/x/isFunction.js +2 -2
- package/dist/x/isFunction.min.js +2 -2
- package/dist/x/isFunction.mjs +2 -2
- package/dist/x/isIn.es.js +2 -2
- package/dist/x/isIn.es.min.js +2 -2
- package/dist/x/isIn.js +2 -2
- package/dist/x/isIn.min.js +2 -2
- package/dist/x/isIn.mjs +2 -2
- package/dist/x/isObject.es.js +2 -2
- package/dist/x/isObject.es.min.js +2 -2
- package/dist/x/isObject.js +2 -2
- package/dist/x/isObject.min.js +2 -2
- package/dist/x/isObject.mjs +2 -2
- package/dist/x/isString.es.js +2 -2
- package/dist/x/isString.es.min.js +2 -2
- package/dist/x/isString.js +2 -2
- package/dist/x/isString.min.js +2 -2
- package/dist/x/isString.mjs +2 -2
- package/dist/x/keys.es.js +2 -2
- package/dist/x/keys.es.min.js +2 -2
- package/dist/x/keys.js +2 -2
- package/dist/x/keys.min.js +2 -2
- package/dist/x/keys.mjs +2 -2
- package/dist/x/last.es.js +2 -2
- package/dist/x/last.es.min.js +2 -2
- package/dist/x/last.js +2 -2
- package/dist/x/last.min.js +2 -2
- package/dist/x/last.mjs +2 -2
- package/dist/x/maxBy.es.js +2 -2
- package/dist/x/maxBy.es.min.js +2 -2
- package/dist/x/maxBy.js +2 -2
- package/dist/x/maxBy.min.js +2 -2
- package/dist/x/maxBy.mjs +2 -2
- package/dist/x/noop.es.js +2 -2
- package/dist/x/noop.es.min.js +2 -2
- package/dist/x/noop.js +2 -2
- package/dist/x/noop.min.js +2 -2
- package/dist/x/noop.mjs +2 -2
- package/dist/x/pluck.es.js +31 -31
- package/dist/x/pluck.es.min.js +3 -3
- package/dist/x/pluck.js +31 -31
- package/dist/x/pluck.min.js +3 -3
- package/dist/x/pluck.mjs +31 -31
- package/dist/x/prepend.es.js +2 -2
- package/dist/x/prepend.es.min.js +2 -2
- package/dist/x/prepend.js +2 -2
- package/dist/x/prepend.min.js +2 -2
- package/dist/x/prepend.mjs +2 -2
- package/dist/x/size.es.js +2 -2
- package/dist/x/size.es.min.js +2 -2
- package/dist/x/size.js +2 -2
- package/dist/x/size.min.js +2 -2
- package/dist/x/size.mjs +2 -2
- package/dist/x/trace.es.js +2 -2
- package/dist/x/trace.es.min.js +2 -2
- package/dist/x/trace.js +2 -2
- package/dist/x/trace.min.js +2 -2
- package/dist/x/trace.mjs +2 -2
- package/dist/x/unionWith.es.js +2 -2
- package/dist/x/unionWith.es.min.js +2 -2
- package/dist/x/unionWith.js +2 -2
- package/dist/x/unionWith.min.js +2 -2
- package/dist/x/unionWith.mjs +2 -2
- package/dist/x/uniq.es.js +2 -2
- package/dist/x/uniq.es.min.js +2 -2
- package/dist/x/uniq.js +2 -2
- package/dist/x/uniq.min.js +2 -2
- package/dist/x/uniq.mjs +2 -2
- package/dist/x/unless.es.js +2 -2
- package/dist/x/unless.es.min.js +2 -2
- package/dist/x/unless.js +2 -2
- package/dist/x/unless.min.js +2 -2
- package/dist/x/unless.mjs +2 -2
- package/dist/x/values.es.js +2 -2
- package/dist/x/values.es.min.js +2 -2
- package/dist/x/values.js +2 -2
- package/dist/x/values.min.js +2 -2
- package/dist/x/values.mjs +2 -2
- package/dist/x/when.es.js +2 -2
- package/dist/x/when.es.min.js +2 -2
- package/dist/x/when.js +2 -2
- package/dist/x/when.min.js +2 -2
- package/dist/x/when.mjs +2 -2
- package/eq.d.ts +6 -6
- package/eq.js +14 -6
- package/es.js +49 -59
- package/every.js +19 -5
- package/filter.js +87 -47
- package/flatMap.js +38 -32
- package/forEach.js +107 -13
- package/get.js +9 -0
- package/gt.js +9 -0
- package/gte.js +9 -0
- package/index.js +49 -59
- package/lte.js +9 -0
- package/map.js +198 -103
- package/not.js +7 -0
- package/omit.d.ts +2 -2
- package/omit.js +11 -2
- package/or.js +6 -0
- package/package.json +1 -3
- package/pick.js +9 -0
- package/pipe.js +30 -3
- package/reduce.js +132 -89
- package/set.js +9 -0
- package/some.js +17 -3
- package/switchCase.js +6 -0
- package/tap.js +14 -0
- package/thunkify.js +8 -0
- package/transform.js +112 -44
- package/tryCatch.js +5 -0
- package/x/append.js +3 -0
- package/x/callProp.js +5 -0
- package/x/defaultsDeep.d.ts +2 -2
- package/x/defaultsDeep.js +7 -2
- package/x/differenceWith.js +5 -0
- package/x/find.d.ts +2 -2
- package/x/find.js +2 -2
- package/x/groupBy.d.ts +2 -2
- package/x/groupBy.js +2 -2
- package/x/pluck.d.ts +2 -2
- package/x/pluck.js +2 -2
- package/x/unionWith.test.js +3 -3
package/filter.js
CHANGED
|
@@ -3,6 +3,7 @@ const curry2 = require('./_internal/curry2')
|
|
|
3
3
|
const FilteringIterator = require('./_internal/FilteringIterator')
|
|
4
4
|
const FilteringAsyncIterator = require('./_internal/FilteringAsyncIterator')
|
|
5
5
|
const isArray = require('./_internal/isArray')
|
|
6
|
+
const isPromise = require('./_internal/isPromise')
|
|
6
7
|
const arrayFilter = require('./_internal/arrayFilter')
|
|
7
8
|
const stringFilter = require('./_internal/stringFilter')
|
|
8
9
|
const setFilter = require('./_internal/setFilter')
|
|
@@ -89,74 +90,118 @@ const _filter = function (value, predicate) {
|
|
|
89
90
|
*
|
|
90
91
|
* @synopsis
|
|
91
92
|
* ```coffeescript [specscript]
|
|
92
|
-
* type Filterable = Array|
|
|
93
|
+
* type Filterable = Array|Set|Map|Generator|AsyncGenerator|{ filter: function }|Object
|
|
93
94
|
*
|
|
94
95
|
* type Predicate = (
|
|
95
96
|
* value any,
|
|
96
|
-
* indexOrKey number|string,
|
|
97
|
-
*
|
|
97
|
+
* indexOrKey number|string|any,
|
|
98
|
+
* filt Filterable,
|
|
98
99
|
* )=>boolean
|
|
99
100
|
*
|
|
100
|
-
* filter(
|
|
101
|
-
* filter(predicate Predicate)(
|
|
101
|
+
* filter(filt Filterable, predicate Predicate) -> result Promise|Filterable
|
|
102
|
+
* filter(predicate Predicate)(filt Filterable) -> result Promise|Filterable
|
|
102
103
|
* ```
|
|
103
104
|
*
|
|
104
105
|
* @description
|
|
105
|
-
*
|
|
106
|
+
* Filters out items from a filterable. Returns a filterable of the same type. The order of the items in the filterable is preserved.
|
|
107
|
+
*
|
|
108
|
+
* The following data types are considered to be filterables:
|
|
109
|
+
* * `array`
|
|
110
|
+
* * `set`
|
|
111
|
+
* * `map`
|
|
112
|
+
* * `generator`
|
|
113
|
+
* * `async generator`
|
|
114
|
+
* * `object with .filter method`
|
|
115
|
+
* * `object`
|
|
116
|
+
*
|
|
117
|
+
* The filtering operation is defined by a given predicate function. The predicate function dictates whether a given item from the filterable should be included in the returned filterable.
|
|
118
|
+
*
|
|
119
|
+
* ```javascript
|
|
120
|
+
* const predicate = function (item) {
|
|
121
|
+
* // condition is the boolean result of the predicate test on item
|
|
122
|
+
* return condition
|
|
123
|
+
* }
|
|
124
|
+
* ```
|
|
125
|
+
*
|
|
126
|
+
* The predicate function signature changes depending on the provided filterable.
|
|
127
|
+
*
|
|
128
|
+
* If the filterable is an array:
|
|
129
|
+
* ```coffeescript [specscript]
|
|
130
|
+
* predicate(item any, index number, filt Array) -> condition Promise|boolean|any
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* If the filterable is a set:
|
|
134
|
+
* ```coffeescript [specscript]
|
|
135
|
+
* predicate(item any, item any, filt Set) -> condition Promise|boolean|any
|
|
136
|
+
* ```
|
|
137
|
+
*
|
|
138
|
+
* If the filterable is a map:
|
|
139
|
+
* ```coffeescript [specscript]
|
|
140
|
+
* predicate(item any, key any, filt Map) -> condition Promise|boolean|any
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* If the filterable is a generator:
|
|
144
|
+
* ```coffeescript [specscript]
|
|
145
|
+
* predicate(item any) -> condition Promise|boolean|any
|
|
146
|
+
* ```
|
|
106
147
|
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
148
|
+
* If the filterable is an async generator:
|
|
149
|
+
* ```coffeescript [specscript]
|
|
150
|
+
* predicate(item any) -> condition Promise|boolean|any
|
|
151
|
+
* ```
|
|
152
|
+
*
|
|
153
|
+
* If the filterable is an object with a `.filter` method, the predicate function signature is defined externally.
|
|
113
154
|
*
|
|
114
|
-
*
|
|
155
|
+
* If the filterable is a plain object:
|
|
156
|
+
* ```coffeescript [specscript]
|
|
157
|
+
* predicate(item any, key string, filt Object) -> condition Promise|boolean|any
|
|
158
|
+
* ```
|
|
159
|
+
*
|
|
160
|
+
* `filter` works for arrays.
|
|
115
161
|
*
|
|
116
162
|
* ```javascript [playground]
|
|
117
163
|
* const isOdd = number => number % 2 == 1
|
|
118
164
|
*
|
|
119
165
|
* const array = [1, 2, 3, 4, 5]
|
|
120
166
|
*
|
|
121
|
-
*
|
|
122
|
-
* console.log(
|
|
167
|
+
* const result = filter(array, isOdd)
|
|
168
|
+
* console.log(result) // [1, 3, 5]
|
|
123
169
|
* ```
|
|
124
170
|
*
|
|
125
|
-
*
|
|
171
|
+
* If the predicate is asynchronous, the returned promise is concurrently resolved for its boolean condition before continuing with the filtering operation.
|
|
126
172
|
*
|
|
127
173
|
* ```javascript [playground]
|
|
128
|
-
* const
|
|
174
|
+
* const asyncIsOdd = async number => number % 2 == 1
|
|
129
175
|
*
|
|
130
|
-
* const
|
|
176
|
+
* const array = [1, 2, 3, 4, 5]
|
|
131
177
|
*
|
|
132
|
-
*
|
|
133
|
-
* console.log
|
|
178
|
+
* const promise = filter(array, asyncIsOdd)
|
|
179
|
+
* promise.then(console.log) // [1, 3, 5]
|
|
134
180
|
* ```
|
|
135
181
|
*
|
|
136
|
-
*
|
|
182
|
+
* `filter` applies the predicate function to just the values of an object.
|
|
137
183
|
*
|
|
138
184
|
* ```javascript [playground]
|
|
139
185
|
* const isOdd = number => number % 2 == 1
|
|
140
186
|
*
|
|
141
|
-
* const
|
|
187
|
+
* const obj = { a: 1, b: 2, c: 3, d: 4, e: 5 }
|
|
142
188
|
*
|
|
143
|
-
*
|
|
144
|
-
* console.log(
|
|
189
|
+
* const result = filter(obj, isOdd)
|
|
190
|
+
* console.log(result) // { a: 1, c: 3, e: 5 }
|
|
145
191
|
* ```
|
|
146
192
|
*
|
|
147
|
-
*
|
|
193
|
+
* `filter` applies the predicate to the values of the entries of a map.
|
|
148
194
|
*
|
|
149
195
|
* ```javascript [playground]
|
|
150
196
|
* const isOdd = number => number % 2 == 1
|
|
151
197
|
*
|
|
152
|
-
* const
|
|
153
|
-
* const m = new Map([['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]])
|
|
198
|
+
* const myMap = new Map([['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]])
|
|
154
199
|
*
|
|
155
|
-
*
|
|
156
|
-
* console.log(
|
|
200
|
+
* const result = filter(myMap, isOdd)
|
|
201
|
+
* console.log(result) // Map(3) { 'a' => 1, 'c' => 3, 'e' => 5 }
|
|
157
202
|
* ```
|
|
158
203
|
*
|
|
159
|
-
* For
|
|
204
|
+
* For generators, `filter` returns a lazily filtered generator. All values that are normally yielded by the generator that test false by the predicate are excluded from the returned generator.
|
|
160
205
|
*
|
|
161
206
|
* ```javascript [playground]
|
|
162
207
|
* const isOdd = number => number % 2 == 1
|
|
@@ -167,7 +212,6 @@ const _filter = function (value, predicate) {
|
|
|
167
212
|
*
|
|
168
213
|
* const numbersGenerator = numbersGeneratorFunction()
|
|
169
214
|
* const oddNumbersGenerator = filter(numbersGeneratorFunction(), isOdd)
|
|
170
|
-
* const oddNumbersGenerator2 = filter(isOdd)(numbersGeneratorFunction())
|
|
171
215
|
*
|
|
172
216
|
* for (const number of numbersGenerator) {
|
|
173
217
|
* console.log(number) // 1
|
|
@@ -182,15 +226,9 @@ const _filter = function (value, predicate) {
|
|
|
182
226
|
* // 3
|
|
183
227
|
* // 5
|
|
184
228
|
* }
|
|
185
|
-
*
|
|
186
|
-
* for (const number of oddNumbersGenerator2) {
|
|
187
|
-
* console.log(number) // 1
|
|
188
|
-
* // 3
|
|
189
|
-
* // 5
|
|
190
|
-
* }
|
|
191
229
|
* ```
|
|
192
230
|
*
|
|
193
|
-
*
|
|
231
|
+
* For async generators, `filter` returns a lazily filtered async generator. All values that are normally yielded by the async generator that test falsy by the predicate are excluded from the returned async generator.
|
|
194
232
|
*
|
|
195
233
|
* ```javascript [playground]
|
|
196
234
|
* const asyncIsOdd = async number => number % 2 == 1
|
|
@@ -203,8 +241,6 @@ const _filter = function (value, predicate) {
|
|
|
203
241
|
*
|
|
204
242
|
* const asyncOddNumbersGenerator = filter(asyncNumbersGeneratorFunction(), asyncIsOdd)
|
|
205
243
|
*
|
|
206
|
-
* const asyncOddNumbersGenerator2 = filter(asyncIsOdd)(asyncNumbersGeneratorFunction())
|
|
207
|
-
*
|
|
208
244
|
* for await (const number of asyncNumbersGenerator) {
|
|
209
245
|
* console.log(number) // 1
|
|
210
246
|
* // 2
|
|
@@ -218,12 +254,6 @@ const _filter = function (value, predicate) {
|
|
|
218
254
|
* // 3
|
|
219
255
|
* // 5
|
|
220
256
|
* }
|
|
221
|
-
*
|
|
222
|
-
* for await (const number of asyncOddNumbersGenerator2) {
|
|
223
|
-
* console.log(number) // 1
|
|
224
|
-
* // 3
|
|
225
|
-
* // 5
|
|
226
|
-
* }
|
|
227
257
|
* ```
|
|
228
258
|
*
|
|
229
259
|
* Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
|
|
@@ -235,6 +265,14 @@ const _filter = function (value, predicate) {
|
|
|
235
265
|
* // [1, 3, 5]
|
|
236
266
|
* ```
|
|
237
267
|
*
|
|
268
|
+
* See also:
|
|
269
|
+
* * [forEach](/docs/forEach)
|
|
270
|
+
* * [map](/docs/map)
|
|
271
|
+
* * [reduce](/docs/reduce)
|
|
272
|
+
* * [transform](/docs/transform)
|
|
273
|
+
* * [flatMap](/docs/flatMap)
|
|
274
|
+
* * [some](/docs/some)
|
|
275
|
+
*
|
|
238
276
|
* @execution concurrent
|
|
239
277
|
*
|
|
240
278
|
* @transducing
|
|
@@ -243,7 +281,9 @@ const filter = function (arg0, arg1) {
|
|
|
243
281
|
if (typeof arg0 == 'function') {
|
|
244
282
|
return curry2(_filter, __, arg0)
|
|
245
283
|
}
|
|
246
|
-
return
|
|
284
|
+
return isPromise(arg0)
|
|
285
|
+
? arg0.then(curry2(_filter, __, arg1))
|
|
286
|
+
: _filter(arg0, arg1)
|
|
247
287
|
}
|
|
248
288
|
|
|
249
289
|
module.exports = filter
|
package/flatMap.js
CHANGED
|
@@ -15,13 +15,13 @@ const __ = require('./_internal/placeholder')
|
|
|
15
15
|
*
|
|
16
16
|
* @synopsis
|
|
17
17
|
* ```coffeescript [specscript]
|
|
18
|
-
* type
|
|
18
|
+
* type Monad = Array|String|Set|Generator|AsyncGenerator
|
|
19
19
|
* type Iterable = Iterable|AsyncIterable|Object<value any>
|
|
20
20
|
*
|
|
21
21
|
* _flatMap(
|
|
22
|
-
*
|
|
22
|
+
* m Monad,
|
|
23
23
|
* flatMapper (item any)=>Promise|Iterable,
|
|
24
|
-
* ) -> result Promise|
|
|
24
|
+
* ) -> result Promise|Monad
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
const _flatMap = function (value, flatMapper) {
|
|
@@ -64,28 +64,36 @@ const _flatMap = function (value, flatMapper) {
|
|
|
64
64
|
*
|
|
65
65
|
* @synopsis
|
|
66
66
|
* ```coffeescript [specscript]
|
|
67
|
-
* type
|
|
68
|
-
*
|
|
69
|
-
* type Iterable = Iterable|AsyncIterable|Object<value any>
|
|
67
|
+
* type Monad = Array|String|Set|Generator|AsyncGenerator|{ flatMap: string }|{ chain: string }|Object
|
|
70
68
|
*
|
|
71
69
|
* type FlatMapper = (
|
|
72
70
|
* item any,
|
|
73
|
-
* indexOrKey string,
|
|
74
|
-
*
|
|
75
|
-
* )=>Promise|
|
|
71
|
+
* indexOrKey number|string|any,
|
|
72
|
+
* mon Monad
|
|
73
|
+
* )=>Promise|Monad|any
|
|
76
74
|
*
|
|
77
|
-
* flatMap(
|
|
78
|
-
* flatMap(flatMapper FlatMapper)(
|
|
75
|
+
* flatMap(mon Monad, flatMapper FlatMapper) -> result Promise|Monad
|
|
76
|
+
* flatMap(flatMapper FlatMapper)(mon Monad) -> result Promise|Monad
|
|
79
77
|
* ```
|
|
80
78
|
*
|
|
81
79
|
* @description
|
|
82
|
-
* Applies a flatMapper function
|
|
80
|
+
* Applies a flatMapper function to each item of a monad, returning a monad of the same type.
|
|
81
|
+
*
|
|
82
|
+
* A flatMapping operation iterates through each item of a monad and applies the flatMapper function to each item, flattening the result of the execution into the returned monad.
|
|
83
83
|
*
|
|
84
|
-
*
|
|
85
|
-
* * `AsyncIterable` - the execution result is asynchronously iterated and each item is added to the result collection
|
|
86
|
-
* * `Object` - the execution result values are added to the result collection
|
|
84
|
+
* If the flatMapper is asynchronous, it is executed concurrently. The execution result may be asynchronously iterable, in which case it is muxed into the returned monad.
|
|
87
85
|
*
|
|
88
|
-
* The following
|
|
86
|
+
* The following data types are considered to be monads, all are flattenable into other monads:
|
|
87
|
+
* * `array`
|
|
88
|
+
* * `string`
|
|
89
|
+
* * `set`
|
|
90
|
+
* * `genreator`
|
|
91
|
+
* * `async generator`
|
|
92
|
+
* * `object with .flatMap method`
|
|
93
|
+
* * `object with .chain method`
|
|
94
|
+
* * `object`
|
|
95
|
+
*
|
|
96
|
+
* `flatMap` flattens various data types.
|
|
89
97
|
*
|
|
90
98
|
* ```javascript [playground]
|
|
91
99
|
* const identity = value => value
|
|
@@ -93,15 +101,15 @@ const _flatMap = function (value, flatMapper) {
|
|
|
93
101
|
* flatMap(identity)([
|
|
94
102
|
* [1, 1], // array
|
|
95
103
|
* new Set([2, 2]), // set
|
|
96
|
-
* (function* () { yield 3; yield 3 })(),
|
|
97
|
-
* (async function* () { yield 7; yield 7 })(),
|
|
104
|
+
* (function* () { yield 3; yield 3 })(),
|
|
105
|
+
* (async function* () { yield 7; yield 7 })(),
|
|
98
106
|
* { a: 5, b: 5 }, // object
|
|
99
107
|
* new Uint8Array([8]), // typedArray
|
|
100
108
|
* ]).then(console.log)
|
|
101
109
|
* // [1, 1, 2, 3, 3, 5, 5, 8, 7, 7]
|
|
102
110
|
* ```
|
|
103
111
|
*
|
|
104
|
-
*
|
|
112
|
+
* Values from async generators are muxed. Muxing, or asynchronously "mixing", is the process of combining multiple asynchronous sources into one source, with order determined by the asynchronous resolution of the individual items.
|
|
105
113
|
*
|
|
106
114
|
* ```javascript [playground]
|
|
107
115
|
* const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
|
|
@@ -122,12 +130,12 @@ const _flatMap = function (value, flatMapper) {
|
|
|
122
130
|
* yield message
|
|
123
131
|
* }
|
|
124
132
|
*
|
|
125
|
-
* // async
|
|
133
|
+
* // values from async generators are muxed
|
|
126
134
|
* flatMap(['foo', 'bar', 'baz'], asyncRepeat3).then(console.log)
|
|
127
135
|
* // ['foo', 'bar', 'baz', 'foo', 'bar', 'baz', 'foo', 'bar', 'baz']
|
|
128
136
|
* ```
|
|
129
137
|
*
|
|
130
|
-
*
|
|
138
|
+
* `flatMap` applies the flatMapper function to each item of an array, flattening the results into a new array.
|
|
131
139
|
*
|
|
132
140
|
* ```javascript [playground]
|
|
133
141
|
* const duplicate = value => [value, value]
|
|
@@ -137,7 +145,7 @@ const _flatMap = function (value, flatMapper) {
|
|
|
137
145
|
* ) // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
|
|
138
146
|
* ```
|
|
139
147
|
*
|
|
140
|
-
*
|
|
148
|
+
* `flatMap` acts on each character of a string.
|
|
141
149
|
*
|
|
142
150
|
* ```javascript [playground]
|
|
143
151
|
* const duplicate = value => [value, value]
|
|
@@ -147,16 +155,6 @@ const _flatMap = function (value, flatMapper) {
|
|
|
147
155
|
* ) // 1122334455
|
|
148
156
|
* ```
|
|
149
157
|
*
|
|
150
|
-
* For sets (type `Set`), `flatMap` applies the flatMapper function to each item, adding (`.add`) the items of each execution into a new set
|
|
151
|
-
*
|
|
152
|
-
* ```javascript [playground]
|
|
153
|
-
* const pairPlus100 = value => [value, value + 100]
|
|
154
|
-
*
|
|
155
|
-
* console.log(
|
|
156
|
-
* flatMap(new Set([1, 2, 3, 4, 5]), pairPlus100)
|
|
157
|
-
* ) // Set(10) { 1, 101, 2, 102, 3, 103, 4, 104, 5, 105 }
|
|
158
|
-
* ```
|
|
159
|
-
*
|
|
160
158
|
* Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
|
|
161
159
|
*
|
|
162
160
|
* ```javascript [playground]
|
|
@@ -164,6 +162,14 @@ const _flatMap = function (value, flatMapper) {
|
|
|
164
162
|
* // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
|
|
165
163
|
* ```
|
|
166
164
|
*
|
|
165
|
+
* See also:
|
|
166
|
+
* * [forEach](/docs/forEach)
|
|
167
|
+
* * [map](/docs/map)
|
|
168
|
+
* * [filter](/docs/filter)
|
|
169
|
+
* * [reduce](/docs/reduce)
|
|
170
|
+
* * [transform](/docs/transform)
|
|
171
|
+
* * [some](/docs/some)
|
|
172
|
+
*
|
|
167
173
|
* @execution concurrent
|
|
168
174
|
*
|
|
169
175
|
* @transducing
|
package/forEach.js
CHANGED
|
@@ -45,20 +45,86 @@ const _forEach = function (collection, callback) {
|
|
|
45
45
|
*
|
|
46
46
|
* @synopsis
|
|
47
47
|
* ```coffeescript [specscript]
|
|
48
|
-
* type
|
|
48
|
+
* type Iterable = Array|Set|Map|Generator|AsyncGenerator|{ forEach: function }|Object
|
|
49
|
+
*
|
|
50
|
+
* type Callback = (
|
|
51
|
+
* item any,
|
|
52
|
+
* indexOrKey number|string|any,
|
|
53
|
+
* iter Iterable
|
|
54
|
+
* )=>Promise|undefined
|
|
49
55
|
*
|
|
50
|
-
* forEach(
|
|
56
|
+
* forEach(iter Iterable, cb Callback) -> iter Promise|Iterable
|
|
51
57
|
*
|
|
52
|
-
* forEach(
|
|
58
|
+
* forEach(cb Callback)(iter Iterable) -> iter Promise|Iterable
|
|
53
59
|
* ```
|
|
54
60
|
*
|
|
55
61
|
* @description
|
|
56
|
-
* Execute a callback for each item of
|
|
62
|
+
* Execute a callback function for each item of an iterable, returning the original iterable unmodified.
|
|
63
|
+
*
|
|
64
|
+
* The following data types are considered to be iterables:
|
|
65
|
+
* * `array`
|
|
66
|
+
* * `set`
|
|
67
|
+
* * `map`
|
|
68
|
+
* * `generator`
|
|
69
|
+
* * `async generator`
|
|
70
|
+
* * `object with .forEach method`
|
|
71
|
+
* * `object`
|
|
72
|
+
*
|
|
73
|
+
* The callback function signature changes depending on the provided iterable.
|
|
74
|
+
*
|
|
75
|
+
* If the iterable is an array:
|
|
76
|
+
* ```coffeescript [specscript]
|
|
77
|
+
* callback(item any, index number, iter Array) -> Promise|undefined
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* If the iterable is a set:
|
|
81
|
+
* ```coffeescript [specscript]
|
|
82
|
+
* callback(item any, key any, iter Set) -> Promise|undefined
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* If the iterable is a map:
|
|
86
|
+
* ```coffeescript [specscript]
|
|
87
|
+
* callback(item any, key any, filt Map) -> Promise|undefined
|
|
88
|
+
* ```
|
|
89
|
+
*
|
|
90
|
+
* If the iterable is a generator:
|
|
91
|
+
* ```coffeescript [specscript]
|
|
92
|
+
* callback(item any) -> Promise|undefined
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* If the iterable is an async generator:
|
|
96
|
+
* ```coffeescript [specscript]
|
|
97
|
+
* callback(item any) -> Promise|undefined
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* If the iterable is an object with a `.forEach` method, the callback function signature is defined externally.
|
|
101
|
+
*
|
|
102
|
+
* If the iterable is a plain object:
|
|
103
|
+
* ```coffeescript [specscript]
|
|
104
|
+
* callback(item any, key string, iter Object) -> Promise|undefined
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* If the callback function is asynchronous, it is executed concurrently.
|
|
108
|
+
*
|
|
109
|
+
* ```javascript [playground]
|
|
110
|
+
* forEach([1, 2, 3, 4, 5], async number => {
|
|
111
|
+
* await new Promise(resolve => {
|
|
112
|
+
* setTimeout(resolve, 1000)
|
|
113
|
+
* })
|
|
114
|
+
* console.log(number)
|
|
115
|
+
* })
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* `forEach` works for arrays.
|
|
57
119
|
*
|
|
58
120
|
* ```javascript [playground]
|
|
59
|
-
* forEach([1, 2, 3, 4, 5], console.log) // 1 2 3 4 5
|
|
121
|
+
* forEach([1, 2, 3, 4, 5], num => console.log(num)) // 1 2 3 4 5
|
|
122
|
+
* ```
|
|
123
|
+
*
|
|
124
|
+
* `forEach` works for objects.
|
|
60
125
|
*
|
|
61
|
-
*
|
|
126
|
+
* ```javascript [playground]
|
|
127
|
+
* forEach({ a: 1, b: 2, c: 3 }, num => console.log(num)) // 1 2 3
|
|
62
128
|
* ```
|
|
63
129
|
*
|
|
64
130
|
* Omit the data argument for a composable API
|
|
@@ -81,6 +147,13 @@ const _forEach = function (collection, callback) {
|
|
|
81
147
|
* // 2
|
|
82
148
|
* // 3
|
|
83
149
|
* ```
|
|
150
|
+
*
|
|
151
|
+
* See also:
|
|
152
|
+
* * [pipe](/docs/pipe)
|
|
153
|
+
* * [tap](/docs/tap)
|
|
154
|
+
* * [all](/docs/all)
|
|
155
|
+
* * [forEach.series](/docs/forEach.series)
|
|
156
|
+
* * [map](/docs/map)
|
|
84
157
|
*/
|
|
85
158
|
const forEach = function (arg0, arg1) {
|
|
86
159
|
if (typeof arg0 == 'function') {
|
|
@@ -125,20 +198,34 @@ const _forEachSeries = function (collection, callback) {
|
|
|
125
198
|
*
|
|
126
199
|
* @synopsis
|
|
127
200
|
* ```coffeescript [specscript]
|
|
128
|
-
* type
|
|
201
|
+
* type Iterable = Array|Set|Map|Generator|AsyncGenerator|{ forEach: function }|Object
|
|
202
|
+
*
|
|
203
|
+
* type Callback = (
|
|
204
|
+
* item any,
|
|
205
|
+
* indexOrKey number|string|any,
|
|
206
|
+
* iter Iterable
|
|
207
|
+
* )=>Promise|undefined
|
|
129
208
|
*
|
|
130
|
-
* forEach
|
|
209
|
+
* forEach(iter Iterable, cb Callback) -> iter Promise|Iterable
|
|
131
210
|
*
|
|
132
|
-
* forEach
|
|
211
|
+
* forEach(cb Callback)(iter Iterable) -> iter Promise|Iterable
|
|
133
212
|
* ```
|
|
134
213
|
*
|
|
135
214
|
* @description
|
|
136
|
-
*
|
|
215
|
+
* [forEach](/docs/forEach) with serial execution.
|
|
137
216
|
*
|
|
138
217
|
* ```javascript [playground]
|
|
139
|
-
* forEach.series([1, 2, 3, 4, 5],
|
|
140
|
-
*
|
|
141
|
-
*
|
|
218
|
+
* forEach.series([1, 2, 3, 4, 5], async number => {
|
|
219
|
+
* await new Promise(resolve => {
|
|
220
|
+
* setTimeout(resolve, 1000)
|
|
221
|
+
* })
|
|
222
|
+
* console.log(number)
|
|
223
|
+
* // 1
|
|
224
|
+
* // 2
|
|
225
|
+
* // 3
|
|
226
|
+
* // 4
|
|
227
|
+
* // 5
|
|
228
|
+
* })
|
|
142
229
|
* ```
|
|
143
230
|
*
|
|
144
231
|
* Any promises passed in argument position are resolved for their values before further execution. This only applies to the eager version of the API.
|
|
@@ -149,6 +236,13 @@ const _forEachSeries = function (collection, callback) {
|
|
|
149
236
|
* // 2
|
|
150
237
|
* // 3
|
|
151
238
|
* ```
|
|
239
|
+
*
|
|
240
|
+
* See also:
|
|
241
|
+
* * [pipe](/docs/pipe)
|
|
242
|
+
* * [tap](/docs/tap)
|
|
243
|
+
* * [all](/docs/all)
|
|
244
|
+
* * [forEach](/docs/forEach)
|
|
245
|
+
* * [map](/docs/map)
|
|
152
246
|
*/
|
|
153
247
|
forEach.series = function forEachSeries(arg0, arg1) {
|
|
154
248
|
if (typeof arg0 == 'function') {
|
package/get.js
CHANGED
|
@@ -86,6 +86,15 @@ const _get = function (object, path, defaultValue) {
|
|
|
86
86
|
* ```javascript [playground]
|
|
87
87
|
* get(Promise.resolve({ a: 1 }), 'a').then(console.log) // 1
|
|
88
88
|
* ```
|
|
89
|
+
*
|
|
90
|
+
* See also:
|
|
91
|
+
* * [pipe](/docs/pipe)
|
|
92
|
+
* * [all](/docs/all)
|
|
93
|
+
* * [assign](/docs/assign)
|
|
94
|
+
* * [set](/docs/set)
|
|
95
|
+
* * [pick](/docs/pick)
|
|
96
|
+
* * [omit](/docs/omit)
|
|
97
|
+
* * [forEach](/docs/forEach)
|
|
89
98
|
*/
|
|
90
99
|
|
|
91
100
|
const get = function (arg0, arg1, arg2) {
|
package/gt.js
CHANGED
|
@@ -53,6 +53,15 @@ const greaterThan = require('./_internal/greaterThan')
|
|
|
53
53
|
* ```javascript [playground]
|
|
54
54
|
* gt(Promise.resolve({ a: 2, b: 1 }), get('a'), get('b')).then(console.log) // true
|
|
55
55
|
* ```
|
|
56
|
+
*
|
|
57
|
+
* See also:
|
|
58
|
+
* * [and](/docs/and)
|
|
59
|
+
* * [eq](/docs/eq)
|
|
60
|
+
* * [lt](/docs/lt)
|
|
61
|
+
* * [gte](/docs/gte)
|
|
62
|
+
* * [lte](/docs/lte)
|
|
63
|
+
* * [thunkify](/docs/thunkify)
|
|
64
|
+
*
|
|
56
65
|
*/
|
|
57
66
|
const gt = ComparisonOperator(greaterThan)
|
|
58
67
|
|
package/gte.js
CHANGED
|
@@ -55,6 +55,15 @@ const greaterThanOrEqual = require('./_internal/greaterThanOrEqual')
|
|
|
55
55
|
* ```javascript [playground]
|
|
56
56
|
* gte(Promise.resolve({ a: 1, b: 1 }), get('a'), get('b')).then(console.log) // true
|
|
57
57
|
* ```
|
|
58
|
+
*
|
|
59
|
+
* See also:
|
|
60
|
+
* * [and](/docs/and)
|
|
61
|
+
* * [eq](/docs/eq)
|
|
62
|
+
* * [lt](/docs/lt)
|
|
63
|
+
* * [gt](/docs/gt)
|
|
64
|
+
* * [lte](/docs/lte)
|
|
65
|
+
* * [thunkify](/docs/thunkify)
|
|
66
|
+
*
|
|
58
67
|
*/
|
|
59
68
|
const gte = ComparisonOperator(greaterThanOrEqual)
|
|
60
69
|
|