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
package/.eslintignore
ADDED
package/.eslintrc.js
CHANGED
|
@@ -192,7 +192,7 @@ module.exports = {
|
|
|
192
192
|
'allowForLoopAfterthoughts': true
|
|
193
193
|
}
|
|
194
194
|
],
|
|
195
|
-
'no-process-env': '
|
|
195
|
+
'no-process-env': 'off',
|
|
196
196
|
'no-process-exit': 'error',
|
|
197
197
|
'no-promise-executor-return': 'off',
|
|
198
198
|
'no-proto': 'error',
|
|
@@ -209,7 +209,8 @@ module.exports = {
|
|
|
209
209
|
'no-sequences': 'off',
|
|
210
210
|
'no-shadow': 'off',
|
|
211
211
|
'no-spaced-func': 'error',
|
|
212
|
-
'no-
|
|
212
|
+
'no-sparse-arrays': 'off',
|
|
213
|
+
'no-sync': 'off',
|
|
213
214
|
'no-tabs': 'error',
|
|
214
215
|
'no-template-curly-in-string': 'error',
|
|
215
216
|
'no-ternary': 'off',
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const reducerConcat = require('./_internal/reducerConcat')
|
|
2
|
+
const identity = require('./_internal/identity')
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @name AggregateReducer
|
|
6
|
+
*
|
|
7
|
+
* @synopsis
|
|
8
|
+
* ```coffeescript [specscript]
|
|
9
|
+
* AggregateReducer(reducers Array<reducer function>) -> aggregateReducer function
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
const AggregateReducer = function (reducers) {
|
|
13
|
+
if (reducers.length == 0) {
|
|
14
|
+
return identity
|
|
15
|
+
}
|
|
16
|
+
return reducers.reduce(reducerConcat, identity)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
module.exports = AggregateReducer
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const assert = require('assert')
|
|
2
|
+
const reduce = require('./reduce')
|
|
3
|
+
const AggregateReducer = require('./AggregateReducer')
|
|
4
|
+
|
|
5
|
+
describe('AggregateReducer', () => {
|
|
6
|
+
it('Combines reducers', async () => {
|
|
7
|
+
const reducerA = (state, action) => {
|
|
8
|
+
if (action.type == 'A') {
|
|
9
|
+
return { ...state, A: true }
|
|
10
|
+
}
|
|
11
|
+
return state
|
|
12
|
+
}
|
|
13
|
+
const reducerB = (state, action) => {
|
|
14
|
+
if (action.type == 'B') {
|
|
15
|
+
return { ...state, B: true }
|
|
16
|
+
}
|
|
17
|
+
return state
|
|
18
|
+
}
|
|
19
|
+
const reducerC = (state, action) => {
|
|
20
|
+
if (action.type == 'C') {
|
|
21
|
+
return { ...state, C: true }
|
|
22
|
+
}
|
|
23
|
+
return state
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const combinedReducer = AggregateReducer([
|
|
27
|
+
reducerA,
|
|
28
|
+
reducerB,
|
|
29
|
+
reducerC,
|
|
30
|
+
])
|
|
31
|
+
|
|
32
|
+
const stateA = [{ type: 'A' }].reduce(combinedReducer, {})
|
|
33
|
+
assert.deepEqual(stateA, { A: true })
|
|
34
|
+
|
|
35
|
+
const stateAB = [{ type: 'A' }, { type: 'B' }].reduce(combinedReducer, {})
|
|
36
|
+
assert.deepEqual(stateAB, { A: true, B: true })
|
|
37
|
+
|
|
38
|
+
const stateABC = [{ type: 'A' }, { type: 'B' }, { type: 'C' }].reduce(combinedReducer, {})
|
|
39
|
+
assert.deepEqual(stateABC, { A: true, B: true, C: true })
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('Combines async reducers', async () => {
|
|
43
|
+
const reducerA = async (state, action) => {
|
|
44
|
+
if (action.type == 'A') {
|
|
45
|
+
return { ...state, A: true }
|
|
46
|
+
}
|
|
47
|
+
return state
|
|
48
|
+
}
|
|
49
|
+
const reducerB = async (state, action) => {
|
|
50
|
+
if (action.type == 'B') {
|
|
51
|
+
return { ...state, B: true }
|
|
52
|
+
}
|
|
53
|
+
return state
|
|
54
|
+
}
|
|
55
|
+
const reducerC = async (state, action) => {
|
|
56
|
+
if (action.type == 'C') {
|
|
57
|
+
return { ...state, C: true }
|
|
58
|
+
}
|
|
59
|
+
return state
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const combinedReducer = AggregateReducer([
|
|
63
|
+
reducerA,
|
|
64
|
+
reducerB,
|
|
65
|
+
reducerC,
|
|
66
|
+
])
|
|
67
|
+
|
|
68
|
+
const stateA = await reduce([{ type: 'A' }], combinedReducer, {})
|
|
69
|
+
assert.deepEqual(stateA, { A: true })
|
|
70
|
+
|
|
71
|
+
const stateAB = await reduce([{ type: 'A' }, { type: 'B' }], combinedReducer, {})
|
|
72
|
+
assert.deepEqual(stateAB, { A: true, B: true })
|
|
73
|
+
|
|
74
|
+
const stateABC = await reduce([{ type: 'A' }, { type: 'B' }, { type: 'C' }], combinedReducer, {})
|
|
75
|
+
assert.deepEqual(stateABC, { A: true, B: true, C: true })
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
it('Identity', async () => {
|
|
79
|
+
const identity = AggregateReducer([])
|
|
80
|
+
assert.equal(1, identity(1))
|
|
81
|
+
})
|
|
82
|
+
})
|
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,25 @@
|
|
|
1
|
-
##
|
|
1
|
+
## v2.0.0
|
|
2
|
+
* Refactor all transducer functionality into Transducer.js from `pipe`, `map`, `filter`, and `flatMap`
|
|
3
|
+
* Remove GeneratorFunction and AsyncGeneratorFunction functionality in `map`, `filter`, `flatMap`, and `reduce`
|
|
4
|
+
* Refactor reducer chaining functionality into AggregateReducer.js from `reduce`
|
|
5
|
+
* Remove Duplex stream handling from `flatMap`
|
|
6
|
+
* Remove binary handling from `flatMap`
|
|
7
|
+
* Promises as arguments for all core functions
|
|
8
|
+
* Eager API for all core functions
|
|
9
|
+
* Automate benchmarks
|
|
10
|
+
* Remove the .sync property functions
|
|
11
|
+
* Remove the .withIndex property functions
|
|
12
|
+
* Deprecate map.own
|
|
13
|
+
* `fork` renamed to `all`
|
|
14
|
+
* `all` renamed to `every`
|
|
15
|
+
* `any` renamed to `some`
|
|
16
|
+
* new `dist-test` only validates syntax with `require`
|
|
17
|
+
* migrate `forEach` into core API.
|
|
18
|
+
* refactor transducer functionality from `forEach` into `Transducer.forEach`
|
|
19
|
+
* async performance improvements
|
|
20
|
+
* `_internal/arrayExtend` stops treating strings like arrays so `transform` creates arrays of strings as expected
|
|
21
|
+
|
|
22
|
+
## v1.9.3
|
|
2
23
|
* property value passed to set may be a resolver - [#224](https://github.com/a-synchronous/rubico/pull/224)
|
|
3
24
|
* rubico/x/isIn - counterpart to includes - [#228](https://github.com/a-synchronous/rubico/pull/228) - [lulldev](https://github.com/lulldev)
|
|
4
25
|
* rubico/x/maxBy - finds the item that is the max by a property denoted by path - [#229](https://github.com/a-synchronous/rubico/pull/229)
|
package/Transducer.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
const funcConcat = require('./_internal/funcConcat')
|
|
2
|
+
const reducerMap = require('./_internal/reducerMap')
|
|
3
|
+
const reducerFilter = require('./_internal/reducerFilter')
|
|
4
|
+
const reducerFlatMap = require('./_internal/reducerFlatMap')
|
|
5
|
+
const reducerForEach = require('./_internal/reducerForEach')
|
|
6
|
+
const curry2 = require('./_internal/curry2')
|
|
7
|
+
const __ = require('./_internal/placeholder')
|
|
8
|
+
|
|
1
9
|
/**
|
|
2
10
|
* @name Transducer
|
|
3
11
|
*
|
|
@@ -6,45 +14,39 @@
|
|
|
6
14
|
*/
|
|
7
15
|
const Transducer = {}
|
|
8
16
|
|
|
9
|
-
/**
|
|
10
|
-
* @name Transducer.pipe
|
|
11
|
-
*
|
|
12
|
-
* @description
|
|
13
|
-
* Composes transducers
|
|
14
|
-
*/
|
|
15
|
-
Transducer.pipe = function () {}
|
|
16
|
-
|
|
17
17
|
/**
|
|
18
18
|
* @name Transducer.map
|
|
19
19
|
*
|
|
20
|
+
* @synopsis
|
|
21
|
+
* ```coffeescript [specscript]
|
|
22
|
+
* type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
|
|
23
|
+
* type Transducer = Reducer=>Reducer
|
|
24
|
+
*
|
|
25
|
+
* Transducer.map(mapperFunc function) -> mappingTransducer Transducer
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
20
28
|
* @description
|
|
21
|
-
*
|
|
29
|
+
* Creates a mapping transducer with a provided reducer. A reducer is a variadic function that depicts a relationship between an accumulator and any number of arguments. A transducer is a function that accepts a reducer as an argument and returns another reducer.
|
|
22
30
|
*
|
|
23
31
|
* ```coffeescript [specscript]
|
|
24
|
-
* Reducer
|
|
32
|
+
* type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
|
|
25
33
|
*
|
|
26
|
-
* Transducer = Reducer=>Reducer
|
|
34
|
+
* type Transducer = Reducer=>Reducer
|
|
27
35
|
* ```
|
|
28
36
|
*
|
|
29
|
-
* The transducer signature enables chaining functionality for reducers. `map` is core to this mechanism, and provides a way via transducers to transform items of reducers.
|
|
37
|
+
* The transducer signature enables chaining functionality for reducers. `map` is core to this mechanism, and provides a way via transducers to transform the items of reducers.
|
|
30
38
|
*
|
|
31
39
|
* ```javascript [playground]
|
|
32
40
|
* const square = number => number ** 2
|
|
33
41
|
*
|
|
34
42
|
* const concat = (array, item) => array.concat(item)
|
|
35
43
|
*
|
|
36
|
-
* const mapSquare = map(square)
|
|
37
|
-
* // mapSquare
|
|
38
|
-
* // undifferentiated and not necessarily locked in to transducer behavior.
|
|
39
|
-
*
|
|
40
|
-
* console.log(
|
|
41
|
-
* mapSquare([1, 2, 3, 4, 5]),
|
|
42
|
-
* ) // [1, 4, 9, 16, 25]
|
|
44
|
+
* const mapSquare = Transducer.map(square)
|
|
45
|
+
* // mapSquare is a transducer
|
|
43
46
|
*
|
|
44
47
|
* const squareConcatReducer = mapSquare(concat)
|
|
45
|
-
* // now mapSquare is passed the function concat
|
|
46
|
-
* //
|
|
47
|
-
* // square and concat.
|
|
48
|
+
* // now mapSquare is passed the reducer function concat; squareConcatReducer
|
|
49
|
+
* // is a reducer with chained functionality square and concat
|
|
48
50
|
*
|
|
49
51
|
* console.log(
|
|
50
52
|
* [1, 2, 3, 4, 5].reduce(squareConcatReducer, []),
|
|
@@ -55,12 +57,33 @@ Transducer.pipe = function () {}
|
|
|
55
57
|
* ) // '1491625'
|
|
56
58
|
* ```
|
|
57
59
|
*
|
|
60
|
+
* Create reducers with chained functionality by using the `Transducer.map` eager API.
|
|
61
|
+
*
|
|
62
|
+
* ```javascript [playground]
|
|
63
|
+
* const square = number => number ** 2
|
|
64
|
+
*
|
|
65
|
+
* const concat = (array, item) => array.concat(item)
|
|
66
|
+
*
|
|
67
|
+
* const squareConcatReducer = Transducer.map(concat, square)
|
|
68
|
+
* // now mapSquare is passed the reducer function concat; squareConcatReducer
|
|
69
|
+
* // is a reducer with chained functionality square and concat
|
|
70
|
+
* ```
|
|
58
71
|
*/
|
|
59
|
-
Transducer.map = function
|
|
72
|
+
Transducer.map = function transducerMap(mapper) {
|
|
73
|
+
return curry2(reducerMap, __, mapper)
|
|
74
|
+
}
|
|
60
75
|
|
|
61
76
|
/**
|
|
62
77
|
* @name Transducer.filter
|
|
63
78
|
*
|
|
79
|
+
* @synopsis
|
|
80
|
+
* ```coffeescript [specscript]
|
|
81
|
+
* type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
|
|
82
|
+
* type Transducer = Reducer=>Reducer
|
|
83
|
+
*
|
|
84
|
+
* Transducer.filter(predicate function) -> filteringTransducer Transducer
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
64
87
|
* @description
|
|
65
88
|
* A reducer in filterable position creates a filtering reducer - one that skips items of the reducer's reducing operation if they test falsy by the predicate. It is possible to use an asynchronous predicate when filtering a reducer, however the implementation of `reduce` must support asynchronous operations. This library provides such an implementation as `reduce`.
|
|
66
89
|
*
|
|
@@ -76,14 +99,19 @@ Transducer.map = function map() {}
|
|
|
76
99
|
* ) // [1, 3, 5]
|
|
77
100
|
* ```
|
|
78
101
|
*/
|
|
79
|
-
Transducer.filter = function
|
|
102
|
+
Transducer.filter = function transducerFilter(predicate) {
|
|
103
|
+
return curry2(reducerFilter, __, predicate)
|
|
104
|
+
}
|
|
80
105
|
|
|
81
106
|
/**
|
|
82
107
|
* @name Transducer.flatMap
|
|
83
108
|
*
|
|
84
109
|
* @synopsis
|
|
85
110
|
* ```coffeescript [specscript]
|
|
86
|
-
*
|
|
111
|
+
* type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
|
|
112
|
+
* type Transducer = Reducer=>Reducer
|
|
113
|
+
*
|
|
114
|
+
* Transducer.flatMap(flatMapper) -> flatMappingTransducer Transducer
|
|
87
115
|
* ```
|
|
88
116
|
*
|
|
89
117
|
* @description
|
|
@@ -108,6 +136,27 @@ Transducer.filter = function filter() {}
|
|
|
108
136
|
*
|
|
109
137
|
* In the case above, each item of the array of numbers returned by `powers` is called with the reducer `arrayConcat` for flattening into the final result.
|
|
110
138
|
*/
|
|
111
|
-
Transducer.flatMap = function
|
|
139
|
+
Transducer.flatMap = function transducerFlatMap(flatMapper) {
|
|
140
|
+
return curry2(reducerFlatMap, __, flatMapper)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @name Transducer.forEach
|
|
145
|
+
*
|
|
146
|
+
* @synopsis
|
|
147
|
+
* ```coffeescript [specscript]
|
|
148
|
+
* type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
|
|
149
|
+
* type Transducer = Reducer=>Reducer
|
|
150
|
+
*
|
|
151
|
+
* Transducer.forEach(func function) -> forEachTransducer Transducer
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
Transducer.forEach = function transducerForEach(func) {
|
|
155
|
+
return curry2(reducerForEach, __, func)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
Transducer.passthrough = function transducerPassthrough(reducer) {
|
|
159
|
+
return reducer
|
|
160
|
+
}
|
|
112
161
|
|
|
113
162
|
module.exports = Transducer
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
const assert = require('assert')
|
|
2
|
+
const Transducer = require('./Transducer')
|
|
3
|
+
const compose = require('./compose')
|
|
4
|
+
const reduce = require('./reduce')
|
|
5
|
+
const transform = require('./transform')
|
|
6
|
+
|
|
7
|
+
describe('Transducer', () => {
|
|
8
|
+
const ade = assert.deepEqual
|
|
9
|
+
const ase = assert.strictEqual
|
|
10
|
+
const aok = assert.ok
|
|
11
|
+
|
|
12
|
+
describe('integration: transducers from Transducer.map, Transducer.filter, Transducer.flatMap', () => {
|
|
13
|
+
const concat = (y, xi) => y.concat(xi)
|
|
14
|
+
const add = (y, xi) => y + xi
|
|
15
|
+
const isOdd = number => number % 2 == 1
|
|
16
|
+
|
|
17
|
+
it('reduce with sync transduced reducers', async () => {
|
|
18
|
+
const squareOdds = compose([
|
|
19
|
+
Transducer.filter(isOdd),
|
|
20
|
+
Transducer.map(x => x ** 2),
|
|
21
|
+
])
|
|
22
|
+
ade(
|
|
23
|
+
reduce(squareOdds(concat), [])([1, 2, 3, 4, 5]),
|
|
24
|
+
[1, 9, 25],
|
|
25
|
+
)
|
|
26
|
+
ade(
|
|
27
|
+
reduce(squareOdds((y, xi) => y.add(xi)), new Set())([1, 2, 3, 4, 5]),
|
|
28
|
+
new Set([1, 9, 25]),
|
|
29
|
+
)
|
|
30
|
+
const appendAlphas = compose([
|
|
31
|
+
Transducer.map(x => `${x}a`),
|
|
32
|
+
Transducer.map(x => `${x}b`),
|
|
33
|
+
Transducer.map(x => `${x}c`),
|
|
34
|
+
])
|
|
35
|
+
ase(
|
|
36
|
+
reduce(appendAlphas(add), '')('123'),
|
|
37
|
+
'1abc2abc3abc',
|
|
38
|
+
)
|
|
39
|
+
ade(
|
|
40
|
+
reduce(appendAlphas(concat), [])('123'),
|
|
41
|
+
['1abc', '2abc', '3abc'],
|
|
42
|
+
)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('reduce with an async transduced reducer', async () => {
|
|
46
|
+
const hosWithHey = compose([
|
|
47
|
+
Transducer.filter(async x => x === 'ho'),
|
|
48
|
+
Transducer.map(x => Promise.resolve(`${x}hey`)),
|
|
49
|
+
])
|
|
50
|
+
const hihos = { a: 'hi', b: 'ho', c: 'hi', d: 'ho', e: 'hi', f: 'ho' }
|
|
51
|
+
aok(reduce(hosWithHey(add), '')(hihos) instanceof Promise),
|
|
52
|
+
aok(reduce(hosWithHey(concat), [])(hihos) instanceof Promise),
|
|
53
|
+
ase(
|
|
54
|
+
await reduce(hosWithHey(add), '')(hihos),
|
|
55
|
+
'hoheyhoheyhohey',
|
|
56
|
+
)
|
|
57
|
+
ade(
|
|
58
|
+
await reduce(hosWithHey(concat), [])(hihos),
|
|
59
|
+
['hohey', 'hohey', 'hohey'],
|
|
60
|
+
)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('flatMapping transducer', async () => {
|
|
64
|
+
const createOddMultiplesSync = compose([
|
|
65
|
+
Transducer.filter(isOdd),
|
|
66
|
+
Transducer.flatMap(number => [number * 2, number * 3]),
|
|
67
|
+
])
|
|
68
|
+
|
|
69
|
+
ase(
|
|
70
|
+
reduce([1, 2, 3], createOddMultiplesSync(add), 0),
|
|
71
|
+
2 + 3 + 6 + 9,
|
|
72
|
+
)
|
|
73
|
+
ade(
|
|
74
|
+
reduce([1, 2, 3], createOddMultiplesSync(concat), []),
|
|
75
|
+
[2, 3, 6, 9],
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
const createOddMultiplesAsync = compose([
|
|
79
|
+
Transducer.filter(isOdd),
|
|
80
|
+
Transducer.flatMap(async number => [number * 2, number * 3]),
|
|
81
|
+
])
|
|
82
|
+
|
|
83
|
+
const p1 = reduce([1, 2, 3], createOddMultiplesAsync(add), 0)
|
|
84
|
+
aok(p1 instanceof Promise)
|
|
85
|
+
const p2 = reduce([1, 2, 3], createOddMultiplesAsync(concat), [])
|
|
86
|
+
aok(p2 instanceof Promise)
|
|
87
|
+
await p1.then(result => {
|
|
88
|
+
ase(result, 2 + 3 + 6 + 9)
|
|
89
|
+
})
|
|
90
|
+
await p2.then(result => {
|
|
91
|
+
ade(result, [2, 3, 6, 9])
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
it('forEach transducer', async () => {
|
|
96
|
+
let sum1 = 0
|
|
97
|
+
reduce([1, 2, 3, 4, 5], Transducer.forEach(number => {
|
|
98
|
+
sum1 += number
|
|
99
|
+
})(() => {}), null)
|
|
100
|
+
assert.equal(sum1, 15)
|
|
101
|
+
|
|
102
|
+
let sum2 = 0
|
|
103
|
+
await reduce([1, 2, 3, 4, 5], Transducer.forEach(async number => {
|
|
104
|
+
sum2 += number
|
|
105
|
+
})(() => {}), null)
|
|
106
|
+
assert.equal(sum2, 15)
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
it('passthrough transducer', async () => {
|
|
110
|
+
assert.deepEqual(
|
|
111
|
+
transform({ a: 1, b: 2, c: 3 }, Transducer.passthrough, []),
|
|
112
|
+
[1, 2, 3],
|
|
113
|
+
)
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
})
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const isPromise = require('./isPromise')
|
|
2
|
+
const areAnyValuesPromises = require('./areAnyValuesPromises')
|
|
3
|
+
const __ = require('./placeholder')
|
|
4
|
+
const curry4 = require('./curry4')
|
|
5
|
+
const curryArgs4 = require('./curryArgs4')
|
|
6
|
+
const spread2 = require('./spread2')
|
|
7
|
+
const promiseAll = require('./promiseAll')
|
|
8
|
+
const leftResolverRightResolverCompare = require('./leftResolverRightResolverCompare')
|
|
9
|
+
const leftResolverRightValueCompare = require('./leftResolverRightValueCompare')
|
|
10
|
+
const leftValueRightResolverCompare = require('./leftValueRightResolverCompare')
|
|
11
|
+
|
|
12
|
+
// ComparisonOperator(comparator function) -> operator function
|
|
13
|
+
const ComparisonOperator = comparator => function operator(...args) {
|
|
14
|
+
const right = args.pop()
|
|
15
|
+
const left = args.pop()
|
|
16
|
+
const isLeftResolver = typeof left == 'function',
|
|
17
|
+
isRightResolver = typeof right == 'function'
|
|
18
|
+
|
|
19
|
+
if (isLeftResolver && isRightResolver) {
|
|
20
|
+
if (args.length == 0) {
|
|
21
|
+
return curryArgs4(
|
|
22
|
+
leftResolverRightResolverCompare, __, comparator, left, right,
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
if (areAnyValuesPromises(args)) {
|
|
26
|
+
return promiseAll(args).then(curry4(
|
|
27
|
+
leftResolverRightResolverCompare, __, comparator, left, right,
|
|
28
|
+
))
|
|
29
|
+
}
|
|
30
|
+
return leftResolverRightResolverCompare(args, comparator, left, right)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (isLeftResolver) {
|
|
34
|
+
if (args.length == 0) {
|
|
35
|
+
return curryArgs4(
|
|
36
|
+
leftResolverRightValueCompare, __, comparator, left, right,
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
if (areAnyValuesPromises(args)) {
|
|
40
|
+
return promiseAll(args).then(curry4(
|
|
41
|
+
leftResolverRightValueCompare, __, comparator, left, right,
|
|
42
|
+
))
|
|
43
|
+
}
|
|
44
|
+
return leftResolverRightValueCompare(args, comparator, left, right)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (isRightResolver) {
|
|
48
|
+
if (args.length == 0) {
|
|
49
|
+
return curryArgs4(
|
|
50
|
+
leftValueRightResolverCompare, __, comparator, left, right,
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
if (areAnyValuesPromises(args)) {
|
|
54
|
+
return promiseAll(args).then(curry4(
|
|
55
|
+
leftValueRightResolverCompare, __, comparator, left, right,
|
|
56
|
+
))
|
|
57
|
+
}
|
|
58
|
+
return leftValueRightResolverCompare(args, comparator, left, right)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (isPromise(left) || isPromise(right)) {
|
|
62
|
+
return promiseAll([left, right]).then(spread2(comparator))
|
|
63
|
+
}
|
|
64
|
+
return comparator(left, right)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
module.exports = ComparisonOperator
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const fs = require('fs')
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @name File
|
|
5
|
+
*
|
|
6
|
+
* @synopsis
|
|
7
|
+
* ```coffeescript [specscript]
|
|
8
|
+
* new File(path string) -> File
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
const File = function (path) {
|
|
12
|
+
this.path = path
|
|
13
|
+
this.writeStream = fs.createWriteStream(path)
|
|
14
|
+
return this
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @name File.prototype.write
|
|
19
|
+
*
|
|
20
|
+
* @synopsis
|
|
21
|
+
* ```coffeescript [specscript]
|
|
22
|
+
* new File(...).write(str string) -> ()
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
File.prototype.write = function (str) {
|
|
26
|
+
this.writeStream.write(str)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @name File.prototype.rm
|
|
31
|
+
*
|
|
32
|
+
* @synopsis
|
|
33
|
+
* ```coffeescript [specscript]
|
|
34
|
+
* new File(...).rm() -> Promise<>
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
File.prototype.rm = async function () {
|
|
38
|
+
await fs.promises.rm(this.path)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
module.exports = File
|
|
@@ -2,7 +2,7 @@ const isPromise = require('./isPromise')
|
|
|
2
2
|
const genericReduce = require('./genericReduce')
|
|
3
3
|
const symbolAsyncIterator = require('./symbolAsyncIterator')
|
|
4
4
|
const arrayPush = require('./arrayPush')
|
|
5
|
-
const
|
|
5
|
+
const curry3 = require('./curry3')
|
|
6
6
|
const __ = require('./placeholder')
|
|
7
7
|
const promiseRace = require('./promiseRace')
|
|
8
8
|
const sleep = require('./sleep')
|
|
@@ -55,12 +55,12 @@ const FlatMappingAsyncIterator = function (asyncIterator, flatMapper) {
|
|
|
55
55
|
} else {
|
|
56
56
|
const monad = flatMapper(value)
|
|
57
57
|
if (isPromise(monad)) {
|
|
58
|
-
const bufferLoading =
|
|
59
|
-
|
|
58
|
+
const bufferLoading =
|
|
59
|
+
monad.then(curry3(genericReduce, __, arrayPush, buffer))
|
|
60
60
|
const promise = bufferLoading.then(() => promises.delete(promise))
|
|
61
61
|
promises.add(promise)
|
|
62
62
|
} else {
|
|
63
|
-
const bufferLoading = genericReduce(
|
|
63
|
+
const bufferLoading = genericReduce(monad, arrayPush, buffer)
|
|
64
64
|
if (isPromise(bufferLoading)) {
|
|
65
65
|
const promise = bufferLoading.then(() => promises.delete(promise))
|
|
66
66
|
promises.add(promise)
|
|
@@ -31,7 +31,7 @@ const FlatMappingIterator = function (iterator, flatMapper) {
|
|
|
31
31
|
return iteration
|
|
32
32
|
}
|
|
33
33
|
const monadAsArray = genericReduce(
|
|
34
|
-
|
|
34
|
+
flatMapper(iteration.value),
|
|
35
35
|
arrayPush,
|
|
36
36
|
[]) // this will always have at least one item
|
|
37
37
|
if (monadAsArray.length > 1) {
|