Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use es.* for stable esnext features #98

Merged
merged 9 commits into from
Sep 2, 2021
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/babel-plugin-polyfill-corejs3/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
],
"dependencies": {
"@babel/helper-define-polyfill-provider": "workspace:^0.2.2",
"core-js-compat": "^3.14.0"
"core-js-compat": "^3.16.2"
},
"devDependencies": {
"@babel/core": "^7.13.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,14 @@ const WeakSetDependencies = [
...CommonIteratorsWithTag,
];

const URLSearchParamsDependencies = ["web.url", ...CommonIteratorsWithTag];
const URLSearchParamsDependencies = [
"web.url-search-params",
...CommonIteratorsWithTag,
];

export const BuiltIns: ObjectMap<CoreJSPolyfillDescriptor> = {
AggregateError: define("aggregate-error", [
"esnext.aggregate-error",
"es.aggregate-error",
...CommonIterators,
]),
ArrayBuffer: define(null, [
Expand Down Expand Up @@ -338,10 +341,7 @@ export const StaticProperties: ObjectMap<
"es.promise.all-settled",
...PromiseDependenciesWithIterators,
]),
any: define(null, [
"esnext.promise.any",
...PromiseDependenciesWithIterators,
]),
any: define(null, ["es.promise.any", ...PromiseDependenciesWithIterators]),
race: define(null, PromiseDependenciesWithIterators),
try: define(null, [
"esnext.promise.try",
Expand Down Expand Up @@ -546,7 +546,7 @@ export const InstanceProperties = {
reduceRight: define("instance/reduce-right", ["es.array.reduce-right"]),
repeat: define("instance/repeat", ["es.string.repeat"]),
replace: define(null, ["es.string.replace", "es.regexp.exec"]),
replaceAll: define("instance/replace-all", ["esnext.string.replace-all"]),
replaceAll: define("instance/replace-all", ["es.string.replace-all"]),
reverse: define("instance/reverse", ["es.array.reverse"]),
search: define(null, ["es.string.search", "es.regexp.exec"]),
slice: define("instance/slice", ["es.array.slice"]),
Expand Down
37 changes: 29 additions & 8 deletions packages/babel-plugin-polyfill-corejs3/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,16 @@ export default defineProvider<Options>(function(
});

const available = new Set(getModulesListForTargetVersion(version));
const coreJSPureBase = useBabelRuntime
? proposals
? `${useBabelRuntime}/core-js`
: `${useBabelRuntime}/core-js-stable`
: proposals
? "core-js-pure/features"
: "core-js-pure/stable";

function getCoreJSPureBase(useProposalBase) {
return useBabelRuntime
? useProposalBase
? `${useBabelRuntime}/core-js`
: `${useBabelRuntime}/core-js-stable`
: useProposalBase
? "core-js-pure/features"
: "core-js-pure/stable";
}

function maybeInjectGlobalImpl(name: string, utils) {
if (shouldInjectPolyfill(name)) {
Expand Down Expand Up @@ -104,13 +107,31 @@ export default defineProvider<Options>(function(
!(object && desc.exclude && desc.exclude.includes(object)) &&
esnextFallback(desc.name, shouldInjectPolyfill)
) {
const { name } = desc;
let useProposalBase = false;
if (proposals || name.startsWith("es.next")) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like a typo.

useProposalBase = true;
} else if (name.startsWith("es.") && !available.has(name)) {
useProposalBase = true;
}
const coreJSPureBase = getCoreJSPureBase(useProposalBase);
return utils.injectDefaultImport(
`${coreJSPureBase}/${desc.pure}${ext}`,
hint,
);
}
}

function isFeatureStable(name) {
if (name.startsWith("esnext.")) {
const esName = `es.${name.slice(7)}`;
// If its imaginative esName is not in latest compat data, it means
// the proposal is not stage 4
return esName in corejs3Polyfills;
}
return true;
}

return {
name: "corejs3",

Expand All @@ -122,7 +143,7 @@ export default defineProvider<Options>(function(
if (shippedProposals && corejs3ShippedProposalsList.has(name)) {
return true;
}
return !name.startsWith("esnext.");
return isFeatureStable(name);
},

entryGlobal(meta, utils, path) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
import corejs3Entries from "../core-js-compat/entries";

import {
BuiltIns,
StaticProperties,
InstanceProperties,
} from "../src/built-in-definitions.js";

const supportedCorejs3Modules = new Set();

const corejs3Modules = corejs3Entries["core-js"];

function addsupportedCorejs3Modules(descriptors) {
for (const { global } of Object.values(descriptors)) {
for (const dep of global) {
supportedCorejs3Modules.add(dep);
}
}
}
addsupportedCorejs3Modules(BuiltIns);

for (const properties of Object.values(StaticProperties)) {
addsupportedCorejs3Modules(properties);
}

addsupportedCorejs3Modules(InstanceProperties);

const allowList = [];
describe("corejs3 builtin definitions", () => {
it("should support most corejs3 features", () => {
let todoListItem = 0;
for (const name of corejs3Modules) {
if (supportedCorejs3Modules.has(name)) continue;
if (name.startsWith("es.")) {
const esNextName = "esnext." + name.slice(3);
if (supportedCorejs3Modules.has(esNextName)) {
todoListItem++;
console.error(
`Please replace "${esNextName}" by "${name}" in
packages/babel-plugin-polyfill-corejs3/src/built-in-definitions.js.`,
);
continue;
}
}
if (name.startsWith("esnext.")) {
const esName = "es." + name.slice(7);
if (supportedCorejs3Modules.has(esName)) continue;
}
allowList.push(name);
}
expect(todoListItem).toBe(0);
// The allowlist should only be added when we decide we don't support
// the feature in `src/builtin-definitions.js`
expect(allowList).toMatchInlineSnapshot(`
Array [
"es.symbol.match-all",
"es.array.unscopables.flat",
"es.date.get-year",
"es.date.set-year",
"es.date.to-gmt-string",
"es.escape",
"es.json.stringify",
"es.reflect.to-string-tag",
"es.regexp.dot-all",
"es.regexp.sticky",
"es.regexp.test",
"es.string.substr",
"es.unescape",
"esnext.array.filter-out",
"esnext.array.filter-reject",
"esnext.array.group-by",
"esnext.array.is-template-object",
"esnext.array.unique-by",
"esnext.async-iterator.constructor",
"esnext.async-iterator.as-indexed-pairs",
"esnext.async-iterator.drop",
"esnext.async-iterator.every",
"esnext.async-iterator.filter",
"esnext.async-iterator.find",
"esnext.async-iterator.flat-map",
"esnext.async-iterator.for-each",
"esnext.async-iterator.from",
"esnext.async-iterator.map",
"esnext.async-iterator.reduce",
"esnext.async-iterator.some",
"esnext.async-iterator.take",
"esnext.async-iterator.to-array",
"esnext.bigint.range",
"esnext.iterator.constructor",
"esnext.iterator.as-indexed-pairs",
"esnext.iterator.drop",
"esnext.iterator.every",
"esnext.iterator.filter",
"esnext.iterator.find",
"esnext.iterator.flat-map",
"esnext.iterator.for-each",
"esnext.iterator.from",
"esnext.iterator.map",
"esnext.iterator.reduce",
"esnext.iterator.some",
"esnext.iterator.take",
"esnext.iterator.to-array",
"esnext.map.emplace",
"esnext.map.update-or-insert",
"esnext.map.upsert",
"esnext.number.range",
"esnext.object.iterate-entries",
"esnext.object.iterate-keys",
"esnext.object.iterate-values",
"esnext.symbol.async-dispose",
"esnext.symbol.matcher",
"esnext.symbol.metadata",
"esnext.symbol.replace-all",
"esnext.typed-array.filter-out",
"esnext.typed-array.filter-reject",
"esnext.typed-array.find-last",
"esnext.typed-array.find-last-index",
"esnext.typed-array.group-by",
"esnext.typed-array.unique-by",
"esnext.weak-map.emplace",
"esnext.weak-map.upsert",
]
`);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ import "core-js/modules/es.object.lookup-getter.js";
import "core-js/modules/es.object.lookup-setter.js";
import "core-js/modules/es.promise.js";
import "core-js/modules/es.promise.finally.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.regexp.flags.js";
import "core-js/modules/es.string.pad-end.js";
import "core-js/modules/es.string.replace.js";
import "core-js/modules/es.string.trim.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import "core-js/modules/es.math.hypot.js";
import "core-js/modules/es.object.from-entries.js";
import "core-js/modules/es.promise.js";
import "core-js/modules/es.promise.finally.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.string.replace.js";
import "core-js/modules/es.string.trim-end.js";
import "core-js/modules/es.string.trim-start.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ import "core-js/modules/es.object.lookup-getter.js";
import "core-js/modules/es.object.lookup-setter.js";
import "core-js/modules/es.promise.js";
import "core-js/modules/es.promise.finally.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.regexp.flags.js";
import "core-js/modules/es.set.js";
import "core-js/modules/es.string.pad-end.js";
import "core-js/modules/es.string.pad-start.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import "core-js/modules/es.reflect.prevent-extensions.js";
import "core-js/modules/es.reflect.set.js";
import "core-js/modules/es.reflect.set-prototype-of.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.regexp.flags.js";
import "core-js/modules/es.regexp.to-string.js";
import "core-js/modules/es.set.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ import "core-js/modules/es.object.values.js";
import "core-js/modules/es.promise.js";
import "core-js/modules/es.promise.finally.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.regexp.flags.js";
import "core-js/modules/es.regexp.to-string.js";
import "core-js/modules/es.set.js";
import "core-js/modules/es.string.ends-with.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ import "core-js/modules/es.object.lookup-getter.js";
import "core-js/modules/es.object.lookup-setter.js";
import "core-js/modules/es.promise.js";
import "core-js/modules/es.promise.finally.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.regexp.flags.js";
import "core-js/modules/es.string.replace.js";
import "core-js/modules/es.string.trim-end.js";
import "core-js/modules/es.string.trim-start.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ import "core-js/modules/es.object.lookup-getter.js";
import "core-js/modules/es.object.lookup-setter.js";
import "core-js/modules/es.promise.js";
import "core-js/modules/es.promise.finally.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.regexp.flags.js";
import "core-js/modules/es.string.pad-end.js";
import "core-js/modules/es.string.pad-start.js";
import "core-js/modules/es.string.replace.js";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import "core-js/modules/es.array.iterator.js";
import "core-js/modules/es.object.to-string.js";
import "core-js/modules/es.set.js";
import "core-js/modules/es.string.iterator.js";
Expand All @@ -21,6 +22,7 @@ import "core-js/modules/esnext.set.symmetric-difference.js";
import "core-js/modules/esnext.set.union.js";
import "core-js/modules/web.dom-collections.iterator.js";
import "core-js/modules/es.array.from.js";
import "core-js/modules/es.array.iterator.js";
import "core-js/modules/es.object.from-entries.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.string.replace.js";
import "core-js/modules/esnext.string.replace-all.js";
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import "core-js/modules/es.array.iterator.js";
import "core-js/modules/es.object.to-string.js";
import "core-js/modules/es.set.js";
import "core-js/modules/es.string.iterator.js";
import "core-js/modules/web.dom-collections.iterator.js";
import "core-js/modules/es.array.from.js";
import "core-js/modules/es.array.iterator.js";
import "core-js/modules/es.object.from-entries.js";
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ import "core-js/modules/es.object.lookup-getter.js";
import "core-js/modules/es.object.lookup-setter.js";
import "core-js/modules/es.promise.js";
import "core-js/modules/es.promise.finally.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.regexp.flags.js";
import "core-js/modules/es.string.pad-end.js";
import "core-js/modules/es.string.pad-start.js";
import "core-js/modules/es.string.replace.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ import "core-js/modules/es.object.lookup-getter.js";
import "core-js/modules/es.object.lookup-setter.js";
import "core-js/modules/es.promise.js";
import "core-js/modules/es.promise.finally.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.regexp.flags.js";
import "core-js/modules/es.string.pad-end.js";
import "core-js/modules/es.string.pad-start.js";
import "core-js/modules/es.string.replace.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ import "core-js/modules/es.object.lookup-getter.js";
import "core-js/modules/es.object.lookup-setter.js";
import "core-js/modules/es.promise.js";
import "core-js/modules/es.promise.finally.js";
import "core-js/modules/es.regexp.constructor.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.regexp.flags.js";
import "core-js/modules/es.string.pad-end.js";
import "core-js/modules/es.string.pad-start.js";
import "core-js/modules/es.string.replace.js";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import "core-js/modules/es.array.iterator.js";
import "core-js/modules/es.map.js";
import "core-js/modules/es.object.to-string.js";
import "core-js/modules/es.string.iterator.js";
import "core-js/modules/web.dom-collections.iterator.js";
import "core-js/modules/es.set.js";
import "core-js/modules/es.array.from.js";
import "core-js/modules/es.promise.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ require("core-js/modules/es.promise.js");

require("core-js/modules/es.promise.finally.js");

require("core-js/modules/es.regexp.constructor.js");

require("core-js/modules/es.regexp.exec.js");

require("core-js/modules/es.regexp.flags.js");

require("core-js/modules/es.string.pad-end.js");

require("core-js/modules/es.string.pad-start.js");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ require("core-js/modules/es.promise.js");

require("core-js/modules/es.promise.finally.js");

require("core-js/modules/es.regexp.constructor.js");

require("core-js/modules/es.regexp.exec.js");

require("core-js/modules/es.regexp.flags.js");

require("core-js/modules/es.string.pad-end.js");

require("core-js/modules/es.string.pad-start.js");
Expand Down
Loading