- Optimized
DataView.prototype.{ getFloat16, setFloat16 }
performance, #1379, thanks @LeviPesin - Dropped unneeded feature detection of non-standard
%TypedArray%.prototype.toSpliced
- Dropped possible re-usage of some non-standard / early stage features (like
Math.scale
) available on global - Some other minor improvements
- Compat data improvements:
RegExp.escape
marked as shipped from Safari 18.2Promise.try
marked as shipped from Safari 18.2Math.f16round
andDataView.prototype.{ getFloat16, setFloat16 }
marked as shipped from Safari 18.2Uint8Array
to / from base64 and hex proposal methods marked as shipped from Safari 18.2JSON.parse
source text access proposal features marked as shipped from FF135RegExp.escape
marked as shipped from FF134Promise.try
marked as shipped from FF134Symbol.dispose
,Symbol.asyncDispose
andIterator.prototype[@@dispose]
marked as shipped from FF134- Fixed NodeJS version where
URL.parse
was added - 22.1 instead of 22.0 - Added Deno 2.1 compat data mapping
- Added Electron 35 compat data mapping
- Updated Opera 115+ compat data mapping
- Added Opera Android 86 and 87 compat data mapping
- Changes v3.38.1...v3.39.0
Iterator
helpers proposal:- Built-ins:
Iterator
Iterator.from
Iterator.prototype.drop
Iterator.prototype.every
Iterator.prototype.filter
Iterator.prototype.find
Iterator.prototype.flatMap
Iterator.prototype.forEach
Iterator.prototype.map
Iterator.prototype.reduce
Iterator.prototype.some
Iterator.prototype.take
Iterator.prototype.toArray
Iterator.prototype[@@toStringTag]
- Moved to stable ES, October 2024 TC39 meeting
- Added
es.
namespace modules,/es/
and/stable/
namespaces entries
- Built-ins:
Promise.try
:- Built-ins:
Promise.try
- Moved to stable ES, October 2024 TC39 meeting
- Added
es.
namespace module,/es/
and/stable/
namespaces entries - Fixed
/actual|full/promise/try
entries for the callback arguments support
- Built-ins:
Math.sumPrecise
proposal:- Built-ins:
Math.sumPrecise
- Moved to stage 3, October 2024 TC39 meeting
- Added
/actual/
namespace entries, unconditional forced replacement changed to feature detection
- Built-ins:
- Added
Iterator
sequencing stage 2.7 proposal:- Added built-ins:
Iterator.concat
- Added built-ins:
Map
upsert stage 2 proposal:- Updated to the new API following the October 2024 TC39 meeting
- Added built-ins:
Map.prototype.getOrInsert
Map.prototype.getOrInsertComputed
WeakMap.prototype.getOrInsert
WeakMap.prototype.getOrInsertComputed
- Extractors proposal moved to stage 2, October 2024 TC39 meeting
- Usage of
@@species
pattern removed from%TypedArray%
andArrayBuffer
methods, tc39/ecma262/3450:- Built-ins:
%TypedArray%.prototype.filter
%TypedArray%.prototype.filterReject
%TypedArray%.prototype.map
%TypedArray%.prototype.slice
%TypedArray%.prototype.subarray
ArrayBuffer.prototype.slice
- Built-ins:
- Some other minor improvements
- Compat data improvements:
Uint8Array
to / from base64 and hex proposal methods marked as shipped from FF133- Added NodeJS 23.0 compat data mapping
self
descriptor is fixed in Deno 1.46.0- Added Deno 1.46 and 2.0 compat data mapping
Iterator
helpers proposal methods marked as shipped from Bun 1.1.31- Added Electron 34 and updated Electron 33 compat data mapping
- Added Opera Android 85 compat data mapping
- Added Oculus Quest Browser 35 compat data mapping
- Changes v3.38.0...v3.38.1
- Fixed some cases of
URLSearchParams
percent decoding, #1357, #1361, thanks @slowcheetah - Some stylistic changes and minor optimizations
- Compat data improvements:
Iterator
helpers proposal methods marked as shipped from FF131Math.f16round
andDataView.prototype.{ getFloat16, setFloat16 }
marked as shipped from Bun 1.1.23RegExp.escape
marked as shipped from Bun 1.1.22Promise.try
marked as shipped from Bun 1.1.22Uint8Array
to / from base64 and hex proposal methods marked as shipped from Bun 1.1.22- Added Hermes 0.13 compat data, similar to React Native 0.75 Hermes
- Added Opera Android 84 compat data mapping
- Changes v3.37.1...v3.38.0
RegExp.escape
proposal:- Built-ins:
RegExp.escape
- Moved to stage 3, June 2024 and July 2024 TC39 meetings
- Updated the way of escaping, regex-escaping/77
- Throw an error on non-strings, regex-escaping/58
- Added
/actual/
namespace entries, unconditional forced replacement changed to feature detection
- Built-ins:
Promise.try
proposal:- Built-ins:
Promise.try
- Moved to stage 3, June 2024 TC39 meeting
- Added
/actual/
namespace entries, unconditional forced replacement changed to feature detection
- Built-ins:
Uint8Array
to / from base64 and hex stage 3 proposal:- Built-ins:
Uint8Array.fromBase64
Uint8Array.fromHex
Uint8Array.prototype.setFromBase64
Uint8Array.prototype.setFromHex
Uint8Array.prototype.toBase64
Uint8Array.prototype.toHex
- Added
Uint8Array.prototype.{ setFromBase64, setFromHex }
methods - Added
Uint8Array.fromBase64
andUint8Array.prototype.setFromBase64
lastChunkHandling
option, proposal-arraybuffer-base64/33 - Added
Uint8Array.prototype.toBase64
omitPadding
option, proposal-arraybuffer-base64/60 - Added throwing a
TypeError
on arrays backed by detached buffers - Unconditional forced replacement changed to feature detection
- Built-ins:
- Fixed
RegExp
named capture groups polyfill in combination with non-capturing groups, #1352, thanks @Ulop - Improved some cases of environment detection
- Uses
process.getBuiltinModule
for getting built-in NodeJS modules where it's available - Uses
https
instead ofhttp
inURL
constructor feature detection to avoid extra notifications from some overly vigilant security scanners, #1345 - Some minor optimizations
- Updated
browserslist
incore-js-compat
dependencies that fixes an upstream issue with incorrect interpretation of somebrowserslist
queries, #1344, browserslist/829, browserslist/836 - Compat data improvements:
- Added Safari 18.0 compat data:
- Fixed
Object.groupBy
andMap.groupBy
to work for non-objects - Fixed throwing a
RangeError
ifSet
methods are called on an object with negative size property - Fixed
Set.prototype.symmetricDifference
to callthis.has
in each iteration - Fixed
Array.fromAsync
to not call theArray
constructor twice - Added
URL.parse
- Fixed
Math.f16round
andDataView.prototype.{ getFloat16, setFloat16 }
marked as shipped from FF129Symbol.asyncDispose
added and marked as supported from V8 ~ Chromium 127Promise.try
added and marked as supported from V8 ~ Chromium 128- Added Deno 1.44 and 1.45 compat data mapping
self
descriptor is broken in Deno 1.45.3 (again)- Added Electron 32 and 33 compat data mapping
- Added Opera Android 83 compat data mapping
- Added Samsung Internet 27 compat data mapping
- Added Oculus Quest Browser 34 compat data mapping
- Added Safari 18.0 compat data:
- Changes v3.37.0...v3.37.1
- Fixed
URL.parse
feature detection for some specific cases - Compat data improvements:
Set
methods proposal added and marked as supported from FF 127Symbol.dispose
added and marked as supported from V8 ~ Chromium 125Math.f16round
andDataView.prototype.{ getFloat16, setFloat16 }
added and marked as supported from Deno 1.43URL.parse
added and marked as supported from Chromium 126URL.parse
added and marked as supported from NodeJS 22.0URL.parse
added and marked as supported from Deno 1.43- Added Rhino 1.7.15 compat data, many features marked as supported
- Added NodeJS 22.0 compat data mapping
- Added Deno 1.43 compat data mapping
- Added Electron 31 compat data mapping
- Updated Opera Android 82 compat data mapping
- Added Samsung Internet 26 compat data mapping
- Added Oculus Quest Browser 33 compat data mapping
- Changes v3.36.1...v3.37.0
- New
Set
methods proposal:- Built-ins:
Set.prototype.intersection
Set.prototype.union
Set.prototype.difference
Set.prototype.symmetricDifference
Set.prototype.isSubsetOf
Set.prototype.isSupersetOf
Set.prototype.isDisjointFrom
- Moved to stable ES, April 2024 TC39 meeting
- Added
es.
namespace modules,/es/
and/stable/
namespaces entries
- Built-ins:
- Explicit Resource Management stage 3 proposal:
- Some minor updates like explicit-resource-management/217
- Added
Math.sumPrecise
stage 2.7 proposal:- Built-ins:
Math.sumPrecise
- Built-ins:
Promise.try
proposal:- Built-ins:
Promise.try
- Added optional arguments support, promise-try/16
- Moved to stage 2.7, April 2024 TC39 meeting
- Built-ins:
RegExp.escape
stage 2 proposal:- Moved to hex-escape semantics, regex-escaping/67
- It's not the final change of the way of escaping, waiting for regex-escaping/77 soon
- Moved to hex-escape semantics, regex-escaping/67
- Pattern matching stage 1 proposal:
- Built-ins:
Symbol.customMatcher
- Once again, the used well-known symbol was renamed
- Added new entries for that
- Built-ins:
- Added Extractors stage 1 proposal:
- Built-ins:
Symbol.customMatcher
- Since the
Symbol.customMatcher
well-known symbol from the pattern matching proposal is also used in the exactors proposal, added an entry also for this proposal
- Built-ins:
- Added
URL.parse
, url/825 - Engines bugs fixes:
- Compat data improvements:
URL.parse
added and marked as supported from FF 126URL.parse
added and marked as supported from Bun 1.1.4URL.canParse
fixed and marked as supported from Bun 1.1.0- New
Set
methods fixed in JavaScriptCore and marked as supported from Bun 1.1.1 - Added Opera Android 82 compat data mapping
- Changes v3.36.0...v3.36.1
- Fixed some validation cases in
Object.setPrototypeOf
, #1329, thanks @minseok-choe - Fixed the order of validations in
Array.from
, #1331, thanks @minseok-choe - Added a fix of Bun
queueMicrotask
arity - Added a fix of Bun
URL.canParse
arity - Added a fix of Bun
SuppressedError
extra arguments support and arity - Compat data improvements:
value
argument ofURLSearchParams.prototype.{ has, delete }
marked as supported from Bun 1.0.31- Added React Native 0.74 Hermes compat data,
Array.prototype.{ toSpliced, toReversed, with }
andatob
marked as supported - Added Deno 1.41.3 compat data mapping
- Added Opera Android 81 compat data mapping
- Added Samsung Internet 25 compat data mapping
- Added Oculus Quest Browser 32 compat data mapping
- Updated Electron 30 compat data mapping
ArrayBuffer.prototype.transfer
and friends proposal:- Built-ins:
ArrayBuffer.prototype.detached
ArrayBuffer.prototype.transfer
ArrayBuffer.prototype.transferToFixedLength
- Moved to stable ES, Febrary 2024 TC39 meeting
- Added
es.
namespace modules,/es/
and/stable/
namespaces entries
- Built-ins:
Uint8Array
to / from base64 and hex proposal:- Methods:
Uint8Array.fromBase64
Uint8Array.fromHex
Uint8Array.prototype.toBase64
Uint8Array.prototype.toHex
- Moved to stage 3, Febrary 2024 TC39 meeting
- Added
/actual/
namespace entries - Skipped adding new methods of writing to existing arrays to clarification some moments
- Methods:
Promise.try
proposal has been resurrected and moved to stage 2, Febrary 2024 TC39 meeting- Added an entry point for the new TC39 proposals stage -
core-js/stage/2.7
- still empty - Fixed regression in
Set.prototype.intersection
feature detection - Fixed a missed check in
Array.prototype.{ indexOf, lastIndexOf, includes }
, #1325, thanks @minseok-choe - Fixed a missed check in
Array.prototype.{ reduce, reduceRight }
, #1327, thanks @minseok-choe - Fixed
Array.from
and some other methods with proxy targets, #1322, thanks @minseok-choe - Fixed dependencies loading for modules from
ArrayBuffer.prototype.transfer
and friends proposal in some specific cases in IE10- - Dropped context workaround from collection static methods entries since with current methods semantic it's no longer required
- Added instance methods polyfills to entries of collections static methods that produce collection instances
- Added missed
Date.prototype.toJSON
toJSON.stringify
entries dependencies - Added debugging info in some missed cases
- Compat data improvements:
{ Map, Object }.groupBy
,Promise.withResolvers
,ArrayBuffer.prototype.transfer
and friends marked as supported from Safari 17.4- New
Set
methods fixed and marked as supported from V8 ~ Chrome 123 - Added Deno 1.40 compat data mapping
Symbol.metadata
marked as supported from Deno 1.40.4- Updated Electron 30 compat data mapping
- Fixed internal
ToLength
operation with bigints, #1318 - Removed significant redundant code from
String.prototype.split
polyfill - Fixed setting names of methods with symbol keys in some old engines
- Minor fix of prototype methods export logic in the pure version
- Compat data improvements:
Iterator
helpers proposal methods marked as supported from V8 ~ Chrome 122- Note that V8 ~ Chrome 122 add
Set
methods, but they have a bug similar to Safari self
marked as fixed from Bun 1.0.22SuppressedError
andSymbol.{ dispose, asyncDispose }
marked as supported from Bun 1.0.23- Added Oculus Quest Browser 31 compat data mapping
- Updated Electron 29 and added Electron 30 compat data mapping
{ Map, Set, WeakMap, WeakSet }.{ from, of }
became non-generic, following this and some other notes. Now they can be invoked withoutthis
, but no longer return subclass instances- Fixed handling some cases of non-enumerable symbol keys from
Symbol
polyfill - Removed unneeded NodeJS domains-related logic from
queueMicrotask
polyfill - Fixed subclassing of wrapped
ArrayBuffer
- Refactoring, many different minor optimizations
- Compat data improvements:
Array.fromAsync
marked as supported from V8 ~ Chrome 121- It seems that the ancient
Array.prototype.push
bug is fixed in V8 ~ Chrome 122 (Hallelujah!) ArrayBuffer.prototype.transfer
and friends proposal features marked as supported from FF 122 and Bun 1.0.19Object.groupBy
andMap.groupBy
marked as supported from Bun 1.0.19- Since
Iterator
helpers proposal methods are still not disabled in Deno, the web compatibility issue why it was disabled in Chromium makes no sense for Deno and fixed in the spec, they marked as supported from Deno 1.37 - Added Opera Android 80 and updated Opera Android 79 compat data mapping
- Added Samsung Internet 24 compat data mapping
Array
grouping proposal:- Methods:
Object.groupBy
Map.groupBy
- Moved to stable ES, November 2023 TC39 meeting
- Added
es.
namespace modules,/es/
and/stable/
namespaces entries
- Methods:
Promise.withResolvers
proposal:- Method:
Promise.withResolvers
- Moved to stable ES, November 2023 TC39 meeting
- Added
es.
namespace module,/es/
and/stable/
namespaces entries
- Method:
- Fixed a web incompatibility issue of
Iterator
helpers proposal, proposal-iterator-helpers/287 and some following changes, November 2023 TC39 meeting - Added
Uint8Array
to / from base64 and hex stage 2 proposal:- Methods:
Uint8Array.fromBase64
Uint8Array.fromHex
Uint8Array.prototype.toBase64
Uint8Array.prototype.toHex
- Methods:
- Relaxed some specific cases of
Number.fromString
validation before clarification of proposal-number-fromstring/24 - Fixed
@@toStringTag
property descriptors on DOM collections, #1312 - Fixed the order of arguments validation in
Array
iteration methods, #1313 - Some minor
atob
/btoa
improvements - Compat data improvements:
Promise.withResolvers
marked as shipped from FF121
- Fixed an issue getting the global object on Duktape, #1303
- Avoid sharing internal
[[DedentMap]]
fromString.dedent
proposal betweencore-js
instances before stabilization of the proposal - Some internal untangling
- Compat data improvements:
- Added Deno 1.38 compat data mapping
Array.fromAsync
marked as supported from Deno 1.38Symbol.{ dispose, asyncDispose }
marked as supported from Deno 1.38- Added Opera Android 79 compat data mapping
- Added Oculus Quest Browser 30 compat data mapping
- Updated Electron 28 and 29 compat data mapping
- Simplified
structuredClone
polyfill, avoided second tree pass in cases of transferring - Added support of
SuppressedError
tostructuredClone
polyfill - Removed unspecified unnecessary
ArrayBuffer
andDataView
dependencies ofstructuredClone
lack of which could cause errors in some entries in IE10- - Fixed handling of fractional number part in
Number.fromString
- Compat data improvements:
URL.canParse
marked as supported from Chromium 120- Updated Opera Android 78 compat data mapping
- Added Electron 29 compat data mapping
- Added one more workaround of possible error with
Symbol
polyfill on global object, #1289 - Directly specified
type: commonjs
inpackage.json
of all packages to avoid potential breakage in future Node versions, see this issue - Prevented potential issue with lack of some dependencies after automatic optimization polyfills of some methods in the pure version
- Some minor internal fixes and optimizations
- Compat data improvements:
String.prototype.{ isWellFormed, toWellFormed }
marked as supported from FF119- Added React Native 0.73 Hermes compat data, mainly fixes of some issues
- Added NodeJS 21.0 compat data mapping
- Re-introduced
RegExp
escaping stage 2 proposal, September 2023 TC39 meeting:- Added
RegExp.escape
method with the new set of symbols for escaping - Some years ago, it was presented in
core-js
, but it was removed after rejecting the old version of this proposal
- Added
- Added
ArrayBuffer.prototype.{ transfer, transferToFixedLength }
and support transferring ofArrayBuffer
s viastructuredClone
to engines withMessageChannel
- Optimized
Math.f16round
polyfill - Fixed some conversion cases of
Math.f16round
andDataView.prototype.{ getFloat16, setFloat16 }
- Fully forced polyfilling of the TC39
Observable
proposal because of incompatibility with the new WHATWGObservable
proposal - Added an extra workaround of errors with exotic environment objects in
Symbol
polyfill, #1289 - Some minor fixes and stylistic changes
- Compat data improvements:
- V8 unshipped
Iterator
helpers because of some Web compatibility issues Promise.withResolvers
marked as supported from V8 ~ Chrome 119Array
grouping proposal features marked as supported from FF119value
argument ofURLSearchParams.prototype.{ has, delete }
marked as properly supported from V8 ~ Chrome 118URL.canParse
andURLSearchParams.prototype.size
marked as supported from Bun 1.0.2- Added Deno 1.37 compat data mapping
- Added Electron 28 compat data mapping
- Added Opera Android 78 compat data mapping
- V8 unshipped
- Fixed
structuredClone
feature detection[email protected]
bug, #1288 - Added a workaround of old WebKit +
eval
bug, #1287 - Compat data improvements:
- Added Samsung Internet 23 compat data mapping
- Added Quest Browser 29 compat data mapping
- Fixed some cases of IEEE754 rounding, #1279, thanks @petamoriken
- Prevented injection
process
polyfill tocore-js
via some bundlers oresm.sh
, #1277 - Some minor fixes and stylistic changes
- Compat data improvements:
Promise.withResolvers
marked as supported from Bun 0.7.1- Added Opera Android 77 compat data mapping
- Updated Electron 27 compat data mapping
Array
grouping proposal, July 2023 TC39 meeting updates:- Moved back to stage 3
- Added
/actual/
namespaces entries, unconditional forced replacement changed to feature detection
Promise.withResolvers
proposal, July 2023 TC39 meeting updates:- Moved to stage 3
- Added
/actual/
namespaces entries, unconditional forced replacement changed to feature detection
Set
methods stage 3 proposal, July 2023 TC39 meeting updates:- Throw on negative
Set
sizes, proposal-set-methods/88 - Removed
IsCallable
check inGetKeysIterator
, proposal-set-methods/101
- Throw on negative
- Iterator Helpers stage 3 proposal:
- Avoid creating observable
String
wrapper objects, July 2023 TC39 meeting update, proposal-iterator-helpers/281 Iterator
is not constructible from the active function object (works as an abstract class)
- Avoid creating observable
- Async explicit resource management:
- Moved back into the initial proposal -> moved to stage 3, proposal-explicit-resource-management/154
- Added
/actual/
namespace entries, unconditional forced replacement changed to feature detection - Ignore return value of
[@@dispose]()
method when hint isasync-dispose
, proposal-explicit-resource-management/180 - Added ticks for empty resources, proposal-explicit-resource-management/163
- Added some methods from
Float16Array
stage 3 proposal:- There are some reason why I don't want to add
Float16Array
right now, however, make sense to add some methods from this proposal. - Methods:
Math.f16round
DataView.prototype.getFloat16
DataView.prototype.setFloat16
- There are some reason why I don't want to add
- Added
DataView
get / setUint8Clamped
methods stage 1 proposal:- Methods:
DataView.prototype.getUint8Clamped
DataView.prototype.setUint8Clamped
- Methods:
- Used strict mode in some missed cases, #1269
- Fixed a Chromium 117 bug in
value
argument ofURLSearchParams.prototype.{ has, delete }
- Fixed early WebKit ~ Safari 17.0 beta
Set
methods implementation by the actual spec - Fixed incorrect
Symbol.{ dispose, asyncDispose }
descriptors from NodeJS 20.4 / transpilers helpers / userland code - Fixed forced polyfilling of some iterator helpers that should return wrapped iterator in the pure version
- Fixed and exposed
AsyncIteratorPrototype
core-js/configurator
option, #1268 - Compat data improvements:
- Sync
Iterator
helpers proposal features marked as supported from V8 ~ Chrome 117 Array
grouping proposal features marked as supported from V8 ~ Chrome 117- Mark
Symbol.{ dispose, asyncDispose }
as supported from NodeJS 20.5.0 (as mentioned above, NodeJS 20.4.0 add it, but with incorrect descriptors) - Added Electron 27 compat data mapping
- Sync
- Fixed a
structuredClone
bug with cloning views of transferred buffers, #1265 - Fixed the order of arguments validation in
DataView
methods - Allowed cloning of
Float16Array
instructuredClone
- Compat data improvements:
Set
methods proposal marked as supported from Safari 17.0- New
URL
features:URL.canParse
,URLSearchParams.prototype.size
andvalue
argument ofURLSearchParams.prototype.{ has, delete }
marked as supported from Safari 17.0 value
argument ofURLSearchParams.prototype.{ has, delete }
marked as supported from Deno 1.35AggregateError
and well-formedJSON.stringify
marked as supported React Native 0.72 Hermes- Added Deno 1.35 compat data mapping
- Added Quest Browser 28 compat data mapping
- Added missing NodeJS 12.16-12.22 compat data mapping
- Updated Opera Android 76 compat data mapping
- Well-formed unicode strings proposal:
- Methods:
String.prototype.isWellFormed
methodString.prototype.toWellFormed
method
- Moved to stable ES, May 2023 TC39 meeting
- Added
es.
namespace modules,/es/
and/stable/
namespaces entries
- Methods:
Array
grouping proposal, May 2023 TC39 meeting updates:- Because of the web compat issue, moved from prototype to static methods. Added:
Object.groupBy
methodMap.groupBy
method (with the actual semantic - with a minor difference it was present in the collections methods stage 1 proposal)
- Demoted to stage 2
- Because of the web compat issue, moved from prototype to static methods. Added:
- Decorator Metadata proposal, May 2023 TC39 meeting updates:
- Moved to stage 3
- Added
Function.prototype[Symbol.metadata]
(=== null
) - Added
/actual/
entries
- Iterator Helpers stage 3 proposal:
- Changed
Symbol.iterator
fallback from callable check toundefined
/null
check, May 2023 TC39 meeting, proposal-iterator-helpers/272 - Removed
IsCallable
check onNextMethod
, deferring errors toCall
site, May 2023 TC39 meeting, proposal-iterator-helpers/274
- Changed
- Added
Promise.withResolvers
stage 2 proposal:Promise.withResolvers
method
Symbol
predicates stage 2 proposal:- The methods renamed to end with
Symbol
, May 2023 TC39 meeting:Symbol.isRegistered
->Symbol.isRegisteredSymbol
methodSymbol.isWellKnown
->Symbol.isWellKnownSymbol
method
- The methods renamed to end with
- Added
value
argument ofURLSearchParams.prototype.{ has, delete }
, url/735 - Fixed some cases of increasing buffer size in
ArrayBuffer.prototype.{ transfer, transferToFixedLength }
polyfills - Fixed awaiting async
AsyncDisposableStack.prototype.adopt
callback, #1258 - Fixed
URLSearchParams#size
in ES3 engines (IE8-) - Added a workaround in
Object.{ entries, values }
for some IE versions bug with invisible integer keys onnull
-prototype objects - Added TypeScript definitions to
core-js-compat
, #1235, thanks @susnux - Compat data improvements:
Set.prototype.difference
that was missed in Bun because of a bug added in 0.6.0Array.prototype.{ group, groupToMap }
marked as no longer supported in WebKit runtimes because of the mentioned above web compat issue. For example, it's disabled from Bun 0.6.2- Methods from the change
Array
by copy proposal marked as supported from FF115 Array.fromAsync
marked as supported from FF115URL.canParse
marked as supported from FF115value
argument ofURLSearchParams.prototype.{ has, delete }
marked as supported from NodeJS 20.2.0 and FF115- Added Deno 1.34 compat data mapping
- Added Electron 26 compat data mapping
- Added Samsung Internet 22 compat data mapping
- Added Opera Android 75 and 76 compat data mapping
- Added Quest Browser 27 compat data mapping
- Added a fix for a NodeJS 20.0.0 bug with cloning
File
viastructuredClone
- Added protection from Terser unsafe
String
optimization, #1242 - Added a workaround for getting proper global object in Figma plugins, #1231
- Compat data improvements:
- Added NodeJS 20.0 compat data mapping
- Added Deno 1.33 compat data mapping
URL.canParse
marked as supported (fixed) from NodeJS 20.1.0 and Deno 1.33.2
- Added a fix for a NodeJS 19.9.0
URL.canParse
bug - Compat data improvements:
JSON.parse
source text access proposal features marked as supported from V8 ~ Chrome 114ArrayBuffer.prototype.transfer
and friends proposal features marked as supported from V8 ~ Chrome 114URLSearchParams.prototype.size
marked as supported from V8 ~ Chrome 113
- Added
URL.canParse
method, url/763 Set
methods proposal:- Removed sort from
Set.prototype.intersection
, March 2023 TC39 meeting, proposal-set-methods/94
- Removed sort from
- Iterator Helpers proposals (sync, async):
- Validate arguments before opening iterator, March 2023 TC39 meeting, proposal-iterator-helpers/265
- Explicit Resource Management proposals (sync, async):
(Async)DisposableStack.prototype.move
marks the original stack as disposed, #1226- Some simplifications like proposal-explicit-resource-management/150
Iterator.range
proposal:- Moved to Stage 2, March 2023 TC39 meeting
- Decorator Metadata proposal:
- Returned to usage
Symbol.metadata
, March 2023 TC39 meeting, proposal-decorator-metadata/12
- Returned to usage
- Compat data improvements:
URLSearchParams.prototype.size
marked as supported from FF112, NodeJS 19.8 and Deno 1.32- Added Safari 16.4 compat data
- Added Deno 1.32 compat data mapping
- Added Electron 25 and updated 24 compat data mapping
- Added Samsung Internet 21 compat data mapping
- Added Quest Browser 26 compat data mapping
- Updated Opera Android 74 compat data
- Fixed dependencies of some entries
- Fixed
ToString
conversion / built-ins nature of some accessors String.prototype.{ isWellFormed, toWellFormed }
marked as supported from V8 ~ Chrome 111- Added Opera Android 74 compat data mapping
- Added
URLSearchParams.prototype.size
getter, url/734 - Allowed cloning resizable
ArrayBuffer
s in thestructuredClone
polyfill - Fixed wrong export in
/(stable|actual|full)/instance/unshift
entries, #1207 - Compat data improvements:
Set
methods proposal marked as supported from Bun 0.5.7String.prototype.toWellFormed
marked as fixed from Bun 0.5.7- Added Deno 1.31 compat data mapping
I highly recommend reading this: So, what's next?
- Change
Array
by copy proposal:- Methods:
Array.prototype.toReversed
Array.prototype.toSorted
Array.prototype.toSpliced
Array.prototype.with
%TypedArray%.prototype.toReversed
%TypedArray%.prototype.toSorted
%TypedArray%.prototype.with
- Moved to stable ES, January 2023 TC39 meeting
- Added
es.
namespace modules,/es/
and/stable/
namespaces entries
- Methods:
- Added
JSON.parse
source text access Stage 3 proposal- Methods:
JSON.parse
patched for supportsource
inreviver
function argumentsJSON.rawJSON
JSON.isRawJSON
JSON.stringify
patched for supportJSON.rawJSON
- Methods:
- Added
ArrayBuffer.prototype.transfer
and friends Stage 3 proposal:- Built-ins:
ArrayBuffer.prototype.detached
ArrayBuffer.prototype.transfer
(only in runtimes with nativestructuredClone
withArrayBuffer
transfer support)ArrayBuffer.prototype.transferToFixedLength
(only in runtimes with nativestructuredClone
withArrayBuffer
transfer support)
- In backwards, in runtimes with native
ArrayBuffer.prototype.transfer
, but without properstructuredClone
, addedArrayBuffer
transfer support tostructuredClone
polyfill
- Built-ins:
- Iterator Helpers proposal:
- Split into 2 (sync and async) proposals, async version moved back to Stage 2, January 2023 TC39 meeting
- Allowed interleaved mapping in
AsyncIterator
helpers, proposal-iterator-helpers/262
- Explicit Resource Management Stage 3 and Async Explicit Resource Management Stage 2 proposals:
InstallErrorCause
removed fromSuppressedError
, January 2023 TC39 meeting, proposal-explicit-resource-management/145- Simplified internal behaviour of
{ AsyncDisposableStack, DisposableStack }.prototype.use
, proposal-explicit-resource-management/143
- Added
Symbol
predicates Stage 2 proposal- Methods:
Symbol.isRegistered
Symbol.isWellKnown
- Methods:
Number.range
Stage 1 proposal and method renamed toIterator.range
Function.prototype.unThis
Stage 0 proposal and method renamed toFunction.prototype.demethodize
- Fixed Safari
String.prototype.toWellFormed
ToString
conversion bug - Improved some cases handling of array-replacer in
JSON.stringify
symbols handling fix - Fixed many other old
JSON.{ parse, stringify }
bugs (numbers instead of strings as keys in replacer, handling negative zeroes, spaces, some more handling symbols cases, etc.) - Fixed configurability and
ToString
conversion of some accessors - Added throwing proper errors on an incorrect context in some
ArrayBuffer
andDataView
methods - Some minor
DataView
and%TypedArray%
polyfills optimizations - Added proper error on the excess number of trailing
=
in theatob
polyfill - Fixed theoretically possible ReDoS vulnerabilities in
String.prototype.{ trim, trimEnd, trimRight }
,parse(Int|Float)
,Number
,atob
, andURL
polyfills in some ancient engines - Compat data improvements:
RegExp.prototype.flags
marked as fixed from V8 ~ Chrome 111- Added Opera Android 73 compat data mapping
- Added TypeScript definitions to
core-js-builder
Set
methods proposal updates:- Closing of iterators of
Set
-like objects on early exit, proposal-set-methods/85 - Some other minor internal changes
- Closing of iterators of
- Added one more workaround of a
webpack
dev server bug on IE global methods, #1161 - Fixed possible
String.{ raw, cooked }
error with empty template array - Used non-standard V8
Error.captureStackTrace
instead of stack parsing in new error classes / wrappers where it's possible - Added detection correctness of iteration to
Promise.{ allSettled, any }
feature detection, Hermes issue - Compat data improvements:
- Change
Array
by copy proposal marked as supported from V8 ~ Chrome 110 - Added Samsung Internet 20 compat data mapping
- Added Quest Browser 25 compat data mapping
- Added React Native 0.71 Hermes compat data
- Added Electron 23 and 24 compat data mapping
self
marked as fixed in Deno 1.29.3, deno/17362
- Change
- Minor tweaks of minification settings for
core-js-bundle
- Refactoring, some minor fixes, improvements, optimizations
- Fixed a Chakra-based MS Edge (18-) bug that unfreeze (O_o) frozen arrays used as
WeakMap
keys - Fixing of the previous bug also fixes some cases of
String.dedent
in MS Edge - Fixed dependencies of some entries
- Iterator Helpers proposal:
- Built-ins:
Iterator
Iterator.from
Iterator.prototype.drop
Iterator.prototype.every
Iterator.prototype.filter
Iterator.prototype.find
Iterator.prototype.flatMap
Iterator.prototype.forEach
Iterator.prototype.map
Iterator.prototype.reduce
Iterator.prototype.some
Iterator.prototype.take
Iterator.prototype.toArray
Iterator.prototype.toAsync
Iterator.prototype[@@toStringTag]
AsyncIterator
AsyncIterator.from
AsyncIterator.prototype.drop
AsyncIterator.prototype.every
AsyncIterator.prototype.filter
AsyncIterator.prototype.find
AsyncIterator.prototype.flatMap
AsyncIterator.prototype.forEach
AsyncIterator.prototype.map
AsyncIterator.prototype.reduce
AsyncIterator.prototype.some
AsyncIterator.prototype.take
AsyncIterator.prototype.toArray
AsyncIterator.prototype[@@toStringTag]
- Moved to Stage 3, November 2022 TC39 meeting
- Added
/actual/
entries, unconditional forced replacement disabled for features that survived to Stage 3 .from
accept strings,.flatMap
throws on strings returned from the callback, proposal-iterator-helpers/244, proposal-iterator-helpers/250.from
and.flatMap
throws on non-object iterators, proposal-iterator-helpers/253
- Built-ins:
Set
methods proposal:- Built-ins:
Set.prototype.intersection
Set.prototype.union
Set.prototype.difference
Set.prototype.symmetricDifference
Set.prototype.isSubsetOf
Set.prototype.isSupersetOf
Set.prototype.isDisjointFrom
- Moved to Stage 3, November 2022 TC39 meeting
- Reimplemented with new semantics:
- Optimized performance (iteration over lowest set)
- Accepted only
Set
-like objects as an argument, not all iterables - Accepted only
Set
s asthis
, no@@species
support, and other minor changes
- Added
/actual/
entries, unconditional forced replacement changed to feature detection - For avoiding breaking changes:
- New versions of methods are implemented as new modules and available in new entries or entries where old versions of methods were not available before (like
/actual/
namespace) - In entries where they were available before (like
/full/
namespace), those methods are available with fallbacks to old semantics (in addition toSet
-like, they accept iterable objects). This behavior will be removed from the next major release
- New versions of methods are implemented as new modules and available in new entries or entries where old versions of methods were not available before (like
- Built-ins:
- Well-Formed Unicode Strings proposal:
- Methods:
String.prototype.isWellFormed
String.prototype.toWellFormed
- Moved to Stage 3, November 2022 TC39 meeting
- Added
/actual/
entries, disabled unconditional forced replacement
- Methods:
- Explicit resource management Stage 3 and Async explicit resource management Stage 2 proposals:
- Renamed from "
using
statement" and split into 2 (sync and async) proposals - In addition to already present well-known symbols, added new built-ins:
Symbol.dispose
Symbol.asyncDispose
SuppressedError
DisposableStack
DisposableStack.prototype.dispose
DisposableStack.prototype.use
DisposableStack.prototype.adopt
DisposableStack.prototype.defer
DisposableStack.prototype.move
DisposableStack.prototype[@@dispose]
AsyncDisposableStack
AsyncDisposableStack.prototype.disposeAsync
AsyncDisposableStack.prototype.use
AsyncDisposableStack.prototype.adopt
AsyncDisposableStack.prototype.defer
AsyncDisposableStack.prototype.move
AsyncDisposableStack.prototype[@@asyncDispose]
Iterator.prototype[@@dispose]
AsyncIterator.prototype[@@asyncDispose]
- Sync version of this proposal moved to Stage 3, November 2022 TC39 meeting
- Added
/actual/
namespace entries for Stage 3 proposal
- Renamed from "
- Added
String.dedent
stage 2 proposal- Method
String.dedent
- Throws an error on non-frozen raw templates for avoiding possible breaking changes in the future, proposal-string-dedent/75
- Method
- Compat data targets improvements:
- React Native from 0.70 shipped with Hermes as the default engine. However, bundled Hermes versions differ from standalone Hermes releases. So added
react-native
target for React Native with bundled Hermes. - According to the documentation, Oculus Browser was renamed to Meta Quest Browser, so
oculus
target was renamed toquest
. opera_mobile
target name is confusing since it contains data for the Chromium-based Android version, but iOS Opera is Safari-based. Soopera_mobile
target was renamed toopera-android
.android
target name is also confusing for someone - that means Android WebView, some think thinks that it's Chrome for Android, but they have some differences. For avoiding confusion, addedchrome-android
target.- For consistency with two previous cases, added
firefox-android
target. - For avoiding breaking changes, the
oculus
andopera_mobile
fields are available in the compat data till the next major release.
- React Native from 0.70 shipped with Hermes as the default engine. However, bundled Hermes versions differ from standalone Hermes releases. So added
- Compat data improvements:
Array.fromAsync
marked as supported from Bun 0.3.0String.prototype.{ isWellFormed, toWellFormed }
marked as supported from Bun 0.4.0- Change
Array
by copy proposal marked as supported from Deno 1.27, deno/16429 - Added Deno 1.28 / 1.29 compat data mapping
- Added NodeJS 19.2 compat data mapping
- Added Samsung Internet 19.0 compat data mapping
- Added Quest Browser 24.0 compat data mapping
- Fixed the first version in the Chromium-based Edge compat data mapping
{ Map, WeakMap }.prototype.emplace
became stricter by the spec draft- Smoothed behavior of some conflicting proposals
- Removed some generic behavior (like
@@species
pattern) of some.prototype
methods from the new collections methods proposal and theArray
deduplication proposal that most likely will not be implemented since it contradicts the current TC39 policy - Added pure version of the
Number
constructor, #1154, #1155, thanks @trosos - Added
set(Timeout|Interval|Immediate)
extra arguments fix for Bun 0.3.0- (similarly to IE9-), bun/1633 - Fixed handling of sparse arrays in
structuredClone
, #1156 - Fixed a theoretically possible future conflict of polyfills definitions in the pure version
- Some refactoring and optimization
- Disabled forced replacing of
Array.fromAsync
since it's on Stage 3 - Avoiding a check of the target in the internal
function-uncurry-this
helper where it's not required - minor optimization and preventing problems in some broken environments, a workaround of #1141 - V8 will not ship
Array.prototype.{ group, groupToMap }
in V8 ~ Chromium 108, proposal-array-grouping/44
Array.fromAsync
proposal:- Moved to Stage 3, September TC39 meeting
- Avoid observable side effects of
%Array.prototype.values%
usage in array-like branch, proposal-array-from-async/30
- Added well-formed unicode strings stage 2 proposal:
String.prototype.isWellFormed
String.prototype.toWellFormed
- Recent updates of the iterator helpers proposal:
- Added a counter parameter to helpers, proposal-iterator-helpers/211
- Don't await non-objects returned from functions passed to
AsyncIterator
helpers, proposal-iterator-helpers/239 { Iterator, AsyncIterator }.prototype.flatMap
supports returning both - iterables and iterators, proposal-iterator-helpers/233- Early exit on broken
.next
in missed cases of{ Iterator, AsyncIterator }.from
, proposal-iterator-helpers/232
- Added
self
polyfill as a part of The Minimum Common Web Platform API, specification, #1118 - Added
inverse
option tocore-js-compat
, #1119 - Added
format
option tocore-js-builder
, #1120 - Added NodeJS 19.0 compat data
- Added Deno 1.26 and 1.27 compat data
- Added Opera Android 72 compat data mapping
- Updated Electron 22 compat data mapping
- Fixed regression with an error on reuse of some built-in methods from another realm, #1133
- Added a workaround of a Nashorn bug with
Function.prototype.{ call, apply, bind }
on string methods, #1128 - Updated lists of
[Serializable]
and[Transferable]
objects in thestructuredClone
polyfill. Mainly, for better error messages if polyfilling of cloning such types is impossible Array.prototype.{ group, groupToMap }
marked as supported from V8 ~ Chromium 108- Added Electron 22 compat data mapping
- Forced polyfilling of
Array.prototype.groupToMap
in the pure version for returning wrappedMap
instances - Fixed existence of
Array.prototype.{ findLast, findLastIndex }
in/stage/4
entry - Added Opera Android 71 compat data mapping
- Some stylistic changes
- Considering
document.all
as a callable in some missed cases - Added Safari 16.0 compat data
- Added iOS Safari 16.0 compat data mapping
- Fixed some ancient iOS Safari versions compat data mapping
- Added some fixes and workarounds of FF30- typed arrays bug that does not properly convert objects to numbers
- Added
sideEffects
field tocore-js-pure
package.json
for better tree shaking, #1117 - Dropped
semver
dependency fromcore-js-compat
semver
package (ironically) added a breaking change and dropped NodeJS 8 support in the minor7.1
version, after thatsemver
incore-js-compat
was pinned to7.0
since for avoiding breaking changes it should support NodeJS 8. However, sincecore-js-compat
is usually used with other packages that usesemver
dependency, it causes multiple duplication ofsemver
in dependencies. So I decided to removesemver
dependency and replace it with a couple of simple helpers.
- Added Bun 0.1.6-0.1.11 compat data
- Added Deno 1.25 compat data mapping
- Updated Electron 21 compat data mapping
- Some stylistic changes, minor fixes, and improvements
- Added
Object.prototype.__proto__
polyfill- It's optional, legacy, and in some cases (mainly because of developers' mistakes) can cause problems, but some libraries depend on it, and most code can't work without the proper libraries' ecosystem
- Only for modern engines where this feature is missed (like Deno), it's not installed in IE10- since here we have no proper way setting of the prototype
- Without fixes of early implementations where it's not an accessor since those fixes are impossible
- Only for the global version
- Considering
document.all
as an object in some missed cases, see ECMAScript Annex B 3.6 - Avoiding unnecessary promise creation and validation result in
%WrapForValid(Async)IteratorPrototype%.return
, proposal-iterator-helpers/215 - Fixed omitting the result of proxing
.return
in%IteratorHelperPrototype%.return
, #1116 - Fixed the order creation of properties of iteration result object of some iterators (
value
should be created beforedone
) - Fixed some cases of Safari < 13 bug - silent on non-writable array
.length
setting - Fixed
ArrayBuffer.length
in V8 ~ Chrome 27- - Relaxed condition of re-usage native
WeakMap
for internal states with multiplecore-js
copies - Availability cloning of
FileList
in thestructuredClone
polyfill extended to some more old engines versions - Some stylistic changes and minor fixes
- Throwing a
TypeError
incore-js-compat
/core-js-builder
in case of passing invalid module names / filters for avoiding unexpected result, related to #1115 - Added missed NodeJS 13.2 to
esmodules
core-js-compat
/core-js-builder
target - Added Electron 21 compat data mapping
- Added Oculus Browser 23.0 compat data mapping
- NodeJS is ignored in
IS_BROWSER
detection to avoid a false positive withjsdom
, #1110 - Fixed detection of
@@species
support inPromise
in some old engines { Array, %TypedArray% }.prototype.{ findLast, findLastIndex }
marked as shipped in FF104- Added iOS Safari 15.6 compat data mapping
- Fixed Opera 15 compat data mapping
- Recent updates of the iterator helpers proposal, #1101:
.asIndexedPairs
renamed to.indexed
, proposal-iterator-helpers/183:Iterator.prototype.asIndexedPairs
->Iterator.prototype.indexed
AsyncIterator.prototype.asIndexedPairs
->AsyncIterator.prototype.indexed
- Avoid exposing spec fiction
%AsyncFromSyncIteratorPrototype%
inAsyncIterator.from
andIterator.prototype.toAsync
, proposal-iterator-helpers/182, proposal-iterator-helpers/202 - Avoid unnecessary promise creation in
%WrapForValidAsyncIteratorPrototype%.next
, proposal-iterator-helpers/197 - Do not validate value in
%WrapForValid(Async)IteratorPrototype%.next
, proposal-iterator-helpers/197 and proposal-iterator-helpers/205 - Do not forward the parameter of
.next
/.return
to an underlying iterator by the extended iterator protocol, a part of proposal-iterator-helpers/194 .throw
methods removed from all wrappers / helpers prototypes, a part of proposal-iterator-helpers/194- Close inner iterators of
{ Iterator, AsyncIterator }.prototype.flatMap
proxy iterators on.return
, proposal-iterator-helpers/195 - Throw
RangeError
onNaN
in{ Iterator, AsyncIterator }.prototype.{ drop, take }
, proposal-iterator-helpers/181 - Many other updates and fixes of this proposal
%TypedArray%.prototype.toSpliced
method removed from the change array by copy proposal and marked as obsolete incore-js
, proposal-change-array-by-copy/88- Polyfill
Promise
withunhandledrejection
event support (browser style) in Deno < 1.24 - Available new targets in
core-js-compat
/core-js-builder
and added compat data for them: - Added Samsung Internet 18.0 compat data mapping
- Fixed a typo in the
structuredClone
feature detection, #1106 - Added Opera Android 70 compat data mapping
- Added a workaround of the Bun ~ 0.1.1 bug that define some globals with incorrect property descriptors and that causes a crash of
core-js
- Added a fix of the FF103+
structuredClone
bugs (1774866 (fixed in FF104) and 1777321 (still not fixed)) that now can clone errors, but.stack
of the clone is an empty string - Fixed
{ Map, WeakMap }.prototype.emplace
logic, #1102 - Fixed order of errors throwing on iterator helpers
- Changed the order of operations in
%TypedArray%.prototype.toSpliced
following proposal-change-array-by-copy/89 - Fixed regression of some IE8- issues
- Avoided creation of extra properties for the handling of
%TypedArray%
constructors in new methods, #1092 (comment) - Added Deno 1.23 compat data mapping
- Fixed possible error on multiple
core-js
copies, #1091 - Added
v
flag toRegExp.prototype.flags
implementation in case if current V8 bugs will not be fixed before this flag implementation
Array
find from last moved to the stable ES, according to June 2022 TC39 meeting:Array.prototype.findLast
Array.prototype.findLastIndex
%TypedArray%.prototype.findLast
%TypedArray%.prototype.findLastIndex
- Methods from the
Array
grouping proposal renamed, according to June 2022 TC39 meeting:Array.prototype.groupBy
->Array.prototype.group
Array.prototype.groupByToMap
->Array.prototype.groupToMap
- Changed the order of operations in
%TypedArray%.prototype.with
following proposal-change-array-by-copy/86, according to June 2022 TC39 meeting - Decorator Metadata proposal extracted from Decorators proposal as a separate stage 2 proposal, according to March 2022 TC39 meeting,
Symbol.metadataKey
replacesSymbol.metadata
- Added
Array.prototype.push
polyfill with some fixes for modern engines - Added
Array.prototype.unshift
polyfill with some fixes for modern engines - Fixed a bug in the order of getting flags in
RegExp.prototype.flags
in the actual version of V8 - Fixed property descriptors of some
Math
andNumber
constants - Added a workaround of V8
ArrayBufferDetaching
protector cell invalidation and performance degradation onstructuredClone
feature detection, one more case of #679 - Added detection of NodeJS bug in
structuredClone
that can not cloneDOMException
(just in case for future versions that will fix other issues) - Compat data:
- Added NodeJS 18.3 compat data mapping
- Added and fixed Deno 1.22 and 1.21 compat data mapping
- Added Opera Android 69 compat data mapping
- Updated Electron 20.0 compat data mapping
- Fixed possible multiple call of
ToBigInt
/ToNumber
conversion of the argument passed to%TypedArray%.prototype.fill
in V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18 - Fixed some cases of
DeletePropertyOrThrow
in IE9- - Fixed the kind of error (
TypeError
instead ofError
) on incorrectexec
result inRegExp.prototype.test
polyfill - Fixed dependencies of
{ actual, full, features }/typed-array/at
entries - Added Electron 20.0 compat data mapping
- Added iOS Safari 15.5 compat data mapping
- Refactoring
- Added a workaround for V8 ~ Chrome 53 bug with non-writable prototype of some methods, #1083
- Fixed possible double call of
ToNumber
conversion on arguments ofMath.{ fround, trunc }
polyfills Array.prototype.includes
marked as fixed in FF102
- Ensured that polyfilled constructors
.prototype
is non-writable - Ensured that polyfilled methods
.prototype
is not defined - Added detection and fix of a V8 ~ Chrome <103 bug of
struturedClone
that returnsnull
if cloned object contains multiple references to one error
- Ensured proper
.length
of polyfilled functions even in compressed code (excepting some ancient engines) - Ensured proper
.name
of polyfilled accessors (excepting some ancient engines) - Ensured proper source /
ToString
conversion of polyfilled accessors - Actualized Rhino compat data
- Refactoring
- Added a fix for FF99+
Array.prototype.includes
broken on sparse arrays
- Fixed
URLSearchParams
in IE8- that was broken in the previous release - Fixed
__lookupGetter__
entries
- Improved some cases of
RegExp
flags handling - Prevented experimental warning in NodeJS ~ 18.0 on detection
fetch
API - Added NodeJS 18.0 compat data
- Change
Array
by copy proposal:- Moved to Stage 3, March TC39 meeting
- Disabled forced replacement and added
/actual/
entry points for methods from this proposal Array.prototype.toSpliced
throws aTypeError
instead ofRangeError
if the result length is more thanMAX_SAFE_INTEGER
, proposal-change-array-by-copy/70
- Added some more
atob
/btoa
fixes:- NodeJS <17.9
atob
does not ignore spaces, node/42530 - Actual NodeJS
atob
does not validate encoding, node/42646 - FF26- implementation does not properly convert argument to string
- IE / Edge <16 implementation have wrong arity
- NodeJS <17.9
- Added
/full/
namespace as the replacement for/features/
since it's more descriptive in context of the rest namespaces (/es/
⊆/stable/
⊆/actual/
⊆/full/
) - Avoided propagation of removed parts of proposals to upper stages. For example,
%TypedArray%.prototype.groupBy
was removed from theArray
grouping proposal a long time ago. We can't completely remove this method since it's a breaking change. But this proposal has been promoted to stage 3 - so the proposal should be promoted without this method, this method should not be available in/actual/
entries - but it should be available in early-stage entries to avoid breakage. - Significant internal refactoring and splitting of modules (but without exposing to public API since it will be a breaking change - it will be exposed in the next major version)
- Bug fixes:
- Tooling:
- Stabilized proposals are filtered out from the
core-js-compat
->core-js-builder
->core-js-bundle
output. That mean that if the output contains, for example,es.object.has-own
, the legacy reference to it,esnext.object.has-own
, no longer added. - Aligned modules filters of
core-js-builder
andcore-js-compat
, now it'smodules
andexclude
options - Added support of entry points, modules, regexes, and arrays of them to those filters
- Missed
targets
option ofcore-js-compat
means that thetargets
filter just will not be applied, so the result will contain modules required for all possible engines
- Stabilized proposals are filtered out from the
- Compat data:
.stack
property onDOMException
marked as supported from Deno 1.15- Added Deno 1.21 compat data mapping
- Added Electron 19.0 and updated 18.0 compat data mapping
- Added Samsung Internet 17.0 compat data mapping
- Added Opera Android 68 compat data mapping
- Added a bugfix for the WebKit
Array.prototype.{ groupBy, groupByToMap }
implementation core-js-compat
targets parser transforms engine names to lower caseatob
/btoa
marked as fixed in NodeJS 17.5- Added Electron 18.0 compat data mapping
- Added Deno 1.20 compat data mapping
- Added Base64 utility methods:
atob
btoa
- Added the proper validation of arguments to some methods from web standards
- Forced replacement of all features from early-stage proposals for avoiding possible web compatibility issues in the future
- Added Rhino 1.7.14 compat data
- Added Deno 1.19 compat data mapping
- Added Opera Android 66 and 67 compat data mapping
- Added iOS Safari 15.3 and 15.4 compat data mapping
- Detects and replaces broken third-party
Function#bind
polyfills, uses only nativeFunction#bind
in the internals structuredClone
should throw an error if no arguments passed- Changed the structure of notes in
__core-js_shared__
- Added a fix of a V8 ~ Chrome 36-
Object.{ defineProperty, defineProperties }
bug, Babel issue - Added fixes of some different
%TypedArray%.prototype.set
bugs, affects modern engines (like Chrome < 95 or Safari < 14.1)
- Fixed the order of calling reactions of already fulfilled / rejected promises in
Promise.prototype.then
, #1026 - Fixed possible memory leak in specific promise chains
- Fixed some missed dependencies of entries
- Added Deno 1.18 compat data mapping
- Added
structuredClone
method from the HTML spec, see MDN- Includes all cases of cloning and transferring of required ECMAScript and platform types that can be polyfilled, for the details see the caveats
- Uses native structured cloning algorithm implementations where it's possible
- Includes the new semantic of errors cloning from
html/5749
- Added
DOMException
polyfill, the Web IDL spec, see MDN- Includes
DOMException
and its attributes polyfills with fixes of many different engines bugs - Includes
DOMException#stack
property polyfill in engines that should have it - Reuses native
DOMException
implementations where it's possible (for example, in old NodeJS where it's not exposed as global)
- Includes
- Added support of
cause
on all Error types - Added
Error.prototype.toString
method polyfill with fixes of many different bugs of JS engines - Added
Number.prototype.toExponential
method polyfill with fixes of many different bugs of JS engines Array
grouping proposal:- Moved to stage 3
- Added
Array.prototype.groupByToMap
method - Removed
@@species
support
- Added change
Array
by copy stage 2 proposal:Array.prototype.toReversed
Array.prototype.toSorted
Array.prototype.toSpliced
Array.prototype.with
%TypedArray%.prototype.toReversed
%TypedArray%.prototype.toSorted
%TypedArray%.prototype.toSpliced
%TypedArray%.prototype.with
- Added
Iterator.prototype.toAsync
method from the iterator helpers stage 2 proposal Array.fromAsync
proposal moved to stage 2- Added
String.cooked
stage 1 proposal - Added
Function.prototype.unThis
stage 0 proposal - Added
Function.{ isCallable, isConstructor }
stage 0 proposal:Function.isCallable
Function.isConstructor
- Added a workaround of most cases breakage modern
String#at
after loading obsoleteString#at
proposal module, #1019 - Fixed
Array.prototype.{ values, @@iterator }.name
in V8 ~ Chrome 45- - Fixed validation of typed arrays in typed arrays iteration methods in V8 ~ Chrome 50-
- Extension of the API, #1012
- Added a new
core-js/actual/**
namespace - Added entry points for each finished post-ES6 proposal
- Added a new
- Fixed internal slots check in methods of some built-in types, #1017
- Fixed
URLSearchParams
iterator.next
that should be enumerable by the spec - Refactored
Subscription
- Added NodeJS 17.2 compat data mapping
- Added a workaround for a UC Browser specific version bug with unobservable
RegExp#sticky
flag, #1008, #1015 - Added handling of comments and specific spaces to
Function#name
polyfill, #1010, thanks @ildar-shaimordanov - Prevented some theoretical cases of breaking / observing the internal state by patching
Array.prototype[@@species]
- Refactored
URL
andURLSearchParams
- Added iOS Safari 15.2 compat data mapping
- Added Electron 17.0 compat data mapping
- Updated Deno compat data mapping
- Added a workaround for FF26- bug where
ArrayBuffer
s are non-extensible, butObject.isExtensible
does not report it:- Fixed in
Object.{ isExtensible, isSealed, isFrozen }
andReflect.isExtensible
- Fixed handling of
ArrayBuffer
s as collections keys
- Fixed in
- Fixed
Object#toString
onAggregateError
in IE10- - Fixed possible lack of dependencies of
WeakMap
in IE8- .findLast
methods family marked as supported from Chrome 97- Fixed inheritance of Electron compat data
web.
modules - Fixed Safari 15.1 compat data (some features were not added)
- Added iOS Safari 15.1 compat data mapping
- Most built-ins are encapsulated in
core-js
for preventing possible cases of breaking / observing the internal state by patching / deleting of them- Avoid
.call
/.apply
prototype methods that could be patched - Avoid
instanceof
operator - implicit.prototype
/@@hasInstance
access that could be patched - Avoid
RegExp#test
,String#match
and some over methods - implicit.exec
andRegExp
well-known symbols access that could be patched
- Avoid
- Clearing of
Error
stack from extra entries experimentally added toAggregateError
, #996, in case lack of problems it will be extended to other cases - In engines with native
Symbol
support, new well-known symbols created with usageSymbol.for
for ensuring the same keys in different realms, #998 - Added a workaround of a BrowserFS NodeJS
process
polyfill bug that incorrectly reports V8 version that's used in some cases ofcore-js
feature detection - Fixed normalization of
message
AggregateError
argument - Fixed order of arguments conversion in
Math.scale
, a spec draft bug - Fixed
core-js-builder
work in NodeJS 17, added a workaround ofwebpack
+ NodeJS 17 issue - Added NodeJS 17.0 compat data mapping
- Added Opera Android 65 compat data mapping
- Updated Electron 16.0 compat data mapping
- Many other minor fixes and improvements
- Fixed the prototype chain of
AggregateError
constructor that should containError
constructor - Fixed incorrect
AggregateError.prototype
properties descriptors - Fixed
InstallErrorCause
internal operation - Added NodeJS 16.11 compat data mapping
- Added Deno 1.16 compat data mapping
Object.hasOwn
marked as supported from Safari 15.1
- Early
{ Array, %TypedArray% }.fromAsync
errors moved to the promise, per the latest changes of the spec draft - Internal
ToInteger(OrInfinity)
operation returns+0
for-0
argument, ES2020+ update - Fixed theoretical problems with handling bigint in
Number
constructor wrapper - Fixed
String.raw
with extra arguments - Fixed some missed dependencies in entry points
- Some other minor fixes and improvements
- Refactoring
- Fixed
String.prototype.substr
feature detection and compat data - Removed mistakenly added
.forEach
from prototypes of some DOM collections where it shouldn't be, #988, #987, thanks @moorejs - Added
cause
toAggregateError
constructor implementation (still without adding to the feature detection) - Families of
.at
and.findLast
methods marked as supported in Safari TP - Added Electron 16.0 compat data mapping
- Added
Array.fromAsync
stage 1 proposal:Array.fromAsync
%TypedArray%.fromAsync
.name
and.toString()
on polyfilled functions improved in many different cases- Improved internal
IsConstructor
andIsCallable
checks - Fixed some internal cases of
GetMethod
operation - Fixed a bug of MS Edge 18-
parseInt
/parseFloat
with boxed symbols - Fixed
es.array.{ index-of, last-index-of }
compat data - Added Deno 1.15 compat data mapping
- Some other minor fixes and optimizations
- Fixed some possible problems related to possible extension of
%IteratorPrototype%
and%AsyncIteratorPrototype%
in the future - Fixed
DOMTokenList.prototype.{ forEach, @@iterator, keys, values, entries }
in old WebKit versions whereelement.classList
is not an instance of globalDOMTokenList
- Added NodeJS 16.9 compat data mapping
- Added Samsung Internet 16.0 compat data mapping
- Fixed missed cases of ES3 reserved words usage, related to #980
- Fixed dependencies in one missed entry point
- Some other minor fixes and optimizations
- Fixed missed
modules-by-versions
data
- Accessible
Object.prototype.hasOwnProperty
(Object.hasOwn
) proposal moved to the stable ES, per August 2021 TC39 meeting - Relative indexing method (
.at
) proposal moved to the stable ES, per August 2021 TC39 meeting - Exposed by default the stable version of
String.prototype.at
. It was not exposed because of the conflict with the alternative obsolete proposal (that will be completely removed in the next major version). For the backward compatibility, in the case of loading this proposal, it will be overwritten. - Some more iteration closing fixes
- Fixed an ES3 reserved words usage, #980
AsyncFromSyncIterator
made stricter, related mainly toAsyncIterator.from
andAsyncIterator.prototype.flatMap
- Handling of optional
.next
arguments in(Async)Iterator
methods is aligned with the current spec draft (mainly - ignoring the first passed to.next
argument in built-in generators) - Behavior of
.next
,.return
,.throw
methods onAsyncIterator
helpers proxy iterators aligned with the current spec draft (built-in async generators) (mainly - some early errors moved to returned promises) - Fixed some cases of safe iteration closing
- Fixed dependencies of some entry points
- Fixed
CreateAsyncFromSyncIterator
semantic inAsyncIterator.from
, related to #765 - Added a workaround of a specific case of broken
Object.prototype
, #973
- Added a workaround of a Closure Compiler unsafe optimization, #972
- One more fix crashing of
Object.create(null)
on WSH, #970 - Added Deno 1.14 compat data mapping
- Fixed microtask implementation on iOS Pebble, #967
- Fixed some entry points
- Improved old Safari compat data
Array
find from last proposal moved to the stage 3, July 2021 TC39 meetingArray
filtering stage 1 proposal:Array.prototype.filterReject
replacesArray.prototype.filterOut
%TypedArray%.prototype.filterReject
replaces%TypedArray%.prototype.filterOut
- Added
Array
grouping stage 1 proposal:Array.prototype.groupBy
%TypedArray%.prototype.groupBy
- Work with symbols made stricter: some missed before cases of methods that should throw an error on symbols now works as they should
- Handling
@@toPrimitive
in some cases ofToPrimitive
internal logic made stricter - Fixed work of
Request
with polyfilledURLSearchParams
, #965 - Fixed possible exposing of collections elements metadata in some cases, #427
- Fixed crashing of
Object.create(null)
on WSH, #966 - Fixed some cases of typed arrays subclassing logic
- Fixed a minor bug related to string conversion in
RegExp#exec
- Fixed
Date.prototype.getYear
feature detection - Fixed content of some entry points
- Some minor optimizations and refactoring
- Deno:
- Added Deno support (sure, after bundling since Deno does not support CommonJS)
- Allowed
deno
target incore-js-compat
/core-js-builder
- A bundle for Deno published on deno.land/x/corejs
- Added / updated compat data / mapping:
- Added
summary
option tocore-js-builder
, see more info in theREADME
, #910
- Worked around breakage related to
zone.js
loaded beforecore-js
, #953 - Added NodeJS 16.4 -> Chrome 91 compat data mapping
- Fixed cloning of regex through
RegExp
constructor, #948
- Added
RegExp
named capture groups polyfill, #521, #944 - Added
RegExp
dotAll
flag polyfill, #792, #944 - Added missed polyfills of Annex B features (required mainly for some non-browser engines), #336, #945:
escape
unescape
String.prototype.substr
Date.prototype.getYear
Date.prototype.setYear
Date.prototype.toGMTString
- Fixed detection of forbidden host code points in
URL
polyfill - Allowed
rhino
target incore-js-compat
/core-js-builder
, added compat data forrhino
1.7.13, #942, thanks @gausie .at
marked as supported from FF90
- Added polyfill of stable sort in
{ Array, %TypedArray% }.prototype.sort
, #769, #941 - Fixed
Safari
14.0-%TypedArray%.prototype.sort
validation of arguments bug .at
marked as supported from V8 9.2
- Overwrites
get-own-property-symbols
third-partySymbol
polyfill if it's used since it causes a stack overflow, #774 - Added a workaround of possible browser crash on
Object.prototype
accessors methods in WebKit ~ Android 4.0, #232
- Accessible
Object#hasOwnProperty
(Object.hasOwn
) proposal moved to the stage 3, May 2021 TC39 meeting
- Fixed some cases of
Function#toString
with multiplecore-js
instances - Fixed some possible
String#split
polyfill problems in V8 5.1
- Added well-known symbol
Symbol.metadata
for decorators stage 2 proposal - Added well-known symbol
Symbol.matcher
for pattern matching stage 1 proposal - Fixed regression of V8 ~ Node 0.12
String(Symbol())
bug, #933
- Native promise-based APIs
Promise#{ catch, finally }
returns polyfilledPromise
instances when it's required
- Added a workaround of WebKit ~ iOS 10.3 Safari
Promise
bug, #932 Promise#then
of incorrect nativePromise
implementations with correct subclassing no longer wrapped- Changed the order of
Promise
feature detection, removed unhandled rejection tracking check in non-browser non-node platforms
- Made
instanceof Promise
and.constructor === Promise
work with polyfilledPromise
for all native promise-based APIs - Added a workaround for some buggy V8 versions ~4.5 related to fixing of
%TypedArray%
static methods, #564
- Added accessible
Object#hasOwnProperty
stage 2 proposalObject.hasOwn
method
- Fixed a possible
RegExp
constructor problem with multiple globalcore-js
instances
URL
andURLSearchParams
marked as supported from Safari 14.0- Polyfilled built-in constructors protected from calling on instances
- Prevented possible
RegExp#split
problems in old engines, #751, #919 - Detection of Safari 10 string padding bug extended to some Safari-based browsers
Array
find from last proposal moved to the stage 2, March TC39 meeting- Prevented possible
RegExp#exec
problems in some old engines, #920 - Updated compat data mapping:
- NodeJS up to 16.0
- Electron up to 13.0
- Samsung Internet up to 14.0
- Opera Android up to 62
- The rest automatically
- Added a workaround for Chrome 38-40 bug which does not allow to inherit symbols (incl. well-known) from DOM collections prototypes to instances, #37
- Used
NumericRangeIterator
as toStringTag instead ofRangeIterator
in{ Number, BigInt }.range
iterator, per this PR - TypedArray constructors marked as supported from Safari 14.0
- Updated compat data mapping for iOS Safari and Opera for Android
- Added
Array
find from last stage 1 proposalArray#findLast
Array#findLastIndex
%TypedArray%#findLast
%TypedArray%#findLastIndex
- Added
%TypedArray%#uniqueBy
method for array deduplication stage 1 proposal%TypedArray%#uniqueBy
- Dropped
ToLength
detection from array methods feature detection which could cause hanging FF11-21 and some versions of old WebKit, #764 - Minified bundle from
core-js-bundle
usesterser
instead ofuglify-js
- Fixed some more issues related to FF44- legacy
Iterator
, #906
- Fixed handling of special replacements patterns in
String#replaceAll
, #900 - Fixed iterators dependencies of
Promise.any
andPromise.allSettled
entries - Fixed microtask implementation on WebOS, #898, #901
- Fixed work of new
%TypedArray%
methods onBigInt
arrays - Added ESNext methods to ES3 workaround for
Number
constructor wrapper
- Added relative indexing method stage 3 proposal
Array#at
%TypedArray%#at
- Added
Number.range
stage 1 proposalNumber.range
BigInt.range
- Added array filtering stage 1 proposal
Array#filterOut
%TypedArray%#filterOut
- Added array deduplication stage 1 proposal
Array#uniqueBy
- Added code points / code units explicit feature detection in
String#at
for preventing breakage code which use obsoleteString#at
proposal polyfill - Added the missed
(es|stable)/instance/replace-all
entries - Updated compat data mapping for Opera - from Opera 69, the difference with Chrome versions increased to 14
- Compat data mapping for modern Android WebView to Chrome moved from targets parser directly to compat data
- Deprecate
core-js-builder
blacklist
option in favor ofexclude
- Added code points / code units explicit feature detection in
String#at
for preventing breakage code which use obsoleteString#at
proposal polyfill - Added
OPEN_SOURCE_CONTRIBUTOR
detection inpostinstall
- Added Drone CI detection in
postinstall
String#replaceAll
moved to the stable ES, per June TC39 meetingPromise.any
andAggregateError
moved to the stable ES, per July TC39 meeting- Added
Reflect[@@toStringTag]
, per July TC39 meeting - Forced replacement of
Array#{ reduce, reduceRight }
in Chrome 80-82 because of a bug, #766 - Following the changes in the
upsert
proposal,{ Map, WeakMap }#emplace
replace{ Map, WeakMap }#upsert
, these obsolete methods will be removed in the next major release - By the current spec,
AggregateError#errors
is own data property - Added correct iteration closing in the iteration helpers according to the current version of the proposal
process.nextTick
have a less priority thanPromise
in the microtask implementation, #855- Fixed microtask implementation in engines with
MutationObserver
, but withoutdocument
, #865, #866 - Fixed
core-js-builder
with an empty (after the targets engines or another filtration) modules list, #822 - Fixed possible twice call of
window.onunhandledrejection
, #760 - Fixed some possible problems related multiple global copies of
core-js
, #880 - Added a workaround for 3rd party
Reflect.set
polyfill bug, #847 - Updated compat data:
- Chrome up to 86
- FF up to 82
- Safari up to 14
- Updated compat data mapping:
- iOS up to 14
- NodeJS up to 15.0
- Electron up to 11.0
- Samsung Internet up to 13.0
- Opera Android up to 60
- The rest automatically
- Updated all required dependencies
- Updated Browserslist #755
- Fixed
setImmediate
in Safari #770, thanks @dtinth - Fixed some regexp, thanks @scottarc
- Added OPEN_SOURCE_CONTRIBUTOR detection in
postinstall
, thanks @scottarc - Added Drone CI in
postinstall
CI detection #781
- Prevented a possible almost infinite loop in non-standard implementations of some backward iteration array methods
- Fixed replacement of substitutes of undefined capture groups in
.replace
in Safari 13.0-, #471, #745, thanks @mattclough1 - Improved compat data for old engines
- Fixed early implementations of
Array#{ every, forEach, includes, indexOf, lastIndexOf, reduce, reduceRight, slice, some, splice }
for the usage ofToLength
- Added
RegExp#exec
dependency to methods which depends on the correctness of logic of this method (3.6.0-3.6.1
issue), #741 - Refactored some internals
- Fixed a bug related
Symbol
with multiple copies ofcore-js
(for3.4.2-3.6.0
), #736 - Refactored some tools
- Added support of sticky (
y
)RegExp
flag, #372, #732, #492, thanks @cvle and @nicolo-ribaudo - Added
RegExp#test
delegation toRegExp#exec
, #732, thanks @cvle - Fixed some cases of
Object.create(null)
in IE8-, #727, #728, thanks @aleen42 - Allowed object of minimum environment versions as
core-js-compat
andcore-js-builder
targets
argument - Allowed corresponding to Babel
targets.esmodules
,targets.browsers
,targets.node
options incore-js-compat
andcore-js-builder
- Engines in compat data and results of targets parsing sorted alphabetically
- Fixed
features/instance/match-all
entry compat data - Fixed
Array.prototype[@@unscopables]
descriptor (was writable) - Added Samsung Internet 11 compat data mapping
- Added object iteratoration stage 1 proposal:
Object.iterateKeys
Object.iterateValues
Object.iterateEntries
- Added one more workaround for broken in previous versions
inspectSource
helper, #719 - Added Opera Mobile compat data
- Updated Samsung Internet, iOS, old Node and Android compat data mapping
es.string.match-all
marked as completely supported in FF73- Generate
core-js-compat/modules
since often we need just the list ofcore-js
modules
- Returned usage of
node -e
in thepostinstall
scripts for better cross-platform compatibility, #582 - Improved CI detection in the
postinstall
script, #707
- Fixed an NPM publishing issue
- Improved iOS compat data - added missed mapping iOS 12.2 -> Safari 12.1, added bug fixes from patch releases
- Added Safari 13.1 compat data
- Added missed in
core-js-compat
helpersie_mob
normalization - Normalize the result of
getModulesListForTargetVersion
core-js-compat
helper - Improved CI detection in the
postinstall
script, #707
- Detect incorrect order of operations in
Object.assign
, MS Edge bug - Detect usage of
ToLength
inArray#{ filter, map }
, FF48-49 and MS Edge 14- issues - Detect incorrect MS Edge 17-18
Reflect.set
which allows setting the property to object with non-writable property on the prototype - Fixed
inspectSource
helper with multiplecore-js
copies and some related features like some edge cases ofPromise
feature detection
- Added feature detection for Safari non-generic
Promise#finally
bug (critical forcore-js-pure
) - Fixed missed
esnext.string.code-points
incore-js/features/string
entry point - Updated
Iterator
proposal feature detection for the case of non-standardIterator
in FF44-
- Fixed missed
es.json.stringify
and some modules from iteration helpers proposal in some entry points (includes the root entry point) - Added a workaround of
String#{ endsWith, startsWith }
MDN polyfills bugs, #702 - Fixed
.size
property descriptor ofMap
/Set
in the pure version - Refactoring, some internal improvements
- Don't use polyfilled symbols as internal uids, a workaround for some incorrect use cases
String#replaceAll
is available only in nightly FF builds- Improved
Promise
feature detection for the case of V8 6.6 with multiplecore-js
copies - Some internals optimizations
- Added Node 13.2 -> V8 7.9 compat data mapping
- Returned usage of
node -e
inpostinstall
scripts
- Throw when
(Async)Iterator#flatMap
mapper returns a non-iterable, per tc39/proposal-iterator-helpers/55 and tc39/proposal-iterator-helpers/59 - Removed own
AggregateError#toString
, per tc39/proposal-promise-any/49 - Global
core-js
Promise
polyfill passes feature detection in the pure versions - Fixed indexes in
String#replaceAll
callbacks String#replaceAll
marked as supported by FF72
- Added well-formed
JSON.stringify
, ES2019 feature, thanks @ExE-Boss and @WebReflection for the idea - Fixed
Math.signbit
, #687, thanks @chicoxyzzy
- Don't detect Chakra-based Edge as Chrome in the
userAgent
parsing - Fixed inheritance in typed array constructors wrappers, #683
- Added one more workaround for correct work of early
fetch
implementations with polyfilledURLSearchParams
, #680
- Added a workaround of V8 deoptimization which causes serious performance degradation (~4x in my tests) of
Array#concat
, #679 - Added a workaround of V8 deoptimization which causes slightly performance degradation of
Promise
, #679 - Added
(Async)Iterator.prototype.constructor -> (Async)Iterator
per this issue - Added compat data for Chromium-based Edge
- Added a workaround of V8 deoptimization which causes serious performance degradation (~20x in my tests) of some
RegExp
-related methods likeString#split
, #306 - Added a workaround of V8 deoptimization which causes serious performance degradation (up to 100x in my tests) of
Array#splice
and slightlyArray#{ filter, map }
, #677 - Fixed work of
fetch
with polyfilledURLSearchParams
, #674 - Fixed an edge case of
String#replaceAll
with an empty search value - Added compat data for Chrome 80
package-lock.json
no longer generated in libraries
gopher
removed fromURL
special cases per this issue and this PR- Added compat data for iOS 13 and Node 13.0
- Fixed compatibility of
core-js-compat
with Node 6 and Yarn, #669
- Fixed an NPM publishing issue
String#{ matchAll, replaceAll }
throws an error on non-global regex argument per the decision from TC39 meetings (+ this PR). It's a breaking change, but since it's a breaking change in the ES spec, it's added at the minor releaseglobalThis
moved to stable ES, per October TC39 meetingPromise.any
moved to stage 3, some minor internal changes, per October TC39 meetingString#replaceAll
moved to stage 3, per October TC39 meeting- Added iterator helpers stage 2 proposal:
Iterator
Iterator.from
Iterator#asIndexedPairs
Iterator#drop
Iterator#every
Iterator#filter
Iterator#find
Iterator#flatMap
Iterator#forEach
Iterator#map
Iterator#reduce
Iterator#some
Iterator#take
Iterator#toArray
Iterator#@@toStringTag
AsyncIterator
AsyncIterator.from
AsyncIterator#asIndexedPairs
AsyncIterator#drop
AsyncIterator#every
AsyncIterator#filter
AsyncIterator#find
AsyncIterator#flatMap
AsyncIterator#forEach
AsyncIterator#map
AsyncIterator#reduce
AsyncIterator#some
AsyncIterator#take
AsyncIterator#toArray
AsyncIterator#@@toStringTag
- Updated
Map#upsert
(Map#updateOrInsert
before) proposal- Moved to stage 2, per October TC39 meeting
Map#updateOrInsert
renamed toMap#upsert
- Added
WeakMap#upsert
- You can don't pass one of the callbacks
- Added a workaround for iOS Safari MessageChannel + bfcache bug, #624
- Added a workaround for Chrome 33 / Android 4.4.4
Promise
bug, #640 - Replaced broken
URL
constructor in Safari andURLSearchParams
in Chrome 66-, #656 - Added compat data for Node up to 12.11, FF 69, Samsung up to 10.2 and Phantom 1.9
Math.hypot
marked as not supported in Chrome 77 since a bug in this method was not fixed before the stable Chrome 77 release- Fixed unnecessary exposing on
Symbol.matchAll
inesnext.string.match-all
, #626 - Fixed missed cases access the
.next
method once, at the beginning, of the iteration protocol - Show similar
postinstall
messages only once pernpm i
, #597, thanks @remy
- Show similar
postinstall
messages only once pernpm i
, #597
- Added a workaround for possible recursion in microtasks caused by conflicts with other
Promise
polyfills, #615
Promise.allSettled
moved to stable ES, per July TC39 meetingPromise.any
moved to stage 2,.errors
property ofAggregateError
instances made non-enumerable, per July TC39 meetingusing
statement proposal moved to stage 2, addedSymbol.asyncDispose
, per July TC39 meeting- Added
Array.isTemplateObject
stage 2 proposal, per June TC39 meeting - Added
Map#updateOrInsert
stage 1 proposal, per July TC39 meeting - Added a fix for
Math.hypot
V8 7.7 bug, since it's still not stable without adding results tocore-js-compat
- Added a workaround for APIs where not possible to replace broken native
Promise
, #579 - added.finally
and patched.then
to / on nativePromise
prototype - Fixed crashing of Opera Presto, #595
- Fixed incorrect early breaking of
{ Map, Set, WeakMap, WeakSet }.deleteAll
- Fixed some missed dependencies in entry points
- Added compat data for Node 12.5, FF 67, Safari 13
- Added support of
DISABLE_OPENCOLLECTIVE
env variable topostinstall
script - Removed
core-js-pure
dependency fromcore-js-compat
, #590 - Fixed generation of
core-js-compat
on Windows, #606
- Refactoring. Many minor internal improvements and fixes like:
- Improved
Symbol.keyFor
complexity toO(1)
- Fixed the order of arguments validation in
String.prototype.{ endsWith, includes, startsWith }
- Internal implementation of
RegExp#flags
helper now respectdotAll
flag (mainly related to thepure
version) - Performance optimizations related old V8
- Etc.
- Improved
- Fixed
core-js/features/reflect/delete-metadata
entry point - Some fixes and improvements of the
postinstall
script like supportnpm
color config (#556) or adding support ofADBLOCK
env variable - Refactoring and some minor fixes
- Some fixes and improvements of the
postinstall
script like supportnpm
color config (#556) or adding support ofADBLOCK
env variable
- Added a workaround of a strange
npx
bug onpostinstall
, #551
- Added a workaround of a strange
npx
bug onpostinstall
, #551
- Added one more workaround of alternative not completely correct
Symbol
polyfills, #550, #554 - Reverted
esnext.string.match-all
in some entry points for fix autogeneration ofcore-js-compat/entries
and backward@babel/preset-env
compatibility
String#matchAll
moved to stable ES, exposedSymbol.matchAll
, #516Promise.allSettled
moved to stage 3, #515String#replaceAll
moved to stage 2, behavior updated by the spec draft, #524Promise.any
moved to stage 1, #517- Removed
es.regexp.flags
dependency fromes.regexp.to-string
, #536, #537 - Fixed IE8- non-enumerable properties support in
Object.{ assign, entries, values }
, #541 - Fixed support of primitives in
Object.getOwnPropertySymbols
in Chrome 38 / 39, #539 window.postMessage
-based task implementation uses location origin over'*'
, #542- Lookup
PromiseConstructor.resolve
only once inPromise
combinators, tc39/ecma262#1506 - Temporarily removed
core-js
dependency fromcore-js-compat
since it's required for missed at this moment feature - Show a message on
postinstall
- Added compat data for Chrome 76, FF 67, Node 12
- Fixed IE8- non-enumerable properties support in
Object.{ assign, entries, values }
, #541 - Fixed support of primitives in
Object.getOwnPropertySymbols
in Chrome 38 / 39, #539 - Show a message on
postinstall
- Fixed some cases of work with malformed URI sequences in
URLSearchParams
, #525 - Added a workaround for a rollup issue, #513
- Features
- Add new features:
Object.fromEntries
(ECMAScript 2019)Symbol#description
(ECMAScript 2019)- New
Set
methods (stage 2 proposal)Set#difference
Set#intersection
Set#isDisjointFrom
Set#isSubsetOf
Set#isSupersetOf
Set#symmetricDifference
Set#union
Promise.allSettled
(stage 2 proposal)- Getting last item from
Array
(stage 1 proposal)Array#lastItem
Array#lastIndex
String#replaceAll
(stage 1 proposal)String#codePoints
(stage 1 proposal)- New collections methods (stage 1 proposal)
Map.groupBy
Map.keyBy
Map#deleteAll
Map#every
Map#filter
Map#find
Map#findKey
Map#includes
Map#keyOf
Map#mapKeys
Map#mapValues
Map#merge
Map#reduce
Map#some
Map#update
Set#addAll
Set#deleteAll
Set#every
Set#filter
Set#find
Set#join
Set#map
Set#reduce
Set#some
WeakMap#deleteAll
WeakSet#addAll
WeakSet#deleteAll
compositeKey
andcompositeSymbol
methods (stage 1 proposal)Number.fromString
(stage 1 proposal)Math.seededPRNG
(stage 1 proposal)Symbol.patternMatch
(for stage 1 pattern matching proposal)Symbol.dispose
(for stage 1using
statement proposal)Promise.any
(withAggregateError
) (stage 0 proposal)URL
andURLSearchParam
fromURL
standard, also stage 0 proposal to ECMAScriptURL
URL#href
URL#origin
URL#protocol
URL#username
URL#password
URL#host
URL#hostname
URL#port
URL#pathname
URL#search
URL#searchParams
URL#hash
URL#toString
URL#toJSON
URLSearchParams
URLSearchParams#append
URLSearchParams#delete
URLSearchParams#get
URLSearchParams#getAll
URLSearchParams#has
URLSearchParams#set
URLSearchParams#sort
URLSearchParams#toString
URLSearchParams#keys
URLSearchParams#values
URLSearchParams#entries
URLSearchParams#@@iterator
.forEach
method on iterable DOM collections (#329)
- Improve existing features:
- Add triggering unhandled
Promise
rejection events (instead of only global handlers), #205. - Wrap
fetch
for correct with polyfilledPromise
and preventing problems like #178, #332, #371. - Add support of
@@isConcatSpreadable
toArray#concat
. - Add support of
@@species
toArray#{concat, filter, map, slice, splice}
. - Add direct
.exec
calling toRegExp#{@@replace, @@split, @@match, @@search}
. Also, added fixes forRegExp#exec
method. #411, #434, #453, thanks @nicolo-ribaudo. - Correct iterators prototypes chain, related #261.
- Correct Typed Arrays prototypes chain, related #378.
- Make the internal state of polyfilled features completely unobservable, #146.
- Add validation of receiver's internal class to missed non-generic methods.
- Fix descriptors of global properties.
- In the version without global pollution, if
Object#toString
does not support@@toStringTag
, add to wrapped prototypes owntoString
method with@@toStringTag
logic, see #199.
- Add triggering unhandled
- Update standard features and proposals:
asap
(old stage 0 proposal) replaced byqueueMicrotask
(a part of HTML spec)- Update
Observable
(#257, #276, etc.) - Update
Array#flatten
->Array#flat
andArray#flatMap
- Update
global
stage 3 proposal - renameglobal
toglobalThis
- Update
String#matchAll
(proposal-string-matchall#17, proposal-string-matchall#38, proposal-string-matchall#41, etc.) and move to the stage 3 - Update
.name
properties ofString#{trimStart, trimEnd , trimLeft, trimRight}
, move to the stage 3 - Remove mongolian vowel separator (U+180E) from the list of whitespaces for methods like
String#trim
(ES6 -> ES7)
- Mark ES2016, ES2017, ES2018, ES2019 features as stable:
Array#{ flat, flatMap }
{ Array, %TypedArray% }#includes
Object.{ values, entries}
Object.getOwnPropertyDescriptors
String#{ padStart, padEnd }
String#{ trimStart, trimEnd, trimLeft, trimRight }
Promise#finally
Symbol.asyncIterator
Object#__(define|lookup)[GS]etter__
- Remove obsolete features:
Error.isError
(withdrawn)System.global
andglobal
(replaced byglobalThis
)Map#toJSON
andSet#toJSON
(rejected)RegExp.escape
(rejected)Reflect.enumerate
(removed from the spec)- Unnecessary iteration methods from
CSSRuleList
,MediaList
,StyleSheetList
- No more non-standard features, finally removed:
Dict
Object.{classof, isObject, define, make}
Function#part
Number#@@iterator
String#{escapeHTML, unescapeHTML}
delay
- Add
.sham
flag to features which can't be properly polyfilled and / or not recommended for usage:Symbol
constructor - we can't add new primitives.Object.prototype
accessors too expensive.Object.{create, defineProperty, defineProperties, getOwnPropertyDescriptor, getOwnPropertyDescriptors}
,Reflect.{defineProperty, getOwnPropertyDescriptor}
can't be properly polyfilled without descriptors support.Object.{freeze, seal, preventExtensions}
,Reflect.preventExtensions
can't be properly polyfilled in ES3 environment.Object.getPrototypeOf
can be deceived in ES3 environment.Reflect.construct
can't be polyfilled for a correct work withnewTarget
argument on built-ins.- Typed Array constructors polyfill is quite correct but too expensive.
URL
constructor in engines without descriptors support.
- Add new features:
- Bug and compatibility fixes:
- Fix deoptimisation of iterators in V8, #377.
- Fix import of property before constructor which should contain this property, #262.
- Fix some cases of IE11
WeakMap
frozen keys fallback, #384. - Fix non-enumerable integer keys issue because of Nashorn ~ JDK8 bug, #389.
- Fix Safari 12.0
Array#reverse
bug. - One more fix for microtasks in iOS related #339.
- Added a fallback for Rhino bug, #440.
- Many other internal fixes and improvements.
- Repository:
- Change
core-js
repository structure to monorepo with packages in/packages/
directory. - Clean-up it, remove all possible duplicates, generated files, etc.
- Change
- Packages:
- Extract a version without global namespace pollution to a separate
core-js-pure
package (replacement forcore-js/library
). - Leave only one pair of bundles (global, with all polyfills) and move it to
core-js-bundle
package. - Remove bundling logic from
core-js
package, leave it only incore-js-builder
package. - Clean-up packages.
- Because of all approaches, reduce size of packages from ~2mb for
core-js@2
to:- ~500kb for
core-js
package - ~440kb for
core-js-pure
package
- ~500kb for
- Finally remove
bower.json
- Extract a version without global namespace pollution to a separate
- CommonJS API, namespaces:
- Add availability configuration of aggressiveness.
- Move
core-js/library
to separatecore-js-pure
package. - Because of removing all non-standard features, we no longer need
core-js/shim
entry point, replace it just withcore-js
. - Move all features from ES5, ES2015, ES2016, ES2017, ES2018 and ES2019 to one namespace for stable ES - it's available as
core-js/es
, all those features inmodules
folder hases.
prefix. - Change prefix for ES proposals from
es7.
toesnext.
, they no longer available incore-js/es7
, usecore-js/stage/*
instead of that. - Rename
core-js(/library)/fn
tocore-js(-pure)/features
for improve readability. - Allow more granular inclusion of features from
/es/
path (for example,core-js/es/array/from
). - Add
/stable/
entry points as an equal of/features/
for stable features, without proposals. - Add
/proposals/
entry points for allow include all features from one proposal (for example,core-js/proposals/reflect-metadata
). - Add
/es|stable|features/instance/
entry points for getting polyfill of the related method for passed instance (could be used in cases likebabel-runtime
). - Split typed arrays polyfills. Now you can, for example, load only required method (for example,
core-js/es/typed-array/from
). - Extract well-known symbols definition from
es.symbol
module for loading only required features, for example, in MS Edge. - Rename
web.dom
namespace toweb.dom-collections
. - Rename
es6.regexp.{match, replace, search, split}
->es.string.{match, replace, search, split}
- mainly it's fixes / adding support of well-known symbols to string methods, only in second place adding related methods to regexp prototype. - Relax
/modules/
directory by moving internal modules to/internals/
directory. - Remove deprecated array entry points:
core-js(/library)/fn/array/{pop, push, reverse, shift, unshift}
. core
object no longer available in the global version, entry points which previously returned it now returnsglobalThis
object. Also, don't set globalcore
property.- Add some missing entry points.
- Tools, tests, code quality:
- Added
core-js-compat
package with:- Data about the necessity of
core-js
modules and API for getting a list of requiredcore-js
modules bybrowserslist
query, #466. - Data which modules load by each entry point (mainly useful for tools like
@babel/preset-env
). - Data which modules added in minor versions (mainly useful for tools like
@babel/preset-env
).
- Data about the necessity of
core-js-builder
package:- Added
targets
option withbrowserslist
query. - Removed an option for generation bundle of a version without global namespace pollution - now it's an odd use case.
- Removed UMD wrapper from a generated code of bundles - we don't need it for a global polyfill.
- Added
- Getting rid of LiveScript, usage another language in JS standard library looks strange and impedes usage of tools like ESLint:
- Tests are rewritten to JS.
- Scripts are rewritten to JS.
- Babel with minimalistic config (which should work anywhere) used on tests.
- ESLint used on tests and tools.
- Source code refactored for improving readability.
- Added
- Fixed buggy
String#padStart
andString#padEnd
mobile Safari implementations, #414.
- Added a workaround against crushing an old IE11.0.9600.16384 build, #485.
- Added a workaround for
babel-minify
bug, #479
- Fixed handling of
$
inString#replace
, #471
- Add direct
.exec
calling toRegExp#{@@replace, @@split, @@match, @@search}
. Also, added fixes forRegExp#exec
method. #428, #435, #458, thanks @nicolo-ribaudo.
- Get rid of reserved variable name
final
, related #400
- Forced replace native
Promise
in V8 6.6 (Node 10 and Chrome 66) because of a bug with resolving custom thenables - Added a workaround for usage buggy native LG WebOS 2
Promise
in microtask implementation, #396 - Added modern version internal debugging information about used versions
- Fixed one case of deoptimization built-in iterators in V8, related #377
- Fixed some cases of iterators feature detection, #368
- Fixed manually entered NodeJS domains issue in
Promise
, #367 - Fixed
Number.{parseInt, parseFloat}
entry points - Fixed
__(define|lookup)[GS]etter__
export in thelibrary
version
- Fixed calling
onunhandledrejectionhandler
multiple times for onePromise
chain, #318 - Forced replacement of
String#{padStart, padEnd}
in Safari 10 because of a bug, #280 - Fixed
Array#@@iterator
in a very rare version ofWebKit
, #236 and #237 - One more #345-related fix
MutationObserver
no longer used for microtask implementation in iOS Safari because of bug with scrolling, #339- Fixed
JSON.stringify(undefined, replacer)
case in the wrapper from theSymbol
polyfill, #345 Array()
calls changed tonew Array()
for V8 optimisation
- Updated
Promise#finally
per tc39/proposal-promise-finally#37 - Optimized usage of some internal helpers for reducing size of
shim
version - Fixed some entry points for virtual methods
- Added
Promise#finally
stage 3 proposal, #225 - Added
Promise.try
stage 1 proposal - Added
Array#flatten
andArray#flatMap
stage 1 proposal - Added
.of
and.from
methods on collection constructors stage 1 proposal:Map.of
Set.of
WeakSet.of
WeakMap.of
Map.from
Set.from
WeakSet.from
WeakMap.from
- Added
Math
extensions stage 1 proposal, #226:Math.clamp
Math.DEG_PER_RAD
Math.degrees
Math.fscale
Math.RAD_PER_DEG
Math.radians
Math.scale
- Added
Math.signbit
stage 1 proposal - Updated
global
stage 3 proposal - addedglobal
global object,System.global
deprecated - Updated
Object.getOwnPropertyDescriptors
to the final version - it should not create properties if descriptors areundefined
- Updated the list of iterable DOM collections, #249, added:
CSSStyleDeclaration#@@iterator
CSSValueList#@@iterator
ClientRectList#@@iterator
DOMRectList#@@iterator
DOMStringList#@@iterator
DataTransferItemList#@@iterator
FileList#@@iterator
HTMLAllCollection#@@iterator
HTMLCollection#@@iterator
HTMLFormElement#@@iterator
HTMLSelectElement#@@iterator
MimeTypeArray#@@iterator
NamedNodeMap#@@iterator
PaintRequestList#@@iterator
Plugin#@@iterator
PluginArray#@@iterator
SVGLengthList#@@iterator
SVGNumberList#@@iterator
SVGPathSegList#@@iterator
SVGPointList#@@iterator
SVGStringList#@@iterator
SVGTransformList#@@iterator
SourceBufferList#@@iterator
TextTrackCueList#@@iterator
TextTrackList#@@iterator
TouchList#@@iterator
- Updated stages of proposals:
- Updated typed arrays to the modern (ES2016+) arguments validation, #293
- Fixed
%TypedArray%.from
Safari bug, #285 - Fixed compatibility with old version of Prototype.js, #278, #289
Function#name
no longer cache the result for correct behaviour with inherited constructors, #296- Added errors on incorrect context of collection methods, #272
- Fixed conversion typed array constructors to string, fix #300
- Fixed
Set#size
with debugger ReactNative for Android, #297 - Fixed an issue with Electron-based debugger, #230
- Fixed compatibility with incomplete third-party
WeakMap
polyfills, #252 - Added a fallback for
Date#toJSON
in engines without nativeDate#toISOString
, #220 - Added support for Sphere Dispatch API, #286
- Seriously changed the coding style and the ESLint config
- Updated many dev dependencies (
webpack
,uglify
, etc) - Some other minor fixes and optimizations
- Fixed
script
tag for some parsers, #204, #216 - Removed some unused variables, #217, #218
- Fixed MS Edge
Reflect.construct
andReflect.apply
- they should not allow primitive asargumentsList
argument
- Added
Observable
, stage 1 proposal - Fixed behavior
Object.{getOwnPropertySymbols, getOwnPropertyDescriptor}
andObject#propertyIsEnumerable
onObject.prototype
Reflect.construct
andReflect.apply
should throw an error ifargumentsList
argument is not an object, #194
- Added
asap
for enqueuing microtasks, stage 0 proposal - Added well-known symbol
Symbol.asyncIterator
for stage 2 async iteration proposal - Added well-known symbol
Symbol.observable
for stage 1 observables proposal String#{padStart, padEnd}
returns original string if filler is empty string, TC39 meeting notesObject.values
andObject.entries
moved to stage 4 from 3, TC39 meeting notesSystem.global
moved to stage 2 from 1, TC39 meeting notesMap#toJSON
andSet#toJSON
rejected and will be removed from the next major release, TC39 meeting notesError.isError
withdrawn and will be removed from the next major release, TC39 meeting notes- Added fallback for
Function#name
on non-extensible functions and functions with brokentoString
conversion, #193
- Added conversion
-0
to+0
toArray#{indexOf, lastIndexOf}
, ES2016 fix - Added fixes for some
Math
methods in Tor Browser Array.{from, of}
no longer calls prototype setters- Added workaround over Chrome DevTools strange behavior, #186
- Fixed
Object.getOwnPropertyNames(window)
2.1+
versions bug, #181
- Added
String#matchAll
, proposal - Added
Object#__(define|lookup)[GS]etter__
, annex B ES2017 - Added
@@toPrimitive
methods toDate
andSymbol
- Fixed
%TypedArray%#slice
in Edge ~ 13 (throws with@@species
and wrapped / inherited constructor) - Some other minor fixes
- Improved support NodeJS domains in
Promise#then
, #180 - Added fallback for
Date#toJSON
bug in Qt Script, #173
- Added fallback for
Symbol
polyfill in Qt Script, #173 - Added one more fallback for IE11
Script Access Denied
error with iframes, #165
- Added fallback for
es6-promise
package bug, #176
- Some minor
Promise
fixes:- Browsers
rejectionhandled
event better HTML spec complaint - Errors in unhandled rejection handlers should not cause any problems
- Fixed typo in feature detection
- Browsers
- Some
Promise
improvements:- Feature detection:
- Added detection unhandled rejection tracking support - now it's available everywhere, #140
- Added detection
@@species
pattern support for completely correct subclassing - Removed usage
Object.setPrototypeOf
from feature detection and noisy console message about it in FF
Promise.all
fixed for some very specific cases
- Feature detection:
- API:
- ES5 polyfills are split and logic, used in other polyfills, moved to internal modules
- All entry point works in ES3 environment like IE8- without
core-js/(library/)es5
- Added all missed single entry points for ES5 polyfills
- Separated ES5 polyfills moved to the ES6 namespace. Why?
- Mainly, for prevent duplication features in different namespaces - logic of most required ES5 polyfills changed in ES6+:
- Already added changes for:
Object
statics - should accept primitives, new whitespaces lists inString#trim
,parse(Int|float)
,RegExp#toString
logic,String#split
, etc - Should be changed in the future:
@@species
andToLength
logic inArray
methods,Date
parsing,Function#bind
, etc - Should not be changed only several features like
Array.isArray
andDate.now
- Already added changes for:
- Some ES5 polyfills required for modern engines
- Mainly, for prevent duplication features in different namespaces - logic of most required ES5 polyfills changed in ES6+:
- All old entry points should work fine, but in the next major release API can be changed
- All entry point works in ES3 environment like IE8- without
Object.getOwnPropertyDescriptors
moved to the stage 3, January TC39 meeting- Added
umd
option for custom build process, #169 - Returned entry points for
Array
statics, removed in2.0
, for compatibility withbabel
6
and for future fixes
- ES5 polyfills are split and logic, used in other polyfills, moved to internal modules
- Deprecated:
Reflect.enumerate
deprecated and will be removed from the next major release, January TC39 meeting
- New Features:
- Added
Reflect
metadata API as a pre-strawman feature, #152:Reflect.defineMetadata
Reflect.deleteMetadata
Reflect.getMetadata
Reflect.getMetadataKeys
Reflect.getOwnMetadata
Reflect.getOwnMetadataKeys
Reflect.hasMetadata
Reflect.hasOwnMetadata
Reflect.metadata
- Implementation / fixes
Date#toJSON
- Fixes for
parseInt
andNumber.parseInt
- Fixes for
parseFloat
andNumber.parseFloat
- Fixes for
RegExp#toString
- Fixes for
Array#sort
- Fixes for
Number#toFixed
- Fixes for
Number#toPrecision
- Additional fixes for
String#split
(RegExp#@@split
)
- Added
- Improvements:
- Correct subclassing wrapped collections,
Number
andRegExp
constructors with native class syntax - Correct support
SharedArrayBuffer
and buffers from other realms in typed arrays wrappers - Additional validations for
Object.{defineProperty, getOwnPropertyDescriptor}
andReflect.defineProperty
- Correct subclassing wrapped collections,
- Bug Fixes:
- Fixed some cases
Array#lastIndexOf
with negative second argument
- Fixed some cases
- Added fallback for V8 ~ Chrome 49
Promise
subclassing bug causes unhandled rejection on feature detection, #159 - Added fix for very specific environments with global
window === null
- Temporarily removed
length
validation fromUint8Array
constructor wrapper. Reason - bug inws
module (->socket.io
) which passes toBuffer
constructor ->Uint8Array
float and uses theV8
bug for conversion to int (by the spec should be thrown an error). It creates problems for many people. I hope, it will be returned after fixing this bug inV8
.
- Forced usage
Promise.resolve
polyfill in thelibrary
version for correct work with wrapper Object.assign
should be defined in the strict mode -> throw an error on extension non-extensible objects, #154
- Added implementations and fixes Typed Arrays-related features
ArrayBuffer
,ArrayBuffer.isView
,ArrayBuffer#slice
DataView
with all getter / setter methodsInt8Array
,Uint8Array
,Uint8ClampedArray
,Int16Array
,Uint16Array
,Int32Array
,Uint32Array
,Float32Array
andFloat64Array
constructors%TypedArray%.{for, of}
,%TypedArray%#{copyWithin, every, fill, filter, find, findIndex, forEach, indexOf, includes, join, lastIndexOf, map, reduce, reduceRight, reverse, set, slice, some, sort, subarray, values, keys, entries, @@iterator, ...}
- Added
System.global
, proposal, November TC39 meeting - Added
Error.isError
, proposal, November TC39 meeting - Added
Math.{iaddh, isubh, imulh, umulh}
, proposal RegExp.escape
moved from thees7
to the non-standardcore
namespace, July TC39 meeting - too slow, but it's condition of stability, #116Promise
- Some performance optimisations
- Added basic support
rejectionHandled
event /onrejectionhandled
handler to the polyfill - Removed usage
@@species
fromPromise.{all, race}
, November TC39 meeting
- Some improvements collections polyfills
O(1)
and preventing possible leaks with frozen keys, #134- Correct observable state object keys
- Renamed
String#{padLeft, padRight}
->String#{padStart, padEnd}
, proposal, November TC39 meeting (they want to rename it on each meeting?O_o), #132 - Added
String#{trimStart, trimEnd}
as aliases forString#{trimLeft, trimRight}
, proposal, November TC39 meeting - Added annex B HTML methods - ugly, but also the part of the spec
- Added little fix for
Date#toString
-new Date(NaN).toString()
should be'Invalid Date'
- Added
{keys, values, entries, @@iterator}
methods to DOM collections which should have iterable interface or should be inherited fromArray
-NodeList
,DOMTokenList
,MediaList
,StyleSheetList
,CSSRuleList
. - Removed Mozilla
Array
generics - deprecated and will be removed from FF, looks like strawman is dead, available alternative shim - Removed
core.log
module - CommonJS API
- Added entry points for virtual methods
- Added entry points for stages proposals
- Some other minor changes
- Custom build from external scripts moved to the separate package for preventing problems with dependencies
- Changed
$
prefix for internal modules file names because Team Foundation Server does not support it, #129 - Additional fix for
SameValueZero
in V8 ~ Chromium 39-42 collections - Additional fix for FF27
Array
iterator - Removed usage shortcuts for
arguments
object - old WebKit bug, #150 {Map, Set}#forEach
non-generic, #144- Many other improvements
- Reject with
TypeError
on attempt resolve promise itself - Correct behavior with broken
Promise
subclass constructors / methods - Added
Promise
-based fallback for microtask - Fixed V8 and FF
Array#{values, @@iterator}.name
- Fixed IE7-
[1, 2].join(undefined) -> '1,2'
- Some other fixes / improvements / optimizations
- Some more
Number
constructor fixes:- Fixed V8 ~ Node 0.8 bug:
Number('+0x1')
should beNaN
- Fixed
Number(' 0b1\n')
case, should be1
- Fixed
Number()
case, should be0
- Fixed V8 ~ Node 0.8 bug:
- Fixed
Number('0b12') -> NaN
case in the shim - Fixed V8 ~ Chromium 40- bug -
Weak(Map|Set)#{delete, get, has}
should not throw errors #124 - Some other fixes and optimizations
- Fixed some problems related old V8 bug
Object('a').propertyIsEnumerable(0) // => false
, for example,Object.assign({}, 'qwe')
from the last release - Fixed
.name
property andFunction#toString
conversion some polyfilled methods - Fixed
Math.imul
arity in Safari 8-
- Improved optimisations for V8
- Fixed build process from external packages, #120
- One more
Object.{assign, values, entries}
fix for very specific case
- Replaced fix
JSON.stringify
+Symbol
behavior from.toJSON
method to wrappingJSON.stringify
- little more correct, compat-table/642 - Fixed typo which broke tasks scheduler in WebWorkers in old FF, #114
- Added browser
Promise
rejection hook, #106 - Added correct
IsRegExp
logic toString#{includes, startsWith, endsWith}
andRegExp
constructor,@@match
case, example - Updated
String#leftPad
with proposal: string filler truncated from the right side - Replaced V8
Object.assign
- its properties order not only incorrect, it is non-deterministic and it causes some problems - Fixed behavior with deleted in getters properties for
Object.{
assign
,
entries, values
}
, example - Fixed
Math.sinh
with very small numbers in V8 near Chromium 38 - Some other fixes and optimizations
- Fixed support symbols in FF34-35
Object.assign
- Fixed collections iterators in FF25-26
- Fixed non-generic WebKit
Array.of
- Some other fixes and optimizations
- Added
toJSON
method toSymbol
polyfill and to MS Edge implementation for expectedJSON.stringify
result w/o patching this method - Replaced
Reflect.construct
implementations w/o correct support third argument - Fixed
global
detection with changeddocument.domain
in ~IE8, #100
- Added more correct microtask implementation for
Promise
- Updated string padding to actual proposal - renamed, minor internal changes:
String#lpad
->String#padLeft
String#rpad
->String#padRight
- Added string trim functions - proposal, defacto standard - required only for IE11- and fixed for some old engines:
String#trimLeft
String#trimRight
String#trim
fixed for some engines by es6 spec and moved fromes5
to singlees6
module- Split
es6.object.statics-accept-primitives
- Caps for
freeze
-familyObject
methods moved fromes5
toes6
namespace and joined with es6 wrappers es5
namespace also includes modules, moved toes6
namespace - you can use it as before- Increased
MessageChannel
priority in$.task
, #95 - Does not get
global.Symbol
on each getting iterator, if you wanna use alternativeSymbol
shim - add it beforecore-js
Reflect.construct
optimized and fixed for some cases- Simplified
Reflect.enumerate
, see this question - Some corrections in
Math.acosh
- Fixed
Math.imul
for old WebKit - Some fixes in string / RegExp well-known symbols logic
- Some other fixes and optimizations
- Some fixes for final MS Edge, replaced broken native
Reflect.defineProperty
- Some minor fixes and optimizations
- Changed compression
client/*.min.js
options for safeFunction#name
andFunction#length
, should be fixed #92
- Added logic for well-known symbols:
Symbol.match
Symbol.replace
Symbol.split
Symbol.search
- Actualized and optimized work with iterables:
- Optimized
Map
,Set
,WeakMap
,WeakSet
constructors,Promise.all
,Promise.race
for defaultArray Iterator
- Optimized
Array.from
for defaultArray Iterator
- Added
core.getIteratorMethod
helper
- Optimized
- Uses enumerable properties in shimmed instances - collections, iterators, etc for optimize performance
- Added support native constructors to
Reflect.construct
with 2 arguments - Added support native constructors to
Function#bind
shim withnew
- Removed obsolete
.clear
methods nativeWeak
-collections - Maximum modularity, reduced minimal custom build size, separated into submodules:
es6.reflect
es6.regexp
es6.math
es6.number
es7.object.to-array
core.object
core.string
core.iter-helpers
- Internal modules (
$
,$.iter
, etc)
- Many other optimizations
- Final cleaning non-standard features
- Moved
$for
to separate library. This work for syntax -for-of
loop and comprehensions - Moved
Date#{format, formatUTC}
to separate library. Standard way for this -ECMA-402
- Removed
Math
methods fromNumber.prototype
. Slight sugar for simpleMath
methods calling - Removed
{Array#, Array, Dict}.turn
- Removed
core.global
- Moved
- Uses
ToNumber
instead ofToLength
inNumber Iterator
,Array.from(2.5)
will be[0, 1, 2]
instead of[0, 1]
- Fixed #85 - invalid
Promise
unhandled rejection message in nestedsetTimeout
- Fixed #86 - support FF extensions
- Fixed #89 - behavior
Number
constructor in strange case
- Removed
/
fromRegExp.escape
escaped characters
- Updated
RegExp.escape
to the latest proposal - Fixed conflict with webpack dev server + IE buggy behavior
- More correct order resolving thenable in
Promise
polyfill - Uses polyfill instead of buggy V8
Promise
- Collections from
library
version return wrapped native instances - Fixed collections prototype methods in
library
version - Optimized
Math.hypot
- Updated
Promise.resolve
behavior - Added fallback for IE11 buggy
Object.getOwnPropertyNames
+ iframe - Some other fixes
- Added fallback for
Symbol
polyfill for old Android - Some other fixes
- Different instances
core-js
should use / recognize the same symbols - Some fixes
- Simplified custom build
- Added custom build js api
- Added
grunt-cli
todevDependencies
fornpm run grunt
- Some fixes
- Wrapped
Function#toString
for correct work wrapped methods / constructors with methods similar to thelodash
isNative
- Added proto versions of methods to export object in
default
version for consistency withlibrary
version
- Wrapped
Object#propertyIsEnumerable
forSymbol
polyfill - Added proto versions of methods to
library
for ES7 bind syntax - Some other fixes
- Fixed
Math.hypot
with negative arguments - Added
Object#toString.toString
as fallback forlodash
isNative
- Added support DOM collections to IE8-
Array#slice
- Added
String#lpad
,String#rpad
- Added cap for
Function#@@hasInstance
- Some fixes and optimizations
- Fixed
RegExp
constructor
- Some fixes and optimizations
- More correct
Promise
unhandled rejection tracking and resolving / rejection priority
- Fixed
__proto__
-basedPromise
subclassing in some environments
- Added correct symbols descriptors
- Fixed behavior
Object.{assign, create, defineProperty, defineProperties, getOwnPropertyDescriptor, getOwnPropertyDescriptors}
with symbols - Added single entry points for
Object.{create, defineProperty, defineProperties}
- Fixed behavior
- Added
Map#toJSON
- Removed non-standard methods
Object#[_]
andFunction#only
- they solves syntax problems, but now in compilers available arrows andin near future will be availableavailable bind syntax - Removed non-standard undocumented methods
Symbol.{pure, set}
- Some fixes and internal changes
- Uses
webpack
instead ofbrowserify
for browser builds - more compression-friendly result
- Fixed
Array
statics with single entry points
Math.fround
now also works in IE9-- Added
Set#toJSON
- Some optimizations and fixes
- Fixed
Symbol.keyFor
- Changed CommonJS API
- Split and renamed some modules
- Added support ES3 environment (ES5 polyfill) to all default versions - size increases slightly (+ ~4kb w/o gzip), many issues disappear, if you don't need it - simply include only required namespaces / features / modules
- Removed abstract references support - proposal has been superseded =\
$for.isIterable
->core.isIterable
,$for.getIterator
->core.getIterator
, temporary available in old namespace- Fixed iterators support in v8
Promise.all
andPromise.race
- Many other fixes
- Some fixes
- Some fixes
- Rewritten and split into CommonJS modules
- Fixed support
Object.defineProperty
with accessors on DOM elements on IE8
- Added support safe closing iteration - calling
iterator.return
on abort iteration, if it exists - Added basic support
Promise
unhandled rejection tracking in shim - Added
Object.getOwnPropertyDescriptors
- Removed
console
cap - creates too many problems - Restructuring namespaces
- Some fixes
- Some fixes
- Added support binary and octal literals to
Number
constructor - Added
Date#toISOString
- Some fixes
- Some fixes
- Systematization of modules
- Split
es6
module - Split
console
module:web.console
- only cap for missing methods,core.log
- bound methods & additional features - Added
delay
method - Some fixes
Object.getOwnPropertySymbols
polyfill returns array of wrapped keys
- FF20-24 fix
- Some collections fixes
- Added support frozen objects as collections keys
- Added
Object.getOwnPropertySymbols
- Added
NodeList.prototype[@@iterator]
- Added basic
@@species
logic - getter in native constructors - Removed
Function#by
- Some fixes
- Some fixes
- Enabled CSP support
- Added
Function
instancesname
property for IE9+
Object
static methods accept primitivesRegExp
constructor can alter flags (IE9+)- Added
Array.prototype[Symbol.unscopables]
- Some fixes
- Added
es6.reflect
module:- Added
Reflect.apply
- Added
Reflect.construct
- Added
Reflect.defineProperty
- Added
Reflect.deleteProperty
- Added
Reflect.enumerate
- Added
Reflect.get
- Added
Reflect.getOwnPropertyDescriptor
- Added
Reflect.getPrototypeOf
- Added
Reflect.has
- Added
Reflect.isExtensible
- Added
Reflect.preventExtensions
- Added
Reflect.set
- Added
Reflect.setPrototypeOf
- Added
core-js
methods now can use externalSymbol.iterator
polyfill- Some fixes
- Console cap excluded from node.js default builds
- Added cap for ES5 freeze-family methods
- Fixed
console
bug
- Some fixes
- Optimize
Map
&Set
:- Use entries chain on hash table
- Fast & correct iteration
- Iterators moved to
es6
andes6.collections
modules
console
no longer shortcut forconsole.log
(compatibility problems)- Some fixes
- Better compliance of ES6
- Added
Math.fround
(IE10+) - Some fixes
- Symbols:
- Added option to disable addition setter to
Object.prototype
for Symbol polyfill:- Added
Symbol.useSimple
- Added
Symbol.useSetter
- Added
- Added cap for well-known Symbols:
- Added
Symbol.hasInstance
- Added
Symbol.isConcatSpreadable
- Added
Symbol.match
- Added
Symbol.replace
- Added
Symbol.search
- Added
Symbol.species
- Added
Symbol.split
- Added
Symbol.toPrimitive
- Added
Symbol.unscopables
- Added
- Added option to disable addition setter to
- Added
RegExp#flags
(December 2014 Draft Rev 29) - Added
String.raw
- Repair converting -0 to +0 in native collections
- Added
es7.proposals
andes7.abstract-refs
modules - Added
String#at
- Added real
String Iterator
, older versions used Array Iterator - Added abstract references support:
- Added
Symbol.referenceGet
- Added
Symbol.referenceSet
- Added
Symbol.referenceDelete
- Added
Function#@@referenceGet
- Added
Map#@@referenceGet
- Added
Map#@@referenceSet
- Added
Map#@@referenceDelete
- Added
WeakMap#@@referenceGet
- Added
WeakMap#@@referenceSet
- Added
WeakMap#@@referenceDelete
- Added
Dict.{...methods}[@@referenceGet]
- Added
- Removed deprecated
.contains
methods - Some fixes
- Added
Array#copyWithin
- Added
String#codePointAt
- Added
String.fromCodePoint
- Added
Dict.mapPairs
- TC39 November meeting:
.contains
->.includes
String#contains
->String#includes
Array#contains
->Array#includes
Dict.contains
->Dict.includes
- Removed
WeakMap#clear
- Removed
WeakSet#clear
Map
&Set
bug fix
- Public release