diff --git a/packages/babel-plugin-transform-runtime/package.json b/packages/babel-plugin-transform-runtime/package.json index 6d1829880029..a23ac0af8033 100644 --- a/packages/babel-plugin-transform-runtime/package.json +++ b/packages/babel-plugin-transform-runtime/package.json @@ -20,8 +20,11 @@ "./src/get-runtime-path/index.js": "./src/get-runtime-path/browser.js" }, "dependencies": { + "@babel/compat-data": "^7.9.6", + "@babel/helper-compilation-targets": "^7.9.6", "@babel/helper-module-imports": "^7.10.1", "@babel/helper-plugin-utils": "^7.10.1", + "core-js-compat": "^3.6.5", "resolve": "^1.8.1", "semver": "^5.5.1" }, diff --git a/packages/babel-plugin-transform-runtime/src/index.js b/packages/babel-plugin-transform-runtime/src/index.js index 0977b2b48b39..ac494b0b32f1 100644 --- a/packages/babel-plugin-transform-runtime/src/index.js +++ b/packages/babel-plugin-transform-runtime/src/index.js @@ -1,12 +1,42 @@ import { declare } from "@babel/helper-plugin-utils"; import { addDefault, isModule } from "@babel/helper-module-imports"; import { types as t } from "@babel/core"; +import getTargets, { + filterItems, + isRequired, +} from "@babel/helper-compilation-targets"; +import corejs2Polyfills from "@babel/compat-data/corejs2-built-ins"; +import corejs3Polyfills from "core-js-compat/data"; import getCoreJS2Definitions from "./runtime-corejs2-definitions"; import getCoreJS3Definitions from "./runtime-corejs3-definitions"; import { typeAnnotationToString } from "./helpers"; import getRuntimePath from "./get-runtime-path"; +/* TODO: use `packages/babel-preset-env/src/polyfills/corejs3/built-in-definitions.js` + * instead of `core-js-compat` after moving to `@babel/compat-data` + * + * corejs sometimes lumps multiple functions/identifiers under one name + */ +corejs3Polyfills["web.set-immediate"] = corejs3Polyfills["web.immediate"]; +corejs3Polyfills["web.clear-immediate"] = corejs3Polyfills["web.immediate"]; +corejs3Polyfills["web.set-interval"] = corejs3Polyfills["web.timers"]; +corejs3Polyfills["web.clear-interval"] = corejs3Polyfills["web.timers"]; +corejs3Polyfills["web.set-timeout"] = corejs3Polyfills["web.timers"]; +corejs3Polyfills["web.clear-timeout"] = corejs3Polyfills["web.timers"]; +corejs3Polyfills["es.array.entries"] = corejs3Polyfills["es.array.iterator"]; +corejs3Polyfills["es.array.keys"] = corejs3Polyfills["es.array.iterator"]; +corejs3Polyfills["es.array.values"] = corejs3Polyfills["es.array.iterator"]; +corejs3Polyfills["es.string.trim-left"] = + corejs3Polyfills["es.string.trim-start"]; +corejs3Polyfills["es.string.trim-right"] = + corejs3Polyfills["es.string.trim-end"]; +corejs3Polyfills["es.symbol.for"] = corejs3Polyfills["es.symbol"]; +corejs3Polyfills["es.symbol.key-for"] = corejs3Polyfills["es.symbol"]; +corejs3Polyfills["es.object.get-own-property-symbols"] = + corejs3Polyfills["es.symbol"]; +corejs2Polyfills["es6.symbol.iterator"] = corejs2Polyfills["es6.symbol"]; + function supportsStaticESM(caller) { return !!caller?.supportsStaticESM; } @@ -17,12 +47,25 @@ export default declare((api, options, dirname) => { const { corejs, helpers: useRuntimeHelpers = true, - regenerator: useRuntimeRegenerator = true, + regenerator = true, useESModules = false, version: runtimeVersion = "7.0.0-beta.0", absoluteRuntime = false, + targets: optionsTargets = {}, } = options; + const targets = getTargets( + typeof optionsTargets === "string" || Array.isArray(optionsTargets) + ? { browsers: optionsTargets } + : { ...optionsTargets }, + { + ignoreBrowserslistConfig: true, + }, + ); + + const useRuntimeRegenerator = + regenerator && isRequired("transform-regenerator", targets); + let proposals = false; let rawVersion; @@ -83,7 +126,14 @@ export default declare((api, options, dirname) => { } function hasMapping(methods, name) { - return has(methods, name) && (proposals || methods[name].stable); + return ( + has(methods, name) && + (proposals || methods[name].stable) && + (polyfillPaths.has(methods[name].path) || + methods[name].types?.some(type => + polyfillPaths.has(`${type}/${methods[name].path}`), + )) + ); } function hasStaticMapping(object, method) { @@ -174,6 +224,19 @@ export default declare((api, options, dirname) => { ? getCoreJS2Definitions : getCoreJS3Definitions)(runtimeVersion); + const corejsPolyfills = injectCoreJS3 ? corejs3Polyfills : corejs2Polyfills; + + const polyfillPaths = new Set( + Array.from( + filterItems(corejsPolyfills, new Set(), new Set(), targets, null), + name => + name + .split(".") + .slice(1) + .join("/"), + ), + ); + const HEADER_HELPERS = ["interopRequireWildcard", "interopRequireDefault"]; const modulePath = getRuntimePath(moduleName, dirname, absoluteRuntime); @@ -324,6 +387,8 @@ export default declare((api, options, dirname) => { return; } + if (!polyfillPaths.has("symbol/iterator")) return; + // transform `something[Symbol.iterator]()` to calling `getIterator(something)` helper path.replaceWith( t.callExpression( @@ -341,6 +406,7 @@ export default declare((api, options, dirname) => { if (!injectCoreJS) return; if (path.node.operator !== "in") return; if (!path.get("left").matchesPattern("Symbol.iterator")) return; + if (!polyfillPaths.has("symbol/iterator")) return; path.replaceWith( t.callExpression( @@ -370,7 +436,8 @@ export default declare((api, options, dirname) => { if ( !injectCoreJS2 && node.computed && - path.get("property").matchesPattern("Symbol.iterator") + path.get("property").matchesPattern("Symbol.iterator") && + polyfillPaths.has("symbol/iterator") ) { path.replaceWith( t.callExpression( diff --git a/packages/babel-plugin-transform-runtime/src/runtime-corejs3-definitions.js b/packages/babel-plugin-transform-runtime/src/runtime-corejs3-definitions.js index ab76a7eaaef7..0f28679d349a 100644 --- a/packages/babel-plugin-transform-runtime/src/runtime-corejs3-definitions.js +++ b/packages/babel-plugin-transform-runtime/src/runtime-corejs3-definitions.js @@ -185,47 +185,47 @@ export default () => { // See ./helpers.js@typeAnnotationToString for the supported types InstanceProperties: { - at: { stable: false, path: "at" }, - bind: { stable: true, path: "bind" }, - codePointAt: { stable: true, path: "code-point-at" }, - codePoints: { stable: false, path: "code-points" }, + at: { stable: false, path: "at", types: ["string"] }, + bind: { stable: true, path: "bind", types: ["function"] }, + codePointAt: { stable: true, path: "code-point-at", types: ["string"] }, + codePoints: { stable: false, path: "code-points", types: ["string"] }, concat: { stable: true, path: "concat", types: ["array"] }, - copyWithin: { stable: true, path: "copy-within" }, - endsWith: { stable: true, path: "ends-with" }, - entries: { stable: true, path: "entries" }, - every: { stable: true, path: "every" }, - fill: { stable: true, path: "fill" }, - filter: { stable: true, path: "filter" }, - find: { stable: true, path: "find" }, - findIndex: { stable: true, path: "find-index" }, - flags: { stable: true, path: "flags" }, - flatMap: { stable: true, path: "flat-map" }, - flat: { stable: true, path: "flat" }, - forEach: { stable: true, path: "for-each" }, - includes: { stable: true, path: "includes" }, - indexOf: { stable: true, path: "index-of" }, - keys: { stable: true, path: "keys" }, - lastIndexOf: { stable: true, path: "last-index-of" }, - map: { stable: true, path: "map" }, - matchAll: { stable: false, path: "match-all" }, - padEnd: { stable: true, path: "pad-end" }, - padStart: { stable: true, path: "pad-start" }, - reduce: { stable: true, path: "reduce" }, - reduceRight: { stable: true, path: "reduce-right" }, - repeat: { stable: true, path: "repeat" }, - replaceAll: { stable: false, path: "replace-all" }, - reverse: { stable: true, path: "reverse" }, - slice: { stable: true, path: "slice" }, - some: { stable: true, path: "some" }, - sort: { stable: true, path: "sort" }, - splice: { stable: true, path: "splice" }, - startsWith: { stable: true, path: "starts-with" }, - trim: { stable: true, path: "trim" }, - trimEnd: { stable: true, path: "trim-end" }, - trimLeft: { stable: true, path: "trim-left" }, - trimRight: { stable: true, path: "trim-right" }, - trimStart: { stable: true, path: "trim-start" }, - values: { stable: true, path: "values" }, + copyWithin: { stable: true, path: "copy-within", types: ["array"] }, + endsWith: { stable: true, path: "ends-with", types: ["string"] }, + entries: { stable: true, path: "entries", types: ["array"] }, + every: { stable: true, path: "every", types: ["array"] }, + fill: { stable: true, path: "fill", types: ["array"] }, + filter: { stable: true, path: "filter", types: ["array"] }, + find: { stable: true, path: "find", types: ["array"] }, + findIndex: { stable: true, path: "find-index", types: ["array"] }, + flags: { stable: true, path: "flags", types: ["regexp"] }, + flatMap: { stable: true, path: "flat-map", types: ["array"] }, + flat: { stable: true, path: "flat", types: ["array"] }, + forEach: { stable: true, path: "for-each", types: ["array"] }, + includes: { stable: true, path: "includes", types: ["array", "string"] }, + indexOf: { stable: true, path: "index-of", types: ["array"] }, + keys: { stable: true, path: "keys", types: ["array"] }, + lastIndexOf: { stable: true, path: "last-index-of", types: ["array"] }, + map: { stable: true, path: "map", types: ["array"] }, + matchAll: { stable: false, path: "match-all", types: ["string"] }, + padEnd: { stable: true, path: "pad-end", types: ["string"] }, + padStart: { stable: true, path: "pad-start", types: ["string"] }, + reduce: { stable: true, path: "reduce", types: ["array"] }, + reduceRight: { stable: true, path: "reduce-right", types: ["array"] }, + repeat: { stable: true, path: "repeat", types: ["string"] }, + replaceAll: { stable: false, path: "replace-all", types: ["string"] }, + reverse: { stable: true, path: "reverse", types: ["array"] }, + slice: { stable: true, path: "slice", types: ["array"] }, + some: { stable: true, path: "some", types: ["array"] }, + sort: { stable: true, path: "sort", types: ["array"] }, + splice: { stable: true, path: "splice", types: ["array"] }, + startsWith: { stable: true, path: "starts-with", types: ["string"] }, + trim: { stable: true, path: "trim", types: ["string"] }, + trimEnd: { stable: true, path: "trim-end", types: ["string"] }, + trimLeft: { stable: true, path: "trim-left", types: ["string"] }, + trimRight: { stable: true, path: "trim-right", types: ["string"] }, + trimStart: { stable: true, path: "trim-start", types: ["string"] }, + values: { stable: true, path: "values", types: ["array"] }, }, }; }; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs2/es6-for-of-esmodules-target/input.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs2/es6-for-of-esmodules-target/input.js new file mode 100644 index 000000000000..48e5f59b2c6b --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs2/es6-for-of-esmodules-target/input.js @@ -0,0 +1,3 @@ +for (var i of arr) { + +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs2/es6-for-of-esmodules-target/options.json b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs2/es6-for-of-esmodules-target/options.json new file mode 100644 index 000000000000..b08347f342df --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs2/es6-for-of-esmodules-target/options.json @@ -0,0 +1,15 @@ +{ + "plugins": [ + "transform-for-of", + [ + "transform-runtime", + { + "corejs": 2, + "version": "7.100.0", + "targets": { + "esmodules": true + } + } + ] + ] +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs2/es6-for-of-esmodules-target/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs2/es6-for-of-esmodules-target/output.js new file mode 100644 index 000000000000..ad7039a8ea59 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs2/es6-for-of-esmodules-target/output.js @@ -0,0 +1,14 @@ +var _createForOfIteratorHelper = require("@babel/runtime-corejs2/helpers/createForOfIteratorHelper"); + +var _iterator = _createForOfIteratorHelper(arr), + _step; + +try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var i = _step.value; + } +} catch (err) { + _iterator.e(err); +} finally { + _iterator.f(); +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-esmodules-target/input.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-esmodules-target/input.js new file mode 100644 index 000000000000..a9c0ca44e510 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-esmodules-target/input.js @@ -0,0 +1,33 @@ +AggregateError +Map +Observable +Promise +Set +Symbol +URL +URLSearchParams +WeakMap +WeakSet +clearImmediate +compositeKey +compositeSymbol +globalThis +parseFloat +parseInt +queueMicrotask +setImmediate +setInterval +setTimeout + +Array +Boolean +Date +Infinity +JSON +NaN +Number +Object +clearInterval +clearTimeout + +something diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-esmodules-target/options.json b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-esmodules-target/options.json new file mode 100644 index 000000000000..145c45cd4d1a --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-esmodules-target/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["transform-runtime", { "corejs": 3, "targets": { "esmodules": true } }] + ] +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-esmodules-target/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-esmodules-target/output.js new file mode 100644 index 000000000000..6925d09728cf --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-esmodules-target/output.js @@ -0,0 +1,43 @@ +var _setImmediate = require("@babel/runtime-corejs3/core-js-stable/set-immediate"); + +var _queueMicrotask = require("@babel/runtime-corejs3/core-js-stable/queue-microtask"); + +var _clearImmediate = require("@babel/runtime-corejs3/core-js-stable/clear-immediate"); + +var _URLSearchParams = require("@babel/runtime-corejs3/core-js-stable/url-search-params"); + +var _URL = require("@babel/runtime-corejs3/core-js-stable/url"); + +var _Promise = require("@babel/runtime-corejs3/core-js-stable/promise"); + +AggregateError; +Map; +Observable; +_Promise; +Set; +Symbol; +_URL; +_URLSearchParams; +WeakMap; +WeakSet; +_clearImmediate; +compositeKey; +compositeSymbol; +globalThis; +parseFloat; +parseInt; +_queueMicrotask; +_setImmediate; +setInterval; +setTimeout; +Array; +Boolean; +Date; +Infinity; +JSON; +NaN; +Number; +Object; +clearInterval; +clearTimeout; +something; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-recent-target/input.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-recent-target/input.js new file mode 100644 index 000000000000..a9c0ca44e510 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-recent-target/input.js @@ -0,0 +1,33 @@ +AggregateError +Map +Observable +Promise +Set +Symbol +URL +URLSearchParams +WeakMap +WeakSet +clearImmediate +compositeKey +compositeSymbol +globalThis +parseFloat +parseInt +queueMicrotask +setImmediate +setInterval +setTimeout + +Array +Boolean +Date +Infinity +JSON +NaN +Number +Object +clearInterval +clearTimeout + +something diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-recent-target/options.json b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-recent-target/options.json new file mode 100644 index 000000000000..256f338960ba --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-recent-target/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["transform-runtime", { "corejs": 3, "targets": "last 2 chrome versions" }] + ] +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-recent-target/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-recent-target/output.js new file mode 100644 index 000000000000..93a62d8868ca --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-globals-recent-target/output.js @@ -0,0 +1,35 @@ +var _setImmediate = require("@babel/runtime-corejs3/core-js-stable/set-immediate"); + +var _clearImmediate = require("@babel/runtime-corejs3/core-js-stable/clear-immediate"); + +AggregateError; +Map; +Observable; +Promise; +Set; +Symbol; +URL; +URLSearchParams; +WeakMap; +WeakSet; +_clearImmediate; +compositeKey; +compositeSymbol; +globalThis; +parseFloat; +parseInt; +queueMicrotask; +_setImmediate; +setInterval; +setTimeout; +Array; +Boolean; +Date; +Infinity; +JSON; +NaN; +Number; +Object; +clearInterval; +clearTimeout; +something; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-esmodules-target/input.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-esmodules-target/input.js new file mode 100644 index 000000000000..360a6e1bb352 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-esmodules-target/input.js @@ -0,0 +1,89 @@ +object.at; +object.bind; +object.codePointAt; +object.codePoints; +object.concat; +object.copyWithin; +object.endsWith; +object.entries; +object.every; +object.fill; +object.filter; +object.find; +object.findIndex; +object.flags; +object.flatMap; +object.flat; +object.forEach; +object.includes; +object.indexOf; +object.keys; +object.lastIndexOf; +object.map; +object.matchAll; +object.padEnd; +object.padStart; +object.reduce; +object.reduceRight; +object.repeat; +object.replaceAll; +object.reverse; +object.slice; +object.some; +object.sort; +object.splice; +object.startsWith; +object.trim; +object.trimEnd; +object.trimLeft; +object.trimRight; +object.trimStart; +object.values; +object.something; + +object.at(arg); +object.bind(arg); +object.codePointAt(arg); +object.codePoints(arg); +object.concat(arg); +object.copyWithin(arg); +object.endsWith(arg); +object.entries(arg); +object.every(arg); +object.fill(arg); +object.filter(arg); +object.find(arg); +object.findIndex(arg); +object.flags(arg); +object.flatMap(arg); +object.flat(arg); +object.forEach(arg); +object.includes(arg); +object.indexOf(arg); +object.keys(arg); +object.lastIndexOf(arg); +object.map(arg); +object.matchAll(arg); +object.padEnd(arg); +object.padStart(arg); +object.reduce(arg); +object.reduceRight(arg); +object.repeat(arg); +object.replaceAll(arg); +object.reverse(arg); +object.slice(arg); +object.some(arg); +object.sort(arg); +object.splice(arg); +object.startsWith(arg); +object.trim(arg); +object.trimEnd(arg); +object.trimLeft(arg); +object.trimRight(arg); +object.trimStart(arg); +object.values(arg); + +Function.bind + +object.something(arg); +delete object.bind; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-esmodules-target/options.json b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-esmodules-target/options.json new file mode 100644 index 000000000000..145c45cd4d1a --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-esmodules-target/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["transform-runtime", { "corejs": 3, "targets": { "esmodules": true } }] + ] +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-esmodules-target/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-esmodules-target/output.js new file mode 100644 index 000000000000..726e203b55e4 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-esmodules-target/output.js @@ -0,0 +1,186 @@ +var _valuesInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/values"); + +var _trimStartInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/trim-start"); + +var _trimRightInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/trim-right"); + +var _trimLeftInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/trim-left"); + +var _trimEndInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/trim-end"); + +var _trimInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/trim"); + +var _startsWithInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/starts-with"); + +var _spliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/splice"); + +var _sortInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/sort"); + +var _sliceInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/slice"); + +var _reverseInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/reverse"); + +var _padStartInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/pad-start"); + +var _padEndInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/pad-end"); + +var _lastIndexOfInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/last-index-of"); + +var _keysInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/keys"); + +var _indexOfInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/index-of"); + +var _includesInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/includes"); + +var _flatInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/flat"); + +var _flatMapInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/flat-map"); + +var _flagsInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/flags"); + +var _entriesInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/entries"); + +var _endsWithInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/ends-with"); + +object.at; +object.bind; +object.codePointAt; +object.codePoints; +object.concat; +object.copyWithin; + +_endsWithInstanceProperty(object); + +_entriesInstanceProperty(object); + +object.every; +object.fill; +object.filter; +object.find; +object.findIndex; + +_flagsInstanceProperty(object); + +_flatMapInstanceProperty(object); + +_flatInstanceProperty(object); + +object.forEach; + +_includesInstanceProperty(object); + +_indexOfInstanceProperty(object); + +_keysInstanceProperty(object); + +_lastIndexOfInstanceProperty(object); + +object.map; +object.matchAll; + +_padEndInstanceProperty(object); + +_padStartInstanceProperty(object); + +object.reduce; +object.reduceRight; +object.repeat; +object.replaceAll; + +_reverseInstanceProperty(object); + +_sliceInstanceProperty(object); + +object.some; + +_sortInstanceProperty(object); + +_spliceInstanceProperty(object); + +_startsWithInstanceProperty(object); + +_trimInstanceProperty(object); + +_trimEndInstanceProperty(object); + +_trimLeftInstanceProperty(object); + +_trimRightInstanceProperty(object); + +_trimStartInstanceProperty(object); + +_valuesInstanceProperty(object); + +object.something; +object.at(arg); +object.bind(arg); +object.codePointAt(arg); +object.codePoints(arg); +object.concat(arg); +object.copyWithin(arg); + +_endsWithInstanceProperty(object).call(object, arg); + +_entriesInstanceProperty(object).call(object, arg); + +object.every(arg); +object.fill(arg); +object.filter(arg); +object.find(arg); +object.findIndex(arg); + +_flagsInstanceProperty(object).call(object, arg); + +_flatMapInstanceProperty(object).call(object, arg); + +_flatInstanceProperty(object).call(object, arg); + +object.forEach(arg); + +_includesInstanceProperty(object).call(object, arg); + +_indexOfInstanceProperty(object).call(object, arg); + +_keysInstanceProperty(object).call(object, arg); + +_lastIndexOfInstanceProperty(object).call(object, arg); + +object.map(arg); +object.matchAll(arg); + +_padEndInstanceProperty(object).call(object, arg); + +_padStartInstanceProperty(object).call(object, arg); + +object.reduce(arg); +object.reduceRight(arg); +object.repeat(arg); +object.replaceAll(arg); + +_reverseInstanceProperty(object).call(object, arg); + +_sliceInstanceProperty(object).call(object, arg); + +object.some(arg); + +_sortInstanceProperty(object).call(object, arg); + +_spliceInstanceProperty(object).call(object, arg); + +_startsWithInstanceProperty(object).call(object, arg); + +_trimInstanceProperty(object).call(object, arg); + +_trimEndInstanceProperty(object).call(object, arg); + +_trimLeftInstanceProperty(object).call(object, arg); + +_trimRightInstanceProperty(object).call(object, arg); + +_trimStartInstanceProperty(object).call(object, arg); + +_valuesInstanceProperty(object).call(object, arg); + +Function.bind; +object.something(arg); +delete object.bind; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-recent-target/input.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-recent-target/input.js new file mode 100644 index 000000000000..360a6e1bb352 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-recent-target/input.js @@ -0,0 +1,89 @@ +object.at; +object.bind; +object.codePointAt; +object.codePoints; +object.concat; +object.copyWithin; +object.endsWith; +object.entries; +object.every; +object.fill; +object.filter; +object.find; +object.findIndex; +object.flags; +object.flatMap; +object.flat; +object.forEach; +object.includes; +object.indexOf; +object.keys; +object.lastIndexOf; +object.map; +object.matchAll; +object.padEnd; +object.padStart; +object.reduce; +object.reduceRight; +object.repeat; +object.replaceAll; +object.reverse; +object.slice; +object.some; +object.sort; +object.splice; +object.startsWith; +object.trim; +object.trimEnd; +object.trimLeft; +object.trimRight; +object.trimStart; +object.values; +object.something; + +object.at(arg); +object.bind(arg); +object.codePointAt(arg); +object.codePoints(arg); +object.concat(arg); +object.copyWithin(arg); +object.endsWith(arg); +object.entries(arg); +object.every(arg); +object.fill(arg); +object.filter(arg); +object.find(arg); +object.findIndex(arg); +object.flags(arg); +object.flatMap(arg); +object.flat(arg); +object.forEach(arg); +object.includes(arg); +object.indexOf(arg); +object.keys(arg); +object.lastIndexOf(arg); +object.map(arg); +object.matchAll(arg); +object.padEnd(arg); +object.padStart(arg); +object.reduce(arg); +object.reduceRight(arg); +object.repeat(arg); +object.replaceAll(arg); +object.reverse(arg); +object.slice(arg); +object.some(arg); +object.sort(arg); +object.splice(arg); +object.startsWith(arg); +object.trim(arg); +object.trimEnd(arg); +object.trimLeft(arg); +object.trimRight(arg); +object.trimStart(arg); +object.values(arg); + +Function.bind + +object.something(arg); +delete object.bind; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-recent-target/options.json b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-recent-target/options.json new file mode 100644 index 000000000000..27dc258df283 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-recent-target/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["transform-runtime", { "corejs": 3, "targets": "last 2 firefox versions" }] + ] +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-recent-target/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-recent-target/output.js new file mode 100644 index 000000000000..9f9dfc855a7c --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-instance-methods-recent-target/output.js @@ -0,0 +1,86 @@ +object.at; +object.bind; +object.codePointAt; +object.codePoints; +object.concat; +object.copyWithin; +object.endsWith; +object.entries; +object.every; +object.fill; +object.filter; +object.find; +object.findIndex; +object.flags; +object.flatMap; +object.flat; +object.forEach; +object.includes; +object.indexOf; +object.keys; +object.lastIndexOf; +object.map; +object.matchAll; +object.padEnd; +object.padStart; +object.reduce; +object.reduceRight; +object.repeat; +object.replaceAll; +object.reverse; +object.slice; +object.some; +object.sort; +object.splice; +object.startsWith; +object.trim; +object.trimEnd; +object.trimLeft; +object.trimRight; +object.trimStart; +object.values; +object.something; +object.at(arg); +object.bind(arg); +object.codePointAt(arg); +object.codePoints(arg); +object.concat(arg); +object.copyWithin(arg); +object.endsWith(arg); +object.entries(arg); +object.every(arg); +object.fill(arg); +object.filter(arg); +object.find(arg); +object.findIndex(arg); +object.flags(arg); +object.flatMap(arg); +object.flat(arg); +object.forEach(arg); +object.includes(arg); +object.indexOf(arg); +object.keys(arg); +object.lastIndexOf(arg); +object.map(arg); +object.matchAll(arg); +object.padEnd(arg); +object.padStart(arg); +object.reduce(arg); +object.reduceRight(arg); +object.repeat(arg); +object.replaceAll(arg); +object.reverse(arg); +object.slice(arg); +object.some(arg); +object.sort(arg); +object.splice(arg); +object.startsWith(arg); +object.trim(arg); +object.trimEnd(arg); +object.trimLeft(arg); +object.trimRight(arg); +object.trimStart(arg); +object.values(arg); +Function.bind; +object.something(arg); +delete object.bind; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-esmodules-target/input.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-esmodules-target/input.js new file mode 100644 index 000000000000..621f71837ac1 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-esmodules-target/input.js @@ -0,0 +1,124 @@ +Array.from +Array.isArray +Array.of + +Date.now + +JSON.stringify + +Math.DEG_PER_RAD +Math.RAD_PER_DEG +Math.acosh +Math.asinh +Math.atanh +Math.cbrt +Math.clamp +Math.clz32 +Math.cosh +Math.degrees +Math.expm1 +Math.fround +Math.fscale +Math.hypot +Math.iaddh +Math.imul +Math.imulh +Math.isubh +Math.log10 +Math.log1p +Math.log2 +Math.radians +Math.scale +Math.seededPRNG +Math.sign +Math.signbit +Math.sinh +Math.tanh +Math.trunc +Math.umulh + +Number.EPSILON +Number.MAX_SAFE_INTEGER +Number.MIN_SAFE_INTEGER +Number.fromString +Number.isFinite +Number.isInteger +Number.isNaN +Number.isSafeInteger +Number.parseFloat +Number.parseInt + +Object.assign +Object.create +Object.defineProperties +Object.defineProperty +Object.entries +Object.freeze +Object.fromEntries +Object.getOwnPropertyDescriptor +Object.getOwnPropertyDescriptors +Object.getOwnPropertyNames +Object.getOwnPropertySymbols +Object.getPrototypeOf +Object.isExtensible +Object.isFrozen +Object.isSealed +Object.is +Object.keys +Object.preventExtensions +Object.seal +Object.setPrototypeOf +Object.values + +Reflect.apply +Reflect.construct +Reflect.defineMetadata +Reflect.defineProperty +Reflect.deleteMetadata +Reflect.deleteProperty +Reflect.getMetadata +Reflect.getMetadataKeys +Reflect.getOwnMetadata +Reflect.getOwnMetadataKeys +Reflect.getOwnPropertyDescriptor +Reflect.getPrototypeOf +Reflect.get +Reflect.has +Reflect.hasMetadata +Reflect.hasOwnMetadata +Reflect.isExtensible +Reflect.metadata +Reflect.ownKeys +Reflect.preventExtensions +Reflect.set +Reflect.setPrototypeOf + +String.fromCodePoint +String.raw + +Symbol.asyncIterator +Symbol.dispose +Symbol.for +Symbol.hasInstance +Symbol.isConcatSpreadable +Symbol.iterator +Symbol.keyFor +Symbol.match +Symbol.observable +Symbol.patternMatch +Symbol.replace +Symbol.search +Symbol.species +Symbol.split +Symbol.toPrimitive +Symbol.toStringTag +Symbol.unscopables + +Foo.bar +Array.something +Date.something +JSON.parse +Math.pow + +Symbol.something +delete Array.from diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-esmodules-target/options.json b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-esmodules-target/options.json new file mode 100644 index 000000000000..145c45cd4d1a --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-esmodules-target/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["transform-runtime", { "corejs": 3, "targets": { "esmodules": true } }] + ] +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-esmodules-target/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-esmodules-target/output.js new file mode 100644 index 000000000000..b4a2853a7c66 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-esmodules-target/output.js @@ -0,0 +1,148 @@ +var _Symbol$split = require("@babel/runtime-corejs3/core-js-stable/symbol/split"); + +var _Symbol$search = require("@babel/runtime-corejs3/core-js-stable/symbol/search"); + +var _Symbol$replace = require("@babel/runtime-corejs3/core-js-stable/symbol/replace"); + +var _Symbol$match = require("@babel/runtime-corejs3/core-js-stable/symbol/match"); + +var _Symbol$asyncIterator = require("@babel/runtime-corejs3/core-js-stable/symbol/async-iterator"); + +var _Reflect$set = require("@babel/runtime-corejs3/core-js-stable/reflect/set"); + +var _valuesInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/values"); + +var _keysInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/keys"); + +var _Object$fromEntries = require("@babel/runtime-corejs3/core-js-stable/object/from-entries"); + +var _entriesInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/entries"); + +var _Object$assign = require("@babel/runtime-corejs3/core-js-stable/object/assign"); + +var _Number$parseFloat = require("@babel/runtime-corejs3/core-js-stable/number/parse-float"); + +var _Math$hypot = require("@babel/runtime-corejs3/core-js-stable/math/hypot"); + +var _JSON$stringify = require("@babel/runtime-corejs3/core-js-stable/json/stringify"); + +Array.from; +Array.isArray; +Array.of; +Date.now; +_JSON$stringify; +Math.DEG_PER_RAD; +Math.RAD_PER_DEG; +Math.acosh; +Math.asinh; +Math.atanh; +Math.cbrt; +Math.clamp; +Math.clz32; +Math.cosh; +Math.degrees; +Math.expm1; +Math.fround; +Math.fscale; +_Math$hypot; +Math.iaddh; +Math.imul; +Math.imulh; +Math.isubh; +Math.log10; +Math.log1p; +Math.log2; +Math.radians; +Math.scale; +Math.seededPRNG; +Math.sign; +Math.signbit; +Math.sinh; +Math.tanh; +Math.trunc; +Math.umulh; +Number.EPSILON; +Number.MAX_SAFE_INTEGER; +Number.MIN_SAFE_INTEGER; +Number.fromString; +Number.isFinite; +Number.isInteger; +Number.isNaN; +Number.isSafeInteger; +_Number$parseFloat; +Number.parseInt; +_Object$assign; +Object.create; +Object.defineProperties; +Object.defineProperty; + +_entriesInstanceProperty(Object); + +Object.freeze; +_Object$fromEntries; +Object.getOwnPropertyDescriptor; +Object.getOwnPropertyDescriptors; +Object.getOwnPropertyNames; +Object.getOwnPropertySymbols; +Object.getPrototypeOf; +Object.isExtensible; +Object.isFrozen; +Object.isSealed; +Object.is; + +_keysInstanceProperty(Object); + +Object.preventExtensions; +Object.seal; +Object.setPrototypeOf; + +_valuesInstanceProperty(Object); + +Reflect.apply; +Reflect.construct; +Reflect.defineMetadata; +Reflect.defineProperty; +Reflect.deleteMetadata; +Reflect.deleteProperty; +Reflect.getMetadata; +Reflect.getMetadataKeys; +Reflect.getOwnMetadata; +Reflect.getOwnMetadataKeys; +Reflect.getOwnPropertyDescriptor; +Reflect.getPrototypeOf; +Reflect.get; +Reflect.has; +Reflect.hasMetadata; +Reflect.hasOwnMetadata; +Reflect.isExtensible; +Reflect.metadata; +Reflect.ownKeys; +Reflect.preventExtensions; +_Reflect$set; +Reflect.setPrototypeOf; +String.fromCodePoint; +String.raw; +_Symbol$asyncIterator; +Symbol.dispose; +Symbol.for; +Symbol.hasInstance; +Symbol.isConcatSpreadable; +Symbol.iterator; +Symbol.keyFor; +_Symbol$match; +Symbol.observable; +Symbol.patternMatch; +_Symbol$replace; +_Symbol$search; +Symbol.species; +_Symbol$split; +Symbol.toPrimitive; +Symbol.toStringTag; +Symbol.unscopables; +Foo.bar; +Array.something; +Date.something; +JSON.parse; +Math.pow; +Symbol.something; +delete Array.from; diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-recent-target/input.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-recent-target/input.js new file mode 100644 index 000000000000..621f71837ac1 --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-recent-target/input.js @@ -0,0 +1,124 @@ +Array.from +Array.isArray +Array.of + +Date.now + +JSON.stringify + +Math.DEG_PER_RAD +Math.RAD_PER_DEG +Math.acosh +Math.asinh +Math.atanh +Math.cbrt +Math.clamp +Math.clz32 +Math.cosh +Math.degrees +Math.expm1 +Math.fround +Math.fscale +Math.hypot +Math.iaddh +Math.imul +Math.imulh +Math.isubh +Math.log10 +Math.log1p +Math.log2 +Math.radians +Math.scale +Math.seededPRNG +Math.sign +Math.signbit +Math.sinh +Math.tanh +Math.trunc +Math.umulh + +Number.EPSILON +Number.MAX_SAFE_INTEGER +Number.MIN_SAFE_INTEGER +Number.fromString +Number.isFinite +Number.isInteger +Number.isNaN +Number.isSafeInteger +Number.parseFloat +Number.parseInt + +Object.assign +Object.create +Object.defineProperties +Object.defineProperty +Object.entries +Object.freeze +Object.fromEntries +Object.getOwnPropertyDescriptor +Object.getOwnPropertyDescriptors +Object.getOwnPropertyNames +Object.getOwnPropertySymbols +Object.getPrototypeOf +Object.isExtensible +Object.isFrozen +Object.isSealed +Object.is +Object.keys +Object.preventExtensions +Object.seal +Object.setPrototypeOf +Object.values + +Reflect.apply +Reflect.construct +Reflect.defineMetadata +Reflect.defineProperty +Reflect.deleteMetadata +Reflect.deleteProperty +Reflect.getMetadata +Reflect.getMetadataKeys +Reflect.getOwnMetadata +Reflect.getOwnMetadataKeys +Reflect.getOwnPropertyDescriptor +Reflect.getPrototypeOf +Reflect.get +Reflect.has +Reflect.hasMetadata +Reflect.hasOwnMetadata +Reflect.isExtensible +Reflect.metadata +Reflect.ownKeys +Reflect.preventExtensions +Reflect.set +Reflect.setPrototypeOf + +String.fromCodePoint +String.raw + +Symbol.asyncIterator +Symbol.dispose +Symbol.for +Symbol.hasInstance +Symbol.isConcatSpreadable +Symbol.iterator +Symbol.keyFor +Symbol.match +Symbol.observable +Symbol.patternMatch +Symbol.replace +Symbol.search +Symbol.species +Symbol.split +Symbol.toPrimitive +Symbol.toStringTag +Symbol.unscopables + +Foo.bar +Array.something +Date.something +JSON.parse +Math.pow + +Symbol.something +delete Array.from diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-recent-target/options.json b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-recent-target/options.json new file mode 100644 index 000000000000..88719c24508f --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-recent-target/options.json @@ -0,0 +1,5 @@ +{ + "plugins": [ + ["transform-runtime", { "corejs": 3, "targets": "last 2 edge versions" }] + ] +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-recent-target/output.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-recent-target/output.js new file mode 100644 index 000000000000..dd2217f74c5c --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime-corejs3/built-in-static-methods-recent-target/output.js @@ -0,0 +1,114 @@ +Array.from; +Array.isArray; +Array.of; +Date.now; +JSON.stringify; +Math.DEG_PER_RAD; +Math.RAD_PER_DEG; +Math.acosh; +Math.asinh; +Math.atanh; +Math.cbrt; +Math.clamp; +Math.clz32; +Math.cosh; +Math.degrees; +Math.expm1; +Math.fround; +Math.fscale; +Math.hypot; +Math.iaddh; +Math.imul; +Math.imulh; +Math.isubh; +Math.log10; +Math.log1p; +Math.log2; +Math.radians; +Math.scale; +Math.seededPRNG; +Math.sign; +Math.signbit; +Math.sinh; +Math.tanh; +Math.trunc; +Math.umulh; +Number.EPSILON; +Number.MAX_SAFE_INTEGER; +Number.MIN_SAFE_INTEGER; +Number.fromString; +Number.isFinite; +Number.isInteger; +Number.isNaN; +Number.isSafeInteger; +Number.parseFloat; +Number.parseInt; +Object.assign; +Object.create; +Object.defineProperties; +Object.defineProperty; +Object.entries; +Object.freeze; +Object.fromEntries; +Object.getOwnPropertyDescriptor; +Object.getOwnPropertyDescriptors; +Object.getOwnPropertyNames; +Object.getOwnPropertySymbols; +Object.getPrototypeOf; +Object.isExtensible; +Object.isFrozen; +Object.isSealed; +Object.is; +Object.keys; +Object.preventExtensions; +Object.seal; +Object.setPrototypeOf; +Object.values; +Reflect.apply; +Reflect.construct; +Reflect.defineMetadata; +Reflect.defineProperty; +Reflect.deleteMetadata; +Reflect.deleteProperty; +Reflect.getMetadata; +Reflect.getMetadataKeys; +Reflect.getOwnMetadata; +Reflect.getOwnMetadataKeys; +Reflect.getOwnPropertyDescriptor; +Reflect.getPrototypeOf; +Reflect.get; +Reflect.has; +Reflect.hasMetadata; +Reflect.hasOwnMetadata; +Reflect.isExtensible; +Reflect.metadata; +Reflect.ownKeys; +Reflect.preventExtensions; +Reflect.set; +Reflect.setPrototypeOf; +String.fromCodePoint; +String.raw; +Symbol.asyncIterator; +Symbol.dispose; +Symbol.for; +Symbol.hasInstance; +Symbol.isConcatSpreadable; +Symbol.iterator; +Symbol.keyFor; +Symbol.match; +Symbol.observable; +Symbol.patternMatch; +Symbol.replace; +Symbol.search; +Symbol.species; +Symbol.split; +Symbol.toPrimitive; +Symbol.toStringTag; +Symbol.unscopables; +Foo.bar; +Array.something; +Date.something; +JSON.parse; +Math.pow; +Symbol.something; +delete Array.from;