{"_id":"vue-doctor","_rev":"5-6d5cc9b714a5d9ad69fb0b88bd758e09","name":"vue-doctor","dist-tags":{"latest":"0.0.5"},"versions":{"0.0.1":{"name":"vue-doctor","version":"0.0.1","keywords":["diagnostics","linter","nuxt","performance","vue"],"author":{"name":"vue-doctor contributors"},"license":"MIT","_id":"vue-doctor@0.0.1","maintainers":[{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"}],"homepage":"https://github.com/vue-doctor/vue-doctor#readme","bugs":{"url":"https://github.com/vue-doctor/vue-doctor/issues"},"bin":{"vue-doctor":"dist/cli.mjs"},"dist":{"shasum":"ef9d25f7038becc427c08dc31f0125b9cf99f444","tarball":"https://registry.npmjs.org/vue-doctor/-/vue-doctor-0.0.1.tgz","fileCount":12,"integrity":"sha512-QQkDFR8qv2HvWmbDlBGK1JqxkzLzmgxoDW8T5QkCs8n49rCoUwKzoXV+RA1h3kejfV4hJyZ25kluVvDXdB6HhA==","signatures":[{"sig":"MEUCIQDwvxXc+FVpeaaPnvikLDZV4X8uM8GGcv9vISGrG3MJfAIgWeCbDykJVnt3okOQDKk1iw+ZvVmqwKFj7JGyho8R+oM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":609188},"type":"module","exports":{".":{"types":"./dist/cli.d.mts","default":"./dist/cli.mjs"},"./api":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./eslint-plugin":{"types":"./dist/vue-doctor-plugin.d.mts","default":"./dist/vue-doctor-plugin.mjs"}},"gitHead":"68c10cf7da53b01d48f44f44ac64a29b81dd87d9","scripts":{"dev":"tsdown --watch","test":"pnpm build && vitest run","build":"rm -rf dist && NODE_ENV=production tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"},"_npmVersion":"11.8.0","description":"Diagnose and fix performance, security, and correctness issues in your Vue app","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ora":"^9.3.0","knip":"^5.83.1","eslint":"^9.0.0","prompts":"^2.4.2","commander":"^14.0.3","picocolors":"^1.1.1","typescript":">=5.0.4 <7","vue-eslint-parser":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.3","vitest":"^4.0.0","@types/eslint":"^9.6.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_0.0.1_1771442175538_0.41868318000382354","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"vue-doctor","version":"0.0.2","keywords":["diagnostics","linter","nuxt","performance","vue"],"author":{"name":"vue-doctor contributors"},"license":"MIT","_id":"vue-doctor@0.0.2","maintainers":[{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"}],"homepage":"https://github.com/Arjun-Ingole/vue-doctor#readme","bugs":{"url":"https://github.com/Arjun-Ingole/vue-doctor/issues"},"bin":{"vue-doctor":"dist/cli.mjs"},"dist":{"shasum":"e0e62044e7ed83e7b166ae42daa007a306dbbe15","tarball":"https://registry.npmjs.org/vue-doctor/-/vue-doctor-0.0.2.tgz","fileCount":12,"integrity":"sha512-8acE9D6Xk0iwI7LGh7sjiLeOc9pw9kXXfNvQpaR2GjW7jGdAka6lymZSdyKN/miHjV30AJaDRAd4DQr+9kDgqw==","signatures":[{"sig":"MEUCIQDepElxUJcUmUUGjyiGnnCNEPP3dXg72Xa0XZt1fkTrXwIgV6GqWXeniBMz61OwdyVQtVg5Tt3Op1omSBEZ9Es5Uos=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":609290},"type":"module","exports":{".":{"types":"./dist/cli.d.mts","default":"./dist/cli.mjs"},"./api":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./eslint-plugin":{"types":"./dist/vue-doctor-plugin.d.mts","default":"./dist/vue-doctor-plugin.mjs"}},"gitHead":"047871dd1cf8e0ab39a3d950d82c2f85891de457","scripts":{"dev":"tsdown --watch","test":"pnpm build && vitest run","build":"rm -rf dist && NODE_ENV=production tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"},"repository":{"url":"git+https://github.com/Arjun-Ingole/vue-doctor.git","type":"git"},"_npmVersion":"11.8.0","description":"Diagnose and fix performance, security, and correctness issues in your Vue app","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ora":"^9.3.0","knip":"^5.83.1","eslint":"^9.0.0","prompts":"^2.4.2","commander":"^14.0.3","picocolors":"^1.1.1","typescript":">=5.0.4 <7","vue-eslint-parser":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.3","vitest":"^4.0.0","@types/eslint":"^9.6.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_0.0.2_1771442438400_0.5314371764585226","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"vue-doctor","version":"0.0.3","keywords":["diagnostics","linter","nuxt","performance","vue"],"author":{"name":"vue-doctor contributors"},"license":"MIT","_id":"vue-doctor@0.0.3","maintainers":[{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"}],"homepage":"https://github.com/Arjun-Ingole/vue-doctor#readme","bugs":{"url":"https://github.com/Arjun-Ingole/vue-doctor/issues"},"bin":{"vue-doctor":"dist/cli.mjs"},"dist":{"shasum":"72387f0b24ba002b3c9a0fd7cda7ad8de5edadc2","tarball":"https://registry.npmjs.org/vue-doctor/-/vue-doctor-0.0.3.tgz","fileCount":13,"integrity":"sha512-QZXxV5Fn4CTspFmTFyjeDvQnVIObbxr48o7ly+WeeArIEhtJ7RJwi/Fj8+k81GvNOFCWX4lqGTSDpD4LK0PQng==","signatures":[{"sig":"MEUCIG/GulHb/mRjh4BSGhCv+bO+QjKzxo3TRIBx8JBmONmVAiEAq8WpZ4VVVqcUAOr73pauoWcqDTufnojzkcfZxsF61VY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":615590},"type":"module","exports":{".":{"types":"./dist/cli.d.mts","default":"./dist/cli.mjs"},"./api":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./eslint-plugin":{"types":"./dist/vue-doctor-plugin.d.mts","default":"./dist/vue-doctor-plugin.mjs"}},"gitHead":"582fbc1c722fe771ad0a29c8876e9ad2f6b25ece","scripts":{"dev":"tsdown --watch","test":"pnpm build && vitest run","build":"rm -rf dist && NODE_ENV=production tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"},"repository":{"url":"git+https://github.com/Arjun-Ingole/vue-doctor.git","type":"git"},"_npmVersion":"11.8.0","description":"Diagnose and fix performance, security, and correctness issues in your Vue app","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ora":"^9.3.0","knip":"^5.83.1","eslint":"^9.0.0","prompts":"^2.4.2","commander":"^14.0.3","picocolors":"^1.1.1","typescript":">=5.0.4 <7","vue-eslint-parser":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.3","vitest":"^4.0.0","@types/eslint":"^9.6.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_0.0.3_1771442587566_0.0989085356111239","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"vue-doctor","version":"0.0.4","keywords":["diagnostics","linter","nuxt","performance","vue"],"author":{"name":"vue-doctor contributors"},"license":"MIT","_id":"vue-doctor@0.0.4","maintainers":[{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"}],"homepage":"https://github.com/Arjun-Ingole/vue-doctor#readme","bugs":{"url":"https://github.com/Arjun-Ingole/vue-doctor/issues"},"bin":{"vue-doctor":"dist/cli.mjs"},"dist":{"shasum":"80e7346edcb55d9fbd880d459dd02b056c56bc16","tarball":"https://registry.npmjs.org/vue-doctor/-/vue-doctor-0.0.4.tgz","fileCount":13,"integrity":"sha512-8TcordgKuCMfO/dmhlxdVG/JmZ/QZZX8sVwkKyXuQKdRpme0EssnhpWl5bwyyp/k1nl6QaD1dv4OivgCIi+JLg==","signatures":[{"sig":"MEQCIDgEE4pHIHl85rTj73J6WSiuR094tMYKeHEnW3nQO9HXAiAtOWEReCDEinkGsTTyMi2RbUsmqNuEWr1C5dKXhWARlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vue-doctor@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":653879},"type":"module","exports":{".":{"types":"./dist/cli.d.mts","default":"./dist/cli.mjs"},"./api":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./eslint-plugin":{"types":"./dist/vue-doctor-plugin.d.mts","default":"./dist/vue-doctor-plugin.mjs"}},"gitHead":"43819524b5de4d325b4dc329de3488a069c206be","scripts":{"dev":"tsdown --watch","test":"pnpm build && vitest run","build":"rm -rf dist && NODE_ENV=production tsdown","typecheck":"tsc --noEmit"},"_npmUser":{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"},"repository":{"url":"git+https://github.com/Arjun-Ingole/vue-doctor.git","type":"git"},"_npmVersion":"10.8.2","description":"Diagnose and fix performance, security, and correctness issues in your Vue app","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ora":"^9.3.0","knip":"^5.83.1","eslint":"^9.0.0","prompts":"^2.4.2","commander":"^14.0.3","picocolors":"^1.1.1","typescript":">=5.0.4 <7","vue-eslint-parser":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.3","vitest":"^4.0.0","@types/eslint":"^9.6.0","@types/prompts":"^2.4.9"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_0.0.4_1771447375657_0.6612196653369935","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"vue-doctor","version":"0.0.5","description":"Diagnose and fix performance, security, and correctness issues in your Vue app","keywords":["diagnostics","linter","nuxt","performance","vue"],"homepage":"https://github.com/Arjun-Ingole/vue-doctor#readme","bugs":{"url":"https://github.com/Arjun-Ingole/vue-doctor/issues"},"license":"MIT","author":{"name":"vue-doctor contributors"},"repository":{"type":"git","url":"git+https://github.com/Arjun-Ingole/vue-doctor.git"},"bin":{"vue-doctor":"dist/cli.mjs"},"type":"module","exports":{".":{"types":"./dist/cli.d.mts","default":"./dist/cli.mjs"},"./api":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./eslint-plugin":{"types":"./dist/vue-doctor-plugin.d.mts","default":"./dist/vue-doctor-plugin.mjs"}},"scripts":{"dev":"tsdown --watch","build":"rm -rf dist && NODE_ENV=production tsdown","typecheck":"tsc --noEmit","test":"pnpm build && vitest run"},"dependencies":{"commander":"^14.0.3","eslint":"^9.0.0","vue-eslint-parser":"^9.0.0","knip":"^5.83.1","ora":"^9.3.0","picocolors":"^1.1.1","prompts":"^2.4.2","typescript":">=5.0.4 <7"},"devDependencies":{"@types/prompts":"^2.4.9","@types/eslint":"^9.6.0","tsdown":"^0.20.3","vitest":"^4.0.0"},"_id":"vue-doctor@0.0.5","gitHead":"1963b02bb00a5727ba5dd76c810e07462e4caf16","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-HOYSlWULhCsFA/uwbjtl0aD2QEhWGhlmzlCOUNaXJHbCSlHT6m0ArQ/3oWIxOjfzqc83BaWxnKQrmja0I2L1yA==","shasum":"d4aa9ba22492fdf16e69a8798827be9fc302bc54","tarball":"https://registry.npmjs.org/vue-doctor/-/vue-doctor-0.0.5.tgz","fileCount":13,"unpackedSize":812548,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/vue-doctor@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDYhyjuYlxP+mYiFwz5eS+CuYpJGtJHBTVlfZw3kHSPCQIhAO1hGSDEB+MGOf6n2zSmX6Hd6LbomaTRo5L1L1JkRqEn"}]},"_npmUser":{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"},"directories":{},"maintainers":[{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue-doctor_0.0.5_1771948509954_0.9869470755181033"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-18T19:16:15.536Z","modified":"2026-02-24T15:55:10.462Z","0.0.1":"2026-02-18T19:16:15.770Z","0.0.2":"2026-02-18T19:20:38.632Z","0.0.3":"2026-02-18T19:23:07.738Z","0.0.4":"2026-02-18T20:42:55.934Z","0.0.5":"2026-02-24T15:55:10.187Z"},"bugs":{"url":"https://github.com/Arjun-Ingole/vue-doctor/issues"},"author":{"name":"vue-doctor contributors"},"license":"MIT","homepage":"https://github.com/Arjun-Ingole/vue-doctor#readme","keywords":["diagnostics","linter","nuxt","performance","vue"],"repository":{"type":"git","url":"git+https://github.com/Arjun-Ingole/vue-doctor.git"},"description":"Diagnose and fix performance, security, and correctness issues in your Vue app","maintainers":[{"name":"dunkedtoast","email":"arjun0ingole@gmail.com"}],"readme":"# Vue Doctor\n\n**Diagnose and fix performance, security, and correctness issues in your Vue/Nuxt app.**\n\n```bash\nnpx vue-doctor@latest .\n```\n\nVue Doctor scans your codebase and produces a 0–100 health score with actionable diagnostics across 7 categories and 47+ rules.\n\n---\n\n## What it checks\n\n### Composition API\n| Rule | Description |\n|------|-------------|\n| `no-watch-as-computed` | `watch()` that only sets derived state → use `computed()` |\n| `no-async-watcheffect` | `async watchEffect()` without cleanup → race conditions |\n| `prefer-ref-over-reactive-primitive` | `reactive({ count: 0 })` → use `ref(0)` |\n| `no-mutation-in-computed` | Side effects in `computed()` getter |\n| `no-watch-immediate-fetch` | `watch(..., fetch, { immediate: true })` → use `useFetch()` |\n| `no-reactive-destructure` | Destructuring `reactive()` loses reactivity |\n| `no-ref-in-computed` | Creating `ref()` inside `computed()` (memory leak) |\n| `no-async-computed` | `computed(async () => ...)` creates Promise-based reactive state |\n| `no-conditional-composable-call` | Calling `useXxx()` conditionally can break stable setup behavior |\n\n### Performance\n| Rule | Description |\n|------|-------------|\n| `no-index-as-key` | `v-for` with index as `:key` breaks reordering |\n| `require-key-for-v-for` | `v-for` without `:key` |\n| `no-expensive-inline-expression` | `{{ items.filter().map() }}` → use `computed` |\n| `no-deep-watch` | `watch(..., { deep: true })` traverses entire object tree |\n| `no-template-method-call` | Method calls inside `v-for` re-run on every render |\n| `no-giant-component` | Components > 300 lines |\n\n### Security\n| Rule | Description |\n|------|-------------|\n| `no-v-html` | `v-html` enables XSS attacks |\n| `no-eval` | `eval()` / `new Function()` execute arbitrary code |\n| `no-secrets-in-client` | API keys / tokens hardcoded in client code |\n\n### Architecture\n| Rule | Description |\n|------|-------------|\n| `no-prop-mutation` | Direct prop mutation breaks one-way data flow |\n| `require-emits-declaration` | `emit()` without `defineEmits()` |\n| `require-component-key` | Component in `v-for` without `:key` |\n\n### Correctness\n| Rule | Description |\n|------|-------------|\n| `no-direct-dom-manipulation` | `document.querySelector()` → use template refs |\n| `no-this-in-setup` | `this` is undefined in `<script setup>` |\n| `no-v-if-with-v-for` | `v-if` + `v-for` on same element (priority issue) |\n| `require-defineprops-types` | `defineProps()` without TypeScript types |\n\n### Nuxt\n| Rule | Description |\n|------|-------------|\n| `use-usefetch-over-fetch` | Raw `fetch()` in setup → use `useFetch()` |\n| `require-server-route-error-handling` | Server routes without try/catch |\n| `no-window-in-ssr` | `window`/`document` access during SSR |\n| `require-seo-meta` | Pages without `useSeoMeta()` or `useHead()` |\n| `no-process-env-in-client` | `process.env` in client code → use `useRuntimeConfig()` |\n| `require-define-page-meta` | Pages should define route/page metadata via `definePageMeta()` |\n| `no-server-only-import-in-client` | Prevent server-only imports in client-rendered files |\n| `no-client-composable-in-server-route` | Prevent client-only composables in Nuxt server routes |\n\n### Bundle Size\n| Rule | Description |\n|------|-------------|\n| `no-barrel-import` | Barrel imports prevent tree-shaking |\n| `no-full-lodash-import` | Full lodash adds ~70kb |\n| `no-moment-import` | moment.js adds ~230kb |\n| `prefer-async-component` | Heavy components that could be async-loaded |\n| `no-heavy-library` | Importing jQuery, Underscore, Ramda |\n\n### Accessibility\n| Rule | Description |\n|------|-------------|\n| `no-autofocus` | `autofocus` can disrupt keyboard and screen-reader users |\n| `no-positive-tabindex` | Positive tabindex breaks natural keyboard navigation |\n| `require-button-type` | `<button>` without `type` can trigger unintended form submits |\n| `require-img-alt` | `<img>` must include an `alt` attribute |\n| `require-accessible-form-control-name` | Form controls need an accessible name (`aria-label`/`aria-labelledby`/label) |\n| `no-click-without-keyboard-handler` | Clickable non-interactive elements must support keyboard interaction |\n| `require-media-captions` | `<video>` should include captions/subtitles tracks |\n| `no-aria-hidden-on-focusable` | Prevent `aria-hidden=\\\"true\\\"` on focusable controls |\n\n---\n\n## CLI Usage\n\n```bash\n# Scan current directory\nnpx vue-doctor@latest .\n\n# Scan specific directory\nnpx vue-doctor@latest ./my-app\n\n# Show verbose file details per rule\nnpx vue-doctor@latest . --verbose\n\n# Output only the health score (0-100)\nnpx vue-doctor@latest . --score\n\n# Scan only files changed vs main branch\nnpx vue-doctor@latest . --diff\n\n# Scan only files changed vs a specific branch\nnpx vue-doctor@latest . --diff main\n\n# Skip prompts (CI mode)\nnpx vue-doctor@latest . -y\n\n# Disable dead code detection\nnpx vue-doctor@latest . --no-dead-code\n\n# Select a specific workspace project\nnpx vue-doctor@latest . --project my-app\n```\n\n---\n\n## Configuration\n\nCreate `vue-doctor.config.json` in your project root, or add a `vueDoctor` key to `package.json`:\n\n```json\n{\n  \"ignore\": {\n    \"rules\": [\"vue-doctor/no-v-html\"],\n    \"files\": [\"src/generated/**\", \"src/legacy/**\"]\n  },\n  \"lint\": true,\n  \"deadCode\": true,\n  \"verbose\": false,\n  \"diff\": false\n}\n```\n\n### Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `ignore.rules` | `string[]` | `[]` | Rule IDs to ignore |\n| `ignore.files` | `string[]` | `[]` | Glob patterns for files to ignore |\n| `lint` | `boolean` | `true` | Run lint checks |\n| `deadCode` | `boolean` | `true` | Run dead code detection |\n| `verbose` | `boolean` | `false` | Show file paths per diagnostic |\n| `diff` | `boolean\\|string` | `false` | Scan only changed files |\n\n---\n\n## Programmatic API\n\n```ts\nimport { diagnose } from 'vue-doctor/api'\n\nconst result = await diagnose('./my-vue-app', {\n  lint: true,\n  deadCode: true,\n})\n\nconsole.log(result.score)          // { score: 84, label: 'Good' }\nconsole.log(result.diagnostics)    // Diagnostic[]\nconsole.log(result.project)        // { framework: 'nuxt', vueVersion: '^3.4.0', ... }\nconsole.log(result.elapsedMilliseconds)\n```\n\n---\n\n## ESLint Plugin\n\nUse the rules standalone in your ESLint config:\n\n```js\n// eslint.config.js\nimport vueDoctorPlugin from 'vue-doctor/eslint-plugin'\nimport vueParser from 'vue-eslint-parser'\n\nexport default [\n  {\n    files: ['**/*.vue'],\n    languageOptions: { parser: vueParser },\n    plugins: { 'vue-doctor': vueDoctorPlugin },\n    rules: {\n      'vue-doctor/no-v-html': 'error',\n      'vue-doctor/no-prop-mutation': 'error',\n      'vue-doctor/no-index-as-key': 'warn',\n      'vue-doctor/no-barrel-import': 'warn',\n    },\n  },\n]\n```\n\n---\n\n## Score\n\nThe health score (0–100) is calculated based on the number and severity of diagnostics found:\n\n| Score | Label | Meaning |\n|-------|-------|---------|\n| 75–100 | Good | Healthy codebase |\n| 50–74 | OK | Some issues to address |\n| 0–49 | Critical | Significant problems |\n\n---\n\n## Monorepo Support\n\nVue Doctor automatically detects monorepos (pnpm workspaces, npm workspaces) and lets you scan individual packages:\n\n```bash\n# Scan all packages\nnpx vue-doctor@latest . -y\n\n# Scan a specific package\nnpx vue-doctor@latest . --project my-nuxt-app\n```\n\n---\n\n## Inspired by\n\n- [react-doctor](https://github.com/millionco/react-doctor) — the original diagnostic tool for React\n- [eslint-plugin-vue](https://eslint.vuejs.org/) — official Vue ESLint plugin\n\n---\n\nMIT License\n","readmeFilename":"README.md"}