[{"data":1,"prerenderedAt":884},["ShallowReactive",2],{"navigation_docs":3,"-guide-dev-collector":60,"-guide-dev-collector-surround":879},[4,15,40,50],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10],{"title":11,"path":12,"stem":13,"icon":14},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F1.quick-start","i-lucide-rocket",{"title":16,"path":17,"stem":18,"children":19,"page":6},"Guide","\u002Fguide","2.guide",[20,25,30,35],{"title":21,"path":22,"stem":23,"icon":24},"Defining diagnostics","\u002Fguide\u002Fdefining-diagnostics","2.guide\u002F1.defining-diagnostics","i-lucide-list-tree",{"title":26,"path":27,"stem":28,"icon":29},"Reporters and formatters","\u002Fguide\u002Freporters-and-formatters","2.guide\u002F2.reporters-and-formatters","i-lucide-share-2",{"title":31,"path":32,"stem":33,"icon":34},"Production builds","\u002Fguide\u002Fproduction-builds","2.guide\u002F3.production-builds","i-lucide-scissors",{"title":36,"path":37,"stem":38,"icon":39},"Dev collector","\u002Fguide\u002Fdev-collector","2.guide\u002F4.dev-collector","i-lucide-terminal",{"title":41,"path":42,"stem":43,"children":44,"page":6},"Recipes","\u002Frecipes","3.recipes",[45],{"title":46,"path":47,"stem":48,"icon":49},"Diagnostic registry","\u002Frecipes\u002Fdiagnostic-registry","3.recipes\u002F1.diagnostic-registry","i-lucide-book-open",{"title":51,"path":52,"stem":53,"children":54,"page":6},"Api","\u002Fapi","4.api",[55],{"title":56,"path":57,"stem":58,"icon":59},"Reference","\u002Fapi\u002Freference","4.api\u002F1.reference","i-lucide-file-code",{"id":61,"title":36,"body":62,"description":872,"extension":873,"links":874,"meta":875,"navigation":876,"path":37,"seo":877,"stem":38,"__hash__":878},"docs\u002F2.guide\u002F4.dev-collector.md",{"type":63,"value":64,"toc":866},"minimark",[65,69,72,89,94,97,541,544,548,551,638,641,667,670,674,766,834,838,851,862],[66,67,68],"p",{},"Browser diagnostics normally live in the browser console. The dev collector copies them to a local file during Vite dev, which makes them easy to tail, grep, and share.",[66,70,71],{},"There are two pieces:",[73,74,75,83],"ul",{},[76,77,78,82],"li",{},[79,80,81],"code",{},"createDevReporter()"," runs in browser code and sends diagnostics over Vite HMR.",[76,84,85,88],{},[79,86,87],{},"nosticsCollector"," runs in the Vite dev server and writes them to a file.",[90,91,93],"h2",{"id":92},"browser-side","Browser side",[66,95,96],{},"Add the dev reporter next to your normal reporter.",[98,99,105],"pre",{"className":100,"code":101,"filename":102,"language":103,"meta":104,"style":104},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createConsoleReporter, defineDiagnostics } from 'nostics'\nimport { createDevReporter } from 'nostics\u002Freporters\u002Fdev'\n\nexport const diagnostics = defineDiagnostics({\n  reporters: [createConsoleReporter(), createDevReporter()],\n  codes: {\n    NUXT_B2011: {\n      why: (p: { src: string, mode: 'client' | 'server' }) => {\n        const expected = p.mode === 'client' ? 'server' : 'client'\n        return `Plugin \"${p.src}\" is ${expected}-only but was registered with mode \"${p.mode}\".`\n      },\n      fix: (p: { mode: 'client' | 'server' }) => {\n        const expected = p.mode === 'client' ? 'server' : 'client'\n        return `Rename the file or register it with mode \"${expected}\".`\n      },\n    },\n  },\n})\n","src\u002Fdiagnostics.ts","ts","",[79,106,107,146,167,174,199,228,239,249,309,357,411,417,457,496,516,521,527,533],{"__ignoreMap":104},[108,109,112,116,120,124,127,130,133,136,139,143],"span",{"class":110,"line":111},"line",1,[108,113,115],{"class":114},"s7zQu","import",[108,117,119],{"class":118},"sMK4o"," {",[108,121,123],{"class":122},"sTEyZ"," createConsoleReporter",[108,125,126],{"class":118},",",[108,128,129],{"class":122}," defineDiagnostics",[108,131,132],{"class":118}," }",[108,134,135],{"class":114}," from",[108,137,138],{"class":118}," '",[108,140,142],{"class":141},"sfazB","nostics",[108,144,145],{"class":118},"'\n",[108,147,149,151,153,156,158,160,162,165],{"class":110,"line":148},2,[108,150,115],{"class":114},[108,152,119],{"class":118},[108,154,155],{"class":122}," createDevReporter",[108,157,132],{"class":118},[108,159,135],{"class":114},[108,161,138],{"class":118},[108,163,164],{"class":141},"nostics\u002Freporters\u002Fdev",[108,166,145],{"class":118},[108,168,170],{"class":110,"line":169},3,[108,171,173],{"emptyLinePlaceholder":172},true,"\n",[108,175,177,180,184,187,190,193,196],{"class":110,"line":176},4,[108,178,179],{"class":114},"export",[108,181,183],{"class":182},"spNyl"," const",[108,185,186],{"class":122}," diagnostics ",[108,188,189],{"class":118},"=",[108,191,129],{"class":192},"s2Zo4",[108,194,195],{"class":122},"(",[108,197,198],{"class":118},"{\n",[108,200,202,206,209,212,215,218,220,222,225],{"class":110,"line":201},5,[108,203,205],{"class":204},"swJcz","  reporters",[108,207,208],{"class":118},":",[108,210,211],{"class":122}," [",[108,213,214],{"class":192},"createConsoleReporter",[108,216,217],{"class":122},"()",[108,219,126],{"class":118},[108,221,155],{"class":192},[108,223,224],{"class":122},"()]",[108,226,227],{"class":118},",\n",[108,229,231,234,236],{"class":110,"line":230},6,[108,232,233],{"class":204},"  codes",[108,235,208],{"class":118},[108,237,238],{"class":118}," {\n",[108,240,242,245,247],{"class":110,"line":241},7,[108,243,244],{"class":204},"    NUXT_B2011",[108,246,208],{"class":118},[108,248,238],{"class":118},[108,250,252,255,257,260,263,265,267,270,272,276,278,281,283,285,288,291,294,296,299,301,304,307],{"class":110,"line":251},8,[108,253,254],{"class":192},"      why",[108,256,208],{"class":118},[108,258,259],{"class":118}," (",[108,261,66],{"class":262},"sHdIc",[108,264,208],{"class":118},[108,266,119],{"class":118},[108,268,269],{"class":204}," src",[108,271,208],{"class":118},[108,273,275],{"class":274},"sBMFI"," string",[108,277,126],{"class":118},[108,279,280],{"class":204}," mode",[108,282,208],{"class":118},[108,284,138],{"class":118},[108,286,287],{"class":141},"client",[108,289,290],{"class":118},"'",[108,292,293],{"class":118}," |",[108,295,138],{"class":118},[108,297,298],{"class":141},"server",[108,300,290],{"class":118},[108,302,303],{"class":118}," })",[108,305,306],{"class":182}," =>",[108,308,238],{"class":118},[108,310,312,315,318,321,324,327,330,333,335,337,339,342,344,346,348,351,353,355],{"class":110,"line":311},9,[108,313,314],{"class":182},"        const",[108,316,317],{"class":122}," expected",[108,319,320],{"class":118}," =",[108,322,323],{"class":122}," p",[108,325,326],{"class":118},".",[108,328,329],{"class":122},"mode",[108,331,332],{"class":118}," ===",[108,334,138],{"class":118},[108,336,287],{"class":141},[108,338,290],{"class":118},[108,340,341],{"class":118}," ?",[108,343,138],{"class":118},[108,345,298],{"class":141},[108,347,290],{"class":118},[108,349,350],{"class":118}," :",[108,352,138],{"class":118},[108,354,287],{"class":141},[108,356,145],{"class":118},[108,358,360,363,366,369,372,374,376,379,382,385,387,390,392,395,397,399,401,403,405,408],{"class":110,"line":359},10,[108,361,362],{"class":114},"        return",[108,364,365],{"class":118}," `",[108,367,368],{"class":141},"Plugin \"",[108,370,371],{"class":118},"${",[108,373,66],{"class":122},[108,375,326],{"class":118},[108,377,378],{"class":122},"src",[108,380,381],{"class":118},"}",[108,383,384],{"class":141},"\" is ",[108,386,371],{"class":118},[108,388,389],{"class":122},"expected",[108,391,381],{"class":118},[108,393,394],{"class":141},"-only but was registered with mode \"",[108,396,371],{"class":118},[108,398,66],{"class":122},[108,400,326],{"class":118},[108,402,329],{"class":122},[108,404,381],{"class":118},[108,406,407],{"class":141},"\".",[108,409,410],{"class":118},"`\n",[108,412,414],{"class":110,"line":413},11,[108,415,416],{"class":118},"      },\n",[108,418,420,423,425,427,429,431,433,435,437,439,441,443,445,447,449,451,453,455],{"class":110,"line":419},12,[108,421,422],{"class":192},"      fix",[108,424,208],{"class":118},[108,426,259],{"class":118},[108,428,66],{"class":262},[108,430,208],{"class":118},[108,432,119],{"class":118},[108,434,280],{"class":204},[108,436,208],{"class":118},[108,438,138],{"class":118},[108,440,287],{"class":141},[108,442,290],{"class":118},[108,444,293],{"class":118},[108,446,138],{"class":118},[108,448,298],{"class":141},[108,450,290],{"class":118},[108,452,303],{"class":118},[108,454,306],{"class":182},[108,456,238],{"class":118},[108,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494],{"class":110,"line":459},13,[108,461,314],{"class":182},[108,463,317],{"class":122},[108,465,320],{"class":118},[108,467,323],{"class":122},[108,469,326],{"class":118},[108,471,329],{"class":122},[108,473,332],{"class":118},[108,475,138],{"class":118},[108,477,287],{"class":141},[108,479,290],{"class":118},[108,481,341],{"class":118},[108,483,138],{"class":118},[108,485,298],{"class":141},[108,487,290],{"class":118},[108,489,350],{"class":118},[108,491,138],{"class":118},[108,493,287],{"class":141},[108,495,145],{"class":118},[108,497,499,501,503,506,508,510,512,514],{"class":110,"line":498},14,[108,500,362],{"class":114},[108,502,365],{"class":118},[108,504,505],{"class":141},"Rename the file or register it with mode \"",[108,507,371],{"class":118},[108,509,389],{"class":122},[108,511,381],{"class":118},[108,513,407],{"class":141},[108,515,410],{"class":118},[108,517,519],{"class":110,"line":518},15,[108,520,416],{"class":118},[108,522,524],{"class":110,"line":523},16,[108,525,526],{"class":118},"    },\n",[108,528,530],{"class":110,"line":529},17,[108,531,532],{"class":118},"  },\n",[108,534,536,538],{"class":110,"line":535},18,[108,537,381],{"class":118},[108,539,540],{"class":122},")\n",[66,542,543],{},"The console reporter still prints in the browser console. The dev reporter adds the Vite dev-server copy.",[90,545,547],{"id":546},"vite-side","Vite side",[66,549,550],{},"Add the collector to the app consuming the browser code.",[98,552,555],{"className":100,"code":553,"filename":554,"language":103,"meta":104,"style":104},"import { nosticsCollector } from 'nostics\u002Funplugin\u002Fdev-server-collector'\nimport { defineConfig } from 'vite'\n\nexport default defineConfig({\n  plugins: [nosticsCollector.vite()],\n})\n","vite.config.ts",[79,556,557,577,597,601,614,632],{"__ignoreMap":104},[108,558,559,561,563,566,568,570,572,575],{"class":110,"line":111},[108,560,115],{"class":114},[108,562,119],{"class":118},[108,564,565],{"class":122}," nosticsCollector",[108,567,132],{"class":118},[108,569,135],{"class":114},[108,571,138],{"class":118},[108,573,574],{"class":141},"nostics\u002Funplugin\u002Fdev-server-collector",[108,576,145],{"class":118},[108,578,579,581,583,586,588,590,592,595],{"class":110,"line":148},[108,580,115],{"class":114},[108,582,119],{"class":118},[108,584,585],{"class":122}," defineConfig",[108,587,132],{"class":118},[108,589,135],{"class":114},[108,591,138],{"class":118},[108,593,594],{"class":141},"vite",[108,596,145],{"class":118},[108,598,599],{"class":110,"line":169},[108,600,173],{"emptyLinePlaceholder":172},[108,602,603,605,608,610,612],{"class":110,"line":176},[108,604,179],{"class":114},[108,606,607],{"class":114}," default",[108,609,585],{"class":192},[108,611,195],{"class":122},[108,613,198],{"class":118},[108,615,616,619,621,624,626,628,630],{"class":110,"line":201},[108,617,618],{"class":204},"  plugins",[108,620,208],{"class":118},[108,622,623],{"class":122}," [nosticsCollector",[108,625,326],{"class":118},[108,627,594],{"class":192},[108,629,224],{"class":122},[108,631,227],{"class":118},[108,633,634,636],{"class":110,"line":230},[108,635,381],{"class":118},[108,637,540],{"class":122},[66,639,640],{},"Start Vite and tail the log:",[98,642,646],{"className":643,"code":644,"language":645,"meta":104,"style":104},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","tail -f .nostics.log | jq .\n","bash",[79,647,648],{"__ignoreMap":104},[108,649,650,653,656,659,661,664],{"class":110,"line":111},[108,651,652],{"class":274},"tail",[108,654,655],{"class":141}," -f",[108,657,658],{"class":141}," .nostics.log",[108,660,293],{"class":118},[108,662,663],{"class":274}," jq",[108,665,666],{"class":141}," .\n",[66,668,669],{},"Each diagnostic is appended as one JSON line.",[90,671,673],{"id":672},"options","Options",[98,675,677],{"className":100,"code":676,"language":103,"meta":104,"style":104},"nosticsCollector.vite({\n  logFile: '.app-diagnostics.log',\n  debug: true,\n  excludeStackFrames: [\u002F\\\u002Fnode_modules\\\u002F\u002F, \u002F\\(node:\u002F],\n})\n",[79,678,679,691,707,720,760],{"__ignoreMap":104},[108,680,681,683,685,687,689],{"class":110,"line":111},[108,682,87],{"class":122},[108,684,326],{"class":118},[108,686,594],{"class":192},[108,688,195],{"class":122},[108,690,198],{"class":118},[108,692,693,696,698,700,703,705],{"class":110,"line":148},[108,694,695],{"class":204},"  logFile",[108,697,208],{"class":118},[108,699,138],{"class":118},[108,701,702],{"class":141},".app-diagnostics.log",[108,704,290],{"class":118},[108,706,227],{"class":118},[108,708,709,712,714,718],{"class":110,"line":169},[108,710,711],{"class":204},"  debug",[108,713,208],{"class":118},[108,715,717],{"class":716},"sfNiH"," true",[108,719,227],{"class":118},[108,721,722,725,727,729,732,735,738,740,742,744,747,750,753,755,758],{"class":110,"line":176},[108,723,724],{"class":204},"  excludeStackFrames",[108,726,208],{"class":118},[108,728,211],{"class":122},[108,730,731],{"class":118},"\u002F",[108,733,734],{"class":122},"\\\u002F",[108,736,737],{"class":141},"node_modules",[108,739,734],{"class":122},[108,741,731],{"class":118},[108,743,126],{"class":118},[108,745,746],{"class":118}," \u002F",[108,748,749],{"class":122},"\\(",[108,751,752],{"class":141},"node:",[108,754,731],{"class":118},[108,756,757],{"class":122},"]",[108,759,227],{"class":118},[108,761,762,764],{"class":110,"line":201},[108,763,381],{"class":118},[108,765,540],{"class":122},[767,768,769,785],"table",{},[770,771,772],"thead",{},[773,774,775,779,782],"tr",{},[776,777,778],"th",{},"Option",[776,780,781],{},"Default",[776,783,784],{},"Use",[786,787,788,804,819],"tbody",{},[773,789,790,796,801],{},[791,792,793],"td",{},[79,794,795],{},"logFile",[791,797,798],{},[79,799,800],{},"'.nostics.log'",[791,802,803],{},"File to append diagnostics to",[773,805,806,811,816],{},[791,807,808],{},[79,809,810],{},"debug",[791,812,813],{},[79,814,815],{},"!!process.env.DEBUG",[791,817,818],{},"Log collector activity in the Vite server",[773,820,821,826,831],{},[791,822,823],{},[79,824,825],{},"excludeStackFrames",[791,827,828],{},[79,829,830],{},"undefined",[791,832,833],{},"Remove matching stack frames before writing",[90,835,837],{"id":836},"vite-only","Vite only",[66,839,840,842,843,846,847,850],{},[79,841,87],{}," uses Vite ",[79,844,845],{},"configureServer"," and ",[79,848,849],{},"server.ws",". Other unplugin adapters exist because of the shared plugin shape, but they do nothing for this collector.",[66,852,853,854,857,858,861],{},"Use ",[79,855,856],{},"createFileReporter()"," directly for server-side Node code. Use ",[79,859,860],{},"createFetchReporter()"," or your own reporter for production telemetry.",[863,864,865],"style",{},"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 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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":104,"searchDepth":148,"depth":148,"links":867},[868,869,870,871],{"id":92,"depth":148,"text":93},{"id":546,"depth":148,"text":547},{"id":672,"depth":148,"text":673},{"id":836,"depth":148,"text":837},"Forward browser diagnostics from Vite dev to a local log file.","md",null,{},{"icon":39},{"title":36,"description":872},"xn1Bm7FaYMJRcclHkmg1WFpiYdfOVa3ODT0iSp7ThQA",[880,882],{"title":31,"path":32,"stem":33,"description":881,"icon":34,"children":-1},"Strip report-only diagnostics from production bundles.",{"title":46,"path":47,"stem":48,"description":883,"icon":49,"children":-1},"Publish stable docs pages for diagnostic codes.",1781110594583]