| "use strict"; | 
|   | 
| exports.__esModule = true; | 
|   | 
| 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 (_ref) { | 
|   var t = _ref.types; | 
|   | 
|   var IGNORE_REASSIGNMENT_SYMBOL = (0, _symbol2.default)(); | 
|   | 
|   var reassignmentVisitor = { | 
|     "AssignmentExpression|UpdateExpression": function AssignmentExpressionUpdateExpression(path) { | 
|       if (path.node[IGNORE_REASSIGNMENT_SYMBOL]) return; | 
|       path.node[IGNORE_REASSIGNMENT_SYMBOL] = true; | 
|   | 
|       var arg = path.get(path.isAssignmentExpression() ? "left" : "argument"); | 
|       if (!arg.isIdentifier()) return; | 
|   | 
|       var name = arg.node.name; | 
|   | 
|       if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return; | 
|   | 
|       var exportedNames = this.exports[name]; | 
|       if (!exportedNames) return; | 
|   | 
|       var node = path.node; | 
|   | 
|       var isPostUpdateExpression = path.isUpdateExpression() && !node.prefix; | 
|       if (isPostUpdateExpression) { | 
|         if (node.operator === "++") node = t.binaryExpression("+", node.argument, t.numericLiteral(1));else if (node.operator === "--") node = t.binaryExpression("-", node.argument, t.numericLiteral(1));else isPostUpdateExpression = false; | 
|       } | 
|   | 
|       for (var _iterator = exportedNames, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { | 
|         var _ref2; | 
|   | 
|         if (_isArray) { | 
|           if (_i >= _iterator.length) break; | 
|           _ref2 = _iterator[_i++]; | 
|         } else { | 
|           _i = _iterator.next(); | 
|           if (_i.done) break; | 
|           _ref2 = _i.value; | 
|         } | 
|   | 
|         var exportedName = _ref2; | 
|   | 
|         node = this.buildCall(exportedName, node).expression; | 
|       } | 
|   | 
|       if (isPostUpdateExpression) node = t.sequenceExpression([node, path.node]); | 
|   | 
|       path.replaceWith(node); | 
|     } | 
|   }; | 
|   | 
|   return { | 
|     visitor: { | 
|       CallExpression: function CallExpression(path, state) { | 
|         if (path.node.callee.type === TYPE_IMPORT) { | 
|           var contextIdent = state.contextIdent; | 
|           path.replaceWith(t.callExpression(t.memberExpression(contextIdent, t.identifier("import")), path.node.arguments)); | 
|         } | 
|       }, | 
|       ReferencedIdentifier: function ReferencedIdentifier(path, state) { | 
|         if (path.node.name == "__moduleName" && !path.scope.hasBinding("__moduleName")) { | 
|           path.replaceWith(t.memberExpression(state.contextIdent, t.identifier("id"))); | 
|         } | 
|       }, | 
|   | 
|   | 
|       Program: { | 
|         enter: function enter(path, state) { | 
|           state.contextIdent = path.scope.generateUidIdentifier("context"); | 
|         }, | 
|         exit: function exit(path, state) { | 
|           var exportIdent = path.scope.generateUidIdentifier("export"); | 
|           var contextIdent = state.contextIdent; | 
|   | 
|           var exportNames = (0, _create2.default)(null); | 
|           var modules = []; | 
|   | 
|           var beforeBody = []; | 
|           var setters = []; | 
|           var sources = []; | 
|           var variableIds = []; | 
|           var removedPaths = []; | 
|   | 
|           function addExportName(key, val) { | 
|             exportNames[key] = exportNames[key] || []; | 
|             exportNames[key].push(val); | 
|           } | 
|   | 
|           function pushModule(source, key, specifiers) { | 
|             var module = void 0; | 
|             modules.forEach(function (m) { | 
|               if (m.key === source) { | 
|                 module = m; | 
|               } | 
|             }); | 
|             if (!module) { | 
|               modules.push(module = { key: source, imports: [], exports: [] }); | 
|             } | 
|             module[key] = module[key].concat(specifiers); | 
|           } | 
|   | 
|           function buildExportCall(name, val) { | 
|             return t.expressionStatement(t.callExpression(exportIdent, [t.stringLiteral(name), val])); | 
|           } | 
|   | 
|           var body = path.get("body"); | 
|   | 
|           var canHoist = true; | 
|           for (var _iterator2 = body, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { | 
|             var _ref3; | 
|   | 
|             if (_isArray2) { | 
|               if (_i2 >= _iterator2.length) break; | 
|               _ref3 = _iterator2[_i2++]; | 
|             } else { | 
|               _i2 = _iterator2.next(); | 
|               if (_i2.done) break; | 
|               _ref3 = _i2.value; | 
|             } | 
|   | 
|             var _path = _ref3; | 
|   | 
|             if (_path.isExportDeclaration()) _path = _path.get("declaration"); | 
|             if (_path.isVariableDeclaration() && _path.node.kind !== "var") { | 
|               canHoist = false; | 
|               break; | 
|             } | 
|           } | 
|   | 
|           for (var _iterator3 = body, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { | 
|             var _ref4; | 
|   | 
|             if (_isArray3) { | 
|               if (_i3 >= _iterator3.length) break; | 
|               _ref4 = _iterator3[_i3++]; | 
|             } else { | 
|               _i3 = _iterator3.next(); | 
|               if (_i3.done) break; | 
|               _ref4 = _i3.value; | 
|             } | 
|   | 
|             var _path2 = _ref4; | 
|   | 
|             if (canHoist && _path2.isFunctionDeclaration()) { | 
|               beforeBody.push(_path2.node); | 
|               removedPaths.push(_path2); | 
|             } else if (_path2.isImportDeclaration()) { | 
|               var source = _path2.node.source.value; | 
|               pushModule(source, "imports", _path2.node.specifiers); | 
|               for (var name in _path2.getBindingIdentifiers()) { | 
|                 _path2.scope.removeBinding(name); | 
|                 variableIds.push(t.identifier(name)); | 
|               } | 
|               _path2.remove(); | 
|             } else if (_path2.isExportAllDeclaration()) { | 
|               pushModule(_path2.node.source.value, "exports", _path2.node); | 
|               _path2.remove(); | 
|             } else if (_path2.isExportDefaultDeclaration()) { | 
|               var declar = _path2.get("declaration"); | 
|               if (declar.isClassDeclaration() || declar.isFunctionDeclaration()) { | 
|                 var id = declar.node.id; | 
|                 var nodes = []; | 
|   | 
|                 if (id) { | 
|                   nodes.push(declar.node); | 
|                   nodes.push(buildExportCall("default", id)); | 
|                   addExportName(id.name, "default"); | 
|                 } else { | 
|                   nodes.push(buildExportCall("default", t.toExpression(declar.node))); | 
|                 } | 
|   | 
|                 if (!canHoist || declar.isClassDeclaration()) { | 
|                   _path2.replaceWithMultiple(nodes); | 
|                 } else { | 
|                   beforeBody = beforeBody.concat(nodes); | 
|                   removedPaths.push(_path2); | 
|                 } | 
|               } else { | 
|                 _path2.replaceWith(buildExportCall("default", declar.node)); | 
|               } | 
|             } else if (_path2.isExportNamedDeclaration()) { | 
|               var _declar = _path2.get("declaration"); | 
|   | 
|               if (_declar.node) { | 
|                 _path2.replaceWith(_declar); | 
|   | 
|                 var _nodes = []; | 
|                 var bindingIdentifiers = void 0; | 
|                 if (_path2.isFunction()) { | 
|                   var node = _declar.node; | 
|                   var _name = node.id.name; | 
|                   if (canHoist) { | 
|                     addExportName(_name, _name); | 
|                     beforeBody.push(node); | 
|                     beforeBody.push(buildExportCall(_name, node.id)); | 
|                     removedPaths.push(_path2); | 
|                   } else { | 
|                     var _bindingIdentifiers; | 
|   | 
|                     bindingIdentifiers = (_bindingIdentifiers = {}, _bindingIdentifiers[_name] = node.id, _bindingIdentifiers); | 
|                   } | 
|                 } else { | 
|                   bindingIdentifiers = _declar.getBindingIdentifiers(); | 
|                 } | 
|                 for (var _name2 in bindingIdentifiers) { | 
|                   addExportName(_name2, _name2); | 
|                   _nodes.push(buildExportCall(_name2, t.identifier(_name2))); | 
|                 } | 
|                 _path2.insertAfter(_nodes); | 
|               } else { | 
|                 var specifiers = _path2.node.specifiers; | 
|                 if (specifiers && specifiers.length) { | 
|                   if (_path2.node.source) { | 
|                     pushModule(_path2.node.source.value, "exports", specifiers); | 
|                     _path2.remove(); | 
|                   } else { | 
|                     var _nodes2 = []; | 
|   | 
|                     for (var _iterator7 = specifiers, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : (0, _getIterator3.default)(_iterator7);;) { | 
|                       var _ref8; | 
|   | 
|                       if (_isArray7) { | 
|                         if (_i7 >= _iterator7.length) break; | 
|                         _ref8 = _iterator7[_i7++]; | 
|                       } else { | 
|                         _i7 = _iterator7.next(); | 
|                         if (_i7.done) break; | 
|                         _ref8 = _i7.value; | 
|                       } | 
|   | 
|                       var specifier = _ref8; | 
|   | 
|                       _nodes2.push(buildExportCall(specifier.exported.name, specifier.local)); | 
|                       addExportName(specifier.local.name, specifier.exported.name); | 
|                     } | 
|   | 
|                     _path2.replaceWithMultiple(_nodes2); | 
|                   } | 
|                 } | 
|               } | 
|             } | 
|           } | 
|   | 
|           modules.forEach(function (specifiers) { | 
|             var setterBody = []; | 
|             var target = path.scope.generateUidIdentifier(specifiers.key); | 
|   | 
|             for (var _iterator4 = specifiers.imports, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { | 
|               var _ref5; | 
|   | 
|               if (_isArray4) { | 
|                 if (_i4 >= _iterator4.length) break; | 
|                 _ref5 = _iterator4[_i4++]; | 
|               } else { | 
|                 _i4 = _iterator4.next(); | 
|                 if (_i4.done) break; | 
|                 _ref5 = _i4.value; | 
|               } | 
|   | 
|               var specifier = _ref5; | 
|   | 
|               if (t.isImportNamespaceSpecifier(specifier)) { | 
|                 setterBody.push(t.expressionStatement(t.assignmentExpression("=", specifier.local, target))); | 
|               } else if (t.isImportDefaultSpecifier(specifier)) { | 
|                 specifier = t.importSpecifier(specifier.local, t.identifier("default")); | 
|               } | 
|   | 
|               if (t.isImportSpecifier(specifier)) { | 
|                 setterBody.push(t.expressionStatement(t.assignmentExpression("=", specifier.local, t.memberExpression(target, specifier.imported)))); | 
|               } | 
|             } | 
|   | 
|             if (specifiers.exports.length) { | 
|               var exportObjRef = path.scope.generateUidIdentifier("exportObj"); | 
|   | 
|               setterBody.push(t.variableDeclaration("var", [t.variableDeclarator(exportObjRef, t.objectExpression([]))])); | 
|   | 
|               for (var _iterator5 = specifiers.exports, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { | 
|                 var _ref6; | 
|   | 
|                 if (_isArray5) { | 
|                   if (_i5 >= _iterator5.length) break; | 
|                   _ref6 = _iterator5[_i5++]; | 
|                 } else { | 
|                   _i5 = _iterator5.next(); | 
|                   if (_i5.done) break; | 
|                   _ref6 = _i5.value; | 
|                 } | 
|   | 
|                 var node = _ref6; | 
|   | 
|                 if (t.isExportAllDeclaration(node)) { | 
|                   setterBody.push(buildExportAll({ | 
|                     KEY: path.scope.generateUidIdentifier("key"), | 
|                     EXPORT_OBJ: exportObjRef, | 
|                     TARGET: target | 
|                   })); | 
|                 } else if (t.isExportSpecifier(node)) { | 
|                   setterBody.push(t.expressionStatement(t.assignmentExpression("=", t.memberExpression(exportObjRef, node.exported), t.memberExpression(target, node.local)))); | 
|                 } else {} | 
|               } | 
|   | 
|               setterBody.push(t.expressionStatement(t.callExpression(exportIdent, [exportObjRef]))); | 
|             } | 
|   | 
|             sources.push(t.stringLiteral(specifiers.key)); | 
|             setters.push(t.functionExpression(null, [target], t.blockStatement(setterBody))); | 
|           }); | 
|   | 
|           var moduleName = this.getModuleName(); | 
|           if (moduleName) moduleName = t.stringLiteral(moduleName); | 
|   | 
|           if (canHoist) { | 
|             (0, _babelHelperHoistVariables2.default)(path, function (id) { | 
|               return variableIds.push(id); | 
|             }); | 
|           } | 
|   | 
|           if (variableIds.length) { | 
|             beforeBody.unshift(t.variableDeclaration("var", variableIds.map(function (id) { | 
|               return t.variableDeclarator(id); | 
|             }))); | 
|           } | 
|   | 
|           path.traverse(reassignmentVisitor, { | 
|             exports: exportNames, | 
|             buildCall: buildExportCall, | 
|             scope: path.scope | 
|           }); | 
|   | 
|           for (var _iterator6 = removedPaths, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : (0, _getIterator3.default)(_iterator6);;) { | 
|             var _ref7; | 
|   | 
|             if (_isArray6) { | 
|               if (_i6 >= _iterator6.length) break; | 
|               _ref7 = _iterator6[_i6++]; | 
|             } else { | 
|               _i6 = _iterator6.next(); | 
|               if (_i6.done) break; | 
|               _ref7 = _i6.value; | 
|             } | 
|   | 
|             var _path3 = _ref7; | 
|   | 
|             _path3.remove(); | 
|           } | 
|   | 
|           path.node.body = [buildTemplate({ | 
|             SYSTEM_REGISTER: t.memberExpression(t.identifier(state.opts.systemGlobal || "System"), t.identifier("register")), | 
|             BEFORE_BODY: beforeBody, | 
|             MODULE_NAME: moduleName, | 
|             SETTERS: setters, | 
|             SOURCES: sources, | 
|             BODY: path.node.body, | 
|             EXPORT_IDENTIFIER: exportIdent, | 
|             CONTEXT_IDENTIFIER: contextIdent | 
|           })]; | 
|         } | 
|       } | 
|     } | 
|   }; | 
| }; | 
|   | 
| var _babelHelperHoistVariables = require("babel-helper-hoist-variables"); | 
|   | 
| var _babelHelperHoistVariables2 = _interopRequireDefault(_babelHelperHoistVariables); | 
|   | 
| var _babelTemplate = require("babel-template"); | 
|   | 
| var _babelTemplate2 = _interopRequireDefault(_babelTemplate); | 
|   | 
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | 
|   | 
| var buildTemplate = (0, _babelTemplate2.default)("\n  SYSTEM_REGISTER(MODULE_NAME, [SOURCES], function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) {\n    \"use strict\";\n    BEFORE_BODY;\n    return {\n      setters: [SETTERS],\n      execute: function () {\n        BODY;\n      }\n    };\n  });\n"); | 
|   | 
| var buildExportAll = (0, _babelTemplate2.default)("\n  for (var KEY in TARGET) {\n    if (KEY !== \"default\" && KEY !== \"__esModule\") EXPORT_OBJ[KEY] = TARGET[KEY];\n  }\n"); | 
|   | 
| var TYPE_IMPORT = "Import"; | 
|   | 
| module.exports = exports["default"]; |