“use strict”;

Object.defineProperty(exports, “__esModule”, {

value: true

}); exports.default = void 0;

function _helperPluginUtils() {

const data = require("@babel/helper-plugin-utils");

_helperPluginUtils = function () {
  return data;
};

return data;

}

function _helperRemapAsyncToGenerator() {

const data = _interopRequireDefault(require("@babel/helper-remap-async-to-generator"));

_helperRemapAsyncToGenerator = function () {
  return data;
};

return data;

}

function _helperModuleImports() {

const data = require("@babel/helper-module-imports");

_helperModuleImports = function () {
  return data;
};

return data;

}

function _core() {

const data = require("@babel/core");

_core = function () {
  return data;
};

return data;

}

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var _default = (0, _helperPluginUtils().declare)((api, options) => {

api.assertVersion(7);
const {
  method,
  module
} = options;

if (method && module) {
  return {
    name: "transform-async-to-generator",
    visitor: {
      Function(path, state) {
        if (!path.node.async || path.node.generator) return;
        let wrapAsync = state.methodWrapper;

        if (wrapAsync) {
          wrapAsync = _core().types.cloneNode(wrapAsync);
        } else {
          wrapAsync = state.methodWrapper = (0, _helperModuleImports().addNamed)(path, method, module);
        }

        (0, _helperRemapAsyncToGenerator().default)(path, {
          wrapAsync
        });
      }

    }
  };
}

return {
  name: "transform-async-to-generator",
  visitor: {
    Function(path, state) {
      if (!path.node.async || path.node.generator) return;
      (0, _helperRemapAsyncToGenerator().default)(path, {
        wrapAsync: state.addHelper("asyncToGenerator")
      });
    }

  }
};

});

exports.default = _default;