diff --git a/packages/babel-plugin-polyfill-corejs3/package.json b/packages/babel-plugin-polyfill-corejs3/package.json index 8128b58f..2e4e42a7 100644 --- a/packages/babel-plugin-polyfill-corejs3/package.json +++ b/packages/babel-plugin-polyfill-corejs3/package.json @@ -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", diff --git a/packages/babel-plugin-polyfill-corejs3/src/built-in-definitions.js b/packages/babel-plugin-polyfill-corejs3/src/built-in-definitions.js index f0ef3792..dfa5db6e 100644 --- a/packages/babel-plugin-polyfill-corejs3/src/built-in-definitions.js +++ b/packages/babel-plugin-polyfill-corejs3/src/built-in-definitions.js @@ -145,11 +145,14 @@ const WeakSetDependencies = [ ...CommonIteratorsWithTag, ]; -const URLSearchParamsDependencies = ["web.url", ...CommonIteratorsWithTag]; +const URLSearchParamsDependencies = [ + "web.url-search-params", + ...CommonIteratorsWithTag, +]; export const BuiltIns: ObjectMap = { AggregateError: define("aggregate-error", [ - "esnext.aggregate-error", + "es.aggregate-error", ...CommonIterators, ]), ArrayBuffer: define(null, [ @@ -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", @@ -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"]), diff --git a/packages/babel-plugin-polyfill-corejs3/src/index.js b/packages/babel-plugin-polyfill-corejs3/src/index.js index 9e9719ab..5e01ee42 100644 --- a/packages/babel-plugin-polyfill-corejs3/src/index.js +++ b/packages/babel-plugin-polyfill-corejs3/src/index.js @@ -66,13 +66,16 @@ export default defineProvider(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)) { @@ -104,13 +107,32 @@ export default defineProvider(function( !(object && desc.exclude && desc.exclude.includes(object)) && esnextFallback(desc.name, shouldInjectPolyfill) ) { + const { name } = desc; + let useProposalBase = false; + if (proposals || (shippedProposals && name.startsWith("esnext."))) { + useProposalBase = true; + } else if (name.startsWith("es.") && !available.has(name)) { + useProposalBase = true; + } + const coreJSPureBase = getCoreJSPureBase(useProposalBase); return utils.injectDefaultImport( + // $FlowIgnore, we already guard desc.pure `${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", @@ -122,7 +144,7 @@ export default defineProvider(function( if (shippedProposals && corejs3ShippedProposalsList.has(name)) { return true; } - return !name.startsWith("esnext."); + return isFeatureStable(name); }, entryGlobal(meta, utils, path) { diff --git a/packages/babel-plugin-polyfill-corejs3/test/check-builtin-definitions.test.js b/packages/babel-plugin-polyfill-corejs3/test/check-builtin-definitions.test.js new file mode 100644 index 00000000..90c65ca9 --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/check-builtin-definitions.test.js @@ -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", + ] + `); + }); +}); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/exclude-include/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/exclude-include/output.mjs index 25cc5051..06d8646a 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/exclude-include/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/exclude-include/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/exclude/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/exclude/output.mjs index a59b43d8..815532cb 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/exclude/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/exclude/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/include/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/include/output.mjs index c4bcd8f5..78b79fb2 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/include/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-exclude-include/include/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chrome-48/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chrome-48/output.mjs index 267f63ee..e663039a 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chrome-48/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chrome-48/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chrome-49/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chrome-49/output.mjs index 60bc9c20..407fadbb 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chrome-49/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chrome-49/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chromeandroid/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chromeandroid/output.mjs index bcf48245..6df56aaf 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chromeandroid/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/chromeandroid/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/electron/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/electron/output.mjs index d1953f80..23fa5280 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/electron/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/electron/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/entries-features/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/entries-features/output.mjs index 6efea386..c67124b2 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/entries-features/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/entries-features/output.mjs @@ -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"; @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/entries-stable/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/entries-stable/output.mjs index 03d658c2..21776b91 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/entries-stable/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/entries-stable/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/import/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/import/output.mjs index 56b1d282..7cb9e5a8 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/import/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/import/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/node-7.6/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/node-7.6/output.mjs index bc56036c..1e69d7c0 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/node-7.6/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/node-7.6/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/node-web/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/node-web/output.mjs index ea9a9cd1..f3e8c921 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/node-web/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/node-web/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/normalization/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/normalization/output.mjs index 75a9f3d4..950ff459 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/normalization/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/normalization/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require-all/output.js b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require-all/output.js index d73b6d45..04d9fb5d 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require-all/output.js +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require-all/output.js @@ -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"); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require-es-proposals/output.js b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require-es-proposals/output.js index 67f7eab1..c8bd0771 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require-es-proposals/output.js +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require-es-proposals/output.js @@ -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"); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require/output.js b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require/output.js index 77d2a594..7dbf37e0 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require/output.js +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/require/output.js @@ -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"); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/stable-samsung-8.2/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/stable-samsung-8.2/output.mjs index 60dfa7e7..f182b168 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/stable-samsung-8.2/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/entry-global/stable-samsung-8.2/output.mjs @@ -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"; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/all/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/all/output.mjs index 1525c2ea..dc43a32d 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/all/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/all/output.mjs @@ -12,6 +12,7 @@ import "core-js/modules/es.symbol.description.js"; import "core-js/modules/es.symbol.iterator.js"; import "core-js/modules/es.regexp.exec.js"; import "core-js/modules/web.queue-microtask.js"; +import "core-js/modules/esnext.global-this.js"; Array.from; // static method Map; // built-in diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/esnext-es-fallback-corejs-3.6/input.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/esnext-es-fallback-corejs-3.6/input.mjs new file mode 100644 index 00000000..1e81783e --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/esnext-es-fallback-corejs-3.6/input.mjs @@ -0,0 +1 @@ +"x".replaceAll("x",""); \ No newline at end of file diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/esnext-es-fallback-corejs-3.6/options.json b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/esnext-es-fallback-corejs-3.6/options.json new file mode 100644 index 00000000..aefd96bd --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/esnext-es-fallback-corejs-3.6/options.json @@ -0,0 +1,14 @@ +{ + "plugins": [ + [ + "@@/polyfill-corejs3", + { + "method": "usage-global", + "targets": { + "chrome": 4 + }, + "version": "3.6" + } + ] + ] +} \ No newline at end of file diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/esnext-es-fallback-corejs-3.6/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/esnext-es-fallback-corejs-3.6/output.mjs new file mode 100644 index 00000000..8cdd04d8 --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/esnext-es-fallback-corejs-3.6/output.mjs @@ -0,0 +1,2 @@ +import "core-js/modules/esnext.string.replace-all.js"; +"x".replaceAll("x", ""); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/proposal-to-stable-corejs-3.0/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/proposal-to-stable-corejs-3.0/output.mjs index 9b6e3828..acc15ae5 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/proposal-to-stable-corejs-3.0/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-global/proposal-to-stable-corejs-3.0/output.mjs @@ -1,2 +1,4 @@ +import "core-js/modules/esnext.global-this.js"; +import "core-js/modules/esnext.string.match-all.js"; globalThis; foo.matchAll(bar); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/built-in-globals/output.js b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/built-in-globals/output.js index eff38ac0..02feedbb 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/built-in-globals/output.js +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/built-in-globals/output.js @@ -1,3 +1,5 @@ +var _AggregateError = require("core-js-pure/features/aggregate-error.js"); + var _Map = require("core-js-pure/stable/map/index.js"); var _Promise = require("core-js-pure/stable/promise/index.js"); @@ -16,6 +18,8 @@ var _WeakSet = require("core-js-pure/stable/weak-set/index.js"); var _clearImmediate = require("core-js-pure/stable/clear-immediate.js"); +var _globalThis = require("core-js-pure/features/global-this.js"); + var _parseFloat = require("core-js-pure/stable/parse-float.js"); var _parseInt = require("core-js-pure/stable/parse-int.js"); @@ -28,7 +32,7 @@ var _setInterval = require("core-js-pure/stable/set-interval.js"); var _setTimeout = require("core-js-pure/stable/set-timeout.js"); -AggregateError; +_AggregateError; _Map; Observable; _Promise; @@ -41,7 +45,7 @@ _WeakSet; _clearImmediate; compositeKey; compositeSymbol; -globalThis; +_globalThis; _parseFloat; _parseInt; _queueMicrotask; diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/built-in-instance-methods/output.js b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/built-in-instance-methods/output.js index 046ff6a9..2df7e5d2 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/built-in-instance-methods/output.js +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/built-in-instance-methods/output.js @@ -38,6 +38,8 @@ var _lastIndexOfInstanceProperty = require("core-js-pure/stable/instance/last-in var _mapInstanceProperty = require("core-js-pure/stable/instance/map.js"); +var _matchAllInstanceProperty = require("core-js-pure/features/instance/match-all.js"); + var _padEndInstanceProperty = require("core-js-pure/stable/instance/pad-end.js"); var _padStartInstanceProperty = require("core-js-pure/stable/instance/pad-start.js"); @@ -48,6 +50,8 @@ var _reduceRightInstanceProperty = require("core-js-pure/stable/instance/reduce- var _repeatInstanceProperty = require("core-js-pure/stable/instance/repeat.js"); +var _replaceAllInstanceProperty = require("core-js-pure/features/instance/replace-all.js"); + var _reverseInstanceProperty = require("core-js-pure/stable/instance/reverse.js"); var _sliceInstanceProperty = require("core-js-pure/stable/instance/slice.js"); @@ -116,7 +120,7 @@ _lastIndexOfInstanceProperty(object); _mapInstanceProperty(object); -object.matchAll; +_matchAllInstanceProperty(object); _padEndInstanceProperty(object); @@ -128,7 +132,7 @@ _reduceRightInstanceProperty(object); _repeatInstanceProperty(object); -object.replaceAll; +_replaceAllInstanceProperty(object); _reverseInstanceProperty(object); @@ -199,7 +203,7 @@ _lastIndexOfInstanceProperty(object).call(object, arg); _mapInstanceProperty(object).call(object, arg); -object.matchAll(arg); +_matchAllInstanceProperty(object).call(object, arg); _padEndInstanceProperty(object).call(object, arg); @@ -211,7 +215,7 @@ _reduceRightInstanceProperty(object).call(object, arg); _repeatInstanceProperty(object).call(object, arg); -object.replaceAll(arg); +_replaceAllInstanceProperty(object).call(object, arg); _reverseInstanceProperty(object).call(object, arg); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/esnext-es-fallback-corejs-3.6/input.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/esnext-es-fallback-corejs-3.6/input.mjs new file mode 100644 index 00000000..1e81783e --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/esnext-es-fallback-corejs-3.6/input.mjs @@ -0,0 +1 @@ +"x".replaceAll("x",""); \ No newline at end of file diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/esnext-es-fallback-corejs-3.6/options.json b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/esnext-es-fallback-corejs-3.6/options.json new file mode 100644 index 00000000..5c5acf92 --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/esnext-es-fallback-corejs-3.6/options.json @@ -0,0 +1,14 @@ +{ + "plugins": [ + [ + "@@/polyfill-corejs3", + { + "method": "usage-pure", + "targets": { + "chrome": 4 + }, + "version": "3.6" + } + ] + ] +} \ No newline at end of file diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/esnext-es-fallback-corejs-3.6/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/esnext-es-fallback-corejs-3.6/output.mjs new file mode 100644 index 00000000..f732fdf0 --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/esnext-es-fallback-corejs-3.6/output.mjs @@ -0,0 +1,5 @@ +var _context; + +import _replaceAllInstanceProperty from "core-js-pure/features/instance/replace-all.js"; + +_replaceAllInstanceProperty(_context = "x").call(_context, "x", ""); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/proposal-to-stable-corejs-3.0/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/proposal-to-stable-corejs-3.0/output.mjs index 9b6e3828..5fba28ed 100644 --- a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/proposal-to-stable-corejs-3.0/output.mjs +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/proposal-to-stable-corejs-3.0/output.mjs @@ -1,2 +1,5 @@ -globalThis; -foo.matchAll(bar); +import _globalThis from "core-js-pure/features/global-this.js"; +import _matchAllInstanceProperty from "core-js-pure/features/instance/match-all.js"; +_globalThis; + +_matchAllInstanceProperty(foo).call(foo, bar); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/shippedProposals/input.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/shippedProposals/input.mjs new file mode 100644 index 00000000..39641419 --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/shippedProposals/input.mjs @@ -0,0 +1,26 @@ +Array.from; // static method +Map; // built-in +new Promise(); // new builtin +Symbol.match; // as member expression +_arr[Symbol.iterator](); // Symbol.iterator + +// no import +Array.asdf; +Array2.from; +Map2; +new Promise2(); +Symbol.asdf; +Symbol2.match; +_arr9[Symbol2.iterator](); +_arr9[Symbol.iterator2](); + +G.assign; // static method +function H(WeakMap) { var blah = new WeakMap(); } // shadowed + +const foo = new Promise((resolve) => { + resolve(new Map()); +}); + +queueMicrotask(() => globalThis); + +Observable.from(10); diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/shippedProposals/options.json b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/shippedProposals/options.json new file mode 100644 index 00000000..a81610d7 --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/shippedProposals/options.json @@ -0,0 +1,12 @@ +{ + "plugins": [ + [ + "@@/polyfill-corejs3", + { + "method": "usage-pure", + "shippedProposals": true, + "version": "3.2" + } + ] + ] +} \ No newline at end of file diff --git a/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/shippedProposals/output.mjs b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/shippedProposals/output.mjs new file mode 100644 index 00000000..226b81ba --- /dev/null +++ b/packages/babel-plugin-polyfill-corejs3/test/fixtures/usage-pure/shippedProposals/output.mjs @@ -0,0 +1,45 @@ +import _Array$from from "core-js-pure/stable/array/from.js"; +import _Map from "core-js-pure/stable/map/index.js"; +import _Promise from "core-js-pure/stable/promise/index.js"; +import _Symbol$match from "core-js-pure/stable/symbol/match.js"; +import _getIterator from "core-js-pure/features/get-iterator.js"; +import _Symbol from "core-js-pure/stable/symbol/index.js"; +import _queueMicrotask from "core-js-pure/stable/queue-microtask.js"; +import _globalThis from "core-js-pure/features/global-this.js"; +_Array$from; // static method + +_Map; // built-in + +new _Promise(); // new builtin + +_Symbol$match; // as member expression + +_getIterator(_arr); // Symbol.iterator +// no import + + +Array.asdf; +Array2.from; +Map2; +new Promise2(); +_Symbol.asdf; +Symbol2.match; + +_arr9[Symbol2.iterator](); + +_arr9[_Symbol.iterator2](); + +G.assign; // static method + +function H(WeakMap) { + var blah = new WeakMap(); +} // shadowed + + +const foo = new _Promise(resolve => { + resolve(new _Map()); +}); + +_queueMicrotask(() => _globalThis); + +Observable.from(10); diff --git a/yarn.lock b/yarn.lock index 8557274c..420245e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3818,7 +3818,7 @@ __metadata: "@babel/plugin-transform-for-of": ^7.10.4 "@babel/plugin-transform-modules-commonjs": ^7.10.4 "@babel/plugin-transform-spread": ^7.13.0 - core-js-compat: ^3.14.0 + core-js-compat: ^3.16.2 core-js-pure: ^3.8.1 peerDependencies: "@babel/core": ^7.0.0-0 @@ -4163,18 +4163,18 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.14.5, browserslist@npm:^4.16.6": - version: 4.16.6 - resolution: "browserslist@npm:4.16.6" +"browserslist@npm:^4.14.5, browserslist@npm:^4.16.7": + version: 4.16.8 + resolution: "browserslist@npm:4.16.8" dependencies: - caniuse-lite: ^1.0.30001219 - colorette: ^1.2.2 - electron-to-chromium: ^1.3.723 + caniuse-lite: ^1.0.30001251 + colorette: ^1.3.0 + electron-to-chromium: ^1.3.811 escalade: ^3.1.1 - node-releases: ^1.1.71 + node-releases: ^1.1.75 bin: browserslist: cli.js - checksum: ebb0ab279c5e61f882467f7ccd7d22c0edfcc01201eba06e85e835ca4d355e682f9aa3310bfa18c3a23bb244f0b8e498b3113dae3e9b0fa4908c5ffb4a26b3a2 + checksum: bf638feeb7af598a807ac4a70fe64af884b799e015f52894ac2df42cefbc818a08548f8a48c29a60699c049272bf70aaa7415551c6a8ac45767b7c289d9f5bf2 languageName: node linkType: hard @@ -4389,10 +4389,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001219": - version: 1.0.30001237 - resolution: "caniuse-lite@npm:1.0.30001237" - checksum: 8b56e2fff5856adbc3abde2ee85defeba6f6df6cf4e1c195bb0fd863c9d09ee318721d5c228a74beaac812e2c79009bc8ef998d6e85f44153dc6c26cc8bae7ce +"caniuse-lite@npm:^1.0.30001251": + version: 1.0.30001251 + resolution: "caniuse-lite@npm:1.0.30001251" + checksum: 6d7d4b93bdaa4d7859b830c5afdfa40ef2cc15a88edfae446c6ded1ae77ae4de50b5b5ba63c4a56ecdde5a530f26252ef56b86abbe7aa0dda5de8f1d793a454e languageName: node linkType: hard @@ -4720,10 +4720,10 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^1.2.2": - version: 1.2.2 - resolution: "colorette@npm:1.2.2" - checksum: e240f0c94b8d9f34b52bd17b50fc13a3b74f9e662edeaa2b0c65e06ec6b1fc6367fb42b834ec5a1d819d68b74a3d850f3bd3e284f9e614d6c4ffa122f83c6ec5 +"colorette@npm:^1.3.0": + version: 1.3.0 + resolution: "colorette@npm:1.3.0" + checksum: d3bcd778d0f0cb81fc1367168f494b9a9998109f6aa4a2e8f8b1d3a43107b3a1d43e00a569f687ad57ae0d536b8767ccec6354a69ae3d1d3e0bee91ab500f8e5 languageName: node linkType: hard @@ -4996,13 +4996,13 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.14.0, core-js-compat@npm:^3.8.1, core-js-compat@npm:^3.9.0": - version: 3.14.0 - resolution: "core-js-compat@npm:3.14.0" +"core-js-compat@npm:^3.16.2, core-js-compat@npm:^3.8.1, core-js-compat@npm:^3.9.0": + version: 3.16.2 + resolution: "core-js-compat@npm:3.16.2" dependencies: - browserslist: ^4.16.6 + browserslist: ^4.16.7 semver: 7.0.0 - checksum: c1a3cb65f72749490764f11f3184908634240f3c25c3409ef1e7eb130778bcc8252e72204cc22668129999905e966a7c06cc8fbe6f7e752c52ec671cb8879618 + checksum: 2ab3f6a7973a9b2037c97e11ad6eff1b749902426acc167c132936d13816c436e8d84396ec074c0aa6ff00a2390bde6f7fb187210b760bdb75820cb02c8f29e0 languageName: node linkType: hard @@ -5533,10 +5533,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.683, electron-to-chromium@npm:^1.3.723": - version: 1.3.752 - resolution: "electron-to-chromium@npm:1.3.752" - checksum: 8c172dd2d9df7526d6cb94edfeceb73e538f5ee7e47555fabcddeba5e7961d3bad0ddc5e5ac9536f8bb79da10c5c508b7f8981ffc97331fd1fe5f08fbfa24139 +"electron-to-chromium@npm:^1.3.683, electron-to-chromium@npm:^1.3.811": + version: 1.3.816 + resolution: "electron-to-chromium@npm:1.3.816" + checksum: 40037d6f47dd12512db9241680f84e5532dadf6b27a10b9959814d9d00a1ea55a81ac30623ba424ea88259ddc5a168dd0e055a480f76fe174b63225febccd569 languageName: node linkType: hard @@ -9951,10 +9951,10 @@ fsevents@~2.3.1: languageName: node linkType: hard -"node-releases@npm:^1.1.71": - version: 1.1.73 - resolution: "node-releases@npm:1.1.73" - checksum: 8dbc7dd438c4e0a01e546cf73b8d3cc766f1ba3c40848d5cc8c6027eb8d87d54c4617eae036bed3c02e16f25e241ee2a4bd48fa528ebf6fe97d2c86c71ddfedc +"node-releases@npm:^1.1.75": + version: 1.1.75 + resolution: "node-releases@npm:1.1.75" + checksum: 0ea9d84f2cc899fc033866178f4a86b2ae7abf8fb728e37740f7a6464180ce4d3a5557b6b25fdb375d2b2380edad6c67f2395e84986e7d88cbb87896279e20f5 languageName: node linkType: hard