From d80fea47afb3369d52d45e62b4be50806122ed4c Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Sat, 14 Oct 2017 00:10:01 +0200 Subject: [PATCH] Add polyfills for ES6 static Object methods These functions do exist in ES5, but we still need to load the polyfills, as they differ in ES6 sligthly --- .../data/built-in-features.js | 12 +++ .../babel-preset-env/data/built-ins.json | 100 ++++++++++++++++++ .../test/debug-fixtures/android/stdout.txt | 10 ++ .../test/debug-fixtures/builtins/stdout.txt | 10 ++ .../shippedProposals/stdout.txt | 10 ++ .../specific-targets/stdout.txt | 10 ++ .../versions-decimals/stdout.txt | 10 ++ .../versions-strings/stdout.txt | 10 ++ .../exclude-regenerator/expected.js | 10 ++ .../ie-11-built-ins/expected.js | 10 ++ .../use-builtins-all/expected.js | 10 ++ .../use-builtins-ie-9/expected.js | 10 ++ 12 files changed, 212 insertions(+) diff --git a/experimental/babel-preset-env/data/built-in-features.js b/experimental/babel-preset-env/data/built-in-features.js index c7b0b3c2a4..a5d4786aff 100644 --- a/experimental/babel-preset-env/data/built-in-features.js +++ b/experimental/babel-preset-env/data/built-in-features.js @@ -109,6 +109,18 @@ const es2015 = { ] }, + "es6.object.freeze": "Object static methods accept primitives / Object.freeze", + "es6.object.seal": "Object static methods accept primitives / Object.seal", + "es6.object.prevent-extensions": "Object static methods accept primitives / Object.preventExtensions", + "es6.object.is-frozen": "Object static methods accept primitives / Object.isFrozen", + "es6.object.is-sealed": "Object static methods accept primitives / Object.isSealed", + "es6.object.is-extensible": "Object static methods accept primitives / Object.isExtensible", + "es6.object.get-own-property-descriptor": + "Object static methods accept primitives / Object.getOwnPropertyDescriptor", + "es6.object.get-prototype-of": "Object static methods accept primitives / Object.getPrototypeOf", + "es6.object.keys": "Object static methods accept primitives / Object.keys", + "es6.object.get-own-property-names": "Object static methods accept primitives / Object.getOwnPropertyNames", + "es6.object.assign": "Object static methods / Object.assign", "es6.object.is": "Object static methods / Object.is", "es6.object.set-prototype-of": "Object static methods / Object.setPrototypeOf", diff --git a/experimental/babel-preset-env/data/built-ins.json b/experimental/babel-preset-env/data/built-ins.json index 7be58c28de..f6d6003e96 100644 --- a/experimental/babel-preset-env/data/built-ins.json +++ b/experimental/babel-preset-env/data/built-ins.json @@ -300,6 +300,106 @@ "opera": "38", "electron": "1.2" }, + "es6.object.freeze": { + "chrome": "44", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "31", + "electron": "0.31" + }, + "es6.object.seal": { + "chrome": "44", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "31", + "electron": "0.31" + }, + "es6.object.prevent-extensions": { + "chrome": "44", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "31", + "electron": "0.31" + }, + "es6.object.is-frozen": { + "chrome": "44", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "31", + "electron": "0.31" + }, + "es6.object.is-sealed": { + "chrome": "44", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "31", + "electron": "0.31" + }, + "es6.object.is-extensible": { + "chrome": "44", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "31", + "electron": "0.31" + }, + "es6.object.get-own-property-descriptor": { + "chrome": "44", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "31", + "electron": "0.31" + }, + "es6.object.get-prototype-of": { + "chrome": "44", + "edge": "12", + "firefox": "3.5", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "31", + "electron": "0.31" + }, + "es6.object.keys": { + "chrome": "40", + "edge": "12", + "firefox": "35", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "27", + "electron": "0.21" + }, + "es6.object.get-own-property-names": { + "chrome": "40", + "edge": "12", + "firefox": "33", + "safari": "9", + "node": "4", + "ios": "9", + "opera": "27", + "electron": "0.21" + }, "es6.object.assign": { "chrome": "45", "edge": "12", diff --git a/experimental/babel-preset-env/test/debug-fixtures/android/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/android/stdout.txt index d63450c7db..c09e2a6e3a 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/android/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/android/stdout.txt @@ -65,6 +65,16 @@ Using polyfills with `entry` option: es6.reflect.set-prototype-of { "android":"4" } es6.promise { "android":"4" } es6.symbol { "android":"4" } + es6.object.freeze { "android":"4" } + es6.object.seal { "android":"4" } + es6.object.prevent-extensions { "android":"4" } + es6.object.is-frozen { "android":"4" } + es6.object.is-sealed { "android":"4" } + es6.object.is-extensible { "android":"4" } + es6.object.get-own-property-descriptor { "android":"4" } + es6.object.get-prototype-of { "android":"4" } + es6.object.keys { "android":"4" } + es6.object.get-own-property-names { "android":"4" } es6.object.assign { "android":"4" } es6.object.is { "android":"4" } es6.object.set-prototype-of { "android":"4" } diff --git a/experimental/babel-preset-env/test/debug-fixtures/builtins/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/builtins/stdout.txt index 7e7d9e9c52..6899486272 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/builtins/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/builtins/stdout.txt @@ -67,6 +67,16 @@ Using polyfills with `entry` option: es6.reflect.set-prototype-of { "ie":"10" } es6.promise { "ie":"10", "node":"6" } es6.symbol { "ie":"10", "node":"6" } + es6.object.freeze { "ie":"10" } + es6.object.seal { "ie":"10" } + es6.object.prevent-extensions { "ie":"10" } + es6.object.is-frozen { "ie":"10" } + es6.object.is-sealed { "ie":"10" } + es6.object.is-extensible { "ie":"10" } + es6.object.get-own-property-descriptor { "ie":"10" } + es6.object.get-prototype-of { "ie":"10" } + es6.object.keys { "ie":"10" } + es6.object.get-own-property-names { "ie":"10" } es6.object.assign { "ie":"10" } es6.object.is { "ie":"10" } es6.object.set-prototype-of { "ie":"10" } diff --git a/experimental/babel-preset-env/test/debug-fixtures/shippedProposals/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/shippedProposals/stdout.txt index 0a7e7efc43..5201d91a95 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/shippedProposals/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/shippedProposals/stdout.txt @@ -68,6 +68,16 @@ Using polyfills with `entry` option: es6.reflect.set-prototype-of {} es6.promise {} es6.symbol {} + es6.object.freeze {} + es6.object.seal {} + es6.object.prevent-extensions {} + es6.object.is-frozen {} + es6.object.is-sealed {} + es6.object.is-extensible {} + es6.object.get-own-property-descriptor {} + es6.object.get-prototype-of {} + es6.object.keys {} + es6.object.get-own-property-names {} es6.object.assign {} es6.object.is {} es6.object.set-prototype-of {} diff --git a/experimental/babel-preset-env/test/debug-fixtures/specific-targets/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/specific-targets/stdout.txt index 16b7be62a0..ad394dc28a 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/specific-targets/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/specific-targets/stdout.txt @@ -70,6 +70,16 @@ Using polyfills with `entry` option: es6.reflect.set-prototype-of { "ie":"10", "ios":"9", "safari":"7" } es6.promise { "ie":"10", "ios":"9", "safari":"7" } es6.symbol { "edge":"13", "firefox":"49", "ie":"10", "ios":"9", "safari":"7" } + es6.object.freeze { "ie":"10", "safari":"7" } + es6.object.seal { "ie":"10", "safari":"7" } + es6.object.prevent-extensions { "ie":"10", "safari":"7" } + es6.object.is-frozen { "ie":"10", "safari":"7" } + es6.object.is-sealed { "ie":"10", "safari":"7" } + es6.object.is-extensible { "ie":"10", "safari":"7" } + es6.object.get-own-property-descriptor { "ie":"10", "safari":"7" } + es6.object.get-prototype-of { "ie":"10", "safari":"7" } + es6.object.keys { "ie":"10", "safari":"7" } + es6.object.get-own-property-names { "ie":"10", "safari":"7" } es6.object.assign { "ie":"10", "safari":"7" } es6.object.is { "ie":"10", "safari":"7" } es6.object.set-prototype-of { "ie":"10", "safari":"7" } diff --git a/experimental/babel-preset-env/test/debug-fixtures/versions-decimals/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/versions-decimals/stdout.txt index 1479ccc2dd..e8d45bf931 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/versions-decimals/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/versions-decimals/stdout.txt @@ -77,6 +77,16 @@ Using polyfills with `entry` option: es6.reflect.set-prototype-of { "electron":"0.36", "ie":"10" } es6.promise { "electron":"0.36", "ie":"10", "node":"6.1" } es6.symbol { "electron":"0.36", "ie":"10", "node":"6.1" } + es6.object.freeze { "ie":"10" } + es6.object.seal { "ie":"10" } + es6.object.prevent-extensions { "ie":"10" } + es6.object.is-frozen { "ie":"10" } + es6.object.is-sealed { "ie":"10" } + es6.object.is-extensible { "ie":"10" } + es6.object.get-own-property-descriptor { "ie":"10" } + es6.object.get-prototype-of { "ie":"10" } + es6.object.keys { "ie":"10" } + es6.object.get-own-property-names { "ie":"10" } es6.object.assign { "ie":"10" } es6.object.is { "ie":"10" } es6.object.set-prototype-of { "ie":"10" } diff --git a/experimental/babel-preset-env/test/debug-fixtures/versions-strings/stdout.txt b/experimental/babel-preset-env/test/debug-fixtures/versions-strings/stdout.txt index 6d645733de..ec86820a3f 100644 --- a/experimental/babel-preset-env/test/debug-fixtures/versions-strings/stdout.txt +++ b/experimental/babel-preset-env/test/debug-fixtures/versions-strings/stdout.txt @@ -67,6 +67,16 @@ Using polyfills with `entry` option: es6.reflect.set-prototype-of { "ie":"10" } es6.promise { "ie":"10" } es6.symbol { "ie":"10" } + es6.object.freeze { "ie":"10" } + es6.object.seal { "ie":"10" } + es6.object.prevent-extensions { "ie":"10" } + es6.object.is-frozen { "ie":"10" } + es6.object.is-sealed { "ie":"10" } + es6.object.is-extensible { "ie":"10" } + es6.object.get-own-property-descriptor { "ie":"10" } + es6.object.get-prototype-of { "ie":"10" } + es6.object.keys { "ie":"10" } + es6.object.get-own-property-names { "ie":"10" } es6.object.assign { "ie":"10" } es6.object.is { "ie":"10" } es6.object.set-prototype-of { "ie":"10" } diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/exclude-regenerator/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/exclude-regenerator/expected.js index d034b4560a..9c79ef82d2 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/exclude-regenerator/expected.js +++ b/experimental/babel-preset-env/test/fixtures/preset-options/exclude-regenerator/expected.js @@ -28,6 +28,16 @@ import "babel-polyfill/lib/core-js/modules/es6.reflect.set"; import "babel-polyfill/lib/core-js/modules/es6.reflect.set-prototype-of"; import "babel-polyfill/lib/core-js/modules/es6.promise"; import "babel-polyfill/lib/core-js/modules/es6.symbol"; +import "babel-polyfill/lib/core-js/modules/es6.object.freeze"; +import "babel-polyfill/lib/core-js/modules/es6.object.seal"; +import "babel-polyfill/lib/core-js/modules/es6.object.prevent-extensions"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-frozen"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-sealed"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-extensible"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-own-property-descriptor"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-prototype-of"; +import "babel-polyfill/lib/core-js/modules/es6.object.keys"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-own-property-names"; import "babel-polyfill/lib/core-js/modules/es6.object.assign"; import "babel-polyfill/lib/core-js/modules/es6.object.is"; import "babel-polyfill/lib/core-js/modules/es6.object.set-prototype-of"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/ie-11-built-ins/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/ie-11-built-ins/expected.js index dff3ec0551..6751111298 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/ie-11-built-ins/expected.js +++ b/experimental/babel-preset-env/test/fixtures/preset-options/ie-11-built-ins/expected.js @@ -27,6 +27,16 @@ import "babel-polyfill/lib/core-js/modules/es6.reflect.set"; import "babel-polyfill/lib/core-js/modules/es6.reflect.set-prototype-of"; import "babel-polyfill/lib/core-js/modules/es6.promise"; import "babel-polyfill/lib/core-js/modules/es6.symbol"; +import "babel-polyfill/lib/core-js/modules/es6.object.freeze"; +import "babel-polyfill/lib/core-js/modules/es6.object.seal"; +import "babel-polyfill/lib/core-js/modules/es6.object.prevent-extensions"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-frozen"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-sealed"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-extensible"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-own-property-descriptor"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-prototype-of"; +import "babel-polyfill/lib/core-js/modules/es6.object.keys"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-own-property-names"; import "babel-polyfill/lib/core-js/modules/es6.object.assign"; import "babel-polyfill/lib/core-js/modules/es6.object.is"; import "babel-polyfill/lib/core-js/modules/es6.function.name"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-all/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-all/expected.js index 3f44cad315..3180f05116 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-all/expected.js +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-all/expected.js @@ -28,6 +28,16 @@ import "babel-polyfill/lib/core-js/modules/es6.reflect.set"; import "babel-polyfill/lib/core-js/modules/es6.reflect.set-prototype-of"; import "babel-polyfill/lib/core-js/modules/es6.promise"; import "babel-polyfill/lib/core-js/modules/es6.symbol"; +import "babel-polyfill/lib/core-js/modules/es6.object.freeze"; +import "babel-polyfill/lib/core-js/modules/es6.object.seal"; +import "babel-polyfill/lib/core-js/modules/es6.object.prevent-extensions"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-frozen"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-sealed"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-extensible"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-own-property-descriptor"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-prototype-of"; +import "babel-polyfill/lib/core-js/modules/es6.object.keys"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-own-property-names"; import "babel-polyfill/lib/core-js/modules/es6.object.assign"; import "babel-polyfill/lib/core-js/modules/es6.object.is"; import "babel-polyfill/lib/core-js/modules/es6.object.set-prototype-of"; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-ie-9/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-ie-9/expected.js index 3f44cad315..3180f05116 100644 --- a/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-ie-9/expected.js +++ b/experimental/babel-preset-env/test/fixtures/preset-options/use-builtins-ie-9/expected.js @@ -28,6 +28,16 @@ import "babel-polyfill/lib/core-js/modules/es6.reflect.set"; import "babel-polyfill/lib/core-js/modules/es6.reflect.set-prototype-of"; import "babel-polyfill/lib/core-js/modules/es6.promise"; import "babel-polyfill/lib/core-js/modules/es6.symbol"; +import "babel-polyfill/lib/core-js/modules/es6.object.freeze"; +import "babel-polyfill/lib/core-js/modules/es6.object.seal"; +import "babel-polyfill/lib/core-js/modules/es6.object.prevent-extensions"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-frozen"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-sealed"; +import "babel-polyfill/lib/core-js/modules/es6.object.is-extensible"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-own-property-descriptor"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-prototype-of"; +import "babel-polyfill/lib/core-js/modules/es6.object.keys"; +import "babel-polyfill/lib/core-js/modules/es6.object.get-own-property-names"; import "babel-polyfill/lib/core-js/modules/es6.object.assign"; import "babel-polyfill/lib/core-js/modules/es6.object.is"; import "babel-polyfill/lib/core-js/modules/es6.object.set-prototype-of";