| const inquirer = require('inquirer') | 
| const { semver } = require('@vue/cli-shared-utils') | 
|   | 
| module.exports = async (api) => { | 
|   const pkg = require(api.resolve('package.json')) | 
|   | 
|   let localESLintRange = pkg.devDependencies.eslint | 
|   | 
|   // if project is scaffolded by Vue CLI 3.0.x or earlier, | 
|   // the ESLint dependency (ESLint v4) is inside @vue/cli-plugin-eslint; | 
|   // in Vue CLI v4 it should be extracted to the project dependency list. | 
|   if (api.fromVersion('^3') && !localESLintRange) { | 
|     localESLintRange = '^4.19.1' | 
|     api.extendPackage({ | 
|       devDependencies: { | 
|         eslint: localESLintRange, | 
|         'babel-eslint': '^8.2.5', | 
|         'eslint-plugin-vue': '^4.5.0' | 
|       } | 
|     }) | 
|   } | 
|   | 
|   const localESLintMajor = semver.major( | 
|     semver.maxSatisfying(['4.99.0', '5.99.0', '6.99.0', '7.99.0'], localESLintRange) || | 
|       // in case the user does not specify a typical caret range; | 
|       // it is used as **fallback** because the user may have not previously | 
|       // installed eslint yet, such as in the case that they are from v3.0.x | 
|       require('eslint/package.json').version | 
|   ) | 
|   | 
|   if (localESLintMajor >= 6) { | 
|     return | 
|   } | 
|   | 
|   const { confirmUpgrade } = await inquirer.prompt([{ | 
|     name: 'confirmUpgrade', | 
|     type: 'confirm', | 
|     message: | 
|     `Your current ESLint version is v${localESLintMajor}.\n` + | 
|     `The latest major version which supported by vue-cli is v6.\n` + | 
|     `Do you want to upgrade? (May contain breaking changes)\n` | 
|   }]) | 
|   | 
|   if (confirmUpgrade) { | 
|     const { getDeps } = require('../eslintDeps') | 
|   | 
|     const newDeps = getDeps(api) | 
|     if (pkg.devDependencies['@vue/eslint-config-airbnb']) { | 
|       Object.assign(newDeps, getDeps(api, 'airbnb')) | 
|     } | 
|     if (pkg.devDependencies['@vue/eslint-config-standard']) { | 
|       Object.assign(newDeps, getDeps(api, 'standard')) | 
|     } | 
|     if (pkg.devDependencies['@vue/eslint-config-prettier']) { | 
|       Object.assign(newDeps, getDeps(api, 'prettier')) | 
|     } | 
|   | 
|     api.extendPackage({ devDependencies: newDeps }, { warnIncompatibleVersions: false }) | 
|   | 
|     // in case anyone's upgrading from the legacy `typescript-eslint-parser` | 
|     if (api.hasPlugin('typescript')) { | 
|       api.extendPackage({ | 
|         eslintConfig: { | 
|           parserOptions: { | 
|             parser: '@typescript-eslint/parser' | 
|           } | 
|         } | 
|       }) | 
|     } | 
|   | 
|     // TODO: | 
|     // transform `@vue/prettier` to `eslint:recommended` + `@vue/prettier` | 
|     // transform `@vue/typescript` to `@vue/typescript/recommended` and also fix prettier compatibility for it | 
|   } | 
| } |