|  | "use strict";
exports.__esModule = true;
var _create = require("babel-runtime/core-js/object/create");
var _create2 = _interopRequireDefault(_create);
exports.default = function (_ref) {
  var t = _ref.types;
  function isValidRequireCall(path) {
    if (!path.isCallExpression()) return false;
    if (!path.get("callee").isIdentifier({ name: "require" })) return false;
    if (path.scope.getBinding("require")) return false;
    var args = path.get("arguments");
    if (args.length !== 1) return false;
    var arg = args[0];
    if (!arg.isStringLiteral()) return false;
    return true;
  }
  var amdVisitor = {
    ReferencedIdentifier: function ReferencedIdentifier(_ref2) {
      var node = _ref2.node,
          scope = _ref2.scope;
      if (node.name === "exports" && !scope.getBinding("exports")) {
        this.hasExports = true;
      }
      if (node.name === "module" && !scope.getBinding("module")) {
        this.hasModule = true;
      }
    },
    CallExpression: function CallExpression(path) {
      if (!isValidRequireCall(path)) return;
      this.bareSources.push(path.node.arguments[0]);
      path.remove();
    },
    VariableDeclarator: function VariableDeclarator(path) {
      var id = path.get("id");
      if (!id.isIdentifier()) return;
      var init = path.get("init");
      if (!isValidRequireCall(init)) return;
      var source = init.node.arguments[0];
      this.sourceNames[source.value] = true;
      this.sources.push([id.node, source]);
      path.remove();
    }
  };
  return {
    inherits: require("babel-plugin-transform-es2015-modules-commonjs"),
    pre: function pre() {
      this.sources = [];
      this.sourceNames = (0, _create2.default)(null);
      this.bareSources = [];
      this.hasExports = false;
      this.hasModule = false;
    },
    visitor: {
      Program: {
        exit: function exit(path) {
          var _this = this;
          if (this.ran) return;
          this.ran = true;
          path.traverse(amdVisitor, this);
          var params = this.sources.map(function (source) {
            return source[0];
          });
          var sources = this.sources.map(function (source) {
            return source[1];
          });
          sources = sources.concat(this.bareSources.filter(function (str) {
            return !_this.sourceNames[str.value];
          }));
          var moduleName = this.getModuleName();
          if (moduleName) moduleName = t.stringLiteral(moduleName);
          if (this.hasExports) {
            sources.unshift(t.stringLiteral("exports"));
            params.unshift(t.identifier("exports"));
          }
          if (this.hasModule) {
            sources.unshift(t.stringLiteral("module"));
            params.unshift(t.identifier("module"));
          }
          var node = path.node;
          var factory = buildFactory({
            PARAMS: params,
            BODY: node.body
          });
          factory.expression.body.directives = node.directives;
          node.directives = [];
          node.body = [buildDefine({
            MODULE_NAME: moduleName,
            SOURCES: sources,
            FACTORY: factory
          })];
        }
      }
    }
  };
};
var _babelTemplate = require("babel-template");
var _babelTemplate2 = _interopRequireDefault(_babelTemplate);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var buildDefine = (0, _babelTemplate2.default)("\n  define(MODULE_NAME, [SOURCES], FACTORY);\n");
var buildFactory = (0, _babelTemplate2.default)("\n  (function (PARAMS) {\n    BODY;\n  })\n");
module.exports = exports["default"];
 |