es.symbol.description { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.symbol.async-iterator { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.symbol.match { "edge":"16" }
es.symbol.replace { "edge":"16" }
es.symbol.search { "edge":"16" }
es.symbol.split { "edge":"16" }
es.array.flat { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.array.flat-map { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.array.iterator { "chrome":"61", "opera":"48" }
es.array.reverse { "ios":"10.3", "safari":"10.1" }
es.array.sort { "chrome":"61", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.array.unscopables.flat { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.array.unscopables.flat-map { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.array-buffer.constructor { "ios":"10.3", "safari":"10.1" }
es.array-buffer.slice { "ios":"10.3", "safari":"10.1" }
es.number.parse-float { "ios":"10.3", "safari":"10.1" }
es.number.to-fixed { "edge":"16" }
es.object.define-getter { "chrome":"61", "opera":"48" }
es.object.define-setter { "chrome":"61", "opera":"48" }
es.object.from-entries { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.object.lookup-getter { "chrome":"61", "opera":"48" }
es.object.lookup-setter { "chrome":"61", "opera":"48" }
es.promise { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.promise.finally { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.regexp.constructor { "edge":"16" }
es.regexp.flags { "edge":"16" }
es.regexp.to-string { "edge":"16" }
es.string.ends-with { "edge":"16" }
es.string.includes { "edge":"16" }
es.string.match { "edge":"16" }
es.string.pad-end { "ios":"10.3", "safari":"10.1" }
es.string.pad-start { "ios":"10.3", "safari":"10.1" }
es.string.replace { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.string.search { "edge":"16" }
es.string.split { "edge":"16" }
es.string.starts-with { "edge":"16" }
es.string.trim { "ios":"10.3", "safari":"10.1" }
es.string.trim-end { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.string.trim-start { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
es.typed-array.float32-array { "ios":"10.3", "safari":"10.1" }
es.typed-array.float64-array { "ios":"10.3", "safari":"10.1" }
es.typed-array.int8-array { "ios":"10.3", "safari":"10.1" }
es.typed-array.int16-array { "ios":"10.3", "safari":"10.1" }
es.typed-array.int32-array { "ios":"10.3", "safari":"10.1" }
es.typed-array.uint8-array { "ios":"10.3", "safari":"10.1" }
es.typed-array.uint8-clamped-array { "ios":"10.3", "safari":"10.1" }
es.typed-array.uint16-array { "ios":"10.3", "safari":"10.1" }
es.typed-array.uint32-array { "ios":"10.3", "safari":"10.1" }
es.typed-array.from { "ios":"10.3", "safari":"10.1" }
es.typed-array.of { "ios":"10.3", "safari":"10.1" }
es.typed-array.to-locale-string { "edge":"16" }
web.dom-collections.iterator { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" }
web.immediate { "chrome":"61", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
web.queue-microtask { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" }
web.url { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" }
web.url.to-json { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" }
web.url-search-params { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" }
The codelab: "Serve modern code to modern browsers for faster page loads" isn't up to date anymore. We should think about how we want to keep advocating this.
The last week I've been on a witch hunt on why async-await got transpiled to generators when using @babel/preset-env which wasn't being transpiled in the codelab. Compat tables get updated and new versions of core-js 2 or 3 can change the polyfill game. The downside is that the
esmodules: truesetting will not scale overtime. We already see it happening as targeted browsers are > 3 years old. With the latest version of core-js we also add the promise polyfill.Browerlist for esmodules = true:
If we look at possible transforms for core-js@2 & esmodules adds:
Transforms
Polyfills
If we look at possible transforms for core-js@3 & esmodules adds.
Transforms
Polyfills
So basically core-js@3 does a better job to fix a lot of browsers bugs by using lots of polyfills to make browsers consistent but at a high cost of our bundle.
We need to find a better way to enable these polyfills, probably with dynamic imports or better static analysis.
I'm sorry that this issue isn't actionable. It's more to enable discussions on how to improve.
Some extra info:
cc @developit @addyosmani