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/memory-usage/reduce.js
CHANGED
|
@@ -15,7 +15,7 @@ const asyncGenerator = async function*(i) {
|
|
|
15
15
|
yield 3
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
setImmediate(async () => {
|
|
19
19
|
let i = 0, maxHeapUsed = 0
|
|
20
20
|
while (i < iterations) {
|
|
21
21
|
const p = reduce((a, b) => a + b, 0)(asyncGenerator(i))
|
|
@@ -35,6 +35,6 @@ void (async () => {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
console.log('maxHeapUsed (MiB)', maxHeapUsed / 1024 / 1024)
|
|
38
|
-
})
|
|
38
|
+
})
|
|
39
39
|
|
|
40
40
|
// https://stackoverflow.com/questions/62336381/is-this-promise-cancellation-implementation-for-reducing-an-async-iterable-on-th
|
package/not.js
CHANGED
|
@@ -1,21 +1,33 @@
|
|
|
1
|
+
const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
|
|
1
2
|
const isPromise = require('./_internal/isPromise')
|
|
3
|
+
const promiseAll = require('./_internal/promiseAll')
|
|
4
|
+
const __ = require('./_internal/placeholder')
|
|
5
|
+
const curry2 = require('./_internal/curry2')
|
|
6
|
+
const curryArgs2 = require('./_internal/curryArgs2')
|
|
2
7
|
|
|
3
|
-
//
|
|
4
|
-
const
|
|
8
|
+
// negate(value boolean) -> inverse boolean
|
|
9
|
+
const negate = value => !value
|
|
10
|
+
|
|
11
|
+
// _not(args Array, predicate function)
|
|
12
|
+
const _not = function (args, predicate) {
|
|
13
|
+
const boolean = predicate(...args)
|
|
14
|
+
return isPromise(boolean) ? boolean.then(negate) : !boolean
|
|
15
|
+
}
|
|
5
16
|
|
|
6
17
|
/**
|
|
7
18
|
* @name not
|
|
8
19
|
*
|
|
9
20
|
* @synopsis
|
|
10
21
|
* ```coffeescript [specscript]
|
|
11
|
-
*
|
|
12
|
-
* predicate ...args=>Promise|boolean
|
|
22
|
+
* not(value boolean) -> negated boolean
|
|
13
23
|
*
|
|
14
|
-
* not(
|
|
24
|
+
* not(...args, predicate function) -> negated boolean
|
|
25
|
+
*
|
|
26
|
+
* not(predicate function)(...args) -> negated boolean
|
|
15
27
|
* ```
|
|
16
28
|
*
|
|
17
29
|
* @description
|
|
18
|
-
* Negate a value (`!`)
|
|
30
|
+
* Negate a value like the [logical NOT (`!`)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_NOT) operator.
|
|
19
31
|
*
|
|
20
32
|
* ```javascript [playground]
|
|
21
33
|
* const myObj = { a: 1 }
|
|
@@ -24,7 +36,7 @@ const _not = value => !value
|
|
|
24
36
|
* console.log(not('b' in myObj)) // true
|
|
25
37
|
* ```
|
|
26
38
|
*
|
|
27
|
-
* If
|
|
39
|
+
* If provided a predicate function, `not` returns a logically inverted predicate that returns true everywhere the original predicate would have returned false.
|
|
28
40
|
*
|
|
29
41
|
* ```javascript [playground]
|
|
30
42
|
* const isOdd = number => number % 2 == 1
|
|
@@ -34,50 +46,19 @@ const _not = value => !value
|
|
|
34
46
|
* ) // false
|
|
35
47
|
* ```
|
|
36
48
|
*/
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
49
|
+
|
|
50
|
+
const not = function (...args) {
|
|
51
|
+
const predicateOrValue = args.pop()
|
|
52
|
+
if (typeof predicateOrValue == 'function') {
|
|
53
|
+
if (args.length == 0) {
|
|
54
|
+
return curryArgs2(_not, __, predicateOrValue)
|
|
42
55
|
}
|
|
56
|
+
if (areAnyValuesPromises(args)) {
|
|
57
|
+
return promiseAll(args).then(curry2(_not, __, predicateOrValue))
|
|
58
|
+
}
|
|
59
|
+
return _not(args, predicateOrValue)
|
|
43
60
|
}
|
|
44
|
-
return !
|
|
61
|
+
return !predicateOrValue
|
|
45
62
|
}
|
|
46
63
|
|
|
47
|
-
/**
|
|
48
|
-
* @name notSync
|
|
49
|
-
*
|
|
50
|
-
* @synopsis
|
|
51
|
-
* ```coffeescript [specscript]
|
|
52
|
-
* notSync(func ...any=>boolean) -> negated ...any=>boolean
|
|
53
|
-
* ```
|
|
54
|
-
*/
|
|
55
|
-
const notSync = func => function notSync(...args) {
|
|
56
|
-
return !func(...args)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* @name not.sync
|
|
61
|
-
*
|
|
62
|
-
* @synopsis
|
|
63
|
-
* ```coffeescript [specscript]
|
|
64
|
-
* var args ...any,
|
|
65
|
-
* syncPredicate ...args=>boolean
|
|
66
|
-
*
|
|
67
|
-
* not.sync(syncPredicate)(...args) -> boolean
|
|
68
|
-
* ```
|
|
69
|
-
*
|
|
70
|
-
* @description
|
|
71
|
-
* `not` without promise handling.
|
|
72
|
-
*
|
|
73
|
-
* ```javascript [playground]
|
|
74
|
-
* const isOdd = number => number % 2 == 1
|
|
75
|
-
*
|
|
76
|
-
* console.log(
|
|
77
|
-
* not.sync(isOdd)(2),
|
|
78
|
-
* ) // true
|
|
79
|
-
* ```
|
|
80
|
-
*/
|
|
81
|
-
not.sync = notSync
|
|
82
|
-
|
|
83
64
|
module.exports = not
|
package/omit.js
CHANGED
|
@@ -1,27 +1,40 @@
|
|
|
1
|
+
const isPromise = require('./_internal/isPromise')
|
|
1
2
|
const deleteByPath = require('./_internal/deleteByPath')
|
|
2
3
|
const copyDeep = require('./_internal/copyDeep')
|
|
4
|
+
const curry2 = require('./_internal/curry2')
|
|
5
|
+
const __ = require('./_internal/placeholder')
|
|
6
|
+
|
|
7
|
+
// _omit(source Object, paths Array<string>) -> result Object
|
|
8
|
+
const _omit = function (source, paths) {
|
|
9
|
+
const pathsLength = paths.length,
|
|
10
|
+
result = copyDeep(source)
|
|
11
|
+
let pathsIndex = -1
|
|
12
|
+
while (++pathsIndex < pathsLength) {
|
|
13
|
+
deleteByPath(result, paths[pathsIndex])
|
|
14
|
+
}
|
|
15
|
+
return result
|
|
16
|
+
}
|
|
3
17
|
|
|
4
18
|
/**
|
|
5
19
|
* @name omit
|
|
6
20
|
*
|
|
7
21
|
* @synopsis
|
|
8
22
|
* ```coffeescript [specscript]
|
|
9
|
-
*
|
|
10
|
-
* source Object
|
|
23
|
+
* omit(paths Array<string>)(source Object) -> omitted Object
|
|
11
24
|
*
|
|
12
|
-
* omit(paths)
|
|
25
|
+
* omit(source Object, paths Array<string>) -> omitted Object
|
|
13
26
|
* ```
|
|
14
27
|
*
|
|
15
28
|
* @description
|
|
16
|
-
* Create a new object by excluding
|
|
29
|
+
* Create a new object by excluding provided paths on a source object.
|
|
17
30
|
*
|
|
18
31
|
* ```javascript [playground]
|
|
19
32
|
* console.log(
|
|
20
|
-
* omit(
|
|
33
|
+
* omit({ _id: '1', name: 'George' }, ['_id']),
|
|
21
34
|
* ) // { name: 'George' }
|
|
22
35
|
* ```
|
|
23
36
|
*
|
|
24
|
-
*
|
|
37
|
+
* `omit` supports three types of path patterns for nested property access
|
|
25
38
|
*
|
|
26
39
|
* * dot delimited - `'a.b.c'`
|
|
27
40
|
* * bracket notation - `'a[0].value'`
|
|
@@ -39,15 +52,25 @@ const copyDeep = require('./_internal/copyDeep')
|
|
|
39
52
|
* }),
|
|
40
53
|
* ) // { a: { b: { c: 'hello' } } }
|
|
41
54
|
* ```
|
|
55
|
+
*
|
|
56
|
+
* Compose `omit` inside a `pipe` with its tacit API
|
|
57
|
+
*
|
|
58
|
+
* ```javascript [playground]
|
|
59
|
+
* pipe({ a: 1, b: 2, c: 3 }, [
|
|
60
|
+
* map(number => number ** 2),
|
|
61
|
+
* omit(['a', 'b']),
|
|
62
|
+
* console.log, // { c: 9 }
|
|
63
|
+
* ])
|
|
64
|
+
* ```
|
|
42
65
|
*/
|
|
43
|
-
const omit =
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
let pathsIndex = -1
|
|
47
|
-
while (++pathsIndex < pathsLength) {
|
|
48
|
-
deleteByPath(result, paths[pathsIndex])
|
|
66
|
+
const omit = function (arg0, arg1) {
|
|
67
|
+
if (arg1 == null) {
|
|
68
|
+
return curry2(_omit, __, arg0)
|
|
49
69
|
}
|
|
50
|
-
|
|
70
|
+
if (isPromise(arg0)) {
|
|
71
|
+
return arg0.then(curry2(_omit, __, arg1))
|
|
72
|
+
}
|
|
73
|
+
return _omit(arg0, arg1)
|
|
51
74
|
}
|
|
52
75
|
|
|
53
76
|
module.exports = omit
|
package/or.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
const promiseAll = require('./_internal/promiseAll')
|
|
1
2
|
const isPromise = require('./_internal/isPromise')
|
|
2
|
-
const
|
|
3
|
+
const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
|
|
3
4
|
const __ = require('./_internal/placeholder')
|
|
5
|
+
const curry2 = require('./_internal/curry2')
|
|
6
|
+
const curry3 = require('./_internal/curry3')
|
|
7
|
+
const curryArgs2 = require('./_internal/curryArgs2')
|
|
4
8
|
const thunkConditional = require('./_internal/thunkConditional')
|
|
5
9
|
const areAllValuesNonfunctions = require('./_internal/areAllValuesNonfunctions')
|
|
6
10
|
const thunkify2 = require('./_internal/thunkify2')
|
|
@@ -18,7 +22,7 @@ const always = require('./_internal/always')
|
|
|
18
22
|
const areAnyNonfunctionsTruthy = function (predicates, index) {
|
|
19
23
|
const length = predicates.length
|
|
20
24
|
while (++index < length) {
|
|
21
|
-
|
|
25
|
+
const predicate = predicates[index]
|
|
22
26
|
if (isPromise(predicate)) {
|
|
23
27
|
return predicate.then(curry3(
|
|
24
28
|
thunkConditional,
|
|
@@ -40,20 +44,19 @@ const areAnyNonfunctionsTruthy = function (predicates, index) {
|
|
|
40
44
|
* @synopsis
|
|
41
45
|
* ```coffeescript [specscript]
|
|
42
46
|
* asyncAreAnyPredicatesTruthy(
|
|
47
|
+
* args Array,
|
|
43
48
|
* predicates Array<predicate function|nonfunction>,
|
|
44
|
-
* point any,
|
|
45
49
|
* index number,
|
|
46
50
|
* ) -> allTruthy boolean
|
|
47
51
|
* ```
|
|
48
52
|
*/
|
|
49
|
-
const asyncAreAnyPredicatesTruthy = async function (
|
|
53
|
+
const asyncAreAnyPredicatesTruthy = async function (args, predicates, index) {
|
|
50
54
|
const length = predicates.length
|
|
51
55
|
while (++index < length) {
|
|
52
56
|
let predicate = predicates[index]
|
|
53
57
|
if (typeof predicate == 'function') {
|
|
54
|
-
predicate = predicate(
|
|
58
|
+
predicate = predicate(...args)
|
|
55
59
|
}
|
|
56
|
-
console.log('hey - or', predicate)
|
|
57
60
|
if (isPromise(predicate)) {
|
|
58
61
|
predicate = await predicate
|
|
59
62
|
}
|
|
@@ -64,34 +67,65 @@ const asyncAreAnyPredicatesTruthy = async function (predicates, point, index) {
|
|
|
64
67
|
return false
|
|
65
68
|
}
|
|
66
69
|
|
|
70
|
+
// areAnyPredicatesTruthy(args Array, predicates Array<function>) -> Promise|boolean
|
|
71
|
+
const areAnyPredicatesTruthy = function (args, predicates) {
|
|
72
|
+
const length = predicates.length
|
|
73
|
+
let index = -1
|
|
74
|
+
|
|
75
|
+
while (++index < length) {
|
|
76
|
+
let predicate = predicates[index]
|
|
77
|
+
if (typeof predicate == 'function') {
|
|
78
|
+
predicate = predicate(...args)
|
|
79
|
+
}
|
|
80
|
+
if (isPromise(predicate)) {
|
|
81
|
+
return predicate.then(curry3(
|
|
82
|
+
thunkConditional,
|
|
83
|
+
__,
|
|
84
|
+
always(true),
|
|
85
|
+
thunkify3(asyncAreAnyPredicatesTruthy, args, predicates, index),
|
|
86
|
+
))
|
|
87
|
+
}
|
|
88
|
+
if (predicate) {
|
|
89
|
+
return true
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return false
|
|
93
|
+
}
|
|
94
|
+
|
|
67
95
|
/**
|
|
68
96
|
* @name or
|
|
69
97
|
*
|
|
70
98
|
* @synopsis
|
|
71
99
|
* ```coffeescript [specscript]
|
|
72
|
-
* or(
|
|
73
|
-
*
|
|
74
|
-
*
|
|
100
|
+
* or(values Array<boolean>) -> result boolean
|
|
101
|
+
*
|
|
102
|
+
* or(...args, predicatesOrValues Array<function|boolean>) -> Promise|boolean
|
|
103
|
+
*
|
|
104
|
+
* or(predicatesOrValues Array<function|boolean>)(...args) -> Promise|boolean
|
|
75
105
|
* ```
|
|
76
106
|
*
|
|
77
107
|
* @description
|
|
78
|
-
*
|
|
108
|
+
* Tests an array of boolean values, returning true if any boolean values are truthy.
|
|
79
109
|
*
|
|
80
110
|
* ```javascript [playground]
|
|
81
|
-
* const
|
|
82
|
-
*
|
|
83
|
-
* const
|
|
111
|
+
* const oneIsLessThanZero = 1 < 0
|
|
112
|
+
* const oneIsGreaterThanTwo = 1 > 2
|
|
113
|
+
* const threeIsNotEqualToThree = 3 !== 3
|
|
84
114
|
*
|
|
85
115
|
* console.log(
|
|
86
|
-
* or([
|
|
87
|
-
* ) //
|
|
116
|
+
* or([oneIsLessThanZero, oneIsGreaterThanTwo, threeIsNotEqualToThree]),
|
|
117
|
+
* ) // false
|
|
88
118
|
* ```
|
|
89
119
|
*
|
|
90
|
-
* `or`
|
|
120
|
+
* If any values in the array are synchronous or asynchronous predicate functions, `or` takes another argument to test concurrently against the predicate functions, returning true if any array values or resolved values from the predicates are truthy.
|
|
91
121
|
*
|
|
92
122
|
* ```javascript [playground]
|
|
123
|
+
* const isOdd = number => number % 2 == 1
|
|
124
|
+
*
|
|
125
|
+
* const isEven = number => number % 2 == 0
|
|
126
|
+
*
|
|
93
127
|
* console.log(
|
|
94
|
-
* or([
|
|
128
|
+
* or([isOdd, isEven])(0),
|
|
95
129
|
* ) // true
|
|
96
130
|
* ```
|
|
97
131
|
*
|
|
@@ -99,33 +133,22 @@ const asyncAreAnyPredicatesTruthy = async function (predicates, point, index) {
|
|
|
99
133
|
*
|
|
100
134
|
* @note ...args slows down here by an order of magnitude
|
|
101
135
|
*/
|
|
102
|
-
const or =
|
|
103
|
-
|
|
104
|
-
|
|
136
|
+
const or = function (...args) {
|
|
137
|
+
const predicatesOrValues = args.pop()
|
|
138
|
+
if (areAllValuesNonfunctions(predicatesOrValues)) {
|
|
139
|
+
return areAnyNonfunctionsTruthy(predicatesOrValues, -1)
|
|
105
140
|
}
|
|
106
|
-
return function areAnyPredicatesTruthy(point) {
|
|
107
|
-
const length = predicates.length
|
|
108
|
-
let index = -1
|
|
109
141
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
if (typeof predicate == 'function') {
|
|
113
|
-
predicate = predicate(point)
|
|
114
|
-
}
|
|
115
|
-
if (isPromise(predicate)) {
|
|
116
|
-
return predicate.then(curry3(
|
|
117
|
-
thunkConditional,
|
|
118
|
-
__,
|
|
119
|
-
always(true),
|
|
120
|
-
thunkify3(asyncAreAnyPredicatesTruthy, predicates, point, index),
|
|
121
|
-
))
|
|
122
|
-
}
|
|
123
|
-
if (predicate) {
|
|
124
|
-
return true
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return false
|
|
142
|
+
if (args.length == 0) {
|
|
143
|
+
return curryArgs2(areAnyPredicatesTruthy, __, predicatesOrValues)
|
|
128
144
|
}
|
|
145
|
+
|
|
146
|
+
if (areAnyValuesPromises(args)) {
|
|
147
|
+
return promiseAll(args)
|
|
148
|
+
.then(curry2(areAnyPredicatesTruthy, __, predicatesOrValues))
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return areAnyPredicatesTruthy(args, predicatesOrValues)
|
|
129
152
|
}
|
|
130
153
|
|
|
131
154
|
module.exports = or
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rubico",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "[a]synchronous functional programming",
|
|
5
5
|
"author": "Richard Tong",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,23 +33,23 @@
|
|
|
33
33
|
"operator"
|
|
34
34
|
],
|
|
35
35
|
"devDependencies": {
|
|
36
|
+
"async": "^3.2.4",
|
|
36
37
|
"bluebird": "^3.7.2",
|
|
37
38
|
"codecov": "^3.7.1",
|
|
38
39
|
"eslint": "^8.4.1",
|
|
39
40
|
"fantasy-land": "^4.1.0",
|
|
40
|
-
"lodash": "^4.17.
|
|
41
|
+
"lodash": "^4.17.21",
|
|
41
42
|
"mocha": "^7.2.0",
|
|
42
43
|
"node-fetch": "^2.6.1",
|
|
43
44
|
"nyc": "^15.1.0",
|
|
44
|
-
"ramda": "^0.
|
|
45
|
+
"ramda": "^0.29.0",
|
|
45
46
|
"terser": "^5.10.0",
|
|
46
47
|
"thunk-test": "latest"
|
|
47
48
|
},
|
|
48
49
|
"scripts": {
|
|
49
|
-
"test": "mocha test.js
|
|
50
|
+
"test": "mocha test.js *.test.js */**.test.js",
|
|
50
51
|
"test-coverage": "nyc mocha test.js x/*.test.js monad/*.test.js",
|
|
51
|
-
"lint": "eslint
|
|
52
|
-
"
|
|
53
|
-
"build": "node distributor.js"
|
|
52
|
+
"lint": "eslint .",
|
|
53
|
+
"build": "./build"
|
|
54
54
|
}
|
|
55
55
|
}
|
package/pick.js
CHANGED
|
@@ -1,46 +1,76 @@
|
|
|
1
|
+
const isPromise = require('./_internal/isPromise')
|
|
1
2
|
const getByPath = require('./_internal/getByPath')
|
|
2
3
|
const setByPath = require('./_internal/setByPath')
|
|
4
|
+
const curry2 = require('./_internal/curry2')
|
|
5
|
+
const __ = require('./_internal/placeholder')
|
|
6
|
+
|
|
7
|
+
// _pick(source Object, keys Array<string>) -> result Object
|
|
8
|
+
const _pick = function (source, keys) {
|
|
9
|
+
if (source == null) {
|
|
10
|
+
return source
|
|
11
|
+
}
|
|
12
|
+
const keysLength = keys.length
|
|
13
|
+
let result = {}
|
|
14
|
+
let keysIndex = -1
|
|
15
|
+
while (++keysIndex < keysLength) {
|
|
16
|
+
const key = keys[keysIndex],
|
|
17
|
+
value = getByPath(source, key)
|
|
18
|
+
if (value != null) {
|
|
19
|
+
result = setByPath(result, value, key)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return result
|
|
23
|
+
}
|
|
3
24
|
|
|
4
25
|
/**
|
|
5
26
|
* @name pick
|
|
6
27
|
*
|
|
7
28
|
* @synopsis
|
|
8
29
|
* ```coffeescript [specscript]
|
|
9
|
-
*
|
|
10
|
-
* source Object
|
|
30
|
+
* pick(object Object, keys Array<string>) -> result Object
|
|
11
31
|
*
|
|
12
|
-
* pick(keys)(
|
|
32
|
+
* pick(keys Array<string>)(object Object) -> result Object
|
|
13
33
|
* ```
|
|
14
34
|
*
|
|
15
35
|
* @description
|
|
16
|
-
*
|
|
36
|
+
* Creates a new object from a source object by selecting provided keys. If a provided key does not exist on the source object, excludes it from the resulting object.
|
|
17
37
|
*
|
|
18
38
|
* ```javascript [playground]
|
|
19
39
|
* console.log(
|
|
20
|
-
* pick(
|
|
40
|
+
* pick({ goodbye: 1, world: 2 }, ['hello', 'world']),
|
|
21
41
|
* ) // { world: 2 }
|
|
42
|
+
* ```
|
|
22
43
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
44
|
+
* `pick` supports three types of path patterns for nested property access
|
|
45
|
+
*
|
|
46
|
+
* * dot delimited - `'a.b.c'`
|
|
47
|
+
* * bracket notation - `'a[0].value'`
|
|
48
|
+
* * an array of keys or indices - `['a', 0, 'value']`
|
|
49
|
+
*
|
|
50
|
+
* ```javascript [playground]
|
|
51
|
+
* const nested = { a: { b: { c: { d: 1, e: [2, 3] } } } }
|
|
52
|
+
*
|
|
53
|
+
* console.log(pick(['a.b.c.d'])(nested)) // { a: { b: { c: { d: 1 } } } }
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* Compose `pick` inside a `pipe` with its tacit API.
|
|
57
|
+
*
|
|
58
|
+
* ```javascript [playground]
|
|
59
|
+
* pipe({ a: 1, b: 2, c: 3 }, [
|
|
60
|
+
* map(number => number ** 2),
|
|
61
|
+
* pick(['a', 'c']),
|
|
62
|
+
* console.log, // { a: 1, c: 9 }
|
|
63
|
+
* ])
|
|
26
64
|
* ```
|
|
27
65
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return source
|
|
66
|
+
const pick = function (arg0, arg1) {
|
|
67
|
+
if (arg1 == null) {
|
|
68
|
+
return curry2(_pick, __, arg0)
|
|
32
69
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
let keysIndex = -1
|
|
36
|
-
while (++keysIndex < keysLength) {
|
|
37
|
-
const key = keys[keysIndex],
|
|
38
|
-
value = getByPath(source, key)
|
|
39
|
-
if (value != null) {
|
|
40
|
-
result = setByPath(result, value, key)
|
|
41
|
-
}
|
|
70
|
+
if (isPromise(arg0)) {
|
|
71
|
+
return arg0.then(curry2(_pick, __, arg1))
|
|
42
72
|
}
|
|
43
|
-
return
|
|
73
|
+
return _pick(arg0, arg1)
|
|
44
74
|
}
|
|
45
75
|
|
|
46
76
|
module.exports = pick
|
package/pipe.js
CHANGED
|
@@ -1,66 +1,42 @@
|
|
|
1
|
-
const
|
|
1
|
+
const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
|
|
2
|
+
const promiseAll = require('./_internal/promiseAll')
|
|
2
3
|
const funcConcat = require('./_internal/funcConcat')
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const funcApply = require('./_internal/funcApply')
|
|
5
|
+
const curry2 = require('./_internal/curry2')
|
|
6
|
+
const __ = require('./_internal/placeholder')
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* @name pipe
|
|
9
10
|
*
|
|
10
11
|
* @synopsis
|
|
11
12
|
* ```coffeescript [specscript]
|
|
12
|
-
*
|
|
13
|
+
* pipe(funcs Array<function>)(...args) -> result Promise|any
|
|
13
14
|
*
|
|
14
|
-
*
|
|
15
|
-
* funcs [
|
|
16
|
-
* ...args=>Promise|any,
|
|
17
|
-
* ...Array<any=>Promise|any>,
|
|
18
|
-
* ],
|
|
19
|
-
* transducers Array<Reducer=>Reducer>
|
|
20
|
-
* reducer Reducer,
|
|
21
|
-
*
|
|
22
|
-
* pipe(funcs)(...args) -> Promise|any
|
|
23
|
-
*
|
|
24
|
-
* pipe(transducers)(reducer) -> Reducer
|
|
15
|
+
* pipe(...args, funcs Array<function>) -> result Promise|any
|
|
25
16
|
* ```
|
|
26
17
|
*
|
|
27
18
|
* @description
|
|
28
|
-
*
|
|
19
|
+
* Creates a function pipeline from an array of functions, where each function passes its return value as a single argument to the next function until all functions have executed. The first function is called with the arguments to the pipeline, while the result of the pipeline execution is the return of its last function. If any function of the pipeline is asynchronous, the result of the execution is a Promise.
|
|
29
20
|
*
|
|
30
21
|
* ```javascript [playground]
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* ])(5),
|
|
37
|
-
* ) // 11
|
|
38
|
-
* ```
|
|
39
|
-
*
|
|
40
|
-
* In order to create pipelines of transducers that read left to right, `pipe` chains the functions (assuming they are transducers) in reverse when passed a reducer in argument position. This results in a reducer with chained functionality. For more information on this behavior, see [this blog post on transducers](https://rubico.land/blog/2020/10/02/transducers-crash-course).
|
|
41
|
-
*
|
|
42
|
-
* ```javascript [playground]
|
|
43
|
-
* const isOdd = number => number % 2 == 1
|
|
44
|
-
*
|
|
45
|
-
* const square = number => number ** 2
|
|
22
|
+
* const syncAdd123 = pipe([
|
|
23
|
+
* number => number + 1,
|
|
24
|
+
* number => number + 2,
|
|
25
|
+
* number => number + 3,
|
|
26
|
+
* ])
|
|
46
27
|
*
|
|
47
|
-
*
|
|
28
|
+
* console.log(syncAdd123(5)) // 11
|
|
48
29
|
*
|
|
49
|
-
* const
|
|
50
|
-
*
|
|
51
|
-
*
|
|
30
|
+
* const asyncAdd123 = pipe([
|
|
31
|
+
* async number => number + 1,
|
|
32
|
+
* async number => number + 2,
|
|
33
|
+
* async number => number + 3,
|
|
52
34
|
* ])
|
|
53
35
|
*
|
|
54
|
-
* console.log
|
|
55
|
-
* [1, 2, 3, 4, 5].reduce(squaredOdds(add), 0),
|
|
56
|
-
* ) // 35
|
|
57
|
-
*
|
|
58
|
-
* console.log(
|
|
59
|
-
* squaredOdds([1, 2, 3, 4, 5])
|
|
60
|
-
* ) // [1, 9, 25]
|
|
36
|
+
* asyncAdd123(5).then(console.log) // 11
|
|
61
37
|
* ```
|
|
62
38
|
*
|
|
63
|
-
*
|
|
39
|
+
* When passed any amount of arguments before the array of functions, `pipe` executes eagerly; the array of functions is immediately invoked with the supplied arguments.
|
|
64
40
|
*
|
|
65
41
|
* ```javascript [playground]
|
|
66
42
|
* pipe(1, 2, 3, [
|
|
@@ -78,58 +54,17 @@ const isAsyncGeneratorFunction = require('./_internal/isAsyncGeneratorFunction')
|
|
|
78
54
|
*/
|
|
79
55
|
const pipe = function (...args) {
|
|
80
56
|
const funcs = args.pop()
|
|
57
|
+
const pipeline = funcs.reduce(funcConcat)
|
|
81
58
|
|
|
82
|
-
if (args.length
|
|
83
|
-
return
|
|
59
|
+
if (args.length == 0) {
|
|
60
|
+
return pipeline
|
|
84
61
|
}
|
|
85
62
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return function pipeline(...args) {
|
|
89
|
-
const firstArg = args[0]
|
|
90
|
-
|
|
91
|
-
if (
|
|
92
|
-
typeof firstArg == 'function'
|
|
93
|
-
&& !isGeneratorFunction(firstArg)
|
|
94
|
-
&& !isAsyncGeneratorFunction(firstArg)
|
|
95
|
-
) {
|
|
96
|
-
if (functionComposition == noop) {
|
|
97
|
-
functionComposition = funcs.reduceRight(funcConcat)
|
|
98
|
-
}
|
|
99
|
-
return functionComposition(firstArg)
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (functionPipeline == noop) {
|
|
103
|
-
functionPipeline = funcs.reduce(funcConcat)
|
|
104
|
-
}
|
|
105
|
-
return functionPipeline(...args)
|
|
63
|
+
if (areAnyValuesPromises(args)) {
|
|
64
|
+
return promiseAll(args).then(curry2(funcApply, pipeline, __))
|
|
106
65
|
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// funcs Array<function> -> pipeline function
|
|
110
|
-
const pipeSync = funcs => funcs.reduce(funcConcatSync)
|
|
111
66
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
*
|
|
115
|
-
* @synopsis
|
|
116
|
-
* ```coffeescript [specscript]
|
|
117
|
-
* var args ...any,
|
|
118
|
-
* funcs [...args=>any, ...Array<any=>any>]
|
|
119
|
-
*
|
|
120
|
-
* pipe.sync(funcs) -> syncPipeline ...args=>any
|
|
121
|
-
* ```
|
|
122
|
-
*
|
|
123
|
-
* @description
|
|
124
|
-
* `pipe` that doesn't automatically resolve promises. This variant is a good option if more performance is desired or if manual promise handling is required.
|
|
125
|
-
*
|
|
126
|
-
* ```javascript [playground]
|
|
127
|
-
* pipe.sync([
|
|
128
|
-
* value => Promise.resolve(value),
|
|
129
|
-
* promise => promise.then(console.log)
|
|
130
|
-
* ])('hey') // hey
|
|
131
|
-
* ```
|
|
132
|
-
*/
|
|
133
|
-
pipe.sync = pipeSync
|
|
67
|
+
return pipeline(...args)
|
|
68
|
+
}
|
|
134
69
|
|
|
135
70
|
module.exports = pipe
|