rubico 1.9.6 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +5 -0
- package/.eslintrc.js +3 -2
- package/.github/workflows/nodejs.yml +1 -1
- package/AggregateReducer.js +19 -0
- package/AggregateReducer.test.js +82 -0
- package/CHANGELOG.md +22 -1
- package/Transducer.js +162 -0
- package/Transducer.test.js +117 -0
- package/_internal/ComparisonOperator.js +68 -0
- package/_internal/File.js +41 -0
- package/_internal/FlatMappingAsyncIterator.js +4 -4
- package/_internal/FlatMappingIterator.js +1 -1
- package/_internal/TimeInLoopSuite.js +138 -0
- package/_internal/areAnyValuesPromises.js +23 -0
- package/_internal/{arrayAll.js → arrayEvery.js} +4 -4
- package/_internal/arrayExtend.js +3 -2
- package/_internal/arrayFilter.js +3 -4
- package/_internal/{arrayAny.js → arraySome.js} +8 -8
- package/_internal/{asyncIteratorAll.js → asyncIteratorEvery.js} +4 -4
- package/_internal/{asyncIteratorAny.js → asyncIteratorSome.js} +4 -4
- package/_internal/curry4.test.js +25 -0
- package/_internal/curry5.test.js +29 -0
- package/_internal/curryArgs2.js +43 -0
- package/_internal/curryArgs3.test.js +21 -0
- package/_internal/curryArgs4.js +65 -0
- package/_internal/curryArgs4.test.js +25 -0
- package/_internal/equals.js +13 -0
- package/_internal/findAllFilePaths.js +22 -0
- package/_internal/funcApply.js +2 -0
- package/_internal/funcCall.js +14 -0
- package/_internal/functionArrayAll.js +26 -0
- package/_internal/functionArrayAllSeries.js +55 -0
- package/_internal/functionObjectAll.js +32 -0
- package/_internal/genericReduce.js +4 -22
- package/_internal/genericTransform.js +15 -15
- package/_internal/improvedGenericTransform.js +93 -0
- package/_internal/{iteratorAll.js → iteratorEvery.js} +4 -4
- package/_internal/{iteratorAny.js → iteratorSome.js} +6 -6
- package/_internal/leftResolverRightResolverCompare.js +19 -0
- package/_internal/leftResolverRightValueCompare.js +16 -0
- package/_internal/leftValueRightResolverCompare.js +16 -0
- package/_internal/objectReduce.js +0 -1
- package/_internal/pathResolve.js +6 -0
- package/_internal/{reducerAll.js → reducerEvery.js} +4 -4
- package/_internal/reducerFlatMap.js +4 -4
- package/_internal/reducerFlatten.js +1 -1
- package/_internal/{reducerAny.js → reducerSome.js} +4 -4
- package/_internal/timeInLoop.js +37 -0
- package/_internal/timeInLoop.test.js +18 -0
- package/_internal/timeInLoopAsync.js +35 -0
- package/_internal/timeInLoopAsync.test.js +22 -0
- package/all.js +105 -45
- package/always.js +3 -9
- package/and.js +69 -45
- package/archive/{FlatMappingIteratorCool.js → FlatMappingIterator-2020-09-28.js} +1 -1
- package/archive/_Promise-2023-05-29.js +93 -0
- package/archive/arrayMap2-2023-05-29.js +73 -0
- package/archive/benchmarks-v1.9.7/all.js +34 -0
- package/archive/benchmarks-v1.9.7/and.js +24 -0
- package/archive/benchmarks-v1.9.7/assign.js +174 -0
- package/archive/benchmarks-v1.9.7/curry.js +55 -0
- package/archive/benchmarks-v1.9.7/eq.js +25 -0
- package/archive/benchmarks-v1.9.7/filter.js +1322 -0
- package/archive/benchmarks-v1.9.7/flatMap.js +48 -0
- package/archive/benchmarks-v1.9.7/get.js +44 -0
- package/archive/benchmarks-v1.9.7/gt.js +25 -0
- package/archive/benchmarks-v1.9.7/gte.js +25 -0
- package/archive/benchmarks-v1.9.7/lt.js +25 -0
- package/archive/benchmarks-v1.9.7/lte.js +25 -0
- package/archive/benchmarks-v1.9.7/map.js +892 -0
- package/archive/benchmarks-v1.9.7/omit.js +28 -0
- package/archive/benchmarks-v1.9.7/or.js +51 -0
- package/archive/benchmarks-v1.9.7/pick.js +24 -0
- package/archive/benchmarks-v1.9.7/pipe.js +152 -0
- package/archive/benchmarks-v1.9.7/reduce.js +739 -0
- package/archive/benchmarks-v1.9.7/switchCase.js +256 -0
- package/archive/benchmarks-v1.9.7/tap.js +90 -0
- package/archive/benchmarks-v1.9.7/transform.js +218 -0
- package/archive/benchmarks-v1.9.7/tryCatch.js +108 -0
- package/assign.js +45 -22
- package/bench +65 -0
- package/benchmark-output/v1.9.7 +268 -0
- package/benchmarks/all.async.js +43 -0
- package/benchmarks/all.js +42 -33
- package/benchmarks/always.js +15 -0
- package/benchmarks/and.async.js +25 -0
- package/benchmarks/and.js +20 -19
- package/benchmarks/assign.async.js +27 -0
- package/benchmarks/assign.js +20 -167
- package/benchmarks/curry.js +34 -54
- package/benchmarks/eq.async.js +23 -0
- package/benchmarks/eq.js +17 -19
- package/benchmarks/every.async.js +19 -0
- package/benchmarks/every.js +19 -0
- package/benchmarks/filter.async.js +32 -0
- package/benchmarks/filter.js +27 -1311
- package/benchmarks/flatMap.async.js +26 -0
- package/benchmarks/flatMap.js +26 -36
- package/benchmarks/get.async.js +19 -0
- package/benchmarks/get.js +27 -32
- package/benchmarks/gt.async.js +23 -0
- package/benchmarks/gt.js +17 -19
- package/benchmarks/gte.async.js +23 -0
- package/benchmarks/gte.js +17 -19
- package/benchmarks/lt.async.js +23 -0
- package/benchmarks/lt.js +17 -19
- package/benchmarks/lte.async.js +23 -0
- package/benchmarks/lte.js +17 -19
- package/benchmarks/map.async.js +43 -0
- package/benchmarks/map.js +24 -876
- package/benchmarks/misc/Promise.js +26 -0
- package/benchmarks/misc/isPromise.js +30 -0
- package/benchmarks/misc/promiseAll.js +36 -0
- package/benchmarks/not.js +23 -0
- package/benchmarks/omit.js +30 -20
- package/benchmarks/or.async.js +25 -0
- package/benchmarks/or.js +23 -49
- package/benchmarks/pick.js +30 -16
- package/benchmarks/pipe.async.js +47 -0
- package/benchmarks/pipe.js +46 -151
- package/benchmarks/reduce.async.js +32 -0
- package/benchmarks/reduce.js +27 -728
- package/benchmarks/set.async.js +19 -0
- package/benchmarks/set.js +41 -0
- package/benchmarks/some.async.js +19 -0
- package/benchmarks/some.js +19 -0
- package/benchmarks/switchCase.async.js +27 -0
- package/benchmarks/switchCase.js +55 -256
- package/benchmarks/tap.js +10 -85
- package/benchmarks/thunkify.js +15 -0
- package/benchmarks/transform.async.js +27 -0
- package/benchmarks/transform.js +28 -206
- package/benchmarks/tryCatch.async.js +25 -0
- package/benchmarks/tryCatch.js +24 -100
- package/{distributor.js → build} +50 -50
- package/compose.js +46 -0
- package/curry.js +20 -12
- package/dist/__.es.js +2 -2
- package/dist/__.es.min.js +2 -2
- package/dist/__.js +2 -2
- package/dist/__.min.js +2 -2
- package/dist/__.min.mjs +2 -2
- package/dist/__.mjs +2 -2
- package/dist/all.es.js +173 -92
- package/dist/all.es.min.js +3 -3
- package/dist/all.js +173 -92
- package/dist/all.min.js +3 -3
- package/dist/all.min.mjs +3 -3
- package/dist/all.mjs +173 -92
- package/dist/always.es.js +2 -2
- package/dist/always.es.min.js +2 -2
- package/dist/always.js +2 -2
- package/dist/always.min.js +2 -2
- package/dist/always.min.mjs +2 -2
- package/dist/always.mjs +2 -2
- package/dist/and.es.js +101 -32
- package/dist/and.es.min.js +3 -3
- package/dist/and.js +101 -32
- package/dist/and.min.js +3 -3
- package/dist/and.min.mjs +3 -3
- package/dist/and.mjs +101 -32
- package/dist/assign.es.js +37 -10
- package/dist/assign.es.min.js +3 -3
- package/dist/assign.js +37 -10
- package/dist/assign.min.js +3 -3
- package/dist/assign.min.mjs +3 -3
- package/dist/assign.mjs +37 -10
- package/dist/compose.es.js +71 -0
- package/dist/compose.es.min.js +7 -0
- package/dist/compose.js +78 -0
- package/dist/compose.min.js +8 -0
- package/dist/compose.min.mjs +7 -0
- package/dist/compose.mjs +71 -0
- package/dist/curry.es.js +2 -2
- package/dist/curry.es.min.js +2 -2
- package/dist/curry.js +2 -2
- package/dist/curry.min.js +2 -2
- package/dist/curry.min.mjs +2 -2
- package/dist/curry.mjs +2 -2
- package/dist/eq.es.js +172 -49
- package/dist/eq.es.min.js +3 -3
- package/dist/eq.js +172 -49
- package/dist/eq.min.js +3 -3
- package/dist/eq.min.mjs +3 -3
- package/dist/eq.mjs +172 -49
- package/dist/every.es.js +194 -0
- package/dist/every.es.min.js +7 -0
- package/dist/every.js +201 -0
- package/dist/every.min.js +8 -0
- package/dist/every.min.mjs +7 -0
- package/dist/every.mjs +194 -0
- package/dist/filter.es.js +14 -108
- package/dist/filter.es.min.js +3 -3
- package/dist/filter.js +14 -108
- package/dist/filter.min.js +3 -3
- package/dist/filter.min.mjs +3 -3
- package/dist/filter.mjs +14 -108
- package/dist/flatMap.es.js +27 -214
- package/dist/flatMap.es.min.js +3 -3
- package/dist/flatMap.js +27 -214
- package/dist/flatMap.min.js +3 -3
- package/dist/flatMap.min.mjs +3 -3
- package/dist/flatMap.mjs +27 -214
- package/dist/{x/forEach.es.js → forEach.es.js} +52 -70
- package/dist/forEach.es.min.js +7 -0
- package/dist/{x/forEach.js → forEach.js} +52 -70
- package/dist/forEach.min.js +8 -0
- package/dist/forEach.min.mjs +7 -0
- package/dist/{x/forEach.mjs → forEach.mjs} +52 -70
- package/dist/get.es.js +60 -5
- package/dist/get.es.min.js +3 -3
- package/dist/get.js +60 -5
- package/dist/get.min.js +3 -3
- package/dist/get.min.mjs +3 -3
- package/dist/get.mjs +60 -5
- package/dist/gt.es.js +171 -48
- package/dist/gt.es.min.js +3 -3
- package/dist/gt.js +171 -48
- package/dist/gt.min.js +3 -3
- package/dist/gt.min.mjs +3 -3
- package/dist/gt.mjs +171 -48
- package/dist/gte.es.js +171 -48
- package/dist/gte.es.min.js +3 -3
- package/dist/gte.js +171 -48
- package/dist/gte.min.js +3 -3
- package/dist/gte.min.mjs +3 -3
- package/dist/gte.mjs +171 -48
- package/dist/lt.es.js +171 -48
- package/dist/lt.es.min.js +3 -3
- package/dist/lt.js +171 -48
- package/dist/lt.min.js +3 -3
- package/dist/lt.min.mjs +3 -3
- package/dist/lt.mjs +171 -48
- package/dist/lte.es.js +171 -48
- package/dist/lte.es.min.js +3 -3
- package/dist/lte.js +171 -48
- package/dist/lte.min.js +3 -3
- package/dist/lte.min.mjs +3 -3
- package/dist/lte.mjs +171 -48
- package/dist/map.es.js +12 -101
- package/dist/map.es.min.js +3 -3
- package/dist/map.js +12 -101
- package/dist/map.min.js +3 -3
- package/dist/map.min.mjs +3 -3
- package/dist/map.mjs +12 -101
- package/dist/not.es.js +75 -14
- package/dist/not.es.min.js +3 -3
- package/dist/not.js +75 -14
- package/dist/not.min.js +3 -3
- package/dist/not.min.mjs +3 -3
- package/dist/not.mjs +75 -14
- package/dist/omit.es.js +38 -3
- package/dist/omit.es.min.js +3 -3
- package/dist/omit.js +38 -3
- package/dist/omit.min.js +3 -3
- package/dist/omit.min.mjs +3 -3
- package/dist/omit.mjs +38 -3
- package/dist/or.es.js +99 -31
- package/dist/or.es.min.js +3 -3
- package/dist/or.js +99 -31
- package/dist/or.min.js +3 -3
- package/dist/or.min.mjs +3 -3
- package/dist/or.mjs +99 -31
- package/dist/pick.es.js +38 -3
- package/dist/pick.es.min.js +3 -3
- package/dist/pick.js +38 -3
- package/dist/pick.min.js +3 -3
- package/dist/pick.min.mjs +3 -3
- package/dist/pick.mjs +38 -3
- package/dist/pipe.es.js +42 -46
- package/dist/pipe.es.min.js +3 -3
- package/dist/pipe.js +42 -46
- package/dist/pipe.min.js +3 -3
- package/dist/pipe.min.mjs +3 -3
- package/dist/pipe.mjs +42 -46
- package/dist/reduce.es.js +52 -94
- package/dist/reduce.es.min.js +3 -3
- package/dist/reduce.js +52 -94
- package/dist/reduce.min.js +3 -3
- package/dist/reduce.min.mjs +3 -3
- package/dist/reduce.mjs +52 -94
- package/dist/rubico.es.js +746 -869
- package/dist/rubico.es.min.js +3 -3
- package/dist/rubico.js +746 -869
- package/dist/rubico.min.js +3 -3
- package/dist/rubico.min.mjs +3 -3
- package/dist/rubico.mjs +746 -869
- package/dist/set.es.js +18 -3
- package/dist/set.es.min.js +3 -3
- package/dist/set.js +18 -3
- package/dist/set.min.js +3 -3
- package/dist/set.min.mjs +3 -3
- package/dist/set.mjs +18 -3
- package/dist/{any.js → some.es.js} +64 -54
- package/dist/some.es.min.js +7 -0
- package/dist/{any.mjs → some.js} +72 -48
- package/dist/some.min.js +8 -0
- package/dist/some.min.mjs +7 -0
- package/dist/{any.es.js → some.mjs} +65 -48
- package/dist/switchCase.es.js +55 -5
- package/dist/switchCase.es.min.js +3 -3
- package/dist/switchCase.js +55 -5
- package/dist/switchCase.min.js +3 -3
- package/dist/switchCase.min.mjs +3 -3
- package/dist/switchCase.mjs +55 -5
- package/dist/tap.es.js +2 -9
- package/dist/tap.es.min.js +3 -3
- package/dist/tap.js +2 -9
- package/dist/tap.min.js +3 -3
- package/dist/tap.min.mjs +3 -3
- package/dist/tap.mjs +2 -9
- package/dist/thunkify.es.js +45 -2
- package/dist/thunkify.es.min.js +3 -3
- package/dist/thunkify.js +45 -2
- package/dist/thunkify.min.js +3 -3
- package/dist/thunkify.min.mjs +3 -3
- package/dist/thunkify.mjs +45 -2
- package/dist/transform.es.js +35 -71
- package/dist/transform.es.min.js +3 -3
- package/dist/transform.js +35 -71
- package/dist/transform.min.js +3 -3
- package/dist/transform.min.mjs +3 -3
- package/dist/transform.mjs +35 -71
- package/dist/tryCatch.es.js +33 -17
- package/dist/tryCatch.es.min.js +3 -3
- package/dist/tryCatch.js +33 -17
- package/dist/tryCatch.min.js +3 -3
- package/dist/tryCatch.min.mjs +3 -3
- package/dist/tryCatch.mjs +33 -17
- package/dist/x/append.es.js +2 -2
- package/dist/x/append.es.min.js +2 -2
- package/dist/x/append.js +2 -2
- package/dist/x/append.min.js +2 -2
- package/dist/x/append.min.mjs +2 -2
- package/dist/x/append.mjs +2 -2
- package/dist/x/callProp.es.js +2 -2
- package/dist/x/callProp.es.min.js +2 -2
- package/dist/x/callProp.js +2 -2
- package/dist/x/callProp.min.js +2 -2
- package/dist/x/callProp.min.mjs +2 -2
- package/dist/x/callProp.mjs +2 -2
- package/dist/x/defaultsDeep.es.js +2 -2
- package/dist/x/defaultsDeep.es.min.js +2 -2
- package/dist/x/defaultsDeep.js +2 -2
- package/dist/x/defaultsDeep.min.js +2 -2
- package/dist/x/defaultsDeep.min.mjs +2 -2
- package/dist/x/defaultsDeep.mjs +2 -2
- package/dist/x/differenceWith.es.js +7 -7
- package/dist/x/differenceWith.es.min.js +3 -3
- package/dist/x/differenceWith.js +7 -7
- package/dist/x/differenceWith.min.js +2 -2
- package/dist/x/differenceWith.min.mjs +3 -3
- package/dist/x/differenceWith.mjs +7 -7
- package/dist/x/filterOut.es.js +60 -117
- package/dist/x/filterOut.es.min.js +3 -3
- package/dist/x/filterOut.js +60 -117
- package/dist/x/filterOut.min.js +3 -3
- package/dist/x/filterOut.min.mjs +3 -3
- package/dist/x/filterOut.mjs +60 -117
- package/dist/x/find.es.js +2 -2
- package/dist/x/find.es.min.js +2 -2
- package/dist/x/find.js +2 -2
- package/dist/x/find.min.js +2 -2
- package/dist/x/find.min.mjs +2 -2
- package/dist/x/find.mjs +2 -2
- package/dist/x/findIndex.es.js +2 -2
- package/dist/x/findIndex.es.min.js +2 -2
- package/dist/x/findIndex.js +2 -2
- package/dist/x/findIndex.min.js +2 -2
- package/dist/x/findIndex.min.mjs +2 -2
- package/dist/x/findIndex.mjs +2 -2
- package/dist/x/first.es.js +2 -2
- package/dist/x/first.es.min.js +2 -2
- package/dist/x/first.js +2 -2
- package/dist/x/first.min.js +2 -2
- package/dist/x/first.min.mjs +2 -2
- package/dist/x/first.mjs +2 -2
- package/dist/x/flatten.es.js +20 -207
- package/dist/x/flatten.es.min.js +3 -3
- package/dist/x/flatten.js +20 -207
- package/dist/x/flatten.min.js +3 -3
- package/dist/x/flatten.min.mjs +3 -3
- package/dist/x/flatten.mjs +20 -207
- package/dist/x/groupBy.es.js +52 -94
- package/dist/x/groupBy.es.min.js +3 -3
- package/dist/x/groupBy.js +52 -94
- package/dist/x/groupBy.min.js +3 -3
- package/dist/x/groupBy.min.mjs +3 -3
- package/dist/x/groupBy.mjs +52 -94
- package/dist/x/has.es.js +2 -2
- package/dist/x/has.es.min.js +2 -2
- package/dist/x/has.js +2 -2
- package/dist/x/has.min.js +2 -2
- package/dist/x/has.min.mjs +2 -2
- package/dist/x/has.mjs +2 -2
- package/dist/x/identity.es.js +2 -2
- package/dist/x/identity.es.min.js +2 -2
- package/dist/x/identity.js +2 -2
- package/dist/x/identity.min.js +2 -2
- package/dist/x/identity.min.mjs +2 -2
- package/dist/x/identity.mjs +2 -2
- package/dist/x/includes.es.js +2 -2
- package/dist/x/includes.es.min.js +2 -2
- package/dist/x/includes.js +2 -2
- package/dist/x/includes.min.js +2 -2
- package/dist/x/includes.min.mjs +2 -2
- package/dist/x/includes.mjs +2 -2
- package/dist/x/isDeepEqual.es.js +2 -2
- package/dist/x/isDeepEqual.es.min.js +2 -2
- package/dist/x/isDeepEqual.js +2 -2
- package/dist/x/isDeepEqual.min.js +2 -2
- package/dist/x/isDeepEqual.min.mjs +2 -2
- package/dist/x/isDeepEqual.mjs +2 -2
- package/dist/x/isEmpty.es.js +2 -2
- package/dist/x/isEmpty.es.min.js +2 -2
- package/dist/x/isEmpty.js +2 -2
- package/dist/x/isEmpty.min.js +2 -2
- package/dist/x/isEmpty.min.mjs +2 -2
- package/dist/x/isEmpty.mjs +2 -2
- package/dist/x/isEqual.es.js +2 -2
- package/dist/x/isEqual.es.min.js +2 -2
- package/dist/x/isEqual.js +2 -2
- package/dist/x/isEqual.min.js +2 -2
- package/dist/x/isEqual.min.mjs +2 -2
- package/dist/x/isEqual.mjs +2 -2
- package/dist/x/isFunction.es.js +2 -2
- package/dist/x/isFunction.es.min.js +2 -2
- package/dist/x/isFunction.js +2 -2
- package/dist/x/isFunction.min.js +2 -2
- package/dist/x/isFunction.min.mjs +2 -2
- package/dist/x/isFunction.mjs +2 -2
- package/dist/x/isIn.es.js +2 -2
- package/dist/x/isIn.es.min.js +2 -2
- package/dist/x/isIn.js +2 -2
- package/dist/x/isIn.min.js +2 -2
- package/dist/x/isIn.min.mjs +2 -2
- package/dist/x/isIn.mjs +2 -2
- package/dist/x/isObject.es.js +2 -2
- package/dist/x/isObject.es.min.js +2 -2
- package/dist/x/isObject.js +2 -2
- package/dist/x/isObject.min.js +2 -2
- package/dist/x/isObject.min.mjs +2 -2
- package/dist/x/isObject.mjs +2 -2
- package/dist/x/isString.es.js +2 -2
- package/dist/x/isString.es.min.js +2 -2
- package/dist/x/isString.js +2 -2
- package/dist/x/isString.min.js +2 -2
- package/dist/x/isString.min.mjs +2 -2
- package/dist/x/isString.mjs +2 -2
- package/dist/x/keys.es.js +2 -2
- package/dist/x/keys.es.min.js +2 -2
- package/dist/x/keys.js +2 -2
- package/dist/x/keys.min.js +2 -2
- package/dist/x/keys.min.mjs +2 -2
- package/dist/x/keys.mjs +2 -2
- package/dist/x/last.es.js +2 -2
- package/dist/x/last.es.min.js +2 -2
- package/dist/x/last.js +2 -2
- package/dist/x/last.min.js +2 -2
- package/dist/x/last.min.mjs +2 -2
- package/dist/x/last.mjs +2 -2
- package/dist/x/maxBy.es.js +59 -6
- package/dist/x/maxBy.es.min.js +3 -3
- package/dist/x/maxBy.js +59 -6
- package/dist/x/maxBy.min.js +3 -3
- package/dist/x/maxBy.min.mjs +3 -3
- package/dist/x/maxBy.mjs +59 -6
- package/dist/x/noop.es.js +2 -2
- package/dist/x/noop.es.min.js +2 -2
- package/dist/x/noop.js +2 -2
- package/dist/x/noop.min.js +2 -2
- package/dist/x/noop.min.mjs +2 -2
- package/dist/x/noop.mjs +2 -2
- package/dist/x/pluck.es.js +32 -103
- package/dist/x/pluck.es.min.js +3 -3
- package/dist/x/pluck.js +32 -103
- package/dist/x/pluck.min.js +3 -3
- package/dist/x/pluck.min.mjs +3 -3
- package/dist/x/pluck.mjs +32 -103
- package/dist/x/prepend.es.js +2 -2
- package/dist/x/prepend.es.min.js +2 -2
- package/dist/x/prepend.js +2 -2
- package/dist/x/prepend.min.js +2 -2
- package/dist/x/prepend.min.mjs +2 -2
- package/dist/x/prepend.mjs +2 -2
- package/dist/x/size.es.js +2 -2
- package/dist/x/size.es.min.js +2 -2
- package/dist/x/size.js +2 -2
- package/dist/x/size.min.js +2 -2
- package/dist/x/size.min.mjs +2 -2
- package/dist/x/size.mjs +2 -2
- package/dist/x/trace.es.js +2 -9
- package/dist/x/trace.es.min.js +3 -3
- package/dist/x/trace.js +2 -9
- package/dist/x/trace.min.js +3 -3
- package/dist/x/trace.min.mjs +3 -3
- package/dist/x/trace.mjs +2 -9
- package/dist/x/unionWith.es.js +2 -2
- package/dist/x/unionWith.es.min.js +2 -2
- package/dist/x/unionWith.js +2 -2
- package/dist/x/unionWith.min.js +2 -2
- package/dist/x/unionWith.min.mjs +2 -2
- package/dist/x/unionWith.mjs +2 -2
- package/dist/x/uniq.es.js +2 -2
- package/dist/x/uniq.es.min.js +2 -2
- package/dist/x/uniq.js +2 -2
- package/dist/x/uniq.min.js +2 -2
- package/dist/x/uniq.min.mjs +2 -2
- package/dist/x/uniq.mjs +2 -2
- package/dist/x/unless.es.js +2 -2
- package/dist/x/unless.es.min.js +2 -2
- package/dist/x/unless.js +2 -2
- package/dist/x/unless.min.js +2 -2
- package/dist/x/unless.min.mjs +2 -2
- package/dist/x/unless.mjs +2 -2
- package/dist/x/values.es.js +2 -2
- package/dist/x/values.es.min.js +2 -2
- package/dist/x/values.js +2 -2
- package/dist/x/values.min.js +2 -2
- package/dist/x/values.min.mjs +2 -2
- package/dist/x/values.mjs +2 -2
- package/dist/x/when.es.js +2 -2
- package/dist/x/when.es.min.js +2 -2
- package/dist/x/when.js +2 -2
- package/dist/x/when.min.js +2 -2
- package/dist/x/when.min.mjs +2 -2
- package/dist/x/when.mjs +2 -2
- package/dist-test.js +9 -2025
- package/eq.js +21 -63
- package/es.js +746 -869
- package/every.js +94 -0
- package/filter.js +83 -125
- package/flatMap.js +105 -154
- package/forEach.js +82 -0
- package/get.js +44 -36
- package/global.js +6 -4
- package/gt.js +15 -58
- package/gte.js +14 -57
- package/index.js +746 -869
- package/lt.js +17 -60
- package/lte.js +14 -57
- package/map.js +153 -203
- package/memory-usage/reduce.js +2 -2
- package/not.js +30 -49
- package/omit.js +36 -13
- package/or.js +64 -41
- package/package.json +7 -7
- package/pick.js +52 -22
- package/pipe.js +27 -92
- package/reduce.js +114 -129
- package/rubico.js +10 -8
- package/set.js +60 -24
- package/some.js +105 -0
- package/switchCase.js +29 -25
- package/tap.js +15 -45
- package/test.js +847 -1083
- package/thunkify.js +11 -5
- package/transform.js +57 -81
- package/tryCatch.js +38 -32
- package/x/differenceWith.js +3 -3
- package/x/filterOut.test.js +6 -6
- package/x/flatten.js +1 -1
- package/x/flatten.test.js +0 -8
- package/x/index.js +0 -2
- package/x/pluck.js +18 -27
- package/x/pluck.test.js +3 -7
- package/x/timeInLoop.js +16 -25
- package/x/timeInLoop.test.js +8 -4
- package/any.js +0 -88
- package/dist/any.es.min.js +0 -7
- package/dist/any.min.js +0 -8
- package/dist/any.min.mjs +0 -7
- package/dist/fork.es.js +0 -159
- package/dist/fork.es.min.js +0 -7
- package/dist/fork.js +0 -166
- package/dist/fork.min.js +0 -8
- package/dist/fork.min.mjs +0 -7
- package/dist/fork.mjs +0 -159
- package/dist/x/forEach.es.min.js +0 -7
- package/dist/x/forEach.min.js +0 -8
- package/dist/x/forEach.min.mjs +0 -7
- package/fork.js +0 -91
- package/x/forEach.js +0 -93
- package/x/forEach.test.js +0 -218
- /package/{benchmarks → archive/benchmarks-v1.9.7}/any.js +0 -0
- /package/{x/forEach.benchmark.js → archive/benchmarks-v1.9.7/forEach.js} +0 -0
- /package/{benchmarks → archive/benchmarks-v1.9.7}/fork.js +0 -0
- /package/{benchmarks → archive/benchmarks-v1.9.7}/integration.js +0 -0
- /package/{benchmarks → archive/benchmarks-v1.9.7}/misc.js +0 -0
package/all.js
CHANGED
|
@@ -1,78 +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
|
-
* Foldable<T> = Iterable<T>|AsyncIterable<T>
|
|
17
|
-
* |{ reduce: Reducer<T>=>any }|Object<T>
|
|
16
|
+
* all(...args, funcsArray Array<function>) -> result Promise|Array
|
|
18
17
|
*
|
|
19
|
-
*
|
|
20
|
-
* predicate T=>Promise|boolean,
|
|
21
|
-
* foldable Foldable<T>
|
|
18
|
+
* all(funcsArray Array<function>)(...args) -> result Promise|Array
|
|
22
19
|
*
|
|
23
|
-
* all(
|
|
20
|
+
* all(...args, funcsObject Object<function>) -> result Promise|Object
|
|
21
|
+
*
|
|
22
|
+
* all(funcsObject Object<function>)(...args) -> result Promise|Object
|
|
24
23
|
* ```
|
|
25
24
|
*
|
|
26
25
|
* @description
|
|
27
|
-
*
|
|
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.
|
|
28
27
|
*
|
|
29
28
|
* ```javascript [playground]
|
|
30
|
-
* 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']
|
|
39
|
+
*
|
|
40
|
+
* const createObjectOfGreetingsFor = all({
|
|
41
|
+
* hi: name => `Hi ${name}`,
|
|
42
|
+
* hey: name => `Hey ${name}`,
|
|
43
|
+
* hello: name => `Hello ${name}`,
|
|
44
|
+
* })
|
|
31
45
|
*
|
|
32
|
-
*
|
|
33
|
-
* all(isOdd)([1, 2, 3, 4, 5]),
|
|
34
|
-
* ) // false
|
|
46
|
+
* const objectOfGreetingsForJane = createObjectOfGreetingsFor('Jane')
|
|
35
47
|
*
|
|
36
|
-
* console.log(
|
|
37
|
-
*
|
|
38
|
-
* ) // true
|
|
48
|
+
* console.log(objectOfGreetingsForJane)
|
|
49
|
+
* // { hi: 'Hi Jane', hey: 'Hey Jane', hello: 'Hello Jane' }
|
|
39
50
|
* ```
|
|
40
51
|
*
|
|
41
|
-
*
|
|
52
|
+
* `all` can simultaneously compose objects and handle promises.
|
|
42
53
|
*
|
|
43
54
|
* ```javascript [playground]
|
|
44
|
-
* const
|
|
45
|
-
* yield 1; yield 2; yield 3; yield 4; yield 5
|
|
46
|
-
* }
|
|
55
|
+
* const identity = value => value
|
|
47
56
|
*
|
|
48
|
-
*
|
|
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
|
+
* ])
|
|
71
|
+
*
|
|
72
|
+
* getAndLogUserById('1') // Got user {"_id":1,"name":"George"} by id 1
|
|
49
73
|
* ```
|
|
50
74
|
*
|
|
51
75
|
* @execution concurrent
|
|
52
|
-
*
|
|
53
|
-
* @muxing
|
|
54
76
|
*/
|
|
55
|
-
const all = predicate => function allTruthy(value) {
|
|
56
|
-
if (isArray(value)) {
|
|
57
|
-
return arrayAll(value, predicate)
|
|
58
|
-
}
|
|
59
|
-
if (value == null) {
|
|
60
|
-
return predicate(value)
|
|
61
|
-
}
|
|
62
77
|
|
|
63
|
-
|
|
64
|
-
|
|
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, __)
|
|
65
84
|
}
|
|
66
|
-
|
|
67
|
-
|
|
85
|
+
|
|
86
|
+
if (areAnyValuesPromises(args)) {
|
|
87
|
+
return isArray(funcs)
|
|
88
|
+
? promiseAll(args).then(curry2(functionArrayAll, funcs, __))
|
|
89
|
+
: promiseAll(args).then(curry2(functionObjectAll, funcs, __))
|
|
68
90
|
}
|
|
69
|
-
|
|
70
|
-
|
|
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, __)
|
|
71
131
|
}
|
|
72
|
-
if (
|
|
73
|
-
return
|
|
132
|
+
if (areAnyValuesPromises(args)) {
|
|
133
|
+
return promiseAll(args).then(curry2(functionArrayAllSeries, funcs, __))
|
|
74
134
|
}
|
|
75
|
-
return
|
|
135
|
+
return functionArrayAllSeries(funcs, args)
|
|
76
136
|
}
|
|
77
137
|
|
|
78
138
|
module.exports = all
|
package/always.js
CHANGED
|
@@ -9,20 +9,14 @@ const always = require('./_internal/always')
|
|
|
9
9
|
* ```
|
|
10
10
|
*
|
|
11
11
|
* @description
|
|
12
|
-
*
|
|
12
|
+
* Creates a function from a value that always returns the provided value.
|
|
13
13
|
*
|
|
14
14
|
* ```javascript [playground]
|
|
15
15
|
* const always5 = always(5)
|
|
16
16
|
*
|
|
17
17
|
* console.log(always5()) // 5
|
|
18
|
-
*
|
|
19
|
-
* console.log(
|
|
20
|
-
* fork({
|
|
21
|
-
* a: always(1),
|
|
22
|
-
* b: always(2),
|
|
23
|
-
* c: always(3),
|
|
24
|
-
* })(),
|
|
25
|
-
* ) // { a: 1, b: 2, c: 3 }
|
|
18
|
+
* console.log(always5()) // 5
|
|
19
|
+
* console.log(always5()) // 5
|
|
26
20
|
* ```
|
|
27
21
|
*/
|
|
28
22
|
|
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,36 +67,67 @@ 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
|
*
|
|
69
98
|
* @synopsis
|
|
70
99
|
* ```coffeescript [specscript]
|
|
71
|
-
* and(
|
|
72
|
-
*
|
|
73
|
-
*
|
|
100
|
+
* and(values Array<boolean>) -> result boolean
|
|
101
|
+
*
|
|
102
|
+
* and(...args, predicatesOrValues Array<function|boolean>) -> Promise|boolean
|
|
103
|
+
*
|
|
104
|
+
* and(predicatesOrValues Array<function|boolean>)(...args) -> Promise|boolean
|
|
74
105
|
* ```
|
|
75
106
|
*
|
|
76
107
|
* @description
|
|
77
|
-
*
|
|
108
|
+
* Tests an array of boolean values, returning true if all boolean values are truthy.
|
|
78
109
|
*
|
|
79
110
|
* ```javascript [playground]
|
|
80
|
-
* const
|
|
81
|
-
*
|
|
82
|
-
* const
|
|
83
|
-
*
|
|
84
|
-
* const isLessThan3 = number => number < 3
|
|
111
|
+
* const oneIsLessThanThree = 1 < 3
|
|
112
|
+
* const twoIsGreaterThanOne = 2 > 1
|
|
113
|
+
* const threeIsEqualToThree = 3 === 3
|
|
85
114
|
*
|
|
86
115
|
* console.log(
|
|
87
|
-
* and([
|
|
116
|
+
* and([oneIsLessThanThree, twoIsGreaterThanOne, threeIsEqualToThree]),
|
|
88
117
|
* ) // true
|
|
89
118
|
* ```
|
|
90
119
|
*
|
|
91
|
-
* `and`
|
|
120
|
+
* If any values in the array are synchronous or asynchronous predicate functions, `and` takes another argument to test concurrently against the predicate functions, returning true if all array values and resolved values from the predicates are truthy.
|
|
92
121
|
*
|
|
93
122
|
* ```javascript [playground]
|
|
123
|
+
* const isOdd = number => number % 2 == 1
|
|
124
|
+
*
|
|
125
|
+
* const isPositive = number => number > 0
|
|
126
|
+
*
|
|
127
|
+
* const isLessThan3 = number => number < 3
|
|
128
|
+
*
|
|
94
129
|
* console.log(
|
|
95
|
-
* and([
|
|
130
|
+
* and([isOdd, isPositive, isLessThan3])(1),
|
|
96
131
|
* ) // true
|
|
97
132
|
* ```
|
|
98
133
|
*
|
|
@@ -100,33 +135,22 @@ const asyncArePredicatesAllTruthy = async function (predicates, point, index) {
|
|
|
100
135
|
*
|
|
101
136
|
* @note ...args slows down here by an order of magnitude
|
|
102
137
|
*/
|
|
103
|
-
const and =
|
|
104
|
-
|
|
105
|
-
|
|
138
|
+
const and = function (...args) {
|
|
139
|
+
const predicatesOrValues = args.pop()
|
|
140
|
+
if (areAllValuesNonfunctions(predicatesOrValues)) {
|
|
141
|
+
return areAllValuesTruthy(predicatesOrValues, -1)
|
|
106
142
|
}
|
|
107
|
-
return function arePredicatesAllTruthy(point) {
|
|
108
|
-
const length = predicates.length
|
|
109
|
-
let index = -1
|
|
110
143
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (typeof predicate == 'function') {
|
|
114
|
-
predicate = predicate(point)
|
|
115
|
-
}
|
|
116
|
-
if (isPromise(predicate)) {
|
|
117
|
-
return predicate.then(curry3(
|
|
118
|
-
thunkConditional,
|
|
119
|
-
__,
|
|
120
|
-
thunkify3(asyncArePredicatesAllTruthy, predicates, point, index),
|
|
121
|
-
always(false),
|
|
122
|
-
))
|
|
123
|
-
}
|
|
124
|
-
if (!predicate) {
|
|
125
|
-
return false
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return true
|
|
144
|
+
if (args.length == 0) {
|
|
145
|
+
return curryArgs2(areAllPredicatesTruthy, __, predicatesOrValues)
|
|
129
146
|
}
|
|
147
|
+
|
|
148
|
+
if (areAnyValuesPromises(args)) {
|
|
149
|
+
return promiseAll(args)
|
|
150
|
+
.then(curry2(areAllPredicatesTruthy, __, predicatesOrValues))
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return areAllPredicatesTruthy(args, predicatesOrValues)
|
|
130
154
|
}
|
|
131
155
|
|
|
132
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
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const funcCall = require('./funcCall')
|
|
2
|
+
const thunkify4 = require('./thunkify4')
|
|
3
|
+
const __ = require('./placeholder')
|
|
4
|
+
const curry2 = require('./curry2')
|
|
5
|
+
const curry3 = require('./curry3')
|
|
6
|
+
const curry4 = require('./curry4')
|
|
7
|
+
const isPromise = require('./isPromise')
|
|
8
|
+
const promiseAll = require('./promiseAll')
|
|
9
|
+
const _Promise = require('./_Promise')
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @name arrayMap
|
|
13
|
+
*
|
|
14
|
+
* @synopsis
|
|
15
|
+
* ```coffeescript [specscript]
|
|
16
|
+
* arrayMap(
|
|
17
|
+
* array Array,
|
|
18
|
+
* mapper (item any, index number, array Array)=>Promise|any,
|
|
19
|
+
* ) -> Promise|Array
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @description
|
|
23
|
+
* Apply a mapper to each item of an array, returning an array. Mapper may be asynchronous.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const arrayMapHandlePromise = function (
|
|
27
|
+
result, promise, index, promiseCounts, _promise
|
|
28
|
+
) {
|
|
29
|
+
promiseCounts.pending += 1
|
|
30
|
+
promise.then(value => {
|
|
31
|
+
result[index] = value
|
|
32
|
+
promiseCounts.resolved += 1
|
|
33
|
+
if (promiseCounts.resolved == promiseCounts.pending) {
|
|
34
|
+
_promise._fulfill(result)
|
|
35
|
+
}
|
|
36
|
+
}, error => {
|
|
37
|
+
_promise.reject(error)
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const arrayMap2 = function (array, mapper) {
|
|
42
|
+
const length = array.length
|
|
43
|
+
const result = Array(length)
|
|
44
|
+
const promiseCounts = { pending: 0, resolved: 0 }
|
|
45
|
+
|
|
46
|
+
let index = -1
|
|
47
|
+
let _promise = new _Promise()
|
|
48
|
+
|
|
49
|
+
while (++index < length) {
|
|
50
|
+
const ret = mapper(array[index], index, array)
|
|
51
|
+
if (isPromise(ret)) {
|
|
52
|
+
arrayMapHandlePromise(result, ret, index, promiseCounts, _promise)
|
|
53
|
+
} else {
|
|
54
|
+
result[index] = ret
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (promiseCounts.pending == 0) {
|
|
59
|
+
return result
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return _promise
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (process.argv[1] == __filename) {
|
|
66
|
+
const timeInLoopAsync = require('./timeInLoopAsync')
|
|
67
|
+
|
|
68
|
+
timeInLoopAsync('arrayMap2', 1e6, async () => {
|
|
69
|
+
await arrayMap2([1, 2, 3, 4, 5], async value => value + 1)
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module.exports = arrayMap2
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const timeInLoop = require('../x/timeInLoop')
|
|
2
|
+
const rubico = require('..')
|
|
3
|
+
const _ = require('lodash')
|
|
4
|
+
const R = require('ramda')
|
|
5
|
+
|
|
6
|
+
const isOdd = number => number % 2 == 1
|
|
7
|
+
|
|
8
|
+
const isEven = number => number % 2 == 0
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @name allRace
|
|
12
|
+
*
|
|
13
|
+
* @benchmark
|
|
14
|
+
* _.every: 1e+6: 20.984ms
|
|
15
|
+
* R.all: 1e+6: 368.142ms
|
|
16
|
+
* rubico.all: 1e+6: 24.772ms
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* promise check
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
{
|
|
23
|
+
const evenNumbers = [2, 4, 6, 8, 10]
|
|
24
|
+
|
|
25
|
+
// console.log(_.every(evenNumbers, isEven))
|
|
26
|
+
// console.log(R.all(isEven)(evenNumbers))
|
|
27
|
+
// console.log(rubico.all(isEven)(evenNumbers))
|
|
28
|
+
|
|
29
|
+
// timeInLoop('_.every', 1e6, () => _.every(evenNumbers, isEven))
|
|
30
|
+
|
|
31
|
+
// timeInLoop('R.all', 1e6, () => R.all(isEven)(evenNumbers))
|
|
32
|
+
|
|
33
|
+
// timeInLoop('rubico.all', 1e6, () => rubico.all(isEven)(evenNumbers))
|
|
34
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const timeInLoop = require('../x/timeInLoop')
|
|
2
|
+
const rubico = require('..')
|
|
3
|
+
|
|
4
|
+
const { and } = rubico
|
|
5
|
+
|
|
6
|
+
const isOdd = x => x % 2 == 1
|
|
7
|
+
|
|
8
|
+
const threeOddChecks = number => isOdd(number) && isOdd(number) && isOdd(number)
|
|
9
|
+
|
|
10
|
+
const threeIsOdd = and([isOdd, isOdd, isOdd])
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @name or
|
|
14
|
+
*
|
|
15
|
+
* @benchmark
|
|
16
|
+
* isOdd(value) && isOdd(value) && isOdd(value): 1e+6: 6.664ms
|
|
17
|
+
* and([isOdd, isOdd, isOdd]): 1e+6: 16.842ms
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
{
|
|
21
|
+
// timeInLoop('isOdd(value) && isOdd(value) && isOdd(value)', 1e6, () => threeOddChecks(1))
|
|
22
|
+
|
|
23
|
+
// timeInLoop('and([isOdd, isOdd, isOdd])', 1e6, () => threeIsOdd(1))
|
|
24
|
+
}
|