'use strict'
exports.__esModule = true

const Module = require('module')
const path = require('path')

// borrowed from babel-eslint
function createModule(filename) {
  const mod = new Module(filename)
  mod.filename = filename
  mod.paths = Module._nodeModulePaths(path.dirname(filename))
  return mod
}

exports.default = function moduleRequire(p) {
  try {
    // attempt to get espree relative to eslint
    const eslintPath = require.resolve('eslint')
    const eslintModule = createModule(eslintPath)
    return require(Module._resolveFilename(p, eslintModule))
  } catch(err) { /* ignore */ }

  try {
    // try relative to entry point
    return require.main.require(p)
  } catch(err) { /* ignore */ }

  // finally, try from here
  return require(p)
}
