{"_id":"@daohuy34/vue-doctor","_rev":"11-1879099bbd7db234d59495e4f8cfa657","name":"@daohuy34/vue-doctor","dist-tags":{"latest":"3.2.0"},"versions":{"0.1.0":{"name":"@daohuy34/vue-doctor","version":"0.1.0","_id":"@daohuy34/vue-doctor@0.1.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"8a928c680a5bf8417202b1aee5caaa413b2f69a4","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-0.1.0.tgz","fileCount":14,"integrity":"sha512-0llo17ZwvPS9N/CPDe1oxPFKq4vyoYh7rE5PpNennO4KQFVr6V+weQggIkZKHlpo75ZNsbFWMS/+abexVxQ9kw==","signatures":[{"sig":"MEUCIGh5/vPuhsZB9WHclvlWpmfgU0j9WmFnLYMi9Ga0M8/EAiEAkBkJ4IQhGZMJ6LBK5s9+e49VJpb5tYpYcQ97mnpRNmE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51759},"type":"module","gitHead":"567eff45c7233bcaad6fc874aee3f3e9a6d0f4c5","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"A lightweight static analysis tool for Vue.js projects.","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_0.1.0_1779505906088_0.7131113441265049","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@daohuy34/vue-doctor","version":"1.4.0","_id":"@daohuy34/vue-doctor@1.4.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"2624a2c5f0f8fa1b57f31ffd8cb0119028f1ca77","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-1.4.0.tgz","fileCount":61,"integrity":"sha512-+pJbJ1l3BzFNx4jQ5KTmT07/0MWf3GW9ZzL/Fh6IQdISy0DODuKU7TqEKNrj5wzCvOw5YFN4FlymolI8+VdyGQ==","signatures":[{"sig":"MEUCIQDWnETHFqA2tfNWlaZJHaaOdNa3XtZ8Yo/ZHH9oeLCZRgIgWtbjMLGPVNHY9B8UqbNeUqXInnHF36rs0TOmMYxXslI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":346547},"type":"module","gitHead":"92df75e173bd404cd54d4f0bfbd92085654d077f","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"Static Analysis and Architecture Analysis for Vue & Nuxt applications.","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_1.4.0_1780161251007_0.11578574902992922","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@daohuy34/vue-doctor","version":"1.8.0","_id":"@daohuy34/vue-doctor@1.8.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"536069c3e2308ad06cdb09f96ba8ae935345726a","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-1.8.0.tgz","fileCount":78,"integrity":"sha512-AdgwOwRCX67EqagHugm49ry/AXSgDJRf0CEdX2H88Mc0F1BxNEm20gAf8QnHkq1Av71e0snRizVG7ymxxP1RIQ==","signatures":[{"sig":"MEYCIQCOKcvp8bUBH8fbv/rTFG8oGTUGPDs0Zq56EJdmUNpUFAIhAKF4CbDdu7TIqJ7b4PBHMZbazJauu3KJKkk9xOl/Uhrq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":510138},"type":"module","gitHead":"92df75e173bd404cd54d4f0bfbd92085654d077f","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen)","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_1.8.0_1780236046049_0.6312086742365244","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@daohuy34/vue-doctor","version":"1.9.0","_id":"@daohuy34/vue-doctor@1.9.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"8a922559548195e6d954b50cdbefbc2145effe04","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-1.9.0.tgz","fileCount":79,"integrity":"sha512-1SeFWgdxobmr1SR8BkUY0D1oTI7FpDwxKI19jjKYscYC0e9B5nwPymQsfx0rSk0HHUuFUm1V1N/fEIUJaw6aHw==","signatures":[{"sig":"MEYCIQDHt85cRJMXnfEV3U1sGqjvnFrfuHrVNlo5XVQUfOae1wIhAIeoLzeWpYbZ2K/cl483xmBmpuA/vAp24YTmmfDVYiS0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":518597},"type":"module","gitHead":"aa5adebf8489206bd56106bd56f253be81519b29","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen)","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_1.9.0_1780271123968_0.0392125759207389","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@daohuy34/vue-doctor","version":"2.7.0","_id":"@daohuy34/vue-doctor@2.7.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"55ba61be6a843d749a83b972d454ba37d147c780","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-2.7.0.tgz","fileCount":83,"integrity":"sha512-Uk93e2AEfa8AEifoAuUXpUL0/jKeqeQcBHqYryWixXdl/PMLGWO9YVr79lQw1q1WKHWa/aUKC2vPv4ZVC0OZjg==","signatures":[{"sig":"MEUCIQCUFRdqLY10Ev9QC/SWzUMLE4B3gMyLYqIy221iKF/pBAIgXNFn4SG7ui/WAokiM4pqRNByl/lfzCj+lrtlhAbP16A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":629285},"type":"module","gitHead":"f71ab7f8d314021a6ec6053d517af6eac16f233e","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen)","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_2.7.0_1780358440254_0.9633042234285387","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"@daohuy34/vue-doctor","version":"2.8.0","_id":"@daohuy34/vue-doctor@2.8.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"0efa2ba260a73e8e66493fdaa0e3e7a151964bda","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-2.8.0.tgz","fileCount":90,"integrity":"sha512-TVBhWzb+Tyf4YmvOtFzddHibW0aXDTTw2d76fubZ3M8fzBZThrdEo7qCZfbQsnaZU2dMmJA96gXai4OHUuG7wQ==","signatures":[{"sig":"MEUCIQDqpCbpDJ9L95GT6xPS1H5KJrNxOeihhlFqOJ/MvKdNbQIgCOJRgYDkxMumfCBfRKAY8Z6cXoc2qTUjy9WvQZkiA48=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":984321},"type":"module","gitHead":"c920b5b1527a8f3d603166fba7e8b6deef40e3d4","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","open":"^11.0.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_2.8.0_1780584426924_0.8644165949254285","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"@daohuy34/vue-doctor","version":"2.9.0","_id":"@daohuy34/vue-doctor@2.9.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"4e7e89c963f535659dc67e824b1371c78f55b256","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-2.9.0.tgz","fileCount":90,"integrity":"sha512-MoJ+VekcpVJ12/WalbKxMUPIIlZQU9YA6wf3+k3Liw0OOBxXNGaCcsahKiNuI7OpvmpnU7+jhuzmanAs3SqY1Q==","signatures":[{"sig":"MEYCIQDhEh+eq0HBxMojeWe7g4eKE8uaK4yNef2+O7D9NX1N2QIhAM2XV9s8FtLcut4whd/09U+s0E82I6+mK9eMyRwfb4Xd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":984063},"type":"module","gitHead":"c75c22541b0e0e0e573f822017f0991bd7b7df07","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","open":"^11.0.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_2.9.0_1780617595561_0.8990015210090538","host":"s3://npm-registry-packages-npm-production"}},"2.9.1":{"name":"@daohuy34/vue-doctor","version":"2.9.1","_id":"@daohuy34/vue-doctor@2.9.1","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"3bce40e7bc0af939c639f6c1857a59f6952567e2","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-2.9.1.tgz","fileCount":93,"integrity":"sha512-BViUByQ8lGqUB3Pvjr8mQplT5ywAGWl5jHFCpJ+EFPDRT2oc0p4WgwWPRiEK10i1yB6GWzDIVjtCw3C7HYiA2w==","signatures":[{"sig":"MEQCIGk50mAxgmCNS24+qlLvQf3ZBh3AkSfgxWrYLshtJE8PAiAc+iGP75Gv41xfSQAEdJH4YN8vmkXR/i6gQ+rsZIQe+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":998244},"type":"module","gitHead":"30529d307bc6132b35d1970e04debc368fa04a27","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","open":"^11.0.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_2.9.1_1780754562262_0.9523947611904173","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@daohuy34/vue-doctor","version":"3.0.0","_id":"@daohuy34/vue-doctor@3.0.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"41d6400100ad9db1dfa457df01acd0a75aff749b","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-3.0.0.tgz","fileCount":95,"integrity":"sha512-ct6inLNdNm01asQa9lANiXDz6F/4eMxYb+dzNHtwTRZnviN6qNxi7pI5eIm6XHu9zmU2kBbNT3FcRJUXuepovA==","signatures":[{"sig":"MEYCIQC54eJ7ZNBPBsusEAXvApqJsH2N9+Vl+KXPDd4WeBxpFQIhAP9KVwm4sND5cIqsO0KagY611dRd+1JwvI2ku4eT9y/+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1159837},"type":"module","gitHead":"fb8bae2715a822948839a3b571f9702a3fb40f69","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","open":"^11.0.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_3.0.0_1780756633776_0.9333654091257277","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@daohuy34/vue-doctor","version":"3.1.0","_id":"@daohuy34/vue-doctor@3.1.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"bin":{"vue-doctor":"dist/index.js"},"dist":{"shasum":"7633f6b729b360fafaa6804476176a7931dce2be","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-3.1.0.tgz","fileCount":109,"integrity":"sha512-21w6JPZjEZC0Hk61Zz9WmAaPLOHxuuZ9q/XeobgqPAmMsAUcYmynKX860DTQ2FUNEjscYMRwuz2IuWNd3VS2oQ==","signatures":[{"sig":"MEQCICDtG7uI8BDAhMPQk6ylXVfbhdfp9SCHW5joP1LAsAJgAiADXOiAweDYqWYvpnZaszk6WCFHrUlvaPDKibdFYuM7QA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1802894},"type":"module","gitHead":"aed31a6993f1df9bb0d233738806080bd2ef7a70","scripts":{"dev":"tsx src/cli/index.ts check","test":"vitest","build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","check":"tsx src/cli/index.ts check"},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"_npmVersion":"11.6.0","description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0","directories":{},"_nodeVersion":"20.17.0","dependencies":{"cac":"^6.7.14","ora":"^8.2.0","open":"^11.0.0","chalk":"^5.4.1","fast-glob":"^3.3.3","cosmiconfig":"^9.0.1","@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","tsup":"^8.5.1","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/babel__traverse":"^7.28.0"},"_npmOperationalInternal":{"tmp":"tmp/vue-doctor_3.1.0_1780840797492_0.14764103632495784","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@daohuy34/vue-doctor","version":"3.2.0","type":"module","bin":{"vue-doctor":"dist/index.js"},"scripts":{"build":"tsup src/cli/index.ts --format esm,cjs --dts --out-dir dist","dev":"tsx src/cli/index.ts check","check":"tsx src/cli/index.ts check","test":"vitest"},"dependencies":{"@babel/parser":"^7.29.3","@babel/traverse":"^7.29.0","@vue/compiler-sfc":"^3.5.13","cac":"^6.7.14","chalk":"^5.4.1","cosmiconfig":"^9.0.1","fast-glob":"^3.3.3","open":"^11.0.0","ora":"^8.2.0"},"devDependencies":{"@types/babel__traverse":"^7.28.0","@types/node":"^22.13.10","tsup":"^8.5.1","tsx":"^4.19.3","typescript":"^5.8.2","vitest":"^3.0.8"},"_id":"@daohuy34/vue-doctor@3.2.0","gitHead":"28ccbb511bb2df5ceab76913007269645ca6af2c","description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0","_nodeVersion":"20.17.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-7jbIiBncLw4f/mFgRITsFdhUDYU7choZT5GEDQ3t5Pf2TGE5+SFE7dws4yFFpjOjHY3Q+1hiefq/pSQh4WPTHw==","shasum":"8326e0efe060d07d0cd7989217dd6d946617b340","tarball":"https://registry.npmjs.org/@daohuy34/vue-doctor/-/vue-doctor-3.2.0.tgz","fileCount":116,"unpackedSize":2237947,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDzS2VoQr8qV6d4m9+1UYISseunn0y2dmPLI5T5P5vTZQIhAPG/iBnL1NVd30G47XsebRJ4lAigX9mflRxnoCN+mJLb"}]},"_npmUser":{"name":"daohuy34","email":"daohuy34@gmail.com"},"directories":{},"maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue-doctor_3.2.0_1780960523160_0.9206930592693499"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-23T03:11:45.959Z","modified":"2026-06-08T23:15:23.476Z","0.1.0":"2026-05-23T03:11:46.237Z","1.4.0":"2026-05-30T17:14:11.142Z","1.8.0":"2026-05-31T14:00:46.218Z","1.9.0":"2026-05-31T23:45:24.100Z","2.7.0":"2026-06-02T00:00:40.461Z","2.8.0":"2026-06-04T14:47:07.102Z","2.9.0":"2026-06-04T23:59:55.732Z","2.9.1":"2026-06-06T14:02:42.480Z","3.0.0":"2026-06-06T14:37:13.945Z","3.1.0":"2026-06-07T13:59:57.646Z","3.2.0":"2026-06-08T23:15:23.364Z"},"description":"![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor) ![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg) ![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0","maintainers":[{"name":"daohuy34","email":"daohuy34@gmail.com"}],"readme":"# Vue Doctor\n\n![npm](https://img.shields.io/npm/v/@daohuy34/vue-doctor)\n![CI](https://github.com/daohuy34/vue-doctor/workflows/CI/badge.svg)\n![Tests](https://img.shields.io/badge/tests-203%20passing-brightgreen)\n![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue)\n![Node](https://img.shields.io/badge/Node-18%2B-green)\n\n**Static Analysis & Architecture Intelligence for Vue & Nuxt applications.**\n\nVue Doctor helps detect maintainability issues, SSR risks, and architectural smells before they become technical debt.\n\nUnlike traditional linters that focus on syntax/style, Vue Doctor focuses on **code quality**, **project health**, and **long-term maintainability**.\n\n---\n\n## Table of Contents\n\n- [Why Vue Doctor?](#why-vue-doctor)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Commands](#commands)\n  - [check](#check---comprehensive-analysis)\n  - [graph](#graph---dependency-graph)\n  - [metrics](#metrics---architecture-metrics)\n  - [report](#report---architecture-score-report)\n  - [smell](#smell---architecture-smell-detection)\n  - [rules](#rules---rule-list)\n  - [fix](#fix---auto-fix)\n  - [baseline](#baseline---baseline-comparison)\n  - [nuxt](#nuxt---nuxt-analysis)\n  - [init](#init---initialize-configuration)\n  - [dashboard](#dashboard---visual-dashboard)\n  - [asset](#asset---asset-analysis)\n- [Rules](#rules-1)\n- [Configuration](#configuration)\n- [CI/CD Integration](#cicd-integration)\n- [VSCode Extension](#vscode-extension)\n\n---\n\n## Why Vue Doctor?\n\n### Traditional Linters (ESLint, Prettier)\n- Semicolons\n- Formatting\n- Variable naming\n- Console statements\n\n### Vue Doctor\n- **Oversized components** - Components that need to be split\n- **Deep watchers** - Watch performance issues\n- **SSR unsafe APIs** - Browser APIs in SSR context\n- **Excessive reactive state** - State bloat\n- **Circular dependencies** - Dependency hell\n- **Layer violations** - Architecture violations\n- **Architecture smells** - God components, smart component abuse\n- **Feature leakage** - Feature cross-imports\n- **Hotspots** - Files that need urgent refactoring\n\n---\n\n## Installation\n\n```bash\n# npm\nnpm install -D @daohuy34/vue-doctor\n\n# yarn\nyarn add -D @daohuy34/vue-doctor\n\n# pnpm\npnpm add -D @daohuy34/vue-doctor\n```\n\n### Global install (for CLI usage)\n\n```bash\nnpm install -g @daohuy34/vue-doctor\n```\n\n### Run without install\n\n```bash\nnpx @daohuy34/vue-doctor check\n```\n\n---\n\n## Quick Start\n\n### 1. Initialize configuration\n\n```bash\nnpx vue-doctor init\n```\n\nCreates a `vue-doctor.config.js` file with default configuration.\n\n### 2. Run analysis\n\n```bash\n# Analyze entire project\nvue-doctor check\n\n# Specify directories\nvue-doctor check src\n\n# Multiple directories\nvue-doctor check src pages components\n```\n\n### 3. View results\n\n```\nsrc/components/ProductEditor.vue\n\n✖ no-large-component\n    Component exceeds recommended size (624 LOC)\n\n✖ no-deep-watch\n    Deep watch detected\n\n⚠ no-window-in-ssr\n    window usage detected in SSR context\n\nSummary\n────────────────────────────────────────\nFiles scanned: 124\nIssues found: 18\nWarnings: 9\nErrors: 9\n```\n\n---\n\n## Commands\n\n### `check` - Comprehensive Analysis\n\nAnalyzes the entire project and reports issues.\n\n```bash\nvue-doctor check [paths...] [options]\n\n# Options:\n#   --baseline        Use baseline to ignore existing issues\n#   --reporter        Output format: stylish, json, html, sarif\n#   --output          Output file for reporter\n#   --profile         Profile: strict, recommended, minimal\n#   --cache           Use cache\n#   --fix             Auto-fix some issues\n```\n\n**Examples:**\n\n```bash\n# Standard check\nvue-doctor check\n\n# JSON output\nvue-doctor check --reporter json --output results.json\n\n# SARIF for GitHub\nvue-doctor check --reporter sarif --output results.sarif\n\n# Strict mode\nvue-doctor check --profile strict\n\n# With cache\nvue-doctor check --cache\n```\n\n---\n\n### `graph` - Dependency Graph\n\nDisplays the project dependency graph.\n\n```bash\nvue-doctor graph [options]\n\n# Options:\n#   --type            Filter by type: component, page, store, composable\n#   --format          Format: text, tree, json, stats\n#   --filter          Pattern filter: \"components/\"\n#   --depth           Display depth: 1-5\n#   --no-color        No colors\n#   --hotspots        Show top hotspots\n#   --cycles          Show circular dependencies\n#   --orphans         Show orphan nodes\n```\n\n**Examples:**\n\n```bash\n# Default tree view\nvue-doctor graph\n\n# Components only\nvue-doctor graph --type component\n\n# JSON output\nvue-doctor graph --format json\n\n# Filter pattern\nvue-doctor graph --filter \"features/\"\n\n# Depth limit\nvue-doctor graph --depth 2\n\n# Combine options\nvue-doctor graph --type component --format tree --depth 3\n```\n\n**Output:**\n\n```\nsrc/\n├── components/\n│   ├── AppHeader.vue\n│   │   └── uses: composables/useAuth.ts\n│   ├── ProductList.vue\n│   │   └── uses: stores/product.ts, composables/useProducts.ts\n│   └── UserAvatar.vue\n├── pages/\n│   ├── index.vue\n│   │   └── uses: composables/useAuth.ts, stores/cart.ts\n│   └── products/\n│       └── [id].vue\n└── stores/\n    ├── auth.ts\n    └── product.ts\n```\n\n---\n\n### `metrics` - Architecture Metrics\n\nView project architecture metrics.\n\n```bash\nvue-doctor metrics [options]\n\n# Options:\n#   --json            JSON output\n#   --boundaries      Analyze feature boundary violations\n#   --routes          Analyze route complexity\n#   --shared          Analyze shared modules\n#   --coupling        Analyze feature coupling\n```\n\n**Output:**\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                   Architecture Metrics                          │\n├─────────────────────────────────────────────────────────────────┤\n│  Components        │  23                                        │\n│  Pages             │  12                                        │\n│  Composables       │  18                                        │\n│  Stores            │  5                                         │\n├─────────────────────────────────────────────────────────────────┤\n│  Coupling          │  3.2 avg deps/component                    │\n│  Depth             │  2.1 max nesting                           │\n│  Circular Deps     │  0                                          │\n├─────────────────────────────────────────────────────────────────┤\n│  Shared Module Use │  12.4%                                      │\n│  Orphan Files      │  3                                          │\n│  Feature Leakage   │  2 violations                               │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n---\n\n### `report` - Architecture Score Report\n\nCalculate and track architecture scores over time.\n\n```bash\nvue-doctor report [options]\n\n# Options:\n#   --json            JSON output\n#   --delta           Show changes from previous run\n#   --save            Save to history\n#   --html            Generate HTML report\n#   --open            Open HTML report in browser\n#   --output          Output file path\n#   --history         Show score history\n```\n\n**Output:**\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                Architecture Score: 87/100                       │\n├─────────────────────────────────────────────────────────────────┤\n│  Category              │  Score  │  Status                      │\n├─────────────────────────────────────────────────────────────────┤\n│  Architecture          │  92     │  ✅ Excellent                │\n│  Maintainability       │  85     │  ✅ Good                     │\n│  Performance           │  88     │  ✅ Good                     │\n│  SSR Safety            │  100    │  ✅ Excellent                │\n└─────────────────────────────────────────────────────────────────┘\n\nArchitecture Debt: ~4.5 hours\n```\n\n---\n\n### `smell` - Architecture Smell Detection\n\nDetect architectural smells: God Components, Smart Component Abuse, Service Layer Violations.\n\n```bash\nvue-doctor smell [options]\n\n# Options:\n#   --json            JSON output\n#   --only            Only detect specific types:\n#                     god-component, god-composable, smart-component,\n#                     service-layer, drift\n```\n\n**Output:**\n\n```\n╔════════════════════════════════════════════════════════════════════╗\n║               Architecture Smell Report                        ║\n╚════════════════════════════════════════════════════════════════════╝\n\n🔴 God Components (Excessively Complex)\n───────────────────────────────────────\n\n🔴 Dashboard.vue ERROR\n   • LOC: 1247 (> 800)\n   • Imports: 34 (> 20)\n   • Methods: 45 (> 20)\n   • Computed: 28 (> 15)\n\n   Suggestion: Split into smaller components or extract logic to composables\n\n⚠️  God Composables (Too Many Responsibilities)\n──────────────────────────────────────────────\n⚠️  usePayment.ts\n   • LOC: 678 (> 500)\n   • Returns: 35 (> 20)\n\n   Suggestion: Split into smaller composables (useXForm, useXData, useXState)\n```\n\n---\n\n### `rules` - Rule List\n\nList all available rules.\n\n```bash\nvue-doctor rules [options]\n\n# Options:\n#   --json            JSON output\n#   --category        Filter by category\n#   --severity        Filter by severity\n```\n\n---\n\n### `fix` - Auto Fix\n\nAutomatically fix some fixable issues.\n\n```bash\nvue-doctor fix [paths...]\n\n# Options:\n#   --dry-run         Preview changes\n#   --force           Force overwrite\n```\n\n---\n\n### `baseline` - Baseline Comparison\n\nCreate or use a baseline to ignore existing issues.\n\n```bash\n# Create baseline\nvue-doctor baseline\n\n# Use baseline\nvue-doctor check --baseline\n```\n\n**Use case:** When adopting Vue Doctor into an existing project, create a baseline to focus on new issues instead of fixing everything at once.\n\n---\n\n### `nuxt` - Nuxt Analysis\n\nDeep analyze Nuxt-specific issues.\n\n```bash\nvue-doctor nuxt [options]\n\n# Options:\n#   --json            JSON output\n#   --async          Analyze async data patterns\n#   --hydration       Analyze hydration risks\n#   --apis           Analyze API usage\n```\n\nChecks:\n- Nuxt auto-imports\n- Page complexity\n- Hydration risks\n- SSR safety\n- API route patterns\n\n---\n\n### `init` - Initialize Configuration\n\nCreate a default configuration file.\n\n```bash\nvue-doctor init [--profile strict|recommended|minimal]\n```\n\nCreates `vue-doctor.config.js`:\n\n```javascript\nexport default {\n  profile: 'recommended',\n  rules: {},\n  thresholds: {},\n  reporter: 'stylish',\n}\n```\n\n---\n\n### `dashboard` - Visual Dashboard\n\nOpen an interactive dashboard in the browser.\n\n```bash\nvue-doctor dashboard\n```\n\n---\n\n### `trend` - Score Trends\n\nView history of architecture score changes.\n\n```bash\nvue-doctor trend\n```\n\n---\n\n### `asset` - Asset Analysis\n\nAnalyze static asset sizes (images, SVGs, fonts).\n\n```bash\nvue-doctor asset [options]\n\n# Options:\n#   --json            JSON output\n#   --threshold <kb>  Size threshold in KB (default: 50)\n#   --dirs <dirs>     Directories to scan (comma-separated)\n```\n\n**Output:**\n\n```\nAsset Analysis\n════════════════════════════════════════════════════════════\n\nSummary:\n  Images:  12\n  Fonts:    3\n  Videos:   1\n  ──────────────────\n  Total:    16\n  Total Size: 245 KB\n\n⚠ Large Assets (>50KB): 2\n  128.5 KB  images/hero-banner.png\n  78.2 KB   images/product-360.webp\n```\n\n---\n\n## Rules\n\n### Performance (7 rules)\n\n| Rule | Severity | Description |\n|------|----------|-------------|\n| `no-deep-watch` | warning | Avoid deep watch causing performance issues |\n| `no-large-asset` | warning | Asset (image/svg/font) too large |\n| `page-complexity` | warning | Detect overly complex pages |\n| `async-data-abuse` | warning | Too many async data calls |\n| `duplicate-fetch` | warning | Duplicate API calls |\n| `excessive-watchers` | warning | Too many watchers |\n| `excessive-v-for-nesting` | warning | Nested v-for too deep |\n\n### Maintainability (9 rules)\n\n| Rule | Severity | Description |\n|------|----------|-------------|\n| `no-large-component` | warning | Component > 400 LOC |\n| `no-large-template` | warning | Template too large |\n| `no-unused-component-data` | warning | Unused reactive properties |\n| `excessive-props` | warning | Too many props |\n| `excessive-computed-properties` | info | Too many computed |\n| `excessive-dom-depth` | warning | DOM nesting too deep |\n| `store-bloat` | warning | Pinia store too large |\n| `ai-monster-component` | warning | Component too complex |\n| `excessive-reactive-state` | warning | Too much reactive state |\n\n### SSR Safety (5 rules)\n\n| Rule | Severity | Description |\n|------|----------|-------------|\n| `no-window-in-ssr` | error | window in SSR context |\n| `no-document-in-ssr` | error | document in SSR context |\n| `no-localstorage-in-ssr` | error | localStorage in SSR context |\n| `no-sessionstorage-in-ssr` | error | sessionStorage in SSR context |\n| `hydration-risk` | warning | SSR/hydration mismatch patterns |\n\n### Architecture (7 rules)\n\n| Rule | Severity | Description |\n|------|----------|-------------|\n| `no-circular-dependency` | error | Circular dependencies |\n| `layer-violation` | warning | Layer architecture violations |\n| `forbidden-dependency` | error | Forbidden dependency patterns |\n| `feature-leakage` | warning | Feature internal imports |\n| `component-coupling` | warning | High fan-out components |\n| `composable-coupling` | warning | High fan-out composables |\n| `store-coupling` | warning | Store-to-store coupling |\n\n### Pinia (5 rules)\n\n| Rule | Severity | Description |\n|------|----------|-------------|\n| `store-god-object` | warning | Store with too many responsibilities |\n| `cross-store-dependency` | warning | Cross-store dependencies |\n| `circular-store-dependency` | error | Circular store dependencies |\n| `pinia-best-practices` | warning | Best practice violations |\n\n### Best Practices (4 rules)\n\n| Rule | Severity | Description |\n|------|----------|-------------|\n| `no-mutate-props` | error | Mutating props directly |\n| `no-side-effect-in-computed` | error | Side effects in computed |\n| `no-v-html` | critical | v-html with dynamic content (XSS) |\n| `no-console` | warning | Console statements |\n\n### Template (3 rules)\n\n| Rule | Severity | Description |\n|------|----------|-------------|\n| `no-v-if-with-v-for` | error | v-if + v-for on same element |\n| `require-key-in-v-for` | error | Missing :key in v-for |\n| `no-debugger` | warning | Debugger statements |\n\n---\n\n## Configuration\n\n### Configuration File\n\nCreate `vue-doctor.config.js` in the project root:\n\n```javascript\nexport default {\n  // Profile: strict, recommended, minimal\n  profile: 'recommended',\n\n  // Override specific rules\n  rules: {\n    'no-large-component': {\n      enabled: true,\n      severity: 'warning',\n      options: { maxSize: 400 },\n    },\n    'ai-monster-component': {\n      enabled: true,\n      severity: 'warning',\n      options: { maxScore: 25 },\n    },\n  },\n\n  // Custom thresholds\n  thresholds: {\n    maxComponentSize: 400,\n    maxFanOut: 10,\n    maxCircularDepth: 3,\n    maxStoreSize: 500,\n  },\n\n  // Feature boundaries\n  boundaries: [\n    { name: 'auth', pattern: 'features/auth/**' },\n    { name: 'dashboard', pattern: 'features/dashboard/**' },\n  ],\n\n  // Shared module threshold\n  sharedModuleThreshold: 50,\n\n  // Reporter\n  reporter: 'stylish',\n\n  // Fail on severity\n  failOn: 'error',\n\n  // Fail on warnings\n  failOnWarning: false,\n}\n```\n\n### Profiles\n\n| Profile | Description |\n|---------|-------------|\n| `strict` | Maximum quality for enterprise projects |\n| `recommended` | Balanced for most projects |\n| `minimal` | Lightweight for quick iterations |\n\n### Package.json Configuration\n\n```json\n{\n  \"vueDoctor\": {\n    \"profile\": \"recommended\",\n    \"failOn\": \"warning\"\n  }\n}\n```\n\n### Extends Configuration\n\n```javascript\n// vue-doctor.config.js\nexport default {\n  extends: './base-vue-doctor.config.js',\n  rules: {\n    // Override\n    'no-large-component': 'off',\n  },\n}\n```\n\n---\n\n## CI/CD Integration\n\n### GitHub Actions\n\n```yaml\nname: Vue Doctor Analysis\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  analyze:\n    runs-on: ubuntu-latest\n    permissions:\n      security-events: write\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '20'\n          cache: 'npm'\n\n      - run: npm ci\n\n      - name: Run Vue Doctor\n        run: npx vue-doctor check --reporter sarif --output results.sarif\n\n      - name: Upload SARIF\n        uses: github/codeql-action/upload-sarif@v3\n        with:\n          sarif_file: results.sarif\n          category: vue-doctor\n```\n\n### GitLab CI\n\n```yaml\nvue-doctor:\n  image: node:20\n  script:\n    - npm ci\n    - npx vue-doctor check --reporter json --output report.json\n  artifacts:\n    reports:\n      json: report.json\n```\n\n### CircleCI\n\n```yaml\n- run:\n    name: Vue Doctor\n    command: npm run vue-doctor\n```\n\n### Pre-commit Hook\n\n```bash\n# .husky/pre-commit\nnpx vue-doctor check --cache\n```\n\n---\n\n## VSCode Extension\n\nInstall from VSCode Marketplace: **Vue Doctor**\n\n### Features\n\n- Real-time diagnostics\n- Hover for rule details\n- Click to fix\n- Inline violations\n\n### Configuration\n\n```json\n{\n  \"vueDoctor.enable\": true,\n  \"vueDoctor.profile\": \"recommended\",\n  \"vueDoctor.runOnSave\": true,\n  \"vueDoctor.autoFixOnSave\": false\n}\n```\n\n---\n\n## Architecture Score\n\nVue Doctor calculates architecture scores from 0-100:\n\n| Score | Rating |\n|-------|--------|\n| 90-100 | Excellent |\n| 80-89 | Good |\n| 70-79 | Fair |\n| 60-69 | Poor |\n| <60 | Critical |\n\n### Scoring Categories\n\n- **Architecture (30%)**: Circular deps, layer violations, feature leakage\n- **Maintainability (30%)**: Component size, complexity, coupling\n- **Performance (20%)**: Watchers, reactivity, rendering\n- **SSR Safety (20%)**: Browser APIs in SSR context\n\n---\n\n## Cache System\n\nVue Doctor automatically caches results to speed up subsequent runs.\n\n### Cache Location\n\n```\n.vue-doctor-cache.json\n```\n\n### Disable Cache\n\n```bash\nvue-doctor check --no-cache\n```\n\n### Clear Cache\n\n```bash\nrm .vue-doctor-cache.json\n```\n\n---\n\n## Troubleshooting\n\n### \"Cannot find module\"\n\n```bash\nnpm install\n```\n\n### Slow on large projects\n\n```bash\n# Use cache\nvue-doctor check --cache\n\n# Limit scan\nvue-doctor check src/components\n```\n\n### Too many false positives\n\n```javascript\n// vue-doctor.config.js\nexport default {\n  rules: {\n    'no-console': 'off',  // Disable annoying rule\n  },\n}\n```\n\n---\n\n## Philosophy\n\n**ESLint answers:**\n\n> Is this code valid?\n\n**Vue Doctor answers:**\n\n> Is this code maintainable?\n\nUse both together for comprehensive analysis.\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}