fix(deps): update dependency immutable to v5
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
| immutable (source) | ^3.8.2 -> ^5.0.0 |
Release Notes
immutable-js/immutable-js (immutable)
v5.1.4
- Migrate some files to TS by @jdeniau in #2125
- Iterator.ts
- PairSorting.ts
- toJS.ts
- Math.ts
- Hash.ts
- Extract CollectionHelperMethods and convert to TS by @jdeniau in #2131
- Use npm trusted publishing only to avoid token stealing.
Documentation
- Fix/a11y issues by @lyannel in #2136
- Doc add Map.get signature update by @borracciaBlu in #2138
- fix(doc):minor-issues#2132 by @JayMeDotDot in #2133
- Fix algolia search by @jdeniau in #2135
- Typo in OrderedMap by @jdeniau in #2144
Internal
v5.1.3
TypeScript
Documentation
There has been a huge amount of changes in the documentation, mainly migrate from an autogenerated documentation from .d.ts file, to a proper documentation in markdown. The playground has been included on nearly all method examples. We added a page about browser extensions too: https://immutable-js.com/browser-extension/
Internal
- replace rimraf by a node script by @jdeniau in #2113
- remove warning for tseslint config by @jdeniau in #2114
- Use default tsconfig for tests by @jdeniau in #2055
- add tests for arrCopy by @jdeniau in #2120
v5.1.2
- Revert previous assertion as it introduced a regression #2102 by @giggo1604
- Merge should work with empty record #2103 by @jdeniau
v5.1.1
- Fix type copying
v5.1.0
- Add shuffle to list #2066 by @mazerty
- TypeScript: Better getIn
RetrievePath#2070 by @jdeniau - Fix #1915 "Converting a Seq to a list causes RangeError (max call size exceeded)" by @alexvictoor in #2038
- TypeScript: Fix proper typings for Seq.concat() #2040 by @alexvictoor
- Fix Uncaught "TypeError: keyPath.slice is not a function" for ArrayLike method #2065 by @jdeniau
Internal
- Upgrade typescript and typescript-eslint #2046 by @jdeniau
- Upgrade to rollup 4 #2049 by @jdeniau
- Start migrating codebase to TypeScript without any runtime change nor .d.ts change:
- add exception for code that should not happen in updateIn #2074 by @jdeniau
- Reformat Range.toString for readability #2075 by @Ustin.Vaskin
v5.0.3
- Fix List.VNode.removeAfter() / removeBefore() issue on some particular case #2030 by @alexvictoor
v5.0.2
- Fix wrong path for esm module after fix in 5.0.1
v5.0.1
- Fix circular dependency issue with ESM build by @iambumblehead in #2035 by @iambumblehead
v5.0.0
Breaking changes
To sum up, the big change in 5.0 is a Typescript change related to Map that is typed closer to the JS object. This is a huge change for TS users, but do not impact the runtime behavior. (see Improve TypeScript definition for Map for more details)
Other breaking changes are:
[BREAKING] Remove deprecated methods:
Released in 5.0.0-rc.1
-
Map.of('k', 'v'): useMap([ [ 'k', 'v' ] ])orMap({ k: 'v' }) -
Collection.isIterable: useisIterabledirectly -
Collection.isKeyed: useisKeyeddirectly -
Collection.isIndexed: useisIndexeddirectly -
Collection.isAssociative: useisAssociativedirectly -
Collection.isOrdered: useisOrdereddirectly
[BREAKING] OrdererMap and OrderedSet hashCode implementation has been fixed
Released in 5.0.0-rc.1
Fix issue implementation of hashCode for OrdererMap and OrderedSet where equal objects might not return the same hashCode.
Changed in #2005
[BREAKING] Range function needs at least two defined parameters
Released in 5.0.0-beta.5
Range with undefined would end in an infinite loop. Now, you need to define at least the start and end values.
If you need an infinite range, you can use Range(0, Infinity).
Changed in #1967 by @jdeniau
[Minor BC break] Remove default export
Released in 5.0.0-beta.1
Immutable does not export a default object containing all it's API anymore.
As a drawback, you can not immport Immutable directly:
- import Immutable from 'immutable';
+ import { List, Map } from 'immutable';
- const l = Immutable.List([Immutable.Map({ a: 'A' })]);
+ const l = List([Map({ a: 'A' })]);
If you want the non-recommanded, but shorter migration path, you can do this:
- import Immutable from 'immutable';
+ import * as Immutable from 'immutable';
const l = Immutable.List([Immutable.Map({ a: 'A' })]);
[TypeScript Break] Improve TypeScript definition for Map
Released in 5.0.0-beta.1
If you do use TypeScript, then this change does not impact you : no runtime change here. But if you use Map with TypeScript, this is a HUGE change ! Imagine the following code
const m = Map({ length: 3, 1: 'one' });
This was previously typed as Map<string, string | number>
and return type of m.get('length') or m.get('inexistant') was typed as string | number | undefined.
This made Map really unusable with TypeScript.
Now the Map is typed like this:
MapOf<{
length: number;
1: string;
}>;
and the return type of m.get('length') is typed as number.
The return of m.get('inexistant') throw the TypeScript error:
Argument of type '"inexistant"' is not assignable to parameter of type '1 | "length"
If you want to keep the old definition
This is a minor BC for TS users, so if you want to keep the old definition, you can declare you Map like this:
const m = Map<string, string | number>({ length: 3, 1: 'one' });
If you need to type the Map with a larger definition
You might want to declare a wider definition, you can type your Map like this:
type MyMapType = {
length: number;
1: string | null;
optionalProperty?: string;
};
const m = Map<MyMapType>({ length: 3, 1: 'one' });
Keep in mind that the MapOf will try to be consistant with the simple TypeScript object, so you can not do this:
Map({ a: 'a' }).set('b', 'b');
Map({ a: 'a' }).delete('a');
Like a simple object, it will only work if the type is forced:
Map<{ a: string; b?: string }>({ a: 'a' }).set('b', 'b'); // b is forced in type and optional
Map<{ a?: string }>({ a: 'a' }).delete('a'); // you can only delete an optional key
Are all Map methods implemented ?
For now, only get, getIn, set, update, delete, remove, toJS, toJSON methods are implemented. All other methods will fallback to the basic Map definition. Other method definition will be added later, but as some might be really complex, we prefer the progressive enhancement on the most used functions.
Fixes
- Fix type inference for first() and last() #2001 by @butchler
- Fix issue with empty list that is a singleton #2004 by @jdeniau
- Map and Set sort and sortBy return type #2013 by @jdeniau
Internal
- [Internal] Migrating TS type tests from dtslint to TSTyche #1988 and #1991 by @mrazauskas. Special thanks to @arnfaldur that migrated every type tests to tsd just before that.
- [internal] Upgrade to rollup 3.x #1965 by @jdeniau
- [internal] upgrade tooling (TS, eslint) and documentation packages: #1971, #1972, #1973, #1974, #1975, #1976, #1977, #1978, #1979, #1980, #1981
v4.3.7
v4.3.6
- Fix
Repeat(<value>).equals(undefined)incorrectly returning true #1994 by @butchler
v4.3.5
- Upgrade to TS 5.1 #1972 by @jdeniau
- Fix Set.fromKeys types with Map constructor in TS 5.0 #1971 by @jdeniau
- Fix Read the Docs link on readme #1970 by @joshding
v4.3.4
v4.3.3
- [typescript] manage to handle toJS circular reference. #1932 by @jdeniau
- [doc] Add install instructions for pnpm and Bun #1952 by @colinhacks and #1953 by @menglingyu659
v4.3.2
- [TypeScript] Fix isOrderedSet type #1948
v4.3.1
v4.3.0
- Introduce Comparator and PairSorting #1937 by @https://github.com/giancosta86
- [TypeScript] Fix fromJS declaration for greater compatibility #1936
v4.2.4
v4.2.3
- [TypeScript]
groupByreturn either aMapor anOrderedMap: make the type more precise than baseCollection#1924
v4.2.2
v4.2.1
- [Typescript] rollback some of the change on
toJSto avoir circular reference
v4.2.0
- [TypeScript] Better type for toJS #1917 by jdeniau
- [TS Minor Break] tests are ran with TS > 4.5 only. It was tested with TS > 2.1 previously, but we want to level up TS types with recent features. TS 4.5 has been released more than one year before this release. If it does break your implementation (it might not), you should probably consider upgrading to the latest TS version.
- Added a
partitionmethod to all containers #1916 by johnw42
v4.1.0
- Accept Symbol as Map key. #1859 by jdeniau
- Optimize contructors without arguments #1887 by marianoguerra
- Fix Flow removeIn types #1902 by nifgraup
- Fix bug in Record.equals when comparing against Map #1903 by jmtoung
v4.0.0
This release brings new functionality and many fixes.
- Key changes
- Note for users of v4.0.0-rc.12
- Breaking changes
- New
- Fixed
Key changes
- New members have joined the team
- The project has been relicensed as MIT
- Better TypeScript and Flow type definitions
- A brand-new documentation lives at immutable-js.com and can show multiple versions
- Behavior of
mergeandmergeDeephas changed -
Iterableis renamed to Collection - Records no longer extend from Collections
- All collection types now implement the ES6 iterable protocol
- New methods:
Diff of changed API (click to expand)
+ Collection.[Symbol.iterator]
+ Collection.toJSON
+ Collection.update
+ Collection.Indexed.[Symbol.iterator]
+ Collection.Indexed.toJSON
+ Collection.Indexed.update
+ Collection.Indexed.zipAll
+ Collection.Keyed.[Symbol.iterator]
+ Collection.Keyed.toJSON
+ Collection.Keyed.update
+ Collection.Set.[Symbol.iterator]
+ Collection.Set.toJSON
+ Collection.Set.update
- Collection.size
- Collection.Indexed.size
- Collection.Keyed.size
- Collection.Set.size
+ List.[Symbol.iterator]
+ List.toJSON
+ List.wasAltered
+ List.zipAll
- List.mergeDeep
- List.mergeDeepWith
- List.mergeWith
+ Map.[Symbol.iterator]
+ Map.deleteAll
+ Map.toJSON
+ Map.wasAltered
+ OrderedMap.[Symbol.iterator]
+ OrderedMap.deleteAll
+ OrderedMap.toJSON
+ OrderedMap.wasAltered
+ OrderedSet.[Symbol.iterator]
+ OrderedSet.toJSON
+ OrderedSet.update
+ OrderedSet.wasAltered
+ OrderedSet.zip
+ OrderedSet.zipAll
+ OrderedSet.zipWith
+ Record.[Symbol.iterator]
+ Record.asImmutable
+ Record.asMutable
+ Record.clear
+ Record.delete
+ Record.deleteIn
+ Record.merge
+ Record.mergeDeep
+ Record.mergeDeepIn
+ Record.mergeDeepWith
+ Record.mergeIn
+ Record.mergeWith
+ Record.set
+ Record.setIn
+ Record.toJSON
+ Record.update
+ Record.updateIn
+ Record.wasAltered
+ Record.withMutations
+ Record.Factory.displayName
- Record.butLast
- Record.concat
- Record.count
- Record.countBy
- Record.entries
- Record.entrySeq
- Record.every
- Record.filter
- Record.filterNot
- Record.find
- Record.findEntry
- Record.findKey
- Record.findLast
- Record.findLastEntry
- Record.findLastKey
- Record.first
- Record.flatMap
- Record.flatten
- Record.flip
- Record.forEach
- Record.groupBy
- Record.includes
- Record.isEmpty
- Record.isSubset
- Record.isSuperset
- Record.join
- Record.keyOf
- Record.keySeq
- Record.keys
- Record.last
- Record.lastKeyOf
- Record.map
- Record.mapEntries
- Record.mapKeys
- Record.max
- Record.maxBy
- Record.min
- Record.minBy
- Record.reduce
- Record.reduceRight
- Record.rest
- Record.reverse
- Record.skip
- Record.skipLast
- Record.skipUntil
- Record.skipWhile
- Record.slice
- Record.some
- Record.sort
- Record.sortBy
- Record.take
- Record.takeLast
- Record.takeUntil
- Record.takeWhile
- Record.toArray
- Record.toIndexedSeq
- Record.toKeyedSeq
- Record.toList
- Record.toMap
- Record.toOrderedMap
- Record.toOrderedSet
- Record.toSet
- Record.toSetSeq
- Record.toStack
- Record.valueSeq
- Record.values
+ Seq.[Symbol.iterator]
+ Seq.toJSON
+ Seq.update
+ Seq.Indexed.[Symbol.iterator]
+ Seq.Indexed.toJSON
+ Seq.Indexed.update
+ Seq.Indexed.zipAll
+ Seq.Keyed.[Symbol.iterator]
+ Seq.Keyed.toJSON
+ Seq.Keyed.update
+ Seq.Set.[Symbol.iterator]
+ Seq.Set.toJSON
+ Seq.Set.update
+ Set.[Symbol.iterator]
+ Set.toJSON
+ Set.update
+ Set.wasAltered
+ Stack.[Symbol.iterator]
+ Stack.toJSON
+ Stack.update
+ Stack.wasAltered
+ Stack.zipAll
+ ValueObject.equals
+ ValueObject.hashCode
- Iterable.*
- Iterable.Indexed.*
- Iterable.Keyed.*
- Iterable.Set.*
Note for users of v4.0.0-rc.12
There were mostly bugfixes and improvements since RC 12. Upgrading should be painless for most users.
However, there is one breaking change: The behavior of merge and mergeDeep has changed. See below for details.
BREAKING
merge()
-
No longer use value-equality within
merge()(#1391)This rectifies an inconsistent behavior between
x.merge(y)andx.mergeDeep(y)where merge would use===on leaf values to determine return-self optimizations, while mergeDeep would useis(). This improves consistency across the library and avoids a possible performance pitfall. -
No longer deeply coerce argument to merge() (#1339)
Previously, the argument provided to
merge()was deeply converted to Immutable collections viafromJS(). This was the only function in the library which callsfromJS()indirectly, and it was surprising and made it difficult to understand what the result ofmerge()would be. Now, the value provided tomerge()is only shallowly converted to an Immutable collection, similar to related methods in the library. This may change the behavior of your calls tomerge().
mergeDeep()
-
Replace incompatible collections when merging nested data (#1840)
It will no longer merge lists of tuples into maps. For more information see #1840 and the updated
mergeDeep()documentation. -
Concat Lists when merging deeply (#1344)
Previously, calling
map.mergeDeep()with a value containing aListwould replace the values in the original List. This has always been confusing, and does not properly treatListas a monoid. Now,List.mergeis simply an alias forList.concat, andmap.mergeDeep()will concatenate deeply-found lists instead of replacing them.
Seq
-
Remove IteratorSequence. Do not attempt to detect iterators in
Seq(). (#1589)Iterables can still be provided to
Seq(), and most Iterators are also Iterables, so this change should not affect the vast majority of uses. For more information, see PR #1589 -
Remove
Seq.of()(#1311, #1310)This method has been removed since it cannot be correctly typed. It's recommended to convert
Seq.of(1, 2, 3)toSeq([1, 2, 3]).
isImmutable()
-
isImmutable()now returns true for collections currently within awithMutations()call. (#1374)Previously,
isImmutable()did double-duty of both determining if a value was a Collection or Record from this library as well as if it was outside awithMutations()call. This latter case caused confusion and was rarely used.
toArray()
-
KeyedCollection.toArray() returns array of tuples. (#1340)
Previously, calling
toArray()on a keyed collection (inclMapandOrderedMap) would discard keys and return an Array of values. This has always been confusing, and differs fromArray.from(). Now, callingtoArray()on a keyed collection will return an Array of[key, value]tuples, matching the behavior ofArray.from().
concat()
-
list.concat()now has a slightly more efficient implementation andmap.concat()is an alias formap.merge(). (#1373)In rare cases, this may affect use of
map.concat()which expected slightly different behavior frommap.merge().
Collection, formerly Iterable
- The
Iterableclass has been renamed toCollection, andisIterable()has been renamed toisCollection(). Aliases with the existing names exist to make transitioning code easier.
Record
- Record is no longer an Immutable Collection type.
- Now
isCollection(myRecord)returnsfalseinstead oftrue. - The sequence API (such as
map,filter,forEach) no longer exist on Records. -
delete()andclear()no longer exist on Records.
- Now
Other breaking changes
-
Potentially Breaking: Improve hash speed and avoid collision for common values (#1629)
Causes some hash values to change, which could impact the order of iteration of values in some Maps (which are already advertised as unordered, but highlighting just to be safe)
-
Node buffers no longer considered value-equal (#1437)
-
Plain Objects and Arrays are no longer considered opaque values (#1369)
This changes the behavior of a few common methods with respect to plain Objects and Arrays where these were previously considered opaque to
merge()andsetIn(), they now are treated as collections and can be merged into and updated (persistently). This offers an exciting alternative to small Lists and Records. -
The "predicate" functions,
isCollection,isKeyed,isIndexed,isAssociativehave been moved fromIterable.to the top level exports. -
The
toJSON()method performs a shallow conversion (previously it was an alias fortoJS(), which remains a deep conversion). -
Some minor implementation details have changed, which may require updates to libraries which deeply integrate with Immutable.js's private APIs.
-
The Cursor API is officially deprecated. Use immutable-cursor instead.
-
Potentially Breaking: [TypeScript] Remove
Iterable<T>as tuple from Map constructor types (#1626)Typescript allowed constructing a Map with a list of List instances, assuming each was a key, value pair. While this runtime behavior still works, this type led to more issues than it solved, so it has been removed. (Note, this may break previous v4 rcs, but is not a change against v3)
New
- Update TypeScript and Flow definitions:
- The Flowtype and TypeScript type definitions have been completely rewritten with much higher quality and accuracy, taking advantage of the latest features from both tools.
- Simplified TypeScript definition files to support all UMD use cases (#1854)
- Support Typescript 3 (#1593)
- Support Typescript strictNullChecks (#1168)
- Flow types to be compatible with the latest version 0.160.0
- Enable flow strict (#1580)
-
Add "sideEffects: false" to package.json (#1661)
-
Use ES standard for iterator method reuse (#1867)
-
Generalize
fromJS()andSeq()to support Sets (#1865) -
Top level predicate functions (#1600)
New functions are exported from the
immutablemodule:isSeq(),isList(),isMap(),isOrderedMap(),isStack(),isSet(),isOrderedSet(), andisRecord(). -
Improve performance of toJS (#1581)
Cursory test is >10% faster than both v3.8.2 and v4.0.0-rc.7, and corrects the regression since v4.0.0-rc.9.
-
Added optional
notSetValueinfirst()andlast()(#1556) -
Make
isArrayLikecheck more precise to avoid false positives (#1520) -
map()for List, Map, and Set returns itself for no-ops (#1455) (5726bd1) -
Hash functions as objects, allowing functions as values in collections (#1485)
-
Functional API for
get(),set(), and more which support both Immutable.js collections and plain Objects and Arrays (#1369) -
Relicensed as MIT (#1320)
-
Support for Transducers! (ee9c68f1)
-
Add new method,
zipAll()(#1195) -
Bundle and distribute an "es module" so Webpack and Rollup can use tree-shaking for smaller builds (#1204)
-
Warn instead of throw when
getIn()has a bad path (668f2236) -
A new predicate function
isValueObject()helps to detect objects which implementequals()andhashCode(), and type definitions now define the interfaceValueObjectwhich you can implement in your own code to create objects which behave as values and can be keys in Maps or entries in Sets. -
Using
fromJS()with a "reviver" function now provides access to the key path to each translated value. (#1118)
Fixed
-
Fix issue with IE11 and missing Symbol.iterator (#1850)
-
Fix ordered set with map (#1663)
-
Do not modify iter during List.map and Map.map (#1649)
-
Fix ordered map delete all (#1777)
-
Hash symbols as objects (#1753)
-
Fix returning a Record in merge() when Record is empty (#1785)
-
Fix for RC~12: Records from different factories aren't equal (#1734)
-
"too much recursion" error when creating a Record type from an instance of another Record (#1690)
-
Fix glob for npm format script on Windows (#18)
-
Remove deprecated cursor API (#13)
-
Add missing es exports (#1740)
-
Support nulls in genTypeDefData.js (#185)
-
Support isPlainObj in IE11 and other esoteric parameters f3a6d5ce
-
Set.mapproduces valid underlying map (#1606) -
Support isPlainObj with
constructorkey (#1627) -
groupByno longer returns a mutable Map instance (#1602) -
Fix issue where refs can recursively collide, corrupting
.size(#1598) -
Throw error in
mergeWith()method if missing the requiredmergerfunction (#1543) -
Update
isPlainObj()to workaround Safari bug and allow cross-realm values (#1557) -
Fix missing "& T" to some methods in RecordInstance (#1464)
-
Make notSetValue optional for typed Records (#1461) (
a1029bb) -
Export type of RecordInstance (#1434)
-
Fix Record
sizecheck in merge() (#1521) -
Fix Map#concat being not defined (#1402)
-
getIn()no longer throws when encountering a missing path (#1361)
- Do not throw when printing value that cannot be coerced to primitive (#1334)
-
Do not throw from hasIn (#1319)
-
Long hash codes no longer cause an infinite loop (#1175)
-
slice()which should return an empty set could return a full set or vice versa (#1245, #1287) -
Ensure empty slices do not throw when iterated (#1220)
-
Error during equals check on Record with undefined or null (#1208)
-
Fix size of count() after filtering or flattening (#1171)
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- [ ] If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.
[!IMPORTANT]
Review skipped
Bot user detected.
To trigger a single review, invoke the
@coderabbitai reviewcommand.You can disable this status message by setting the
reviews.review_statustofalsein the CodeRabbit configuration file.
Comment @coderabbitai help to get the list of available commands and usage tips.
CodeAnt AI is reviewing your PR.
Thanks for using CodeAnt! 🎉
We're free for open-source projects. if you're enjoying it, help us grow by sharing.
Share on X · Reddit · LinkedIn
CodeAnt AI finished reviewing your PR.
CodeAnt AI is running Incremental review
Thanks for using CodeAnt! 🎉
We're free for open-source projects. if you're enjoying it, help us grow by sharing.
Share on X · Reddit · LinkedIn
CodeAnt AI Incremental review completed.