"use strict"; exports.__esModule = true; var _keys = require("babel-runtime/core-js/object/keys"); var _keys2 = _interopRequireDefault(_keys); var _create = require("babel-runtime/core-js/object/create"); var _create2 = _interopRequireDefault(_create); var _getIterator2 = require("babel-runtime/core-js/get-iterator"); var _getIterator3 = _interopRequireDefault(_getIterator2); var _symbol = require("babel-runtime/core-js/symbol"); var _symbol2 = _interopRequireDefault(_symbol); exports.default = function () { var REASSIGN_REMAP_SKIP = (0, _symbol2.default)(); var reassignmentVisitor = { ReferencedIdentifier: function ReferencedIdentifier(path) { var name = path.node.name; var remap = this.remaps[name]; if (!remap) return; if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return; if (path.parentPath.isCallExpression({ callee: path.node })) { path.replaceWith(t.sequenceExpression([t.numericLiteral(0), remap])); } else if (path.isJSXIdentifier() && t.isMemberExpression(remap)) { var object = remap.object, property = remap.property; path.replaceWith(t.JSXMemberExpression(t.JSXIdentifier(object.name), t.JSXIdentifier(property.name))); } else { path.replaceWith(remap); } this.requeueInParent(path); }, AssignmentExpression: function AssignmentExpression(path) { var node = path.node; if (node[REASSIGN_REMAP_SKIP]) return; var left = path.get("left"); if (!left.isIdentifier()) return; var name = left.node.name; var exports = this.exports[name]; if (!exports) return; if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return; node[REASSIGN_REMAP_SKIP] = true; for (var _iterator = exports, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { var _ref; if (_isArray) { if (_i >= _iterator.length) break; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) break; _ref = _i.value; } var reid = _ref; node = buildExportsAssignment(reid, node).expression; } path.replaceWith(node); this.requeueInParent(path); }, UpdateExpression: function UpdateExpression(path) { var arg = path.get("argument"); if (!arg.isIdentifier()) return; var name = arg.node.name; var exports = this.exports[name]; if (!exports) return; if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return; var node = t.assignmentExpression(path.node.operator[0] + "=", arg.node, t.numericLiteral(1)); if (path.parentPath.isExpressionStatement() && !path.isCompletionRecord() || path.node.prefix) { path.replaceWith(node); this.requeueInParent(path); return; } var nodes = []; nodes.push(node); var operator = void 0; if (path.node.operator === "--") { operator = "+"; } else { operator = "-"; } nodes.push(t.binaryExpression(operator, arg.node, t.numericLiteral(1))); path.replaceWithMultiple(t.sequenceExpression(nodes)); } }; return { inherits: require("babel-plugin-transform-strict-mode"), visitor: { ThisExpression: function ThisExpression(path, state) { if (this.ranCommonJS) return; if (state.opts.allowTopLevelThis !== true && !path.findParent(function (path) { return !path.is("shadow") && THIS_BREAK_KEYS.indexOf(path.type) >= 0; })) { path.replaceWith(t.identifier("undefined")); } }, Program: { exit: function exit(path) { this.ranCommonJS = true; var strict = !!this.opts.strict; var noInterop = !!this.opts.noInterop; var scope = path.scope; scope.rename("module"); scope.rename("exports"); scope.rename("require"); var hasExports = false; var hasImports = false; var body = path.get("body"); var imports = (0, _create2.default)(null); var exports = (0, _create2.default)(null); var nonHoistedExportNames = (0, _create2.default)(null); var topNodes = []; var remaps = (0, _create2.default)(null); var requires = (0, _create2.default)(null); function addRequire(source, blockHoist) { var cached = requires[source]; if (cached) return cached; var ref = path.scope.generateUidIdentifier((0, _path2.basename)(source, (0, _path2.extname)(source))); var varDecl = t.variableDeclaration("var", [t.variableDeclarator(ref, buildRequire(t.stringLiteral(source)).expression)]); if (imports[source]) { varDecl.loc = imports[source].loc; } if (typeof blockHoist === "number" && blockHoist > 0) { varDecl._blockHoist = blockHoist; } topNodes.push(varDecl); return requires[source] = ref; } function addTo(obj, key, arr) { var existing = obj[key] || []; obj[key] = existing.concat(arr); } for (var _iterator2 = body, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { var _ref2; if (_isArray2) { if (_i2 >= _iterator2.length) break; _ref2 = _iterator2[_i2++]; } else { _i2 = _iterator2.next(); if (_i2.done) break; _ref2 = _i2.value; } var _path = _ref2; if (_path.isExportDeclaration()) { hasExports = true; var specifiers = [].concat(_path.get("declaration"), _path.get("specifiers")); for (var _iterator4 = specifiers, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { var _ref4; if (_isArray4) { if (_i4 >= _iterator4.length) break; _ref4 = _iterator4[_i4++]; } else { _i4 = _iterator4.next(); if (_i4.done) break; _ref4 = _i4.value; } var _specifier2 = _ref4; var ids = _specifier2.getBindingIdentifiers(); if (ids.__esModule) { throw _specifier2.buildCodeFrameError("Illegal export \"__esModule\""); } } } if (_path.isImportDeclaration()) { var _importsEntry$specifi; hasImports = true; var key = _path.node.source.value; var importsEntry = imports[key] || { specifiers: [], maxBlockHoist: 0, loc: _path.node.loc }; (_importsEntry$specifi = importsEntry.specifiers).push.apply(_importsEntry$specifi, _path.node.specifiers); if (typeof _path.node._blockHoist === "number") { importsEntry.maxBlockHoist = Math.max(_path.node._blockHoist, importsEntry.maxBlockHoist); } imports[key] = importsEntry; _path.remove(); } else if (_path.isExportDefaultDeclaration()) { var declaration = _path.get("declaration"); if (declaration.isFunctionDeclaration()) { var id = declaration.node.id; var defNode = t.identifier("default"); if (id) { addTo(exports, id.name, defNode); topNodes.push(buildExportsAssignment(defNode, id)); _path.replaceWith(declaration.node); } else { topNodes.push(buildExportsAssignment(defNode, t.toExpression(declaration.node))); _path.remove(); } } else if (declaration.isClassDeclaration()) { var _id = declaration.node.id; var _defNode = t.identifier("default"); if (_id) { addTo(exports, _id.name, _defNode); _path.replaceWithMultiple([declaration.node, buildExportsAssignment(_defNode, _id)]); } else { _path.replaceWith(buildExportsAssignment(_defNode, t.toExpression(declaration.node))); _path.parentPath.requeue(_path.get("expression.left")); } } else { _path.replaceWith(buildExportsAssignment(t.identifier("default"), declaration.node)); _path.parentPath.requeue(_path.get("expression.left")); } } else if (_path.isExportNamedDeclaration()) { var _declaration = _path.get("declaration"); if (_declaration.node) { if (_declaration.isFunctionDeclaration()) { var _id2 = _declaration.node.id; addTo(exports, _id2.name, _id2); topNodes.push(buildExportsAssignment(_id2, _id2)); _path.replaceWith(_declaration.node); } else if (_declaration.isClassDeclaration()) { var _id3 = _declaration.node.id; addTo(exports, _id3.name, _id3); _path.replaceWithMultiple([_declaration.node, buildExportsAssignment(_id3, _id3)]); nonHoistedExportNames[_id3.name] = true; } else if (_declaration.isVariableDeclaration()) { var declarators = _declaration.get("declarations"); for (var _iterator5 = declarators, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { var _ref5; if (_isArray5) { if (_i5 >= _iterator5.length) break; _ref5 = _iterator5[_i5++]; } else { _i5 = _iterator5.next(); if (_i5.done) break; _ref5 = _i5.value; } var decl = _ref5; var _id4 = decl.get("id"); var init = decl.get("init"); if (!init.node) init.replaceWith(t.identifier("undefined")); if (_id4.isIdentifier()) { addTo(exports, _id4.node.name, _id4.node); init.replaceWith(buildExportsAssignment(_id4.node, init.node).expression); nonHoistedExportNames[_id4.node.name] = true; } else {} } _path.replaceWith(_declaration.node); } continue; } var _specifiers = _path.get("specifiers"); var nodes = []; var _source = _path.node.source; if (_source) { var ref = addRequire(_source.value, _path.node._blockHoist); for (var _iterator6 = _specifiers, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : (0, _getIterator3.default)(_iterator6);;) { var _ref6; if (_isArray6) { if (_i6 >= _iterator6.length) break; _ref6 = _iterator6[_i6++]; } else { _i6 = _iterator6.next(); if (_i6.done) break; _ref6 = _i6.value; } var _specifier3 = _ref6; if (_specifier3.isExportNamespaceSpecifier()) {} else if (_specifier3.isExportDefaultSpecifier()) {} else if (_specifier3.isExportSpecifier()) { if (!noInterop && _specifier3.node.local.name === "default") { topNodes.push(buildExportsFrom(t.stringLiteral(_specifier3.node.exported.name), t.memberExpression(t.callExpression(this.addHelper("interopRequireDefault"), [ref]), _specifier3.node.local))); } else { topNodes.push(buildExportsFrom(t.stringLiteral(_specifier3.node.exported.name), t.memberExpression(ref, _specifier3.node.local))); } nonHoistedExportNames[_specifier3.node.exported.name] = true; } } } else { for (var _iterator7 = _specifiers, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : (0, _getIterator3.default)(_iterator7);;) { var _ref7; if (_isArray7) { if (_i7 >= _iterator7.length) break; _ref7 = _iterator7[_i7++]; } else { _i7 = _iterator7.next(); if (_i7.done) break; _ref7 = _i7.value; } var _specifier4 = _ref7; if (_specifier4.isExportSpecifier()) { addTo(exports, _specifier4.node.local.name, _specifier4.node.exported); nonHoistedExportNames[_specifier4.node.exported.name] = true; nodes.push(buildExportsAssignment(_specifier4.node.exported, _specifier4.node.local)); } } } _path.replaceWithMultiple(nodes); } else if (_path.isExportAllDeclaration()) { var exportNode = buildExportAll({ OBJECT: addRequire(_path.node.source.value, _path.node._blockHoist) }); exportNode.loc = _path.node.loc; topNodes.push(exportNode); _path.remove(); } } for (var source in imports) { var _imports$source = imports[source], specifiers = _imports$source.specifiers, maxBlockHoist = _imports$source.maxBlockHoist; if (specifiers.length) { var uid = addRequire(source, maxBlockHoist); var wildcard = void 0; for (var i = 0; i < specifiers.length; i++) { var specifier = specifiers[i]; if (t.isImportNamespaceSpecifier(specifier)) { if (strict || noInterop) { remaps[specifier.local.name] = uid; } else { var varDecl = t.variableDeclaration("var", [t.variableDeclarator(specifier.local, t.callExpression(this.addHelper("interopRequireWildcard"), [uid]))]); if (maxBlockHoist > 0) { varDecl._blockHoist = maxBlockHoist; } topNodes.push(varDecl); } wildcard = specifier.local; } else if (t.isImportDefaultSpecifier(specifier)) { specifiers[i] = t.importSpecifier(specifier.local, t.identifier("default")); } } for (var _iterator3 = specifiers, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { var _ref3; if (_isArray3) { if (_i3 >= _iterator3.length) break; _ref3 = _iterator3[_i3++]; } else { _i3 = _iterator3.next(); if (_i3.done) break; _ref3 = _i3.value; } var _specifier = _ref3; if (t.isImportSpecifier(_specifier)) { var target = uid; if (_specifier.imported.name === "default") { if (wildcard) { target = wildcard; } else if (!noInterop) { target = wildcard = path.scope.generateUidIdentifier(uid.name); var _varDecl = t.variableDeclaration("var", [t.variableDeclarator(target, t.callExpression(this.addHelper("interopRequireDefault"), [uid]))]); if (maxBlockHoist > 0) { _varDecl._blockHoist = maxBlockHoist; } topNodes.push(_varDecl); } } remaps[_specifier.local.name] = t.memberExpression(target, t.cloneWithoutLoc(_specifier.imported)); } } } else { var requireNode = buildRequire(t.stringLiteral(source)); requireNode.loc = imports[source].loc; topNodes.push(requireNode); } } if (hasImports && (0, _keys2.default)(nonHoistedExportNames).length) { var maxHoistedExportsNodeAssignmentLength = 100; var nonHoistedExportNamesArr = (0, _keys2.default)(nonHoistedExportNames); var _loop = function _loop(currentExportsNodeAssignmentLength) { var nonHoistedExportNamesChunk = nonHoistedExportNamesArr.slice(currentExportsNodeAssignmentLength, currentExportsNodeAssignmentLength + maxHoistedExportsNodeAssignmentLength); var hoistedExportsNode = t.identifier("undefined"); nonHoistedExportNamesChunk.forEach(function (name) { hoistedExportsNode = buildExportsAssignment(t.identifier(name), hoistedExportsNode).expression; }); var node = t.expressionStatement(hoistedExportsNode); node._blockHoist = 3; topNodes.unshift(node); }; for (var currentExportsNodeAssignmentLength = 0; currentExportsNodeAssignmentLength < nonHoistedExportNamesArr.length; currentExportsNodeAssignmentLength += maxHoistedExportsNodeAssignmentLength) { _loop(currentExportsNodeAssignmentLength); } } if (hasExports && !strict) { var buildTemplate = buildExportsModuleDeclaration; if (this.opts.loose) buildTemplate = buildLooseExportsModuleDeclaration; var declar = buildTemplate(); declar._blockHoist = 3; topNodes.unshift(declar); } path.unshiftContainer("body", topNodes); path.traverse(reassignmentVisitor, { remaps: remaps, scope: scope, exports: exports, requeueInParent: function requeueInParent(newPath) { return path.requeue(newPath); } }); } } } }; }; var _path2 = require("path"); var _babelTemplate = require("babel-template"); var _babelTemplate2 = _interopRequireDefault(_babelTemplate); var _babelTypes = require("babel-types"); var t = _interopRequireWildcard(_babelTypes); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var buildRequire = (0, _babelTemplate2.default)("\n require($0);\n"); var buildExportsModuleDeclaration = (0, _babelTemplate2.default)("\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n"); var buildExportsFrom = (0, _babelTemplate2.default)("\n Object.defineProperty(exports, $0, {\n enumerable: true,\n get: function () {\n return $1;\n }\n });\n"); var buildLooseExportsModuleDeclaration = (0, _babelTemplate2.default)("\n exports.__esModule = true;\n"); var buildExportsAssignment = (0, _babelTemplate2.default)("\n exports.$0 = $1;\n"); var buildExportAll = (0, _babelTemplate2.default)("\n Object.keys(OBJECT).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return OBJECT[key];\n }\n });\n });\n"); var THIS_BREAK_KEYS = ["FunctionExpression", "FunctionDeclaration", "ClassProperty", "ClassMethod", "ObjectMethod"]; module.exports = exports["default"];