rubico 1.9.7 → 2.0.1
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/README.md +158 -81
- 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/build +472 -0
- package/compose.js +46 -0
- package/dist/Transducer.es.js +481 -0
- package/dist/Transducer.es.min.js +7 -0
- package/dist/Transducer.js +488 -0
- package/dist/Transducer.min.js +8 -0
- package/dist/Transducer.mjs +481 -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/__.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.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.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.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.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.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.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.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.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.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.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/{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.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.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.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.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.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.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.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.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.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.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.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.mjs +52 -94
- package/dist/rubico.es.js +762 -883
- package/dist/rubico.es.min.js +3 -3
- package/dist/rubico.global.js +2794 -0
- package/dist/rubico.global.min.js +8 -0
- package/dist/rubico.js +739 -869
- package/dist/rubico.min.js +3 -3
- package/dist/rubico.mjs +762 -883
- 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.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/{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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.mjs +2 -2
- package/dist-test.js +31 -2042
- package/eq.js +21 -63
- package/es.js +739 -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 +739 -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 +22 -11
- 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/tmp.js +1 -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/__.min.mjs +0 -7
- package/dist/all.min.mjs +0 -7
- package/dist/always.min.mjs +0 -7
- package/dist/and.min.mjs +0 -7
- package/dist/any.es.min.js +0 -7
- package/dist/any.min.js +0 -8
- package/dist/any.min.mjs +0 -7
- package/dist/assign.min.mjs +0 -7
- package/dist/curry.min.mjs +0 -7
- package/dist/eq.min.mjs +0 -7
- package/dist/filter.min.mjs +0 -7
- package/dist/flatMap.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/get.min.mjs +0 -7
- package/dist/gt.min.mjs +0 -7
- package/dist/gte.min.mjs +0 -7
- package/dist/lt.min.mjs +0 -7
- package/dist/lte.min.mjs +0 -7
- package/dist/map.min.mjs +0 -7
- package/dist/not.min.mjs +0 -7
- package/dist/omit.min.mjs +0 -7
- package/dist/or.min.mjs +0 -7
- package/dist/pick.min.mjs +0 -7
- package/dist/pipe.min.mjs +0 -7
- package/dist/reduce.min.mjs +0 -7
- package/dist/rubico.min.mjs +0 -7
- package/dist/set.min.mjs +0 -7
- package/dist/switchCase.min.mjs +0 -7
- package/dist/tap.min.mjs +0 -7
- package/dist/thunkify.min.mjs +0 -7
- package/dist/transform.min.mjs +0 -7
- package/dist/tryCatch.min.mjs +0 -7
- package/dist/x/append.min.mjs +0 -7
- package/dist/x/callProp.min.mjs +0 -7
- package/dist/x/defaultsDeep.min.mjs +0 -7
- package/dist/x/differenceWith.min.mjs +0 -7
- package/dist/x/filterOut.min.mjs +0 -7
- package/dist/x/find.min.mjs +0 -7
- package/dist/x/findIndex.min.mjs +0 -7
- package/dist/x/first.min.mjs +0 -7
- package/dist/x/flatten.min.mjs +0 -7
- 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/dist/x/groupBy.min.mjs +0 -7
- package/dist/x/has.min.mjs +0 -7
- package/dist/x/identity.min.mjs +0 -7
- package/dist/x/includes.min.mjs +0 -7
- package/dist/x/isDeepEqual.min.mjs +0 -7
- package/dist/x/isEmpty.min.mjs +0 -7
- package/dist/x/isEqual.min.mjs +0 -7
- package/dist/x/isFunction.min.mjs +0 -7
- package/dist/x/isIn.min.mjs +0 -7
- package/dist/x/isObject.min.mjs +0 -7
- package/dist/x/isString.min.mjs +0 -7
- package/dist/x/keys.min.mjs +0 -7
- package/dist/x/last.min.mjs +0 -7
- package/dist/x/maxBy.min.mjs +0 -7
- package/dist/x/noop.min.mjs +0 -7
- package/dist/x/pluck.min.mjs +0 -7
- package/dist/x/prepend.min.mjs +0 -7
- package/dist/x/size.min.mjs +0 -7
- package/dist/x/trace.min.mjs +0 -7
- package/dist/x/unionWith.min.mjs +0 -7
- package/dist/x/uniq.min.mjs +0 -7
- package/dist/x/unless.min.mjs +0 -7
- package/dist/x/values.min.mjs +0 -7
- package/dist/x/when.min.mjs +0 -7
- package/distributor.js +0 -495
- 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
|
@@ -4,20 +4,20 @@ const curry3 = require('./curry3')
|
|
|
4
4
|
const reducerAllSync = require('./reducerAllSync')
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* @name
|
|
7
|
+
* @name reducerEvery
|
|
8
8
|
*
|
|
9
9
|
* @synopsis
|
|
10
10
|
* ```coffeescript [specscript]
|
|
11
|
-
*
|
|
11
|
+
* reducerEvery(
|
|
12
12
|
* predicate any=>boolean,
|
|
13
13
|
* ) -> reducer(result boolean, item any)=>boolean
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
|
-
const
|
|
16
|
+
const reducerEvery = predicate => function allReducer(result, item) {
|
|
17
17
|
return result === false ? false
|
|
18
18
|
: isPromise(result) ? result.then(
|
|
19
19
|
curry3(reducerAllSync, predicate, __, item))
|
|
20
20
|
: result ? predicate(item) : false
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
module.exports =
|
|
23
|
+
module.exports = reducerEvery
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const
|
|
2
|
-
const genericReduce = require('./genericReduce')
|
|
1
|
+
const curry3 = require('./curry3')
|
|
3
2
|
const __ = require('./placeholder')
|
|
4
3
|
const isPromise = require('./isPromise')
|
|
4
|
+
const genericReduce = require('./genericReduce')
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @name reducerFlatMap
|
|
@@ -26,8 +26,8 @@ const reducerFlatMap = (
|
|
|
26
26
|
) => function flatMappingReducer(result, value) {
|
|
27
27
|
const monad = flatMapper(value)
|
|
28
28
|
return isPromise(monad)
|
|
29
|
-
? monad.then(
|
|
30
|
-
: genericReduce(
|
|
29
|
+
? monad.then(curry3(genericReduce, __, reducer, result))
|
|
30
|
+
: genericReduce(monad, reducer, result)
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
module.exports = reducerFlatMap
|
|
@@ -26,7 +26,7 @@ const genericReduce = require('./genericReduce')
|
|
|
26
26
|
const reducerFlatten = reducer => function flatteningReducer(
|
|
27
27
|
result, reducerItem,
|
|
28
28
|
) {
|
|
29
|
-
return genericReduce(
|
|
29
|
+
return genericReduce(reducerItem, reducer, result)
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
module.exports = reducerFlatten
|
|
@@ -4,11 +4,11 @@ const __ = require('./placeholder')
|
|
|
4
4
|
const isPromise = require('./isPromise')
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* @name
|
|
7
|
+
* @name reducerSome
|
|
8
8
|
*
|
|
9
9
|
* @synopsis
|
|
10
10
|
* ```coffeescript [specscript]
|
|
11
|
-
*
|
|
11
|
+
* reducerSome(
|
|
12
12
|
* predicate any=>boolean,
|
|
13
13
|
* ) -> anyReducer (result boolean, item any)=>boolean
|
|
14
14
|
* ```
|
|
@@ -17,10 +17,10 @@ const isPromise = require('./isPromise')
|
|
|
17
17
|
*
|
|
18
18
|
* @TODO throw to break early?
|
|
19
19
|
*/
|
|
20
|
-
const
|
|
20
|
+
const reducerSome = predicate => function anyReducer(result, item) {
|
|
21
21
|
return result === true ? result
|
|
22
22
|
: isPromise(result) ? result.then(curry2(reducerAnySync(predicate), __, item))
|
|
23
23
|
: result ? true : predicate(item)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
module.exports =
|
|
26
|
+
module.exports = reducerSome
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name timeInLoop
|
|
3
|
+
*
|
|
4
|
+
* @synopsis
|
|
5
|
+
* ```coffeescript [specscript]
|
|
6
|
+
* timeInLoop(description string, loopCount number, fn function, options? {
|
|
7
|
+
* silent?: boolean,
|
|
8
|
+
* }) -> undefined
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* @description
|
|
12
|
+
* Logs the amount of time required for a function to run a certain number of times
|
|
13
|
+
*
|
|
14
|
+
* ```js
|
|
15
|
+
* timeInLoop('hello', 1e6, () => 'hello') // hello: 1e+6: 3.474ms
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Reference: https://gist.github.com/funfunction/91b5876a5f562e1e352aed0fcabc3858
|
|
19
|
+
*/
|
|
20
|
+
const timeInLoop = (description, loopCount, fn, options = {}) => {
|
|
21
|
+
const d = `${description}: ${loopCount.toExponential()}`
|
|
22
|
+
const start = performance.now()
|
|
23
|
+
for (let i = 0; i < loopCount; i++) {
|
|
24
|
+
fn()
|
|
25
|
+
}
|
|
26
|
+
const end = performance.now()
|
|
27
|
+
const duration = end - start
|
|
28
|
+
|
|
29
|
+
if (options.silent) {
|
|
30
|
+
return { description, loopCount, duration }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
console.log(`${d}: ${duration}`)
|
|
34
|
+
return { description, loopCount, duration }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = timeInLoop
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const assert = require('assert')
|
|
2
|
+
const timeInLoop = require('./timeInLoop')
|
|
3
|
+
|
|
4
|
+
describe('timeInLoop', () => {
|
|
5
|
+
it('times a function in a loop', async () => {
|
|
6
|
+
const result = timeInLoop('hey', 1e5, () => 'hey')
|
|
7
|
+
assert.equal(result.description, 'hey')
|
|
8
|
+
assert.equal(result.loopCount, 1e5)
|
|
9
|
+
assert.equal(typeof result.duration, 'number')
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
it('can be silent', async () => {
|
|
13
|
+
const result = timeInLoop('hey', 1e5, () => 'hey', { silent: true })
|
|
14
|
+
assert.equal(result.description, 'hey')
|
|
15
|
+
assert.equal(result.loopCount, 1e5)
|
|
16
|
+
assert.equal(typeof result.duration, 'number')
|
|
17
|
+
})
|
|
18
|
+
})
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name timeInLoopAsync
|
|
3
|
+
*
|
|
4
|
+
* @synopsis
|
|
5
|
+
* ```coffeescript [specscript]
|
|
6
|
+
* timeInLoop.async(description string, loopCount number, fn function, options? {
|
|
7
|
+
* silent?: boolean,
|
|
8
|
+
* }) -> undefined
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* @description
|
|
12
|
+
* Like timeInLoop, but every call is awaited
|
|
13
|
+
*
|
|
14
|
+
* ```js
|
|
15
|
+
* timeInLoop.async('async hello', 1e6, async () => 'hello') // async hello: 1e+6: 116.006ms
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
const timeInLoopAsync = async (description, loopCount, fn, options = {}) => {
|
|
19
|
+
const d = `${description}: ${loopCount.toExponential()}`
|
|
20
|
+
const start = performance.now()
|
|
21
|
+
for (let i = 0; i < loopCount; i++) {
|
|
22
|
+
await fn()
|
|
23
|
+
}
|
|
24
|
+
const end = performance.now()
|
|
25
|
+
const duration = end - start
|
|
26
|
+
|
|
27
|
+
if (options.silent) {
|
|
28
|
+
return { description, loopCount, duration }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
console.log(`${d}: ${duration}`)
|
|
32
|
+
return { description, loopCount, duration }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = timeInLoopAsync
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const assert = require('assert')
|
|
2
|
+
const timeInLoopAsync = require('./timeInLoopAsync')
|
|
3
|
+
|
|
4
|
+
describe('timeInLoopAsync', () => {
|
|
5
|
+
it('times an async function in a loop', async () => {
|
|
6
|
+
const p = timeInLoopAsync('asyncHey', 1e5, async () => 'asyncHey')
|
|
7
|
+
assert(p instanceof Promise)
|
|
8
|
+
const result = await p
|
|
9
|
+
assert.equal(result.description, 'asyncHey')
|
|
10
|
+
assert.equal(result.loopCount, 1e5)
|
|
11
|
+
assert.equal(typeof result.duration, 'number')
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('can be silent', async () => {
|
|
15
|
+
const p = timeInLoopAsync('asyncHey', 1e5, async () => 'asyncHey', { silent: true })
|
|
16
|
+
assert(p instanceof Promise)
|
|
17
|
+
const result = await p
|
|
18
|
+
assert.equal(result.description, 'asyncHey')
|
|
19
|
+
assert.equal(result.loopCount, 1e5)
|
|
20
|
+
assert.equal(typeof result.duration, 'number')
|
|
21
|
+
})
|
|
22
|
+
})
|
package/all.js
CHANGED
|
@@ -1,72 +1,138 @@
|
|
|
1
|
+
const areAnyValuesPromises = require('./_internal/areAnyValuesPromises')
|
|
2
|
+
const promiseAll = require('./_internal/promiseAll')
|
|
1
3
|
const isArray = require('./_internal/isArray')
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const symbolAsyncIterator = require('./_internal/symbolAsyncIterator')
|
|
4
|
+
const __ = require('./_internal/placeholder')
|
|
5
|
+
const curry2 = require('./_internal/curry2')
|
|
6
|
+
const curryArgs2 = require('./_internal/curryArgs2')
|
|
7
|
+
const functionArrayAll = require('./_internal/functionArrayAll')
|
|
8
|
+
const functionArrayAllSeries = require('./_internal/functionArrayAllSeries')
|
|
9
|
+
const functionObjectAll = require('./_internal/functionObjectAll')
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* @name all
|
|
12
13
|
*
|
|
13
14
|
* @synopsis
|
|
14
15
|
* ```coffeescript [specscript]
|
|
15
|
-
*
|
|
16
|
+
* all(...args, funcsArray Array<function>) -> result Promise|Array
|
|
16
17
|
*
|
|
17
|
-
* all(
|
|
18
|
+
* all(funcsArray Array<function>)(...args) -> result Promise|Array
|
|
19
|
+
*
|
|
20
|
+
* all(...args, funcsObject Object<function>) -> result Promise|Object
|
|
21
|
+
*
|
|
22
|
+
* all(funcsObject Object<function>)(...args) -> result Promise|Object
|
|
18
23
|
* ```
|
|
19
24
|
*
|
|
20
25
|
* @description
|
|
21
|
-
*
|
|
26
|
+
* Function executor and composer. Accepts either an array of functions or an object of functions as the values. Calls each function of the provided array or object in parallel with the provided arguments. Returns either an array or object of the results of the function executions.
|
|
22
27
|
*
|
|
23
28
|
* ```javascript [playground]
|
|
24
|
-
* const
|
|
29
|
+
* const createArrayOfGreetingsFor = all([
|
|
30
|
+
* name => `Hi ${name}`,
|
|
31
|
+
* name => `Hey ${name}`,
|
|
32
|
+
* name => `Hello ${name}`,
|
|
33
|
+
* ])
|
|
34
|
+
*
|
|
35
|
+
* const arrayOfGreetingsForFred = createArrayOfGreetingsFor('Fred')
|
|
36
|
+
*
|
|
37
|
+
* console.log(arrayOfGreetingsForFred)
|
|
38
|
+
* // ['Hi Fred', 'Hey Fred', 'Hello Fred']
|
|
25
39
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
40
|
+
* const createObjectOfGreetingsFor = all({
|
|
41
|
+
* hi: name => `Hi ${name}`,
|
|
42
|
+
* hey: name => `Hey ${name}`,
|
|
43
|
+
* hello: name => `Hello ${name}`,
|
|
44
|
+
* })
|
|
29
45
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* )
|
|
46
|
+
* const objectOfGreetingsForJane = createObjectOfGreetingsFor('Jane')
|
|
47
|
+
*
|
|
48
|
+
* console.log(objectOfGreetingsForJane)
|
|
49
|
+
* // { hi: 'Hi Jane', hey: 'Hey Jane', hello: 'Hello Jane' }
|
|
33
50
|
* ```
|
|
34
51
|
*
|
|
35
|
-
*
|
|
52
|
+
* `all` can simultaneously compose objects and handle promises.
|
|
36
53
|
*
|
|
37
54
|
* ```javascript [playground]
|
|
38
|
-
* const
|
|
39
|
-
*
|
|
40
|
-
*
|
|
55
|
+
* const identity = value => value
|
|
56
|
+
*
|
|
57
|
+
* const userbase = new Map()
|
|
58
|
+
* userbase.set('1', { _id: 1, name: 'George' })
|
|
59
|
+
*
|
|
60
|
+
* const getUserByID = async id => userbase.get(id)
|
|
61
|
+
*
|
|
62
|
+
* const getAndLogUserById = pipe([
|
|
63
|
+
* all({
|
|
64
|
+
* id: identity,
|
|
65
|
+
* user: getUserByID,
|
|
66
|
+
* }),
|
|
67
|
+
* tap(({ id, user }) => {
|
|
68
|
+
* console.log(`Got user ${JSON.stringify(user)} by id ${id}`)
|
|
69
|
+
* }),
|
|
70
|
+
* ])
|
|
41
71
|
*
|
|
42
|
-
*
|
|
72
|
+
* getAndLogUserById('1') // Got user {"_id":1,"name":"George"} by id 1
|
|
43
73
|
* ```
|
|
44
74
|
*
|
|
45
75
|
* @execution concurrent
|
|
46
|
-
*
|
|
47
|
-
* @muxing
|
|
48
76
|
*/
|
|
49
|
-
const all = predicate => function allTruthy(value) {
|
|
50
|
-
if (isArray(value)) {
|
|
51
|
-
return arrayAll(value, predicate)
|
|
52
|
-
}
|
|
53
|
-
if (value == null) {
|
|
54
|
-
return predicate(value)
|
|
55
|
-
}
|
|
56
77
|
|
|
57
|
-
|
|
58
|
-
|
|
78
|
+
const all = function (...args) {
|
|
79
|
+
const funcs = args.pop()
|
|
80
|
+
if (args.length == 0) {
|
|
81
|
+
return isArray(funcs)
|
|
82
|
+
? curryArgs2(functionArrayAll, funcs, __)
|
|
83
|
+
: curryArgs2(functionObjectAll, funcs, __)
|
|
59
84
|
}
|
|
60
|
-
|
|
61
|
-
|
|
85
|
+
|
|
86
|
+
if (areAnyValuesPromises(args)) {
|
|
87
|
+
return isArray(funcs)
|
|
88
|
+
? promiseAll(args).then(curry2(functionArrayAll, funcs, __))
|
|
89
|
+
: promiseAll(args).then(curry2(functionObjectAll, funcs, __))
|
|
62
90
|
}
|
|
63
|
-
|
|
64
|
-
|
|
91
|
+
|
|
92
|
+
return isArray(funcs)
|
|
93
|
+
? functionArrayAll(funcs, args)
|
|
94
|
+
: functionObjectAll(funcs, args)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @name all.series
|
|
99
|
+
*
|
|
100
|
+
* @synopsis
|
|
101
|
+
* ```coffeescript [specscript]
|
|
102
|
+
* all.series(...args, funcsArray Array<function>) -> result Promise|Array
|
|
103
|
+
*
|
|
104
|
+
* all.series(funcsArray Array<function>)(...args) -> result Promise|Array
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @description
|
|
108
|
+
* `all` with serial execution.
|
|
109
|
+
*
|
|
110
|
+
* ```javascript [playground]
|
|
111
|
+
* const sleep = ms => () => new Promise(resolve => setTimeout(resolve, ms))
|
|
112
|
+
*
|
|
113
|
+
* all.series([
|
|
114
|
+
* greeting => console.log(greeting + ' world'),
|
|
115
|
+
* sleep(1000),
|
|
116
|
+
* greeting => console.log(greeting + ' mom'),
|
|
117
|
+
* sleep(1000),
|
|
118
|
+
* greeting => console.log(greeting + ' goodbye'),
|
|
119
|
+
* ])('hello') // hello world
|
|
120
|
+
* // hello mom
|
|
121
|
+
* // hello goodbye
|
|
122
|
+
* ```
|
|
123
|
+
*
|
|
124
|
+
* @execution series
|
|
125
|
+
*/
|
|
126
|
+
|
|
127
|
+
all.series = function allSeries(...args) {
|
|
128
|
+
const funcs = args.pop()
|
|
129
|
+
if (args.length == 0) {
|
|
130
|
+
return curryArgs2(functionArrayAllSeries, funcs, __)
|
|
65
131
|
}
|
|
66
|
-
if (
|
|
67
|
-
return
|
|
132
|
+
if (areAnyValuesPromises(args)) {
|
|
133
|
+
return promiseAll(args).then(curry2(functionArrayAllSeries, funcs, __))
|
|
68
134
|
}
|
|
69
|
-
return
|
|
135
|
+
return functionArrayAllSeries(funcs, args)
|
|
70
136
|
}
|
|
71
137
|
|
|
72
138
|
module.exports = all
|
package/and.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')
|
|
@@ -8,22 +12,22 @@ const thunkify3 = require('./_internal/thunkify3')
|
|
|
8
12
|
const always = require('./_internal/always')
|
|
9
13
|
|
|
10
14
|
/**
|
|
11
|
-
* @name
|
|
15
|
+
* @name areAllValuesTruthy
|
|
12
16
|
*
|
|
13
17
|
* @synopsis
|
|
14
18
|
* ```coffeescript [specscript]
|
|
15
|
-
*
|
|
19
|
+
* areAllValuesTruthy(predicates Array<value>) -> Promise|boolean
|
|
16
20
|
* ```
|
|
17
21
|
*/
|
|
18
|
-
const
|
|
22
|
+
const areAllValuesTruthy = 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,
|
|
25
29
|
__,
|
|
26
|
-
thunkify2(
|
|
30
|
+
thunkify2(areAllValuesTruthy, predicates, index),
|
|
27
31
|
always(false),
|
|
28
32
|
))
|
|
29
33
|
}
|
|
@@ -41,17 +45,17 @@ const areAllNonfunctionsTruthy = function (predicates, index) {
|
|
|
41
45
|
* ```coffeescript [specscript]
|
|
42
46
|
* asyncArePredicatesAllTruthy(
|
|
43
47
|
* predicates Array<value=>Promise|boolean>
|
|
44
|
-
*
|
|
48
|
+
* args Array,
|
|
45
49
|
* index number,
|
|
46
50
|
* ) -> allTruthy boolean
|
|
47
51
|
* ```
|
|
48
52
|
*/
|
|
49
|
-
const asyncArePredicatesAllTruthy = async function (
|
|
53
|
+
const asyncArePredicatesAllTruthy = 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
60
|
if (isPromise(predicate)) {
|
|
57
61
|
predicate = await predicate
|
|
@@ -63,6 +67,31 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
|
|
|
63
67
|
return true
|
|
64
68
|
}
|
|
65
69
|
|
|
70
|
+
// areAllPredicatesTruthy(args Array, predicates Array<function>) -> Promise|boolean
|
|
71
|
+
const areAllPredicatesTruthy = 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
|
+
thunkify3(asyncArePredicatesAllTruthy, args, predicates, index),
|
|
85
|
+
always(false),
|
|
86
|
+
))
|
|
87
|
+
}
|
|
88
|
+
if (!predicate) {
|
|
89
|
+
return false
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return true
|
|
93
|
+
}
|
|
94
|
+
|
|
66
95
|
/**
|
|
67
96
|
* @name and
|
|
68
97
|
*
|
|
@@ -70,9 +99,9 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
|
|
|
70
99
|
* ```coffeescript [specscript]
|
|
71
100
|
* and(values Array<boolean>) -> result boolean
|
|
72
101
|
*
|
|
73
|
-
* and(
|
|
74
|
-
*
|
|
75
|
-
*
|
|
102
|
+
* and(...args, predicatesOrValues Array<function|boolean>) -> Promise|boolean
|
|
103
|
+
*
|
|
104
|
+
* and(predicatesOrValues Array<function|boolean>)(...args) -> Promise|boolean
|
|
76
105
|
* ```
|
|
77
106
|
*
|
|
78
107
|
* @description
|
|
@@ -106,33 +135,22 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
|
|
|
106
135
|
*
|
|
107
136
|
* @note ...args slows down here by an order of magnitude
|
|
108
137
|
*/
|
|
109
|
-
const and =
|
|
110
|
-
|
|
111
|
-
|
|
138
|
+
const and = function (...args) {
|
|
139
|
+
const predicatesOrValues = args.pop()
|
|
140
|
+
if (areAllValuesNonfunctions(predicatesOrValues)) {
|
|
141
|
+
return areAllValuesTruthy(predicatesOrValues, -1)
|
|
112
142
|
}
|
|
113
|
-
return function arePredicatesAllTruthy(point) {
|
|
114
|
-
const length = predicates.length
|
|
115
|
-
let index = -1
|
|
116
143
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (typeof predicate == 'function') {
|
|
120
|
-
predicate = predicate(point)
|
|
121
|
-
}
|
|
122
|
-
if (isPromise(predicate)) {
|
|
123
|
-
return predicate.then(curry3(
|
|
124
|
-
thunkConditional,
|
|
125
|
-
__,
|
|
126
|
-
thunkify3(asyncArePredicatesAllTruthy, predicates, point, index),
|
|
127
|
-
always(false),
|
|
128
|
-
))
|
|
129
|
-
}
|
|
130
|
-
if (!predicate) {
|
|
131
|
-
return false
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return true
|
|
144
|
+
if (args.length == 0) {
|
|
145
|
+
return curryArgs2(areAllPredicatesTruthy, __, predicatesOrValues)
|
|
135
146
|
}
|
|
147
|
+
|
|
148
|
+
if (areAnyValuesPromises(args)) {
|
|
149
|
+
return promiseAll(args)
|
|
150
|
+
.then(curry2(areAllPredicatesTruthy, __, predicatesOrValues))
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return areAllPredicatesTruthy(args, predicatesOrValues)
|
|
136
154
|
}
|
|
137
155
|
|
|
138
156
|
module.exports = and
|
|
@@ -21,7 +21,7 @@ const FlatMappingIterator = function (iterator, flatMapper) {
|
|
|
21
21
|
const buffer = [], promises = [],
|
|
22
22
|
bufferPush = curry3(callPropUnary, buffer, 'push', __),
|
|
23
23
|
bufferPushReducer = funcConcatSync(getArg1, bufferPush),
|
|
24
|
-
flattenIntoBuffer =
|
|
24
|
+
flattenIntoBuffer = curry3(genericReduce, __, bufferPushReducer, null),
|
|
25
25
|
loadIntoBuffer = funcConcatSync(flattenIntoBuffer, tapSync(bufferLoading => {
|
|
26
26
|
if (isPromise(bufferLoading)) {
|
|
27
27
|
const promise = bufferLoading.then(() => promises.delete(promise))
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const isPromise = require('./isPromise')
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @name _Promise
|
|
5
|
+
*
|
|
6
|
+
* @synopsis
|
|
7
|
+
* ```coffeescript [specscript]
|
|
8
|
+
* new _Promise() -> _Promise
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* @description
|
|
12
|
+
* Internal _Promise. Does not conform to spec.
|
|
13
|
+
*/
|
|
14
|
+
const _Promise = function () {
|
|
15
|
+
this.onFulfilledCallbacks = []
|
|
16
|
+
this.onRejectedCallbacks = []
|
|
17
|
+
this.value = null
|
|
18
|
+
this.error = null
|
|
19
|
+
this.status = 'pending'
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
_Promise.prototype._fulfill = function (value) {
|
|
23
|
+
if (this.status == 'pending') {
|
|
24
|
+
this.status = 'fulfilled'
|
|
25
|
+
this.value = value
|
|
26
|
+
this.onFulfilledCallbacks.forEach(cb => cb(value)) // TODO optimize
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
_Promise.prototype._reject = function (error) {
|
|
31
|
+
if (this.status == 'pending') {
|
|
32
|
+
this.status = 'rejected'
|
|
33
|
+
this.error = error
|
|
34
|
+
this.onRejectedCallbacks.forEach(cb => cb(error)) // TODO optimize
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
_Promise.prototype.then = function (onFulfilled, onRejected) {
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
if (this.status == 'pending') {
|
|
41
|
+
this.onFulfilledCallbacks.push(() => {
|
|
42
|
+
try {
|
|
43
|
+
const ret = onFulfilled(this.value)
|
|
44
|
+
if (isPromise(ret)) {
|
|
45
|
+
ret.then(resolve, reject)
|
|
46
|
+
} else {
|
|
47
|
+
resolve(ret)
|
|
48
|
+
}
|
|
49
|
+
} catch (error) {
|
|
50
|
+
reject(error)
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
this.onRejectedCallbacks.push(() => {
|
|
54
|
+
try {
|
|
55
|
+
const ret = onRejected(this.error)
|
|
56
|
+
if (isPromise(ret)) {
|
|
57
|
+
ret.then(resolve, reject)
|
|
58
|
+
} else {
|
|
59
|
+
reject(ret)
|
|
60
|
+
}
|
|
61
|
+
} catch (error) {
|
|
62
|
+
reject(error)
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
else if (this.status == 'fulfilled') {
|
|
67
|
+
try {
|
|
68
|
+
const ret = onFulfilled(this.value)
|
|
69
|
+
if (isPromise(ret)) {
|
|
70
|
+
ret.then(resolve, reject)
|
|
71
|
+
} else {
|
|
72
|
+
resolve(ret)
|
|
73
|
+
}
|
|
74
|
+
} catch (error) {
|
|
75
|
+
reject(error)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
try {
|
|
80
|
+
const ret = onRejected(this.error)
|
|
81
|
+
if (isPromise(ret)) {
|
|
82
|
+
ret.then(resolve, reject)
|
|
83
|
+
} else {
|
|
84
|
+
reject(ret)
|
|
85
|
+
}
|
|
86
|
+
} catch (error) {
|
|
87
|
+
reject(error)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
module.exports = _Promise
|