From 1613418f9b25e56aa511a06f0b0e3c1856f05737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 17 Feb 2020 13:30:53 -0500 Subject: [PATCH] Update preset-env builtin-definitions (#10929) * chore: build corejs3-proposals.json from core-js-compat * fix: include finished proposals by default * update test fixtures * update test fixtures * chore: rename scripts * fix: add standarized entries for finished proposals * refactor: remove unused finished proposals json * revert test fixtures update * test against corejs 3.6 * fix: move corejs builtin definitions to babel/compat-data --- .../corejs3-shipped-proposals.js | 4 +++ .../data/corejs3-shipped-proposals.json | 5 +++ packages/babel-compat-data/package.json | 3 +- .../scripts/build-corejs3-proposals.js | 34 +++++++++++++++++++ .../polyfills/corejs3/built-in-definitions.js | 5 +-- .../polyfills/corejs3/shipped-proposals.js | 3 -- .../src/polyfills/corejs3/usage-plugin.js | 4 +-- .../test/fixtures/corejs3/usage-all/input.mjs | 3 ++ .../fixtures/corejs3/usage-all/options.json | 2 +- .../fixtures/corejs3/usage-all/output.mjs | 5 +++ 10 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 packages/babel-compat-data/corejs3-shipped-proposals.js create mode 100644 packages/babel-compat-data/data/corejs3-shipped-proposals.json create mode 100644 packages/babel-compat-data/scripts/build-corejs3-proposals.js delete mode 100644 packages/babel-preset-env/src/polyfills/corejs3/shipped-proposals.js diff --git a/packages/babel-compat-data/corejs3-shipped-proposals.js b/packages/babel-compat-data/corejs3-shipped-proposals.js new file mode 100644 index 0000000000..b6abc7d267 --- /dev/null +++ b/packages/babel-compat-data/corejs3-shipped-proposals.js @@ -0,0 +1,4 @@ +// Node < 13.3 doesn't support export maps in package.json. +// Use this proxy file as a fallback. + +module.exports = require("./data/corejs3-shipped-proposals.json"); diff --git a/packages/babel-compat-data/data/corejs3-shipped-proposals.json b/packages/babel-compat-data/data/corejs3-shipped-proposals.json new file mode 100644 index 0000000000..7ce01ed934 --- /dev/null +++ b/packages/babel-compat-data/data/corejs3-shipped-proposals.json @@ -0,0 +1,5 @@ +[ + "esnext.global-this", + "esnext.promise.all-settled", + "esnext.string.match-all" +] diff --git a/packages/babel-compat-data/package.json b/packages/babel-compat-data/package.json index f96ebd01b9..8b0ed7f6d0 100644 --- a/packages/babel-compat-data/package.json +++ b/packages/babel-compat-data/package.json @@ -12,10 +12,11 @@ "./plugins": "./data/plugins.json", "./native-modules": "./data/native-modules.json", "./corejs2-built-ins": "./data/corejs2-built-ins.json", + "./corejs3-shipped-proposals": "./data/corejs3-shipped-proposals", "./overlapping-plugins": "./data/overlapping-plugins.json" }, "scripts": { - "build-data": "./scripts/download-compat-table.sh; node ./scripts/build-data.js; node ./scripts/build-modules-support.js; node ./scripts/build-overlapping-plugins.js" + "build-data": "./scripts/download-compat-table.sh; node ./scripts/build-data.js; node ./scripts/build-modules-support.js; node ./scripts/build-overlapping-plugins.js; node ./scripts/build-corejs3-proposals.js" }, "keywords": [ "babel", diff --git a/packages/babel-compat-data/scripts/build-corejs3-proposals.js b/packages/babel-compat-data/scripts/build-corejs3-proposals.js new file mode 100644 index 0000000000..80cecb1b36 --- /dev/null +++ b/packages/babel-compat-data/scripts/build-corejs3-proposals.js @@ -0,0 +1,34 @@ +const data = require("core-js-compat/data.json"); +const fs = require("fs"); +const path = require("path"); + +const features = Object.keys(data); + +const shippedProposals = features.filter(feature => { + return feature.startsWith("esnext.") && Object.keys(data[feature]).length > 0; +}); + +fs.writeFileSync( + path.join(__dirname, "../data/corejs3-shipped-proposals.json"), + JSON.stringify(shippedProposals, undefined, 2) + "\n" +); + +const finishedProposals = shippedProposals.filter(feature => { + return features.includes(feature.replace("esnext.", "es.")); +}); + +const builtInDefinitionsPath = path.join( + __dirname, + "../../babel-preset-env/src/polyfills/corejs3/built-in-definitions.js" +); + +const builtInDefinitions = fs.readFileSync(builtInDefinitionsPath, "utf-8"); + +for (const feature of finishedProposals) { + const standarizedName = feature.replace("esnext.", "es."); + if (!builtInDefinitions.includes(standarizedName)) { + console.log( + `${feature} is now standarized as ${standarizedName}, please add "${standarizedName}" to "${builtInDefinitionsPath}"` + ); + } +} diff --git a/packages/babel-preset-env/src/polyfills/corejs3/built-in-definitions.js b/packages/babel-preset-env/src/polyfills/corejs3/built-in-definitions.js index 2ed1915d87..4b1ad78271 100644 --- a/packages/babel-preset-env/src/polyfills/corejs3/built-in-definitions.js +++ b/packages/babel-preset-env/src/polyfills/corejs3/built-in-definitions.js @@ -158,7 +158,7 @@ export const BuiltIns: ObjectMap = { compositeKey: ["esnext.composite-key"], compositeSymbol: ["esnext.composite-symbol", ...SymbolDependencies], fetch: PromiseDependencies, - globalThis: ["esnext.global-this"], + globalThis: ["es.global-this", "esnext.global-this"], parseFloat: ["es.parse-float"], parseInt: ["es.parse-int"], queueMicrotask: ["web.queue-microtask"], @@ -205,7 +205,7 @@ export const InstanceProperties: ObjectMap = { lastItem: ["esnext.array.last-item"], link: ["es.string.link"], match: ["es.string.match", "es.regexp.exec"], - matchAll: ["esnext.string.match-all"], + matchAll: ["es.string.match-all", "esnext.string.match-all"], map: ["es.array.map"], name: ["es.function.name"], padEnd: ["es.string.pad-end"], @@ -355,6 +355,7 @@ export const StaticProperties: ObjectMap> = { Promise: { all: PromiseDependenciesWithIterators, allSettled: [ + "es.promise.all-settled", "esnext.promise.all-settled", ...PromiseDependenciesWithIterators, ], diff --git a/packages/babel-preset-env/src/polyfills/corejs3/shipped-proposals.js b/packages/babel-preset-env/src/polyfills/corejs3/shipped-proposals.js deleted file mode 100644 index c2d2ee875a..0000000000 --- a/packages/babel-preset-env/src/polyfills/corejs3/shipped-proposals.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow - -export default (["esnext.global-this", "esnext.string.match-all"]: string[]); diff --git a/packages/babel-preset-env/src/polyfills/corejs3/usage-plugin.js b/packages/babel-preset-env/src/polyfills/corejs3/usage-plugin.js index 11eabb97b6..2b54fa7d28 100644 --- a/packages/babel-preset-env/src/polyfills/corejs3/usage-plugin.js +++ b/packages/babel-preset-env/src/polyfills/corejs3/usage-plugin.js @@ -1,7 +1,7 @@ // @flow import corejs3Polyfills from "core-js-compat/data"; -import corejs3ShippedProposalsList from "./shipped-proposals"; +import corejs3ShippedProposalsList from "@babel/compat-data/corejs3-shipped-proposals"; import getModulesListForTargetVersion from "core-js-compat/get-modules-list-for-target-version"; import { filterItems } from "@babel/helper-compilation-targets"; import { @@ -39,7 +39,7 @@ const corejs3PolyfillsWithoutProposals = Object.keys(corejs3Polyfills) return memo; }, {}); -const corejs3PolyfillsWithShippedProposals = corejs3ShippedProposalsList.reduce( +const corejs3PolyfillsWithShippedProposals = (corejs3ShippedProposalsList: string[]).reduce( (memo, key) => { memo[key] = corejs3Polyfills[key]; return memo; diff --git a/packages/babel-preset-env/test/fixtures/corejs3/usage-all/input.mjs b/packages/babel-preset-env/test/fixtures/corejs3/usage-all/input.mjs index 39641419b1..79e759ec82 100644 --- a/packages/babel-preset-env/test/fixtures/corejs3/usage-all/input.mjs +++ b/packages/babel-preset-env/test/fixtures/corejs3/usage-all/input.mjs @@ -24,3 +24,6 @@ const foo = new Promise((resolve) => { queueMicrotask(() => globalThis); Observable.from(10); + +Promise.allSettled([]); +S.matchAll(); diff --git a/packages/babel-preset-env/test/fixtures/corejs3/usage-all/options.json b/packages/babel-preset-env/test/fixtures/corejs3/usage-all/options.json index c7f8e1de84..ba576bd3a8 100644 --- a/packages/babel-preset-env/test/fixtures/corejs3/usage-all/options.json +++ b/packages/babel-preset-env/test/fixtures/corejs3/usage-all/options.json @@ -4,7 +4,7 @@ "../../../../lib", { "useBuiltIns": "usage", - "corejs": 3, + "corejs": "3.6", "modules": false } ] diff --git a/packages/babel-preset-env/test/fixtures/corejs3/usage-all/output.mjs b/packages/babel-preset-env/test/fixtures/corejs3/usage-all/output.mjs index 320fcf8662..1608760973 100644 --- a/packages/babel-preset-env/test/fixtures/corejs3/usage-all/output.mjs +++ b/packages/babel-preset-env/test/fixtures/corejs3/usage-all/output.mjs @@ -4,12 +4,15 @@ import "core-js/modules/es.symbol.iterator"; import "core-js/modules/es.symbol.match"; import "core-js/modules/es.array.from"; import "core-js/modules/es.array.iterator"; +import "core-js/modules/es.global-this"; import "core-js/modules/es.map"; import "core-js/modules/es.object.to-string"; import "core-js/modules/es.promise"; +import "core-js/modules/es.promise.all-settled"; import "core-js/modules/es.regexp.exec"; import "core-js/modules/es.string.iterator"; import "core-js/modules/es.string.match"; +import "core-js/modules/es.string.match-all"; import "core-js/modules/web.dom-collections.iterator"; import "core-js/modules/web.queue-microtask"; Array.from; // static method @@ -49,3 +52,5 @@ queueMicrotask(function () { return globalThis; }); Observable.from(10); +Promise.allSettled([]); +S.matchAll();