@59naga/babel-plugin-transform-array-from
Version:
replace `Array.from` with an ponyfill function
78 lines (64 loc) • 2.31 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _babelTemplate = require('babel-template');
var _babelTemplate2 = _interopRequireDefault(_babelTemplate);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// private
// dependencies
var polyfill = _fs2.default.readFileSync(require.resolve('@59naga/array.from/polyfill.js'), 'utf8');
var polyfillWithoutExport = polyfill.slice(polyfill.indexOf('('));
var defineName = '_arrayFrom';
/**
* @module babel-plugin-transform-array-from
* @returns {babelPlugin} unknown
*/
exports.default = function () {
return {
visitor: {
CallExpression: function CallExpression(path) {
if (path.get('callee').matchesPattern('Array.from')) {
path.replaceWith((0, _babelTemplate2.default)(defineName + '($0)')(path.node.arguments));
}
},
Program: {
exit: function exit(path) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = path.node.body[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var node = _step.value;
var declaration = (node.declarations || [])[0] || {};
var name = declaration.id && declaration.id.name;
if (name === defineName) {
return;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var topNodes = [];
topNodes.push((0, _babelTemplate2.default)('var ' + defineName + ' = Array.from || ' + polyfillWithoutExport)());
path.unshiftContainer('body', topNodes);
}
}
}
};
};
module.exports = exports['default'];
//# sourceMappingURL=index.js.map
;