[{"data":1,"prerenderedAt":9772},["ShallowReactive",2],{"$fGCo9l1hMtNdUiA6QzdUX5X3kLqaWcC5t2kdz4LrvCvc":3,"versions":2028,"-docs-4-x-getting-started-upgrade":2032,"-docs-4-x-getting-started-upgrade-surround":9767},[4,1120,1939],{"title":5,"titleTemplate":6,"icon":7,"path":8,"stem":9,"children":10,"page":108},"Docs",null,"i-lucide-book-marked","/docs/3.x","docs/3.x",[11,109,246,426,907,999,1036,1078],{"title":12,"titleTemplate":13,"icon":14,"path":15,"stem":16,"children":17,"page":108},"Get Started","%s · Get Started with Nuxt","i-lucide-rocket","/docs/3.x/getting-started","docs/3.x/1.getting-started",[18,23,28,33,38,43,48,53,58,63,68,73,78,83,88,93,98,103],{"title":19,"path":20,"stem":21,"titleTemplate":6,"icon":22},"Introduction","/docs/3.x/getting-started/introduction","docs/3.x/1.getting-started/01.introduction","i-lucide-info",{"title":24,"path":25,"stem":26,"titleTemplate":6,"icon":27},"Installation","/docs/3.x/getting-started/installation","docs/3.x/1.getting-started/02.installation","i-lucide-play",{"title":29,"path":30,"stem":31,"titleTemplate":6,"icon":32},"Configuration","/docs/3.x/getting-started/configuration","docs/3.x/1.getting-started/03.configuration","i-lucide-cog",{"title":34,"path":35,"stem":36,"titleTemplate":6,"icon":37},"Views","/docs/3.x/getting-started/views","docs/3.x/1.getting-started/04.views","i-lucide-panels-top-left",{"title":39,"path":40,"stem":41,"titleTemplate":6,"icon":42},"Assets","/docs/3.x/getting-started/assets","docs/3.x/1.getting-started/05.assets","i-lucide-image",{"title":44,"path":45,"stem":46,"titleTemplate":6,"icon":47},"Styling","/docs/3.x/getting-started/styling","docs/3.x/1.getting-started/06.styling","i-lucide-palette",{"title":49,"path":50,"stem":51,"titleTemplate":6,"icon":52},"Routing","/docs/3.x/getting-started/routing","docs/3.x/1.getting-started/07.routing","i-lucide-milestone",{"title":54,"path":55,"stem":56,"titleTemplate":6,"icon":57},"SEO and Meta","/docs/3.x/getting-started/seo-meta","docs/3.x/1.getting-started/08.seo-meta","i-lucide-file-search",{"title":59,"path":60,"stem":61,"titleTemplate":6,"icon":62},"Transitions","/docs/3.x/getting-started/transitions","docs/3.x/1.getting-started/09.transitions","i-lucide-toggle-right",{"title":64,"path":65,"stem":66,"titleTemplate":6,"icon":67},"Data Fetching","/docs/3.x/getting-started/data-fetching","docs/3.x/1.getting-started/10.data-fetching","i-lucide-cable",{"title":69,"path":70,"stem":71,"titleTemplate":6,"icon":72},"State Management","/docs/3.x/getting-started/state-management","docs/3.x/1.getting-started/11.state-management","i-lucide-database",{"title":74,"path":75,"stem":76,"titleTemplate":6,"icon":77},"Error Handling","/docs/3.x/getting-started/error-handling","docs/3.x/1.getting-started/12.error-handling","i-lucide-bug-off",{"title":79,"path":80,"stem":81,"titleTemplate":6,"icon":82},"Server","/docs/3.x/getting-started/server","docs/3.x/1.getting-started/13.server","i-lucide-pc-case",{"title":84,"path":85,"stem":86,"titleTemplate":6,"icon":87},"Layers","/docs/3.x/getting-started/layers","docs/3.x/1.getting-started/14.layers","i-lucide-layers",{"title":89,"path":90,"stem":91,"titleTemplate":6,"icon":92},"Prerendering","/docs/3.x/getting-started/prerendering","docs/3.x/1.getting-started/15.prerendering","i-lucide-file-code-2",{"title":94,"path":95,"stem":96,"titleTemplate":6,"icon":97},"Deployment","/docs/3.x/getting-started/deployment","docs/3.x/1.getting-started/16.deployment","i-lucide-cloud",{"title":99,"path":100,"stem":101,"titleTemplate":6,"icon":102},"Testing","/docs/3.x/getting-started/testing","docs/3.x/1.getting-started/17.testing","i-lucide-circle-check",{"title":104,"path":105,"stem":106,"titleTemplate":6,"icon":107},"Upgrade Guide","/docs/3.x/getting-started/upgrade","docs/3.x/1.getting-started/18.upgrade","i-lucide-circle-arrow-up",false,{"title":110,"titleTemplate":111,"icon":112,"path":113,"stem":114,"children":115,"page":108},"Directory Structure","%s · Nuxt Directory Structure","i-vscode-icons-default-folder","/docs/3.x/directory-structure","docs/3.x/2.directory-structure",[116,121,126,131,136,141,146,151,156,161,165,170,174,179,184,189,194,199,204,209,214,218,223,228,232,236,241],{"title":117,"path":118,"stem":119,"titleTemplate":6,"icon":120},".nuxt","/docs/3.x/directory-structure/nuxt","docs/3.x/2.directory-structure/0.nuxt","i-vscode-icons-folder-type-temp",{"title":122,"path":123,"stem":124,"titleTemplate":6,"icon":125},".output","/docs/3.x/directory-structure/output","docs/3.x/2.directory-structure/0.output","i-vscode-icons-folder-type-package",{"title":127,"path":128,"stem":129,"titleTemplate":6,"icon":130},"assets","/docs/3.x/directory-structure/assets","docs/3.x/2.directory-structure/1.assets","i-vscode-icons-folder-type-asset",{"title":132,"path":133,"stem":134,"titleTemplate":6,"icon":135},"components","/docs/3.x/directory-structure/components","docs/3.x/2.directory-structure/1.components","i-vscode-icons-folder-type-component",{"title":137,"path":138,"stem":139,"titleTemplate":6,"icon":140},"composables","/docs/3.x/directory-structure/composables","docs/3.x/2.directory-structure/1.composables","i-vscode-icons-folder-type-src",{"title":142,"path":143,"stem":144,"titleTemplate":6,"icon":145},"content","/docs/3.x/directory-structure/content","docs/3.x/2.directory-structure/1.content","i-vscode-icons-folder-type-log",{"title":147,"path":148,"stem":149,"titleTemplate":6,"icon":150},"layers","/docs/3.x/directory-structure/layers","docs/3.x/2.directory-structure/1.layers","i-vscode-icons-folder-type-nuxt",{"title":152,"path":153,"stem":154,"titleTemplate":6,"icon":155},"layouts","/docs/3.x/directory-structure/layouts","docs/3.x/2.directory-structure/1.layouts","i-vscode-icons-folder-type-view",{"title":157,"path":158,"stem":159,"titleTemplate":6,"icon":160},"middleware","/docs/3.x/directory-structure/middleware","docs/3.x/2.directory-structure/1.middleware","i-vscode-icons-folder-type-middleware",{"title":162,"path":163,"stem":164,"titleTemplate":6,"icon":150},"modules","/docs/3.x/directory-structure/modules","docs/3.x/2.directory-structure/1.modules",{"title":166,"path":167,"stem":168,"titleTemplate":6,"icon":169},"node_modules","/docs/3.x/directory-structure/node_modules","docs/3.x/2.directory-structure/1.node_modules","i-vscode-icons-folder-type-node",{"title":171,"path":172,"stem":173,"titleTemplate":6,"icon":155},"pages","/docs/3.x/directory-structure/pages","docs/3.x/2.directory-structure/1.pages",{"title":175,"path":176,"stem":177,"titleTemplate":6,"icon":178},"plugins","/docs/3.x/directory-structure/plugins","docs/3.x/2.directory-structure/1.plugins","i-vscode-icons-folder-type-plugin",{"title":180,"path":181,"stem":182,"titleTemplate":6,"icon":183},"public","/docs/3.x/directory-structure/public","docs/3.x/2.directory-structure/1.public","i-vscode-icons-folder-type-public",{"title":185,"path":186,"stem":187,"titleTemplate":6,"icon":188},"server","/docs/3.x/directory-structure/server","docs/3.x/2.directory-structure/1.server","i-vscode-icons-folder-type-server",{"title":190,"path":191,"stem":192,"titleTemplate":6,"icon":193},"shared","/docs/3.x/directory-structure/shared","docs/3.x/2.directory-structure/1.shared","i-vscode-icons-folder-type-shared",{"title":195,"path":196,"stem":197,"titleTemplate":6,"icon":198},"utils","/docs/3.x/directory-structure/utils","docs/3.x/2.directory-structure/1.utils","i-vscode-icons-folder-type-tools",{"title":200,"path":201,"stem":202,"titleTemplate":6,"icon":203},".env","/docs/3.x/directory-structure/env","docs/3.x/2.directory-structure/2.env","i-vscode-icons-file-type-dotenv",{"title":205,"path":206,"stem":207,"titleTemplate":6,"icon":208},".gitignore","/docs/3.x/directory-structure/gitignore","docs/3.x/2.directory-structure/2.gitignore","i-vscode-icons-file-type-git",{"title":210,"path":211,"stem":212,"titleTemplate":6,"icon":213},".nuxtignore","/docs/3.x/directory-structure/nuxtignore","docs/3.x/2.directory-structure/2.nuxtignore","i-vscode-icons-file-type-nuxt",{"title":215,"path":216,"stem":217,"titleTemplate":6,"icon":213},".nuxtrc","/docs/3.x/directory-structure/nuxtrc","docs/3.x/2.directory-structure/2.nuxtrc",{"title":219,"path":220,"stem":221,"titleTemplate":6,"icon":222},"app.vue","/docs/3.x/directory-structure/app","docs/3.x/2.directory-structure/3.app","i-vscode-icons-file-type-vue",{"title":224,"path":225,"stem":226,"titleTemplate":6,"icon":227},"app.config.ts","/docs/3.x/directory-structure/app-config","docs/3.x/2.directory-structure/3.app-config","i-vscode-icons-file-type-light-config",{"title":229,"path":230,"stem":231,"titleTemplate":6,"icon":222},"error.vue","/docs/3.x/directory-structure/error","docs/3.x/2.directory-structure/3.error",{"title":233,"path":234,"stem":235,"titleTemplate":6,"icon":213},"nuxt.config.ts","/docs/3.x/directory-structure/nuxt-config","docs/3.x/2.directory-structure/3.nuxt-config",{"title":237,"path":238,"stem":239,"titleTemplate":6,"icon":240},"package.json","/docs/3.x/directory-structure/package","docs/3.x/2.directory-structure/3.package","i-vscode-icons-file-type-npm",{"title":242,"path":243,"stem":244,"titleTemplate":6,"icon":245},"tsconfig.json","/docs/3.x/directory-structure/tsconfig","docs/3.x/2.directory-structure/3.tsconfig","i-vscode-icons-file-type-tsconfig",{"title":247,"titleTemplate":6,"icon":248,"path":249,"stem":250,"children":251,"page":108},"Guide","i-lucide-book-open","/docs/3.x/guide","docs/3.x/3.guide",[252,287,306,321,356,379],{"title":253,"titleTemplate":254,"icon":255,"path":256,"stem":257,"children":258,"page":108},"Key Concepts","%s · Nuxt Concepts","i-lucide-medal","/docs/3.x/guide/concepts","docs/3.x/3.guide/1.concepts",[259,263,267,271,275,279,283],{"title":260,"path":261,"stem":262,"titleTemplate":6},"Rendering Modes","/docs/3.x/guide/concepts/rendering","docs/3.x/3.guide/1.concepts/1.rendering",{"title":264,"path":265,"stem":266,"titleTemplate":6},"Nuxt Lifecycle","/docs/3.x/guide/concepts/nuxt-lifecycle","docs/3.x/3.guide/1.concepts/2.nuxt-lifecycle",{"title":268,"path":269,"stem":270,"titleTemplate":6},"Auto-imports","/docs/3.x/guide/concepts/auto-imports","docs/3.x/3.guide/1.concepts/3.auto-imports",{"title":272,"path":273,"stem":274,"titleTemplate":6},"Server Engine","/docs/3.x/guide/concepts/server-engine","docs/3.x/3.guide/1.concepts/4.server-engine",{"title":276,"path":277,"stem":278,"titleTemplate":6},"Modules","/docs/3.x/guide/concepts/modules","docs/3.x/3.guide/1.concepts/5.modules",{"title":280,"path":281,"stem":282,"titleTemplate":6},"TypeScript","/docs/3.x/guide/concepts/typescript","docs/3.x/3.guide/1.concepts/8.typescript",{"title":284,"path":285,"stem":286,"titleTemplate":6},"Code Style","/docs/3.x/guide/concepts/code-style","docs/3.x/3.guide/1.concepts/9.code-style",{"title":288,"titleTemplate":289,"icon":290,"path":291,"stem":292,"children":293,"page":108},"Best Practices","%s · Best Practices","i-lucide-square-check","/docs/3.x/guide/best-practices","docs/3.x/3.guide/2.best-practices",[294,298,302],{"title":295,"path":296,"stem":297,"titleTemplate":6},"Nuxt and hydration","/docs/3.x/guide/best-practices/hydration","docs/3.x/3.guide/2.best-practices/hydration",{"title":299,"path":300,"stem":301,"titleTemplate":6},"Nuxt Performance","/docs/3.x/guide/best-practices/performance","docs/3.x/3.guide/2.best-practices/performance",{"title":303,"path":304,"stem":305,"titleTemplate":6},"Nuxt Plugins","/docs/3.x/guide/best-practices/plugins","docs/3.x/3.guide/2.best-practices/plugins",{"title":307,"titleTemplate":308,"icon":309,"path":310,"stem":311,"children":312,"page":108},"Working with AI","Working with AI: %s","i-lucide-bot","/docs/3.x/guide/ai","docs/3.x/3.guide/3.ai",[313,317],{"title":314,"path":315,"stem":316,"titleTemplate":6},"MCP Server","/docs/3.x/guide/ai/mcp","docs/3.x/3.guide/3.ai/1.mcp",{"title":318,"path":319,"stem":320,"titleTemplate":6},"LLMs.txt","/docs/3.x/guide/ai/llms-txt","docs/3.x/3.guide/3.ai/2.llms-txt",{"title":322,"titleTemplate":323,"icon":324,"path":325,"stem":326,"children":327,"page":108},"Module Author Guide","%s · Nuxt Modules Author Guide","i-lucide-box","/docs/3.x/guide/modules","docs/3.x/3.guide/4.modules",[328,332,336,340,344,348,352],{"title":329,"path":330,"stem":331,"titleTemplate":6},"Create Your First Module","/docs/3.x/guide/modules/getting-started","docs/3.x/3.guide/4.modules/1.getting-started",{"title":333,"path":334,"stem":335,"titleTemplate":6},"Understand Module Structure","/docs/3.x/guide/modules/module-anatomy","docs/3.x/3.guide/4.modules/2.module-anatomy",{"title":337,"path":338,"stem":339,"titleTemplate":6},"Add Plugins, Components & More","/docs/3.x/guide/modules/recipes-basics","docs/3.x/3.guide/4.modules/3.recipes-basics",{"title":341,"path":342,"stem":343,"titleTemplate":6},"Use Hooks & Extend Types","/docs/3.x/guide/modules/recipes-advanced","docs/3.x/3.guide/4.modules/4.recipes-advanced",{"title":345,"path":346,"stem":347,"titleTemplate":6},"Test Your Module","/docs/3.x/guide/modules/testing","docs/3.x/3.guide/4.modules/5.testing",{"title":349,"path":350,"stem":351,"titleTemplate":6},"Follow Best Practices","/docs/3.x/guide/modules/best-practices","docs/3.x/3.guide/4.modules/6.best-practices",{"title":353,"path":354,"stem":355,"titleTemplate":6},"Publish & Share Your Module","/docs/3.x/guide/modules/ecosystem","docs/3.x/3.guide/4.modules/7.ecosystem",{"title":357,"titleTemplate":358,"icon":359,"path":360,"stem":361,"children":362,"page":108},"Recipes","%s · Recipes","i-lucide-cooking-pot","/docs/3.x/guide/recipes","docs/3.x/3.guide/5.recipes",[363,367,371,375],{"title":364,"path":365,"stem":366,"titleTemplate":6},"Custom Routing","/docs/3.x/guide/recipes/custom-routing","docs/3.x/3.guide/5.recipes/1.custom-routing",{"title":368,"path":369,"stem":370,"titleTemplate":6},"Vite Plugins","/docs/3.x/guide/recipes/vite-plugin","docs/3.x/3.guide/5.recipes/2.vite-plugin",{"title":372,"path":373,"stem":374,"titleTemplate":6},"Custom useFetch","/docs/3.x/guide/recipes/custom-usefetch","docs/3.x/3.guide/5.recipes/3.custom-usefetch",{"title":376,"path":377,"stem":378,"titleTemplate":6},"Sessions and Authentication","/docs/3.x/guide/recipes/sessions-and-authentication","docs/3.x/3.guide/5.recipes/4.sessions-and-authentication",{"title":380,"titleTemplate":381,"icon":382,"path":383,"stem":384,"children":385,"page":108},"Going Further","%s · Nuxt Advanced","i-lucide-star","/docs/3.x/guide/going-further","docs/3.x/3.guide/6.going-further",[386,390,394,398,402,406,410,414,418,422],{"title":387,"path":388,"stem":389,"titleTemplate":6},"Custom Events","/docs/3.x/guide/going-further/events","docs/3.x/3.guide/6.going-further/1.events",{"title":391,"path":392,"stem":393,"titleTemplate":6},"Experimental Features","/docs/3.x/guide/going-further/experimental-features","docs/3.x/3.guide/6.going-further/1.experimental-features",{"title":395,"path":396,"stem":397,"titleTemplate":6},"Features","/docs/3.x/guide/going-further/features","docs/3.x/3.guide/6.going-further/1.features",{"title":399,"path":400,"stem":401,"titleTemplate":6},"Runtime Config","/docs/3.x/guide/going-further/runtime-config","docs/3.x/3.guide/6.going-further/10.runtime-config",{"title":403,"path":404,"stem":405,"titleTemplate":6},"Nightly Release Channel","/docs/3.x/guide/going-further/nightly-release-channel","docs/3.x/3.guide/6.going-further/11.nightly-release-channel",{"title":407,"path":408,"stem":409,"titleTemplate":6},"Lifecycle Hooks","/docs/3.x/guide/going-further/hooks","docs/3.x/3.guide/6.going-further/2.hooks",{"title":411,"path":412,"stem":413,"titleTemplate":6},"Nuxt Kit","/docs/3.x/guide/going-further/kit","docs/3.x/3.guide/6.going-further/4.kit",{"title":415,"path":416,"stem":417,"titleTemplate":6},"NuxtApp","/docs/3.x/guide/going-further/nuxt-app","docs/3.x/3.guide/6.going-further/6.nuxt-app",{"title":419,"path":420,"stem":421,"titleTemplate":6},"Authoring Nuxt Layers","/docs/3.x/guide/going-further/layers","docs/3.x/3.guide/6.going-further/7.layers",{"title":423,"path":424,"stem":425,"titleTemplate":6},"Debugging","/docs/3.x/guide/going-further/debugging","docs/3.x/3.guide/6.going-further/9.debugging",{"title":427,"titleTemplate":428,"icon":429,"path":430,"stem":431,"children":432,"page":108},"API","%s · Nuxt API","i-lucide-code-xml","/docs/3.x/api","docs/3.x/4.api",[433,499,622,745,816,889,902],{"title":434,"titleTemplate":435,"icon":324,"path":436,"stem":437,"children":438,"page":108},"Components","%s · Nuxt Components","/docs/3.x/api/components","docs/3.x/4.api/1.components",[439,443,447,451,455,459,463,467,471,475,479,483,487,491,495],{"title":440,"path":441,"stem":442,"titleTemplate":6},"\u003CClientOnly>","/docs/3.x/api/components/client-only","docs/3.x/4.api/1.components/1.client-only",{"title":444,"path":445,"stem":446,"titleTemplate":6},"\u003CDevOnly>","/docs/3.x/api/components/dev-only","docs/3.x/4.api/1.components/1.dev-only",{"title":448,"path":449,"stem":450,"titleTemplate":6},"\u003CNuxtClientFallback>","/docs/3.x/api/components/nuxt-client-fallback","docs/3.x/4.api/1.components/1.nuxt-client-fallback",{"title":452,"path":453,"stem":454,"titleTemplate":6},"\u003CNuxtPicture>","/docs/3.x/api/components/nuxt-picture","docs/3.x/4.api/1.components/10.nuxt-picture",{"title":456,"path":457,"stem":458,"titleTemplate":6},"\u003CTeleport>","/docs/3.x/api/components/teleports","docs/3.x/4.api/1.components/11.teleports",{"title":460,"path":461,"stem":462,"titleTemplate":6},"\u003CNuxtRouteAnnouncer>","/docs/3.x/api/components/nuxt-route-announcer","docs/3.x/4.api/1.components/12.nuxt-route-announcer",{"title":464,"path":465,"stem":466,"titleTemplate":6},"\u003CNuxtTime>","/docs/3.x/api/components/nuxt-time","docs/3.x/4.api/1.components/13.nuxt-time",{"title":468,"path":469,"stem":470,"titleTemplate":6},"\u003CNuxtPage>","/docs/3.x/api/components/nuxt-page","docs/3.x/4.api/1.components/2.nuxt-page",{"title":472,"path":473,"stem":474,"titleTemplate":6},"\u003CNuxtLayout>","/docs/3.x/api/components/nuxt-layout","docs/3.x/4.api/1.components/3.nuxt-layout",{"title":476,"path":477,"stem":478,"titleTemplate":6},"\u003CNuxtLink>","/docs/3.x/api/components/nuxt-link","docs/3.x/4.api/1.components/4.nuxt-link",{"title":480,"path":481,"stem":482,"titleTemplate":6},"\u003CNuxtLoadingIndicator>","/docs/3.x/api/components/nuxt-loading-indicator","docs/3.x/4.api/1.components/5.nuxt-loading-indicator",{"title":484,"path":485,"stem":486,"titleTemplate":6},"\u003CNuxtErrorBoundary>","/docs/3.x/api/components/nuxt-error-boundary","docs/3.x/4.api/1.components/6.nuxt-error-boundary",{"title":488,"path":489,"stem":490,"titleTemplate":6},"\u003CNuxtWelcome>","/docs/3.x/api/components/nuxt-welcome","docs/3.x/4.api/1.components/7.nuxt-welcome",{"title":492,"path":493,"stem":494,"titleTemplate":6},"\u003CNuxtIsland>","/docs/3.x/api/components/nuxt-island","docs/3.x/4.api/1.components/8.nuxt-island",{"title":496,"path":497,"stem":498,"titleTemplate":6},"\u003CNuxtImg>","/docs/3.x/api/components/nuxt-img","docs/3.x/4.api/1.components/9.nuxt-img",{"title":500,"titleTemplate":501,"icon":502,"path":503,"stem":504,"children":505,"page":108},"Composables","%s · Nuxt Composables","i-lucide-arrow-left-right","/docs/3.x/api/composables","docs/3.x/4.api/2.composables",[506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618],{"title":507,"path":508,"stem":509,"titleTemplate":6},"onPrehydrate","/docs/3.x/api/composables/on-prehydrate","docs/3.x/4.api/2.composables/on-prehydrate",{"title":511,"path":512,"stem":513,"titleTemplate":6},"useAppConfig","/docs/3.x/api/composables/use-app-config","docs/3.x/4.api/2.composables/use-app-config",{"title":515,"path":516,"stem":517,"titleTemplate":6},"useAsyncData","/docs/3.x/api/composables/use-async-data","docs/3.x/4.api/2.composables/use-async-data",{"title":519,"path":520,"stem":521,"titleTemplate":6},"useCookie","/docs/3.x/api/composables/use-cookie","docs/3.x/4.api/2.composables/use-cookie",{"title":523,"path":524,"stem":525,"titleTemplate":6},"useError","/docs/3.x/api/composables/use-error","docs/3.x/4.api/2.composables/use-error",{"title":527,"path":528,"stem":529,"titleTemplate":6},"useFetch","/docs/3.x/api/composables/use-fetch","docs/3.x/4.api/2.composables/use-fetch",{"title":531,"path":532,"stem":533,"titleTemplate":6},"useHead","/docs/3.x/api/composables/use-head","docs/3.x/4.api/2.composables/use-head",{"title":535,"path":536,"stem":537,"titleTemplate":6},"useHeadSafe","/docs/3.x/api/composables/use-head-safe","docs/3.x/4.api/2.composables/use-head-safe",{"title":539,"path":540,"stem":541,"titleTemplate":6},"useHydration","/docs/3.x/api/composables/use-hydration","docs/3.x/4.api/2.composables/use-hydration",{"title":543,"path":544,"stem":545,"titleTemplate":6},"useLazyAsyncData","/docs/3.x/api/composables/use-lazy-async-data","docs/3.x/4.api/2.composables/use-lazy-async-data",{"title":547,"path":548,"stem":549,"titleTemplate":6},"useLazyFetch","/docs/3.x/api/composables/use-lazy-fetch","docs/3.x/4.api/2.composables/use-lazy-fetch",{"title":551,"path":552,"stem":553,"titleTemplate":6},"useLoadingIndicator","/docs/3.x/api/composables/use-loading-indicator","docs/3.x/4.api/2.composables/use-loading-indicator",{"title":555,"path":556,"stem":557,"titleTemplate":6},"useNuxtApp","/docs/3.x/api/composables/use-nuxt-app","docs/3.x/4.api/2.composables/use-nuxt-app",{"title":559,"path":560,"stem":561,"titleTemplate":6},"useNuxtData","/docs/3.x/api/composables/use-nuxt-data","docs/3.x/4.api/2.composables/use-nuxt-data",{"title":563,"path":564,"stem":565,"titleTemplate":6},"usePreviewMode","/docs/3.x/api/composables/use-preview-mode","docs/3.x/4.api/2.composables/use-preview-mode",{"title":567,"path":568,"stem":569,"titleTemplate":6},"useRequestEvent","/docs/3.x/api/composables/use-request-event","docs/3.x/4.api/2.composables/use-request-event",{"title":571,"path":572,"stem":573,"titleTemplate":6},"useRequestFetch","/docs/3.x/api/composables/use-request-fetch","docs/3.x/4.api/2.composables/use-request-fetch",{"title":575,"path":576,"stem":577,"titleTemplate":6},"useRequestHeader","/docs/3.x/api/composables/use-request-header","docs/3.x/4.api/2.composables/use-request-header",{"title":579,"path":580,"stem":581,"titleTemplate":6},"useRequestHeaders","/docs/3.x/api/composables/use-request-headers","docs/3.x/4.api/2.composables/use-request-headers",{"title":583,"path":584,"stem":585,"titleTemplate":6},"useRequestURL","/docs/3.x/api/composables/use-request-url","docs/3.x/4.api/2.composables/use-request-url",{"title":587,"path":588,"stem":589,"titleTemplate":6},"useResponseHeader","/docs/3.x/api/composables/use-response-header","docs/3.x/4.api/2.composables/use-response-header",{"title":591,"path":592,"stem":593,"titleTemplate":6},"useRoute","/docs/3.x/api/composables/use-route","docs/3.x/4.api/2.composables/use-route",{"title":595,"path":596,"stem":597,"titleTemplate":6},"useRouteAnnouncer","/docs/3.x/api/composables/use-route-announcer","docs/3.x/4.api/2.composables/use-route-announcer",{"title":599,"path":600,"stem":601,"titleTemplate":6},"useRouter","/docs/3.x/api/composables/use-router","docs/3.x/4.api/2.composables/use-router",{"title":603,"path":604,"stem":605,"titleTemplate":6},"useRuntimeConfig","/docs/3.x/api/composables/use-runtime-config","docs/3.x/4.api/2.composables/use-runtime-config",{"title":607,"path":608,"stem":609,"titleTemplate":6},"useRuntimeHook","/docs/3.x/api/composables/use-runtime-hook","docs/3.x/4.api/2.composables/use-runtime-hook",{"title":611,"path":612,"stem":613,"titleTemplate":6},"useSeoMeta","/docs/3.x/api/composables/use-seo-meta","docs/3.x/4.api/2.composables/use-seo-meta",{"title":615,"path":616,"stem":617,"titleTemplate":6},"useServerSeoMeta","/docs/3.x/api/composables/use-server-seo-meta","docs/3.x/4.api/2.composables/use-server-seo-meta",{"title":619,"path":620,"stem":621,"titleTemplate":6},"useState","/docs/3.x/api/composables/use-state","docs/3.x/4.api/2.composables/use-state",{"title":623,"titleTemplate":624,"icon":625,"path":626,"stem":627,"children":628,"page":108},"Utils","%s · Nuxt Utils","i-lucide-square-function","/docs/3.x/api/utils","docs/3.x/4.api/3.utils",[629,633,637,641,645,649,653,657,661,665,669,673,677,681,685,689,693,697,701,705,709,713,717,721,725,729,733,737,741],{"title":630,"path":631,"stem":632,"titleTemplate":6},"$fetch","/docs/3.x/api/utils/dollarfetch","docs/3.x/4.api/3.utils/$fetch",{"title":634,"path":635,"stem":636,"titleTemplate":6},"abortNavigation","/docs/3.x/api/utils/abort-navigation","docs/3.x/4.api/3.utils/abort-navigation",{"title":638,"path":639,"stem":640,"titleTemplate":6},"addRouteMiddleware","/docs/3.x/api/utils/add-route-middleware","docs/3.x/4.api/3.utils/add-route-middleware",{"title":642,"path":643,"stem":644,"titleTemplate":6},"callOnce","/docs/3.x/api/utils/call-once","docs/3.x/4.api/3.utils/call-once",{"title":646,"path":647,"stem":648,"titleTemplate":6},"clearError","/docs/3.x/api/utils/clear-error","docs/3.x/4.api/3.utils/clear-error",{"title":650,"path":651,"stem":652,"titleTemplate":6},"clearNuxtData","/docs/3.x/api/utils/clear-nuxt-data","docs/3.x/4.api/3.utils/clear-nuxt-data",{"title":654,"path":655,"stem":656,"titleTemplate":6},"clearNuxtState","/docs/3.x/api/utils/clear-nuxt-state","docs/3.x/4.api/3.utils/clear-nuxt-state",{"title":658,"path":659,"stem":660,"titleTemplate":6},"createError","/docs/3.x/api/utils/create-error","docs/3.x/4.api/3.utils/create-error",{"title":662,"path":663,"stem":664,"titleTemplate":6},"defineLazyHydrationComponent","/docs/3.x/api/utils/define-lazy-hydration-component","docs/3.x/4.api/3.utils/define-lazy-hydration-component",{"title":666,"path":667,"stem":668,"titleTemplate":6},"defineNuxtComponent","/docs/3.x/api/utils/define-nuxt-component","docs/3.x/4.api/3.utils/define-nuxt-component",{"title":670,"path":671,"stem":672,"titleTemplate":6},"defineNuxtPlugin","/docs/3.x/api/utils/define-nuxt-plugin","docs/3.x/4.api/3.utils/define-nuxt-plugin",{"title":674,"path":675,"stem":676,"titleTemplate":6},"defineNuxtRouteMiddleware","/docs/3.x/api/utils/define-nuxt-route-middleware","docs/3.x/4.api/3.utils/define-nuxt-route-middleware",{"title":678,"path":679,"stem":680,"titleTemplate":6},"definePageMeta","/docs/3.x/api/utils/define-page-meta","docs/3.x/4.api/3.utils/define-page-meta",{"title":682,"path":683,"stem":684,"titleTemplate":6},"defineRouteRules","/docs/3.x/api/utils/define-route-rules","docs/3.x/4.api/3.utils/define-route-rules",{"title":686,"path":687,"stem":688,"titleTemplate":6},"navigateTo","/docs/3.x/api/utils/navigate-to","docs/3.x/4.api/3.utils/navigate-to",{"title":690,"path":691,"stem":692,"titleTemplate":6},"onBeforeRouteLeave","/docs/3.x/api/utils/on-before-route-leave","docs/3.x/4.api/3.utils/on-before-route-leave",{"title":694,"path":695,"stem":696,"titleTemplate":6},"onBeforeRouteUpdate","/docs/3.x/api/utils/on-before-route-update","docs/3.x/4.api/3.utils/on-before-route-update",{"title":698,"path":699,"stem":700,"titleTemplate":6},"onNuxtReady","/docs/3.x/api/utils/on-nuxt-ready","docs/3.x/4.api/3.utils/on-nuxt-ready",{"title":702,"path":703,"stem":704,"titleTemplate":6},"prefetchComponents","/docs/3.x/api/utils/prefetch-components","docs/3.x/4.api/3.utils/prefetch-components",{"title":706,"path":707,"stem":708,"titleTemplate":6},"preloadComponents","/docs/3.x/api/utils/preload-components","docs/3.x/4.api/3.utils/preload-components",{"title":710,"path":711,"stem":712,"titleTemplate":6},"preloadRouteComponents","/docs/3.x/api/utils/preload-route-components","docs/3.x/4.api/3.utils/preload-route-components",{"title":714,"path":715,"stem":716,"titleTemplate":6},"prerenderRoutes","/docs/3.x/api/utils/prerender-routes","docs/3.x/4.api/3.utils/prerender-routes",{"title":718,"path":719,"stem":720,"titleTemplate":6},"refreshCookie","/docs/3.x/api/utils/refresh-cookie","docs/3.x/4.api/3.utils/refresh-cookie",{"title":722,"path":723,"stem":724,"titleTemplate":6},"refreshNuxtData","/docs/3.x/api/utils/refresh-nuxt-data","docs/3.x/4.api/3.utils/refresh-nuxt-data",{"title":726,"path":727,"stem":728,"titleTemplate":6},"reloadNuxtApp","/docs/3.x/api/utils/reload-nuxt-app","docs/3.x/4.api/3.utils/reload-nuxt-app",{"title":730,"path":731,"stem":732,"titleTemplate":6},"setPageLayout","/docs/3.x/api/utils/set-page-layout","docs/3.x/4.api/3.utils/set-page-layout",{"title":734,"path":735,"stem":736,"titleTemplate":6},"setResponseStatus","/docs/3.x/api/utils/set-response-status","docs/3.x/4.api/3.utils/set-response-status",{"title":738,"path":739,"stem":740,"titleTemplate":6},"showError","/docs/3.x/api/utils/show-error","docs/3.x/4.api/3.utils/show-error",{"title":742,"path":743,"stem":744,"titleTemplate":6},"updateAppConfig","/docs/3.x/api/utils/update-app-config","docs/3.x/4.api/3.utils/update-app-config",{"title":746,"titleTemplate":747,"icon":748,"path":749,"stem":750,"children":751,"page":108},"Commands","%s · Nuxt Commands","i-lucide-square-terminal","/docs/3.x/api/commands","docs/3.x/4.api/4.commands",[752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812],{"title":753,"path":754,"stem":755,"titleTemplate":6},"nuxt add","/docs/3.x/api/commands/add","docs/3.x/4.api/4.commands/add",{"title":757,"path":758,"stem":759,"titleTemplate":6},"nuxt analyze","/docs/3.x/api/commands/analyze","docs/3.x/4.api/4.commands/analyze",{"title":761,"path":762,"stem":763,"titleTemplate":6},"nuxt build","/docs/3.x/api/commands/build","docs/3.x/4.api/4.commands/build",{"title":765,"path":766,"stem":767,"titleTemplate":6},"nuxt build-module","/docs/3.x/api/commands/build-module","docs/3.x/4.api/4.commands/build-module",{"title":769,"path":770,"stem":771,"titleTemplate":6},"nuxt cleanup","/docs/3.x/api/commands/cleanup","docs/3.x/4.api/4.commands/cleanup",{"title":773,"path":774,"stem":775,"titleTemplate":6},"nuxt dev","/docs/3.x/api/commands/dev","docs/3.x/4.api/4.commands/dev",{"title":777,"path":778,"stem":779,"titleTemplate":6},"nuxt devtools","/docs/3.x/api/commands/devtools","docs/3.x/4.api/4.commands/devtools",{"title":781,"path":782,"stem":783,"titleTemplate":6},"nuxt generate","/docs/3.x/api/commands/generate","docs/3.x/4.api/4.commands/generate",{"title":785,"path":786,"stem":787,"titleTemplate":6},"nuxt info","/docs/3.x/api/commands/info","docs/3.x/4.api/4.commands/info",{"title":789,"path":790,"stem":791,"titleTemplate":6},"create nuxt","/docs/3.x/api/commands/init","docs/3.x/4.api/4.commands/init",{"title":793,"path":794,"stem":795,"titleTemplate":6},"nuxt module","/docs/3.x/api/commands/module","docs/3.x/4.api/4.commands/module",{"title":797,"path":798,"stem":799,"titleTemplate":6},"nuxt prepare","/docs/3.x/api/commands/prepare","docs/3.x/4.api/4.commands/prepare",{"title":801,"path":802,"stem":803,"titleTemplate":6},"nuxt preview","/docs/3.x/api/commands/preview","docs/3.x/4.api/4.commands/preview",{"title":805,"path":806,"stem":807,"titleTemplate":6},"nuxt test","/docs/3.x/api/commands/test","docs/3.x/4.api/4.commands/test",{"title":809,"path":810,"stem":811,"titleTemplate":6},"nuxt typecheck","/docs/3.x/api/commands/typecheck","docs/3.x/4.api/4.commands/typecheck",{"title":813,"path":814,"stem":815,"titleTemplate":6},"nuxt upgrade","/docs/3.x/api/commands/upgrade","docs/3.x/4.api/4.commands/upgrade",{"title":411,"titleTemplate":817,"icon":818,"path":819,"stem":820,"children":821,"page":108},"%s · Nuxt Kit","i-lucide-package","/docs/3.x/api/kit","docs/3.x/4.api/5.kit",[822,825,828,832,836,840,844,848,852,855,859,863,866,869,873,877,881,885],{"title":276,"path":823,"stem":824,"titleTemplate":6},"/docs/3.x/api/kit/modules","docs/3.x/4.api/5.kit/1.modules",{"title":399,"path":826,"stem":827,"titleTemplate":6},"/docs/3.x/api/kit/runtime-config","docs/3.x/4.api/5.kit/10.runtime-config",{"title":829,"path":830,"stem":831,"titleTemplate":6},"Templates","/docs/3.x/api/kit/templates","docs/3.x/4.api/5.kit/10.templates",{"title":833,"path":834,"stem":835,"titleTemplate":6},"Nitro","/docs/3.x/api/kit/nitro","docs/3.x/4.api/5.kit/11.nitro",{"title":837,"path":838,"stem":839,"titleTemplate":6},"Resolving","/docs/3.x/api/kit/resolving","docs/3.x/4.api/5.kit/12.resolving",{"title":841,"path":842,"stem":843,"titleTemplate":6},"Logging","/docs/3.x/api/kit/logging","docs/3.x/4.api/5.kit/13.logging",{"title":845,"path":846,"stem":847,"titleTemplate":6},"Builder","/docs/3.x/api/kit/builder","docs/3.x/4.api/5.kit/14.builder",{"title":849,"path":850,"stem":851,"titleTemplate":6},"Examples","/docs/3.x/api/kit/examples","docs/3.x/4.api/5.kit/15.examples",{"title":84,"path":853,"stem":854,"titleTemplate":6},"/docs/3.x/api/kit/layers","docs/3.x/4.api/5.kit/16.layers",{"title":856,"path":857,"stem":858,"titleTemplate":6},"Programmatic Usage","/docs/3.x/api/kit/programmatic","docs/3.x/4.api/5.kit/2.programmatic",{"title":860,"path":861,"stem":862,"titleTemplate":6},"Compatibility","/docs/3.x/api/kit/compatibility","docs/3.x/4.api/5.kit/3.compatibility",{"title":268,"path":864,"stem":865,"titleTemplate":6},"/docs/3.x/api/kit/autoimports","docs/3.x/4.api/5.kit/4.autoimports",{"title":434,"path":867,"stem":868,"titleTemplate":6},"/docs/3.x/api/kit/components","docs/3.x/4.api/5.kit/5.components",{"title":870,"path":871,"stem":872,"titleTemplate":6},"Context","/docs/3.x/api/kit/context","docs/3.x/4.api/5.kit/6.context",{"title":874,"path":875,"stem":876,"titleTemplate":6},"Pages","/docs/3.x/api/kit/pages","docs/3.x/4.api/5.kit/7.pages",{"title":878,"path":879,"stem":880,"titleTemplate":6},"Layout","/docs/3.x/api/kit/layout","docs/3.x/4.api/5.kit/8.layout",{"title":882,"path":883,"stem":884,"titleTemplate":6},"Head","/docs/3.x/api/kit/head","docs/3.x/4.api/5.kit/9.head",{"title":886,"path":887,"stem":888,"titleTemplate":6},"Plugins","/docs/3.x/api/kit/plugins","docs/3.x/4.api/5.kit/9.plugins",{"title":890,"titleTemplate":6,"icon":891,"path":892,"stem":893,"children":894,"page":108},"Advanced","i-lucide-brain","/docs/3.x/api/advanced","docs/3.x/4.api/6.advanced",[895,898],{"title":407,"path":896,"stem":897,"titleTemplate":6},"/docs/3.x/api/advanced/hooks","docs/3.x/4.api/6.advanced/1.hooks",{"title":899,"path":900,"stem":901,"titleTemplate":6},"Import meta","/docs/3.x/api/advanced/import-meta","docs/3.x/4.api/6.advanced/2.import-meta",{"title":903,"path":904,"stem":905,"titleTemplate":906,"icon":32},"Nuxt Configuration","/docs/3.x/api/nuxt-config","docs/3.x/4.api/6.nuxt-config","%s",{"title":849,"titleTemplate":908,"icon":909,"path":910,"stem":911,"children":912,"page":108},"%s · Nuxt Examples","i-lucide-app-window-mac","/docs/3.x/examples","docs/3.x/4.examples",[913,917,939,954,990],{"title":914,"path":915,"stem":916,"titleTemplate":6},"Hello World","/docs/3.x/examples/hello-world","docs/3.x/4.examples/0.hello-world",{"title":395,"path":918,"stem":919,"children":920,"page":108},"/docs/3.x/examples/features","docs/3.x/4.examples/1.features",[921,925,928,931,935],{"title":922,"path":923,"stem":924,"titleTemplate":6},"Auto Imports","/docs/3.x/examples/features/auto-imports","docs/3.x/4.examples/1.features/1.auto-imports",{"title":64,"path":926,"stem":927,"titleTemplate":6},"/docs/3.x/examples/features/data-fetching","docs/3.x/4.examples/1.features/2.data-fetching",{"title":69,"path":929,"stem":930,"titleTemplate":6},"/docs/3.x/examples/features/state-management","docs/3.x/4.examples/1.features/3.state-management",{"title":932,"path":933,"stem":934,"titleTemplate":6},"Meta Tags","/docs/3.x/examples/features/meta-tags","docs/3.x/4.examples/1.features/4.meta-tags",{"title":936,"path":937,"stem":938,"titleTemplate":6},"Layouts","/docs/3.x/examples/features/layouts","docs/3.x/4.examples/1.features/5.layouts",{"title":49,"path":940,"stem":941,"children":942,"page":108},"/docs/3.x/examples/routing","docs/3.x/4.examples/2.routing",[943,947,950],{"title":944,"path":945,"stem":946,"titleTemplate":6},"Middleware","/docs/3.x/examples/routing/middleware","docs/3.x/4.examples/2.routing/middleware",{"title":874,"path":948,"stem":949,"titleTemplate":6},"/docs/3.x/examples/routing/pages","docs/3.x/4.examples/2.routing/pages",{"title":951,"path":952,"stem":953,"titleTemplate":6},"Universal Router","/docs/3.x/examples/routing/universal-router","docs/3.x/4.examples/2.routing/universal-router",{"title":890,"path":955,"stem":956,"children":957,"page":108},"/docs/3.x/examples/advanced","docs/3.x/4.examples/4.advanced",[958,961,964,968,972,976,980,983,986],{"title":84,"path":959,"stem":960,"titleTemplate":6},"/docs/3.x/examples/advanced/config-extends","docs/3.x/4.examples/4.advanced/config-extends",{"title":74,"path":962,"stem":963,"titleTemplate":6},"/docs/3.x/examples/advanced/error-handling","docs/3.x/4.examples/4.advanced/error-handling",{"title":965,"path":966,"stem":967,"titleTemplate":6},"JSX / TSX","/docs/3.x/examples/advanced/jsx","docs/3.x/4.examples/4.advanced/jsx",{"title":969,"path":970,"stem":971,"titleTemplate":6},"Locale","/docs/3.x/examples/advanced/locale","docs/3.x/4.examples/4.advanced/locale",{"title":973,"path":974,"stem":975,"titleTemplate":6},"Module Extend Pages","/docs/3.x/examples/advanced/module-extend-pages","docs/3.x/4.examples/4.advanced/module-extend-pages",{"title":977,"path":978,"stem":979,"titleTemplate":6},"Teleport","/docs/3.x/examples/advanced/teleport","docs/3.x/4.examples/4.advanced/teleport",{"title":99,"path":981,"stem":982,"titleTemplate":6},"/docs/3.x/examples/advanced/testing","docs/3.x/4.examples/4.advanced/testing",{"title":519,"path":984,"stem":985,"titleTemplate":6},"/docs/3.x/examples/advanced/use-cookie","docs/3.x/4.examples/4.advanced/use-cookie",{"title":987,"path":988,"stem":989,"titleTemplate":6},"Use Custom Fetch Composable","/docs/3.x/examples/advanced/use-custom-fetch-composable","docs/3.x/4.examples/4.advanced/use-custom-fetch-composable",{"title":991,"path":992,"stem":993,"children":994,"page":108},"Experimental","/docs/3.x/examples/experimental","docs/3.x/4.examples/7.experimental",[995],{"title":996,"path":997,"stem":998,"titleTemplate":6},"WASM","/docs/3.x/examples/experimental/wasm","docs/3.x/4.examples/7.experimental/wasm",{"title":1000,"titleTemplate":1001,"icon":1002,"path":1003,"stem":1004,"children":1005,"page":108},"Community","%s · Nuxt Community","i-lucide-messages-square","/docs/3.x/community","docs/3.x/5.community",[1006,1011,1016,1021,1026,1031],{"title":1007,"path":1008,"stem":1009,"titleTemplate":6,"icon":1010},"Getting Help","/docs/3.x/community/getting-help","docs/3.x/5.community/2.getting-help","i-lucide-life-buoy",{"title":1012,"path":1013,"stem":1014,"titleTemplate":6,"icon":1015},"Reporting Bugs","/docs/3.x/community/reporting-bugs","docs/3.x/5.community/3.reporting-bugs","i-lucide-bug",{"title":1017,"path":1018,"stem":1019,"titleTemplate":6,"icon":1020},"Contribution","/docs/3.x/community/contribution","docs/3.x/5.community/4.contribution","i-lucide-git-pull-request",{"title":1022,"path":1023,"stem":1024,"titleTemplate":6,"icon":1025},"Framework","/docs/3.x/community/framework-contribution","docs/3.x/5.community/5.framework-contribution","i-lucide-github",{"title":1027,"path":1028,"stem":1029,"titleTemplate":6,"icon":1030},"Roadmap","/docs/3.x/community/roadmap","docs/3.x/5.community/6.roadmap","i-lucide-map",{"title":1032,"path":1033,"stem":1034,"titleTemplate":6,"icon":1035},"Releases","/docs/3.x/community/changelog","docs/3.x/5.community/7.changelog","i-lucide-bell-dot",{"title":1037,"titleTemplate":1038,"icon":1039,"path":1040,"stem":1041,"children":1042,"page":108},"Migrate to Nuxt Bridge","Migrate to Nuxt Bridge: %s","i-lucide-ship","/docs/3.x/bridge","docs/3.x/6.bridge",[1043,1047,1050,1053,1057,1061,1065,1068,1071,1074],{"title":1044,"path":1045,"stem":1046,"titleTemplate":6},"Overview","/docs/3.x/bridge/overview","docs/3.x/6.bridge/1.overview",{"title":29,"path":1048,"stem":1049,"titleTemplate":6},"/docs/3.x/bridge/configuration","docs/3.x/6.bridge/10.configuration",{"title":280,"path":1051,"stem":1052,"titleTemplate":6},"/docs/3.x/bridge/typescript","docs/3.x/6.bridge/2.typescript",{"title":1054,"path":1055,"stem":1056,"titleTemplate":6},"Legacy Composition API","/docs/3.x/bridge/bridge-composition-api","docs/3.x/6.bridge/3.bridge-composition-api",{"title":1058,"path":1059,"stem":1060,"titleTemplate":6},"Plugins and Middleware","/docs/3.x/bridge/plugins-and-middleware","docs/3.x/6.bridge/4.plugins-and-middleware",{"title":1062,"path":1063,"stem":1064,"titleTemplate":6},"New Composition API","/docs/3.x/bridge/nuxt3-compatible-api","docs/3.x/6.bridge/5.nuxt3-compatible-api",{"title":932,"path":1066,"stem":1067,"titleTemplate":6},"/docs/3.x/bridge/meta","docs/3.x/6.bridge/6.meta",{"title":399,"path":1069,"stem":1070,"titleTemplate":6},"/docs/3.x/bridge/runtime-config","docs/3.x/6.bridge/7.runtime-config",{"title":833,"path":1072,"stem":1073,"titleTemplate":6},"/docs/3.x/bridge/nitro","docs/3.x/6.bridge/8.nitro",{"title":1075,"path":1076,"stem":1077,"titleTemplate":6},"Vite","/docs/3.x/bridge/vite","docs/3.x/6.bridge/9.vite",{"title":1079,"titleTemplate":1080,"icon":107,"path":1081,"stem":1082,"children":1083,"page":108},"Migrate to Nuxt 3","Migrate to Nuxt 3: %s","/docs/3.x/migration","docs/3.x/7.migration",[1084,1087,1091,1094,1097,1100,1103,1106,1109,1113,1117],{"title":1044,"path":1085,"stem":1086,"titleTemplate":6},"/docs/3.x/migration/overview","docs/3.x/7.migration/1.overview",{"title":1088,"path":1089,"stem":1090,"titleTemplate":6},"Build Tooling","/docs/3.x/migration/bundling","docs/3.x/7.migration/10.bundling",{"title":79,"path":1092,"stem":1093,"titleTemplate":6},"/docs/3.x/migration/server","docs/3.x/7.migration/11.server",{"title":29,"path":1095,"stem":1096,"titleTemplate":6},"/docs/3.x/migration/configuration","docs/3.x/7.migration/2.configuration",{"title":276,"path":1098,"stem":1099,"titleTemplate":6},"/docs/3.x/migration/module-authors","docs/3.x/7.migration/20.module-authors",{"title":922,"path":1101,"stem":1102,"titleTemplate":6},"/docs/3.x/migration/auto-imports","docs/3.x/7.migration/3.auto-imports",{"title":932,"path":1104,"stem":1105,"titleTemplate":6},"/docs/3.x/migration/meta","docs/3.x/7.migration/4.meta",{"title":1058,"path":1107,"stem":1108,"titleTemplate":6},"/docs/3.x/migration/plugins-and-middleware","docs/3.x/7.migration/5.plugins-and-middleware",{"title":1110,"path":1111,"stem":1112,"titleTemplate":6},"Pages and Layouts","/docs/3.x/migration/pages-and-layouts","docs/3.x/7.migration/6.pages-and-layouts",{"title":1114,"path":1115,"stem":1116,"titleTemplate":6},"Component Options","/docs/3.x/migration/component-options","docs/3.x/7.migration/7.component-options",{"title":399,"path":1118,"stem":1119,"titleTemplate":6},"/docs/3.x/migration/runtime-config","docs/3.x/7.migration/8.runtime-config",{"title":5,"titleTemplate":6,"icon":7,"path":1121,"stem":1122,"children":1123,"page":108},"/docs/4.x","docs/4.x",[1124,1182,1276,1403,1769,1846,1868,1902],{"title":12,"titleTemplate":13,"icon":14,"path":1125,"stem":1126,"children":1127,"page":108},"/docs/4.x/getting-started","docs/4.x/1.getting-started",[1128,1131,1134,1137,1140,1143,1146,1149,1152,1155,1158,1161,1164,1167,1170,1173,1176,1179],{"title":19,"path":1129,"stem":1130,"titleTemplate":6,"icon":22},"/docs/4.x/getting-started/introduction","docs/4.x/1.getting-started/01.introduction",{"title":24,"path":1132,"stem":1133,"titleTemplate":6,"icon":27},"/docs/4.x/getting-started/installation","docs/4.x/1.getting-started/02.installation",{"title":29,"path":1135,"stem":1136,"titleTemplate":6,"icon":32},"/docs/4.x/getting-started/configuration","docs/4.x/1.getting-started/03.configuration",{"title":34,"path":1138,"stem":1139,"titleTemplate":6,"icon":37},"/docs/4.x/getting-started/views","docs/4.x/1.getting-started/04.views",{"title":39,"path":1141,"stem":1142,"titleTemplate":6,"icon":42},"/docs/4.x/getting-started/assets","docs/4.x/1.getting-started/05.assets",{"title":44,"path":1144,"stem":1145,"titleTemplate":6,"icon":47},"/docs/4.x/getting-started/styling","docs/4.x/1.getting-started/06.styling",{"title":49,"path":1147,"stem":1148,"titleTemplate":6,"icon":52},"/docs/4.x/getting-started/routing","docs/4.x/1.getting-started/07.routing",{"title":54,"path":1150,"stem":1151,"titleTemplate":6,"icon":57},"/docs/4.x/getting-started/seo-meta","docs/4.x/1.getting-started/08.seo-meta",{"title":59,"path":1153,"stem":1154,"titleTemplate":6,"icon":62},"/docs/4.x/getting-started/transitions","docs/4.x/1.getting-started/09.transitions",{"title":64,"path":1156,"stem":1157,"titleTemplate":6,"icon":67},"/docs/4.x/getting-started/data-fetching","docs/4.x/1.getting-started/10.data-fetching",{"title":69,"path":1159,"stem":1160,"titleTemplate":6,"icon":72},"/docs/4.x/getting-started/state-management","docs/4.x/1.getting-started/11.state-management",{"title":74,"path":1162,"stem":1163,"titleTemplate":6,"icon":77},"/docs/4.x/getting-started/error-handling","docs/4.x/1.getting-started/12.error-handling",{"title":79,"path":1165,"stem":1166,"titleTemplate":6,"icon":82},"/docs/4.x/getting-started/server","docs/4.x/1.getting-started/13.server",{"title":84,"path":1168,"stem":1169,"titleTemplate":6,"icon":87},"/docs/4.x/getting-started/layers","docs/4.x/1.getting-started/14.layers",{"title":89,"path":1171,"stem":1172,"titleTemplate":6,"icon":92},"/docs/4.x/getting-started/prerendering","docs/4.x/1.getting-started/15.prerendering",{"title":94,"path":1174,"stem":1175,"titleTemplate":6,"icon":97},"/docs/4.x/getting-started/deployment","docs/4.x/1.getting-started/16.deployment",{"title":99,"path":1177,"stem":1178,"titleTemplate":6,"icon":102},"/docs/4.x/getting-started/testing","docs/4.x/1.getting-started/17.testing",{"title":104,"path":1180,"stem":1181,"titleTemplate":6,"icon":107},"/docs/4.x/getting-started/upgrade","docs/4.x/1.getting-started/18.upgrade",{"title":110,"titleTemplate":111,"icon":112,"path":1183,"stem":1184,"children":1185,"page":108},"/docs/4.x/directory-structure","docs/4.x/2.directory-structure",[1186,1189,1192,1234,1237,1240,1243,1246,1249,1252,1255,1258,1261,1264,1267,1270,1273],{"title":117,"path":1187,"stem":1188,"titleTemplate":6,"icon":120},"/docs/4.x/directory-structure/nuxt","docs/4.x/2.directory-structure/0.nuxt",{"title":122,"path":1190,"stem":1191,"titleTemplate":6,"icon":125},"/docs/4.x/directory-structure/output","docs/4.x/2.directory-structure/0.output",{"title":1193,"titleTemplate":111,"head":1194,"defaultOpen":1196,"icon":1197,"path":1198,"stem":1199,"children":1200,"page":108},"app",{"title":1195},"app/",true,"i-vscode-icons-folder-type-app","/docs/4.x/directory-structure/app","docs/4.x/2.directory-structure/1.app",[1201,1204,1207,1210,1213,1216,1219,1222,1225,1228,1231],{"title":127,"path":1202,"stem":1203,"titleTemplate":6,"icon":130},"/docs/4.x/directory-structure/app/assets","docs/4.x/2.directory-structure/1.app/1.assets",{"title":132,"path":1205,"stem":1206,"titleTemplate":6,"icon":135},"/docs/4.x/directory-structure/app/components","docs/4.x/2.directory-structure/1.app/1.components",{"title":137,"path":1208,"stem":1209,"titleTemplate":6,"icon":140},"/docs/4.x/directory-structure/app/composables","docs/4.x/2.directory-structure/1.app/1.composables",{"title":152,"path":1211,"stem":1212,"titleTemplate":6,"icon":155},"/docs/4.x/directory-structure/app/layouts","docs/4.x/2.directory-structure/1.app/1.layouts",{"title":157,"path":1214,"stem":1215,"titleTemplate":6,"icon":160},"/docs/4.x/directory-structure/app/middleware","docs/4.x/2.directory-structure/1.app/1.middleware",{"title":171,"path":1217,"stem":1218,"titleTemplate":6,"icon":155},"/docs/4.x/directory-structure/app/pages","docs/4.x/2.directory-structure/1.app/1.pages",{"title":175,"path":1220,"stem":1221,"titleTemplate":6,"icon":178},"/docs/4.x/directory-structure/app/plugins","docs/4.x/2.directory-structure/1.app/1.plugins",{"title":195,"path":1223,"stem":1224,"titleTemplate":6,"icon":198},"/docs/4.x/directory-structure/app/utils","docs/4.x/2.directory-structure/1.app/1.utils",{"title":219,"path":1226,"stem":1227,"titleTemplate":6,"icon":222},"/docs/4.x/directory-structure/app/app","docs/4.x/2.directory-structure/1.app/3.app",{"title":224,"path":1229,"stem":1230,"titleTemplate":6,"icon":227},"/docs/4.x/directory-structure/app/app-config","docs/4.x/2.directory-structure/1.app/3.app-config",{"title":229,"path":1232,"stem":1233,"titleTemplate":6,"icon":222},"/docs/4.x/directory-structure/app/error","docs/4.x/2.directory-structure/1.app/3.error",{"title":142,"path":1235,"stem":1236,"titleTemplate":6,"icon":145},"/docs/4.x/directory-structure/content","docs/4.x/2.directory-structure/1.content",{"title":147,"path":1238,"stem":1239,"titleTemplate":6,"icon":150},"/docs/4.x/directory-structure/layers","docs/4.x/2.directory-structure/1.layers",{"title":162,"path":1241,"stem":1242,"titleTemplate":6,"icon":150},"/docs/4.x/directory-structure/modules","docs/4.x/2.directory-structure/1.modules",{"title":166,"path":1244,"stem":1245,"titleTemplate":6,"icon":169},"/docs/4.x/directory-structure/node_modules","docs/4.x/2.directory-structure/1.node_modules",{"title":180,"path":1247,"stem":1248,"titleTemplate":6,"icon":183},"/docs/4.x/directory-structure/public","docs/4.x/2.directory-structure/1.public",{"title":185,"path":1250,"stem":1251,"titleTemplate":6,"icon":188},"/docs/4.x/directory-structure/server","docs/4.x/2.directory-structure/1.server",{"title":190,"path":1253,"stem":1254,"titleTemplate":6,"icon":193},"/docs/4.x/directory-structure/shared","docs/4.x/2.directory-structure/1.shared",{"title":200,"path":1256,"stem":1257,"titleTemplate":6,"icon":203},"/docs/4.x/directory-structure/env","docs/4.x/2.directory-structure/2.env",{"title":205,"path":1259,"stem":1260,"titleTemplate":6,"icon":208},"/docs/4.x/directory-structure/gitignore","docs/4.x/2.directory-structure/2.gitignore",{"title":210,"path":1262,"stem":1263,"titleTemplate":6,"icon":213},"/docs/4.x/directory-structure/nuxtignore","docs/4.x/2.directory-structure/2.nuxtignore",{"title":215,"path":1265,"stem":1266,"titleTemplate":6,"icon":213},"/docs/4.x/directory-structure/nuxtrc","docs/4.x/2.directory-structure/2.nuxtrc",{"title":233,"path":1268,"stem":1269,"titleTemplate":6,"icon":213},"/docs/4.x/directory-structure/nuxt-config","docs/4.x/2.directory-structure/3.nuxt-config",{"title":237,"path":1271,"stem":1272,"titleTemplate":6,"icon":240},"/docs/4.x/directory-structure/package","docs/4.x/2.directory-structure/3.package",{"title":242,"path":1274,"stem":1275,"titleTemplate":6,"icon":245},"/docs/4.x/directory-structure/tsconfig","docs/4.x/2.directory-structure/3.tsconfig",{"title":247,"titleTemplate":6,"icon":248,"path":1277,"stem":1278,"children":1279,"page":108},"/docs/4.x/guide","docs/4.x/3.guide",[1280,1305,1318,1328,1353,1369],{"title":253,"titleTemplate":254,"icon":255,"path":1281,"stem":1282,"children":1283,"page":108},"/docs/4.x/guide/concepts","docs/4.x/3.guide/1.concepts",[1284,1287,1290,1293,1296,1299,1302],{"title":260,"path":1285,"stem":1286,"titleTemplate":6},"/docs/4.x/guide/concepts/rendering","docs/4.x/3.guide/1.concepts/1.rendering",{"title":264,"path":1288,"stem":1289,"titleTemplate":6},"/docs/4.x/guide/concepts/nuxt-lifecycle","docs/4.x/3.guide/1.concepts/2.nuxt-lifecycle",{"title":268,"path":1291,"stem":1292,"titleTemplate":6},"/docs/4.x/guide/concepts/auto-imports","docs/4.x/3.guide/1.concepts/3.auto-imports",{"title":272,"path":1294,"stem":1295,"titleTemplate":6},"/docs/4.x/guide/concepts/server-engine","docs/4.x/3.guide/1.concepts/4.server-engine",{"title":276,"path":1297,"stem":1298,"titleTemplate":6},"/docs/4.x/guide/concepts/modules","docs/4.x/3.guide/1.concepts/5.modules",{"title":280,"path":1300,"stem":1301,"titleTemplate":6},"/docs/4.x/guide/concepts/typescript","docs/4.x/3.guide/1.concepts/8.typescript",{"title":284,"path":1303,"stem":1304,"titleTemplate":6},"/docs/4.x/guide/concepts/code-style","docs/4.x/3.guide/1.concepts/9.code-style",{"title":288,"titleTemplate":289,"icon":290,"path":1306,"stem":1307,"children":1308,"page":108},"/docs/4.x/guide/best-practices","docs/4.x/3.guide/2.best-practices",[1309,1312,1315],{"title":295,"path":1310,"stem":1311,"titleTemplate":6},"/docs/4.x/guide/best-practices/hydration","docs/4.x/3.guide/2.best-practices/hydration",{"title":299,"path":1313,"stem":1314,"titleTemplate":6},"/docs/4.x/guide/best-practices/performance","docs/4.x/3.guide/2.best-practices/performance",{"title":303,"path":1316,"stem":1317,"titleTemplate":6},"/docs/4.x/guide/best-practices/plugins","docs/4.x/3.guide/2.best-practices/plugins",{"title":307,"titleTemplate":308,"icon":309,"path":1319,"stem":1320,"children":1321,"page":108},"/docs/4.x/guide/ai","docs/4.x/3.guide/3.ai",[1322,1325],{"title":314,"path":1323,"stem":1324,"titleTemplate":6},"/docs/4.x/guide/ai/mcp","docs/4.x/3.guide/3.ai/1.mcp",{"title":318,"path":1326,"stem":1327,"titleTemplate":6},"/docs/4.x/guide/ai/llms-txt","docs/4.x/3.guide/3.ai/2.llms-txt",{"title":322,"titleTemplate":323,"icon":324,"path":1329,"stem":1330,"children":1331,"page":108},"/docs/4.x/guide/modules","docs/4.x/3.guide/4.modules",[1332,1335,1338,1341,1344,1347,1350],{"title":329,"path":1333,"stem":1334,"titleTemplate":6},"/docs/4.x/guide/modules/getting-started","docs/4.x/3.guide/4.modules/1.getting-started",{"title":333,"path":1336,"stem":1337,"titleTemplate":6},"/docs/4.x/guide/modules/module-anatomy","docs/4.x/3.guide/4.modules/2.module-anatomy",{"title":337,"path":1339,"stem":1340,"titleTemplate":6},"/docs/4.x/guide/modules/recipes-basics","docs/4.x/3.guide/4.modules/3.recipes-basics",{"title":341,"path":1342,"stem":1343,"titleTemplate":6},"/docs/4.x/guide/modules/recipes-advanced","docs/4.x/3.guide/4.modules/4.recipes-advanced",{"title":345,"path":1345,"stem":1346,"titleTemplate":6},"/docs/4.x/guide/modules/testing","docs/4.x/3.guide/4.modules/5.testing",{"title":349,"path":1348,"stem":1349,"titleTemplate":6},"/docs/4.x/guide/modules/best-practices","docs/4.x/3.guide/4.modules/6.best-practices",{"title":353,"path":1351,"stem":1352,"titleTemplate":6},"/docs/4.x/guide/modules/ecosystem","docs/4.x/3.guide/4.modules/7.ecosystem",{"title":357,"titleTemplate":358,"icon":359,"path":1354,"stem":1355,"children":1356,"page":108},"/docs/4.x/guide/recipes","docs/4.x/3.guide/5.recipes",[1357,1360,1363,1366],{"title":364,"path":1358,"stem":1359,"titleTemplate":6},"/docs/4.x/guide/recipes/custom-routing","docs/4.x/3.guide/5.recipes/1.custom-routing",{"title":368,"path":1361,"stem":1362,"titleTemplate":6},"/docs/4.x/guide/recipes/vite-plugin","docs/4.x/3.guide/5.recipes/2.vite-plugin",{"title":372,"path":1364,"stem":1365,"titleTemplate":6},"/docs/4.x/guide/recipes/custom-usefetch","docs/4.x/3.guide/5.recipes/3.custom-usefetch",{"title":376,"path":1367,"stem":1368,"titleTemplate":6},"/docs/4.x/guide/recipes/sessions-and-authentication","docs/4.x/3.guide/5.recipes/4.sessions-and-authentication",{"title":380,"titleTemplate":381,"icon":382,"path":1370,"stem":1371,"children":1372,"page":108},"/docs/4.x/guide/going-further","docs/4.x/3.guide/6.going-further",[1373,1376,1379,1382,1385,1388,1391,1394,1397,1400],{"title":387,"path":1374,"stem":1375,"titleTemplate":6},"/docs/4.x/guide/going-further/events","docs/4.x/3.guide/6.going-further/1.events",{"title":391,"path":1377,"stem":1378,"titleTemplate":6},"/docs/4.x/guide/going-further/experimental-features","docs/4.x/3.guide/6.going-further/1.experimental-features",{"title":395,"path":1380,"stem":1381,"titleTemplate":6},"/docs/4.x/guide/going-further/features","docs/4.x/3.guide/6.going-further/1.features",{"title":399,"path":1383,"stem":1384,"titleTemplate":6},"/docs/4.x/guide/going-further/runtime-config","docs/4.x/3.guide/6.going-further/10.runtime-config",{"title":403,"path":1386,"stem":1387,"titleTemplate":6},"/docs/4.x/guide/going-further/nightly-release-channel","docs/4.x/3.guide/6.going-further/11.nightly-release-channel",{"title":407,"path":1389,"stem":1390,"titleTemplate":6},"/docs/4.x/guide/going-further/hooks","docs/4.x/3.guide/6.going-further/2.hooks",{"title":411,"path":1392,"stem":1393,"titleTemplate":6},"/docs/4.x/guide/going-further/kit","docs/4.x/3.guide/6.going-further/4.kit",{"title":415,"path":1395,"stem":1396,"titleTemplate":6},"/docs/4.x/guide/going-further/nuxt-app","docs/4.x/3.guide/6.going-further/6.nuxt-app",{"title":419,"path":1398,"stem":1399,"titleTemplate":6},"/docs/4.x/guide/going-further/layers","docs/4.x/3.guide/6.going-further/7.layers",{"title":423,"path":1401,"stem":1402,"titleTemplate":6},"/docs/4.x/guide/going-further/debugging","docs/4.x/3.guide/6.going-further/9.debugging",{"title":427,"titleTemplate":428,"icon":429,"path":1404,"stem":1405,"children":1406,"page":108},"/docs/4.x/api","docs/4.x/4.api",[1407,1460,1555,1646,1698,1756,1766],{"title":434,"titleTemplate":435,"icon":324,"path":1408,"stem":1409,"children":1410,"page":108},"/docs/4.x/api/components","docs/4.x/4.api/1.components",[1411,1414,1417,1420,1423,1426,1429,1432,1436,1439,1442,1445,1448,1451,1454,1457],{"title":440,"path":1412,"stem":1413,"titleTemplate":6},"/docs/4.x/api/components/client-only","docs/4.x/4.api/1.components/1.client-only",{"title":444,"path":1415,"stem":1416,"titleTemplate":6},"/docs/4.x/api/components/dev-only","docs/4.x/4.api/1.components/1.dev-only",{"title":448,"path":1418,"stem":1419,"titleTemplate":6},"/docs/4.x/api/components/nuxt-client-fallback","docs/4.x/4.api/1.components/1.nuxt-client-fallback",{"title":452,"path":1421,"stem":1422,"titleTemplate":6},"/docs/4.x/api/components/nuxt-picture","docs/4.x/4.api/1.components/10.nuxt-picture",{"title":456,"path":1424,"stem":1425,"titleTemplate":6},"/docs/4.x/api/components/teleports","docs/4.x/4.api/1.components/11.teleports",{"title":460,"path":1427,"stem":1428,"titleTemplate":6},"/docs/4.x/api/components/nuxt-route-announcer","docs/4.x/4.api/1.components/12.nuxt-route-announcer",{"title":464,"path":1430,"stem":1431,"titleTemplate":6},"/docs/4.x/api/components/nuxt-time","docs/4.x/4.api/1.components/13.nuxt-time",{"title":1433,"path":1434,"stem":1435,"titleTemplate":6},"\u003CNuxtAnnouncer>","/docs/4.x/api/components/nuxt-announcer","docs/4.x/4.api/1.components/14.nuxt-announcer",{"title":468,"path":1437,"stem":1438,"titleTemplate":6},"/docs/4.x/api/components/nuxt-page","docs/4.x/4.api/1.components/2.nuxt-page",{"title":472,"path":1440,"stem":1441,"titleTemplate":6},"/docs/4.x/api/components/nuxt-layout","docs/4.x/4.api/1.components/3.nuxt-layout",{"title":476,"path":1443,"stem":1444,"titleTemplate":6},"/docs/4.x/api/components/nuxt-link","docs/4.x/4.api/1.components/4.nuxt-link",{"title":480,"path":1446,"stem":1447,"titleTemplate":6},"/docs/4.x/api/components/nuxt-loading-indicator","docs/4.x/4.api/1.components/5.nuxt-loading-indicator",{"title":484,"path":1449,"stem":1450,"titleTemplate":6},"/docs/4.x/api/components/nuxt-error-boundary","docs/4.x/4.api/1.components/6.nuxt-error-boundary",{"title":488,"path":1452,"stem":1453,"titleTemplate":6},"/docs/4.x/api/components/nuxt-welcome","docs/4.x/4.api/1.components/7.nuxt-welcome",{"title":492,"path":1455,"stem":1456,"titleTemplate":6},"/docs/4.x/api/components/nuxt-island","docs/4.x/4.api/1.components/8.nuxt-island",{"title":496,"path":1458,"stem":1459,"titleTemplate":6},"/docs/4.x/api/components/nuxt-img","docs/4.x/4.api/1.components/9.nuxt-img",{"title":500,"titleTemplate":501,"icon":502,"path":1461,"stem":1462,"children":1463,"page":108},"/docs/4.x/api/composables","docs/4.x/4.api/2.composables",[1464,1467,1471,1474,1477,1480,1483,1486,1489,1492,1495,1498,1501,1504,1507,1510,1513,1516,1519,1522,1525,1528,1531,1534,1537,1540,1543,1546,1549,1552],{"title":507,"path":1465,"stem":1466,"titleTemplate":6},"/docs/4.x/api/composables/on-prehydrate","docs/4.x/4.api/2.composables/on-prehydrate",{"title":1468,"path":1469,"stem":1470,"titleTemplate":6},"useAnnouncer","/docs/4.x/api/composables/use-announcer","docs/4.x/4.api/2.composables/use-announcer",{"title":511,"path":1472,"stem":1473,"titleTemplate":6},"/docs/4.x/api/composables/use-app-config","docs/4.x/4.api/2.composables/use-app-config",{"title":515,"path":1475,"stem":1476,"titleTemplate":6},"/docs/4.x/api/composables/use-async-data","docs/4.x/4.api/2.composables/use-async-data",{"title":519,"path":1478,"stem":1479,"titleTemplate":6},"/docs/4.x/api/composables/use-cookie","docs/4.x/4.api/2.composables/use-cookie",{"title":523,"path":1481,"stem":1482,"titleTemplate":6},"/docs/4.x/api/composables/use-error","docs/4.x/4.api/2.composables/use-error",{"title":527,"path":1484,"stem":1485,"titleTemplate":6},"/docs/4.x/api/composables/use-fetch","docs/4.x/4.api/2.composables/use-fetch",{"title":531,"path":1487,"stem":1488,"titleTemplate":6},"/docs/4.x/api/composables/use-head","docs/4.x/4.api/2.composables/use-head",{"title":535,"path":1490,"stem":1491,"titleTemplate":6},"/docs/4.x/api/composables/use-head-safe","docs/4.x/4.api/2.composables/use-head-safe",{"title":539,"path":1493,"stem":1494,"titleTemplate":6},"/docs/4.x/api/composables/use-hydration","docs/4.x/4.api/2.composables/use-hydration",{"title":543,"path":1496,"stem":1497,"titleTemplate":6},"/docs/4.x/api/composables/use-lazy-async-data","docs/4.x/4.api/2.composables/use-lazy-async-data",{"title":547,"path":1499,"stem":1500,"titleTemplate":6},"/docs/4.x/api/composables/use-lazy-fetch","docs/4.x/4.api/2.composables/use-lazy-fetch",{"title":551,"path":1502,"stem":1503,"titleTemplate":6},"/docs/4.x/api/composables/use-loading-indicator","docs/4.x/4.api/2.composables/use-loading-indicator",{"title":555,"path":1505,"stem":1506,"titleTemplate":6},"/docs/4.x/api/composables/use-nuxt-app","docs/4.x/4.api/2.composables/use-nuxt-app",{"title":559,"path":1508,"stem":1509,"titleTemplate":6},"/docs/4.x/api/composables/use-nuxt-data","docs/4.x/4.api/2.composables/use-nuxt-data",{"title":563,"path":1511,"stem":1512,"titleTemplate":6},"/docs/4.x/api/composables/use-preview-mode","docs/4.x/4.api/2.composables/use-preview-mode",{"title":567,"path":1514,"stem":1515,"titleTemplate":6},"/docs/4.x/api/composables/use-request-event","docs/4.x/4.api/2.composables/use-request-event",{"title":571,"path":1517,"stem":1518,"titleTemplate":6},"/docs/4.x/api/composables/use-request-fetch","docs/4.x/4.api/2.composables/use-request-fetch",{"title":575,"path":1520,"stem":1521,"titleTemplate":6},"/docs/4.x/api/composables/use-request-header","docs/4.x/4.api/2.composables/use-request-header",{"title":579,"path":1523,"stem":1524,"titleTemplate":6},"/docs/4.x/api/composables/use-request-headers","docs/4.x/4.api/2.composables/use-request-headers",{"title":583,"path":1526,"stem":1527,"titleTemplate":6},"/docs/4.x/api/composables/use-request-url","docs/4.x/4.api/2.composables/use-request-url",{"title":587,"path":1529,"stem":1530,"titleTemplate":6},"/docs/4.x/api/composables/use-response-header","docs/4.x/4.api/2.composables/use-response-header",{"title":591,"path":1532,"stem":1533,"titleTemplate":6},"/docs/4.x/api/composables/use-route","docs/4.x/4.api/2.composables/use-route",{"title":595,"path":1535,"stem":1536,"titleTemplate":6},"/docs/4.x/api/composables/use-route-announcer","docs/4.x/4.api/2.composables/use-route-announcer",{"title":599,"path":1538,"stem":1539,"titleTemplate":6},"/docs/4.x/api/composables/use-router","docs/4.x/4.api/2.composables/use-router",{"title":603,"path":1541,"stem":1542,"titleTemplate":6},"/docs/4.x/api/composables/use-runtime-config","docs/4.x/4.api/2.composables/use-runtime-config",{"title":607,"path":1544,"stem":1545,"titleTemplate":6},"/docs/4.x/api/composables/use-runtime-hook","docs/4.x/4.api/2.composables/use-runtime-hook",{"title":611,"path":1547,"stem":1548,"titleTemplate":6},"/docs/4.x/api/composables/use-seo-meta","docs/4.x/4.api/2.composables/use-seo-meta",{"title":615,"path":1550,"stem":1551,"titleTemplate":6},"/docs/4.x/api/composables/use-server-seo-meta","docs/4.x/4.api/2.composables/use-server-seo-meta",{"title":619,"path":1553,"stem":1554,"titleTemplate":6},"/docs/4.x/api/composables/use-state","docs/4.x/4.api/2.composables/use-state",{"title":623,"titleTemplate":624,"icon":625,"path":1556,"stem":1557,"children":1558,"page":108},"/docs/4.x/api/utils","docs/4.x/4.api/3.utils",[1559,1562,1565,1568,1571,1574,1577,1580,1583,1586,1589,1592,1595,1598,1601,1604,1607,1610,1613,1616,1619,1622,1625,1628,1631,1634,1637,1640,1643],{"title":630,"path":1560,"stem":1561,"titleTemplate":6},"/docs/4.x/api/utils/dollarfetch","docs/4.x/4.api/3.utils/$fetch",{"title":634,"path":1563,"stem":1564,"titleTemplate":6},"/docs/4.x/api/utils/abort-navigation","docs/4.x/4.api/3.utils/abort-navigation",{"title":638,"path":1566,"stem":1567,"titleTemplate":6},"/docs/4.x/api/utils/add-route-middleware","docs/4.x/4.api/3.utils/add-route-middleware",{"title":642,"path":1569,"stem":1570,"titleTemplate":6},"/docs/4.x/api/utils/call-once","docs/4.x/4.api/3.utils/call-once",{"title":646,"path":1572,"stem":1573,"titleTemplate":6},"/docs/4.x/api/utils/clear-error","docs/4.x/4.api/3.utils/clear-error",{"title":650,"path":1575,"stem":1576,"titleTemplate":6},"/docs/4.x/api/utils/clear-nuxt-data","docs/4.x/4.api/3.utils/clear-nuxt-data",{"title":654,"path":1578,"stem":1579,"titleTemplate":6},"/docs/4.x/api/utils/clear-nuxt-state","docs/4.x/4.api/3.utils/clear-nuxt-state",{"title":658,"path":1581,"stem":1582,"titleTemplate":6},"/docs/4.x/api/utils/create-error","docs/4.x/4.api/3.utils/create-error",{"title":662,"path":1584,"stem":1585,"titleTemplate":6},"/docs/4.x/api/utils/define-lazy-hydration-component","docs/4.x/4.api/3.utils/define-lazy-hydration-component",{"title":666,"path":1587,"stem":1588,"titleTemplate":6},"/docs/4.x/api/utils/define-nuxt-component","docs/4.x/4.api/3.utils/define-nuxt-component",{"title":670,"path":1590,"stem":1591,"titleTemplate":6},"/docs/4.x/api/utils/define-nuxt-plugin","docs/4.x/4.api/3.utils/define-nuxt-plugin",{"title":674,"path":1593,"stem":1594,"titleTemplate":6},"/docs/4.x/api/utils/define-nuxt-route-middleware","docs/4.x/4.api/3.utils/define-nuxt-route-middleware",{"title":678,"path":1596,"stem":1597,"titleTemplate":6},"/docs/4.x/api/utils/define-page-meta","docs/4.x/4.api/3.utils/define-page-meta",{"title":682,"path":1599,"stem":1600,"titleTemplate":6},"/docs/4.x/api/utils/define-route-rules","docs/4.x/4.api/3.utils/define-route-rules",{"title":686,"path":1602,"stem":1603,"titleTemplate":6},"/docs/4.x/api/utils/navigate-to","docs/4.x/4.api/3.utils/navigate-to",{"title":690,"path":1605,"stem":1606,"titleTemplate":6},"/docs/4.x/api/utils/on-before-route-leave","docs/4.x/4.api/3.utils/on-before-route-leave",{"title":694,"path":1608,"stem":1609,"titleTemplate":6},"/docs/4.x/api/utils/on-before-route-update","docs/4.x/4.api/3.utils/on-before-route-update",{"title":698,"path":1611,"stem":1612,"titleTemplate":6},"/docs/4.x/api/utils/on-nuxt-ready","docs/4.x/4.api/3.utils/on-nuxt-ready",{"title":702,"path":1614,"stem":1615,"titleTemplate":6},"/docs/4.x/api/utils/prefetch-components","docs/4.x/4.api/3.utils/prefetch-components",{"title":706,"path":1617,"stem":1618,"titleTemplate":6},"/docs/4.x/api/utils/preload-components","docs/4.x/4.api/3.utils/preload-components",{"title":710,"path":1620,"stem":1621,"titleTemplate":6},"/docs/4.x/api/utils/preload-route-components","docs/4.x/4.api/3.utils/preload-route-components",{"title":714,"path":1623,"stem":1624,"titleTemplate":6},"/docs/4.x/api/utils/prerender-routes","docs/4.x/4.api/3.utils/prerender-routes",{"title":718,"path":1626,"stem":1627,"titleTemplate":6},"/docs/4.x/api/utils/refresh-cookie","docs/4.x/4.api/3.utils/refresh-cookie",{"title":722,"path":1629,"stem":1630,"titleTemplate":6},"/docs/4.x/api/utils/refresh-nuxt-data","docs/4.x/4.api/3.utils/refresh-nuxt-data",{"title":726,"path":1632,"stem":1633,"titleTemplate":6},"/docs/4.x/api/utils/reload-nuxt-app","docs/4.x/4.api/3.utils/reload-nuxt-app",{"title":730,"path":1635,"stem":1636,"titleTemplate":6},"/docs/4.x/api/utils/set-page-layout","docs/4.x/4.api/3.utils/set-page-layout",{"title":734,"path":1638,"stem":1639,"titleTemplate":6},"/docs/4.x/api/utils/set-response-status","docs/4.x/4.api/3.utils/set-response-status",{"title":738,"path":1641,"stem":1642,"titleTemplate":6},"/docs/4.x/api/utils/show-error","docs/4.x/4.api/3.utils/show-error",{"title":742,"path":1644,"stem":1645,"titleTemplate":6},"/docs/4.x/api/utils/update-app-config","docs/4.x/4.api/3.utils/update-app-config",{"title":746,"titleTemplate":747,"icon":748,"path":1647,"stem":1648,"children":1649,"page":108},"/docs/4.x/api/commands","docs/4.x/4.api/4.commands",[1650,1653,1656,1659,1662,1665,1668,1671,1674,1677,1680,1683,1686,1689,1692,1695],{"title":753,"path":1651,"stem":1652,"titleTemplate":6},"/docs/4.x/api/commands/add","docs/4.x/4.api/4.commands/add",{"title":757,"path":1654,"stem":1655,"titleTemplate":6},"/docs/4.x/api/commands/analyze","docs/4.x/4.api/4.commands/analyze",{"title":761,"path":1657,"stem":1658,"titleTemplate":6},"/docs/4.x/api/commands/build","docs/4.x/4.api/4.commands/build",{"title":765,"path":1660,"stem":1661,"titleTemplate":6},"/docs/4.x/api/commands/build-module","docs/4.x/4.api/4.commands/build-module",{"title":769,"path":1663,"stem":1664,"titleTemplate":6},"/docs/4.x/api/commands/cleanup","docs/4.x/4.api/4.commands/cleanup",{"title":773,"path":1666,"stem":1667,"titleTemplate":6},"/docs/4.x/api/commands/dev","docs/4.x/4.api/4.commands/dev",{"title":777,"path":1669,"stem":1670,"titleTemplate":6},"/docs/4.x/api/commands/devtools","docs/4.x/4.api/4.commands/devtools",{"title":781,"path":1672,"stem":1673,"titleTemplate":6},"/docs/4.x/api/commands/generate","docs/4.x/4.api/4.commands/generate",{"title":785,"path":1675,"stem":1676,"titleTemplate":6},"/docs/4.x/api/commands/info","docs/4.x/4.api/4.commands/info",{"title":789,"path":1678,"stem":1679,"titleTemplate":6},"/docs/4.x/api/commands/init","docs/4.x/4.api/4.commands/init",{"title":793,"path":1681,"stem":1682,"titleTemplate":6},"/docs/4.x/api/commands/module","docs/4.x/4.api/4.commands/module",{"title":797,"path":1684,"stem":1685,"titleTemplate":6},"/docs/4.x/api/commands/prepare","docs/4.x/4.api/4.commands/prepare",{"title":801,"path":1687,"stem":1688,"titleTemplate":6},"/docs/4.x/api/commands/preview","docs/4.x/4.api/4.commands/preview",{"title":805,"path":1690,"stem":1691,"titleTemplate":6},"/docs/4.x/api/commands/test","docs/4.x/4.api/4.commands/test",{"title":809,"path":1693,"stem":1694,"titleTemplate":6},"/docs/4.x/api/commands/typecheck","docs/4.x/4.api/4.commands/typecheck",{"title":813,"path":1696,"stem":1697,"titleTemplate":6},"/docs/4.x/api/commands/upgrade","docs/4.x/4.api/4.commands/upgrade",{"title":411,"titleTemplate":817,"icon":818,"path":1699,"stem":1700,"children":1701,"page":108},"/docs/4.x/api/kit","docs/4.x/4.api/5.kit",[1702,1705,1708,1711,1714,1717,1720,1723,1726,1729,1732,1735,1738,1741,1744,1747,1750,1753],{"title":276,"path":1703,"stem":1704,"titleTemplate":6},"/docs/4.x/api/kit/modules","docs/4.x/4.api/5.kit/1.modules",{"title":399,"path":1706,"stem":1707,"titleTemplate":6},"/docs/4.x/api/kit/runtime-config","docs/4.x/4.api/5.kit/10.runtime-config",{"title":829,"path":1709,"stem":1710,"titleTemplate":6},"/docs/4.x/api/kit/templates","docs/4.x/4.api/5.kit/10.templates",{"title":833,"path":1712,"stem":1713,"titleTemplate":6},"/docs/4.x/api/kit/nitro","docs/4.x/4.api/5.kit/11.nitro",{"title":837,"path":1715,"stem":1716,"titleTemplate":6},"/docs/4.x/api/kit/resolving","docs/4.x/4.api/5.kit/12.resolving",{"title":841,"path":1718,"stem":1719,"titleTemplate":6},"/docs/4.x/api/kit/logging","docs/4.x/4.api/5.kit/13.logging",{"title":845,"path":1721,"stem":1722,"titleTemplate":6},"/docs/4.x/api/kit/builder","docs/4.x/4.api/5.kit/14.builder",{"title":849,"path":1724,"stem":1725,"titleTemplate":6},"/docs/4.x/api/kit/examples","docs/4.x/4.api/5.kit/15.examples",{"title":84,"path":1727,"stem":1728,"titleTemplate":6},"/docs/4.x/api/kit/layers","docs/4.x/4.api/5.kit/16.layers",{"title":856,"path":1730,"stem":1731,"titleTemplate":6},"/docs/4.x/api/kit/programmatic","docs/4.x/4.api/5.kit/2.programmatic",{"title":860,"path":1733,"stem":1734,"titleTemplate":6},"/docs/4.x/api/kit/compatibility","docs/4.x/4.api/5.kit/3.compatibility",{"title":268,"path":1736,"stem":1737,"titleTemplate":6},"/docs/4.x/api/kit/autoimports","docs/4.x/4.api/5.kit/4.autoimports",{"title":434,"path":1739,"stem":1740,"titleTemplate":6},"/docs/4.x/api/kit/components","docs/4.x/4.api/5.kit/5.components",{"title":870,"path":1742,"stem":1743,"titleTemplate":6},"/docs/4.x/api/kit/context","docs/4.x/4.api/5.kit/6.context",{"title":874,"path":1745,"stem":1746,"titleTemplate":6},"/docs/4.x/api/kit/pages","docs/4.x/4.api/5.kit/7.pages",{"title":878,"path":1748,"stem":1749,"titleTemplate":6},"/docs/4.x/api/kit/layout","docs/4.x/4.api/5.kit/8.layout",{"title":882,"path":1751,"stem":1752,"titleTemplate":6},"/docs/4.x/api/kit/head","docs/4.x/4.api/5.kit/9.head",{"title":886,"path":1754,"stem":1755,"titleTemplate":6},"/docs/4.x/api/kit/plugins","docs/4.x/4.api/5.kit/9.plugins",{"title":890,"titleTemplate":6,"icon":891,"path":1757,"stem":1758,"children":1759,"page":108},"/docs/4.x/api/advanced","docs/4.x/4.api/6.advanced",[1760,1763],{"title":407,"path":1761,"stem":1762,"titleTemplate":6},"/docs/4.x/api/advanced/hooks","docs/4.x/4.api/6.advanced/1.hooks",{"title":899,"path":1764,"stem":1765,"titleTemplate":6},"/docs/4.x/api/advanced/import-meta","docs/4.x/4.api/6.advanced/2.import-meta",{"title":903,"path":1767,"stem":1768,"titleTemplate":906,"icon":32},"/docs/4.x/api/nuxt-config","docs/4.x/4.api/6.nuxt-config",{"title":849,"titleTemplate":908,"icon":909,"path":1770,"stem":1771,"children":1772,"page":108},"/docs/4.x/examples","docs/4.x/4.examples",[1773,1776,1795,1808,1839],{"title":914,"path":1774,"stem":1775,"titleTemplate":6},"/docs/4.x/examples/hello-world","docs/4.x/4.examples/0.hello-world",{"title":395,"path":1777,"stem":1778,"children":1779,"page":108},"/docs/4.x/examples/features","docs/4.x/4.examples/1.features",[1780,1783,1786,1789,1792],{"title":922,"path":1781,"stem":1782,"titleTemplate":6},"/docs/4.x/examples/features/auto-imports","docs/4.x/4.examples/1.features/1.auto-imports",{"title":64,"path":1784,"stem":1785,"titleTemplate":6},"/docs/4.x/examples/features/data-fetching","docs/4.x/4.examples/1.features/2.data-fetching",{"title":69,"path":1787,"stem":1788,"titleTemplate":6},"/docs/4.x/examples/features/state-management","docs/4.x/4.examples/1.features/3.state-management",{"title":932,"path":1790,"stem":1791,"titleTemplate":6},"/docs/4.x/examples/features/meta-tags","docs/4.x/4.examples/1.features/4.meta-tags",{"title":936,"path":1793,"stem":1794,"titleTemplate":6},"/docs/4.x/examples/features/layouts","docs/4.x/4.examples/1.features/5.layouts",{"title":49,"path":1796,"stem":1797,"children":1798,"page":108},"/docs/4.x/examples/routing","docs/4.x/4.examples/2.routing",[1799,1802,1805],{"title":944,"path":1800,"stem":1801,"titleTemplate":6},"/docs/4.x/examples/routing/middleware","docs/4.x/4.examples/2.routing/middleware",{"title":874,"path":1803,"stem":1804,"titleTemplate":6},"/docs/4.x/examples/routing/pages","docs/4.x/4.examples/2.routing/pages",{"title":951,"path":1806,"stem":1807,"titleTemplate":6},"/docs/4.x/examples/routing/universal-router","docs/4.x/4.examples/2.routing/universal-router",{"title":890,"path":1809,"stem":1810,"children":1811,"page":108},"/docs/4.x/examples/advanced","docs/4.x/4.examples/4.advanced",[1812,1815,1818,1821,1824,1827,1830,1833,1836],{"title":84,"path":1813,"stem":1814,"titleTemplate":6},"/docs/4.x/examples/advanced/config-extends","docs/4.x/4.examples/4.advanced/config-extends",{"title":74,"path":1816,"stem":1817,"titleTemplate":6},"/docs/4.x/examples/advanced/error-handling","docs/4.x/4.examples/4.advanced/error-handling",{"title":965,"path":1819,"stem":1820,"titleTemplate":6},"/docs/4.x/examples/advanced/jsx","docs/4.x/4.examples/4.advanced/jsx",{"title":969,"path":1822,"stem":1823,"titleTemplate":6},"/docs/4.x/examples/advanced/locale","docs/4.x/4.examples/4.advanced/locale",{"title":973,"path":1825,"stem":1826,"titleTemplate":6},"/docs/4.x/examples/advanced/module-extend-pages","docs/4.x/4.examples/4.advanced/module-extend-pages",{"title":977,"path":1828,"stem":1829,"titleTemplate":6},"/docs/4.x/examples/advanced/teleport","docs/4.x/4.examples/4.advanced/teleport",{"title":99,"path":1831,"stem":1832,"titleTemplate":6},"/docs/4.x/examples/advanced/testing","docs/4.x/4.examples/4.advanced/testing",{"title":519,"path":1834,"stem":1835,"titleTemplate":6},"/docs/4.x/examples/advanced/use-cookie","docs/4.x/4.examples/4.advanced/use-cookie",{"title":987,"path":1837,"stem":1838,"titleTemplate":6},"/docs/4.x/examples/advanced/use-custom-fetch-composable","docs/4.x/4.examples/4.advanced/use-custom-fetch-composable",{"title":991,"path":1840,"stem":1841,"children":1842,"page":108},"/docs/4.x/examples/experimental","docs/4.x/4.examples/7.experimental",[1843],{"title":996,"path":1844,"stem":1845,"titleTemplate":6},"/docs/4.x/examples/experimental/wasm","docs/4.x/4.examples/7.experimental/wasm",{"title":1000,"titleTemplate":1001,"icon":1002,"path":1847,"stem":1848,"children":1849,"page":108},"/docs/4.x/community","docs/4.x/5.community",[1850,1853,1856,1859,1862,1865],{"title":1007,"path":1851,"stem":1852,"titleTemplate":6,"icon":1010},"/docs/4.x/community/getting-help","docs/4.x/5.community/2.getting-help",{"title":1012,"path":1854,"stem":1855,"titleTemplate":6,"icon":1015},"/docs/4.x/community/reporting-bugs","docs/4.x/5.community/3.reporting-bugs",{"title":1017,"path":1857,"stem":1858,"titleTemplate":6,"icon":1020},"/docs/4.x/community/contribution","docs/4.x/5.community/4.contribution",{"title":1022,"path":1860,"stem":1861,"titleTemplate":6,"icon":1025},"/docs/4.x/community/framework-contribution","docs/4.x/5.community/5.framework-contribution",{"title":1027,"path":1863,"stem":1864,"titleTemplate":6,"icon":1030},"/docs/4.x/community/roadmap","docs/4.x/5.community/6.roadmap",{"title":1032,"path":1866,"stem":1867,"titleTemplate":6,"icon":1035},"/docs/4.x/community/changelog","docs/4.x/5.community/7.changelog",{"title":1037,"titleTemplate":1038,"icon":1039,"path":1869,"stem":1870,"children":1871,"page":108},"/docs/4.x/bridge","docs/4.x/6.bridge",[1872,1875,1878,1881,1884,1887,1890,1893,1896,1899],{"title":1044,"path":1873,"stem":1874,"titleTemplate":6},"/docs/4.x/bridge/overview","docs/4.x/6.bridge/1.overview",{"title":29,"path":1876,"stem":1877,"titleTemplate":6},"/docs/4.x/bridge/configuration","docs/4.x/6.bridge/10.configuration",{"title":280,"path":1879,"stem":1880,"titleTemplate":6},"/docs/4.x/bridge/typescript","docs/4.x/6.bridge/2.typescript",{"title":1054,"path":1882,"stem":1883,"titleTemplate":6},"/docs/4.x/bridge/bridge-composition-api","docs/4.x/6.bridge/3.bridge-composition-api",{"title":1058,"path":1885,"stem":1886,"titleTemplate":6},"/docs/4.x/bridge/plugins-and-middleware","docs/4.x/6.bridge/4.plugins-and-middleware",{"title":1062,"path":1888,"stem":1889,"titleTemplate":6},"/docs/4.x/bridge/nuxt3-compatible-api","docs/4.x/6.bridge/5.nuxt3-compatible-api",{"title":932,"path":1891,"stem":1892,"titleTemplate":6},"/docs/4.x/bridge/meta","docs/4.x/6.bridge/6.meta",{"title":399,"path":1894,"stem":1895,"titleTemplate":6},"/docs/4.x/bridge/runtime-config","docs/4.x/6.bridge/7.runtime-config",{"title":833,"path":1897,"stem":1898,"titleTemplate":6},"/docs/4.x/bridge/nitro","docs/4.x/6.bridge/8.nitro",{"title":1075,"path":1900,"stem":1901,"titleTemplate":6},"/docs/4.x/bridge/vite","docs/4.x/6.bridge/9.vite",{"title":1079,"titleTemplate":1080,"icon":107,"path":1903,"stem":1904,"children":1905,"page":108},"/docs/4.x/migration","docs/4.x/7.migration",[1906,1909,1912,1915,1918,1921,1924,1927,1930,1933,1936],{"title":1044,"path":1907,"stem":1908,"titleTemplate":6},"/docs/4.x/migration/overview","docs/4.x/7.migration/1.overview",{"title":1088,"path":1910,"stem":1911,"titleTemplate":6},"/docs/4.x/migration/bundling","docs/4.x/7.migration/10.bundling",{"title":79,"path":1913,"stem":1914,"titleTemplate":6},"/docs/4.x/migration/server","docs/4.x/7.migration/11.server",{"title":29,"path":1916,"stem":1917,"titleTemplate":6},"/docs/4.x/migration/configuration","docs/4.x/7.migration/2.configuration",{"title":276,"path":1919,"stem":1920,"titleTemplate":6},"/docs/4.x/migration/module-authors","docs/4.x/7.migration/20.module-authors",{"title":922,"path":1922,"stem":1923,"titleTemplate":6},"/docs/4.x/migration/auto-imports","docs/4.x/7.migration/3.auto-imports",{"title":932,"path":1925,"stem":1926,"titleTemplate":6},"/docs/4.x/migration/meta","docs/4.x/7.migration/4.meta",{"title":1058,"path":1928,"stem":1929,"titleTemplate":6},"/docs/4.x/migration/plugins-and-middleware","docs/4.x/7.migration/5.plugins-and-middleware",{"title":1110,"path":1931,"stem":1932,"titleTemplate":6},"/docs/4.x/migration/pages-and-layouts","docs/4.x/7.migration/6.pages-and-layouts",{"title":1114,"path":1934,"stem":1935,"titleTemplate":6},"/docs/4.x/migration/component-options","docs/4.x/7.migration/7.component-options",{"title":399,"path":1937,"stem":1938,"titleTemplate":6},"/docs/4.x/migration/runtime-config","docs/4.x/7.migration/8.runtime-config",{"title":1940,"path":1941,"stem":1942,"children":1943,"page":108},"Blog","/blog","blog",[1944,1948,1952,1956,1960,1964,1968,1972,1976,1980,1984,1988,1992,1996,2000,2004,2008,2012,2016,2020,2024],{"title":1945,"path":1946,"stem":1947},"Announcing 3.0","/blog/v3","blog/1.v3",{"title":1949,"path":1950,"stem":1951},"Nuxt 3.3","/blog/v3-3","blog/10.v3-3",{"title":1953,"path":1954,"stem":1955},"Nuxt 3.4","/blog/v3-4","blog/11.v3-4",{"title":1957,"path":1958,"stem":1959},"Nuxt 3.5","/blog/v3-5","blog/12.v3-5",{"title":1961,"path":1962,"stem":1963},"Nuxt 3.6","/blog/v3-6","blog/13.v3-6",{"title":1965,"path":1966,"stem":1967},"Nuxt on the Edge","/blog/nuxt-on-the-edge","blog/14.nuxt-on-the-edge",{"title":1969,"path":1970,"stem":1971},"Nuxt DevTools v1.0","/blog/nuxt-devtools-v1-0","blog/18.nuxt-devtools-v1-0",{"title":1973,"path":1974,"stem":1975},"Nuxt: A vision for 2023","/blog/vision-2023","blog/2.vision-2023",{"title":1977,"path":1978,"stem":1979},"The Evolution of Shiki v1.0","/blog/shiki-v1","blog/21.shiki-v1",{"title":1981,"path":1982,"stem":1983},"Refreshed Nuxt ESLint Integrations","/blog/eslint-module","blog/24.eslint-module",{"title":1985,"path":1986,"stem":1987},"Introducing Nuxt Scripts","/blog/nuxt-scripts","blog/26.nuxt-scripts",{"title":1989,"path":1990,"stem":1991},"Introducing Nuxt Icon v1","/blog/nuxt-icon-v1-0","blog/29.nuxt-icon-v1-0",{"title":1993,"path":1994,"stem":1995},"Introducing Nuxt DevTools","/blog/introducing-nuxt-devtools","blog/3.introducing-nuxt-devtools",{"title":1997,"path":1998,"stem":1999},"Announcing Nuxt 3 Release Candidate","/blog/nuxt3-rc","blog/3.nuxt3-rc",{"title":2001,"path":2002,"stem":2003},"Nuxt 2 End-of-Life (EOL)","/blog/nuxt2-eol","blog/4.nuxt2-eol",{"title":2005,"path":2006,"stem":2007},"Introducing Nuxt 3 Beta","/blog/nuxt3-beta","blog/4.nuxt3-beta",{"title":2009,"path":2010,"stem":2011},"Going Full Static","/blog/going-full-static","blog/5.going-full-static",{"title":2013,"path":2014,"stem":2015},"Introducing Smart Prefetching","/blog/introducing-smart-prefetching","blog/6.introducing-smart-prefetching",{"title":2017,"path":2018,"stem":2019},"Understanding how fetch works in Nuxt 2.12","/blog/understanding-how-fetch-works-in-nuxt-2-12","blog/7.understanding-how-fetch-works-in-nuxt-2-12",{"title":2021,"path":2022,"stem":2023},"Nuxt 2 Static Improvements","/blog/nuxt-static-improvements","blog/8.nuxt-static-improvements",{"title":2025,"path":2026,"stem":2027},"Nuxt 2: From Terminal to Browser","/blog/nuxtjs-from-terminal-to-browser","blog/9.nuxtjs-from-terminal-to-browser",{"v3":2029,"v4":2030,"v2":2031},"3.21.1","4.3.1","2.18.1",{"id":2033,"title":104,"body":2034,"description":9761,"extension":9762,"links":6,"meta":9763,"navigation":9764,"path":1180,"seo":9765,"stem":1181,"titleTemplate":6,"__hash__":9766},"docsv4/docs/4.x/1.getting-started/18.upgrade.md",{"type":2035,"value":2036,"toc":9707},"minimark",[2037,2042,2047,2063,2154,2157,2164,2168,2176,2180,2187,2194,2266,2276,2327,2336,2339,2343,2350,2355,2364,2371,2387,2392,2451,2455,2458,2472,2476,2481,2492,2949,2953,2968,3286,3293,3297,3300,3303,3374,3377,3380,3383,3387,3396,3405,3413,3420,3519,3522,3526,3531,3538,3546,3549,3635,3818,3826,3829,3862,3868,3871,3957,3965,4004,4007,4083,4087,4092,4095,4103,4170,4173,4178,4181,4586,4589,4647,4651,4656,4659,4666,4669,4683,4686,4702,4705,4708,4719,4722,4728,4731,4751,4754,4917,4927,4941,4945,4949,4952,4971,4974,4977,4984,4987,4990,5019,5023,5027,5030,5033,5036,5066,5076,5082,5085,5088,5102,5104,5150,5154,5158,5161,5173,5196,5199,5202,5205,5210,5258,5274,5390,5402,5421,5428,5475,5479,5483,5486,5501,5547,5550,5583,5586,5589,5592,5606,5609,5660,5667,5671,5680,5683,5691,5748,5752,5756,5759,5762,5773,5776,5783,5830,5834,5838,5841,5854,5857,5867,5870,5878,5935,5937,5983,5987,5991,5994,6007,6010,6021,6027,6030,6039,6218,6221,6267,6280,6284,6287,6299,6302,6322,6325,6341,6349,6369,6373,6376,6398,6504,6507,6510,6522,6552,6555,6557,6612,6619,6629,6633,6636,6651,6654,6663,6668,6672,6675,6700,6703,6718,6721,6733,6752,6755,6828,6833,6902,6914,6918,6939,6942,6961,6964,6976,6979,6991,7071,7074,7120,7128,7132,7135,7149,7155,7163,7166,7187,7190,7196,7231,7234,7285,7293,7297,7317,7320,7329,7332,7342,7345,7348,7446,7454,7461,7465,7468,7476,7479,7485,7488,7496,7502,7540,7547,7555,7558,7564,7567,7579,7582,7588,7607,7611,7615,7618,7628,7631,7638,7646,7649,7652,7781,7785,7789,7792,7803,7816,7819,7826,7836,7845,7848,7851,7876,7953,7966,8372,8379,8383,8387,8390,8401,8404,8418,8421,8424,8507,8511,8515,8518,8521,8595,8598,8601,8626,8638,8641,8647,8650,9060,9063,9067,9071,9074,9077,9119,9122,9125,9128,9152,9160,9164,9167,9173,9187,9190,9200,9203,9212,9294,9300,9304,9308,9311,9332,9335,9359,9362,9373,9412,9415,9461,9465,9468,9674,9678,9681,9689,9693,9696,9703],[2038,2039,2041],"h2",{"id":2040},"upgrading-nuxt","Upgrading Nuxt",[2043,2044,2046],"h3",{"id":2045},"latest-release","Latest release",[2048,2049,2050,2051,2058,2059,2062],"p",{},"To upgrade Nuxt to the ",[2052,2053,2057],"a",{"href":2054,"rel":2055},"https://github.com/nuxt/nuxt/releases",[2056],"nofollow","latest release",", use the ",[2060,2061,813],"code",{}," command.",[2064,2065,2067,2093,2107,2121,2138],"code-group",{"sync":2066},"pm",[2068,2069,2075],"pre",{"className":2070,"code":2071,"filename":2072,"language":2073,"meta":2074,"style":2074},"language-bash shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","npx nuxt upgrade\n","npm","bash","",[2060,2076,2077],{"__ignoreMap":2074},[2078,2079,2082,2086,2090],"span",{"class":2080,"line":2081},"line",1,[2078,2083,2085],{"class":2084},"s52Pk","npx",[2078,2087,2089],{"class":2088},"sGFVr"," nuxt",[2078,2091,2092],{"class":2088}," upgrade\n",[2068,2094,2097],{"className":2070,"code":2095,"filename":2096,"language":2073,"meta":2074,"style":2074},"yarn nuxt upgrade\n","yarn",[2060,2098,2099],{"__ignoreMap":2074},[2078,2100,2101,2103,2105],{"class":2080,"line":2081},[2078,2102,2096],{"class":2084},[2078,2104,2089],{"class":2088},[2078,2106,2092],{"class":2088},[2068,2108,2111],{"className":2070,"code":2109,"filename":2110,"language":2073,"meta":2074,"style":2074},"pnpm nuxt upgrade\n","pnpm",[2060,2112,2113],{"__ignoreMap":2074},[2078,2114,2115,2117,2119],{"class":2080,"line":2081},[2078,2116,2110],{"class":2084},[2078,2118,2089],{"class":2088},[2078,2120,2092],{"class":2088},[2068,2122,2125],{"className":2070,"code":2123,"filename":2124,"language":2073,"meta":2074,"style":2074},"bun x nuxt upgrade\n","bun",[2060,2126,2127],{"__ignoreMap":2074},[2078,2128,2129,2131,2134,2136],{"class":2080,"line":2081},[2078,2130,2124],{"class":2084},[2078,2132,2133],{"class":2088}," x",[2078,2135,2089],{"class":2088},[2078,2137,2092],{"class":2088},[2068,2139,2142],{"className":2070,"code":2140,"filename":2141,"language":2073,"meta":2074,"style":2074},"deno x nuxt upgrade\n","deno",[2060,2143,2144],{"__ignoreMap":2074},[2078,2145,2146,2148,2150,2152],{"class":2080,"line":2081},[2078,2147,2141],{"class":2084},[2078,2149,2133],{"class":2088},[2078,2151,2089],{"class":2088},[2078,2153,2092],{"class":2088},[2043,2155,403],{"id":2156},"nightly-release-channel",[2048,2158,2159,2160,2163],{},"To use the latest Nuxt build and test features before their release, read about the ",[2052,2161,2162],{"href":1386},"nightly release channel"," guide.",[2038,2165,2167],{"id":2166},"testing-nuxt-5","Testing Nuxt 5",[2048,2169,2170,2171,2175],{},"Nuxt 5 is ",[2172,2173,2174],"strong",{},"currently in development",". Until the release, it is possible to test many of Nuxt 5's breaking changes from Nuxt version 4.2+.",[2043,2177,2179],{"id":2178},"opting-in-to-nuxt-5","Opting in to Nuxt 5",[2048,2181,2182,2183,2186],{},"First, upgrade Nuxt to the ",[2052,2184,2057],{"href":2054,"rel":2185},[2056],".",[2048,2188,2189,2190,2193],{},"Then you can set your ",[2060,2191,2192],{},"future.compatibilityVersion"," to match Nuxt 5 behavior:",[2068,2195,2200],{"className":2196,"code":2197,"filename":233,"language":2198,"meta":2199,"style":2074},"language-ts shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","export default defineNuxtConfig({\n  future: {\n    compatibilityVersion: 5,\n  },\n})\n","ts","twoslash",[2060,2201,2202,2223,2236,2251,2257],{"__ignoreMap":2074},[2078,2203,2204,2208,2211,2215,2219],{"class":2080,"line":2081},[2078,2205,2207],{"class":2206},"s8R28","export",[2078,2209,2210],{"class":2206}," default",[2078,2212,2214],{"class":2213},"s3cPz"," defineNuxtConfig",[2078,2216,2218],{"class":2217},"sZSNi","(",[2078,2220,2222],{"class":2221},"sDfIl","{\n",[2078,2224,2226,2230,2233],{"class":2080,"line":2225},2,[2078,2227,2229],{"class":2228},"sRlkE","  future",[2078,2231,2232],{"class":2221},":",[2078,2234,2235],{"class":2221}," {\n",[2078,2237,2239,2242,2244,2248],{"class":2080,"line":2238},3,[2078,2240,2241],{"class":2228},"    compatibilityVersion",[2078,2243,2232],{"class":2221},[2078,2245,2247],{"class":2246},"sYRBq"," 5",[2078,2249,2250],{"class":2221},",\n",[2078,2252,2254],{"class":2080,"line":2253},4,[2078,2255,2256],{"class":2221},"  },\n",[2078,2258,2260,2263],{"class":2080,"line":2259},5,[2078,2261,2262],{"class":2221},"}",[2078,2264,2265],{"class":2217},")\n",[2048,2267,2268,2269,2271,2272,2275],{},"When you set your ",[2060,2270,2192],{}," to ",[2060,2273,2274],{},"5",", defaults throughout your Nuxt configuration will change to opt in to Nuxt v5 behavior, including:",[2277,2278,2279,2290,2305,2324],"ul",{},[2280,2281,2282,2285,2286,2289],"li",{},[2172,2283,2284],{},"Vite Environment API",": Automatically enables the new ",[2052,2287,2284],{"href":2288},"/docs/4.x/getting-started/upgrade#migration-to-vite-environment-api"," for improved build configuration",[2280,2291,2292,2295,2296,2300,2301,2304],{},[2172,2293,2294],{},"Normalized Page Names",": Page component names will ",[2052,2297,2299],{"href":2298},"/docs/4.x/getting-started/upgrade#normalized-page-component-names","match their route names"," for consistent ",[2060,2302,2303],{},"\u003CKeepAlive>"," behavior",[2280,2306,2307,2312,2313,2315,2316,2320,2321],{},[2172,2308,2309,2311],{},[2060,2310,654],{}," resets to defaults",": ",[2060,2314,654],{}," will ",[2052,2317,2319],{"href":2318},"/docs/4.x/getting-started/upgrade#respect-defaults-when-clearing-usestate","reset state to its initial value"," instead of setting it to ",[2060,2322,2323],{},"undefined",[2280,2325,2326],{},"Other Nuxt 5 improvements and changes as they become available",[2328,2329,2330],"note",{},[2048,2331,2332,2333,2186],{},"This section is subject to change until the final release, so please check back here regularly if you are testing Nuxt 5 using ",[2060,2334,2335],{},"future.compatibilityVersion: 5",[2048,2337,2338],{},"Breaking or significant changes will be noted below along with migration steps for backward/forward compatibility.",[2043,2340,2342],{"id":2341},"migration-to-vite-environment-api","Migration to Vite Environment API",[2048,2344,2345,2346,2349],{},"🚦 ",[2172,2347,2348],{},"Impact Level",": Medium",[2351,2352,2354],"h4",{"id":2353},"what-changed","What Changed",[2048,2356,2357,2358,2363],{},"Nuxt 5 migrates to Vite 6's new ",[2052,2359,2362],{"href":2360,"rel":2361},"https://vite.dev/guide/api-environment",[2056],"Environment API",", which formalizes the concept of environments and provides better control over configuration per environment.",[2048,2365,2366,2367,2370],{},"Previously, Nuxt used separate client and server Vite configurations. Now, Nuxt uses a shared Vite configuration with environment-specific plugins that use the ",[2060,2368,2369],{},"applyToEnvironment()"," method to target specific environments.",[2372,2373,2374],"tip",{},[2048,2375,2376,2377,2379,2380,2383,2384,2186],{},"You can test this feature early by setting ",[2060,2378,2335],{}," (see ",[2052,2381,2167],{"href":2382},"/docs/4.x/getting-started/upgrade#testing-nuxt-5",") or by enabling it explicitly with ",[2060,2385,2386],{},"experimental.viteEnvironmentApi: true",[2048,2388,2389],{},[2172,2390,2391],{},"Key changes:",[2393,2394,2395,2414,2439],"ol",{},[2280,2396,2397,2403,2404,2406,2407,2410,2411,2413],{},[2172,2398,2399,2400],{},"Deprecated environment-specific ",[2060,2401,2402],{},"extendViteConfig()",": The ",[2060,2405,185],{}," and ",[2060,2408,2409],{},"client"," options in ",[2060,2412,2402],{}," are deprecated and will show warnings when used.",[2280,2415,2416,2419,2420,2423,2424,2427,2428,2431,2432,2427,2435,2438],{},[2172,2417,2418],{},"Changed plugin registration",": Vite plugins registered with ",[2060,2421,2422],{},"addVitePlugin()"," and only targeting one environment (by passing ",[2060,2425,2426],{},"server: false"," or ",[2060,2429,2430],{},"client: false",") will not have their ",[2060,2433,2434],{},"config",[2060,2436,2437],{},"configResolved"," hooks called.",[2280,2440,2441,2403,2444,2406,2447,2450],{},[2172,2442,2443],{},"Shared configuration",[2060,2445,2446],{},"vite:extendConfig",[2060,2448,2449],{},"vite:configResolved"," hooks now work with a shared configuration rather than separate client/server configs.",[2351,2452,2454],{"id":2453},"reasons-for-change","Reasons for Change",[2048,2456,2457],{},"The Vite Environment API provides:",[2277,2459,2460,2463,2466,2469],{},[2280,2461,2462],{},"Better consistency between development and production builds",[2280,2464,2465],{},"More granular control over environment-specific configuration",[2280,2467,2468],{},"Improved performance and plugin architecture",[2280,2470,2471],{},"Support for custom environments beyond just client and server",[2351,2473,2475],{"id":2474},"migration-steps","Migration Steps",[2477,2478,2480],"h5",{"id":2479},"_1-migrate-to-use-vite-plugins","1. Migrate to use Vite plugins",[2048,2482,2483,2484,2487,2488,2406,2490,2186],{},"We would recommend you use a Vite plugin instead of ",[2060,2485,2486],{},"extendViteConfig",", ",[2060,2489,2449],{},[2060,2491,2446],{},[2068,2493,2495],{"className":2196,"code":2494,"language":2198,"meta":2074,"style":2074},"// Before\nextendViteConfig((config) => {\n  config.optimizeDeps.include.push('my-package')\n}, { server: false })\n\nnuxt.hook('vite:extendConfig' /* or vite:configResolved */, (config, { isClient }) => {\n  if (isClient) {\n    config.optimizeDeps.include.push('my-package')\n  }\n})\n\n// After\naddVitePlugin(() => ({\n  name: 'my-plugin',\n  config (config) {\n    // you can set global vite configuration here\n  },\n  configResolved (config) {\n    // you can access the fully resolved vite configuration here\n  },\n  configEnvironment (name, config) {\n    // you can set environment-specific vite configuration here\n    if (name === 'client') {\n      config.optimizeDeps ||= {}\n      config.optimizeDeps.include ||= []\n      config.optimizeDeps.include.push('my-package')\n    }\n  },\n  applyToEnvironment (environment) {\n    return environment.name === 'client'\n  },\n}))\n",[2060,2496,2497,2503,2523,2555,2577,2582,2626,2642,2670,2676,2683,2688,2694,2711,2729,2742,2748,2753,2767,2773,2778,2798,2804,2827,2843,2861,2888,2894,2899,2914,2936,2941],{"__ignoreMap":2074},[2078,2498,2499],{"class":2080,"line":2081},[2078,2500,2502],{"class":2501},"sWuyu","// Before\n",[2078,2504,2505,2507,2509,2511,2514,2517,2521],{"class":2080,"line":2225},[2078,2506,2486],{"class":2213},[2078,2508,2218],{"class":2217},[2078,2510,2218],{"class":2221},[2078,2512,2434],{"class":2513},"s1nJG",[2078,2515,2516],{"class":2221},")",[2078,2518,2520],{"class":2519},"smZ93"," =>",[2078,2522,2235],{"class":2221},[2078,2524,2525,2528,2530,2533,2535,2538,2540,2543,2545,2548,2551,2553],{"class":2080,"line":2238},[2078,2526,2527],{"class":2217},"  config",[2078,2529,2186],{"class":2221},[2078,2531,2532],{"class":2217},"optimizeDeps",[2078,2534,2186],{"class":2221},[2078,2536,2537],{"class":2217},"include",[2078,2539,2186],{"class":2221},[2078,2541,2542],{"class":2213},"push",[2078,2544,2218],{"class":2228},[2078,2546,2547],{"class":2221},"'",[2078,2549,2550],{"class":2088},"my-package",[2078,2552,2547],{"class":2221},[2078,2554,2265],{"class":2228},[2078,2556,2557,2560,2563,2566,2568,2572,2575],{"class":2080,"line":2253},[2078,2558,2559],{"class":2221},"},",[2078,2561,2562],{"class":2221}," {",[2078,2564,2565],{"class":2228}," server",[2078,2567,2232],{"class":2221},[2078,2569,2571],{"class":2570},"sbKd-"," false",[2078,2573,2574],{"class":2221}," }",[2078,2576,2265],{"class":2217},[2078,2578,2579],{"class":2080,"line":2259},[2078,2580,2581],{"emptyLinePlaceholder":1196},"\n",[2078,2583,2585,2588,2590,2593,2595,2597,2599,2601,2604,2607,2610,2612,2614,2616,2619,2622,2624],{"class":2080,"line":2584},6,[2078,2586,2587],{"class":2217},"nuxt",[2078,2589,2186],{"class":2221},[2078,2591,2592],{"class":2213},"hook",[2078,2594,2218],{"class":2217},[2078,2596,2547],{"class":2221},[2078,2598,2446],{"class":2088},[2078,2600,2547],{"class":2221},[2078,2602,2603],{"class":2501}," /* or vite:configResolved */",[2078,2605,2606],{"class":2221},",",[2078,2608,2609],{"class":2221}," (",[2078,2611,2434],{"class":2513},[2078,2613,2606],{"class":2221},[2078,2615,2562],{"class":2221},[2078,2617,2618],{"class":2513}," isClient",[2078,2620,2621],{"class":2221}," })",[2078,2623,2520],{"class":2519},[2078,2625,2235],{"class":2221},[2078,2627,2629,2632,2634,2637,2640],{"class":2080,"line":2628},7,[2078,2630,2631],{"class":2206},"  if",[2078,2633,2609],{"class":2228},[2078,2635,2636],{"class":2217},"isClient",[2078,2638,2639],{"class":2228},") ",[2078,2641,2222],{"class":2221},[2078,2643,2645,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668],{"class":2080,"line":2644},8,[2078,2646,2647],{"class":2217},"    config",[2078,2649,2186],{"class":2221},[2078,2651,2532],{"class":2217},[2078,2653,2186],{"class":2221},[2078,2655,2537],{"class":2217},[2078,2657,2186],{"class":2221},[2078,2659,2542],{"class":2213},[2078,2661,2218],{"class":2228},[2078,2663,2547],{"class":2221},[2078,2665,2550],{"class":2088},[2078,2667,2547],{"class":2221},[2078,2669,2265],{"class":2228},[2078,2671,2673],{"class":2080,"line":2672},9,[2078,2674,2675],{"class":2221},"  }\n",[2078,2677,2679,2681],{"class":2080,"line":2678},10,[2078,2680,2262],{"class":2221},[2078,2682,2265],{"class":2217},[2078,2684,2686],{"class":2080,"line":2685},11,[2078,2687,2581],{"emptyLinePlaceholder":1196},[2078,2689,2691],{"class":2080,"line":2690},12,[2078,2692,2693],{"class":2501},"// After\n",[2078,2695,2697,2700,2702,2705,2707,2709],{"class":2080,"line":2696},13,[2078,2698,2699],{"class":2213},"addVitePlugin",[2078,2701,2218],{"class":2217},[2078,2703,2704],{"class":2221},"()",[2078,2706,2520],{"class":2519},[2078,2708,2609],{"class":2217},[2078,2710,2222],{"class":2221},[2078,2712,2714,2717,2719,2722,2725,2727],{"class":2080,"line":2713},14,[2078,2715,2716],{"class":2228},"  name",[2078,2718,2232],{"class":2221},[2078,2720,2721],{"class":2221}," '",[2078,2723,2724],{"class":2088},"my-plugin",[2078,2726,2547],{"class":2221},[2078,2728,2250],{"class":2221},[2078,2730,2732,2734,2736,2738,2740],{"class":2080,"line":2731},15,[2078,2733,2527],{"class":2228},[2078,2735,2609],{"class":2221},[2078,2737,2434],{"class":2513},[2078,2739,2516],{"class":2221},[2078,2741,2235],{"class":2221},[2078,2743,2745],{"class":2080,"line":2744},16,[2078,2746,2747],{"class":2501},"    // you can set global vite configuration here\n",[2078,2749,2751],{"class":2080,"line":2750},17,[2078,2752,2256],{"class":2221},[2078,2754,2756,2759,2761,2763,2765],{"class":2080,"line":2755},18,[2078,2757,2758],{"class":2228},"  configResolved",[2078,2760,2609],{"class":2221},[2078,2762,2434],{"class":2513},[2078,2764,2516],{"class":2221},[2078,2766,2235],{"class":2221},[2078,2768,2770],{"class":2080,"line":2769},19,[2078,2771,2772],{"class":2501},"    // you can access the fully resolved vite configuration here\n",[2078,2774,2776],{"class":2080,"line":2775},20,[2078,2777,2256],{"class":2221},[2078,2779,2781,2784,2786,2789,2791,2794,2796],{"class":2080,"line":2780},21,[2078,2782,2783],{"class":2228},"  configEnvironment",[2078,2785,2609],{"class":2221},[2078,2787,2788],{"class":2513},"name",[2078,2790,2606],{"class":2221},[2078,2792,2793],{"class":2513}," config",[2078,2795,2516],{"class":2221},[2078,2797,2235],{"class":2221},[2078,2799,2801],{"class":2080,"line":2800},22,[2078,2802,2803],{"class":2501},"    // you can set environment-specific vite configuration here\n",[2078,2805,2807,2810,2812,2814,2817,2819,2821,2823,2825],{"class":2080,"line":2806},23,[2078,2808,2809],{"class":2206},"    if",[2078,2811,2609],{"class":2228},[2078,2813,2788],{"class":2217},[2078,2815,2816],{"class":2221}," ===",[2078,2818,2721],{"class":2221},[2078,2820,2409],{"class":2088},[2078,2822,2547],{"class":2221},[2078,2824,2639],{"class":2228},[2078,2826,2222],{"class":2221},[2078,2828,2830,2833,2835,2837,2840],{"class":2080,"line":2829},24,[2078,2831,2832],{"class":2217},"      config",[2078,2834,2186],{"class":2221},[2078,2836,2532],{"class":2217},[2078,2838,2839],{"class":2221}," ||=",[2078,2841,2842],{"class":2221}," {}\n",[2078,2844,2846,2848,2850,2852,2854,2856,2858],{"class":2080,"line":2845},25,[2078,2847,2832],{"class":2217},[2078,2849,2186],{"class":2221},[2078,2851,2532],{"class":2217},[2078,2853,2186],{"class":2221},[2078,2855,2537],{"class":2217},[2078,2857,2839],{"class":2221},[2078,2859,2860],{"class":2228}," []\n",[2078,2862,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886],{"class":2080,"line":2863},26,[2078,2865,2832],{"class":2217},[2078,2867,2186],{"class":2221},[2078,2869,2532],{"class":2217},[2078,2871,2186],{"class":2221},[2078,2873,2537],{"class":2217},[2078,2875,2186],{"class":2221},[2078,2877,2542],{"class":2213},[2078,2879,2218],{"class":2228},[2078,2881,2547],{"class":2221},[2078,2883,2550],{"class":2088},[2078,2885,2547],{"class":2221},[2078,2887,2265],{"class":2228},[2078,2889,2891],{"class":2080,"line":2890},27,[2078,2892,2893],{"class":2221},"    }\n",[2078,2895,2897],{"class":2080,"line":2896},28,[2078,2898,2256],{"class":2221},[2078,2900,2902,2905,2907,2910,2912],{"class":2080,"line":2901},29,[2078,2903,2904],{"class":2228},"  applyToEnvironment",[2078,2906,2609],{"class":2221},[2078,2908,2909],{"class":2513},"environment",[2078,2911,2516],{"class":2221},[2078,2913,2235],{"class":2221},[2078,2915,2917,2920,2923,2925,2927,2929,2931,2933],{"class":2080,"line":2916},30,[2078,2918,2919],{"class":2206},"    return",[2078,2921,2922],{"class":2217}," environment",[2078,2924,2186],{"class":2221},[2078,2926,2788],{"class":2217},[2078,2928,2816],{"class":2221},[2078,2930,2721],{"class":2221},[2078,2932,2409],{"class":2088},[2078,2934,2935],{"class":2221},"'\n",[2078,2937,2939],{"class":2080,"line":2938},31,[2078,2940,2256],{"class":2221},[2078,2942,2944,2946],{"class":2080,"line":2943},32,[2078,2945,2262],{"class":2221},[2078,2947,2948],{"class":2217},"))\n",[2477,2950,2952],{"id":2951},"_2-migrate-vite-plugins-to-use-environments","2. Migrate Vite plugins to use environments",[2048,2954,2955,2956,2958,2959,2427,2961,2963,2964,2967],{},"Instead of using ",[2060,2957,2699],{}," with ",[2060,2960,2426],{},[2060,2962,2430],{},", you can instead use the new ",[2060,2965,2966],{},"applyToEnvironment"," hook within your plugin.",[2068,2969,2971],{"className":2196,"code":2970,"language":2198,"meta":2074,"style":2074},"// Before\naddVitePlugin(() => ({\n  name: 'my-plugin',\n  config (config) {\n    config.optimizeDeps.include.push('my-package')\n  },\n}), { client: false })\n\n// After\naddVitePlugin(() => ({\n  name: 'my-plugin',\n  config (config) {\n    // you can set global vite configuration here\n  },\n  configResolved (config) {\n    // you can access the fully resolved vite configuration here\n  },\n  configEnvironment (name, config) {\n    // you can set environment-specific vite configuration here\n    if (name === 'client') {\n      config.optimizeDeps ||= {}\n      config.optimizeDeps.include ||= []\n      config.optimizeDeps.include.push('my-package')\n    }\n  },\n  applyToEnvironment (environment) {\n    return environment.name === 'client'\n  },\n}))\n",[2060,2972,2973,2977,2991,3005,3017,3043,3047,3068,3072,3076,3090,3104,3116,3120,3124,3136,3140,3144,3160,3164,3184,3196,3212,3238,3242,3246,3258,3276,3280],{"__ignoreMap":2074},[2078,2974,2975],{"class":2080,"line":2081},[2078,2976,2502],{"class":2501},[2078,2978,2979,2981,2983,2985,2987,2989],{"class":2080,"line":2225},[2078,2980,2699],{"class":2213},[2078,2982,2218],{"class":2217},[2078,2984,2704],{"class":2221},[2078,2986,2520],{"class":2519},[2078,2988,2609],{"class":2217},[2078,2990,2222],{"class":2221},[2078,2992,2993,2995,2997,2999,3001,3003],{"class":2080,"line":2238},[2078,2994,2716],{"class":2228},[2078,2996,2232],{"class":2221},[2078,2998,2721],{"class":2221},[2078,3000,2724],{"class":2088},[2078,3002,2547],{"class":2221},[2078,3004,2250],{"class":2221},[2078,3006,3007,3009,3011,3013,3015],{"class":2080,"line":2253},[2078,3008,2527],{"class":2228},[2078,3010,2609],{"class":2221},[2078,3012,2434],{"class":2513},[2078,3014,2516],{"class":2221},[2078,3016,2235],{"class":2221},[2078,3018,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041],{"class":2080,"line":2259},[2078,3020,2647],{"class":2217},[2078,3022,2186],{"class":2221},[2078,3024,2532],{"class":2217},[2078,3026,2186],{"class":2221},[2078,3028,2537],{"class":2217},[2078,3030,2186],{"class":2221},[2078,3032,2542],{"class":2213},[2078,3034,2218],{"class":2228},[2078,3036,2547],{"class":2221},[2078,3038,2550],{"class":2088},[2078,3040,2547],{"class":2221},[2078,3042,2265],{"class":2228},[2078,3044,3045],{"class":2080,"line":2584},[2078,3046,2256],{"class":2221},[2078,3048,3049,3051,3053,3055,3057,3060,3062,3064,3066],{"class":2080,"line":2628},[2078,3050,2262],{"class":2221},[2078,3052,2516],{"class":2217},[2078,3054,2606],{"class":2221},[2078,3056,2562],{"class":2221},[2078,3058,3059],{"class":2228}," client",[2078,3061,2232],{"class":2221},[2078,3063,2571],{"class":2570},[2078,3065,2574],{"class":2221},[2078,3067,2265],{"class":2217},[2078,3069,3070],{"class":2080,"line":2644},[2078,3071,2581],{"emptyLinePlaceholder":1196},[2078,3073,3074],{"class":2080,"line":2672},[2078,3075,2693],{"class":2501},[2078,3077,3078,3080,3082,3084,3086,3088],{"class":2080,"line":2678},[2078,3079,2699],{"class":2213},[2078,3081,2218],{"class":2217},[2078,3083,2704],{"class":2221},[2078,3085,2520],{"class":2519},[2078,3087,2609],{"class":2217},[2078,3089,2222],{"class":2221},[2078,3091,3092,3094,3096,3098,3100,3102],{"class":2080,"line":2685},[2078,3093,2716],{"class":2228},[2078,3095,2232],{"class":2221},[2078,3097,2721],{"class":2221},[2078,3099,2724],{"class":2088},[2078,3101,2547],{"class":2221},[2078,3103,2250],{"class":2221},[2078,3105,3106,3108,3110,3112,3114],{"class":2080,"line":2690},[2078,3107,2527],{"class":2228},[2078,3109,2609],{"class":2221},[2078,3111,2434],{"class":2513},[2078,3113,2516],{"class":2221},[2078,3115,2235],{"class":2221},[2078,3117,3118],{"class":2080,"line":2696},[2078,3119,2747],{"class":2501},[2078,3121,3122],{"class":2080,"line":2713},[2078,3123,2256],{"class":2221},[2078,3125,3126,3128,3130,3132,3134],{"class":2080,"line":2731},[2078,3127,2758],{"class":2228},[2078,3129,2609],{"class":2221},[2078,3131,2434],{"class":2513},[2078,3133,2516],{"class":2221},[2078,3135,2235],{"class":2221},[2078,3137,3138],{"class":2080,"line":2744},[2078,3139,2772],{"class":2501},[2078,3141,3142],{"class":2080,"line":2750},[2078,3143,2256],{"class":2221},[2078,3145,3146,3148,3150,3152,3154,3156,3158],{"class":2080,"line":2755},[2078,3147,2783],{"class":2228},[2078,3149,2609],{"class":2221},[2078,3151,2788],{"class":2513},[2078,3153,2606],{"class":2221},[2078,3155,2793],{"class":2513},[2078,3157,2516],{"class":2221},[2078,3159,2235],{"class":2221},[2078,3161,3162],{"class":2080,"line":2769},[2078,3163,2803],{"class":2501},[2078,3165,3166,3168,3170,3172,3174,3176,3178,3180,3182],{"class":2080,"line":2775},[2078,3167,2809],{"class":2206},[2078,3169,2609],{"class":2228},[2078,3171,2788],{"class":2217},[2078,3173,2816],{"class":2221},[2078,3175,2721],{"class":2221},[2078,3177,2409],{"class":2088},[2078,3179,2547],{"class":2221},[2078,3181,2639],{"class":2228},[2078,3183,2222],{"class":2221},[2078,3185,3186,3188,3190,3192,3194],{"class":2080,"line":2780},[2078,3187,2832],{"class":2217},[2078,3189,2186],{"class":2221},[2078,3191,2532],{"class":2217},[2078,3193,2839],{"class":2221},[2078,3195,2842],{"class":2221},[2078,3197,3198,3200,3202,3204,3206,3208,3210],{"class":2080,"line":2800},[2078,3199,2832],{"class":2217},[2078,3201,2186],{"class":2221},[2078,3203,2532],{"class":2217},[2078,3205,2186],{"class":2221},[2078,3207,2537],{"class":2217},[2078,3209,2839],{"class":2221},[2078,3211,2860],{"class":2228},[2078,3213,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3236],{"class":2080,"line":2806},[2078,3215,2832],{"class":2217},[2078,3217,2186],{"class":2221},[2078,3219,2532],{"class":2217},[2078,3221,2186],{"class":2221},[2078,3223,2537],{"class":2217},[2078,3225,2186],{"class":2221},[2078,3227,2542],{"class":2213},[2078,3229,2218],{"class":2228},[2078,3231,2547],{"class":2221},[2078,3233,2550],{"class":2088},[2078,3235,2547],{"class":2221},[2078,3237,2265],{"class":2228},[2078,3239,3240],{"class":2080,"line":2829},[2078,3241,2893],{"class":2221},[2078,3243,3244],{"class":2080,"line":2845},[2078,3245,2256],{"class":2221},[2078,3247,3248,3250,3252,3254,3256],{"class":2080,"line":2863},[2078,3249,2904],{"class":2228},[2078,3251,2609],{"class":2221},[2078,3253,2909],{"class":2513},[2078,3255,2516],{"class":2221},[2078,3257,2235],{"class":2221},[2078,3259,3260,3262,3264,3266,3268,3270,3272,3274],{"class":2080,"line":2890},[2078,3261,2919],{"class":2206},[2078,3263,2922],{"class":2217},[2078,3265,2186],{"class":2221},[2078,3267,2788],{"class":2217},[2078,3269,2816],{"class":2221},[2078,3271,2721],{"class":2221},[2078,3273,2409],{"class":2088},[2078,3275,2935],{"class":2221},[2078,3277,3278],{"class":2080,"line":2896},[2078,3279,2256],{"class":2221},[2078,3281,3282,3284],{"class":2080,"line":2901},[2078,3283,2262],{"class":2221},[2078,3285,2948],{"class":2217},[3287,3288,3290],"read-more",{"to":2360,"target":3289},"_blank",[2048,3291,3292],{},"Learn more about Vite's Environment API",[2038,3294,3296],{"id":3295},"migrating-to-nuxt-4","Migrating to Nuxt 4",[2048,3298,3299],{},"Nuxt 4 includes significant improvements and changes. This guide will help you migrate your existing Nuxt 3 application to Nuxt 4.",[2048,3301,3302],{},"First, upgrade to Nuxt 4:",[2064,3304,3305,3320,3334,3347,3360],{"sync":2066},[2068,3306,3308],{"className":2070,"code":3307,"filename":2072,"language":2073,"meta":2074,"style":2074},"npm install nuxt@^4.0.0\n",[2060,3309,3310],{"__ignoreMap":2074},[2078,3311,3312,3314,3317],{"class":2080,"line":2081},[2078,3313,2072],{"class":2084},[2078,3315,3316],{"class":2088}," install",[2078,3318,3319],{"class":2088}," nuxt@^4.0.0\n",[2068,3321,3323],{"className":2070,"code":3322,"filename":2096,"language":2073,"meta":2074,"style":2074},"yarn add nuxt@^4.0.0\n",[2060,3324,3325],{"__ignoreMap":2074},[2078,3326,3327,3329,3332],{"class":2080,"line":2081},[2078,3328,2096],{"class":2084},[2078,3330,3331],{"class":2088}," add",[2078,3333,3319],{"class":2088},[2068,3335,3337],{"className":2070,"code":3336,"filename":2110,"language":2073,"meta":2074,"style":2074},"pnpm add nuxt@^4.0.0\n",[2060,3338,3339],{"__ignoreMap":2074},[2078,3340,3341,3343,3345],{"class":2080,"line":2081},[2078,3342,2110],{"class":2084},[2078,3344,3331],{"class":2088},[2078,3346,3319],{"class":2088},[2068,3348,3350],{"className":2070,"code":3349,"filename":2124,"language":2073,"meta":2074,"style":2074},"bun add nuxt@^4.0.0\n",[2060,3351,3352],{"__ignoreMap":2074},[2078,3353,3354,3356,3358],{"class":2080,"line":2081},[2078,3355,2124],{"class":2084},[2078,3357,3331],{"class":2088},[2078,3359,3319],{"class":2088},[2068,3361,3363],{"className":2070,"code":3362,"filename":2141,"language":2073,"meta":2074,"style":2074},"deno add npm:nuxt@^4.0.0\n",[2060,3364,3365],{"__ignoreMap":2074},[2078,3366,3367,3369,3371],{"class":2080,"line":2081},[2078,3368,2141],{"class":2084},[2078,3370,3331],{"class":2088},[2078,3372,3373],{"class":2088}," npm:nuxt@^4.0.0\n",[2048,3375,3376],{},"After upgrading, most Nuxt 4 behaviors are now the default. However, some features can still be configured if you need to maintain backward compatibility during your migration.",[2048,3378,3379],{},"The following sections detail the key changes and migrations needed when upgrading to Nuxt 4.",[2048,3381,3382],{},"Breaking or significant changes are documented below along with migration steps and available configuration options.",[2043,3384,3386],{"id":3385},"migrating-using-codemods","Migrating Using Codemods",[2048,3388,3389,3390,3395],{},"To facilitate the upgrade process, we have collaborated with the ",[2052,3391,3394],{"href":3392,"rel":3393},"https://github.com/codemod/codemod",[2056],"Codemod"," team to automate many migration steps with some open-source codemods.",[2328,3397,3398],{},[2048,3399,3400,3401,3404],{},"If you encounter any issues, please report them to the Codemod team with ",[2060,3402,3403],{},"npx codemod feedback"," 🙏",[2048,3406,3407,3408,2186],{},"For a complete list of Nuxt 4 codemods, detailed information on each, their source, and various ways to run them, visit the ",[2052,3409,3412],{"href":3410,"rel":3411},"https://app.codemod.com/registry",[2056],"Codemod Registry",[2048,3414,3415,3416,3419],{},"You can run all the codemods mentioned in this guide using the following ",[2060,3417,3418],{},"codemod"," recipe:",[2064,3421,3422,3442,3462,3481,3500],{},[2068,3423,3425],{"className":2070,"code":3424,"filename":2072,"language":2073,"meta":2074,"style":2074},"# Using pinned version due to https://github.com/codemod/codemod/issues/1710\nnpx codemod@0.18.7 nuxt/4/migration-recipe\n",[2060,3426,3427,3432],{"__ignoreMap":2074},[2078,3428,3429],{"class":2080,"line":2081},[2078,3430,3431],{"class":2501},"# Using pinned version due to https://github.com/codemod/codemod/issues/1710\n",[2078,3433,3434,3436,3439],{"class":2080,"line":2225},[2078,3435,2085],{"class":2084},[2078,3437,3438],{"class":2088}," codemod@0.18.7",[2078,3440,3441],{"class":2088}," nuxt/4/migration-recipe\n",[2068,3443,3445],{"className":2070,"code":3444,"filename":2096,"language":2073,"meta":2074,"style":2074},"# Using pinned version due to https://github.com/codemod/codemod/issues/1710\nyarn dlx codemod@0.18.7 nuxt/4/migration-recipe\n",[2060,3446,3447,3451],{"__ignoreMap":2074},[2078,3448,3449],{"class":2080,"line":2081},[2078,3450,3431],{"class":2501},[2078,3452,3453,3455,3458,3460],{"class":2080,"line":2225},[2078,3454,2096],{"class":2084},[2078,3456,3457],{"class":2088}," dlx",[2078,3459,3438],{"class":2088},[2078,3461,3441],{"class":2088},[2068,3463,3465],{"className":2070,"code":3464,"filename":2110,"language":2073,"meta":2074,"style":2074},"# Using pinned version due to https://github.com/codemod/codemod/issues/1710\npnpm dlx codemod@0.18.7 nuxt/4/migration-recipe\n",[2060,3466,3467,3471],{"__ignoreMap":2074},[2078,3468,3469],{"class":2080,"line":2081},[2078,3470,3431],{"class":2501},[2078,3472,3473,3475,3477,3479],{"class":2080,"line":2225},[2078,3474,2110],{"class":2084},[2078,3476,3457],{"class":2088},[2078,3478,3438],{"class":2088},[2078,3480,3441],{"class":2088},[2068,3482,3484],{"className":2070,"code":3483,"filename":2124,"language":2073,"meta":2074,"style":2074},"# Using pinned version due to https://github.com/codemod/codemod/issues/1710\nbun x codemod@0.18.7 nuxt/4/migration-recipe\n",[2060,3485,3486,3490],{"__ignoreMap":2074},[2078,3487,3488],{"class":2080,"line":2081},[2078,3489,3431],{"class":2501},[2078,3491,3492,3494,3496,3498],{"class":2080,"line":2225},[2078,3493,2124],{"class":2084},[2078,3495,2133],{"class":2088},[2078,3497,3438],{"class":2088},[2078,3499,3441],{"class":2088},[2068,3501,3503],{"className":2070,"code":3502,"filename":2141,"language":2073,"meta":2074,"style":2074},"# Using pinned version due to https://github.com/codemod/codemod/issues/1710\ndeno x codemod@0.18.7 nuxt/4/migration-recipe\n",[2060,3504,3505,3509],{"__ignoreMap":2074},[2078,3506,3507],{"class":2080,"line":2081},[2078,3508,3431],{"class":2501},[2078,3510,3511,3513,3515,3517],{"class":2080,"line":2225},[2078,3512,2141],{"class":2084},[2078,3514,2133],{"class":2088},[2078,3516,3438],{"class":2088},[2078,3518,3441],{"class":2088},[2048,3520,3521],{},"This command will execute all codemods in sequence, with the option to deselect any that you do not wish to run. Each codemod is also listed below alongside its respective change and can be executed independently.",[2043,3523,3525],{"id":3524},"new-directory-structure","New Directory Structure",[2048,3527,2345,3528,3530],{},[2172,3529,2348],{},": Significant",[2048,3532,3533,3534,3537],{},"Nuxt now defaults to a new directory structure, with backwards compatibility (so if Nuxt detects you are using the old structure, such as with a top-level ",[2060,3535,3536],{},"app/pages/"," directory, this new structure will not apply).",[2048,3539,3540,3541],{},"👉 ",[2052,3542,3545],{"href":3543,"rel":3544},"https://github.com/nuxt/nuxt/issues/26444",[2056],"See full RFC",[2351,3547,2354],{"id":3548},"what-changed-1",[2277,3550,3551,3561,3574,3590,3604,3621],{},[2280,3552,3553,3554,3557,3558,3560],{},"the new Nuxt default ",[2060,3555,3556],{},"srcDir"," is ",[2060,3559,1195],{}," by default, and most things are resolved from there.",[2280,3562,3563,3566,3567,3570,3571],{},[2060,3564,3565],{},"serverDir"," now defaults to ",[2060,3568,3569],{},"\u003CrootDir>/server"," rather than ",[2060,3572,3573],{},"\u003CsrcDir>/server",[2280,3575,3576,2487,3579,2406,3582,3585,3586,3589],{},[2060,3577,3578],{},"layers/",[2060,3580,3581],{},"modules/",[2060,3583,3584],{},"public/"," are resolved relative to ",[2060,3587,3588],{},"\u003CrootDir>"," by default",[2280,3591,3592,3593,2487,3598,3601,3602],{},"if using ",[2052,3594,3597],{"href":3595,"rel":3596},"https://github.com/nuxt/content/pull/2649",[2056],"Nuxt Content v2.13+",[2060,3599,3600],{},"content/"," is resolved relative to ",[2060,3603,3588],{},[2280,3605,3606,3607,3610,3611,2406,3614,3617,3618],{},"a new ",[2060,3608,3609],{},"dir.app"," is added, which is the directory we look for ",[2060,3612,3613],{},"router.options.ts",[2060,3615,3616],{},"spa-loading-template.html"," - this defaults to ",[2060,3619,3620],{},"\u003CsrcDir>/",[2280,3622,3606,3623,3628,3629,2406,3632],{},[2052,3624,3625],{"href":1253},[2060,3626,3627],{},"shared/"," directory is available for code shared between the Vue app and the Nitro server, with auto-imports for ",[2060,3630,3631],{},"shared/utils/",[2060,3633,3634],{},"shared/types/",[3636,3637,3638,3642,3790],"details",{},[3639,3640,3641],"summary",{},"An example v4 folder structure.",[2068,3643,3647],{"className":3644,"code":3645,"language":3646,"meta":2074,"style":2074},"language-sh shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight",".output/\n.nuxt/\napp/\n  assets/\n  components/\n  composables/\n  layouts/\n  middleware/\n  pages/\n  plugins/\n  utils/\n  app.config.ts\n  app.vue\n  router.options.ts\ncontent/\nlayers/\nmodules/\nnode_modules/\npublic/\nshared/\n  types/\n  utils/\nserver/\n  api/\n  middleware/\n  plugins/\n  routes/\n  utils/\nnuxt.config.ts\n","sh",[2060,3648,3649,3654,3659,3664,3669,3674,3679,3684,3689,3694,3699,3704,3709,3714,3719,3724,3729,3734,3739,3744,3749,3754,3758,3763,3768,3772,3776,3781,3785],{"__ignoreMap":2074},[2078,3650,3651],{"class":2080,"line":2081},[2078,3652,3653],{"class":2084},".output/\n",[2078,3655,3656],{"class":2080,"line":2225},[2078,3657,3658],{"class":2084},".nuxt/\n",[2078,3660,3661],{"class":2080,"line":2238},[2078,3662,3663],{"class":2084},"app/\n",[2078,3665,3666],{"class":2080,"line":2253},[2078,3667,3668],{"class":2084},"  assets/\n",[2078,3670,3671],{"class":2080,"line":2259},[2078,3672,3673],{"class":2084},"  components/\n",[2078,3675,3676],{"class":2080,"line":2584},[2078,3677,3678],{"class":2084},"  composables/\n",[2078,3680,3681],{"class":2080,"line":2628},[2078,3682,3683],{"class":2084},"  layouts/\n",[2078,3685,3686],{"class":2080,"line":2644},[2078,3687,3688],{"class":2084},"  middleware/\n",[2078,3690,3691],{"class":2080,"line":2672},[2078,3692,3693],{"class":2084},"  pages/\n",[2078,3695,3696],{"class":2080,"line":2678},[2078,3697,3698],{"class":2084},"  plugins/\n",[2078,3700,3701],{"class":2080,"line":2685},[2078,3702,3703],{"class":2084},"  utils/\n",[2078,3705,3706],{"class":2080,"line":2690},[2078,3707,3708],{"class":2084},"  app.config.ts\n",[2078,3710,3711],{"class":2080,"line":2696},[2078,3712,3713],{"class":2084},"  app.vue\n",[2078,3715,3716],{"class":2080,"line":2713},[2078,3717,3718],{"class":2084},"  router.options.ts\n",[2078,3720,3721],{"class":2080,"line":2731},[2078,3722,3723],{"class":2084},"content/\n",[2078,3725,3726],{"class":2080,"line":2744},[2078,3727,3728],{"class":2084},"layers/\n",[2078,3730,3731],{"class":2080,"line":2750},[2078,3732,3733],{"class":2084},"modules/\n",[2078,3735,3736],{"class":2080,"line":2755},[2078,3737,3738],{"class":2084},"node_modules/\n",[2078,3740,3741],{"class":2080,"line":2769},[2078,3742,3743],{"class":2084},"public/\n",[2078,3745,3746],{"class":2080,"line":2775},[2078,3747,3748],{"class":2084},"shared/\n",[2078,3750,3751],{"class":2080,"line":2780},[2078,3752,3753],{"class":2084},"  types/\n",[2078,3755,3756],{"class":2080,"line":2800},[2078,3757,3703],{"class":2084},[2078,3759,3760],{"class":2080,"line":2806},[2078,3761,3762],{"class":2084},"server/\n",[2078,3764,3765],{"class":2080,"line":2829},[2078,3766,3767],{"class":2084},"  api/\n",[2078,3769,3770],{"class":2080,"line":2845},[2078,3771,3688],{"class":2084},[2078,3773,3774],{"class":2080,"line":2863},[2078,3775,3698],{"class":2084},[2078,3777,3778],{"class":2080,"line":2890},[2078,3779,3780],{"class":2084},"  routes/\n",[2078,3782,3783],{"class":2080,"line":2896},[2078,3784,3703],{"class":2084},[2078,3786,3787],{"class":2080,"line":2901},[2078,3788,3789],{"class":2084},"nuxt.config.ts\n",[2328,3791,3792],{},[2048,3793,3794,3795,3798,3799,3801,3802,3804,3805,3808,3809,2487,3812,2271,3815,3817],{},"With this new structure, the ",[2060,3796,3797],{},"~"," alias now points to the ",[2060,3800,1195],{}," directory by default (your ",[2060,3803,3556],{},"). This means ",[2060,3806,3807],{},"~/components"," resolves to ",[2060,3810,3811],{},"app/components/",[2060,3813,3814],{},"~/pages",[2060,3816,3536],{},", etc.",[2048,3819,3820,3821,2186],{},"👉 For more details, see the ",[2052,3822,3825],{"href":3823,"rel":3824},"https://github.com/nuxt/nuxt/pull/27029",[2056],"PR implementing this change",[2351,3827,2454],{"id":3828},"reasons-for-change-1",[2393,3830,3831,3844],{},[2280,3832,3833,3836,3837,2406,3840,3843],{},[2172,3834,3835],{},"Performance"," - placing all your code in the root of your repo causes issues with ",[2060,3838,3839],{},".git/",[2060,3841,3842],{},"node_modules/"," folders being scanned/included by FS watchers which can significantly delay startup on non-Mac OSes.",[2280,3845,3846,3849,3850,3853,3854,3856,3857,3861],{},[2172,3847,3848],{},"IDE type-safety"," - ",[2060,3851,3852],{},"server/"," and the rest of your app are running in two entirely different contexts with different global imports available, and making sure ",[2060,3855,3852],{}," isn't ",[3858,3859,3860],"em",{},"inside"," the same folder as the rest of your app is a big first step to ensuring you get good auto-completes in your IDE.",[3863,3864],"video-accordion",{"platform":3865,"title":3866,"video-id":3867},"vimeo","Watch a video from Vue School on the new directory structure","1031028378",[2351,3869,2475],{"id":3870},"migration-steps-1",[2393,3872,3873,3878,3919,3940],{},[2280,3874,3875,3876,2186],{},"Create a new directory called ",[2060,3877,1195],{},[2280,3879,3880,3881,2487,3884,2487,3887,2487,3890,2487,3893,2487,3896,2487,3898,2406,3901,3904,3905,2487,3907,2487,3909,3911,3912,2427,3915,3918],{},"Move your ",[2060,3882,3883],{},"assets/",[2060,3885,3886],{},"components/",[2060,3888,3889],{},"composables/",[2060,3891,3892],{},"app/layouts/",[2060,3894,3895],{},"app/middleware/",[2060,3897,3536],{},[2060,3899,3900],{},"app/plugins/",[2060,3902,3903],{},"utils/"," folders under it, as well as ",[2060,3906,219],{},[2060,3908,229],{},[2060,3910,224],{},". If you have an ",[2060,3913,3914],{},"app/router-options.ts",[2060,3916,3917],{},"app/spa-loading-template.html",", these paths remain the same.",[2280,3920,3921,3922,2487,3924,2487,3926,2487,3928,2487,3930,2487,3932,2406,3934,3936,3937,3939],{},"Make sure your ",[2060,3923,233],{},[2060,3925,3600],{},[2060,3927,3578],{},[2060,3929,3581],{},[2060,3931,3584],{},[2060,3933,3627],{},[2060,3935,3852],{}," folders remain outside the ",[2060,3938,1195],{}," folder, in the root of your project.",[2280,3941,3942,3943,2427,3946,3949,3950,3953,3954,3956],{},"Remember to update any third-party configuration files to work with the new directory structure, such as your ",[2060,3944,3945],{},"tailwindcss",[2060,3947,3948],{},"eslint"," configuration (if required - ",[2060,3951,3952],{},"@nuxtjs/tailwindcss"," should automatically configure ",[2060,3955,3945],{}," correctly).",[2372,3958,3959],{},[2048,3960,3961,3962],{},"You can automate this migration by running ",[2060,3963,3964],{},"npx codemod@latest nuxt/4/file-structure",[2048,3966,3967,3968,3971,3972,3975,3976,3978,3979,2487,3981,2487,3983,2406,3985,3987,3988,3991,3992,3994,3995,2487,3998,2406,4001,4003],{},"However, migration is ",[3858,3969,3970],{},"not required",". If you wish to keep your current folder structure, Nuxt should auto-detect it. (If it does not, please raise an issue.) The one exception is that if you ",[3858,3973,3974],{},"already"," have a custom ",[2060,3977,3556],{},". In this case, you should be aware that your ",[2060,3980,3581],{},[2060,3982,3584],{},[2060,3984,3627],{},[2060,3986,3852],{}," folders will be resolved from your ",[2060,3989,3990],{},"rootDir"," rather than from your custom ",[2060,3993,3556],{},". You can override this by configuring ",[2060,3996,3997],{},"dir.modules",[2060,3999,4000],{},"dir.public",[2060,4002,3565],{}," if you need to.",[2048,4005,4006],{},"You can also force a v3 folder structure with the following configuration:",[2068,4008,4010],{"className":2196,"code":4009,"filename":233,"language":2198,"meta":2074,"style":2074},"export default defineNuxtConfig({\n  // This reverts the new srcDir default from `app` back to your root directory\n  srcDir: '.',\n  // This specifies the directory prefix for `router.options.ts` and `spa-loading-template.html`\n  dir: {\n    app: 'app',\n  },\n})\n",[2060,4011,4012,4024,4029,4044,4049,4058,4073,4077],{"__ignoreMap":2074},[2078,4013,4014,4016,4018,4020,4022],{"class":2080,"line":2081},[2078,4015,2207],{"class":2206},[2078,4017,2210],{"class":2206},[2078,4019,2214],{"class":2213},[2078,4021,2218],{"class":2217},[2078,4023,2222],{"class":2221},[2078,4025,4026],{"class":2080,"line":2225},[2078,4027,4028],{"class":2501},"  // This reverts the new srcDir default from `app` back to your root directory\n",[2078,4030,4031,4034,4036,4038,4040,4042],{"class":2080,"line":2238},[2078,4032,4033],{"class":2228},"  srcDir",[2078,4035,2232],{"class":2221},[2078,4037,2721],{"class":2221},[2078,4039,2186],{"class":2088},[2078,4041,2547],{"class":2221},[2078,4043,2250],{"class":2221},[2078,4045,4046],{"class":2080,"line":2253},[2078,4047,4048],{"class":2501},"  // This specifies the directory prefix for `router.options.ts` and `spa-loading-template.html`\n",[2078,4050,4051,4054,4056],{"class":2080,"line":2259},[2078,4052,4053],{"class":2228},"  dir",[2078,4055,2232],{"class":2221},[2078,4057,2235],{"class":2221},[2078,4059,4060,4063,4065,4067,4069,4071],{"class":2080,"line":2584},[2078,4061,4062],{"class":2228},"    app",[2078,4064,2232],{"class":2221},[2078,4066,2721],{"class":2221},[2078,4068,1193],{"class":2088},[2078,4070,2547],{"class":2221},[2078,4072,2250],{"class":2221},[2078,4074,4075],{"class":2080,"line":2628},[2078,4076,2256],{"class":2221},[2078,4078,4079,4081],{"class":2080,"line":2644},[2078,4080,2262],{"class":2221},[2078,4082,2265],{"class":2217},[2043,4084,4086],{"id":4085},"singleton-data-fetching-layer","Singleton Data Fetching Layer",[2048,4088,2345,4089,4091],{},[2172,4090,2348],{},": Moderate",[2351,4093,2354],{"id":4094},"what-changed-2",[2048,4096,4097,4098,2406,4100,4102],{},"Nuxt's data fetching system (",[2060,4099,515],{},[2060,4101,527],{},") has been significantly reorganized for better performance and consistency:",[2393,4104,4105,4142,4155,4161],{},[2280,4106,4107,4110,4111,2427,4113,4115,4116,2487,4119,2406,4122,4125,4126,2487,4129,2487,4132,2487,4135,2427,4138,4141],{},[2172,4108,4109],{},"Shared refs for the same key",": All calls to ",[2060,4112,515],{},[2060,4114,527],{}," with the same key now share the same ",[2060,4117,4118],{},"data",[2060,4120,4121],{},"error",[2060,4123,4124],{},"status"," refs. This means that it is important that all calls with an explicit key must not have conflicting ",[2060,4127,4128],{},"deep",[2060,4130,4131],{},"transform",[2060,4133,4134],{},"pick",[2060,4136,4137],{},"getCachedData",[2060,4139,4140],{},"default"," options.",[2280,4143,4144,2403,4149,4151,4152,4154],{},[2172,4145,4146,4147],{},"More control over ",[2060,4148,4137],{},[2060,4150,4137],{}," function is now called every time data is fetched, even if this is caused by a watcher or calling ",[2060,4153,722],{},". (Previously, new data was always fetched and this function was not called in these cases.) To allow more control over when to use cached data and when to refetch, the function now receives a context object with the cause of the request.",[2280,4156,4157,4160],{},[2172,4158,4159],{},"Reactive key support",": You can now use computed refs, plain refs or getter functions as keys, which enables automatic data refetching (and stores data separately).",[2280,4162,4163,4166,4167,4169],{},[2172,4164,4165],{},"Data cleanup",": When the last component using data fetched with ",[2060,4168,515],{}," is unmounted, Nuxt will remove that data to avoid ever-growing memory usage.",[2351,4171,2454],{"id":4172},"reasons-for-change-2",[2048,4174,4175,4176,2186],{},"These changes have been made to improve memory usage and increase consistency with loading states across calls of ",[2060,4177,515],{},[2351,4179,2475],{"id":4180},"migration-steps-2",[2393,4182,4183,4486],{},[2280,4184,4185,4188,4189,4327,4330,4331,4333,4334],{},[2172,4186,4187],{},"Check for inconsistent options",": Review any components using the same key with different options or fetch functions.",[2068,4190,4192],{"className":2196,"code":4191,"language":2198,"meta":2074,"style":2074},"// This will now trigger a warning\nconst { data: users1 } = useAsyncData('users', () => $fetch('/api/users'), { deep: false })\nconst { data: users2 } = useAsyncData('users', () => $fetch('/api/users'), { deep: true })\n",[2060,4193,4194,4199,4267],{"__ignoreMap":2074},[2078,4195,4196],{"class":2080,"line":2081},[2078,4197,4198],{"class":2501},"// This will now trigger a warning\n",[2078,4200,4201,4204,4206,4209,4211,4214,4216,4219,4222,4224,4226,4229,4231,4233,4236,4238,4241,4243,4245,4248,4250,4252,4254,4256,4259,4261,4263,4265],{"class":2080,"line":2225},[2078,4202,4203],{"class":2519},"const",[2078,4205,2562],{"class":2221},[2078,4207,4208],{"class":2228}," data",[2078,4210,2232],{"class":2221},[2078,4212,4213],{"class":2217}," users1 ",[2078,4215,2262],{"class":2221},[2078,4217,4218],{"class":2221}," =",[2078,4220,4221],{"class":2213}," useAsyncData",[2078,4223,2218],{"class":2217},[2078,4225,2547],{"class":2221},[2078,4227,4228],{"class":2088},"users",[2078,4230,2547],{"class":2221},[2078,4232,2606],{"class":2221},[2078,4234,4235],{"class":2221}," ()",[2078,4237,2520],{"class":2519},[2078,4239,4240],{"class":2213}," $fetch",[2078,4242,2218],{"class":2217},[2078,4244,2547],{"class":2221},[2078,4246,4247],{"class":2088},"/api/users",[2078,4249,2547],{"class":2221},[2078,4251,2516],{"class":2217},[2078,4253,2606],{"class":2221},[2078,4255,2562],{"class":2221},[2078,4257,4258],{"class":2228}," deep",[2078,4260,2232],{"class":2221},[2078,4262,2571],{"class":2570},[2078,4264,2574],{"class":2221},[2078,4266,2265],{"class":2217},[2078,4268,4269,4271,4273,4275,4277,4280,4282,4284,4286,4288,4290,4292,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4323,4325],{"class":2080,"line":2238},[2078,4270,4203],{"class":2519},[2078,4272,2562],{"class":2221},[2078,4274,4208],{"class":2228},[2078,4276,2232],{"class":2221},[2078,4278,4279],{"class":2217}," users2 ",[2078,4281,2262],{"class":2221},[2078,4283,4218],{"class":2221},[2078,4285,4221],{"class":2213},[2078,4287,2218],{"class":2217},[2078,4289,2547],{"class":2221},[2078,4291,4228],{"class":2088},[2078,4293,2547],{"class":2221},[2078,4295,2606],{"class":2221},[2078,4297,4235],{"class":2221},[2078,4299,2520],{"class":2519},[2078,4301,4240],{"class":2213},[2078,4303,2218],{"class":2217},[2078,4305,2547],{"class":2221},[2078,4307,4247],{"class":2088},[2078,4309,2547],{"class":2221},[2078,4311,2516],{"class":2217},[2078,4313,2606],{"class":2221},[2078,4315,2562],{"class":2221},[2078,4317,4258],{"class":2228},[2078,4319,2232],{"class":2221},[2078,4321,4322],{"class":2570}," true",[2078,4324,2574],{"class":2221},[2078,4326,2265],{"class":2217},[4328,4329],"br",{},"It may be beneficial to extract any calls to ",[2060,4332,515],{}," that share an explicit key (and have custom options) into their own composable:",[2068,4335,4338],{"className":2196,"code":4336,"filename":4337,"language":2198,"meta":2074,"style":2074},"export function useUserData (userId: string) {\n  return useAsyncData(\n    `user-${userId}`,\n    () => fetchUser(userId),\n    {\n      deep: true,\n      transform: user => ({ ...user, lastAccessed: new Date() }),\n    },\n  )\n}\n","app/composables/useUserData.ts",[2060,4339,4340,4364,4374,4392,4410,4415,4426,4471,4476,4481],{"__ignoreMap":2074},[2078,4341,4342,4344,4347,4350,4352,4355,4357,4360,4362],{"class":2080,"line":2081},[2078,4343,2207],{"class":2206},[2078,4345,4346],{"class":2519}," function",[2078,4348,4349],{"class":2213}," useUserData",[2078,4351,2609],{"class":2221},[2078,4353,4354],{"class":2513},"userId",[2078,4356,2232],{"class":2221},[2078,4358,4359],{"class":2084}," string",[2078,4361,2516],{"class":2221},[2078,4363,2235],{"class":2221},[2078,4365,4366,4369,4371],{"class":2080,"line":2225},[2078,4367,4368],{"class":2206},"  return",[2078,4370,4221],{"class":2213},[2078,4372,4373],{"class":2228},"(\n",[2078,4375,4376,4379,4382,4385,4387,4390],{"class":2080,"line":2238},[2078,4377,4378],{"class":2221},"    `",[2078,4380,4381],{"class":2088},"user-",[2078,4383,4384],{"class":2221},"${",[2078,4386,4354],{"class":2217},[2078,4388,4389],{"class":2221},"}`",[2078,4391,2250],{"class":2221},[2078,4393,4394,4397,4399,4402,4404,4406,4408],{"class":2080,"line":2253},[2078,4395,4396],{"class":2221},"    ()",[2078,4398,2520],{"class":2519},[2078,4400,4401],{"class":2213}," fetchUser",[2078,4403,2218],{"class":2228},[2078,4405,4354],{"class":2217},[2078,4407,2516],{"class":2228},[2078,4409,2250],{"class":2221},[2078,4411,4412],{"class":2080,"line":2259},[2078,4413,4414],{"class":2221},"    {\n",[2078,4416,4417,4420,4422,4424],{"class":2080,"line":2584},[2078,4418,4419],{"class":2228},"      deep",[2078,4421,2232],{"class":2221},[2078,4423,4322],{"class":2570},[2078,4425,2250],{"class":2221},[2078,4427,4428,4431,4433,4436,4438,4440,4443,4446,4449,4451,4454,4456,4459,4462,4465,4467,4469],{"class":2080,"line":2628},[2078,4429,4430],{"class":2213},"      transform",[2078,4432,2232],{"class":2221},[2078,4434,4435],{"class":2513}," user",[2078,4437,2520],{"class":2519},[2078,4439,2609],{"class":2228},[2078,4441,4442],{"class":2221},"{",[2078,4444,4445],{"class":2221}," ...",[2078,4447,4448],{"class":2217},"user",[2078,4450,2606],{"class":2221},[2078,4452,4453],{"class":2228}," lastAccessed",[2078,4455,2232],{"class":2221},[2078,4457,4458],{"class":2221}," new",[2078,4460,4461],{"class":2213}," Date",[2078,4463,4464],{"class":2228},"() ",[2078,4466,2262],{"class":2221},[2078,4468,2516],{"class":2228},[2078,4470,2250],{"class":2221},[2078,4472,4473],{"class":2080,"line":2644},[2078,4474,4475],{"class":2221},"    },\n",[2078,4477,4478],{"class":2080,"line":2672},[2078,4479,4480],{"class":2228},"  )\n",[2078,4482,4483],{"class":2080,"line":2678},[2078,4484,4485],{"class":2221},"}\n",[2280,4487,4488,2232,4494],{},[2172,4489,4490,4491,4493],{},"Update ",[2060,4492,4137],{}," implementations",[2068,4495,4499],{"className":4496,"code":4497,"language":4498,"meta":2074,"style":2074},"language-diff shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","useAsyncData('key', fetchFunction, {\n-  getCachedData: (key, nuxtApp) => {\n-    return cachedData[key]\n-  }\n+  getCachedData: (key, nuxtApp, ctx) => {\n+    // ctx.cause - can be 'initial' | 'refresh:hook' | 'refresh:manual' | 'watch'\n+    \n+    // Example: Don't use cache on manual refresh\n+    if (ctx.cause === 'refresh:manual') return undefined\n+    \n+    return cachedData[key]\n+  }\n})\n","diff",[2060,4500,4501,4506,4514,4521,4527,4535,4542,4549,4556,4563,4569,4575,4581],{"__ignoreMap":2074},[2078,4502,4503],{"class":2080,"line":2081},[2078,4504,4505],{"class":2217},"useAsyncData('key', fetchFunction, {\n",[2078,4507,4508,4511],{"class":2080,"line":2225},[2078,4509,4510],{"class":2221},"-",[2078,4512,4513],{"class":2228},"  getCachedData: (key, nuxtApp) => {\n",[2078,4515,4516,4518],{"class":2080,"line":2238},[2078,4517,4510],{"class":2221},[2078,4519,4520],{"class":2228},"    return cachedData[key]\n",[2078,4522,4523,4525],{"class":2080,"line":2253},[2078,4524,4510],{"class":2221},[2078,4526,2675],{"class":2228},[2078,4528,4529,4532],{"class":2080,"line":2259},[2078,4530,4531],{"class":2221},"+",[2078,4533,4534],{"class":2088},"  getCachedData: (key, nuxtApp, ctx) => {\n",[2078,4536,4537,4539],{"class":2080,"line":2584},[2078,4538,4531],{"class":2221},[2078,4540,4541],{"class":2088},"    // ctx.cause - can be 'initial' | 'refresh:hook' | 'refresh:manual' | 'watch'\n",[2078,4543,4544,4546],{"class":2080,"line":2628},[2078,4545,4531],{"class":2221},[2078,4547,4548],{"class":2088},"    \n",[2078,4550,4551,4553],{"class":2080,"line":2644},[2078,4552,4531],{"class":2221},[2078,4554,4555],{"class":2088},"    // Example: Don't use cache on manual refresh\n",[2078,4557,4558,4560],{"class":2080,"line":2672},[2078,4559,4531],{"class":2221},[2078,4561,4562],{"class":2088},"    if (ctx.cause === 'refresh:manual') return undefined\n",[2078,4564,4565,4567],{"class":2080,"line":2678},[2078,4566,4531],{"class":2221},[2078,4568,4548],{"class":2088},[2078,4570,4571,4573],{"class":2080,"line":2685},[2078,4572,4531],{"class":2221},[2078,4574,4520],{"class":2088},[2078,4576,4577,4579],{"class":2080,"line":2690},[2078,4578,4531],{"class":2221},[2078,4580,2675],{"class":2088},[2078,4582,4583],{"class":2080,"line":2696},[2078,4584,4585],{"class":2217},"})\n",[2048,4587,4588],{},"Alternatively, for now, you can disable this behaviour with:",[2068,4590,4592],{"className":2196,"code":4591,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    granularCachedData: false,\n    purgeCachedData: false,\n  },\n})\n",[2060,4593,4594,4606,4615,4626,4637,4641],{"__ignoreMap":2074},[2078,4595,4596,4598,4600,4602,4604],{"class":2080,"line":2081},[2078,4597,2207],{"class":2206},[2078,4599,2210],{"class":2206},[2078,4601,2214],{"class":2213},[2078,4603,2218],{"class":2217},[2078,4605,2222],{"class":2221},[2078,4607,4608,4611,4613],{"class":2080,"line":2225},[2078,4609,4610],{"class":2228},"  experimental",[2078,4612,2232],{"class":2221},[2078,4614,2235],{"class":2221},[2078,4616,4617,4620,4622,4624],{"class":2080,"line":2238},[2078,4618,4619],{"class":2228},"    granularCachedData",[2078,4621,2232],{"class":2221},[2078,4623,2571],{"class":2570},[2078,4625,2250],{"class":2221},[2078,4627,4628,4631,4633,4635],{"class":2080,"line":2253},[2078,4629,4630],{"class":2228},"    purgeCachedData",[2078,4632,2232],{"class":2221},[2078,4634,2571],{"class":2570},[2078,4636,2250],{"class":2221},[2078,4638,4639],{"class":2080,"line":2259},[2078,4640,2256],{"class":2221},[2078,4642,4643,4645],{"class":2080,"line":2584},[2078,4644,2262],{"class":2221},[2078,4646,2265],{"class":2217},[2043,4648,4650],{"id":4649},"corrected-module-loading-order-in-layers","Corrected Module Loading Order in Layers",[2048,4652,2345,4653,4655],{},[2172,4654,2348],{},": Minimal",[2351,4657,2354],{"id":4658},"what-changed-3",[2048,4660,4661,4662,4665],{},"The order in which modules are loaded when using ",[2052,4663,4664],{"href":1398},"Nuxt layers"," has been corrected. Previously, modules from the project root were loaded before modules from extended layers, which was the reverse of the expected behavior.",[2048,4667,4668],{},"Now modules are loaded in the correct order:",[2393,4670,4671,4677],{},[2280,4672,4673,4676],{},[2172,4674,4675],{},"Layer modules first"," (in extend order - deeper layers first)",[2280,4678,4679,4682],{},[2172,4680,4681],{},"Project modules last"," (highest priority)",[2048,4684,4685],{},"This affects both:",[2277,4687,4688,4696],{},[2280,4689,4690,4691,4693,4694],{},"Modules defined in the ",[2060,4692,162],{}," array in ",[2060,4695,233],{},[2280,4697,4698,4699,4701],{},"Auto-discovered modules from the ",[2060,4700,3581],{}," directory",[2351,4703,2454],{"id":4704},"reasons-for-change-3",[2048,4706,4707],{},"This change ensures that:",[2277,4709,4710,4713,4716],{},[2280,4711,4712],{},"Extended layers have lower priority than the consuming project",[2280,4714,4715],{},"Module execution order matches the intuitive layer inheritance pattern",[2280,4717,4718],{},"Module configuration and hooks work as expected in multi-layer setups",[2351,4720,2475],{"id":4721},"migration-steps-3",[2048,4723,4724,4727],{},[2172,4725,4726],{},"Most projects will not need changes",", as this corrects the loading order to match expected behavior.",[2048,4729,4730],{},"However, if your project was relying on the previous incorrect order, you may need to:",[2393,4732,4733,4739,4745],{},[2280,4734,4735,4738],{},[2172,4736,4737],{},"Review module dependencies",": Check if any modules depend on specific loading order",[2280,4740,4741,4744],{},[2172,4742,4743],{},"Adjust module configuration",": If modules were configured to work around the incorrect order",[2280,4746,4747,4750],{},[2172,4748,4749],{},"Test thoroughly",": Ensure all functionality works as expected with the corrected order",[2048,4752,4753],{},"Example of the new correct order:",[2068,4755,4757],{"className":2196,"code":4756,"language":2198,"meta":2074,"style":2074},"// Layer: my-layer/nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['layer-module-1', 'layer-module-2'],\n})\n\n// Project: nuxt.config.ts\nexport default defineNuxtConfig({\n  extends: ['./my-layer'],\n  modules: ['project-module-1', 'project-module-2'],\n})\n\n// Loading order (corrected):\n// 1. layer-module-1\n// 2. layer-module-2\n// 3. project-module-1 (can override layer modules)\n// 4. project-module-2 (can override layer modules)\n",[2060,4758,4759,4764,4776,4807,4813,4817,4822,4834,4854,4882,4888,4892,4897,4902,4907,4912],{"__ignoreMap":2074},[2078,4760,4761],{"class":2080,"line":2081},[2078,4762,4763],{"class":2501},"// Layer: my-layer/nuxt.config.ts\n",[2078,4765,4766,4768,4770,4772,4774],{"class":2080,"line":2225},[2078,4767,2207],{"class":2206},[2078,4769,2210],{"class":2206},[2078,4771,2214],{"class":2213},[2078,4773,2218],{"class":2217},[2078,4775,2222],{"class":2221},[2078,4777,4778,4781,4783,4786,4788,4791,4793,4795,4797,4800,4802,4805],{"class":2080,"line":2238},[2078,4779,4780],{"class":2228},"  modules",[2078,4782,2232],{"class":2221},[2078,4784,4785],{"class":2217}," [",[2078,4787,2547],{"class":2221},[2078,4789,4790],{"class":2088},"layer-module-1",[2078,4792,2547],{"class":2221},[2078,4794,2606],{"class":2221},[2078,4796,2721],{"class":2221},[2078,4798,4799],{"class":2088},"layer-module-2",[2078,4801,2547],{"class":2221},[2078,4803,4804],{"class":2217},"]",[2078,4806,2250],{"class":2221},[2078,4808,4809,4811],{"class":2080,"line":2253},[2078,4810,2262],{"class":2221},[2078,4812,2265],{"class":2217},[2078,4814,4815],{"class":2080,"line":2259},[2078,4816,2581],{"emptyLinePlaceholder":1196},[2078,4818,4819],{"class":2080,"line":2584},[2078,4820,4821],{"class":2501},"// Project: nuxt.config.ts\n",[2078,4823,4824,4826,4828,4830,4832],{"class":2080,"line":2628},[2078,4825,2207],{"class":2206},[2078,4827,2210],{"class":2206},[2078,4829,2214],{"class":2213},[2078,4831,2218],{"class":2217},[2078,4833,2222],{"class":2221},[2078,4835,4836,4839,4841,4843,4845,4848,4850,4852],{"class":2080,"line":2644},[2078,4837,4838],{"class":2228},"  extends",[2078,4840,2232],{"class":2221},[2078,4842,4785],{"class":2217},[2078,4844,2547],{"class":2221},[2078,4846,4847],{"class":2088},"./my-layer",[2078,4849,2547],{"class":2221},[2078,4851,4804],{"class":2217},[2078,4853,2250],{"class":2221},[2078,4855,4856,4858,4860,4862,4864,4867,4869,4871,4873,4876,4878,4880],{"class":2080,"line":2672},[2078,4857,4780],{"class":2228},[2078,4859,2232],{"class":2221},[2078,4861,4785],{"class":2217},[2078,4863,2547],{"class":2221},[2078,4865,4866],{"class":2088},"project-module-1",[2078,4868,2547],{"class":2221},[2078,4870,2606],{"class":2221},[2078,4872,2721],{"class":2221},[2078,4874,4875],{"class":2088},"project-module-2",[2078,4877,2547],{"class":2221},[2078,4879,4804],{"class":2217},[2078,4881,2250],{"class":2221},[2078,4883,4884,4886],{"class":2080,"line":2678},[2078,4885,2262],{"class":2221},[2078,4887,2265],{"class":2217},[2078,4889,4890],{"class":2080,"line":2685},[2078,4891,2581],{"emptyLinePlaceholder":1196},[2078,4893,4894],{"class":2080,"line":2690},[2078,4895,4896],{"class":2501},"// Loading order (corrected):\n",[2078,4898,4899],{"class":2080,"line":2696},[2078,4900,4901],{"class":2501},"// 1. layer-module-1\n",[2078,4903,4904],{"class":2080,"line":2713},[2078,4905,4906],{"class":2501},"// 2. layer-module-2\n",[2078,4908,4909],{"class":2080,"line":2731},[2078,4910,4911],{"class":2501},"// 3. project-module-1 (can override layer modules)\n",[2078,4913,4914],{"class":2080,"line":2744},[2078,4915,4916],{"class":2501},"// 4. project-module-2 (can override layer modules)\n",[2048,4918,4919,4920,4926],{},"If you encounter issues with module order dependencies due to needing to register a hook, consider using the ",[2052,4921,4922,4925],{"href":1342},[2060,4923,4924],{},"modules:done"," hook"," for modules that need to call a hook. This is run after all other modules have been loaded, which means it is safe to use.",[2048,4928,4929,4930,2406,4935,4940],{},"👉 See ",[2052,4931,4934],{"href":4932,"rel":4933},"https://github.com/nuxt/nuxt/pull/31507",[2056],"PR #31507",[2052,4936,4939],{"href":4937,"rel":4938},"https://github.com/nuxt/nuxt/issues/25719",[2056],"issue #25719"," for more details.",[2043,4942,4944],{"id":4943},"deduplication-of-route-metadata","Deduplication of Route Metadata",[2048,4946,2345,4947,4655],{},[2172,4948,2348],{},[2351,4950,2354],{"id":4951},"what-changed-4",[2048,4953,4954,4955,4957,4958,2487,4960,4963,4964,2406,4967,4970],{},"It's possible to set some route metadata using ",[2060,4956,678],{},", such as the ",[2060,4959,2788],{},[2060,4961,4962],{},"path",", and so on. Previously these were available both on the route and on route metadata (for example, ",[2060,4965,4966],{},"route.name",[2060,4968,4969],{},"route.meta.name",").",[2048,4972,4973],{},"Now, they are only accessible on the route object.",[2351,4975,2454],{"id":4976},"reasons-for-change-4",[2048,4978,4979,4980,4983],{},"This is a result of enabling ",[2060,4981,4982],{},"experimental.scanPageMeta"," by default, and is a performance optimization.",[2351,4985,2475],{"id":4986},"migration-steps-4",[2048,4988,4989],{},"The migration should be straightforward:",[2068,4991,4993],{"className":4496,"code":4992,"language":4498,"meta":2074,"style":2074},"  const route = useRoute()\n  \n- console.log(route.meta.name)\n+ console.log(route.name)\n",[2060,4994,4995,5000,5005,5012],{"__ignoreMap":2074},[2078,4996,4997],{"class":2080,"line":2081},[2078,4998,4999],{"class":2217},"  const route = useRoute()\n",[2078,5001,5002],{"class":2080,"line":2225},[2078,5003,5004],{"class":2217},"  \n",[2078,5006,5007,5009],{"class":2080,"line":2238},[2078,5008,4510],{"class":2221},[2078,5010,5011],{"class":2228}," console.log(route.meta.name)\n",[2078,5013,5014,5016],{"class":2080,"line":2253},[2078,5015,4531],{"class":2221},[2078,5017,5018],{"class":2088}," console.log(route.name)\n",[2043,5020,5022],{"id":5021},"normalized-component-names","Normalized Component Names",[2048,5024,2345,5025,4091],{},[2172,5026,2348],{},[2048,5028,5029],{},"Vue will now generate component names that match the Nuxt pattern for component naming.",[2351,5031,2354],{"id":5032},"what-changed-5",[2048,5034,5035],{},"By default, if you haven't set it manually, Vue will assign a component name that matches\nthe filename of the component.",[2068,5037,5040],{"className":2070,"code":5038,"filename":5039,"language":2073,"meta":2074,"style":2074},"├─ components/\n├─── SomeFolder/\n├───── MyComponent.vue\n","Directory structure",[2060,5041,5042,5050,5058],{"__ignoreMap":2074},[2078,5043,5044,5047],{"class":2080,"line":2081},[2078,5045,5046],{"class":2084},"├─",[2078,5048,5049],{"class":2088}," components/\n",[2078,5051,5052,5055],{"class":2080,"line":2225},[2078,5053,5054],{"class":2084},"├───",[2078,5056,5057],{"class":2088}," SomeFolder/\n",[2078,5059,5060,5063],{"class":2080,"line":2238},[2078,5061,5062],{"class":2084},"├─────",[2078,5064,5065],{"class":2088}," MyComponent.vue\n",[2048,5067,5068,5069,5072,5073,5075],{},"In this case, the component name would be ",[2060,5070,5071],{},"MyComponent",", as far as Vue is concerned. If you wanted to use ",[2060,5074,2303],{}," with it, or identify it in the Vue DevTools, you would need to use this name.",[2048,5077,5078,5079,2186],{},"But in order to auto-import it, you would need to use ",[2060,5080,5081],{},"SomeFolderMyComponent",[2048,5083,5084],{},"With this change, these two values will match, and Vue will generate a component name that matches the Nuxt pattern for component naming.",[2351,5086,2475],{"id":5087},"migration-steps-5",[2048,5089,5090,5091,5094,5095,5098,5099,5101],{},"Ensure that you use the updated name in any tests which use ",[2060,5092,5093],{},"findComponent"," from ",[2060,5096,5097],{},"@vue/test-utils"," and in any ",[2060,5100,2303],{}," which depends on the name of your component.",[2048,5103,4588],{},[2068,5105,5107],{"className":2196,"code":5106,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    normalizeComponentNames: false,\n  },\n})\n",[2060,5108,5109,5121,5129,5140,5144],{"__ignoreMap":2074},[2078,5110,5111,5113,5115,5117,5119],{"class":2080,"line":2081},[2078,5112,2207],{"class":2206},[2078,5114,2210],{"class":2206},[2078,5116,2214],{"class":2213},[2078,5118,2218],{"class":2217},[2078,5120,2222],{"class":2221},[2078,5122,5123,5125,5127],{"class":2080,"line":2225},[2078,5124,4610],{"class":2228},[2078,5126,2232],{"class":2221},[2078,5128,2235],{"class":2221},[2078,5130,5131,5134,5136,5138],{"class":2080,"line":2238},[2078,5132,5133],{"class":2228},"    normalizeComponentNames",[2078,5135,2232],{"class":2221},[2078,5137,2571],{"class":2570},[2078,5139,2250],{"class":2221},[2078,5141,5142],{"class":2080,"line":2253},[2078,5143,2256],{"class":2221},[2078,5145,5146,5148],{"class":2080,"line":2259},[2078,5147,2262],{"class":2221},[2078,5149,2265],{"class":2217},[2043,5151,5153],{"id":5152},"unhead-v2","Unhead v2",[2048,5155,2345,5156,4655],{},[2172,5157,2348],{},[2351,5159,2354],{"id":5160},"what-changed-6",[2048,5162,5163,5168,5169,5172],{},[2052,5164,5167],{"href":5165,"rel":5166},"https://unhead.unjs.io/",[2056],"Unhead",", used to generate ",[2060,5170,5171],{},"\u003Chead>"," tags, has been updated to version 2. While mostly compatible it includes several breaking changes\nfor lower-level APIs.",[2277,5174,5175,5190,5193],{},[2280,5176,5177,5178,2487,5181,2487,5184,2487,5187,2186],{},"Removed props: ",[2060,5179,5180],{},"vmid",[2060,5182,5183],{},"hid",[2060,5185,5186],{},"children",[2060,5188,5189],{},"body",[2280,5191,5192],{},"Promise input no longer supported.",[2280,5194,5195],{},"Tags are now sorted using Capo.js by default.",[2351,5197,2475],{"id":5198},"migration-steps-6",[2048,5200,5201],{},"The above changes should have minimal impact on your app.",[2048,5203,5204],{},"If you have issues you should verify:",[2277,5206,5207],{},[2280,5208,5209],{},"You're not using any of the removed props.",[2068,5211,5213],{"className":4496,"code":5212,"language":4498,"meta":2074,"style":2074},"useHead({\n  meta: [{ \n    name: 'description', \n    // meta tags don't need a vmid, or a key    \n-   vmid: 'description' \n-   hid: 'description'\n  }]\n})\n",[2060,5214,5215,5220,5225,5230,5235,5242,5249,5254],{"__ignoreMap":2074},[2078,5216,5217],{"class":2080,"line":2081},[2078,5218,5219],{"class":2217},"useHead({\n",[2078,5221,5222],{"class":2080,"line":2225},[2078,5223,5224],{"class":2217},"  meta: [{ \n",[2078,5226,5227],{"class":2080,"line":2238},[2078,5228,5229],{"class":2217},"    name: 'description', \n",[2078,5231,5232],{"class":2080,"line":2253},[2078,5233,5234],{"class":2217},"    // meta tags don't need a vmid, or a key    \n",[2078,5236,5237,5239],{"class":2080,"line":2259},[2078,5238,4510],{"class":2221},[2078,5240,5241],{"class":2228},"   vmid: 'description' \n",[2078,5243,5244,5246],{"class":2080,"line":2584},[2078,5245,4510],{"class":2221},[2078,5247,5248],{"class":2228},"   hid: 'description'\n",[2078,5250,5251],{"class":2080,"line":2628},[2078,5252,5253],{"class":2217},"  }]\n",[2078,5255,5256],{"class":2080,"line":2644},[2078,5257,4585],{"class":2217},[2277,5259,5260],{},[2280,5261,5262,5263,2427,5268,5273],{},"If you're using ",[2052,5264,5267],{"href":5265,"rel":5266},"https://unhead.unjs.io/docs/head/guides/plugins/template-params",[2056],"Template Params",[2052,5269,5272],{"href":5270,"rel":5271},"https://unhead.unjs.io/docs/head/guides/plugins/alias-sorting",[2056],"Alias Tag Sorting",", you will need to explicitly opt in to these features now.",[2068,5275,5277],{"className":2196,"code":5276,"language":2198,"meta":2074,"style":2074},"import { AliasSortingPlugin, TemplateParamsPlugin } from '@unhead/vue/plugins'\n\nexport default defineNuxtPlugin({\n  setup () {\n    const unhead = injectHead()\n    unhead.use(TemplateParamsPlugin)\n    unhead.use(AliasSortingPlugin)\n  },\n})\n",[2060,5278,5279,5306,5310,5323,5332,5348,5365,5380,5384],{"__ignoreMap":2074},[2078,5280,5281,5284,5286,5289,5291,5294,5296,5299,5301,5304],{"class":2080,"line":2081},[2078,5282,5283],{"class":2206},"import",[2078,5285,2562],{"class":2221},[2078,5287,5288],{"class":2217}," AliasSortingPlugin",[2078,5290,2606],{"class":2221},[2078,5292,5293],{"class":2217}," TemplateParamsPlugin",[2078,5295,2574],{"class":2221},[2078,5297,5298],{"class":2206}," from",[2078,5300,2721],{"class":2221},[2078,5302,5303],{"class":2088},"@unhead/vue/plugins",[2078,5305,2935],{"class":2221},[2078,5307,5308],{"class":2080,"line":2225},[2078,5309,2581],{"emptyLinePlaceholder":1196},[2078,5311,5312,5314,5316,5319,5321],{"class":2080,"line":2238},[2078,5313,2207],{"class":2206},[2078,5315,2210],{"class":2206},[2078,5317,5318],{"class":2213}," defineNuxtPlugin",[2078,5320,2218],{"class":2217},[2078,5322,2222],{"class":2221},[2078,5324,5325,5328,5330],{"class":2080,"line":2253},[2078,5326,5327],{"class":2228},"  setup",[2078,5329,4235],{"class":2221},[2078,5331,2235],{"class":2221},[2078,5333,5334,5337,5340,5342,5345],{"class":2080,"line":2259},[2078,5335,5336],{"class":2519},"    const",[2078,5338,5339],{"class":2217}," unhead",[2078,5341,4218],{"class":2221},[2078,5343,5344],{"class":2213}," injectHead",[2078,5346,5347],{"class":2228},"()\n",[2078,5349,5350,5353,5355,5358,5360,5363],{"class":2080,"line":2584},[2078,5351,5352],{"class":2217},"    unhead",[2078,5354,2186],{"class":2221},[2078,5356,5357],{"class":2213},"use",[2078,5359,2218],{"class":2228},[2078,5361,5362],{"class":2217},"TemplateParamsPlugin",[2078,5364,2265],{"class":2228},[2078,5366,5367,5369,5371,5373,5375,5378],{"class":2080,"line":2628},[2078,5368,5352],{"class":2217},[2078,5370,2186],{"class":2221},[2078,5372,5357],{"class":2213},[2078,5374,2218],{"class":2228},[2078,5376,5377],{"class":2217},"AliasSortingPlugin",[2078,5379,2265],{"class":2228},[2078,5381,5382],{"class":2080,"line":2644},[2078,5383,2256],{"class":2221},[2078,5385,5386,5388],{"class":2080,"line":2672},[2078,5387,2262],{"class":2221},[2078,5389,2265],{"class":2217},[2048,5391,5392,5393,2271,5396,2427,5399,2186],{},"While not required it's recommended to update any imports from ",[2060,5394,5395],{},"@unhead/vue",[2060,5397,5398],{},"#imports",[2060,5400,5401],{},"nuxt/app",[2068,5403,5405],{"className":4496,"code":5404,"language":4498,"meta":2074,"style":2074},"-import { useHead } from '@unhead/vue'\n+import { useHead } from '#imports'\n",[2060,5406,5407,5414],{"__ignoreMap":2074},[2078,5408,5409,5411],{"class":2080,"line":2081},[2078,5410,4510],{"class":2221},[2078,5412,5413],{"class":2228},"import { useHead } from '@unhead/vue'\n",[2078,5415,5416,5418],{"class":2080,"line":2225},[2078,5417,4531],{"class":2221},[2078,5419,5420],{"class":2088},"import { useHead } from '#imports'\n",[2048,5422,5423,5424,5427],{},"If you still have issues you may revert to the v1 behavior by enabling the ",[2060,5425,5426],{},"head.legacy"," config.",[2068,5429,5431],{"className":2196,"code":5430,"language":2198,"meta":2074,"style":2074},"export default defineNuxtConfig({\n  unhead: {\n    legacy: true,\n  },\n})\n",[2060,5432,5433,5445,5454,5465,5469],{"__ignoreMap":2074},[2078,5434,5435,5437,5439,5441,5443],{"class":2080,"line":2081},[2078,5436,2207],{"class":2206},[2078,5438,2210],{"class":2206},[2078,5440,2214],{"class":2213},[2078,5442,2218],{"class":2217},[2078,5444,2222],{"class":2221},[2078,5446,5447,5450,5452],{"class":2080,"line":2225},[2078,5448,5449],{"class":2228},"  unhead",[2078,5451,2232],{"class":2221},[2078,5453,2235],{"class":2221},[2078,5455,5456,5459,5461,5463],{"class":2080,"line":2238},[2078,5457,5458],{"class":2228},"    legacy",[2078,5460,2232],{"class":2221},[2078,5462,4322],{"class":2570},[2078,5464,2250],{"class":2221},[2078,5466,5467],{"class":2080,"line":2253},[2078,5468,2256],{"class":2221},[2078,5470,5471,5473],{"class":2080,"line":2259},[2078,5472,2262],{"class":2221},[2078,5474,2265],{"class":2217},[2043,5476,5478],{"id":5477},"new-dom-location-for-spa-loading-screen","New DOM Location for SPA Loading Screen",[2048,5480,2345,5481,4655],{},[2172,5482,2348],{},[2351,5484,2354],{"id":5485},"what-changed-7",[2048,5487,5488,5489,5492,5493,5496,5497,5500],{},"When rendering a client-only page (with ",[2060,5490,5491],{},"ssr: false","), we optionally render a loading screen (from ",[2060,5494,5495],{},"~/app/spa-loading-template.html"," - note that this has also changed to ",[2060,5498,5499],{},"~/spa-loading-template.html"," in Nuxt 4), within the Nuxt app root:",[2068,5502,5506],{"className":5503,"code":5504,"language":5505,"meta":2074,"style":2074},"language-html shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","\u003Cdiv id=\"__nuxt\">\n  \u003C!-- spa loading template -->\n\u003C/div>\n","html",[2060,5507,5508,5533,5538],{"__ignoreMap":2074},[2078,5509,5510,5513,5516,5519,5522,5525,5528,5530],{"class":2080,"line":2081},[2078,5511,5512],{"class":2221},"\u003C",[2078,5514,5515],{"class":2228},"div",[2078,5517,5518],{"class":2519}," id",[2078,5520,5521],{"class":2221},"=",[2078,5523,5524],{"class":2221},"\"",[2078,5526,5527],{"class":2088},"__nuxt",[2078,5529,5524],{"class":2221},[2078,5531,5532],{"class":2221},">\n",[2078,5534,5535],{"class":2080,"line":2225},[2078,5536,5537],{"class":2501},"  \u003C!-- spa loading template -->\n",[2078,5539,5540,5543,5545],{"class":2080,"line":2238},[2078,5541,5542],{"class":2221},"\u003C/",[2078,5544,5515],{"class":2228},[2078,5546,5532],{"class":2221},[2048,5548,5549],{},"Now, we default to rendering the template alongside the Nuxt app root:",[2068,5551,5553],{"className":5503,"code":5552,"language":5505,"meta":2074,"style":2074},"\u003Cdiv id=\"__nuxt\">\u003C/div>\n\u003C!-- spa loading template -->\n",[2060,5554,5555,5578],{"__ignoreMap":2074},[2078,5556,5557,5559,5561,5563,5565,5567,5569,5571,5574,5576],{"class":2080,"line":2081},[2078,5558,5512],{"class":2221},[2078,5560,5515],{"class":2228},[2078,5562,5518],{"class":2519},[2078,5564,5521],{"class":2221},[2078,5566,5524],{"class":2221},[2078,5568,5527],{"class":2088},[2078,5570,5524],{"class":2221},[2078,5572,5573],{"class":2221},">\u003C/",[2078,5575,5515],{"class":2228},[2078,5577,5532],{"class":2221},[2078,5579,5580],{"class":2080,"line":2225},[2078,5581,5582],{"class":2501},"\u003C!-- spa loading template -->\n",[2351,5584,2454],{"id":5585},"reasons-for-change-5",[2048,5587,5588],{},"This allows the spa loading template to remain in the DOM until the Vue app suspense resolves, preventing a flash of white.",[2351,5590,2475],{"id":5591},"migration-steps-7",[2048,5593,5594,5595,5598,5599,2406,5602,5605],{},"If you were targeting the spa loading template with CSS or ",[2060,5596,5597],{},"document.queryElement"," you will need to update your selectors. For this purpose you can use the new ",[2060,5600,5601],{},"app.spaLoaderTag",[2060,5603,5604],{},"app.spaLoaderAttrs"," configuration options.",[2048,5607,5608],{},"Alternatively, you can revert to the previous behaviour with:",[2068,5610,5612],{"className":2196,"code":5611,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    spaLoadingTemplateLocation: 'within',\n  },\n})\n",[2060,5613,5614,5626,5634,5650,5654],{"__ignoreMap":2074},[2078,5615,5616,5618,5620,5622,5624],{"class":2080,"line":2081},[2078,5617,2207],{"class":2206},[2078,5619,2210],{"class":2206},[2078,5621,2214],{"class":2213},[2078,5623,2218],{"class":2217},[2078,5625,2222],{"class":2221},[2078,5627,5628,5630,5632],{"class":2080,"line":2225},[2078,5629,4610],{"class":2228},[2078,5631,2232],{"class":2221},[2078,5633,2235],{"class":2221},[2078,5635,5636,5639,5641,5643,5646,5648],{"class":2080,"line":2238},[2078,5637,5638],{"class":2228},"    spaLoadingTemplateLocation",[2078,5640,2232],{"class":2221},[2078,5642,2721],{"class":2221},[2078,5644,5645],{"class":2088},"within",[2078,5647,2547],{"class":2221},[2078,5649,2250],{"class":2221},[2078,5651,5652],{"class":2080,"line":2253},[2078,5653,2256],{"class":2221},[2078,5655,5656,5658],{"class":2080,"line":2259},[2078,5657,2262],{"class":2221},[2078,5659,2265],{"class":2217},[2043,5661,5663,5664],{"id":5662},"parsed-errordata","Parsed ",[2060,5665,5666],{},"error.data",[2048,5668,2345,5669,4655],{},[2172,5670,2348],{},[2048,5672,5673,5674,5676,5677,5679],{},"It was possible to throw an error with a ",[2060,5675,4118],{}," property, but this was not parsed. Now, it is parsed and made available in the ",[2060,5678,4121],{}," object. Although a fix, this is technically a breaking change if you were relying on the previous behavior and parsing it manually.",[2351,5681,2475],{"id":5682},"migration-steps-8",[2048,5684,5685,5686,5688,5689,2232],{},"Update your custom ",[2060,5687,229],{}," to remove any additional parsing of ",[2060,5690,5666],{},[2068,5692,5694],{"className":4496,"code":5693,"language":4498,"meta":2074,"style":2074},"  \u003Cscript setup lang=\"ts\">\n  import type { NuxtError } from '#app'\n\n  const props = defineProps({\n    error: Object as () => NuxtError\n  })\n\n- const data = JSON.parse(error.data)\n+ const data = error.data\n  \u003C/script>\n",[2060,5695,5696,5701,5706,5710,5715,5720,5725,5729,5736,5743],{"__ignoreMap":2074},[2078,5697,5698],{"class":2080,"line":2081},[2078,5699,5700],{"class":2217},"  \u003Cscript setup lang=\"ts\">\n",[2078,5702,5703],{"class":2080,"line":2225},[2078,5704,5705],{"class":2217},"  import type { NuxtError } from '#app'\n",[2078,5707,5708],{"class":2080,"line":2238},[2078,5709,2581],{"emptyLinePlaceholder":1196},[2078,5711,5712],{"class":2080,"line":2253},[2078,5713,5714],{"class":2217},"  const props = defineProps({\n",[2078,5716,5717],{"class":2080,"line":2259},[2078,5718,5719],{"class":2217},"    error: Object as () => NuxtError\n",[2078,5721,5722],{"class":2080,"line":2584},[2078,5723,5724],{"class":2217},"  })\n",[2078,5726,5727],{"class":2080,"line":2628},[2078,5728,2581],{"emptyLinePlaceholder":1196},[2078,5730,5731,5733],{"class":2080,"line":2644},[2078,5732,4510],{"class":2221},[2078,5734,5735],{"class":2228}," const data = JSON.parse(error.data)\n",[2078,5737,5738,5740],{"class":2080,"line":2672},[2078,5739,4531],{"class":2221},[2078,5741,5742],{"class":2088}," const data = error.data\n",[2078,5744,5745],{"class":2080,"line":2678},[2078,5746,5747],{"class":2217},"  \u003C/script>\n",[2043,5749,5751],{"id":5750},"more-granular-inline-styles","More Granular Inline Styles",[2048,5753,2345,5754,4091],{},[2172,5755,2348],{},[2048,5757,5758],{},"Nuxt will now only inline styles for Vue components, not global CSS.",[2351,5760,2354],{"id":5761},"what-changed-8",[2048,5763,5764,5765,5768,5769,5772],{},"Previously, Nuxt would inline all CSS, including global styles, and remove ",[2060,5766,5767],{},"\u003Clink>"," elements to separate CSS files. Now, Nuxt will only do this for Vue components (which previously produced separate chunks of CSS). We think this is a better balance of reducing separate network requests (just as before, there will not be separate requests for individual ",[2060,5770,5771],{},".css"," files per-page or per-component on the initial load), as well as allowing caching of a single global CSS file and reducing the document download size of the initial request.",[2351,5774,2475],{"id":5775},"migration-steps-9",[2048,5777,5778,5779,5782],{},"This feature is fully configurable and you can revert to the previous behavior by setting ",[2060,5780,5781],{},"inlineStyles: true"," to inline global CSS as well as per-component CSS.",[2068,5784,5786],{"className":2196,"code":5785,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  features: {\n    inlineStyles: true,\n  },\n})\n",[2060,5787,5788,5800,5809,5820,5824],{"__ignoreMap":2074},[2078,5789,5790,5792,5794,5796,5798],{"class":2080,"line":2081},[2078,5791,2207],{"class":2206},[2078,5793,2210],{"class":2206},[2078,5795,2214],{"class":2213},[2078,5797,2218],{"class":2217},[2078,5799,2222],{"class":2221},[2078,5801,5802,5805,5807],{"class":2080,"line":2225},[2078,5803,5804],{"class":2228},"  features",[2078,5806,2232],{"class":2221},[2078,5808,2235],{"class":2221},[2078,5810,5811,5814,5816,5818],{"class":2080,"line":2238},[2078,5812,5813],{"class":2228},"    inlineStyles",[2078,5815,2232],{"class":2221},[2078,5817,4322],{"class":2570},[2078,5819,2250],{"class":2221},[2078,5821,5822],{"class":2080,"line":2253},[2078,5823,2256],{"class":2221},[2078,5825,5826,5828],{"class":2080,"line":2259},[2078,5827,2262],{"class":2221},[2078,5829,2265],{"class":2217},[2043,5831,5833],{"id":5832},"scan-page-meta-after-resolution","Scan Page Meta After Resolution",[2048,5835,2345,5836,4655],{},[2172,5837,2348],{},[2351,5839,2354],{"id":5840},"what-changed-9",[2048,5842,5843,5844,2639,5846,5849,5850,5853],{},"We now scan page metadata (defined in ",[2060,5845,678],{},[3858,5847,5848],{},"after"," calling the ",[2060,5851,5852],{},"pages:extend"," hook rather than before.",[2351,5855,2454],{"id":5856},"reasons-for-change-6",[2048,5858,5859,5860,5862,5863,5866],{},"This was to allow scanning metadata for pages that users wanted to add in ",[2060,5861,5852],{},". We still offer an opportunity to change or override page metadata in a new ",[2060,5864,5865],{},"pages:resolved"," hook.",[2351,5868,2475],{"id":5869},"migration-steps-10",[2048,5871,5872,5873,5875,5876,2186],{},"If you want to override page metadata, do that in ",[2060,5874,5865],{}," rather than in ",[2060,5877,5852],{},[2068,5879,5881],{"className":4496,"code":5880,"language":4498,"meta":2074,"style":2074},"  export default defineNuxtConfig({\n    hooks: {\n-     'pages:extend'(pages) {\n+     'pages:resolved'(pages) {\n        const myPage = pages.find(page => page.path === '/')\n        myPage.meta ||= {}\n        myPage.meta.layout = 'overridden-layout'\n      }\n    }\n  })\n",[2060,5882,5883,5888,5893,5900,5907,5912,5917,5922,5927,5931],{"__ignoreMap":2074},[2078,5884,5885],{"class":2080,"line":2081},[2078,5886,5887],{"class":2217},"  export default defineNuxtConfig({\n",[2078,5889,5890],{"class":2080,"line":2225},[2078,5891,5892],{"class":2217},"    hooks: {\n",[2078,5894,5895,5897],{"class":2080,"line":2238},[2078,5896,4510],{"class":2221},[2078,5898,5899],{"class":2228},"     'pages:extend'(pages) {\n",[2078,5901,5902,5904],{"class":2080,"line":2253},[2078,5903,4531],{"class":2221},[2078,5905,5906],{"class":2088},"     'pages:resolved'(pages) {\n",[2078,5908,5909],{"class":2080,"line":2259},[2078,5910,5911],{"class":2217},"        const myPage = pages.find(page => page.path === '/')\n",[2078,5913,5914],{"class":2080,"line":2584},[2078,5915,5916],{"class":2217},"        myPage.meta ||= {}\n",[2078,5918,5919],{"class":2080,"line":2628},[2078,5920,5921],{"class":2217},"        myPage.meta.layout = 'overridden-layout'\n",[2078,5923,5924],{"class":2080,"line":2644},[2078,5925,5926],{"class":2217},"      }\n",[2078,5928,5929],{"class":2080,"line":2672},[2078,5930,2893],{"class":2217},[2078,5932,5933],{"class":2080,"line":2678},[2078,5934,5724],{"class":2217},[2048,5936,5608],{},[2068,5938,5940],{"className":2196,"code":5939,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    scanPageMeta: true,\n  },\n})\n",[2060,5941,5942,5954,5962,5973,5977],{"__ignoreMap":2074},[2078,5943,5944,5946,5948,5950,5952],{"class":2080,"line":2081},[2078,5945,2207],{"class":2206},[2078,5947,2210],{"class":2206},[2078,5949,2214],{"class":2213},[2078,5951,2218],{"class":2217},[2078,5953,2222],{"class":2221},[2078,5955,5956,5958,5960],{"class":2080,"line":2225},[2078,5957,4610],{"class":2228},[2078,5959,2232],{"class":2221},[2078,5961,2235],{"class":2221},[2078,5963,5964,5967,5969,5971],{"class":2080,"line":2238},[2078,5965,5966],{"class":2228},"    scanPageMeta",[2078,5968,2232],{"class":2221},[2078,5970,4322],{"class":2570},[2078,5972,2250],{"class":2221},[2078,5974,5975],{"class":2080,"line":2253},[2078,5976,2256],{"class":2221},[2078,5978,5979,5981],{"class":2080,"line":2259},[2078,5980,2262],{"class":2221},[2078,5982,2265],{"class":2217},[2043,5984,5986],{"id":5985},"shared-prerender-data","Shared Prerender Data",[2048,5988,2345,5989,2349],{},[2172,5990,2348],{},[2351,5992,2354],{"id":5993},"what-changed-10",[2048,5995,5996,5997,2406,5999,6001,6002,2186],{},"We enabled a previously experimental feature to share data from ",[2060,5998,515],{},[2060,6000,527],{}," calls, across different pages. See ",[2052,6003,6006],{"href":6004,"rel":6005},"https://github.com/nuxt/nuxt/pull/24894",[2056],"original PR",[2351,6008,2454],{"id":6009},"reasons-for-change-7",[2048,6011,6012,6013,6015,6016,2427,6018,6020],{},"This feature automatically shares payload ",[3858,6014,4118],{}," between pages that are prerendered. This can result in a significant performance improvement when prerendering sites that use ",[2060,6017,515],{},[2060,6019,527],{}," and fetch the same data in different pages.",[2048,6022,6023,6024,6026],{},"For example, if your site requires a ",[2060,6025,527],{}," call for every page (for example, to get navigation data for a menu, or site settings from a CMS), this data would only be fetched once when prerendering the first page that uses it, and then cached for use when prerendering other pages.",[2351,6028,2475],{"id":6029},"migration-steps-11",[2048,6031,6032,6033,6035,6036,6038],{},"Make sure that any unique key of your data is always resolvable to the same data. For example, if you are using ",[2060,6034,515],{}," to fetch data related to a particular page, you should provide a key that uniquely matches that data. (",[2060,6037,527],{}," should do this automatically for you.)",[2068,6040,6043],{"className":2196,"code":6041,"filename":6042,"language":2198,"meta":2074,"style":2074},"// This would be unsafe in a dynamic page (e.g. `[slug].vue`) because the route slug makes a difference\n// to the data fetched, but Nuxt can't know that because it's not reflected in the key.\nconst route = useRoute()\nconst { data } = await useAsyncData(async () => {\n  return await $fetch(`/api/my-page/${route.params.slug}`)\n})\n// Instead, you should use a key that uniquely identifies the data fetched.\nconst { data } = await useAsyncData(route.params.slug, async () => {\n  return await $fetch(`/api/my-page/${route.params.slug}`)\n})\n","app/pages/test/[slug].vue",[2060,6044,6045,6050,6055,6069,6098,6133,6139,6144,6182,6212],{"__ignoreMap":2074},[2078,6046,6047],{"class":2080,"line":2081},[2078,6048,6049],{"class":2501},"// This would be unsafe in a dynamic page (e.g. `[slug].vue`) because the route slug makes a difference\n",[2078,6051,6052],{"class":2080,"line":2225},[2078,6053,6054],{"class":2501},"// to the data fetched, but Nuxt can't know that because it's not reflected in the key.\n",[2078,6056,6057,6059,6062,6064,6067],{"class":2080,"line":2238},[2078,6058,4203],{"class":2519},[2078,6060,6061],{"class":2217}," route ",[2078,6063,5521],{"class":2221},[2078,6065,6066],{"class":2213}," useRoute",[2078,6068,5347],{"class":2217},[2078,6070,6071,6073,6075,6078,6080,6082,6085,6087,6089,6092,6094,6096],{"class":2080,"line":2253},[2078,6072,4203],{"class":2519},[2078,6074,2562],{"class":2221},[2078,6076,6077],{"class":2217}," data ",[2078,6079,2262],{"class":2221},[2078,6081,4218],{"class":2221},[2078,6083,6084],{"class":2206}," await",[2078,6086,4221],{"class":2213},[2078,6088,2218],{"class":2217},[2078,6090,6091],{"class":2519},"async",[2078,6093,4235],{"class":2221},[2078,6095,2520],{"class":2519},[2078,6097,2235],{"class":2221},[2078,6099,6100,6102,6104,6106,6108,6111,6114,6116,6119,6121,6124,6126,6129,6131],{"class":2080,"line":2259},[2078,6101,4368],{"class":2206},[2078,6103,6084],{"class":2206},[2078,6105,4240],{"class":2213},[2078,6107,2218],{"class":2228},[2078,6109,6110],{"class":2221},"`",[2078,6112,6113],{"class":2088},"/api/my-page/",[2078,6115,4384],{"class":2221},[2078,6117,6118],{"class":2217},"route",[2078,6120,2186],{"class":2221},[2078,6122,6123],{"class":2217},"params",[2078,6125,2186],{"class":2221},[2078,6127,6128],{"class":2217},"slug",[2078,6130,4389],{"class":2221},[2078,6132,2265],{"class":2228},[2078,6134,6135,6137],{"class":2080,"line":2584},[2078,6136,2262],{"class":2221},[2078,6138,2265],{"class":2217},[2078,6140,6141],{"class":2080,"line":2628},[2078,6142,6143],{"class":2501},"// Instead, you should use a key that uniquely identifies the data fetched.\n",[2078,6145,6146,6148,6150,6152,6154,6156,6158,6160,6163,6165,6167,6169,6171,6173,6176,6178,6180],{"class":2080,"line":2644},[2078,6147,4203],{"class":2519},[2078,6149,2562],{"class":2221},[2078,6151,6077],{"class":2217},[2078,6153,2262],{"class":2221},[2078,6155,4218],{"class":2221},[2078,6157,6084],{"class":2206},[2078,6159,4221],{"class":2213},[2078,6161,6162],{"class":2217},"(route",[2078,6164,2186],{"class":2221},[2078,6166,6123],{"class":2217},[2078,6168,2186],{"class":2221},[2078,6170,6128],{"class":2217},[2078,6172,2606],{"class":2221},[2078,6174,6175],{"class":2519}," async",[2078,6177,4235],{"class":2221},[2078,6179,2520],{"class":2519},[2078,6181,2235],{"class":2221},[2078,6183,6184,6186,6188,6190,6192,6194,6196,6198,6200,6202,6204,6206,6208,6210],{"class":2080,"line":2672},[2078,6185,4368],{"class":2206},[2078,6187,6084],{"class":2206},[2078,6189,4240],{"class":2213},[2078,6191,2218],{"class":2228},[2078,6193,6110],{"class":2221},[2078,6195,6113],{"class":2088},[2078,6197,4384],{"class":2221},[2078,6199,6118],{"class":2217},[2078,6201,2186],{"class":2221},[2078,6203,6123],{"class":2217},[2078,6205,2186],{"class":2221},[2078,6207,6128],{"class":2217},[2078,6209,4389],{"class":2221},[2078,6211,2265],{"class":2228},[2078,6213,6214,6216],{"class":2080,"line":2678},[2078,6215,2262],{"class":2221},[2078,6217,2265],{"class":2217},[2048,6219,6220],{},"Alternatively, you can disable this feature with:",[2068,6222,6224],{"className":2196,"code":6223,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    sharedPrerenderData: false,\n  },\n})\n",[2060,6225,6226,6238,6246,6257,6261],{"__ignoreMap":2074},[2078,6227,6228,6230,6232,6234,6236],{"class":2080,"line":2081},[2078,6229,2207],{"class":2206},[2078,6231,2210],{"class":2206},[2078,6233,2214],{"class":2213},[2078,6235,2218],{"class":2217},[2078,6237,2222],{"class":2221},[2078,6239,6240,6242,6244],{"class":2080,"line":2225},[2078,6241,4610],{"class":2228},[2078,6243,2232],{"class":2221},[2078,6245,2235],{"class":2221},[2078,6247,6248,6251,6253,6255],{"class":2080,"line":2238},[2078,6249,6250],{"class":2228},"    sharedPrerenderData",[2078,6252,2232],{"class":2221},[2078,6254,2571],{"class":2570},[2078,6256,2250],{"class":2221},[2078,6258,6259],{"class":2080,"line":2253},[2078,6260,2256],{"class":2221},[2078,6262,6263,6265],{"class":2080,"line":2259},[2078,6264,2262],{"class":2221},[2078,6266,2265],{"class":2217},[2043,6268,6270,6271,2406,6273,6275,6276,2406,6278],{"id":6269},"default-data-and-error-values-in-useasyncdata-and-usefetch","Default ",[2060,6272,4118],{},[2060,6274,4121],{}," values in ",[2060,6277,515],{},[2060,6279,527],{},[2048,6281,2345,6282,4655],{},[2172,6283,2348],{},[2351,6285,2354],{"id":6286},"what-changed-11",[2048,6288,6289,2406,6291,6293,6294,6296,6297,2186],{},[2060,6290,4118],{},[2060,6292,4121],{}," objects returned from ",[2060,6295,515],{}," will now default to ",[2060,6298,2323],{},[2351,6300,2454],{"id":6301},"reasons-for-change-8",[2048,6303,6304,6305,6307,6308,6311,6312,2271,6314,6316,6317,6307,6319,6321],{},"Previously ",[2060,6306,4118],{}," was initialized to ",[2060,6309,6310],{},"null"," but reset in ",[2060,6313,650],{},[2060,6315,2323],{},". ",[2060,6318,4121],{},[2060,6320,6310],{},". This change is to bring greater consistency.",[2351,6323,2475],{"id":6324},"migration-steps-12",[2048,6326,6327,6328,2427,6331,6334,6335,6337,6338,6340],{},"If you were checking if ",[2060,6329,6330],{},"data.value",[2060,6332,6333],{},"error.value"," were ",[2060,6336,6310],{},", you can update these checks to check for ",[2060,6339,2323],{}," instead.",[2372,6342,6343],{},[2048,6344,6345,6346],{},"You can automate this step by running ",[2060,6347,6348],{},"npx codemod@latest nuxt/4/default-data-error-value",[2043,6350,6352,6353,6356,6357,6360,6361,6364,6365,2406,6367],{"id":6351},"removal-of-deprecated-boolean-values-for-dedupe-option-when-calling-refresh-in-useasyncdata-and-usefetch","Removal of deprecated ",[2060,6354,6355],{},"boolean"," values for ",[2060,6358,6359],{},"dedupe"," option when calling ",[2060,6362,6363],{},"refresh"," in ",[2060,6366,515],{},[2060,6368,527],{},[2048,6370,2345,6371,4655],{},[2172,6372,2348],{},[2351,6374,2354],{"id":6375},"what-changed-12",[2048,6377,6378,6379,2271,6382,6384,6385,2609,6388,6391,6392,2609,6395,4970],{},"Previously it was possible to pass ",[2060,6380,6381],{},"dedupe: boolean",[2060,6383,6363],{},". These were aliases of ",[2060,6386,6387],{},"cancel",[2060,6389,6390],{},"true",") and ",[2060,6393,6394],{},"defer",[2060,6396,6397],{},"false",[2068,6399,6402],{"className":2196,"code":6400,"filename":6401,"language":2198,"meta":2199,"style":2074},"// @errors: 2322\nconst { refresh } = await useAsyncData(() => Promise.resolve({ message: 'Hello, Nuxt!' }))\n\nasync function refreshData () {\n  await refresh({ dedupe: true })\n}\n","app/app.vue",[2060,6403,6404,6409,6460,6464,6477,6500],{"__ignoreMap":2074},[2078,6405,6406],{"class":2080,"line":2081},[2078,6407,6408],{"class":2501},"// @errors: 2322\n",[2078,6410,6411,6413,6415,6418,6420,6422,6424,6426,6428,6430,6432,6435,6437,6440,6442,6444,6447,6449,6451,6454,6456,6458],{"class":2080,"line":2225},[2078,6412,4203],{"class":2519},[2078,6414,2562],{"class":2221},[2078,6416,6417],{"class":2217}," refresh ",[2078,6419,2262],{"class":2221},[2078,6421,4218],{"class":2221},[2078,6423,6084],{"class":2206},[2078,6425,4221],{"class":2213},[2078,6427,2218],{"class":2217},[2078,6429,2704],{"class":2221},[2078,6431,2520],{"class":2519},[2078,6433,6434],{"class":2084}," Promise",[2078,6436,2186],{"class":2221},[2078,6438,6439],{"class":2213},"resolve",[2078,6441,2218],{"class":2217},[2078,6443,4442],{"class":2221},[2078,6445,6446],{"class":2228}," message",[2078,6448,2232],{"class":2221},[2078,6450,2721],{"class":2221},[2078,6452,6453],{"class":2088},"Hello, Nuxt!",[2078,6455,2547],{"class":2221},[2078,6457,2574],{"class":2221},[2078,6459,2948],{"class":2217},[2078,6461,6462],{"class":2080,"line":2238},[2078,6463,2581],{"emptyLinePlaceholder":1196},[2078,6465,6466,6468,6470,6473,6475],{"class":2080,"line":2253},[2078,6467,6091],{"class":2519},[2078,6469,4346],{"class":2519},[2078,6471,6472],{"class":2213}," refreshData",[2078,6474,4235],{"class":2221},[2078,6476,2235],{"class":2221},[2078,6478,6479,6482,6485,6487,6489,6492,6494,6496,6498],{"class":2080,"line":2259},[2078,6480,6481],{"class":2206},"  await",[2078,6483,6484],{"class":2213}," refresh",[2078,6486,2218],{"class":2228},[2078,6488,4442],{"class":2221},[2078,6490,6491],{"class":2228}," dedupe",[2078,6493,2232],{"class":2221},[2078,6495,4322],{"class":2570},[2078,6497,2574],{"class":2221},[2078,6499,2265],{"class":2228},[2078,6501,6502],{"class":2080,"line":2584},[2078,6503,4485],{"class":2221},[2351,6505,2454],{"id":6506},"reasons-for-change-9",[2048,6508,6509],{},"These aliases were removed, for greater clarity.",[2048,6511,6512,6513,6515,6516,6518,6519,2186],{},"The issue came up when adding ",[2060,6514,6359],{}," as an option to ",[2060,6517,515],{},", and we removed the boolean values as they ended up being ",[3858,6520,6521],{},"opposites",[2048,6523,6524,6527,6528,6534,6535,6538,6539,6541,6542,6545,6546,6551],{},[2060,6525,6526],{},"refresh({ dedupe: false })"," meant ",[2172,6529,6530,6531,6533],{},"do not ",[3858,6532,6387],{}," existing requests in favour of this new one",". But passing ",[2060,6536,6537],{},"dedupe: true"," within the options of ",[2060,6540,515],{}," means ",[2172,6543,6544],{},"do not make any new requests if there is an existing pending request."," (See ",[2052,6547,6550],{"href":6548,"rel":6549},"https://github.com/nuxt/nuxt/pull/24564#pullrequestreview-1764584361",[2056],"PR",".)",[2351,6553,2475],{"id":6554},"migration-steps-13",[2048,6556,4989],{},[2068,6558,6560],{"className":4496,"code":6559,"language":4498,"meta":2074,"style":2074},"  const { refresh } = await useAsyncData(async () => ({ message: 'Hello, Nuxt 3!' }))\n  \n  async function refreshData () {\n-   await refresh({ dedupe: true })\n+   await refresh({ dedupe: 'cancel' })\n\n-   await refresh({ dedupe: false })\n+   await refresh({ dedupe: 'defer' })\n  }\n",[2060,6561,6562,6567,6571,6576,6583,6590,6594,6601,6608],{"__ignoreMap":2074},[2078,6563,6564],{"class":2080,"line":2081},[2078,6565,6566],{"class":2217},"  const { refresh } = await useAsyncData(async () => ({ message: 'Hello, Nuxt 3!' }))\n",[2078,6568,6569],{"class":2080,"line":2225},[2078,6570,5004],{"class":2217},[2078,6572,6573],{"class":2080,"line":2238},[2078,6574,6575],{"class":2217},"  async function refreshData () {\n",[2078,6577,6578,6580],{"class":2080,"line":2253},[2078,6579,4510],{"class":2221},[2078,6581,6582],{"class":2228},"   await refresh({ dedupe: true })\n",[2078,6584,6585,6587],{"class":2080,"line":2259},[2078,6586,4531],{"class":2221},[2078,6588,6589],{"class":2088},"   await refresh({ dedupe: 'cancel' })\n",[2078,6591,6592],{"class":2080,"line":2584},[2078,6593,2581],{"emptyLinePlaceholder":1196},[2078,6595,6596,6598],{"class":2080,"line":2628},[2078,6597,4510],{"class":2221},[2078,6599,6600],{"class":2228},"   await refresh({ dedupe: false })\n",[2078,6602,6603,6605],{"class":2080,"line":2644},[2078,6604,4531],{"class":2221},[2078,6606,6607],{"class":2088},"   await refresh({ dedupe: 'defer' })\n",[2078,6609,6610],{"class":2080,"line":2672},[2078,6611,2675],{"class":2217},[2372,6613,6614],{},[2048,6615,6345,6616],{},[2060,6617,6618],{},"npx codemod@latest nuxt/4/deprecated-dedupe-value",[2043,6620,6622,6623,6364,6625,2406,6627],{"id":6621},"respect-defaults-when-clearing-data-in-useasyncdata-and-usefetch","Respect defaults when clearing ",[2060,6624,4118],{},[2060,6626,515],{},[2060,6628,527],{},[2048,6630,2345,6631,4655],{},[2172,6632,2348],{},[2351,6634,2354],{"id":6635},"what-changed-13",[2048,6637,6638,6639,6641,6642,6644,6645,2427,6648,6650],{},"If you provide a custom ",[2060,6640,4140],{}," value for ",[2060,6643,515],{},", this will now be used when calling ",[2060,6646,6647],{},"clear",[2060,6649,650],{}," and it will be reset to its default value rather than simply unset.",[2351,6652,2454],{"id":6653},"reasons-for-change-10",[2048,6655,6656,6657,6659,6660,6662],{},"Often users set an appropriately empty value, such as an empty array, to avoid the need to check for ",[2060,6658,6310],{},"/",[2060,6661,2323],{}," when iterating over it. This should be respected when resetting/clearing the data.",[2043,6664,6622,6666],{"id":6665},"respect-defaults-when-clearing-usestate",[2060,6667,619],{},[2048,6669,2345,6670,4655],{},[2172,6671,2348],{},[2351,6673,2354],{"id":6674},"what-changed-14",[2048,6676,6677,6678,2487,6681,6683,6684,6687,6688,6690,6691,6693,6694,6696,6697,6699],{},"With ",[2060,6679,6680],{},"compatibilityVersion: 5",[2060,6682,654],{}," will reset state to its initial value (provided by the ",[2060,6685,6686],{},"init"," function of ",[2060,6689,619],{},") instead of setting it to ",[2060,6692,2323],{},". This aligns ",[2060,6695,654],{}," behavior with ",[2060,6698,650],{},", which already resets to defaults.",[2351,6701,2454],{"id":6702},"reasons-for-change-11",[2048,6704,6705,6706,6708,6709,6711,6712,6714,6715,6717],{},"When ",[2060,6707,654],{}," sets state to ",[2060,6710,2323],{},", composables that depend on that state can crash because they expect the state to always have a valid shape (e.g., accessing properties on ",[2060,6713,2323],{},"). Resetting to the ",[2060,6716,6686],{}," value ensures state always has a usable default.",[2351,6719,2475],{"id":6720},"migration-steps-14",[2048,6722,6723,6724,6726,6727,6729,6730,2232],{},"If you rely on ",[2060,6725,654],{}," setting state to ",[2060,6728,2323],{},", you can explicitly pass ",[2060,6731,6732],{},"{ reset: false }",[2068,6734,6736],{"className":4496,"code":6735,"language":4498,"meta":2074,"style":2074},"- clearNuxtState('myKey')\n+ clearNuxtState('myKey', { reset: false })\n",[2060,6737,6738,6745],{"__ignoreMap":2074},[2078,6739,6740,6742],{"class":2080,"line":2081},[2078,6741,4510],{"class":2221},[2078,6743,6744],{"class":2228}," clearNuxtState('myKey')\n",[2078,6746,6747,6749],{"class":2080,"line":2225},[2078,6748,4531],{"class":2221},[2078,6750,6751],{"class":2088}," clearNuxtState('myKey', { reset: false })\n",[2048,6753,6754],{},"Alternatively, you can revert to the previous behavior with:",[2068,6756,6758],{"className":2196,"code":6757,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    defaults: {\n      useState: {\n        resetOnClear: false,\n      },\n    },\n  },\n})\n",[2060,6759,6760,6772,6780,6789,6798,6809,6814,6818,6822],{"__ignoreMap":2074},[2078,6761,6762,6764,6766,6768,6770],{"class":2080,"line":2081},[2078,6763,2207],{"class":2206},[2078,6765,2210],{"class":2206},[2078,6767,2214],{"class":2213},[2078,6769,2218],{"class":2217},[2078,6771,2222],{"class":2221},[2078,6773,6774,6776,6778],{"class":2080,"line":2225},[2078,6775,4610],{"class":2228},[2078,6777,2232],{"class":2221},[2078,6779,2235],{"class":2221},[2078,6781,6782,6785,6787],{"class":2080,"line":2238},[2078,6783,6784],{"class":2228},"    defaults",[2078,6786,2232],{"class":2221},[2078,6788,2235],{"class":2221},[2078,6790,6791,6794,6796],{"class":2080,"line":2253},[2078,6792,6793],{"class":2228},"      useState",[2078,6795,2232],{"class":2221},[2078,6797,2235],{"class":2221},[2078,6799,6800,6803,6805,6807],{"class":2080,"line":2259},[2078,6801,6802],{"class":2228},"        resetOnClear",[2078,6804,2232],{"class":2221},[2078,6806,2571],{"class":2570},[2078,6808,2250],{"class":2221},[2078,6810,6811],{"class":2080,"line":2584},[2078,6812,6813],{"class":2221},"      },\n",[2078,6815,6816],{"class":2080,"line":2628},[2078,6817,4475],{"class":2221},[2078,6819,6820],{"class":2080,"line":2644},[2078,6821,2256],{"class":2221},[2078,6823,6824,6826],{"class":2080,"line":2672},[2078,6825,2262],{"class":2221},[2078,6827,2265],{"class":2217},[2048,6829,6830,6831,2232],{},"You can also opt in to this behavior today without setting ",[2060,6832,6680],{},[2068,6834,6836],{"className":2196,"code":6835,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    defaults: {\n      useState: {\n        resetOnClear: true,\n      },\n    },\n  },\n})\n",[2060,6837,6838,6850,6858,6866,6874,6884,6888,6892,6896],{"__ignoreMap":2074},[2078,6839,6840,6842,6844,6846,6848],{"class":2080,"line":2081},[2078,6841,2207],{"class":2206},[2078,6843,2210],{"class":2206},[2078,6845,2214],{"class":2213},[2078,6847,2218],{"class":2217},[2078,6849,2222],{"class":2221},[2078,6851,6852,6854,6856],{"class":2080,"line":2225},[2078,6853,4610],{"class":2228},[2078,6855,2232],{"class":2221},[2078,6857,2235],{"class":2221},[2078,6859,6860,6862,6864],{"class":2080,"line":2238},[2078,6861,6784],{"class":2228},[2078,6863,2232],{"class":2221},[2078,6865,2235],{"class":2221},[2078,6867,6868,6870,6872],{"class":2080,"line":2253},[2078,6869,6793],{"class":2228},[2078,6871,2232],{"class":2221},[2078,6873,2235],{"class":2221},[2078,6875,6876,6878,6880,6882],{"class":2080,"line":2259},[2078,6877,6802],{"class":2228},[2078,6879,2232],{"class":2221},[2078,6881,4322],{"class":2570},[2078,6883,2250],{"class":2221},[2078,6885,6886],{"class":2080,"line":2584},[2078,6887,6813],{"class":2221},[2078,6889,6890],{"class":2080,"line":2628},[2078,6891,4475],{"class":2221},[2078,6893,6894],{"class":2080,"line":2644},[2078,6895,2256],{"class":2221},[2078,6897,6898,6900],{"class":2080,"line":2672},[2078,6899,2262],{"class":2221},[2078,6901,2265],{"class":2217},[2043,6903,6905,6906,6909,6910,2406,6912],{"id":6904},"alignment-of-pending-value-in-useasyncdata-and-usefetch","Alignment of ",[2060,6907,6908],{},"pending"," value in ",[2060,6911,515],{},[2060,6913,527],{},[2048,6915,2345,6916,2349],{},[2172,6917,2348],{},[2048,6919,6920,6921,6923,6924,2487,6926,2487,6928,2406,6930,6932,6933,6935,6936,6938],{},"The ",[2060,6922,6908],{}," object returned from ",[2060,6925,515],{},[2060,6927,527],{},[2060,6929,543],{},[2060,6931,547],{}," is now a computed property that is ",[2060,6934,6390],{}," only when ",[2060,6937,4124],{}," is also pending.",[2351,6940,2354],{"id":6941},"what-changed-15",[2048,6943,6944,6945,6948,6949,6951,6952,6954,6955,6957,6958,6960],{},"Now, when ",[2060,6946,6947],{},"immediate: false"," is passed, ",[2060,6950,6908],{}," will be ",[2060,6953,6397],{}," until the first request is made. This is a change from the previous behavior, where ",[2060,6956,6908],{}," was always ",[2060,6959,6390],{}," until the first request was made.",[2351,6962,2454],{"id":6963},"reasons-for-change-12",[2048,6965,6966,6967,6969,6970,6972,6973,6975],{},"This aligns the meaning of ",[2060,6968,6908],{}," with the ",[2060,6971,4124],{}," property, which is also ",[2060,6974,6908],{}," when the request is in progress.",[2351,6977,2475],{"id":6978},"migration-steps-15",[2048,6980,6981,6982,6984,6985,6987,6988,6990],{},"If you rely on the ",[2060,6983,6908],{}," property, ensure that your logic accounts for the new behavior where ",[2060,6986,6908],{}," will only be ",[2060,6989,6390],{}," when the status is also pending.",[2068,6992,6994],{"className":4496,"code":6993,"language":4498,"meta":2074,"style":2074},"  \u003Ctemplate>\n-   \u003Cdiv v-if=\"!pending\">\n+   \u003Cdiv v-if=\"status === 'success'\">\n      \u003Cp>Data: {{ data }}\u003C/p>\n    \u003C/div>\n    \u003Cdiv v-else>\n      \u003Cp>Loading...\u003C/p>\n    \u003C/div>\n  \u003C/template>\n  \u003Cscript setup lang=\"ts\">\n  const { data, pending, execute, status } = await useAsyncData(() => fetch('/api/data'), {\n    immediate: false\n  })\n  onMounted(() => execute())\n  \u003C/script>\n",[2060,6995,6996,7001,7008,7015,7020,7025,7030,7035,7039,7044,7048,7053,7058,7062,7067],{"__ignoreMap":2074},[2078,6997,6998],{"class":2080,"line":2081},[2078,6999,7000],{"class":2217},"  \u003Ctemplate>\n",[2078,7002,7003,7005],{"class":2080,"line":2225},[2078,7004,4510],{"class":2221},[2078,7006,7007],{"class":2228},"   \u003Cdiv v-if=\"!pending\">\n",[2078,7009,7010,7012],{"class":2080,"line":2238},[2078,7011,4531],{"class":2221},[2078,7013,7014],{"class":2088},"   \u003Cdiv v-if=\"status === 'success'\">\n",[2078,7016,7017],{"class":2080,"line":2253},[2078,7018,7019],{"class":2217},"      \u003Cp>Data: {{ data }}\u003C/p>\n",[2078,7021,7022],{"class":2080,"line":2259},[2078,7023,7024],{"class":2217},"    \u003C/div>\n",[2078,7026,7027],{"class":2080,"line":2584},[2078,7028,7029],{"class":2217},"    \u003Cdiv v-else>\n",[2078,7031,7032],{"class":2080,"line":2628},[2078,7033,7034],{"class":2217},"      \u003Cp>Loading...\u003C/p>\n",[2078,7036,7037],{"class":2080,"line":2644},[2078,7038,7024],{"class":2217},[2078,7040,7041],{"class":2080,"line":2672},[2078,7042,7043],{"class":2217},"  \u003C/template>\n",[2078,7045,7046],{"class":2080,"line":2678},[2078,7047,5700],{"class":2217},[2078,7049,7050],{"class":2080,"line":2685},[2078,7051,7052],{"class":2217},"  const { data, pending, execute, status } = await useAsyncData(() => fetch('/api/data'), {\n",[2078,7054,7055],{"class":2080,"line":2690},[2078,7056,7057],{"class":2217},"    immediate: false\n",[2078,7059,7060],{"class":2080,"line":2696},[2078,7061,5724],{"class":2217},[2078,7063,7064],{"class":2080,"line":2713},[2078,7065,7066],{"class":2217},"  onMounted(() => execute())\n",[2078,7068,7069],{"class":2080,"line":2731},[2078,7070,5747],{"class":2217},[2048,7072,7073],{},"Alternatively, you can temporarily revert to the previous behavior with:",[2068,7075,7077],{"className":2196,"code":7076,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    pendingWhenIdle: true,\n  },\n})\n",[2060,7078,7079,7091,7099,7110,7114],{"__ignoreMap":2074},[2078,7080,7081,7083,7085,7087,7089],{"class":2080,"line":2081},[2078,7082,2207],{"class":2206},[2078,7084,2210],{"class":2206},[2078,7086,2214],{"class":2213},[2078,7088,2218],{"class":2217},[2078,7090,2222],{"class":2221},[2078,7092,7093,7095,7097],{"class":2080,"line":2225},[2078,7094,4610],{"class":2228},[2078,7096,2232],{"class":2221},[2078,7098,2235],{"class":2221},[2078,7100,7101,7104,7106,7108],{"class":2080,"line":2238},[2078,7102,7103],{"class":2228},"    pendingWhenIdle",[2078,7105,2232],{"class":2221},[2078,7107,4322],{"class":2570},[2078,7109,2250],{"class":2221},[2078,7111,7112],{"class":2080,"line":2253},[2078,7113,2256],{"class":2221},[2078,7115,7116,7118],{"class":2080,"line":2259},[2078,7117,2262],{"class":2221},[2078,7119,2265],{"class":2217},[2043,7121,7123,7124,2406,7126],{"id":7122},"key-change-behavior-in-useasyncdata-and-usefetch","Key Change Behavior in ",[2060,7125,515],{},[2060,7127,527],{},[2048,7129,2345,7130,2349],{},[2172,7131,2348],{},[2351,7133,2354],{"id":7134},"what-changed-16",[2048,7136,7137,7138,2427,7140,7142,7143,7145,7146,7148],{},"When using reactive keys in ",[2060,7139,515],{},[2060,7141,527],{},", Nuxt automatically refetches data when the key changes. When ",[2060,7144,6947],{}," is set, ",[2060,7147,515],{}," will only fetch data when the key changes if the data has already been fetched once.",[2048,7150,7151,7152,7154],{},"Previously, ",[2060,7153,527],{}," had slightly different behavior. It would always fetch data when the key changed.",[2048,7156,7157,7158,2406,7160,7162],{},"Now, ",[2060,7159,527],{},[2060,7161,515],{}," behave consistently - by only fetch data when the key changes if the data has already been fetched once.",[2351,7164,2454],{"id":7165},"reasons-for-change-13",[2048,7167,7168,7169,2406,7171,7173,7174,7176,7177,2427,7179,7182,7183,2427,7185,2186],{},"This ensures consistent behavior between ",[2060,7170,515],{},[2060,7172,527],{},", and prevents unexpected fetches. If you have set ",[2060,7175,6947],{},", then you must call ",[2060,7178,6363],{},[2060,7180,7181],{},"execute"," or data will never be fetched in ",[2060,7184,527],{},[2060,7186,515],{},[2351,7188,2475],{"id":7189},"migration-steps-16",[2048,7191,7192,7193,7195],{},"This change should generally improve the expected behavior, but if you were expecting changing the key or options of a non-immediate ",[2060,7194,527],{},", you now will need to trigger it manually the first time.",[2068,7197,7199],{"className":4496,"code":7198,"language":4498,"meta":2074,"style":2074},"  const id = ref('123')\n  const { data, execute } = await useFetch('/api/test', {\n    query: { id },\n    immediate: false\n  )\n+ watch(id, () => execute(), { once: true })\n",[2060,7200,7201,7206,7211,7216,7220,7224],{"__ignoreMap":2074},[2078,7202,7203],{"class":2080,"line":2081},[2078,7204,7205],{"class":2217},"  const id = ref('123')\n",[2078,7207,7208],{"class":2080,"line":2225},[2078,7209,7210],{"class":2217},"  const { data, execute } = await useFetch('/api/test', {\n",[2078,7212,7213],{"class":2080,"line":2238},[2078,7214,7215],{"class":2217},"    query: { id },\n",[2078,7217,7218],{"class":2080,"line":2253},[2078,7219,7057],{"class":2217},[2078,7221,7222],{"class":2080,"line":2259},[2078,7223,4480],{"class":2217},[2078,7225,7226,7228],{"class":2080,"line":2584},[2078,7227,4531],{"class":2221},[2078,7229,7230],{"class":2088}," watch(id, () => execute(), { once: true })\n",[2048,7232,7233],{},"To opt out of this behavior:",[2068,7235,7237],{"className":2196,"code":7236,"language":2198,"meta":2074,"style":2074},"// Or globally in your Nuxt config\nexport default defineNuxtConfig({\n  experimental: {\n    alwaysRunFetchOnKeyChange: true,\n  },\n})\n",[2060,7238,7239,7244,7256,7264,7275,7279],{"__ignoreMap":2074},[2078,7240,7241],{"class":2080,"line":2081},[2078,7242,7243],{"class":2501},"// Or globally in your Nuxt config\n",[2078,7245,7246,7248,7250,7252,7254],{"class":2080,"line":2225},[2078,7247,2207],{"class":2206},[2078,7249,2210],{"class":2206},[2078,7251,2214],{"class":2213},[2078,7253,2218],{"class":2217},[2078,7255,2222],{"class":2221},[2078,7257,7258,7260,7262],{"class":2080,"line":2238},[2078,7259,4610],{"class":2228},[2078,7261,2232],{"class":2221},[2078,7263,2235],{"class":2221},[2078,7265,7266,7269,7271,7273],{"class":2080,"line":2253},[2078,7267,7268],{"class":2228},"    alwaysRunFetchOnKeyChange",[2078,7270,2232],{"class":2221},[2078,7272,4322],{"class":2570},[2078,7274,2250],{"class":2221},[2078,7276,7277],{"class":2080,"line":2259},[2078,7278,2256],{"class":2221},[2078,7280,7281,7283],{"class":2080,"line":2584},[2078,7282,2262],{"class":2221},[2078,7284,2265],{"class":2217},[2043,7286,7288,7289,2406,7291],{"id":7287},"shallow-data-reactivity-in-useasyncdata-and-usefetch","Shallow Data Reactivity in ",[2060,7290,515],{},[2060,7292,527],{},[2048,7294,2345,7295,4655],{},[2172,7296,2348],{},[2048,7298,6920,7299,6923,7301,2487,7303,2487,7305,2406,7307,7309,7310,7313,7314,2186],{},[2060,7300,4118],{},[2060,7302,515],{},[2060,7304,527],{},[2060,7306,543],{},[2060,7308,547],{}," is now a ",[2060,7311,7312],{},"shallowRef"," rather than a ",[2060,7315,7316],{},"ref",[2351,7318,2354],{"id":7319},"what-changed-17",[2048,7321,7322,7323,7325,7326,7328],{},"When new data is fetched, anything depending on ",[2060,7324,4118],{}," will still be reactive because the entire object is replaced. But if your code changes a property ",[3858,7327,5645],{}," that data structure, this will not trigger any reactivity in your app.",[2351,7330,2454],{"id":7331},"reasons-for-change-14",[2048,7333,7334,7335,7338,7339,7341],{},"This brings a ",[2172,7336,7337],{},"significant"," performance improvement for deeply nested objects and arrays because Vue does not need to watch every single property/array for modification. In most cases, ",[2060,7340,4118],{}," should also be immutable.",[2351,7343,2475],{"id":7344},"migration-steps-17",[2048,7346,7347],{},"In most cases, no migration steps are required, but if you rely on the reactivity of the data object then you have two options:",[2393,7349,7350,7372],{},[2280,7351,7352,7353],{},"You can granularly opt in to deep reactivity on a per-composable basis:\n",[2068,7354,7356],{"className":4496,"code":7355,"language":4498,"meta":2074,"style":2074},"- const { data } = useFetch('/api/test')\n+ const { data } = useFetch('/api/test', { deep: true })\n",[2060,7357,7358,7365],{"__ignoreMap":2074},[2078,7359,7360,7362],{"class":2080,"line":2081},[2078,7361,4510],{"class":2221},[2078,7363,7364],{"class":2228}," const { data } = useFetch('/api/test')\n",[2078,7366,7367,7369],{"class":2080,"line":2225},[2078,7368,4531],{"class":2221},[2078,7370,7371],{"class":2088}," const { data } = useFetch('/api/test', { deep: true })\n",[2280,7373,7374,7375],{},"You can change the default behavior on a project-wide basis (not recommended):\n",[2068,7376,7378],{"className":2196,"code":7377,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    defaults: {\n      useAsyncData: {\n        deep: true,\n      },\n    },\n  },\n})\n",[2060,7379,7380,7392,7400,7408,7417,7428,7432,7436,7440],{"__ignoreMap":2074},[2078,7381,7382,7384,7386,7388,7390],{"class":2080,"line":2081},[2078,7383,2207],{"class":2206},[2078,7385,2210],{"class":2206},[2078,7387,2214],{"class":2213},[2078,7389,2218],{"class":2217},[2078,7391,2222],{"class":2221},[2078,7393,7394,7396,7398],{"class":2080,"line":2225},[2078,7395,4610],{"class":2228},[2078,7397,2232],{"class":2221},[2078,7399,2235],{"class":2221},[2078,7401,7402,7404,7406],{"class":2080,"line":2238},[2078,7403,6784],{"class":2228},[2078,7405,2232],{"class":2221},[2078,7407,2235],{"class":2221},[2078,7409,7410,7413,7415],{"class":2080,"line":2253},[2078,7411,7412],{"class":2228},"      useAsyncData",[2078,7414,2232],{"class":2221},[2078,7416,2235],{"class":2221},[2078,7418,7419,7422,7424,7426],{"class":2080,"line":2259},[2078,7420,7421],{"class":2228},"        deep",[2078,7423,2232],{"class":2221},[2078,7425,4322],{"class":2570},[2078,7427,2250],{"class":2221},[2078,7429,7430],{"class":2080,"line":2584},[2078,7431,6813],{"class":2221},[2078,7433,7434],{"class":2080,"line":2628},[2078,7435,4475],{"class":2221},[2078,7437,7438],{"class":2080,"line":2644},[2078,7439,2256],{"class":2221},[2078,7441,7442,7444],{"class":2080,"line":2672},[2078,7443,2262],{"class":2221},[2078,7445,2265],{"class":2217},[2372,7447,7448],{},[2048,7449,7450,7451],{},"If you need to, you can automate this step by running ",[2060,7452,7453],{},"npx codemod@latest nuxt/4/shallow-function-reactivity",[2043,7455,7457,7458],{"id":7456},"absolute-watch-paths-in-builderwatch","Absolute Watch Paths in ",[2060,7459,7460],{},"builder:watch",[2048,7462,2345,7463,4655],{},[2172,7464,2348],{},[2351,7466,2354],{"id":7467},"what-changed-18",[2048,7469,7470,7471,7473,7474,2186],{},"The Nuxt ",[2060,7472,7460],{}," hook now emits a path which is absolute rather than relative to your project ",[2060,7475,3556],{},[2351,7477,2454],{"id":7478},"reasons-for-change-15",[2048,7480,7481,7482,7484],{},"This allows us to support watching paths which are outside your ",[2060,7483,3556],{},", and offers better support for layers and other more complex patterns.",[2351,7486,2475],{"id":7487},"migration-steps-18",[2048,7489,7490,7491,2186],{},"We have already proactively migrated the public Nuxt modules which we are aware use this hook. See ",[2052,7492,7495],{"href":7493,"rel":7494},"https://github.com/nuxt/nuxt/issues/25339",[2056],"issue #25339",[2048,7497,7498,7499,7501],{},"However, if you are a module author using the ",[2060,7500,7460],{}," hook and wishing to remain backwards/forwards compatible, you can use the following code to ensure that your code works the same in both Nuxt v3 and Nuxt v4:",[2068,7503,7505],{"className":4496,"code":7504,"language":4498,"meta":2074,"style":2074},"+ import { relative, resolve } from 'node:fs'\n  // ...\n  nuxt.hook('builder:watch', async (event, path) => {\n+   path = relative(nuxt.options.srcDir, resolve(nuxt.options.srcDir, path))\n    // ...\n  })\n",[2060,7506,7507,7514,7519,7524,7531,7536],{"__ignoreMap":2074},[2078,7508,7509,7511],{"class":2080,"line":2081},[2078,7510,4531],{"class":2221},[2078,7512,7513],{"class":2088}," import { relative, resolve } from 'node:fs'\n",[2078,7515,7516],{"class":2080,"line":2225},[2078,7517,7518],{"class":2217},"  // ...\n",[2078,7520,7521],{"class":2080,"line":2238},[2078,7522,7523],{"class":2217},"  nuxt.hook('builder:watch', async (event, path) => {\n",[2078,7525,7526,7528],{"class":2080,"line":2253},[2078,7527,4531],{"class":2221},[2078,7529,7530],{"class":2088},"   path = relative(nuxt.options.srcDir, resolve(nuxt.options.srcDir, path))\n",[2078,7532,7533],{"class":2080,"line":2259},[2078,7534,7535],{"class":2217},"    // ...\n",[2078,7537,7538],{"class":2080,"line":2584},[2078,7539,5724],{"class":2217},[2372,7541,7542],{},[2048,7543,6345,7544],{},[2060,7545,7546],{},"npx codemod@latest nuxt/4/absolute-watch-path",[2043,7548,7550,7551,7554],{"id":7549},"removal-of-window__nuxt__-object","Removal of ",[2060,7552,7553],{},"window.__NUXT__"," object",[2351,7556,2354],{"id":7557},"what-changed-19",[2048,7559,7560,7561,7563],{},"We are removing the global ",[2060,7562,7553],{}," object after the app finishes hydration.",[2351,7565,2454],{"id":7566},"reasons-for-change-16",[2048,7568,7569,7570,7575,7576,2186],{},"This opens the way to multi-app patterns (",[2052,7571,7574],{"href":7572,"rel":7573},"https://github.com/nuxt/nuxt/issues/21635",[2056],"#21635",") and enables us to focus on a single way to access Nuxt app data - ",[2060,7577,7578],{},"useNuxtApp()",[2351,7580,2475],{"id":7581},"migration-steps-19",[2048,7583,7584,7585,2232],{},"The data is still available, but can be accessed with ",[2060,7586,7587],{},"useNuxtApp().payload",[2068,7589,7591],{"className":4496,"code":7590,"language":4498,"meta":2074,"style":2074},"- console.log(window.__NUXT__)\n+ console.log(useNuxtApp().payload)\n",[2060,7592,7593,7600],{"__ignoreMap":2074},[2078,7594,7595,7597],{"class":2080,"line":2081},[2078,7596,4510],{"class":2221},[2078,7598,7599],{"class":2228}," console.log(window.__NUXT__)\n",[2078,7601,7602,7604],{"class":2080,"line":2225},[2078,7603,4531],{"class":2221},[2078,7605,7606],{"class":2088}," console.log(useNuxtApp().payload)\n",[2043,7608,7610],{"id":7609},"directory-index-scanning","Directory index scanning",[2048,7612,2345,7613,2349],{},[2172,7614,2348],{},[2351,7616,2354],{"id":7617},"what-changed-20",[2048,7619,7620,7621,7623,7624,7627],{},"Child folders in your ",[2060,7622,3895],{}," folder are also scanned for ",[2060,7625,7626],{},"index"," files and these are now also registered as middleware in your project.",[2351,7629,2454],{"id":7630},"reasons-for-change-17",[2048,7632,7633,7634,2406,7636,2186],{},"Nuxt scans a number of folders automatically, including ",[2060,7635,3895],{},[2060,7637,3900],{},[2048,7639,7620,7640,7642,7643,7645],{},[2060,7641,3900],{}," folder are scanned for ",[2060,7644,7626],{}," files and we wanted to make this behavior consistent between scanned directories.",[2351,7647,2475],{"id":7648},"migration-steps-20",[2048,7650,7651],{},"Probably no migration is necessary but if you wish to revert to previous behavior you can add a hook to filter out these middleware:",[2068,7653,7655],{"className":2196,"code":7654,"language":2198,"meta":2074,"style":2074},"export default defineNuxtConfig({\n  hooks: {\n    'app:resolve' (app) {\n      app.middleware = app.middleware.filter(mw => !/\\/index\\.[^/]+$/.test(mw.path))\n    },\n  },\n})\n",[2060,7656,7657,7669,7678,7696,7767,7771,7775],{"__ignoreMap":2074},[2078,7658,7659,7661,7663,7665,7667],{"class":2080,"line":2081},[2078,7660,2207],{"class":2206},[2078,7662,2210],{"class":2206},[2078,7664,2214],{"class":2213},[2078,7666,2218],{"class":2217},[2078,7668,2222],{"class":2221},[2078,7670,7671,7674,7676],{"class":2080,"line":2225},[2078,7672,7673],{"class":2228},"  hooks",[2078,7675,2232],{"class":2221},[2078,7677,2235],{"class":2221},[2078,7679,7680,7683,7686,7688,7690,7692,7694],{"class":2080,"line":2238},[2078,7681,7682],{"class":2221},"    '",[2078,7684,7685],{"class":2088},"app:resolve",[2078,7687,2547],{"class":2221},[2078,7689,2609],{"class":2221},[2078,7691,1193],{"class":2513},[2078,7693,2516],{"class":2221},[2078,7695,2235],{"class":2221},[2078,7697,7698,7701,7703,7705,7707,7710,7712,7714,7716,7719,7721,7724,7726,7729,7731,7734,7736,7739,7742,7744,7747,7750,7752,7754,7757,7759,7761,7763,7765],{"class":2080,"line":2253},[2078,7699,7700],{"class":2217},"      app",[2078,7702,2186],{"class":2221},[2078,7704,157],{"class":2217},[2078,7706,4218],{"class":2221},[2078,7708,7709],{"class":2217}," app",[2078,7711,2186],{"class":2221},[2078,7713,157],{"class":2217},[2078,7715,2186],{"class":2221},[2078,7717,7718],{"class":2213},"filter",[2078,7720,2218],{"class":2228},[2078,7722,7723],{"class":2513},"mw",[2078,7725,2520],{"class":2519},[2078,7727,7728],{"class":2221}," !",[2078,7730,6659],{"class":2221},[2078,7732,7733],{"class":2217},"\\/",[2078,7735,7626],{"class":2088},[2078,7737,7738],{"class":2217},"\\.",[2078,7740,7741],{"class":2221},"[^",[2078,7743,6659],{"class":2088},[2078,7745,7746],{"class":2221},"]+",[2078,7748,7749],{"class":2206},"$",[2078,7751,6659],{"class":2221},[2078,7753,2186],{"class":2221},[2078,7755,7756],{"class":2213},"test",[2078,7758,2218],{"class":2228},[2078,7760,7723],{"class":2217},[2078,7762,2186],{"class":2221},[2078,7764,4962],{"class":2217},[2078,7766,2948],{"class":2228},[2078,7768,7769],{"class":2080,"line":2259},[2078,7770,4475],{"class":2221},[2078,7772,7773],{"class":2080,"line":2584},[2078,7774,2256],{"class":2221},[2078,7776,7777,7779],{"class":2080,"line":2628},[2078,7778,2262],{"class":2221},[2078,7780,2265],{"class":2217},[2043,7782,7784],{"id":7783},"template-compilation-changes","Template Compilation Changes",[2048,7786,2345,7787,4655],{},[2172,7788,2348],{},[2351,7790,2354],{"id":7791},"what-changed-21",[2048,7793,7794,7795,7798,7799,7802],{},"Previously, Nuxt used ",[2060,7796,7797],{},"lodash/template"," to compile templates located on the file system using the ",[2060,7800,7801],{},".ejs"," file format/syntax.",[2048,7804,7805,7806,2487,7809,2487,7812,7815],{},"In addition, we provided some template utilities (",[2060,7807,7808],{},"serialize",[2060,7810,7811],{},"importName",[2060,7813,7814],{},"importSources",") which could be used for code-generation within these templates, which are now being removed.",[2351,7817,2454],{"id":7818},"reasons-for-change-18",[2048,7820,7821,7822,7825],{},"In Nuxt v3 we moved to a 'virtual' syntax with a ",[2060,7823,7824],{},"getContents()"," function which is much more flexible and performant.",[2048,7827,7828,7829,7831,7832,7835],{},"In addition, ",[2060,7830,7797],{}," has had a succession of security issues. These do not really apply to Nuxt projects because it is being used at build-time, not runtime, and by trusted code. However, they still appear in security audits. Moreover, ",[2060,7833,7834],{},"lodash"," is a hefty dependency and is unused by most projects.",[2048,7837,7838,7839,7844],{},"Finally, providing code serialization functions directly within Nuxt is not ideal. Instead, we maintain projects like ",[2052,7840,7843],{"href":7841,"rel":7842},"https://github.com/unjs/knitwork",[2056],"unjs/knitwork"," which can be dependencies of your project, and where security issues can be reported/resolved directly without requiring an upgrade of Nuxt itself.",[2351,7846,2475],{"id":7847},"migration-steps-21",[2048,7849,7850],{},"We have raised PRs to update modules using EJS syntax, but if you need to do this yourself, you have three backwards/forwards-compatible alternatives:",[2277,7852,7853,7858,7865],{},[2280,7854,7855,7856,2186],{},"Moving your string interpolation logic directly into ",[2060,7857,7824],{},[2280,7859,7860,7861,2186],{},"Using a custom function to handle the replacement, such as in ",[2052,7862,7863],{"href":7863,"rel":7864},"https://github.com/nuxt-modules/color-mode/pull/240",[2056],[2280,7866,7867,7868,7871,7872,7875],{},"Use ",[2060,7869,7870],{},"es-toolkit/compat"," (a drop-in replacement for lodash template), as a dependency of ",[3858,7873,7874],{},"your"," project rather than Nuxt:",[2068,7877,7879],{"className":4496,"code":7878,"language":4498,"meta":2074,"style":2074},"+ import { readFileSync } from 'node:fs'\n+ import { template } from 'es-toolkit/compat'\n  // ...\n  addTemplate({\n    fileName: 'appinsights-vue.js'\n    options: { /* some options */ },\n-   src: resolver.resolve('./runtime/plugin.ejs'),\n+   getContents({ options }) {\n+     const contents = readFileSync(resolver.resolve('./runtime/plugin.ejs'), 'utf-8')\n+     return template(contents)({ options })\n+   },\n  })\n",[2060,7880,7881,7888,7895,7899,7904,7909,7914,7921,7928,7935,7942,7949],{"__ignoreMap":2074},[2078,7882,7883,7885],{"class":2080,"line":2081},[2078,7884,4531],{"class":2221},[2078,7886,7887],{"class":2088}," import { readFileSync } from 'node:fs'\n",[2078,7889,7890,7892],{"class":2080,"line":2225},[2078,7891,4531],{"class":2221},[2078,7893,7894],{"class":2088}," import { template } from 'es-toolkit/compat'\n",[2078,7896,7897],{"class":2080,"line":2238},[2078,7898,7518],{"class":2217},[2078,7900,7901],{"class":2080,"line":2253},[2078,7902,7903],{"class":2217},"  addTemplate({\n",[2078,7905,7906],{"class":2080,"line":2259},[2078,7907,7908],{"class":2217},"    fileName: 'appinsights-vue.js'\n",[2078,7910,7911],{"class":2080,"line":2584},[2078,7912,7913],{"class":2217},"    options: { /* some options */ },\n",[2078,7915,7916,7918],{"class":2080,"line":2628},[2078,7917,4510],{"class":2221},[2078,7919,7920],{"class":2228},"   src: resolver.resolve('./runtime/plugin.ejs'),\n",[2078,7922,7923,7925],{"class":2080,"line":2644},[2078,7924,4531],{"class":2221},[2078,7926,7927],{"class":2088},"   getContents({ options }) {\n",[2078,7929,7930,7932],{"class":2080,"line":2672},[2078,7931,4531],{"class":2221},[2078,7933,7934],{"class":2088},"     const contents = readFileSync(resolver.resolve('./runtime/plugin.ejs'), 'utf-8')\n",[2078,7936,7937,7939],{"class":2080,"line":2678},[2078,7938,4531],{"class":2221},[2078,7940,7941],{"class":2088},"     return template(contents)({ options })\n",[2078,7943,7944,7946],{"class":2080,"line":2685},[2078,7945,4531],{"class":2221},[2078,7947,7948],{"class":2088},"   },\n",[2078,7950,7951],{"class":2080,"line":2690},[2078,7952,5724],{"class":2217},[2048,7954,7955,7956,2487,7958,2487,7960,7962,7963,2232],{},"Finally, if you are using the template utilities (",[2060,7957,7808],{},[2060,7959,7811],{},[2060,7961,7814],{},"), you can replace them as follows with utilities from ",[2060,7964,7965],{},"knitwork",[2068,7967,7969],{"className":2196,"code":7968,"language":2198,"meta":2074,"style":2074},"import { genDynamicImport, genImport, genSafeVariableName } from 'knitwork'\n\nconst serialize = (data: any) => JSON.stringify(data, null, 2).replace(/\"\\{(.+)\\}\"(?=,?$)/gm, r => JSON.parse(r).replace(/^\\{(.*)\\}$/, '$1'))\n\nconst importSources = (sources: string | string[], { lazy = false } = {}) => {\n  return toArray(sources).map((src) => {\n    if (lazy) {\n      return `const ${genSafeVariableName(src)} = ${genDynamicImport(src, { comment: `webpackChunkName: ${JSON.stringify(src)}` })}`\n    }\n    return genImport(src, genSafeVariableName(src))\n  }).join('\\n')\n}\n\nconst importName = genSafeVariableName\n",[2060,7970,7971,8000,8004,8143,8147,8195,8226,8239,8305,8309,8329,8352,8356,8360],{"__ignoreMap":2074},[2078,7972,7973,7975,7977,7980,7982,7985,7987,7990,7992,7994,7996,7998],{"class":2080,"line":2081},[2078,7974,5283],{"class":2206},[2078,7976,2562],{"class":2221},[2078,7978,7979],{"class":2217}," genDynamicImport",[2078,7981,2606],{"class":2221},[2078,7983,7984],{"class":2217}," genImport",[2078,7986,2606],{"class":2221},[2078,7988,7989],{"class":2217}," genSafeVariableName",[2078,7991,2574],{"class":2221},[2078,7993,5298],{"class":2206},[2078,7995,2721],{"class":2221},[2078,7997,7965],{"class":2088},[2078,7999,2935],{"class":2221},[2078,8001,8002],{"class":2080,"line":2225},[2078,8003,2581],{"emptyLinePlaceholder":1196},[2078,8005,8006,8008,8011,8013,8015,8017,8019,8022,8024,8026,8029,8031,8034,8037,8039,8042,8045,8047,8049,8052,8054,8056,8058,8061,8063,8065,8068,8071,8073,8076,8078,8081,8083,8086,8089,8091,8094,8096,8098,8100,8103,8106,8108,8110,8112,8114,8117,8119,8121,8123,8126,8128,8130,8132,8134,8136,8139,8141],{"class":2080,"line":2238},[2078,8007,4203],{"class":2519},[2078,8009,8010],{"class":2217}," serialize ",[2078,8012,5521],{"class":2221},[2078,8014,2609],{"class":2221},[2078,8016,4118],{"class":2513},[2078,8018,2232],{"class":2221},[2078,8020,8021],{"class":2084}," any",[2078,8023,2516],{"class":2221},[2078,8025,2520],{"class":2519},[2078,8027,8028],{"class":2217}," JSON",[2078,8030,2186],{"class":2221},[2078,8032,8033],{"class":2213},"stringify",[2078,8035,8036],{"class":2217},"(data",[2078,8038,2606],{"class":2221},[2078,8040,8041],{"class":2221}," null,",[2078,8043,8044],{"class":2246}," 2",[2078,8046,2516],{"class":2217},[2078,8048,2186],{"class":2221},[2078,8050,8051],{"class":2213},"replace",[2078,8053,2218],{"class":2217},[2078,8055,6659],{"class":2221},[2078,8057,5524],{"class":2088},[2078,8059,8060],{"class":2217},"\\{",[2078,8062,2218],{"class":2221},[2078,8064,2186],{"class":2088},[2078,8066,8067],{"class":2221},"+)",[2078,8069,8070],{"class":2217},"\\}",[2078,8072,5524],{"class":2088},[2078,8074,8075],{"class":2221},"(?=",[2078,8077,2606],{"class":2088},[2078,8079,8080],{"class":2221},"?",[2078,8082,7749],{"class":2206},[2078,8084,8085],{"class":2221},")/",[2078,8087,8088],{"class":2246},"gm",[2078,8090,2606],{"class":2221},[2078,8092,8093],{"class":2513}," r",[2078,8095,2520],{"class":2519},[2078,8097,8028],{"class":2217},[2078,8099,2186],{"class":2221},[2078,8101,8102],{"class":2213},"parse",[2078,8104,8105],{"class":2217},"(r)",[2078,8107,2186],{"class":2221},[2078,8109,8051],{"class":2213},[2078,8111,2218],{"class":2217},[2078,8113,6659],{"class":2221},[2078,8115,8116],{"class":2206},"^",[2078,8118,8060],{"class":2217},[2078,8120,2218],{"class":2221},[2078,8122,2186],{"class":2088},[2078,8124,8125],{"class":2221},"*)",[2078,8127,8070],{"class":2217},[2078,8129,7749],{"class":2206},[2078,8131,6659],{"class":2221},[2078,8133,2606],{"class":2221},[2078,8135,2721],{"class":2221},[2078,8137,8138],{"class":2088},"$1",[2078,8140,2547],{"class":2221},[2078,8142,2948],{"class":2217},[2078,8144,8145],{"class":2080,"line":2253},[2078,8146,2581],{"emptyLinePlaceholder":1196},[2078,8148,8149,8151,8154,8156,8158,8161,8163,8165,8168,8170,8173,8175,8177,8180,8182,8184,8186,8188,8191,8193],{"class":2080,"line":2259},[2078,8150,4203],{"class":2519},[2078,8152,8153],{"class":2217}," importSources ",[2078,8155,5521],{"class":2221},[2078,8157,2609],{"class":2221},[2078,8159,8160],{"class":2513},"sources",[2078,8162,2232],{"class":2221},[2078,8164,4359],{"class":2084},[2078,8166,8167],{"class":2221}," |",[2078,8169,4359],{"class":2084},[2078,8171,8172],{"class":2217},"[]",[2078,8174,2606],{"class":2221},[2078,8176,2562],{"class":2221},[2078,8178,8179],{"class":2513}," lazy",[2078,8181,4218],{"class":2221},[2078,8183,2571],{"class":2570},[2078,8185,2574],{"class":2221},[2078,8187,4218],{"class":2221},[2078,8189,8190],{"class":2221}," {})",[2078,8192,2520],{"class":2519},[2078,8194,2235],{"class":2221},[2078,8196,8197,8199,8202,8204,8206,8208,8210,8213,8215,8217,8220,8222,8224],{"class":2080,"line":2584},[2078,8198,4368],{"class":2206},[2078,8200,8201],{"class":2213}," toArray",[2078,8203,2218],{"class":2228},[2078,8205,8160],{"class":2217},[2078,8207,2516],{"class":2228},[2078,8209,2186],{"class":2221},[2078,8211,8212],{"class":2213},"map",[2078,8214,2218],{"class":2228},[2078,8216,2218],{"class":2221},[2078,8218,8219],{"class":2513},"src",[2078,8221,2516],{"class":2221},[2078,8223,2520],{"class":2519},[2078,8225,2235],{"class":2221},[2078,8227,8228,8230,8232,8235,8237],{"class":2080,"line":2628},[2078,8229,2809],{"class":2206},[2078,8231,2609],{"class":2228},[2078,8233,8234],{"class":2217},"lazy",[2078,8236,2639],{"class":2228},[2078,8238,2222],{"class":2221},[2078,8240,8241,8244,8247,8250,8252,8255,8258,8260,8263,8265,8268,8271,8273,8275,8278,8280,8282,8285,8287,8290,8292,8294,8296,8298,8300,8302],{"class":2080,"line":2644},[2078,8242,8243],{"class":2206},"      return",[2078,8245,8246],{"class":2221}," `",[2078,8248,8249],{"class":2088},"const ",[2078,8251,4384],{"class":2221},[2078,8253,8254],{"class":2213},"genSafeVariableName",[2078,8256,8257],{"class":2217},"(src)",[2078,8259,2262],{"class":2221},[2078,8261,8262],{"class":2088}," = ",[2078,8264,4384],{"class":2221},[2078,8266,8267],{"class":2213},"genDynamicImport",[2078,8269,8270],{"class":2217},"(src",[2078,8272,2606],{"class":2221},[2078,8274,2562],{"class":2221},[2078,8276,8277],{"class":2228}," comment",[2078,8279,2232],{"class":2221},[2078,8281,8246],{"class":2221},[2078,8283,8284],{"class":2088},"webpackChunkName: ",[2078,8286,4384],{"class":2221},[2078,8288,8289],{"class":2217},"JSON",[2078,8291,2186],{"class":2221},[2078,8293,8033],{"class":2213},[2078,8295,8257],{"class":2217},[2078,8297,4389],{"class":2221},[2078,8299,2574],{"class":2221},[2078,8301,2516],{"class":2217},[2078,8303,8304],{"class":2221},"}`\n",[2078,8306,8307],{"class":2080,"line":2672},[2078,8308,2893],{"class":2221},[2078,8310,8311,8313,8315,8317,8319,8321,8323,8325,8327],{"class":2080,"line":2678},[2078,8312,2919],{"class":2206},[2078,8314,7984],{"class":2213},[2078,8316,2218],{"class":2228},[2078,8318,8219],{"class":2217},[2078,8320,2606],{"class":2221},[2078,8322,7989],{"class":2213},[2078,8324,2218],{"class":2228},[2078,8326,8219],{"class":2217},[2078,8328,2948],{"class":2228},[2078,8330,8331,8334,8336,8338,8341,8343,8345,8348,8350],{"class":2080,"line":2685},[2078,8332,8333],{"class":2221},"  }",[2078,8335,2516],{"class":2228},[2078,8337,2186],{"class":2221},[2078,8339,8340],{"class":2213},"join",[2078,8342,2218],{"class":2228},[2078,8344,2547],{"class":2221},[2078,8346,8347],{"class":2217},"\\n",[2078,8349,2547],{"class":2221},[2078,8351,2265],{"class":2228},[2078,8353,8354],{"class":2080,"line":2690},[2078,8355,4485],{"class":2221},[2078,8357,8358],{"class":2080,"line":2696},[2078,8359,2581],{"emptyLinePlaceholder":1196},[2078,8361,8362,8364,8367,8369],{"class":2080,"line":2713},[2078,8363,4203],{"class":2519},[2078,8365,8366],{"class":2217}," importName ",[2078,8368,5521],{"class":2221},[2078,8370,8371],{"class":2217}," genSafeVariableName\n",[2372,8373,8374],{},[2048,8375,6345,8376],{},[2060,8377,8378],{},"npx codemod@latest nuxt/4/template-compilation-changes",[2043,8380,8382],{"id":8381},"default-typescript-configuration-changes","Default TypeScript Configuration Changes",[2048,8384,2345,8385,4655],{},[2172,8386,2348],{},[2351,8388,2354],{"id":8389},"what-changed-22",[2048,8391,8392,8395,8396,8398,8399,2186],{},[2060,8393,8394],{},"compilerOptions.noUncheckedIndexedAccess"," is now ",[2060,8397,6390],{}," instead of ",[2060,8400,6397],{},[2351,8402,2454],{"id":8403},"reasons-for-change-19",[2048,8405,8406,8407,8412,8413,2186],{},"This change is a follow up to a prior ",[2052,8408,8411],{"href":8409,"rel":8410},"https://github.com/nuxt/nuxt/pull/27485",[2056],"3.12 config update"," where we improved our defaults, mostly adhering to ",[2052,8414,8417],{"href":8415,"rel":8416},"https://www.totaltypescript.com/tsconfig-cheat-sheet",[2056],"TotalTypeScript's recommendations",[2351,8419,2475],{"id":8420},"migration-steps-22",[2048,8422,8423],{},"There are two approaches:",[2393,8425,8426,8429],{},[2280,8427,8428],{},"Run a typecheck on your app and fix any new errors (recommended).",[2280,8430,8431,8432,2232,8434],{},"Override the new default in your ",[2060,8433,233],{},[2068,8435,8437],{"className":2196,"code":8436,"language":2198,"meta":2074,"style":2074},"export default defineNuxtConfig({\n  typescript: {\n    tsConfig: {\n      compilerOptions: {\n        noUncheckedIndexedAccess: false,\n      },\n    },\n  },\n})\n",[2060,8438,8439,8451,8460,8469,8478,8489,8493,8497,8501],{"__ignoreMap":2074},[2078,8440,8441,8443,8445,8447,8449],{"class":2080,"line":2081},[2078,8442,2207],{"class":2206},[2078,8444,2210],{"class":2206},[2078,8446,2214],{"class":2213},[2078,8448,2218],{"class":2217},[2078,8450,2222],{"class":2221},[2078,8452,8453,8456,8458],{"class":2080,"line":2225},[2078,8454,8455],{"class":2228},"  typescript",[2078,8457,2232],{"class":2221},[2078,8459,2235],{"class":2221},[2078,8461,8462,8465,8467],{"class":2080,"line":2238},[2078,8463,8464],{"class":2228},"    tsConfig",[2078,8466,2232],{"class":2221},[2078,8468,2235],{"class":2221},[2078,8470,8471,8474,8476],{"class":2080,"line":2253},[2078,8472,8473],{"class":2228},"      compilerOptions",[2078,8475,2232],{"class":2221},[2078,8477,2235],{"class":2221},[2078,8479,8480,8483,8485,8487],{"class":2080,"line":2259},[2078,8481,8482],{"class":2228},"        noUncheckedIndexedAccess",[2078,8484,2232],{"class":2221},[2078,8486,2571],{"class":2570},[2078,8488,2250],{"class":2221},[2078,8490,8491],{"class":2080,"line":2584},[2078,8492,6813],{"class":2221},[2078,8494,8495],{"class":2080,"line":2628},[2078,8496,4475],{"class":2221},[2078,8498,8499],{"class":2080,"line":2644},[2078,8500,2256],{"class":2221},[2078,8502,8503,8505],{"class":2080,"line":2672},[2078,8504,2262],{"class":2221},[2078,8506,2265],{"class":2217},[2043,8508,8510],{"id":8509},"typescript-configuration-splitting","TypeScript Configuration Splitting",[2048,8512,2345,8513,4655],{},[2172,8514,2348],{},[2351,8516,2354],{"id":8517},"what-changed-23",[2048,8519,8520],{},"Nuxt now generates separate TypeScript configurations for different contexts to provide better type-checking experiences:",[2393,8522,8523,8564,8573,8579,8585],{},[2280,8524,8525,8528,8529],{},[2172,8526,8527],{},"New TypeScript configuration files",": Nuxt now generates additional TypeScript configurations:",[2277,8530,8531,8537,8543,8552,8558],{},[2280,8532,8533,8536],{},[2060,8534,8535],{},".nuxt/tsconfig.app.json"," - For your app code (Vue components, composables, etc.)",[2280,8538,8539,8542],{},[2060,8540,8541],{},".nuxt/tsconfig.server.json"," - For your server-side code (Nitro/server directory)",[2280,8544,8545,8548,8549,8551],{},[2060,8546,8547],{},".nuxt/tsconfig.node.json"," - For your build-time code (modules, ",[2060,8550,233],{},", etc.)",[2280,8553,8554,8557],{},[2060,8555,8556],{},".nuxt/tsconfig.shared.json"," - For code shared between app and server contexts (like types and non-environment specific utilities)",[2280,8559,8560,8563],{},[2060,8561,8562],{},".nuxt/tsconfig.json"," - Legacy configuration for backward compatibility",[2280,8565,8566,8569,8570,8572],{},[2172,8567,8568],{},"Backward compatibility",": Existing projects that extend ",[2060,8571,8562],{}," will continue to work as before.",[2280,8574,8575,8578],{},[2172,8576,8577],{},"Opt-in project references",": New projects or those wanting better type checking can adopt TypeScript's project references feature.",[2280,8580,8581,8584],{},[2172,8582,8583],{},"Context-specific type checking",": Each context now has appropriate compiler options and includes/excludes for its specific environment.",[2280,8586,8587,8594],{},[2172,8588,8589,8590,8593],{},"New ",[2060,8591,8592],{},"typescript.nodeTsConfig"," option",": You can now customize the TypeScript configuration for Node.js build-time code.",[2351,8596,2454],{"id":8597},"reasons-for-change-20",[2048,8599,8600],{},"This change provides several benefits:",[2393,8602,8603,8609,8615,8621],{},[2280,8604,8605,8608],{},[2172,8606,8607],{},"Better type safety",": Each context (app, server, build-time) gets appropriate type checking with context-specific globals and APIs.",[2280,8610,8611,8614],{},[2172,8612,8613],{},"Improved IDE experience",": Better IntelliSense and error reporting for different parts of your codebase.",[2280,8616,8617,8620],{},[2172,8618,8619],{},"Cleaner separation",": Server code won't incorrectly suggest client-side APIs and vice versa.",[2280,8622,8623,8625],{},[2172,8624,3835],{},": TypeScript can more efficiently check code with properly scoped configurations.",[2048,8627,8628,8629,8631,8632,8634,8635,8637],{},"For example, auto-imports are not available in your ",[2060,8630,233],{}," (but previously this was not flagged by TypeScript). And while IDEs recognized the separate context hinted by ",[2060,8633,242],{}," in your ",[2060,8636,3852],{}," directory, this was not reflected in type-checking (requiring a separate step).",[2351,8639,2475],{"id":8640},"migration-steps-23",[2048,8642,8643,8646],{},[2172,8644,8645],{},"No migration is required"," - existing projects will continue to work as before.",[2048,8648,8649],{},"However, to take advantage of improved type checking, you can opt in to the new project references approach:",[2393,8651,8652,8818,8832,8857,8898,9054],{},[2280,8653,8654,8659,8660,8676],{},[2172,8655,8656,8657],{},"Update your root ",[2060,8658,242],{}," to use project references:",[2328,8661,8662],{},[2048,8663,8664,8665,8667,8668,8671,8672,8675],{},"If your ",[2060,8666,242],{}," currently has an ",[2060,8669,8670],{},"\"extends\": \"./.nuxt/tsconfig.json\""," line, ",[2172,8673,8674],{},"remove it"," before adding the references. Project references and extends are mutually exclusive.",[2068,8677,8681],{"className":8678,"code":8679,"language":8680,"meta":2074,"style":2074},"language-json shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","{\n  // Remove \"extends\": \"./.nuxt/tsconfig.json\" if present\n  \"files\": [],\n  \"references\": [\n    { \"path\": \"./.nuxt/tsconfig.app.json\" },\n    { \"path\": \"./.nuxt/tsconfig.server.json\" },\n    { \"path\": \"./.nuxt/tsconfig.shared.json\" },\n    { \"path\": \"./.nuxt/tsconfig.node.json\" }\n  ]\n}\n","json",[2060,8682,8683,8687,8692,8707,8721,8745,8766,8787,8809,8814],{"__ignoreMap":2074},[2078,8684,8685],{"class":2080,"line":2081},[2078,8686,2222],{"class":2221},[2078,8688,8689],{"class":2080,"line":2225},[2078,8690,8691],{"class":2501},"  // Remove \"extends\": \"./.nuxt/tsconfig.json\" if present\n",[2078,8693,8694,8697,8700,8702,8704],{"class":2080,"line":2238},[2078,8695,8696],{"class":2221},"  \"",[2078,8698,8699],{"class":2519},"files",[2078,8701,5524],{"class":2221},[2078,8703,2232],{"class":2221},[2078,8705,8706],{"class":2221}," [],\n",[2078,8708,8709,8711,8714,8716,8718],{"class":2080,"line":2253},[2078,8710,8696],{"class":2221},[2078,8712,8713],{"class":2519},"references",[2078,8715,5524],{"class":2221},[2078,8717,2232],{"class":2221},[2078,8719,8720],{"class":2221}," [\n",[2078,8722,8723,8726,8729,8731,8733,8735,8737,8740,8742],{"class":2080,"line":2259},[2078,8724,8725],{"class":2221},"    {",[2078,8727,8728],{"class":2221}," \"",[2078,8730,4962],{"class":2084},[2078,8732,5524],{"class":2221},[2078,8734,2232],{"class":2221},[2078,8736,8728],{"class":2221},[2078,8738,8739],{"class":2088},"./.nuxt/tsconfig.app.json",[2078,8741,5524],{"class":2221},[2078,8743,8744],{"class":2221}," },\n",[2078,8746,8747,8749,8751,8753,8755,8757,8759,8762,8764],{"class":2080,"line":2584},[2078,8748,8725],{"class":2221},[2078,8750,8728],{"class":2221},[2078,8752,4962],{"class":2084},[2078,8754,5524],{"class":2221},[2078,8756,2232],{"class":2221},[2078,8758,8728],{"class":2221},[2078,8760,8761],{"class":2088},"./.nuxt/tsconfig.server.json",[2078,8763,5524],{"class":2221},[2078,8765,8744],{"class":2221},[2078,8767,8768,8770,8772,8774,8776,8778,8780,8783,8785],{"class":2080,"line":2628},[2078,8769,8725],{"class":2221},[2078,8771,8728],{"class":2221},[2078,8773,4962],{"class":2084},[2078,8775,5524],{"class":2221},[2078,8777,2232],{"class":2221},[2078,8779,8728],{"class":2221},[2078,8781,8782],{"class":2088},"./.nuxt/tsconfig.shared.json",[2078,8784,5524],{"class":2221},[2078,8786,8744],{"class":2221},[2078,8788,8789,8791,8793,8795,8797,8799,8801,8804,8806],{"class":2080,"line":2644},[2078,8790,8725],{"class":2221},[2078,8792,8728],{"class":2221},[2078,8794,4962],{"class":2084},[2078,8796,5524],{"class":2221},[2078,8798,2232],{"class":2221},[2078,8800,8728],{"class":2221},[2078,8802,8803],{"class":2088},"./.nuxt/tsconfig.node.json",[2078,8805,5524],{"class":2221},[2078,8807,8808],{"class":2221}," }\n",[2078,8810,8811],{"class":2080,"line":2672},[2078,8812,8813],{"class":2221},"  ]\n",[2078,8815,8816],{"class":2080,"line":2678},[2078,8817,4485],{"class":2221},[2280,8819,8820,8825,8826,8829,8830,2186],{},[2172,8821,8822,8823],{},"Remove any manual server ",[2060,8824,242],{}," files (like ",[2060,8827,8828],{},"server/tsconfig.json",") that extended ",[2060,8831,8541],{},[2280,8833,8834,8837,8838],{},[2172,8835,8836],{},"Update your type checking scripts"," to use the build flag for project references:",[2068,8839,8841],{"className":4496,"code":8840,"language":4498,"meta":2074,"style":2074},"- \"typecheck\": \"nuxt prepare && vue-tsc --noEmit\"\n+ \"typecheck\": \"nuxt prepare && vue-tsc -b --noEmit\"\n",[2060,8842,8843,8850],{"__ignoreMap":2074},[2078,8844,8845,8847],{"class":2080,"line":2081},[2078,8846,4510],{"class":2221},[2078,8848,8849],{"class":2228}," \"typecheck\": \"nuxt prepare && vue-tsc --noEmit\"\n",[2078,8851,8852,8854],{"class":2080,"line":2225},[2078,8853,4531],{"class":2221},[2078,8855,8856],{"class":2088}," \"typecheck\": \"nuxt prepare && vue-tsc -b --noEmit\"\n",[2280,8858,8859,2232,8862,8884],{},[2172,8860,8861],{},"Move all type augmentations into their appropriate context",[2277,8863,8864,8870,8875],{},[2280,8865,8866,8867,8869],{},"If you are augmenting types for the app context, move the files to the ",[2060,8868,1195],{}," directory.",[2280,8871,8872,8873,8869],{},"If you are augmenting types for the server context, move the files to the ",[2060,8874,3852],{},[2280,8876,8877,8878,8881,8882,8869],{},"If you are augmenting types that are ",[2172,8879,8880],{},"shared between the app and server",", move the files to the ",[2060,8883,3627],{},[8885,8886,8887],"warning",{},[2048,8888,8889,8890,2487,8892,8894,8895,8897],{},"Augmenting types from outside the ",[2060,8891,1195],{},[2060,8893,3852],{},", or ",[2060,8896,3627],{}," directories will not work with the new project references setup.",[2280,8899,8900,8903,8904],{},[2172,8901,8902],{},"Configure TypeScript options"," if needed:",[2068,8905,8907],{"className":2196,"code":8906,"language":2198,"meta":2074,"style":2074},"export default defineNuxtConfig({\n  typescript: {\n    // customize tsconfig.app.json\n    tsConfig: {\n      // ...\n    },\n    // customize tsconfig.shared.json\n    sharedTsConfig: {\n      // ...\n    },\n    // customize tsconfig.node.json\n    nodeTsConfig: {\n      // ...\n    },\n  },\n  nitro: {\n    typescript: {\n      // customize tsconfig.server.json\n      tsConfig: {\n        // ...\n      },\n    },\n  },\n})\n",[2060,8908,8909,8921,8929,8934,8942,8947,8951,8956,8965,8969,8973,8978,8987,8991,8995,8999,9008,9017,9022,9031,9036,9040,9044,9048],{"__ignoreMap":2074},[2078,8910,8911,8913,8915,8917,8919],{"class":2080,"line":2081},[2078,8912,2207],{"class":2206},[2078,8914,2210],{"class":2206},[2078,8916,2214],{"class":2213},[2078,8918,2218],{"class":2217},[2078,8920,2222],{"class":2221},[2078,8922,8923,8925,8927],{"class":2080,"line":2225},[2078,8924,8455],{"class":2228},[2078,8926,2232],{"class":2221},[2078,8928,2235],{"class":2221},[2078,8930,8931],{"class":2080,"line":2238},[2078,8932,8933],{"class":2501},"    // customize tsconfig.app.json\n",[2078,8935,8936,8938,8940],{"class":2080,"line":2253},[2078,8937,8464],{"class":2228},[2078,8939,2232],{"class":2221},[2078,8941,2235],{"class":2221},[2078,8943,8944],{"class":2080,"line":2259},[2078,8945,8946],{"class":2501},"      // ...\n",[2078,8948,8949],{"class":2080,"line":2584},[2078,8950,4475],{"class":2221},[2078,8952,8953],{"class":2080,"line":2628},[2078,8954,8955],{"class":2501},"    // customize tsconfig.shared.json\n",[2078,8957,8958,8961,8963],{"class":2080,"line":2644},[2078,8959,8960],{"class":2228},"    sharedTsConfig",[2078,8962,2232],{"class":2221},[2078,8964,2235],{"class":2221},[2078,8966,8967],{"class":2080,"line":2672},[2078,8968,8946],{"class":2501},[2078,8970,8971],{"class":2080,"line":2678},[2078,8972,4475],{"class":2221},[2078,8974,8975],{"class":2080,"line":2685},[2078,8976,8977],{"class":2501},"    // customize tsconfig.node.json\n",[2078,8979,8980,8983,8985],{"class":2080,"line":2690},[2078,8981,8982],{"class":2228},"    nodeTsConfig",[2078,8984,2232],{"class":2221},[2078,8986,2235],{"class":2221},[2078,8988,8989],{"class":2080,"line":2696},[2078,8990,8946],{"class":2501},[2078,8992,8993],{"class":2080,"line":2713},[2078,8994,4475],{"class":2221},[2078,8996,8997],{"class":2080,"line":2731},[2078,8998,2256],{"class":2221},[2078,9000,9001,9004,9006],{"class":2080,"line":2744},[2078,9002,9003],{"class":2228},"  nitro",[2078,9005,2232],{"class":2221},[2078,9007,2235],{"class":2221},[2078,9009,9010,9013,9015],{"class":2080,"line":2750},[2078,9011,9012],{"class":2228},"    typescript",[2078,9014,2232],{"class":2221},[2078,9016,2235],{"class":2221},[2078,9018,9019],{"class":2080,"line":2755},[2078,9020,9021],{"class":2501},"      // customize tsconfig.server.json\n",[2078,9023,9024,9027,9029],{"class":2080,"line":2769},[2078,9025,9026],{"class":2228},"      tsConfig",[2078,9028,2232],{"class":2221},[2078,9030,2235],{"class":2221},[2078,9032,9033],{"class":2080,"line":2775},[2078,9034,9035],{"class":2501},"        // ...\n",[2078,9037,9038],{"class":2080,"line":2780},[2078,9039,6813],{"class":2221},[2078,9041,9042],{"class":2080,"line":2800},[2078,9043,4475],{"class":2221},[2078,9045,9046],{"class":2080,"line":2806},[2078,9047,2256],{"class":2221},[2078,9049,9050,9052],{"class":2080,"line":2829},[2078,9051,2262],{"class":2221},[2078,9053,2265],{"class":2217},[2280,9055,9056,9059],{},[2172,9057,9058],{},"Update any CI/build scripts"," that run TypeScript checking to ensure they use the new project references approach.",[2048,9061,9062],{},"The new configuration provides better type safety and IntelliSense for projects that opt in, while maintaining full backward compatibility for existing setups.",[2043,9064,9066],{"id":9065},"removal-of-experimental-features","Removal of Experimental Features",[2048,9068,2345,9069,4655],{},[2172,9070,2348],{},[2351,9072,2354],{"id":9073},"what-changed-24",[2048,9075,9076],{},"Four experimental features are no longer configurable in Nuxt 4:",[2277,9078,9079,9087,9095,9103,9110],{},[2280,9080,9081,6951,9084,9086],{},[2060,9082,9083],{},"experimental.treeshakeClientOnly",[2060,9085,6390],{}," (default since v3.0)",[2280,9088,9089,6951,9092,9094],{},[2060,9090,9091],{},"experimental.configSchema",[2060,9093,6390],{}," (default since v3.3)",[2280,9096,9097,6951,9100,9102],{},[2060,9098,9099],{},"experimental.polyfillVueUseHead",[2060,9101,6397],{}," (default since v3.4)",[2280,9104,9105,6951,9108,9102],{},[2060,9106,9107],{},"experimental.respectNoSSRHeader",[2060,9109,6397],{},[2280,9111,9112,9115,9116,3589],{},[2060,9113,9114],{},"vite.devBundler"," is no longer configurable - it will use ",[2060,9117,9118],{},"vite-node",[2351,9120,2454],{"id":9121},"reasons-for-change-21",[2048,9123,9124],{},"These options have been set to their current values for some time and we do not have a reason to believe that they need to remain configurable.",[2351,9126,2475],{"id":9127},"migration-steps-24",[2277,9129,9130,9141],{},[2280,9131,9132,9135,9136],{},[2060,9133,9134],{},"polyfillVueUseHead"," is implementable in user-land with ",[2052,9137,9140],{"href":9138,"rel":9139},"https://github.com/nuxt/nuxt/blob/f209158352b09d1986aa320e29ff36353b91c358/packages/nuxt/src/head/runtime/plugins/vueuse-head-polyfill.ts#L10-L11",[2056],"this plugin",[2280,9142,9143,9146,9147],{},[2060,9144,9145],{},"respectNoSSRHeader","is implementable in user-land with ",[2052,9148,9151],{"href":9149,"rel":9150},"https://github.com/nuxt/nuxt/blob/c660b39447f0d5b8790c0826092638d321cd6821/packages/nuxt/src/core/runtime/nitro/no-ssr.ts#L8-L9",[2056],"server middleware",[2043,9153,9155,9156,9159],{"id":9154},"removal-of-top-level-generate-configuration","Removal of Top-Level ",[2060,9157,9158],{},"generate"," Configuration",[2048,9161,2345,9162,4655],{},[2172,9163,2348],{},[2351,9165,2354],{"id":9166},"what-changed-25",[2048,9168,9169,9170,9172],{},"The top-level ",[2060,9171,9158],{}," configuration option is no longer available in Nuxt 4. This includes all of its properties:",[2277,9174,9175,9181],{},[2280,9176,9177,9180],{},[2060,9178,9179],{},"generate.exclude"," - for excluding routes from prerendering",[2280,9182,9183,9186],{},[2060,9184,9185],{},"generate.routes"," - for specifying routes to prerender",[2351,9188,2454],{"id":9189},"reasons-for-change-22",[2048,9191,9192,9193,9195,9196,9199],{},"The top level ",[2060,9194,9158],{}," configuration was a holdover from Nuxt 2. We've supported ",[2060,9197,9198],{},"nitro.prerender"," for a while now, and it is the preferred way to configure prerendering in Nuxt 3+.",[2351,9201,2475],{"id":9202},"migration-steps-25",[2048,9204,9205,9206,9208,9209,9211],{},"Replace ",[2060,9207,9158],{}," configuration with the corresponding ",[2060,9210,9198],{}," options:",[2068,9213,9215],{"className":4496,"code":9214,"language":4498,"meta":2074,"style":2074},"export default defineNuxtConfig({\n- generate: {\n-   exclude: ['/admin', '/private'],\n-   routes: ['/sitemap.xml', '/robots.txt']\n- }\n+ nitro: {\n+   prerender: {\n+     ignore: ['/admin', '/private'],\n+     routes: ['/sitemap.xml', '/robots.txt']\n+   }\n+ }\n})\n",[2060,9216,9217,9222,9229,9236,9243,9249,9256,9263,9270,9277,9284,9290],{"__ignoreMap":2074},[2078,9218,9219],{"class":2080,"line":2081},[2078,9220,9221],{"class":2217},"export default defineNuxtConfig({\n",[2078,9223,9224,9226],{"class":2080,"line":2225},[2078,9225,4510],{"class":2221},[2078,9227,9228],{"class":2228}," generate: {\n",[2078,9230,9231,9233],{"class":2080,"line":2238},[2078,9232,4510],{"class":2221},[2078,9234,9235],{"class":2228},"   exclude: ['/admin', '/private'],\n",[2078,9237,9238,9240],{"class":2080,"line":2253},[2078,9239,4510],{"class":2221},[2078,9241,9242],{"class":2228},"   routes: ['/sitemap.xml', '/robots.txt']\n",[2078,9244,9245,9247],{"class":2080,"line":2259},[2078,9246,4510],{"class":2221},[2078,9248,8808],{"class":2228},[2078,9250,9251,9253],{"class":2080,"line":2584},[2078,9252,4531],{"class":2221},[2078,9254,9255],{"class":2088}," nitro: {\n",[2078,9257,9258,9260],{"class":2080,"line":2628},[2078,9259,4531],{"class":2221},[2078,9261,9262],{"class":2088},"   prerender: {\n",[2078,9264,9265,9267],{"class":2080,"line":2644},[2078,9266,4531],{"class":2221},[2078,9268,9269],{"class":2088},"     ignore: ['/admin', '/private'],\n",[2078,9271,9272,9274],{"class":2080,"line":2672},[2078,9273,4531],{"class":2221},[2078,9275,9276],{"class":2088},"     routes: ['/sitemap.xml', '/robots.txt']\n",[2078,9278,9279,9281],{"class":2080,"line":2678},[2078,9280,4531],{"class":2221},[2078,9282,9283],{"class":2088},"   }\n",[2078,9285,9286,9288],{"class":2080,"line":2685},[2078,9287,4531],{"class":2221},[2078,9289,8808],{"class":2088},[2078,9291,9292],{"class":2080,"line":2690},[2078,9293,4585],{"class":2217},[3287,9295,9297],{"to":9296},"https://nitro.build/config#prerender",[2048,9298,9299],{},"Read more about Nitro's prerender configuration options.",[2043,9301,9303],{"id":9302},"normalized-page-component-names","Normalized Page Component Names",[2048,9305,2345,9306,4655],{},[2172,9307,2348],{},[2351,9309,2354],{"id":9310},"what-changed-26",[2048,9312,6705,9313,9315,9316,9318,9319,9322,9323,9326,9327,8398,9330,2186],{},[2060,9314,2192],{}," is set to ",[2060,9317,2274],{}," (or ",[2060,9320,9321],{},"experimental.normalizePageNames"," is enabled), page component names match their route names instead of using the filename. For example, ",[2060,9324,9325],{},"pages/foo/index.vue"," will have the component name ",[2060,9328,9329],{},"foo",[2060,9331,7626],{},[2351,9333,2454],{"id":9334},"reasons-for-change-23",[2048,9336,9337,9338,2406,9340,9343,9344,9346,9347,2958,9349,6659,9351,9354,9355,9358],{},"Previously, Vue assigned component names based on the filename. This meant multiple pages like ",[2060,9339,9325],{},[2060,9341,9342],{},"pages/bar/index.vue"," would both have the component name ",[2060,9345,7626],{},". This made ",[2060,9348,2303],{},[2060,9350,2537],{},[2060,9352,9353],{},"exclude"," filters unreliable and required manually adding ",[2060,9356,9357],{},"defineOptions({ name: '...' })"," to each page.",[2351,9360,2475],{"id":9361},"migration-steps-26",[2048,9363,9364,9365,9367,9368,6659,9370,9372],{},"If you rely on the current component names (e.g. in ",[2060,9366,2303],{}," ",[2060,9369,2537],{},[2060,9371,9353],{}," lists), update them to use route names instead of filenames.",[2068,9374,9376],{"className":4496,"code":9375,"language":4498,"meta":2074,"style":2074},"\u003Ctemplate>\n  \u003CNuxtPage :keepalive=\"{\n-   include: ['index']\n+   include: ['foo']\n  }\" />\n\u003C/template>\n",[2060,9377,9378,9383,9388,9395,9402,9407],{"__ignoreMap":2074},[2078,9379,9380],{"class":2080,"line":2081},[2078,9381,9382],{"class":2217},"\u003Ctemplate>\n",[2078,9384,9385],{"class":2080,"line":2225},[2078,9386,9387],{"class":2217},"  \u003CNuxtPage :keepalive=\"{\n",[2078,9389,9390,9392],{"class":2080,"line":2238},[2078,9391,4510],{"class":2221},[2078,9393,9394],{"class":2228},"   include: ['index']\n",[2078,9396,9397,9399],{"class":2080,"line":2253},[2078,9398,4531],{"class":2221},[2078,9400,9401],{"class":2088},"   include: ['foo']\n",[2078,9403,9404],{"class":2080,"line":2259},[2078,9405,9406],{"class":2217},"  }\" />\n",[2078,9408,9409],{"class":2080,"line":2584},[2078,9410,9411],{"class":2217},"\u003C/template>\n",[2048,9413,9414],{},"To disable this behavior:",[2068,9416,9418],{"className":2196,"code":9417,"filename":233,"language":2198,"meta":2199,"style":2074},"export default defineNuxtConfig({\n  experimental: {\n    normalizePageNames: false,\n  },\n})\n",[2060,9419,9420,9432,9440,9451,9455],{"__ignoreMap":2074},[2078,9421,9422,9424,9426,9428,9430],{"class":2080,"line":2081},[2078,9423,2207],{"class":2206},[2078,9425,2210],{"class":2206},[2078,9427,2214],{"class":2213},[2078,9429,2218],{"class":2217},[2078,9431,2222],{"class":2221},[2078,9433,9434,9436,9438],{"class":2080,"line":2225},[2078,9435,4610],{"class":2228},[2078,9437,2232],{"class":2221},[2078,9439,2235],{"class":2221},[2078,9441,9442,9445,9447,9449],{"class":2080,"line":2238},[2078,9443,9444],{"class":2228},"    normalizePageNames",[2078,9446,2232],{"class":2221},[2078,9448,2571],{"class":2570},[2078,9450,2250],{"class":2221},[2078,9452,9453],{"class":2080,"line":2253},[2078,9454,2256],{"class":2221},[2078,9456,9457,9459],{"class":2080,"line":2259},[2078,9458,2262],{"class":2221},[2078,9460,2265],{"class":2217},[2038,9462,9464],{"id":9463},"nuxt-2-vs-nuxt-3","Nuxt 2 vs. Nuxt 3+",[2048,9466,9467],{},"In the table below, there is a quick comparison between 3 versions of Nuxt:",[9469,9470,9471,9490],"table",{},[9472,9473,9474],"thead",{},[9475,9476,9477,9481,9484,9487],"tr",{},[9478,9479,9480],"th",{},"Feature / Version",[9478,9482,9483],{},"Nuxt 2",[9478,9485,9486],{},"Nuxt Bridge",[9478,9488,9489],{},"Nuxt 3+",[9491,9492,9493,9507,9519,9532,9545,9558,9570,9581,9592,9603,9617,9627,9639,9650,9663],"tbody",{},[9475,9494,9495,9499,9502,9504],{},[9496,9497,9498],"td",{},"Vue",[9496,9500,9501],{},"2",[9496,9503,9501],{},[9496,9505,9506],{},"3",[9475,9508,9509,9512,9515,9517],{},[9496,9510,9511],{},"Stability",[9496,9513,9514],{},"😊 Stable",[9496,9516,9514],{},[9496,9518,9514],{},[9475,9520,9521,9523,9526,9529],{},[9496,9522,3835],{},[9496,9524,9525],{},"🏎 Fast",[9496,9527,9528],{},"✈️ Faster",[9496,9530,9531],{},"🚀 Fastest",[9475,9533,9534,9537,9540,9543],{},[9496,9535,9536],{},"Nitro Engine",[9496,9538,9539],{},"❌",[9496,9541,9542],{},"✅",[9496,9544,9542],{},[9475,9546,9547,9550,9553,9556],{},[9496,9548,9549],{},"ESM support",[9496,9551,9552],{},"🌙 Partial",[9496,9554,9555],{},"👍 Better",[9496,9557,9542],{},[9475,9559,9560,9562,9565,9568],{},[9496,9561,280],{},[9496,9563,9564],{},"☑️ Opt-in",[9496,9566,9567],{},"🚧 Partial",[9496,9569,9542],{},[9475,9571,9572,9575,9577,9579],{},[9496,9573,9574],{},"Composition API",[9496,9576,9539],{},[9496,9578,9567],{},[9496,9580,9542],{},[9475,9582,9583,9586,9588,9590],{},[9496,9584,9585],{},"Options API",[9496,9587,9542],{},[9496,9589,9542],{},[9496,9591,9542],{},[9475,9593,9594,9597,9599,9601],{},[9496,9595,9596],{},"Components Auto Import",[9496,9598,9542],{},[9496,9600,9542],{},[9496,9602,9542],{},[9475,9604,9605,9611,9613,9615],{},[9496,9606,9607,9610],{},[2060,9608,9609],{},"\u003Cscript setup>"," syntax",[9496,9612,9539],{},[9496,9614,9567],{},[9496,9616,9542],{},[9475,9618,9619,9621,9623,9625],{},[9496,9620,922],{},[9496,9622,9539],{},[9496,9624,9542],{},[9496,9626,9542],{},[9475,9628,9629,9632,9635,9637],{},[9496,9630,9631],{},"webpack",[9496,9633,9634],{},"4",[9496,9636,9634],{},[9496,9638,2274],{},[9475,9640,9641,9643,9646,9648],{},[9496,9642,1075],{},[9496,9644,9645],{},"⚠️ Partial",[9496,9647,9567],{},[9496,9649,9542],{},[9475,9651,9652,9655,9658,9661],{},[9496,9653,9654],{},"Nuxt CLI",[9496,9656,9657],{},"❌ Old",[9496,9659,9660],{},"✅ nuxt",[9496,9662,9660],{},[9475,9664,9665,9668,9670,9672],{},[9496,9666,9667],{},"Static sites",[9496,9669,9542],{},[9496,9671,9542],{},[9496,9673,9542],{},[2038,9675,9677],{"id":9676},"nuxt-2-to-nuxt-3","Nuxt 2 to Nuxt 3+",[2048,9679,9680],{},"The migration guide provides a step-by-step comparison of Nuxt 2 features to Nuxt 3+ features and guidance to adapt your current application.",[3287,9682,9683],{"to":1907},[2048,9684,9685,9686,2186],{},"Check out the ",[2172,9687,9688],{},"guide to migrating from Nuxt 2 to Nuxt 3",[2038,9690,9692],{"id":9691},"nuxt-2-to-nuxt-bridge","Nuxt 2 to Nuxt Bridge",[2048,9694,9695],{},"If you prefer to progressively migrate your Nuxt 2 application to Nuxt 3, you can use Nuxt Bridge. Nuxt Bridge is a compatibility layer that allows you to use Nuxt 3+ features in Nuxt 2 with an opt-in mechanism.",[3287,9697,9698],{"to":1873},[2048,9699,9700],{},[2172,9701,9702],{},"Migrate from Nuxt 2 to Nuxt Bridge",[9704,9705,9706],"style",{},"html pre.shiki code .s52Pk, html code.shiki .s52Pk{--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B}html pre.shiki code .sGFVr, html code.shiki .sGFVr{--shiki-light:#91B859;--shiki-default:#91B859;--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 .s8R28, html code.shiki .s8R28{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s3cPz, html code.shiki .s3cPz{--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF}html pre.shiki code .sZSNi, html code.shiki .sZSNi{--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8}html pre.shiki code .sDfIl, html code.shiki .sDfIl{--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF}html pre.shiki code .sRlkE, html code.shiki .sRlkE{--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178}html pre.shiki code .sYRBq, html code.shiki .sYRBq{--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C}html pre.shiki code .sWuyu, html code.shiki .sWuyu{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s1nJG, html code.shiki .s1nJG{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .smZ93, html code.shiki .smZ93{--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA}html pre.shiki code .sbKd-, html code.shiki .sbKd-{--shiki-light:#FF5370;--shiki-default:#FF5370;--shiki-dark:#FF9CAC}",{"title":2074,"searchDepth":2225,"depth":2225,"links":9708},[9709,9713,9717,9758,9759,9760],{"id":2040,"depth":2225,"text":2041,"children":9710},[9711,9712],{"id":2045,"depth":2238,"text":2046},{"id":2156,"depth":2238,"text":403},{"id":2166,"depth":2225,"text":2167,"children":9714},[9715,9716],{"id":2178,"depth":2238,"text":2179},{"id":2341,"depth":2238,"text":2342},{"id":3295,"depth":2225,"text":3296,"children":9718},[9719,9720,9721,9722,9723,9724,9725,9726,9727,9729,9730,9731,9732,9734,9736,9738,9740,9742,9744,9746,9748,9750,9751,9752,9753,9754,9755,9757],{"id":3385,"depth":2238,"text":3386},{"id":3524,"depth":2238,"text":3525},{"id":4085,"depth":2238,"text":4086},{"id":4649,"depth":2238,"text":4650},{"id":4943,"depth":2238,"text":4944},{"id":5021,"depth":2238,"text":5022},{"id":5152,"depth":2238,"text":5153},{"id":5477,"depth":2238,"text":5478},{"id":5662,"depth":2238,"text":9728},"Parsed error.data",{"id":5750,"depth":2238,"text":5751},{"id":5832,"depth":2238,"text":5833},{"id":5985,"depth":2238,"text":5986},{"id":6269,"depth":2238,"text":9733},"Default data and error values in useAsyncData and useFetch",{"id":6351,"depth":2238,"text":9735},"Removal of deprecated boolean values for dedupe option when calling refresh in useAsyncData and useFetch",{"id":6621,"depth":2238,"text":9737},"Respect defaults when clearing data in useAsyncData and useFetch",{"id":6665,"depth":2238,"text":9739},"Respect defaults when clearing useState",{"id":6904,"depth":2238,"text":9741},"Alignment of pending value in useAsyncData and useFetch",{"id":7122,"depth":2238,"text":9743},"Key Change Behavior in useAsyncData and useFetch",{"id":7287,"depth":2238,"text":9745},"Shallow Data Reactivity in useAsyncData and useFetch",{"id":7456,"depth":2238,"text":9747},"Absolute Watch Paths in builder:watch",{"id":7549,"depth":2238,"text":9749},"Removal of window.__NUXT__ object",{"id":7609,"depth":2238,"text":7610},{"id":7783,"depth":2238,"text":7784},{"id":8381,"depth":2238,"text":8382},{"id":8509,"depth":2238,"text":8510},{"id":9065,"depth":2238,"text":9066},{"id":9154,"depth":2238,"text":9756},"Removal of Top-Level generate Configuration",{"id":9302,"depth":2238,"text":9303},{"id":9463,"depth":2225,"text":9464},{"id":9676,"depth":2225,"text":9677},{"id":9691,"depth":2225,"text":9692},"Learn how to upgrade to the latest Nuxt version.","md",{},{"icon":107},{"title":104,"description":9761},"2-v2aVPy1wzo97h5Te5seVhfglSJCOjhVEzKUUiiZjI",[9768,9770],{"title":99,"path":1177,"stem":1178,"description":9769,"icon":102,"children":-1},"How to test your Nuxt application.",{"title":117,"path":1187,"stem":1188,"description":9771,"icon":120,"children":-1},"Nuxt uses the .nuxt/ directory in development to generate your Vue application.",1772100178041]