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/reduce.js
CHANGED
|
@@ -1,173 +1,172 @@
|
|
|
1
1
|
const isPromise = require('./_internal/isPromise')
|
|
2
2
|
const __ = require('./_internal/placeholder')
|
|
3
3
|
const curry3 = require('./_internal/curry3')
|
|
4
|
-
const curryArgs3 = require('./_internal/curryArgs3')
|
|
5
4
|
const genericReduce = require('./_internal/genericReduce')
|
|
6
5
|
|
|
6
|
+
// _reduce(collection any, reducer function, initialValue function|any) -> Promise
|
|
7
|
+
const _reduce = function (collection, reducer, initialValue) {
|
|
8
|
+
if (typeof initialValue == 'function') {
|
|
9
|
+
const actualInitialValue = initialValue(collection)
|
|
10
|
+
return isPromise(actualInitialValue)
|
|
11
|
+
? actualInitialValue.then(curry3(genericReduce, collection, reducer, __))
|
|
12
|
+
: genericReduce(collection, reducer, actualInitialValue)
|
|
13
|
+
}
|
|
14
|
+
return isPromise(initialValue)
|
|
15
|
+
? initialValue.then(curry3(genericReduce, collection, reducer, __))
|
|
16
|
+
: genericReduce(collection, reducer, initialValue)
|
|
17
|
+
}
|
|
18
|
+
|
|
7
19
|
/**
|
|
8
20
|
* @name reduce
|
|
9
21
|
*
|
|
10
22
|
* @synopsis
|
|
11
23
|
* ```coffeescript [specscript]
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* initialValue? (object=>Promise|any)|any,
|
|
20
|
-
* )(object) -> Promise|result
|
|
21
|
-
*
|
|
22
|
-
* reduce(
|
|
23
|
-
* mapReducer (result any, value any, key any, map Map)=>Promise|any,
|
|
24
|
-
* initialValue? (map=>Promise|any)|any,
|
|
25
|
-
* )(map) -> Promise|result
|
|
26
|
-
*
|
|
27
|
-
* Foldable = Iterable|AsyncIterable|{ reduce: (reducer, result?)=>any }
|
|
28
|
-
*
|
|
29
|
-
* reduce(
|
|
30
|
-
* reducer (result any, value any)=>Promise|any,
|
|
31
|
-
* initialValue? ((foldable Foldable)=>Promise|any)|any,
|
|
32
|
-
* )(foldable) -> Promise|result
|
|
24
|
+
* type Foldable = Array|Object|Map|Iterator|AsyncIterator
|
|
25
|
+
* type Reducer = (
|
|
26
|
+
* accumulator any,
|
|
27
|
+
* value any,
|
|
28
|
+
* indexOrKey? number|string,
|
|
29
|
+
* collection? Foldable,
|
|
30
|
+
* )=>(nextAccumulator Promise|any)
|
|
33
31
|
*
|
|
34
32
|
* reduce(
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
33
|
+
* collection Foldable,
|
|
34
|
+
* reducer Reducer,
|
|
35
|
+
* initialValue? function|any
|
|
36
|
+
* ) -> result Promise|any
|
|
38
37
|
*
|
|
39
38
|
* reduce(
|
|
40
|
-
* reducer
|
|
41
|
-
* initialValue?
|
|
42
|
-
* )(
|
|
43
|
-
*
|
|
44
|
-
* reduce(reducer, initialValue?)(...moreReducers) -> ...args=>Promise|any
|
|
39
|
+
* reducer Reducer,
|
|
40
|
+
* initialValue? function|any
|
|
41
|
+
* )(collection Foldable) -> result Promise|any
|
|
45
42
|
* ```
|
|
46
43
|
*
|
|
47
44
|
* @description
|
|
48
|
-
*
|
|
45
|
+
* Transforms a collection based on a reducer function and optional initial value. In a reducing operation, the result is defined in the beginning as either the initial value if supplied or the first item of the collection. The reducing operation then iterates through the remaining items in the collection, executing the reducer at each iteration to return the result to be used in the next iteration. The final result is the result of the execution of the reducer at the last item of the iteration. `reduce` accepts the following collections:
|
|
46
|
+
*
|
|
47
|
+
* * `Array`
|
|
48
|
+
* * `Object`
|
|
49
|
+
* * `Set`
|
|
50
|
+
* * `Map`
|
|
51
|
+
* * `Iterator`/`Generator`
|
|
52
|
+
* * `AsyncIterator`/`AsyncGenerator`
|
|
53
|
+
*
|
|
54
|
+
* For arrays (type `Array`), `reduce` executes the reducer function for each item of the array in order, returning a new result at each execution to be used in the next execution. On each iteration, the reducer is passed the accumulator, the item of the iteration, the index of the item in the array, and a reference to the original array.
|
|
49
55
|
*
|
|
50
56
|
* ```javascript [playground]
|
|
51
57
|
* const max = (a, b) => a > b ? a : b
|
|
52
58
|
*
|
|
53
59
|
* console.log(
|
|
54
|
-
* reduce(
|
|
60
|
+
* reduce([1, 3, 5, 4, 2], max)
|
|
61
|
+
* ) // 5
|
|
62
|
+
*
|
|
63
|
+
* console.log(
|
|
64
|
+
* reduce(max)([1, 3, 5, 4, 2])
|
|
55
65
|
* ) // 5
|
|
56
66
|
* ```
|
|
57
67
|
*
|
|
58
|
-
* If an optional
|
|
68
|
+
* If an optional initial value is provided, the result starts as the provided initial value rather than the first item of the collection.
|
|
59
69
|
*
|
|
60
70
|
* ```javascript [playground]
|
|
61
71
|
* const add = (a, b) => a + b
|
|
62
72
|
*
|
|
63
|
-
* console.log(
|
|
64
|
-
*
|
|
65
|
-
* ) // 15
|
|
73
|
+
* console.log(reduce([1, 2, 3, 4, 5], add, 0)) // 15
|
|
74
|
+
* console.log(reduce(add, 0)([1, 2, 3, 4, 5])) // 15
|
|
66
75
|
* ```
|
|
67
76
|
*
|
|
68
|
-
* If the initialization parameter is a function, it is treated as a resolver and called with the
|
|
77
|
+
* If the initialization parameter is a function, it is treated as a resolver and called with the arguments to resolve the initial value.
|
|
69
78
|
*
|
|
70
79
|
* ```javascript [playground]
|
|
71
80
|
* const concatSquares = (array, value) => array.concat(value ** 2)
|
|
72
81
|
*
|
|
73
|
-
* const
|
|
82
|
+
* const contrivedInitializer = array => [`initial length ${array.length}`]
|
|
83
|
+
*
|
|
84
|
+
* const array = [1, 2, 3, 4, 5]
|
|
85
|
+
*
|
|
86
|
+
* console.log(reduce(concatSquares, contrivedInitializer)(array))
|
|
87
|
+
* // ['initial length 5', 1, 4, 9, 16, 25]
|
|
88
|
+
* console.log(reduce(array, concatSquares, contrivedInitializer))
|
|
89
|
+
* // ['initial length 5', 1, 4, 9, 16, 25]
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* For objects (type `Object`), `reduce` executes the reducer function for each value of the object. On each iteration, the reducer is passed the accumulator, the object value, the key of the object value, and a reference to the original object.
|
|
93
|
+
*
|
|
94
|
+
* ```javascript [playground]
|
|
95
|
+
* const add = (a, b) => a + b
|
|
96
|
+
*
|
|
97
|
+
* const obj = { a: 1, b: 2, c: 3, d: 4, e: 5 }
|
|
98
|
+
*
|
|
99
|
+
* console.log(
|
|
100
|
+
* reduce(obj, add)
|
|
101
|
+
* ) // 15
|
|
74
102
|
*
|
|
75
103
|
* console.log(
|
|
76
|
-
* reduce(
|
|
77
|
-
* ) //
|
|
104
|
+
* reduce(add)(obj)
|
|
105
|
+
* ) // 15
|
|
78
106
|
* ```
|
|
79
107
|
*
|
|
80
|
-
*
|
|
108
|
+
* For sets (type `Set`), `reduce` executes the reducer function for each item of the set. On each iteration, the reducer is passed the accumulator and item of the set.
|
|
81
109
|
*
|
|
82
110
|
* ```javascript [playground]
|
|
83
|
-
* const
|
|
84
|
-
*
|
|
85
|
-
* // asyncAppReducer(
|
|
86
|
-
* // state { todos: Array },
|
|
87
|
-
* // action { type: string, todoID: string },
|
|
88
|
-
* // ) -> state
|
|
89
|
-
* const asyncAppReducer = async function (state, action) {
|
|
90
|
-
* if (action.type == 'FETCH_TODO') {
|
|
91
|
-
* const todo = await fetch(
|
|
92
|
-
* 'https://jsonplaceholder.typicode.com/todos/' + action.todoID,
|
|
93
|
-
* ).then(response => response.json())
|
|
94
|
-
* console.log('fetched', todo)
|
|
95
|
-
* state.todos.push(todo)
|
|
96
|
-
* return state
|
|
97
|
-
* }
|
|
98
|
-
* return state
|
|
99
|
-
* }
|
|
111
|
+
* const add = (a, b) => a + b
|
|
100
112
|
*
|
|
101
|
-
* const
|
|
102
|
-
* let idCount = 0
|
|
103
|
-
* while (++idCount <= count) {
|
|
104
|
-
* await sleep(1000)
|
|
105
|
-
* yield { type: 'FETCH_TODO', todoID: idCount }
|
|
106
|
-
* }
|
|
107
|
-
* }
|
|
113
|
+
* const set = new Set([1, 2, 3, 4, 5])
|
|
108
114
|
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
* //
|
|
116
|
-
* // fetched { userId: 1, id: 3, title: 'fugiat veniam minus', completed: false }
|
|
117
|
-
* // fetched { userId: 1, id: 4, title: 'et porro tempora', completed: true }
|
|
118
|
-
* // fetched { userId: 1, id: 5, title: 'laboriosam mollitia...', completed: false }
|
|
119
|
-
* // finalState {
|
|
120
|
-
* // todos: [
|
|
121
|
-
* // { userId: 1, id: 1, title: 'delectus aut autem', completed: false },
|
|
122
|
-
* // { userId: 1, id: 2, title: 'quis ut nam facilis...', completed: false },
|
|
123
|
-
* // { userId: 1, id: 3, title: 'fugiat veniam minus', completed: false },
|
|
124
|
-
* // { userId: 1, id: 4, title: 'et porro tempora', completed: true },
|
|
125
|
-
* // { userId: 1, id: 5, title: 'laboriosam mollitia...', completed: false },
|
|
126
|
-
* // ],
|
|
127
|
-
* // }
|
|
115
|
+
* console.log(
|
|
116
|
+
* reduce(set, add)
|
|
117
|
+
* ) // 15
|
|
118
|
+
*
|
|
119
|
+
* console.log(
|
|
120
|
+
* reduce(add)(set)
|
|
121
|
+
* ) // 15
|
|
128
122
|
* ```
|
|
129
123
|
*
|
|
130
|
-
*
|
|
124
|
+
* For maps (type `Map`), `reduce` executes the reducer function for each value of each entry of the map. On each iteration, the reducer is passed the accumulator, the map item, the key of the map item, and a reference to the original map.
|
|
131
125
|
*
|
|
132
126
|
* ```javascript [playground]
|
|
133
|
-
* const
|
|
134
|
-
* if (action.type == 'A') return { ...state, A: true }
|
|
135
|
-
* return state
|
|
136
|
-
* }
|
|
127
|
+
* const add = (a, b) => a + b
|
|
137
128
|
*
|
|
138
|
-
* const
|
|
139
|
-
* if (action.type == 'B') return { ...state, B: true }
|
|
140
|
-
* return state
|
|
141
|
-
* }
|
|
129
|
+
* const m = new Map([['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]])
|
|
142
130
|
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
* }
|
|
131
|
+
* console.log(
|
|
132
|
+
* reduce(m, add)
|
|
133
|
+
* ) // 15
|
|
147
134
|
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
135
|
+
* console.log(
|
|
136
|
+
* reduce(add)(m)
|
|
137
|
+
* ) // 15
|
|
138
|
+
* ```
|
|
151
139
|
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
140
|
+
* For iterators (type `Iterator`) and generators (type `Generator`), `reduce` executes the reducer function for each value of the iterator/generator. On each iteration, the reducer is passed the accumulator and the item of the iteration. The iterator/generator is consumed in the process.
|
|
141
|
+
*
|
|
142
|
+
* ```javascript [playground]
|
|
143
|
+
* const add = (a, b) => a + b
|
|
154
144
|
*
|
|
155
|
-
* const
|
|
145
|
+
* const generate12345 = function* () {
|
|
146
|
+
* yield 1; yield 2; yield 3; yield 4; yield 5
|
|
147
|
+
* }
|
|
156
148
|
*
|
|
157
149
|
* console.log(
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
150
|
+
* reduce(generate12345(), add)
|
|
151
|
+
* ) // 15
|
|
152
|
+
*
|
|
153
|
+
* console.log(
|
|
154
|
+
* reduce(add)(generate12345())
|
|
155
|
+
* ) // 15
|
|
161
156
|
* ```
|
|
162
157
|
*
|
|
163
|
-
* `reduce
|
|
158
|
+
* For asyncIterators (type `AsyncIterator`) and asyncGenerators (type `AsyncGenerator`), `reduce` executes the reducer function for each value of the asyncIterator/asyncGenerator. On each iteration, the reducer is passed the accumulator and the item of the async iteration. The asyncIterator/asyncGenerator is consumed in the process.
|
|
164
159
|
*
|
|
165
160
|
* ```javascript [playground]
|
|
166
|
-
* const
|
|
161
|
+
* const asyncAdd = async (a, b) => a + b
|
|
162
|
+
*
|
|
163
|
+
* const asyncGenerate12345 = async function* () {
|
|
164
|
+
* yield 1; yield 2; yield 3; yield 4; yield 5
|
|
165
|
+
* }
|
|
167
166
|
*
|
|
168
|
-
*
|
|
167
|
+
* reduce(asyncGenerate12345(), asyncAdd).then(console.log) // 15
|
|
169
168
|
*
|
|
170
|
-
*
|
|
169
|
+
* reduce(asyncAdd)(asyncGenerate12345()).then(console.log) // 15
|
|
171
170
|
* ```
|
|
172
171
|
*
|
|
173
172
|
* @execution series
|
|
@@ -180,27 +179,13 @@ const genericReduce = require('./_internal/genericReduce')
|
|
|
180
179
|
*/
|
|
181
180
|
|
|
182
181
|
const reduce = function (...args) {
|
|
183
|
-
if (typeof args[0]
|
|
184
|
-
|
|
185
|
-
const initialValue = args[2]
|
|
186
|
-
if (typeof initialValue == 'function') {
|
|
187
|
-
return genericReduce([args[0]], reducer, initialValue(args[0]))
|
|
188
|
-
}
|
|
189
|
-
return genericReduce([args[0]], reducer, initialValue)
|
|
182
|
+
if (typeof args[0] == 'function') {
|
|
183
|
+
return curry3(_reduce, __, args[0], args[1])
|
|
190
184
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
const initialValue = args[1]
|
|
194
|
-
|
|
195
|
-
if (typeof initialValue == 'function') {
|
|
196
|
-
return function reducing(...args) {
|
|
197
|
-
const result = initialValue(...args)
|
|
198
|
-
return isPromise(result)
|
|
199
|
-
? result.then(curry3(genericReduce, args, reducer, __))
|
|
200
|
-
: genericReduce(args, reducer, result)
|
|
201
|
-
}
|
|
185
|
+
if (isPromise(args[0])) {
|
|
186
|
+
return args[0].then(curry3(_reduce, __, args[1], args[2]))
|
|
202
187
|
}
|
|
203
|
-
return
|
|
188
|
+
return _reduce(args[0], args[1], args[2])
|
|
204
189
|
}
|
|
205
190
|
|
|
206
191
|
module.exports = reduce
|
package/rubico.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
const pipe = require('./pipe')
|
|
2
|
-
const
|
|
3
|
-
const assign = require('./assign')
|
|
2
|
+
const compose = require('./compose')
|
|
4
3
|
const tap = require('./tap')
|
|
4
|
+
const all = require('./all')
|
|
5
|
+
const assign = require('./assign')
|
|
5
6
|
const tryCatch = require('./tryCatch')
|
|
6
7
|
const switchCase = require('./switchCase')
|
|
7
8
|
const map = require('./map')
|
|
@@ -9,8 +10,9 @@ const filter = require('./filter')
|
|
|
9
10
|
const reduce = require('./reduce')
|
|
10
11
|
const transform = require('./transform')
|
|
11
12
|
const flatMap = require('./flatMap')
|
|
12
|
-
const
|
|
13
|
-
const
|
|
13
|
+
const forEach = require('./forEach')
|
|
14
|
+
const some = require('./some')
|
|
15
|
+
const every = require('./every')
|
|
14
16
|
const and = require('./and')
|
|
15
17
|
const or = require('./or')
|
|
16
18
|
const not = require('./not')
|
|
@@ -42,11 +44,11 @@ const __ = require('./__')
|
|
|
42
44
|
*/
|
|
43
45
|
|
|
44
46
|
const rubico = {
|
|
45
|
-
pipe, tap,
|
|
47
|
+
pipe, compose, tap,
|
|
46
48
|
switchCase, tryCatch,
|
|
47
|
-
|
|
48
|
-
map, filter, reduce, transform,
|
|
49
|
-
and, or, not,
|
|
49
|
+
all, assign, get, set, pick, omit,
|
|
50
|
+
map, filter, flatMap, forEach, reduce, transform,
|
|
51
|
+
and, or, not, some, every,
|
|
50
52
|
eq, gt, lt, gte, lte,
|
|
51
53
|
thunkify, always,
|
|
52
54
|
curry, __,
|
package/set.js
CHANGED
|
@@ -3,36 +3,75 @@ const setByPath = require('./_internal/setByPath')
|
|
|
3
3
|
const curry3 = require('./_internal/curry3')
|
|
4
4
|
const __ = require('./_internal/placeholder')
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* @name _set
|
|
8
|
+
*
|
|
9
|
+
* @synopsis
|
|
10
|
+
* ```coffeescript [specscript]
|
|
11
|
+
* _set(
|
|
12
|
+
* obj Object,
|
|
13
|
+
* path string|Array<string|number>,
|
|
14
|
+
* value function|any,
|
|
15
|
+
* ) -> result Promise|Object
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
const _set = function (obj, path, value) {
|
|
19
|
+
if (typeof value == 'function') {
|
|
20
|
+
const actualValue = value(obj)
|
|
21
|
+
if (isPromise(actualValue)) {
|
|
22
|
+
return actualValue.then(
|
|
23
|
+
curry3(setByPath, obj, __, path)
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
return setByPath(obj, actualValue, path)
|
|
27
|
+
}
|
|
28
|
+
if (isPromise(value)) {
|
|
29
|
+
return value.then(
|
|
30
|
+
curry3(setByPath, obj, __, path)
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
return setByPath(obj, value, path)
|
|
34
|
+
}
|
|
35
|
+
|
|
6
36
|
/**
|
|
7
37
|
* @name set
|
|
8
38
|
*
|
|
9
39
|
* @synopsis
|
|
10
40
|
* ```coffeescript [specscript]
|
|
11
|
-
*
|
|
41
|
+
* set(
|
|
42
|
+
* object Object,
|
|
12
43
|
* path string|Array<string|number>,
|
|
13
|
-
* value
|
|
44
|
+
* value function|any,
|
|
45
|
+
* ) -> result Promise|Object
|
|
14
46
|
*
|
|
15
|
-
* set(
|
|
47
|
+
* set(
|
|
48
|
+
* path string|Array<string|number>,
|
|
49
|
+
* value function|any,
|
|
50
|
+
* )(object Object) -> result Promise|Object
|
|
16
51
|
* ```
|
|
17
52
|
*
|
|
18
53
|
* @description
|
|
19
|
-
*
|
|
54
|
+
* Sets a property on a new object shallow cloned from the argument object given a path denoted by a string, number, or an array of string or numbers.
|
|
55
|
+
*
|
|
56
|
+
* `set` supports three types of path patterns for nested property access.
|
|
57
|
+
*
|
|
58
|
+
* * dot delimited - `'a.b.c'`
|
|
59
|
+
* * bracket notation - `'a[0].value'`
|
|
60
|
+
* * an array of keys or indices - `['a', 0, 'value']`
|
|
20
61
|
*
|
|
21
62
|
* ```javascript [playground]
|
|
22
|
-
* console.log(
|
|
23
|
-
* set('a', 1)({ b: 2 })
|
|
24
|
-
* ) // { a: 1, b: 2 }
|
|
63
|
+
* console.log(set('a', 1)({ b: 2 })) // { a: 1, b: 2 }
|
|
25
64
|
*
|
|
26
|
-
*
|
|
27
|
-
* set('a.b', 1)({ a: { c: 2 } }),
|
|
28
|
-
* ) // { a : { b: 1, c: 2 }}
|
|
65
|
+
* const nestedAC2 = { a: { c: 2 } }
|
|
29
66
|
*
|
|
30
|
-
* console.log(
|
|
31
|
-
*
|
|
32
|
-
*
|
|
67
|
+
* console.log(set('a.b', 1)(nestedAC2)) // { a : { b: 1, c: 2 }}
|
|
68
|
+
*
|
|
69
|
+
* const nestedA0BC3 = { a: [{ b: { c: 3 } }] }
|
|
70
|
+
*
|
|
71
|
+
* console.log(set('a[0].b.c', 4)(nestedA0BC3)) // { a: [{ b: { c: 4 } }] }
|
|
33
72
|
* ```
|
|
34
73
|
*
|
|
35
|
-
* The property value may be a function, in which case it is treated as a resolver and
|
|
74
|
+
* The property value may be a function, in which case it is treated as a resolver and provided the argument object to resolve the value to set.
|
|
36
75
|
*
|
|
37
76
|
* ```javascript [playground]
|
|
38
77
|
* const myObj = { a: 1 }
|
|
@@ -45,17 +84,14 @@ const __ = require('./_internal/placeholder')
|
|
|
45
84
|
* @since 1.7.0
|
|
46
85
|
*/
|
|
47
86
|
|
|
48
|
-
const set = (
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
if (isPromise(actualValue)) {
|
|
52
|
-
return actualValue.then(
|
|
53
|
-
curry3(setByPath, obj, __, path)
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
return setByPath(obj, actualValue, path)
|
|
87
|
+
const set = function (arg0, arg1, arg2) {
|
|
88
|
+
if (arg2 == null) {
|
|
89
|
+
return curry3(_set, __, arg0, arg1)
|
|
57
90
|
}
|
|
58
|
-
|
|
91
|
+
if (isPromise(arg0)) {
|
|
92
|
+
return arg0.then(curry3(_set, __, arg1, arg2))
|
|
93
|
+
}
|
|
94
|
+
return _set(arg0, arg1, arg2)
|
|
59
95
|
}
|
|
60
96
|
|
|
61
97
|
module.exports = set
|
package/some.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
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 objectValues = require('./_internal/objectValues')
|
|
6
|
+
const arraySome = require('./_internal/arraySome')
|
|
7
|
+
const iteratorSome = require('./_internal/iteratorSome')
|
|
8
|
+
const asyncIteratorSome = require('./_internal/asyncIteratorSome')
|
|
9
|
+
const reducerSome = require('./_internal/reducerSome')
|
|
10
|
+
const symbolIterator = require('./_internal/symbolIterator')
|
|
11
|
+
const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
|
|
12
|
+
|
|
13
|
+
// _some(collection Array|Iterable|AsyncIterable|{ reduce: function }|Object, predicate function) -> Promise|boolean
|
|
14
|
+
const _some = function (collection, predicate) {
|
|
15
|
+
if (isArray(collection)) {
|
|
16
|
+
return arraySome(collection, predicate)
|
|
17
|
+
}
|
|
18
|
+
if (collection == null) {
|
|
19
|
+
return predicate(collection)
|
|
20
|
+
}
|
|
21
|
+
if (typeof collection[symbolIterator] == 'function') {
|
|
22
|
+
return iteratorSome(collection[symbolIterator](), predicate)
|
|
23
|
+
}
|
|
24
|
+
if (typeof collection[symbolAsyncIterator] == 'function') {
|
|
25
|
+
return asyncIteratorSome(
|
|
26
|
+
collection[symbolAsyncIterator](), predicate, new Set()
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
if (typeof collection.reduce == 'function') {
|
|
30
|
+
return collection.reduce(reducerSome(predicate), false)
|
|
31
|
+
}
|
|
32
|
+
if (collection.constructor == Object) {
|
|
33
|
+
return arraySome(objectValues(collection), predicate)
|
|
34
|
+
}
|
|
35
|
+
return predicate(collection)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @name some
|
|
40
|
+
*
|
|
41
|
+
* @synopsis
|
|
42
|
+
* ```coffeescript [specscript]
|
|
43
|
+
* type Foldable = Array|Iterable|AsyncIterable|{ reduce: function }|Object
|
|
44
|
+
*
|
|
45
|
+
* some(collection Foldable, predicate function) -> Promise|boolean
|
|
46
|
+
*
|
|
47
|
+
* some(predicate function)(collection Foldable) -> Promise|boolean
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @description
|
|
51
|
+
* Test a predicate concurrently across all items of a collection, returning true if any executions return truthy.
|
|
52
|
+
*
|
|
53
|
+
* ```javascript [playground]
|
|
54
|
+
* const isOdd = number => number % 2 == 1
|
|
55
|
+
*
|
|
56
|
+
* console.log(
|
|
57
|
+
* some([1, 2, 3, 4, 5], isOdd),
|
|
58
|
+
* ) // true
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* The collection can be any iterable, async iterable, or object values iterable collection. Below is an example of `some` accepting an async generator as the collection.
|
|
62
|
+
*
|
|
63
|
+
* ```javascript [playground]
|
|
64
|
+
* const toTodosUrl = id => 'https://jsonplaceholder.typicode.com/todos/' + id
|
|
65
|
+
*
|
|
66
|
+
* const fetchedToJson = fetched => fetched.json()
|
|
67
|
+
*
|
|
68
|
+
* const fetchTodo = pipe([
|
|
69
|
+
* toTodosUrl,
|
|
70
|
+
* fetch,
|
|
71
|
+
* fetchedToJson,
|
|
72
|
+
* ])
|
|
73
|
+
*
|
|
74
|
+
* const todoIDsGenerator = async function* () {
|
|
75
|
+
* yield 1; yield 2; yield 3; yield 4; yield 5
|
|
76
|
+
* }
|
|
77
|
+
*
|
|
78
|
+
* some(pipe([
|
|
79
|
+
* fetchTodo,
|
|
80
|
+
* todo => todo.title.startsWith('fugiat'),
|
|
81
|
+
* ]))(todoIDsGenerator()).then(console.log) // true
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @execution concurrent
|
|
85
|
+
*
|
|
86
|
+
* @muxing
|
|
87
|
+
*
|
|
88
|
+
* @related or
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
const some = function (...args) {
|
|
92
|
+
const predicate = args.pop()
|
|
93
|
+
if (args.length == 0) {
|
|
94
|
+
return curry2(_some, __, predicate)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const collection = args[0]
|
|
98
|
+
if (isPromise(collection)) {
|
|
99
|
+
return collection.then(curry2(_some, __, predicate))
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return _some(collection, predicate)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
module.exports = some
|
package/switchCase.js
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
|
+
const promiseAll = require('./_internal/promiseAll')
|
|
2
|
+
const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
|
|
1
3
|
const arrayConditional = require('./_internal/arrayConditional')
|
|
2
4
|
const areAllValuesNonfunctions = require('./_internal/areAllValuesNonfunctions')
|
|
3
5
|
const nonfunctionsConditional = require('./_internal/nonfunctionsConditional')
|
|
6
|
+
const __ = require('./_internal/placeholder')
|
|
7
|
+
const curry3 = require('./_internal/curry3')
|
|
8
|
+
const curryArgs3 = require('./_internal/curryArgs3')
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* @name switchCase
|
|
7
12
|
*
|
|
8
13
|
* @synopsis
|
|
9
14
|
* ```coffeescript [specscript]
|
|
10
|
-
*
|
|
11
|
-
* result any,
|
|
12
|
-
* predicate ...args=>Promise|boolean,
|
|
13
|
-
* resolver ...args=>Promise|result,
|
|
14
|
-
* defaultResolver ...args=>Promise|result,
|
|
15
|
-
* conditionalFunctions [
|
|
16
|
-
* ...Array<predicate|resolver>,
|
|
17
|
-
* defaultResolver,
|
|
18
|
-
* ]
|
|
15
|
+
* switchCase(conditionalValues Array<boolean|any>) -> Promise|any
|
|
19
16
|
*
|
|
20
|
-
* switchCase(
|
|
17
|
+
* switchCase(
|
|
18
|
+
* conditionalFuncsOrValues Array<function|boolean|any>
|
|
19
|
+
* )(...args) -> Promise|any
|
|
21
20
|
* ```
|
|
22
21
|
*
|
|
23
22
|
* @description
|
|
24
|
-
* Conditional operator
|
|
23
|
+
* Functional equivalent to the [Conditional (ternary) operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator). Accepts an array of conditional functions that specifies cases as pairings of `predicate` and `resolver` functions with the exception of the last, default resolver. All functions are provided with the same arguments and executed in series. The result of a `switchCase` execution is either the result of the execution the last default resolver, or the result of the execution of the first resolver where the associated predicate tested truthy.
|
|
25
24
|
*
|
|
26
25
|
* ```javascript [playground]
|
|
27
26
|
* const fruitIsYellow = fruit => fruit.color == 'yellow'
|
|
@@ -32,12 +31,14 @@ const nonfunctionsConditional = require('./_internal/nonfunctionsConditional')
|
|
|
32
31
|
* fruit => fruit.name + ' is probably not a banana',
|
|
33
32
|
* ])
|
|
34
33
|
*
|
|
35
|
-
* console.log(
|
|
36
|
-
*
|
|
37
|
-
*
|
|
34
|
+
* console.log(fruitsGuesser({ name: 'plantain', color: 'yellow' }))
|
|
35
|
+
* // plantain is possibly a banana
|
|
36
|
+
*
|
|
37
|
+
* console.log(fruitsGuesser({ name: 'apple', color: 'red' }))
|
|
38
|
+
* // apple is probably not a banana
|
|
38
39
|
* ```
|
|
39
40
|
*
|
|
40
|
-
*
|
|
41
|
+
* Any function can be replaced with a nonfunction (object or primitive) value so that the value is treated as an already resolved value.
|
|
41
42
|
*
|
|
42
43
|
* ```javascript [playground]
|
|
43
44
|
* switchCase([
|
|
@@ -49,27 +50,30 @@ const nonfunctionsConditional = require('./_internal/nonfunctionsConditional')
|
|
|
49
50
|
* ])(false).then(console.log) // default
|
|
50
51
|
* ```
|
|
51
52
|
*
|
|
52
|
-
* If every item in the
|
|
53
|
+
* If every item in the conditional array is a nonfunction value, `switchCase` executes eagerly.
|
|
53
54
|
*
|
|
54
55
|
* ```javascript [playground]
|
|
55
|
-
* const
|
|
56
|
+
* const age = 26
|
|
56
57
|
*
|
|
57
|
-
* switchCase([
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* 'default',
|
|
61
|
-
* ]).then(console.log) // hello world
|
|
58
|
+
* const myDrink = switchCase([age >= 21, 'Beer', 'Juice'])
|
|
59
|
+
*
|
|
60
|
+
* console.log(myDrink) // Beer
|
|
62
61
|
* ```
|
|
63
62
|
*
|
|
64
63
|
* @execution series
|
|
65
64
|
*/
|
|
66
|
-
const switchCase =
|
|
65
|
+
const switchCase = (...args) => {
|
|
66
|
+
const values = args.pop()
|
|
67
67
|
if (areAllValuesNonfunctions(values)) {
|
|
68
68
|
return nonfunctionsConditional(values, -2)
|
|
69
69
|
}
|
|
70
|
-
|
|
71
|
-
return arrayConditional
|
|
70
|
+
if (args.length == 0) {
|
|
71
|
+
return curryArgs3(arrayConditional, values, __, -2)
|
|
72
|
+
}
|
|
73
|
+
if (areAnyValuesPromises(args)) {
|
|
74
|
+
return promiseAll(args).then(curry3(arrayConditional, values, __, -2))
|
|
72
75
|
}
|
|
76
|
+
return arrayConditional(values, args, -2)
|
|
73
77
|
}
|
|
74
78
|
|
|
75
79
|
module.exports = switchCase
|