Default to non-corejs helpers.

This commit is contained in:
Logan Smyth 2018-06-21 20:55:19 -07:00
parent 9c598a8e28
commit 3210a7a873
26 changed files with 113 additions and 130 deletions

View File

@ -1,8 +1,8 @@
"use strict"; "use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireDefault = require("@babel/runtime/helpers/builtin/interopRequireDefault");
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/builtin/taggedTemplateLiteral"));
function _templateObject() { function _templateObject() {
const data = (0, _taggedTemplateLiteral2.default)(["foo"]); const data = (0, _taggedTemplateLiteral2.default)(["foo"]);

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
var _interopRequireDefault3 = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireDefault3 = require("@babel/runtime/helpers/builtin/interopRequireDefault");
var _interopRequireDefault2 = _interopRequireDefault3(require("@babel/runtime/helpers/interopRequireDefault")); var _interopRequireDefault2 = _interopRequireDefault3(require("@babel/runtime/helpers/builtin/interopRequireDefault"));
console.log(_interopRequireDefault2.default); console.log(_interopRequireDefault2.default);

View File

@ -1,8 +1,8 @@
"use strict"; "use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireDefault = require("@babel/runtime/helpers/builtin/interopRequireDefault");
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/builtin/taggedTemplateLiteral"));
function _templateObject() { function _templateObject() {
const data = (0, _taggedTemplateLiteral2.default)(["foo"]); const data = (0, _taggedTemplateLiteral2.default)(["foo"]);

View File

@ -1,7 +1,7 @@
"use strict"; "use strict";
var _interopRequireDefault3 = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireDefault3 = require("@babel/runtime/helpers/builtin/interopRequireDefault");
var _interopRequireDefault2 = _interopRequireDefault3(require("@babel/runtime/helpers/interopRequireDefault")); var _interopRequireDefault2 = _interopRequireDefault3(require("@babel/runtime/helpers/builtin/interopRequireDefault"));
console.log(_interopRequireDefault2.default); console.log(_interopRequireDefault2.default);

View File

@ -1,12 +1,10 @@
var _regeneratorRuntime = require("@babel/runtime/regenerator"); var _regeneratorRuntime = require("@babel/runtime/regenerator");
var _Object$keys = require("@babel/runtime/core-js/object/keys");
var _marked = var _marked =
/*#__PURE__*/ /*#__PURE__*/
_regeneratorRuntime.mark(fn); _regeneratorRuntime.mark(fn);
_Object$keys({}); Object.keys({});
function fn() { function fn() {
return _regeneratorRuntime.wrap(function fn$(_context) { return _regeneratorRuntime.wrap(function fn$(_context) {

View File

@ -8,29 +8,82 @@ export default declare((api, options) => {
api.assertVersion(7); api.assertVersion(7);
const { const {
helpers, corejsVersion = false,
moduleName = "@babel/runtime", helpers: useRuntimeHelpers = true,
polyfill, regenerator: useRuntimeRegenerator = true,
regenerator, useESModules = false,
useBuiltIns,
useESModules,
version: runtimeVersion = "7.0.0-beta.0", version: runtimeVersion = "7.0.0-beta.0",
} = options; } = options;
const regeneratorEnabled = regenerator !== false;
const notPolyfillOrDoesUseBuiltIns = polyfill === false || useBuiltIns; if (typeof useRuntimeRegenerator !== "boolean") {
const isPolyfillAndUseBuiltIns = polyfill && useBuiltIns; throw new Error(
const baseHelpersDir = useBuiltIns ? "helpers/builtin" : "helpers"; "The 'regenerator' option must be undefined, or a boolean.",
const helpersDir = useESModules ? `${baseHelpersDir}/es6` : baseHelpersDir; );
}
if (typeof useRuntimeHelpers !== "boolean") {
throw new Error("The 'helpers' option must be undefined, or a boolean.");
}
if (typeof useESModules !== "boolean") {
throw new Error(
"The 'useESModules' option must be undefined, or a boolean.",
);
}
if (
corejsVersion !== false &&
(typeof corejsVersion !== "number" || corejsVersion !== 2) &&
(typeof corejsVersion !== "string" || corejsVersion !== "2")
) {
throw new Error(
`The 'corejsVersion' option must be undefined, false, or 2, or '2', ` +
`but got ${JSON.stringify(corejsVersion)}.`,
);
}
function has(obj, key) { function has(obj, key) {
return Object.prototype.hasOwnProperty.call(obj, key); return Object.prototype.hasOwnProperty.call(obj, key);
} }
if (has(options, "useBuiltIns")) {
if (options.useBuiltIns) {
throw new Error(
"The 'useBuiltIns' option has been removed. The @babel/runtime " +
"module now uses builtins by default.",
);
} else {
throw new Error(
"The 'useBuiltIns' option has been removed. Use the 'corejsVersion'" +
"option with value '2' to polyfill with CoreJS 2.x via @babel/runtime.",
);
}
}
if (has(options, "polyfill")) {
if (options.polyfill === false) {
throw new Error(
"The 'polyfill' option has been removed. The @babel/runtime " +
"module now skips polyfilling by default.",
);
} else {
throw new Error(
"The 'polyfill' option has been removed. Use the 'corejsVersion'" +
"option with value '2' to polyfill with CoreJS 2.x via @babel/runtime.",
);
}
}
if (has(options, "moduleName")) {
throw new Error(
"The 'moduleName' option has been removed. @babel/transform-runtime " +
"no longer supports arbitrary runtimes.",
);
}
const helpersDir = useESModules ? "helpers/es6" : "helpers";
const injectCoreJS2 = `${corejsVersion}` === "2";
const moduleName = "@babel/runtime";
const HEADER_HELPERS = ["interopRequireWildcard", "interopRequireDefault"]; const HEADER_HELPERS = ["interopRequireWildcard", "interopRequireDefault"];
return { return {
pre(file) { pre(file) {
if (helpers !== false) { if (useRuntimeHelpers) {
file.set("helperGenerator", name => { file.set("helperGenerator", name => {
// If the helper didn't exist yet at the version given, we bail // If the helper didn't exist yet at the version given, we bail
// out and let Babel either insert it directly, or throw an error // out and let Babel either insert it directly, or throw an error
@ -51,21 +104,13 @@ export default declare((api, options) => {
isInteropHelper && !isModule(file.path) ? 4 : undefined; isInteropHelper && !isModule(file.path) ? 4 : undefined;
return this.addDefaultImport( return this.addDefaultImport(
`${moduleName}/${helpersDir}/${name}`, `${moduleName}/${helpersDir}/${injectCoreJS2 ? "" : "builtin/"}${name}`,
name, name,
blockHoist, blockHoist,
); );
}); });
} }
if (isPolyfillAndUseBuiltIns) {
throw new Error(
"The polyfill option conflicts with useBuiltIns; use one or the other",
);
}
this.moduleName = moduleName;
const cache = new Map(); const cache = new Map();
this.addDefaultImport = (source, nameHint, blockHoist) => { this.addDefaultImport = (source, nameHint, blockHoist) => {
@ -94,17 +139,17 @@ export default declare((api, options) => {
visitor: { visitor: {
ReferencedIdentifier(path) { ReferencedIdentifier(path) {
const { node, parent, scope } = path; const { node, parent, scope } = path;
if (node.name === "regeneratorRuntime" && regeneratorEnabled) { if (node.name === "regeneratorRuntime" && useRuntimeRegenerator) {
path.replaceWith( path.replaceWith(
this.addDefaultImport( this.addDefaultImport(
`${this.moduleName}/regenerator`, `${moduleName}/regenerator`,
"regeneratorRuntime", "regeneratorRuntime",
), ),
); );
return; return;
} }
if (notPolyfillOrDoesUseBuiltIns) return; if (!injectCoreJS2) return;
if (t.isMemberExpression(parent)) return; if (t.isMemberExpression(parent)) return;
if (!has(definitions.builtins, node.name)) return; if (!has(definitions.builtins, node.name)) return;
@ -121,7 +166,7 @@ export default declare((api, options) => {
// arr[Symbol.iterator]() -> _core.$for.getIterator(arr) // arr[Symbol.iterator]() -> _core.$for.getIterator(arr)
CallExpression(path) { CallExpression(path) {
if (notPolyfillOrDoesUseBuiltIns) return; if (!injectCoreJS2) return;
// we can't compile this // we can't compile this
if (path.node.arguments.length) return; if (path.node.arguments.length) return;
@ -146,7 +191,7 @@ export default declare((api, options) => {
// Symbol.iterator in arr -> core.$for.isIterable(arr) // Symbol.iterator in arr -> core.$for.isIterable(arr)
BinaryExpression(path) { BinaryExpression(path) {
if (notPolyfillOrDoesUseBuiltIns) return; if (!injectCoreJS2) return;
if (path.node.operator !== "in") return; if (path.node.operator !== "in") return;
if (!path.get("left").matchesPattern("Symbol.iterator")) return; if (!path.get("left").matchesPattern("Symbol.iterator")) return;
@ -165,7 +210,7 @@ export default declare((api, options) => {
// Array.from -> _core.Array.from // Array.from -> _core.Array.from
MemberExpression: { MemberExpression: {
enter(path) { enter(path) {
if (notPolyfillOrDoesUseBuiltIns) return; if (!injectCoreJS2) return;
if (!path.isReferenced()) return; if (!path.isReferenced()) return;
const { node } = path; const { node } = path;
@ -203,7 +248,7 @@ export default declare((api, options) => {
}, },
exit(path) { exit(path) {
if (notPolyfillOrDoesUseBuiltIns) return; if (!injectCoreJS2) return;
if (!path.isReferenced()) return; if (!path.isReferenced()) return;
const { node } = path; const { node } = path;

View File

@ -1,14 +1,5 @@
var _Map = require("@babel/runtime/core-js/map");
var _Symbol = require("@babel/runtime/core-js/symbol");
var _Promise = require("@babel/runtime/core-js/promise");
obj.constructor === Object; obj.constructor === Object;
obj.constructor === _Promise; obj.constructor === Promise;
Symbol();
_Symbol(); Symbol("test");
new Map();
_Symbol("test");
new _Map();

View File

@ -1,3 +1 @@
var _Promise = require("@babel/runtime/core-js/promise"); Promise.resolve;
_Promise.resolve;

View File

@ -1,4 +1,4 @@
var _classCallCheck = require("@babel/runtime/helpers/classCallCheck"); var _classCallCheck = require("@babel/runtime/helpers/builtin/classCallCheck");
let Foo = function Foo() { let Foo = function Foo() {
"use strict"; "use strict";

View File

@ -1,9 +0,0 @@
import foo, * as bar from "someModule";
export const myWord = Symbol("abc");
export function* giveWord () {
yield myWord;
}
foo;
bar;

View File

@ -1,3 +0,0 @@
{
"plugins": [["transform-runtime", { "moduleName": "foo" }], "transform-regenerator"]
}

View File

@ -1,24 +0,0 @@
import _regeneratorRuntime from "foo/regenerator";
import _Symbol from "foo/core-js/symbol";
var _marked =
/*#__PURE__*/
_regeneratorRuntime.mark(giveWord);
import foo, * as bar from "someModule";
export const myWord = _Symbol("abc");
export function giveWord() {
return _regeneratorRuntime.wrap(function giveWord$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return myWord;
case 2:
case "end":
return _context.stop();
}
}, _marked, this);
}
foo;
bar;

View File

@ -1,11 +1,9 @@
var _getIterator = require("@babel/runtime/core-js/get-iterator");
var _iteratorNormalCompletion = true; var _iteratorNormalCompletion = true;
var _didIteratorError = false; var _didIteratorError = false;
var _iteratorError = undefined; var _iteratorError = undefined;
try { try {
for (var _iterator = _getIterator(arr), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { for (var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var i = _step.value; var i = _step.value;
} }
} catch (err) { } catch (err) {

View File

@ -1,12 +1,11 @@
import _regeneratorRuntime from "@babel/runtime/regenerator"; import _regeneratorRuntime from "@babel/runtime/regenerator";
import _Symbol from "@babel/runtime/core-js/symbol";
var _marked = var _marked =
/*#__PURE__*/ /*#__PURE__*/
_regeneratorRuntime.mark(giveWord); _regeneratorRuntime.mark(giveWord);
import foo, * as bar from "someModule"; import foo, * as bar from "someModule";
export const myWord = _Symbol("abc"); export const myWord = Symbol("abc");
export function giveWord() { export function giveWord() {
return _regeneratorRuntime.wrap(function giveWord$(_context) { return _regeneratorRuntime.wrap(function giveWord$(_context) {
while (1) switch (_context.prev = _context.next) { while (1) switch (_context.prev = _context.next) {

View File

@ -1,10 +1,6 @@
"use strict"; "use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireDefault = require("@babel/runtime/helpers/builtin/interopRequireDefault");
var _Object$defineProperty = require("@babel/runtime/core-js/object/define-property");
var _Object$keys = require("@babel/runtime/core-js/object/keys");
Object.defineProperty(exports, "__esModule", { Object.defineProperty(exports, "__esModule", {
value: true value: true
@ -14,15 +10,13 @@ var _bar = _interopRequireDefault(require("bar"));
var _mod = require("mod"); var _mod = require("mod");
_Object$keys(_mod).forEach(function (key) { Object.keys(_mod).forEach(function (key) {
if (key === "default" || key === "__esModule") return; if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
_Object$defineProperty(exports, key, {
enumerable: true, enumerable: true,
get: function () { get: function () {
return _mod[key]; return _mod[key];
} }
}); });
}); });
_bar.default; _bar.default;

View File

@ -1,3 +1 @@
var _isIterable = require("@babel/runtime/core-js/is-iterable"); Symbol.iterator in Object(arr);
_isIterable(Object(arr));

View File

@ -1,3 +1 @@
var _Symbol$iterator = require("@babel/runtime/core-js/symbol/iterator"); Symbol.iterator;
_Symbol$iterator;

View File

@ -0,0 +1,3 @@
{
"plugins": [["transform-runtime", { "corejsVersion": 2, "useESModules": true }], "transform-classes"]
}

View File

@ -1,10 +1,10 @@
var _classCallCheck = require("@babel/runtime/helpers/builtin/classCallCheck"); var _classCallCheck = require("@babel/runtime/helpers/es6/classCallCheck");
var _possibleConstructorReturn = require("@babel/runtime/helpers/builtin/possibleConstructorReturn"); var _possibleConstructorReturn = require("@babel/runtime/helpers/es6/possibleConstructorReturn");
var _getPrototypeOf = require("@babel/runtime/helpers/builtin/getPrototypeOf"); var _getPrototypeOf = require("@babel/runtime/helpers/es6/getPrototypeOf");
var _inherits = require("@babel/runtime/helpers/builtin/inherits"); var _inherits = require("@babel/runtime/helpers/es6/inherits");
let Foo = let Foo =
/*#__PURE__*/ /*#__PURE__*/

View File

@ -0,0 +1,3 @@
{
"plugins": [["transform-runtime", { "corejsVersion": 2 }], "transform-classes"]
}

View File

@ -1,10 +1,10 @@
var _classCallCheck = require("@babel/runtime/helpers/builtin/es6/classCallCheck"); var _classCallCheck = require("@babel/runtime/helpers/classCallCheck");
var _possibleConstructorReturn = require("@babel/runtime/helpers/builtin/es6/possibleConstructorReturn"); var _possibleConstructorReturn = require("@babel/runtime/helpers/possibleConstructorReturn");
var _getPrototypeOf = require("@babel/runtime/helpers/builtin/es6/getPrototypeOf"); var _getPrototypeOf = require("@babel/runtime/helpers/getPrototypeOf");
var _inherits = require("@babel/runtime/helpers/builtin/es6/inherits"); var _inherits = require("@babel/runtime/helpers/inherits");
let Foo = let Foo =
/*#__PURE__*/ /*#__PURE__*/

View File

@ -1,3 +0,0 @@
{
"plugins": [["transform-runtime", { "useBuiltIns": true, "useESModules": true }], "transform-classes"]
}

View File

@ -1,3 +0,0 @@
{
"plugins": [["transform-runtime", { "useBuiltIns": true }], "transform-classes"]
}

View File

@ -1,10 +1,10 @@
var _classCallCheck = require("@babel/runtime/helpers/es6/classCallCheck"); var _classCallCheck = require("@babel/runtime/helpers/es6/builtin/classCallCheck");
var _possibleConstructorReturn = require("@babel/runtime/helpers/es6/possibleConstructorReturn"); var _possibleConstructorReturn = require("@babel/runtime/helpers/es6/builtin/possibleConstructorReturn");
var _getPrototypeOf = require("@babel/runtime/helpers/es6/getPrototypeOf"); var _getPrototypeOf = require("@babel/runtime/helpers/es6/builtin/getPrototypeOf");
var _inherits = require("@babel/runtime/helpers/es6/inherits"); var _inherits = require("@babel/runtime/helpers/es6/builtin/inherits");
let Foo = let Foo =
/*#__PURE__*/ /*#__PURE__*/