rubico 2.6.6 → 2.7.1
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/_internal/mapMapSeries.js +1 -0
- package/_internal/objectMapSeries.js +1 -0
- package/_internal/setMapSeries.js +1 -0
- 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 +1 -1
- package/dist/Transducer.es.min.js +1 -1
- package/dist/Transducer.js +1 -1
- package/dist/Transducer.min.js +1 -1
- package/dist/Transducer.mjs +1 -1
- package/dist/__.es.js +1 -1
- package/dist/__.es.min.js +1 -1
- package/dist/__.js +1 -1
- package/dist/__.min.js +1 -1
- package/dist/__.mjs +1 -1
- package/dist/all.es.js +1 -1
- package/dist/all.es.min.js +1 -1
- package/dist/all.js +1 -1
- package/dist/all.min.js +1 -1
- package/dist/all.mjs +1 -1
- package/dist/always.es.js +1 -1
- package/dist/always.es.min.js +1 -1
- package/dist/always.js +1 -1
- package/dist/always.min.js +1 -1
- package/dist/always.mjs +1 -1
- package/dist/and.es.js +1 -1
- package/dist/and.es.min.js +1 -1
- package/dist/and.js +1 -1
- package/dist/and.min.js +1 -1
- package/dist/and.mjs +1 -1
- package/dist/assign.es.js +1 -1
- package/dist/assign.es.min.js +1 -1
- package/dist/assign.js +1 -1
- package/dist/assign.min.js +1 -1
- package/dist/assign.mjs +1 -1
- package/dist/compose.es.js +5 -1
- package/dist/compose.es.min.js +2 -2
- package/dist/compose.js +5 -1
- package/dist/compose.min.js +2 -2
- package/dist/compose.mjs +5 -1
- package/dist/curry.es.js +1 -1
- package/dist/curry.es.min.js +1 -1
- package/dist/curry.js +1 -1
- package/dist/curry.min.js +1 -1
- package/dist/curry.mjs +1 -1
- package/dist/eq.es.js +1 -1
- package/dist/eq.es.min.js +1 -1
- package/dist/eq.js +1 -1
- package/dist/eq.min.js +1 -1
- package/dist/eq.mjs +1 -1
- package/dist/every.es.js +1 -1
- package/dist/every.es.min.js +1 -1
- package/dist/every.js +1 -1
- package/dist/every.min.js +1 -1
- package/dist/every.mjs +1 -1
- package/dist/filter.es.js +1 -1
- package/dist/filter.es.min.js +1 -1
- package/dist/filter.js +1 -1
- package/dist/filter.min.js +1 -1
- package/dist/filter.mjs +1 -1
- package/dist/flatMap.es.js +1 -1
- package/dist/flatMap.es.min.js +1 -1
- package/dist/flatMap.js +1 -1
- package/dist/flatMap.min.js +1 -1
- package/dist/flatMap.mjs +1 -1
- package/dist/forEach.es.js +1 -1
- package/dist/forEach.es.min.js +1 -1
- package/dist/forEach.js +1 -1
- package/dist/forEach.min.js +1 -1
- package/dist/forEach.mjs +1 -1
- package/dist/get.es.js +1 -1
- package/dist/get.es.min.js +1 -1
- package/dist/get.js +1 -1
- package/dist/get.min.js +1 -1
- package/dist/get.mjs +1 -1
- package/dist/gt.es.js +1 -1
- package/dist/gt.es.min.js +1 -1
- package/dist/gt.js +1 -1
- package/dist/gt.min.js +1 -1
- package/dist/gt.mjs +1 -1
- package/dist/gte.es.js +1 -1
- package/dist/gte.es.min.js +1 -1
- package/dist/gte.js +1 -1
- package/dist/gte.min.js +1 -1
- package/dist/gte.mjs +1 -1
- package/dist/lt.es.js +1 -1
- package/dist/lt.es.min.js +1 -1
- package/dist/lt.js +1 -1
- package/dist/lt.min.js +1 -1
- package/dist/lt.mjs +1 -1
- package/dist/lte.es.js +1 -1
- package/dist/lte.es.min.js +1 -1
- package/dist/lte.js +1 -1
- package/dist/lte.min.js +1 -1
- package/dist/lte.mjs +1 -1
- package/dist/map.es.js +1 -1
- package/dist/map.es.min.js +1 -1
- package/dist/map.js +1 -1
- package/dist/map.min.js +1 -1
- package/dist/map.mjs +1 -1
- package/dist/not.es.js +1 -1
- package/dist/not.es.min.js +1 -1
- package/dist/not.js +1 -1
- package/dist/not.min.js +1 -1
- package/dist/not.mjs +1 -1
- package/dist/omit.es.js +1 -1
- package/dist/omit.es.min.js +1 -1
- package/dist/omit.js +1 -1
- package/dist/omit.min.js +1 -1
- package/dist/omit.mjs +1 -1
- package/dist/or.es.js +1 -1
- package/dist/or.es.min.js +1 -1
- package/dist/or.js +1 -1
- package/dist/or.min.js +1 -1
- package/dist/or.mjs +1 -1
- package/dist/pick.es.js +1 -1
- package/dist/pick.es.min.js +1 -1
- package/dist/pick.js +1 -1
- package/dist/pick.min.js +1 -1
- package/dist/pick.mjs +1 -1
- package/dist/pipe.es.js +5 -1
- package/dist/pipe.es.min.js +2 -2
- package/dist/pipe.js +5 -1
- package/dist/pipe.min.js +2 -2
- package/dist/pipe.mjs +5 -1
- package/dist/reduce.es.js +8 -8
- package/dist/reduce.es.min.js +1 -1
- package/dist/reduce.js +8 -8
- package/dist/reduce.min.js +1 -1
- package/dist/reduce.mjs +8 -8
- package/dist/rubico.es.js +23 -11
- package/dist/rubico.es.min.js +2 -2
- package/dist/rubico.global.js +23 -11
- package/dist/rubico.global.min.js +2 -2
- package/dist/rubico.js +23 -11
- package/dist/rubico.min.js +2 -2
- package/dist/rubico.mjs +23 -11
- package/dist/set.es.js +1 -1
- package/dist/set.es.min.js +1 -1
- package/dist/set.js +1 -1
- package/dist/set.min.js +1 -1
- package/dist/set.mjs +1 -1
- package/dist/some.es.js +1 -1
- package/dist/some.es.min.js +1 -1
- package/dist/some.js +1 -1
- package/dist/some.min.js +1 -1
- package/dist/some.mjs +1 -1
- package/dist/switchCase.es.js +1 -1
- package/dist/switchCase.es.min.js +1 -1
- package/dist/switchCase.js +1 -1
- package/dist/switchCase.min.js +1 -1
- package/dist/switchCase.mjs +1 -1
- package/dist/tap.es.js +1 -1
- package/dist/tap.es.min.js +1 -1
- package/dist/tap.js +1 -1
- package/dist/tap.min.js +1 -1
- package/dist/tap.mjs +1 -1
- package/dist/thunkify.es.js +8 -4
- package/dist/thunkify.es.min.js +2 -2
- package/dist/thunkify.js +8 -4
- package/dist/thunkify.min.js +2 -2
- package/dist/thunkify.mjs +8 -4
- package/dist/transform.es.js +1 -1
- package/dist/transform.es.min.js +1 -1
- package/dist/transform.js +1 -1
- package/dist/transform.min.js +1 -1
- package/dist/transform.mjs +1 -1
- package/dist/tryCatch.es.js +1 -1
- package/dist/tryCatch.es.min.js +1 -1
- package/dist/tryCatch.js +1 -1
- package/dist/tryCatch.min.js +1 -1
- package/dist/tryCatch.mjs +1 -1
- package/dist/x/append.es.js +1 -1
- package/dist/x/append.es.min.js +1 -1
- package/dist/x/append.js +1 -1
- package/dist/x/append.min.js +1 -1
- package/dist/x/append.mjs +1 -1
- package/dist/x/callProp.es.js +1 -1
- package/dist/x/callProp.es.min.js +1 -1
- package/dist/x/callProp.js +1 -1
- package/dist/x/callProp.min.js +1 -1
- package/dist/x/callProp.mjs +1 -1
- package/dist/x/defaultsDeep.es.js +1 -1
- package/dist/x/defaultsDeep.es.min.js +1 -1
- package/dist/x/defaultsDeep.js +1 -1
- package/dist/x/defaultsDeep.min.js +1 -1
- package/dist/x/defaultsDeep.mjs +1 -1
- package/dist/x/differenceWith.es.js +1 -1
- package/dist/x/differenceWith.es.min.js +1 -1
- package/dist/x/differenceWith.js +1 -1
- package/dist/x/differenceWith.min.js +1 -1
- package/dist/x/differenceWith.mjs +1 -1
- package/dist/x/filterOut.es.js +1 -1
- package/dist/x/filterOut.es.min.js +1 -1
- package/dist/x/filterOut.js +1 -1
- package/dist/x/filterOut.min.js +1 -1
- package/dist/x/filterOut.mjs +1 -1
- package/dist/x/find.es.js +1 -1
- package/dist/x/find.es.min.js +1 -1
- package/dist/x/find.js +1 -1
- package/dist/x/find.min.js +1 -1
- package/dist/x/find.mjs +1 -1
- package/dist/x/findIndex.es.js +1 -1
- package/dist/x/findIndex.es.min.js +1 -1
- package/dist/x/findIndex.js +1 -1
- package/dist/x/findIndex.min.js +1 -1
- package/dist/x/findIndex.mjs +1 -1
- package/dist/x/first.es.js +1 -1
- package/dist/x/first.es.min.js +1 -1
- package/dist/x/first.js +1 -1
- package/dist/x/first.min.js +1 -1
- package/dist/x/first.mjs +1 -1
- package/dist/x/flatten.es.js +1 -1
- package/dist/x/flatten.es.min.js +1 -1
- package/dist/x/flatten.js +1 -1
- package/dist/x/flatten.min.js +1 -1
- package/dist/x/flatten.mjs +1 -1
- package/dist/x/groupBy.es.js +8 -8
- package/dist/x/groupBy.es.min.js +1 -1
- package/dist/x/groupBy.js +8 -8
- package/dist/x/groupBy.min.js +1 -1
- package/dist/x/groupBy.mjs +8 -8
- package/dist/x/has.es.js +1 -1
- package/dist/x/has.es.min.js +1 -1
- package/dist/x/has.js +1 -1
- package/dist/x/has.min.js +1 -1
- package/dist/x/has.mjs +1 -1
- package/dist/x/identity.es.js +1 -1
- package/dist/x/identity.es.min.js +1 -1
- package/dist/x/identity.js +1 -1
- package/dist/x/identity.min.js +1 -1
- package/dist/x/identity.mjs +1 -1
- package/dist/x/includes.es.js +1 -1
- package/dist/x/includes.es.min.js +1 -1
- package/dist/x/includes.js +1 -1
- package/dist/x/includes.min.js +1 -1
- package/dist/x/includes.mjs +1 -1
- package/dist/x/isDeepEqual.es.js +1 -1
- package/dist/x/isDeepEqual.es.min.js +1 -1
- package/dist/x/isDeepEqual.js +1 -1
- package/dist/x/isDeepEqual.min.js +1 -1
- package/dist/x/isDeepEqual.mjs +1 -1
- package/dist/x/isEmpty.es.js +1 -1
- package/dist/x/isEmpty.es.min.js +1 -1
- package/dist/x/isEmpty.js +1 -1
- package/dist/x/isEmpty.min.js +1 -1
- package/dist/x/isEmpty.mjs +1 -1
- package/dist/x/isEqual.es.js +1 -1
- package/dist/x/isEqual.es.min.js +1 -1
- package/dist/x/isEqual.js +1 -1
- package/dist/x/isEqual.min.js +1 -1
- package/dist/x/isEqual.mjs +1 -1
- package/dist/x/isFunction.es.js +1 -1
- package/dist/x/isFunction.es.min.js +1 -1
- package/dist/x/isFunction.js +1 -1
- package/dist/x/isFunction.min.js +1 -1
- package/dist/x/isFunction.mjs +1 -1
- package/dist/x/isIn.es.js +1 -1
- package/dist/x/isIn.es.min.js +1 -1
- package/dist/x/isIn.js +1 -1
- package/dist/x/isIn.min.js +1 -1
- package/dist/x/isIn.mjs +1 -1
- package/dist/x/isObject.es.js +1 -1
- package/dist/x/isObject.es.min.js +1 -1
- package/dist/x/isObject.js +1 -1
- package/dist/x/isObject.min.js +1 -1
- package/dist/x/isObject.mjs +1 -1
- package/dist/x/isString.es.js +1 -1
- package/dist/x/isString.es.min.js +1 -1
- package/dist/x/isString.js +1 -1
- package/dist/x/isString.min.js +1 -1
- package/dist/x/isString.mjs +1 -1
- package/dist/x/keys.es.js +1 -1
- package/dist/x/keys.es.min.js +1 -1
- package/dist/x/keys.js +1 -1
- package/dist/x/keys.min.js +1 -1
- package/dist/x/keys.mjs +1 -1
- package/dist/x/last.es.js +1 -1
- package/dist/x/last.es.min.js +1 -1
- package/dist/x/last.js +1 -1
- package/dist/x/last.min.js +1 -1
- package/dist/x/last.mjs +1 -1
- package/dist/x/maxBy.es.js +1 -1
- package/dist/x/maxBy.es.min.js +1 -1
- package/dist/x/maxBy.js +1 -1
- package/dist/x/maxBy.min.js +1 -1
- package/dist/x/maxBy.mjs +1 -1
- package/dist/x/noop.es.js +1 -1
- package/dist/x/noop.es.min.js +1 -1
- package/dist/x/noop.js +1 -1
- package/dist/x/noop.min.js +1 -1
- package/dist/x/noop.mjs +1 -1
- package/dist/x/pluck.es.js +1 -1
- package/dist/x/pluck.es.min.js +1 -1
- package/dist/x/pluck.js +1 -1
- package/dist/x/pluck.min.js +1 -1
- package/dist/x/pluck.mjs +1 -1
- package/dist/x/prepend.es.js +1 -1
- package/dist/x/prepend.es.min.js +1 -1
- package/dist/x/prepend.js +1 -1
- package/dist/x/prepend.min.js +1 -1
- package/dist/x/prepend.mjs +1 -1
- package/dist/x/size.es.js +1 -1
- package/dist/x/size.es.min.js +1 -1
- package/dist/x/size.js +1 -1
- package/dist/x/size.min.js +1 -1
- package/dist/x/size.mjs +1 -1
- package/dist/x/trace.es.js +1 -1
- package/dist/x/trace.es.min.js +1 -1
- package/dist/x/trace.js +1 -1
- package/dist/x/trace.min.js +1 -1
- package/dist/x/trace.mjs +1 -1
- package/dist/x/unionWith.es.js +1 -1
- package/dist/x/unionWith.es.min.js +1 -1
- package/dist/x/unionWith.js +1 -1
- package/dist/x/unionWith.min.js +1 -1
- package/dist/x/unionWith.mjs +1 -1
- package/dist/x/uniq.es.js +1 -1
- package/dist/x/uniq.es.min.js +1 -1
- package/dist/x/uniq.js +1 -1
- package/dist/x/uniq.min.js +1 -1
- package/dist/x/uniq.mjs +1 -1
- package/dist/x/unless.es.js +1 -1
- package/dist/x/unless.es.min.js +1 -1
- package/dist/x/unless.js +1 -1
- package/dist/x/unless.min.js +1 -1
- package/dist/x/unless.mjs +1 -1
- package/dist/x/values.es.js +1 -1
- package/dist/x/values.es.min.js +1 -1
- package/dist/x/values.js +1 -1
- package/dist/x/values.min.js +1 -1
- package/dist/x/values.mjs +1 -1
- package/dist/x/when.es.js +1 -1
- package/dist/x/when.es.min.js +1 -1
- package/dist/x/when.js +1 -1
- package/dist/x/when.min.js +1 -1
- package/dist/x/when.mjs +1 -1
- package/eq.d.ts +6 -6
- package/eq.js +14 -6
- package/es.js +23 -11
- package/every.js +19 -5
- package/filter.js +59 -15
- package/flatMap.js +32 -23
- package/forEach.js +107 -13
- package/get.js +9 -0
- package/gt.js +9 -0
- package/gte.js +9 -0
- package/index.js +23 -11
- package/lte.js +9 -0
- package/map.js +153 -36
- 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 -1
- package/pick.js +9 -0
- package/pipe.js +30 -3
- package/reduce.js +111 -30
- package/set.js +9 -0
- package/some.js +17 -3
- package/switchCase.js +6 -0
- package/tap.js +18 -0
- package/thunkify.js +30 -5
- package/transform.js +105 -29
- 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
|
@@ -90,38 +90,74 @@ const _filter = function (value, predicate) {
|
|
|
90
90
|
*
|
|
91
91
|
* @synopsis
|
|
92
92
|
* ```coffeescript [specscript]
|
|
93
|
-
* type Filterable = Array|
|
|
93
|
+
* type Filterable = Array|Set|Map|Generator|AsyncGenerator|{ filter: function }|Object
|
|
94
94
|
*
|
|
95
95
|
* type Predicate = (
|
|
96
96
|
* value any,
|
|
97
|
-
* indexOrKey number|string,
|
|
98
|
-
*
|
|
97
|
+
* indexOrKey number|string|any,
|
|
98
|
+
* filt Filterable,
|
|
99
99
|
* )=>boolean
|
|
100
100
|
*
|
|
101
|
-
* filter(
|
|
102
|
-
* filter(predicate Predicate)(
|
|
101
|
+
* filter(filt Filterable, predicate Predicate) -> result Promise|Filterable
|
|
102
|
+
* filter(predicate Predicate)(filt Filterable) -> result Promise|Filterable
|
|
103
103
|
* ```
|
|
104
104
|
*
|
|
105
105
|
* @description
|
|
106
|
-
*
|
|
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
107
|
*
|
|
108
|
-
* The following data types are considered
|
|
108
|
+
* The following data types are considered to be filterables:
|
|
109
109
|
* * `array`
|
|
110
|
-
* * `object`
|
|
111
110
|
* * `set`
|
|
111
|
+
* * `map`
|
|
112
112
|
* * `generator`
|
|
113
113
|
* * `async generator`
|
|
114
|
+
* * `object with .filter method`
|
|
115
|
+
* * `object`
|
|
114
116
|
*
|
|
115
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.
|
|
116
118
|
*
|
|
117
119
|
* ```javascript
|
|
118
120
|
* const predicate = function (item) {
|
|
119
|
-
* // condition is
|
|
121
|
+
* // condition is the boolean result of the predicate test on item
|
|
120
122
|
* return condition
|
|
121
123
|
* }
|
|
122
124
|
* ```
|
|
123
125
|
*
|
|
124
|
-
*
|
|
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
|
+
* ```
|
|
147
|
+
*
|
|
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.
|
|
154
|
+
*
|
|
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.
|
|
125
161
|
*
|
|
126
162
|
* ```javascript [playground]
|
|
127
163
|
* const isOdd = number => number % 2 == 1
|
|
@@ -132,7 +168,7 @@ const _filter = function (value, predicate) {
|
|
|
132
168
|
* console.log(result) // [1, 3, 5]
|
|
133
169
|
* ```
|
|
134
170
|
*
|
|
135
|
-
*
|
|
171
|
+
* If the predicate is asynchronous, the returned promise is concurrently resolved for its boolean condition before continuing with the filtering operation.
|
|
136
172
|
*
|
|
137
173
|
* ```javascript [playground]
|
|
138
174
|
* const asyncIsOdd = async number => number % 2 == 1
|
|
@@ -143,7 +179,7 @@ const _filter = function (value, predicate) {
|
|
|
143
179
|
* promise.then(console.log) // [1, 3, 5]
|
|
144
180
|
* ```
|
|
145
181
|
*
|
|
146
|
-
*
|
|
182
|
+
* `filter` applies the predicate function to just the values of an object.
|
|
147
183
|
*
|
|
148
184
|
* ```javascript [playground]
|
|
149
185
|
* const isOdd = number => number % 2 == 1
|
|
@@ -154,7 +190,7 @@ const _filter = function (value, predicate) {
|
|
|
154
190
|
* console.log(result) // { a: 1, c: 3, e: 5 }
|
|
155
191
|
* ```
|
|
156
192
|
*
|
|
157
|
-
*
|
|
193
|
+
* `filter` applies the predicate to the values of the entries of a map.
|
|
158
194
|
*
|
|
159
195
|
* ```javascript [playground]
|
|
160
196
|
* const isOdd = number => number % 2 == 1
|
|
@@ -165,7 +201,7 @@ const _filter = function (value, predicate) {
|
|
|
165
201
|
* console.log(result) // Map(3) { 'a' => 1, 'c' => 3, 'e' => 5 }
|
|
166
202
|
* ```
|
|
167
203
|
*
|
|
168
|
-
* For generators, `filter` returns a lazily filtered generator. All values that are normally yielded by the generator that test
|
|
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.
|
|
169
205
|
*
|
|
170
206
|
* ```javascript [playground]
|
|
171
207
|
* const isOdd = number => number % 2 == 1
|
|
@@ -192,7 +228,7 @@ const _filter = function (value, predicate) {
|
|
|
192
228
|
* }
|
|
193
229
|
* ```
|
|
194
230
|
*
|
|
195
|
-
* 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
|
|
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.
|
|
196
232
|
*
|
|
197
233
|
* ```javascript [playground]
|
|
198
234
|
* const asyncIsOdd = async number => number % 2 == 1
|
|
@@ -229,6 +265,14 @@ const _filter = function (value, predicate) {
|
|
|
229
265
|
* // [1, 3, 5]
|
|
230
266
|
* ```
|
|
231
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
|
+
*
|
|
232
276
|
* @execution concurrent
|
|
233
277
|
*
|
|
234
278
|
* @transducing
|
package/flatMap.js
CHANGED
|
@@ -15,7 +15,7 @@ const __ = require('./_internal/placeholder')
|
|
|
15
15
|
*
|
|
16
16
|
* @synopsis
|
|
17
17
|
* ```coffeescript [specscript]
|
|
18
|
-
* type Monad = Array|String|Set|
|
|
18
|
+
* type Monad = Array|String|Set|Generator|AsyncGenerator
|
|
19
19
|
* type Iterable = Iterable|AsyncIterable|Object<value any>
|
|
20
20
|
*
|
|
21
21
|
* _flatMap(
|
|
@@ -64,35 +64,36 @@ const _flatMap = function (value, flatMapper) {
|
|
|
64
64
|
*
|
|
65
65
|
* @synopsis
|
|
66
66
|
* ```coffeescript [specscript]
|
|
67
|
-
* type Monad = Array|String|Set|
|
|
68
|
-
* type Flattenable = Iterable|AsyncIterable|Object<value any>
|
|
67
|
+
* type Monad = Array|String|Set|Generator|AsyncGenerator|{ flatMap: string }|{ chain: string }|Object
|
|
69
68
|
*
|
|
70
69
|
* type FlatMapper = (
|
|
71
70
|
* item any,
|
|
72
|
-
* indexOrKey string,
|
|
73
|
-
*
|
|
74
|
-
* )=>Promise|
|
|
71
|
+
* indexOrKey number|string|any,
|
|
72
|
+
* mon Monad
|
|
73
|
+
* )=>Promise|Monad|any
|
|
75
74
|
*
|
|
76
|
-
* flatMap(
|
|
77
|
-
* flatMap(flatMapper FlatMapper)(
|
|
75
|
+
* flatMap(mon Monad, flatMapper FlatMapper) -> result Promise|Monad
|
|
76
|
+
* flatMap(flatMapper FlatMapper)(mon Monad) -> result Promise|Monad
|
|
78
77
|
* ```
|
|
79
78
|
*
|
|
80
79
|
* @description
|
|
81
|
-
* Applies a flatMapper function
|
|
80
|
+
* Applies a flatMapper function to each item of a monad, returning a monad of the same type.
|
|
82
81
|
*
|
|
83
|
-
*
|
|
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
|
+
*
|
|
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.
|
|
85
|
+
*
|
|
86
|
+
* The following data types are considered to be monads, all are flattenable into other monads:
|
|
84
87
|
* * `array`
|
|
85
88
|
* * `string`
|
|
86
89
|
* * `set`
|
|
87
|
-
* * `
|
|
88
|
-
* * `async
|
|
90
|
+
* * `genreator`
|
|
91
|
+
* * `async generator`
|
|
92
|
+
* * `object with .flatMap method`
|
|
93
|
+
* * `object with .chain method`
|
|
94
|
+
* * `object`
|
|
89
95
|
*
|
|
90
|
-
*
|
|
91
|
-
* * `iterable` - the execution result is iterated and each item is added to the result collection
|
|
92
|
-
* * `async iterable` - the execution result is asynchronously iterated and each item is added to the result collection
|
|
93
|
-
* * `object` - the execution result values are added to the result collection
|
|
94
|
-
*
|
|
95
|
-
* `flatMap` can flatten various data types.
|
|
96
|
+
* `flatMap` flattens various data types.
|
|
96
97
|
*
|
|
97
98
|
* ```javascript [playground]
|
|
98
99
|
* const identity = value => value
|
|
@@ -100,15 +101,15 @@ const _flatMap = function (value, flatMapper) {
|
|
|
100
101
|
* flatMap(identity)([
|
|
101
102
|
* [1, 1], // array
|
|
102
103
|
* new Set([2, 2]), // set
|
|
103
|
-
* (function* () { yield 3; yield 3 })(),
|
|
104
|
-
* (async function* () { yield 7; yield 7 })(),
|
|
104
|
+
* (function* () { yield 3; yield 3 })(),
|
|
105
|
+
* (async function* () { yield 7; yield 7 })(),
|
|
105
106
|
* { a: 5, b: 5 }, // object
|
|
106
107
|
* new Uint8Array([8]), // typedArray
|
|
107
108
|
* ]).then(console.log)
|
|
108
109
|
* // [1, 1, 2, 3, 3, 5, 5, 8, 7, 7]
|
|
109
110
|
* ```
|
|
110
111
|
*
|
|
111
|
-
*
|
|
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.
|
|
112
113
|
*
|
|
113
114
|
* ```javascript [playground]
|
|
114
115
|
* const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
|
|
@@ -129,12 +130,12 @@ const _flatMap = function (value, flatMapper) {
|
|
|
129
130
|
* yield message
|
|
130
131
|
* }
|
|
131
132
|
*
|
|
132
|
-
* // async
|
|
133
|
+
* // values from async generators are muxed
|
|
133
134
|
* flatMap(['foo', 'bar', 'baz'], asyncRepeat3).then(console.log)
|
|
134
135
|
* // ['foo', 'bar', 'baz', 'foo', 'bar', 'baz', 'foo', 'bar', 'baz']
|
|
135
136
|
* ```
|
|
136
137
|
*
|
|
137
|
-
*
|
|
138
|
+
* `flatMap` applies the flatMapper function to each item of an array, flattening the results into a new array.
|
|
138
139
|
*
|
|
139
140
|
* ```javascript [playground]
|
|
140
141
|
* const duplicate = value => [value, value]
|
|
@@ -161,6 +162,14 @@ const _flatMap = function (value, flatMapper) {
|
|
|
161
162
|
* // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
|
|
162
163
|
* ```
|
|
163
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
|
+
*
|
|
164
173
|
* @execution concurrent
|
|
165
174
|
*
|
|
166
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
|
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* rubico v2.
|
|
2
|
+
* rubico v2.7.1
|
|
3
3
|
* https://github.com/a-synchronous/rubico
|
|
4
4
|
* (c) 2019-2025 Richard Tong
|
|
5
5
|
* rubico may be freely distributed under the MIT license.
|
|
@@ -73,6 +73,10 @@ const curry2 = function (baseFunc, arg0, arg1) {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
const pipe = function (...args) {
|
|
76
|
+
if (typeof args[0] == 'function') {
|
|
77
|
+
return args.reduce(funcConcat)
|
|
78
|
+
}
|
|
79
|
+
|
|
76
80
|
const funcs = args.pop()
|
|
77
81
|
const pipeline = funcs.reduce(funcConcat)
|
|
78
82
|
|
|
@@ -88,6 +92,10 @@ const pipe = function (...args) {
|
|
|
88
92
|
}
|
|
89
93
|
|
|
90
94
|
const compose = function (...args) {
|
|
95
|
+
if (typeof args[0] == 'function') {
|
|
96
|
+
return args.reduceRight(funcConcat)
|
|
97
|
+
}
|
|
98
|
+
|
|
91
99
|
const funcs = args.pop()
|
|
92
100
|
const composition = funcs.reduceRight(funcConcat)
|
|
93
101
|
|
|
@@ -1745,17 +1753,17 @@ const genericReduce = function (collection, reducer, result) {
|
|
|
1745
1753
|
: reducer(result, collection)
|
|
1746
1754
|
}
|
|
1747
1755
|
|
|
1748
|
-
// _reduce(collection any, reducer function,
|
|
1749
|
-
const _reduce = function (collection, reducer,
|
|
1750
|
-
if (typeof
|
|
1751
|
-
const actualInitialValue =
|
|
1756
|
+
// _reduce(collection any, reducer function, initial function|any) -> Promise
|
|
1757
|
+
const _reduce = function (collection, reducer, initial) {
|
|
1758
|
+
if (typeof initial == 'function') {
|
|
1759
|
+
const actualInitialValue = initial(collection)
|
|
1752
1760
|
return isPromise(actualInitialValue)
|
|
1753
1761
|
? actualInitialValue.then(curry3(genericReduce, collection, reducer, __))
|
|
1754
1762
|
: genericReduce(collection, reducer, actualInitialValue)
|
|
1755
1763
|
}
|
|
1756
|
-
return isPromise(
|
|
1757
|
-
?
|
|
1758
|
-
: genericReduce(collection, reducer,
|
|
1764
|
+
return isPromise(initial)
|
|
1765
|
+
? initial.then(curry3(genericReduce, collection, reducer, __))
|
|
1766
|
+
: genericReduce(collection, reducer, initial)
|
|
1759
1767
|
}
|
|
1760
1768
|
|
|
1761
1769
|
const reduce = function (...args) {
|
|
@@ -3274,11 +3282,15 @@ const omit = function (arg0, arg1) {
|
|
|
3274
3282
|
return _omit(arg0, arg1)
|
|
3275
3283
|
}
|
|
3276
3284
|
|
|
3277
|
-
const thunkify = (func, ...args)
|
|
3285
|
+
const thunkify = function (func, ...args) {
|
|
3278
3286
|
if (areAnyValuesPromises(args)) {
|
|
3279
|
-
return promiseAll(args).then(
|
|
3287
|
+
return promiseAll(args).then(resolvedArgs => function thunk() {
|
|
3288
|
+
return func(...resolvedArgs)
|
|
3289
|
+
})
|
|
3290
|
+
}
|
|
3291
|
+
return function thunk() {
|
|
3292
|
+
return func(...args)
|
|
3280
3293
|
}
|
|
3281
|
-
return func(...args)
|
|
3282
3294
|
}
|
|
3283
3295
|
|
|
3284
3296
|
const curry = (func, ...args) => curryArity(func.length, func, args)
|
package/lte.js
CHANGED
|
@@ -53,6 +53,15 @@ const lessThanOrEqual = require('./_internal/lessThanOrEqual')
|
|
|
53
53
|
* ```javascript [playground]
|
|
54
54
|
* lte(Promise.resolve({ a: 1, 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
|
+
* * [gt](/docs/gt)
|
|
62
|
+
* * [gte](/docs/gte)
|
|
63
|
+
* * [thunkify](/docs/thunkify)
|
|
64
|
+
*
|
|
56
65
|
*/
|
|
57
66
|
const lte = ComparisonOperator(lessThanOrEqual)
|
|
58
67
|
|