Issue 1:
With a file script.js containing this input: class Foo extends Bar {}

As a baseline, the following command:

babel --plugins transform-runtime,transform-es2015-classes script.js

Yields the following output, which as noted in #2726 imports the core-js helpers but inlines the babel helpers:

import _Object$setPrototypeOf from "babel-runtime/core-js/object/set-prototype-of";
import _Object$create from "babel-runtime/core-js/object/create";

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = _Object$create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) _Object$setPrototypeOf ? _Object$setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

let Foo = (function (_Bar) {
_inherits(Foo, _Bar);

function Foo() {
_classCallCheck(this, Foo);

return _possibleConstructorReturn(this, Object.getPrototypeOf(Foo).apply(this, arguments));
}

return Foo;
})(Bar);

However, strangely, adding the typeof-symbol transform, as follows:

babel --plugins transform-runtime,transform-es2015-classes,transform-es2015-typeof-symbol script.js

Produces this output, which is identical to the output when you specify just --plugins transform-es2015-classes:

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

let Foo = (function (_Bar) {
_inherits(Foo, _Bar);

function Foo() {
_classCallCheck(this, Foo);

return _possibleConstructorReturn(this, Object.getPrototypeOf(Foo).apply(this, arguments));
}

return Foo;
})(Bar);

It's almost as if including the transform-es2015-typeof-symbol plugin somehow effectively disables the transform-runtime plugin.

Issue 2:
Reproduction: https://github.com/yyx990803/babel-6-runtime-repro

var babel = require('babel-core')

var code = babel.transform('class Test {}', {
plugins: [
'transform-runtime',
'transform-es2015-classes'
]
}).code

console.log(code)

Expected the _classCallCheck to be using the runtime version, but it's still inlined:

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

let Test = function Test() {
_classCallCheck(this, Test);
};