“use strict”;

Object.defineProperty(exports, “__esModule”, {

value: true

}); exports.transformSync = transformSync; exports.transformAsync = transformAsync; exports.transform = void 0;

var _config = _interopRequireDefault(require(“./config”));

var _transformation = require(“./transformation”);

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

const transform = function transform(code, opts, callback) {

if (typeof opts === "function") {
  callback = opts;
  opts = undefined;
}

if (callback === undefined) return transformSync(code, opts);
const cb = callback;
process.nextTick(() => {
  let cfg;

  try {
    cfg = (0, _config.default)(opts);
    if (cfg === null) return cb(null, null);
  } catch (err) {
    return cb(err);
  }

  (0, _transformation.runAsync)(cfg, code, null, cb);
});

};

exports.transform = transform;

function transformSync(code, opts) {

const config = (0, _config.default)(opts);
if (config === null) return null;
return (0, _transformation.runSync)(config, code);

}

function transformAsync(code, opts) {

return new Promise((res, rej) => {
  transform(code, opts, (err, result) => {
    if (err == null) res(result);else rej(err);
  });
});

}