[{"data":1,"prerenderedAt":411},["ShallowReactive",2],{"navigation_docs":3,"diagnostic-content-NUXT0075":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":402,"description":403,"docsUrl":54,"extension":404,"fix":77,"framework":405,"meta":406,"navigation":279,"pack":56,"path":407,"ruleId":57,"rulePath":58,"seo":408,"severity":59,"source":60,"sourceUrl":61,"stem":409,"why":70,"__hash__":410},"diagnostics\u002Fdiagnostics\u002FNUXT0075.md","NUXT0075: Do not import server code into app or shared code",{"type":48,"value":49,"toc":392},"minimark",[50,62,67,71,75,78,82,87,90,140,143,329,333,336,360,364,376,380,388],[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-utils-in-app","\u002Fnuxt\u002Frules\u002Fstructure\u002Fno-server-utils-in-app","error","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",{},"Nuxt's import protection doesn't block server\u002Futils. Importing from it in app code ships server code (database clients, private config reads, Node APIs) into the client bundle. Code used by both sides belongs in shared\u002Futils\u002F, which Nuxt auto-imports in both the app and the server.",[63,72,74],{"id":73},"fix","Fix",[68,76,77],{},"Move code used by both the app and the server to shared\u002Futils\u002F. Keep server-only logic in server\u002F and call it through an API route.",[63,79,81],{"id":80},"example","Example",[83,84,86],"h3",{"id":85},"share-utilities-through-sharedutils","Share utilities through shared\u002Futils",[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\u002Fcomponents\u002FPriceTag.vue \u003Cscript setup>\nimport { formatPrice } from '~~\u002Fserver\u002Futils\u002Fpricing'\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\u002Fcomponents\u002FPriceTag.vue \u003Cscript setup>\n",[101,110,112,116,120,124,127,130,133,137],{"class":103,"line":111},2,[101,113,115],{"class":114},"s7zQu","import",[101,117,119],{"class":118},"sMK4o"," {",[101,121,123],{"class":122},"sTEyZ"," formatPrice",[101,125,126],{"class":118}," }",[101,128,129],{"class":114}," from",[101,131,132],{"class":118}," '",[101,134,136],{"class":135},"sfazB","~~\u002Fserver\u002Futils\u002Fpricing",[101,138,139],{"class":118},"'\n",[68,141,142],{},"After",[91,144,146],{"className":93,"code":145,"language":95,"meta":96,"style":96},"\u002F\u002F shared\u002Futils\u002Fformat-price.ts\nexport function formatPrice(cents: number, currency: string) {\n  return new Intl.NumberFormat('en', { style: 'currency', currency }).format(cents \u002F 100)\n}\n\n\u002F\u002F app\u002Fcomponents\u002FPriceTag.vue: auto-imported\nconst label = computed(() => formatPrice(props.cents, props.currency))\n",[98,147,148,153,196,268,274,281,287],{"__ignoreMap":96},[101,149,150],{"class":103,"line":104},[101,151,152],{"class":107},"\u002F\u002F shared\u002Futils\u002Fformat-price.ts\n",[101,154,155,158,162,165,168,172,175,179,182,185,187,190,193],{"class":103,"line":111},[101,156,157],{"class":114},"export",[101,159,161],{"class":160},"spNyl"," function",[101,163,123],{"class":164},"s2Zo4",[101,166,167],{"class":118},"(",[101,169,171],{"class":170},"sHdIc","cents",[101,173,174],{"class":118},":",[101,176,178],{"class":177},"sBMFI"," number",[101,180,181],{"class":118},",",[101,183,184],{"class":170}," currency",[101,186,174],{"class":118},[101,188,189],{"class":177}," string",[101,191,192],{"class":118},")",[101,194,195],{"class":118}," {\n",[101,197,199,202,205,208,211,214,217,220,223,225,227,229,232,234,236,239,241,243,245,247,249,251,254,256,258,261,265],{"class":103,"line":198},3,[101,200,201],{"class":114},"  return",[101,203,204],{"class":118}," new",[101,206,207],{"class":122}," Intl",[101,209,210],{"class":118},".",[101,212,213],{"class":164},"NumberFormat",[101,215,167],{"class":216},"swJcz",[101,218,219],{"class":118},"'",[101,221,222],{"class":135},"en",[101,224,219],{"class":118},[101,226,181],{"class":118},[101,228,119],{"class":118},[101,230,231],{"class":216}," style",[101,233,174],{"class":118},[101,235,132],{"class":118},[101,237,238],{"class":135},"currency",[101,240,219],{"class":118},[101,242,181],{"class":118},[101,244,184],{"class":122},[101,246,126],{"class":118},[101,248,192],{"class":216},[101,250,210],{"class":118},[101,252,253],{"class":164},"format",[101,255,167],{"class":216},[101,257,171],{"class":122},[101,259,260],{"class":118}," \u002F",[101,262,264],{"class":263},"sbssI"," 100",[101,266,267],{"class":216},")\n",[101,269,271],{"class":103,"line":270},4,[101,272,273],{"class":118},"}\n",[101,275,277],{"class":103,"line":276},5,[101,278,280],{"emptyLinePlaceholder":279},true,"\n",[101,282,284],{"class":103,"line":283},6,[101,285,286],{"class":107},"\u002F\u002F app\u002Fcomponents\u002FPriceTag.vue: auto-imported\n",[101,288,290,293,296,299,302,304,307,310,312,315,317,319,321,324,326],{"class":103,"line":289},7,[101,291,292],{"class":160},"const",[101,294,295],{"class":122}," label ",[101,297,298],{"class":118},"=",[101,300,301],{"class":164}," computed",[101,303,167],{"class":122},[101,305,306],{"class":118},"()",[101,308,309],{"class":160}," =>",[101,311,123],{"class":164},[101,313,314],{"class":122},"(props",[101,316,210],{"class":118},[101,318,171],{"class":122},[101,320,181],{"class":118},[101,322,323],{"class":122}," props",[101,325,210],{"class":118},[101,327,328],{"class":122},"currency))\n",[63,330,332],{"id":331},"verify-the-fix","Verify the fix",[68,334,335],{},"Run only this rule after editing so the report stays focused on the diagnostic you are closing:",[91,337,341],{"className":338,"code":339,"language":340,"meta":96,"style":96},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm nuxt doctor --rules nuxt\u002Fstructure\u002Fno-server-utils-in-app\n","bash",[98,342,343],{"__ignoreMap":96},[101,344,345,348,351,354,357],{"class":103,"line":104},[101,346,347],{"class":177},"pnpm",[101,349,350],{"class":135}," nuxt",[101,352,353],{"class":135}," doctor",[101,355,356],{"class":135}," --rules",[101,358,359],{"class":135}," nuxt\u002Fstructure\u002Fno-server-utils-in-app\n",[63,361,363],{"id":362},"useful-links","Useful links",[365,366,367],"ul",{},[368,369,370],"li",{},[371,372,375],"a",{"href":54,"rel":373},[374],"nofollow","Upstream docs",[63,377,379],{"id":378},"related-rule","Related rule",[365,381,382],{},[368,383,384],{},[371,385,386],{"href":58},[98,387,57],{},[389,390,391],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":96,"searchDepth":111,"depth":111,"links":393},[394,395,396,399,400,401],{"id":65,"depth":111,"text":66},{"id":73,"depth":111,"text":74},{"id":80,"depth":111,"text":81,"children":397},[398],{"id":85,"depth":198,"text":86},{"id":331,"depth":111,"text":332},{"id":362,"depth":111,"text":363},{"id":378,"depth":111,"text":379},"NUXT0075","Report runtime imports from the Nuxt server directory in app or shared code.","md","nuxt",{},"\u002Fdiagnostics\u002Fnuxt0075",{"title":46,"description":403},"diagnostics\u002FNUXT0075","yQFIpqh5liicYW-thfj44CKtfRGIC-F_1KBTuY_neMY",1791309501112]