CHANGELOG.md
May 15, 2026 ยท View on GitHub
11.2.0
-
Fix wrong typing for
R.equal,R.path,R.prop,R.propEq,R.prepend- Issue #803 -
Add
R.splitEveryStrict -
Add
R.mergeDeep -
Change
R.rangewhen start and end are the same to return array with one element instead of empty array. -
Fix wrong usage of non-curried methods in example snippets.
-
Migrate to
vitestfor TS testing
11.1.0
-
Add
R.filterMap- similar to Rubyfilter_map -
Add
R.mapChain- when inR.pipethere are severalR.mapone after the other, thenR.mapChaincan be used instead. -
Add
R.middle- equal toR.init+R.tail -
Add
R.random,R.shuffle,R.switcher,R.sum,R.delay- imported fromRambda -
Add index to
R.filter/R.rejectpredicate signiture -
Improve typing of
R.init,R.tail
11.0.1
- Add missing JS change for
R.includesandR.excludesmethods in11.0.0release.
11.0.0
-
Breaking change:
R.includesandR.excludesnow accept list as first argument and value to search as second argument. This makes it more useful when used withR.filterandR.reject. -
Rename
R.innerJointoR.intersectionWith -
Add
R.unionWith -
Add
R.exists -
Add
R.symmetricDifference -
Add
R.difference -
R.rangenow works similar to Ruby'sRange- both start and end values are inclusive. -
Add
R.rangeDescendingas nowR.rangeworks only in ascending order. -
R.range- it accepts one or two arguments. If one argument is passed, it is considered as end value, and start is 0. -
R.rangeDescending - it accepts one or two arguments. If one argument is passed, it is considered as start value, and end is 0.
-
Fix
R.filter(Boolean)to handle filter offalse, not only nullable values.
10.3.4
-
Fix wrong typing for
R.sortByDescending- Issue #797 -
Improve
R.mapParallelAsynctypings to allow optionalbatchSizeparameter. -
Change order of inputs in
R.mapPropObject -
Change REPL links in documentation
-
Remove
jsr.json
10.3.3
-
Fix wrong typing for
R.reject- Issue #779 -
Improve
R.pickto not allow non-existing keys as input.
10.3.2
- Fix issue with wrong order of inputs in
R.createObjectFromKeys- Issue #779
10.3.1
-
Fix issue with wrong order of inputs in
R.propEq- Issue #779 -
Fix issue with TypeScript definitions for
R.includes- Issue #781
10.3.0
-
Add
R.mapPropObject -
Add
R.duplicateBy -
Add
R.filterAsync -
Add
R.indexBy -
Restore
R.replaceAll -
Remove option for
R.mapAsyncto be called outside ofR.pipeAsync. This is done for consistency as all other methods follow this rule, i.e. they are all curried. -
Fix
R.pluckto work withoutR.pipe -
Remove option for
R.mapAsyncto be called outside ofR.pipeAsync. This is done for consistency as all other methods follow this rule, i.e. they are all curried. -
Fix
R.pluckto work withoutR.pipe
10.2.0
Add R.modifyPath
10.1.0
-
Add
R.assertTypeandR.convertToTypemethods -
Fix issue with exports in old Node.js versions - Discussion #768
-
Fix
denorelease as it was not possible for users to import version10.0.0
10.0.1
- Fix issue with
R.unwind/R.picktypings - Issue #766
10.0.0
This is major revamp of Rambda library:
-
R.pipeis the recommended method for TypeScript chaining. -
All methods should be useful to work inside
R.pipechain. If method doesn't have clear use case insideR.pipe, it is removed as part of this revamp. -
There will be only one way to use each method. For example,
R.addcan be used only withR.add(1)(2), i.e. it doesn't supportR.add(1, 2). This helps with testing and also with TypeScript definitions. This aligns with TypeScript focused approach of this library. -
Confusing methods are removed. For example,
R.condandR.ifElseare removed as their usage insideR.pipedmakes the whole chain less readable. Such logic should be part of your codebase, not part of external library. -
All methods that expect more than 1 input, will have to be called with
R.methodName(input1)(input2)orR.methodName(input1, input2)(input3). This is to make TypeScript definitions easier to maintain. -
Optimize many methods to better work in TypeScript context with
R.pipe. The focus was passing objects through theR.pipechain. -
Add
R.pipesupports up to 20 functions, i.e. chain can be 20 functions long. -
R.chainis renamed toR.flatMap -
R.comparatoris renamed toR.sortingFn -
Remove following methods:
-- Lenses - R.lens, R.lensProp, R.lensPath, R.view, R.set, R.over
-- T, F
-- add
-- addIndex, addIndexRight
-- always
-- ap
-- applySpec
-- applyTo
-- assoc, assocPath, dissoc, dissocPath
-- binary
-- bind
-- call
-- collectBy
-- compose
-- composeWith
-- cond
-- converge
-- curry
-- difference, differenceWith
-- divide, multiply, subtract
-- endsWith/startsWith
-- flip
-- forEachObjIndexed
-- fromPairs
-- gte, lte, lt, gt
-- identical
-- ifElse
-- insert
-- juxt
-- length
-- mapObjIndexed
-- mergeAll, mergeLeft, mergeDeepLeft, mergeDeepRight
-- move
-- partitionIndexed
-- pickAll
-- pickBy
-- repeat
-- splitWhen
-- toLower/toUpper
-- unapply
-- unnest
-- update
-- without
- Add following methods:
-- R.pipeAsync
-- R.addProp
-- R.createObjectFromKeys
-- R.mapAsync
-- R.mapParallelAsync
-- R.ascend/R.descend
-- R.shuffle
-- R.permutations
-- R.compact
-- R.rejectObject
-- R.findNth
-- R.combinations
-- R.sortByPath
-- R.sortByPathDescending
-- R.sortByDescending
-- R.flattenObject
-- R.addPropToObjects
- Rename following methods:
-- modifyItemAtIndex -> adjust
-- checkObjectWithSpec -> where
-- objectIncludes -> whereEq
-- modify -> modifyProp
-- chain -> flatMap
-- mapObjIndexed -> mapObject
_ Regarding using object as input with TypeScript in methods such as R.map/filter - this feature is no longer supported in TypeScript as it has multiple issues when using inside pipes. In JS, it still works as before. Following methods are affected:
-- R.map
-- R.mapIndexed
-- R.filter
-- R.reject
-
Regarding using string as path input in
R.omit,R.pickandR.pathwith TypeScript - now it require explicit definition of expected return type. -
Revert adding stopper logic in
R.reduce- https://github.com/selfrefactor/rambda/pull/630 -
Remove use of
Dictionarycustom interface and use more appropriateRecord<PropertyType, ...> -
Remove use of
Record<string, ...>in favour ofRecord<PropertyType, ...> -
Add TypeScript definition to handle common case of
R.filter(Boolean)that will turnArray<T | undefined>toArray<T>. -
Regarding using object with
R.forEachin TypeScript - this is no longer supported. Again, JS version still works with objects. -
head/last - empty array as input will return
undefined, butnever -
assocPath - stop supporting curring of type
(x)(y)(z) -
Stop support string inputs for some methods, since it was hard to correctly type them in TypeScript.
-- append/prepend
-
Change
R.rangeto work with descending order. -
Remove
rambda/immutableas import option as it is hard to support in the new context. -
Sync with typing of
@types/ramda:
-- allPass
-- anyPass
-- append
-- both
-- countBy
-- drop
-- dropLast
-- dropRepeatsBy
-- either
-- filter
-- forEach
-- keys
-- map
-- mergeAll
-- modify
-- modifyPath
-- omit
-- partition
-- pluck
-- prepend
-- propEq
-- where
-- whereAny
- Sync with typing of
remeda:
-- filter
-- reject
-- map
-- mapObject
-- toPairs
-- partition
-
Publish to JSR registry - https://jsr.io/@rambda/rambda
-
Replace Record
with Record -
Improve TypeScript definitions of:
-- objOf
-- pluck
-- mergeWith
-
Change
JestwithVitest. -
Remove
Babeldependency inRollupbuild setup. -
Revert adding stopper logic in
R.reduce- https://github.com/selfrefactor/rambda/pull/630
9.4.2
- Fix TS issue when
R.takeis used as part ofR.pipe.
Moving away from Ramda types which are problematic in this case:
const data = ['foo', 'bar', 'baz', 'qux']
const result = piped(
data,
filter(
x => x.length >= 2
),
takeLast(2),
)
9.4.1
-
Fix bug with
R.differenceWithwhen two arrays has same length - Issue #757 -
Allow path input to not be transformed when string numbers are there - Issue #750
9.4.0
-
Fix
denorelease -
Fix too strict
truecondition inR.ifElse- Issue #750 -
Change
R.groupBytypings to match@types/ramdatypings
9.3.0
-
Breaking change in relation to TS typings of
R.assoc,R.dissocandR.modify- https://github.com/ramda/types/pull/37 -
Add
R.isNotEmptyas it is new method inRamda -
Fix
R.head/R.lastTS definition - It returnsundefinedif array has length of 0. Before
9.2.1
- Broken
Denobuild - Issue #731
9.2.0
-
R.onceTS type definition miss to context argument and its type - Issue #728 -
Fix implementation of
R.unlessfunction - https://github.com/selfrefactor/rambda/pull/726
9.1.1
-
Faster R.equals with Object.is short circuit - https://github.com/selfrefactor/rambda/pull/725
-
Fix R.cond transform is unary - https://github.com/selfrefactor/rambda/issues/720
9.1.0
Add these methods
- insert
- insertAll
- lt
- lte
- isNotNil
- pickBy
- pathSatisfies
- swap
- mergeDeepLeft
9.0.1
- Fix bad TS typings, due to missing declaration - Issue #716
9.0.0
Breaking change in TS definitions of lenses as now they are synced to Ramda types.
-
Add
R.sortWith- Issue #707 -
Add
R.innerJoin,R.gt,R.gte,R.reduceBy,R.hasIn
8.6.0
-
Wrong typing for
R.dissocPath- Issue #709 -
Update build dependencies
8.5.0
-
Revert changes in
R.anyPassintroduced in8.4.0release. The reason is that the change was breaking the library older than5.2.0TypeScript. -
Wrong
R.partialTS definition - Issue #705 -
Add
R.dropRepeatsBy -
Add
R.empty -
Add
R.eqBy -
Add
R.forEachObjIndexed
8.4.0
-
Add
R.dissocPath -
Fix TS definitions of
R.head/R.lastand add missing handle of empty string -
Add
R.removeIndex- method was before only inRambdax, but now sinceR.dissocPathis using it, it is added to main library. -
Allow
R.omitto pass numbers as part of properties to omit, i.e.R.omit(['a', 1], {a: {1: 1, 2: 2}}) -
R.keys always returns strings - MR #700
-
Improve
R.prepend/R.appendtype interference - MR #699 -
Change
R.reduceTS definitions so index is always received - MR #696 -
Functions as a type guard in
R.anyPassTS definitions - MR #695 -
Fix R.append's curried type - MR #694
-
Fix cannot compare errors in
DenowithR.equals- Issue #704. -
Fix cannot compare
BigIntwithR.equals
8.3.0
Add the following methods:
- binary
- call
- collectBy
- comparator
- composeWith
8.2.0
Add the following methods:
- addIndex
- addIndexRight
- ap
- aperture
- applyTo
- ascend
- descend
8.1.0
-
Fix input order of TS definitions for
R.propEqmethod - Issue #688. The issue was due to 8.0.0 was shipped with TS definitions of7.5.0release. -
Add
R.differenceWithmethod - Issue #91
8.0.0
-
handle falsy values in merge methods - https://github.com/ramda/ramda/pull/3222
-
R.head/R.lastdon't returnundefinedfor non-empty arrays -
R.typesupports dates in TS definition -Rambdaalready did support dates in JS. -
Improve typings of
R.endsWith/startsWithwith regard tostringinput. - PR #622 -
Handle list as falsy value in
R.reduce- Ramda MR -
R.nopis removed - it will be moved toRambdaxasR.noop -
R.includesis no longer using string literal in TypeScript definitions
Reason for breaking change - synchronize with Ramda
0.29.0release:
- change order of
R.propEq- Ramda MR