UNPKG

@59naga/babel-plugin-transform-array-from

Version:
78 lines (64 loc) 2.31 kB
'use strict'; 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