rubico 2.0.1 → 2.2.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/README.md +10 -8
- package/Transducer.js +28 -0
- package/_internal/genericTransform.js +30 -28
- package/_internal/reducerTryCatch.js +55 -0
- package/dist/Transducer.es.js +28 -1
- package/dist/Transducer.es.min.js +2 -2
- package/dist/Transducer.js +28 -1
- package/dist/Transducer.min.js +2 -2
- package/dist/Transducer.mjs +28 -1
- package/dist/__.es.js +1 -1
- package/dist/__.es.min.js +1 -1
- package/dist/__.js +1 -1
- package/dist/__.min.js +1 -1
- package/dist/__.mjs +1 -1
- package/dist/all.es.js +1 -1
- package/dist/all.es.min.js +1 -1
- package/dist/all.js +1 -1
- package/dist/all.min.js +1 -1
- package/dist/all.mjs +1 -1
- package/dist/always.es.js +1 -1
- package/dist/always.es.min.js +1 -1
- package/dist/always.js +1 -1
- package/dist/always.min.js +1 -1
- package/dist/always.mjs +1 -1
- package/dist/and.es.js +1 -1
- package/dist/and.es.min.js +1 -1
- package/dist/and.js +1 -1
- package/dist/and.min.js +1 -1
- package/dist/and.mjs +1 -1
- package/dist/assign.es.js +1 -1
- package/dist/assign.es.min.js +1 -1
- package/dist/assign.js +1 -1
- package/dist/assign.min.js +1 -1
- package/dist/assign.mjs +1 -1
- package/dist/compose.es.js +1 -1
- package/dist/compose.es.min.js +1 -1
- package/dist/compose.js +1 -1
- package/dist/compose.min.js +1 -1
- package/dist/compose.mjs +1 -1
- package/dist/curry.es.js +1 -1
- package/dist/curry.es.min.js +1 -1
- package/dist/curry.js +1 -1
- package/dist/curry.min.js +1 -1
- package/dist/curry.mjs +1 -1
- package/dist/eq.es.js +1 -1
- package/dist/eq.es.min.js +1 -1
- package/dist/eq.js +1 -1
- package/dist/eq.min.js +1 -1
- package/dist/eq.mjs +1 -1
- package/dist/every.es.js +1 -1
- package/dist/every.es.min.js +1 -1
- package/dist/every.js +1 -1
- package/dist/every.min.js +1 -1
- package/dist/every.mjs +1 -1
- package/dist/filter.es.js +1 -1
- package/dist/filter.es.min.js +1 -1
- package/dist/filter.js +1 -1
- package/dist/filter.min.js +1 -1
- package/dist/filter.mjs +1 -1
- package/dist/flatMap.es.js +1 -1
- package/dist/flatMap.es.min.js +1 -1
- package/dist/flatMap.js +1 -1
- package/dist/flatMap.min.js +1 -1
- package/dist/flatMap.mjs +1 -1
- package/dist/forEach.es.js +1 -1
- package/dist/forEach.es.min.js +1 -1
- package/dist/forEach.js +1 -1
- package/dist/forEach.min.js +1 -1
- package/dist/forEach.mjs +1 -1
- package/dist/get.es.js +1 -1
- package/dist/get.es.min.js +1 -1
- package/dist/get.js +1 -1
- package/dist/get.min.js +1 -1
- package/dist/get.mjs +1 -1
- package/dist/gt.es.js +1 -1
- package/dist/gt.es.min.js +1 -1
- package/dist/gt.js +1 -1
- package/dist/gt.min.js +1 -1
- package/dist/gt.mjs +1 -1
- package/dist/gte.es.js +1 -1
- package/dist/gte.es.min.js +1 -1
- package/dist/gte.js +1 -1
- package/dist/gte.min.js +1 -1
- package/dist/gte.mjs +1 -1
- package/dist/lt.es.js +1 -1
- package/dist/lt.es.min.js +1 -1
- package/dist/lt.js +1 -1
- package/dist/lt.min.js +1 -1
- package/dist/lt.mjs +1 -1
- package/dist/lte.es.js +1 -1
- package/dist/lte.es.min.js +1 -1
- package/dist/lte.js +1 -1
- package/dist/lte.min.js +1 -1
- package/dist/lte.mjs +1 -1
- package/dist/map.es.js +1 -1
- package/dist/map.es.min.js +1 -1
- package/dist/map.js +1 -1
- package/dist/map.min.js +1 -1
- package/dist/map.mjs +1 -1
- package/dist/not.es.js +1 -1
- package/dist/not.es.min.js +1 -1
- package/dist/not.js +1 -1
- package/dist/not.min.js +1 -1
- package/dist/not.mjs +1 -1
- package/dist/omit.es.js +1 -1
- package/dist/omit.es.min.js +1 -1
- package/dist/omit.js +1 -1
- package/dist/omit.min.js +1 -1
- package/dist/omit.mjs +1 -1
- package/dist/or.es.js +1 -1
- package/dist/or.es.min.js +1 -1
- package/dist/or.js +1 -1
- package/dist/or.min.js +1 -1
- package/dist/or.mjs +1 -1
- package/dist/pick.es.js +1 -1
- package/dist/pick.es.min.js +1 -1
- package/dist/pick.js +1 -1
- package/dist/pick.min.js +1 -1
- package/dist/pick.mjs +1 -1
- package/dist/pipe.es.js +1 -1
- package/dist/pipe.es.min.js +1 -1
- package/dist/pipe.js +1 -1
- package/dist/pipe.min.js +1 -1
- package/dist/pipe.mjs +1 -1
- package/dist/reduce.es.js +1 -1
- package/dist/reduce.es.min.js +1 -1
- package/dist/reduce.js +1 -1
- package/dist/reduce.min.js +1 -1
- package/dist/reduce.mjs +1 -1
- package/dist/rubico.es.js +57 -46
- package/dist/rubico.es.min.js +2 -2
- package/dist/rubico.global.js +57 -46
- package/dist/rubico.global.min.js +2 -2
- package/dist/rubico.js +57 -46
- package/dist/rubico.min.js +2 -2
- package/dist/rubico.mjs +57 -46
- package/dist/set.es.js +1 -1
- package/dist/set.es.min.js +1 -1
- package/dist/set.js +1 -1
- package/dist/set.min.js +1 -1
- package/dist/set.mjs +1 -1
- package/dist/some.es.js +1 -1
- package/dist/some.es.min.js +1 -1
- package/dist/some.js +1 -1
- package/dist/some.min.js +1 -1
- package/dist/some.mjs +1 -1
- package/dist/switchCase.es.js +1 -1
- package/dist/switchCase.es.min.js +1 -1
- package/dist/switchCase.js +1 -1
- package/dist/switchCase.min.js +1 -1
- package/dist/switchCase.mjs +1 -1
- package/dist/tap.es.js +32 -2
- package/dist/tap.es.min.js +2 -2
- package/dist/tap.js +32 -2
- package/dist/tap.min.js +2 -2
- package/dist/tap.mjs +32 -2
- package/dist/thunkify.es.js +1 -1
- package/dist/thunkify.es.min.js +1 -1
- package/dist/thunkify.js +1 -1
- package/dist/thunkify.min.js +1 -1
- package/dist/thunkify.mjs +1 -1
- package/dist/transform.es.js +26 -24
- package/dist/transform.es.min.js +2 -2
- package/dist/transform.js +26 -24
- package/dist/transform.min.js +2 -2
- package/dist/transform.mjs +26 -24
- package/dist/tryCatch.es.js +1 -1
- package/dist/tryCatch.es.min.js +1 -1
- package/dist/tryCatch.js +1 -1
- package/dist/tryCatch.min.js +1 -1
- package/dist/tryCatch.mjs +1 -1
- package/dist/x/append.es.js +1 -1
- package/dist/x/append.es.min.js +1 -1
- package/dist/x/append.js +1 -1
- package/dist/x/append.min.js +1 -1
- package/dist/x/append.mjs +1 -1
- package/dist/x/callProp.es.js +1 -1
- package/dist/x/callProp.es.min.js +1 -1
- package/dist/x/callProp.js +1 -1
- package/dist/x/callProp.min.js +1 -1
- package/dist/x/callProp.mjs +1 -1
- package/dist/x/defaultsDeep.es.js +1 -1
- package/dist/x/defaultsDeep.es.min.js +1 -1
- package/dist/x/defaultsDeep.js +1 -1
- package/dist/x/defaultsDeep.min.js +1 -1
- package/dist/x/defaultsDeep.mjs +1 -1
- package/dist/x/differenceWith.es.js +1 -1
- package/dist/x/differenceWith.es.min.js +1 -1
- package/dist/x/differenceWith.js +1 -1
- package/dist/x/differenceWith.min.js +1 -1
- package/dist/x/differenceWith.mjs +1 -1
- package/dist/x/filterOut.es.js +1 -1
- package/dist/x/filterOut.es.min.js +1 -1
- package/dist/x/filterOut.js +1 -1
- package/dist/x/filterOut.min.js +1 -1
- package/dist/x/filterOut.mjs +1 -1
- package/dist/x/find.es.js +1 -1
- package/dist/x/find.es.min.js +1 -1
- package/dist/x/find.js +1 -1
- package/dist/x/find.min.js +1 -1
- package/dist/x/find.mjs +1 -1
- package/dist/x/findIndex.es.js +1 -1
- package/dist/x/findIndex.es.min.js +1 -1
- package/dist/x/findIndex.js +1 -1
- package/dist/x/findIndex.min.js +1 -1
- package/dist/x/findIndex.mjs +1 -1
- package/dist/x/first.es.js +1 -1
- package/dist/x/first.es.min.js +1 -1
- package/dist/x/first.js +1 -1
- package/dist/x/first.min.js +1 -1
- package/dist/x/first.mjs +1 -1
- package/dist/x/flatten.es.js +1 -1
- package/dist/x/flatten.es.min.js +1 -1
- package/dist/x/flatten.js +1 -1
- package/dist/x/flatten.min.js +1 -1
- package/dist/x/flatten.mjs +1 -1
- package/dist/x/groupBy.es.js +1 -1
- package/dist/x/groupBy.es.min.js +1 -1
- package/dist/x/groupBy.js +1 -1
- package/dist/x/groupBy.min.js +1 -1
- package/dist/x/groupBy.mjs +1 -1
- package/dist/x/has.es.js +1 -1
- package/dist/x/has.es.min.js +1 -1
- package/dist/x/has.js +1 -1
- package/dist/x/has.min.js +1 -1
- package/dist/x/has.mjs +1 -1
- package/dist/x/identity.es.js +1 -1
- package/dist/x/identity.es.min.js +1 -1
- package/dist/x/identity.js +1 -1
- package/dist/x/identity.min.js +1 -1
- package/dist/x/identity.mjs +1 -1
- package/dist/x/includes.es.js +1 -1
- package/dist/x/includes.es.min.js +1 -1
- package/dist/x/includes.js +1 -1
- package/dist/x/includes.min.js +1 -1
- package/dist/x/includes.mjs +1 -1
- package/dist/x/isDeepEqual.es.js +1 -1
- package/dist/x/isDeepEqual.es.min.js +1 -1
- package/dist/x/isDeepEqual.js +1 -1
- package/dist/x/isDeepEqual.min.js +1 -1
- package/dist/x/isDeepEqual.mjs +1 -1
- package/dist/x/isEmpty.es.js +1 -1
- package/dist/x/isEmpty.es.min.js +1 -1
- package/dist/x/isEmpty.js +1 -1
- package/dist/x/isEmpty.min.js +1 -1
- package/dist/x/isEmpty.mjs +1 -1
- package/dist/x/isEqual.es.js +1 -1
- package/dist/x/isEqual.es.min.js +1 -1
- package/dist/x/isEqual.js +1 -1
- package/dist/x/isEqual.min.js +1 -1
- package/dist/x/isEqual.mjs +1 -1
- package/dist/x/isFunction.es.js +1 -1
- package/dist/x/isFunction.es.min.js +1 -1
- package/dist/x/isFunction.js +1 -1
- package/dist/x/isFunction.min.js +1 -1
- package/dist/x/isFunction.mjs +1 -1
- package/dist/x/isIn.es.js +1 -1
- package/dist/x/isIn.es.min.js +1 -1
- package/dist/x/isIn.js +1 -1
- package/dist/x/isIn.min.js +1 -1
- package/dist/x/isIn.mjs +1 -1
- package/dist/x/isObject.es.js +1 -1
- package/dist/x/isObject.es.min.js +1 -1
- package/dist/x/isObject.js +1 -1
- package/dist/x/isObject.min.js +1 -1
- package/dist/x/isObject.mjs +1 -1
- package/dist/x/isString.es.js +1 -1
- package/dist/x/isString.es.min.js +1 -1
- package/dist/x/isString.js +1 -1
- package/dist/x/isString.min.js +1 -1
- package/dist/x/isString.mjs +1 -1
- package/dist/x/keys.es.js +1 -1
- package/dist/x/keys.es.min.js +1 -1
- package/dist/x/keys.js +1 -1
- package/dist/x/keys.min.js +1 -1
- package/dist/x/keys.mjs +1 -1
- package/dist/x/last.es.js +1 -1
- package/dist/x/last.es.min.js +1 -1
- package/dist/x/last.js +1 -1
- package/dist/x/last.min.js +1 -1
- package/dist/x/last.mjs +1 -1
- package/dist/x/maxBy.es.js +1 -1
- package/dist/x/maxBy.es.min.js +1 -1
- package/dist/x/maxBy.js +1 -1
- package/dist/x/maxBy.min.js +1 -1
- package/dist/x/maxBy.mjs +1 -1
- package/dist/x/noop.es.js +1 -1
- package/dist/x/noop.es.min.js +1 -1
- package/dist/x/noop.js +1 -1
- package/dist/x/noop.min.js +1 -1
- package/dist/x/noop.mjs +1 -1
- package/dist/x/pluck.es.js +1 -1
- package/dist/x/pluck.es.min.js +1 -1
- package/dist/x/pluck.js +1 -1
- package/dist/x/pluck.min.js +1 -1
- package/dist/x/pluck.mjs +1 -1
- package/dist/x/prepend.es.js +1 -1
- package/dist/x/prepend.es.min.js +1 -1
- package/dist/x/prepend.js +1 -1
- package/dist/x/prepend.min.js +1 -1
- package/dist/x/prepend.mjs +1 -1
- package/dist/x/size.es.js +1 -1
- package/dist/x/size.es.min.js +1 -1
- package/dist/x/size.js +1 -1
- package/dist/x/size.min.js +1 -1
- package/dist/x/size.mjs +1 -1
- package/dist/x/trace.es.js +32 -2
- package/dist/x/trace.es.min.js +2 -2
- package/dist/x/trace.js +32 -2
- package/dist/x/trace.min.js +2 -2
- package/dist/x/trace.mjs +32 -2
- package/dist/x/unionWith.es.js +1 -1
- package/dist/x/unionWith.es.min.js +1 -1
- package/dist/x/unionWith.js +1 -1
- package/dist/x/unionWith.min.js +1 -1
- package/dist/x/unionWith.mjs +1 -1
- package/dist/x/uniq.es.js +1 -1
- package/dist/x/uniq.es.min.js +1 -1
- package/dist/x/uniq.js +1 -1
- package/dist/x/uniq.min.js +1 -1
- package/dist/x/uniq.mjs +1 -1
- package/dist/x/unless.es.js +1 -1
- package/dist/x/unless.es.min.js +1 -1
- package/dist/x/unless.js +1 -1
- package/dist/x/unless.min.js +1 -1
- package/dist/x/unless.mjs +1 -1
- package/dist/x/values.es.js +1 -1
- package/dist/x/values.es.min.js +1 -1
- package/dist/x/values.js +1 -1
- package/dist/x/values.min.js +1 -1
- package/dist/x/values.mjs +1 -1
- package/dist/x/when.es.js +1 -1
- package/dist/x/when.es.min.js +1 -1
- package/dist/x/when.js +1 -1
- package/dist/x/when.min.js +1 -1
- package/dist/x/when.mjs +1 -1
- package/es.js +57 -46
- package/index.js +57 -46
- package/package.json +43 -2
- package/tap.js +15 -4
- package/.eslintignore +0 -5
- package/.eslintrc.js +0 -330
- package/.github/workflows/nodejs.yml +0 -27
- package/.vscode/launch.json +0 -25
- package/AggregateReducer.test.js +0 -82
- package/CHANGELOG.md +0 -310
- package/CNAME +0 -1
- package/CODE_OF_CONDUCT.md +0 -128
- package/CONTRIBUTING.md +0 -4
- package/Transducer.test.js +0 -117
- package/_config.yml +0 -1
- package/_internal/improvedGenericTransform.js +0 -93
- package/archive/FlatMappingIterator-2020-09-28.js +0 -68
- package/archive/_Promise-2023-05-29.js +0 -93
- package/archive/arrayMap2-2023-05-29.js +0 -73
- package/archive/benchmarks-v1.9.7/all.js +0 -34
- package/archive/benchmarks-v1.9.7/and.js +0 -24
- package/archive/benchmarks-v1.9.7/any.js +0 -32
- package/archive/benchmarks-v1.9.7/assign.js +0 -174
- package/archive/benchmarks-v1.9.7/curry.js +0 -55
- package/archive/benchmarks-v1.9.7/eq.js +0 -25
- package/archive/benchmarks-v1.9.7/filter.js +0 -1322
- package/archive/benchmarks-v1.9.7/flatMap.js +0 -48
- package/archive/benchmarks-v1.9.7/forEach.js +0 -33
- package/archive/benchmarks-v1.9.7/fork.js +0 -123
- package/archive/benchmarks-v1.9.7/get.js +0 -44
- package/archive/benchmarks-v1.9.7/gt.js +0 -25
- package/archive/benchmarks-v1.9.7/gte.js +0 -25
- package/archive/benchmarks-v1.9.7/integration.js +0 -88
- package/archive/benchmarks-v1.9.7/lt.js +0 -25
- package/archive/benchmarks-v1.9.7/lte.js +0 -25
- package/archive/benchmarks-v1.9.7/map.js +0 -892
- package/archive/benchmarks-v1.9.7/misc.js +0 -470
- package/archive/benchmarks-v1.9.7/omit.js +0 -28
- package/archive/benchmarks-v1.9.7/or.js +0 -51
- package/archive/benchmarks-v1.9.7/pick.js +0 -24
- package/archive/benchmarks-v1.9.7/pipe.js +0 -152
- package/archive/benchmarks-v1.9.7/reduce.js +0 -739
- package/archive/benchmarks-v1.9.7/switchCase.js +0 -256
- package/archive/benchmarks-v1.9.7/tap.js +0 -90
- package/archive/benchmarks-v1.9.7/transform.js +0 -218
- package/archive/benchmarks-v1.9.7/tryCatch.js +0 -108
- package/archive/curry.js +0 -13
- package/archive/examples-v1.6.11/browserModule.html +0 -31
- package/archive/examples-v1.6.11/browserScript.html +0 -32
- package/archive/examples-v1.6.11/coolTransformToConsole.js +0 -1
- package/archive/examples-v1.6.11/denoLargeGasMap.js +0 -85
- package/archive/examples-v1.6.11/denoServer.js +0 -9
- package/archive/examples-v1.6.11/denoServerWithMiddleware.js +0 -55
- package/archive/examples-v1.6.11/logTodosRange.js +0 -21
- package/archive/examples-v1.6.11/makeARequest.html +0 -46
- package/archive/examples-v1.6.11/nodeComplexTransformation.js +0 -106
- package/archive/examples-v1.6.11/nodeConditionallyExtractIDs.js +0 -50
- package/archive/examples-v1.6.11/nodeFloatingPoint.js +0 -55
- package/archive/examples-v1.6.11/nodeGetAllJiraBoards.js +0 -45
- package/archive/examples-v1.6.11/nodeGetSocketIOClientsTotalCount.js +0 -34
- package/archive/examples-v1.6.11/nodeKafkaConsumer.js +0 -63
- package/archive/examples-v1.6.11/nodeMakeMultipleRequests.js +0 -55
- package/archive/examples-v1.6.11/nodeOnRecordAddTask.js +0 -34
- package/archive/examples-v1.6.11/nodePostRequestWithAuth.js +0 -36
- package/archive/examples-v1.6.11/nodeSpeedbackMatchmakingAlgorithm.js +0 -96
- package/archive/examples-v1.6.11/nodeTireData.js +0 -36
- package/archive/examples-v1.6.11/nodeTripleMap.js +0 -85
- package/archive/examples-v1.6.11/squaredOdds.ts +0 -16
- package/archive/examples-v1.6.11/transducerMaxBuyer.js +0 -67
- package/archive/examples-v1.6.11/transformLogTodosRange.js +0 -31
- package/archive/examples-v1.6.11/transformStreamRandomInts.js +0 -19
- package/archive/genericReduceConcurrent.js +0 -277
- package/archive/index.v0.2.9.js +0 -1685
- package/archive/objectValuesGenerator.js +0 -13
- package/archive/test.v0.2.9.js +0 -2334
- package/bench +0 -65
- package/benchmark-output/v1.9.7 +0 -268
- package/benchmarks/all.async.js +0 -43
- package/benchmarks/all.js +0 -43
- package/benchmarks/always.js +0 -15
- package/benchmarks/and.async.js +0 -25
- package/benchmarks/and.js +0 -25
- package/benchmarks/assign.async.js +0 -27
- package/benchmarks/assign.js +0 -27
- package/benchmarks/curry.js +0 -35
- package/benchmarks/eq.async.js +0 -23
- package/benchmarks/eq.js +0 -23
- package/benchmarks/every.async.js +0 -19
- package/benchmarks/every.js +0 -19
- package/benchmarks/filter.async.js +0 -32
- package/benchmarks/filter.js +0 -38
- package/benchmarks/flatMap.async.js +0 -26
- package/benchmarks/flatMap.js +0 -38
- package/benchmarks/get.async.js +0 -19
- package/benchmarks/get.js +0 -39
- package/benchmarks/gt.async.js +0 -23
- package/benchmarks/gt.js +0 -23
- package/benchmarks/gte.async.js +0 -23
- package/benchmarks/gte.js +0 -23
- package/benchmarks/lt.async.js +0 -23
- package/benchmarks/lt.js +0 -23
- package/benchmarks/lte.async.js +0 -23
- package/benchmarks/lte.js +0 -23
- package/benchmarks/map.async.js +0 -43
- package/benchmarks/map.js +0 -40
- package/benchmarks/misc/Promise.js +0 -26
- package/benchmarks/misc/isPromise.js +0 -30
- package/benchmarks/misc/promiseAll.js +0 -36
- package/benchmarks/not.js +0 -23
- package/benchmarks/omit.js +0 -38
- package/benchmarks/or.async.js +0 -25
- package/benchmarks/or.js +0 -25
- package/benchmarks/pick.js +0 -38
- package/benchmarks/pipe.async.js +0 -47
- package/benchmarks/pipe.js +0 -47
- package/benchmarks/reduce.async.js +0 -32
- package/benchmarks/reduce.js +0 -38
- package/benchmarks/set.async.js +0 -19
- package/benchmarks/set.js +0 -41
- package/benchmarks/some.async.js +0 -19
- package/benchmarks/some.js +0 -19
- package/benchmarks/switchCase.async.js +0 -27
- package/benchmarks/switchCase.js +0 -55
- package/benchmarks/tap.js +0 -15
- package/benchmarks/thunkify.js +0 -15
- package/benchmarks/transform.async.js +0 -27
- package/benchmarks/transform.js +0 -40
- package/benchmarks/tryCatch.async.js +0 -25
- package/benchmarks/tryCatch.js +0 -32
- package/build +0 -472
- package/dist-test.js +0 -37
- package/examples/type-to-search-wiki/README.md +0 -19
- package/examples/type-to-search-wiki/package.json +0 -13
- package/examples/type-to-search-wiki/src/app.js +0 -46
- package/examples/type-to-search-wiki/src/index.html +0 -18
- package/import-test.html +0 -73
- package/memory-usage/reduce.js +0 -40
- package/monad/AsyncPool.js +0 -0
- package/monad/BrokenPromise.js +0 -63
- package/monad/BrokenPromise.test.js +0 -22
- package/monad/Cancellable.js +0 -84
- package/monad/Cancellable.memoryUsage.js +0 -60
- package/monad/Cancellable.test.js +0 -20
- package/monad/Function.js +0 -0
- package/monad/Instance.benchmark.js +0 -378
- package/monad/Instance.js +0 -351
- package/monad/Instance.test.js +0 -445
- package/monad/Mux.benchmark.js +0 -29
- package/monad/Mux.js +0 -589
- package/monad/Mux.test.js +0 -512
- package/monad/PossiblePromise.benchmark.js +0 -87
- package/monad/PossiblePromise.js +0 -144
- package/monad/PossiblePromise.test.js +0 -89
- package/monad/README.md +0 -75
- package/monad/Reducer.js +0 -0
- package/monad/Sequence.benchmark.js +0 -42
- package/monad/Sequence.js +0 -36
- package/monad/SpecScript.js +0 -0
- package/monad/Stack.js +0 -0
- package/monad/Struct.benchmark.js +0 -154
- package/monad/Struct.js +0 -249
- package/monad/Struct.test.js +0 -237
- package/rubico.js +0 -66
- package/test.js +0 -4242
- package/tmp.js +0 -1
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
const isPromise = require('./isPromise')
|
|
2
|
-
const isArray = require('./isArray')
|
|
3
|
-
const isBinary = require('./isBinary')
|
|
4
|
-
const callPropUnary = require('./callPropUnary')
|
|
5
|
-
const __ = require('./placeholder')
|
|
6
|
-
const curry2 = require('./curry2')
|
|
7
|
-
const curry3 = require('./curry3')
|
|
8
|
-
const always = require('./always')
|
|
9
|
-
const noop = require('./noop')
|
|
10
|
-
const add = require('./add')
|
|
11
|
-
const genericReduce = require('./genericReduce')
|
|
12
|
-
const objectAssign = require('./objectAssign')
|
|
13
|
-
const arrayExtend = require('./arrayExtend')
|
|
14
|
-
const binaryExtend = require('./binaryExtend')
|
|
15
|
-
const streamExtend = require('./streamExtend')
|
|
16
|
-
const setExtend = require('./setExtend')
|
|
17
|
-
const callConcat = require('./callConcat')
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @name identityTransform
|
|
21
|
-
*
|
|
22
|
-
* @synopsis
|
|
23
|
-
* ```coffeescript [specscript]
|
|
24
|
-
* Reducer = (any, any)=>Promise|any
|
|
25
|
-
*
|
|
26
|
-
* identityTransform<
|
|
27
|
-
* collection any,
|
|
28
|
-
* transducer Reducer=>Reducer,
|
|
29
|
-
* accum undefined|null,
|
|
30
|
-
* >(args, transducer, accum) -> Promise|accum
|
|
31
|
-
* ```
|
|
32
|
-
*
|
|
33
|
-
* @description
|
|
34
|
-
* Reduce a value, always returning the initial accum
|
|
35
|
-
*/
|
|
36
|
-
const identityTransform = function (collection, transducer, accum) {
|
|
37
|
-
const nil = genericReduce(collection, transducer(noop), null)
|
|
38
|
-
return isPromise(nil) ? nil.then(always(accum)) : accum
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @name genericTransform
|
|
43
|
-
*
|
|
44
|
-
* @synopsis
|
|
45
|
-
* ```coffeescript [specscript]
|
|
46
|
-
* Reducer = (any, any)=>Promise|any
|
|
47
|
-
* Semigroup = Array|string|Set|TypedArray
|
|
48
|
-
* |{ concat: function }|{ write: function }|Object
|
|
49
|
-
*
|
|
50
|
-
* genericTransform<
|
|
51
|
-
* collection any,
|
|
52
|
-
* transducer Reducer=>Reducer,
|
|
53
|
-
* accum Semigroup|any,
|
|
54
|
-
* >(collection, transducer, accum) -> accum
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
const genericTransform = function (collection, transducer, accum) {
|
|
58
|
-
if (isArray(accum)) {
|
|
59
|
-
return genericReduce(collection, transducer(arrayExtend), accum)
|
|
60
|
-
}
|
|
61
|
-
if (isBinary(accum)) {
|
|
62
|
-
const intermediateArray = genericReduce(collection, transducer(arrayExtend), [])
|
|
63
|
-
return isPromise(intermediateArray)
|
|
64
|
-
? intermediateArray.then(curry2(binaryExtend, accum, __))
|
|
65
|
-
: binaryExtend(accum, intermediateArray)
|
|
66
|
-
}
|
|
67
|
-
if (accum == null) {
|
|
68
|
-
return identityTransform(collection, transducer, accum)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const constructor = accum.constructor
|
|
72
|
-
if (typeof accum == 'string' || constructor == String) {
|
|
73
|
-
const result = genericReduce(collection, transducer(arrayExtend), [accum])
|
|
74
|
-
return isPromise(result)
|
|
75
|
-
? result.then(curry3(callPropUnary, __, 'join', ''))
|
|
76
|
-
: result.join('')
|
|
77
|
-
}
|
|
78
|
-
if (typeof accum.concat == 'function') {
|
|
79
|
-
return genericReduce(collection, transducer(callConcat), accum)
|
|
80
|
-
}
|
|
81
|
-
if (typeof accum.write == 'function') {
|
|
82
|
-
return genericReduce(collection, transducer(streamExtend), accum)
|
|
83
|
-
}
|
|
84
|
-
if (constructor == Set) {
|
|
85
|
-
return genericReduce(collection, transducer(setExtend), accum)
|
|
86
|
-
}
|
|
87
|
-
if (constructor == Object) {
|
|
88
|
-
return genericReduce(collection, transducer(objectAssign), accum)
|
|
89
|
-
}
|
|
90
|
-
return identityTransform(collection, transducer, accum)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
module.exports = genericTransform
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @name FlatMappingIterator
|
|
3
|
-
*
|
|
4
|
-
* @synopsis
|
|
5
|
-
* ```coffeescript [specscript]
|
|
6
|
-
* Stream<T> = { read: ()=>T, write: T=>() }
|
|
7
|
-
* Monad<T> = Array<T>|String<T>|Set<T>
|
|
8
|
-
* |TypedArray<T>|Stream<T>|Iterator<Promise|T>
|
|
9
|
-
* |{ chain: T=>Monad<T> }|{ flatMap: T=>Monad<T> }|Object<T>
|
|
10
|
-
* Reducer<T> = (any, T)=>Promise|any
|
|
11
|
-
* Foldable<T> = Iterable<T>|AsyncIterable<T>
|
|
12
|
-
* |{ reduce: Reducer<T>=>any }|Object<T>
|
|
13
|
-
*
|
|
14
|
-
* FlatMappingIterator<T>(
|
|
15
|
-
* iterator Iterator<Promise|T>
|
|
16
|
-
* flatMapper T=>Promise|Monad<T>|Foldable<T>|T,
|
|
17
|
-
* ) -> Iterator<Promise|T>
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
const FlatMappingIterator = function (iterator, flatMapper) {
|
|
21
|
-
const buffer = [], promises = [],
|
|
22
|
-
bufferPush = curry3(callPropUnary, buffer, 'push', __),
|
|
23
|
-
bufferPushReducer = funcConcatSync(getArg1, bufferPush),
|
|
24
|
-
flattenIntoBuffer = curry3(genericReduce, __, bufferPushReducer, null),
|
|
25
|
-
loadIntoBuffer = funcConcatSync(flattenIntoBuffer, tapSync(bufferLoading => {
|
|
26
|
-
if (isPromise(bufferLoading)) {
|
|
27
|
-
const promise = bufferLoading.then(() => promises.delete(promise))
|
|
28
|
-
promises.add(promise)
|
|
29
|
-
}
|
|
30
|
-
}))
|
|
31
|
-
let bufferIndex = Infinity
|
|
32
|
-
return {
|
|
33
|
-
[symbolAsyncIterator]() {
|
|
34
|
-
return this
|
|
35
|
-
},
|
|
36
|
-
[symbolIterator]() {
|
|
37
|
-
return this
|
|
38
|
-
},
|
|
39
|
-
|
|
40
|
-
_iterationStep(iteration) {
|
|
41
|
-
if (iteration.done) {
|
|
42
|
-
if (promises.size == 0) {
|
|
43
|
-
return iteration
|
|
44
|
-
}
|
|
45
|
-
return promiseRace(promises).then(this.next.bind(this))
|
|
46
|
-
}
|
|
47
|
-
const monad = flatMapper(iteration.value),
|
|
48
|
-
loadIntoBufferThenNext = funcConcatSync(
|
|
49
|
-
loadIntoBuffer, this.next.bind(this))
|
|
50
|
-
return isPromise(monad)
|
|
51
|
-
? monad.then(loadIntoBufferThenNext)
|
|
52
|
-
: loadIntoBufferThenNext(monad)
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
next() {
|
|
56
|
-
if (bufferIndex < buffer.length) {
|
|
57
|
-
const value = buffer[bufferIndex]
|
|
58
|
-
delete buffer[bufferIndex]
|
|
59
|
-
bufferIndex += 1
|
|
60
|
-
return { value, done: false }
|
|
61
|
-
}
|
|
62
|
-
const iteration = iterator.next()
|
|
63
|
-
return isPromise(iteration)
|
|
64
|
-
? iteration.then(this._iterationStep.bind(this))
|
|
65
|
-
: this._iterationStep(iteration)
|
|
66
|
-
},
|
|
67
|
-
}
|
|
68
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
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
|
|
@@ -1,73 +0,0 @@
|
|
|
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
|
|
@@ -1,34 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
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
|
-
/**
|
|
9
|
-
* @name anyRace
|
|
10
|
-
*
|
|
11
|
-
* @benchmark
|
|
12
|
-
* _.some: 1e+6: 22.635ms
|
|
13
|
-
* R.any: 1e+6: 374.329ms
|
|
14
|
-
* rubico.any: 1e+6: 26.815ms
|
|
15
|
-
*
|
|
16
|
-
* @remarks
|
|
17
|
-
* promise check
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
{
|
|
21
|
-
const evenNumbers = [2, 4, 6, 8, 10]
|
|
22
|
-
|
|
23
|
-
// console.log(_.some(evenNumbers, isOdd))
|
|
24
|
-
// console.log(R.any(isOdd)(evenNumbers))
|
|
25
|
-
// console.log(rubico.any(isOdd)(evenNumbers))
|
|
26
|
-
|
|
27
|
-
// timeInLoop('_.some', 1e6, () => _.some(evenNumbers, isOdd))
|
|
28
|
-
|
|
29
|
-
// timeInLoop('R.any', 1e6, () => R.any(isOdd)(evenNumbers))
|
|
30
|
-
|
|
31
|
-
// timeInLoop('rubico.any', 1e6, () => rubico.any(isOdd)(evenNumbers))
|
|
32
|
-
}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
const timeInLoop = require('../x/timeInLoop')
|
|
2
|
-
const { assign } = require('..')
|
|
3
|
-
|
|
4
|
-
const isPromise = value => value != null && typeof value.then == 'function'
|
|
5
|
-
|
|
6
|
-
const promiseAll = Promise.all.bind(Promise)
|
|
7
|
-
|
|
8
|
-
const funcObjectAll1 = funcs => function objectAllFuncs(...args) {
|
|
9
|
-
const output = {}, promises = []
|
|
10
|
-
for (const key in funcs) {
|
|
11
|
-
const outputItem = funcs[key].apply(null, args)
|
|
12
|
-
if (isPromise(outputItem)) {
|
|
13
|
-
promises.push(outputItem.then(res => {
|
|
14
|
-
output[key] = res
|
|
15
|
-
}))
|
|
16
|
-
} else {
|
|
17
|
-
output[key] = outputItem
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
return promises.length == 0 ? output : promiseAll(promises).then(() => output)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const funcObjectAll2 = funcs => function objectAllFuncs(...args) {
|
|
24
|
-
const output = {}, promises = []
|
|
25
|
-
for (const key in funcs) {
|
|
26
|
-
const outputItem = funcs[key](...args)
|
|
27
|
-
if (isPromise(outputItem)) {
|
|
28
|
-
promises.push(outputItem.then(res => {
|
|
29
|
-
output[key] = res
|
|
30
|
-
}))
|
|
31
|
-
} else {
|
|
32
|
-
output[key] = outputItem
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return promises.length == 0 ? output : promiseAll(promises).then(() => output)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const funcObjectAll3 = funcs => function objectAllFuncs(...args) {
|
|
39
|
-
const result = {}
|
|
40
|
-
let isAsync = false
|
|
41
|
-
for (const key in funcs) {
|
|
42
|
-
const resultItem = funcs[key](...args)
|
|
43
|
-
if (isPromise(resultItem)) isAsync = true
|
|
44
|
-
result[key] = resultItem
|
|
45
|
-
}
|
|
46
|
-
return isAsync ? promiseObjectAll(result) : result
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const vanilla1 = ({ number }) => ({
|
|
51
|
-
number,
|
|
52
|
-
a: number + 1,
|
|
53
|
-
b: number + 2,
|
|
54
|
-
c: number + 3,
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
const funcs = {
|
|
58
|
-
a: ({ number }) => number + 1,
|
|
59
|
-
b: ({ number }) => number + 2,
|
|
60
|
-
c: ({ number }) => number + 3,
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const vanilla2 = function (obj) {
|
|
64
|
-
const output = { ...obj }
|
|
65
|
-
for (const key in funcs) {
|
|
66
|
-
output[key] = funcs[key](obj)
|
|
67
|
-
}
|
|
68
|
-
return output
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const assign1 = function (funcs) {
|
|
72
|
-
const allFuncs = funcObjectAll1.call(null, funcs)
|
|
73
|
-
return function assignment(input) {
|
|
74
|
-
const output = allFuncs.call(null, input)
|
|
75
|
-
return isPromise(output)
|
|
76
|
-
? output.then(res => ({ ...input, ...res }))
|
|
77
|
-
: ({ ...input, ...output })
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const assign2 = function (funcs) {
|
|
82
|
-
const allFuncs = funcObjectAll2(funcs)
|
|
83
|
-
return function assignment(input) {
|
|
84
|
-
const output = allFuncs(input)
|
|
85
|
-
return isPromise(output)
|
|
86
|
-
? output.then(res => ({ ...input, ...res }))
|
|
87
|
-
: ({ ...input, ...output })
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const assign3 = function (funcs) {
|
|
92
|
-
const allFuncs = funcObjectAll3(funcs)
|
|
93
|
-
return function assignment(input) {
|
|
94
|
-
const output = allFuncs(input)
|
|
95
|
-
return isPromise(output)
|
|
96
|
-
? output.then(res => ({ ...input, ...res }))
|
|
97
|
-
: ({ ...input, ...output })
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// argument resolver for curry2
|
|
102
|
-
const curry2ResolveArg0 = (
|
|
103
|
-
baseFunc, arg1,
|
|
104
|
-
) => function arg0Resolver(arg0) {
|
|
105
|
-
return baseFunc(arg0, arg1)
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// argument resolver for curry2
|
|
109
|
-
const curry2ResolveArg1 = (
|
|
110
|
-
baseFunc, arg0,
|
|
111
|
-
) => function arg1Resolver(arg1) {
|
|
112
|
-
return baseFunc(arg0, arg1)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* @name curry2
|
|
117
|
-
*
|
|
118
|
-
* @synopsis
|
|
119
|
-
* __ = Symbol('placeholder')
|
|
120
|
-
*
|
|
121
|
-
* curry2(
|
|
122
|
-
* baseFunc function,
|
|
123
|
-
* arg0 __|any,
|
|
124
|
-
* arg1 __|any,
|
|
125
|
-
* ) -> function
|
|
126
|
-
*/
|
|
127
|
-
const curry2 = function (baseFunc, arg0, arg1) {
|
|
128
|
-
return arg0 == __
|
|
129
|
-
? curry2ResolveArg0(baseFunc, arg1)
|
|
130
|
-
: curry2ResolveArg1(baseFunc, arg0)
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// const objectAssign = Object.assign
|
|
134
|
-
|
|
135
|
-
const objectAssign = (objA, objB) => ({ ...objA, ...objB })
|
|
136
|
-
|
|
137
|
-
const assign5 = function (funcs) {
|
|
138
|
-
const allFuncs = funcObjectAll3(funcs)
|
|
139
|
-
return function assignment(object) {
|
|
140
|
-
const result = allFuncs(object)
|
|
141
|
-
return isPromise(result)
|
|
142
|
-
? result.then(curry2(objectAssign, object, __))
|
|
143
|
-
: ({ ...object, ...result })
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* @name assign
|
|
149
|
-
*
|
|
150
|
-
* @benchmark
|
|
151
|
-
* assign1: 1e+5: 67.168ms
|
|
152
|
-
* assign2: 1e+5: 60.779ms
|
|
153
|
-
* assign3: 1e+5: 58.094ms
|
|
154
|
-
* assign5: 1e+5: 59.132ms
|
|
155
|
-
*
|
|
156
|
-
* @remarks
|
|
157
|
-
* currying is slower here
|
|
158
|
-
*/
|
|
159
|
-
|
|
160
|
-
{
|
|
161
|
-
|
|
162
|
-
// console.log('assign1', assign1(funcs)({ number: 2 }))
|
|
163
|
-
// console.log('assign2', assign2(funcs)({ number: 2 }))
|
|
164
|
-
// console.log('assign3', assign3(funcs)({ number: 2 }))
|
|
165
|
-
// console.log('assign5', assign5(funcs)({ number: 2 }))
|
|
166
|
-
|
|
167
|
-
// timeInLoop('assign1', 1e5, () => assign1(funcs)({ number: 2 }))
|
|
168
|
-
|
|
169
|
-
// timeInLoop('assign2', 1e5, () => assign2(funcs)({ number: 2 }))
|
|
170
|
-
|
|
171
|
-
// timeInLoop('assign3', 1e5, () => assign3(funcs)({ number: 2 }))
|
|
172
|
-
|
|
173
|
-
// timeInLoop('assign5', 1e5, () => assign5(funcs)({ number: 2 }))
|
|
174
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
const rubico = require('..')
|
|
2
|
-
const timeInLoop = require('../x/timeInLoop')
|
|
3
|
-
const R = require('ramda')
|
|
4
|
-
const curry1 = require('../_internal/curry1')
|
|
5
|
-
const curry2 = require('../_internal/curry2')
|
|
6
|
-
const curry3 = require('../_internal/curry3')
|
|
7
|
-
const curry4 = require('../_internal/curry4')
|
|
8
|
-
|
|
9
|
-
const { __ } = rubico
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @name curryRace
|
|
13
|
-
*
|
|
14
|
-
* @benchmark
|
|
15
|
-
* rubico.curry: 1e+5: 60.554ms
|
|
16
|
-
* R.curry: 1e+5: 106.163ms
|
|
17
|
-
*/
|
|
18
|
-
const add6 = (a, b, c, d, e, f) => a + b + c + d + e + f
|
|
19
|
-
|
|
20
|
-
// console.log(rubico.curry(add6)(1, 2)(3)(4, 5, 6)) // 21
|
|
21
|
-
// console.log(R.curry(add6)(1, 2)(3)(4, 5, 6)) // 21
|
|
22
|
-
|
|
23
|
-
// timeInLoop('rubico.curry', 1e5, () => rubico.curry(add6)(1, 2)(3)(4, 5, 6))
|
|
24
|
-
// timeInLoop('R.curry', 1e5, () => R.curry(add6)(1, 2)(3)(4, 5, 6))
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @name curryPlaceholderRace
|
|
28
|
-
*
|
|
29
|
-
* @benchmark
|
|
30
|
-
* rubico.curry: 1e+5: 98.834ms
|
|
31
|
-
* R.curry: 1e+5: 147.693ms
|
|
32
|
-
*/
|
|
33
|
-
// console.log(rubico.curry(add6)(1, 2, rubico.__)(3)(4, rubico.__, 6)(5)) // 21
|
|
34
|
-
// console.log(R.curry(add6)(1, 2, R.__)(3)(4, R.__, 6)(5)) // 21
|
|
35
|
-
|
|
36
|
-
// timeInLoop('rubico.curry', 1e5, () => rubico.curry(add6)(1, 2, rubico.__)(3)(4, rubico.__, 6)(5))
|
|
37
|
-
// timeInLoop('R.curry', 1e5, () => R.curry(add6)(1, 2, R.__)(3)(4, R.__, 6)(5))
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @name curryRaceUnary
|
|
41
|
-
*
|
|
42
|
-
* @benchmark
|
|
43
|
-
* rubico.curry: 1e+5: 60.554ms
|
|
44
|
-
* R.curry: 1e+5: 106.163ms
|
|
45
|
-
*
|
|
46
|
-
* rubico.curry: 1e+5: 45.475ms
|
|
47
|
-
* R.curry: 1e+5: 66.493ms
|
|
48
|
-
*/
|
|
49
|
-
const identity = value => value
|
|
50
|
-
|
|
51
|
-
// console.log(rubico.curry(identity)(__)(1)) // 1
|
|
52
|
-
// console.log(R.curry(identity)(R.__)(1)) // 1
|
|
53
|
-
|
|
54
|
-
// timeInLoop('rubico.curry', 1e5, () => rubico.curry(identity)(__)(1))
|
|
55
|
-
// timeInLoop('R.curry', 1e5, () => R.curry(identity)(R.__)(1))
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
const timeInLoop = require('../x/timeInLoop')
|
|
2
|
-
const rubico = require('..')
|
|
3
|
-
const _ = require('lodash')
|
|
4
|
-
const R = require('ramda')
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @name eq
|
|
8
|
-
*
|
|
9
|
-
* @benchmark
|
|
10
|
-
* rubico.eq(0, 0): 1e+7: 12.499ms
|
|
11
|
-
* _.eq(0, 0): 1e+7: 12.585ms
|
|
12
|
-
* R.equals(0, 0): 1e+7: 196.767ms
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
const rubicoEq = rubico.eq(0, 0)
|
|
16
|
-
|
|
17
|
-
// console.log(rubicoEq())
|
|
18
|
-
// console.log(_.eq(0, 0))
|
|
19
|
-
// console.log(R.equals(0, 0))
|
|
20
|
-
|
|
21
|
-
// timeInLoop('rubico.eq(0, 0)', 1e7, () => rubicoEq())
|
|
22
|
-
|
|
23
|
-
// timeInLoop('_.eq(0, 0)', 1e7, () => _.eq(0, 0))
|
|
24
|
-
|
|
25
|
-
// timeInLoop('R.equals(0, 0)', 1e7, () => R.equals(0, 0))
|