text: const execa = require('execa')
  const rawArgs = process.argv.slice(2)
  
  const usedPorts = []
  
  module.exports = function createJestRunner (jestArgs) {
    return async function () {
      const execArgv = getChildProcesExecArgv()
      const args = [...execArgv, ...jestArgs]
      console.log(`running node with args: ${args.join(' ')}`)
      args.unshift(...rawArgs, require.resolve('jest-cli/bin/jest'))
      await execa('node', args, {
        stdio: 'inherit'
      })
    }
  }
  
  function getChildProcesExecArgv () {
    const execArgv = process.execArgv.slice(0)
    const inspectArgvIndex = execArgv.findIndex(argv =>
      argv.includes('--inspect-brk'),
    )
  
    if (inspectArgvIndex > -1) {
      const inspectArgv = execArgv[inspectArgvIndex]
      execArgv.splice(
        inspectArgvIndex,
        1,
        inspectArgv.replace(/--inspect-brk=(.*)/, (match, s1) => {
          let port
          try {
            port = parseInt(s1) + 1
          } catch (e) {
            port = 9230 // node default inspect port plus 1.
          }
          if (usedPorts.includes(port)) {
            port++
          }
          usedPorts.push(port)
          return `--inspect-brk=${port}`
        })
      )
    }
  
    return execArgv
  }
  