Use the imports helper in transform-runtime.

This commit is contained in:
Logan Smyth
2017-09-20 09:32:14 -07:00
parent 11715cb7af
commit ed3603ef44
22 changed files with 150 additions and 47 deletions

View File

@@ -8,6 +8,9 @@
"keywords": [
"babel-plugin"
],
"dependencies": {
"babel-helper-module-imports": "7.0.0-beta.2"
},
"devDependencies": {
"babel-helper-plugin-test-runner": "7.0.0-beta.2"
}

View File

@@ -1,3 +1,5 @@
import { addDefault, isModule } from "babel-helper-module-imports";
import definitions from "./definitions";
export default function({ types: t }) {
@@ -9,7 +11,7 @@ export default function({ types: t }) {
return Object.prototype.hasOwnProperty.call(obj, key);
}
const HELPER_BLACKLIST = ["interopRequireWildcard", "interopRequireDefault"];
const HEADER_HELPERS = ["interopRequireWildcard", "interopRequireDefault"];
return {
pre(file) {
@@ -23,12 +25,19 @@ export default function({ types: t }) {
? `${baseHelpersDir}/es6`
: baseHelpersDir;
file.set("helperGenerator", name => {
if (HELPER_BLACKLIST.indexOf(name) < 0) {
return this.addDefaultImport(
`${moduleName}/${helpersDir}/${name}`,
name,
);
}
const isInteropHelper = HEADER_HELPERS.indexOf(name) !== -1;
// Explicitly set the CommonJS interop helpers to their reserve
// blockHoist of 4 so they are guaranteed to exist
// when other things used them to import.
const blockHoist =
isInteropHelper && !isModule(file.path) ? 4 : undefined;
return this.addDefaultImport(
`${moduleName}/${helpersDir}/${name}`,
name,
blockHoist,
);
});
}
@@ -40,8 +49,28 @@ export default function({ types: t }) {
this.moduleName = moduleName;
this.addDefaultImport = (source, nameHint) => {
return file.addImport(source, "default", nameHint);
const cache = new Map();
this.addDefaultImport = (source, nameHint, blockHoist) => {
// If something on the page adds a helper when the file is an ES6
// file, we can't reused the cached helper name after things have been
// transformed because it has almost certainly been renamed.
const cacheKey = isModule(file.path);
const key = `${source}:${nameHint}:${cacheKey || ""}`;
let cached = cache.get(key);
if (cached) {
cached = t.cloneDeep(cached);
} else {
cached = addDefault(file.path, source, {
importedInterop: "compiled",
nameHint,
blockHoist,
});
cache.set(key, cached);
}
return cached;
};
},

View File

@@ -1,6 +1,9 @@
import _Map from "babel-runtime/core-js/map";
import _Symbol from "babel-runtime/core-js/symbol";
import _Promise from "babel-runtime/core-js/promise";
var _Map = require("babel-runtime/core-js/map").default;
var _Symbol = require("babel-runtime/core-js/symbol").default;
var _Promise = require("babel-runtime/core-js/promise").default;
obj.constructor === Object;
obj.constructor === _Promise;

View File

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

View File

@@ -1,4 +1,4 @@
import _classCallCheck from "babel-runtime/helpers/classCallCheck";
var _classCallCheck = require("babel-runtime/helpers/classCallCheck").default;
let Foo = function Foo() {
_classCallCheck(this, Foo);

View File

@@ -1,4 +1,5 @@
import _getIterator from "babel-runtime/core-js/get-iterator";
var _getIterator = require("babel-runtime/core-js/get-iterator").default;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;

View File

@@ -0,0 +1,5 @@
import foo from "foo";
class Example {
method() {}
}

View File

@@ -0,0 +1,23 @@
"use strict";
var _interopRequireDefault = require("babel-runtime/helpers/interopRequireDefault").default;
var _classCallCheck2 = _interopRequireDefault(require("babel-runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("babel-runtime/helpers/createClass"));
var _foo = _interopRequireDefault(require("foo"));
let Example =
/*#__PURE__*/
function () {
function Example() {
(0, _classCallCheck2.default)(this, Example);
}
(0, _createClass2.default)(Example, [{
key: "method",
value: function method() {}
}]);
return Example;
}();

View File

@@ -0,0 +1,7 @@
{
"plugins": [
"transform-runtime",
"transform-es2015-modules-commonjs",
"transform-es2015-classes"
]
}

View File

@@ -1,7 +1,11 @@
"use strict";
import _Object$defineProperty from "babel-runtime/core-js/object/define-property";
import _Object$keys from "babel-runtime/core-js/object/keys";
var _interopRequireDefault = require("babel-runtime/helpers/interopRequireDefault").default;
var _Object$defineProperty = require("babel-runtime/core-js/object/define-property").default;
var _Object$keys = require("babel-runtime/core-js/object/keys").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
@@ -21,6 +25,4 @@ _Object$keys(_mod).forEach(function (key) {
});
});
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_bar.default;

View File

@@ -1,4 +1,5 @@
import _regeneratorRuntime from "babel-runtime/regenerator";
var _regeneratorRuntime = require("babel-runtime/regenerator").default;
void
/*#__PURE__*/
_regeneratorRuntime.mark(function _callee() {

View File

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

View File

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

View File

@@ -1,6 +1,8 @@
import _classCallCheck from "babel-runtime/helpers/builtin/es6/classCallCheck";
import _possibleConstructorReturn from "babel-runtime/helpers/builtin/es6/possibleConstructorReturn";
import _inherits from "babel-runtime/helpers/builtin/es6/inherits";
var _classCallCheck = require("babel-runtime/helpers/builtin/es6/classCallCheck").default;
var _possibleConstructorReturn = require("babel-runtime/helpers/builtin/es6/possibleConstructorReturn").default;
var _inherits = require("babel-runtime/helpers/builtin/es6/inherits").default;
let Foo =
/*#__PURE__*/

View File

@@ -1,6 +1,8 @@
import _classCallCheck from "babel-runtime/helpers/builtin/classCallCheck";
import _possibleConstructorReturn from "babel-runtime/helpers/builtin/possibleConstructorReturn";
import _inherits from "babel-runtime/helpers/builtin/inherits";
var _classCallCheck = require("babel-runtime/helpers/builtin/classCallCheck").default;
var _possibleConstructorReturn = require("babel-runtime/helpers/builtin/possibleConstructorReturn").default;
var _inherits = require("babel-runtime/helpers/builtin/inherits").default;
let Foo =
/*#__PURE__*/

View File

@@ -1,7 +1,10 @@
import _Object$getPrototypeOf from "babel-runtime/core-js/object/get-prototype-of";
import _classCallCheck from "babel-runtime/helpers/es6/classCallCheck";
import _possibleConstructorReturn from "babel-runtime/helpers/es6/possibleConstructorReturn";
import _inherits from "babel-runtime/helpers/es6/inherits";
var _Object$getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of").default;
var _classCallCheck = require("babel-runtime/helpers/es6/classCallCheck").default;
var _possibleConstructorReturn = require("babel-runtime/helpers/es6/possibleConstructorReturn").default;
var _inherits = require("babel-runtime/helpers/es6/inherits").default;
let Foo =
/*#__PURE__*/