| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | const { execSync } = require('child_process')const fs = require('fs')const path = require('path')const LRU = require('lru-cache')const semver = require('semver')let _hasYarnconst _yarnProjects = new LRU({  max: 10,  maxAge: 1000})let _hasGitconst _gitProjects = new LRU({  max: 10,  maxAge: 1000})// env detectionexports.hasYarn = () => {  if (process.env.VUE_CLI_TEST) {    return true  }  if (_hasYarn != null) {    return _hasYarn  }  try {    execSync('yarn --version', { stdio: 'ignore' })    return (_hasYarn = true)  } catch (e) {    return (_hasYarn = false)  }}exports.hasProjectYarn = (cwd) => {  if (_yarnProjects.has(cwd)) {    return checkYarn(_yarnProjects.get(cwd))  }  const lockFile = path.join(cwd, 'yarn.lock')  const result = fs.existsSync(lockFile)  _yarnProjects.set(cwd, result)  return checkYarn(result)}function checkYarn (result) {  if (result && !exports.hasYarn()) throw new Error(`The project seems to require yarn but it's not installed.`)  return result}exports.hasGit = () => {  if (process.env.VUE_CLI_TEST) {    return true  }  if (_hasGit != null) {    return _hasGit  }  try {    execSync('git --version', { stdio: 'ignore' })    return (_hasGit = true)  } catch (e) {    return (_hasGit = false)  }}exports.hasProjectGit = (cwd) => {  if (_gitProjects.has(cwd)) {    return _gitProjects.get(cwd)  }  let result  try {    execSync('git status', { stdio: 'ignore', cwd })    result = true  } catch (e) {    result = false  }  _gitProjects.set(cwd, result)  return result}let _hasPnpmlet _hasPnpm3orLaterconst _pnpmProjects = new LRU({  max: 10,  maxAge: 1000})exports.hasPnpm3OrLater = () => {  if (process.env.VUE_CLI_TEST) {    return true  }  if (_hasPnpm3orLater != null) {    return _hasPnpm3orLater  }  try {    const pnpmVersion = execSync('pnpm --version', {      stdio: ['pipe', 'pipe', 'ignore']    }).toString()    // there's a critical bug in pnpm 2    // https://github.com/pnpm/pnpm/issues/1678#issuecomment-469981972    // so we only support pnpm >= 3.0.0    _hasPnpm = true    _hasPnpm3orLater = semver.gte(pnpmVersion, '3.0.0')    return _hasPnpm3orLater  } catch (e) {    return (_hasPnpm3orLater = false)  }}exports.hasProjectPnpm = (cwd) => {  if (_pnpmProjects.has(cwd)) {    return checkPnpm(_pnpmProjects.get(cwd))  }  const lockFile = path.join(cwd, 'pnpm-lock.yaml')  const result = fs.existsSync(lockFile)  _pnpmProjects.set(cwd, result)  return checkPnpm(result)}function checkPnpm (result) {  if (result && !exports.hasPnpm3OrLater()) {    throw new Error(`The project seems to require pnpm${_hasPnpm ? ' >= 3' : ''} but it's not installed.`)  }  return result}// OSexports.isWindows = process.platform === 'win32'exports.isMacintosh = process.platform === 'darwin'exports.isLinux = process.platform === 'linux'
 |