rubico 2.8.6 → 2.11.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/README.md +1 -1
- package/_internal/FilteringAsyncIterator.js +74 -23
- package/_internal/FlatMappingAsyncIterator.js +41 -30
- package/_internal/LinkedList.js +54 -0
- package/_internal/LinkedList.test.js +34 -0
- package/_internal/MappingAsyncIterator.js +65 -15
- package/_internal/SerialMappingAsyncIterator.js +79 -0
- package/_internal/iteratorFind.js +0 -2
- package/_internal/iteratorForEachSeries.js +1 -1
- package/_internal/objectFlatten.js +4 -1
- package/all.js +7 -8
- package/and.js +1 -1
- package/assign.js +1 -1
- package/compose.js +1 -1
- package/curry.js +1 -1
- 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 +1 -1
- package/dist/compose.es.min.js +1 -1
- package/dist/compose.js +1 -1
- package/dist/compose.min.js +1 -1
- package/dist/compose.mjs +1 -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 +4 -4
- package/dist/filter.es.min.js +2 -2
- package/dist/filter.js +4 -4
- package/dist/filter.min.js +2 -2
- package/dist/filter.mjs +4 -4
- package/dist/flatMap.es.js +44 -28
- package/dist/flatMap.es.min.js +2 -2
- package/dist/flatMap.js +44 -28
- package/dist/flatMap.min.js +2 -2
- package/dist/flatMap.mjs +44 -28
- package/dist/forEach.es.js +6 -6
- package/dist/forEach.es.min.js +2 -2
- package/dist/forEach.js +6 -6
- package/dist/forEach.min.js +2 -2
- package/dist/forEach.mjs +6 -6
- 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 +187 -39
- package/dist/map.es.min.js +2 -2
- package/dist/map.js +187 -39
- package/dist/map.min.js +2 -2
- package/dist/map.mjs +187 -39
- 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 +1 -1
- package/dist/pipe.es.min.js +1 -1
- package/dist/pipe.js +1 -1
- package/dist/pipe.min.js +1 -1
- package/dist/pipe.mjs +1 -1
- package/dist/reduce.es.js +1 -1
- package/dist/reduce.es.min.js +1 -1
- package/dist/reduce.js +1 -1
- package/dist/reduce.min.js +1 -1
- package/dist/reduce.mjs +1 -1
- package/dist/rubico.es.js +233 -78
- package/dist/rubico.es.min.js +2 -2
- package/dist/rubico.global.js +233 -78
- package/dist/rubico.global.min.js +2 -2
- package/dist/rubico.js +233 -78
- package/dist/rubico.min.js +2 -2
- package/dist/rubico.mjs +233 -78
- 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 +1 -1
- package/dist/thunkify.es.min.js +1 -1
- package/dist/thunkify.js +1 -1
- package/dist/thunkify.min.js +1 -1
- package/dist/thunkify.mjs +1 -1
- 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 +4 -4
- package/dist/x/filterOut.es.min.js +2 -2
- package/dist/x/filterOut.js +4 -4
- package/dist/x/filterOut.min.js +2 -2
- package/dist/x/filterOut.mjs +4 -4
- package/dist/x/find.es.js +1 -3
- package/dist/x/find.es.min.js +1 -1
- package/dist/x/find.js +1 -3
- package/dist/x/find.min.js +1 -1
- package/dist/x/find.mjs +1 -3
- 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 +44 -28
- package/dist/x/flatten.es.min.js +2 -2
- package/dist/x/flatten.js +44 -28
- package/dist/x/flatten.min.js +2 -2
- package/dist/x/flatten.mjs +44 -28
- package/dist/x/groupBy.es.js +1 -1
- package/dist/x/groupBy.es.min.js +1 -1
- package/dist/x/groupBy.js +1 -1
- package/dist/x/groupBy.min.js +1 -1
- package/dist/x/groupBy.mjs +1 -1
- 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 +187 -39
- package/dist/x/pluck.es.min.js +2 -2
- package/dist/x/pluck.js +187 -39
- package/dist/x/pluck.min.js +2 -2
- package/dist/x/pluck.mjs +187 -39
- 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.js +2 -2
- package/es.js +233 -78
- package/every.js +2 -2
- package/filter.js +22 -23
- package/flatMap.js +61 -54
- package/forEach.js +33 -56
- package/get.js +5 -3
- package/gt.js +2 -2
- package/gte.js +2 -2
- package/index.js +233 -78
- package/lt.js +2 -2
- package/lte.js +2 -2
- package/map.js +117 -154
- package/monad/README.md +1 -1
- package/not.js +1 -1
- package/omit.js +22 -19
- package/or.js +1 -1
- package/package.json +1 -1
- package/pick.js +14 -11
- package/pipe.js +1 -1
- package/reduce.js +1 -1
- package/set.js +17 -18
- package/some.js +2 -2
- package/switchCase.js +12 -4
- package/tap.js +6 -4
- package/transform.js +1 -1
- package/tryCatch.js +1 -1
- package/x/defaultsDeep.js +1 -1
- package/x/defaultsDeep.test.js +1 -1
- package/_internal/NextIteration.js +0 -12
- package/_internal/generatorFunctionFilter.js +0 -28
- package/_internal/iterationMap.js +0 -27
package/flatMap.js
CHANGED
|
@@ -20,7 +20,7 @@ const __ = require('./_internal/placeholder')
|
|
|
20
20
|
*
|
|
21
21
|
* _flatMap(
|
|
22
22
|
* m Monad,
|
|
23
|
-
* flatMapper (
|
|
23
|
+
* flatMapper (item any)=>Promise|Iterable,
|
|
24
24
|
* ) -> result Promise|Monad
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
@@ -64,66 +64,84 @@ const _flatMap = function (value, flatMapper) {
|
|
|
64
64
|
*
|
|
65
65
|
* @synopsis
|
|
66
66
|
* ```coffeescript [specscript]
|
|
67
|
-
* type Monad = Array|
|
|
67
|
+
* type Monad = Array|string|Set|Generator|AsyncGenerator|{ flatMap: string }|{ chain: string }|Object
|
|
68
68
|
*
|
|
69
69
|
* type SyncOrAsyncFlatMapper = (
|
|
70
|
-
*
|
|
70
|
+
* item any,
|
|
71
71
|
* indexOrKey number|string|any,
|
|
72
72
|
* monad Monad
|
|
73
|
-
* )=>Promise|Monad|any
|
|
73
|
+
* )=>(flatMappedItem Promise|Monad|any)
|
|
74
74
|
*
|
|
75
|
-
* flatMapper SyncOrAsyncFlatMapper
|
|
76
|
-
*
|
|
77
|
-
* flatMap(monad Promise|Monad, flatMapper) -> result Promise|Monad
|
|
78
|
-
* flatMap(flatMapper)(monad Monad) -> result Promise|Monad
|
|
75
|
+
* flatMap(monad Promise|Monad, flatMapper SyncOrAsyncFlatMapper) -> flatMappedMonad Promise|Monad
|
|
76
|
+
* flatMap(flatMapper SyncOrAsyncFlatMapper)(monad Monad) -> flatMappedMonad Promise|Monad
|
|
79
77
|
* ```
|
|
80
78
|
*
|
|
81
79
|
* @description
|
|
82
|
-
* Applies a
|
|
80
|
+
* Applies a flat-mapper function to each item of a monad, returning a flat-mapped monad of the same type.
|
|
83
81
|
*
|
|
84
|
-
* A
|
|
82
|
+
* A flat-mapping operation iterates through each item of a monad and applies the flat-mapper function to each item, flattening the result of the execution into the returned monad.
|
|
85
83
|
*
|
|
86
|
-
* If the
|
|
84
|
+
* If the flat-mapper 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 data types are considered to be monads
|
|
86
|
+
* The following data types are considered to be monads:
|
|
89
87
|
* * `array`
|
|
90
88
|
* * `string`
|
|
91
89
|
* * `set`
|
|
92
|
-
* * `
|
|
90
|
+
* * `generator`
|
|
93
91
|
* * `async generator`
|
|
94
92
|
* * `object with .flatMap method`
|
|
95
93
|
* * `object with .chain method`
|
|
96
94
|
* * `object`
|
|
97
95
|
*
|
|
98
|
-
*
|
|
96
|
+
* The flat-mapper function signature changes depending on the provided monad.
|
|
97
|
+
*
|
|
98
|
+
* If the monad is an array:
|
|
99
|
+
* ```coffeescript [specscript]
|
|
100
|
+
* flatMapper(item any, index number, monad Array) -> flatMappedItem Promise|Monad|any
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* If the monad is a string:
|
|
104
|
+
* ```coffeescript [specscript]
|
|
105
|
+
* flatMapper(character string, index number, monad string) -> flatMappedItem Promise|Monad|any
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* If the monad is a set:
|
|
109
|
+
* ```coffeescript [specscript]
|
|
110
|
+
* flatMapper(item any, item any, monad set) -> flatMappedItem Promise|Monad|any
|
|
111
|
+
* ```
|
|
112
|
+
*
|
|
113
|
+
* If the monad is a generator:
|
|
114
|
+
* ```coffeescript [specscript]
|
|
115
|
+
* flatMapper(item any) -> flatMappedItem Monad|any
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* If the monad is an async generator:
|
|
119
|
+
* ```coffeescript [specscript]
|
|
120
|
+
* flatMapper(item any) -> flatMappedItem Promise|Monad|any
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* If the monad is a plain object:
|
|
124
|
+
* ```coffeescript [specscript]
|
|
125
|
+
* flatMapper(item any, key string, monad Object) -> flatMappedItem Promise|Monad|any
|
|
126
|
+
* ```
|
|
99
127
|
*
|
|
100
128
|
* ```javascript [playground]
|
|
101
|
-
* const
|
|
102
|
-
*
|
|
103
|
-
* flatMap(
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* (function* () { yield 3; yield 3 })(),
|
|
107
|
-
* (async function* () { yield 7; yield 7 })(),
|
|
108
|
-
* { a: 5, b: 5 }, // object
|
|
109
|
-
* new Uint8Array([8]), // typedArray
|
|
110
|
-
* ]).then(console.log)
|
|
111
|
-
* // [1, 1, 2, 3, 3, 5, 5, 8, 7, 7]
|
|
129
|
+
* const duplicate = value => [value, value]
|
|
130
|
+
*
|
|
131
|
+
* const duplicated = flatMap([1, 2, 3, 4, 5], duplicate)
|
|
132
|
+
*
|
|
133
|
+
* console.log(duplicated)
|
|
112
134
|
* ```
|
|
113
135
|
*
|
|
136
|
+
* If the iterable is an object with a `.flatMap` or `.chain` method, the flat-mapper function signature is defined externally.
|
|
137
|
+
*
|
|
114
138
|
* 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 promise elements.
|
|
115
139
|
*
|
|
140
|
+
* For other types of monads, order is preserved from the original monad and applied to the flat-mapped items, which are then concatenated into the flat-mapped monad. The order of the items of a given flat-mapped item is determined by the structure of the flat-mapped item.
|
|
141
|
+
*
|
|
116
142
|
* ```javascript [playground]
|
|
117
143
|
* const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
|
|
118
144
|
*
|
|
119
|
-
* const repeat3 = function* (message) {
|
|
120
|
-
* yield message; yield message; yield message
|
|
121
|
-
* }
|
|
122
|
-
*
|
|
123
|
-
* console.log( // sync is concatenated
|
|
124
|
-
* flatMap(['foo', 'bar', 'baz'], repeat3),
|
|
125
|
-
* ) // ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz', 'baz']
|
|
126
|
-
*
|
|
127
145
|
* const asyncRepeat3 = async function* (message) {
|
|
128
146
|
* yield message
|
|
129
147
|
* await sleep(100)
|
|
@@ -133,35 +151,24 @@ const _flatMap = function (value, flatMapper) {
|
|
|
133
151
|
* }
|
|
134
152
|
*
|
|
135
153
|
* // values from async generators are muxed
|
|
136
|
-
* flatMap(['foo', 'bar', 'baz'], asyncRepeat3)
|
|
137
|
-
* // ['foo', 'bar', 'baz', 'foo', 'bar', 'baz', 'foo', 'bar', 'baz']
|
|
138
|
-
* ```
|
|
154
|
+
* const muxed = await flatMap(['foo', 'bar', 'baz'], asyncRepeat3)
|
|
139
155
|
*
|
|
140
|
-
*
|
|
156
|
+
* console.log(muxed)
|
|
141
157
|
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
* console.log(
|
|
146
|
-
* flatMap([1, 2, 3, 4, 5], duplicate)
|
|
147
|
-
* ) // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
|
|
148
|
-
* ```
|
|
149
|
-
*
|
|
150
|
-
* `flatMap` acts on each character of a string.
|
|
158
|
+
* const repeat3 = function* (message) {
|
|
159
|
+
* yield message; yield message; yield message
|
|
160
|
+
* }
|
|
151
161
|
*
|
|
152
|
-
*
|
|
153
|
-
* const
|
|
162
|
+
* // values from generators and other monads are concatenated
|
|
163
|
+
* const repeated = flatMap(['foo', 'bar', 'baz'], repeat3)
|
|
154
164
|
*
|
|
155
|
-
* console.log(
|
|
156
|
-
* flatMap('12345', duplicate)
|
|
157
|
-
* ) // 1122334455
|
|
165
|
+
* console.log(repeated)
|
|
158
166
|
* ```
|
|
159
167
|
*
|
|
160
|
-
*
|
|
168
|
+
* If the monad is a promise, it is resolved for its value before further execution for the eager interface only.
|
|
161
169
|
*
|
|
162
170
|
* ```javascript [playground]
|
|
163
171
|
* flatMap(Promise.resolve([1, 2, 3, 4, 5]), n => [n, n]).then(console.log)
|
|
164
|
-
* // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
|
|
165
172
|
* ```
|
|
166
173
|
*
|
|
167
174
|
* See also:
|
|
@@ -179,7 +186,7 @@ const _flatMap = function (value, flatMapper) {
|
|
|
179
186
|
* @archive
|
|
180
187
|
* * For typed arrays (type [`TypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#typedarray_objects)) and Node.js buffers (type [`Buffer`](https://nodejs.org/api/buffer.html)), `flatMap` applies a flatMapper function to each value of the typed array/buffer, joining the result of each execution with `.set` into the resulting typed array
|
|
181
188
|
*
|
|
182
|
-
* * For Node.js duplex streams (type [Stream](https://nodejs.org/api/stream.html#class-streamduplex)), `flatMap` applies a flatMapper function to each
|
|
189
|
+
* * For Node.js duplex streams (type [Stream](https://nodejs.org/api/stream.html#class-streamduplex)), `flatMap` applies a flatMapper function to each item of the stream, writing (`.write`) each item of each execution into the duplex stream
|
|
183
190
|
*/
|
|
184
191
|
const flatMap = (arg0, arg1) => {
|
|
185
192
|
if (typeof arg0 == 'function') {
|
package/forEach.js
CHANGED
|
@@ -24,16 +24,16 @@ const _forEach = function (collection, callback) {
|
|
|
24
24
|
if (collection == null) {
|
|
25
25
|
return collection
|
|
26
26
|
}
|
|
27
|
-
if (typeof collection.forEach == 'function') {
|
|
28
|
-
collection.forEach(callback)
|
|
29
|
-
return collection
|
|
30
|
-
}
|
|
31
27
|
if (typeof collection[symbolIterator] == 'function') {
|
|
32
28
|
return iteratorForEach(collection[symbolIterator](), callback)
|
|
33
29
|
}
|
|
34
30
|
if (typeof collection[symbolAsyncIterator] == 'function') {
|
|
35
31
|
return asyncIteratorForEach(collection[symbolAsyncIterator](), callback)
|
|
36
32
|
}
|
|
33
|
+
if (typeof collection.forEach == 'function') {
|
|
34
|
+
collection.forEach(callback)
|
|
35
|
+
return collection
|
|
36
|
+
}
|
|
37
37
|
if (collection.constructor == Object) {
|
|
38
38
|
return objectForEach(collection, callback)
|
|
39
39
|
}
|
|
@@ -48,22 +48,19 @@ const _forEach = function (collection, callback) {
|
|
|
48
48
|
* type Iterable = Array|Set|Map|Generator|AsyncGenerator|{ forEach: function }|Object
|
|
49
49
|
*
|
|
50
50
|
* type SyncOrAsyncCallback = (
|
|
51
|
-
*
|
|
51
|
+
* item any,
|
|
52
52
|
* indexOrKey number|string|any,
|
|
53
|
-
*
|
|
53
|
+
* iterable Iterable
|
|
54
54
|
* )=>Promise|undefined
|
|
55
55
|
*
|
|
56
|
-
* iterable Iterable
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* forEach(iterable, cb) -> unmodifiedIterable Promise|Iterable
|
|
60
|
-
* forEach(cb)(iterable) -> unmodifiedIterable Promise|Iterable
|
|
56
|
+
* forEach(iterable Promise|Iterable, callback SyncOrAsyncCallback) -> iterable Promise|Iterable
|
|
57
|
+
* forEach(callback SyncOrAsyncCallback)(iterable Iterable) -> iterable Promise|Iterable
|
|
61
58
|
* ```
|
|
62
59
|
*
|
|
63
60
|
* @description
|
|
64
|
-
*
|
|
61
|
+
* Executes a callback function for each item of an iterable, returning the original iterable unmodified.
|
|
65
62
|
*
|
|
66
|
-
* The following data types are considered to be
|
|
63
|
+
* The following data types are considered to be iterable:
|
|
67
64
|
* * `array`
|
|
68
65
|
* * `set`
|
|
69
66
|
* * `map`
|
|
@@ -76,36 +73,44 @@ const _forEach = function (collection, callback) {
|
|
|
76
73
|
*
|
|
77
74
|
* If the iterable is an array:
|
|
78
75
|
* ```coffeescript [specscript]
|
|
79
|
-
* callback(
|
|
76
|
+
* callback(item any, index number, iterable Array) -> Promise|undefined
|
|
80
77
|
* ```
|
|
81
78
|
*
|
|
82
79
|
* If the iterable is a set:
|
|
83
80
|
* ```coffeescript [specscript]
|
|
84
|
-
* callback(
|
|
81
|
+
* callback(item any, item any, iterable Set) -> Promise|undefined
|
|
85
82
|
* ```
|
|
86
83
|
*
|
|
87
84
|
* If the iterable is a map:
|
|
88
85
|
* ```coffeescript [specscript]
|
|
89
|
-
* callback(
|
|
86
|
+
* callback(item any, key any, iterable Map) -> Promise|undefined
|
|
90
87
|
* ```
|
|
91
88
|
*
|
|
92
89
|
* If the iterable is a generator:
|
|
93
90
|
* ```coffeescript [specscript]
|
|
94
|
-
* callback(
|
|
91
|
+
* callback(item any) -> Promise|undefined
|
|
95
92
|
* ```
|
|
96
93
|
*
|
|
97
94
|
* If the iterable is an async generator:
|
|
98
95
|
* ```coffeescript [specscript]
|
|
99
|
-
* callback(
|
|
96
|
+
* callback(item any) -> Promise|undefined
|
|
100
97
|
* ```
|
|
101
98
|
*
|
|
102
|
-
* If the iterable is an object with a `.forEach` method, the callback function signature is defined externally.
|
|
103
|
-
*
|
|
104
99
|
* If the iterable is a plain object:
|
|
105
100
|
* ```coffeescript [specscript]
|
|
106
|
-
* callback(
|
|
101
|
+
* callback(item any, key string, iterable Object) -> Promise|undefined
|
|
107
102
|
* ```
|
|
108
103
|
*
|
|
104
|
+
* ```javascript [playground]
|
|
105
|
+
* console.log('array')
|
|
106
|
+
* forEach([1, 2, 3, 4, 5], num => console.log(num))
|
|
107
|
+
*
|
|
108
|
+
* console.log('object')
|
|
109
|
+
* forEach({ a: 1, b: 2, c: 3 }, num => console.log(num))
|
|
110
|
+
* ```
|
|
111
|
+
*
|
|
112
|
+
* If the iterable is an object with a `.forEach` method, the callback function signature is defined externally.
|
|
113
|
+
*
|
|
109
114
|
* If the callback function is asynchronous, it is executed concurrently.
|
|
110
115
|
*
|
|
111
116
|
* ```javascript [playground]
|
|
@@ -117,37 +122,20 @@ const _forEach = function (collection, callback) {
|
|
|
117
122
|
* })
|
|
118
123
|
* ```
|
|
119
124
|
*
|
|
120
|
-
* `forEach`
|
|
121
|
-
*
|
|
122
|
-
* ```javascript [playground]
|
|
123
|
-
* forEach([1, 2, 3, 4, 5], num => console.log(num)) // 1 2 3 4 5
|
|
124
|
-
* ```
|
|
125
|
-
*
|
|
126
|
-
* `forEach` works for objects.
|
|
127
|
-
*
|
|
128
|
-
* ```javascript [playground]
|
|
129
|
-
* forEach({ a: 1, b: 2, c: 3 }, num => console.log(num)) // 1 2 3
|
|
130
|
-
* ```
|
|
131
|
-
*
|
|
132
|
-
* Omit the data argument for a composable API
|
|
125
|
+
* `forEach` supports a lazy interface for composability.
|
|
133
126
|
*
|
|
134
127
|
* ```javascript [playground]
|
|
135
128
|
* pipe([1, 2, 3, 4, 5], [
|
|
136
129
|
* filter(number => number % 2 == 1),
|
|
137
130
|
* map(number => number ** 2),
|
|
138
|
-
* forEach(console.log),
|
|
139
|
-
* // 9
|
|
140
|
-
* // 25
|
|
131
|
+
* forEach(console.log),
|
|
141
132
|
* ])
|
|
142
133
|
* ```
|
|
143
134
|
*
|
|
144
|
-
*
|
|
135
|
+
* If the iterable is a promise, it is resolved for its value before further execution for the eager interface only.
|
|
145
136
|
*
|
|
146
137
|
* ```javascript [playground]
|
|
147
138
|
* forEach(Promise.resolve([1, 2, 3]), console.log)
|
|
148
|
-
* // 1
|
|
149
|
-
* // 2
|
|
150
|
-
* // 3
|
|
151
139
|
* ```
|
|
152
140
|
*
|
|
153
141
|
* See also:
|
|
@@ -203,16 +191,13 @@ const _forEachSeries = function (collection, callback) {
|
|
|
203
191
|
* type Iterable = Array|Set|Map|Generator|AsyncGenerator|{ forEach: function }|Object
|
|
204
192
|
*
|
|
205
193
|
* type SyncOrAsyncCallback = (
|
|
206
|
-
*
|
|
194
|
+
* item any,
|
|
207
195
|
* indexOrKey number|string|any,
|
|
208
196
|
* iter Iterable
|
|
209
197
|
* )=>Promise|undefined
|
|
210
198
|
*
|
|
211
|
-
* iterable Iterable
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
* forEach(iterable, cb) -> unmodifiedIterable Promise|Iterable
|
|
215
|
-
* forEach(cb)(iterable) -> unmodifiedIterable Promise|Iterable
|
|
199
|
+
* forEach.series(iterable Promise|Iterable, callback SyncOrAsyncCallback) -> iterable Promise|Iterable
|
|
200
|
+
* forEach.series(callback SyncOrAsyncCallback)(iterable Iterable) -> iterable Promise|Iterable
|
|
216
201
|
* ```
|
|
217
202
|
*
|
|
218
203
|
* @description
|
|
@@ -224,21 +209,13 @@ const _forEachSeries = function (collection, callback) {
|
|
|
224
209
|
* setTimeout(resolve, 1000)
|
|
225
210
|
* })
|
|
226
211
|
* console.log(number)
|
|
227
|
-
* // 1
|
|
228
|
-
* // 2
|
|
229
|
-
* // 3
|
|
230
|
-
* // 4
|
|
231
|
-
* // 5
|
|
232
212
|
* })
|
|
233
213
|
* ```
|
|
234
214
|
*
|
|
235
|
-
*
|
|
215
|
+
* If the iterable is a promise, it is resolved for its value before further execution for the eager interface only.
|
|
236
216
|
*
|
|
237
217
|
* ```javascript [playground]
|
|
238
218
|
* forEach.series(Promise.resolve([1, 2, 3]), console.log)
|
|
239
|
-
* // 1
|
|
240
|
-
* // 2
|
|
241
|
-
* // 3
|
|
242
219
|
* ```
|
|
243
220
|
*
|
|
244
221
|
* See also:
|
package/get.js
CHANGED
|
@@ -45,7 +45,7 @@ const _get = function (object, path, defaultValue) {
|
|
|
45
45
|
* console.log(value)
|
|
46
46
|
* ```
|
|
47
47
|
*
|
|
48
|
-
* `get` supports a lazy
|
|
48
|
+
* `get` supports a lazy interface for composability.
|
|
49
49
|
*
|
|
50
50
|
* ```javascript [playground]
|
|
51
51
|
* const obj = { hello: 'world' }
|
|
@@ -103,10 +103,12 @@ const _get = function (object, path, defaultValue) {
|
|
|
103
103
|
* console.log(get00000ArrayNotation(nested))
|
|
104
104
|
* ```
|
|
105
105
|
*
|
|
106
|
-
*
|
|
106
|
+
* If the argument object or default value is a promise, it is resolved for its value before further execution for the eager interface only.
|
|
107
107
|
*
|
|
108
108
|
* ```javascript [playground]
|
|
109
|
-
* get(Promise.resolve({ a: 1 }), 'a').then(console.log)
|
|
109
|
+
* get(Promise.resolve({ a: 1 }), 'a').then(console.log)
|
|
110
|
+
*
|
|
111
|
+
* get({}, 'a', Promise.resolve('default-value')).then(console.log)
|
|
110
112
|
* ```
|
|
111
113
|
*
|
|
112
114
|
* See also:
|
package/gt.js
CHANGED
|
@@ -56,7 +56,7 @@ const greaterThan = require('./_internal/greaterThan')
|
|
|
56
56
|
* asyncIsOfLegalAge(juvenile).then(console.log) // false
|
|
57
57
|
* ```
|
|
58
58
|
*
|
|
59
|
-
* `gt` supports a lazy
|
|
59
|
+
* `gt` supports a lazy interface for composability.
|
|
60
60
|
*
|
|
61
61
|
* ```javascript [playground]
|
|
62
62
|
* pipe({ value: 1 }, [
|
|
@@ -65,7 +65,7 @@ const greaterThan = require('./_internal/greaterThan')
|
|
|
65
65
|
* ])
|
|
66
66
|
* ```
|
|
67
67
|
*
|
|
68
|
-
* Any promises passed in argument position are resolved for their values before further execution.
|
|
68
|
+
* Any promises passed in data argument position are resolved for their values before further execution.
|
|
69
69
|
*
|
|
70
70
|
* ```javascript [playground]
|
|
71
71
|
* gt(Promise.resolve({ a: 2, b: 1 }), get('a'), get('b')).then(console.log) // true
|
package/gte.js
CHANGED
|
@@ -60,7 +60,7 @@ const greaterThanOrEqual = require('./_internal/greaterThanOrEqual')
|
|
|
60
60
|
* asyncIsAtLeast100(101).then(console.log) // true
|
|
61
61
|
* ```
|
|
62
62
|
*
|
|
63
|
-
* `gte` supports a lazy
|
|
63
|
+
* `gte` supports a lazy interface for composability.
|
|
64
64
|
*
|
|
65
65
|
* ```javascript [playground]
|
|
66
66
|
* pipe({ value: 1 }, [
|
|
@@ -69,7 +69,7 @@ const greaterThanOrEqual = require('./_internal/greaterThanOrEqual')
|
|
|
69
69
|
* ])
|
|
70
70
|
* ```
|
|
71
71
|
*
|
|
72
|
-
* Any promises passed in argument position are resolved for their values before further execution.
|
|
72
|
+
* Any promises passed in data argument position are resolved for their values before further execution.
|
|
73
73
|
*
|
|
74
74
|
* ```javascript [playground]
|
|
75
75
|
* gte(Promise.resolve({ a: 1, b: 1 }), get('a'), get('b')).then(console.log) // true
|