[{"data":1,"prerenderedAt":409},["ShallowReactive",2],{"navigation_docs":3,"diagnostic-content-NUXT0080":44},[4,8,12,16,20,24,28,32,36,40],{"title":5,"path":6,"stem":7},"CLI","\u002Fcli","1.cli",{"title":9,"path":10,"stem":11},"Nuxt","\u002Fnuxt","2.nuxt",{"title":13,"path":14,"stem":15},"Vue","\u002Fvue","3.vue",{"title":17,"path":18,"stem":19},"Vite","\u002Fvite","4.vite",{"title":21,"path":22,"stem":23},"Nitro","\u002Fnitro","5.nitro",{"title":25,"path":26,"stem":27},"TypeScript","\u002Ftypescript","6.typescript",{"title":29,"path":30,"stem":31},"shadcn","\u002Fshadcn","7.shadcn",{"title":33,"path":34,"stem":35},"Package","\u002Fpackage","8.package",{"title":37,"path":38,"stem":39},"Extending Doctor","\u002Fextending","9.extending",{"title":41,"path":42,"stem":43},"Pinia","\u002Fpinia","9.pinia",{"id":45,"title":46,"body":47,"category":53,"code":399,"description":400,"docsUrl":54,"extension":401,"fix":77,"framework":402,"meta":403,"navigation":404,"pack":56,"path":405,"ruleId":57,"rulePath":58,"seo":406,"severity":59,"source":60,"sourceUrl":61,"stem":407,"why":70,"__hash__":408},"diagnostics\u002Fdiagnostics\u002FNUXT0080.md","NUXT0080: Match composable exports to their file name",{"type":48,"value":49,"toc":388},"minimark",[50,62,67,71,75,78,82,87,90,171,174,222,226,228,274,276,318,322,325,356,360,372,376,384],[51,52],"rule-metadata",{"category":53,"docsUrl":54,"fix":55,"pack":56,"ruleId":57,"rulePath":58,"severity":59,"source":60,"sourceUrl":61},"composables","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fdirectory-structure\u002Fapp\u002Fcomposables#how-files-are-scanned","suggestion","vite-doctor\u002Fnuxt","nuxt\u002Fcomposables\u002Fexport-name-matches-file","\u002Fnuxt\u002Frules\u002Fcomposables\u002Fexport-name-matches-file","info","src\u002Frule-packs\u002Fnuxt\u002Frules\u002Fnuxt\u002Fexport-name-matches-file.ts","https:\u002F\u002Fgithub.com\u002Fonmax\u002Fvite-doctor\u002Fblob\u002Fmain\u002Fsrc\u002Frule-packs\u002Fnuxt\u002Frules\u002Fnuxt\u002Fexport-name-matches-file.ts",[63,64,66],"h2",{"id":65},"why-it-happens","Why it happens",[68,69,70],"p",{},"Nuxt auto-imports named exports from top-level composables\u002F files under their own names, and a default export under a name derived from the file name. When useCart.ts exports useShoppingCart, or fetch-user.ts default-exports a function that becomes fetchUser, readers cannot find a composable from its name or tell it is a composable at all.",[63,72,74],{"id":73},"fix","Fix",[68,76,77],{},"Name the main export after the file (useCart.ts exports useCart; use-cart.ts also maps to useCart), and name files with default exports so the derived name starts with use. Run Nuxt prepare with the Doctor module to capture current composable scan evidence. Only files in that inventory are checked, respecting resolved layer source directories, disabled scanning, and ignored files. Index files, files without use* exports, and files where any use* export matches are not reported.",[63,79,81],{"id":80},"example","Example",[83,84,86],"h3",{"id":85},"export-the-composable-the-file-name-promises","Export the composable the file name promises",[68,88,89],{},"Before",[91,92,97],"pre",{"className":93,"code":94,"language":95,"meta":96,"style":96},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F app\u002Fcomposables\u002FuseCart.ts\nexport function useShoppingCart() {\n  return useState('cart', () => [])\n}\n","ts","",[98,99,100,109,131,165],"code",{"__ignoreMap":96},[101,102,105],"span",{"class":103,"line":104},"line",1,[101,106,108],{"class":107},"sHwdD","\u002F\u002F app\u002Fcomposables\u002FuseCart.ts\n",[101,110,112,116,120,124,128],{"class":103,"line":111},2,[101,113,115],{"class":114},"s7zQu","export",[101,117,119],{"class":118},"spNyl"," function",[101,121,123],{"class":122},"s2Zo4"," useShoppingCart",[101,125,127],{"class":126},"sMK4o","()",[101,129,130],{"class":126}," {\n",[101,132,134,137,140,144,147,151,153,156,159,162],{"class":103,"line":133},3,[101,135,136],{"class":114},"  return",[101,138,139],{"class":122}," useState",[101,141,143],{"class":142},"swJcz","(",[101,145,146],{"class":126},"'",[101,148,150],{"class":149},"sfazB","cart",[101,152,146],{"class":126},[101,154,155],{"class":126},",",[101,157,158],{"class":126}," ()",[101,160,161],{"class":118}," =>",[101,163,164],{"class":142}," [])\n",[101,166,168],{"class":103,"line":167},4,[101,169,170],{"class":126},"}\n",[68,172,173],{},"After",[91,175,177],{"className":93,"code":176,"language":95,"meta":96,"style":96},"\u002F\u002F app\u002Fcomposables\u002FuseCart.ts\nexport function useCart() {\n  return useState('cart', () => [])\n}\n",[98,178,179,183,196,218],{"__ignoreMap":96},[101,180,181],{"class":103,"line":104},[101,182,108],{"class":107},[101,184,185,187,189,192,194],{"class":103,"line":111},[101,186,115],{"class":114},[101,188,119],{"class":118},[101,190,191],{"class":122}," useCart",[101,193,127],{"class":126},[101,195,130],{"class":126},[101,197,198,200,202,204,206,208,210,212,214,216],{"class":103,"line":133},[101,199,136],{"class":114},[101,201,139],{"class":122},[101,203,143],{"class":142},[101,205,146],{"class":126},[101,207,150],{"class":149},[101,209,146],{"class":126},[101,211,155],{"class":126},[101,213,158],{"class":126},[101,215,161],{"class":118},[101,217,164],{"class":142},[101,219,220],{"class":103,"line":167},[101,221,170],{"class":126},[83,223,225],{"id":224},"name-default-export-files-with-use","Name default-export files with use",[68,227,89],{},[91,229,231],{"className":93,"code":230,"language":95,"meta":96,"style":96},"\u002F\u002F app\u002Fcomposables\u002Ffetch-user.ts (auto-imported as fetchUser)\nexport default function () {\n  return useFetch('\u002Fapi\u002Fuser')\n}\n",[98,232,233,238,251,270],{"__ignoreMap":96},[101,234,235],{"class":103,"line":104},[101,236,237],{"class":107},"\u002F\u002F app\u002Fcomposables\u002Ffetch-user.ts (auto-imported as fetchUser)\n",[101,239,240,242,245,247,249],{"class":103,"line":111},[101,241,115],{"class":114},[101,243,244],{"class":114}," default",[101,246,119],{"class":118},[101,248,158],{"class":126},[101,250,130],{"class":126},[101,252,253,255,258,260,262,265,267],{"class":103,"line":133},[101,254,136],{"class":114},[101,256,257],{"class":122}," useFetch",[101,259,143],{"class":142},[101,261,146],{"class":126},[101,263,264],{"class":149},"\u002Fapi\u002Fuser",[101,266,146],{"class":126},[101,268,269],{"class":142},")\n",[101,271,272],{"class":103,"line":167},[101,273,170],{"class":126},[68,275,173],{},[91,277,279],{"className":93,"code":278,"language":95,"meta":96,"style":96},"\u002F\u002F app\u002Fcomposables\u002Fuse-user.ts (auto-imported as useUser)\nexport default function () {\n  return useFetch('\u002Fapi\u002Fuser')\n}\n",[98,280,281,286,298,314],{"__ignoreMap":96},[101,282,283],{"class":103,"line":104},[101,284,285],{"class":107},"\u002F\u002F app\u002Fcomposables\u002Fuse-user.ts (auto-imported as useUser)\n",[101,287,288,290,292,294,296],{"class":103,"line":111},[101,289,115],{"class":114},[101,291,244],{"class":114},[101,293,119],{"class":118},[101,295,158],{"class":126},[101,297,130],{"class":126},[101,299,300,302,304,306,308,310,312],{"class":103,"line":133},[101,301,136],{"class":114},[101,303,257],{"class":122},[101,305,143],{"class":142},[101,307,146],{"class":126},[101,309,264],{"class":149},[101,311,146],{"class":126},[101,313,269],{"class":142},[101,315,316],{"class":103,"line":167},[101,317,170],{"class":126},[63,319,321],{"id":320},"verify-the-fix","Verify the fix",[68,323,324],{},"Run only this rule after editing so the report stays focused on the diagnostic you are closing:",[91,326,330],{"className":327,"code":328,"language":329,"meta":96,"style":96},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm nuxt doctor --extends auto,nuxt\u002Fstrict --rules nuxt\u002Fcomposables\u002Fexport-name-matches-file\n","bash",[98,331,332],{"__ignoreMap":96},[101,333,334,338,341,344,347,350,353],{"class":103,"line":104},[101,335,337],{"class":336},"sBMFI","pnpm",[101,339,340],{"class":149}," nuxt",[101,342,343],{"class":149}," doctor",[101,345,346],{"class":149}," --extends",[101,348,349],{"class":149}," auto,nuxt\u002Fstrict",[101,351,352],{"class":149}," --rules",[101,354,355],{"class":149}," nuxt\u002Fcomposables\u002Fexport-name-matches-file\n",[63,357,359],{"id":358},"useful-links","Useful links",[361,362,363],"ul",{},[364,365,366],"li",{},[367,368,371],"a",{"href":54,"rel":369},[370],"nofollow","Upstream docs",[63,373,375],{"id":374},"related-rule","Related rule",[361,377,378],{},[364,379,380],{},[367,381,382],{"href":58},[98,383,57],{},[385,386,387],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":96,"searchDepth":111,"depth":111,"links":389},[390,391,392,396,397,398],{"id":65,"depth":111,"text":66},{"id":73,"depth":111,"text":74},{"id":80,"depth":111,"text":81,"children":393},[394,395],{"id":85,"depth":133,"text":86},{"id":224,"depth":133,"text":225},{"id":320,"depth":111,"text":321},{"id":358,"depth":111,"text":359},{"id":374,"depth":111,"text":375},"NUXT0080","Finds Nuxt composable files whose auto-imported names do not match the file name or do not start with use.","md","nuxt",{},true,"\u002Fdiagnostics\u002Fnuxt0080",{"title":46,"description":400},"diagnostics\u002FNUXT0080","OEV6NiA3HPZ6T91ZPT4z4QvS1Y3kMF5WT3TrqDMkMLQ",1791309501583]