rubico 1.9.6 → 2.0.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/.eslintignore +5 -0
- package/.eslintrc.js +3 -2
- package/.github/workflows/nodejs.yml +1 -1
- package/AggregateReducer.js +19 -0
- package/AggregateReducer.test.js +82 -0
- package/CHANGELOG.md +22 -1
- package/Transducer.js +162 -0
- package/Transducer.test.js +117 -0
- package/_internal/ComparisonOperator.js +68 -0
- package/_internal/File.js +41 -0
- package/_internal/FlatMappingAsyncIterator.js +4 -4
- package/_internal/FlatMappingIterator.js +1 -1
- package/_internal/TimeInLoopSuite.js +138 -0
- package/_internal/areAnyValuesPromises.js +23 -0
- package/_internal/{arrayAll.js → arrayEvery.js} +4 -4
- package/_internal/arrayExtend.js +3 -2
- package/_internal/arrayFilter.js +3 -4
- package/_internal/{arrayAny.js → arraySome.js} +8 -8
- package/_internal/{asyncIteratorAll.js → asyncIteratorEvery.js} +4 -4
- package/_internal/{asyncIteratorAny.js → asyncIteratorSome.js} +4 -4
- package/_internal/curry4.test.js +25 -0
- package/_internal/curry5.test.js +29 -0
- package/_internal/curryArgs2.js +43 -0
- package/_internal/curryArgs3.test.js +21 -0
- package/_internal/curryArgs4.js +65 -0
- package/_internal/curryArgs4.test.js +25 -0
- package/_internal/equals.js +13 -0
- package/_internal/findAllFilePaths.js +22 -0
- package/_internal/funcApply.js +2 -0
- package/_internal/funcCall.js +14 -0
- package/_internal/functionArrayAll.js +26 -0
- package/_internal/functionArrayAllSeries.js +55 -0
- package/_internal/functionObjectAll.js +32 -0
- package/_internal/genericReduce.js +4 -22
- package/_internal/genericTransform.js +15 -15
- package/_internal/improvedGenericTransform.js +93 -0
- package/_internal/{iteratorAll.js → iteratorEvery.js} +4 -4
- package/_internal/{iteratorAny.js → iteratorSome.js} +6 -6
- package/_internal/leftResolverRightResolverCompare.js +19 -0
- package/_internal/leftResolverRightValueCompare.js +16 -0
- package/_internal/leftValueRightResolverCompare.js +16 -0
- package/_internal/objectReduce.js +0 -1
- package/_internal/pathResolve.js +6 -0
- package/_internal/{reducerAll.js → reducerEvery.js} +4 -4
- package/_internal/reducerFlatMap.js +4 -4
- package/_internal/reducerFlatten.js +1 -1
- package/_internal/{reducerAny.js → reducerSome.js} +4 -4
- package/_internal/timeInLoop.js +37 -0
- package/_internal/timeInLoop.test.js +18 -0
- package/_internal/timeInLoopAsync.js +35 -0
- package/_internal/timeInLoopAsync.test.js +22 -0
- package/all.js +105 -45
- package/always.js +3 -9
- package/and.js +69 -45
- package/archive/{FlatMappingIteratorCool.js → FlatMappingIterator-2020-09-28.js} +1 -1
- package/archive/_Promise-2023-05-29.js +93 -0
- package/archive/arrayMap2-2023-05-29.js +73 -0
- package/archive/benchmarks-v1.9.7/all.js +34 -0
- package/archive/benchmarks-v1.9.7/and.js +24 -0
- package/archive/benchmarks-v1.9.7/assign.js +174 -0
- package/archive/benchmarks-v1.9.7/curry.js +55 -0
- package/archive/benchmarks-v1.9.7/eq.js +25 -0
- package/archive/benchmarks-v1.9.7/filter.js +1322 -0
- package/archive/benchmarks-v1.9.7/flatMap.js +48 -0
- package/archive/benchmarks-v1.9.7/get.js +44 -0
- package/archive/benchmarks-v1.9.7/gt.js +25 -0
- package/archive/benchmarks-v1.9.7/gte.js +25 -0
- package/archive/benchmarks-v1.9.7/lt.js +25 -0
- package/archive/benchmarks-v1.9.7/lte.js +25 -0
- package/archive/benchmarks-v1.9.7/map.js +892 -0
- package/archive/benchmarks-v1.9.7/omit.js +28 -0
- package/archive/benchmarks-v1.9.7/or.js +51 -0
- package/archive/benchmarks-v1.9.7/pick.js +24 -0
- package/archive/benchmarks-v1.9.7/pipe.js +152 -0
- package/archive/benchmarks-v1.9.7/reduce.js +739 -0
- package/archive/benchmarks-v1.9.7/switchCase.js +256 -0
- package/archive/benchmarks-v1.9.7/tap.js +90 -0
- package/archive/benchmarks-v1.9.7/transform.js +218 -0
- package/archive/benchmarks-v1.9.7/tryCatch.js +108 -0
- package/assign.js +45 -22
- package/bench +65 -0
- package/benchmark-output/v1.9.7 +268 -0
- package/benchmarks/all.async.js +43 -0
- package/benchmarks/all.js +42 -33
- package/benchmarks/always.js +15 -0
- package/benchmarks/and.async.js +25 -0
- package/benchmarks/and.js +20 -19
- package/benchmarks/assign.async.js +27 -0
- package/benchmarks/assign.js +20 -167
- package/benchmarks/curry.js +34 -54
- package/benchmarks/eq.async.js +23 -0
- package/benchmarks/eq.js +17 -19
- package/benchmarks/every.async.js +19 -0
- package/benchmarks/every.js +19 -0
- package/benchmarks/filter.async.js +32 -0
- package/benchmarks/filter.js +27 -1311
- package/benchmarks/flatMap.async.js +26 -0
- package/benchmarks/flatMap.js +26 -36
- package/benchmarks/get.async.js +19 -0
- package/benchmarks/get.js +27 -32
- package/benchmarks/gt.async.js +23 -0
- package/benchmarks/gt.js +17 -19
- package/benchmarks/gte.async.js +23 -0
- package/benchmarks/gte.js +17 -19
- package/benchmarks/lt.async.js +23 -0
- package/benchmarks/lt.js +17 -19
- package/benchmarks/lte.async.js +23 -0
- package/benchmarks/lte.js +17 -19
- package/benchmarks/map.async.js +43 -0
- package/benchmarks/map.js +24 -876
- package/benchmarks/misc/Promise.js +26 -0
- package/benchmarks/misc/isPromise.js +30 -0
- package/benchmarks/misc/promiseAll.js +36 -0
- package/benchmarks/not.js +23 -0
- package/benchmarks/omit.js +30 -20
- package/benchmarks/or.async.js +25 -0
- package/benchmarks/or.js +23 -49
- package/benchmarks/pick.js +30 -16
- package/benchmarks/pipe.async.js +47 -0
- package/benchmarks/pipe.js +46 -151
- package/benchmarks/reduce.async.js +32 -0
- package/benchmarks/reduce.js +27 -728
- package/benchmarks/set.async.js +19 -0
- package/benchmarks/set.js +41 -0
- package/benchmarks/some.async.js +19 -0
- package/benchmarks/some.js +19 -0
- package/benchmarks/switchCase.async.js +27 -0
- package/benchmarks/switchCase.js +55 -256
- package/benchmarks/tap.js +10 -85
- package/benchmarks/thunkify.js +15 -0
- package/benchmarks/transform.async.js +27 -0
- package/benchmarks/transform.js +28 -206
- package/benchmarks/tryCatch.async.js +25 -0
- package/benchmarks/tryCatch.js +24 -100
- package/{distributor.js → build} +50 -50
- package/compose.js +46 -0
- package/curry.js +20 -12
- 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/__.min.mjs +2 -2
- package/dist/__.mjs +2 -2
- package/dist/all.es.js +173 -92
- package/dist/all.es.min.js +3 -3
- package/dist/all.js +173 -92
- package/dist/all.min.js +3 -3
- package/dist/all.min.mjs +3 -3
- package/dist/all.mjs +173 -92
- 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.min.mjs +2 -2
- package/dist/always.mjs +2 -2
- package/dist/and.es.js +101 -32
- package/dist/and.es.min.js +3 -3
- package/dist/and.js +101 -32
- package/dist/and.min.js +3 -3
- package/dist/and.min.mjs +3 -3
- package/dist/and.mjs +101 -32
- package/dist/assign.es.js +37 -10
- package/dist/assign.es.min.js +3 -3
- package/dist/assign.js +37 -10
- package/dist/assign.min.js +3 -3
- package/dist/assign.min.mjs +3 -3
- package/dist/assign.mjs +37 -10
- package/dist/compose.es.js +71 -0
- package/dist/compose.es.min.js +7 -0
- package/dist/compose.js +78 -0
- package/dist/compose.min.js +8 -0
- package/dist/compose.min.mjs +7 -0
- package/dist/compose.mjs +71 -0
- 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.min.mjs +2 -2
- package/dist/curry.mjs +2 -2
- package/dist/eq.es.js +172 -49
- package/dist/eq.es.min.js +3 -3
- package/dist/eq.js +172 -49
- package/dist/eq.min.js +3 -3
- package/dist/eq.min.mjs +3 -3
- package/dist/eq.mjs +172 -49
- package/dist/every.es.js +194 -0
- package/dist/every.es.min.js +7 -0
- package/dist/every.js +201 -0
- package/dist/every.min.js +8 -0
- package/dist/every.min.mjs +7 -0
- package/dist/every.mjs +194 -0
- package/dist/filter.es.js +14 -108
- package/dist/filter.es.min.js +3 -3
- package/dist/filter.js +14 -108
- package/dist/filter.min.js +3 -3
- package/dist/filter.min.mjs +3 -3
- package/dist/filter.mjs +14 -108
- package/dist/flatMap.es.js +27 -214
- package/dist/flatMap.es.min.js +3 -3
- package/dist/flatMap.js +27 -214
- package/dist/flatMap.min.js +3 -3
- package/dist/flatMap.min.mjs +3 -3
- package/dist/flatMap.mjs +27 -214
- package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
- package/dist/forEach.es.min.js +7 -0
- package/dist/{x/forEach.js → forEach.js} +52 -70
- package/dist/forEach.min.js +8 -0
- package/dist/forEach.min.mjs +7 -0
- package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
- package/dist/get.es.js +60 -5
- package/dist/get.es.min.js +3 -3
- package/dist/get.js +60 -5
- package/dist/get.min.js +3 -3
- package/dist/get.min.mjs +3 -3
- package/dist/get.mjs +60 -5
- package/dist/gt.es.js +171 -48
- package/dist/gt.es.min.js +3 -3
- package/dist/gt.js +171 -48
- package/dist/gt.min.js +3 -3
- package/dist/gt.min.mjs +3 -3
- package/dist/gt.mjs +171 -48
- package/dist/gte.es.js +171 -48
- package/dist/gte.es.min.js +3 -3
- package/dist/gte.js +171 -48
- package/dist/gte.min.js +3 -3
- package/dist/gte.min.mjs +3 -3
- package/dist/gte.mjs +171 -48
- package/dist/lt.es.js +171 -48
- package/dist/lt.es.min.js +3 -3
- package/dist/lt.js +171 -48
- package/dist/lt.min.js +3 -3
- package/dist/lt.min.mjs +3 -3
- package/dist/lt.mjs +171 -48
- package/dist/lte.es.js +171 -48
- package/dist/lte.es.min.js +3 -3
- package/dist/lte.js +171 -48
- package/dist/lte.min.js +3 -3
- package/dist/lte.min.mjs +3 -3
- package/dist/lte.mjs +171 -48
- package/dist/map.es.js +12 -101
- package/dist/map.es.min.js +3 -3
- package/dist/map.js +12 -101
- package/dist/map.min.js +3 -3
- package/dist/map.min.mjs +3 -3
- package/dist/map.mjs +12 -101
- package/dist/not.es.js +75 -14
- package/dist/not.es.min.js +3 -3
- package/dist/not.js +75 -14
- package/dist/not.min.js +3 -3
- package/dist/not.min.mjs +3 -3
- package/dist/not.mjs +75 -14
- package/dist/omit.es.js +38 -3
- package/dist/omit.es.min.js +3 -3
- package/dist/omit.js +38 -3
- package/dist/omit.min.js +3 -3
- package/dist/omit.min.mjs +3 -3
- package/dist/omit.mjs +38 -3
- package/dist/or.es.js +99 -31
- package/dist/or.es.min.js +3 -3
- package/dist/or.js +99 -31
- package/dist/or.min.js +3 -3
- package/dist/or.min.mjs +3 -3
- package/dist/or.mjs +99 -31
- package/dist/pick.es.js +38 -3
- package/dist/pick.es.min.js +3 -3
- package/dist/pick.js +38 -3
- package/dist/pick.min.js +3 -3
- package/dist/pick.min.mjs +3 -3
- package/dist/pick.mjs +38 -3
- package/dist/pipe.es.js +42 -46
- package/dist/pipe.es.min.js +3 -3
- package/dist/pipe.js +42 -46
- package/dist/pipe.min.js +3 -3
- package/dist/pipe.min.mjs +3 -3
- package/dist/pipe.mjs +42 -46
- package/dist/reduce.es.js +52 -94
- package/dist/reduce.es.min.js +3 -3
- package/dist/reduce.js +52 -94
- package/dist/reduce.min.js +3 -3
- package/dist/reduce.min.mjs +3 -3
- package/dist/reduce.mjs +52 -94
- package/dist/rubico.es.js +746 -869
- package/dist/rubico.es.min.js +3 -3
- package/dist/rubico.js +746 -869
- package/dist/rubico.min.js +3 -3
- package/dist/rubico.min.mjs +3 -3
- package/dist/rubico.mjs +746 -869
- package/dist/set.es.js +18 -3
- package/dist/set.es.min.js +3 -3
- package/dist/set.js +18 -3
- package/dist/set.min.js +3 -3
- package/dist/set.min.mjs +3 -3
- package/dist/set.mjs +18 -3
- package/dist/{any.js → some.es.js} +64 -54
- package/dist/some.es.min.js +7 -0
- package/dist/{any.mjs → some.js} +72 -48
- package/dist/some.min.js +8 -0
- package/dist/some.min.mjs +7 -0
- package/dist/{any.es.js → some.mjs} +65 -48
- package/dist/switchCase.es.js +55 -5
- package/dist/switchCase.es.min.js +3 -3
- package/dist/switchCase.js +55 -5
- package/dist/switchCase.min.js +3 -3
- package/dist/switchCase.min.mjs +3 -3
- package/dist/switchCase.mjs +55 -5
- package/dist/tap.es.js +2 -9
- package/dist/tap.es.min.js +3 -3
- package/dist/tap.js +2 -9
- package/dist/tap.min.js +3 -3
- package/dist/tap.min.mjs +3 -3
- package/dist/tap.mjs +2 -9
- package/dist/thunkify.es.js +45 -2
- package/dist/thunkify.es.min.js +3 -3
- package/dist/thunkify.js +45 -2
- package/dist/thunkify.min.js +3 -3
- package/dist/thunkify.min.mjs +3 -3
- package/dist/thunkify.mjs +45 -2
- package/dist/transform.es.js +35 -71
- package/dist/transform.es.min.js +3 -3
- package/dist/transform.js +35 -71
- package/dist/transform.min.js +3 -3
- package/dist/transform.min.mjs +3 -3
- package/dist/transform.mjs +35 -71
- package/dist/tryCatch.es.js +33 -17
- package/dist/tryCatch.es.min.js +3 -3
- package/dist/tryCatch.js +33 -17
- package/dist/tryCatch.min.js +3 -3
- package/dist/tryCatch.min.mjs +3 -3
- package/dist/tryCatch.mjs +33 -17
- 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.min.mjs +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.min.mjs +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.min.mjs +2 -2
- package/dist/x/defaultsDeep.mjs +2 -2
- package/dist/x/differenceWith.es.js +7 -7
- package/dist/x/differenceWith.es.min.js +3 -3
- package/dist/x/differenceWith.js +7 -7
- package/dist/x/differenceWith.min.js +2 -2
- package/dist/x/differenceWith.min.mjs +3 -3
- package/dist/x/differenceWith.mjs +7 -7
- package/dist/x/filterOut.es.js +60 -117
- package/dist/x/filterOut.es.min.js +3 -3
- package/dist/x/filterOut.js +60 -117
- package/dist/x/filterOut.min.js +3 -3
- package/dist/x/filterOut.min.mjs +3 -3
- package/dist/x/filterOut.mjs +60 -117
- 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.min.mjs +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.min.mjs +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.min.mjs +2 -2
- package/dist/x/first.mjs +2 -2
- package/dist/x/flatten.es.js +20 -207
- package/dist/x/flatten.es.min.js +3 -3
- package/dist/x/flatten.js +20 -207
- package/dist/x/flatten.min.js +3 -3
- package/dist/x/flatten.min.mjs +3 -3
- package/dist/x/flatten.mjs +20 -207
- package/dist/x/groupBy.es.js +52 -94
- package/dist/x/groupBy.es.min.js +3 -3
- package/dist/x/groupBy.js +52 -94
- package/dist/x/groupBy.min.js +3 -3
- package/dist/x/groupBy.min.mjs +3 -3
- package/dist/x/groupBy.mjs +52 -94
- 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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +2 -2
- package/dist/x/last.mjs +2 -2
- package/dist/x/maxBy.es.js +59 -6
- package/dist/x/maxBy.es.min.js +3 -3
- package/dist/x/maxBy.js +59 -6
- package/dist/x/maxBy.min.js +3 -3
- package/dist/x/maxBy.min.mjs +3 -3
- package/dist/x/maxBy.mjs +59 -6
- 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.min.mjs +2 -2
- package/dist/x/noop.mjs +2 -2
- package/dist/x/pluck.es.js +32 -103
- package/dist/x/pluck.es.min.js +3 -3
- package/dist/x/pluck.js +32 -103
- package/dist/x/pluck.min.js +3 -3
- package/dist/x/pluck.min.mjs +3 -3
- package/dist/x/pluck.mjs +32 -103
- 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.min.mjs +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.min.mjs +2 -2
- package/dist/x/size.mjs +2 -2
- package/dist/x/trace.es.js +2 -9
- package/dist/x/trace.es.min.js +3 -3
- package/dist/x/trace.js +2 -9
- package/dist/x/trace.min.js +3 -3
- package/dist/x/trace.min.mjs +3 -3
- package/dist/x/trace.mjs +2 -9
- 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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +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.min.mjs +2 -2
- package/dist/x/when.mjs +2 -2
- package/dist-test.js +9 -2025
- package/eq.js +21 -63
- package/es.js +746 -869
- package/every.js +94 -0
- package/filter.js +83 -125
- package/flatMap.js +105 -154
- package/forEach.js +82 -0
- package/get.js +44 -36
- package/global.js +6 -4
- package/gt.js +15 -58
- package/gte.js +14 -57
- package/index.js +746 -869
- package/lt.js +17 -60
- package/lte.js +14 -57
- package/map.js +153 -203
- package/memory-usage/reduce.js +2 -2
- package/not.js +30 -49
- package/omit.js +36 -13
- package/or.js +64 -41
- package/package.json +7 -7
- package/pick.js +52 -22
- package/pipe.js +27 -92
- package/reduce.js +114 -129
- package/rubico.js +10 -8
- package/set.js +60 -24
- package/some.js +105 -0
- package/switchCase.js +29 -25
- package/tap.js +15 -45
- package/test.js +847 -1083
- package/thunkify.js +11 -5
- package/transform.js +57 -81
- package/tryCatch.js +38 -32
- package/x/differenceWith.js +3 -3
- package/x/filterOut.test.js +6 -6
- package/x/flatten.js +1 -1
- package/x/flatten.test.js +0 -8
- package/x/index.js +0 -2
- package/x/pluck.js +18 -27
- package/x/pluck.test.js +3 -7
- package/x/timeInLoop.js +16 -25
- package/x/timeInLoop.test.js +8 -4
- package/any.js +0 -88
- package/dist/any.es.min.js +0 -7
- package/dist/any.min.js +0 -8
- package/dist/any.min.mjs +0 -7
- package/dist/fork.es.js +0 -159
- package/dist/fork.es.min.js +0 -7
- package/dist/fork.js +0 -166
- package/dist/fork.min.js +0 -8
- package/dist/fork.min.mjs +0 -7
- package/dist/fork.mjs +0 -159
- package/dist/x/forEach.es.min.js +0 -7
- package/dist/x/forEach.min.js +0 -8
- package/dist/x/forEach.min.mjs +0 -7
- package/fork.js +0 -91
- package/x/forEach.js +0 -93
- package/x/forEach.test.js +0 -218
- /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
- /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
- /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
- /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
- /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
package/flatMap.js
CHANGED
|
@@ -1,80 +1,105 @@
|
|
|
1
|
+
const isPromise = require('./_internal/isPromise')
|
|
1
2
|
const FlatMappingIterator = require('./_internal/FlatMappingIterator')
|
|
2
3
|
const FlatMappingAsyncIterator = require('./_internal/FlatMappingAsyncIterator')
|
|
3
4
|
const isArray = require('./_internal/isArray')
|
|
4
|
-
const isGeneratorFunction = require('./_internal/isGeneratorFunction')
|
|
5
|
-
const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
|
|
6
|
-
const isBinary = require('./_internal/isBinary')
|
|
7
5
|
const arrayFlatMap = require('./_internal/arrayFlatMap')
|
|
8
6
|
const objectFlatMap = require('./_internal/objectFlatMap')
|
|
9
7
|
const setFlatMap = require('./_internal/setFlatMap')
|
|
10
8
|
const stringFlatMap = require('./_internal/stringFlatMap')
|
|
11
|
-
const streamFlatMap = require('./_internal/streamFlatMap')
|
|
12
|
-
const binaryFlatMap = require('./_internal/binaryFlatMap')
|
|
13
|
-
const reducerFlatMap = require('./_internal/reducerFlatMap')
|
|
14
|
-
const generatorFunctionFlatMap = require('./_internal/generatorFunctionFlatMap')
|
|
15
|
-
const asyncGeneratorFunctionFlatMap = require('./_internal/asyncGeneratorFunctionFlatMap')
|
|
16
9
|
const symbolIterator = require('./_internal/symbolIterator')
|
|
17
|
-
const
|
|
10
|
+
const curry2 = require('./_internal/curry2')
|
|
11
|
+
const __ = require('./_internal/placeholder')
|
|
18
12
|
|
|
19
13
|
/**
|
|
20
|
-
* @name
|
|
14
|
+
* @name _flatMap
|
|
21
15
|
*
|
|
22
16
|
* @synopsis
|
|
23
17
|
* ```coffeescript [specscript]
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* |TypedArray<T>|Stream<T>|Iterator<T>|AsyncIterator<T>
|
|
27
|
-
* |{ chain: T=>Monad<T> }|{ flatMap: T=>Monad<T> }|Object<T>
|
|
28
|
-
* Reducer<T> = (any, T)=>Promise|any
|
|
29
|
-
* Foldable<T> = Iterable<T>|AsyncIterable<T>|{ reduce: Reducer<T>=>any }|Object<T>
|
|
30
|
-
*
|
|
31
|
-
* var T any,
|
|
32
|
-
* flatMapper T=>Promise|Monad<T>|Foldable<T>|T,
|
|
33
|
-
* monad Monad<T>,
|
|
34
|
-
* args ...any,
|
|
35
|
-
* generatorFunction ...args=>Generator<Promise|T>,
|
|
36
|
-
* asyncGeneratorFunction ...args=>AsyncGenerator<T>,
|
|
37
|
-
* reducer Reducer<T>
|
|
18
|
+
* type FlatMappable = Array|String|Set|Iterator|AsyncIterator
|
|
19
|
+
* type Iterable = Iterable|AsyncIterable|Object<value any>
|
|
38
20
|
*
|
|
39
|
-
*
|
|
21
|
+
* _flatMap(
|
|
22
|
+
* value FlatMappable,
|
|
23
|
+
* flatMapper (item any)=>Promise|Iterable,
|
|
24
|
+
* ) -> result Promise|FlatMappable
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
const _flatMap = function (value, flatMapper) {
|
|
28
|
+
if (isArray(value)) {
|
|
29
|
+
return arrayFlatMap(value, flatMapper)
|
|
30
|
+
}
|
|
31
|
+
if (value == null) {
|
|
32
|
+
return flatMapper(value)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (typeof value.then == 'function') {
|
|
36
|
+
return value.then(flatMapper)
|
|
37
|
+
}
|
|
38
|
+
if (typeof value.next == 'function') {
|
|
39
|
+
return symbolIterator in value
|
|
40
|
+
? FlatMappingIterator(value, flatMapper)
|
|
41
|
+
: FlatMappingAsyncIterator(value, flatMapper)
|
|
42
|
+
}
|
|
43
|
+
if (typeof value.chain == 'function') {
|
|
44
|
+
return value.chain(flatMapper)
|
|
45
|
+
}
|
|
46
|
+
if (typeof value.flatMap == 'function') {
|
|
47
|
+
return value.flatMap(flatMapper)
|
|
48
|
+
}
|
|
49
|
+
const valueConstructor = value.constructor
|
|
50
|
+
if (valueConstructor == Object) {
|
|
51
|
+
return objectFlatMap(value, flatMapper)
|
|
52
|
+
}
|
|
53
|
+
if (valueConstructor == Set) {
|
|
54
|
+
return setFlatMap(value, flatMapper)
|
|
55
|
+
}
|
|
56
|
+
if (typeof value == 'string' || valueConstructor == String) {
|
|
57
|
+
return stringFlatMap(value, flatMapper)
|
|
58
|
+
}
|
|
59
|
+
return flatMapper(value)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @name flatMap
|
|
40
64
|
*
|
|
41
|
-
*
|
|
65
|
+
* @synopsis
|
|
66
|
+
* ```coffeescript [specscript]
|
|
67
|
+
* type FlatMappable = Array|String|Set|Iterator|AsyncIterator
|
|
68
|
+
* type Iterable = Iterable|AsyncIterable|Object<value any>
|
|
42
69
|
*
|
|
43
|
-
* flatMap(
|
|
70
|
+
* flatMap(
|
|
71
|
+
* collection FlatMappable,
|
|
72
|
+
* flatMapper (item any)=>Promise|Iterable,
|
|
73
|
+
* ) -> result Promise|FlatMappable
|
|
44
74
|
*
|
|
45
|
-
* flatMap(flatMapper)(
|
|
75
|
+
* flatMap(flatMapper (item any)=>Promise|Iterable)(collection FlatMappable)
|
|
76
|
+
* -> result Promise|FlatMappable
|
|
46
77
|
* ```
|
|
47
78
|
*
|
|
48
79
|
* @description
|
|
49
|
-
*
|
|
80
|
+
* Applies a flatMapper function concurrently to each item of a collection, creating a new collection of the same type. A flatMapping operation iterates through each item of a collection and applies the flatMapper function to each item, flattening the result of the execution into the result collection. The result of an individual execution can be any iterable, async iterable, or object values iterable collection. The flatMapper function may be asynchronous.
|
|
50
81
|
*
|
|
51
|
-
*
|
|
82
|
+
* * `Iterable` - the execution result is iterated and each item is added to the result collection
|
|
83
|
+
* * `AsyncIterable` - the execution result is asynchronously iterated and each item is added to the result collection
|
|
84
|
+
* * `Object` - the execution result values are added to the result collection
|
|
52
85
|
*
|
|
53
|
-
*
|
|
54
|
-
* * `String` - Apply a flatMapper to each character, adding (`+`) the items of each execution into a new string
|
|
55
|
-
* * `Set` - Apply a flatMapper to each item, adding (`.add`) the items of each execution into a new set
|
|
56
|
-
* * `TypedArray` - Apply a flatMapper to each byte, setting (`.set`) the items of each execution into a new typed array
|
|
57
|
-
* * `Buffer (Node.js)` - Apply a flatMapper to each byte, setting (`.set`) the items of each execution into a new Node.js Buffer
|
|
58
|
-
* * `stream.Duplex (Node.js)` - Apply a flatMapper to each item, writing (`.write`) the items of each execution into a new duplex stream
|
|
59
|
-
* * `Object` - Apply a flatMapper to each value, assigning (`Object.assign`) the items of each execution into a new object
|
|
60
|
-
* * `Reducer` - Apply a flatMapper to each item of a reducer's reducing operation, calling each item of each execution with the reducer.
|
|
61
|
-
* * `{ chain: function }` - Call `.chain` directly with flatMapper
|
|
62
|
-
* * `{ flatMap: function }` - Call `.flatMap` directly with flatMapper
|
|
86
|
+
* The following example demonstrates various execution results being flattened into the same array.
|
|
63
87
|
*
|
|
64
88
|
* ```javascript [playground]
|
|
65
|
-
* const
|
|
66
|
-
*
|
|
67
|
-
* console.log(
|
|
68
|
-
* flatMap(duplicate)([1, 2, 3, 4, 5]),
|
|
69
|
-
* ) // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
|
|
70
|
-
*
|
|
71
|
-
* const asyncDuplicate = async number => [number, number]
|
|
89
|
+
* const identity = value => value
|
|
72
90
|
*
|
|
73
|
-
* flatMap(
|
|
74
|
-
* [1,
|
|
91
|
+
* flatMap(identity)([
|
|
92
|
+
* [1, 1], // array
|
|
93
|
+
* new Set([2, 2]), // set
|
|
94
|
+
* (function* () { yield 3; yield 3 })(), // generator
|
|
95
|
+
* (async function* () { yield 7; yield 7 })(), // asyncGenerator
|
|
96
|
+
* { a: 5, b: 5 }, // object
|
|
97
|
+
* new Uint8Array([8]), // typedArray
|
|
98
|
+
* ]).then(console.log)
|
|
99
|
+
* // [1, 1, 2, 3, 3, 5, 5, 8, 7, 7]
|
|
75
100
|
* ```
|
|
76
101
|
*
|
|
77
|
-
* A flatMapping operation concatenates onto the
|
|
102
|
+
* A flatMapping operation concatenates onto the resulting collection synchronous values and muxes any asynchronous values. 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.
|
|
78
103
|
*
|
|
79
104
|
* ```javascript [playground]
|
|
80
105
|
* const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
|
|
@@ -84,7 +109,7 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
|
|
|
84
109
|
* }
|
|
85
110
|
*
|
|
86
111
|
* console.log( // sync is concatenated
|
|
87
|
-
* flatMap(
|
|
112
|
+
* flatMap(['foo', 'bar', 'baz'], repeat3),
|
|
88
113
|
* ) // ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'baz', 'baz', 'baz']
|
|
89
114
|
*
|
|
90
115
|
* const asyncRepeat3 = async function* (message) {
|
|
@@ -95,133 +120,59 @@ const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
|
|
|
95
120
|
* yield message
|
|
96
121
|
* }
|
|
97
122
|
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
123
|
+
* // async is muxed
|
|
124
|
+
* flatMap(['foo', 'bar', 'baz'], asyncRepeat3).then(console.log)
|
|
100
125
|
* // ['foo', 'bar', 'baz', 'foo', 'bar', 'baz', 'foo', 'bar', 'baz']
|
|
101
126
|
* ```
|
|
102
127
|
*
|
|
103
|
-
*
|
|
128
|
+
* For arrays (type `Array`), `flatMap` applies the flatMapper function to each item, pushing (`.push`) the items of each execution into a new array.
|
|
104
129
|
*
|
|
105
130
|
* ```javascript [playground]
|
|
106
|
-
* const
|
|
131
|
+
* const duplicate = value => [value, value]
|
|
107
132
|
*
|
|
108
|
-
*
|
|
109
|
-
* [1,
|
|
110
|
-
*
|
|
111
|
-
* (function* () { yield 3; yield 3 })(),
|
|
112
|
-
* (async function* () { yield 4; yield 4 })(),
|
|
113
|
-
* { a: 5, b: 5 },
|
|
114
|
-
* 6,
|
|
115
|
-
* Promise.resolve(7),
|
|
116
|
-
* new Uint8Array([8]),
|
|
117
|
-
* ]).then(console.log)
|
|
118
|
-
* // [1, 1, 2, 3, 3, 5, 5, 6, 7, 8, 4, 4]
|
|
133
|
+
* console.log(
|
|
134
|
+
* flatMap([1, 2, 3, 4, 5], duplicate)
|
|
135
|
+
* ) // [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
|
|
119
136
|
* ```
|
|
120
137
|
*
|
|
121
|
-
*
|
|
138
|
+
* For strings (type `String`), `flatMap` applies the flatMapper function to each character, adding (`+`) the items of each execution into a new string
|
|
122
139
|
*
|
|
123
140
|
* ```javascript [playground]
|
|
124
|
-
* const
|
|
125
|
-
* chain(flatMapper) {
|
|
126
|
-
* return value == null ? value : flatMapper(value)
|
|
127
|
-
* },
|
|
128
|
-
* })
|
|
129
|
-
*
|
|
130
|
-
* const userbase = new Map([
|
|
131
|
-
* ['1', { _id: '1', name: 'George' }],
|
|
132
|
-
* ['2', { _id: '2', name: 'Jane' }],
|
|
133
|
-
* ['3', { _id: '3', name: 'Jim' }],
|
|
134
|
-
* ])
|
|
135
|
-
*
|
|
136
|
-
* const getUserByID = async userID => userbase.get(userID)
|
|
137
|
-
*
|
|
138
|
-
* const logUserByID = pipe([
|
|
139
|
-
* getUserByID,
|
|
140
|
-
* Maybe,
|
|
141
|
-
* flatMap(console.log),
|
|
142
|
-
* ])
|
|
141
|
+
* const duplicate = value => [value, value]
|
|
143
142
|
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
143
|
+
* console.log(
|
|
144
|
+
* flatMap('12345', duplicate)
|
|
145
|
+
* ) // 1122334455
|
|
147
146
|
* ```
|
|
148
147
|
*
|
|
149
|
-
*
|
|
148
|
+
* For sets (type `Set`), `flatMap` applies the flatMapper function to each item, adding (`.add`) the items of each execution into a new set
|
|
150
149
|
*
|
|
151
150
|
* ```javascript [playground]
|
|
152
|
-
* const
|
|
153
|
-
*
|
|
154
|
-
* const powers = number => [number, number ** 2, number ** 3]
|
|
155
|
-
*
|
|
156
|
-
* const oddPowers = pipe([
|
|
157
|
-
* filter(isOdd),
|
|
158
|
-
* flatMap(powers),
|
|
159
|
-
* ])
|
|
160
|
-
*
|
|
161
|
-
* const arrayConcat = (array, value) => array.concat(value)
|
|
151
|
+
* const pairPlus100 = value => [value, value + 100]
|
|
162
152
|
*
|
|
163
153
|
* console.log(
|
|
164
|
-
*
|
|
165
|
-
* ) //
|
|
154
|
+
* flatMap(new Set([1, 2, 3, 4, 5]), pairPlus100)
|
|
155
|
+
* ) // Set(10) { 1, 101, 2, 102, 3, 103, 4, 104, 5, 105 }
|
|
166
156
|
* ```
|
|
167
157
|
*
|
|
168
|
-
* In the case above, each item of the array of numbers returned by `powers` is called with the reducer `arrayConcat` for flattening into the final result.
|
|
169
|
-
*
|
|
170
158
|
* @execution concurrent
|
|
171
159
|
*
|
|
172
160
|
* @transducing
|
|
161
|
+
*
|
|
162
|
+
* @archive
|
|
163
|
+
* * 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
|
|
164
|
+
*
|
|
165
|
+
* * 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
|
|
173
166
|
*/
|
|
174
|
-
const flatMap =
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (typeof value == 'function') {
|
|
179
|
-
if (isGeneratorFunction(value)) {
|
|
180
|
-
return generatorFunctionFlatMap(value, flatMapper)
|
|
181
|
-
}
|
|
182
|
-
if (isAsyncGeneratorFunction(value)) {
|
|
183
|
-
return asyncGeneratorFunctionFlatMap(value, flatMapper)
|
|
184
|
-
}
|
|
185
|
-
return reducerFlatMap(value, flatMapper)
|
|
186
|
-
}
|
|
187
|
-
if (isBinary(value)) {
|
|
188
|
-
return binaryFlatMap(value, flatMapper)
|
|
167
|
+
const flatMap = (...args) => {
|
|
168
|
+
const flatMapper = args.pop()
|
|
169
|
+
if (args.length == 0) {
|
|
170
|
+
return curry2(_flatMap, __, flatMapper)
|
|
189
171
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
if (typeof value.then == 'function') {
|
|
195
|
-
return value.then(flatMapper)
|
|
196
|
-
}
|
|
197
|
-
if (typeof value.next == 'function') {
|
|
198
|
-
return symbolIterator in value
|
|
199
|
-
? FlatMappingIterator(value, flatMapper)
|
|
200
|
-
: FlatMappingAsyncIterator(value, flatMapper)
|
|
201
|
-
}
|
|
202
|
-
if (typeof value.chain == 'function') {
|
|
203
|
-
return value.chain(flatMapper)
|
|
204
|
-
}
|
|
205
|
-
if (typeof value.flatMap == 'function') {
|
|
206
|
-
return value.flatMap(flatMapper)
|
|
207
|
-
}
|
|
208
|
-
if (
|
|
209
|
-
typeof value[symbolAsyncIterator] == 'function'
|
|
210
|
-
&& typeof value.write == 'function'
|
|
211
|
-
) {
|
|
212
|
-
return streamFlatMap(value, flatMapper)
|
|
213
|
-
}
|
|
214
|
-
const valueConstructor = value.constructor
|
|
215
|
-
if (valueConstructor == Object) {
|
|
216
|
-
return objectFlatMap(value, flatMapper)
|
|
217
|
-
}
|
|
218
|
-
if (valueConstructor == Set) {
|
|
219
|
-
return setFlatMap(value, flatMapper)
|
|
220
|
-
}
|
|
221
|
-
if (typeof value == 'string' || valueConstructor == String) {
|
|
222
|
-
return stringFlatMap(value, flatMapper)
|
|
223
|
-
}
|
|
224
|
-
return flatMapper(value)
|
|
172
|
+
const collection = args[0]
|
|
173
|
+
return isPromise(collection)
|
|
174
|
+
? collection.then(curry2(_flatMap, __, flatMapper))
|
|
175
|
+
: _flatMap(args[0], flatMapper)
|
|
225
176
|
}
|
|
226
177
|
|
|
227
178
|
module.exports = flatMap
|
package/forEach.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const isPromise = require('./_internal/isPromise')
|
|
2
|
+
const __ = require('./_internal/placeholder')
|
|
3
|
+
const curry2 = require('./_internal/curry2')
|
|
4
|
+
const isArray = require('./_internal/isArray')
|
|
5
|
+
const isGeneratorFunction = require('./_internal/isGeneratorFunction')
|
|
6
|
+
const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
|
|
7
|
+
const arrayForEach = require('./_internal/arrayForEach')
|
|
8
|
+
const objectForEach = require('./_internal/objectForEach')
|
|
9
|
+
const iteratorForEach = require('./_internal/iteratorForEach')
|
|
10
|
+
const asyncIteratorForEach = require('./_internal/asyncIteratorForEach')
|
|
11
|
+
const symbolIterator = require('./_internal/symbolIterator')
|
|
12
|
+
const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
|
|
13
|
+
|
|
14
|
+
// type Collection = Array|Iterable|AsyncIterable|{ forEach: function }|Object
|
|
15
|
+
// _forEach(collection Collection, callback function) -> collection Collection
|
|
16
|
+
const _forEach = function (collection, callback) {
|
|
17
|
+
if (isArray(collection)) {
|
|
18
|
+
return arrayForEach(collection, callback)
|
|
19
|
+
}
|
|
20
|
+
if (collection == null) {
|
|
21
|
+
return collection
|
|
22
|
+
}
|
|
23
|
+
if (typeof collection.forEach == 'function') {
|
|
24
|
+
return collection.forEach(callback)
|
|
25
|
+
}
|
|
26
|
+
if (typeof collection[symbolIterator] == 'function') {
|
|
27
|
+
return iteratorForEach(collection[symbolIterator](), callback)
|
|
28
|
+
}
|
|
29
|
+
if (typeof collection[symbolAsyncIterator] == 'function') {
|
|
30
|
+
return asyncIteratorForEach(collection[symbolAsyncIterator](), callback)
|
|
31
|
+
}
|
|
32
|
+
if (collection.constructor == Object) {
|
|
33
|
+
return objectForEach(collection, callback)
|
|
34
|
+
}
|
|
35
|
+
return collection
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @name forEach
|
|
40
|
+
*
|
|
41
|
+
* @synopsis
|
|
42
|
+
* ```coffeescript [specscript]
|
|
43
|
+
* type Collection = Array|Iterable|AsyncIterable|{ forEach: function }|Object
|
|
44
|
+
*
|
|
45
|
+
* forEach(collection Collection, callback function) -> collection Collection
|
|
46
|
+
*
|
|
47
|
+
* forEach(callback function)(collection Collection) -> collection Collection
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @description
|
|
51
|
+
* Execute a callback for each item of a collection, returning a Promise if the execution is asynchronous.
|
|
52
|
+
*
|
|
53
|
+
* ```javascript [playground]
|
|
54
|
+
* forEach([1, 2, 3, 4, 5l], console.log) // 1 2 3 4 5
|
|
55
|
+
*
|
|
56
|
+
* forEach({ a: 1, b: 2, c: 3 }, console.log) // 1 2 3
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* Omit the data argument for a composable API
|
|
60
|
+
*
|
|
61
|
+
* ```javascript [playground]
|
|
62
|
+
* pipe([1, 2, 3, 4, 5], [
|
|
63
|
+
* filter(number => number % 2 == 1),
|
|
64
|
+
* map(number => number ** 2),
|
|
65
|
+
* forEach(console.log), // 1
|
|
66
|
+
* // 9
|
|
67
|
+
* // 25
|
|
68
|
+
* ])
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
const forEach = function (...args) {
|
|
72
|
+
const callback = args.pop()
|
|
73
|
+
if (args.length == 0) {
|
|
74
|
+
return curry2(_forEach, __, callback)
|
|
75
|
+
}
|
|
76
|
+
const collection = args[0]
|
|
77
|
+
return isPromise(collection)
|
|
78
|
+
? collection.then(curry2(_forEach, __, callback))
|
|
79
|
+
: _forEach(collection, callback)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
module.exports = forEach
|
package/get.js
CHANGED
|
@@ -1,36 +1,48 @@
|
|
|
1
|
+
const isPromise = require('./_internal/isPromise')
|
|
2
|
+
const __ = require('./_internal/placeholder')
|
|
3
|
+
const curry3 = require('./_internal/curry3')
|
|
4
|
+
const isArray = require('./_internal/isArray')
|
|
5
|
+
const isObject = require('./_internal/isObject')
|
|
1
6
|
const getByPath = require('./_internal/getByPath')
|
|
2
7
|
|
|
8
|
+
// _get(object Object, path string, defaultValue function|any)
|
|
9
|
+
const _get = function (object, path, defaultValue) {
|
|
10
|
+
const result = object == null ? undefined : getByPath(object, path)
|
|
11
|
+
return result === undefined
|
|
12
|
+
? typeof defaultValue == 'function' ? defaultValue(object) : defaultValue
|
|
13
|
+
: result
|
|
14
|
+
}
|
|
15
|
+
|
|
3
16
|
/**
|
|
4
17
|
* @name get
|
|
5
18
|
*
|
|
6
19
|
* @synopsis
|
|
7
20
|
* ```coffeescript [specscript]
|
|
8
|
-
*
|
|
21
|
+
* get(
|
|
9
22
|
* path string|number|Array<string|number>,
|
|
10
|
-
* defaultValue
|
|
11
|
-
*
|
|
12
|
-
* get(path, defaultValue?) -> getter value=>any
|
|
23
|
+
* defaultValue? function|any
|
|
24
|
+
* )(object Object) -> result Promise|Object
|
|
13
25
|
* ```
|
|
14
26
|
*
|
|
15
27
|
* @description
|
|
16
|
-
*
|
|
28
|
+
* Accesses a property of an object given a path denoted by a string, number, or an array of string or numbers.
|
|
17
29
|
*
|
|
18
30
|
* ```javascript [playground]
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* ) // world
|
|
31
|
+
* const getHello = get('hello')
|
|
32
|
+
*
|
|
33
|
+
* console.log(getHello({ hello: 'world' })) // world
|
|
22
34
|
* ```
|
|
23
35
|
*
|
|
24
|
-
*
|
|
36
|
+
* If the value at the end of the path is not found on the object, returns an optional default value. The default value can be a function resolver that takes the object as an argument. If no default value is provided, returns `undefined`. The function resolver may be asynchronous (returns a promise).
|
|
25
37
|
*
|
|
26
38
|
* ```javascript [playground]
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* ) // default
|
|
39
|
+
* const getHelloWithDefaultValue = get('hello', 'default')
|
|
40
|
+
*
|
|
41
|
+
* console.log(getHelloWithDefaultValue({ foo: 'bar' })) // default
|
|
30
42
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* ) // bar
|
|
43
|
+
* const getHelloWithDefaultResolver = get('hello', object => object.foo)
|
|
44
|
+
*
|
|
45
|
+
* console.log(getHelloWithDefaultResolver({ foo: 'bar' })) // bar
|
|
34
46
|
* ```
|
|
35
47
|
*
|
|
36
48
|
* `get` supports three types of path patterns for nested property access.
|
|
@@ -40,32 +52,28 @@ const getByPath = require('./_internal/getByPath')
|
|
|
40
52
|
* * an array of keys or indices - `['a', 0, 'value']`
|
|
41
53
|
*
|
|
42
54
|
* ```javascript [playground]
|
|
43
|
-
* const
|
|
44
|
-
*
|
|
45
|
-
* console.log(
|
|
46
|
-
* get('a.b.c[0]')(nestedABC0),
|
|
47
|
-
* ) // hello
|
|
48
|
-
*
|
|
49
|
-
* const nested00000 = [[[[['foo']]]]]
|
|
55
|
+
* const getABC0 = get('a.b.c[0]')
|
|
50
56
|
*
|
|
51
|
-
* console.log(
|
|
52
|
-
* get('0.0.0.0.0')(nested00000),
|
|
53
|
-
* ) // foo
|
|
57
|
+
* console.log(getABC0({ a: { b: { c: ['hello'] } } })) // hello
|
|
54
58
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
59
|
+
* const get00000DotNotation = get('0.0.0.0.0')
|
|
60
|
+
* const get00000BracketNotation = get('[0][0][0][0][0]')
|
|
61
|
+
* const get00000ArrayNotation = get([0, 0, 0, 0, 0])
|
|
58
62
|
*
|
|
59
|
-
* console.log(
|
|
60
|
-
*
|
|
61
|
-
* ) // foo
|
|
63
|
+
* console.log(get00000DotNotation([[[[['foo']]]]])) // foo
|
|
64
|
+
* console.log(get00000BracketNotation([[[[['foo']]]]])) // foo
|
|
65
|
+
* console.log(get00000ArrayNotation([[[[['foo']]]]])) // foo
|
|
62
66
|
* ```
|
|
63
67
|
*/
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
|
|
69
|
+
const get = function (arg0, arg1, arg2) {
|
|
70
|
+
if (isPromise(arg0)) {
|
|
71
|
+
return arg0.then(curry3(_get, __, arg1, arg2))
|
|
72
|
+
}
|
|
73
|
+
if (isObject(arg0) && !isArray(arg0)) {
|
|
74
|
+
return _get(arg0, arg1, arg2)
|
|
75
|
+
}
|
|
76
|
+
return curry3(_get, __, arg0, arg1)
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
module.exports = get
|
package/global.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
globalThis.pipe = require('./pipe')
|
|
2
|
-
globalThis.
|
|
3
|
-
globalThis.assign = require('./assign')
|
|
2
|
+
globalThis.compose = require('./compose')
|
|
4
3
|
globalThis.tap = require('./tap')
|
|
4
|
+
globalThis.all = require('./all')
|
|
5
|
+
globalThis.assign = require('./assign')
|
|
5
6
|
globalThis.tryCatch = require('./tryCatch')
|
|
6
7
|
globalThis.switchCase = require('./switchCase')
|
|
7
8
|
globalThis.map = require('./map')
|
|
@@ -9,8 +10,9 @@ globalThis.filter = require('./filter')
|
|
|
9
10
|
globalThis.reduce = require('./reduce')
|
|
10
11
|
globalThis.transform = require('./transform')
|
|
11
12
|
globalThis.flatMap = require('./flatMap')
|
|
12
|
-
globalThis.
|
|
13
|
-
globalThis.
|
|
13
|
+
globalThis.forEach = require('./forEach')
|
|
14
|
+
globalThis.some = require('./some')
|
|
15
|
+
globalThis.every = require('./every')
|
|
14
16
|
globalThis.and = require('./and')
|
|
15
17
|
globalThis.or = require('./or')
|
|
16
18
|
globalThis.not = require('./not')
|
package/gt.js
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
|
-
const
|
|
2
|
-
const isPromise = require('./_internal/isPromise')
|
|
3
|
-
const promiseAll = require('./_internal/promiseAll')
|
|
1
|
+
const ComparisonOperator = require('./_internal/ComparisonOperator')
|
|
4
2
|
const greaterThan = require('./_internal/greaterThan')
|
|
5
|
-
const curry2 = require('./_internal/curry2')
|
|
6
|
-
const always = require('./_internal/always')
|
|
7
|
-
const __ = require('./_internal/placeholder')
|
|
8
3
|
|
|
9
4
|
/**
|
|
10
5
|
* @name gt
|
|
11
6
|
*
|
|
12
7
|
* @synopsis
|
|
13
8
|
* ```coffeescript [specscript]
|
|
14
|
-
* gt(leftValue any, rightValue any) -> boolean
|
|
15
|
-
*
|
|
16
|
-
* gt(
|
|
17
|
-
* gt(
|
|
9
|
+
* gt(leftValue Promise|any, rightValue Promise|any) -> boolean
|
|
10
|
+
*
|
|
11
|
+
* gt(leftValue Promise|any, right function)(...args) -> Promise|boolean
|
|
12
|
+
* gt(...args, leftValue Promise|any, right function) -> Promise|boolean
|
|
13
|
+
*
|
|
14
|
+
* gt(left function, rightValue Promise|any)(...args) -> Promise|boolean
|
|
15
|
+
* gt(...args, left function, rightValue Promise|any) -> Promise|boolean
|
|
16
|
+
*
|
|
17
|
+
* gt(left function, right function)(...args) -> Promise|boolean
|
|
18
|
+
* gt(...args, left function, right function) -> Promise|boolean
|
|
18
19
|
* ```
|
|
19
20
|
*
|
|
20
21
|
* @description
|
|
21
|
-
* Test if a
|
|
22
|
-
*
|
|
23
|
-
* If both arguments are values, `gt` eagerly computes and returns a boolean value.
|
|
22
|
+
* Test if a value is greater than (`>`) another value.
|
|
24
23
|
*
|
|
25
24
|
* ```javascript [playground]
|
|
26
25
|
* const age = 40
|
|
@@ -30,58 +29,16 @@ const __ = require('./_internal/placeholder')
|
|
|
30
29
|
* console.log(isAgeGreaterThan21) // true
|
|
31
30
|
* ```
|
|
32
31
|
*
|
|
33
|
-
* If
|
|
34
|
-
*
|
|
35
|
-
* If only one argument is a function, `gt` still returns a function that resolves its arguments by the argument resolver, treating the value (non function) argument as an already resolved value for comparison.
|
|
32
|
+
* If either of the two values are resolver functions, `gt` returns a function that resolves the values to compare from its arguments.
|
|
36
33
|
*
|
|
37
34
|
* ```javascript [playground]
|
|
38
|
-
* const isOfLegalAge = gt(21,
|
|
35
|
+
* const isOfLegalAge = gt(21, get('age'))
|
|
39
36
|
*
|
|
40
37
|
* const juvenile = { age: 16 }
|
|
41
38
|
*
|
|
42
39
|
* console.log(isOfLegalAge(juvenile)) // false
|
|
43
40
|
* ```
|
|
44
41
|
*/
|
|
45
|
-
const gt =
|
|
46
|
-
const isLeftResolver = typeof left == 'function',
|
|
47
|
-
isRightResolver = typeof right == 'function'
|
|
48
|
-
|
|
49
|
-
if (isLeftResolver && isRightResolver) {
|
|
50
|
-
return function greaterThanBy(value) {
|
|
51
|
-
const leftResolve = left(value),
|
|
52
|
-
rightResolve = right(value)
|
|
53
|
-
const isLeftPromise = isPromise(leftResolve),
|
|
54
|
-
isRightPromise = isPromise(rightResolve)
|
|
55
|
-
if (isLeftPromise && isRightPromise) {
|
|
56
|
-
return promiseAll(
|
|
57
|
-
[leftResolve, rightResolve]).then(spread2(greaterThan))
|
|
58
|
-
} else if (isLeftPromise) {
|
|
59
|
-
return leftResolve.then(curry2(greaterThan, __, rightResolve))
|
|
60
|
-
} else if (isRightPromise) {
|
|
61
|
-
return rightResolve.then(curry2(greaterThan, leftResolve, __))
|
|
62
|
-
}
|
|
63
|
-
return leftResolve > rightResolve
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (isLeftResolver) {
|
|
68
|
-
return function greaterThanBy(value) {
|
|
69
|
-
const leftResolve = left(value)
|
|
70
|
-
return isPromise(leftResolve)
|
|
71
|
-
? leftResolve.then(curry2(greaterThan, __, right))
|
|
72
|
-
: leftResolve > right
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
if (isRightResolver) {
|
|
76
|
-
return function strictEqualBy(value) {
|
|
77
|
-
const rightResolve = right(value)
|
|
78
|
-
return isPromise(rightResolve)
|
|
79
|
-
? rightResolve.then(curry2(greaterThan, left, __))
|
|
80
|
-
: left > rightResolve
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return left > right
|
|
85
|
-
}
|
|
42
|
+
const gt = ComparisonOperator(greaterThan)
|
|
86
43
|
|
|
87
44
|
module.exports = gt
|