'use strict';

Object.defineProperty(exports, '__esModule', {
  value: true
});

exports.default = function(source, filename, globalConfig, config) {
  const coverageOptions = {
    collectCoverage: globalConfig.collectCoverage,
    collectCoverageFrom: globalConfig.collectCoverageFrom,
    collectCoverageOnlyFrom: globalConfig.collectCoverageOnlyFrom
  };
  if (
    (_jestRuntime || _load_jestRuntime()).default.shouldInstrument(
      filename,
      coverageOptions,
      config
    )
  ) {
    // Transform file without instrumentation first, to make sure produced
    // source code is ES6 (no flowtypes etc.) and can be instrumented
    const transformResult = new (
      _jestRuntime || _load_jestRuntime()
    ).default.ScriptTransformer(config).transformSource(
      filename,
      source,
      false
    );
    const instrumenter = (0,
    (_istanbulLibInstrument || _load_istanbulLibInstrument())
      .createInstrumenter)();
    instrumenter.instrumentSync(transformResult.code, filename);
    return {
      coverage: instrumenter.fileCoverage,
      sourceMapPath: transformResult.sourceMapPath
    };
  } else {
    return null;
  }
};

var _istanbulLibInstrument;

function _load_istanbulLibInstrument() {
  return (_istanbulLibInstrument = require('istanbul-lib-instrument'));
}

var _jestRuntime;

function _load_jestRuntime() {
  return (_jestRuntime = _interopRequireDefault(require('jest-runtime')));
}

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