rubico 2.2.3 → 2.3.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/AggregateReducer.d.ts +10 -0
- package/README.md +0 -1
- package/Transducer.d.ts +231 -0
- package/Transducer.js +121 -43
- package/__.d.ts +2 -0
- package/_internal/ComparisonOperator.d.ts +2 -0
- package/_internal/EmptyMap.d.ts +2 -0
- package/_internal/FilteringAsyncIterator.d.ts +29 -0
- package/_internal/FilteringIterator.d.ts +25 -0
- package/_internal/FlatMappingAsyncIterator.d.ts +34 -0
- package/_internal/FlatMappingIterator.d.ts +15 -0
- package/_internal/MappingAsyncIterator.d.ts +21 -0
- package/_internal/MappingIterator.d.ts +29 -0
- package/_internal/NextIteration.d.ts +14 -0
- package/_internal/SelfReferencingPromise.d.ts +10 -0
- package/_internal/add.d.ts +11 -0
- package/_internal/always.d.ts +13 -0
- package/_internal/areAllValuesNonfunctions.d.ts +10 -0
- package/_internal/areAnyValuesPromises.d.ts +10 -0
- package/_internal/arrayConditional.d.ts +20 -0
- package/_internal/arrayEvery.d.ts +10 -0
- package/_internal/arrayExtend.d.ts +13 -0
- package/_internal/arrayExtendMap.d.ts +20 -0
- package/_internal/arrayFilter.d.ts +16 -0
- package/_internal/arrayFilterByConditions.d.ts +20 -0
- package/_internal/arrayFind.d.ts +15 -0
- package/_internal/arrayFlatMap.d.ts +20 -0
- package/_internal/arrayFlatten.d.ts +20 -0
- package/_internal/arrayForEach.d.ts +19 -0
- package/_internal/arrayJoin.d.ts +13 -0
- package/_internal/arrayMap.d.ts +16 -0
- package/_internal/arrayMapPool.d.ts +19 -0
- package/_internal/arrayMapSeries.d.ts +17 -0
- package/_internal/arrayPush.d.ts +11 -0
- package/_internal/arrayReduce.d.ts +14 -0
- package/_internal/arraySome.d.ts +13 -0
- package/_internal/asyncIteratorEvery.d.ts +16 -0
- package/_internal/asyncIteratorFind.d.ts +12 -0
- package/_internal/asyncIteratorForEach.d.ts +17 -0
- package/_internal/asyncIteratorReduce.d.ts +14 -0
- package/_internal/asyncIteratorSome.d.ts +16 -0
- package/_internal/binaryExtend.d.ts +16 -0
- package/_internal/bufferAlloc.d.ts +8 -0
- package/_internal/callConcat.d.ts +8 -0
- package/_internal/callPropBinary.d.ts +18 -0
- package/_internal/callPropUnary.d.ts +17 -0
- package/_internal/catcherApply.d.ts +17 -0
- package/_internal/copyDeep.d.ts +13 -0
- package/_internal/curry2.d.ts +21 -0
- package/_internal/curry3.d.ts +22 -0
- package/_internal/curry4.d.ts +23 -0
- package/_internal/curry5.d.ts +24 -0
- package/_internal/curryArgs2.d.ts +21 -0
- package/_internal/curryArgs3.d.ts +22 -0
- package/_internal/curryArgs4.d.ts +23 -0
- package/_internal/curryArity.d.ts +20 -0
- package/_internal/deleteByPath.d.ts +13 -0
- package/_internal/equals.d.ts +10 -0
- package/_internal/funcApply.d.ts +16 -0
- package/_internal/funcConcat.d.ts +17 -0
- package/_internal/funcConcatSync.d.ts +17 -0
- package/_internal/functionArrayAll.d.ts +10 -0
- package/_internal/functionArrayAllSeries.d.ts +10 -0
- package/_internal/functionObjectAll.d.ts +13 -0
- package/_internal/genericReduce.d.ts +26 -0
- package/_internal/genericTransform.d.ts +18 -0
- package/_internal/getArg1.d.ts +8 -0
- package/_internal/getByPath.d.ts +13 -0
- package/_internal/globalThisHasBuffer.d.ts +11 -0
- package/_internal/greaterThan.d.ts +10 -0
- package/_internal/greaterThanOrEqual.d.ts +10 -0
- package/_internal/identity.d.ts +11 -0
- package/_internal/isArray.d.ts +11 -0
- package/_internal/isAsyncGeneratorFunction.d.ts +11 -0
- package/_internal/isBinary.d.ts +11 -0
- package/_internal/isGeneratorFunction.d.ts +11 -0
- package/_internal/isNodeReadStream.d.ts +11 -0
- package/_internal/isObject.d.ts +11 -0
- package/_internal/isPromise.d.ts +11 -0
- package/_internal/iteratorEvery.d.ts +12 -0
- package/_internal/iteratorFind.d.ts +12 -0
- package/_internal/iteratorForEach.d.ts +19 -0
- package/_internal/iteratorReduce.d.ts +18 -0
- package/_internal/iteratorSome.d.ts +13 -0
- package/_internal/leftResolverRightResolverCompare.d.ts +2 -0
- package/_internal/leftResolverRightValueCompare.d.ts +2 -0
- package/_internal/leftValueRightResolverCompare.d.ts +2 -0
- package/_internal/lessThan.d.ts +10 -0
- package/_internal/lessThanOrEqual.d.ts +10 -0
- package/_internal/mapFilter.d.ts +21 -0
- package/_internal/mapFrom.d.ts +13 -0
- package/_internal/mapMap.d.ts +16 -0
- package/_internal/mapMapEntries.d.ts +13 -0
- package/_internal/mapReduce.d.ts +14 -0
- package/_internal/mapSet.d.ts +10 -0
- package/_internal/memoizeCappedUnary.d.ts +18 -0
- package/_internal/nonfunctionsConditional.d.ts +10 -0
- package/_internal/noop.d.ts +11 -0
- package/_internal/objectAssign.d.ts +15 -0
- package/_internal/objectFilter.d.ts +13 -0
- package/_internal/objectFlatMap.d.ts +26 -0
- package/_internal/objectFlatten.d.ts +21 -0
- package/_internal/objectForEach.d.ts +17 -0
- package/_internal/objectKeys.d.ts +11 -0
- package/_internal/objectKeysLength.d.ts +10 -0
- package/_internal/objectMap.d.ts +17 -0
- package/_internal/objectMapEntries.d.ts +13 -0
- package/_internal/objectReduce.d.ts +14 -0
- package/_internal/objectSet.d.ts +14 -0
- package/_internal/objectSetIf.d.ts +15 -0
- package/_internal/objectToString.d.ts +11 -0
- package/_internal/objectValues.d.ts +11 -0
- package/_internal/placeholder.d.ts +2 -0
- package/_internal/promiseAll.d.ts +11 -0
- package/_internal/promiseObjectAll.d.ts +13 -0
- package/_internal/promiseRace.d.ts +11 -0
- package/_internal/propertyPathToArray.d.ts +10 -0
- package/_internal/reducerAllSync.d.ts +10 -0
- package/_internal/reducerAnySync.d.ts +10 -0
- package/_internal/reducerConcat.d.ts +15 -0
- package/_internal/reducerEvery.d.ts +12 -0
- package/_internal/reducerFilter.d.ts +19 -0
- package/_internal/reducerFlatMap.d.ts +20 -0
- package/_internal/reducerForEach.d.ts +18 -0
- package/_internal/reducerMap.d.ts +19 -0
- package/_internal/reducerSome.d.ts +16 -0
- package/_internal/reducerTryCatch.d.ts +15 -0
- package/_internal/sameValueZero.d.ts +13 -0
- package/_internal/setByPath.d.ts +14 -0
- package/_internal/setExtend.d.ts +12 -0
- package/_internal/setFilter.d.ts +16 -0
- package/_internal/setFlatMap.d.ts +21 -0
- package/_internal/setFlatten.d.ts +19 -0
- package/_internal/setMap.d.ts +17 -0
- package/_internal/sha256.d.ts +2 -0
- package/_internal/sleep.d.ts +10 -0
- package/_internal/spread2.d.ts +14 -0
- package/_internal/streamExtend.d.ts +17 -0
- package/_internal/stringFilter.d.ts +17 -0
- package/_internal/stringFlatMap.d.ts +22 -0
- package/_internal/stringMap.d.ts +19 -0
- package/_internal/symbolAsyncIterator.d.ts +11 -0
- package/_internal/symbolIterator.d.ts +11 -0
- package/_internal/tapSync.d.ts +16 -0
- package/_internal/thunkConditional.d.ts +17 -0
- package/_internal/thunkify1.d.ts +16 -0
- package/_internal/thunkify2.d.ts +17 -0
- package/_internal/thunkify3.d.ts +18 -0
- package/_internal/thunkify4.d.ts +19 -0
- package/_internal/thunkify5.d.ts +20 -0
- package/_internal/thunkifyArgs.d.ts +13 -0
- package/_internal/timeInLoop.d.ts +25 -0
- package/_internal/timeInLoopAsync.d.ts +23 -0
- package/all.d.ts +100 -0
- package/always.d.ts +2 -0
- package/and.d.ts +45 -0
- package/assign.d.ts +46 -0
- package/compose.d.ts +25 -0
- package/curry.d.ts +70 -0
- package/dist/Transducer.es.js +1 -1
- package/dist/Transducer.es.min.js +1 -1
- package/dist/Transducer.js +1 -1
- package/dist/Transducer.min.js +1 -1
- package/dist/Transducer.mjs +1 -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 +1 -1
- package/dist/rubico.es.min.js +1 -1
- package/dist/rubico.global.js +1 -1
- package/dist/rubico.global.min.js +1 -1
- package/dist/rubico.js +1 -1
- package/dist/rubico.min.js +1 -1
- package/dist/rubico.mjs +1 -1
- 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 +1 -1
- package/dist/tap.es.min.js +1 -1
- package/dist/tap.js +1 -1
- package/dist/tap.min.js +1 -1
- package/dist/tap.mjs +1 -1
- 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 +1 -1
- package/dist/transform.es.min.js +1 -1
- package/dist/transform.js +1 -1
- package/dist/transform.min.js +1 -1
- package/dist/transform.mjs +1 -1
- 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 +1 -1
- package/dist/x/trace.es.min.js +1 -1
- package/dist/x/trace.js +1 -1
- package/dist/x/trace.min.js +1 -1
- package/dist/x/trace.mjs +1 -1
- 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/eq.d.ts +51 -0
- package/es.d.ts +80 -0
- package/es.js +1 -1
- package/every.d.ts +52 -0
- package/filter.d.ts +148 -0
- package/flatMap.d.ts +109 -0
- package/forEach.d.ts +35 -0
- package/get.d.ts +70 -0
- package/global.d.ts +1 -0
- package/gt.d.ts +49 -0
- package/gte.d.ts +51 -0
- package/index.d.ts +1 -0
- package/index.js +1 -1
- package/lt.d.ts +49 -0
- package/lte.d.ts +49 -0
- package/map.d.ts +246 -0
- package/monad/Instance.d.ts +246 -0
- package/monad/Instance.js +188 -206
- package/not.d.ts +34 -0
- package/omit.d.ts +50 -0
- package/or.d.ts +43 -0
- package/package.json +43 -4
- package/pick.d.ts +43 -0
- package/pipe.d.ts +49 -0
- package/reduce.d.ts +166 -0
- package/set.d.ts +61 -0
- package/some.d.ts +65 -0
- package/switchCase.d.ts +76 -0
- package/tap.d.ts +53 -0
- package/thunkify.d.ts +21 -0
- package/transform.d.ts +131 -0
- package/tryCatch.d.ts +47 -0
- package/x/append.d.ts +38 -0
- package/x/callProp.d.ts +20 -0
- package/x/defaultsDeep.d.ts +42 -0
- package/x/differenceWith.d.ts +25 -0
- package/x/filterOut.d.ts +39 -0
- package/x/find.d.ts +34 -0
- package/x/findIndex.d.ts +25 -0
- package/x/first.d.ts +23 -0
- package/x/flatten.d.ts +57 -0
- package/x/groupBy.d.ts +50 -0
- package/x/has.d.ts +25 -0
- package/x/heapUsedInLoop.d.ts +53 -0
- package/x/identity.d.ts +21 -0
- package/x/includes.d.ts +25 -0
- package/x/index.d.ts +34 -0
- package/x/is.d.ts +2 -0
- package/x/isDeepEqual.d.ts +42 -0
- package/x/isEmpty.d.ts +24 -0
- package/x/isEqual.d.ts +2 -0
- package/x/isFunction.d.ts +23 -0
- package/x/isIn.d.ts +61 -0
- package/x/isObject.d.ts +2 -0
- package/x/isString.benchmarks.d.ts +1 -0
- package/x/isString.d.ts +21 -0
- package/x/keys.d.ts +23 -0
- package/x/last.d.ts +22 -0
- package/x/maxBy.d.ts +41 -0
- package/x/noop.d.ts +21 -0
- package/x/pluck.d.ts +35 -0
- package/x/prepend.d.ts +38 -0
- package/x/size.d.ts +21 -0
- package/x/test.d.ts +1 -0
- package/x/timeInLoop.d.ts +21 -0
- package/x/trace.d.ts +30 -0
- package/x/tracef.d.ts +7 -0
- package/x/unionWith.d.ts +31 -0
- package/x/uniq.d.ts +24 -0
- package/x/unless.d.ts +28 -0
- package/x/values.d.ts +23 -0
- package/x/when.d.ts +28 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export = AggregateReducer;
|
|
2
|
+
/**
|
|
3
|
+
* @name AggregateReducer
|
|
4
|
+
*
|
|
5
|
+
* @synopsis
|
|
6
|
+
* ```coffeescript [specscript]
|
|
7
|
+
* AggregateReducer(reducers Array<reducer function>) -> aggregateReducer function
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
declare function AggregateReducer(reducers: any): any;
|
package/README.md
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
[](https://codecov.io/gh/a-synchronous/rubico)
|
|
7
7
|
[](https://www.npmjs.com/package/rubico)
|
|
8
8
|
[](https://opensource.org/licenses/MIT)
|
|
9
|
-
[](https://gitter.im/a-synchronous/rubico)
|
|
10
9
|
|
|
11
10
|
### [a]synchronous functional programming
|
|
12
11
|
|
package/Transducer.d.ts
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name Transducer.map
|
|
3
|
+
*
|
|
4
|
+
* @synopsis
|
|
5
|
+
* ```coffeescript [specscript]
|
|
6
|
+
* type Reducer = (
|
|
7
|
+
* accumulator any,
|
|
8
|
+
* value any,
|
|
9
|
+
* indexOrKey? number|string,
|
|
10
|
+
* collection? Foldable,
|
|
11
|
+
* )=>(nextAccumulator Promise|any)
|
|
12
|
+
*
|
|
13
|
+
* type Transducer = Reducer=>Reducer
|
|
14
|
+
*
|
|
15
|
+
* Transducer.map(mapperFunc function) -> mappingTransducer Transducer
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @description
|
|
19
|
+
* Creates a mapping transducer. Items in the final reducing operation are transformed by the mapper function. It is possible to use an asynchronous mapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
20
|
+
*
|
|
21
|
+
* ```javascript [playground]
|
|
22
|
+
* const square = number => number ** 2
|
|
23
|
+
*
|
|
24
|
+
* const concat = (array, item) => array.concat(item)
|
|
25
|
+
*
|
|
26
|
+
* const mapSquare = Transducer.map(square)
|
|
27
|
+
* // mapSquare is a transducer
|
|
28
|
+
*
|
|
29
|
+
* const squareConcatReducer = mapSquare(concat)
|
|
30
|
+
* // now mapSquare is passed the reducer function concat; squareConcatReducer
|
|
31
|
+
* // is a reducer with chained functionality square and concat
|
|
32
|
+
*
|
|
33
|
+
* console.log(
|
|
34
|
+
* reduce([1, 2, 3, 4, 5], squareConcatReducer, [])
|
|
35
|
+
* ) // [1, 4, 9, 16, 25]
|
|
36
|
+
*
|
|
37
|
+
* // the same squareConcatReducer is consumable with vanilla JavaScript
|
|
38
|
+
* console.log(
|
|
39
|
+
* [1, 2, 3, 4, 5].reduce(squareConcatReducer, [])
|
|
40
|
+
* ) // [1, 4, 9, 16, 25]
|
|
41
|
+
*
|
|
42
|
+
* // concat is implicit when transforming into arrays
|
|
43
|
+
* console.log(
|
|
44
|
+
* transform([1, 2, 3, 4, 5], Transducer.map(square), [])
|
|
45
|
+
* ) // [1, 4, 9, 16, 25]
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* Read more on transducers [here](/blog/transducers-crash-course-rubico-v2).
|
|
49
|
+
*/
|
|
50
|
+
export function map(mapper: any): (arg0: any) => any;
|
|
51
|
+
/**
|
|
52
|
+
* @name Transducer.filter
|
|
53
|
+
*
|
|
54
|
+
* @synopsis
|
|
55
|
+
* ```coffeescript [specscript]
|
|
56
|
+
* type Reducer = (
|
|
57
|
+
* accumulator any,
|
|
58
|
+
* value any,
|
|
59
|
+
* indexOrKey? number|string,
|
|
60
|
+
* collection? Foldable,
|
|
61
|
+
* )=>(nextAccumulator Promise|any)
|
|
62
|
+
*
|
|
63
|
+
* type Transducer = Reducer=>Reducer
|
|
64
|
+
*
|
|
65
|
+
* Transducer.filter(predicate function) -> filteringTransducer Transducer
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @description
|
|
69
|
+
* Creates a filtering transducer. A filtering reducer skips items of reducing operation if they test falsy by the predicate. It is possible to use an asynchronous predicate, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
70
|
+
*
|
|
71
|
+
* ```javascript [playground]
|
|
72
|
+
* const isOdd = number => number % 2 == 1
|
|
73
|
+
*
|
|
74
|
+
* const concat = (array, item) => array.concat(item)
|
|
75
|
+
*
|
|
76
|
+
* const concatOddNumbers = filter(isOdd)(concat)
|
|
77
|
+
*
|
|
78
|
+
* console.log(
|
|
79
|
+
* [1, 2, 3, 4, 5].reduce(concatOddNumbers, []),
|
|
80
|
+
* ) // [1, 3, 5]
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export function filter(predicate: any): (arg0: any) => any;
|
|
84
|
+
/**
|
|
85
|
+
* @name Transducer.flatMap
|
|
86
|
+
*
|
|
87
|
+
* @synopsis
|
|
88
|
+
* ```coffeescript [specscript]
|
|
89
|
+
* type Reducer = (
|
|
90
|
+
* accumulator any,
|
|
91
|
+
* value any,
|
|
92
|
+
* indexOrKey? number|string,
|
|
93
|
+
* collection? Foldable,
|
|
94
|
+
* )=>(nextAccumulator Promise|any)
|
|
95
|
+
*
|
|
96
|
+
* type Transducer = Reducer=>Reducer
|
|
97
|
+
*
|
|
98
|
+
* Transducer.flatMap(flatMapper) -> flatMappingTransducer Transducer
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @description
|
|
102
|
+
* Creates a flatMapping transducer. A flatMapping transducer applies the flatMapping function to each item of the reducing operation, concatenating the results of the flatMapper execution into the final result. It is possible to use an asynchronous flatMapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
103
|
+
*
|
|
104
|
+
* ```javascript [playground]
|
|
105
|
+
* const powers = number => [number, number ** 2, number ** 3]
|
|
106
|
+
*
|
|
107
|
+
* const numbers = [1, 2, 3, 4, 5]
|
|
108
|
+
*
|
|
109
|
+
* console.log(
|
|
110
|
+
* transform(numbers, Transducer.flatMap(powers), [])
|
|
111
|
+
* ) // [1, 1, 1, 2, 4, 8, 3, 9, 27, 4, 16, 64, 5, 25, 125]
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* Read more on transducers [here](/blog/transducers-crash-course-rubico-v2).
|
|
115
|
+
*/
|
|
116
|
+
export function flatMap(flatMapper: any): (arg0: any) => any;
|
|
117
|
+
/**
|
|
118
|
+
* @name Transducer.forEach
|
|
119
|
+
*
|
|
120
|
+
* @synopsis
|
|
121
|
+
* ```coffeescript [specscript]
|
|
122
|
+
* type Reducer = (
|
|
123
|
+
* accumulator any,
|
|
124
|
+
* value any,
|
|
125
|
+
* indexOrKey? number|string,
|
|
126
|
+
* collection? Foldable,
|
|
127
|
+
* )=>(nextAccumulator Promise|any)
|
|
128
|
+
*
|
|
129
|
+
* type Transducer = Reducer=>Reducer
|
|
130
|
+
*
|
|
131
|
+
* Transducer.forEach(func function) -> forEachTransducer Transducer
|
|
132
|
+
* ```
|
|
133
|
+
*
|
|
134
|
+
* @description
|
|
135
|
+
* Creates an effectful pasthrough transducer. The effectful passthrough transducer applies the effectful function to each item of the reducing operation, leaving the reducing operation unchanged. It is possible to use an asynchronous effectful function, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
136
|
+
*
|
|
137
|
+
* ```javascript [playground]
|
|
138
|
+
* const numbers = [1, 2, 3, 4, 5]
|
|
139
|
+
* transform(numbers, compose([
|
|
140
|
+
* Transducer.map(number => number ** 2),
|
|
141
|
+
* Transducer.forEach(console.log), // 1 4 9 16 25
|
|
142
|
+
* ]), null)
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
export function forEach(func: any): (arg0: any) => any;
|
|
146
|
+
/**
|
|
147
|
+
* @name Transducer.passthrough
|
|
148
|
+
*
|
|
149
|
+
* @synopsis
|
|
150
|
+
* ```coffeescript [specscript]
|
|
151
|
+
* type Reducer = (
|
|
152
|
+
* accumulator any,
|
|
153
|
+
* value any,
|
|
154
|
+
* indexOrKey? number|string,
|
|
155
|
+
* collection? Foldable,
|
|
156
|
+
* )=>(nextAccumulator Promise|any)
|
|
157
|
+
*
|
|
158
|
+
* type Transducer = Reducer=>Reducer
|
|
159
|
+
*
|
|
160
|
+
* Transducer.passthrough(func function) -> passthroughTransducer Transducer
|
|
161
|
+
* ```
|
|
162
|
+
*
|
|
163
|
+
* @description
|
|
164
|
+
* Creates a pasthrough transducer. The passthrough transducer passes each item of the reducing operation through, leaving the reducing operation unchanged.
|
|
165
|
+
*
|
|
166
|
+
* ```javascript [playground]
|
|
167
|
+
* const createAsyncNumbers = async function* () {
|
|
168
|
+
* let number = 0
|
|
169
|
+
* while (number < 10) {
|
|
170
|
+
* yield number
|
|
171
|
+
* number += 1
|
|
172
|
+
* }
|
|
173
|
+
* }
|
|
174
|
+
*
|
|
175
|
+
* transform(createAsyncNumbers(), Transducer.passthrough, [])
|
|
176
|
+
* .then(console.log) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
export function passthrough(reducer: any): any;
|
|
180
|
+
/**
|
|
181
|
+
* @name Transducer.tryCatch
|
|
182
|
+
*
|
|
183
|
+
* @synopsis
|
|
184
|
+
* ```coffeescript [specscript]
|
|
185
|
+
* type Reducer = (
|
|
186
|
+
* accumulator any,
|
|
187
|
+
* item any,
|
|
188
|
+
* indexOrKey? number|string,
|
|
189
|
+
* collection? Foldable,
|
|
190
|
+
* )=>(nextAccumulator Promise|any)
|
|
191
|
+
*
|
|
192
|
+
* type Transducer = Reducer=>Reducer
|
|
193
|
+
*
|
|
194
|
+
* Transducer.tryCatch(
|
|
195
|
+
* transducerTryer Transducer,
|
|
196
|
+
* catcher (error Error, item any)=>Promise|any,
|
|
197
|
+
* ) -> tryCatchTransducer Transducer
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* @description
|
|
201
|
+
* Creates an error handling transducer. The error handling transducer wraps a transducer and catches any errors thrown by the transducer with the catcher function. The catcher function is provided the error as well as the original item (before any processing by the transducer) for which the error was thrown. It is possible for either the transducer or the catcher to be asynchronous, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
202
|
+
*
|
|
203
|
+
* ```javascript [playground]
|
|
204
|
+
* const db = new Map()
|
|
205
|
+
* db.set('a', { id: 'a', name: 'George' })
|
|
206
|
+
* db.set('b', { id: 'b', name: 'Jane' })
|
|
207
|
+
* db.set('c', { id: 'c', name: 'Jill' })
|
|
208
|
+
* db.set('e', { id: 'e', name: 'Jim' })
|
|
209
|
+
*
|
|
210
|
+
* const userIds = ['a', 'b', 'c', 'd', 'e']
|
|
211
|
+
*
|
|
212
|
+
* transform(userIds, Transducer.tryCatch(compose([
|
|
213
|
+
* Transducer.map(async userId => {
|
|
214
|
+
* if (db.has(userId)) {
|
|
215
|
+
* return db.get(userId)
|
|
216
|
+
* }
|
|
217
|
+
* throw new Error(`user ${userId} not found`)
|
|
218
|
+
* }),
|
|
219
|
+
*
|
|
220
|
+
* Transducer.forEach(user => {
|
|
221
|
+
* console.log('Found', user.name)
|
|
222
|
+
* })
|
|
223
|
+
* ]), (error, userId) => {
|
|
224
|
+
* console.error(error)
|
|
225
|
+
* console.log('userId in catcher:', userId)
|
|
226
|
+
* // original userId for which the error was thrown is provided
|
|
227
|
+
* }), null)
|
|
228
|
+
* ```
|
|
229
|
+
|
|
230
|
+
*/
|
|
231
|
+
export function tryCatch(transducerTryer: any, catcher: any): (arg0: any) => any;
|
package/Transducer.js
CHANGED
|
@@ -21,22 +21,20 @@ const Transducer = {}
|
|
|
21
21
|
*
|
|
22
22
|
* @synopsis
|
|
23
23
|
* ```coffeescript [specscript]
|
|
24
|
-
* type Reducer = (
|
|
24
|
+
* type Reducer = (
|
|
25
|
+
* accumulator any,
|
|
26
|
+
* value any,
|
|
27
|
+
* indexOrKey? number|string,
|
|
28
|
+
* collection? Foldable,
|
|
29
|
+
* )=>(nextAccumulator Promise|any)
|
|
30
|
+
*
|
|
25
31
|
* type Transducer = Reducer=>Reducer
|
|
26
32
|
*
|
|
27
33
|
* Transducer.map(mapperFunc function) -> mappingTransducer Transducer
|
|
28
34
|
* ```
|
|
29
35
|
*
|
|
30
36
|
* @description
|
|
31
|
-
* Creates a mapping transducer
|
|
32
|
-
*
|
|
33
|
-
* ```coffeescript [specscript]
|
|
34
|
-
* type Reducer = (accumulator any, item any)=>(nextAccumulator Promise|any)
|
|
35
|
-
*
|
|
36
|
-
* type Transducer = Reducer=>Reducer
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* The transducer signature enables chaining functionality for reducers. `map` is core to this mechanism, and provides a way via transducers to transform the items of reducers.
|
|
37
|
+
* Creates a mapping transducer. Items in the final reducing operation are transformed by the mapper function. It is possible to use an asynchronous mapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
40
38
|
*
|
|
41
39
|
* ```javascript [playground]
|
|
42
40
|
* const square = number => number ** 2
|
|
@@ -51,25 +49,21 @@ const Transducer = {}
|
|
|
51
49
|
* // is a reducer with chained functionality square and concat
|
|
52
50
|
*
|
|
53
51
|
* console.log(
|
|
54
|
-
* [1, 2, 3, 4, 5]
|
|
52
|
+
* reduce([1, 2, 3, 4, 5], squareConcatReducer, [])
|
|
55
53
|
* ) // [1, 4, 9, 16, 25]
|
|
56
54
|
*
|
|
55
|
+
* // the same squareConcatReducer is consumable with vanilla JavaScript
|
|
57
56
|
* console.log(
|
|
58
|
-
* [1, 2, 3, 4, 5].reduce(squareConcatReducer,
|
|
59
|
-
* ) //
|
|
60
|
-
* ```
|
|
61
|
-
*
|
|
62
|
-
* Create reducers with chained functionality by using the `Transducer.map` eager API.
|
|
63
|
-
*
|
|
64
|
-
* ```javascript [playground]
|
|
65
|
-
* const square = number => number ** 2
|
|
66
|
-
*
|
|
67
|
-
* const concat = (array, item) => array.concat(item)
|
|
57
|
+
* [1, 2, 3, 4, 5].reduce(squareConcatReducer, [])
|
|
58
|
+
* ) // [1, 4, 9, 16, 25]
|
|
68
59
|
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
60
|
+
* // concat is implicit when transforming into arrays
|
|
61
|
+
* console.log(
|
|
62
|
+
* transform([1, 2, 3, 4, 5], Transducer.map(square), [])
|
|
63
|
+
* ) // [1, 4, 9, 16, 25]
|
|
72
64
|
* ```
|
|
65
|
+
*
|
|
66
|
+
* Read more on transducers [here](/blog/transducers-crash-course-rubico-v2).
|
|
73
67
|
*/
|
|
74
68
|
Transducer.map = function transducerMap(mapper) {
|
|
75
69
|
return curry2(reducerMap, __, mapper)
|
|
@@ -80,14 +74,20 @@ Transducer.map = function transducerMap(mapper) {
|
|
|
80
74
|
*
|
|
81
75
|
* @synopsis
|
|
82
76
|
* ```coffeescript [specscript]
|
|
83
|
-
* type Reducer = (
|
|
77
|
+
* type Reducer = (
|
|
78
|
+
* accumulator any,
|
|
79
|
+
* value any,
|
|
80
|
+
* indexOrKey? number|string,
|
|
81
|
+
* collection? Foldable,
|
|
82
|
+
* )=>(nextAccumulator Promise|any)
|
|
83
|
+
*
|
|
84
84
|
* type Transducer = Reducer=>Reducer
|
|
85
85
|
*
|
|
86
86
|
* Transducer.filter(predicate function) -> filteringTransducer Transducer
|
|
87
87
|
* ```
|
|
88
88
|
*
|
|
89
89
|
* @description
|
|
90
|
-
*
|
|
90
|
+
* Creates a filtering transducer. A filtering reducer skips items of reducing operation if they test falsy by the predicate. It is possible to use an asynchronous predicate, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
91
91
|
*
|
|
92
92
|
* ```javascript [playground]
|
|
93
93
|
* const isOdd = number => number % 2 == 1
|
|
@@ -110,33 +110,32 @@ Transducer.filter = function transducerFilter(predicate) {
|
|
|
110
110
|
*
|
|
111
111
|
* @synopsis
|
|
112
112
|
* ```coffeescript [specscript]
|
|
113
|
-
* type Reducer = (
|
|
113
|
+
* type Reducer = (
|
|
114
|
+
* accumulator any,
|
|
115
|
+
* value any,
|
|
116
|
+
* indexOrKey? number|string,
|
|
117
|
+
* collection? Foldable,
|
|
118
|
+
* )=>(nextAccumulator Promise|any)
|
|
119
|
+
*
|
|
114
120
|
* type Transducer = Reducer=>Reducer
|
|
115
121
|
*
|
|
116
122
|
* Transducer.flatMap(flatMapper) -> flatMappingTransducer Transducer
|
|
117
123
|
* ```
|
|
118
124
|
*
|
|
119
125
|
* @description
|
|
120
|
-
*
|
|
126
|
+
* Creates a flatMapping transducer. A flatMapping transducer applies the flatMapping function to each item of the reducing operation, concatenating the results of the flatMapper execution into the final result. It is possible to use an asynchronous flatMapper, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
121
127
|
*
|
|
122
128
|
* ```javascript [playground]
|
|
123
|
-
* const isOdd = number => number % 2 == 1
|
|
124
|
-
*
|
|
125
129
|
* const powers = number => [number, number ** 2, number ** 3]
|
|
126
130
|
*
|
|
127
|
-
* const
|
|
128
|
-
* filter(isOdd),
|
|
129
|
-
* flatMap(powers),
|
|
130
|
-
* ])
|
|
131
|
-
*
|
|
132
|
-
* const arrayConcat = (array, value) => array.concat(value)
|
|
131
|
+
* const numbers = [1, 2, 3, 4, 5]
|
|
133
132
|
*
|
|
134
133
|
* console.log(
|
|
135
|
-
*
|
|
136
|
-
* ) // [1, 1, 1, 3, 9, 27, 5, 25, 125]
|
|
134
|
+
* transform(numbers, Transducer.flatMap(powers), [])
|
|
135
|
+
* ) // [1, 1, 1, 2, 4, 8, 3, 9, 27, 4, 16, 64, 5, 25, 125]
|
|
137
136
|
* ```
|
|
138
137
|
*
|
|
139
|
-
*
|
|
138
|
+
* Read more on transducers [here](/blog/transducers-crash-course-rubico-v2).
|
|
140
139
|
*/
|
|
141
140
|
Transducer.flatMap = function transducerFlatMap(flatMapper) {
|
|
142
141
|
return curry2(reducerFlatMap, __, flatMapper)
|
|
@@ -147,11 +146,28 @@ Transducer.flatMap = function transducerFlatMap(flatMapper) {
|
|
|
147
146
|
*
|
|
148
147
|
* @synopsis
|
|
149
148
|
* ```coffeescript [specscript]
|
|
150
|
-
* type Reducer = (
|
|
149
|
+
* type Reducer = (
|
|
150
|
+
* accumulator any,
|
|
151
|
+
* value any,
|
|
152
|
+
* indexOrKey? number|string,
|
|
153
|
+
* collection? Foldable,
|
|
154
|
+
* )=>(nextAccumulator Promise|any)
|
|
155
|
+
*
|
|
151
156
|
* type Transducer = Reducer=>Reducer
|
|
152
157
|
*
|
|
153
158
|
* Transducer.forEach(func function) -> forEachTransducer Transducer
|
|
154
159
|
* ```
|
|
160
|
+
*
|
|
161
|
+
* @description
|
|
162
|
+
* Creates an effectful pasthrough transducer. The effectful passthrough transducer applies the effectful function to each item of the reducing operation, leaving the reducing operation unchanged. It is possible to use an asynchronous effectful function, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
163
|
+
*
|
|
164
|
+
* ```javascript [playground]
|
|
165
|
+
* const numbers = [1, 2, 3, 4, 5]
|
|
166
|
+
* transform(numbers, compose([
|
|
167
|
+
* Transducer.map(number => number ** 2),
|
|
168
|
+
* Transducer.forEach(console.log), // 1 4 9 16 25
|
|
169
|
+
* ]), null)
|
|
170
|
+
* ```
|
|
155
171
|
*/
|
|
156
172
|
Transducer.forEach = function transducerForEach(func) {
|
|
157
173
|
return curry2(reducerForEach, __, func)
|
|
@@ -162,11 +178,33 @@ Transducer.forEach = function transducerForEach(func) {
|
|
|
162
178
|
*
|
|
163
179
|
* @synopsis
|
|
164
180
|
* ```coffeescript [specscript]
|
|
165
|
-
* type Reducer = (
|
|
181
|
+
* type Reducer = (
|
|
182
|
+
* accumulator any,
|
|
183
|
+
* value any,
|
|
184
|
+
* indexOrKey? number|string,
|
|
185
|
+
* collection? Foldable,
|
|
186
|
+
* )=>(nextAccumulator Promise|any)
|
|
187
|
+
*
|
|
166
188
|
* type Transducer = Reducer=>Reducer
|
|
167
189
|
*
|
|
168
190
|
* Transducer.passthrough(func function) -> passthroughTransducer Transducer
|
|
169
191
|
* ```
|
|
192
|
+
*
|
|
193
|
+
* @description
|
|
194
|
+
* Creates a pasthrough transducer. The passthrough transducer passes each item of the reducing operation through, leaving the reducing operation unchanged.
|
|
195
|
+
*
|
|
196
|
+
* ```javascript [playground]
|
|
197
|
+
* const createAsyncNumbers = async function* () {
|
|
198
|
+
* let number = 0
|
|
199
|
+
* while (number < 10) {
|
|
200
|
+
* yield number
|
|
201
|
+
* number += 1
|
|
202
|
+
* }
|
|
203
|
+
* }
|
|
204
|
+
*
|
|
205
|
+
* transform(createAsyncNumbers(), Transducer.passthrough, [])
|
|
206
|
+
* .then(console.log) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
207
|
+
* ```
|
|
170
208
|
*/
|
|
171
209
|
Transducer.passthrough = function transducerPassthrough(reducer) {
|
|
172
210
|
return reducer
|
|
@@ -177,11 +215,51 @@ Transducer.passthrough = function transducerPassthrough(reducer) {
|
|
|
177
215
|
*
|
|
178
216
|
* @synopsis
|
|
179
217
|
* ```coffeescript [specscript]
|
|
180
|
-
* type Reducer = (
|
|
218
|
+
* type Reducer = (
|
|
219
|
+
* accumulator any,
|
|
220
|
+
* item any,
|
|
221
|
+
* indexOrKey? number|string,
|
|
222
|
+
* collection? Foldable,
|
|
223
|
+
* )=>(nextAccumulator Promise|any)
|
|
224
|
+
*
|
|
181
225
|
* type Transducer = Reducer=>Reducer
|
|
182
226
|
*
|
|
183
|
-
* Transducer.tryCatch(
|
|
227
|
+
* Transducer.tryCatch(
|
|
228
|
+
* transducerTryer Transducer,
|
|
229
|
+
* catcher (error Error, item any)=>Promise|any,
|
|
230
|
+
* ) -> tryCatchTransducer Transducer
|
|
184
231
|
* ```
|
|
232
|
+
*
|
|
233
|
+
* @description
|
|
234
|
+
* Creates an error handling transducer. The error handling transducer wraps a transducer and catches any errors thrown by the transducer with the catcher function. The catcher function is provided the error as well as the original item (before any processing by the transducer) for which the error was thrown. It is possible for either the transducer or the catcher to be asynchronous, however the reducing operation must support asynchronous execution. This library provides such implementations as [reduce](/docs/reduce) and [transform](/docs/transform).
|
|
235
|
+
*
|
|
236
|
+
* ```javascript [playground]
|
|
237
|
+
* const db = new Map()
|
|
238
|
+
* db.set('a', { id: 'a', name: 'George' })
|
|
239
|
+
* db.set('b', { id: 'b', name: 'Jane' })
|
|
240
|
+
* db.set('c', { id: 'c', name: 'Jill' })
|
|
241
|
+
* db.set('e', { id: 'e', name: 'Jim' })
|
|
242
|
+
*
|
|
243
|
+
* const userIds = ['a', 'b', 'c', 'd', 'e']
|
|
244
|
+
*
|
|
245
|
+
* transform(userIds, Transducer.tryCatch(compose([
|
|
246
|
+
* Transducer.map(async userId => {
|
|
247
|
+
* if (db.has(userId)) {
|
|
248
|
+
* return db.get(userId)
|
|
249
|
+
* }
|
|
250
|
+
* throw new Error(`user ${userId} not found`)
|
|
251
|
+
* }),
|
|
252
|
+
*
|
|
253
|
+
* Transducer.forEach(user => {
|
|
254
|
+
* console.log('Found', user.name)
|
|
255
|
+
* })
|
|
256
|
+
* ]), (error, userId) => {
|
|
257
|
+
* console.error(error)
|
|
258
|
+
* console.log('userId in catcher:', userId)
|
|
259
|
+
* // original userId for which the error was thrown is provided
|
|
260
|
+
* }), null)
|
|
261
|
+
* ```
|
|
262
|
+
|
|
185
263
|
*/
|
|
186
264
|
Transducer.tryCatch = function transducerTryCatch(transducerTryer, catcher) {
|
|
187
265
|
return curry3(reducerTryCatch, __, transducerTryer, catcher)
|
package/__.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export = FilteringAsyncIterator;
|
|
2
|
+
/**
|
|
3
|
+
* @name FilteringAsyncIterator
|
|
4
|
+
*
|
|
5
|
+
* @synopsis
|
|
6
|
+
* ```coffeescript [specscript]
|
|
7
|
+
* const filteringAsyncIterator = new FilteringAsyncIterator(
|
|
8
|
+
* asyncIterator AsyncIterator<T>,
|
|
9
|
+
* predicate T=>boolean,
|
|
10
|
+
* ) -> FilteringAsyncIterator<T>
|
|
11
|
+
*
|
|
12
|
+
* filteringAsyncIterator.next() -> { value: Promise, done: boolean }
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function FilteringAsyncIterator(asyncIterator: any, predicate: any): {
|
|
16
|
+
[x: number]: () => {
|
|
17
|
+
[x: number]: any;
|
|
18
|
+
isAsyncIteratorDone: boolean;
|
|
19
|
+
next(): Promise<{
|
|
20
|
+
value: any;
|
|
21
|
+
done: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
isAsyncIteratorDone: boolean;
|
|
25
|
+
next(): Promise<{
|
|
26
|
+
value: any;
|
|
27
|
+
done: boolean;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export = FilteringIterator;
|
|
2
|
+
/**
|
|
3
|
+
* @name FilteringIterator
|
|
4
|
+
*
|
|
5
|
+
* @synopsis
|
|
6
|
+
* ```coffeescript [specscript]
|
|
7
|
+
* FilteringIterator<
|
|
8
|
+
* T any,
|
|
9
|
+
* iterator Iterator<T>,
|
|
10
|
+
* predicate T=>boolean, # no async
|
|
11
|
+
* >(iterator, predicate) -> filteringIterator Iterator<T>
|
|
12
|
+
*
|
|
13
|
+
* filteringIterator.next() -> { value: T, done: boolean }
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @description
|
|
17
|
+
* Creates a filtering iterator, i.e. an iterator that filteres a source iterator by predicate.
|
|
18
|
+
*/
|
|
19
|
+
declare function FilteringIterator(iterator: any, predicate: any): {
|
|
20
|
+
[x: number]: () => {
|
|
21
|
+
[x: number]: any;
|
|
22
|
+
next(): any;
|
|
23
|
+
};
|
|
24
|
+
next(): any;
|
|
25
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export = FlatMappingAsyncIterator;
|
|
2
|
+
/**
|
|
3
|
+
* @name FlatMappingAsyncIterator
|
|
4
|
+
*
|
|
5
|
+
* @synopsis
|
|
6
|
+
* ```coffeescript [specscript]
|
|
7
|
+
* new FlatMappingAsyncIterator(
|
|
8
|
+
* asyncIterator AsyncIterator, flatMapper function,
|
|
9
|
+
* ) -> FlatMappingAsyncIterator AsyncIterator
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @execution concurrent
|
|
13
|
+
*
|
|
14
|
+
* @muxing
|
|
15
|
+
*/
|
|
16
|
+
declare function FlatMappingAsyncIterator(asyncIterator: any, flatMapper: any): {
|
|
17
|
+
[x: number]: () => any;
|
|
18
|
+
isAsyncIteratorDone: boolean;
|
|
19
|
+
toString(): string;
|
|
20
|
+
/**
|
|
21
|
+
* @name FlatMappingAsyncIterator.prototype.next
|
|
22
|
+
*
|
|
23
|
+
* @synopsis
|
|
24
|
+
* ```coffeescript [specscript]
|
|
25
|
+
* new FlatMappingAsyncIterator(
|
|
26
|
+
* asyncIterator AsyncIterator, flatMapper function,
|
|
27
|
+
* ).next() -> Promise<{ value, done }>
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
next(): Promise<{
|
|
31
|
+
value: any;
|
|
32
|
+
done: boolean;
|
|
33
|
+
}>;
|
|
34
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export = FlatMappingIterator;
|
|
2
|
+
/**
|
|
3
|
+
* @name FlatMappingIterator
|
|
4
|
+
*
|
|
5
|
+
* @synopsis
|
|
6
|
+
* ```coffeescript [specscript]
|
|
7
|
+
* FlatMappingIterator(
|
|
8
|
+
* iterator Iterator, flatMapper function,
|
|
9
|
+
* ) -> FlatMappingIterator { next, SymbolIterator }
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
declare function FlatMappingIterator(iterator: any, flatMapper: any): {
|
|
13
|
+
[x: number]: () => any;
|
|
14
|
+
next(): any;
|
|
15
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export = MappingAsyncIterator;
|
|
2
|
+
/**
|
|
3
|
+
* @name MappingAsyncIterator
|
|
4
|
+
*
|
|
5
|
+
* @synopsis
|
|
6
|
+
* ```coffeescript [specscript]
|
|
7
|
+
* mappingAsyncIterator = new MappingAsyncIterator(
|
|
8
|
+
* asyncIter AsyncIterator<T>,
|
|
9
|
+
* mapper T=>Promise|any,
|
|
10
|
+
* ) -> mappingAsyncIterator AsyncIterator
|
|
11
|
+
*
|
|
12
|
+
* mappingAsyncIterator.next() -> Promise<{ value: any, done: boolean }>
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function MappingAsyncIterator(asyncIterator: any, mapper: any): {
|
|
16
|
+
[x: number]: () => {
|
|
17
|
+
[x: number]: any;
|
|
18
|
+
next(): Promise<any>;
|
|
19
|
+
};
|
|
20
|
+
next(): Promise<any>;
|
|
21
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export = MappingIterator;
|
|
2
|
+
/**
|
|
3
|
+
* @name MappingIterator
|
|
4
|
+
*
|
|
5
|
+
* @synopsis
|
|
6
|
+
* ```coffeescript [specscript]
|
|
7
|
+
* MappingIterator<
|
|
8
|
+
* T any,
|
|
9
|
+
* iterator Iterator<T>,
|
|
10
|
+
* mapper T=>any,
|
|
11
|
+
* >(iterator, mapper) -> mappingIterator Object
|
|
12
|
+
*
|
|
13
|
+
* mappingIterator.next() -> nextIteration { value: any, done: boolean }
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @description
|
|
17
|
+
* Creates a mapping iterator, i.e. an iterator that applies a mapper to each item of a source iterator.
|
|
18
|
+
*
|
|
19
|
+
* Note: consuming the mapping iterator also consumes the source iterator.
|
|
20
|
+
*/
|
|
21
|
+
declare function MappingIterator(iterator: any, mapper: any): {
|
|
22
|
+
[x: number]: () => {
|
|
23
|
+
[x: number]: any;
|
|
24
|
+
toString(): string;
|
|
25
|
+
next(): any;
|
|
26
|
+
};
|
|
27
|
+
toString(): string;
|
|
28
|
+
next(): any;
|
|
29
|
+
};
|