[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fGCo9l1hMtNdUiA6QzdUX5X3kLqaWcC5t2kdz4LrvCvc":3,"versions":2975,"module-api-shield":2980},[4,1124,1955,2777],{"title":5,"titleTemplate":6,"icon":7,"path":8,"stem":9,"children":10,"page":108},"Docs",null,"i-lucide-book-marked","\u002Fdocs\u002F3.x","docs\u002F3.x",[11,109,246,430,911,1003,1040,1082],{"title":12,"titleTemplate":13,"icon":14,"path":15,"stem":16,"children":17,"page":108},"Get Started","%s · Get Started with Nuxt","i-lucide-rocket","\u002Fdocs\u002F3.x\u002Fgetting-started","docs\u002F3.x\u002F1.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","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fintroduction","docs\u002F3.x\u002F1.getting-started\u002F01.introduction","i-lucide-info",{"title":24,"path":25,"stem":26,"titleTemplate":6,"icon":27},"Installation","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Finstallation","docs\u002F3.x\u002F1.getting-started\u002F02.installation","i-lucide-play",{"title":29,"path":30,"stem":31,"titleTemplate":6,"icon":32},"Configuration","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fconfiguration","docs\u002F3.x\u002F1.getting-started\u002F03.configuration","i-lucide-cog",{"title":34,"path":35,"stem":36,"titleTemplate":6,"icon":37},"Views","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fviews","docs\u002F3.x\u002F1.getting-started\u002F04.views","i-lucide-panels-top-left",{"title":39,"path":40,"stem":41,"titleTemplate":6,"icon":42},"Assets","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fassets","docs\u002F3.x\u002F1.getting-started\u002F05.assets","i-lucide-image",{"title":44,"path":45,"stem":46,"titleTemplate":6,"icon":47},"Styling","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fstyling","docs\u002F3.x\u002F1.getting-started\u002F06.styling","i-lucide-palette",{"title":49,"path":50,"stem":51,"titleTemplate":6,"icon":52},"Routing","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Frouting","docs\u002F3.x\u002F1.getting-started\u002F07.routing","i-lucide-milestone",{"title":54,"path":55,"stem":56,"titleTemplate":6,"icon":57},"SEO and Meta","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fseo-meta","docs\u002F3.x\u002F1.getting-started\u002F08.seo-meta","i-lucide-file-search",{"title":59,"path":60,"stem":61,"titleTemplate":6,"icon":62},"Transitions","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Ftransitions","docs\u002F3.x\u002F1.getting-started\u002F09.transitions","i-lucide-toggle-right",{"title":64,"path":65,"stem":66,"titleTemplate":6,"icon":67},"Data Fetching","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fdata-fetching","docs\u002F3.x\u002F1.getting-started\u002F10.data-fetching","i-lucide-cable",{"title":69,"path":70,"stem":71,"titleTemplate":6,"icon":72},"State Management","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fstate-management","docs\u002F3.x\u002F1.getting-started\u002F11.state-management","i-lucide-database",{"title":74,"path":75,"stem":76,"titleTemplate":6,"icon":77},"Error Handling","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Ferror-handling","docs\u002F3.x\u002F1.getting-started\u002F12.error-handling","i-lucide-bug-off",{"title":79,"path":80,"stem":81,"titleTemplate":6,"icon":82},"Server","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fserver","docs\u002F3.x\u002F1.getting-started\u002F13.server","i-lucide-pc-case",{"title":84,"path":85,"stem":86,"titleTemplate":6,"icon":87},"Layers","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Flayers","docs\u002F3.x\u002F1.getting-started\u002F14.layers","i-lucide-layers",{"title":89,"path":90,"stem":91,"titleTemplate":6,"icon":92},"Prerendering","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fprerendering","docs\u002F3.x\u002F1.getting-started\u002F15.prerendering","i-lucide-file-code-2",{"title":94,"path":95,"stem":96,"titleTemplate":6,"icon":97},"Deployment","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fdeployment","docs\u002F3.x\u002F1.getting-started\u002F16.deployment","i-lucide-cloud",{"title":99,"path":100,"stem":101,"titleTemplate":6,"icon":102},"Testing","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Ftesting","docs\u002F3.x\u002F1.getting-started\u002F17.testing","i-lucide-circle-check",{"title":104,"path":105,"stem":106,"titleTemplate":6,"icon":107},"Upgrade Guide","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fupgrade","docs\u002F3.x\u002F1.getting-started\u002F18.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","\u002Fdocs\u002F3.x\u002Fdirectory-structure","docs\u002F3.x\u002F2.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","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxt","docs\u002F3.x\u002F2.directory-structure\u002F0.nuxt","i-vscode-icons-folder-type-temp",{"title":122,"path":123,"stem":124,"titleTemplate":6,"icon":125},".output","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Foutput","docs\u002F3.x\u002F2.directory-structure\u002F0.output","i-vscode-icons-folder-type-package",{"title":127,"path":128,"stem":129,"titleTemplate":6,"icon":130},"assets","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fassets","docs\u002F3.x\u002F2.directory-structure\u002F1.assets","i-vscode-icons-folder-type-asset",{"title":132,"path":133,"stem":134,"titleTemplate":6,"icon":135},"components","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fcomponents","docs\u002F3.x\u002F2.directory-structure\u002F1.components","i-vscode-icons-folder-type-component",{"title":137,"path":138,"stem":139,"titleTemplate":6,"icon":140},"composables","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fcomposables","docs\u002F3.x\u002F2.directory-structure\u002F1.composables","i-vscode-icons-folder-type-src",{"title":142,"path":143,"stem":144,"titleTemplate":6,"icon":145},"content","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fcontent","docs\u002F3.x\u002F2.directory-structure\u002F1.content","i-vscode-icons-folder-type-log",{"title":147,"path":148,"stem":149,"titleTemplate":6,"icon":150},"layers","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Flayers","docs\u002F3.x\u002F2.directory-structure\u002F1.layers","i-vscode-icons-folder-type-nuxt",{"title":152,"path":153,"stem":154,"titleTemplate":6,"icon":155},"layouts","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Flayouts","docs\u002F3.x\u002F2.directory-structure\u002F1.layouts","i-vscode-icons-folder-type-view",{"title":157,"path":158,"stem":159,"titleTemplate":6,"icon":160},"middleware","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fmiddleware","docs\u002F3.x\u002F2.directory-structure\u002F1.middleware","i-vscode-icons-folder-type-middleware",{"title":162,"path":163,"stem":164,"titleTemplate":6,"icon":150},"modules","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fmodules","docs\u002F3.x\u002F2.directory-structure\u002F1.modules",{"title":166,"path":167,"stem":168,"titleTemplate":6,"icon":169},"node_modules","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnode_modules","docs\u002F3.x\u002F2.directory-structure\u002F1.node_modules","i-vscode-icons-folder-type-node",{"title":171,"path":172,"stem":173,"titleTemplate":6,"icon":155},"pages","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fpages","docs\u002F3.x\u002F2.directory-structure\u002F1.pages",{"title":175,"path":176,"stem":177,"titleTemplate":6,"icon":178},"plugins","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fplugins","docs\u002F3.x\u002F2.directory-structure\u002F1.plugins","i-vscode-icons-folder-type-plugin",{"title":180,"path":181,"stem":182,"titleTemplate":6,"icon":183},"public","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fpublic","docs\u002F3.x\u002F2.directory-structure\u002F1.public","i-vscode-icons-folder-type-public",{"title":185,"path":186,"stem":187,"titleTemplate":6,"icon":188},"server","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fserver","docs\u002F3.x\u002F2.directory-structure\u002F1.server","i-vscode-icons-folder-type-server",{"title":190,"path":191,"stem":192,"titleTemplate":6,"icon":193},"shared","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fshared","docs\u002F3.x\u002F2.directory-structure\u002F1.shared","i-vscode-icons-folder-type-shared",{"title":195,"path":196,"stem":197,"titleTemplate":6,"icon":198},"utils","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Futils","docs\u002F3.x\u002F2.directory-structure\u002F1.utils","i-vscode-icons-folder-type-tools",{"title":200,"path":201,"stem":202,"titleTemplate":6,"icon":203},".env","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fenv","docs\u002F3.x\u002F2.directory-structure\u002F2.env","i-vscode-icons-file-type-dotenv",{"title":205,"path":206,"stem":207,"titleTemplate":6,"icon":208},".gitignore","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fgitignore","docs\u002F3.x\u002F2.directory-structure\u002F2.gitignore","i-vscode-icons-file-type-git",{"title":210,"path":211,"stem":212,"titleTemplate":6,"icon":213},".nuxtignore","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxtignore","docs\u002F3.x\u002F2.directory-structure\u002F2.nuxtignore","i-vscode-icons-file-type-nuxt",{"title":215,"path":216,"stem":217,"titleTemplate":6,"icon":213},".nuxtrc","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxtrc","docs\u002F3.x\u002F2.directory-structure\u002F2.nuxtrc",{"title":219,"path":220,"stem":221,"titleTemplate":6,"icon":222},"app.vue","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fapp","docs\u002F3.x\u002F2.directory-structure\u002F3.app","i-vscode-icons-file-type-vue",{"title":224,"path":225,"stem":226,"titleTemplate":6,"icon":227},"app.config.ts","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fapp-config","docs\u002F3.x\u002F2.directory-structure\u002F3.app-config","i-vscode-icons-file-type-light-config",{"title":229,"path":230,"stem":231,"titleTemplate":6,"icon":222},"error.vue","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Ferror","docs\u002F3.x\u002F2.directory-structure\u002F3.error",{"title":233,"path":234,"stem":235,"titleTemplate":6,"icon":213},"nuxt.config.ts","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxt-config","docs\u002F3.x\u002F2.directory-structure\u002F3.nuxt-config",{"title":237,"path":238,"stem":239,"titleTemplate":6,"icon":240},"package.json","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fpackage","docs\u002F3.x\u002F2.directory-structure\u002F3.package","i-vscode-icons-file-type-npm",{"title":242,"path":243,"stem":244,"titleTemplate":6,"icon":245},"tsconfig.json","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Ftsconfig","docs\u002F3.x\u002F2.directory-structure\u002F3.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","\u002Fdocs\u002F3.x\u002Fguide","docs\u002F3.x\u002F3.guide",[252,287,306,321,360,383],{"title":253,"titleTemplate":254,"icon":255,"path":256,"stem":257,"children":258,"page":108},"Key Concepts","%s · Nuxt Concepts","i-lucide-medal","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts","docs\u002F3.x\u002F3.guide\u002F1.concepts",[259,263,267,271,275,279,283],{"title":260,"path":261,"stem":262,"titleTemplate":6},"Rendering Modes","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Frendering","docs\u002F3.x\u002F3.guide\u002F1.concepts\u002F1.rendering",{"title":264,"path":265,"stem":266,"titleTemplate":6},"Nuxt Lifecycle","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle","docs\u002F3.x\u002F3.guide\u002F1.concepts\u002F2.nuxt-lifecycle",{"title":268,"path":269,"stem":270,"titleTemplate":6},"Auto-imports","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fauto-imports","docs\u002F3.x\u002F3.guide\u002F1.concepts\u002F3.auto-imports",{"title":272,"path":273,"stem":274,"titleTemplate":6},"Server Engine","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fserver-engine","docs\u002F3.x\u002F3.guide\u002F1.concepts\u002F4.server-engine",{"title":276,"path":277,"stem":278,"titleTemplate":6},"Modules","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fmodules","docs\u002F3.x\u002F3.guide\u002F1.concepts\u002F5.modules",{"title":280,"path":281,"stem":282,"titleTemplate":6},"TypeScript","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Ftypescript","docs\u002F3.x\u002F3.guide\u002F1.concepts\u002F8.typescript",{"title":284,"path":285,"stem":286,"titleTemplate":6},"Code Style","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fcode-style","docs\u002F3.x\u002F3.guide\u002F1.concepts\u002F9.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","\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices","docs\u002F3.x\u002F3.guide\u002F2.best-practices",[294,298,302],{"title":295,"path":296,"stem":297,"titleTemplate":6},"Nuxt and hydration","\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices\u002Fhydration","docs\u002F3.x\u002F3.guide\u002F2.best-practices\u002Fhydration",{"title":299,"path":300,"stem":301,"titleTemplate":6},"Nuxt Performance","\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices\u002Fperformance","docs\u002F3.x\u002F3.guide\u002F2.best-practices\u002Fperformance",{"title":303,"path":304,"stem":305,"titleTemplate":6},"Nuxt Plugins","\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices\u002Fplugins","docs\u002F3.x\u002F3.guide\u002F2.best-practices\u002Fplugins",{"title":307,"titleTemplate":308,"icon":309,"path":310,"stem":311,"children":312,"page":108},"Working with AI","Working with AI: %s","i-lucide-bot","\u002Fdocs\u002F3.x\u002Fguide\u002Fai","docs\u002F3.x\u002F3.guide\u002F3.ai",[313,317],{"title":314,"path":315,"stem":316,"titleTemplate":6},"MCP Server","\u002Fdocs\u002F3.x\u002Fguide\u002Fai\u002Fmcp","docs\u002F3.x\u002F3.guide\u002F3.ai\u002F1.mcp",{"title":318,"path":319,"stem":320,"titleTemplate":6},"LLMs.txt","\u002Fdocs\u002F3.x\u002Fguide\u002Fai\u002Fllms-txt","docs\u002F3.x\u002F3.guide\u002F3.ai\u002F2.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","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules","docs\u002F3.x\u002F3.guide\u002F4.modules",[328,332,336,340,344,348,352,356],{"title":329,"path":330,"stem":331,"titleTemplate":6},"Create Your First Module","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fgetting-started","docs\u002F3.x\u002F3.guide\u002F4.modules\u002F1.getting-started",{"title":333,"path":334,"stem":335,"titleTemplate":6},"Understand Module Structure","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy","docs\u002F3.x\u002F3.guide\u002F4.modules\u002F2.module-anatomy",{"title":337,"path":338,"stem":339,"titleTemplate":6},"Add Plugins, Components & More","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Frecipes-basics","docs\u002F3.x\u002F3.guide\u002F4.modules\u002F3.recipes-basics",{"title":341,"path":342,"stem":343,"titleTemplate":6},"Module Dependencies","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies","docs\u002F3.x\u002F3.guide\u002F4.modules\u002F4.module-dependencies",{"title":345,"path":346,"stem":347,"titleTemplate":6},"Use Hooks & Extend Types","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Frecipes-advanced","docs\u002F3.x\u002F3.guide\u002F4.modules\u002F5.recipes-advanced",{"title":349,"path":350,"stem":351,"titleTemplate":6},"Test Your Module","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Ftesting","docs\u002F3.x\u002F3.guide\u002F4.modules\u002F6.testing",{"title":353,"path":354,"stem":355,"titleTemplate":6},"Follow Best Practices","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fbest-practices","docs\u002F3.x\u002F3.guide\u002F4.modules\u002F7.best-practices",{"title":357,"path":358,"stem":359,"titleTemplate":6},"Publish & Share Your Module","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fecosystem","docs\u002F3.x\u002F3.guide\u002F4.modules\u002F8.ecosystem",{"title":361,"titleTemplate":362,"icon":363,"path":364,"stem":365,"children":366,"page":108},"Recipes","%s · Recipes","i-lucide-cooking-pot","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes","docs\u002F3.x\u002F3.guide\u002F5.recipes",[367,371,375,379],{"title":368,"path":369,"stem":370,"titleTemplate":6},"Custom Routing","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fcustom-routing","docs\u002F3.x\u002F3.guide\u002F5.recipes\u002F1.custom-routing",{"title":372,"path":373,"stem":374,"titleTemplate":6},"Vite Plugins","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fvite-plugin","docs\u002F3.x\u002F3.guide\u002F5.recipes\u002F2.vite-plugin",{"title":376,"path":377,"stem":378,"titleTemplate":6},"Custom useFetch","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch","docs\u002F3.x\u002F3.guide\u002F5.recipes\u002F3.custom-usefetch",{"title":380,"path":381,"stem":382,"titleTemplate":6},"Sessions and Authentication","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fsessions-and-authentication","docs\u002F3.x\u002F3.guide\u002F5.recipes\u002F4.sessions-and-authentication",{"title":384,"titleTemplate":385,"icon":386,"path":387,"stem":388,"children":389,"page":108},"Going Further","%s · Nuxt Advanced","i-lucide-star","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further","docs\u002F3.x\u002F3.guide\u002F6.going-further",[390,394,398,402,406,410,414,418,422,426],{"title":391,"path":392,"stem":393,"titleTemplate":6},"Custom Events","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fevents","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F1.events",{"title":395,"path":396,"stem":397,"titleTemplate":6},"Experimental Features","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F1.experimental-features",{"title":399,"path":400,"stem":401,"titleTemplate":6},"Features","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Ffeatures","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F1.features",{"title":403,"path":404,"stem":405,"titleTemplate":6},"Runtime Config","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fruntime-config","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F10.runtime-config",{"title":407,"path":408,"stem":409,"titleTemplate":6},"Nightly Release Channel","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F11.nightly-release-channel",{"title":411,"path":412,"stem":413,"titleTemplate":6},"Lifecycle Hooks","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fhooks","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F2.hooks",{"title":415,"path":416,"stem":417,"titleTemplate":6},"Nuxt Kit","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fkit","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F4.kit",{"title":419,"path":420,"stem":421,"titleTemplate":6},"NuxtApp","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F6.nuxt-app",{"title":423,"path":424,"stem":425,"titleTemplate":6},"Authoring Nuxt Layers","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Flayers","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F7.layers",{"title":427,"path":428,"stem":429,"titleTemplate":6},"Debugging","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fdebugging","docs\u002F3.x\u002F3.guide\u002F6.going-further\u002F9.debugging",{"title":431,"titleTemplate":432,"icon":433,"path":434,"stem":435,"children":436,"page":108},"API","%s · Nuxt API","i-lucide-code-xml","\u002Fdocs\u002F3.x\u002Fapi","docs\u002F3.x\u002F4.api",[437,503,626,749,820,893,906],{"title":438,"titleTemplate":439,"icon":324,"path":440,"stem":441,"children":442,"page":108},"Components","%s · Nuxt Components","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents","docs\u002F3.x\u002F4.api\u002F1.components",[443,447,451,455,459,463,467,471,475,479,483,487,491,495,499],{"title":444,"path":445,"stem":446,"titleTemplate":6},"\u003CClientOnly>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fclient-only","docs\u002F3.x\u002F4.api\u002F1.components\u002F1.client-only",{"title":448,"path":449,"stem":450,"titleTemplate":6},"\u003CDevOnly>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fdev-only","docs\u002F3.x\u002F4.api\u002F1.components\u002F1.dev-only",{"title":452,"path":453,"stem":454,"titleTemplate":6},"\u003CNuxtClientFallback>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback","docs\u002F3.x\u002F4.api\u002F1.components\u002F1.nuxt-client-fallback",{"title":456,"path":457,"stem":458,"titleTemplate":6},"\u003CNuxtPicture>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture","docs\u002F3.x\u002F4.api\u002F1.components\u002F10.nuxt-picture",{"title":460,"path":461,"stem":462,"titleTemplate":6},"\u003CTeleport>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fteleports","docs\u002F3.x\u002F4.api\u002F1.components\u002F11.teleports",{"title":464,"path":465,"stem":466,"titleTemplate":6},"\u003CNuxtRouteAnnouncer>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer","docs\u002F3.x\u002F4.api\u002F1.components\u002F12.nuxt-route-announcer",{"title":468,"path":469,"stem":470,"titleTemplate":6},"\u003CNuxtTime>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-time","docs\u002F3.x\u002F4.api\u002F1.components\u002F13.nuxt-time",{"title":472,"path":473,"stem":474,"titleTemplate":6},"\u003CNuxtPage>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-page","docs\u002F3.x\u002F4.api\u002F1.components\u002F2.nuxt-page",{"title":476,"path":477,"stem":478,"titleTemplate":6},"\u003CNuxtLayout>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout","docs\u002F3.x\u002F4.api\u002F1.components\u002F3.nuxt-layout",{"title":480,"path":481,"stem":482,"titleTemplate":6},"\u003CNuxtLink>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-link","docs\u002F3.x\u002F4.api\u002F1.components\u002F4.nuxt-link",{"title":484,"path":485,"stem":486,"titleTemplate":6},"\u003CNuxtLoadingIndicator>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator","docs\u002F3.x\u002F4.api\u002F1.components\u002F5.nuxt-loading-indicator",{"title":488,"path":489,"stem":490,"titleTemplate":6},"\u003CNuxtErrorBoundary>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary","docs\u002F3.x\u002F4.api\u002F1.components\u002F6.nuxt-error-boundary",{"title":492,"path":493,"stem":494,"titleTemplate":6},"\u003CNuxtWelcome>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome","docs\u002F3.x\u002F4.api\u002F1.components\u002F7.nuxt-welcome",{"title":496,"path":497,"stem":498,"titleTemplate":6},"\u003CNuxtIsland>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-island","docs\u002F3.x\u002F4.api\u002F1.components\u002F8.nuxt-island",{"title":500,"path":501,"stem":502,"titleTemplate":6},"\u003CNuxtImg>","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-img","docs\u002F3.x\u002F4.api\u002F1.components\u002F9.nuxt-img",{"title":504,"titleTemplate":505,"icon":506,"path":507,"stem":508,"children":509,"page":108},"Composables","%s · Nuxt Composables","i-lucide-arrow-left-right","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables","docs\u002F3.x\u002F4.api\u002F2.composables",[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,622],{"title":511,"path":512,"stem":513,"titleTemplate":6},"onPrehydrate","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fon-prehydrate",{"title":515,"path":516,"stem":517,"titleTemplate":6},"useAppConfig","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-app-config","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-app-config",{"title":519,"path":520,"stem":521,"titleTemplate":6},"useAsyncData","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-async-data","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-async-data",{"title":523,"path":524,"stem":525,"titleTemplate":6},"useCookie","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-cookie","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-cookie",{"title":527,"path":528,"stem":529,"titleTemplate":6},"useError","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-error","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-error",{"title":531,"path":532,"stem":533,"titleTemplate":6},"useFetch","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-fetch","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-fetch",{"title":535,"path":536,"stem":537,"titleTemplate":6},"useHead","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-head","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-head",{"title":539,"path":540,"stem":541,"titleTemplate":6},"useHeadSafe","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-head-safe",{"title":543,"path":544,"stem":545,"titleTemplate":6},"useHydration","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-hydration","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-hydration",{"title":547,"path":548,"stem":549,"titleTemplate":6},"useLazyAsyncData","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-lazy-async-data",{"title":551,"path":552,"stem":553,"titleTemplate":6},"useLazyFetch","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-lazy-fetch",{"title":555,"path":556,"stem":557,"titleTemplate":6},"useLoadingIndicator","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-loading-indicator",{"title":559,"path":560,"stem":561,"titleTemplate":6},"useNuxtApp","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-app",{"title":563,"path":564,"stem":565,"titleTemplate":6},"useNuxtData","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-data",{"title":567,"path":568,"stem":569,"titleTemplate":6},"usePreviewMode","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-preview-mode",{"title":571,"path":572,"stem":573,"titleTemplate":6},"useRequestEvent","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-event","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-request-event",{"title":575,"path":576,"stem":577,"titleTemplate":6},"useRequestFetch","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-request-fetch",{"title":579,"path":580,"stem":581,"titleTemplate":6},"useRequestHeader","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-header","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-request-header",{"title":583,"path":584,"stem":585,"titleTemplate":6},"useRequestHeaders","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-request-headers",{"title":587,"path":588,"stem":589,"titleTemplate":6},"useRequestURL","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-url","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-request-url",{"title":591,"path":592,"stem":593,"titleTemplate":6},"useResponseHeader","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-response-header","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-response-header",{"title":595,"path":596,"stem":597,"titleTemplate":6},"useRoute","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-route","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-route",{"title":599,"path":600,"stem":601,"titleTemplate":6},"useRouteAnnouncer","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-route-announcer",{"title":603,"path":604,"stem":605,"titleTemplate":6},"useRouter","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-router","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-router",{"title":607,"path":608,"stem":609,"titleTemplate":6},"useRuntimeConfig","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-runtime-config",{"title":611,"path":612,"stem":613,"titleTemplate":6},"useRuntimeHook","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-runtime-hook",{"title":615,"path":616,"stem":617,"titleTemplate":6},"useSeoMeta","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-seo-meta",{"title":619,"path":620,"stem":621,"titleTemplate":6},"useServerSeoMeta","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-server-seo-meta",{"title":623,"path":624,"stem":625,"titleTemplate":6},"useState","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-state","docs\u002F3.x\u002F4.api\u002F2.composables\u002Fuse-state",{"title":627,"titleTemplate":628,"icon":629,"path":630,"stem":631,"children":632,"page":108},"Utils","%s · Nuxt Utils","i-lucide-square-function","\u002Fdocs\u002F3.x\u002Fapi\u002Futils","docs\u002F3.x\u002F4.api\u002F3.utils",[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,745],{"title":634,"path":635,"stem":636,"titleTemplate":6},"$fetch","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdollarfetch","docs\u002F3.x\u002F4.api\u002F3.utils\u002F$fetch",{"title":638,"path":639,"stem":640,"titleTemplate":6},"abortNavigation","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fabort-navigation","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fabort-navigation",{"title":642,"path":643,"stem":644,"titleTemplate":6},"addRouteMiddleware","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fadd-route-middleware","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fadd-route-middleware",{"title":646,"path":647,"stem":648,"titleTemplate":6},"callOnce","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fcall-once","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fcall-once",{"title":650,"path":651,"stem":652,"titleTemplate":6},"clearError","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fclear-error","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fclear-error",{"title":654,"path":655,"stem":656,"titleTemplate":6},"clearNuxtData","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fclear-nuxt-data","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-data",{"title":658,"path":659,"stem":660,"titleTemplate":6},"clearNuxtState","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fclear-nuxt-state","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-state",{"title":662,"path":663,"stem":664,"titleTemplate":6},"createError","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fcreate-error","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fcreate-error",{"title":666,"path":667,"stem":668,"titleTemplate":6},"defineLazyHydrationComponent","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fdefine-lazy-hydration-component",{"title":670,"path":671,"stem":672,"titleTemplate":6},"defineNuxtComponent","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-component",{"title":674,"path":675,"stem":676,"titleTemplate":6},"defineNuxtPlugin","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-plugin",{"title":678,"path":679,"stem":680,"titleTemplate":6},"defineNuxtRouteMiddleware","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-route-middleware",{"title":682,"path":683,"stem":684,"titleTemplate":6},"definePageMeta","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-page-meta","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fdefine-page-meta",{"title":686,"path":687,"stem":688,"titleTemplate":6},"defineRouteRules","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-route-rules","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fdefine-route-rules",{"title":690,"path":691,"stem":692,"titleTemplate":6},"navigateTo","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fnavigate-to","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fnavigate-to",{"title":694,"path":695,"stem":696,"titleTemplate":6},"onBeforeRouteLeave","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fon-before-route-leave","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fon-before-route-leave",{"title":698,"path":699,"stem":700,"titleTemplate":6},"onBeforeRouteUpdate","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fon-before-route-update","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fon-before-route-update",{"title":702,"path":703,"stem":704,"titleTemplate":6},"onNuxtReady","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fon-nuxt-ready","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fon-nuxt-ready",{"title":706,"path":707,"stem":708,"titleTemplate":6},"prefetchComponents","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fprefetch-components","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fprefetch-components",{"title":710,"path":711,"stem":712,"titleTemplate":6},"preloadComponents","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fpreload-components","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fpreload-components",{"title":714,"path":715,"stem":716,"titleTemplate":6},"preloadRouteComponents","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fpreload-route-components","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fpreload-route-components",{"title":718,"path":719,"stem":720,"titleTemplate":6},"prerenderRoutes","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fprerender-routes","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fprerender-routes",{"title":722,"path":723,"stem":724,"titleTemplate":6},"refreshCookie","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Frefresh-cookie","docs\u002F3.x\u002F4.api\u002F3.utils\u002Frefresh-cookie",{"title":726,"path":727,"stem":728,"titleTemplate":6},"refreshNuxtData","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data","docs\u002F3.x\u002F4.api\u002F3.utils\u002Frefresh-nuxt-data",{"title":730,"path":731,"stem":732,"titleTemplate":6},"reloadNuxtApp","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Freload-nuxt-app","docs\u002F3.x\u002F4.api\u002F3.utils\u002Freload-nuxt-app",{"title":734,"path":735,"stem":736,"titleTemplate":6},"setPageLayout","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fset-page-layout","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fset-page-layout",{"title":738,"path":739,"stem":740,"titleTemplate":6},"setResponseStatus","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fset-response-status","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fset-response-status",{"title":742,"path":743,"stem":744,"titleTemplate":6},"showError","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fshow-error","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fshow-error",{"title":746,"path":747,"stem":748,"titleTemplate":6},"updateAppConfig","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fupdate-app-config","docs\u002F3.x\u002F4.api\u002F3.utils\u002Fupdate-app-config",{"title":750,"titleTemplate":751,"icon":752,"path":753,"stem":754,"children":755,"page":108},"Commands","%s · Nuxt Commands","i-lucide-square-terminal","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands","docs\u002F3.x\u002F4.api\u002F4.commands",[756,760,764,768,772,776,780,784,788,792,796,800,804,808,812,816],{"title":757,"path":758,"stem":759,"titleTemplate":6},"nuxt add","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fadd","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fadd",{"title":761,"path":762,"stem":763,"titleTemplate":6},"nuxt analyze","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fanalyze","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fanalyze",{"title":765,"path":766,"stem":767,"titleTemplate":6},"nuxt build","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fbuild","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fbuild",{"title":769,"path":770,"stem":771,"titleTemplate":6},"nuxt build-module","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fbuild-module","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fbuild-module",{"title":773,"path":774,"stem":775,"titleTemplate":6},"nuxt cleanup","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fcleanup","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fcleanup",{"title":777,"path":778,"stem":779,"titleTemplate":6},"nuxt dev","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fdev","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fdev",{"title":781,"path":782,"stem":783,"titleTemplate":6},"nuxt devtools","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fdevtools","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fdevtools",{"title":785,"path":786,"stem":787,"titleTemplate":6},"nuxt generate","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fgenerate","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fgenerate",{"title":789,"path":790,"stem":791,"titleTemplate":6},"nuxt info","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Finfo","docs\u002F3.x\u002F4.api\u002F4.commands\u002Finfo",{"title":793,"path":794,"stem":795,"titleTemplate":6},"create nuxt","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Finit","docs\u002F3.x\u002F4.api\u002F4.commands\u002Finit",{"title":797,"path":798,"stem":799,"titleTemplate":6},"nuxt module","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fmodule","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fmodule",{"title":801,"path":802,"stem":803,"titleTemplate":6},"nuxt prepare","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fprepare","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fprepare",{"title":805,"path":806,"stem":807,"titleTemplate":6},"nuxt preview","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fpreview","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fpreview",{"title":809,"path":810,"stem":811,"titleTemplate":6},"nuxt test","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Ftest","docs\u002F3.x\u002F4.api\u002F4.commands\u002Ftest",{"title":813,"path":814,"stem":815,"titleTemplate":6},"nuxt typecheck","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Ftypecheck","docs\u002F3.x\u002F4.api\u002F4.commands\u002Ftypecheck",{"title":817,"path":818,"stem":819,"titleTemplate":6},"nuxt upgrade","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fupgrade","docs\u002F3.x\u002F4.api\u002F4.commands\u002Fupgrade",{"title":415,"titleTemplate":821,"icon":822,"path":823,"stem":824,"children":825,"page":108},"%s · Nuxt Kit","i-lucide-package","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit","docs\u002F3.x\u002F4.api\u002F5.kit",[826,829,832,836,840,844,848,852,856,859,863,867,870,873,877,881,885,889],{"title":276,"path":827,"stem":828,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fmodules","docs\u002F3.x\u002F4.api\u002F5.kit\u002F1.modules",{"title":403,"path":830,"stem":831,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fruntime-config","docs\u002F3.x\u002F4.api\u002F5.kit\u002F10.runtime-config",{"title":833,"path":834,"stem":835,"titleTemplate":6},"Templates","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Ftemplates","docs\u002F3.x\u002F4.api\u002F5.kit\u002F10.templates",{"title":837,"path":838,"stem":839,"titleTemplate":6},"Nitro","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fnitro","docs\u002F3.x\u002F4.api\u002F5.kit\u002F11.nitro",{"title":841,"path":842,"stem":843,"titleTemplate":6},"Resolving","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fresolving","docs\u002F3.x\u002F4.api\u002F5.kit\u002F12.resolving",{"title":845,"path":846,"stem":847,"titleTemplate":6},"Logging","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Flogging","docs\u002F3.x\u002F4.api\u002F5.kit\u002F13.logging",{"title":849,"path":850,"stem":851,"titleTemplate":6},"Builder","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fbuilder","docs\u002F3.x\u002F4.api\u002F5.kit\u002F14.builder",{"title":853,"path":854,"stem":855,"titleTemplate":6},"Examples","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fexamples","docs\u002F3.x\u002F4.api\u002F5.kit\u002F15.examples",{"title":84,"path":857,"stem":858,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Flayers","docs\u002F3.x\u002F4.api\u002F5.kit\u002F16.layers",{"title":860,"path":861,"stem":862,"titleTemplate":6},"Programmatic Usage","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fprogrammatic","docs\u002F3.x\u002F4.api\u002F5.kit\u002F2.programmatic",{"title":864,"path":865,"stem":866,"titleTemplate":6},"Compatibility","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fcompatibility","docs\u002F3.x\u002F4.api\u002F5.kit\u002F3.compatibility",{"title":268,"path":868,"stem":869,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fautoimports","docs\u002F3.x\u002F4.api\u002F5.kit\u002F4.autoimports",{"title":438,"path":871,"stem":872,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fcomponents","docs\u002F3.x\u002F4.api\u002F5.kit\u002F5.components",{"title":874,"path":875,"stem":876,"titleTemplate":6},"Context","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fcontext","docs\u002F3.x\u002F4.api\u002F5.kit\u002F6.context",{"title":878,"path":879,"stem":880,"titleTemplate":6},"Pages","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fpages","docs\u002F3.x\u002F4.api\u002F5.kit\u002F7.pages",{"title":882,"path":883,"stem":884,"titleTemplate":6},"Layout","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Flayout","docs\u002F3.x\u002F4.api\u002F5.kit\u002F8.layout",{"title":886,"path":887,"stem":888,"titleTemplate":6},"Head","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fhead","docs\u002F3.x\u002F4.api\u002F5.kit\u002F9.head",{"title":890,"path":891,"stem":892,"titleTemplate":6},"Plugins","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fplugins","docs\u002F3.x\u002F4.api\u002F5.kit\u002F9.plugins",{"title":894,"titleTemplate":6,"icon":895,"path":896,"stem":897,"children":898,"page":108},"Advanced","i-lucide-brain","\u002Fdocs\u002F3.x\u002Fapi\u002Fadvanced","docs\u002F3.x\u002F4.api\u002F6.advanced",[899,902],{"title":411,"path":900,"stem":901,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fapi\u002Fadvanced\u002Fhooks","docs\u002F3.x\u002F4.api\u002F6.advanced\u002F1.hooks",{"title":903,"path":904,"stem":905,"titleTemplate":6},"Import meta","\u002Fdocs\u002F3.x\u002Fapi\u002Fadvanced\u002Fimport-meta","docs\u002F3.x\u002F4.api\u002F6.advanced\u002F2.import-meta",{"title":907,"path":908,"stem":909,"titleTemplate":910,"icon":32},"Nuxt Configuration","\u002Fdocs\u002F3.x\u002Fapi\u002Fnuxt-config","docs\u002F3.x\u002F4.api\u002F6.nuxt-config","%s",{"title":853,"titleTemplate":912,"icon":913,"path":914,"stem":915,"children":916,"page":108},"%s · Nuxt Examples","i-lucide-app-window-mac","\u002Fdocs\u002F3.x\u002Fexamples","docs\u002F3.x\u002F4.examples",[917,921,943,958,994],{"title":918,"path":919,"stem":920,"titleTemplate":6},"Hello World","\u002Fdocs\u002F3.x\u002Fexamples\u002Fhello-world","docs\u002F3.x\u002F4.examples\u002F0.hello-world",{"title":399,"path":922,"stem":923,"children":924,"page":108},"\u002Fdocs\u002F3.x\u002Fexamples\u002Ffeatures","docs\u002F3.x\u002F4.examples\u002F1.features",[925,929,932,935,939],{"title":926,"path":927,"stem":928,"titleTemplate":6},"Auto Imports","\u002Fdocs\u002F3.x\u002Fexamples\u002Ffeatures\u002Fauto-imports","docs\u002F3.x\u002F4.examples\u002F1.features\u002F1.auto-imports",{"title":64,"path":930,"stem":931,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fexamples\u002Ffeatures\u002Fdata-fetching","docs\u002F3.x\u002F4.examples\u002F1.features\u002F2.data-fetching",{"title":69,"path":933,"stem":934,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fexamples\u002Ffeatures\u002Fstate-management","docs\u002F3.x\u002F4.examples\u002F1.features\u002F3.state-management",{"title":936,"path":937,"stem":938,"titleTemplate":6},"Meta Tags","\u002Fdocs\u002F3.x\u002Fexamples\u002Ffeatures\u002Fmeta-tags","docs\u002F3.x\u002F4.examples\u002F1.features\u002F4.meta-tags",{"title":940,"path":941,"stem":942,"titleTemplate":6},"Layouts","\u002Fdocs\u002F3.x\u002Fexamples\u002Ffeatures\u002Flayouts","docs\u002F3.x\u002F4.examples\u002F1.features\u002F5.layouts",{"title":49,"path":944,"stem":945,"children":946,"page":108},"\u002Fdocs\u002F3.x\u002Fexamples\u002Frouting","docs\u002F3.x\u002F4.examples\u002F2.routing",[947,951,954],{"title":948,"path":949,"stem":950,"titleTemplate":6},"Middleware","\u002Fdocs\u002F3.x\u002Fexamples\u002Frouting\u002Fmiddleware","docs\u002F3.x\u002F4.examples\u002F2.routing\u002Fmiddleware",{"title":878,"path":952,"stem":953,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fexamples\u002Frouting\u002Fpages","docs\u002F3.x\u002F4.examples\u002F2.routing\u002Fpages",{"title":955,"path":956,"stem":957,"titleTemplate":6},"Universal Router","\u002Fdocs\u002F3.x\u002Fexamples\u002Frouting\u002Funiversal-router","docs\u002F3.x\u002F4.examples\u002F2.routing\u002Funiversal-router",{"title":894,"path":959,"stem":960,"children":961,"page":108},"\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced","docs\u002F3.x\u002F4.examples\u002F4.advanced",[962,965,968,972,976,980,984,987,990],{"title":84,"path":963,"stem":964,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced\u002Fconfig-extends","docs\u002F3.x\u002F4.examples\u002F4.advanced\u002Fconfig-extends",{"title":74,"path":966,"stem":967,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced\u002Ferror-handling","docs\u002F3.x\u002F4.examples\u002F4.advanced\u002Ferror-handling",{"title":969,"path":970,"stem":971,"titleTemplate":6},"JSX \u002F TSX","\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced\u002Fjsx","docs\u002F3.x\u002F4.examples\u002F4.advanced\u002Fjsx",{"title":973,"path":974,"stem":975,"titleTemplate":6},"Locale","\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced\u002Flocale","docs\u002F3.x\u002F4.examples\u002F4.advanced\u002Flocale",{"title":977,"path":978,"stem":979,"titleTemplate":6},"Module Extend Pages","\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced\u002Fmodule-extend-pages","docs\u002F3.x\u002F4.examples\u002F4.advanced\u002Fmodule-extend-pages",{"title":981,"path":982,"stem":983,"titleTemplate":6},"Teleport","\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced\u002Fteleport","docs\u002F3.x\u002F4.examples\u002F4.advanced\u002Fteleport",{"title":99,"path":985,"stem":986,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced\u002Ftesting","docs\u002F3.x\u002F4.examples\u002F4.advanced\u002Ftesting",{"title":523,"path":988,"stem":989,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced\u002Fuse-cookie","docs\u002F3.x\u002F4.examples\u002F4.advanced\u002Fuse-cookie",{"title":991,"path":992,"stem":993,"titleTemplate":6},"Use Custom Fetch Composable","\u002Fdocs\u002F3.x\u002Fexamples\u002Fadvanced\u002Fuse-custom-fetch-composable","docs\u002F3.x\u002F4.examples\u002F4.advanced\u002Fuse-custom-fetch-composable",{"title":995,"path":996,"stem":997,"children":998,"page":108},"Experimental","\u002Fdocs\u002F3.x\u002Fexamples\u002Fexperimental","docs\u002F3.x\u002F4.examples\u002F7.experimental",[999],{"title":1000,"path":1001,"stem":1002,"titleTemplate":6},"WASM","\u002Fdocs\u002F3.x\u002Fexamples\u002Fexperimental\u002Fwasm","docs\u002F3.x\u002F4.examples\u002F7.experimental\u002Fwasm",{"title":1004,"titleTemplate":1005,"icon":1006,"path":1007,"stem":1008,"children":1009,"page":108},"Community","%s · Nuxt Community","i-lucide-messages-square","\u002Fdocs\u002F3.x\u002Fcommunity","docs\u002F3.x\u002F5.community",[1010,1015,1020,1025,1030,1035],{"title":1011,"path":1012,"stem":1013,"titleTemplate":6,"icon":1014},"Getting Help","\u002Fdocs\u002F3.x\u002Fcommunity\u002Fgetting-help","docs\u002F3.x\u002F5.community\u002F2.getting-help","i-lucide-life-buoy",{"title":1016,"path":1017,"stem":1018,"titleTemplate":6,"icon":1019},"Reporting Bugs","\u002Fdocs\u002F3.x\u002Fcommunity\u002Freporting-bugs","docs\u002F3.x\u002F5.community\u002F3.reporting-bugs","i-lucide-bug",{"title":1021,"path":1022,"stem":1023,"titleTemplate":6,"icon":1024},"Contribution","\u002Fdocs\u002F3.x\u002Fcommunity\u002Fcontribution","docs\u002F3.x\u002F5.community\u002F4.contribution","i-lucide-git-pull-request",{"title":1026,"path":1027,"stem":1028,"titleTemplate":6,"icon":1029},"Framework","\u002Fdocs\u002F3.x\u002Fcommunity\u002Fframework-contribution","docs\u002F3.x\u002F5.community\u002F5.framework-contribution","i-lucide-github",{"title":1031,"path":1032,"stem":1033,"titleTemplate":6,"icon":1034},"Roadmap","\u002Fdocs\u002F3.x\u002Fcommunity\u002Froadmap","docs\u002F3.x\u002F5.community\u002F6.roadmap","i-lucide-map",{"title":1036,"path":1037,"stem":1038,"titleTemplate":6,"icon":1039},"Releases","\u002Fdocs\u002F3.x\u002Fcommunity\u002Fchangelog","docs\u002F3.x\u002F5.community\u002F7.changelog","i-lucide-bell-dot",{"title":1041,"titleTemplate":1042,"icon":1043,"path":1044,"stem":1045,"children":1046,"page":108},"Migrate to Nuxt Bridge","Migrate to Nuxt Bridge: %s","i-lucide-ship","\u002Fdocs\u002F3.x\u002Fbridge","docs\u002F3.x\u002F6.bridge",[1047,1051,1054,1057,1061,1065,1069,1072,1075,1078],{"title":1048,"path":1049,"stem":1050,"titleTemplate":6},"Overview","\u002Fdocs\u002F3.x\u002Fbridge\u002Foverview","docs\u002F3.x\u002F6.bridge\u002F1.overview",{"title":29,"path":1052,"stem":1053,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fconfiguration","docs\u002F3.x\u002F6.bridge\u002F10.configuration",{"title":280,"path":1055,"stem":1056,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fbridge\u002Ftypescript","docs\u002F3.x\u002F6.bridge\u002F2.typescript",{"title":1058,"path":1059,"stem":1060,"titleTemplate":6},"Legacy Composition API","\u002Fdocs\u002F3.x\u002Fbridge\u002Fbridge-composition-api","docs\u002F3.x\u002F6.bridge\u002F3.bridge-composition-api",{"title":1062,"path":1063,"stem":1064,"titleTemplate":6},"Plugins and Middleware","\u002Fdocs\u002F3.x\u002Fbridge\u002Fplugins-and-middleware","docs\u002F3.x\u002F6.bridge\u002F4.plugins-and-middleware",{"title":1066,"path":1067,"stem":1068,"titleTemplate":6},"New Composition API","\u002Fdocs\u002F3.x\u002Fbridge\u002Fnuxt3-compatible-api","docs\u002F3.x\u002F6.bridge\u002F5.nuxt3-compatible-api",{"title":936,"path":1070,"stem":1071,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fmeta","docs\u002F3.x\u002F6.bridge\u002F6.meta",{"title":403,"path":1073,"stem":1074,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fruntime-config","docs\u002F3.x\u002F6.bridge\u002F7.runtime-config",{"title":837,"path":1076,"stem":1077,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fnitro","docs\u002F3.x\u002F6.bridge\u002F8.nitro",{"title":1079,"path":1080,"stem":1081,"titleTemplate":6},"Vite","\u002Fdocs\u002F3.x\u002Fbridge\u002Fvite","docs\u002F3.x\u002F6.bridge\u002F9.vite",{"title":1083,"titleTemplate":1084,"icon":107,"path":1085,"stem":1086,"children":1087,"page":108},"Migrate to Nuxt 3","Migrate to Nuxt 3: %s","\u002Fdocs\u002F3.x\u002Fmigration","docs\u002F3.x\u002F7.migration",[1088,1091,1095,1098,1101,1104,1107,1110,1113,1117,1121],{"title":1048,"path":1089,"stem":1090,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fmigration\u002Foverview","docs\u002F3.x\u002F7.migration\u002F1.overview",{"title":1092,"path":1093,"stem":1094,"titleTemplate":6},"Build Tooling","\u002Fdocs\u002F3.x\u002Fmigration\u002Fbundling","docs\u002F3.x\u002F7.migration\u002F10.bundling",{"title":79,"path":1096,"stem":1097,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fserver","docs\u002F3.x\u002F7.migration\u002F11.server",{"title":29,"path":1099,"stem":1100,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fconfiguration","docs\u002F3.x\u002F7.migration\u002F2.configuration",{"title":276,"path":1102,"stem":1103,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fmodule-authors","docs\u002F3.x\u002F7.migration\u002F20.module-authors",{"title":926,"path":1105,"stem":1106,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fauto-imports","docs\u002F3.x\u002F7.migration\u002F3.auto-imports",{"title":936,"path":1108,"stem":1109,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fmeta","docs\u002F3.x\u002F7.migration\u002F4.meta",{"title":1062,"path":1111,"stem":1112,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fplugins-and-middleware","docs\u002F3.x\u002F7.migration\u002F5.plugins-and-middleware",{"title":1114,"path":1115,"stem":1116,"titleTemplate":6},"Pages and Layouts","\u002Fdocs\u002F3.x\u002Fmigration\u002Fpages-and-layouts","docs\u002F3.x\u002F7.migration\u002F6.pages-and-layouts",{"title":1118,"path":1119,"stem":1120,"titleTemplate":6},"Component Options","\u002Fdocs\u002F3.x\u002Fmigration\u002Fcomponent-options","docs\u002F3.x\u002F7.migration\u002F7.component-options",{"title":403,"path":1122,"stem":1123,"titleTemplate":6},"\u002Fdocs\u002F3.x\u002Fmigration\u002Fruntime-config","docs\u002F3.x\u002F7.migration\u002F8.runtime-config",{"title":5,"titleTemplate":6,"icon":7,"path":1125,"stem":1126,"children":1127,"page":108},"\u002Fdocs\u002F4.x","docs\u002F4.x",[1128,1186,1280,1411,1785,1862,1884,1918],{"title":12,"titleTemplate":13,"icon":14,"path":1129,"stem":1130,"children":1131,"page":108},"\u002Fdocs\u002F4.x\u002Fgetting-started","docs\u002F4.x\u002F1.getting-started",[1132,1135,1138,1141,1144,1147,1150,1153,1156,1159,1162,1165,1168,1171,1174,1177,1180,1183],{"title":19,"path":1133,"stem":1134,"titleTemplate":6,"icon":22},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fintroduction","docs\u002F4.x\u002F1.getting-started\u002F01.introduction",{"title":24,"path":1136,"stem":1137,"titleTemplate":6,"icon":27},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Finstallation","docs\u002F4.x\u002F1.getting-started\u002F02.installation",{"title":29,"path":1139,"stem":1140,"titleTemplate":6,"icon":32},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fconfiguration","docs\u002F4.x\u002F1.getting-started\u002F03.configuration",{"title":34,"path":1142,"stem":1143,"titleTemplate":6,"icon":37},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fviews","docs\u002F4.x\u002F1.getting-started\u002F04.views",{"title":39,"path":1145,"stem":1146,"titleTemplate":6,"icon":42},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fassets","docs\u002F4.x\u002F1.getting-started\u002F05.assets",{"title":44,"path":1148,"stem":1149,"titleTemplate":6,"icon":47},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fstyling","docs\u002F4.x\u002F1.getting-started\u002F06.styling",{"title":49,"path":1151,"stem":1152,"titleTemplate":6,"icon":52},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Frouting","docs\u002F4.x\u002F1.getting-started\u002F07.routing",{"title":54,"path":1154,"stem":1155,"titleTemplate":6,"icon":57},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fseo-meta","docs\u002F4.x\u002F1.getting-started\u002F08.seo-meta",{"title":59,"path":1157,"stem":1158,"titleTemplate":6,"icon":62},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Ftransitions","docs\u002F4.x\u002F1.getting-started\u002F09.transitions",{"title":64,"path":1160,"stem":1161,"titleTemplate":6,"icon":67},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdata-fetching","docs\u002F4.x\u002F1.getting-started\u002F10.data-fetching",{"title":69,"path":1163,"stem":1164,"titleTemplate":6,"icon":72},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fstate-management","docs\u002F4.x\u002F1.getting-started\u002F11.state-management",{"title":74,"path":1166,"stem":1167,"titleTemplate":6,"icon":77},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Ferror-handling","docs\u002F4.x\u002F1.getting-started\u002F12.error-handling",{"title":79,"path":1169,"stem":1170,"titleTemplate":6,"icon":82},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fserver","docs\u002F4.x\u002F1.getting-started\u002F13.server",{"title":84,"path":1172,"stem":1173,"titleTemplate":6,"icon":87},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Flayers","docs\u002F4.x\u002F1.getting-started\u002F14.layers",{"title":89,"path":1175,"stem":1176,"titleTemplate":6,"icon":92},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fprerendering","docs\u002F4.x\u002F1.getting-started\u002F15.prerendering",{"title":94,"path":1178,"stem":1179,"titleTemplate":6,"icon":97},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdeployment","docs\u002F4.x\u002F1.getting-started\u002F16.deployment",{"title":99,"path":1181,"stem":1182,"titleTemplate":6,"icon":102},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Ftesting","docs\u002F4.x\u002F1.getting-started\u002F17.testing",{"title":104,"path":1184,"stem":1185,"titleTemplate":6,"icon":107},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade","docs\u002F4.x\u002F1.getting-started\u002F18.upgrade",{"title":110,"titleTemplate":111,"icon":112,"path":1187,"stem":1188,"children":1189,"page":108},"\u002Fdocs\u002F4.x\u002Fdirectory-structure","docs\u002F4.x\u002F2.directory-structure",[1190,1193,1196,1238,1241,1244,1247,1250,1253,1256,1259,1262,1265,1268,1271,1274,1277],{"title":117,"path":1191,"stem":1192,"titleTemplate":6,"icon":120},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxt","docs\u002F4.x\u002F2.directory-structure\u002F0.nuxt",{"title":122,"path":1194,"stem":1195,"titleTemplate":6,"icon":125},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Foutput","docs\u002F4.x\u002F2.directory-structure\u002F0.output",{"title":1197,"titleTemplate":111,"head":1198,"defaultOpen":1200,"icon":1201,"path":1202,"stem":1203,"children":1204,"page":108},"app",{"title":1199},"app\u002F",true,"i-vscode-icons-folder-type-app","\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp","docs\u002F4.x\u002F2.directory-structure\u002F1.app",[1205,1208,1211,1214,1217,1220,1223,1226,1229,1232,1235],{"title":127,"path":1206,"stem":1207,"titleTemplate":6,"icon":130},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fassets","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F1.assets",{"title":132,"path":1209,"stem":1210,"titleTemplate":6,"icon":135},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fcomponents","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F1.components",{"title":137,"path":1212,"stem":1213,"titleTemplate":6,"icon":140},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fcomposables","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F1.composables",{"title":152,"path":1215,"stem":1216,"titleTemplate":6,"icon":155},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Flayouts","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F1.layouts",{"title":157,"path":1218,"stem":1219,"titleTemplate":6,"icon":160},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fmiddleware","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F1.middleware",{"title":171,"path":1221,"stem":1222,"titleTemplate":6,"icon":155},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fpages","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F1.pages",{"title":175,"path":1224,"stem":1225,"titleTemplate":6,"icon":178},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fplugins","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F1.plugins",{"title":195,"path":1227,"stem":1228,"titleTemplate":6,"icon":198},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Futils","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F1.utils",{"title":219,"path":1230,"stem":1231,"titleTemplate":6,"icon":222},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fapp","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F3.app",{"title":224,"path":1233,"stem":1234,"titleTemplate":6,"icon":227},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fapp-config","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F3.app-config",{"title":229,"path":1236,"stem":1237,"titleTemplate":6,"icon":222},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Ferror","docs\u002F4.x\u002F2.directory-structure\u002F1.app\u002F3.error",{"title":142,"path":1239,"stem":1240,"titleTemplate":6,"icon":145},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fcontent","docs\u002F4.x\u002F2.directory-structure\u002F1.content",{"title":147,"path":1242,"stem":1243,"titleTemplate":6,"icon":150},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Flayers","docs\u002F4.x\u002F2.directory-structure\u002F1.layers",{"title":162,"path":1245,"stem":1246,"titleTemplate":6,"icon":150},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fmodules","docs\u002F4.x\u002F2.directory-structure\u002F1.modules",{"title":166,"path":1248,"stem":1249,"titleTemplate":6,"icon":169},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnode_modules","docs\u002F4.x\u002F2.directory-structure\u002F1.node_modules",{"title":180,"path":1251,"stem":1252,"titleTemplate":6,"icon":183},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fpublic","docs\u002F4.x\u002F2.directory-structure\u002F1.public",{"title":185,"path":1254,"stem":1255,"titleTemplate":6,"icon":188},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fserver","docs\u002F4.x\u002F2.directory-structure\u002F1.server",{"title":190,"path":1257,"stem":1258,"titleTemplate":6,"icon":193},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fshared","docs\u002F4.x\u002F2.directory-structure\u002F1.shared",{"title":200,"path":1260,"stem":1261,"titleTemplate":6,"icon":203},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fenv","docs\u002F4.x\u002F2.directory-structure\u002F2.env",{"title":205,"path":1263,"stem":1264,"titleTemplate":6,"icon":208},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fgitignore","docs\u002F4.x\u002F2.directory-structure\u002F2.gitignore",{"title":210,"path":1266,"stem":1267,"titleTemplate":6,"icon":213},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxtignore","docs\u002F4.x\u002F2.directory-structure\u002F2.nuxtignore",{"title":215,"path":1269,"stem":1270,"titleTemplate":6,"icon":213},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxtrc","docs\u002F4.x\u002F2.directory-structure\u002F2.nuxtrc",{"title":233,"path":1272,"stem":1273,"titleTemplate":6,"icon":213},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxt-config","docs\u002F4.x\u002F2.directory-structure\u002F3.nuxt-config",{"title":237,"path":1275,"stem":1276,"titleTemplate":6,"icon":240},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fpackage","docs\u002F4.x\u002F2.directory-structure\u002F3.package",{"title":242,"path":1278,"stem":1279,"titleTemplate":6,"icon":245},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Ftsconfig","docs\u002F4.x\u002F2.directory-structure\u002F3.tsconfig",{"title":247,"titleTemplate":6,"icon":248,"path":1281,"stem":1282,"children":1283,"page":108},"\u002Fdocs\u002F4.x\u002Fguide","docs\u002F4.x\u002F3.guide",[1284,1309,1323,1333,1361,1377],{"title":253,"titleTemplate":254,"icon":255,"path":1285,"stem":1286,"children":1287,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts","docs\u002F4.x\u002F3.guide\u002F1.concepts",[1288,1291,1294,1297,1300,1303,1306],{"title":260,"path":1289,"stem":1290,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Frendering","docs\u002F4.x\u002F3.guide\u002F1.concepts\u002F1.rendering",{"title":264,"path":1292,"stem":1293,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle","docs\u002F4.x\u002F3.guide\u002F1.concepts\u002F2.nuxt-lifecycle",{"title":268,"path":1295,"stem":1296,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fauto-imports","docs\u002F4.x\u002F3.guide\u002F1.concepts\u002F3.auto-imports",{"title":272,"path":1298,"stem":1299,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fserver-engine","docs\u002F4.x\u002F3.guide\u002F1.concepts\u002F4.server-engine",{"title":276,"path":1301,"stem":1302,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fmodules","docs\u002F4.x\u002F3.guide\u002F1.concepts\u002F5.modules",{"title":280,"path":1304,"stem":1305,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Ftypescript","docs\u002F4.x\u002F3.guide\u002F1.concepts\u002F8.typescript",{"title":284,"path":1307,"stem":1308,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fcode-style","docs\u002F4.x\u002F3.guide\u002F1.concepts\u002F9.code-style",{"title":288,"titleTemplate":289,"icon":290,"path":1310,"stem":1311,"children":1312,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices","docs\u002F4.x\u002F3.guide\u002F2.best-practices",[1313,1317,1320],{"title":1314,"path":1315,"stem":1316,"titleTemplate":6},"Nuxt and Hydration","\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fhydration","docs\u002F4.x\u002F3.guide\u002F2.best-practices\u002Fhydration",{"title":299,"path":1318,"stem":1319,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fperformance","docs\u002F4.x\u002F3.guide\u002F2.best-practices\u002Fperformance",{"title":303,"path":1321,"stem":1322,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fplugins","docs\u002F4.x\u002F3.guide\u002F2.best-practices\u002Fplugins",{"title":307,"titleTemplate":308,"icon":309,"path":1324,"stem":1325,"children":1326,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai","docs\u002F4.x\u002F3.guide\u002F3.ai",[1327,1330],{"title":314,"path":1328,"stem":1329,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai\u002Fmcp","docs\u002F4.x\u002F3.guide\u002F3.ai\u002F1.mcp",{"title":318,"path":1331,"stem":1332,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai\u002Fllms-txt","docs\u002F4.x\u002F3.guide\u002F3.ai\u002F2.llms-txt",{"title":322,"titleTemplate":323,"icon":324,"path":1334,"stem":1335,"children":1336,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules","docs\u002F4.x\u002F3.guide\u002F4.modules",[1337,1340,1343,1346,1349,1352,1355,1358],{"title":329,"path":1338,"stem":1339,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fgetting-started","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F1.getting-started",{"title":333,"path":1341,"stem":1342,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F2.module-anatomy",{"title":337,"path":1344,"stem":1345,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Frecipes-basics","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F3.recipes-basics",{"title":341,"path":1347,"stem":1348,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F4.module-dependencies",{"title":345,"path":1350,"stem":1351,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Frecipes-advanced","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F5.recipes-advanced",{"title":349,"path":1353,"stem":1354,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Ftesting","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F6.testing",{"title":353,"path":1356,"stem":1357,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fbest-practices","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F7.best-practices",{"title":357,"path":1359,"stem":1360,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fecosystem","docs\u002F4.x\u002F3.guide\u002F4.modules\u002F8.ecosystem",{"title":361,"titleTemplate":362,"icon":363,"path":1362,"stem":1363,"children":1364,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes","docs\u002F4.x\u002F3.guide\u002F5.recipes",[1365,1368,1371,1374],{"title":368,"path":1366,"stem":1367,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fcustom-routing","docs\u002F4.x\u002F3.guide\u002F5.recipes\u002F1.custom-routing",{"title":372,"path":1369,"stem":1370,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fvite-plugin","docs\u002F4.x\u002F3.guide\u002F5.recipes\u002F2.vite-plugin",{"title":376,"path":1372,"stem":1373,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch","docs\u002F4.x\u002F3.guide\u002F5.recipes\u002F3.custom-usefetch",{"title":380,"path":1375,"stem":1376,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fsessions-and-authentication","docs\u002F4.x\u002F3.guide\u002F5.recipes\u002F4.sessions-and-authentication",{"title":384,"titleTemplate":385,"icon":386,"path":1378,"stem":1379,"children":1380,"page":108},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further","docs\u002F4.x\u002F3.guide\u002F6.going-further",[1381,1384,1387,1390,1393,1396,1399,1402,1405,1408],{"title":391,"path":1382,"stem":1383,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fevents","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F1.events",{"title":395,"path":1385,"stem":1386,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F1.experimental-features",{"title":399,"path":1388,"stem":1389,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Ffeatures","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F1.features",{"title":403,"path":1391,"stem":1392,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fruntime-config","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F10.runtime-config",{"title":407,"path":1394,"stem":1395,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F11.nightly-release-channel",{"title":411,"path":1397,"stem":1398,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fhooks","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F2.hooks",{"title":415,"path":1400,"stem":1401,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fkit","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F4.kit",{"title":419,"path":1403,"stem":1404,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F6.nuxt-app",{"title":423,"path":1406,"stem":1407,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Flayers","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F7.layers",{"title":427,"path":1409,"stem":1410,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fdebugging","docs\u002F4.x\u002F3.guide\u002F6.going-further\u002F9.debugging",{"title":431,"titleTemplate":432,"icon":433,"path":1412,"stem":1413,"children":1414,"page":108},"\u002Fdocs\u002F4.x\u002Fapi","docs\u002F4.x\u002F4.api",[1415,1468,1571,1662,1714,1772,1782],{"title":438,"titleTemplate":439,"icon":324,"path":1416,"stem":1417,"children":1418,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents","docs\u002F4.x\u002F4.api\u002F1.components",[1419,1422,1425,1428,1431,1434,1437,1440,1444,1447,1450,1453,1456,1459,1462,1465],{"title":444,"path":1420,"stem":1421,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fclient-only","docs\u002F4.x\u002F4.api\u002F1.components\u002F1.client-only",{"title":448,"path":1423,"stem":1424,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fdev-only","docs\u002F4.x\u002F4.api\u002F1.components\u002F1.dev-only",{"title":452,"path":1426,"stem":1427,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback","docs\u002F4.x\u002F4.api\u002F1.components\u002F1.nuxt-client-fallback",{"title":456,"path":1429,"stem":1430,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture","docs\u002F4.x\u002F4.api\u002F1.components\u002F10.nuxt-picture",{"title":460,"path":1432,"stem":1433,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fteleports","docs\u002F4.x\u002F4.api\u002F1.components\u002F11.teleports",{"title":464,"path":1435,"stem":1436,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer","docs\u002F4.x\u002F4.api\u002F1.components\u002F12.nuxt-route-announcer",{"title":468,"path":1438,"stem":1439,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-time","docs\u002F4.x\u002F4.api\u002F1.components\u002F13.nuxt-time",{"title":1441,"path":1442,"stem":1443,"titleTemplate":6},"\u003CNuxtAnnouncer>","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-announcer","docs\u002F4.x\u002F4.api\u002F1.components\u002F14.nuxt-announcer",{"title":472,"path":1445,"stem":1446,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-page","docs\u002F4.x\u002F4.api\u002F1.components\u002F2.nuxt-page",{"title":476,"path":1448,"stem":1449,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout","docs\u002F4.x\u002F4.api\u002F1.components\u002F3.nuxt-layout",{"title":480,"path":1451,"stem":1452,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-link","docs\u002F4.x\u002F4.api\u002F1.components\u002F4.nuxt-link",{"title":484,"path":1454,"stem":1455,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator","docs\u002F4.x\u002F4.api\u002F1.components\u002F5.nuxt-loading-indicator",{"title":488,"path":1457,"stem":1458,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary","docs\u002F4.x\u002F4.api\u002F1.components\u002F6.nuxt-error-boundary",{"title":492,"path":1460,"stem":1461,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome","docs\u002F4.x\u002F4.api\u002F1.components\u002F7.nuxt-welcome",{"title":496,"path":1463,"stem":1464,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-island","docs\u002F4.x\u002F4.api\u002F1.components\u002F8.nuxt-island",{"title":500,"path":1466,"stem":1467,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-img","docs\u002F4.x\u002F4.api\u002F1.components\u002F9.nuxt-img",{"title":504,"titleTemplate":505,"icon":506,"path":1469,"stem":1470,"children":1471,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables","docs\u002F4.x\u002F4.api\u002F2.composables",[1472,1476,1480,1483,1487,1490,1493,1496,1499,1502,1505,1508,1511,1514,1517,1520,1523,1526,1529,1532,1535,1538,1541,1544,1547,1550,1553,1556,1559,1562,1565,1568],{"title":1473,"path":1474,"stem":1475,"titleTemplate":6},"createUseAsyncData","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fcreate-use-async-data","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fcreate-use-async-data",{"title":1477,"path":1478,"stem":1479,"titleTemplate":6},"createUseFetch","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fcreate-use-fetch","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fcreate-use-fetch",{"title":511,"path":1481,"stem":1482,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fon-prehydrate",{"title":1484,"path":1485,"stem":1486,"titleTemplate":6},"useAnnouncer","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-announcer","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-announcer",{"title":515,"path":1488,"stem":1489,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-app-config","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-app-config",{"title":519,"path":1491,"stem":1492,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-async-data","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-async-data",{"title":523,"path":1494,"stem":1495,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-cookie","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-cookie",{"title":527,"path":1497,"stem":1498,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-error","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-error",{"title":531,"path":1500,"stem":1501,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-fetch","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-fetch",{"title":535,"path":1503,"stem":1504,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-head","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-head",{"title":539,"path":1506,"stem":1507,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-head-safe",{"title":543,"path":1509,"stem":1510,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-hydration","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-hydration",{"title":547,"path":1512,"stem":1513,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-lazy-async-data",{"title":551,"path":1515,"stem":1516,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-lazy-fetch",{"title":555,"path":1518,"stem":1519,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-loading-indicator",{"title":559,"path":1521,"stem":1522,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-app",{"title":563,"path":1524,"stem":1525,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-data",{"title":567,"path":1527,"stem":1528,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-preview-mode",{"title":571,"path":1530,"stem":1531,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-event","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-event",{"title":575,"path":1533,"stem":1534,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-fetch",{"title":579,"path":1536,"stem":1537,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-header","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-header",{"title":583,"path":1539,"stem":1540,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-headers",{"title":587,"path":1542,"stem":1543,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-url","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-request-url",{"title":591,"path":1545,"stem":1546,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-response-header","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-response-header",{"title":595,"path":1548,"stem":1549,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-route","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-route",{"title":599,"path":1551,"stem":1552,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-route-announcer",{"title":603,"path":1554,"stem":1555,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-router","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-router",{"title":607,"path":1557,"stem":1558,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-runtime-config",{"title":611,"path":1560,"stem":1561,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-runtime-hook",{"title":615,"path":1563,"stem":1564,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-seo-meta",{"title":619,"path":1566,"stem":1567,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-server-seo-meta",{"title":623,"path":1569,"stem":1570,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-state","docs\u002F4.x\u002F4.api\u002F2.composables\u002Fuse-state",{"title":627,"titleTemplate":628,"icon":629,"path":1572,"stem":1573,"children":1574,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils","docs\u002F4.x\u002F4.api\u002F3.utils",[1575,1578,1581,1584,1587,1590,1593,1596,1599,1602,1605,1608,1611,1614,1617,1620,1623,1626,1629,1632,1635,1638,1641,1644,1647,1650,1653,1656,1659],{"title":634,"path":1576,"stem":1577,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdollarfetch","docs\u002F4.x\u002F4.api\u002F3.utils\u002F$fetch",{"title":638,"path":1579,"stem":1580,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fabort-navigation","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fabort-navigation",{"title":642,"path":1582,"stem":1583,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fadd-route-middleware","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fadd-route-middleware",{"title":646,"path":1585,"stem":1586,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fcall-once","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fcall-once",{"title":650,"path":1588,"stem":1589,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-error","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fclear-error",{"title":654,"path":1591,"stem":1592,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-nuxt-data","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-data",{"title":658,"path":1594,"stem":1595,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-nuxt-state","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-state",{"title":662,"path":1597,"stem":1598,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fcreate-error","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fcreate-error",{"title":666,"path":1600,"stem":1601,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-lazy-hydration-component",{"title":670,"path":1603,"stem":1604,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-component",{"title":674,"path":1606,"stem":1607,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-plugin",{"title":678,"path":1609,"stem":1610,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-route-middleware",{"title":682,"path":1612,"stem":1613,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-page-meta","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-page-meta",{"title":686,"path":1615,"stem":1616,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-route-rules","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fdefine-route-rules",{"title":690,"path":1618,"stem":1619,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fnavigate-to","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fnavigate-to",{"title":694,"path":1621,"stem":1622,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-before-route-leave","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fon-before-route-leave",{"title":698,"path":1624,"stem":1625,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-before-route-update","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fon-before-route-update",{"title":702,"path":1627,"stem":1628,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-nuxt-ready","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fon-nuxt-ready",{"title":706,"path":1630,"stem":1631,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fprefetch-components","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fprefetch-components",{"title":710,"path":1633,"stem":1634,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fpreload-components","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fpreload-components",{"title":714,"path":1636,"stem":1637,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fpreload-route-components","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fpreload-route-components",{"title":718,"path":1639,"stem":1640,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fprerender-routes","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fprerender-routes",{"title":722,"path":1642,"stem":1643,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Frefresh-cookie","docs\u002F4.x\u002F4.api\u002F3.utils\u002Frefresh-cookie",{"title":726,"path":1645,"stem":1646,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data","docs\u002F4.x\u002F4.api\u002F3.utils\u002Frefresh-nuxt-data",{"title":730,"path":1648,"stem":1649,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Freload-nuxt-app","docs\u002F4.x\u002F4.api\u002F3.utils\u002Freload-nuxt-app",{"title":734,"path":1651,"stem":1652,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fset-page-layout","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fset-page-layout",{"title":738,"path":1654,"stem":1655,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fset-response-status","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fset-response-status",{"title":742,"path":1657,"stem":1658,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fshow-error","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fshow-error",{"title":746,"path":1660,"stem":1661,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fupdate-app-config","docs\u002F4.x\u002F4.api\u002F3.utils\u002Fupdate-app-config",{"title":750,"titleTemplate":751,"icon":752,"path":1663,"stem":1664,"children":1665,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands","docs\u002F4.x\u002F4.api\u002F4.commands",[1666,1669,1672,1675,1678,1681,1684,1687,1690,1693,1696,1699,1702,1705,1708,1711],{"title":757,"path":1667,"stem":1668,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fadd","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fadd",{"title":761,"path":1670,"stem":1671,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fanalyze","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fanalyze",{"title":765,"path":1673,"stem":1674,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fbuild","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fbuild",{"title":769,"path":1676,"stem":1677,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fbuild-module","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fbuild-module",{"title":773,"path":1679,"stem":1680,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fcleanup","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fcleanup",{"title":777,"path":1682,"stem":1683,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fdev","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fdev",{"title":781,"path":1685,"stem":1686,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fdevtools","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fdevtools",{"title":785,"path":1688,"stem":1689,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fgenerate","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fgenerate",{"title":789,"path":1691,"stem":1692,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Finfo","docs\u002F4.x\u002F4.api\u002F4.commands\u002Finfo",{"title":793,"path":1694,"stem":1695,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Finit","docs\u002F4.x\u002F4.api\u002F4.commands\u002Finit",{"title":797,"path":1697,"stem":1698,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fmodule","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fmodule",{"title":801,"path":1700,"stem":1701,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fprepare","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fprepare",{"title":805,"path":1703,"stem":1704,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fpreview","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fpreview",{"title":809,"path":1706,"stem":1707,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Ftest","docs\u002F4.x\u002F4.api\u002F4.commands\u002Ftest",{"title":813,"path":1709,"stem":1710,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Ftypecheck","docs\u002F4.x\u002F4.api\u002F4.commands\u002Ftypecheck",{"title":817,"path":1712,"stem":1713,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fupgrade","docs\u002F4.x\u002F4.api\u002F4.commands\u002Fupgrade",{"title":415,"titleTemplate":821,"icon":822,"path":1715,"stem":1716,"children":1717,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit","docs\u002F4.x\u002F4.api\u002F5.kit",[1718,1721,1724,1727,1730,1733,1736,1739,1742,1745,1748,1751,1754,1757,1760,1763,1766,1769],{"title":276,"path":1719,"stem":1720,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fmodules","docs\u002F4.x\u002F4.api\u002F5.kit\u002F1.modules",{"title":403,"path":1722,"stem":1723,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fruntime-config","docs\u002F4.x\u002F4.api\u002F5.kit\u002F10.runtime-config",{"title":833,"path":1725,"stem":1726,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Ftemplates","docs\u002F4.x\u002F4.api\u002F5.kit\u002F10.templates",{"title":837,"path":1728,"stem":1729,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fnitro","docs\u002F4.x\u002F4.api\u002F5.kit\u002F11.nitro",{"title":841,"path":1731,"stem":1732,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fresolving","docs\u002F4.x\u002F4.api\u002F5.kit\u002F12.resolving",{"title":845,"path":1734,"stem":1735,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flogging","docs\u002F4.x\u002F4.api\u002F5.kit\u002F13.logging",{"title":849,"path":1737,"stem":1738,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fbuilder","docs\u002F4.x\u002F4.api\u002F5.kit\u002F14.builder",{"title":853,"path":1740,"stem":1741,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fexamples","docs\u002F4.x\u002F4.api\u002F5.kit\u002F15.examples",{"title":84,"path":1743,"stem":1744,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flayers","docs\u002F4.x\u002F4.api\u002F5.kit\u002F16.layers",{"title":860,"path":1746,"stem":1747,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fprogrammatic","docs\u002F4.x\u002F4.api\u002F5.kit\u002F2.programmatic",{"title":864,"path":1749,"stem":1750,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcompatibility","docs\u002F4.x\u002F4.api\u002F5.kit\u002F3.compatibility",{"title":268,"path":1752,"stem":1753,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fautoimports","docs\u002F4.x\u002F4.api\u002F5.kit\u002F4.autoimports",{"title":438,"path":1755,"stem":1756,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcomponents","docs\u002F4.x\u002F4.api\u002F5.kit\u002F5.components",{"title":874,"path":1758,"stem":1759,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcontext","docs\u002F4.x\u002F4.api\u002F5.kit\u002F6.context",{"title":878,"path":1761,"stem":1762,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fpages","docs\u002F4.x\u002F4.api\u002F5.kit\u002F7.pages",{"title":882,"path":1764,"stem":1765,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flayout","docs\u002F4.x\u002F4.api\u002F5.kit\u002F8.layout",{"title":886,"path":1767,"stem":1768,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fhead","docs\u002F4.x\u002F4.api\u002F5.kit\u002F9.head",{"title":890,"path":1770,"stem":1771,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fplugins","docs\u002F4.x\u002F4.api\u002F5.kit\u002F9.plugins",{"title":894,"titleTemplate":6,"icon":895,"path":1773,"stem":1774,"children":1775,"page":108},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced","docs\u002F4.x\u002F4.api\u002F6.advanced",[1776,1779],{"title":411,"path":1777,"stem":1778,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced\u002Fhooks","docs\u002F4.x\u002F4.api\u002F6.advanced\u002F1.hooks",{"title":903,"path":1780,"stem":1781,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced\u002Fimport-meta","docs\u002F4.x\u002F4.api\u002F6.advanced\u002F2.import-meta",{"title":907,"path":1783,"stem":1784,"titleTemplate":910,"icon":32},"\u002Fdocs\u002F4.x\u002Fapi\u002Fnuxt-config","docs\u002F4.x\u002F4.api\u002F6.nuxt-config",{"title":853,"titleTemplate":912,"icon":913,"path":1786,"stem":1787,"children":1788,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples","docs\u002F4.x\u002F4.examples",[1789,1792,1811,1824,1855],{"title":918,"path":1790,"stem":1791,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fhello-world","docs\u002F4.x\u002F4.examples\u002F0.hello-world",{"title":399,"path":1793,"stem":1794,"children":1795,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures","docs\u002F4.x\u002F4.examples\u002F1.features",[1796,1799,1802,1805,1808],{"title":926,"path":1797,"stem":1798,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Fauto-imports","docs\u002F4.x\u002F4.examples\u002F1.features\u002F1.auto-imports",{"title":64,"path":1800,"stem":1801,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Fdata-fetching","docs\u002F4.x\u002F4.examples\u002F1.features\u002F2.data-fetching",{"title":69,"path":1803,"stem":1804,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Fstate-management","docs\u002F4.x\u002F4.examples\u002F1.features\u002F3.state-management",{"title":936,"path":1806,"stem":1807,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Fmeta-tags","docs\u002F4.x\u002F4.examples\u002F1.features\u002F4.meta-tags",{"title":940,"path":1809,"stem":1810,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Ffeatures\u002Flayouts","docs\u002F4.x\u002F4.examples\u002F1.features\u002F5.layouts",{"title":49,"path":1812,"stem":1813,"children":1814,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples\u002Frouting","docs\u002F4.x\u002F4.examples\u002F2.routing",[1815,1818,1821],{"title":948,"path":1816,"stem":1817,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Frouting\u002Fmiddleware","docs\u002F4.x\u002F4.examples\u002F2.routing\u002Fmiddleware",{"title":878,"path":1819,"stem":1820,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Frouting\u002Fpages","docs\u002F4.x\u002F4.examples\u002F2.routing\u002Fpages",{"title":955,"path":1822,"stem":1823,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Frouting\u002Funiversal-router","docs\u002F4.x\u002F4.examples\u002F2.routing\u002Funiversal-router",{"title":894,"path":1825,"stem":1826,"children":1827,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced","docs\u002F4.x\u002F4.examples\u002F4.advanced",[1828,1831,1834,1837,1840,1843,1846,1849,1852],{"title":84,"path":1829,"stem":1830,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fconfig-extends","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fconfig-extends",{"title":74,"path":1832,"stem":1833,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Ferror-handling","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Ferror-handling",{"title":969,"path":1835,"stem":1836,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fjsx","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fjsx",{"title":973,"path":1838,"stem":1839,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Flocale","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Flocale",{"title":977,"path":1841,"stem":1842,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fmodule-extend-pages","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fmodule-extend-pages",{"title":981,"path":1844,"stem":1845,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fteleport","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fteleport",{"title":99,"path":1847,"stem":1848,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Ftesting","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Ftesting",{"title":523,"path":1850,"stem":1851,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fuse-cookie","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fuse-cookie",{"title":991,"path":1853,"stem":1854,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fadvanced\u002Fuse-custom-fetch-composable","docs\u002F4.x\u002F4.examples\u002F4.advanced\u002Fuse-custom-fetch-composable",{"title":995,"path":1856,"stem":1857,"children":1858,"page":108},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fexperimental","docs\u002F4.x\u002F4.examples\u002F7.experimental",[1859],{"title":1000,"path":1860,"stem":1861,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fexamples\u002Fexperimental\u002Fwasm","docs\u002F4.x\u002F4.examples\u002F7.experimental\u002Fwasm",{"title":1004,"titleTemplate":1005,"icon":1006,"path":1863,"stem":1864,"children":1865,"page":108},"\u002Fdocs\u002F4.x\u002Fcommunity","docs\u002F4.x\u002F5.community",[1866,1869,1872,1875,1878,1881],{"title":1011,"path":1867,"stem":1868,"titleTemplate":6,"icon":1014},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fgetting-help","docs\u002F4.x\u002F5.community\u002F2.getting-help",{"title":1016,"path":1870,"stem":1871,"titleTemplate":6,"icon":1019},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Freporting-bugs","docs\u002F4.x\u002F5.community\u002F3.reporting-bugs",{"title":1021,"path":1873,"stem":1874,"titleTemplate":6,"icon":1024},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fcontribution","docs\u002F4.x\u002F5.community\u002F4.contribution",{"title":1026,"path":1876,"stem":1877,"titleTemplate":6,"icon":1029},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fframework-contribution","docs\u002F4.x\u002F5.community\u002F5.framework-contribution",{"title":1031,"path":1879,"stem":1880,"titleTemplate":6,"icon":1034},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Froadmap","docs\u002F4.x\u002F5.community\u002F6.roadmap",{"title":1036,"path":1882,"stem":1883,"titleTemplate":6,"icon":1039},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fchangelog","docs\u002F4.x\u002F5.community\u002F7.changelog",{"title":1041,"titleTemplate":1042,"icon":1043,"path":1885,"stem":1886,"children":1887,"page":108},"\u002Fdocs\u002F4.x\u002Fbridge","docs\u002F4.x\u002F6.bridge",[1888,1891,1894,1897,1900,1903,1906,1909,1912,1915],{"title":1048,"path":1889,"stem":1890,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Foverview","docs\u002F4.x\u002F6.bridge\u002F1.overview",{"title":29,"path":1892,"stem":1893,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fconfiguration","docs\u002F4.x\u002F6.bridge\u002F10.configuration",{"title":280,"path":1895,"stem":1896,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Ftypescript","docs\u002F4.x\u002F6.bridge\u002F2.typescript",{"title":1058,"path":1898,"stem":1899,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fbridge-composition-api","docs\u002F4.x\u002F6.bridge\u002F3.bridge-composition-api",{"title":1062,"path":1901,"stem":1902,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fplugins-and-middleware","docs\u002F4.x\u002F6.bridge\u002F4.plugins-and-middleware",{"title":1066,"path":1904,"stem":1905,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fnuxt3-compatible-api","docs\u002F4.x\u002F6.bridge\u002F5.nuxt3-compatible-api",{"title":936,"path":1907,"stem":1908,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fmeta","docs\u002F4.x\u002F6.bridge\u002F6.meta",{"title":403,"path":1910,"stem":1911,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fruntime-config","docs\u002F4.x\u002F6.bridge\u002F7.runtime-config",{"title":837,"path":1913,"stem":1914,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fnitro","docs\u002F4.x\u002F6.bridge\u002F8.nitro",{"title":1079,"path":1916,"stem":1917,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fvite","docs\u002F4.x\u002F6.bridge\u002F9.vite",{"title":1083,"titleTemplate":1084,"icon":107,"path":1919,"stem":1920,"children":1921,"page":108},"\u002Fdocs\u002F4.x\u002Fmigration","docs\u002F4.x\u002F7.migration",[1922,1925,1928,1931,1934,1937,1940,1943,1946,1949,1952],{"title":1048,"path":1923,"stem":1924,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Foverview","docs\u002F4.x\u002F7.migration\u002F1.overview",{"title":1092,"path":1926,"stem":1927,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fbundling","docs\u002F4.x\u002F7.migration\u002F10.bundling",{"title":79,"path":1929,"stem":1930,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fserver","docs\u002F4.x\u002F7.migration\u002F11.server",{"title":29,"path":1932,"stem":1933,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fconfiguration","docs\u002F4.x\u002F7.migration\u002F2.configuration",{"title":276,"path":1935,"stem":1936,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fmodule-authors","docs\u002F4.x\u002F7.migration\u002F20.module-authors",{"title":926,"path":1938,"stem":1939,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fauto-imports","docs\u002F4.x\u002F7.migration\u002F3.auto-imports",{"title":936,"path":1941,"stem":1942,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fmeta","docs\u002F4.x\u002F7.migration\u002F4.meta",{"title":1062,"path":1944,"stem":1945,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fplugins-and-middleware","docs\u002F4.x\u002F7.migration\u002F5.plugins-and-middleware",{"title":1114,"path":1947,"stem":1948,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fpages-and-layouts","docs\u002F4.x\u002F7.migration\u002F6.pages-and-layouts",{"title":1118,"path":1950,"stem":1951,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fcomponent-options","docs\u002F4.x\u002F7.migration\u002F7.component-options",{"title":403,"path":1953,"stem":1954,"titleTemplate":6},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fruntime-config","docs\u002F4.x\u002F7.migration\u002F8.runtime-config",{"title":5,"titleTemplate":6,"icon":7,"path":1956,"stem":1957,"children":1958,"page":108},"\u002Fdocs\u002F5.x","docs\u002F5.x",[1959,2017,2107,2237,2607,2684,2706,2740],{"title":12,"titleTemplate":13,"icon":14,"path":1960,"stem":1961,"children":1962,"page":108},"\u002Fdocs\u002F5.x\u002Fgetting-started","docs\u002F5.x\u002F1.getting-started",[1963,1966,1969,1972,1975,1978,1981,1984,1987,1990,1993,1996,1999,2002,2005,2008,2011,2014],{"title":19,"path":1964,"stem":1965,"titleTemplate":6,"icon":22},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fintroduction","docs\u002F5.x\u002F1.getting-started\u002F01.introduction",{"title":24,"path":1967,"stem":1968,"titleTemplate":6,"icon":27},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Finstallation","docs\u002F5.x\u002F1.getting-started\u002F02.installation",{"title":29,"path":1970,"stem":1971,"titleTemplate":6,"icon":32},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fconfiguration","docs\u002F5.x\u002F1.getting-started\u002F03.configuration",{"title":34,"path":1973,"stem":1974,"titleTemplate":6,"icon":37},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fviews","docs\u002F5.x\u002F1.getting-started\u002F04.views",{"title":39,"path":1976,"stem":1977,"titleTemplate":6,"icon":42},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fassets","docs\u002F5.x\u002F1.getting-started\u002F05.assets",{"title":44,"path":1979,"stem":1980,"titleTemplate":6,"icon":47},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fstyling","docs\u002F5.x\u002F1.getting-started\u002F06.styling",{"title":49,"path":1982,"stem":1983,"titleTemplate":6,"icon":52},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Frouting","docs\u002F5.x\u002F1.getting-started\u002F07.routing",{"title":54,"path":1985,"stem":1986,"titleTemplate":6,"icon":57},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fseo-meta","docs\u002F5.x\u002F1.getting-started\u002F08.seo-meta",{"title":59,"path":1988,"stem":1989,"titleTemplate":6,"icon":62},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ftransitions","docs\u002F5.x\u002F1.getting-started\u002F09.transitions",{"title":64,"path":1991,"stem":1992,"titleTemplate":6,"icon":67},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fdata-fetching","docs\u002F5.x\u002F1.getting-started\u002F10.data-fetching",{"title":69,"path":1994,"stem":1995,"titleTemplate":6,"icon":72},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fstate-management","docs\u002F5.x\u002F1.getting-started\u002F11.state-management",{"title":74,"path":1997,"stem":1998,"titleTemplate":6,"icon":77},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ferror-handling","docs\u002F5.x\u002F1.getting-started\u002F12.error-handling",{"title":79,"path":2000,"stem":2001,"titleTemplate":6,"icon":82},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fserver","docs\u002F5.x\u002F1.getting-started\u002F13.server",{"title":84,"path":2003,"stem":2004,"titleTemplate":6,"icon":87},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Flayers","docs\u002F5.x\u002F1.getting-started\u002F14.layers",{"title":89,"path":2006,"stem":2007,"titleTemplate":6,"icon":92},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fprerendering","docs\u002F5.x\u002F1.getting-started\u002F15.prerendering",{"title":94,"path":2009,"stem":2010,"titleTemplate":6,"icon":97},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fdeployment","docs\u002F5.x\u002F1.getting-started\u002F16.deployment",{"title":99,"path":2012,"stem":2013,"titleTemplate":6,"icon":102},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ftesting","docs\u002F5.x\u002F1.getting-started\u002F17.testing",{"title":104,"path":2015,"stem":2016,"titleTemplate":6,"icon":107},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fupgrade","docs\u002F5.x\u002F1.getting-started\u002F18.upgrade",{"title":110,"titleTemplate":111,"icon":112,"path":2018,"stem":2019,"children":2020,"page":108},"\u002Fdocs\u002F5.x\u002Fdirectory-structure","docs\u002F5.x\u002F2.directory-structure",[2021,2024,2027,2065,2068,2071,2074,2077,2080,2083,2086,2089,2092,2095,2098,2101,2104],{"title":117,"path":2022,"stem":2023,"titleTemplate":6,"icon":120},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxt","docs\u002F5.x\u002F2.directory-structure\u002F0.nuxt",{"title":122,"path":2025,"stem":2026,"titleTemplate":6,"icon":125},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Foutput","docs\u002F5.x\u002F2.directory-structure\u002F0.output",{"title":1197,"titleTemplate":111,"head":2028,"defaultOpen":1200,"icon":1201,"path":2029,"stem":2030,"children":2031,"page":108},{"title":1199},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp","docs\u002F5.x\u002F2.directory-structure\u002F1.app",[2032,2035,2038,2041,2044,2047,2050,2053,2056,2059,2062],{"title":127,"path":2033,"stem":2034,"titleTemplate":6,"icon":130},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fassets","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.assets",{"title":132,"path":2036,"stem":2037,"titleTemplate":6,"icon":135},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fcomponents","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.components",{"title":137,"path":2039,"stem":2040,"titleTemplate":6,"icon":140},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fcomposables","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.composables",{"title":152,"path":2042,"stem":2043,"titleTemplate":6,"icon":155},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Flayouts","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.layouts",{"title":157,"path":2045,"stem":2046,"titleTemplate":6,"icon":160},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fmiddleware","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.middleware",{"title":171,"path":2048,"stem":2049,"titleTemplate":6,"icon":155},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fpages","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.pages",{"title":175,"path":2051,"stem":2052,"titleTemplate":6,"icon":178},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fplugins","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.plugins",{"title":195,"path":2054,"stem":2055,"titleTemplate":6,"icon":198},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Futils","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F1.utils",{"title":219,"path":2057,"stem":2058,"titleTemplate":6,"icon":222},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fapp","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F3.app",{"title":224,"path":2060,"stem":2061,"titleTemplate":6,"icon":227},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fapp-config","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F3.app-config",{"title":229,"path":2063,"stem":2064,"titleTemplate":6,"icon":222},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Ferror","docs\u002F5.x\u002F2.directory-structure\u002F1.app\u002F3.error",{"title":142,"path":2066,"stem":2067,"titleTemplate":6,"icon":145},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fcontent","docs\u002F5.x\u002F2.directory-structure\u002F1.content",{"title":147,"path":2069,"stem":2070,"titleTemplate":6,"icon":150},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Flayers","docs\u002F5.x\u002F2.directory-structure\u002F1.layers",{"title":162,"path":2072,"stem":2073,"titleTemplate":6,"icon":150},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fmodules","docs\u002F5.x\u002F2.directory-structure\u002F1.modules",{"title":166,"path":2075,"stem":2076,"titleTemplate":6,"icon":169},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnode_modules","docs\u002F5.x\u002F2.directory-structure\u002F1.node_modules",{"title":180,"path":2078,"stem":2079,"titleTemplate":6,"icon":183},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fpublic","docs\u002F5.x\u002F2.directory-structure\u002F1.public",{"title":185,"path":2081,"stem":2082,"titleTemplate":6,"icon":188},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fserver","docs\u002F5.x\u002F2.directory-structure\u002F1.server",{"title":190,"path":2084,"stem":2085,"titleTemplate":6,"icon":193},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fshared","docs\u002F5.x\u002F2.directory-structure\u002F1.shared",{"title":200,"path":2087,"stem":2088,"titleTemplate":6,"icon":203},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fenv","docs\u002F5.x\u002F2.directory-structure\u002F2.env",{"title":205,"path":2090,"stem":2091,"titleTemplate":6,"icon":208},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fgitignore","docs\u002F5.x\u002F2.directory-structure\u002F2.gitignore",{"title":210,"path":2093,"stem":2094,"titleTemplate":6,"icon":213},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxtignore","docs\u002F5.x\u002F2.directory-structure\u002F2.nuxtignore",{"title":215,"path":2096,"stem":2097,"titleTemplate":6,"icon":213},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxtrc","docs\u002F5.x\u002F2.directory-structure\u002F2.nuxtrc",{"title":233,"path":2099,"stem":2100,"titleTemplate":6,"icon":213},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxt-config","docs\u002F5.x\u002F2.directory-structure\u002F3.nuxt-config",{"title":237,"path":2102,"stem":2103,"titleTemplate":6,"icon":240},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fpackage","docs\u002F5.x\u002F2.directory-structure\u002F3.package",{"title":242,"path":2105,"stem":2106,"titleTemplate":6,"icon":245},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Ftsconfig","docs\u002F5.x\u002F2.directory-structure\u002F3.tsconfig",{"title":247,"titleTemplate":6,"icon":248,"path":2108,"stem":2109,"children":2110,"page":108},"\u002Fdocs\u002F5.x\u002Fguide","docs\u002F5.x\u002F3.guide",[2111,2136,2149,2159,2187,2203],{"title":253,"titleTemplate":254,"icon":255,"path":2112,"stem":2113,"children":2114,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts","docs\u002F5.x\u002F3.guide\u002F1.concepts",[2115,2118,2121,2124,2127,2130,2133],{"title":260,"path":2116,"stem":2117,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Frendering","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F1.rendering",{"title":264,"path":2119,"stem":2120,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F2.nuxt-lifecycle",{"title":268,"path":2122,"stem":2123,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fauto-imports","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F3.auto-imports",{"title":272,"path":2125,"stem":2126,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fserver-engine","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F4.server-engine",{"title":276,"path":2128,"stem":2129,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fmodules","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F5.modules",{"title":280,"path":2131,"stem":2132,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Ftypescript","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F8.typescript",{"title":284,"path":2134,"stem":2135,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fcode-style","docs\u002F5.x\u002F3.guide\u002F1.concepts\u002F9.code-style",{"title":288,"titleTemplate":289,"icon":290,"path":2137,"stem":2138,"children":2139,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices","docs\u002F5.x\u002F3.guide\u002F2.best-practices",[2140,2143,2146],{"title":1314,"path":2141,"stem":2142,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fhydration","docs\u002F5.x\u002F3.guide\u002F2.best-practices\u002Fhydration",{"title":299,"path":2144,"stem":2145,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fperformance","docs\u002F5.x\u002F3.guide\u002F2.best-practices\u002Fperformance",{"title":303,"path":2147,"stem":2148,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fplugins","docs\u002F5.x\u002F3.guide\u002F2.best-practices\u002Fplugins",{"title":307,"titleTemplate":308,"icon":309,"path":2150,"stem":2151,"children":2152,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fai","docs\u002F5.x\u002F3.guide\u002F3.ai",[2153,2156],{"title":314,"path":2154,"stem":2155,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fai\u002Fmcp","docs\u002F5.x\u002F3.guide\u002F3.ai\u002F1.mcp",{"title":318,"path":2157,"stem":2158,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fai\u002Fllms-txt","docs\u002F5.x\u002F3.guide\u002F3.ai\u002F2.llms-txt",{"title":322,"titleTemplate":323,"icon":324,"path":2160,"stem":2161,"children":2162,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules","docs\u002F5.x\u002F3.guide\u002F4.modules",[2163,2166,2169,2172,2175,2178,2181,2184],{"title":329,"path":2164,"stem":2165,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fgetting-started","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F1.getting-started",{"title":333,"path":2167,"stem":2168,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F2.module-anatomy",{"title":337,"path":2170,"stem":2171,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Frecipes-basics","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F3.recipes-basics",{"title":341,"path":2173,"stem":2174,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F4.module-dependencies",{"title":345,"path":2176,"stem":2177,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Frecipes-advanced","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F5.recipes-advanced",{"title":349,"path":2179,"stem":2180,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Ftesting","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F6.testing",{"title":353,"path":2182,"stem":2183,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fbest-practices","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F7.best-practices",{"title":357,"path":2185,"stem":2186,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fecosystem","docs\u002F5.x\u002F3.guide\u002F4.modules\u002F8.ecosystem",{"title":361,"titleTemplate":362,"icon":363,"path":2188,"stem":2189,"children":2190,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes","docs\u002F5.x\u002F3.guide\u002F5.recipes",[2191,2194,2197,2200],{"title":368,"path":2192,"stem":2193,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fcustom-routing","docs\u002F5.x\u002F3.guide\u002F5.recipes\u002F1.custom-routing",{"title":372,"path":2195,"stem":2196,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fvite-plugin","docs\u002F5.x\u002F3.guide\u002F5.recipes\u002F2.vite-plugin",{"title":376,"path":2198,"stem":2199,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch","docs\u002F5.x\u002F3.guide\u002F5.recipes\u002F3.custom-usefetch",{"title":380,"path":2201,"stem":2202,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fsessions-and-authentication","docs\u002F5.x\u002F3.guide\u002F5.recipes\u002F4.sessions-and-authentication",{"title":384,"titleTemplate":385,"icon":386,"path":2204,"stem":2205,"children":2206,"page":108},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further","docs\u002F5.x\u002F3.guide\u002F6.going-further",[2207,2210,2213,2216,2219,2222,2225,2228,2231,2234],{"title":391,"path":2208,"stem":2209,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fevents","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F1.events",{"title":395,"path":2211,"stem":2212,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F1.experimental-features",{"title":399,"path":2214,"stem":2215,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Ffeatures","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F1.features",{"title":403,"path":2217,"stem":2218,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fruntime-config","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F10.runtime-config",{"title":407,"path":2220,"stem":2221,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F11.nightly-release-channel",{"title":411,"path":2223,"stem":2224,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fhooks","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F2.hooks",{"title":415,"path":2226,"stem":2227,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fkit","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F4.kit",{"title":419,"path":2229,"stem":2230,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F6.nuxt-app",{"title":423,"path":2232,"stem":2233,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Flayers","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F7.layers",{"title":427,"path":2235,"stem":2236,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fdebugging","docs\u002F5.x\u002F3.guide\u002F6.going-further\u002F9.debugging",{"title":431,"titleTemplate":432,"icon":433,"path":2238,"stem":2239,"children":2240,"page":108},"\u002Fdocs\u002F5.x\u002Fapi","docs\u002F5.x\u002F4.api",[2241,2293,2393,2484,2536,2594,2604],{"title":438,"titleTemplate":439,"icon":324,"path":2242,"stem":2243,"children":2244,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents","docs\u002F5.x\u002F4.api\u002F1.components",[2245,2248,2251,2254,2257,2260,2263,2266,2269,2272,2275,2278,2281,2284,2287,2290],{"title":444,"path":2246,"stem":2247,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fclient-only","docs\u002F5.x\u002F4.api\u002F1.components\u002F1.client-only",{"title":448,"path":2249,"stem":2250,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fdev-only","docs\u002F5.x\u002F4.api\u002F1.components\u002F1.dev-only",{"title":452,"path":2252,"stem":2253,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback","docs\u002F5.x\u002F4.api\u002F1.components\u002F1.nuxt-client-fallback",{"title":456,"path":2255,"stem":2256,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture","docs\u002F5.x\u002F4.api\u002F1.components\u002F10.nuxt-picture",{"title":460,"path":2258,"stem":2259,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fteleports","docs\u002F5.x\u002F4.api\u002F1.components\u002F11.teleports",{"title":464,"path":2261,"stem":2262,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer","docs\u002F5.x\u002F4.api\u002F1.components\u002F12.nuxt-route-announcer",{"title":468,"path":2264,"stem":2265,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-time","docs\u002F5.x\u002F4.api\u002F1.components\u002F13.nuxt-time",{"title":1441,"path":2267,"stem":2268,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-announcer","docs\u002F5.x\u002F4.api\u002F1.components\u002F14.nuxt-announcer",{"title":472,"path":2270,"stem":2271,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-page","docs\u002F5.x\u002F4.api\u002F1.components\u002F2.nuxt-page",{"title":476,"path":2273,"stem":2274,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout","docs\u002F5.x\u002F4.api\u002F1.components\u002F3.nuxt-layout",{"title":480,"path":2276,"stem":2277,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-link","docs\u002F5.x\u002F4.api\u002F1.components\u002F4.nuxt-link",{"title":484,"path":2279,"stem":2280,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator","docs\u002F5.x\u002F4.api\u002F1.components\u002F5.nuxt-loading-indicator",{"title":488,"path":2282,"stem":2283,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary","docs\u002F5.x\u002F4.api\u002F1.components\u002F6.nuxt-error-boundary",{"title":492,"path":2285,"stem":2286,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome","docs\u002F5.x\u002F4.api\u002F1.components\u002F7.nuxt-welcome",{"title":496,"path":2288,"stem":2289,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-island","docs\u002F5.x\u002F4.api\u002F1.components\u002F8.nuxt-island",{"title":500,"path":2291,"stem":2292,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-img","docs\u002F5.x\u002F4.api\u002F1.components\u002F9.nuxt-img",{"title":504,"titleTemplate":505,"icon":506,"path":2294,"stem":2295,"children":2296,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables","docs\u002F5.x\u002F4.api\u002F2.composables",[2297,2300,2303,2306,2309,2312,2315,2318,2321,2324,2327,2330,2333,2336,2339,2342,2345,2348,2351,2354,2357,2360,2363,2366,2369,2372,2375,2378,2381,2384,2387,2390],{"title":1473,"path":2298,"stem":2299,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fcreate-use-async-data","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fcreate-use-async-data",{"title":1477,"path":2301,"stem":2302,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fcreate-use-fetch","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fcreate-use-fetch",{"title":511,"path":2304,"stem":2305,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fon-prehydrate",{"title":1484,"path":2307,"stem":2308,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-announcer","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-announcer",{"title":515,"path":2310,"stem":2311,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-app-config","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-app-config",{"title":519,"path":2313,"stem":2314,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-async-data","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-async-data",{"title":523,"path":2316,"stem":2317,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-cookie","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-cookie",{"title":527,"path":2319,"stem":2320,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-error","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-error",{"title":531,"path":2322,"stem":2323,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-fetch","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-fetch",{"title":535,"path":2325,"stem":2326,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-head","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-head",{"title":539,"path":2328,"stem":2329,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-head-safe",{"title":543,"path":2331,"stem":2332,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-hydration","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-hydration",{"title":547,"path":2334,"stem":2335,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-lazy-async-data",{"title":551,"path":2337,"stem":2338,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-lazy-fetch",{"title":555,"path":2340,"stem":2341,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-loading-indicator",{"title":559,"path":2343,"stem":2344,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-app",{"title":563,"path":2346,"stem":2347,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-nuxt-data",{"title":567,"path":2349,"stem":2350,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-preview-mode",{"title":571,"path":2352,"stem":2353,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-event","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-event",{"title":575,"path":2355,"stem":2356,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-fetch",{"title":579,"path":2358,"stem":2359,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-header","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-header",{"title":583,"path":2361,"stem":2362,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-headers",{"title":587,"path":2364,"stem":2365,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-url","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-request-url",{"title":591,"path":2367,"stem":2368,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-response-header","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-response-header",{"title":595,"path":2370,"stem":2371,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-route","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-route",{"title":599,"path":2373,"stem":2374,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-route-announcer",{"title":603,"path":2376,"stem":2377,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-router","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-router",{"title":607,"path":2379,"stem":2380,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-runtime-config",{"title":611,"path":2382,"stem":2383,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-runtime-hook",{"title":615,"path":2385,"stem":2386,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-seo-meta",{"title":619,"path":2388,"stem":2389,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-server-seo-meta",{"title":623,"path":2391,"stem":2392,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-state","docs\u002F5.x\u002F4.api\u002F2.composables\u002Fuse-state",{"title":627,"titleTemplate":628,"icon":629,"path":2394,"stem":2395,"children":2396,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils","docs\u002F5.x\u002F4.api\u002F3.utils",[2397,2400,2403,2406,2409,2412,2415,2418,2421,2424,2427,2430,2433,2436,2439,2442,2445,2448,2451,2454,2457,2460,2463,2466,2469,2472,2475,2478,2481],{"title":634,"path":2398,"stem":2399,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdollarfetch","docs\u002F5.x\u002F4.api\u002F3.utils\u002F$fetch",{"title":638,"path":2401,"stem":2402,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fabort-navigation","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fabort-navigation",{"title":642,"path":2404,"stem":2405,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fadd-route-middleware","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fadd-route-middleware",{"title":646,"path":2407,"stem":2408,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fcall-once","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fcall-once",{"title":650,"path":2410,"stem":2411,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-error","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fclear-error",{"title":654,"path":2413,"stem":2414,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-nuxt-data","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-data",{"title":658,"path":2416,"stem":2417,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-nuxt-state","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fclear-nuxt-state",{"title":662,"path":2419,"stem":2420,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fcreate-error","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fcreate-error",{"title":666,"path":2422,"stem":2423,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-lazy-hydration-component",{"title":670,"path":2425,"stem":2426,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-component",{"title":674,"path":2428,"stem":2429,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-plugin",{"title":678,"path":2431,"stem":2432,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-nuxt-route-middleware",{"title":682,"path":2434,"stem":2435,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-page-meta","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-page-meta",{"title":686,"path":2437,"stem":2438,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-route-rules","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fdefine-route-rules",{"title":690,"path":2440,"stem":2441,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fnavigate-to","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fnavigate-to",{"title":694,"path":2443,"stem":2444,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-before-route-leave","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fon-before-route-leave",{"title":698,"path":2446,"stem":2447,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-before-route-update","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fon-before-route-update",{"title":702,"path":2449,"stem":2450,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-nuxt-ready","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fon-nuxt-ready",{"title":706,"path":2452,"stem":2453,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fprefetch-components","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fprefetch-components",{"title":710,"path":2455,"stem":2456,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fpreload-components","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fpreload-components",{"title":714,"path":2458,"stem":2459,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fpreload-route-components","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fpreload-route-components",{"title":718,"path":2461,"stem":2462,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fprerender-routes","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fprerender-routes",{"title":722,"path":2464,"stem":2465,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Frefresh-cookie","docs\u002F5.x\u002F4.api\u002F3.utils\u002Frefresh-cookie",{"title":726,"path":2467,"stem":2468,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data","docs\u002F5.x\u002F4.api\u002F3.utils\u002Frefresh-nuxt-data",{"title":730,"path":2470,"stem":2471,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Freload-nuxt-app","docs\u002F5.x\u002F4.api\u002F3.utils\u002Freload-nuxt-app",{"title":734,"path":2473,"stem":2474,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fset-page-layout","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fset-page-layout",{"title":738,"path":2476,"stem":2477,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fset-response-status","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fset-response-status",{"title":742,"path":2479,"stem":2480,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fshow-error","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fshow-error",{"title":746,"path":2482,"stem":2483,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fupdate-app-config","docs\u002F5.x\u002F4.api\u002F3.utils\u002Fupdate-app-config",{"title":750,"titleTemplate":751,"icon":752,"path":2485,"stem":2486,"children":2487,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands","docs\u002F5.x\u002F4.api\u002F4.commands",[2488,2491,2494,2497,2500,2503,2506,2509,2512,2515,2518,2521,2524,2527,2530,2533],{"title":757,"path":2489,"stem":2490,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fadd","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fadd",{"title":761,"path":2492,"stem":2493,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fanalyze","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fanalyze",{"title":765,"path":2495,"stem":2496,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fbuild","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fbuild",{"title":769,"path":2498,"stem":2499,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fbuild-module","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fbuild-module",{"title":773,"path":2501,"stem":2502,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fcleanup","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fcleanup",{"title":777,"path":2504,"stem":2505,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fdev","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fdev",{"title":781,"path":2507,"stem":2508,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fdevtools","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fdevtools",{"title":785,"path":2510,"stem":2511,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fgenerate","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fgenerate",{"title":789,"path":2513,"stem":2514,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Finfo","docs\u002F5.x\u002F4.api\u002F4.commands\u002Finfo",{"title":793,"path":2516,"stem":2517,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Finit","docs\u002F5.x\u002F4.api\u002F4.commands\u002Finit",{"title":797,"path":2519,"stem":2520,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fmodule","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fmodule",{"title":801,"path":2522,"stem":2523,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fprepare","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fprepare",{"title":805,"path":2525,"stem":2526,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fpreview","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fpreview",{"title":809,"path":2528,"stem":2529,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Ftest","docs\u002F5.x\u002F4.api\u002F4.commands\u002Ftest",{"title":813,"path":2531,"stem":2532,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Ftypecheck","docs\u002F5.x\u002F4.api\u002F4.commands\u002Ftypecheck",{"title":817,"path":2534,"stem":2535,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fupgrade","docs\u002F5.x\u002F4.api\u002F4.commands\u002Fupgrade",{"title":415,"titleTemplate":821,"icon":822,"path":2537,"stem":2538,"children":2539,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit","docs\u002F5.x\u002F4.api\u002F5.kit",[2540,2543,2546,2549,2552,2555,2558,2561,2564,2567,2570,2573,2576,2579,2582,2585,2588,2591],{"title":276,"path":2541,"stem":2542,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fmodules","docs\u002F5.x\u002F4.api\u002F5.kit\u002F1.modules",{"title":403,"path":2544,"stem":2545,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fruntime-config","docs\u002F5.x\u002F4.api\u002F5.kit\u002F10.runtime-config",{"title":833,"path":2547,"stem":2548,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Ftemplates","docs\u002F5.x\u002F4.api\u002F5.kit\u002F10.templates",{"title":837,"path":2550,"stem":2551,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fnitro","docs\u002F5.x\u002F4.api\u002F5.kit\u002F11.nitro",{"title":841,"path":2553,"stem":2554,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fresolving","docs\u002F5.x\u002F4.api\u002F5.kit\u002F12.resolving",{"title":845,"path":2556,"stem":2557,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flogging","docs\u002F5.x\u002F4.api\u002F5.kit\u002F13.logging",{"title":849,"path":2559,"stem":2560,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fbuilder","docs\u002F5.x\u002F4.api\u002F5.kit\u002F14.builder",{"title":853,"path":2562,"stem":2563,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fexamples","docs\u002F5.x\u002F4.api\u002F5.kit\u002F15.examples",{"title":84,"path":2565,"stem":2566,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flayers","docs\u002F5.x\u002F4.api\u002F5.kit\u002F16.layers",{"title":860,"path":2568,"stem":2569,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fprogrammatic","docs\u002F5.x\u002F4.api\u002F5.kit\u002F2.programmatic",{"title":864,"path":2571,"stem":2572,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcompatibility","docs\u002F5.x\u002F4.api\u002F5.kit\u002F3.compatibility",{"title":268,"path":2574,"stem":2575,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fautoimports","docs\u002F5.x\u002F4.api\u002F5.kit\u002F4.autoimports",{"title":438,"path":2577,"stem":2578,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcomponents","docs\u002F5.x\u002F4.api\u002F5.kit\u002F5.components",{"title":874,"path":2580,"stem":2581,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcontext","docs\u002F5.x\u002F4.api\u002F5.kit\u002F6.context",{"title":878,"path":2583,"stem":2584,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fpages","docs\u002F5.x\u002F4.api\u002F5.kit\u002F7.pages",{"title":882,"path":2586,"stem":2587,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flayout","docs\u002F5.x\u002F4.api\u002F5.kit\u002F8.layout",{"title":886,"path":2589,"stem":2590,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fhead","docs\u002F5.x\u002F4.api\u002F5.kit\u002F9.head",{"title":890,"path":2592,"stem":2593,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fplugins","docs\u002F5.x\u002F4.api\u002F5.kit\u002F9.plugins",{"title":894,"titleTemplate":6,"icon":895,"path":2595,"stem":2596,"children":2597,"page":108},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced","docs\u002F5.x\u002F4.api\u002F6.advanced",[2598,2601],{"title":411,"path":2599,"stem":2600,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced\u002Fhooks","docs\u002F5.x\u002F4.api\u002F6.advanced\u002F1.hooks",{"title":903,"path":2602,"stem":2603,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced\u002Fimport-meta","docs\u002F5.x\u002F4.api\u002F6.advanced\u002F2.import-meta",{"title":907,"path":2605,"stem":2606,"titleTemplate":910,"icon":32},"\u002Fdocs\u002F5.x\u002Fapi\u002Fnuxt-config","docs\u002F5.x\u002F4.api\u002F6.nuxt-config",{"title":853,"titleTemplate":912,"icon":913,"path":2608,"stem":2609,"children":2610,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples","docs\u002F5.x\u002F4.examples",[2611,2614,2633,2646,2677],{"title":918,"path":2612,"stem":2613,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fhello-world","docs\u002F5.x\u002F4.examples\u002F0.hello-world",{"title":399,"path":2615,"stem":2616,"children":2617,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures","docs\u002F5.x\u002F4.examples\u002F1.features",[2618,2621,2624,2627,2630],{"title":926,"path":2619,"stem":2620,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Fauto-imports","docs\u002F5.x\u002F4.examples\u002F1.features\u002F1.auto-imports",{"title":64,"path":2622,"stem":2623,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Fdata-fetching","docs\u002F5.x\u002F4.examples\u002F1.features\u002F2.data-fetching",{"title":69,"path":2625,"stem":2626,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Fstate-management","docs\u002F5.x\u002F4.examples\u002F1.features\u002F3.state-management",{"title":936,"path":2628,"stem":2629,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Fmeta-tags","docs\u002F5.x\u002F4.examples\u002F1.features\u002F4.meta-tags",{"title":940,"path":2631,"stem":2632,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Ffeatures\u002Flayouts","docs\u002F5.x\u002F4.examples\u002F1.features\u002F5.layouts",{"title":49,"path":2634,"stem":2635,"children":2636,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples\u002Frouting","docs\u002F5.x\u002F4.examples\u002F2.routing",[2637,2640,2643],{"title":948,"path":2638,"stem":2639,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Frouting\u002Fmiddleware","docs\u002F5.x\u002F4.examples\u002F2.routing\u002Fmiddleware",{"title":878,"path":2641,"stem":2642,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Frouting\u002Fpages","docs\u002F5.x\u002F4.examples\u002F2.routing\u002Fpages",{"title":955,"path":2644,"stem":2645,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Frouting\u002Funiversal-router","docs\u002F5.x\u002F4.examples\u002F2.routing\u002Funiversal-router",{"title":894,"path":2647,"stem":2648,"children":2649,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced","docs\u002F5.x\u002F4.examples\u002F4.advanced",[2650,2653,2656,2659,2662,2665,2668,2671,2674],{"title":84,"path":2651,"stem":2652,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fconfig-extends","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fconfig-extends",{"title":74,"path":2654,"stem":2655,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Ferror-handling","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Ferror-handling",{"title":969,"path":2657,"stem":2658,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fjsx","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fjsx",{"title":973,"path":2660,"stem":2661,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Flocale","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Flocale",{"title":977,"path":2663,"stem":2664,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fmodule-extend-pages","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fmodule-extend-pages",{"title":981,"path":2666,"stem":2667,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fteleport","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fteleport",{"title":99,"path":2669,"stem":2670,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Ftesting","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Ftesting",{"title":523,"path":2672,"stem":2673,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fuse-cookie","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fuse-cookie",{"title":991,"path":2675,"stem":2676,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fadvanced\u002Fuse-custom-fetch-composable","docs\u002F5.x\u002F4.examples\u002F4.advanced\u002Fuse-custom-fetch-composable",{"title":995,"path":2678,"stem":2679,"children":2680,"page":108},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fexperimental","docs\u002F5.x\u002F4.examples\u002F7.experimental",[2681],{"title":1000,"path":2682,"stem":2683,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fexamples\u002Fexperimental\u002Fwasm","docs\u002F5.x\u002F4.examples\u002F7.experimental\u002Fwasm",{"title":1004,"titleTemplate":1005,"icon":1006,"path":2685,"stem":2686,"children":2687,"page":108},"\u002Fdocs\u002F5.x\u002Fcommunity","docs\u002F5.x\u002F5.community",[2688,2691,2694,2697,2700,2703],{"title":1011,"path":2689,"stem":2690,"titleTemplate":6,"icon":1014},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fgetting-help","docs\u002F5.x\u002F5.community\u002F2.getting-help",{"title":1016,"path":2692,"stem":2693,"titleTemplate":6,"icon":1019},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Freporting-bugs","docs\u002F5.x\u002F5.community\u002F3.reporting-bugs",{"title":1021,"path":2695,"stem":2696,"titleTemplate":6,"icon":1024},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fcontribution","docs\u002F5.x\u002F5.community\u002F4.contribution",{"title":1026,"path":2698,"stem":2699,"titleTemplate":6,"icon":1029},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fframework-contribution","docs\u002F5.x\u002F5.community\u002F5.framework-contribution",{"title":1031,"path":2701,"stem":2702,"titleTemplate":6,"icon":1034},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Froadmap","docs\u002F5.x\u002F5.community\u002F6.roadmap",{"title":1036,"path":2704,"stem":2705,"titleTemplate":6,"icon":1039},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fchangelog","docs\u002F5.x\u002F5.community\u002F7.changelog",{"title":1041,"titleTemplate":1042,"icon":1043,"path":2707,"stem":2708,"children":2709,"page":108},"\u002Fdocs\u002F5.x\u002Fbridge","docs\u002F5.x\u002F6.bridge",[2710,2713,2716,2719,2722,2725,2728,2731,2734,2737],{"title":1048,"path":2711,"stem":2712,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Foverview","docs\u002F5.x\u002F6.bridge\u002F1.overview",{"title":29,"path":2714,"stem":2715,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fconfiguration","docs\u002F5.x\u002F6.bridge\u002F10.configuration",{"title":280,"path":2717,"stem":2718,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Ftypescript","docs\u002F5.x\u002F6.bridge\u002F2.typescript",{"title":1058,"path":2720,"stem":2721,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fbridge-composition-api","docs\u002F5.x\u002F6.bridge\u002F3.bridge-composition-api",{"title":1062,"path":2723,"stem":2724,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fplugins-and-middleware","docs\u002F5.x\u002F6.bridge\u002F4.plugins-and-middleware",{"title":1066,"path":2726,"stem":2727,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fnuxt3-compatible-api","docs\u002F5.x\u002F6.bridge\u002F5.nuxt3-compatible-api",{"title":936,"path":2729,"stem":2730,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fmeta","docs\u002F5.x\u002F6.bridge\u002F6.meta",{"title":403,"path":2732,"stem":2733,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fruntime-config","docs\u002F5.x\u002F6.bridge\u002F7.runtime-config",{"title":837,"path":2735,"stem":2736,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fnitro","docs\u002F5.x\u002F6.bridge\u002F8.nitro",{"title":1079,"path":2738,"stem":2739,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fvite","docs\u002F5.x\u002F6.bridge\u002F9.vite",{"title":1083,"titleTemplate":1084,"icon":107,"path":2741,"stem":2742,"children":2743,"page":108},"\u002Fdocs\u002F5.x\u002Fmigration","docs\u002F5.x\u002F7.migration",[2744,2747,2750,2753,2756,2759,2762,2765,2768,2771,2774],{"title":1048,"path":2745,"stem":2746,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Foverview","docs\u002F5.x\u002F7.migration\u002F1.overview",{"title":1092,"path":2748,"stem":2749,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fbundling","docs\u002F5.x\u002F7.migration\u002F10.bundling",{"title":79,"path":2751,"stem":2752,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fserver","docs\u002F5.x\u002F7.migration\u002F11.server",{"title":29,"path":2754,"stem":2755,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fconfiguration","docs\u002F5.x\u002F7.migration\u002F2.configuration",{"title":276,"path":2757,"stem":2758,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fmodule-authors","docs\u002F5.x\u002F7.migration\u002F20.module-authors",{"title":926,"path":2760,"stem":2761,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fauto-imports","docs\u002F5.x\u002F7.migration\u002F3.auto-imports",{"title":936,"path":2763,"stem":2764,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fmeta","docs\u002F5.x\u002F7.migration\u002F4.meta",{"title":1062,"path":2766,"stem":2767,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fplugins-and-middleware","docs\u002F5.x\u002F7.migration\u002F5.plugins-and-middleware",{"title":1114,"path":2769,"stem":2770,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fpages-and-layouts","docs\u002F5.x\u002F7.migration\u002F6.pages-and-layouts",{"title":1118,"path":2772,"stem":2773,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fcomponent-options","docs\u002F5.x\u002F7.migration\u002F7.component-options",{"title":403,"path":2775,"stem":2776,"titleTemplate":6},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fruntime-config","docs\u002F5.x\u002F7.migration\u002F8.runtime-config",{"title":2778,"icon":2779,"path":2780,"stem":2781,"children":2782,"page":108},"Blog","i-lucide-newspaper","\u002Fblog","blog",[2783,2787,2791,2795,2799,2803,2807,2811,2815,2819,2823,2827,2831,2835,2839,2843,2847,2851,2855,2859,2863,2867,2871,2875,2879,2883,2887,2891,2895,2899,2903,2907,2911,2915,2919,2923,2927,2931,2935,2939,2943,2947,2951,2955,2959,2963,2967,2971],{"title":2784,"path":2785,"stem":2786},"Announcing 3.0","\u002Fblog\u002Fv3","blog\u002F1.v3",{"title":2788,"path":2789,"stem":2790},"Nuxt 3.3","\u002Fblog\u002Fv3-3","blog\u002F10.v3-3",{"title":2792,"path":2793,"stem":2794},"Nuxt 3.4","\u002Fblog\u002Fv3-4","blog\u002F11.v3-4",{"title":2796,"path":2797,"stem":2798},"Nuxt 3.5","\u002Fblog\u002Fv3-5","blog\u002F12.v3-5",{"title":2800,"path":2801,"stem":2802},"Nuxt 3.6","\u002Fblog\u002Fv3-6","blog\u002F13.v3-6",{"title":2804,"path":2805,"stem":2806},"Nuxt on the Edge","\u002Fblog\u002Fnuxt-on-the-edge","blog\u002F14.nuxt-on-the-edge",{"title":2808,"path":2809,"stem":2810},"Nuxt 3.7","\u002Fblog\u002Fv3-7","blog\u002F15.v3-7",{"title":2812,"path":2813,"stem":2814},"A New Website","\u002Fblog\u002Fnew-website","blog\u002F16.new-website",{"title":2816,"path":2817,"stem":2818},"Nuxt 3.8","\u002Fblog\u002Fv3-8","blog\u002F17.v3-8",{"title":2820,"path":2821,"stem":2822},"Nuxt DevTools v1.0","\u002Fblog\u002Fnuxt-devtools-v1-0","blog\u002F18.nuxt-devtools-v1-0",{"title":2824,"path":2825,"stem":2826},"Nuxt 3.9","\u002Fblog\u002Fv3-9","blog\u002F19.v3-9",{"title":2828,"path":2829,"stem":2830},"Nuxt: A vision for 2023","\u002Fblog\u002Fvision-2023","blog\u002F2.vision-2023",{"title":2832,"path":2833,"stem":2834},"Nuxt 3.10","\u002Fblog\u002Fv3-10","blog\u002F20.v3-10",{"title":2836,"path":2837,"stem":2838},"The Evolution of Shiki v1.0","\u002Fblog\u002Fshiki-v1","blog\u002F21.shiki-v1",{"title":2840,"path":2841,"stem":2842},"Nuxt 3.11","\u002Fblog\u002Fv3-11","blog\u002F22.v3-11",{"title":2844,"path":2845,"stem":2846},"Nuxt: Looking forward","\u002Fblog\u002Flooking-forward-2024","blog\u002F23.looking-forward-2024",{"title":2848,"path":2849,"stem":2850},"Refreshed Nuxt ESLint Integrations","\u002Fblog\u002Feslint-module","blog\u002F24.eslint-module",{"title":2852,"path":2853,"stem":2854},"Nuxt 3.12","\u002Fblog\u002Fv3-12","blog\u002F25.v3-12",{"title":2856,"path":2857,"stem":2858},"Introducing Nuxt Scripts","\u002Fblog\u002Fnuxt-scripts","blog\u002F26.nuxt-scripts",{"title":2860,"path":2861,"stem":2862},"Nuxt 3.13","\u002Fblog\u002Fv3-13","blog\u002F27.v3-13",{"title":2864,"path":2865,"stem":2866},"Nuxt 3.14","\u002Fblog\u002Fv3-14","blog\u002F27.v3-14",{"title":2868,"path":2869,"stem":2870},"Introducing Nuxt Icon v1","\u002Fblog\u002Fnuxt-icon-v1-0","blog\u002F29.nuxt-icon-v1-0",{"title":2872,"path":2873,"stem":2874},"Introducing Nuxt DevTools","\u002Fblog\u002Fintroducing-nuxt-devtools","blog\u002F3.introducing-nuxt-devtools",{"title":2876,"path":2877,"stem":2878},"Announcing Nuxt 3 Release Candidate","\u002Fblog\u002Fnuxt3-rc","blog\u002F3.nuxt3-rc",{"title":2880,"path":2881,"stem":2882},"Nuxt 3.15","\u002Fblog\u002Fv3-15","blog\u002F30.v3-15",{"title":2884,"path":2885,"stem":2886},"Nuxt 3.16","\u002Fblog\u002Fv3-16","blog\u002F31.v3-16",{"title":2888,"path":2889,"stem":2890},"Nuxt UI v3","\u002Fblog\u002Fnuxt-ui-v3","blog\u002F32.nuxt-ui-v3",{"title":2892,"path":2893,"stem":2894},"Nuxt 3.17","\u002Fblog\u002Fv3-17","blog\u002F33.v3-17",{"title":2896,"path":2897,"stem":2898},"Roadmap to v4","\u002Fblog\u002Froadmap-v4","blog\u002F34.roadmap-v4",{"title":2900,"path":2901,"stem":2902},"Building a Privacy-First Feedback Widget","\u002Fblog\u002Fbuilding-a-feedback-widget","blog\u002F35.building-a-feedback-widget",{"title":2904,"path":2905,"stem":2906},"Announcing Nuxt 4.0","\u002Fblog\u002Fv4","blog\u002F36.v4",{"title":2908,"path":2909,"stem":2910},"Nuxt 3.18","\u002Fblog\u002Fv3-18","blog\u002F37.v3-18",{"title":2912,"path":2913,"stem":2914},"Nuxt 4.1","\u002Fblog\u002Fv4-1","blog\u002F38.v4-1",{"title":2916,"path":2917,"stem":2918},"Nuxt UI v4","\u002Fblog\u002Fnuxt-ui-v4","blog\u002F39.nuxt-ui-v4",{"title":2920,"path":2921,"stem":2922},"Nuxt 2 End-of-Life (EOL)","\u002Fblog\u002Fnuxt2-eol","blog\u002F4.nuxt2-eol",{"title":2924,"path":2925,"stem":2926},"Introducing Nuxt 3 Beta","\u002Fblog\u002Fnuxt3-beta","blog\u002F4.nuxt3-beta",{"title":2928,"path":2929,"stem":2930},"Building an MCP Server for Nuxt","\u002Fblog\u002Fbuilding-nuxt-mcp","blog\u002F40.building-nuxt-mcp",{"title":2932,"path":2933,"stem":2934},"Nuxt 4.2","\u002Fblog\u002Fv4-2","blog\u002F40.v4-2",{"title":2936,"path":2937,"stem":2938},"Nuxt Image v2","\u002Fblog\u002Fnuxt-image-v2","blog\u002F41.nuxt-image-v2",{"title":2940,"path":2941,"stem":2942},"Nuxt 4.3","\u002Fblog\u002Fv4-3","blog\u002F42.v4-3",{"title":2944,"path":2945,"stem":2946},"Nuxt 4.4","\u002Fblog\u002Fv4-4","blog\u002F43.v4-4",{"title":2948,"path":2949,"stem":2950},"Introducing the Nuxt Agent","\u002Fblog\u002Fintroducing-nuxt-agent","blog\u002F44.introducing-nuxt-agent",{"title":2952,"path":2953,"stem":2954},"Meet Nuxi","\u002Fblog\u002Fmeet-nuxi","blog\u002F45.meet-nuxi",{"title":2956,"path":2957,"stem":2958},"Going Full Static","\u002Fblog\u002Fgoing-full-static","blog\u002F5.going-full-static",{"title":2960,"path":2961,"stem":2962},"Introducing Smart Prefetching","\u002Fblog\u002Fintroducing-smart-prefetching","blog\u002F6.introducing-smart-prefetching",{"title":2964,"path":2965,"stem":2966},"Understanding how fetch works in Nuxt 2.12","\u002Fblog\u002Funderstanding-how-fetch-works-in-nuxt-2-12","blog\u002F7.understanding-how-fetch-works-in-nuxt-2-12",{"title":2968,"path":2969,"stem":2970},"Nuxt 2 Static Improvements","\u002Fblog\u002Fnuxt-static-improvements","blog\u002F8.nuxt-static-improvements",{"title":2972,"path":2973,"stem":2974},"Nuxt 2: From Terminal to Browser","\u002Fblog\u002Fnuxtjs-from-terminal-to-browser","blog\u002F9.nuxtjs-from-terminal-to-browser",{"v5":2976,"v4":2977,"v3":2978,"v2":2979},"5 (nightly)","4.4.8","3.21.8","2.18.1",{"name":2981,"description":2982,"repo":2983,"npm":2984,"icon":2985,"github":2986,"website":2986,"learn_more":2987,"category":2988,"type":2989,"maintainers":2990,"compatibility":2996,"generatedAt":2999,"contributors":3000,"stats":3028,"readme":3036},"api-shield","Nuxt API Shield - Rate Limiting","rrd108\u002Fnuxt-api-shield","nuxt-api-shield","api-shield.png","https:\u002F\u002Fgithub.com\u002Frrd108\u002Fnuxt-api-shield","","Security","3rd-party",[2991],{"name":2992,"github":2993,"twitter":2994,"bluesky":2995},"rrd","rrd108","radharadhya","rrd108.bsky.social",{"nuxt":2997,"requires":2998},">=3.0.0",{},"2026-06-27T11:09:42.610Z",[3001,3004,3008,3012,3016,3019,3022,3025],{"id":3002,"username":2993,"contributions":3003},3147489,282,{"id":3005,"username":3006,"contributions":3007},31929574,"ravesandstorm",5,{"id":3009,"username":3010,"contributions":3011},28706372,"danielroe",2,{"id":3013,"username":3014,"contributions":3015},20068593,"kschnekenburger",1,{"id":3017,"username":3018,"contributions":3015},32599710,"simonmaass",{"id":3020,"username":3021,"contributions":3015},125942725,"nd2024",{"id":3023,"username":3024,"contributions":3015},10197526,"chachew",{"id":3026,"username":3027,"contributions":3015},55457896,"LeeKrane",{"version":3029,"downloads":3030,"stars":3031,"watchers":3015,"forks":3032,"defaultBranch":3033,"publishedAt":3034,"createdAt":3035},"1.0.0",4983,54,9,"main",1782038138831,1711731542236,{"data":3037,"body":3039,"toc":10650},{"title":3038,"description":2987},"Nuxt API Shield",{"type":3040,"children":3041},"root",[3042,3049,3094,3099,3125,3131,3382,3388,3402,3512,3537,3542,3956,3974,4395,4409,4438,4543,4562,4574,4738,4743,4952,4963,5029,5248,5253,5259,5278,5285,5298,5311,5980,6004,6010,6039,6050,7275,7315,7342,7348,7354,7380,7522,7541,7744,7758,7777,7794,7812,7817,7823,7843,7849,7875,8082,8087,8097,8103,8115,8149,8155,8167,8317,8359,8364,8394,8415,8421,8426,8438,8449,8556,8564,8978,8989,8994,9045,9051,9068,9096,9100,9106,9118,9596,9602,9615,9621,9712,9718,9747,9753,9791,9797,9816,9821,9826,10118,10124,10170,10176,10182,10192,10288,10294,10385,10398,10409,10429,10435,10644],{"type":3043,"tag":3044,"props":3045,"children":3046},"element","h1",{"id":2984},[3047],{"type":3048,"value":3038},"text",{"type":3043,"tag":3050,"props":3051,"children":3052},"p",{},[3053,3066,3075,3084],{"type":3043,"tag":3054,"props":3055,"children":3059},"a",{"href":3056,"rel":3057},"https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fnuxt-api-shield",[3058],"nofollow",[3060],{"type":3043,"tag":3061,"props":3062,"children":3065},"img",{"alt":3063,"src":3064},"npm version","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fnuxt-api-shield\u002Flatest.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":3043,"tag":3054,"props":3067,"children":3069},{"href":3056,"rel":3068},[3058],[3070],{"type":3043,"tag":3061,"props":3071,"children":3074},{"alt":3072,"src":3073},"npm downloads","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002Fnuxt-api-shield.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":3043,"tag":3054,"props":3076,"children":3078},{"href":3056,"rel":3077},[3058],[3079],{"type":3043,"tag":3061,"props":3080,"children":3083},{"alt":3081,"src":3082},"License","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fl\u002Fnuxt-api-shield.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":3043,"tag":3054,"props":3085,"children":3088},{"href":3086,"rel":3087},"https:\u002F\u002Fnuxt.com",[3058],[3089],{"type":3043,"tag":3061,"props":3090,"children":3093},{"alt":3091,"src":3092},"Nuxt","https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNuxt-020420?logo=nuxt.js",[],{"type":3043,"tag":3050,"props":3095,"children":3096},{},[3097],{"type":3048,"value":3098},"This Nuxt module implements a rate limiting middleware to protect your API endpoints from excessive requests.",{"type":3043,"tag":3100,"props":3101,"children":3102},"ul",{},[3103],{"type":3043,"tag":3104,"props":3105,"children":3106},"li",{},[3107,3113],{"type":3043,"tag":3054,"props":3108,"children":3110},{"href":3109},"\u002FCHANGELOG.md",[3111],{"type":3048,"value":3112},"✨  Release Notes",{"type":3043,"tag":3100,"props":3114,"children":3115},{},[3116],{"type":3043,"tag":3104,"props":3117,"children":3118},{},[3119],{"type":3043,"tag":3054,"props":3120,"children":3122},{"href":2986,"rel":3121},[3058],[3123],{"type":3048,"value":3124},"📖  Documentation",{"type":3043,"tag":3126,"props":3127,"children":3129},"h2",{"id":3128},"features",[3130],{"type":3048,"value":399},{"type":3043,"tag":3100,"props":3132,"children":3133},{},[3134,3156,3213,3234,3255,3276,3308,3342],{"type":3043,"tag":3104,"props":3135,"children":3136},{},[3137,3143],{"type":3043,"tag":3138,"props":3139,"children":3140},"strong",{},[3141],{"type":3048,"value":3142},"IP-Based Rate limiting and Brute Force Protection",{"type":3043,"tag":3100,"props":3144,"children":3145},{},[3146,3151],{"type":3043,"tag":3104,"props":3147,"children":3148},{},[3149],{"type":3048,"value":3150},"Tracks and enforces rate limits for individual IP addresses.",{"type":3043,"tag":3104,"props":3152,"children":3153},{},[3154],{"type":3048,"value":3155},"Prevents malicious actors or excessive requests from a single source from overwhelming your API.",{"type":3043,"tag":3104,"props":3157,"children":3158},{},[3159,3164],{"type":3043,"tag":3138,"props":3160,"children":3161},{},[3162],{"type":3048,"value":3163},"Customizable Rate Limits",{"type":3043,"tag":3100,"props":3165,"children":3166},{},[3167,3172,3184,3189,3194,3208],{"type":3043,"tag":3104,"props":3168,"children":3169},{},[3170],{"type":3048,"value":3171},"Configure maximum request count, duration within which the limit applies, and a ban period for exceeding the limit.",{"type":3043,"tag":3104,"props":3173,"children":3174},{},[3175,3177,3182],{"type":3048,"value":3176},"If the request limit is exceeded, the user is banned for the configured ban period. During the ban period, ",{"type":3043,"tag":3138,"props":3178,"children":3179},{},[3180],{"type":3048,"value":3181},"all requests are blocked with a 429 error",{"type":3048,"value":3183},", regardless of the rate limit window.",{"type":3043,"tag":3104,"props":3185,"children":3186},{},[3187],{"type":3048,"value":3188},"Add a delay to responses when a user is banned to discourage further abuse (optional).",{"type":3043,"tag":3104,"props":3190,"children":3191},{},[3192],{"type":3048,"value":3193},"Customize the error message for banned users.",{"type":3043,"tag":3104,"props":3195,"children":3196},{},[3197,3199,3206],{"type":3048,"value":3198},"Optionally include the ",{"type":3043,"tag":3200,"props":3201,"children":3203},"code",{"className":3202},[],[3204],{"type":3048,"value":3205},"Retry-After",{"type":3048,"value":3207}," header in responses when a user is banned.",{"type":3043,"tag":3104,"props":3209,"children":3210},{},[3211],{"type":3048,"value":3212},"Tailor the rate-limiting behavior to align with your API's specific needs and usage patterns.",{"type":3043,"tag":3104,"props":3214,"children":3215},{},[3216,3221],{"type":3043,"tag":3138,"props":3217,"children":3218},{},[3219],{"type":3048,"value":3220},"Event-Driven Handling",{"type":3043,"tag":3100,"props":3222,"children":3223},{},[3224,3229],{"type":3043,"tag":3104,"props":3225,"children":3226},{},[3227],{"type":3048,"value":3228},"Intercepts incoming API requests efficiently using Nuxt's event system.",{"type":3043,"tag":3104,"props":3230,"children":3231},{},[3232],{"type":3048,"value":3233},"Ensures seamless integration with your Nuxt application's request lifecycle.",{"type":3043,"tag":3104,"props":3235,"children":3236},{},[3237,3242],{"type":3043,"tag":3138,"props":3238,"children":3239},{},[3240],{"type":3048,"value":3241},"Flexible Storage",{"type":3043,"tag":3100,"props":3243,"children":3244},{},[3245,3250],{"type":3043,"tag":3104,"props":3246,"children":3247},{},[3248],{"type":3048,"value":3249},"Utilizes Nuxt's unstorage abstraction for versatile storage options.",{"type":3043,"tag":3104,"props":3251,"children":3252},{},[3253],{"type":3048,"value":3254},"Store rate-limiting data in various storage providers (filesystem, memory, databases, etc.) based on your project's requirements.",{"type":3043,"tag":3104,"props":3256,"children":3257},{},[3258,3263],{"type":3043,"tag":3138,"props":3259,"children":3260},{},[3261],{"type":3048,"value":3262},"Configurable with Runtime Config",{"type":3043,"tag":3100,"props":3264,"children":3265},{},[3266,3271],{"type":3043,"tag":3104,"props":3267,"children":3268},{},[3269],{"type":3048,"value":3270},"Easily adjust rate-limiting parameters without code changes.",{"type":3043,"tag":3104,"props":3272,"children":3273},{},[3274],{"type":3048,"value":3275},"Adapt to dynamic needs and maintain control over rate-limiting behavior through Nuxt's runtime configuration.",{"type":3043,"tag":3104,"props":3277,"children":3278},{},[3279,3284],{"type":3043,"tag":3138,"props":3280,"children":3281},{},[3282],{"type":3048,"value":3283},"Bundled cleanup tasks",{"type":3043,"tag":3100,"props":3285,"children":3286},{},[3287],{"type":3043,"tag":3104,"props":3288,"children":3289},{},[3290,3292,3298,3300,3306],{"type":3048,"value":3291},"Registers Nitro tasks ",{"type":3043,"tag":3200,"props":3293,"children":3295},{"className":3294},[],[3296],{"type":3048,"value":3297},"shield:cleanBans",{"type":3048,"value":3299}," and ",{"type":3043,"tag":3200,"props":3301,"children":3303},{"className":3302},[],[3304],{"type":3048,"value":3305},"shield:cleanIpData",{"type":3048,"value":3307}," so you can schedule maintenance without adding task files (see setup step 4).",{"type":3043,"tag":3104,"props":3309,"children":3310},{},[3311,3316],{"type":3043,"tag":3138,"props":3312,"children":3313},{},[3314],{"type":3048,"value":3315},"Clear Error Handling",{"type":3043,"tag":3100,"props":3317,"children":3318},{},[3319,3324,3337],{"type":3043,"tag":3104,"props":3320,"children":3321},{},[3322],{"type":3048,"value":3323},"Returns a standardized 429 \"Too Many Requests\" error response when rate limits are exceeded or when a user is banned.",{"type":3043,"tag":3104,"props":3325,"children":3326},{},[3327,3329,3335],{"type":3048,"value":3328},"The 429 body is JSON (",{"type":3043,"tag":3200,"props":3330,"children":3332},{"className":3331},[],[3333],{"type":3048,"value":3334},"{ error, retryAfter }",{"type":3048,"value":3336},") for predictable client-side handling.",{"type":3043,"tag":3104,"props":3338,"children":3339},{},[3340],{"type":3048,"value":3341},"Facilitates proper error handling in client-side applications for a smooth user experience.",{"type":3043,"tag":3104,"props":3343,"children":3344},{},[3345,3350],{"type":3043,"tag":3138,"props":3346,"children":3347},{},[3348],{"type":3048,"value":3349},"Standard Rate-Limit Headers",{"type":3043,"tag":3100,"props":3351,"children":3352},{},[3353],{"type":3043,"tag":3104,"props":3354,"children":3355},{},[3356,3358,3364,3366,3372,3374,3380],{"type":3048,"value":3357},"Every response includes ",{"type":3043,"tag":3200,"props":3359,"children":3361},{"className":3360},[],[3362],{"type":3048,"value":3363},"X-RateLimit-Limit",{"type":3048,"value":3365},", ",{"type":3043,"tag":3200,"props":3367,"children":3369},{"className":3368},[],[3370],{"type":3048,"value":3371},"X-RateLimit-Remaining",{"type":3048,"value":3373},", and ",{"type":3043,"tag":3200,"props":3375,"children":3377},{"className":3376},[],[3378],{"type":3048,"value":3379},"X-RateLimit-Reset",{"type":3048,"value":3381}," headers so clients and CDNs can track usage without parsing response bodies.",{"type":3043,"tag":3126,"props":3383,"children":3385},{"id":3384},"quick-setup",[3386],{"type":3048,"value":3387},"Quick Setup",{"type":3043,"tag":3389,"props":3390,"children":3392},"h3",{"id":3391},"_1-add-nuxt-api-shield-dependency-to-your-project",[3393,3395,3400],{"type":3048,"value":3394},"1. Add ",{"type":3043,"tag":3200,"props":3396,"children":3398},{"className":3397},[],[3399],{"type":3048,"value":2984},{"type":3048,"value":3401}," dependency to your project",{"type":3043,"tag":3403,"props":3404,"children":3408},"pre",{"className":3405,"code":3406,"language":3407,"meta":2987,"style":2987},"language-bash shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","# Using pnpm\npnpm add nuxt-api-shield\n\n# Using yarn\nyarn add nuxt-api-shield\n\n# Using npm\nnpm install nuxt-api-shield\n","bash",[3409],{"type":3043,"tag":3200,"props":3410,"children":3411},{"__ignoreMap":2987},[3412,3423,3443,3452,3461,3477,3485,3494],{"type":3043,"tag":3413,"props":3414,"children":3416},"span",{"class":3415,"line":3015},"line",[3417],{"type":3043,"tag":3413,"props":3418,"children":3420},{"style":3419},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[3421],{"type":3048,"value":3422},"# Using pnpm\n",{"type":3043,"tag":3413,"props":3424,"children":3425},{"class":3415,"line":3011},[3426,3432,3438],{"type":3043,"tag":3413,"props":3427,"children":3429},{"style":3428},"--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B",[3430],{"type":3048,"value":3431},"pnpm",{"type":3043,"tag":3413,"props":3433,"children":3435},{"style":3434},"--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D",[3436],{"type":3048,"value":3437}," add",{"type":3043,"tag":3413,"props":3439,"children":3440},{"style":3434},[3441],{"type":3048,"value":3442}," nuxt-api-shield\n",{"type":3043,"tag":3413,"props":3444,"children":3446},{"class":3415,"line":3445},3,[3447],{"type":3043,"tag":3413,"props":3448,"children":3449},{"emptyLinePlaceholder":1200},[3450],{"type":3048,"value":3451},"\n",{"type":3043,"tag":3413,"props":3453,"children":3455},{"class":3415,"line":3454},4,[3456],{"type":3043,"tag":3413,"props":3457,"children":3458},{"style":3419},[3459],{"type":3048,"value":3460},"# Using yarn\n",{"type":3043,"tag":3413,"props":3462,"children":3463},{"class":3415,"line":3007},[3464,3469,3473],{"type":3043,"tag":3413,"props":3465,"children":3466},{"style":3428},[3467],{"type":3048,"value":3468},"yarn",{"type":3043,"tag":3413,"props":3470,"children":3471},{"style":3434},[3472],{"type":3048,"value":3437},{"type":3043,"tag":3413,"props":3474,"children":3475},{"style":3434},[3476],{"type":3048,"value":3442},{"type":3043,"tag":3413,"props":3478,"children":3480},{"class":3415,"line":3479},6,[3481],{"type":3043,"tag":3413,"props":3482,"children":3483},{"emptyLinePlaceholder":1200},[3484],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":3486,"children":3488},{"class":3415,"line":3487},7,[3489],{"type":3043,"tag":3413,"props":3490,"children":3491},{"style":3419},[3492],{"type":3048,"value":3493},"# Using npm\n",{"type":3043,"tag":3413,"props":3495,"children":3497},{"class":3415,"line":3496},8,[3498,3503,3508],{"type":3043,"tag":3413,"props":3499,"children":3500},{"style":3428},[3501],{"type":3048,"value":3502},"npm",{"type":3043,"tag":3413,"props":3504,"children":3505},{"style":3434},[3506],{"type":3048,"value":3507}," install",{"type":3043,"tag":3413,"props":3509,"children":3510},{"style":3434},[3511],{"type":3048,"value":3442},{"type":3043,"tag":3389,"props":3513,"children":3515},{"id":3514},"_2-add-nuxt-api-shield-to-the-modules-section-of-nuxtconfigts",[3516,3518,3523,3525,3530,3532],{"type":3048,"value":3517},"2. Add ",{"type":3043,"tag":3200,"props":3519,"children":3521},{"className":3520},[],[3522],{"type":3048,"value":2984},{"type":3048,"value":3524}," to the ",{"type":3043,"tag":3200,"props":3526,"children":3528},{"className":3527},[],[3529],{"type":3048,"value":162},{"type":3048,"value":3531}," section of ",{"type":3043,"tag":3200,"props":3533,"children":3535},{"className":3534},[],[3536],{"type":3048,"value":233},{"type":3043,"tag":3050,"props":3538,"children":3539},{},[3540],{"type":3048,"value":3541},"You should add only the values you want to use differently from the default values.",{"type":3043,"tag":3403,"props":3543,"children":3547},{"className":3544,"code":3545,"language":3546,"meta":2987,"style":2987},"language-js shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","export default defineNuxtConfig({\n  modules: [\"nuxt-api-shield\"],\n  nuxtApiShield: {\n    \u002F*limit: {\n      max: 12,        \u002F\u002F maximum requests per duration time, default is 12\u002Fduration\n      duration: 108,   \u002F\u002F duration time in seconds, default is 108 seconds\n      ban: 3600,      \u002F\u002F ban time in seconds, default is 3600 seconds = 1 hour\n      \u002F\u002F If the request limit is exceeded, the user is banned for this period. During the ban, all requests are blocked with 429.\n    },\n    delayOnBan: true  \u002F\u002F delay every response with +1sec when the user is banned, default is true\n    errorMessage: \"Too Many Requests\",  \u002F\u002F error message when the user is banned, default is \"Too Many Requests\"\n    retryAfterHeader: false, \u002F\u002F when the user is banned add the Retry-After header to the response, default is false\n    log: {\n      path: \"\", \u002F\u002F path to the log file, every day a new log file will be created, use \"\" to disable logging\n      attempts: 0,    \u002F\u002F if an IP reach 0 requests (disabled), all the requests will be logged, can be used for further analysis or blocking for example with fail2ban, use 0 to disable logging\n      fail2ban: false, \u002F\u002F enable fail2ban-compatible log format for ban events (see fail2ban section)\n    },\n    routes: [], \u002F\u002F specify routes to apply rate limiting to, default is an empty array meaning all routes are protected.\n    \u002F\u002F Example:\n    \u002F\u002F routes: [\"\u002Fapi\u002Fv2\u002F\", \"\u002Fapi\u002Fv3\u002F\"], \u002F\u002F \u002Fapi\u002Fv1 will not be protected, \u002Fapi\u002Fv2\u002F and \u002Fapi\u002Fv3\u002F will be protected *\u002F\n    skipRoutes: [], \u002F\u002F specify routes to skip\u002Fexempt from rate limiting, supports wildcard patterns (*\u002F**)\n    \u002F\u002F Example:\n    \u002F\u002F skipRoutes: [\"\u002Fapi\u002Fhealth\", \"\u002Fapi\u002F_nuxt\u002F**\", \"\u002Fapi\u002Fwebhooks\u002Fstripe\"],\n    ipTTL: 604800, \u002F\u002F Optional: Time-to-live in seconds for IP tracking entries (default: 7 days). Set to 0 or negative to disable this specific cleanup.\n    security: {\n      \u002F\u002F Optional: Security-related configurations\n      trustXForwardedFor: false, \u002F\u002F Default: false. Whether to trust X-Forwarded-For headers. See warning below.\n    },\n  },\n});\n","js",[3548],{"type":3043,"tag":3200,"props":3549,"children":3550},{"__ignoreMap":2987},[3551,3583,3625,3642,3650,3658,3666,3674,3682,3690,3699,3708,3717,3726,3735,3744,3753,3761,3770,3779,3793,3821,3829,3838,3866,3883,3892,3920,3928,3937],{"type":3043,"tag":3413,"props":3552,"children":3553},{"class":3415,"line":3015},[3554,3560,3565,3571,3577],{"type":3043,"tag":3413,"props":3555,"children":3557},{"style":3556},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[3558],{"type":3048,"value":3559},"export",{"type":3043,"tag":3413,"props":3561,"children":3562},{"style":3556},[3563],{"type":3048,"value":3564}," default",{"type":3043,"tag":3413,"props":3566,"children":3568},{"style":3567},"--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF",[3569],{"type":3048,"value":3570}," defineNuxtConfig",{"type":3043,"tag":3413,"props":3572,"children":3574},{"style":3573},"--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8",[3575],{"type":3048,"value":3576},"(",{"type":3043,"tag":3413,"props":3578,"children":3580},{"style":3579},"--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF",[3581],{"type":3048,"value":3582},"{\n",{"type":3043,"tag":3413,"props":3584,"children":3585},{"class":3415,"line":3011},[3586,3592,3597,3602,3607,3611,3615,3620],{"type":3043,"tag":3413,"props":3587,"children":3589},{"style":3588},"--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178",[3590],{"type":3048,"value":3591},"  modules",{"type":3043,"tag":3413,"props":3593,"children":3594},{"style":3579},[3595],{"type":3048,"value":3596},":",{"type":3043,"tag":3413,"props":3598,"children":3599},{"style":3573},[3600],{"type":3048,"value":3601}," [",{"type":3043,"tag":3413,"props":3603,"children":3604},{"style":3579},[3605],{"type":3048,"value":3606},"\"",{"type":3043,"tag":3413,"props":3608,"children":3609},{"style":3434},[3610],{"type":3048,"value":2984},{"type":3043,"tag":3413,"props":3612,"children":3613},{"style":3579},[3614],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":3616,"children":3617},{"style":3573},[3618],{"type":3048,"value":3619},"]",{"type":3043,"tag":3413,"props":3621,"children":3622},{"style":3579},[3623],{"type":3048,"value":3624},",\n",{"type":3043,"tag":3413,"props":3626,"children":3627},{"class":3415,"line":3445},[3628,3633,3637],{"type":3043,"tag":3413,"props":3629,"children":3630},{"style":3588},[3631],{"type":3048,"value":3632},"  nuxtApiShield",{"type":3043,"tag":3413,"props":3634,"children":3635},{"style":3579},[3636],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":3638,"children":3639},{"style":3579},[3640],{"type":3048,"value":3641}," {\n",{"type":3043,"tag":3413,"props":3643,"children":3644},{"class":3415,"line":3454},[3645],{"type":3043,"tag":3413,"props":3646,"children":3647},{"style":3419},[3648],{"type":3048,"value":3649},"    \u002F*limit: {\n",{"type":3043,"tag":3413,"props":3651,"children":3652},{"class":3415,"line":3007},[3653],{"type":3043,"tag":3413,"props":3654,"children":3655},{"style":3419},[3656],{"type":3048,"value":3657},"      max: 12,        \u002F\u002F maximum requests per duration time, default is 12\u002Fduration\n",{"type":3043,"tag":3413,"props":3659,"children":3660},{"class":3415,"line":3479},[3661],{"type":3043,"tag":3413,"props":3662,"children":3663},{"style":3419},[3664],{"type":3048,"value":3665},"      duration: 108,   \u002F\u002F duration time in seconds, default is 108 seconds\n",{"type":3043,"tag":3413,"props":3667,"children":3668},{"class":3415,"line":3487},[3669],{"type":3043,"tag":3413,"props":3670,"children":3671},{"style":3419},[3672],{"type":3048,"value":3673},"      ban: 3600,      \u002F\u002F ban time in seconds, default is 3600 seconds = 1 hour\n",{"type":3043,"tag":3413,"props":3675,"children":3676},{"class":3415,"line":3496},[3677],{"type":3043,"tag":3413,"props":3678,"children":3679},{"style":3419},[3680],{"type":3048,"value":3681},"      \u002F\u002F If the request limit is exceeded, the user is banned for this period. During the ban, all requests are blocked with 429.\n",{"type":3043,"tag":3413,"props":3683,"children":3684},{"class":3415,"line":3032},[3685],{"type":3043,"tag":3413,"props":3686,"children":3687},{"style":3419},[3688],{"type":3048,"value":3689},"    },\n",{"type":3043,"tag":3413,"props":3691,"children":3693},{"class":3415,"line":3692},10,[3694],{"type":3043,"tag":3413,"props":3695,"children":3696},{"style":3419},[3697],{"type":3048,"value":3698},"    delayOnBan: true  \u002F\u002F delay every response with +1sec when the user is banned, default is true\n",{"type":3043,"tag":3413,"props":3700,"children":3702},{"class":3415,"line":3701},11,[3703],{"type":3043,"tag":3413,"props":3704,"children":3705},{"style":3419},[3706],{"type":3048,"value":3707},"    errorMessage: \"Too Many Requests\",  \u002F\u002F error message when the user is banned, default is \"Too Many Requests\"\n",{"type":3043,"tag":3413,"props":3709,"children":3711},{"class":3415,"line":3710},12,[3712],{"type":3043,"tag":3413,"props":3713,"children":3714},{"style":3419},[3715],{"type":3048,"value":3716},"    retryAfterHeader: false, \u002F\u002F when the user is banned add the Retry-After header to the response, default is false\n",{"type":3043,"tag":3413,"props":3718,"children":3720},{"class":3415,"line":3719},13,[3721],{"type":3043,"tag":3413,"props":3722,"children":3723},{"style":3419},[3724],{"type":3048,"value":3725},"    log: {\n",{"type":3043,"tag":3413,"props":3727,"children":3729},{"class":3415,"line":3728},14,[3730],{"type":3043,"tag":3413,"props":3731,"children":3732},{"style":3419},[3733],{"type":3048,"value":3734},"      path: \"\", \u002F\u002F path to the log file, every day a new log file will be created, use \"\" to disable logging\n",{"type":3043,"tag":3413,"props":3736,"children":3738},{"class":3415,"line":3737},15,[3739],{"type":3043,"tag":3413,"props":3740,"children":3741},{"style":3419},[3742],{"type":3048,"value":3743},"      attempts: 0,    \u002F\u002F if an IP reach 0 requests (disabled), all the requests will be logged, can be used for further analysis or blocking for example with fail2ban, use 0 to disable logging\n",{"type":3043,"tag":3413,"props":3745,"children":3747},{"class":3415,"line":3746},16,[3748],{"type":3043,"tag":3413,"props":3749,"children":3750},{"style":3419},[3751],{"type":3048,"value":3752},"      fail2ban: false, \u002F\u002F enable fail2ban-compatible log format for ban events (see fail2ban section)\n",{"type":3043,"tag":3413,"props":3754,"children":3756},{"class":3415,"line":3755},17,[3757],{"type":3043,"tag":3413,"props":3758,"children":3759},{"style":3419},[3760],{"type":3048,"value":3689},{"type":3043,"tag":3413,"props":3762,"children":3764},{"class":3415,"line":3763},18,[3765],{"type":3043,"tag":3413,"props":3766,"children":3767},{"style":3419},[3768],{"type":3048,"value":3769},"    routes: [], \u002F\u002F specify routes to apply rate limiting to, default is an empty array meaning all routes are protected.\n",{"type":3043,"tag":3413,"props":3771,"children":3773},{"class":3415,"line":3772},19,[3774],{"type":3043,"tag":3413,"props":3775,"children":3776},{"style":3419},[3777],{"type":3048,"value":3778},"    \u002F\u002F Example:\n",{"type":3043,"tag":3413,"props":3780,"children":3782},{"class":3415,"line":3781},20,[3783,3788],{"type":3043,"tag":3413,"props":3784,"children":3785},{"style":3419},[3786],{"type":3048,"value":3787},"    \u002F\u002F routes: [\"\u002Fapi\u002Fv2\u002F\", \"\u002Fapi\u002Fv3\u002F\"],",{"type":3043,"tag":3413,"props":3789,"children":3790},{"style":3419},[3791],{"type":3048,"value":3792}," \u002F\u002F \u002Fapi\u002Fv1 will not be protected, \u002Fapi\u002Fv2\u002F and \u002Fapi\u002Fv3\u002F will be protected *\u002F\n",{"type":3043,"tag":3413,"props":3794,"children":3796},{"class":3415,"line":3795},21,[3797,3802,3806,3811,3816],{"type":3043,"tag":3413,"props":3798,"children":3799},{"style":3588},[3800],{"type":3048,"value":3801},"    skipRoutes",{"type":3043,"tag":3413,"props":3803,"children":3804},{"style":3579},[3805],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":3807,"children":3808},{"style":3573},[3809],{"type":3048,"value":3810}," []",{"type":3043,"tag":3413,"props":3812,"children":3813},{"style":3579},[3814],{"type":3048,"value":3815},",",{"type":3043,"tag":3413,"props":3817,"children":3818},{"style":3419},[3819],{"type":3048,"value":3820}," \u002F\u002F specify routes to skip\u002Fexempt from rate limiting, supports wildcard patterns (*\u002F**)\n",{"type":3043,"tag":3413,"props":3822,"children":3824},{"class":3415,"line":3823},22,[3825],{"type":3043,"tag":3413,"props":3826,"children":3827},{"style":3419},[3828],{"type":3048,"value":3778},{"type":3043,"tag":3413,"props":3830,"children":3832},{"class":3415,"line":3831},23,[3833],{"type":3043,"tag":3413,"props":3834,"children":3835},{"style":3419},[3836],{"type":3048,"value":3837},"    \u002F\u002F skipRoutes: [\"\u002Fapi\u002Fhealth\", \"\u002Fapi\u002F_nuxt\u002F**\", \"\u002Fapi\u002Fwebhooks\u002Fstripe\"],\n",{"type":3043,"tag":3413,"props":3839,"children":3841},{"class":3415,"line":3840},24,[3842,3847,3851,3857,3861],{"type":3043,"tag":3413,"props":3843,"children":3844},{"style":3588},[3845],{"type":3048,"value":3846},"    ipTTL",{"type":3043,"tag":3413,"props":3848,"children":3849},{"style":3579},[3850],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":3852,"children":3854},{"style":3853},"--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C",[3855],{"type":3048,"value":3856}," 604800",{"type":3043,"tag":3413,"props":3858,"children":3859},{"style":3579},[3860],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":3862,"children":3863},{"style":3419},[3864],{"type":3048,"value":3865}," \u002F\u002F Optional: Time-to-live in seconds for IP tracking entries (default: 7 days). Set to 0 or negative to disable this specific cleanup.\n",{"type":3043,"tag":3413,"props":3867,"children":3869},{"class":3415,"line":3868},25,[3870,3875,3879],{"type":3043,"tag":3413,"props":3871,"children":3872},{"style":3588},[3873],{"type":3048,"value":3874},"    security",{"type":3043,"tag":3413,"props":3876,"children":3877},{"style":3579},[3878],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":3880,"children":3881},{"style":3579},[3882],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":3884,"children":3886},{"class":3415,"line":3885},26,[3887],{"type":3043,"tag":3413,"props":3888,"children":3889},{"style":3419},[3890],{"type":3048,"value":3891},"      \u002F\u002F Optional: Security-related configurations\n",{"type":3043,"tag":3413,"props":3893,"children":3895},{"class":3415,"line":3894},27,[3896,3901,3905,3911,3915],{"type":3043,"tag":3413,"props":3897,"children":3898},{"style":3588},[3899],{"type":3048,"value":3900},"      trustXForwardedFor",{"type":3043,"tag":3413,"props":3902,"children":3903},{"style":3579},[3904],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":3906,"children":3908},{"style":3907},"--shiki-light:#FF5370;--shiki-default:#FF5370;--shiki-dark:#FF9CAC",[3909],{"type":3048,"value":3910}," false",{"type":3043,"tag":3413,"props":3912,"children":3913},{"style":3579},[3914],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":3916,"children":3917},{"style":3419},[3918],{"type":3048,"value":3919}," \u002F\u002F Default: false. Whether to trust X-Forwarded-For headers. See warning below.\n",{"type":3043,"tag":3413,"props":3921,"children":3923},{"class":3415,"line":3922},28,[3924],{"type":3043,"tag":3413,"props":3925,"children":3926},{"style":3579},[3927],{"type":3048,"value":3689},{"type":3043,"tag":3413,"props":3929,"children":3931},{"class":3415,"line":3930},29,[3932],{"type":3043,"tag":3413,"props":3933,"children":3934},{"style":3579},[3935],{"type":3048,"value":3936},"  },\n",{"type":3043,"tag":3413,"props":3938,"children":3940},{"class":3415,"line":3939},30,[3941,3946,3951],{"type":3043,"tag":3413,"props":3942,"children":3943},{"style":3579},[3944],{"type":3048,"value":3945},"}",{"type":3043,"tag":3413,"props":3947,"children":3948},{"style":3573},[3949],{"type":3048,"value":3950},")",{"type":3043,"tag":3413,"props":3952,"children":3953},{"style":3579},[3954],{"type":3048,"value":3955},";\n",{"type":3043,"tag":3050,"props":3957,"children":3958},{},[3959,3964,3966,3972],{"type":3043,"tag":3138,"props":3960,"children":3961},{},[3962],{"type":3048,"value":3963},"Default Configuration Values:",{"type":3048,"value":3965},"\n(These are applied by the module if not specified in your ",{"type":3043,"tag":3200,"props":3967,"children":3969},{"className":3968},[],[3970],{"type":3048,"value":3971},"nuxtApiShield",{"type":3048,"value":3973}," config)",{"type":3043,"tag":3403,"props":3975,"children":3977},{"className":3544,"code":3976,"language":3546,"meta":2987,"style":2987},"{\n  limit: {\n    max: 12,\n    duration: 108, \u002F\u002F seconds\n    ban: 3600,     \u002F\u002F seconds\n  },\n  delayOnBan: true,\n  errorMessage: \"Too Many Requests\",\n  retryAfterHeader: false,\n  log: {\n    path: \"\", \u002F\u002F Logging is disabled if path is empty\n    attempts: 0, \u002F\u002F Logging per IP is disabled if attempts is 0\n    fail2ban: false,\n  },\n  routes: [],\n  skipRoutes: [],\n  ipTTL: 7 * 24 * 60 * 60, \u002F\u002F 7 days in seconds\n  security: {\n    trustXForwardedFor: false,\n  }\n}\n",[3978],{"type":3043,"tag":3200,"props":3979,"children":3980},{"__ignoreMap":2987},[3981,3988,4004,4025,4051,4077,4084,4105,4135,4155,4171,4197,4223,4243,4250,4270,4290,4343,4359,4379,4387],{"type":3043,"tag":3413,"props":3982,"children":3983},{"class":3415,"line":3015},[3984],{"type":3043,"tag":3413,"props":3985,"children":3986},{"style":3579},[3987],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":3989,"children":3990},{"class":3415,"line":3011},[3991,3996,4000],{"type":3043,"tag":3413,"props":3992,"children":3993},{"style":3428},[3994],{"type":3048,"value":3995},"  limit",{"type":3043,"tag":3413,"props":3997,"children":3998},{"style":3579},[3999],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4001,"children":4002},{"style":3579},[4003],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":4005,"children":4006},{"class":3415,"line":3445},[4007,4012,4016,4021],{"type":3043,"tag":3413,"props":4008,"children":4009},{"style":3428},[4010],{"type":3048,"value":4011},"    max",{"type":3043,"tag":3413,"props":4013,"children":4014},{"style":3579},[4015],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4017,"children":4018},{"style":3853},[4019],{"type":3048,"value":4020}," 12",{"type":3043,"tag":3413,"props":4022,"children":4023},{"style":3579},[4024],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4026,"children":4027},{"class":3415,"line":3454},[4028,4033,4037,4042,4046],{"type":3043,"tag":3413,"props":4029,"children":4030},{"style":3428},[4031],{"type":3048,"value":4032},"    duration",{"type":3043,"tag":3413,"props":4034,"children":4035},{"style":3579},[4036],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4038,"children":4039},{"style":3853},[4040],{"type":3048,"value":4041}," 108",{"type":3043,"tag":3413,"props":4043,"children":4044},{"style":3579},[4045],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":4047,"children":4048},{"style":3419},[4049],{"type":3048,"value":4050}," \u002F\u002F seconds\n",{"type":3043,"tag":3413,"props":4052,"children":4053},{"class":3415,"line":3007},[4054,4059,4063,4068,4072],{"type":3043,"tag":3413,"props":4055,"children":4056},{"style":3428},[4057],{"type":3048,"value":4058},"    ban",{"type":3043,"tag":3413,"props":4060,"children":4061},{"style":3579},[4062],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4064,"children":4065},{"style":3853},[4066],{"type":3048,"value":4067}," 3600",{"type":3043,"tag":3413,"props":4069,"children":4070},{"style":3579},[4071],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":4073,"children":4074},{"style":3419},[4075],{"type":3048,"value":4076},"     \u002F\u002F seconds\n",{"type":3043,"tag":3413,"props":4078,"children":4079},{"class":3415,"line":3479},[4080],{"type":3043,"tag":3413,"props":4081,"children":4082},{"style":3579},[4083],{"type":3048,"value":3936},{"type":3043,"tag":3413,"props":4085,"children":4086},{"class":3415,"line":3487},[4087,4092,4096,4101],{"type":3043,"tag":3413,"props":4088,"children":4089},{"style":3428},[4090],{"type":3048,"value":4091},"  delayOnBan",{"type":3043,"tag":3413,"props":4093,"children":4094},{"style":3579},[4095],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4097,"children":4098},{"style":3907},[4099],{"type":3048,"value":4100}," true",{"type":3043,"tag":3413,"props":4102,"children":4103},{"style":3579},[4104],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4106,"children":4107},{"class":3415,"line":3496},[4108,4113,4117,4122,4127,4131],{"type":3043,"tag":3413,"props":4109,"children":4110},{"style":3428},[4111],{"type":3048,"value":4112},"  errorMessage",{"type":3043,"tag":3413,"props":4114,"children":4115},{"style":3579},[4116],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4118,"children":4119},{"style":3579},[4120],{"type":3048,"value":4121}," \"",{"type":3043,"tag":3413,"props":4123,"children":4124},{"style":3434},[4125],{"type":3048,"value":4126},"Too Many Requests",{"type":3043,"tag":3413,"props":4128,"children":4129},{"style":3579},[4130],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4132,"children":4133},{"style":3579},[4134],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4136,"children":4137},{"class":3415,"line":3032},[4138,4143,4147,4151],{"type":3043,"tag":3413,"props":4139,"children":4140},{"style":3428},[4141],{"type":3048,"value":4142},"  retryAfterHeader",{"type":3043,"tag":3413,"props":4144,"children":4145},{"style":3579},[4146],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4148,"children":4149},{"style":3907},[4150],{"type":3048,"value":3910},{"type":3043,"tag":3413,"props":4152,"children":4153},{"style":3579},[4154],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4156,"children":4157},{"class":3415,"line":3692},[4158,4163,4167],{"type":3043,"tag":3413,"props":4159,"children":4160},{"style":3428},[4161],{"type":3048,"value":4162},"  log",{"type":3043,"tag":3413,"props":4164,"children":4165},{"style":3579},[4166],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4168,"children":4169},{"style":3579},[4170],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":4172,"children":4173},{"class":3415,"line":3701},[4174,4179,4183,4188,4192],{"type":3043,"tag":3413,"props":4175,"children":4176},{"style":3428},[4177],{"type":3048,"value":4178},"    path",{"type":3043,"tag":3413,"props":4180,"children":4181},{"style":3579},[4182],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4184,"children":4185},{"style":3579},[4186],{"type":3048,"value":4187}," \"\"",{"type":3043,"tag":3413,"props":4189,"children":4190},{"style":3579},[4191],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":4193,"children":4194},{"style":3419},[4195],{"type":3048,"value":4196}," \u002F\u002F Logging is disabled if path is empty\n",{"type":3043,"tag":3413,"props":4198,"children":4199},{"class":3415,"line":3710},[4200,4205,4209,4214,4218],{"type":3043,"tag":3413,"props":4201,"children":4202},{"style":3428},[4203],{"type":3048,"value":4204},"    attempts",{"type":3043,"tag":3413,"props":4206,"children":4207},{"style":3579},[4208],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4210,"children":4211},{"style":3853},[4212],{"type":3048,"value":4213}," 0",{"type":3043,"tag":3413,"props":4215,"children":4216},{"style":3579},[4217],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":4219,"children":4220},{"style":3419},[4221],{"type":3048,"value":4222}," \u002F\u002F Logging per IP is disabled if attempts is 0\n",{"type":3043,"tag":3413,"props":4224,"children":4225},{"class":3415,"line":3719},[4226,4231,4235,4239],{"type":3043,"tag":3413,"props":4227,"children":4228},{"style":3428},[4229],{"type":3048,"value":4230},"    fail2ban",{"type":3043,"tag":3413,"props":4232,"children":4233},{"style":3579},[4234],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4236,"children":4237},{"style":3907},[4238],{"type":3048,"value":3910},{"type":3043,"tag":3413,"props":4240,"children":4241},{"style":3579},[4242],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4244,"children":4245},{"class":3415,"line":3728},[4246],{"type":3043,"tag":3413,"props":4247,"children":4248},{"style":3579},[4249],{"type":3048,"value":3936},{"type":3043,"tag":3413,"props":4251,"children":4252},{"class":3415,"line":3737},[4253,4258,4262,4266],{"type":3043,"tag":3413,"props":4254,"children":4255},{"style":3428},[4256],{"type":3048,"value":4257},"  routes",{"type":3043,"tag":3413,"props":4259,"children":4260},{"style":3579},[4261],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4263,"children":4264},{"style":3588},[4265],{"type":3048,"value":3810},{"type":3043,"tag":3413,"props":4267,"children":4268},{"style":3579},[4269],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4271,"children":4272},{"class":3415,"line":3746},[4273,4278,4282,4286],{"type":3043,"tag":3413,"props":4274,"children":4275},{"style":3428},[4276],{"type":3048,"value":4277},"  skipRoutes",{"type":3043,"tag":3413,"props":4279,"children":4280},{"style":3579},[4281],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4283,"children":4284},{"style":3588},[4285],{"type":3048,"value":3810},{"type":3043,"tag":3413,"props":4287,"children":4288},{"style":3579},[4289],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4291,"children":4292},{"class":3415,"line":3755},[4293,4298,4302,4307,4312,4317,4321,4326,4330,4334,4338],{"type":3043,"tag":3413,"props":4294,"children":4295},{"style":3428},[4296],{"type":3048,"value":4297},"  ipTTL",{"type":3043,"tag":3413,"props":4299,"children":4300},{"style":3579},[4301],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4303,"children":4304},{"style":3853},[4305],{"type":3048,"value":4306}," 7",{"type":3043,"tag":3413,"props":4308,"children":4309},{"style":3579},[4310],{"type":3048,"value":4311}," *",{"type":3043,"tag":3413,"props":4313,"children":4314},{"style":3853},[4315],{"type":3048,"value":4316}," 24",{"type":3043,"tag":3413,"props":4318,"children":4319},{"style":3579},[4320],{"type":3048,"value":4311},{"type":3043,"tag":3413,"props":4322,"children":4323},{"style":3853},[4324],{"type":3048,"value":4325}," 60",{"type":3043,"tag":3413,"props":4327,"children":4328},{"style":3579},[4329],{"type":3048,"value":4311},{"type":3043,"tag":3413,"props":4331,"children":4332},{"style":3853},[4333],{"type":3048,"value":4325},{"type":3043,"tag":3413,"props":4335,"children":4336},{"style":3579},[4337],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":4339,"children":4340},{"style":3419},[4341],{"type":3048,"value":4342}," \u002F\u002F 7 days in seconds\n",{"type":3043,"tag":3413,"props":4344,"children":4345},{"class":3415,"line":3763},[4346,4351,4355],{"type":3043,"tag":3413,"props":4347,"children":4348},{"style":3428},[4349],{"type":3048,"value":4350},"  security",{"type":3043,"tag":3413,"props":4352,"children":4353},{"style":3579},[4354],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4356,"children":4357},{"style":3579},[4358],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":4360,"children":4361},{"class":3415,"line":3772},[4362,4367,4371,4375],{"type":3043,"tag":3413,"props":4363,"children":4364},{"style":3428},[4365],{"type":3048,"value":4366},"    trustXForwardedFor",{"type":3043,"tag":3413,"props":4368,"children":4369},{"style":3579},[4370],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4372,"children":4373},{"style":3907},[4374],{"type":3048,"value":3910},{"type":3043,"tag":3413,"props":4376,"children":4377},{"style":3579},[4378],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4380,"children":4381},{"class":3415,"line":3781},[4382],{"type":3043,"tag":3413,"props":4383,"children":4384},{"style":3579},[4385],{"type":3048,"value":4386},"  }\n",{"type":3043,"tag":3413,"props":4388,"children":4389},{"class":3415,"line":3795},[4390],{"type":3043,"tag":3413,"props":4391,"children":4392},{"style":3579},[4393],{"type":3048,"value":4394},"}\n",{"type":3043,"tag":3050,"props":4396,"children":4397},{},[4398],{"type":3043,"tag":3138,"props":4399,"children":4400},{},[4401,4403],{"type":3048,"value":4402},"Security Warning: ",{"type":3043,"tag":3200,"props":4404,"children":4406},{"className":4405},[],[4407],{"type":3048,"value":4408},"trustXForwardedFor",{"type":3043,"tag":3050,"props":4410,"children":4411},{},[4412,4414,4420,4422,4428,4430,4436],{"type":3048,"value":4413},"The ",{"type":3043,"tag":3200,"props":4415,"children":4417},{"className":4416},[],[4418],{"type":3048,"value":4419},"security.trustXForwardedFor",{"type":3048,"value":4421}," option (default is ",{"type":3043,"tag":3200,"props":4423,"children":4425},{"className":4424},[],[4426],{"type":3048,"value":4427},"false",{"type":3048,"value":4429},", set by the module) determines if the module uses the ",{"type":3043,"tag":3200,"props":4431,"children":4433},{"className":4432},[],[4434],{"type":3048,"value":4435},"X-Forwarded-For",{"type":3048,"value":4437}," HTTP header to identify the client's IP address.",{"type":3043,"tag":3100,"props":4439,"children":4440},{},[4441,4461,4499,4518],{"type":3043,"tag":3104,"props":4442,"children":4443},{},[4444,4446,4452,4454,4459],{"type":3048,"value":4445},"If set to ",{"type":3043,"tag":3200,"props":4447,"children":4449},{"className":4448},[],[4450],{"type":3048,"value":4451},"true",{"type":3048,"value":4453},": The module will use the IP address provided in the ",{"type":3043,"tag":3200,"props":4455,"children":4457},{"className":4456},[],[4458],{"type":3048,"value":4435},{"type":3048,"value":4460}," header. This is common when your Nuxt application is behind a trusted reverse proxy, load balancer, or CDN (like Nginx, Cloudflare, AWS ELB\u002FALB) that correctly sets this header with the real client IP.",{"type":3043,"tag":3104,"props":4462,"children":4463},{},[4464,4469,4471,4476,4478,4483,4485,4490,4492,4497],{"type":3043,"tag":3138,"props":4465,"children":4466},{},[4467],{"type":3048,"value":4468},"WARNING:",{"type":3048,"value":4470}," If ",{"type":3043,"tag":3200,"props":4472,"children":4474},{"className":4473},[],[4475],{"type":3048,"value":4408},{"type":3048,"value":4477}," is ",{"type":3043,"tag":3200,"props":4479,"children":4481},{"className":4480},[],[4482],{"type":3048,"value":4451},{"type":3048,"value":4484}," and your application is directly internet-facing OR your proxy is not configured to strip incoming ",{"type":3043,"tag":3200,"props":4486,"children":4488},{"className":4487},[],[4489],{"type":3048,"value":4435},{"type":3048,"value":4491}," headers from clients, malicious users can spoof their IP address by sending a fake ",{"type":3043,"tag":3200,"props":4493,"children":4495},{"className":4494},[],[4496],{"type":3048,"value":4435},{"type":3048,"value":4498}," header. This would allow them to bypass rate limits or cause other users to be incorrectly rate-limited.",{"type":3043,"tag":3104,"props":4500,"children":4501},{},[4502,4503,4508,4510,4516],{"type":3048,"value":4445},{"type":3043,"tag":3200,"props":4504,"children":4506},{"className":4505},[],[4507],{"type":3048,"value":4427},{"type":3048,"value":4509},": The module will use the direct IP address of the incoming connection (i.e., ",{"type":3043,"tag":3200,"props":4511,"children":4513},{"className":4512},[],[4514],{"type":3048,"value":4515},"event.node.req.socket.remoteAddress",{"type":3048,"value":4517},"). Use this setting if your application is directly internet-facing or if you are unsure about your proxy's configuration.",{"type":3043,"tag":3104,"props":4519,"children":4520},{},[4521,4526,4528,4534,4536,4541],{"type":3043,"tag":3138,"props":4522,"children":4523},{},[4524],{"type":3048,"value":4525},"Recommendation:",{"type":3048,"value":4527}," Only enable ",{"type":3043,"tag":3200,"props":4529,"children":4531},{"className":4530},[],[4532],{"type":3048,"value":4533},"trustXForwardedFor: true",{"type":3048,"value":4535}," if you are certain your reverse proxy is correctly configured to set this header and strip any client-sent versions of it. Otherwise, set it to ",{"type":3043,"tag":3200,"props":4537,"children":4539},{"className":4538},[],[4540],{"type":3048,"value":4427},{"type":3048,"value":4542},".",{"type":3043,"tag":3389,"props":4544,"children":4546},{"id":4545},"_3-add-nitrostorage-to-nuxtconfigts",[4547,4549,4555,4557],{"type":3048,"value":4548},"3. Add ",{"type":3043,"tag":3200,"props":4550,"children":4552},{"className":4551},[],[4553],{"type":3048,"value":4554},"nitro\u002Fstorage",{"type":3048,"value":4556}," to ",{"type":3043,"tag":3200,"props":4558,"children":4560},{"className":4559},[],[4561],{"type":3048,"value":233},{"type":3043,"tag":3050,"props":4563,"children":4564},{},[4565,4567,4572],{"type":3048,"value":4566},"You can use any storage you want, but you have to use ",{"type":3043,"tag":3138,"props":4568,"children":4569},{},[4570],{"type":3048,"value":4571},"shield",{"type":3048,"value":4573}," as the name of the storage.",{"type":3043,"tag":3403,"props":4575,"children":4579},{"className":4576,"code":4577,"language":4578,"meta":2987,"style":2987},"language-json shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","{\n  \"nitro\": {\n    \"storage\": {\n      \"shield\": {\n        \u002F\u002F storage name, you **must** use \"shield\" as the name\n        \"driver\": \"memory\"\n      }\n    }\n  }\n}\n","json",[4580],{"type":3043,"tag":3200,"props":4581,"children":4582},{"__ignoreMap":2987},[4583,4590,4616,4641,4665,4673,4708,4716,4724,4731],{"type":3043,"tag":3413,"props":4584,"children":4585},{"class":3415,"line":3015},[4586],{"type":3043,"tag":3413,"props":4587,"children":4588},{"style":3579},[4589],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":4591,"children":4592},{"class":3415,"line":3011},[4593,4598,4604,4608,4612],{"type":3043,"tag":3413,"props":4594,"children":4595},{"style":3579},[4596],{"type":3048,"value":4597},"  \"",{"type":3043,"tag":3413,"props":4599,"children":4601},{"style":4600},"--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA",[4602],{"type":3048,"value":4603},"nitro",{"type":3043,"tag":3413,"props":4605,"children":4606},{"style":3579},[4607],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4609,"children":4610},{"style":3579},[4611],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4613,"children":4614},{"style":3579},[4615],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":4617,"children":4618},{"class":3415,"line":3445},[4619,4624,4629,4633,4637],{"type":3043,"tag":3413,"props":4620,"children":4621},{"style":3579},[4622],{"type":3048,"value":4623},"    \"",{"type":3043,"tag":3413,"props":4625,"children":4626},{"style":3428},[4627],{"type":3048,"value":4628},"storage",{"type":3043,"tag":3413,"props":4630,"children":4631},{"style":3579},[4632],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4634,"children":4635},{"style":3579},[4636],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4638,"children":4639},{"style":3579},[4640],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":4642,"children":4643},{"class":3415,"line":3454},[4644,4649,4653,4657,4661],{"type":3043,"tag":3413,"props":4645,"children":4646},{"style":3579},[4647],{"type":3048,"value":4648},"      \"",{"type":3043,"tag":3413,"props":4650,"children":4651},{"style":3853},[4652],{"type":3048,"value":4571},{"type":3043,"tag":3413,"props":4654,"children":4655},{"style":3579},[4656],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4658,"children":4659},{"style":3579},[4660],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4662,"children":4663},{"style":3579},[4664],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":4666,"children":4667},{"class":3415,"line":3007},[4668],{"type":3043,"tag":3413,"props":4669,"children":4670},{"style":3419},[4671],{"type":3048,"value":4672},"        \u002F\u002F storage name, you **must** use \"shield\" as the name\n",{"type":3043,"tag":3413,"props":4674,"children":4675},{"class":3415,"line":3479},[4676,4681,4686,4690,4694,4698,4703],{"type":3043,"tag":3413,"props":4677,"children":4678},{"style":3579},[4679],{"type":3048,"value":4680},"        \"",{"type":3043,"tag":3413,"props":4682,"children":4683},{"style":3588},[4684],{"type":3048,"value":4685},"driver",{"type":3043,"tag":3413,"props":4687,"children":4688},{"style":3579},[4689],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4691,"children":4692},{"style":3579},[4693],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4695,"children":4696},{"style":3579},[4697],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":4699,"children":4700},{"style":3434},[4701],{"type":3048,"value":4702},"memory",{"type":3043,"tag":3413,"props":4704,"children":4705},{"style":3579},[4706],{"type":3048,"value":4707},"\"\n",{"type":3043,"tag":3413,"props":4709,"children":4710},{"class":3415,"line":3487},[4711],{"type":3043,"tag":3413,"props":4712,"children":4713},{"style":3579},[4714],{"type":3048,"value":4715},"      }\n",{"type":3043,"tag":3413,"props":4717,"children":4718},{"class":3415,"line":3496},[4719],{"type":3043,"tag":3413,"props":4720,"children":4721},{"style":3579},[4722],{"type":3048,"value":4723},"    }\n",{"type":3043,"tag":3413,"props":4725,"children":4726},{"class":3415,"line":3032},[4727],{"type":3043,"tag":3413,"props":4728,"children":4729},{"style":3579},[4730],{"type":3048,"value":4386},{"type":3043,"tag":3413,"props":4732,"children":4733},{"class":3415,"line":3692},[4734],{"type":3043,"tag":3413,"props":4735,"children":4736},{"style":3579},[4737],{"type":3048,"value":4394},{"type":3043,"tag":3050,"props":4739,"children":4740},{},[4741],{"type":3048,"value":4742},"If you use for example redis, you can use the following configuration, define the host and port.",{"type":3043,"tag":3403,"props":4744,"children":4746},{"className":4576,"code":4745,"language":4578,"meta":2987,"style":2987},"{\n  \"nitro\": {\n    \"storage\": {\n      \"shield\": {\n        \"driver\": \"redis\",\n        \"host\": \"localhost\",\n        \"port\": 6379\n      }\n    }\n  }\n}\n",[4747],{"type":3043,"tag":3200,"props":4748,"children":4749},{"__ignoreMap":2987},[4750,4757,4780,4803,4826,4862,4899,4924,4931,4938,4945],{"type":3043,"tag":3413,"props":4751,"children":4752},{"class":3415,"line":3015},[4753],{"type":3043,"tag":3413,"props":4754,"children":4755},{"style":3579},[4756],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":4758,"children":4759},{"class":3415,"line":3011},[4760,4764,4768,4772,4776],{"type":3043,"tag":3413,"props":4761,"children":4762},{"style":3579},[4763],{"type":3048,"value":4597},{"type":3043,"tag":3413,"props":4765,"children":4766},{"style":4600},[4767],{"type":3048,"value":4603},{"type":3043,"tag":3413,"props":4769,"children":4770},{"style":3579},[4771],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4773,"children":4774},{"style":3579},[4775],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4777,"children":4778},{"style":3579},[4779],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":4781,"children":4782},{"class":3415,"line":3445},[4783,4787,4791,4795,4799],{"type":3043,"tag":3413,"props":4784,"children":4785},{"style":3579},[4786],{"type":3048,"value":4623},{"type":3043,"tag":3413,"props":4788,"children":4789},{"style":3428},[4790],{"type":3048,"value":4628},{"type":3043,"tag":3413,"props":4792,"children":4793},{"style":3579},[4794],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4796,"children":4797},{"style":3579},[4798],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4800,"children":4801},{"style":3579},[4802],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":4804,"children":4805},{"class":3415,"line":3454},[4806,4810,4814,4818,4822],{"type":3043,"tag":3413,"props":4807,"children":4808},{"style":3579},[4809],{"type":3048,"value":4648},{"type":3043,"tag":3413,"props":4811,"children":4812},{"style":3853},[4813],{"type":3048,"value":4571},{"type":3043,"tag":3413,"props":4815,"children":4816},{"style":3579},[4817],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4819,"children":4820},{"style":3579},[4821],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4823,"children":4824},{"style":3579},[4825],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":4827,"children":4828},{"class":3415,"line":3007},[4829,4833,4837,4841,4845,4849,4854,4858],{"type":3043,"tag":3413,"props":4830,"children":4831},{"style":3579},[4832],{"type":3048,"value":4680},{"type":3043,"tag":3413,"props":4834,"children":4835},{"style":3588},[4836],{"type":3048,"value":4685},{"type":3043,"tag":3413,"props":4838,"children":4839},{"style":3579},[4840],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4842,"children":4843},{"style":3579},[4844],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4846,"children":4847},{"style":3579},[4848],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":4850,"children":4851},{"style":3434},[4852],{"type":3048,"value":4853},"redis",{"type":3043,"tag":3413,"props":4855,"children":4856},{"style":3579},[4857],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4859,"children":4860},{"style":3579},[4861],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4863,"children":4864},{"class":3415,"line":3479},[4865,4869,4874,4878,4882,4886,4891,4895],{"type":3043,"tag":3413,"props":4866,"children":4867},{"style":3579},[4868],{"type":3048,"value":4680},{"type":3043,"tag":3413,"props":4870,"children":4871},{"style":3588},[4872],{"type":3048,"value":4873},"host",{"type":3043,"tag":3413,"props":4875,"children":4876},{"style":3579},[4877],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4879,"children":4880},{"style":3579},[4881],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4883,"children":4884},{"style":3579},[4885],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":4887,"children":4888},{"style":3434},[4889],{"type":3048,"value":4890},"localhost",{"type":3043,"tag":3413,"props":4892,"children":4893},{"style":3579},[4894],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4896,"children":4897},{"style":3579},[4898],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":4900,"children":4901},{"class":3415,"line":3487},[4902,4906,4911,4915,4919],{"type":3043,"tag":3413,"props":4903,"children":4904},{"style":3579},[4905],{"type":3048,"value":4680},{"type":3043,"tag":3413,"props":4907,"children":4908},{"style":3588},[4909],{"type":3048,"value":4910},"port",{"type":3043,"tag":3413,"props":4912,"children":4913},{"style":3579},[4914],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":4916,"children":4917},{"style":3579},[4918],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":4920,"children":4921},{"style":3853},[4922],{"type":3048,"value":4923}," 6379\n",{"type":3043,"tag":3413,"props":4925,"children":4926},{"class":3415,"line":3496},[4927],{"type":3043,"tag":3413,"props":4928,"children":4929},{"style":3579},[4930],{"type":3048,"value":4715},{"type":3043,"tag":3413,"props":4932,"children":4933},{"class":3415,"line":3032},[4934],{"type":3043,"tag":3413,"props":4935,"children":4936},{"style":3579},[4937],{"type":3048,"value":4723},{"type":3043,"tag":3413,"props":4939,"children":4940},{"class":3415,"line":3692},[4941],{"type":3043,"tag":3413,"props":4942,"children":4943},{"style":3579},[4944],{"type":3048,"value":4386},{"type":3043,"tag":3413,"props":4946,"children":4947},{"class":3415,"line":3701},[4948],{"type":3043,"tag":3413,"props":4949,"children":4950},{"style":3579},[4951],{"type":3048,"value":4394},{"type":3043,"tag":3389,"props":4953,"children":4955},{"id":4954},"_4-schedule-bundled-cleanup-tasks-in-nuxtconfigts",[4956,4958],{"type":3048,"value":4957},"4. Schedule bundled cleanup tasks in ",{"type":3043,"tag":3200,"props":4959,"children":4961},{"className":4960},[],[4962],{"type":3048,"value":233},{"type":3043,"tag":3050,"props":4964,"children":4965},{},[4966,4968,4973,4975,4981,4983,4988,4990,4996,4998,5004,5006,5012,5014,5019,5021,5027],{"type":3048,"value":4967},"The module registers two Nitro tasks for you: ",{"type":3043,"tag":3200,"props":4969,"children":4971},{"className":4970},[],[4972],{"type":3048,"value":3297},{"type":3048,"value":4974}," (removes expired ",{"type":3043,"tag":3200,"props":4976,"children":4978},{"className":4977},[],[4979],{"type":3048,"value":4980},"ban:*",{"type":3048,"value":4982}," keys) and ",{"type":3043,"tag":3200,"props":4984,"children":4986},{"className":4985},[],[4987],{"type":3048,"value":3305},{"type":3048,"value":4989}," (removes stale ",{"type":3043,"tag":3200,"props":4991,"children":4993},{"className":4992},[],[4994],{"type":3048,"value":4995},"ip:*",{"type":3048,"value":4997}," keys using ",{"type":3043,"tag":3200,"props":4999,"children":5001},{"className":5000},[],[5002],{"type":3048,"value":5003},"ipTTL",{"type":3048,"value":5005},"). Turn on Nitro tasks and add ",{"type":3043,"tag":3200,"props":5007,"children":5009},{"className":5008},[],[5010],{"type":3048,"value":5011},"scheduledTasks",{"type":3048,"value":5013}," so they run on a cadence you choose. You do ",{"type":3043,"tag":3138,"props":5015,"children":5016},{},[5017],{"type":3048,"value":5018},"not",{"type":3048,"value":5020}," need files under ",{"type":3043,"tag":3200,"props":5022,"children":5024},{"className":5023},[],[5025],{"type":3048,"value":5026},"server\u002Ftasks\u002F",{"type":3048,"value":5028}," for this default setup.",{"type":3043,"tag":3403,"props":5030,"children":5032},{"className":4576,"code":5031,"language":4578,"meta":2987,"style":2987},"{\n  \"nitro\": {\n    \"experimental\": {\n      \"tasks\": true\n    },\n    \"scheduledTasks\": {\n      \"*\u002F15 * * * *\": [\"shield:cleanBans\"],\n      \"0 0 * * *\": [\"shield:cleanIpData\"]\n    }\n  }\n}\n",[5033],{"type":3043,"tag":3200,"props":5034,"children":5035},{"__ignoreMap":2987},[5036,5043,5066,5090,5115,5122,5145,5186,5227,5234,5241],{"type":3043,"tag":3413,"props":5037,"children":5038},{"class":3415,"line":3015},[5039],{"type":3043,"tag":3413,"props":5040,"children":5041},{"style":3579},[5042],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":5044,"children":5045},{"class":3415,"line":3011},[5046,5050,5054,5058,5062],{"type":3043,"tag":3413,"props":5047,"children":5048},{"style":3579},[5049],{"type":3048,"value":4597},{"type":3043,"tag":3413,"props":5051,"children":5052},{"style":4600},[5053],{"type":3048,"value":4603},{"type":3043,"tag":3413,"props":5055,"children":5056},{"style":3579},[5057],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5059,"children":5060},{"style":3579},[5061],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5063,"children":5064},{"style":3579},[5065],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":5067,"children":5068},{"class":3415,"line":3445},[5069,5073,5078,5082,5086],{"type":3043,"tag":3413,"props":5070,"children":5071},{"style":3579},[5072],{"type":3048,"value":4623},{"type":3043,"tag":3413,"props":5074,"children":5075},{"style":3428},[5076],{"type":3048,"value":5077},"experimental",{"type":3043,"tag":3413,"props":5079,"children":5080},{"style":3579},[5081],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5083,"children":5084},{"style":3579},[5085],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5087,"children":5088},{"style":3579},[5089],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":5091,"children":5092},{"class":3415,"line":3454},[5093,5097,5102,5106,5110],{"type":3043,"tag":3413,"props":5094,"children":5095},{"style":3579},[5096],{"type":3048,"value":4648},{"type":3043,"tag":3413,"props":5098,"children":5099},{"style":3853},[5100],{"type":3048,"value":5101},"tasks",{"type":3043,"tag":3413,"props":5103,"children":5104},{"style":3579},[5105],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5107,"children":5108},{"style":3579},[5109],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5111,"children":5112},{"style":3579},[5113],{"type":3048,"value":5114}," true\n",{"type":3043,"tag":3413,"props":5116,"children":5117},{"class":3415,"line":3007},[5118],{"type":3043,"tag":3413,"props":5119,"children":5120},{"style":3579},[5121],{"type":3048,"value":3689},{"type":3043,"tag":3413,"props":5123,"children":5124},{"class":3415,"line":3479},[5125,5129,5133,5137,5141],{"type":3043,"tag":3413,"props":5126,"children":5127},{"style":3579},[5128],{"type":3048,"value":4623},{"type":3043,"tag":3413,"props":5130,"children":5131},{"style":3428},[5132],{"type":3048,"value":5011},{"type":3043,"tag":3413,"props":5134,"children":5135},{"style":3579},[5136],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5138,"children":5139},{"style":3579},[5140],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5142,"children":5143},{"style":3579},[5144],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":5146,"children":5147},{"class":3415,"line":3487},[5148,5152,5157,5161,5165,5169,5173,5177,5181],{"type":3043,"tag":3413,"props":5149,"children":5150},{"style":3579},[5151],{"type":3048,"value":4648},{"type":3043,"tag":3413,"props":5153,"children":5154},{"style":3853},[5155],{"type":3048,"value":5156},"*\u002F15 * * * *",{"type":3043,"tag":3413,"props":5158,"children":5159},{"style":3579},[5160],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5162,"children":5163},{"style":3579},[5164],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5166,"children":5167},{"style":3579},[5168],{"type":3048,"value":3601},{"type":3043,"tag":3413,"props":5170,"children":5171},{"style":3579},[5172],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5174,"children":5175},{"style":3434},[5176],{"type":3048,"value":3297},{"type":3043,"tag":3413,"props":5178,"children":5179},{"style":3579},[5180],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5182,"children":5183},{"style":3579},[5184],{"type":3048,"value":5185},"],\n",{"type":3043,"tag":3413,"props":5187,"children":5188},{"class":3415,"line":3496},[5189,5193,5198,5202,5206,5210,5214,5218,5222],{"type":3043,"tag":3413,"props":5190,"children":5191},{"style":3579},[5192],{"type":3048,"value":4648},{"type":3043,"tag":3413,"props":5194,"children":5195},{"style":3853},[5196],{"type":3048,"value":5197},"0 0 * * *",{"type":3043,"tag":3413,"props":5199,"children":5200},{"style":3579},[5201],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5203,"children":5204},{"style":3579},[5205],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5207,"children":5208},{"style":3579},[5209],{"type":3048,"value":3601},{"type":3043,"tag":3413,"props":5211,"children":5212},{"style":3579},[5213],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5215,"children":5216},{"style":3434},[5217],{"type":3048,"value":3305},{"type":3043,"tag":3413,"props":5219,"children":5220},{"style":3579},[5221],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5223,"children":5224},{"style":3579},[5225],{"type":3048,"value":5226},"]\n",{"type":3043,"tag":3413,"props":5228,"children":5229},{"class":3415,"line":3032},[5230],{"type":3043,"tag":3413,"props":5231,"children":5232},{"style":3579},[5233],{"type":3048,"value":4723},{"type":3043,"tag":3413,"props":5235,"children":5236},{"class":3415,"line":3692},[5237],{"type":3043,"tag":3413,"props":5238,"children":5239},{"style":3579},[5240],{"type":3048,"value":4386},{"type":3043,"tag":3413,"props":5242,"children":5243},{"class":3415,"line":3701},[5244],{"type":3043,"tag":3413,"props":5245,"children":5246},{"style":3579},[5247],{"type":3048,"value":4394},{"type":3043,"tag":3050,"props":5249,"children":5250},{},[5251],{"type":3048,"value":5252},"Cron expressions are examples only: for instance, clean expired bans every 15 minutes and IP tracking data daily at midnight.",{"type":3043,"tag":3389,"props":5254,"children":5256},{"id":5255},"_5-optional-custom-cleanup-task-implementations",[5257],{"type":3048,"value":5258},"5. Optional: custom cleanup task implementations",{"type":3043,"tag":3050,"props":5260,"children":5261},{},[5262,5264,5269,5271,5276],{"type":3048,"value":5263},"Skip this unless you need behavior different from the bundled handlers (for example extra logging, metrics, or storage layout). The snippets below mirror what the module already ships; they are useful as a reference or if you define ",{"type":3043,"tag":3138,"props":5265,"children":5266},{},[5267],{"type":3048,"value":5268},"another",{"type":3048,"value":5270}," task name and point ",{"type":3043,"tag":3200,"props":5272,"children":5274},{"className":5273},[],[5275],{"type":3048,"value":5011},{"type":3048,"value":5277}," at that name instead.",{"type":3043,"tag":5279,"props":5280,"children":5282},"h4",{"id":5281},"a-task-for-cleaning-expired-bans",[5283],{"type":3048,"value":5284},"a) Task for cleaning expired bans",{"type":3043,"tag":3050,"props":5286,"children":5287},{},[5288,5290,5296],{"type":3048,"value":5289},"Removes ban entries (",{"type":3043,"tag":3200,"props":5291,"children":5293},{"className":5292},[],[5294],{"type":3048,"value":5295},"ban:xxx.xxx.xxx.xxx",{"type":3048,"value":5297},") after the ban timestamp has passed.",{"type":3043,"tag":3050,"props":5299,"children":5300},{},[5301,5303,5309],{"type":3048,"value":5302},"Example ",{"type":3043,"tag":3200,"props":5304,"children":5306},{"className":5305},[],[5307],{"type":3048,"value":5308},"server\u002Ftasks\u002Fshield\u002FcleanBans.ts",{"type":3048,"value":5310}," (task name must match what you schedule):",{"type":3043,"tag":3403,"props":5312,"children":5316},{"className":5313,"code":5314,"language":5315,"meta":2987,"style":2987},"language-ts shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","import { isActualBanTimestampExpired } from \"#imports\"; \u002F\u002F Auto-imported utility from nuxt-api-shield\n\nexport default defineTask({\n  meta: {\n    name: \"shield:cleanBans\", \u002F\u002F Match the name in scheduledTasks\n    description: \"Clean expired bans from nuxt-api-shield storage.\",\n  },\n  async run() {\n    const shieldStorage = useStorage(\"shield\"); \u002F\u002F Use your configured storage name\n\n    \u002F\u002F Only fetch keys that start with the 'ban:' prefix\n    const banKeys = await shieldStorage.getKeys(\"ban:\");\n\n    let cleanedCount = 0;\n    for (const key of banKeys) {\n      const bannedUntilRaw = await shieldStorage.getItem(key);\n      if (isActualBanTimestampExpired(bannedUntilRaw)) {\n        await shieldStorage.removeItem(key);\n        cleanedCount++;\n      }\n    }\n    console.log(`[nuxt-api-shield] Cleaned ${cleanedCount} expired ban(s).`);\n    return { result: { cleanedCount } };\n  },\n});\n","ts",[5317],{"type":3043,"tag":3200,"props":5318,"children":5319},{"__ignoreMap":2987},[5320,5371,5378,5402,5418,5451,5480,5487,5509,5561,5568,5576,5635,5642,5667,5708,5759,5794,5831,5844,5851,5858,5920,5958,5965],{"type":3043,"tag":3413,"props":5321,"children":5322},{"class":3415,"line":3015},[5323,5328,5333,5338,5343,5348,5352,5357,5361,5366],{"type":3043,"tag":3413,"props":5324,"children":5325},{"style":3556},[5326],{"type":3048,"value":5327},"import",{"type":3043,"tag":3413,"props":5329,"children":5330},{"style":3579},[5331],{"type":3048,"value":5332}," {",{"type":3043,"tag":3413,"props":5334,"children":5335},{"style":3573},[5336],{"type":3048,"value":5337}," isActualBanTimestampExpired",{"type":3043,"tag":3413,"props":5339,"children":5340},{"style":3579},[5341],{"type":3048,"value":5342}," }",{"type":3043,"tag":3413,"props":5344,"children":5345},{"style":3556},[5346],{"type":3048,"value":5347}," from",{"type":3043,"tag":3413,"props":5349,"children":5350},{"style":3579},[5351],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":5353,"children":5354},{"style":3434},[5355],{"type":3048,"value":5356},"#imports",{"type":3043,"tag":3413,"props":5358,"children":5359},{"style":3579},[5360],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5362,"children":5363},{"style":3579},[5364],{"type":3048,"value":5365},";",{"type":3043,"tag":3413,"props":5367,"children":5368},{"style":3419},[5369],{"type":3048,"value":5370}," \u002F\u002F Auto-imported utility from nuxt-api-shield\n",{"type":3043,"tag":3413,"props":5372,"children":5373},{"class":3415,"line":3011},[5374],{"type":3043,"tag":3413,"props":5375,"children":5376},{"emptyLinePlaceholder":1200},[5377],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":5379,"children":5380},{"class":3415,"line":3445},[5381,5385,5389,5394,5398],{"type":3043,"tag":3413,"props":5382,"children":5383},{"style":3556},[5384],{"type":3048,"value":3559},{"type":3043,"tag":3413,"props":5386,"children":5387},{"style":3556},[5388],{"type":3048,"value":3564},{"type":3043,"tag":3413,"props":5390,"children":5391},{"style":3567},[5392],{"type":3048,"value":5393}," defineTask",{"type":3043,"tag":3413,"props":5395,"children":5396},{"style":3573},[5397],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":5399,"children":5400},{"style":3579},[5401],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":5403,"children":5404},{"class":3415,"line":3454},[5405,5410,5414],{"type":3043,"tag":3413,"props":5406,"children":5407},{"style":3588},[5408],{"type":3048,"value":5409},"  meta",{"type":3043,"tag":3413,"props":5411,"children":5412},{"style":3579},[5413],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5415,"children":5416},{"style":3579},[5417],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":5419,"children":5420},{"class":3415,"line":3007},[5421,5426,5430,5434,5438,5442,5446],{"type":3043,"tag":3413,"props":5422,"children":5423},{"style":3588},[5424],{"type":3048,"value":5425},"    name",{"type":3043,"tag":3413,"props":5427,"children":5428},{"style":3579},[5429],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5431,"children":5432},{"style":3579},[5433],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":5435,"children":5436},{"style":3434},[5437],{"type":3048,"value":3297},{"type":3043,"tag":3413,"props":5439,"children":5440},{"style":3579},[5441],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5443,"children":5444},{"style":3579},[5445],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":5447,"children":5448},{"style":3419},[5449],{"type":3048,"value":5450}," \u002F\u002F Match the name in scheduledTasks\n",{"type":3043,"tag":3413,"props":5452,"children":5453},{"class":3415,"line":3479},[5454,5459,5463,5467,5472,5476],{"type":3043,"tag":3413,"props":5455,"children":5456},{"style":3588},[5457],{"type":3048,"value":5458},"    description",{"type":3043,"tag":3413,"props":5460,"children":5461},{"style":3579},[5462],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5464,"children":5465},{"style":3579},[5466],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":5468,"children":5469},{"style":3434},[5470],{"type":3048,"value":5471},"Clean expired bans from nuxt-api-shield storage.",{"type":3043,"tag":3413,"props":5473,"children":5474},{"style":3579},[5475],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5477,"children":5478},{"style":3579},[5479],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":5481,"children":5482},{"class":3415,"line":3487},[5483],{"type":3043,"tag":3413,"props":5484,"children":5485},{"style":3579},[5486],{"type":3048,"value":3936},{"type":3043,"tag":3413,"props":5488,"children":5489},{"class":3415,"line":3496},[5490,5495,5500,5505],{"type":3043,"tag":3413,"props":5491,"children":5492},{"style":4600},[5493],{"type":3048,"value":5494},"  async",{"type":3043,"tag":3413,"props":5496,"children":5497},{"style":3588},[5498],{"type":3048,"value":5499}," run",{"type":3043,"tag":3413,"props":5501,"children":5502},{"style":3579},[5503],{"type":3048,"value":5504},"()",{"type":3043,"tag":3413,"props":5506,"children":5507},{"style":3579},[5508],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":5510,"children":5511},{"class":3415,"line":3032},[5512,5517,5522,5527,5532,5536,5540,5544,5548,5552,5556],{"type":3043,"tag":3413,"props":5513,"children":5514},{"style":4600},[5515],{"type":3048,"value":5516},"    const",{"type":3043,"tag":3413,"props":5518,"children":5519},{"style":3573},[5520],{"type":3048,"value":5521}," shieldStorage",{"type":3043,"tag":3413,"props":5523,"children":5524},{"style":3579},[5525],{"type":3048,"value":5526}," =",{"type":3043,"tag":3413,"props":5528,"children":5529},{"style":3567},[5530],{"type":3048,"value":5531}," useStorage",{"type":3043,"tag":3413,"props":5533,"children":5534},{"style":3588},[5535],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":5537,"children":5538},{"style":3579},[5539],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5541,"children":5542},{"style":3434},[5543],{"type":3048,"value":4571},{"type":3043,"tag":3413,"props":5545,"children":5546},{"style":3579},[5547],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5549,"children":5550},{"style":3588},[5551],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":5553,"children":5554},{"style":3579},[5555],{"type":3048,"value":5365},{"type":3043,"tag":3413,"props":5557,"children":5558},{"style":3419},[5559],{"type":3048,"value":5560}," \u002F\u002F Use your configured storage name\n",{"type":3043,"tag":3413,"props":5562,"children":5563},{"class":3415,"line":3692},[5564],{"type":3043,"tag":3413,"props":5565,"children":5566},{"emptyLinePlaceholder":1200},[5567],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":5569,"children":5570},{"class":3415,"line":3701},[5571],{"type":3043,"tag":3413,"props":5572,"children":5573},{"style":3419},[5574],{"type":3048,"value":5575},"    \u002F\u002F Only fetch keys that start with the 'ban:' prefix\n",{"type":3043,"tag":3413,"props":5577,"children":5578},{"class":3415,"line":3710},[5579,5583,5588,5592,5597,5601,5605,5610,5614,5618,5623,5627,5631],{"type":3043,"tag":3413,"props":5580,"children":5581},{"style":4600},[5582],{"type":3048,"value":5516},{"type":3043,"tag":3413,"props":5584,"children":5585},{"style":3573},[5586],{"type":3048,"value":5587}," banKeys",{"type":3043,"tag":3413,"props":5589,"children":5590},{"style":3579},[5591],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":5593,"children":5594},{"style":3556},[5595],{"type":3048,"value":5596}," await",{"type":3043,"tag":3413,"props":5598,"children":5599},{"style":3573},[5600],{"type":3048,"value":5521},{"type":3043,"tag":3413,"props":5602,"children":5603},{"style":3579},[5604],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":5606,"children":5607},{"style":3567},[5608],{"type":3048,"value":5609},"getKeys",{"type":3043,"tag":3413,"props":5611,"children":5612},{"style":3588},[5613],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":5615,"children":5616},{"style":3579},[5617],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5619,"children":5620},{"style":3434},[5621],{"type":3048,"value":5622},"ban:",{"type":3043,"tag":3413,"props":5624,"children":5625},{"style":3579},[5626],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":5628,"children":5629},{"style":3588},[5630],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":5632,"children":5633},{"style":3579},[5634],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":5636,"children":5637},{"class":3415,"line":3719},[5638],{"type":3043,"tag":3413,"props":5639,"children":5640},{"emptyLinePlaceholder":1200},[5641],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":5643,"children":5644},{"class":3415,"line":3728},[5645,5650,5655,5659,5663],{"type":3043,"tag":3413,"props":5646,"children":5647},{"style":4600},[5648],{"type":3048,"value":5649},"    let",{"type":3043,"tag":3413,"props":5651,"children":5652},{"style":3573},[5653],{"type":3048,"value":5654}," cleanedCount",{"type":3043,"tag":3413,"props":5656,"children":5657},{"style":3579},[5658],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":5660,"children":5661},{"style":3853},[5662],{"type":3048,"value":4213},{"type":3043,"tag":3413,"props":5664,"children":5665},{"style":3579},[5666],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":5668,"children":5669},{"class":3415,"line":3737},[5670,5675,5680,5685,5690,5695,5699,5704],{"type":3043,"tag":3413,"props":5671,"children":5672},{"style":3556},[5673],{"type":3048,"value":5674},"    for",{"type":3043,"tag":3413,"props":5676,"children":5677},{"style":3588},[5678],{"type":3048,"value":5679}," (",{"type":3043,"tag":3413,"props":5681,"children":5682},{"style":4600},[5683],{"type":3048,"value":5684},"const",{"type":3043,"tag":3413,"props":5686,"children":5687},{"style":3573},[5688],{"type":3048,"value":5689}," key",{"type":3043,"tag":3413,"props":5691,"children":5692},{"style":3579},[5693],{"type":3048,"value":5694}," of",{"type":3043,"tag":3413,"props":5696,"children":5697},{"style":3573},[5698],{"type":3048,"value":5587},{"type":3043,"tag":3413,"props":5700,"children":5701},{"style":3588},[5702],{"type":3048,"value":5703},") ",{"type":3043,"tag":3413,"props":5705,"children":5706},{"style":3579},[5707],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":5709,"children":5710},{"class":3415,"line":3746},[5711,5716,5721,5725,5729,5733,5737,5742,5746,5751,5755],{"type":3043,"tag":3413,"props":5712,"children":5713},{"style":4600},[5714],{"type":3048,"value":5715},"      const",{"type":3043,"tag":3413,"props":5717,"children":5718},{"style":3573},[5719],{"type":3048,"value":5720}," bannedUntilRaw",{"type":3043,"tag":3413,"props":5722,"children":5723},{"style":3579},[5724],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":5726,"children":5727},{"style":3556},[5728],{"type":3048,"value":5596},{"type":3043,"tag":3413,"props":5730,"children":5731},{"style":3573},[5732],{"type":3048,"value":5521},{"type":3043,"tag":3413,"props":5734,"children":5735},{"style":3579},[5736],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":5738,"children":5739},{"style":3567},[5740],{"type":3048,"value":5741},"getItem",{"type":3043,"tag":3413,"props":5743,"children":5744},{"style":3588},[5745],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":5747,"children":5748},{"style":3573},[5749],{"type":3048,"value":5750},"key",{"type":3043,"tag":3413,"props":5752,"children":5753},{"style":3588},[5754],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":5756,"children":5757},{"style":3579},[5758],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":5760,"children":5761},{"class":3415,"line":3755},[5762,5767,5771,5776,5780,5785,5790],{"type":3043,"tag":3413,"props":5763,"children":5764},{"style":3556},[5765],{"type":3048,"value":5766},"      if",{"type":3043,"tag":3413,"props":5768,"children":5769},{"style":3588},[5770],{"type":3048,"value":5679},{"type":3043,"tag":3413,"props":5772,"children":5773},{"style":3567},[5774],{"type":3048,"value":5775},"isActualBanTimestampExpired",{"type":3043,"tag":3413,"props":5777,"children":5778},{"style":3588},[5779],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":5781,"children":5782},{"style":3573},[5783],{"type":3048,"value":5784},"bannedUntilRaw",{"type":3043,"tag":3413,"props":5786,"children":5787},{"style":3588},[5788],{"type":3048,"value":5789},")) ",{"type":3043,"tag":3413,"props":5791,"children":5792},{"style":3579},[5793],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":5795,"children":5796},{"class":3415,"line":3763},[5797,5802,5806,5810,5815,5819,5823,5827],{"type":3043,"tag":3413,"props":5798,"children":5799},{"style":3556},[5800],{"type":3048,"value":5801},"        await",{"type":3043,"tag":3413,"props":5803,"children":5804},{"style":3573},[5805],{"type":3048,"value":5521},{"type":3043,"tag":3413,"props":5807,"children":5808},{"style":3579},[5809],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":5811,"children":5812},{"style":3567},[5813],{"type":3048,"value":5814},"removeItem",{"type":3043,"tag":3413,"props":5816,"children":5817},{"style":3588},[5818],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":5820,"children":5821},{"style":3573},[5822],{"type":3048,"value":5750},{"type":3043,"tag":3413,"props":5824,"children":5825},{"style":3588},[5826],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":5828,"children":5829},{"style":3579},[5830],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":5832,"children":5833},{"class":3415,"line":3772},[5834,5839],{"type":3043,"tag":3413,"props":5835,"children":5836},{"style":3573},[5837],{"type":3048,"value":5838},"        cleanedCount",{"type":3043,"tag":3413,"props":5840,"children":5841},{"style":3579},[5842],{"type":3048,"value":5843},"++;\n",{"type":3043,"tag":3413,"props":5845,"children":5846},{"class":3415,"line":3781},[5847],{"type":3043,"tag":3413,"props":5848,"children":5849},{"style":3579},[5850],{"type":3048,"value":4715},{"type":3043,"tag":3413,"props":5852,"children":5853},{"class":3415,"line":3795},[5854],{"type":3043,"tag":3413,"props":5855,"children":5856},{"style":3579},[5857],{"type":3048,"value":4723},{"type":3043,"tag":3413,"props":5859,"children":5860},{"class":3415,"line":3823},[5861,5866,5870,5875,5879,5884,5889,5894,5899,5903,5908,5912,5916],{"type":3043,"tag":3413,"props":5862,"children":5863},{"style":3573},[5864],{"type":3048,"value":5865},"    console",{"type":3043,"tag":3413,"props":5867,"children":5868},{"style":3579},[5869],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":5871,"children":5872},{"style":3567},[5873],{"type":3048,"value":5874},"log",{"type":3043,"tag":3413,"props":5876,"children":5877},{"style":3588},[5878],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":5880,"children":5881},{"style":3579},[5882],{"type":3048,"value":5883},"`",{"type":3043,"tag":3413,"props":5885,"children":5886},{"style":3434},[5887],{"type":3048,"value":5888},"[nuxt-api-shield] Cleaned ",{"type":3043,"tag":3413,"props":5890,"children":5891},{"style":3579},[5892],{"type":3048,"value":5893},"${",{"type":3043,"tag":3413,"props":5895,"children":5896},{"style":3573},[5897],{"type":3048,"value":5898},"cleanedCount",{"type":3043,"tag":3413,"props":5900,"children":5901},{"style":3579},[5902],{"type":3048,"value":3945},{"type":3043,"tag":3413,"props":5904,"children":5905},{"style":3434},[5906],{"type":3048,"value":5907}," expired ban(s).",{"type":3043,"tag":3413,"props":5909,"children":5910},{"style":3579},[5911],{"type":3048,"value":5883},{"type":3043,"tag":3413,"props":5913,"children":5914},{"style":3588},[5915],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":5917,"children":5918},{"style":3579},[5919],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":5921,"children":5922},{"class":3415,"line":3831},[5923,5928,5932,5937,5941,5945,5949,5953],{"type":3043,"tag":3413,"props":5924,"children":5925},{"style":3556},[5926],{"type":3048,"value":5927},"    return",{"type":3043,"tag":3413,"props":5929,"children":5930},{"style":3579},[5931],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":5933,"children":5934},{"style":3588},[5935],{"type":3048,"value":5936}," result",{"type":3043,"tag":3413,"props":5938,"children":5939},{"style":3579},[5940],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":5942,"children":5943},{"style":3579},[5944],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":5946,"children":5947},{"style":3573},[5948],{"type":3048,"value":5654},{"type":3043,"tag":3413,"props":5950,"children":5951},{"style":3579},[5952],{"type":3048,"value":5342},{"type":3043,"tag":3413,"props":5954,"children":5955},{"style":3579},[5956],{"type":3048,"value":5957}," };\n",{"type":3043,"tag":3413,"props":5959,"children":5960},{"class":3415,"line":3840},[5961],{"type":3043,"tag":3413,"props":5962,"children":5963},{"style":3579},[5964],{"type":3048,"value":3936},{"type":3043,"tag":3413,"props":5966,"children":5967},{"class":3415,"line":3868},[5968,5972,5976],{"type":3043,"tag":3413,"props":5969,"children":5970},{"style":3579},[5971],{"type":3048,"value":3945},{"type":3043,"tag":3413,"props":5973,"children":5974},{"style":3573},[5975],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":5977,"children":5978},{"style":3579},[5979],{"type":3048,"value":3955},{"type":3043,"tag":3050,"props":5981,"children":5982},{},[5983,5984,5989,5991,5996,5998,6003],{"type":3048,"value":4413},{"type":3043,"tag":3200,"props":5985,"children":5987},{"className":5986},[],[5988],{"type":3048,"value":5775},{"type":3048,"value":5990}," utility is provided by ",{"type":3043,"tag":3200,"props":5992,"children":5994},{"className":5993},[],[5995],{"type":3048,"value":2984},{"type":3048,"value":5997}," and should be available via ",{"type":3043,"tag":3200,"props":5999,"children":6001},{"className":6000},[],[6002],{"type":3048,"value":5356},{"type":3048,"value":4542},{"type":3043,"tag":5279,"props":6005,"children":6007},{"id":6006},"b-task-for-cleaning-old-ip-tracking-data",[6008],{"type":3048,"value":6009},"b) Task for cleaning old IP tracking data",{"type":3043,"tag":3050,"props":6011,"children":6012},{},[6013,6015,6021,6023,6029,6031,6037],{"type":3048,"value":6014},"Cleans IP tracking entries (",{"type":3043,"tag":3200,"props":6016,"children":6018},{"className":6017},[],[6019],{"type":3048,"value":6020},"ip:xxx.xxx.xxx.xxx",{"type":3048,"value":6022},") whose ",{"type":3043,"tag":3200,"props":6024,"children":6026},{"className":6025},[],[6027],{"type":3048,"value":6028},"time",{"type":3048,"value":6030}," is older than ",{"type":3043,"tag":3200,"props":6032,"children":6034},{"className":6033},[],[6035],{"type":3048,"value":6036},"nuxtApiShield.ipTTL",{"type":3048,"value":6038}," (default 7 days), and drops malformed entries. That keeps storage from growing with one-off IPs that were never banned.",{"type":3043,"tag":3050,"props":6040,"children":6041},{},[6042,6043,6049],{"type":3048,"value":5302},{"type":3043,"tag":3200,"props":6044,"children":6046},{"className":6045},[],[6047],{"type":3048,"value":6048},"server\u002Ftasks\u002Fshield\u002FcleanIpData.ts",{"type":3048,"value":3596},{"type":3043,"tag":3403,"props":6051,"children":6053},{"className":5313,"code":6052,"language":5315,"meta":2987,"style":2987},"import type { RateLimit } from \"nuxt-api-shield\";\nimport { useRuntimeConfig } from \"#imports\";\n\nexport default defineTask({\n  meta: {\n    name: \"shield:cleanIpData\", \u002F\u002F Match the name in scheduledTasks\n    description: \"Clean old IP tracking data from nuxt-api-shield storage.\",\n  },\n  async run() {\n    const shieldStorage = useStorage(\"shield\");\n    const config = useRuntimeConfig().public.nuxtApiShield;\n\n    \u002F\u002F ipTTL is expected to be in seconds from config (module applies default if not set by user)\n    const ipTTLseconds = config.ipTTL;\n\n    if (!ipTTLseconds || ipTTLseconds \u003C= 0) {\n      console.log(\n        \"[nuxt-api-shield] IP data cleanup (ipTTL) is disabled or invalid.\"\n      );\n      return { result: { cleanedCount: 0 }, status: \"disabled_or_invalid_ttl\" };\n    }\n    const ipTTLms = ipTTLseconds * 1000;\n\n    const ipKeys = await shieldStorage.getKeys(\"ip:\");\n    const currentTime = Date.now();\n    let cleanedCount = 0;\n\n    for (const key of ipKeys) {\n      const entry = (await shieldStorage.getItem(key)) as RateLimit | null;\n\n      \u002F\u002F Check if entry exists and has a numeric 'time' property\n      if (entry && typeof entry.time === \"number\") {\n        if (currentTime - entry.time > ipTTLms) {\n          await shieldStorage.removeItem(key);\n          cleanedCount++;\n        }\n      } else {\n        \u002F\u002F Clean up entries that are null, not an object, or missing a numeric 'time'\n        await shieldStorage.removeItem(key);\n        cleanedCount++;\n      }\n    }\n\n    console.log(\n      `[nuxt-api-shield] Cleaned ${cleanedCount} old\u002Fmalformed IP data entries.`\n    );\n    return { result: { cleanedCount } };\n  },\n});\n",[6054],{"type":3043,"tag":3200,"props":6055,"children":6056},{"__ignoreMap":2987},[6057,6102,6142,6149,6172,6187,6218,6246,6253,6272,6315,6359,6366,6374,6406,6413,6461,6482,6498,6510,6577,6584,6617,6624,6681,6719,6742,6749,6784,6856,6863,6872,6937,6989,7026,7039,7048,7066,7075,7111,7123,7131,7139,7147,7167,7202,7215,7251,7259],{"type":3043,"tag":3413,"props":6058,"children":6059},{"class":3415,"line":3015},[6060,6064,6069,6073,6078,6082,6086,6090,6094,6098],{"type":3043,"tag":3413,"props":6061,"children":6062},{"style":3556},[6063],{"type":3048,"value":5327},{"type":3043,"tag":3413,"props":6065,"children":6066},{"style":3556},[6067],{"type":3048,"value":6068}," type",{"type":3043,"tag":3413,"props":6070,"children":6071},{"style":3579},[6072],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":6074,"children":6075},{"style":3573},[6076],{"type":3048,"value":6077}," RateLimit",{"type":3043,"tag":3413,"props":6079,"children":6080},{"style":3579},[6081],{"type":3048,"value":5342},{"type":3043,"tag":3413,"props":6083,"children":6084},{"style":3556},[6085],{"type":3048,"value":5347},{"type":3043,"tag":3413,"props":6087,"children":6088},{"style":3579},[6089],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":6091,"children":6092},{"style":3434},[6093],{"type":3048,"value":2984},{"type":3043,"tag":3413,"props":6095,"children":6096},{"style":3579},[6097],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6099,"children":6100},{"style":3579},[6101],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6103,"children":6104},{"class":3415,"line":3011},[6105,6109,6113,6118,6122,6126,6130,6134,6138],{"type":3043,"tag":3413,"props":6106,"children":6107},{"style":3556},[6108],{"type":3048,"value":5327},{"type":3043,"tag":3413,"props":6110,"children":6111},{"style":3579},[6112],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":6114,"children":6115},{"style":3573},[6116],{"type":3048,"value":6117}," useRuntimeConfig",{"type":3043,"tag":3413,"props":6119,"children":6120},{"style":3579},[6121],{"type":3048,"value":5342},{"type":3043,"tag":3413,"props":6123,"children":6124},{"style":3556},[6125],{"type":3048,"value":5347},{"type":3043,"tag":3413,"props":6127,"children":6128},{"style":3579},[6129],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":6131,"children":6132},{"style":3434},[6133],{"type":3048,"value":5356},{"type":3043,"tag":3413,"props":6135,"children":6136},{"style":3579},[6137],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6139,"children":6140},{"style":3579},[6141],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6143,"children":6144},{"class":3415,"line":3445},[6145],{"type":3043,"tag":3413,"props":6146,"children":6147},{"emptyLinePlaceholder":1200},[6148],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":6150,"children":6151},{"class":3415,"line":3454},[6152,6156,6160,6164,6168],{"type":3043,"tag":3413,"props":6153,"children":6154},{"style":3556},[6155],{"type":3048,"value":3559},{"type":3043,"tag":3413,"props":6157,"children":6158},{"style":3556},[6159],{"type":3048,"value":3564},{"type":3043,"tag":3413,"props":6161,"children":6162},{"style":3567},[6163],{"type":3048,"value":5393},{"type":3043,"tag":3413,"props":6165,"children":6166},{"style":3573},[6167],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":6169,"children":6170},{"style":3579},[6171],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":6173,"children":6174},{"class":3415,"line":3007},[6175,6179,6183],{"type":3043,"tag":3413,"props":6176,"children":6177},{"style":3588},[6178],{"type":3048,"value":5409},{"type":3043,"tag":3413,"props":6180,"children":6181},{"style":3579},[6182],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":6184,"children":6185},{"style":3579},[6186],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":6188,"children":6189},{"class":3415,"line":3479},[6190,6194,6198,6202,6206,6210,6214],{"type":3043,"tag":3413,"props":6191,"children":6192},{"style":3588},[6193],{"type":3048,"value":5425},{"type":3043,"tag":3413,"props":6195,"children":6196},{"style":3579},[6197],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":6199,"children":6200},{"style":3579},[6201],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":6203,"children":6204},{"style":3434},[6205],{"type":3048,"value":3305},{"type":3043,"tag":3413,"props":6207,"children":6208},{"style":3579},[6209],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6211,"children":6212},{"style":3579},[6213],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":6215,"children":6216},{"style":3419},[6217],{"type":3048,"value":5450},{"type":3043,"tag":3413,"props":6219,"children":6220},{"class":3415,"line":3487},[6221,6225,6229,6233,6238,6242],{"type":3043,"tag":3413,"props":6222,"children":6223},{"style":3588},[6224],{"type":3048,"value":5458},{"type":3043,"tag":3413,"props":6226,"children":6227},{"style":3579},[6228],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":6230,"children":6231},{"style":3579},[6232],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":6234,"children":6235},{"style":3434},[6236],{"type":3048,"value":6237},"Clean old IP tracking data from nuxt-api-shield storage.",{"type":3043,"tag":3413,"props":6239,"children":6240},{"style":3579},[6241],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6243,"children":6244},{"style":3579},[6245],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":6247,"children":6248},{"class":3415,"line":3496},[6249],{"type":3043,"tag":3413,"props":6250,"children":6251},{"style":3579},[6252],{"type":3048,"value":3936},{"type":3043,"tag":3413,"props":6254,"children":6255},{"class":3415,"line":3032},[6256,6260,6264,6268],{"type":3043,"tag":3413,"props":6257,"children":6258},{"style":4600},[6259],{"type":3048,"value":5494},{"type":3043,"tag":3413,"props":6261,"children":6262},{"style":3588},[6263],{"type":3048,"value":5499},{"type":3043,"tag":3413,"props":6265,"children":6266},{"style":3579},[6267],{"type":3048,"value":5504},{"type":3043,"tag":3413,"props":6269,"children":6270},{"style":3579},[6271],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":6273,"children":6274},{"class":3415,"line":3692},[6275,6279,6283,6287,6291,6295,6299,6303,6307,6311],{"type":3043,"tag":3413,"props":6276,"children":6277},{"style":4600},[6278],{"type":3048,"value":5516},{"type":3043,"tag":3413,"props":6280,"children":6281},{"style":3573},[6282],{"type":3048,"value":5521},{"type":3043,"tag":3413,"props":6284,"children":6285},{"style":3579},[6286],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":6288,"children":6289},{"style":3567},[6290],{"type":3048,"value":5531},{"type":3043,"tag":3413,"props":6292,"children":6293},{"style":3588},[6294],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":6296,"children":6297},{"style":3579},[6298],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6300,"children":6301},{"style":3434},[6302],{"type":3048,"value":4571},{"type":3043,"tag":3413,"props":6304,"children":6305},{"style":3579},[6306],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6308,"children":6309},{"style":3588},[6310],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":6312,"children":6313},{"style":3579},[6314],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6316,"children":6317},{"class":3415,"line":3701},[6318,6322,6327,6331,6335,6339,6343,6347,6351,6355],{"type":3043,"tag":3413,"props":6319,"children":6320},{"style":4600},[6321],{"type":3048,"value":5516},{"type":3043,"tag":3413,"props":6323,"children":6324},{"style":3573},[6325],{"type":3048,"value":6326}," config",{"type":3043,"tag":3413,"props":6328,"children":6329},{"style":3579},[6330],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":6332,"children":6333},{"style":3567},[6334],{"type":3048,"value":6117},{"type":3043,"tag":3413,"props":6336,"children":6337},{"style":3588},[6338],{"type":3048,"value":5504},{"type":3043,"tag":3413,"props":6340,"children":6341},{"style":3579},[6342],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":6344,"children":6345},{"style":3573},[6346],{"type":3048,"value":180},{"type":3043,"tag":3413,"props":6348,"children":6349},{"style":3579},[6350],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":6352,"children":6353},{"style":3573},[6354],{"type":3048,"value":3971},{"type":3043,"tag":3413,"props":6356,"children":6357},{"style":3579},[6358],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6360,"children":6361},{"class":3415,"line":3710},[6362],{"type":3043,"tag":3413,"props":6363,"children":6364},{"emptyLinePlaceholder":1200},[6365],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":6367,"children":6368},{"class":3415,"line":3719},[6369],{"type":3043,"tag":3413,"props":6370,"children":6371},{"style":3419},[6372],{"type":3048,"value":6373},"    \u002F\u002F ipTTL is expected to be in seconds from config (module applies default if not set by user)\n",{"type":3043,"tag":3413,"props":6375,"children":6376},{"class":3415,"line":3728},[6377,6381,6386,6390,6394,6398,6402],{"type":3043,"tag":3413,"props":6378,"children":6379},{"style":4600},[6380],{"type":3048,"value":5516},{"type":3043,"tag":3413,"props":6382,"children":6383},{"style":3573},[6384],{"type":3048,"value":6385}," ipTTLseconds",{"type":3043,"tag":3413,"props":6387,"children":6388},{"style":3579},[6389],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":6391,"children":6392},{"style":3573},[6393],{"type":3048,"value":6326},{"type":3043,"tag":3413,"props":6395,"children":6396},{"style":3579},[6397],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":6399,"children":6400},{"style":3573},[6401],{"type":3048,"value":5003},{"type":3043,"tag":3413,"props":6403,"children":6404},{"style":3579},[6405],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6407,"children":6408},{"class":3415,"line":3737},[6409],{"type":3043,"tag":3413,"props":6410,"children":6411},{"emptyLinePlaceholder":1200},[6412],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":6414,"children":6415},{"class":3415,"line":3746},[6416,6421,6425,6430,6435,6440,6444,6449,6453,6457],{"type":3043,"tag":3413,"props":6417,"children":6418},{"style":3556},[6419],{"type":3048,"value":6420},"    if",{"type":3043,"tag":3413,"props":6422,"children":6423},{"style":3588},[6424],{"type":3048,"value":5679},{"type":3043,"tag":3413,"props":6426,"children":6427},{"style":3579},[6428],{"type":3048,"value":6429},"!",{"type":3043,"tag":3413,"props":6431,"children":6432},{"style":3573},[6433],{"type":3048,"value":6434},"ipTTLseconds",{"type":3043,"tag":3413,"props":6436,"children":6437},{"style":3579},[6438],{"type":3048,"value":6439}," ||",{"type":3043,"tag":3413,"props":6441,"children":6442},{"style":3573},[6443],{"type":3048,"value":6385},{"type":3043,"tag":3413,"props":6445,"children":6446},{"style":3579},[6447],{"type":3048,"value":6448}," \u003C=",{"type":3043,"tag":3413,"props":6450,"children":6451},{"style":3853},[6452],{"type":3048,"value":4213},{"type":3043,"tag":3413,"props":6454,"children":6455},{"style":3588},[6456],{"type":3048,"value":5703},{"type":3043,"tag":3413,"props":6458,"children":6459},{"style":3579},[6460],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":6462,"children":6463},{"class":3415,"line":3755},[6464,6469,6473,6477],{"type":3043,"tag":3413,"props":6465,"children":6466},{"style":3573},[6467],{"type":3048,"value":6468},"      console",{"type":3043,"tag":3413,"props":6470,"children":6471},{"style":3579},[6472],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":6474,"children":6475},{"style":3567},[6476],{"type":3048,"value":5874},{"type":3043,"tag":3413,"props":6478,"children":6479},{"style":3588},[6480],{"type":3048,"value":6481},"(\n",{"type":3043,"tag":3413,"props":6483,"children":6484},{"class":3415,"line":3763},[6485,6489,6494],{"type":3043,"tag":3413,"props":6486,"children":6487},{"style":3579},[6488],{"type":3048,"value":4680},{"type":3043,"tag":3413,"props":6490,"children":6491},{"style":3434},[6492],{"type":3048,"value":6493},"[nuxt-api-shield] IP data cleanup (ipTTL) is disabled or invalid.",{"type":3043,"tag":3413,"props":6495,"children":6496},{"style":3579},[6497],{"type":3048,"value":4707},{"type":3043,"tag":3413,"props":6499,"children":6500},{"class":3415,"line":3772},[6501,6506],{"type":3043,"tag":3413,"props":6502,"children":6503},{"style":3588},[6504],{"type":3048,"value":6505},"      )",{"type":3043,"tag":3413,"props":6507,"children":6508},{"style":3579},[6509],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6511,"children":6512},{"class":3415,"line":3781},[6513,6518,6522,6526,6530,6534,6538,6542,6546,6551,6556,6560,6564,6569,6573],{"type":3043,"tag":3413,"props":6514,"children":6515},{"style":3556},[6516],{"type":3048,"value":6517},"      return",{"type":3043,"tag":3413,"props":6519,"children":6520},{"style":3579},[6521],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":6523,"children":6524},{"style":3588},[6525],{"type":3048,"value":5936},{"type":3043,"tag":3413,"props":6527,"children":6528},{"style":3579},[6529],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":6531,"children":6532},{"style":3579},[6533],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":6535,"children":6536},{"style":3588},[6537],{"type":3048,"value":5654},{"type":3043,"tag":3413,"props":6539,"children":6540},{"style":3579},[6541],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":6543,"children":6544},{"style":3853},[6545],{"type":3048,"value":4213},{"type":3043,"tag":3413,"props":6547,"children":6548},{"style":3579},[6549],{"type":3048,"value":6550}," },",{"type":3043,"tag":3413,"props":6552,"children":6553},{"style":3588},[6554],{"type":3048,"value":6555}," status",{"type":3043,"tag":3413,"props":6557,"children":6558},{"style":3579},[6559],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":6561,"children":6562},{"style":3579},[6563],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":6565,"children":6566},{"style":3434},[6567],{"type":3048,"value":6568},"disabled_or_invalid_ttl",{"type":3043,"tag":3413,"props":6570,"children":6571},{"style":3579},[6572],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6574,"children":6575},{"style":3579},[6576],{"type":3048,"value":5957},{"type":3043,"tag":3413,"props":6578,"children":6579},{"class":3415,"line":3795},[6580],{"type":3043,"tag":3413,"props":6581,"children":6582},{"style":3579},[6583],{"type":3048,"value":4723},{"type":3043,"tag":3413,"props":6585,"children":6586},{"class":3415,"line":3823},[6587,6591,6596,6600,6604,6608,6613],{"type":3043,"tag":3413,"props":6588,"children":6589},{"style":4600},[6590],{"type":3048,"value":5516},{"type":3043,"tag":3413,"props":6592,"children":6593},{"style":3573},[6594],{"type":3048,"value":6595}," ipTTLms",{"type":3043,"tag":3413,"props":6597,"children":6598},{"style":3579},[6599],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":6601,"children":6602},{"style":3573},[6603],{"type":3048,"value":6385},{"type":3043,"tag":3413,"props":6605,"children":6606},{"style":3579},[6607],{"type":3048,"value":4311},{"type":3043,"tag":3413,"props":6609,"children":6610},{"style":3853},[6611],{"type":3048,"value":6612}," 1000",{"type":3043,"tag":3413,"props":6614,"children":6615},{"style":3579},[6616],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6618,"children":6619},{"class":3415,"line":3831},[6620],{"type":3043,"tag":3413,"props":6621,"children":6622},{"emptyLinePlaceholder":1200},[6623],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":6625,"children":6626},{"class":3415,"line":3840},[6627,6631,6636,6640,6644,6648,6652,6656,6660,6664,6669,6673,6677],{"type":3043,"tag":3413,"props":6628,"children":6629},{"style":4600},[6630],{"type":3048,"value":5516},{"type":3043,"tag":3413,"props":6632,"children":6633},{"style":3573},[6634],{"type":3048,"value":6635}," ipKeys",{"type":3043,"tag":3413,"props":6637,"children":6638},{"style":3579},[6639],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":6641,"children":6642},{"style":3556},[6643],{"type":3048,"value":5596},{"type":3043,"tag":3413,"props":6645,"children":6646},{"style":3573},[6647],{"type":3048,"value":5521},{"type":3043,"tag":3413,"props":6649,"children":6650},{"style":3579},[6651],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":6653,"children":6654},{"style":3567},[6655],{"type":3048,"value":5609},{"type":3043,"tag":3413,"props":6657,"children":6658},{"style":3588},[6659],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":6661,"children":6662},{"style":3579},[6663],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6665,"children":6666},{"style":3434},[6667],{"type":3048,"value":6668},"ip:",{"type":3043,"tag":3413,"props":6670,"children":6671},{"style":3579},[6672],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6674,"children":6675},{"style":3588},[6676],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":6678,"children":6679},{"style":3579},[6680],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6682,"children":6683},{"class":3415,"line":3868},[6684,6688,6693,6697,6702,6706,6711,6715],{"type":3043,"tag":3413,"props":6685,"children":6686},{"style":4600},[6687],{"type":3048,"value":5516},{"type":3043,"tag":3413,"props":6689,"children":6690},{"style":3573},[6691],{"type":3048,"value":6692}," currentTime",{"type":3043,"tag":3413,"props":6694,"children":6695},{"style":3579},[6696],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":6698,"children":6699},{"style":3573},[6700],{"type":3048,"value":6701}," Date",{"type":3043,"tag":3413,"props":6703,"children":6704},{"style":3579},[6705],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":6707,"children":6708},{"style":3567},[6709],{"type":3048,"value":6710},"now",{"type":3043,"tag":3413,"props":6712,"children":6713},{"style":3588},[6714],{"type":3048,"value":5504},{"type":3043,"tag":3413,"props":6716,"children":6717},{"style":3579},[6718],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6720,"children":6721},{"class":3415,"line":3885},[6722,6726,6730,6734,6738],{"type":3043,"tag":3413,"props":6723,"children":6724},{"style":4600},[6725],{"type":3048,"value":5649},{"type":3043,"tag":3413,"props":6727,"children":6728},{"style":3573},[6729],{"type":3048,"value":5654},{"type":3043,"tag":3413,"props":6731,"children":6732},{"style":3579},[6733],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":6735,"children":6736},{"style":3853},[6737],{"type":3048,"value":4213},{"type":3043,"tag":3413,"props":6739,"children":6740},{"style":3579},[6741],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6743,"children":6744},{"class":3415,"line":3894},[6745],{"type":3043,"tag":3413,"props":6746,"children":6747},{"emptyLinePlaceholder":1200},[6748],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":6750,"children":6751},{"class":3415,"line":3922},[6752,6756,6760,6764,6768,6772,6776,6780],{"type":3043,"tag":3413,"props":6753,"children":6754},{"style":3556},[6755],{"type":3048,"value":5674},{"type":3043,"tag":3413,"props":6757,"children":6758},{"style":3588},[6759],{"type":3048,"value":5679},{"type":3043,"tag":3413,"props":6761,"children":6762},{"style":4600},[6763],{"type":3048,"value":5684},{"type":3043,"tag":3413,"props":6765,"children":6766},{"style":3573},[6767],{"type":3048,"value":5689},{"type":3043,"tag":3413,"props":6769,"children":6770},{"style":3579},[6771],{"type":3048,"value":5694},{"type":3043,"tag":3413,"props":6773,"children":6774},{"style":3573},[6775],{"type":3048,"value":6635},{"type":3043,"tag":3413,"props":6777,"children":6778},{"style":3588},[6779],{"type":3048,"value":5703},{"type":3043,"tag":3413,"props":6781,"children":6782},{"style":3579},[6783],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":6785,"children":6786},{"class":3415,"line":3930},[6787,6791,6796,6800,6804,6809,6813,6817,6821,6825,6829,6833,6838,6842,6847,6852],{"type":3043,"tag":3413,"props":6788,"children":6789},{"style":4600},[6790],{"type":3048,"value":5715},{"type":3043,"tag":3413,"props":6792,"children":6793},{"style":3573},[6794],{"type":3048,"value":6795}," entry",{"type":3043,"tag":3413,"props":6797,"children":6798},{"style":3579},[6799],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":6801,"children":6802},{"style":3588},[6803],{"type":3048,"value":5679},{"type":3043,"tag":3413,"props":6805,"children":6806},{"style":3556},[6807],{"type":3048,"value":6808},"await",{"type":3043,"tag":3413,"props":6810,"children":6811},{"style":3573},[6812],{"type":3048,"value":5521},{"type":3043,"tag":3413,"props":6814,"children":6815},{"style":3579},[6816],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":6818,"children":6819},{"style":3567},[6820],{"type":3048,"value":5741},{"type":3043,"tag":3413,"props":6822,"children":6823},{"style":3588},[6824],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":6826,"children":6827},{"style":3573},[6828],{"type":3048,"value":5750},{"type":3043,"tag":3413,"props":6830,"children":6831},{"style":3588},[6832],{"type":3048,"value":5789},{"type":3043,"tag":3413,"props":6834,"children":6835},{"style":3556},[6836],{"type":3048,"value":6837},"as",{"type":3043,"tag":3413,"props":6839,"children":6840},{"style":3428},[6841],{"type":3048,"value":6077},{"type":3043,"tag":3413,"props":6843,"children":6844},{"style":3579},[6845],{"type":3048,"value":6846}," |",{"type":3043,"tag":3413,"props":6848,"children":6849},{"style":3428},[6850],{"type":3048,"value":6851}," null",{"type":3043,"tag":3413,"props":6853,"children":6854},{"style":3579},[6855],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":6857,"children":6858},{"class":3415,"line":3939},[6859],{"type":3043,"tag":3413,"props":6860,"children":6861},{"emptyLinePlaceholder":1200},[6862],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":6864,"children":6866},{"class":3415,"line":6865},31,[6867],{"type":3043,"tag":3413,"props":6868,"children":6869},{"style":3419},[6870],{"type":3048,"value":6871},"      \u002F\u002F Check if entry exists and has a numeric 'time' property\n",{"type":3043,"tag":3413,"props":6873,"children":6875},{"class":3415,"line":6874},32,[6876,6880,6884,6889,6894,6899,6903,6907,6911,6916,6920,6925,6929,6933],{"type":3043,"tag":3413,"props":6877,"children":6878},{"style":3556},[6879],{"type":3048,"value":5766},{"type":3043,"tag":3413,"props":6881,"children":6882},{"style":3588},[6883],{"type":3048,"value":5679},{"type":3043,"tag":3413,"props":6885,"children":6886},{"style":3573},[6887],{"type":3048,"value":6888},"entry",{"type":3043,"tag":3413,"props":6890,"children":6891},{"style":3579},[6892],{"type":3048,"value":6893}," &&",{"type":3043,"tag":3413,"props":6895,"children":6896},{"style":3579},[6897],{"type":3048,"value":6898}," typeof",{"type":3043,"tag":3413,"props":6900,"children":6901},{"style":3573},[6902],{"type":3048,"value":6795},{"type":3043,"tag":3413,"props":6904,"children":6905},{"style":3579},[6906],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":6908,"children":6909},{"style":3573},[6910],{"type":3048,"value":6028},{"type":3043,"tag":3413,"props":6912,"children":6913},{"style":3579},[6914],{"type":3048,"value":6915}," ===",{"type":3043,"tag":3413,"props":6917,"children":6918},{"style":3579},[6919],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":6921,"children":6922},{"style":3434},[6923],{"type":3048,"value":6924},"number",{"type":3043,"tag":3413,"props":6926,"children":6927},{"style":3579},[6928],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":6930,"children":6931},{"style":3588},[6932],{"type":3048,"value":5703},{"type":3043,"tag":3413,"props":6934,"children":6935},{"style":3579},[6936],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":6938,"children":6940},{"class":3415,"line":6939},33,[6941,6946,6950,6955,6960,6964,6968,6972,6977,6981,6985],{"type":3043,"tag":3413,"props":6942,"children":6943},{"style":3556},[6944],{"type":3048,"value":6945},"        if",{"type":3043,"tag":3413,"props":6947,"children":6948},{"style":3588},[6949],{"type":3048,"value":5679},{"type":3043,"tag":3413,"props":6951,"children":6952},{"style":3573},[6953],{"type":3048,"value":6954},"currentTime",{"type":3043,"tag":3413,"props":6956,"children":6957},{"style":3579},[6958],{"type":3048,"value":6959}," -",{"type":3043,"tag":3413,"props":6961,"children":6962},{"style":3573},[6963],{"type":3048,"value":6795},{"type":3043,"tag":3413,"props":6965,"children":6966},{"style":3579},[6967],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":6969,"children":6970},{"style":3573},[6971],{"type":3048,"value":6028},{"type":3043,"tag":3413,"props":6973,"children":6974},{"style":3579},[6975],{"type":3048,"value":6976}," >",{"type":3043,"tag":3413,"props":6978,"children":6979},{"style":3573},[6980],{"type":3048,"value":6595},{"type":3043,"tag":3413,"props":6982,"children":6983},{"style":3588},[6984],{"type":3048,"value":5703},{"type":3043,"tag":3413,"props":6986,"children":6987},{"style":3579},[6988],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":6990,"children":6992},{"class":3415,"line":6991},34,[6993,6998,7002,7006,7010,7014,7018,7022],{"type":3043,"tag":3413,"props":6994,"children":6995},{"style":3556},[6996],{"type":3048,"value":6997},"          await",{"type":3043,"tag":3413,"props":6999,"children":7000},{"style":3573},[7001],{"type":3048,"value":5521},{"type":3043,"tag":3413,"props":7003,"children":7004},{"style":3579},[7005],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":7007,"children":7008},{"style":3567},[7009],{"type":3048,"value":5814},{"type":3043,"tag":3413,"props":7011,"children":7012},{"style":3588},[7013],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":7015,"children":7016},{"style":3573},[7017],{"type":3048,"value":5750},{"type":3043,"tag":3413,"props":7019,"children":7020},{"style":3588},[7021],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":7023,"children":7024},{"style":3579},[7025],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":7027,"children":7029},{"class":3415,"line":7028},35,[7030,7035],{"type":3043,"tag":3413,"props":7031,"children":7032},{"style":3573},[7033],{"type":3048,"value":7034},"          cleanedCount",{"type":3043,"tag":3413,"props":7036,"children":7037},{"style":3579},[7038],{"type":3048,"value":5843},{"type":3043,"tag":3413,"props":7040,"children":7042},{"class":3415,"line":7041},36,[7043],{"type":3043,"tag":3413,"props":7044,"children":7045},{"style":3579},[7046],{"type":3048,"value":7047},"        }\n",{"type":3043,"tag":3413,"props":7049,"children":7051},{"class":3415,"line":7050},37,[7052,7057,7062],{"type":3043,"tag":3413,"props":7053,"children":7054},{"style":3579},[7055],{"type":3048,"value":7056},"      }",{"type":3043,"tag":3413,"props":7058,"children":7059},{"style":3556},[7060],{"type":3048,"value":7061}," else",{"type":3043,"tag":3413,"props":7063,"children":7064},{"style":3579},[7065],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":7067,"children":7069},{"class":3415,"line":7068},38,[7070],{"type":3043,"tag":3413,"props":7071,"children":7072},{"style":3419},[7073],{"type":3048,"value":7074},"        \u002F\u002F Clean up entries that are null, not an object, or missing a numeric 'time'\n",{"type":3043,"tag":3413,"props":7076,"children":7078},{"class":3415,"line":7077},39,[7079,7083,7087,7091,7095,7099,7103,7107],{"type":3043,"tag":3413,"props":7080,"children":7081},{"style":3556},[7082],{"type":3048,"value":5801},{"type":3043,"tag":3413,"props":7084,"children":7085},{"style":3573},[7086],{"type":3048,"value":5521},{"type":3043,"tag":3413,"props":7088,"children":7089},{"style":3579},[7090],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":7092,"children":7093},{"style":3567},[7094],{"type":3048,"value":5814},{"type":3043,"tag":3413,"props":7096,"children":7097},{"style":3588},[7098],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":7100,"children":7101},{"style":3573},[7102],{"type":3048,"value":5750},{"type":3043,"tag":3413,"props":7104,"children":7105},{"style":3588},[7106],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":7108,"children":7109},{"style":3579},[7110],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":7112,"children":7114},{"class":3415,"line":7113},40,[7115,7119],{"type":3043,"tag":3413,"props":7116,"children":7117},{"style":3573},[7118],{"type":3048,"value":5838},{"type":3043,"tag":3413,"props":7120,"children":7121},{"style":3579},[7122],{"type":3048,"value":5843},{"type":3043,"tag":3413,"props":7124,"children":7126},{"class":3415,"line":7125},41,[7127],{"type":3043,"tag":3413,"props":7128,"children":7129},{"style":3579},[7130],{"type":3048,"value":4715},{"type":3043,"tag":3413,"props":7132,"children":7134},{"class":3415,"line":7133},42,[7135],{"type":3043,"tag":3413,"props":7136,"children":7137},{"style":3579},[7138],{"type":3048,"value":4723},{"type":3043,"tag":3413,"props":7140,"children":7142},{"class":3415,"line":7141},43,[7143],{"type":3043,"tag":3413,"props":7144,"children":7145},{"emptyLinePlaceholder":1200},[7146],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":7148,"children":7150},{"class":3415,"line":7149},44,[7151,7155,7159,7163],{"type":3043,"tag":3413,"props":7152,"children":7153},{"style":3573},[7154],{"type":3048,"value":5865},{"type":3043,"tag":3413,"props":7156,"children":7157},{"style":3579},[7158],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":7160,"children":7161},{"style":3567},[7162],{"type":3048,"value":5874},{"type":3043,"tag":3413,"props":7164,"children":7165},{"style":3588},[7166],{"type":3048,"value":6481},{"type":3043,"tag":3413,"props":7168,"children":7170},{"class":3415,"line":7169},45,[7171,7176,7180,7184,7188,7192,7197],{"type":3043,"tag":3413,"props":7172,"children":7173},{"style":3579},[7174],{"type":3048,"value":7175},"      `",{"type":3043,"tag":3413,"props":7177,"children":7178},{"style":3434},[7179],{"type":3048,"value":5888},{"type":3043,"tag":3413,"props":7181,"children":7182},{"style":3579},[7183],{"type":3048,"value":5893},{"type":3043,"tag":3413,"props":7185,"children":7186},{"style":3573},[7187],{"type":3048,"value":5898},{"type":3043,"tag":3413,"props":7189,"children":7190},{"style":3579},[7191],{"type":3048,"value":3945},{"type":3043,"tag":3413,"props":7193,"children":7194},{"style":3434},[7195],{"type":3048,"value":7196}," old\u002Fmalformed IP data entries.",{"type":3043,"tag":3413,"props":7198,"children":7199},{"style":3579},[7200],{"type":3048,"value":7201},"`\n",{"type":3043,"tag":3413,"props":7203,"children":7205},{"class":3415,"line":7204},46,[7206,7211],{"type":3043,"tag":3413,"props":7207,"children":7208},{"style":3588},[7209],{"type":3048,"value":7210},"    )",{"type":3043,"tag":3413,"props":7212,"children":7213},{"style":3579},[7214],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":7216,"children":7218},{"class":3415,"line":7217},47,[7219,7223,7227,7231,7235,7239,7243,7247],{"type":3043,"tag":3413,"props":7220,"children":7221},{"style":3556},[7222],{"type":3048,"value":5927},{"type":3043,"tag":3413,"props":7224,"children":7225},{"style":3579},[7226],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":7228,"children":7229},{"style":3588},[7230],{"type":3048,"value":5936},{"type":3043,"tag":3413,"props":7232,"children":7233},{"style":3579},[7234],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7236,"children":7237},{"style":3579},[7238],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":7240,"children":7241},{"style":3573},[7242],{"type":3048,"value":5654},{"type":3043,"tag":3413,"props":7244,"children":7245},{"style":3579},[7246],{"type":3048,"value":5342},{"type":3043,"tag":3413,"props":7248,"children":7249},{"style":3579},[7250],{"type":3048,"value":5957},{"type":3043,"tag":3413,"props":7252,"children":7254},{"class":3415,"line":7253},48,[7255],{"type":3043,"tag":3413,"props":7256,"children":7257},{"style":3579},[7258],{"type":3048,"value":3936},{"type":3043,"tag":3413,"props":7260,"children":7262},{"class":3415,"line":7261},49,[7263,7267,7271],{"type":3043,"tag":3413,"props":7264,"children":7265},{"style":3579},[7266],{"type":3048,"value":3945},{"type":3043,"tag":3413,"props":7268,"children":7269},{"style":3573},[7270],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":7272,"children":7273},{"style":3579},[7274],{"type":3048,"value":3955},{"type":3043,"tag":3050,"props":7276,"children":7277},{},[7278,7280,7285,7287,7292,7294,7299,7300,7306,7308,7313],{"type":3048,"value":7279},"Configure ",{"type":3043,"tag":3200,"props":7281,"children":7283},{"className":7282},[],[7284],{"type":3048,"value":5003},{"type":3048,"value":7286}," under ",{"type":3043,"tag":3200,"props":7288,"children":7290},{"className":7289},[],[7291],{"type":3048,"value":3971},{"type":3048,"value":7293}," if you want a TTL other than the default. Setting ",{"type":3043,"tag":3200,"props":7295,"children":7297},{"className":7296},[],[7298],{"type":3048,"value":5003},{"type":3048,"value":4556},{"type":3043,"tag":3200,"props":7301,"children":7303},{"className":7302},[],[7304],{"type":3048,"value":7305},"0",{"type":3048,"value":7307}," (or any non-positive value) makes the bundled ",{"type":3043,"tag":3200,"props":7309,"children":7311},{"className":7310},[],[7312],{"type":3048,"value":3305},{"type":3048,"value":7314}," task skip IP cleanup (it logs and exits).",{"type":3043,"tag":3050,"props":7316,"children":7317},{},[7318,7320,7326,7328,7333,7335,7340],{"type":3048,"value":7319},"If you add your own task file with the same ",{"type":3043,"tag":3200,"props":7321,"children":7323},{"className":7322},[],[7324],{"type":3048,"value":7325},"meta.name",{"type":3048,"value":7327}," as a bundled task (",{"type":3043,"tag":3200,"props":7329,"children":7331},{"className":7330},[],[7332],{"type":3048,"value":3297},{"type":3048,"value":7334}," or ",{"type":3043,"tag":3200,"props":7336,"children":7338},{"className":7337},[],[7339],{"type":3048,"value":3305},{"type":3048,"value":7341},"), Nitro may prefer your project file over the module—avoid duplicate names unless you intend to override.",{"type":3043,"tag":3126,"props":7343,"children":7345},{"id":7344},"production-deployment",[7346],{"type":3048,"value":7347},"Production Deployment",{"type":3043,"tag":3389,"props":7349,"children":7351},{"id":7350},"use-redis-as-the-storage-driver",[7352],{"type":3048,"value":7353},"Use Redis as the storage driver",{"type":3043,"tag":3050,"props":7355,"children":7356},{},[7357,7359,7364,7366,7371,7372,7378],{"type":3048,"value":7358},"For production deployments — especially with multiple server instances or significant traffic — ",{"type":3043,"tag":3138,"props":7360,"children":7361},{},[7362],{"type":3048,"value":7363},"Redis is the recommended storage driver",{"type":3048,"value":7365},". The ",{"type":3043,"tag":3200,"props":7367,"children":7369},{"className":7368},[],[7370],{"type":3048,"value":4702},{"type":3048,"value":3299},{"type":3043,"tag":3200,"props":7373,"children":7375},{"className":7374},[],[7376],{"type":3048,"value":7377},"fs",{"type":3048,"value":7379}," drivers have important limitations:",{"type":3043,"tag":7381,"props":7382,"children":7383},"table",{},[7384,7418],{"type":3043,"tag":7385,"props":7386,"children":7387},"thead",{},[7388],{"type":3043,"tag":7389,"props":7390,"children":7391},"tr",{},[7392,7398,7413],{"type":3043,"tag":7393,"props":7394,"children":7395},"th",{},[7396],{"type":3048,"value":7397},"Area",{"type":3043,"tag":7393,"props":7399,"children":7400},{},[7401,7406,7408],{"type":3043,"tag":3200,"props":7402,"children":7404},{"className":7403},[],[7405],{"type":3048,"value":4702},{"type":3048,"value":7407}," \u002F ",{"type":3043,"tag":3200,"props":7409,"children":7411},{"className":7410},[],[7412],{"type":3048,"value":7377},{"type":3043,"tag":7393,"props":7414,"children":7415},{},[7416],{"type":3048,"value":7417},"Redis",{"type":3043,"tag":7419,"props":7420,"children":7421},"tbody",{},[7422,7444,7465],{"type":3043,"tag":7389,"props":7423,"children":7424},{},[7425,7434,7439],{"type":3043,"tag":7426,"props":7427,"children":7428},"td",{},[7429],{"type":3043,"tag":3138,"props":7430,"children":7431},{},[7432],{"type":3048,"value":7433},"Multi-instance",{"type":3043,"tag":7426,"props":7435,"children":7436},{},[7437],{"type":3048,"value":7438},"Each process has its own isolated state. Rate limits reset per instance, allowing bypass.",{"type":3043,"tag":7426,"props":7440,"children":7441},{},[7442],{"type":3048,"value":7443},"Shared state across all instances.",{"type":3043,"tag":7389,"props":7445,"children":7446},{},[7447,7455,7460],{"type":3043,"tag":7426,"props":7448,"children":7449},{},[7450],{"type":3043,"tag":3138,"props":7451,"children":7452},{},[7453],{"type":3048,"value":7454},"Atomic operations",{"type":3043,"tag":7426,"props":7456,"children":7457},{},[7458],{"type":3048,"value":7459},"Read → increment → write is not atomic. Concurrent requests can both read the same count and exceed the limit simultaneously.",{"type":3043,"tag":7426,"props":7461,"children":7462},{},[7463],{"type":3048,"value":7464},"Single-threaded — reads and writes are naturally atomic. No race conditions.",{"type":3043,"tag":7389,"props":7466,"children":7467},{},[7468,7476,7502],{"type":3043,"tag":7426,"props":7469,"children":7470},{},[7471],{"type":3043,"tag":3138,"props":7472,"children":7473},{},[7474],{"type":3048,"value":7475},"Cleanup",{"type":3043,"tag":7426,"props":7477,"children":7478},{},[7479,7481,7486,7487,7492,7494,7500],{"type":3048,"value":7480},"Cleanup tasks (",{"type":3043,"tag":3200,"props":7482,"children":7484},{"className":7483},[],[7485],{"type":3048,"value":3297},{"type":3048,"value":3365},{"type":3043,"tag":3200,"props":7488,"children":7490},{"className":7489},[],[7491],{"type":3048,"value":3305},{"type":3048,"value":7493},") must scan all keys with ",{"type":3043,"tag":3200,"props":7495,"children":7497},{"className":7496},[],[7498],{"type":3048,"value":7499},"getKeys()",{"type":3048,"value":7501},". At scale this blocks the event loop.",{"type":3043,"tag":7426,"props":7503,"children":7504},{},[7505,7507,7513,7514,7520],{"type":3048,"value":7506},"Use ",{"type":3043,"tag":3200,"props":7508,"children":7510},{"className":7509},[],[7511],{"type":3048,"value":7512},"EXPIRE",{"type":3048,"value":7334},{"type":3043,"tag":3200,"props":7515,"children":7517},{"className":7516},[],[7518],{"type":3048,"value":7519},"TTL",{"type":3048,"value":7521}," natively — expired keys are reclaimed automatically without scanning.",{"type":3043,"tag":3050,"props":7523,"children":7524},{},[7525,7527,7532,7534,7539],{"type":3048,"value":7526},"To use Redis, configure the ",{"type":3043,"tag":3200,"props":7528,"children":7530},{"className":7529},[],[7531],{"type":3048,"value":4571},{"type":3048,"value":7533}," storage with the ",{"type":3043,"tag":3200,"props":7535,"children":7537},{"className":7536},[],[7538],{"type":3048,"value":4853},{"type":3048,"value":7540}," driver:",{"type":3043,"tag":3403,"props":7542,"children":7543},{"className":4576,"code":4745,"language":4578,"meta":2987,"style":2987},[7544],{"type":3043,"tag":3200,"props":7545,"children":7546},{"__ignoreMap":2987},[7547,7554,7577,7600,7623,7658,7693,7716,7723,7730,7737],{"type":3043,"tag":3413,"props":7548,"children":7549},{"class":3415,"line":3015},[7550],{"type":3043,"tag":3413,"props":7551,"children":7552},{"style":3579},[7553],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":7555,"children":7556},{"class":3415,"line":3011},[7557,7561,7565,7569,7573],{"type":3043,"tag":3413,"props":7558,"children":7559},{"style":3579},[7560],{"type":3048,"value":4597},{"type":3043,"tag":3413,"props":7562,"children":7563},{"style":4600},[7564],{"type":3048,"value":4603},{"type":3043,"tag":3413,"props":7566,"children":7567},{"style":3579},[7568],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7570,"children":7571},{"style":3579},[7572],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7574,"children":7575},{"style":3579},[7576],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":7578,"children":7579},{"class":3415,"line":3445},[7580,7584,7588,7592,7596],{"type":3043,"tag":3413,"props":7581,"children":7582},{"style":3579},[7583],{"type":3048,"value":4623},{"type":3043,"tag":3413,"props":7585,"children":7586},{"style":3428},[7587],{"type":3048,"value":4628},{"type":3043,"tag":3413,"props":7589,"children":7590},{"style":3579},[7591],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7593,"children":7594},{"style":3579},[7595],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7597,"children":7598},{"style":3579},[7599],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":7601,"children":7602},{"class":3415,"line":3454},[7603,7607,7611,7615,7619],{"type":3043,"tag":3413,"props":7604,"children":7605},{"style":3579},[7606],{"type":3048,"value":4648},{"type":3043,"tag":3413,"props":7608,"children":7609},{"style":3853},[7610],{"type":3048,"value":4571},{"type":3043,"tag":3413,"props":7612,"children":7613},{"style":3579},[7614],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7616,"children":7617},{"style":3579},[7618],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7620,"children":7621},{"style":3579},[7622],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":7624,"children":7625},{"class":3415,"line":3007},[7626,7630,7634,7638,7642,7646,7650,7654],{"type":3043,"tag":3413,"props":7627,"children":7628},{"style":3579},[7629],{"type":3048,"value":4680},{"type":3043,"tag":3413,"props":7631,"children":7632},{"style":3588},[7633],{"type":3048,"value":4685},{"type":3043,"tag":3413,"props":7635,"children":7636},{"style":3579},[7637],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7639,"children":7640},{"style":3579},[7641],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7643,"children":7644},{"style":3579},[7645],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":7647,"children":7648},{"style":3434},[7649],{"type":3048,"value":4853},{"type":3043,"tag":3413,"props":7651,"children":7652},{"style":3579},[7653],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7655,"children":7656},{"style":3579},[7657],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":7659,"children":7660},{"class":3415,"line":3479},[7661,7665,7669,7673,7677,7681,7685,7689],{"type":3043,"tag":3413,"props":7662,"children":7663},{"style":3579},[7664],{"type":3048,"value":4680},{"type":3043,"tag":3413,"props":7666,"children":7667},{"style":3588},[7668],{"type":3048,"value":4873},{"type":3043,"tag":3413,"props":7670,"children":7671},{"style":3579},[7672],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7674,"children":7675},{"style":3579},[7676],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7678,"children":7679},{"style":3579},[7680],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":7682,"children":7683},{"style":3434},[7684],{"type":3048,"value":4890},{"type":3043,"tag":3413,"props":7686,"children":7687},{"style":3579},[7688],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7690,"children":7691},{"style":3579},[7692],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":7694,"children":7695},{"class":3415,"line":3487},[7696,7700,7704,7708,7712],{"type":3043,"tag":3413,"props":7697,"children":7698},{"style":3579},[7699],{"type":3048,"value":4680},{"type":3043,"tag":3413,"props":7701,"children":7702},{"style":3588},[7703],{"type":3048,"value":4910},{"type":3043,"tag":3413,"props":7705,"children":7706},{"style":3579},[7707],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7709,"children":7710},{"style":3579},[7711],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7713,"children":7714},{"style":3853},[7715],{"type":3048,"value":4923},{"type":3043,"tag":3413,"props":7717,"children":7718},{"class":3415,"line":3496},[7719],{"type":3043,"tag":3413,"props":7720,"children":7721},{"style":3579},[7722],{"type":3048,"value":4715},{"type":3043,"tag":3413,"props":7724,"children":7725},{"class":3415,"line":3032},[7726],{"type":3043,"tag":3413,"props":7727,"children":7728},{"style":3579},[7729],{"type":3048,"value":4723},{"type":3043,"tag":3413,"props":7731,"children":7732},{"class":3415,"line":3692},[7733],{"type":3043,"tag":3413,"props":7734,"children":7735},{"style":3579},[7736],{"type":3048,"value":4386},{"type":3043,"tag":3413,"props":7738,"children":7739},{"class":3415,"line":3701},[7740],{"type":3043,"tag":3413,"props":7741,"children":7742},{"style":3579},[7743],{"type":3048,"value":4394},{"type":3043,"tag":3050,"props":7745,"children":7746},{},[7747,7749,7756],{"type":3048,"value":7748},"See the ",{"type":3043,"tag":3054,"props":7750,"children":7753},{"href":7751,"rel":7752},"https:\u002F\u002Funstorage.unjs.io\u002Fdrivers\u002Fredis",[3058],[7754],{"type":3048,"value":7755},"unstorage Redis driver docs",{"type":3048,"value":7757}," for all available options.",{"type":3043,"tag":3389,"props":7759,"children":7761},{"id":7760},"when-memory-fs-is-acceptable",[7762,7764,7769,7770,7775],{"type":3048,"value":7763},"When ",{"type":3043,"tag":3200,"props":7765,"children":7767},{"className":7766},[],[7768],{"type":3048,"value":4702},{"type":3048,"value":7407},{"type":3043,"tag":3200,"props":7771,"children":7773},{"className":7772},[],[7774],{"type":3048,"value":7377},{"type":3048,"value":7776}," is acceptable",{"type":3043,"tag":3050,"props":7778,"children":7779},{},[7780,7781,7786,7787,7792],{"type":3048,"value":4413},{"type":3043,"tag":3200,"props":7782,"children":7784},{"className":7783},[],[7785],{"type":3048,"value":4702},{"type":3048,"value":3299},{"type":3043,"tag":3200,"props":7788,"children":7790},{"className":7789},[],[7791],{"type":3048,"value":7377},{"type":3048,"value":7793}," drivers are fine for:",{"type":3043,"tag":3100,"props":7795,"children":7796},{},[7797,7802,7807],{"type":3043,"tag":3104,"props":7798,"children":7799},{},[7800],{"type":3048,"value":7801},"Single-instance deployments",{"type":3043,"tag":3104,"props":7803,"children":7804},{},[7805],{"type":3048,"value":7806},"Development environments",{"type":3043,"tag":3104,"props":7808,"children":7809},{},[7810],{"type":3048,"value":7811},"Low-traffic applications where occasional race conditions are acceptable",{"type":3043,"tag":3050,"props":7813,"children":7814},{},[7815],{"type":3048,"value":7816},"For everything else, use Redis.",{"type":3043,"tag":3126,"props":7818,"children":7820},{"id":7819},"fail2ban-integration",[7821],{"type":3048,"value":7822},"Fail2ban Integration",{"type":3043,"tag":3050,"props":7824,"children":7825},{},[7826,7828,7833,7835,7841],{"type":3048,"value":7827},"When a user exceeds the rate limit and gets banned, ",{"type":3043,"tag":3200,"props":7829,"children":7831},{"className":7830},[],[7832],{"type":3048,"value":2984},{"type":3048,"value":7834}," can write ban events to the log file in a ",{"type":3043,"tag":3200,"props":7836,"children":7838},{"className":7837},[],[7839],{"type":3048,"value":7840},"fail2ban",{"type":3048,"value":7842},"-compatible format. You can then configure fail2ban to watch these logs and automatically block the IP at the firewall level.",{"type":3043,"tag":3389,"props":7844,"children":7846},{"id":7845},"setup",[7847],{"type":3048,"value":7848},"Setup",{"type":3043,"tag":3050,"props":7850,"children":7851},{},[7852,7854,7860,7861,7866,7868,7874],{"type":3048,"value":7853},"Enable fail2ban logging by setting ",{"type":3043,"tag":3200,"props":7855,"children":7857},{"className":7856},[],[7858],{"type":3048,"value":7859},"log.fail2ban",{"type":3048,"value":4556},{"type":3043,"tag":3200,"props":7862,"children":7864},{"className":7863},[],[7865],{"type":3048,"value":4451},{"type":3048,"value":7867}," and configuring the ",{"type":3043,"tag":3200,"props":7869,"children":7871},{"className":7870},[],[7872],{"type":3048,"value":7873},"log.path",{"type":3048,"value":3596},{"type":3043,"tag":3403,"props":7876,"children":7878},{"className":3544,"code":7877,"language":3546,"meta":2987,"style":2987},"export default defineNuxtConfig({\n  modules: [\"nuxt-api-shield\"],\n  nuxtApiShield: {\n    log: {\n      path: \"\u002Fvar\u002Flog\u002Fnuxt-api-shield\", \u002F\u002F required — must be set\n      attempts: 1,                       \u002F\u002F optional — threshold for regular request logging\n      fail2ban: true,                     \u002F\u002F enable fail2ban format\n    },\n  },\n})\n",[7879],{"type":3043,"tag":3200,"props":7880,"children":7881},{"__ignoreMap":2987},[7882,7905,7940,7955,7971,8005,8031,8056,8063,8070],{"type":3043,"tag":3413,"props":7883,"children":7884},{"class":3415,"line":3015},[7885,7889,7893,7897,7901],{"type":3043,"tag":3413,"props":7886,"children":7887},{"style":3556},[7888],{"type":3048,"value":3559},{"type":3043,"tag":3413,"props":7890,"children":7891},{"style":3556},[7892],{"type":3048,"value":3564},{"type":3043,"tag":3413,"props":7894,"children":7895},{"style":3567},[7896],{"type":3048,"value":3570},{"type":3043,"tag":3413,"props":7898,"children":7899},{"style":3573},[7900],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":7902,"children":7903},{"style":3579},[7904],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":7906,"children":7907},{"class":3415,"line":3011},[7908,7912,7916,7920,7924,7928,7932,7936],{"type":3043,"tag":3413,"props":7909,"children":7910},{"style":3588},[7911],{"type":3048,"value":3591},{"type":3043,"tag":3413,"props":7913,"children":7914},{"style":3579},[7915],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7917,"children":7918},{"style":3573},[7919],{"type":3048,"value":3601},{"type":3043,"tag":3413,"props":7921,"children":7922},{"style":3579},[7923],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7925,"children":7926},{"style":3434},[7927],{"type":3048,"value":2984},{"type":3043,"tag":3413,"props":7929,"children":7930},{"style":3579},[7931],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7933,"children":7934},{"style":3573},[7935],{"type":3048,"value":3619},{"type":3043,"tag":3413,"props":7937,"children":7938},{"style":3579},[7939],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":7941,"children":7942},{"class":3415,"line":3445},[7943,7947,7951],{"type":3043,"tag":3413,"props":7944,"children":7945},{"style":3588},[7946],{"type":3048,"value":3632},{"type":3043,"tag":3413,"props":7948,"children":7949},{"style":3579},[7950],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7952,"children":7953},{"style":3579},[7954],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":7956,"children":7957},{"class":3415,"line":3454},[7958,7963,7967],{"type":3043,"tag":3413,"props":7959,"children":7960},{"style":3588},[7961],{"type":3048,"value":7962},"    log",{"type":3043,"tag":3413,"props":7964,"children":7965},{"style":3579},[7966],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7968,"children":7969},{"style":3579},[7970],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":7972,"children":7973},{"class":3415,"line":3007},[7974,7979,7983,7987,7992,7996,8000],{"type":3043,"tag":3413,"props":7975,"children":7976},{"style":3588},[7977],{"type":3048,"value":7978},"      path",{"type":3043,"tag":3413,"props":7980,"children":7981},{"style":3579},[7982],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":7984,"children":7985},{"style":3579},[7986],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":7988,"children":7989},{"style":3434},[7990],{"type":3048,"value":7991},"\u002Fvar\u002Flog\u002Fnuxt-api-shield",{"type":3043,"tag":3413,"props":7993,"children":7994},{"style":3579},[7995],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":7997,"children":7998},{"style":3579},[7999],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":8001,"children":8002},{"style":3419},[8003],{"type":3048,"value":8004}," \u002F\u002F required — must be set\n",{"type":3043,"tag":3413,"props":8006,"children":8007},{"class":3415,"line":3479},[8008,8013,8017,8022,8026],{"type":3043,"tag":3413,"props":8009,"children":8010},{"style":3588},[8011],{"type":3048,"value":8012},"      attempts",{"type":3043,"tag":3413,"props":8014,"children":8015},{"style":3579},[8016],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":8018,"children":8019},{"style":3853},[8020],{"type":3048,"value":8021}," 1",{"type":3043,"tag":3413,"props":8023,"children":8024},{"style":3579},[8025],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":8027,"children":8028},{"style":3419},[8029],{"type":3048,"value":8030},"                       \u002F\u002F optional — threshold for regular request logging\n",{"type":3043,"tag":3413,"props":8032,"children":8033},{"class":3415,"line":3487},[8034,8039,8043,8047,8051],{"type":3043,"tag":3413,"props":8035,"children":8036},{"style":3588},[8037],{"type":3048,"value":8038},"      fail2ban",{"type":3043,"tag":3413,"props":8040,"children":8041},{"style":3579},[8042],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":8044,"children":8045},{"style":3907},[8046],{"type":3048,"value":4100},{"type":3043,"tag":3413,"props":8048,"children":8049},{"style":3579},[8050],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":8052,"children":8053},{"style":3419},[8054],{"type":3048,"value":8055},"                     \u002F\u002F enable fail2ban format\n",{"type":3043,"tag":3413,"props":8057,"children":8058},{"class":3415,"line":3496},[8059],{"type":3043,"tag":3413,"props":8060,"children":8061},{"style":3579},[8062],{"type":3048,"value":3689},{"type":3043,"tag":3413,"props":8064,"children":8065},{"class":3415,"line":3032},[8066],{"type":3043,"tag":3413,"props":8067,"children":8068},{"style":3579},[8069],{"type":3048,"value":3936},{"type":3043,"tag":3413,"props":8071,"children":8072},{"class":3415,"line":3692},[8073,8077],{"type":3043,"tag":3413,"props":8074,"children":8075},{"style":3579},[8076],{"type":3048,"value":3945},{"type":3043,"tag":3413,"props":8078,"children":8079},{"style":3573},[8080],{"type":3048,"value":8081},")\n",{"type":3043,"tag":3050,"props":8083,"children":8084},{},[8085],{"type":3048,"value":8086},"When enabled, every ban event writes a line like:",{"type":3043,"tag":3403,"props":8088,"children":8092},{"className":8089,"code":8091,"language":3048},[8090],"language-text","2026-06-21 12:34:56,789 nuxt-api-shield ban 192.168.1.100 — \u002Fapi\u002Fv3\u002Flogin exceeded limit (12 requests in 108s)\n",[8093],{"type":3043,"tag":3200,"props":8094,"children":8095},{"__ignoreMap":2987},[8096],{"type":3048,"value":8091},{"type":3043,"tag":3389,"props":8098,"children":8100},{"id":8099},"fail2ban-filter-configuration",[8101],{"type":3048,"value":8102},"Fail2ban filter configuration",{"type":3043,"tag":3050,"props":8104,"children":8105},{},[8106,8108,8114],{"type":3048,"value":8107},"Create ",{"type":3043,"tag":3200,"props":8109,"children":8111},{"className":8110},[],[8112],{"type":3048,"value":8113},"\u002Fetc\u002Ffail2ban\u002Ffilter.d\u002Fnuxt-api-shield.conf",{"type":3048,"value":3596},{"type":3043,"tag":3403,"props":8116,"children":8120},{"className":8117,"code":8118,"language":8119,"meta":2987,"style":2987},"language-ini shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","[Definition]\nfailregex = ^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3} nuxt-api-shield ban \u003CHOST>\n","ini",[8121],{"type":3043,"tag":3200,"props":8122,"children":8123},{"__ignoreMap":2987},[8124,8132],{"type":3043,"tag":3413,"props":8125,"children":8126},{"class":3415,"line":3015},[8127],{"type":3043,"tag":3413,"props":8128,"children":8129},{"style":3579},[8130],{"type":3048,"value":8131},"[Definition]\n",{"type":3043,"tag":3413,"props":8133,"children":8134},{"class":3415,"line":3011},[8135,8140,8144],{"type":3043,"tag":3413,"props":8136,"children":8137},{"style":3588},[8138],{"type":3048,"value":8139},"failregex",{"type":3043,"tag":3413,"props":8141,"children":8142},{"style":3579},[8143],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":8145,"children":8146},{"style":3573},[8147],{"type":3048,"value":8148}," ^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3} nuxt-api-shield ban \u003CHOST>\n",{"type":3043,"tag":3389,"props":8150,"children":8152},{"id":8151},"jail-configuration",[8153],{"type":3048,"value":8154},"Jail configuration",{"type":3043,"tag":3050,"props":8156,"children":8157},{},[8158,8160,8166],{"type":3048,"value":8159},"Add a jail entry in ",{"type":3043,"tag":3200,"props":8161,"children":8163},{"className":8162},[],[8164],{"type":3048,"value":8165},"\u002Fetc\u002Ffail2ban\u002Fjail.local",{"type":3048,"value":3596},{"type":3043,"tag":3403,"props":8168,"children":8170},{"className":8117,"code":8169,"language":8119,"meta":2987,"style":2987},"[nuxt-api-shield]\nenabled  = true\nfilter   = nuxt-api-shield\nlogpath  = \u002Fvar\u002Flog\u002Fnuxt-api-shield\u002Fshield-*.log\nport     = http,https\nbanaction = iptables-multiport\nmaxretry = 1\nfindtime = 1\nbantime  = 3600\n",[8171],{"type":3043,"tag":3200,"props":8172,"children":8173},{"__ignoreMap":2987},[8174,8182,8199,8216,8233,8250,8267,8284,8300],{"type":3043,"tag":3413,"props":8175,"children":8176},{"class":3415,"line":3015},[8177],{"type":3043,"tag":3413,"props":8178,"children":8179},{"style":3579},[8180],{"type":3048,"value":8181},"[nuxt-api-shield]\n",{"type":3043,"tag":3413,"props":8183,"children":8184},{"class":3415,"line":3011},[8185,8190,8195],{"type":3043,"tag":3413,"props":8186,"children":8187},{"style":3588},[8188],{"type":3048,"value":8189},"enabled",{"type":3043,"tag":3413,"props":8191,"children":8192},{"style":3579},[8193],{"type":3048,"value":8194},"  =",{"type":3043,"tag":3413,"props":8196,"children":8197},{"style":3573},[8198],{"type":3048,"value":5114},{"type":3043,"tag":3413,"props":8200,"children":8201},{"class":3415,"line":3445},[8202,8207,8212],{"type":3043,"tag":3413,"props":8203,"children":8204},{"style":3588},[8205],{"type":3048,"value":8206},"filter",{"type":3043,"tag":3413,"props":8208,"children":8209},{"style":3579},[8210],{"type":3048,"value":8211},"   =",{"type":3043,"tag":3413,"props":8213,"children":8214},{"style":3573},[8215],{"type":3048,"value":3442},{"type":3043,"tag":3413,"props":8217,"children":8218},{"class":3415,"line":3454},[8219,8224,8228],{"type":3043,"tag":3413,"props":8220,"children":8221},{"style":3588},[8222],{"type":3048,"value":8223},"logpath",{"type":3043,"tag":3413,"props":8225,"children":8226},{"style":3579},[8227],{"type":3048,"value":8194},{"type":3043,"tag":3413,"props":8229,"children":8230},{"style":3573},[8231],{"type":3048,"value":8232}," \u002Fvar\u002Flog\u002Fnuxt-api-shield\u002Fshield-*.log\n",{"type":3043,"tag":3413,"props":8234,"children":8235},{"class":3415,"line":3007},[8236,8240,8245],{"type":3043,"tag":3413,"props":8237,"children":8238},{"style":3588},[8239],{"type":3048,"value":4910},{"type":3043,"tag":3413,"props":8241,"children":8242},{"style":3579},[8243],{"type":3048,"value":8244},"     =",{"type":3043,"tag":3413,"props":8246,"children":8247},{"style":3573},[8248],{"type":3048,"value":8249}," http,https\n",{"type":3043,"tag":3413,"props":8251,"children":8252},{"class":3415,"line":3479},[8253,8258,8262],{"type":3043,"tag":3413,"props":8254,"children":8255},{"style":3588},[8256],{"type":3048,"value":8257},"banaction",{"type":3043,"tag":3413,"props":8259,"children":8260},{"style":3579},[8261],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":8263,"children":8264},{"style":3573},[8265],{"type":3048,"value":8266}," iptables-multiport\n",{"type":3043,"tag":3413,"props":8268,"children":8269},{"class":3415,"line":3487},[8270,8275,8279],{"type":3043,"tag":3413,"props":8271,"children":8272},{"style":3588},[8273],{"type":3048,"value":8274},"maxretry",{"type":3043,"tag":3413,"props":8276,"children":8277},{"style":3579},[8278],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":8280,"children":8281},{"style":3573},[8282],{"type":3048,"value":8283}," 1\n",{"type":3043,"tag":3413,"props":8285,"children":8286},{"class":3415,"line":3496},[8287,8292,8296],{"type":3043,"tag":3413,"props":8288,"children":8289},{"style":3588},[8290],{"type":3048,"value":8291},"findtime",{"type":3043,"tag":3413,"props":8293,"children":8294},{"style":3579},[8295],{"type":3048,"value":5526},{"type":3043,"tag":3413,"props":8297,"children":8298},{"style":3573},[8299],{"type":3048,"value":8283},{"type":3043,"tag":3413,"props":8301,"children":8302},{"class":3415,"line":3032},[8303,8308,8312],{"type":3043,"tag":3413,"props":8304,"children":8305},{"style":3588},[8306],{"type":3048,"value":8307},"bantime",{"type":3043,"tag":3413,"props":8309,"children":8310},{"style":3579},[8311],{"type":3048,"value":8194},{"type":3043,"tag":3413,"props":8313,"children":8314},{"style":3573},[8315],{"type":3048,"value":8316}," 3600\n",{"type":3043,"tag":3050,"props":8318,"children":8319},{},[8320,8322,8327,8329,8335,8337,8343,8344,8350,8352,8357],{"type":3048,"value":8321},"Since ",{"type":3043,"tag":3200,"props":8323,"children":8325},{"className":8324},[],[8326],{"type":3048,"value":2984},{"type":3048,"value":8328}," already applies its own ban logic (configurable via ",{"type":3043,"tag":3200,"props":8330,"children":8332},{"className":8331},[],[8333],{"type":3048,"value":8334},"limit.ban",{"type":3048,"value":8336},"), set ",{"type":3043,"tag":3200,"props":8338,"children":8340},{"className":8339},[],[8341],{"type":3048,"value":8342},"maxretry = 1",{"type":3048,"value":3299},{"type":3043,"tag":3200,"props":8345,"children":8347},{"className":8346},[],[8348],{"type":3048,"value":8349},"findtime = 1",{"type":3048,"value":8351}," so fail2ban acts immediately on each ban log entry. Adjust ",{"type":3043,"tag":3200,"props":8353,"children":8355},{"className":8354},[],[8356],{"type":3048,"value":8307},{"type":3048,"value":8358}," to match or extend your module-level ban duration.",{"type":3043,"tag":3050,"props":8360,"children":8361},{},[8362],{"type":3048,"value":8363},"Restart fail2ban after adding the config:",{"type":3043,"tag":3403,"props":8365,"children":8367},{"className":3405,"code":8366,"language":3407,"meta":2987,"style":2987},"sudo systemctl restart fail2ban\n",[8368],{"type":3043,"tag":3200,"props":8369,"children":8370},{"__ignoreMap":2987},[8371],{"type":3043,"tag":3413,"props":8372,"children":8373},{"class":3415,"line":3015},[8374,8379,8384,8389],{"type":3043,"tag":3413,"props":8375,"children":8376},{"style":3428},[8377],{"type":3048,"value":8378},"sudo",{"type":3043,"tag":3413,"props":8380,"children":8381},{"style":3434},[8382],{"type":3048,"value":8383}," systemctl",{"type":3043,"tag":3413,"props":8385,"children":8386},{"style":3434},[8387],{"type":3048,"value":8388}," restart",{"type":3043,"tag":3413,"props":8390,"children":8391},{"style":3434},[8392],{"type":3048,"value":8393}," fail2ban\n",{"type":3043,"tag":8395,"props":8396,"children":8397},"blockquote",{},[8398],{"type":3043,"tag":3050,"props":8399,"children":8400},{},[8401,8406,8408,8413],{"type":3043,"tag":3138,"props":8402,"children":8403},{},[8404],{"type":3048,"value":8405},"Note:",{"type":3048,"value":8407}," The ",{"type":3043,"tag":3200,"props":8409,"children":8411},{"className":8410},[],[8412],{"type":3048,"value":7873},{"type":3048,"value":8414}," directory must be readable by the fail2ban service. Ensure permissions are set accordingly.",{"type":3043,"tag":3126,"props":8416,"children":8418},{"id":8417},"typescript-types",[8419],{"type":3048,"value":8420},"TypeScript Types",{"type":3043,"tag":3050,"props":8422,"children":8423},{},[8424],{"type":3048,"value":8425},"The module exports TypeScript types that you can use in your application:",{"type":3043,"tag":3389,"props":8427,"children":8429},{"id":8428},"ratelimit-type",[8430,8436],{"type":3043,"tag":3200,"props":8431,"children":8433},{"className":8432},[],[8434],{"type":3048,"value":8435},"RateLimit",{"type":3048,"value":8437}," Type",{"type":3043,"tag":3050,"props":8439,"children":8440},{},[8441,8442,8447],{"type":3048,"value":4413},{"type":3043,"tag":3200,"props":8443,"children":8445},{"className":8444},[],[8446],{"type":3048,"value":8435},{"type":3048,"value":8448}," type represents the structure of rate limit data stored for each IP address:",{"type":3043,"tag":3403,"props":8450,"children":8452},{"className":5313,"code":8451,"language":5315,"meta":2987,"style":2987},"import type { RateLimit } from \"nuxt-api-shield\";\n\n\u002F\u002F RateLimit structure:\n\u002F\u002F {\n\u002F\u002F   count: number  \u002F\u002F Number of requests made\n\u002F\u002F   time: number   \u002F\u002F Timestamp of the last request\n\u002F\u002F }\n",[8453],{"type":3043,"tag":3200,"props":8454,"children":8455},{"__ignoreMap":2987},[8456,8499,8506,8514,8522,8535,8548],{"type":3043,"tag":3413,"props":8457,"children":8458},{"class":3415,"line":3015},[8459,8463,8467,8471,8475,8479,8483,8487,8491,8495],{"type":3043,"tag":3413,"props":8460,"children":8461},{"style":3556},[8462],{"type":3048,"value":5327},{"type":3043,"tag":3413,"props":8464,"children":8465},{"style":3556},[8466],{"type":3048,"value":6068},{"type":3043,"tag":3413,"props":8468,"children":8469},{"style":3579},[8470],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":8472,"children":8473},{"style":3573},[8474],{"type":3048,"value":6077},{"type":3043,"tag":3413,"props":8476,"children":8477},{"style":3579},[8478],{"type":3048,"value":5342},{"type":3043,"tag":3413,"props":8480,"children":8481},{"style":3556},[8482],{"type":3048,"value":5347},{"type":3043,"tag":3413,"props":8484,"children":8485},{"style":3579},[8486],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":8488,"children":8489},{"style":3434},[8490],{"type":3048,"value":2984},{"type":3043,"tag":3413,"props":8492,"children":8493},{"style":3579},[8494],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":8496,"children":8497},{"style":3579},[8498],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":8500,"children":8501},{"class":3415,"line":3011},[8502],{"type":3043,"tag":3413,"props":8503,"children":8504},{"emptyLinePlaceholder":1200},[8505],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":8507,"children":8508},{"class":3415,"line":3445},[8509],{"type":3043,"tag":3413,"props":8510,"children":8511},{"style":3419},[8512],{"type":3048,"value":8513},"\u002F\u002F RateLimit structure:\n",{"type":3043,"tag":3413,"props":8515,"children":8516},{"class":3415,"line":3454},[8517],{"type":3043,"tag":3413,"props":8518,"children":8519},{"style":3419},[8520],{"type":3048,"value":8521},"\u002F\u002F {\n",{"type":3043,"tag":3413,"props":8523,"children":8524},{"class":3415,"line":3007},[8525,8530],{"type":3043,"tag":3413,"props":8526,"children":8527},{"style":3419},[8528],{"type":3048,"value":8529},"\u002F\u002F   count: number",{"type":3043,"tag":3413,"props":8531,"children":8532},{"style":3419},[8533],{"type":3048,"value":8534},"  \u002F\u002F Number of requests made\n",{"type":3043,"tag":3413,"props":8536,"children":8537},{"class":3415,"line":3479},[8538,8543],{"type":3043,"tag":3413,"props":8539,"children":8540},{"style":3419},[8541],{"type":3048,"value":8542},"\u002F\u002F   time: number",{"type":3043,"tag":3413,"props":8544,"children":8545},{"style":3419},[8546],{"type":3048,"value":8547},"   \u002F\u002F Timestamp of the last request\n",{"type":3043,"tag":3413,"props":8549,"children":8550},{"class":3415,"line":3487},[8551],{"type":3043,"tag":3413,"props":8552,"children":8553},{"style":3419},[8554],{"type":3048,"value":8555},"\u002F\u002F }\n",{"type":3043,"tag":3050,"props":8557,"children":8558},{},[8559],{"type":3043,"tag":3138,"props":8560,"children":8561},{},[8562],{"type":3048,"value":8563},"Usage Example:",{"type":3043,"tag":3403,"props":8565,"children":8567},{"className":5313,"code":8566,"language":5315,"meta":2987,"style":2987},"import type { RateLimit } from \"nuxt-api-shield\";\nimport { useStorage } from \"#imports\";\n\nconst shieldStorage = useStorage(\"shield\");\nconst ipKey = \"ip:192.168.1.1\";\nconst entry = (await shieldStorage.getItem(ipKey)) as RateLimit | null;\n\nif (entry) {\n  console.log(`IP has made ${entry.count} requests`);\n  console.log(`Last request at: ${new Date(entry.time).toISOString()}`);\n}\n",[8568],{"type":3043,"tag":3200,"props":8569,"children":8570},{"__ignoreMap":2987},[8571,8614,8653,8660,8705,8738,8799,8806,8823,8890,8971],{"type":3043,"tag":3413,"props":8572,"children":8573},{"class":3415,"line":3015},[8574,8578,8582,8586,8590,8594,8598,8602,8606,8610],{"type":3043,"tag":3413,"props":8575,"children":8576},{"style":3556},[8577],{"type":3048,"value":5327},{"type":3043,"tag":3413,"props":8579,"children":8580},{"style":3556},[8581],{"type":3048,"value":6068},{"type":3043,"tag":3413,"props":8583,"children":8584},{"style":3579},[8585],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":8587,"children":8588},{"style":3573},[8589],{"type":3048,"value":6077},{"type":3043,"tag":3413,"props":8591,"children":8592},{"style":3579},[8593],{"type":3048,"value":5342},{"type":3043,"tag":3413,"props":8595,"children":8596},{"style":3556},[8597],{"type":3048,"value":5347},{"type":3043,"tag":3413,"props":8599,"children":8600},{"style":3579},[8601],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":8603,"children":8604},{"style":3434},[8605],{"type":3048,"value":2984},{"type":3043,"tag":3413,"props":8607,"children":8608},{"style":3579},[8609],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":8611,"children":8612},{"style":3579},[8613],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":8615,"children":8616},{"class":3415,"line":3011},[8617,8621,8625,8629,8633,8637,8641,8645,8649],{"type":3043,"tag":3413,"props":8618,"children":8619},{"style":3556},[8620],{"type":3048,"value":5327},{"type":3043,"tag":3413,"props":8622,"children":8623},{"style":3579},[8624],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":8626,"children":8627},{"style":3573},[8628],{"type":3048,"value":5531},{"type":3043,"tag":3413,"props":8630,"children":8631},{"style":3579},[8632],{"type":3048,"value":5342},{"type":3043,"tag":3413,"props":8634,"children":8635},{"style":3556},[8636],{"type":3048,"value":5347},{"type":3043,"tag":3413,"props":8638,"children":8639},{"style":3579},[8640],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":8642,"children":8643},{"style":3434},[8644],{"type":3048,"value":5356},{"type":3043,"tag":3413,"props":8646,"children":8647},{"style":3579},[8648],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":8650,"children":8651},{"style":3579},[8652],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":8654,"children":8655},{"class":3415,"line":3445},[8656],{"type":3043,"tag":3413,"props":8657,"children":8658},{"emptyLinePlaceholder":1200},[8659],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":8661,"children":8662},{"class":3415,"line":3454},[8663,8667,8672,8677,8681,8685,8689,8693,8697,8701],{"type":3043,"tag":3413,"props":8664,"children":8665},{"style":4600},[8666],{"type":3048,"value":5684},{"type":3043,"tag":3413,"props":8668,"children":8669},{"style":3573},[8670],{"type":3048,"value":8671}," shieldStorage ",{"type":3043,"tag":3413,"props":8673,"children":8674},{"style":3579},[8675],{"type":3048,"value":8676},"=",{"type":3043,"tag":3413,"props":8678,"children":8679},{"style":3567},[8680],{"type":3048,"value":5531},{"type":3043,"tag":3413,"props":8682,"children":8683},{"style":3573},[8684],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":8686,"children":8687},{"style":3579},[8688],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":8690,"children":8691},{"style":3434},[8692],{"type":3048,"value":4571},{"type":3043,"tag":3413,"props":8694,"children":8695},{"style":3579},[8696],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":8698,"children":8699},{"style":3573},[8700],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":8702,"children":8703},{"style":3579},[8704],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":8706,"children":8707},{"class":3415,"line":3007},[8708,8712,8717,8721,8725,8730,8734],{"type":3043,"tag":3413,"props":8709,"children":8710},{"style":4600},[8711],{"type":3048,"value":5684},{"type":3043,"tag":3413,"props":8713,"children":8714},{"style":3573},[8715],{"type":3048,"value":8716}," ipKey ",{"type":3043,"tag":3413,"props":8718,"children":8719},{"style":3579},[8720],{"type":3048,"value":8676},{"type":3043,"tag":3413,"props":8722,"children":8723},{"style":3579},[8724],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":8726,"children":8727},{"style":3434},[8728],{"type":3048,"value":8729},"ip:192.168.1.1",{"type":3043,"tag":3413,"props":8731,"children":8732},{"style":3579},[8733],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":8735,"children":8736},{"style":3579},[8737],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":8739,"children":8740},{"class":3415,"line":3479},[8741,8745,8750,8754,8758,8762,8766,8770,8774,8779,8783,8787,8791,8795],{"type":3043,"tag":3413,"props":8742,"children":8743},{"style":4600},[8744],{"type":3048,"value":5684},{"type":3043,"tag":3413,"props":8746,"children":8747},{"style":3573},[8748],{"type":3048,"value":8749}," entry ",{"type":3043,"tag":3413,"props":8751,"children":8752},{"style":3579},[8753],{"type":3048,"value":8676},{"type":3043,"tag":3413,"props":8755,"children":8756},{"style":3573},[8757],{"type":3048,"value":5679},{"type":3043,"tag":3413,"props":8759,"children":8760},{"style":3556},[8761],{"type":3048,"value":6808},{"type":3043,"tag":3413,"props":8763,"children":8764},{"style":3573},[8765],{"type":3048,"value":5521},{"type":3043,"tag":3413,"props":8767,"children":8768},{"style":3579},[8769],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":8771,"children":8772},{"style":3567},[8773],{"type":3048,"value":5741},{"type":3043,"tag":3413,"props":8775,"children":8776},{"style":3573},[8777],{"type":3048,"value":8778},"(ipKey)) ",{"type":3043,"tag":3413,"props":8780,"children":8781},{"style":3556},[8782],{"type":3048,"value":6837},{"type":3043,"tag":3413,"props":8784,"children":8785},{"style":3428},[8786],{"type":3048,"value":6077},{"type":3043,"tag":3413,"props":8788,"children":8789},{"style":3579},[8790],{"type":3048,"value":6846},{"type":3043,"tag":3413,"props":8792,"children":8793},{"style":3428},[8794],{"type":3048,"value":6851},{"type":3043,"tag":3413,"props":8796,"children":8797},{"style":3579},[8798],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":8800,"children":8801},{"class":3415,"line":3487},[8802],{"type":3043,"tag":3413,"props":8803,"children":8804},{"emptyLinePlaceholder":1200},[8805],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":8807,"children":8808},{"class":3415,"line":3496},[8809,8814,8819],{"type":3043,"tag":3413,"props":8810,"children":8811},{"style":3556},[8812],{"type":3048,"value":8813},"if",{"type":3043,"tag":3413,"props":8815,"children":8816},{"style":3573},[8817],{"type":3048,"value":8818}," (entry) ",{"type":3043,"tag":3413,"props":8820,"children":8821},{"style":3579},[8822],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":8824,"children":8825},{"class":3415,"line":3032},[8826,8831,8835,8839,8843,8847,8852,8856,8860,8864,8869,8873,8878,8882,8886],{"type":3043,"tag":3413,"props":8827,"children":8828},{"style":3573},[8829],{"type":3048,"value":8830},"  console",{"type":3043,"tag":3413,"props":8832,"children":8833},{"style":3579},[8834],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":8836,"children":8837},{"style":3567},[8838],{"type":3048,"value":5874},{"type":3043,"tag":3413,"props":8840,"children":8841},{"style":3588},[8842],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":8844,"children":8845},{"style":3579},[8846],{"type":3048,"value":5883},{"type":3043,"tag":3413,"props":8848,"children":8849},{"style":3434},[8850],{"type":3048,"value":8851},"IP has made ",{"type":3043,"tag":3413,"props":8853,"children":8854},{"style":3579},[8855],{"type":3048,"value":5893},{"type":3043,"tag":3413,"props":8857,"children":8858},{"style":3573},[8859],{"type":3048,"value":6888},{"type":3043,"tag":3413,"props":8861,"children":8862},{"style":3579},[8863],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":8865,"children":8866},{"style":3573},[8867],{"type":3048,"value":8868},"count",{"type":3043,"tag":3413,"props":8870,"children":8871},{"style":3579},[8872],{"type":3048,"value":3945},{"type":3043,"tag":3413,"props":8874,"children":8875},{"style":3434},[8876],{"type":3048,"value":8877}," requests",{"type":3043,"tag":3413,"props":8879,"children":8880},{"style":3579},[8881],{"type":3048,"value":5883},{"type":3043,"tag":3413,"props":8883,"children":8884},{"style":3588},[8885],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":8887,"children":8888},{"style":3579},[8889],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":8891,"children":8892},{"class":3415,"line":3692},[8893,8897,8901,8905,8909,8913,8918,8922,8927,8931,8936,8940,8945,8949,8954,8958,8963,8967],{"type":3043,"tag":3413,"props":8894,"children":8895},{"style":3573},[8896],{"type":3048,"value":8830},{"type":3043,"tag":3413,"props":8898,"children":8899},{"style":3579},[8900],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":8902,"children":8903},{"style":3567},[8904],{"type":3048,"value":5874},{"type":3043,"tag":3413,"props":8906,"children":8907},{"style":3588},[8908],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":8910,"children":8911},{"style":3579},[8912],{"type":3048,"value":5883},{"type":3043,"tag":3413,"props":8914,"children":8915},{"style":3434},[8916],{"type":3048,"value":8917},"Last request at: ",{"type":3043,"tag":3413,"props":8919,"children":8920},{"style":3579},[8921],{"type":3048,"value":5893},{"type":3043,"tag":3413,"props":8923,"children":8924},{"style":3579},[8925],{"type":3048,"value":8926},"new",{"type":3043,"tag":3413,"props":8928,"children":8929},{"style":3567},[8930],{"type":3048,"value":6701},{"type":3043,"tag":3413,"props":8932,"children":8933},{"style":3573},[8934],{"type":3048,"value":8935},"(entry",{"type":3043,"tag":3413,"props":8937,"children":8938},{"style":3579},[8939],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":8941,"children":8942},{"style":3573},[8943],{"type":3048,"value":8944},"time)",{"type":3043,"tag":3413,"props":8946,"children":8947},{"style":3579},[8948],{"type":3048,"value":4542},{"type":3043,"tag":3413,"props":8950,"children":8951},{"style":3567},[8952],{"type":3048,"value":8953},"toISOString",{"type":3043,"tag":3413,"props":8955,"children":8956},{"style":3573},[8957],{"type":3048,"value":5504},{"type":3043,"tag":3413,"props":8959,"children":8960},{"style":3579},[8961],{"type":3048,"value":8962},"}`",{"type":3043,"tag":3413,"props":8964,"children":8965},{"style":3588},[8966],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":8968,"children":8969},{"style":3579},[8970],{"type":3048,"value":3955},{"type":3043,"tag":3413,"props":8972,"children":8973},{"class":3415,"line":3701},[8974],{"type":3043,"tag":3413,"props":8975,"children":8976},{"style":3579},[8977],{"type":3048,"value":4394},{"type":3043,"tag":3389,"props":8979,"children":8981},{"id":8980},"moduleoptions-type",[8982,8988],{"type":3043,"tag":3200,"props":8983,"children":8985},{"className":8984},[],[8986],{"type":3048,"value":8987},"ModuleOptions",{"type":3048,"value":8437},{"type":3043,"tag":3050,"props":8990,"children":8991},{},[8992],{"type":3048,"value":8993},"You can also import the module configuration type:",{"type":3043,"tag":3403,"props":8995,"children":8997},{"className":5313,"code":8996,"language":5315,"meta":2987,"style":2987},"import type { ModuleOptions } from \"nuxt-api-shield\";\n",[8998],{"type":3043,"tag":3200,"props":8999,"children":9000},{"__ignoreMap":2987},[9001],{"type":3043,"tag":3413,"props":9002,"children":9003},{"class":3415,"line":3015},[9004,9008,9012,9016,9021,9025,9029,9033,9037,9041],{"type":3043,"tag":3413,"props":9005,"children":9006},{"style":3556},[9007],{"type":3048,"value":5327},{"type":3043,"tag":3413,"props":9009,"children":9010},{"style":3556},[9011],{"type":3048,"value":6068},{"type":3043,"tag":3413,"props":9013,"children":9014},{"style":3579},[9015],{"type":3048,"value":5332},{"type":3043,"tag":3413,"props":9017,"children":9018},{"style":3573},[9019],{"type":3048,"value":9020}," ModuleOptions",{"type":3043,"tag":3413,"props":9022,"children":9023},{"style":3579},[9024],{"type":3048,"value":5342},{"type":3043,"tag":3413,"props":9026,"children":9027},{"style":3556},[9028],{"type":3048,"value":5347},{"type":3043,"tag":3413,"props":9030,"children":9031},{"style":3579},[9032],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":9034,"children":9035},{"style":3434},[9036],{"type":3048,"value":2984},{"type":3043,"tag":3413,"props":9038,"children":9039},{"style":3579},[9040],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":9042,"children":9043},{"style":3579},[9044],{"type":3048,"value":3955},{"type":3043,"tag":3126,"props":9046,"children":9048},{"id":9047},"per-route-rate-limiting",[9049],{"type":3048,"value":9050},"Per-Route Rate Limiting",{"type":3043,"tag":3050,"props":9052,"children":9053},{},[9054,9059,9061,9066],{"type":3043,"tag":3200,"props":9055,"children":9057},{"className":9056},[],[9058],{"type":3048,"value":2984},{"type":3048,"value":9060}," supports ",{"type":3043,"tag":3138,"props":9062,"children":9063},{},[9064],{"type":3048,"value":9065},"per-route rate limiting",{"type":3048,"value":9067},", allowing you to define custom limits for specific API endpoints while keeping a global default configuration for all other routes.",{"type":3043,"tag":3050,"props":9069,"children":9070},{},[9071,9073,9079,9080,9086,9088,9094],{"type":3048,"value":9072},"This is useful when certain endpoints (such as ",{"type":3043,"tag":3200,"props":9074,"children":9076},{"className":9075},[],[9077],{"type":3048,"value":9078},"\u002Fapi\u002Flogin",{"type":3048,"value":3365},{"type":3043,"tag":3200,"props":9081,"children":9083},{"className":9082},[],[9084],{"type":3048,"value":9085},"\u002Fapi\u002Fauth",{"type":3048,"value":9087},", or ",{"type":3043,"tag":3200,"props":9089,"children":9091},{"className":9090},[],[9092],{"type":3048,"value":9093},"\u002Fapi\u002Fpayment",{"type":3048,"value":9095},") require stricter protection.",{"type":3043,"tag":9097,"props":9098,"children":9099},"hr",{},[],{"type":3043,"tag":3389,"props":9101,"children":9103},{"id":9102},"configuration-example",[9104],{"type":3048,"value":9105},"Configuration Example",{"type":3043,"tag":3050,"props":9107,"children":9108},{},[9109,9110,9116],{"type":3048,"value":4413},{"type":3043,"tag":3200,"props":9111,"children":9113},{"className":9112},[],[9114],{"type":3048,"value":9115},"routes",{"type":3048,"value":9117}," option accepts a mixed array of strings (exact matches) and objects (custom limits or patterns).",{"type":3043,"tag":3403,"props":9119,"children":9121},{"className":5313,"code":9120,"language":5315,"meta":2987,"style":2987},"export default defineNuxtConfig({\n  modules: [\"nuxt-api-shield\"],\n\n  nuxtApiShield: {\n    limit: {\n      max: 12,\n      duration: 108,\n      ban: 3600,\n    },\n\n    routes: [\n      \u002F\u002F 1. String: uses the global default limit (exact match)\n      \"\u002Fapi\u002Fexample\",\n\n      \u002F\u002F 2. Object: custom rate limit for a specific route (exact match)\n      {\n        path: \"\u002Fapi\u002Fexample-per-route\",\n        max: 5,\n        duration: 10,\n        \u002F\u002F \"ban\" can also be overridden per route\n      },\n\n      \u002F\u002F 3. Object: Wildcard pattern\n      {\n        path: \"\u002Fapi\u002Fusers\u002F*\u002Fprofile\",\n        pattern: true,\n        max: 10,\n        duration: 60\n      }\n    ],\n  },\n});\n",[9122],{"type":3043,"tag":3200,"props":9123,"children":9124},{"__ignoreMap":2987},[9125,9148,9183,9190,9205,9221,9241,9261,9281,9288,9295,9312,9320,9340,9347,9355,9363,9392,9413,9434,9442,9450,9457,9465,9472,9500,9520,9539,9555,9562,9574,9581],{"type":3043,"tag":3413,"props":9126,"children":9127},{"class":3415,"line":3015},[9128,9132,9136,9140,9144],{"type":3043,"tag":3413,"props":9129,"children":9130},{"style":3556},[9131],{"type":3048,"value":3559},{"type":3043,"tag":3413,"props":9133,"children":9134},{"style":3556},[9135],{"type":3048,"value":3564},{"type":3043,"tag":3413,"props":9137,"children":9138},{"style":3567},[9139],{"type":3048,"value":3570},{"type":3043,"tag":3413,"props":9141,"children":9142},{"style":3573},[9143],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":9145,"children":9146},{"style":3579},[9147],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":9149,"children":9150},{"class":3415,"line":3011},[9151,9155,9159,9163,9167,9171,9175,9179],{"type":3043,"tag":3413,"props":9152,"children":9153},{"style":3588},[9154],{"type":3048,"value":3591},{"type":3043,"tag":3413,"props":9156,"children":9157},{"style":3579},[9158],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9160,"children":9161},{"style":3573},[9162],{"type":3048,"value":3601},{"type":3043,"tag":3413,"props":9164,"children":9165},{"style":3579},[9166],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":9168,"children":9169},{"style":3434},[9170],{"type":3048,"value":2984},{"type":3043,"tag":3413,"props":9172,"children":9173},{"style":3579},[9174],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":9176,"children":9177},{"style":3573},[9178],{"type":3048,"value":3619},{"type":3043,"tag":3413,"props":9180,"children":9181},{"style":3579},[9182],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9184,"children":9185},{"class":3415,"line":3445},[9186],{"type":3043,"tag":3413,"props":9187,"children":9188},{"emptyLinePlaceholder":1200},[9189],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":9191,"children":9192},{"class":3415,"line":3454},[9193,9197,9201],{"type":3043,"tag":3413,"props":9194,"children":9195},{"style":3588},[9196],{"type":3048,"value":3632},{"type":3043,"tag":3413,"props":9198,"children":9199},{"style":3579},[9200],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9202,"children":9203},{"style":3579},[9204],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":9206,"children":9207},{"class":3415,"line":3007},[9208,9213,9217],{"type":3043,"tag":3413,"props":9209,"children":9210},{"style":3588},[9211],{"type":3048,"value":9212},"    limit",{"type":3043,"tag":3413,"props":9214,"children":9215},{"style":3579},[9216],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9218,"children":9219},{"style":3579},[9220],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":9222,"children":9223},{"class":3415,"line":3479},[9224,9229,9233,9237],{"type":3043,"tag":3413,"props":9225,"children":9226},{"style":3588},[9227],{"type":3048,"value":9228},"      max",{"type":3043,"tag":3413,"props":9230,"children":9231},{"style":3579},[9232],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9234,"children":9235},{"style":3853},[9236],{"type":3048,"value":4020},{"type":3043,"tag":3413,"props":9238,"children":9239},{"style":3579},[9240],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9242,"children":9243},{"class":3415,"line":3487},[9244,9249,9253,9257],{"type":3043,"tag":3413,"props":9245,"children":9246},{"style":3588},[9247],{"type":3048,"value":9248},"      duration",{"type":3043,"tag":3413,"props":9250,"children":9251},{"style":3579},[9252],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9254,"children":9255},{"style":3853},[9256],{"type":3048,"value":4041},{"type":3043,"tag":3413,"props":9258,"children":9259},{"style":3579},[9260],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9262,"children":9263},{"class":3415,"line":3496},[9264,9269,9273,9277],{"type":3043,"tag":3413,"props":9265,"children":9266},{"style":3588},[9267],{"type":3048,"value":9268},"      ban",{"type":3043,"tag":3413,"props":9270,"children":9271},{"style":3579},[9272],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9274,"children":9275},{"style":3853},[9276],{"type":3048,"value":4067},{"type":3043,"tag":3413,"props":9278,"children":9279},{"style":3579},[9280],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9282,"children":9283},{"class":3415,"line":3032},[9284],{"type":3043,"tag":3413,"props":9285,"children":9286},{"style":3579},[9287],{"type":3048,"value":3689},{"type":3043,"tag":3413,"props":9289,"children":9290},{"class":3415,"line":3692},[9291],{"type":3043,"tag":3413,"props":9292,"children":9293},{"emptyLinePlaceholder":1200},[9294],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":9296,"children":9297},{"class":3415,"line":3701},[9298,9303,9307],{"type":3043,"tag":3413,"props":9299,"children":9300},{"style":3588},[9301],{"type":3048,"value":9302},"    routes",{"type":3043,"tag":3413,"props":9304,"children":9305},{"style":3579},[9306],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9308,"children":9309},{"style":3573},[9310],{"type":3048,"value":9311}," [\n",{"type":3043,"tag":3413,"props":9313,"children":9314},{"class":3415,"line":3710},[9315],{"type":3043,"tag":3413,"props":9316,"children":9317},{"style":3419},[9318],{"type":3048,"value":9319},"      \u002F\u002F 1. String: uses the global default limit (exact match)\n",{"type":3043,"tag":3413,"props":9321,"children":9322},{"class":3415,"line":3719},[9323,9327,9332,9336],{"type":3043,"tag":3413,"props":9324,"children":9325},{"style":3579},[9326],{"type":3048,"value":4648},{"type":3043,"tag":3413,"props":9328,"children":9329},{"style":3434},[9330],{"type":3048,"value":9331},"\u002Fapi\u002Fexample",{"type":3043,"tag":3413,"props":9333,"children":9334},{"style":3579},[9335],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":9337,"children":9338},{"style":3579},[9339],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9341,"children":9342},{"class":3415,"line":3728},[9343],{"type":3043,"tag":3413,"props":9344,"children":9345},{"emptyLinePlaceholder":1200},[9346],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":9348,"children":9349},{"class":3415,"line":3737},[9350],{"type":3043,"tag":3413,"props":9351,"children":9352},{"style":3419},[9353],{"type":3048,"value":9354},"      \u002F\u002F 2. Object: custom rate limit for a specific route (exact match)\n",{"type":3043,"tag":3413,"props":9356,"children":9357},{"class":3415,"line":3746},[9358],{"type":3043,"tag":3413,"props":9359,"children":9360},{"style":3579},[9361],{"type":3048,"value":9362},"      {\n",{"type":3043,"tag":3413,"props":9364,"children":9365},{"class":3415,"line":3755},[9366,9371,9375,9379,9384,9388],{"type":3043,"tag":3413,"props":9367,"children":9368},{"style":3588},[9369],{"type":3048,"value":9370},"        path",{"type":3043,"tag":3413,"props":9372,"children":9373},{"style":3579},[9374],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9376,"children":9377},{"style":3579},[9378],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":9380,"children":9381},{"style":3434},[9382],{"type":3048,"value":9383},"\u002Fapi\u002Fexample-per-route",{"type":3043,"tag":3413,"props":9385,"children":9386},{"style":3579},[9387],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":9389,"children":9390},{"style":3579},[9391],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9393,"children":9394},{"class":3415,"line":3763},[9395,9400,9404,9409],{"type":3043,"tag":3413,"props":9396,"children":9397},{"style":3588},[9398],{"type":3048,"value":9399},"        max",{"type":3043,"tag":3413,"props":9401,"children":9402},{"style":3579},[9403],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9405,"children":9406},{"style":3853},[9407],{"type":3048,"value":9408}," 5",{"type":3043,"tag":3413,"props":9410,"children":9411},{"style":3579},[9412],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9414,"children":9415},{"class":3415,"line":3772},[9416,9421,9425,9430],{"type":3043,"tag":3413,"props":9417,"children":9418},{"style":3588},[9419],{"type":3048,"value":9420},"        duration",{"type":3043,"tag":3413,"props":9422,"children":9423},{"style":3579},[9424],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9426,"children":9427},{"style":3853},[9428],{"type":3048,"value":9429}," 10",{"type":3043,"tag":3413,"props":9431,"children":9432},{"style":3579},[9433],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9435,"children":9436},{"class":3415,"line":3781},[9437],{"type":3043,"tag":3413,"props":9438,"children":9439},{"style":3419},[9440],{"type":3048,"value":9441},"        \u002F\u002F \"ban\" can also be overridden per route\n",{"type":3043,"tag":3413,"props":9443,"children":9444},{"class":3415,"line":3795},[9445],{"type":3043,"tag":3413,"props":9446,"children":9447},{"style":3579},[9448],{"type":3048,"value":9449},"      },\n",{"type":3043,"tag":3413,"props":9451,"children":9452},{"class":3415,"line":3823},[9453],{"type":3043,"tag":3413,"props":9454,"children":9455},{"emptyLinePlaceholder":1200},[9456],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":9458,"children":9459},{"class":3415,"line":3831},[9460],{"type":3043,"tag":3413,"props":9461,"children":9462},{"style":3419},[9463],{"type":3048,"value":9464},"      \u002F\u002F 3. Object: Wildcard pattern\n",{"type":3043,"tag":3413,"props":9466,"children":9467},{"class":3415,"line":3840},[9468],{"type":3043,"tag":3413,"props":9469,"children":9470},{"style":3579},[9471],{"type":3048,"value":9362},{"type":3043,"tag":3413,"props":9473,"children":9474},{"class":3415,"line":3868},[9475,9479,9483,9487,9492,9496],{"type":3043,"tag":3413,"props":9476,"children":9477},{"style":3588},[9478],{"type":3048,"value":9370},{"type":3043,"tag":3413,"props":9480,"children":9481},{"style":3579},[9482],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9484,"children":9485},{"style":3579},[9486],{"type":3048,"value":4121},{"type":3043,"tag":3413,"props":9488,"children":9489},{"style":3434},[9490],{"type":3048,"value":9491},"\u002Fapi\u002Fusers\u002F*\u002Fprofile",{"type":3043,"tag":3413,"props":9493,"children":9494},{"style":3579},[9495],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":9497,"children":9498},{"style":3579},[9499],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9501,"children":9502},{"class":3415,"line":3885},[9503,9508,9512,9516],{"type":3043,"tag":3413,"props":9504,"children":9505},{"style":3588},[9506],{"type":3048,"value":9507},"        pattern",{"type":3043,"tag":3413,"props":9509,"children":9510},{"style":3579},[9511],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9513,"children":9514},{"style":3907},[9515],{"type":3048,"value":4100},{"type":3043,"tag":3413,"props":9517,"children":9518},{"style":3579},[9519],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9521,"children":9522},{"class":3415,"line":3894},[9523,9527,9531,9535],{"type":3043,"tag":3413,"props":9524,"children":9525},{"style":3588},[9526],{"type":3048,"value":9399},{"type":3043,"tag":3413,"props":9528,"children":9529},{"style":3579},[9530],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9532,"children":9533},{"style":3853},[9534],{"type":3048,"value":9429},{"type":3043,"tag":3413,"props":9536,"children":9537},{"style":3579},[9538],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9540,"children":9541},{"class":3415,"line":3922},[9542,9546,9550],{"type":3043,"tag":3413,"props":9543,"children":9544},{"style":3588},[9545],{"type":3048,"value":9420},{"type":3043,"tag":3413,"props":9547,"children":9548},{"style":3579},[9549],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9551,"children":9552},{"style":3853},[9553],{"type":3048,"value":9554}," 60\n",{"type":3043,"tag":3413,"props":9556,"children":9557},{"class":3415,"line":3930},[9558],{"type":3043,"tag":3413,"props":9559,"children":9560},{"style":3579},[9561],{"type":3048,"value":4715},{"type":3043,"tag":3413,"props":9563,"children":9564},{"class":3415,"line":3939},[9565,9570],{"type":3043,"tag":3413,"props":9566,"children":9567},{"style":3573},[9568],{"type":3048,"value":9569},"    ]",{"type":3043,"tag":3413,"props":9571,"children":9572},{"style":3579},[9573],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9575,"children":9576},{"class":3415,"line":6865},[9577],{"type":3043,"tag":3413,"props":9578,"children":9579},{"style":3579},[9580],{"type":3048,"value":3936},{"type":3043,"tag":3413,"props":9582,"children":9583},{"class":3415,"line":6874},[9584,9588,9592],{"type":3043,"tag":3413,"props":9585,"children":9586},{"style":3579},[9587],{"type":3048,"value":3945},{"type":3043,"tag":3413,"props":9589,"children":9590},{"style":3573},[9591],{"type":3048,"value":3950},{"type":3043,"tag":3413,"props":9593,"children":9594},{"style":3579},[9595],{"type":3048,"value":3955},{"type":3043,"tag":3389,"props":9597,"children":9599},{"id":9598},"wildcard-route-support",[9600],{"type":3048,"value":9601},"Wildcard Route Support",{"type":3043,"tag":3050,"props":9603,"children":9604},{},[9605,9607,9613],{"type":3048,"value":9606},"Wildcard patterns allow you to apply the same limits to groups of related API endpoints. Enable them by setting ",{"type":3043,"tag":3200,"props":9608,"children":9610},{"className":9609},[],[9611],{"type":3048,"value":9612},"pattern: true",{"type":3048,"value":9614}," in your route configuration.",{"type":3043,"tag":5279,"props":9616,"children":9618},{"id":9617},"wildcard-pattern-syntax",[9619],{"type":3048,"value":9620},"Wildcard Pattern Syntax",{"type":3043,"tag":3100,"props":9622,"children":9623},{},[9624,9668],{"type":3043,"tag":3104,"props":9625,"children":9626},{},[9627,9639,9641],{"type":3043,"tag":3138,"props":9628,"children":9629},{},[9630,9632,9638],{"type":3048,"value":9631},"Single-Segment Wildcard (",{"type":3043,"tag":3200,"props":9633,"children":9635},{"className":9634},[],[9636],{"type":3048,"value":9637},"*",{"type":3048,"value":3950},{"type":3048,"value":9640},": Matches exactly one path segment.\n",{"type":3043,"tag":3100,"props":9642,"children":9643},{},[9644],{"type":3043,"tag":3104,"props":9645,"children":9646},{},[9647,9652,9654,9660,9661,9667],{"type":3043,"tag":3200,"props":9648,"children":9650},{"className":9649},[],[9651],{"type":3048,"value":9491},{"type":3048,"value":9653}," matches ",{"type":3043,"tag":3200,"props":9655,"children":9657},{"className":9656},[],[9658],{"type":3048,"value":9659},"\u002Fapi\u002Fusers\u002F123\u002Fprofile",{"type":3048,"value":7334},{"type":3043,"tag":3200,"props":9662,"children":9664},{"className":9663},[],[9665],{"type":3048,"value":9666},"\u002Fapi\u002Fusers\u002Fadmin\u002Fprofile",{"type":3048,"value":4542},{"type":3043,"tag":3104,"props":9669,"children":9670},{},[9671,9683,9685],{"type":3043,"tag":3138,"props":9672,"children":9673},{},[9674,9676,9682],{"type":3048,"value":9675},"Multi-Segment Wildcard (",{"type":3043,"tag":3200,"props":9677,"children":9679},{"className":9678},[],[9680],{"type":3048,"value":9681},"**",{"type":3048,"value":3950},{"type":3048,"value":9684},": Matches zero or more path segments.\n",{"type":3043,"tag":3100,"props":9686,"children":9687},{},[9688],{"type":3043,"tag":3104,"props":9689,"children":9690},{},[9691,9697,9698,9704,9705,9711],{"type":3043,"tag":3200,"props":9692,"children":9694},{"className":9693},[],[9695],{"type":3048,"value":9696},"\u002Fapi\u002Freports\u002F**\u002Fsummary",{"type":3048,"value":9653},{"type":3043,"tag":3200,"props":9699,"children":9701},{"className":9700},[],[9702],{"type":3048,"value":9703},"\u002Fapi\u002Freports\u002Fmonthly\u002F2023\u002Fsummary",{"type":3048,"value":7334},{"type":3043,"tag":3200,"props":9706,"children":9708},{"className":9707},[],[9709],{"type":3048,"value":9710},"\u002Fapi\u002Freports\u002Fsummary",{"type":3048,"value":4542},{"type":3043,"tag":5279,"props":9713,"children":9715},{"id":9714},"pattern-precedence",[9716],{"type":3048,"value":9717},"Pattern Precedence",{"type":3043,"tag":9719,"props":9720,"children":9721},"ol",{},[9722,9732,9742],{"type":3043,"tag":3104,"props":9723,"children":9724},{},[9725,9730],{"type":3043,"tag":3138,"props":9726,"children":9727},{},[9728],{"type":3048,"value":9729},"Exact matches",{"type":3048,"value":9731}," always take precedence over wildcard patterns.",{"type":3043,"tag":3104,"props":9733,"children":9734},{},[9735,9740],{"type":3043,"tag":3138,"props":9736,"children":9737},{},[9738],{"type":3048,"value":9739},"More specific wildcards",{"type":3048,"value":9741}," take precedence over less specific ones.",{"type":3043,"tag":3104,"props":9743,"children":9744},{},[9745],{"type":3048,"value":9746},"When multiple wildcard patterns match, the most specific one is used.",{"type":3043,"tag":5279,"props":9748,"children":9750},{"id":9749},"important-notes",[9751],{"type":3048,"value":9752},"Important Notes",{"type":3043,"tag":3100,"props":9754,"children":9755},{},[9756,9766],{"type":3043,"tag":3104,"props":9757,"children":9758},{},[9759,9764],{"type":3043,"tag":3138,"props":9760,"children":9761},{},[9762],{"type":3048,"value":9763},"Shared Rate Limits:",{"type":3048,"value":9765}," All requests that match the same wildcard pattern share the same rate limit counter.",{"type":3043,"tag":3104,"props":9767,"children":9768},{},[9769,9774,9776,9782,9783,9789],{"type":3043,"tag":3138,"props":9770,"children":9771},{},[9772],{"type":3048,"value":9773},"Security:",{"type":3048,"value":9775}," Broad or dangerous patterns like ",{"type":3043,"tag":3200,"props":9777,"children":9779},{"className":9778},[],[9780],{"type":3048,"value":9781},"\u002F**",{"type":3048,"value":7334},{"type":3043,"tag":3200,"props":9784,"children":9786},{"className":9785},[],[9787],{"type":3048,"value":9788},"\u002F*",{"type":3048,"value":9790}," are automatically rejected to prevent accidental global blocking.",{"type":3043,"tag":3126,"props":9792,"children":9794},{"id":9793},"skipping-routes",[9795],{"type":3048,"value":9796},"Skipping Routes",{"type":3043,"tag":3050,"props":9798,"children":9799},{},[9800,9801,9807,9809,9814],{"type":3048,"value":4413},{"type":3043,"tag":3200,"props":9802,"children":9804},{"className":9803},[],[9805],{"type":3048,"value":9806},"skipRoutes",{"type":3048,"value":9808}," option lets you exempt specific paths from all shield processing (ban check, rate limit counter, and logging) without needing to list every protected route in the ",{"type":3043,"tag":3200,"props":9810,"children":9812},{"className":9811},[],[9813],{"type":3048,"value":9115},{"type":3048,"value":9815}," array.",{"type":3043,"tag":3050,"props":9817,"children":9818},{},[9819],{"type":3048,"value":9820},"This is useful for health checks, webhook endpoints, monitoring probes, or internal status routes that should always respond regardless of traffic.",{"type":3043,"tag":3389,"props":9822,"children":9824},{"id":9823},"configuration-example-1",[9825],{"type":3048,"value":9105},{"type":3043,"tag":3403,"props":9827,"children":9829},{"className":5313,"code":9828,"language":5315,"meta":2987,"style":2987},"export default defineNuxtConfig({\n  modules: [\"nuxt-api-shield\"],\n\n  nuxtApiShield: {\n    limit: {\n      max: 12,\n      duration: 108,\n      ban: 3600,\n    },\n\n    skipRoutes: [\n      \"\u002Fapi\u002Fhealth\",          \u002F\u002F exact match\n      \"\u002Fapi\u002F_nuxt\u002F**\",        \u002F\u002F multi-segment wildcard\n      \"\u002Fapi\u002Fwebhooks\u002Fstripe\", \u002F\u002F exact match\n    ],\n  },\n})\n",[9830],{"type":3043,"tag":3200,"props":9831,"children":9832},{"__ignoreMap":2987},[9833,9856,9891,9898,9913,9928,9947,9966,9985,9992,9999,10014,10039,10064,10089,10100,10107],{"type":3043,"tag":3413,"props":9834,"children":9835},{"class":3415,"line":3015},[9836,9840,9844,9848,9852],{"type":3043,"tag":3413,"props":9837,"children":9838},{"style":3556},[9839],{"type":3048,"value":3559},{"type":3043,"tag":3413,"props":9841,"children":9842},{"style":3556},[9843],{"type":3048,"value":3564},{"type":3043,"tag":3413,"props":9845,"children":9846},{"style":3567},[9847],{"type":3048,"value":3570},{"type":3043,"tag":3413,"props":9849,"children":9850},{"style":3573},[9851],{"type":3048,"value":3576},{"type":3043,"tag":3413,"props":9853,"children":9854},{"style":3579},[9855],{"type":3048,"value":3582},{"type":3043,"tag":3413,"props":9857,"children":9858},{"class":3415,"line":3011},[9859,9863,9867,9871,9875,9879,9883,9887],{"type":3043,"tag":3413,"props":9860,"children":9861},{"style":3588},[9862],{"type":3048,"value":3591},{"type":3043,"tag":3413,"props":9864,"children":9865},{"style":3579},[9866],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9868,"children":9869},{"style":3573},[9870],{"type":3048,"value":3601},{"type":3043,"tag":3413,"props":9872,"children":9873},{"style":3579},[9874],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":9876,"children":9877},{"style":3434},[9878],{"type":3048,"value":2984},{"type":3043,"tag":3413,"props":9880,"children":9881},{"style":3579},[9882],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":9884,"children":9885},{"style":3573},[9886],{"type":3048,"value":3619},{"type":3043,"tag":3413,"props":9888,"children":9889},{"style":3579},[9890],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9892,"children":9893},{"class":3415,"line":3445},[9894],{"type":3043,"tag":3413,"props":9895,"children":9896},{"emptyLinePlaceholder":1200},[9897],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":9899,"children":9900},{"class":3415,"line":3454},[9901,9905,9909],{"type":3043,"tag":3413,"props":9902,"children":9903},{"style":3588},[9904],{"type":3048,"value":3632},{"type":3043,"tag":3413,"props":9906,"children":9907},{"style":3579},[9908],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9910,"children":9911},{"style":3579},[9912],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":9914,"children":9915},{"class":3415,"line":3007},[9916,9920,9924],{"type":3043,"tag":3413,"props":9917,"children":9918},{"style":3588},[9919],{"type":3048,"value":9212},{"type":3043,"tag":3413,"props":9921,"children":9922},{"style":3579},[9923],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9925,"children":9926},{"style":3579},[9927],{"type":3048,"value":3641},{"type":3043,"tag":3413,"props":9929,"children":9930},{"class":3415,"line":3479},[9931,9935,9939,9943],{"type":3043,"tag":3413,"props":9932,"children":9933},{"style":3588},[9934],{"type":3048,"value":9228},{"type":3043,"tag":3413,"props":9936,"children":9937},{"style":3579},[9938],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9940,"children":9941},{"style":3853},[9942],{"type":3048,"value":4020},{"type":3043,"tag":3413,"props":9944,"children":9945},{"style":3579},[9946],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9948,"children":9949},{"class":3415,"line":3487},[9950,9954,9958,9962],{"type":3043,"tag":3413,"props":9951,"children":9952},{"style":3588},[9953],{"type":3048,"value":9248},{"type":3043,"tag":3413,"props":9955,"children":9956},{"style":3579},[9957],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9959,"children":9960},{"style":3853},[9961],{"type":3048,"value":4041},{"type":3043,"tag":3413,"props":9963,"children":9964},{"style":3579},[9965],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9967,"children":9968},{"class":3415,"line":3496},[9969,9973,9977,9981],{"type":3043,"tag":3413,"props":9970,"children":9971},{"style":3588},[9972],{"type":3048,"value":9268},{"type":3043,"tag":3413,"props":9974,"children":9975},{"style":3579},[9976],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":9978,"children":9979},{"style":3853},[9980],{"type":3048,"value":4067},{"type":3043,"tag":3413,"props":9982,"children":9983},{"style":3579},[9984],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":9986,"children":9987},{"class":3415,"line":3032},[9988],{"type":3043,"tag":3413,"props":9989,"children":9990},{"style":3579},[9991],{"type":3048,"value":3689},{"type":3043,"tag":3413,"props":9993,"children":9994},{"class":3415,"line":3692},[9995],{"type":3043,"tag":3413,"props":9996,"children":9997},{"emptyLinePlaceholder":1200},[9998],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":10000,"children":10001},{"class":3415,"line":3701},[10002,10006,10010],{"type":3043,"tag":3413,"props":10003,"children":10004},{"style":3588},[10005],{"type":3048,"value":3801},{"type":3043,"tag":3413,"props":10007,"children":10008},{"style":3579},[10009],{"type":3048,"value":3596},{"type":3043,"tag":3413,"props":10011,"children":10012},{"style":3573},[10013],{"type":3048,"value":9311},{"type":3043,"tag":3413,"props":10015,"children":10016},{"class":3415,"line":3710},[10017,10021,10026,10030,10034],{"type":3043,"tag":3413,"props":10018,"children":10019},{"style":3579},[10020],{"type":3048,"value":4648},{"type":3043,"tag":3413,"props":10022,"children":10023},{"style":3434},[10024],{"type":3048,"value":10025},"\u002Fapi\u002Fhealth",{"type":3043,"tag":3413,"props":10027,"children":10028},{"style":3579},[10029],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":10031,"children":10032},{"style":3579},[10033],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":10035,"children":10036},{"style":3419},[10037],{"type":3048,"value":10038},"          \u002F\u002F exact match\n",{"type":3043,"tag":3413,"props":10040,"children":10041},{"class":3415,"line":3719},[10042,10046,10051,10055,10059],{"type":3043,"tag":3413,"props":10043,"children":10044},{"style":3579},[10045],{"type":3048,"value":4648},{"type":3043,"tag":3413,"props":10047,"children":10048},{"style":3434},[10049],{"type":3048,"value":10050},"\u002Fapi\u002F_nuxt\u002F**",{"type":3043,"tag":3413,"props":10052,"children":10053},{"style":3579},[10054],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":10056,"children":10057},{"style":3579},[10058],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":10060,"children":10061},{"style":3419},[10062],{"type":3048,"value":10063},"        \u002F\u002F multi-segment wildcard\n",{"type":3043,"tag":3413,"props":10065,"children":10066},{"class":3415,"line":3728},[10067,10071,10076,10080,10084],{"type":3043,"tag":3413,"props":10068,"children":10069},{"style":3579},[10070],{"type":3048,"value":4648},{"type":3043,"tag":3413,"props":10072,"children":10073},{"style":3434},[10074],{"type":3048,"value":10075},"\u002Fapi\u002Fwebhooks\u002Fstripe",{"type":3043,"tag":3413,"props":10077,"children":10078},{"style":3579},[10079],{"type":3048,"value":3606},{"type":3043,"tag":3413,"props":10081,"children":10082},{"style":3579},[10083],{"type":3048,"value":3815},{"type":3043,"tag":3413,"props":10085,"children":10086},{"style":3419},[10087],{"type":3048,"value":10088}," \u002F\u002F exact match\n",{"type":3043,"tag":3413,"props":10090,"children":10091},{"class":3415,"line":3737},[10092,10096],{"type":3043,"tag":3413,"props":10093,"children":10094},{"style":3573},[10095],{"type":3048,"value":9569},{"type":3043,"tag":3413,"props":10097,"children":10098},{"style":3579},[10099],{"type":3048,"value":3624},{"type":3043,"tag":3413,"props":10101,"children":10102},{"class":3415,"line":3746},[10103],{"type":3043,"tag":3413,"props":10104,"children":10105},{"style":3579},[10106],{"type":3048,"value":3936},{"type":3043,"tag":3413,"props":10108,"children":10109},{"class":3415,"line":3755},[10110,10114],{"type":3043,"tag":3413,"props":10111,"children":10112},{"style":3579},[10113],{"type":3048,"value":3945},{"type":3043,"tag":3413,"props":10115,"children":10116},{"style":3573},[10117],{"type":3048,"value":8081},{"type":3043,"tag":3389,"props":10119,"children":10121},{"id":10120},"how-it-works",[10122],{"type":3048,"value":10123},"How It Works",{"type":3043,"tag":3100,"props":10125,"children":10126},{},[10127,10139,10151],{"type":3043,"tag":3104,"props":10128,"children":10129},{},[10130,10132,10137],{"type":3048,"value":10131},"Routes in ",{"type":3043,"tag":3200,"props":10133,"children":10135},{"className":10134},[],[10136],{"type":3048,"value":9806},{"type":3048,"value":10138}," bypass the middleware entirely — no ban check, no rate limit counter, no log entry.",{"type":3043,"tag":3104,"props":10140,"children":10141},{},[10142,10144,10149],{"type":3048,"value":10143},"The rest of your API routes (those matching the global defaults or the ",{"type":3043,"tag":3200,"props":10145,"children":10147},{"className":10146},[],[10148],{"type":3048,"value":9115},{"type":3048,"value":10150}," option) continue to be rate limited normally.",{"type":3043,"tag":3104,"props":10152,"children":10153},{},[10154,10156,10161,10163,10168],{"type":3048,"value":10155},"Supports the same wildcard syntax as per-route patterns: ",{"type":3043,"tag":3200,"props":10157,"children":10159},{"className":10158},[],[10160],{"type":3048,"value":9637},{"type":3048,"value":10162}," for single segment, ",{"type":3043,"tag":3200,"props":10164,"children":10166},{"className":10165},[],[10167],{"type":3048,"value":9681},{"type":3048,"value":10169}," for multi-segment.",{"type":3043,"tag":3126,"props":10171,"children":10173},{"id":10172},"important-considerations",[10174],{"type":3048,"value":10175},"Important Considerations",{"type":3043,"tag":3389,"props":10177,"children":10179},{"id":10178},"data-privacy-ip-address-storage",[10180],{"type":3048,"value":10181},"Data Privacy (IP Address Storage)",{"type":3043,"tag":3050,"props":10183,"children":10184},{},[10185,10190],{"type":3043,"tag":3200,"props":10186,"children":10188},{"className":10187},[],[10189],{"type":3048,"value":2984},{"type":3048,"value":10191}," functions by tracking IP addresses to monitor request rates and apply bans. This means IP addresses, which can be considered Personally Identifiable Information (PII) under regulations like GDPR, are stored by the module.",{"type":3043,"tag":3100,"props":10193,"children":10194},{},[10195,10236,10246],{"type":3043,"tag":3104,"props":10196,"children":10197},{},[10198,10203],{"type":3043,"tag":3138,"props":10199,"children":10200},{},[10201],{"type":3048,"value":10202},"Data Stored:",{"type":3043,"tag":3100,"props":10204,"children":10205},{},[10206,10225],{"type":3043,"tag":3104,"props":10207,"children":10208},{},[10209,10215,10217,10223],{"type":3043,"tag":3200,"props":10210,"children":10212},{"className":10211},[],[10213],{"type":3048,"value":10214},"ip:\u003CIP_ADDRESS>",{"type":3048,"value":10216},": Stores ",{"type":3043,"tag":3200,"props":10218,"children":10220},{"className":10219},[],[10221],{"type":3048,"value":10222},"{ count: number, time: number }",{"type":3048,"value":10224}," for tracking request rates.",{"type":3043,"tag":3104,"props":10226,"children":10227},{},[10228,10234],{"type":3043,"tag":3200,"props":10229,"children":10231},{"className":10230},[],[10232],{"type":3048,"value":10233},"ban:\u003CIP_ADDRESS>",{"type":3048,"value":10235},": Stores a timestamp indicating when a ban on an IP address expires.",{"type":3043,"tag":3104,"props":10237,"children":10238},{},[10239,10244],{"type":3043,"tag":3138,"props":10240,"children":10241},{},[10242],{"type":3048,"value":10243},"Compliance:",{"type":3048,"value":10245}," Ensure your usage complies with any applicable data privacy regulations. This may involve updating your privacy policy to inform users about this data processing.",{"type":3043,"tag":3104,"props":10247,"children":10248},{},[10249,10254],{"type":3043,"tag":3138,"props":10250,"children":10251},{},[10252],{"type":3048,"value":10253},"Data Retention:",{"type":3043,"tag":3100,"props":10255,"children":10256},{},[10257,10269],{"type":3043,"tag":3104,"props":10258,"children":10259},{},[10260,10262,10267],{"type":3048,"value":10261},"Ban entries are cleaned up by the ",{"type":3043,"tag":3200,"props":10263,"children":10265},{"className":10264},[],[10266],{"type":3048,"value":3297},{"type":3048,"value":10268}," task after expiry.",{"type":3043,"tag":3104,"props":10270,"children":10271},{},[10272,10274,10279,10281,10286],{"type":3048,"value":10273},"IP tracking entries are cleaned up by the ",{"type":3043,"tag":3200,"props":10275,"children":10277},{"className":10276},[],[10278],{"type":3048,"value":3305},{"type":3048,"value":10280}," task based on the ",{"type":3043,"tag":3200,"props":10282,"children":10284},{"className":10283},[],[10285],{"type":3048,"value":5003},{"type":3048,"value":10287}," setting.",{"type":3043,"tag":3389,"props":10289,"children":10291},{"id":10290},"storage-security",[10292],{"type":3048,"value":10293},"Storage Security",{"type":3043,"tag":3100,"props":10295,"children":10296},{},[10297,10375],{"type":3043,"tag":3104,"props":10298,"children":10299},{},[10300,10313,10315,10321,10323,10328,10329,10335,10337,10343,10345,10350,10352],{"type":3043,"tag":3138,"props":10301,"children":10302},{},[10303,10305,10311],{"type":3048,"value":10304},"Filesystem Driver (",{"type":3043,"tag":3200,"props":10306,"children":10308},{"className":10307},[],[10309],{"type":3048,"value":10310},"driver: 'fs'",{"type":3048,"value":10312},"):",{"type":3048,"value":10314}," If you use the filesystem driver for ",{"type":3043,"tag":3200,"props":10316,"children":10318},{"className":10317},[],[10319],{"type":3048,"value":10320},"unstorage",{"type":3048,"value":10322}," (e.g., ",{"type":3043,"tag":3200,"props":10324,"children":10326},{"className":10325},[],[10327],{"type":3048,"value":10310},{"type":3048,"value":3365},{"type":3043,"tag":3200,"props":10330,"children":10332},{"className":10331},[],[10333],{"type":3048,"value":10334},"base: '.shield'",{"type":3048,"value":10336},"), ensure that the storage directory (and the ",{"type":3043,"tag":3200,"props":10338,"children":10340},{"className":10339},[],[10341],{"type":3048,"value":10342},"logs",{"type":3048,"value":10344}," directory if logging is enabled via ",{"type":3043,"tag":3200,"props":10346,"children":10348},{"className":10347},[],[10349],{"type":3048,"value":7873},{"type":3048,"value":10351},") is:\n",{"type":3043,"tag":3100,"props":10353,"children":10354},{},[10355,10365],{"type":3043,"tag":3104,"props":10356,"children":10357},{},[10358,10363],{"type":3043,"tag":3138,"props":10359,"children":10360},{},[10361],{"type":3048,"value":10362},"Not web-accessible:",{"type":3048,"value":10364}," Your web server should not be configured to serve files from these directories.",{"type":3043,"tag":3104,"props":10366,"children":10367},{},[10368,10373],{"type":3043,"tag":3138,"props":10369,"children":10370},{},[10371],{"type":3048,"value":10372},"Properly permissioned:",{"type":3048,"value":10374}," The directories should have appropriate server-side file permissions to prevent unauthorized reading or writing.",{"type":3043,"tag":3104,"props":10376,"children":10377},{},[10378,10383],{"type":3043,"tag":3138,"props":10379,"children":10380},{},[10381],{"type":3048,"value":10382},"Other Drivers (Redis, etc.):",{"type":3048,"value":10384}," If using database drivers like Redis, ensure your database server itself is secured (e.g., authentication, network access controls).",{"type":3043,"tag":3389,"props":10386,"children":10388},{"id":10387},"error-message-errormessage",[10389,10391,10397],{"type":3048,"value":10390},"Error Message (",{"type":3043,"tag":3200,"props":10392,"children":10394},{"className":10393},[],[10395],{"type":3048,"value":10396},"errorMessage",{"type":3048,"value":3950},{"type":3043,"tag":3050,"props":10399,"children":10400},{},[10401,10402,10407],{"type":3048,"value":4413},{"type":3043,"tag":3200,"props":10403,"children":10405},{"className":10404},[],[10406],{"type":3048,"value":10396},{"type":3048,"value":10408}," option in the module configuration is returned in the body of a 429 response.",{"type":3043,"tag":3100,"props":10410,"children":10411},{},[10412,10417],{"type":3043,"tag":3104,"props":10413,"children":10414},{},[10415],{"type":3048,"value":10416},"It's recommended to use a plain text message.",{"type":3043,"tag":3104,"props":10418,"children":10419},{},[10420,10422,10427],{"type":3048,"value":10421},"If you choose to use HTML in your ",{"type":3043,"tag":3200,"props":10423,"children":10425},{"className":10424},[],[10426],{"type":3048,"value":10396},{"type":3048,"value":10428},", ensure your client-side application correctly sanitizes it or renders it in a way that prevents XSS vulnerabilities. The module itself does not sanitize this user-configured message.",{"type":3043,"tag":3126,"props":10430,"children":10432},{"id":10431},"development",[10433],{"type":3048,"value":10434},"Development",{"type":3043,"tag":3403,"props":10436,"children":10438},{"className":3405,"code":10437,"language":3407,"meta":2987,"style":2987},"# Install dependencies\nyarn\n\n# Generate type stubs\nyarn dev:prepare\n\n# Develop with the playground\nyarn dev\n\n# Build the playground\nyarn dev:build\n\n# Run ESLint\nyarn lint\n\n# Run Vitest\nyarn test\nyarn test:watch\n\n# Release new version\nyarn release:patch\nyarn release:minor\n",[10439],{"type":3043,"tag":3200,"props":10440,"children":10441},{"__ignoreMap":2987},[10442,10450,10458,10465,10473,10485,10492,10500,10512,10519,10527,10539,10546,10554,10566,10573,10581,10593,10605,10612,10620,10632],{"type":3043,"tag":3413,"props":10443,"children":10444},{"class":3415,"line":3015},[10445],{"type":3043,"tag":3413,"props":10446,"children":10447},{"style":3419},[10448],{"type":3048,"value":10449},"# Install dependencies\n",{"type":3043,"tag":3413,"props":10451,"children":10452},{"class":3415,"line":3011},[10453],{"type":3043,"tag":3413,"props":10454,"children":10455},{"style":3428},[10456],{"type":3048,"value":10457},"yarn\n",{"type":3043,"tag":3413,"props":10459,"children":10460},{"class":3415,"line":3445},[10461],{"type":3043,"tag":3413,"props":10462,"children":10463},{"emptyLinePlaceholder":1200},[10464],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":10466,"children":10467},{"class":3415,"line":3454},[10468],{"type":3043,"tag":3413,"props":10469,"children":10470},{"style":3419},[10471],{"type":3048,"value":10472},"# Generate type stubs\n",{"type":3043,"tag":3413,"props":10474,"children":10475},{"class":3415,"line":3007},[10476,10480],{"type":3043,"tag":3413,"props":10477,"children":10478},{"style":3428},[10479],{"type":3048,"value":3468},{"type":3043,"tag":3413,"props":10481,"children":10482},{"style":3434},[10483],{"type":3048,"value":10484}," dev:prepare\n",{"type":3043,"tag":3413,"props":10486,"children":10487},{"class":3415,"line":3479},[10488],{"type":3043,"tag":3413,"props":10489,"children":10490},{"emptyLinePlaceholder":1200},[10491],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":10493,"children":10494},{"class":3415,"line":3487},[10495],{"type":3043,"tag":3413,"props":10496,"children":10497},{"style":3419},[10498],{"type":3048,"value":10499},"# Develop with the playground\n",{"type":3043,"tag":3413,"props":10501,"children":10502},{"class":3415,"line":3496},[10503,10507],{"type":3043,"tag":3413,"props":10504,"children":10505},{"style":3428},[10506],{"type":3048,"value":3468},{"type":3043,"tag":3413,"props":10508,"children":10509},{"style":3434},[10510],{"type":3048,"value":10511}," dev\n",{"type":3043,"tag":3413,"props":10513,"children":10514},{"class":3415,"line":3032},[10515],{"type":3043,"tag":3413,"props":10516,"children":10517},{"emptyLinePlaceholder":1200},[10518],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":10520,"children":10521},{"class":3415,"line":3692},[10522],{"type":3043,"tag":3413,"props":10523,"children":10524},{"style":3419},[10525],{"type":3048,"value":10526},"# Build the playground\n",{"type":3043,"tag":3413,"props":10528,"children":10529},{"class":3415,"line":3701},[10530,10534],{"type":3043,"tag":3413,"props":10531,"children":10532},{"style":3428},[10533],{"type":3048,"value":3468},{"type":3043,"tag":3413,"props":10535,"children":10536},{"style":3434},[10537],{"type":3048,"value":10538}," dev:build\n",{"type":3043,"tag":3413,"props":10540,"children":10541},{"class":3415,"line":3710},[10542],{"type":3043,"tag":3413,"props":10543,"children":10544},{"emptyLinePlaceholder":1200},[10545],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":10547,"children":10548},{"class":3415,"line":3719},[10549],{"type":3043,"tag":3413,"props":10550,"children":10551},{"style":3419},[10552],{"type":3048,"value":10553},"# Run ESLint\n",{"type":3043,"tag":3413,"props":10555,"children":10556},{"class":3415,"line":3728},[10557,10561],{"type":3043,"tag":3413,"props":10558,"children":10559},{"style":3428},[10560],{"type":3048,"value":3468},{"type":3043,"tag":3413,"props":10562,"children":10563},{"style":3434},[10564],{"type":3048,"value":10565}," lint\n",{"type":3043,"tag":3413,"props":10567,"children":10568},{"class":3415,"line":3737},[10569],{"type":3043,"tag":3413,"props":10570,"children":10571},{"emptyLinePlaceholder":1200},[10572],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":10574,"children":10575},{"class":3415,"line":3746},[10576],{"type":3043,"tag":3413,"props":10577,"children":10578},{"style":3419},[10579],{"type":3048,"value":10580},"# Run Vitest\n",{"type":3043,"tag":3413,"props":10582,"children":10583},{"class":3415,"line":3755},[10584,10588],{"type":3043,"tag":3413,"props":10585,"children":10586},{"style":3428},[10587],{"type":3048,"value":3468},{"type":3043,"tag":3413,"props":10589,"children":10590},{"style":3434},[10591],{"type":3048,"value":10592}," test\n",{"type":3043,"tag":3413,"props":10594,"children":10595},{"class":3415,"line":3763},[10596,10600],{"type":3043,"tag":3413,"props":10597,"children":10598},{"style":3428},[10599],{"type":3048,"value":3468},{"type":3043,"tag":3413,"props":10601,"children":10602},{"style":3434},[10603],{"type":3048,"value":10604}," test:watch\n",{"type":3043,"tag":3413,"props":10606,"children":10607},{"class":3415,"line":3772},[10608],{"type":3043,"tag":3413,"props":10609,"children":10610},{"emptyLinePlaceholder":1200},[10611],{"type":3048,"value":3451},{"type":3043,"tag":3413,"props":10613,"children":10614},{"class":3415,"line":3781},[10615],{"type":3043,"tag":3413,"props":10616,"children":10617},{"style":3419},[10618],{"type":3048,"value":10619},"# Release new version\n",{"type":3043,"tag":3413,"props":10621,"children":10622},{"class":3415,"line":3795},[10623,10627],{"type":3043,"tag":3413,"props":10624,"children":10625},{"style":3428},[10626],{"type":3048,"value":3468},{"type":3043,"tag":3413,"props":10628,"children":10629},{"style":3434},[10630],{"type":3048,"value":10631}," release:patch\n",{"type":3043,"tag":3413,"props":10633,"children":10634},{"class":3415,"line":3823},[10635,10639],{"type":3043,"tag":3413,"props":10636,"children":10637},{"style":3428},[10638],{"type":3048,"value":3468},{"type":3043,"tag":3413,"props":10640,"children":10641},{"style":3434},[10642],{"type":3048,"value":10643}," release:minor\n",{"type":3043,"tag":10645,"props":10646,"children":10647},"style",{},[10648],{"type":3048,"value":10649},"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);}",{"title":2987,"searchDepth":3011,"depth":3011,"links":10651},[10652,10653,10664,10669,10674,10680,10684,10688,10694],{"id":3128,"depth":3011,"text":399},{"id":3384,"depth":3011,"text":3387,"children":10654},[10655,10657,10659,10661,10663],{"id":3391,"depth":3445,"text":10656},"1. Add nuxt-api-shield dependency to your project",{"id":3514,"depth":3445,"text":10658},"2. Add nuxt-api-shield to the modules section of nuxt.config.ts",{"id":4545,"depth":3445,"text":10660},"3. Add nitro\u002Fstorage to nuxt.config.ts",{"id":4954,"depth":3445,"text":10662},"4. Schedule bundled cleanup tasks in nuxt.config.ts",{"id":5255,"depth":3445,"text":5258},{"id":7344,"depth":3011,"text":7347,"children":10665},[10666,10667],{"id":7350,"depth":3445,"text":7353},{"id":7760,"depth":3445,"text":10668},"When memory \u002F fs is acceptable",{"id":7819,"depth":3011,"text":7822,"children":10670},[10671,10672,10673],{"id":7845,"depth":3445,"text":7848},{"id":8099,"depth":3445,"text":8102},{"id":8151,"depth":3445,"text":8154},{"id":8417,"depth":3011,"text":8420,"children":10675},[10676,10678],{"id":8428,"depth":3445,"text":10677},"RateLimit Type",{"id":8980,"depth":3445,"text":10679},"ModuleOptions Type",{"id":9047,"depth":3011,"text":9050,"children":10681},[10682,10683],{"id":9102,"depth":3445,"text":9105},{"id":9598,"depth":3445,"text":9601},{"id":9793,"depth":3011,"text":9796,"children":10685},[10686,10687],{"id":9823,"depth":3445,"text":9105},{"id":10120,"depth":3445,"text":10123},{"id":10172,"depth":3011,"text":10175,"children":10689},[10690,10691,10692],{"id":10178,"depth":3445,"text":10181},{"id":10290,"depth":3445,"text":10293},{"id":10387,"depth":3445,"text":10693},"Error Message (errorMessage)",{"id":10431,"depth":3011,"text":10434}]