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
|
@@ -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) {
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
const timeInLoop = require('./timeInLoop')
|
|
2
|
+
const timeInLoopAsync = require('./timeInLoopAsync')
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @name formatRunOutput
|
|
6
|
+
*
|
|
7
|
+
* @synopsis
|
|
8
|
+
* ```coffeescript [specscript]
|
|
9
|
+
* formatRunOutput(
|
|
10
|
+
* description string,
|
|
11
|
+
* loopCount number,
|
|
12
|
+
* duration number
|
|
13
|
+
* ) -> formatted string
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
const formatRunOutput = function (description, loopCount, duration) {
|
|
17
|
+
const formattedDuration = duration < 1e3
|
|
18
|
+
? `${duration.toFixed(3)}ms`
|
|
19
|
+
: `${(duration / 1e3).toFixed(3)}s`
|
|
20
|
+
return `
|
|
21
|
+
${description}: ${loopCount.toExponential()}: ${formattedDuration}
|
|
22
|
+
`.trim()
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @name TimeInLoopSuite
|
|
27
|
+
*
|
|
28
|
+
* @synopsis
|
|
29
|
+
* ```coffeescript [specscript]
|
|
30
|
+
* new TimeInLoopSuite(options? {
|
|
31
|
+
* loopCount?: number,
|
|
32
|
+
* runs?: number,
|
|
33
|
+
* async?: boolean,
|
|
34
|
+
* }) -> TimeInLoopSuite
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
const TimeInLoopSuite = function (options = {}) {
|
|
38
|
+
this.loopCount = options.loopCount ?? 1e6
|
|
39
|
+
this.runs = options.runs ?? 5
|
|
40
|
+
this.isAsync = options.async ?? false
|
|
41
|
+
this.benchmarkCases = []
|
|
42
|
+
this.handlerMap = new Map()
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @name TimeInLoopSuite.prototype.emit
|
|
48
|
+
*
|
|
49
|
+
* @synopsis
|
|
50
|
+
* ```coffeescript [specscript]
|
|
51
|
+
* new TimeInLoopSuite(...).emit(eventName string, event Object) -> ()
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
TimeInLoopSuite.prototype.emit = function (eventName, event) {
|
|
55
|
+
const handlerMap = this.handlerMap
|
|
56
|
+
if (handlerMap.has(eventName)) {
|
|
57
|
+
handlerMap.get(eventName).forEach(handler => handler(event))
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @name TimeInLoopSuite.prototype.on
|
|
63
|
+
*
|
|
64
|
+
* @synopsis
|
|
65
|
+
* ```coffeescript [specscript]
|
|
66
|
+
* new TimeInLoopSuite(...).on(eventName string, handler function) -> ()
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
TimeInLoopSuite.prototype.on = function (eventName, handler) {
|
|
70
|
+
const handlerMap = this.handlerMap
|
|
71
|
+
if (handlerMap.has(eventName)) {
|
|
72
|
+
handlerMap.get(eventName).add(handler)
|
|
73
|
+
} else {
|
|
74
|
+
handlerMap.set(eventName, new Set([handler]))
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @name TimeInLoopSuite.prototype.add
|
|
80
|
+
*
|
|
81
|
+
* @synopsis
|
|
82
|
+
* ```coffeescript [specscript]
|
|
83
|
+
* new TimeInLoopSuite(...).add(description string, func function) -> ()
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
TimeInLoopSuite.prototype.add = function (description, func) {
|
|
87
|
+
const { loopCount, isAsync } = this
|
|
88
|
+
this.benchmarkCases.push({
|
|
89
|
+
description,
|
|
90
|
+
loopCount,
|
|
91
|
+
benchmark: isAsync
|
|
92
|
+
? () => timeInLoopAsync(description, loopCount, func, { silent: true })
|
|
93
|
+
: () => timeInLoop(description, loopCount, func, { silent: true }),
|
|
94
|
+
})
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @name TimeInLoopSuite.prototype.run
|
|
99
|
+
*
|
|
100
|
+
* @synopsis
|
|
101
|
+
* ```coffeescript [specscript]
|
|
102
|
+
* new TimeInLoopSuite(...).run() -> Promise<>
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
TimeInLoopSuite.prototype.run = async function () {
|
|
106
|
+
const caseBestRuns = []
|
|
107
|
+
for (const { description, loopCount, benchmark } of this.benchmarkCases) {
|
|
108
|
+
const durations = []
|
|
109
|
+
let runCount = 0
|
|
110
|
+
while (runCount < this.runs) {
|
|
111
|
+
const { duration } = await benchmark()
|
|
112
|
+
durations.push(duration)
|
|
113
|
+
runCount += 1
|
|
114
|
+
this.emit('run', { description, duration, loopCount })
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const caseBestDuration = Math.min(...durations)
|
|
118
|
+
|
|
119
|
+
const caseBestRun = {
|
|
120
|
+
description,
|
|
121
|
+
duration: caseBestDuration,
|
|
122
|
+
loopCount,
|
|
123
|
+
output: formatRunOutput(description, loopCount, caseBestDuration),
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
caseBestRuns.push(caseBestRun)
|
|
127
|
+
|
|
128
|
+
this.emit('caseBestRun', caseBestRun)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const suiteBestRun = caseBestRuns.reduce(
|
|
132
|
+
(suiteBest, run) => run.duration < suiteBest.duration ? run : suiteBest
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
this.emit('suiteBestRun', suiteBestRun)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
module.exports = TimeInLoopSuite
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const isPromise = require('./isPromise')
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @name areAnyValuesPromises
|
|
5
|
+
*
|
|
6
|
+
* @synopsis
|
|
7
|
+
* ```coffeescript [specscript]
|
|
8
|
+
* areAnyValuesPromises(values Array) -> boolean
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
const areAnyValuesPromises = function (values) {
|
|
12
|
+
const length = values.length
|
|
13
|
+
let index = -1
|
|
14
|
+
while (++index < length) {
|
|
15
|
+
const value = values[index]
|
|
16
|
+
if (isPromise(value)) {
|
|
17
|
+
return true
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return false
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
module.exports = areAnyValuesPromises
|
|
@@ -5,14 +5,14 @@ const promiseAll = require('./promiseAll')
|
|
|
5
5
|
const callPropUnary = require('./callPropUnary')
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* @name
|
|
8
|
+
* @name arrayEvery
|
|
9
9
|
*
|
|
10
10
|
* @synopsis
|
|
11
11
|
* ```coffeescript [specscript]
|
|
12
|
-
*
|
|
12
|
+
* arrayEvery(array Array, predicate ...any=>boolean) -> boolean
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
|
-
const
|
|
15
|
+
const arrayEvery = function (array, predicate) {
|
|
16
16
|
const arrayLength = array.length,
|
|
17
17
|
promises = []
|
|
18
18
|
let index = -1
|
|
@@ -29,4 +29,4 @@ const arrayAll = function (array, predicate) {
|
|
|
29
29
|
: promiseAll(promises).then(curry3(callPropUnary, __, 'every', Boolean))
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
module.exports =
|
|
32
|
+
module.exports = arrayEvery
|
package/_internal/arrayExtend.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
const
|
|
1
|
+
const isArray = require('./isArray')
|
|
2
|
+
const isBinary = require('./isBinary')
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* @name _arrayExtend
|
|
@@ -30,7 +31,7 @@ const _arrayExtend = function (array, values) {
|
|
|
30
31
|
* Extend an array with values.
|
|
31
32
|
*/
|
|
32
33
|
const arrayExtend = function (array, values) {
|
|
33
|
-
if (
|
|
34
|
+
if (isArray(values) || isBinary(values)) {
|
|
34
35
|
return _arrayExtend(array, values)
|
|
35
36
|
}
|
|
36
37
|
array.push(values)
|
package/_internal/arrayFilter.js
CHANGED
|
@@ -26,12 +26,11 @@ const arrayFilter = function (array, predicate) {
|
|
|
26
26
|
resultIndex = -1
|
|
27
27
|
while (++index < arrayLength) {
|
|
28
28
|
const item = array[index],
|
|
29
|
-
shouldIncludeItem = predicate(item)
|
|
29
|
+
shouldIncludeItem = predicate(item, index, array)
|
|
30
30
|
if (isPromise(shouldIncludeItem)) {
|
|
31
31
|
return promiseAll(
|
|
32
|
-
arrayExtendMap(
|
|
33
|
-
|
|
34
|
-
curry4(arrayFilterByConditions, array, result, index - 1, __))
|
|
32
|
+
arrayExtendMap([shouldIncludeItem], array, predicate, index)
|
|
33
|
+
).then(curry4(arrayFilterByConditions, array, result, index - 1, __))
|
|
35
34
|
}
|
|
36
35
|
if (shouldIncludeItem) {
|
|
37
36
|
result[++resultIndex] = item
|
|
@@ -3,11 +3,11 @@ const isPromise = require('./isPromise')
|
|
|
3
3
|
const promiseRace = require('./promiseRace')
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @name
|
|
6
|
+
* @name asyncArraySome
|
|
7
7
|
*
|
|
8
8
|
* @synopsis
|
|
9
9
|
* ```coffeescript [specscript]
|
|
10
|
-
*
|
|
10
|
+
* asyncArraySome(
|
|
11
11
|
* array Array,
|
|
12
12
|
* predicate any=>Promise|boolean,
|
|
13
13
|
* index number,
|
|
@@ -15,7 +15,7 @@ const promiseRace = require('./promiseRace')
|
|
|
15
15
|
* ) -> boolean
|
|
16
16
|
* ```
|
|
17
17
|
*/
|
|
18
|
-
const
|
|
18
|
+
const asyncArraySome = async function (
|
|
19
19
|
array, predicate, index, promisesInFlight,
|
|
20
20
|
) {
|
|
21
21
|
const length = array.length
|
|
@@ -39,23 +39,23 @@ const asyncArrayAny = async function (
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
|
-
* @name
|
|
42
|
+
* @name arraySome
|
|
43
43
|
*
|
|
44
44
|
* @synopsis
|
|
45
45
|
* ```coffeescript [specscript]
|
|
46
|
-
*
|
|
46
|
+
* arraySome(
|
|
47
47
|
* array Array,
|
|
48
48
|
* predicate any=>Promise|boolean,
|
|
49
49
|
* ) -> boolean
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
|
-
const
|
|
52
|
+
const arraySome = function (array, predicate) {
|
|
53
53
|
const length = array.length
|
|
54
54
|
let index = -1
|
|
55
55
|
while (++index < length) {
|
|
56
56
|
const predication = predicate(array[index])
|
|
57
57
|
if (isPromise(predication)) {
|
|
58
|
-
return
|
|
58
|
+
return asyncArraySome(
|
|
59
59
|
array, predicate, index, new Set([SelfReferencingPromise(predication)]))
|
|
60
60
|
}
|
|
61
61
|
if (predication) {
|
|
@@ -65,4 +65,4 @@ const arrayAny = function (array, predicate) {
|
|
|
65
65
|
return false
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
module.exports =
|
|
68
|
+
module.exports = arraySome
|
|
@@ -3,7 +3,7 @@ const isPromise = require('./isPromise')
|
|
|
3
3
|
const promiseRace = require('./promiseRace')
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @name
|
|
6
|
+
* @name asyncIteratorEvery
|
|
7
7
|
*
|
|
8
8
|
* @synopsis
|
|
9
9
|
* var T any,
|
|
@@ -12,11 +12,11 @@ const promiseRace = require('./promiseRace')
|
|
|
12
12
|
* promisesInFlight Set<Promise<[T, Promise]>>,
|
|
13
13
|
* maxConcurrency number
|
|
14
14
|
*
|
|
15
|
-
*
|
|
15
|
+
* asyncIteratorEvery(
|
|
16
16
|
* asyncIterator, predicate, promisesInFlight, maxConcurrency,
|
|
17
17
|
* ) -> Promise<boolean>
|
|
18
18
|
*/
|
|
19
|
-
const
|
|
19
|
+
const asyncIteratorEvery = async function (
|
|
20
20
|
asyncIterator, predicate, promisesInFlight, maxConcurrency = 20,
|
|
21
21
|
) {
|
|
22
22
|
let iteration = await asyncIterator.next()
|
|
@@ -47,4 +47,4 @@ const asyncIteratorAll = async function (
|
|
|
47
47
|
return true
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
module.exports =
|
|
50
|
+
module.exports = asyncIteratorEvery
|
|
@@ -3,11 +3,11 @@ const isPromise = require('./isPromise')
|
|
|
3
3
|
const promiseRace = require('./promiseRace')
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @name
|
|
6
|
+
* @name asyncIteratorSome
|
|
7
7
|
*
|
|
8
8
|
* @synopsis
|
|
9
9
|
* ```coffeescript [specscript]
|
|
10
|
-
*
|
|
10
|
+
* asyncIteratorSome(
|
|
11
11
|
* iterator Iterator|AsyncIterator,
|
|
12
12
|
* predicate any=>Promise|boolean,
|
|
13
13
|
* index number,
|
|
@@ -16,7 +16,7 @@ const promiseRace = require('./promiseRace')
|
|
|
16
16
|
* ) -> boolean
|
|
17
17
|
* ```
|
|
18
18
|
*/
|
|
19
|
-
const
|
|
19
|
+
const asyncIteratorSome = async function (
|
|
20
20
|
iterator, predicate, promisesInFlight, maxConcurrency = 20,
|
|
21
21
|
) {
|
|
22
22
|
let iteration = iterator.next()
|
|
@@ -53,4 +53,4 @@ const asyncIteratorAny = async function (
|
|
|
53
53
|
return false
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
module.exports =
|
|
56
|
+
module.exports = asyncIteratorSome
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const assert = require('assert')
|
|
2
|
+
const curry4 = require('./curry4')
|
|
3
|
+
const __ = require('./placeholder')
|
|
4
|
+
|
|
5
|
+
describe('curry4', () => {
|
|
6
|
+
const func = function (a, b, c, d) {
|
|
7
|
+
return [a, b, c, d]
|
|
8
|
+
}
|
|
9
|
+
it('resolves arguments in __ position for arg0', async () => {
|
|
10
|
+
const curried = curry4(func, __, 1, 2, 3)
|
|
11
|
+
assert.deepEqual(curried(4), [4, 1, 2, 3])
|
|
12
|
+
})
|
|
13
|
+
it('resolves arguments in __ position for arg1', async () => {
|
|
14
|
+
const curried = curry4(func, 1, __, 2, 3)
|
|
15
|
+
assert.deepEqual(curried(4), [1, 4, 2, 3])
|
|
16
|
+
})
|
|
17
|
+
it('resolves arguments in __ position for arg2', async () => {
|
|
18
|
+
const curried = curry4(func, 1, 2, __, 3)
|
|
19
|
+
assert.deepEqual(curried(4), [1, 2, 4, 3])
|
|
20
|
+
})
|
|
21
|
+
it('resolves arguments in __ position for arg3', async () => {
|
|
22
|
+
const curried = curry4(func, 1, 2, 3, __)
|
|
23
|
+
assert.deepEqual(curried(4), [1, 2, 3, 4])
|
|
24
|
+
})
|
|
25
|
+
})
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const assert = require('assert')
|
|
2
|
+
const curry5 = require('./curry5')
|
|
3
|
+
const __ = require('./placeholder')
|
|
4
|
+
|
|
5
|
+
describe('curry5', () => {
|
|
6
|
+
const func = function (a, b, c, d, e) {
|
|
7
|
+
return [a, b, c, d, e]
|
|
8
|
+
}
|
|
9
|
+
it('resolves arguments in __ position for arg0', async () => {
|
|
10
|
+
const curried = curry5(func, __, 1, 2, 3, 4)
|
|
11
|
+
assert.deepEqual(curried(5), [5, 1, 2, 3, 4])
|
|
12
|
+
})
|
|
13
|
+
it('resolves arguments in __ position for arg1', async () => {
|
|
14
|
+
const curried = curry5(func, 1, __, 2, 3, 4)
|
|
15
|
+
assert.deepEqual(curried(5), [1, 5, 2, 3, 4])
|
|
16
|
+
})
|
|
17
|
+
it('resolves arguments in __ position for arg2', async () => {
|
|
18
|
+
const curried = curry5(func, 1, 2, __, 3, 4)
|
|
19
|
+
assert.deepEqual(curried(5), [1, 2, 5, 3, 4])
|
|
20
|
+
})
|
|
21
|
+
it('resolves arguments in __ position for arg3', async () => {
|
|
22
|
+
const curried = curry5(func, 1, 2, 3, __, 4)
|
|
23
|
+
assert.deepEqual(curried(5), [1, 2, 3, 5, 4])
|
|
24
|
+
})
|
|
25
|
+
it('resolves arguments in __ position for arg4', async () => {
|
|
26
|
+
const curried = curry5(func, 1, 2, 3, 4, __)
|
|
27
|
+
assert.deepEqual(curried(5), [1, 2, 3, 4, 5])
|
|
28
|
+
})
|
|
29
|
+
})
|