rubico 1.9.7 → 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 +75 -26
- 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 +106 -40
- package/and.js +54 -36
- 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 +18 -8
- 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/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 +7 -2
- package/dist/omit.es.min.js +3 -3
- package/dist/omit.js +7 -2
- package/dist/omit.min.js +3 -3
- package/dist/omit.min.mjs +3 -3
- package/dist/omit.mjs +7 -2
- 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 +8 -3
- package/dist/pick.es.min.js +3 -3
- package/dist/pick.js +8 -3
- package/dist/pick.min.js +3 -3
- package/dist/pick.min.mjs +3 -3
- package/dist/pick.mjs +8 -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 +730 -869
- package/dist/rubico.es.min.js +3 -3
- package/dist/rubico.js +730 -869
- package/dist/rubico.min.js +3 -3
- package/dist/rubico.min.mjs +3 -3
- package/dist/rubico.mjs +730 -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 -2042
- package/eq.js +21 -63
- package/es.js +730 -869
- package/every.js +94 -0
- package/filter.js +23 -91
- package/flatMap.js +75 -70
- package/forEach.js +82 -0
- package/get.js +23 -6
- package/global.js +6 -4
- package/gt.js +15 -58
- package/gte.js +14 -57
- package/index.js +730 -869
- package/lt.js +17 -60
- package/lte.js +14 -57
- package/map.js +9 -94
- package/memory-usage/reduce.js +2 -2
- package/not.js +27 -45
- package/omit.js +4 -0
- package/or.js +50 -33
- package/package.json +7 -7
- package/pick.js +5 -1
- package/pipe.js +13 -50
- package/reduce.js +42 -51
- package/rubico.js +10 -8
- package/set.js +43 -10
- package/some.js +105 -0
- package/switchCase.js +13 -3
- package/tap.js +0 -24
- package/test.js +847 -1096
- package/thunkify.js +9 -0
- package/transform.js +31 -16
- package/tryCatch.js +19 -15
- 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 -82
- 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 -101
- 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
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
const { switchCase } = require('..')
|
|
2
|
+
const { timeInLoop } = require('../x')
|
|
3
|
+
|
|
4
|
+
const isPromise = value => value != null && typeof value.then == 'function'
|
|
5
|
+
|
|
6
|
+
const possiblePromiseThen = (value, func) => (
|
|
7
|
+
isPromise(value) ? value.then(func) : func(value))
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @name funcConditional
|
|
11
|
+
*
|
|
12
|
+
* @synopsis
|
|
13
|
+
* funcConditional(
|
|
14
|
+
* funcs Array<args=>Promise|any>,
|
|
15
|
+
* )(args ...any) -> Promise|any
|
|
16
|
+
*/
|
|
17
|
+
const funcConditional = funcs => function funcSwitching(...args) {
|
|
18
|
+
const lastIndex = funcs.length - 1
|
|
19
|
+
let funcsIndex = -2
|
|
20
|
+
while ((funcsIndex += 2) < lastIndex) {
|
|
21
|
+
const shouldReturnNext = funcs[funcsIndex].apply(null, args)
|
|
22
|
+
if (isPromise(shouldReturnNext)) {
|
|
23
|
+
return shouldReturnNext.then(res => res
|
|
24
|
+
? funcs[funcsIndex + 1].apply(null, args)
|
|
25
|
+
: asyncFuncSwitch(funcs, args, funcsIndex))
|
|
26
|
+
}
|
|
27
|
+
if (shouldReturnNext) {
|
|
28
|
+
return funcs[funcsIndex + 1].apply(null, args)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return funcs[funcsIndex].apply(null, args)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const funcConditionalRegularCalls = funcs => function funcSwitching(...args) {
|
|
35
|
+
const lastIndex = funcs.length - 1
|
|
36
|
+
let funcsIndex = -2
|
|
37
|
+
while ((funcsIndex += 2) < lastIndex) {
|
|
38
|
+
const shouldReturnNext = funcs[funcsIndex](...args)
|
|
39
|
+
if (isPromise(shouldReturnNext)) {
|
|
40
|
+
return shouldReturnNext.then(res => res
|
|
41
|
+
? funcs[funcsIndex + 1](...args)
|
|
42
|
+
: asyncFuncSwitch(funcs, args, funcsIndex))
|
|
43
|
+
}
|
|
44
|
+
if (shouldReturnNext) {
|
|
45
|
+
return funcs[funcsIndex + 1](...args)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return funcs[funcsIndex](...args)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const arraySwitchCase = (funcs, args, index) => {
|
|
52
|
+
if (index === funcs.length - 1) return funcs[index](...args)
|
|
53
|
+
return possiblePromiseThen(
|
|
54
|
+
funcs[index](...args),
|
|
55
|
+
ok => ok
|
|
56
|
+
? funcs[index + 1](...args)
|
|
57
|
+
: arraySwitchCase(funcs, args, index + 2),
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const switchCase1 = funcConditional
|
|
62
|
+
|
|
63
|
+
const switchCase10 = funcConditionalRegularCalls
|
|
64
|
+
|
|
65
|
+
const switchCase2 = funcs => (...args) => arraySwitchCase(funcs, args, 0)
|
|
66
|
+
|
|
67
|
+
// argument resolver for curry2
|
|
68
|
+
const curry2ResolveArg0 = (
|
|
69
|
+
baseFunc, arg1,
|
|
70
|
+
) => function arg0Resolver(arg0) {
|
|
71
|
+
return baseFunc(arg0, arg1)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// argument resolver for curry2
|
|
75
|
+
const curry2ResolveArg1 = (
|
|
76
|
+
baseFunc, arg0,
|
|
77
|
+
) => function arg1Resolver(arg1) {
|
|
78
|
+
return baseFunc(arg0, arg1)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @name curry2
|
|
83
|
+
*
|
|
84
|
+
* @synopsis
|
|
85
|
+
* __ = Symbol('placeholder')
|
|
86
|
+
*
|
|
87
|
+
* curry2(
|
|
88
|
+
* baseFunc function,
|
|
89
|
+
* arg0 __|any,
|
|
90
|
+
* arg1 __|any,
|
|
91
|
+
* ) -> function
|
|
92
|
+
*/
|
|
93
|
+
const curry2 = function (baseFunc, arg0, arg1) {
|
|
94
|
+
return arg0 == __
|
|
95
|
+
? curry2ResolveArg0(baseFunc, arg1)
|
|
96
|
+
: curry2ResolveArg1(baseFunc, arg0)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const thunkify1 = (func, arg0) => () => func(arg0)
|
|
100
|
+
|
|
101
|
+
const thunkify3 = (func, arg0, arg1, arg2) => () => func(arg0, arg1, arg2)
|
|
102
|
+
|
|
103
|
+
const asyncFuncSwitch = async function (funcs, args, funcsIndex) {
|
|
104
|
+
const lastIndex = funcs.length - 1
|
|
105
|
+
while ((funcsIndex += 2) < lastIndex) {
|
|
106
|
+
if (await funcs[funcsIndex](...args)) {
|
|
107
|
+
return funcs[funcsIndex + 1](...args)
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return funcs[funcsIndex](...args)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const __ = Symbol('placeholder')
|
|
114
|
+
|
|
115
|
+
const thunkConditional = (
|
|
116
|
+
boolean, thunkA, thunkB,
|
|
117
|
+
) => boolean ? thunkA() : thunkB()
|
|
118
|
+
|
|
119
|
+
const switchCase3 = funcs => function funcSwitching(...args) {
|
|
120
|
+
const lastIndex = funcs.length - 1
|
|
121
|
+
let funcsIndex = -2
|
|
122
|
+
|
|
123
|
+
while ((funcsIndex += 2) < lastIndex) {
|
|
124
|
+
const shouldReturnNext = funcs[funcsIndex](...args)
|
|
125
|
+
if (isPromise(shouldReturnNext)) {
|
|
126
|
+
return shouldReturnNext.then(
|
|
127
|
+
curry3(
|
|
128
|
+
thunkConditional,
|
|
129
|
+
__,
|
|
130
|
+
thunkify1(
|
|
131
|
+
curry2(funcApply, funcs[funcsIndex + 1], __),
|
|
132
|
+
args),
|
|
133
|
+
thunkify3(asyncFuncSwitch, funcs, args, funcsIndex)))
|
|
134
|
+
}
|
|
135
|
+
if (shouldReturnNext) {
|
|
136
|
+
return funcs[funcsIndex + 1](...args)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return funcs[funcsIndex](...args)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @name switchCase
|
|
145
|
+
*
|
|
146
|
+
* @benchmark
|
|
147
|
+
*
|
|
148
|
+
* @NOTE Bo5 runs
|
|
149
|
+
* fiveCases_switchCaseRubico1: 1e+6: 369.264ms
|
|
150
|
+
* fiveCases_switchCaseRubico10: 1e+6: 314.024ms
|
|
151
|
+
* fiveCases_switchCaseRubico2: 1e+6: 301.841ms
|
|
152
|
+
* fiveCases_switchCaseRubico3: 1e+6: 271.723ms
|
|
153
|
+
*
|
|
154
|
+
* fiveMilCases_switchCaseRubico1: 5e+0: 326.556ms
|
|
155
|
+
* fiveMilCases_switchCaseRubico10: 5e+0: 263.211ms
|
|
156
|
+
* fiveMilCases_switchCaseRubico2: Error: Maximum call stack size exceeded
|
|
157
|
+
* fiveMilCases_switchCaseRubico3: 5e+0: 262.337ms
|
|
158
|
+
*
|
|
159
|
+
* fiveThousandCases_switchCaseRubico1: 5e+2: 63.736ms
|
|
160
|
+
* fiveThousandCases_switchCaseRubico10: 5e+2: 48.004ms
|
|
161
|
+
* fiveThousandCases_switchCaseRubico2: 5e+2: 270.643ms
|
|
162
|
+
* fiveThousandCases_switchCaseRubico3: 5e+2: 25.742ms
|
|
163
|
+
*/
|
|
164
|
+
|
|
165
|
+
{
|
|
166
|
+
const isOdd = x => x % 2 === 1
|
|
167
|
+
|
|
168
|
+
const odd = () => 'odd'
|
|
169
|
+
|
|
170
|
+
const even = () => 'even'
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @name createCases
|
|
174
|
+
*
|
|
175
|
+
* @synopsis
|
|
176
|
+
* createCases(length number) -> cases Array<function, length>
|
|
177
|
+
*/
|
|
178
|
+
const createCases = function (length) {
|
|
179
|
+
if (!isOdd(length)) throw new RangeError('length must be odd')
|
|
180
|
+
const output = [], lastIndex = length - 1
|
|
181
|
+
let index = -1
|
|
182
|
+
while (++index < lastIndex) {
|
|
183
|
+
output[index] = isOdd(index) ? odd : isOdd
|
|
184
|
+
}
|
|
185
|
+
output[index] = even
|
|
186
|
+
return output
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const fiveCases = createCases(5)
|
|
190
|
+
|
|
191
|
+
const fiveCases_vanilla = num => isOdd(num) ? odd() : isOdd(num) ? odd() : even()
|
|
192
|
+
|
|
193
|
+
const fiveCases_vanillaArgs = (...args) => isOdd(...args) ? odd(...args) : isOdd(...args) ? odd(...args) : even(...args)
|
|
194
|
+
|
|
195
|
+
const fiveCases_switchCaseRubico1 = switchCase1(fiveCases)
|
|
196
|
+
|
|
197
|
+
const fiveCases_switchCaseRubico10 = switchCase10(fiveCases)
|
|
198
|
+
|
|
199
|
+
const fiveCases_switchCaseRubico2 = switchCase2(fiveCases)
|
|
200
|
+
|
|
201
|
+
const fiveCases_switchCaseRubico3 = switchCase3(fiveCases)
|
|
202
|
+
|
|
203
|
+
const fiveMilCases = createCases(4_999_999)
|
|
204
|
+
|
|
205
|
+
const fiveMilCases_switchCaseRubico = switchCase(fiveMilCases)
|
|
206
|
+
|
|
207
|
+
const fiveMilCases_switchCaseRubico1 = switchCase1(fiveMilCases)
|
|
208
|
+
|
|
209
|
+
const fiveMilCases_switchCaseRubico10 = switchCase10(fiveMilCases)
|
|
210
|
+
|
|
211
|
+
const fiveMilCases_switchCaseRubico2 = switchCase2(fiveMilCases)
|
|
212
|
+
|
|
213
|
+
const fiveMilCases_switchCaseRubico3 = switchCase3(fiveMilCases)
|
|
214
|
+
|
|
215
|
+
const fiveThousandCases = createCases(4_999)
|
|
216
|
+
|
|
217
|
+
const fiveThousandCases_switchCaseRubico = switchCase(fiveThousandCases)
|
|
218
|
+
|
|
219
|
+
const fiveThousandCases_switchCaseRubico1 = switchCase1(fiveThousandCases)
|
|
220
|
+
|
|
221
|
+
const fiveThousandCases_switchCaseRubico10 = switchCase10(fiveThousandCases)
|
|
222
|
+
|
|
223
|
+
const fiveThousandCases_switchCaseRubico2 = switchCase2(fiveThousandCases)
|
|
224
|
+
|
|
225
|
+
const fiveThousandCases_switchCaseRubico3 = switchCase3(fiveThousandCases)
|
|
226
|
+
|
|
227
|
+
// timeInLoop('fiveCases_vanilla', 1e6, () => fiveCases_vanilla(2))
|
|
228
|
+
|
|
229
|
+
// timeInLoop('fiveCases_vanillaArgs', 1e6, () => fiveCases_vanillaArgs(2))
|
|
230
|
+
|
|
231
|
+
// timeInLoop('fiveCases_switchCaseRubico1', 1e6, () => fiveCases_switchCaseRubico1(2))
|
|
232
|
+
|
|
233
|
+
// timeInLoop('fiveCases_switchCaseRubico10', 1e6, () => fiveCases_switchCaseRubico10(2))
|
|
234
|
+
|
|
235
|
+
// timeInLoop('fiveCases_switchCaseRubico2', 1e6, () => fiveCases_switchCaseRubico2(2))
|
|
236
|
+
|
|
237
|
+
// console.log(fiveCases_switchCaseRubico3(2))
|
|
238
|
+
|
|
239
|
+
// timeInLoop('fiveCases_switchCaseRubico3', 1e6, () => fiveCases_switchCaseRubico3(2))
|
|
240
|
+
|
|
241
|
+
// timeInLoop('fiveMilCases_switchCaseRubico1', 5, () => fiveMilCases_switchCaseRubico1(2))
|
|
242
|
+
|
|
243
|
+
// timeInLoop('fiveMilCases_switchCaseRubico10', 5, () => fiveMilCases_switchCaseRubico10(2))
|
|
244
|
+
|
|
245
|
+
// timeInLoop('fiveMilCases_switchCaseRubico2', 5, () => fiveMilCases_switchCaseRubico2(2))
|
|
246
|
+
|
|
247
|
+
// timeInLoop('fiveMilCases_switchCaseRubico3', 5, () => fiveMilCases_switchCaseRubico3(2))
|
|
248
|
+
|
|
249
|
+
// timeInLoop('fiveThousandCases_switchCaseRubico1', 500, () => fiveThousandCases_switchCaseRubico1(2))
|
|
250
|
+
|
|
251
|
+
// timeInLoop('fiveThousandCases_switchCaseRubico10', 500, () => fiveThousandCases_switchCaseRubico10(2))
|
|
252
|
+
|
|
253
|
+
// timeInLoop('fiveThousandCases_switchCaseRubico2', 500, () => fiveThousandCases_switchCaseRubico2(2))
|
|
254
|
+
|
|
255
|
+
// timeInLoop('fiveThousandCases_switchCaseRubico3', 500, () => fiveThousandCases_switchCaseRubico3(2))
|
|
256
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
const timeInLoop = require('../x/timeInLoop')
|
|
2
|
+
const _ = require('lodash/fp')
|
|
3
|
+
const { tap } = require('..')
|
|
4
|
+
const R = require('ramda')
|
|
5
|
+
|
|
6
|
+
const isPromise = value => value != null && typeof value.then == 'function'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @name tap
|
|
10
|
+
*
|
|
11
|
+
* @benchmark
|
|
12
|
+
* tapNoopThunk: 1e+6: 4.242ms
|
|
13
|
+
* tapRegularCallNoopThunk: 1e+6: 4.969ms
|
|
14
|
+
* _tapNoopThunk: 1e+6: 155.716ms
|
|
15
|
+
* RTapNoopThunk: 1e+6: 291.025ms
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
{
|
|
19
|
+
const noop = () => {}
|
|
20
|
+
|
|
21
|
+
const tapNoop = tap(noop)
|
|
22
|
+
|
|
23
|
+
const tapNoopThunk = () => tapNoop('yo')
|
|
24
|
+
|
|
25
|
+
tap.regularCall = func => function tapping(input) {
|
|
26
|
+
const call = func(input)
|
|
27
|
+
return isPromise(call) ? call.then(() => input) : input
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const tapRegularCallNoop = tap.regularCall(noop)
|
|
31
|
+
|
|
32
|
+
const tapRegularCallNoopThunk = () => tapRegularCallNoop('yo')
|
|
33
|
+
|
|
34
|
+
const _tapNoop = _.tap(noop)
|
|
35
|
+
|
|
36
|
+
const _tapNoopThunk = () => _tapNoop('yo')
|
|
37
|
+
|
|
38
|
+
const RTapNoop = R.tap(noop)
|
|
39
|
+
|
|
40
|
+
const RTapNoopThunk = () => RTapNoop('yo')
|
|
41
|
+
|
|
42
|
+
// const func = tapNoopThunk
|
|
43
|
+
// const func = tapRegularCallNoopThunk
|
|
44
|
+
// const func = tapNoopThunk
|
|
45
|
+
// const func = _tapNoopThunk
|
|
46
|
+
// const func = RTapNoopThunk
|
|
47
|
+
|
|
48
|
+
// console.log(func())
|
|
49
|
+
|
|
50
|
+
// timeInLoop(func.name, 1e6, func)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const tap0 = func => function tapping(...args) {
|
|
54
|
+
const point = args[0],
|
|
55
|
+
call = func(...args)
|
|
56
|
+
return isPromise(call) ? call.then(() => point) : point
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const always = value => function getter() { return value }
|
|
60
|
+
|
|
61
|
+
const tap1 = func => function tapping(...args) {
|
|
62
|
+
const point = args[0],
|
|
63
|
+
call = func(...args)
|
|
64
|
+
return isPromise(call) ? call.then(always(point)) : point
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @name tap
|
|
69
|
+
*
|
|
70
|
+
* @benchmark
|
|
71
|
+
* tap0: 1e+7: 141.116ms
|
|
72
|
+
* tap1: 1e+7: 141.007ms
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
{
|
|
76
|
+
const array = []
|
|
77
|
+
|
|
78
|
+
const noop = function () {}
|
|
79
|
+
|
|
80
|
+
// timeInLoop('tap0', 1e7, () => tap0(noop)(0))
|
|
81
|
+
|
|
82
|
+
// timeInLoop('tap1', 1e7, () => tap1(noop)(0))
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @name tap.if
|
|
87
|
+
*
|
|
88
|
+
* @benchmark
|
|
89
|
+
* TODO
|
|
90
|
+
*/
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
const timeInLoop = require('../x/timeInLoop')
|
|
2
|
+
const rubico = require('rubico')
|
|
3
|
+
const R = require('ramda')
|
|
4
|
+
const _ = require('lodash')
|
|
5
|
+
const _fp = require('lodash/fp')
|
|
6
|
+
const { Readable, Writable } = require('stream')
|
|
7
|
+
|
|
8
|
+
const isPromise = value => value != null && typeof value.then == 'function'
|
|
9
|
+
|
|
10
|
+
const {
|
|
11
|
+
pipe, fork, assign,
|
|
12
|
+
tap, tryCatch, switchCase,
|
|
13
|
+
map, filter, reduce, transform, flatMap,
|
|
14
|
+
any, all, and, or, not,
|
|
15
|
+
eq, gt, lt, gte, lte,
|
|
16
|
+
get, pick, omit,
|
|
17
|
+
} = rubico
|
|
18
|
+
|
|
19
|
+
const square = number => number ** 2
|
|
20
|
+
|
|
21
|
+
const isOdd = number => number % 2 == 1
|
|
22
|
+
|
|
23
|
+
const squaredOdds = pipe([
|
|
24
|
+
filter(isOdd),
|
|
25
|
+
map(square),
|
|
26
|
+
])
|
|
27
|
+
|
|
28
|
+
const squaredOddsArrayConcat = transform(
|
|
29
|
+
squaredOdds, [],
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @name squaredOddsArrayConcat
|
|
34
|
+
*
|
|
35
|
+
* @benchmark
|
|
36
|
+
* squaredOddsArrayConcat: 1e+5: 85.147ms
|
|
37
|
+
*
|
|
38
|
+
* @note Bo5
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
{
|
|
42
|
+
const numbers = [1, 2, 3, 4, 5]
|
|
43
|
+
|
|
44
|
+
const arrayEmpty = () => []
|
|
45
|
+
|
|
46
|
+
const squaredOddsArrayConcat = transform(squaredOdds, arrayEmpty)
|
|
47
|
+
|
|
48
|
+
// timeInLoop('squaredOddsArrayConcat', 1e5, () => squaredOddsArrayConcat(numbers))
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @name squaredOddsStringAdd
|
|
53
|
+
*
|
|
54
|
+
* @benchmark
|
|
55
|
+
* squaredOddsStringAdd: 1e+5: 176.517ms
|
|
56
|
+
*
|
|
57
|
+
* @note Bo5
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
{
|
|
61
|
+
const numbers = [1, 2, 3, 4, 5]
|
|
62
|
+
|
|
63
|
+
const squaredOddsStringAdd = transform(squaredOdds, '')
|
|
64
|
+
|
|
65
|
+
// console.log(squaredOddsStringAdd(numbers))
|
|
66
|
+
|
|
67
|
+
// timeInLoop('squaredOddsStringAdd', 1e5, () => squaredOddsStringAdd(numbers))
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @name squaredOddsSetAdd
|
|
72
|
+
*
|
|
73
|
+
* @benchmark
|
|
74
|
+
* squaredOddsSetAdd: 1e+5: 93.28ms
|
|
75
|
+
*
|
|
76
|
+
* @note Bo5
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
{
|
|
80
|
+
const numbers = [1, 2, 3, 4, 5]
|
|
81
|
+
|
|
82
|
+
const setEmpty = () => new Set()
|
|
83
|
+
|
|
84
|
+
const squaredOddsSetAdd = transform(squaredOdds, setEmpty)
|
|
85
|
+
|
|
86
|
+
// console.log(squaredOddsSetAdd(numbers))
|
|
87
|
+
|
|
88
|
+
// timeInLoop('squaredOddsSetAdd', 1e5, () => squaredOddsSetAdd(numbers))
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @name squaredOddsUint8ArrayConcat
|
|
93
|
+
*
|
|
94
|
+
* @benchmark
|
|
95
|
+
* squaredOddsUint8ArrayConcat: 1e+5: 237.538ms
|
|
96
|
+
*
|
|
97
|
+
* @note Bo5
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
{
|
|
101
|
+
const numbers = [1, 2, 3, 4, 5]
|
|
102
|
+
|
|
103
|
+
const setEmpty = () => new Set()
|
|
104
|
+
|
|
105
|
+
const uint8ArrayEmpty = () => new Uint8Array(0)
|
|
106
|
+
|
|
107
|
+
const squaredOddsUint8ArrayConcat = transform(squaredOdds, uint8ArrayEmpty)
|
|
108
|
+
|
|
109
|
+
// console.log(squaredOddsUint8ArrayConcat(numbers))
|
|
110
|
+
|
|
111
|
+
// timeInLoop('squaredOddsUint8ArrayConcat', 1e5, () => squaredOddsUint8ArrayConcat(numbers))
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const MockWritable = function (values) {
|
|
115
|
+
Writable.call(this)
|
|
116
|
+
this.array = [...values]
|
|
117
|
+
this.handlers = new Map()
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
MockWritable.prototype.write = function (chunk, encoding, callback) {
|
|
121
|
+
this.array.push(chunk)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
MockWritable.prototype.on = function (eventName, handler) {
|
|
125
|
+
if (this.handlers.has(eventName)) {
|
|
126
|
+
this.handlers.get(eventName).push(handler)
|
|
127
|
+
} else {
|
|
128
|
+
this.handlers.set(eventName, [handler])
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
MockWritable.prototype.once = function (eventName, handler) {
|
|
133
|
+
this.handlers.set(eventName, [handler])
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
MockWritable.prototype.emit = function (eventName, ...args) {
|
|
137
|
+
if (!this.handlers.has(eventName)) {
|
|
138
|
+
return undefined
|
|
139
|
+
}
|
|
140
|
+
return this.handlers.get(eventName).map(handler => handler(...args))
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @name squaredOddsStreamConcat
|
|
145
|
+
*
|
|
146
|
+
* @benchmark
|
|
147
|
+
*
|
|
148
|
+
* @note Bo5
|
|
149
|
+
* squaredOddsStreamConcat: 1e+5: 90.274ms
|
|
150
|
+
*/
|
|
151
|
+
|
|
152
|
+
{
|
|
153
|
+
const numbers = [1, 2, 3, 4, 5]
|
|
154
|
+
|
|
155
|
+
const setEmpty = () => new Set()
|
|
156
|
+
|
|
157
|
+
const uint8ArrayEmpty = () => new Uint8Array(0)
|
|
158
|
+
|
|
159
|
+
const square = number => number ** 2
|
|
160
|
+
|
|
161
|
+
const squaredOddsStreamConcat = transform(squaredOdds, new MockWritable([]))
|
|
162
|
+
|
|
163
|
+
// console.log(squaredOddsStreamConcat(numbers))
|
|
164
|
+
|
|
165
|
+
// timeInLoop('squaredOddsStreamConcat', 1e5, () => squaredOddsStreamConcat(numbers))
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* @name squaredOddsObjectAssign
|
|
170
|
+
*
|
|
171
|
+
* @benchmark
|
|
172
|
+
* squaredOddsObjectAssign: 1e+5: 96.854ms
|
|
173
|
+
*
|
|
174
|
+
* @note Bo5
|
|
175
|
+
*/
|
|
176
|
+
|
|
177
|
+
{
|
|
178
|
+
const numbers = [1, 2, 3, 4, 5]
|
|
179
|
+
|
|
180
|
+
const setEmpty = () => new Set()
|
|
181
|
+
|
|
182
|
+
const uint8ArrayEmpty = () => new Uint8Array(0)
|
|
183
|
+
|
|
184
|
+
const square = number => number ** 2
|
|
185
|
+
|
|
186
|
+
const objectEmpty = () => ({})
|
|
187
|
+
|
|
188
|
+
const squaredOddsObjectAssign = transform(squaredOdds, objectEmpty)
|
|
189
|
+
|
|
190
|
+
// console.log(squaredOddsObjectAssign(numbers))
|
|
191
|
+
|
|
192
|
+
// timeInLoop('squaredOddsObjectAssign', 1e5, () => squaredOddsObjectAssign(numbers))
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* @name squaredOddsNullTransform
|
|
197
|
+
*
|
|
198
|
+
* @benchmark
|
|
199
|
+
* squaredOddsNullTransform: 1e+5: 78.409ms
|
|
200
|
+
*
|
|
201
|
+
* @note Bo5
|
|
202
|
+
*/
|
|
203
|
+
|
|
204
|
+
{
|
|
205
|
+
const numbers = [1, 2, 3, 4, 5]
|
|
206
|
+
|
|
207
|
+
const setEmpty = () => new Set()
|
|
208
|
+
|
|
209
|
+
const uint8ArrayEmpty = () => new Uint8Array(0)
|
|
210
|
+
|
|
211
|
+
const square = number => number ** 2
|
|
212
|
+
|
|
213
|
+
const squaredOddsNullTransform = transform(squaredOdds, null)
|
|
214
|
+
|
|
215
|
+
// console.log(squaredOddsNullTransform(numbers))
|
|
216
|
+
|
|
217
|
+
// timeInLoop('squaredOddsNullTransform', 1e5, () => squaredOddsNullTransform(numbers))
|
|
218
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const tryCatch = require('../tryCatch')
|
|
2
|
+
const timeInLoop = require('../x/timeInLoop')
|
|
3
|
+
|
|
4
|
+
const isPromise = value => value != null && typeof value.then == 'function'
|
|
5
|
+
|
|
6
|
+
const tryCatch2 = (tryer, catcher) => function tryCatcher(...args) {
|
|
7
|
+
try {
|
|
8
|
+
const output = tryer.apply(null, args)
|
|
9
|
+
return isPromise(output)
|
|
10
|
+
? output.catch(err => catcher.call(null, err, ...args))
|
|
11
|
+
: output
|
|
12
|
+
} catch (err) {
|
|
13
|
+
return catcher.call(null, err, ...args)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// argument resolver for curry3
|
|
18
|
+
const curry3ResolveArg0 = (
|
|
19
|
+
baseFunc, arg1, arg2,
|
|
20
|
+
) => function arg0Resolver(arg0) {
|
|
21
|
+
return baseFunc(arg0, arg1, arg2)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// argument resolver for curry3
|
|
25
|
+
const curry3ResolveArg1 = (
|
|
26
|
+
baseFunc, arg0, arg2,
|
|
27
|
+
) => function arg1Resolver(arg1) {
|
|
28
|
+
return baseFunc(arg0, arg1, arg2)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// argument resolver for curry3
|
|
32
|
+
const curry3ResolveArg2 = (
|
|
33
|
+
baseFunc, arg0, arg1,
|
|
34
|
+
) => function arg2Resolver(arg2) {
|
|
35
|
+
return baseFunc(arg0, arg1, arg2)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @name curry3
|
|
40
|
+
*
|
|
41
|
+
* @synopsis
|
|
42
|
+
* __ = Symbol('placeholder')
|
|
43
|
+
*
|
|
44
|
+
* curry3(
|
|
45
|
+
* baseFunc function,
|
|
46
|
+
* arg0 __|any,
|
|
47
|
+
* arg1 __|any,
|
|
48
|
+
* arg2 __|any
|
|
49
|
+
* ) -> function
|
|
50
|
+
*/
|
|
51
|
+
const curry3 = function (baseFunc, arg0, arg1, arg2) {
|
|
52
|
+
if (arg0 == __) {
|
|
53
|
+
return curry3ResolveArg0(baseFunc, arg1, arg2)
|
|
54
|
+
}
|
|
55
|
+
if (arg1 == __) {
|
|
56
|
+
return curry3ResolveArg1(baseFunc, arg0, arg2)
|
|
57
|
+
}
|
|
58
|
+
return curry3ResolveArg2(baseFunc, arg0, arg1)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const tryCatch3 = (tryer, catcher) => function tryCatcher(...args) {
|
|
62
|
+
try {
|
|
63
|
+
const result = tryer(...args)
|
|
64
|
+
return isPromise(result)
|
|
65
|
+
? result.catch(curry3(catcherApply, catcher, __, args))
|
|
66
|
+
: result
|
|
67
|
+
} catch (err) {
|
|
68
|
+
return catcher(err, ...args)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @name tryCatch
|
|
74
|
+
*
|
|
75
|
+
* @benchmark
|
|
76
|
+
* tryCatch2: 1e+6: 36.369ms
|
|
77
|
+
* tryCatch3: 1e+6: 17.027ms
|
|
78
|
+
*
|
|
79
|
+
* TODO find the date
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
{
|
|
83
|
+
const identity = value => value
|
|
84
|
+
|
|
85
|
+
const noop = () => {}
|
|
86
|
+
|
|
87
|
+
const isPromise = value => value != null && typeof value.then == 'function'
|
|
88
|
+
|
|
89
|
+
// console.log(tryCatch2(identity, noop)('yo'))
|
|
90
|
+
// console.log(tryCatch3(identity, noop)('yo'))
|
|
91
|
+
|
|
92
|
+
// timeInLoop('tryCatch2', 1e6, () => tryCatch2(identity, noop)('yo'))
|
|
93
|
+
|
|
94
|
+
// timeInLoop('tryCatch3', 1e6, () => tryCatch3(identity, noop)('yo'))
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @name tryCatch 2022-06-13
|
|
99
|
+
*
|
|
100
|
+
* @benchmark
|
|
101
|
+
* tryCatch: 1e+6: tryCatch: 1e+6: 39.787ms
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
{
|
|
105
|
+
const identity = value => value
|
|
106
|
+
const noop = () => {}
|
|
107
|
+
timeInLoop('tryCatch', 1e6, () => tryCatch2(identity, noop)('yo'))
|
|
108
|
+
}
|
package/assign.js
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
const isPromise = require('./_internal/isPromise')
|
|
2
2
|
const objectAssign = require('./_internal/objectAssign')
|
|
3
3
|
const __ = require('./_internal/placeholder')
|
|
4
|
+
const curry2 = require('./_internal/curry2')
|
|
4
5
|
const curry3 = require('./_internal/curry3')
|
|
5
|
-
const
|
|
6
|
+
const functionObjectAll = require('./_internal/functionObjectAll')
|
|
7
|
+
|
|
8
|
+
// _assign(object Object, funcs Object<function>) -> Promise|Object
|
|
9
|
+
const _assign = function (object, funcs) {
|
|
10
|
+
const result = functionObjectAll(funcs, [object])
|
|
11
|
+
return isPromise(result)
|
|
12
|
+
? result.then(curry3(objectAssign, {}, object, __))
|
|
13
|
+
: ({ ...object, ...result })
|
|
14
|
+
}
|
|
6
15
|
|
|
7
16
|
/**
|
|
8
17
|
* @name assign
|
|
9
18
|
*
|
|
10
19
|
* @synopsis
|
|
11
20
|
* ```coffeescript [specscript]
|
|
21
|
+
* assign(object Object, resolvers Object<function>) -> result Promise|Object
|
|
22
|
+
*
|
|
12
23
|
* assign(resolvers Object<function>)(object Object) -> result Promise|Object
|
|
13
24
|
* ```
|
|
14
25
|
*
|
|
@@ -46,14 +57,13 @@ const funcObjectAll = require('./_internal/funcObjectAll')
|
|
|
46
57
|
*
|
|
47
58
|
* @execution concurrent
|
|
48
59
|
*/
|
|
49
|
-
const assign = function (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const result = allFuncs(value)
|
|
53
|
-
return isPromise(result)
|
|
54
|
-
? result.then(curry3(objectAssign, {}, value, __))
|
|
55
|
-
: ({ ...value, ...result })
|
|
60
|
+
const assign = function (arg0, arg1) {
|
|
61
|
+
if (arg1 == null) {
|
|
62
|
+
return curry2(_assign, __, arg0)
|
|
56
63
|
}
|
|
64
|
+
return isPromise(arg0)
|
|
65
|
+
? arg0.then(curry2(_assign, __, arg1))
|
|
66
|
+
: _assign(arg0, arg1)
|
|
57
67
|
}
|
|
58
68
|
|
|
59
69
|
module.exports = assign
|