[{"data":1,"prerenderedAt":352},["ShallowReactive",2],{"navigation_docs":3,"diagnostic-content-NUXT0076":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":343,"description":344,"docsUrl":54,"extension":345,"fix":77,"framework":346,"meta":347,"navigation":206,"pack":56,"path":348,"ruleId":57,"rulePath":58,"seo":349,"severity":59,"source":60,"sourceUrl":61,"stem":350,"why":70,"__hash__":351},"diagnostics\u002Fdiagnostics\u002FNUXT0076.md","NUXT0076: Keep types shared by app and server in shared\u002Ftypes",{"type":48,"value":49,"toc":333},"minimark",[50,62,67,71,75,78,82,87,90,143,146,264,268,271,301,305,317,321,329],[51,52],"rule-metadata",{"category":53,"docsUrl":54,"fix":55,"pack":56,"ruleId":57,"rulePath":58,"severity":59,"source":60,"sourceUrl":61},"architecture","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fshared","suggestion","vite-doctor\u002Fnuxt","nuxt\u002Fstructure\u002Fno-server-types-in-app","\u002Fnuxt\u002Frules\u002Fstructure\u002Fno-server-types-in-app","info","src\u002Frule-packs\u002Fnuxt\u002Frules\u002Fnuxt\u002Fno-server-utils-in-app.ts","https:\u002F\u002Fgithub.com\u002Fonmax\u002Fvite-doctor\u002Fblob\u002Fmain\u002Fsrc\u002Frule-packs\u002Fnuxt\u002Frules\u002Fnuxt\u002Fno-server-utils-in-app.ts",[63,64,66],"h2",{"id":65},"why-it-happens","Why it happens",[68,69,70],"p",{},"Type-only imports are erased from the client bundle, but they couple app code to server internals. A refactor that adds a runtime import next to the type pulls server code into the client. Types used by both sides belong in shared\u002Ftypes\u002F, which Nuxt auto-imports in both the app and the server.",[63,72,74],{"id":73},"fix","Fix",[68,76,77],{},"Move types used by both the app and the server to shared\u002Ftypes\u002F and import them from there on both sides.",[63,79,81],{"id":80},"example","Example",[83,84,86],"h3",{"id":85},"share-types-through-sharedtypes","Share types through shared\u002Ftypes",[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\u002Fpages\u002Forders.vue \u003Cscript setup>\nimport type { Order } from '~~\u002Fserver\u002Futils\u002Forders'\n","ts","",[98,99,100,109],"code",{"__ignoreMap":96},[101,102,105],"span",{"class":103,"line":104},"line",1,[101,106,108],{"class":107},"sHwdD","\u002F\u002F app\u002Fpages\u002Forders.vue \u003Cscript setup>\n",[101,110,112,116,119,123,127,130,133,136,140],{"class":103,"line":111},2,[101,113,115],{"class":114},"s7zQu","import",[101,117,118],{"class":114}," type",[101,120,122],{"class":121},"sMK4o"," {",[101,124,126],{"class":125},"sTEyZ"," Order",[101,128,129],{"class":121}," }",[101,131,132],{"class":114}," from",[101,134,135],{"class":121}," '",[101,137,139],{"class":138},"sfazB","~~\u002Fserver\u002Futils\u002Forders",[101,141,142],{"class":121},"'\n",[68,144,145],{},"After",[91,147,149],{"className":93,"code":148,"language":95,"meta":96,"style":96},"\u002F\u002F shared\u002Ftypes\u002Forder.ts\nexport interface Order {\n  id: string\n  totalCents: number\n}\n\n\u002F\u002F app\u002Fpages\u002Forders.vue: auto-imported\nconst { data } = await useFetch\u003COrder[]>('\u002Fapi\u002Forders')\n",[98,150,151,156,171,184,195,201,208,214],{"__ignoreMap":96},[101,152,153],{"class":103,"line":104},[101,154,155],{"class":107},"\u002F\u002F shared\u002Ftypes\u002Forder.ts\n",[101,157,158,161,165,168],{"class":103,"line":111},[101,159,160],{"class":114},"export",[101,162,164],{"class":163},"spNyl"," interface",[101,166,126],{"class":167},"sBMFI",[101,169,170],{"class":121}," {\n",[101,172,174,178,181],{"class":103,"line":173},3,[101,175,177],{"class":176},"swJcz","  id",[101,179,180],{"class":121},":",[101,182,183],{"class":167}," string\n",[101,185,187,190,192],{"class":103,"line":186},4,[101,188,189],{"class":176},"  totalCents",[101,191,180],{"class":121},[101,193,194],{"class":167}," number\n",[101,196,198],{"class":103,"line":197},5,[101,199,200],{"class":121},"}\n",[101,202,204],{"class":103,"line":203},6,[101,205,207],{"emptyLinePlaceholder":206},true,"\n",[101,209,211],{"class":103,"line":210},7,[101,212,213],{"class":107},"\u002F\u002F app\u002Fpages\u002Forders.vue: auto-imported\n",[101,215,217,220,222,225,228,231,234,238,241,244,247,250,253,256,259,261],{"class":103,"line":216},8,[101,218,219],{"class":163},"const",[101,221,122],{"class":121},[101,223,224],{"class":125}," data ",[101,226,227],{"class":121},"}",[101,229,230],{"class":121}," =",[101,232,233],{"class":114}," await",[101,235,237],{"class":236},"s2Zo4"," useFetch",[101,239,240],{"class":121},"\u003C",[101,242,243],{"class":167},"Order",[101,245,246],{"class":125},"[]",[101,248,249],{"class":121},">",[101,251,252],{"class":125},"(",[101,254,255],{"class":121},"'",[101,257,258],{"class":138},"\u002Fapi\u002Forders",[101,260,255],{"class":121},[101,262,263],{"class":125},")\n",[63,265,267],{"id":266},"verify-the-fix","Verify the fix",[68,269,270],{},"Run only this rule after editing so the report stays focused on the diagnostic you are closing:",[91,272,276],{"className":273,"code":274,"language":275,"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\u002Fstructure\u002Fno-server-types-in-app\n","bash",[98,277,278],{"__ignoreMap":96},[101,279,280,283,286,289,292,295,298],{"class":103,"line":104},[101,281,282],{"class":167},"pnpm",[101,284,285],{"class":138}," nuxt",[101,287,288],{"class":138}," doctor",[101,290,291],{"class":138}," --extends",[101,293,294],{"class":138}," auto,nuxt\u002Fstrict",[101,296,297],{"class":138}," --rules",[101,299,300],{"class":138}," nuxt\u002Fstructure\u002Fno-server-types-in-app\n",[63,302,304],{"id":303},"useful-links","Useful links",[306,307,308],"ul",{},[309,310,311],"li",{},[312,313,316],"a",{"href":54,"rel":314},[315],"nofollow","Upstream docs",[63,318,320],{"id":319},"related-rule","Related rule",[306,322,323],{},[309,324,325],{},[312,326,327],{"href":58},[98,328,57],{},[330,331,332],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":96,"searchDepth":111,"depth":111,"links":334},[335,336,337,340,341,342],{"id":65,"depth":111,"text":66},{"id":73,"depth":111,"text":74},{"id":80,"depth":111,"text":81,"children":338},[339],{"id":85,"depth":173,"text":86},{"id":266,"depth":111,"text":267},{"id":303,"depth":111,"text":304},{"id":319,"depth":111,"text":320},"NUXT0076","Report type-only imports from the Nuxt server directory in app or shared code.","md","nuxt",{},"\u002Fdiagnostics\u002Fnuxt0076",{"title":46,"description":344},"diagnostics\u002FNUXT0076","uNQTLqh91MY-7nuHoPvjAw70Wkd-ANol-xq4SHC-D5k",1791309501262]