[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fGCo9l1hMtNdUiA6QzdUX5X3kLqaWcC5t2kdz4LrvCvc":3,"module-api-shield":2975,"versions":10690},[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",{"name":2976,"description":2977,"repo":2978,"npm":2979,"icon":2980,"github":2981,"website":2981,"learn_more":2982,"category":2983,"type":2984,"maintainers":2985,"compatibility":2991,"generatedAt":2994,"contributors":2995,"stats":3023,"readme":3031},"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",[2986],{"name":2987,"github":2988,"twitter":2989,"bluesky":2990},"rrd","rrd108","radharadhya","rrd108.bsky.social",{"nuxt":2992,"requires":2993},">=3.0.0",{},"2026-06-26T05:33:02.974Z",[2996,2999,3003,3007,3011,3014,3017,3020],{"id":2997,"username":2988,"contributions":2998},3147489,282,{"id":3000,"username":3001,"contributions":3002},31929574,"ravesandstorm",5,{"id":3004,"username":3005,"contributions":3006},28706372,"danielroe",2,{"id":3008,"username":3009,"contributions":3010},20068593,"kschnekenburger",1,{"id":3012,"username":3013,"contributions":3010},32599710,"simonmaass",{"id":3015,"username":3016,"contributions":3010},125942725,"nd2024",{"id":3018,"username":3019,"contributions":3010},10197526,"chachew",{"id":3021,"username":3022,"contributions":3010},55457896,"LeeKrane",{"version":3024,"downloads":3025,"stars":3026,"watchers":3026,"forks":3027,"defaultBranch":3028,"publishedAt":3029,"createdAt":3030},"1.0.0",5159,54,9,"main",1782038138831,1711731542236,{"data":3032,"body":3034,"toc":10645},{"title":3033,"description":2982},"Nuxt API Shield",{"type":3035,"children":3036},"root",[3037,3044,3089,3094,3120,3126,3377,3383,3397,3507,3532,3537,3951,3969,4390,4404,4433,4538,4557,4569,4733,4738,4947,4958,5024,5243,5248,5254,5273,5280,5293,5306,5975,5999,6005,6034,6045,7270,7310,7337,7343,7349,7375,7517,7536,7739,7753,7772,7789,7807,7812,7818,7838,7844,7870,8077,8082,8092,8098,8110,8144,8150,8162,8312,8354,8359,8389,8410,8416,8421,8433,8444,8551,8559,8973,8984,8989,9040,9046,9063,9091,9095,9101,9113,9591,9597,9610,9616,9707,9713,9742,9748,9786,9792,9811,9816,9821,10113,10119,10165,10171,10177,10187,10283,10289,10380,10393,10404,10424,10430,10639],{"type":3038,"tag":3039,"props":3040,"children":3041},"element","h1",{"id":2979},[3042],{"type":3043,"value":3033},"text",{"type":3038,"tag":3045,"props":3046,"children":3047},"p",{},[3048,3061,3070,3079],{"type":3038,"tag":3049,"props":3050,"children":3054},"a",{"href":3051,"rel":3052},"https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Fnuxt-api-shield",[3053],"nofollow",[3055],{"type":3038,"tag":3056,"props":3057,"children":3060},"img",{"alt":3058,"src":3059},"npm version","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fnuxt-api-shield\u002Flatest.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":3038,"tag":3049,"props":3062,"children":3064},{"href":3051,"rel":3063},[3053],[3065],{"type":3038,"tag":3056,"props":3066,"children":3069},{"alt":3067,"src":3068},"npm downloads","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002Fnuxt-api-shield.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":3038,"tag":3049,"props":3071,"children":3073},{"href":3051,"rel":3072},[3053],[3074],{"type":3038,"tag":3056,"props":3075,"children":3078},{"alt":3076,"src":3077},"License","https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fl\u002Fnuxt-api-shield.svg?style=flat&colorA=020420&colorB=00DC82",[],{"type":3038,"tag":3049,"props":3080,"children":3083},{"href":3081,"rel":3082},"https:\u002F\u002Fnuxt.com",[3053],[3084],{"type":3038,"tag":3056,"props":3085,"children":3088},{"alt":3086,"src":3087},"Nuxt","https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNuxt-020420?logo=nuxt.js",[],{"type":3038,"tag":3045,"props":3090,"children":3091},{},[3092],{"type":3043,"value":3093},"This Nuxt module implements a rate limiting middleware to protect your API endpoints from excessive requests.",{"type":3038,"tag":3095,"props":3096,"children":3097},"ul",{},[3098],{"type":3038,"tag":3099,"props":3100,"children":3101},"li",{},[3102,3108],{"type":3038,"tag":3049,"props":3103,"children":3105},{"href":3104},"\u002FCHANGELOG.md",[3106],{"type":3043,"value":3107},"✨  Release Notes",{"type":3038,"tag":3095,"props":3109,"children":3110},{},[3111],{"type":3038,"tag":3099,"props":3112,"children":3113},{},[3114],{"type":3038,"tag":3049,"props":3115,"children":3117},{"href":2981,"rel":3116},[3053],[3118],{"type":3043,"value":3119},"📖  Documentation",{"type":3038,"tag":3121,"props":3122,"children":3124},"h2",{"id":3123},"features",[3125],{"type":3043,"value":399},{"type":3038,"tag":3095,"props":3127,"children":3128},{},[3129,3151,3208,3229,3250,3271,3303,3337],{"type":3038,"tag":3099,"props":3130,"children":3131},{},[3132,3138],{"type":3038,"tag":3133,"props":3134,"children":3135},"strong",{},[3136],{"type":3043,"value":3137},"IP-Based Rate limiting and Brute Force Protection",{"type":3038,"tag":3095,"props":3139,"children":3140},{},[3141,3146],{"type":3038,"tag":3099,"props":3142,"children":3143},{},[3144],{"type":3043,"value":3145},"Tracks and enforces rate limits for individual IP addresses.",{"type":3038,"tag":3099,"props":3147,"children":3148},{},[3149],{"type":3043,"value":3150},"Prevents malicious actors or excessive requests from a single source from overwhelming your API.",{"type":3038,"tag":3099,"props":3152,"children":3153},{},[3154,3159],{"type":3038,"tag":3133,"props":3155,"children":3156},{},[3157],{"type":3043,"value":3158},"Customizable Rate Limits",{"type":3038,"tag":3095,"props":3160,"children":3161},{},[3162,3167,3179,3184,3189,3203],{"type":3038,"tag":3099,"props":3163,"children":3164},{},[3165],{"type":3043,"value":3166},"Configure maximum request count, duration within which the limit applies, and a ban period for exceeding the limit.",{"type":3038,"tag":3099,"props":3168,"children":3169},{},[3170,3172,3177],{"type":3043,"value":3171},"If the request limit is exceeded, the user is banned for the configured ban period. During the ban period, ",{"type":3038,"tag":3133,"props":3173,"children":3174},{},[3175],{"type":3043,"value":3176},"all requests are blocked with a 429 error",{"type":3043,"value":3178},", regardless of the rate limit window.",{"type":3038,"tag":3099,"props":3180,"children":3181},{},[3182],{"type":3043,"value":3183},"Add a delay to responses when a user is banned to discourage further abuse (optional).",{"type":3038,"tag":3099,"props":3185,"children":3186},{},[3187],{"type":3043,"value":3188},"Customize the error message for banned users.",{"type":3038,"tag":3099,"props":3190,"children":3191},{},[3192,3194,3201],{"type":3043,"value":3193},"Optionally include the ",{"type":3038,"tag":3195,"props":3196,"children":3198},"code",{"className":3197},[],[3199],{"type":3043,"value":3200},"Retry-After",{"type":3043,"value":3202}," header in responses when a user is banned.",{"type":3038,"tag":3099,"props":3204,"children":3205},{},[3206],{"type":3043,"value":3207},"Tailor the rate-limiting behavior to align with your API's specific needs and usage patterns.",{"type":3038,"tag":3099,"props":3209,"children":3210},{},[3211,3216],{"type":3038,"tag":3133,"props":3212,"children":3213},{},[3214],{"type":3043,"value":3215},"Event-Driven Handling",{"type":3038,"tag":3095,"props":3217,"children":3218},{},[3219,3224],{"type":3038,"tag":3099,"props":3220,"children":3221},{},[3222],{"type":3043,"value":3223},"Intercepts incoming API requests efficiently using Nuxt's event system.",{"type":3038,"tag":3099,"props":3225,"children":3226},{},[3227],{"type":3043,"value":3228},"Ensures seamless integration with your Nuxt application's request lifecycle.",{"type":3038,"tag":3099,"props":3230,"children":3231},{},[3232,3237],{"type":3038,"tag":3133,"props":3233,"children":3234},{},[3235],{"type":3043,"value":3236},"Flexible Storage",{"type":3038,"tag":3095,"props":3238,"children":3239},{},[3240,3245],{"type":3038,"tag":3099,"props":3241,"children":3242},{},[3243],{"type":3043,"value":3244},"Utilizes Nuxt's unstorage abstraction for versatile storage options.",{"type":3038,"tag":3099,"props":3246,"children":3247},{},[3248],{"type":3043,"value":3249},"Store rate-limiting data in various storage providers (filesystem, memory, databases, etc.) based on your project's requirements.",{"type":3038,"tag":3099,"props":3251,"children":3252},{},[3253,3258],{"type":3038,"tag":3133,"props":3254,"children":3255},{},[3256],{"type":3043,"value":3257},"Configurable with Runtime Config",{"type":3038,"tag":3095,"props":3259,"children":3260},{},[3261,3266],{"type":3038,"tag":3099,"props":3262,"children":3263},{},[3264],{"type":3043,"value":3265},"Easily adjust rate-limiting parameters without code changes.",{"type":3038,"tag":3099,"props":3267,"children":3268},{},[3269],{"type":3043,"value":3270},"Adapt to dynamic needs and maintain control over rate-limiting behavior through Nuxt's runtime configuration.",{"type":3038,"tag":3099,"props":3272,"children":3273},{},[3274,3279],{"type":3038,"tag":3133,"props":3275,"children":3276},{},[3277],{"type":3043,"value":3278},"Bundled cleanup tasks",{"type":3038,"tag":3095,"props":3280,"children":3281},{},[3282],{"type":3038,"tag":3099,"props":3283,"children":3284},{},[3285,3287,3293,3295,3301],{"type":3043,"value":3286},"Registers Nitro tasks ",{"type":3038,"tag":3195,"props":3288,"children":3290},{"className":3289},[],[3291],{"type":3043,"value":3292},"shield:cleanBans",{"type":3043,"value":3294}," and ",{"type":3038,"tag":3195,"props":3296,"children":3298},{"className":3297},[],[3299],{"type":3043,"value":3300},"shield:cleanIpData",{"type":3043,"value":3302}," so you can schedule maintenance without adding task files (see setup step 4).",{"type":3038,"tag":3099,"props":3304,"children":3305},{},[3306,3311],{"type":3038,"tag":3133,"props":3307,"children":3308},{},[3309],{"type":3043,"value":3310},"Clear Error Handling",{"type":3038,"tag":3095,"props":3312,"children":3313},{},[3314,3319,3332],{"type":3038,"tag":3099,"props":3315,"children":3316},{},[3317],{"type":3043,"value":3318},"Returns a standardized 429 \"Too Many Requests\" error response when rate limits are exceeded or when a user is banned.",{"type":3038,"tag":3099,"props":3320,"children":3321},{},[3322,3324,3330],{"type":3043,"value":3323},"The 429 body is JSON (",{"type":3038,"tag":3195,"props":3325,"children":3327},{"className":3326},[],[3328],{"type":3043,"value":3329},"{ error, retryAfter }",{"type":3043,"value":3331},") for predictable client-side handling.",{"type":3038,"tag":3099,"props":3333,"children":3334},{},[3335],{"type":3043,"value":3336},"Facilitates proper error handling in client-side applications for a smooth user experience.",{"type":3038,"tag":3099,"props":3338,"children":3339},{},[3340,3345],{"type":3038,"tag":3133,"props":3341,"children":3342},{},[3343],{"type":3043,"value":3344},"Standard Rate-Limit Headers",{"type":3038,"tag":3095,"props":3346,"children":3347},{},[3348],{"type":3038,"tag":3099,"props":3349,"children":3350},{},[3351,3353,3359,3361,3367,3369,3375],{"type":3043,"value":3352},"Every response includes ",{"type":3038,"tag":3195,"props":3354,"children":3356},{"className":3355},[],[3357],{"type":3043,"value":3358},"X-RateLimit-Limit",{"type":3043,"value":3360},", ",{"type":3038,"tag":3195,"props":3362,"children":3364},{"className":3363},[],[3365],{"type":3043,"value":3366},"X-RateLimit-Remaining",{"type":3043,"value":3368},", and ",{"type":3038,"tag":3195,"props":3370,"children":3372},{"className":3371},[],[3373],{"type":3043,"value":3374},"X-RateLimit-Reset",{"type":3043,"value":3376}," headers so clients and CDNs can track usage without parsing response bodies.",{"type":3038,"tag":3121,"props":3378,"children":3380},{"id":3379},"quick-setup",[3381],{"type":3043,"value":3382},"Quick Setup",{"type":3038,"tag":3384,"props":3385,"children":3387},"h3",{"id":3386},"_1-add-nuxt-api-shield-dependency-to-your-project",[3388,3390,3395],{"type":3043,"value":3389},"1. Add ",{"type":3038,"tag":3195,"props":3391,"children":3393},{"className":3392},[],[3394],{"type":3043,"value":2979},{"type":3043,"value":3396}," dependency to your project",{"type":3038,"tag":3398,"props":3399,"children":3403},"pre",{"className":3400,"code":3401,"language":3402,"meta":2982,"style":2982},"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",[3404],{"type":3038,"tag":3195,"props":3405,"children":3406},{"__ignoreMap":2982},[3407,3418,3438,3447,3456,3472,3480,3489],{"type":3038,"tag":3408,"props":3409,"children":3411},"span",{"class":3410,"line":3010},"line",[3412],{"type":3038,"tag":3408,"props":3413,"children":3415},{"style":3414},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[3416],{"type":3043,"value":3417},"# Using pnpm\n",{"type":3038,"tag":3408,"props":3419,"children":3420},{"class":3410,"line":3006},[3421,3427,3433],{"type":3038,"tag":3408,"props":3422,"children":3424},{"style":3423},"--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B",[3425],{"type":3043,"value":3426},"pnpm",{"type":3038,"tag":3408,"props":3428,"children":3430},{"style":3429},"--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D",[3431],{"type":3043,"value":3432}," add",{"type":3038,"tag":3408,"props":3434,"children":3435},{"style":3429},[3436],{"type":3043,"value":3437}," nuxt-api-shield\n",{"type":3038,"tag":3408,"props":3439,"children":3441},{"class":3410,"line":3440},3,[3442],{"type":3038,"tag":3408,"props":3443,"children":3444},{"emptyLinePlaceholder":1200},[3445],{"type":3043,"value":3446},"\n",{"type":3038,"tag":3408,"props":3448,"children":3450},{"class":3410,"line":3449},4,[3451],{"type":3038,"tag":3408,"props":3452,"children":3453},{"style":3414},[3454],{"type":3043,"value":3455},"# Using yarn\n",{"type":3038,"tag":3408,"props":3457,"children":3458},{"class":3410,"line":3002},[3459,3464,3468],{"type":3038,"tag":3408,"props":3460,"children":3461},{"style":3423},[3462],{"type":3043,"value":3463},"yarn",{"type":3038,"tag":3408,"props":3465,"children":3466},{"style":3429},[3467],{"type":3043,"value":3432},{"type":3038,"tag":3408,"props":3469,"children":3470},{"style":3429},[3471],{"type":3043,"value":3437},{"type":3038,"tag":3408,"props":3473,"children":3475},{"class":3410,"line":3474},6,[3476],{"type":3038,"tag":3408,"props":3477,"children":3478},{"emptyLinePlaceholder":1200},[3479],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":3481,"children":3483},{"class":3410,"line":3482},7,[3484],{"type":3038,"tag":3408,"props":3485,"children":3486},{"style":3414},[3487],{"type":3043,"value":3488},"# Using npm\n",{"type":3038,"tag":3408,"props":3490,"children":3492},{"class":3410,"line":3491},8,[3493,3498,3503],{"type":3038,"tag":3408,"props":3494,"children":3495},{"style":3423},[3496],{"type":3043,"value":3497},"npm",{"type":3038,"tag":3408,"props":3499,"children":3500},{"style":3429},[3501],{"type":3043,"value":3502}," install",{"type":3038,"tag":3408,"props":3504,"children":3505},{"style":3429},[3506],{"type":3043,"value":3437},{"type":3038,"tag":3384,"props":3508,"children":3510},{"id":3509},"_2-add-nuxt-api-shield-to-the-modules-section-of-nuxtconfigts",[3511,3513,3518,3520,3525,3527],{"type":3043,"value":3512},"2. Add ",{"type":3038,"tag":3195,"props":3514,"children":3516},{"className":3515},[],[3517],{"type":3043,"value":2979},{"type":3043,"value":3519}," to the ",{"type":3038,"tag":3195,"props":3521,"children":3523},{"className":3522},[],[3524],{"type":3043,"value":162},{"type":3043,"value":3526}," section of ",{"type":3038,"tag":3195,"props":3528,"children":3530},{"className":3529},[],[3531],{"type":3043,"value":233},{"type":3038,"tag":3045,"props":3533,"children":3534},{},[3535],{"type":3043,"value":3536},"You should add only the values you want to use differently from the default values.",{"type":3038,"tag":3398,"props":3538,"children":3542},{"className":3539,"code":3540,"language":3541,"meta":2982,"style":2982},"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",[3543],{"type":3038,"tag":3195,"props":3544,"children":3545},{"__ignoreMap":2982},[3546,3578,3620,3637,3645,3653,3661,3669,3677,3685,3694,3703,3712,3721,3730,3739,3748,3756,3765,3774,3788,3816,3824,3833,3861,3878,3887,3915,3923,3932],{"type":3038,"tag":3408,"props":3547,"children":3548},{"class":3410,"line":3010},[3549,3555,3560,3566,3572],{"type":3038,"tag":3408,"props":3550,"children":3552},{"style":3551},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[3553],{"type":3043,"value":3554},"export",{"type":3038,"tag":3408,"props":3556,"children":3557},{"style":3551},[3558],{"type":3043,"value":3559}," default",{"type":3038,"tag":3408,"props":3561,"children":3563},{"style":3562},"--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF",[3564],{"type":3043,"value":3565}," defineNuxtConfig",{"type":3038,"tag":3408,"props":3567,"children":3569},{"style":3568},"--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8",[3570],{"type":3043,"value":3571},"(",{"type":3038,"tag":3408,"props":3573,"children":3575},{"style":3574},"--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF",[3576],{"type":3043,"value":3577},"{\n",{"type":3038,"tag":3408,"props":3579,"children":3580},{"class":3410,"line":3006},[3581,3587,3592,3597,3602,3606,3610,3615],{"type":3038,"tag":3408,"props":3582,"children":3584},{"style":3583},"--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178",[3585],{"type":3043,"value":3586},"  modules",{"type":3038,"tag":3408,"props":3588,"children":3589},{"style":3574},[3590],{"type":3043,"value":3591},":",{"type":3038,"tag":3408,"props":3593,"children":3594},{"style":3568},[3595],{"type":3043,"value":3596}," [",{"type":3038,"tag":3408,"props":3598,"children":3599},{"style":3574},[3600],{"type":3043,"value":3601},"\"",{"type":3038,"tag":3408,"props":3603,"children":3604},{"style":3429},[3605],{"type":3043,"value":2979},{"type":3038,"tag":3408,"props":3607,"children":3608},{"style":3574},[3609],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":3611,"children":3612},{"style":3568},[3613],{"type":3043,"value":3614},"]",{"type":3038,"tag":3408,"props":3616,"children":3617},{"style":3574},[3618],{"type":3043,"value":3619},",\n",{"type":3038,"tag":3408,"props":3621,"children":3622},{"class":3410,"line":3440},[3623,3628,3632],{"type":3038,"tag":3408,"props":3624,"children":3625},{"style":3583},[3626],{"type":3043,"value":3627},"  nuxtApiShield",{"type":3038,"tag":3408,"props":3629,"children":3630},{"style":3574},[3631],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":3633,"children":3634},{"style":3574},[3635],{"type":3043,"value":3636}," {\n",{"type":3038,"tag":3408,"props":3638,"children":3639},{"class":3410,"line":3449},[3640],{"type":3038,"tag":3408,"props":3641,"children":3642},{"style":3414},[3643],{"type":3043,"value":3644},"    \u002F*limit: {\n",{"type":3038,"tag":3408,"props":3646,"children":3647},{"class":3410,"line":3002},[3648],{"type":3038,"tag":3408,"props":3649,"children":3650},{"style":3414},[3651],{"type":3043,"value":3652},"      max: 12,        \u002F\u002F maximum requests per duration time, default is 12\u002Fduration\n",{"type":3038,"tag":3408,"props":3654,"children":3655},{"class":3410,"line":3474},[3656],{"type":3038,"tag":3408,"props":3657,"children":3658},{"style":3414},[3659],{"type":3043,"value":3660},"      duration: 108,   \u002F\u002F duration time in seconds, default is 108 seconds\n",{"type":3038,"tag":3408,"props":3662,"children":3663},{"class":3410,"line":3482},[3664],{"type":3038,"tag":3408,"props":3665,"children":3666},{"style":3414},[3667],{"type":3043,"value":3668},"      ban: 3600,      \u002F\u002F ban time in seconds, default is 3600 seconds = 1 hour\n",{"type":3038,"tag":3408,"props":3670,"children":3671},{"class":3410,"line":3491},[3672],{"type":3038,"tag":3408,"props":3673,"children":3674},{"style":3414},[3675],{"type":3043,"value":3676},"      \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":3038,"tag":3408,"props":3678,"children":3679},{"class":3410,"line":3027},[3680],{"type":3038,"tag":3408,"props":3681,"children":3682},{"style":3414},[3683],{"type":3043,"value":3684},"    },\n",{"type":3038,"tag":3408,"props":3686,"children":3688},{"class":3410,"line":3687},10,[3689],{"type":3038,"tag":3408,"props":3690,"children":3691},{"style":3414},[3692],{"type":3043,"value":3693},"    delayOnBan: true  \u002F\u002F delay every response with +1sec when the user is banned, default is true\n",{"type":3038,"tag":3408,"props":3695,"children":3697},{"class":3410,"line":3696},11,[3698],{"type":3038,"tag":3408,"props":3699,"children":3700},{"style":3414},[3701],{"type":3043,"value":3702},"    errorMessage: \"Too Many Requests\",  \u002F\u002F error message when the user is banned, default is \"Too Many Requests\"\n",{"type":3038,"tag":3408,"props":3704,"children":3706},{"class":3410,"line":3705},12,[3707],{"type":3038,"tag":3408,"props":3708,"children":3709},{"style":3414},[3710],{"type":3043,"value":3711},"    retryAfterHeader: false, \u002F\u002F when the user is banned add the Retry-After header to the response, default is false\n",{"type":3038,"tag":3408,"props":3713,"children":3715},{"class":3410,"line":3714},13,[3716],{"type":3038,"tag":3408,"props":3717,"children":3718},{"style":3414},[3719],{"type":3043,"value":3720},"    log: {\n",{"type":3038,"tag":3408,"props":3722,"children":3724},{"class":3410,"line":3723},14,[3725],{"type":3038,"tag":3408,"props":3726,"children":3727},{"style":3414},[3728],{"type":3043,"value":3729},"      path: \"\", \u002F\u002F path to the log file, every day a new log file will be created, use \"\" to disable logging\n",{"type":3038,"tag":3408,"props":3731,"children":3733},{"class":3410,"line":3732},15,[3734],{"type":3038,"tag":3408,"props":3735,"children":3736},{"style":3414},[3737],{"type":3043,"value":3738},"      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":3038,"tag":3408,"props":3740,"children":3742},{"class":3410,"line":3741},16,[3743],{"type":3038,"tag":3408,"props":3744,"children":3745},{"style":3414},[3746],{"type":3043,"value":3747},"      fail2ban: false, \u002F\u002F enable fail2ban-compatible log format for ban events (see fail2ban section)\n",{"type":3038,"tag":3408,"props":3749,"children":3751},{"class":3410,"line":3750},17,[3752],{"type":3038,"tag":3408,"props":3753,"children":3754},{"style":3414},[3755],{"type":3043,"value":3684},{"type":3038,"tag":3408,"props":3757,"children":3759},{"class":3410,"line":3758},18,[3760],{"type":3038,"tag":3408,"props":3761,"children":3762},{"style":3414},[3763],{"type":3043,"value":3764},"    routes: [], \u002F\u002F specify routes to apply rate limiting to, default is an empty array meaning all routes are protected.\n",{"type":3038,"tag":3408,"props":3766,"children":3768},{"class":3410,"line":3767},19,[3769],{"type":3038,"tag":3408,"props":3770,"children":3771},{"style":3414},[3772],{"type":3043,"value":3773},"    \u002F\u002F Example:\n",{"type":3038,"tag":3408,"props":3775,"children":3777},{"class":3410,"line":3776},20,[3778,3783],{"type":3038,"tag":3408,"props":3779,"children":3780},{"style":3414},[3781],{"type":3043,"value":3782},"    \u002F\u002F routes: [\"\u002Fapi\u002Fv2\u002F\", \"\u002Fapi\u002Fv3\u002F\"],",{"type":3038,"tag":3408,"props":3784,"children":3785},{"style":3414},[3786],{"type":3043,"value":3787}," \u002F\u002F \u002Fapi\u002Fv1 will not be protected, \u002Fapi\u002Fv2\u002F and \u002Fapi\u002Fv3\u002F will be protected *\u002F\n",{"type":3038,"tag":3408,"props":3789,"children":3791},{"class":3410,"line":3790},21,[3792,3797,3801,3806,3811],{"type":3038,"tag":3408,"props":3793,"children":3794},{"style":3583},[3795],{"type":3043,"value":3796},"    skipRoutes",{"type":3038,"tag":3408,"props":3798,"children":3799},{"style":3574},[3800],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":3802,"children":3803},{"style":3568},[3804],{"type":3043,"value":3805}," []",{"type":3038,"tag":3408,"props":3807,"children":3808},{"style":3574},[3809],{"type":3043,"value":3810},",",{"type":3038,"tag":3408,"props":3812,"children":3813},{"style":3414},[3814],{"type":3043,"value":3815}," \u002F\u002F specify routes to skip\u002Fexempt from rate limiting, supports wildcard patterns (*\u002F**)\n",{"type":3038,"tag":3408,"props":3817,"children":3819},{"class":3410,"line":3818},22,[3820],{"type":3038,"tag":3408,"props":3821,"children":3822},{"style":3414},[3823],{"type":3043,"value":3773},{"type":3038,"tag":3408,"props":3825,"children":3827},{"class":3410,"line":3826},23,[3828],{"type":3038,"tag":3408,"props":3829,"children":3830},{"style":3414},[3831],{"type":3043,"value":3832},"    \u002F\u002F skipRoutes: [\"\u002Fapi\u002Fhealth\", \"\u002Fapi\u002F_nuxt\u002F**\", \"\u002Fapi\u002Fwebhooks\u002Fstripe\"],\n",{"type":3038,"tag":3408,"props":3834,"children":3836},{"class":3410,"line":3835},24,[3837,3842,3846,3852,3856],{"type":3038,"tag":3408,"props":3838,"children":3839},{"style":3583},[3840],{"type":3043,"value":3841},"    ipTTL",{"type":3038,"tag":3408,"props":3843,"children":3844},{"style":3574},[3845],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":3847,"children":3849},{"style":3848},"--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C",[3850],{"type":3043,"value":3851}," 604800",{"type":3038,"tag":3408,"props":3853,"children":3854},{"style":3574},[3855],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":3857,"children":3858},{"style":3414},[3859],{"type":3043,"value":3860}," \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":3038,"tag":3408,"props":3862,"children":3864},{"class":3410,"line":3863},25,[3865,3870,3874],{"type":3038,"tag":3408,"props":3866,"children":3867},{"style":3583},[3868],{"type":3043,"value":3869},"    security",{"type":3038,"tag":3408,"props":3871,"children":3872},{"style":3574},[3873],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":3875,"children":3876},{"style":3574},[3877],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":3879,"children":3881},{"class":3410,"line":3880},26,[3882],{"type":3038,"tag":3408,"props":3883,"children":3884},{"style":3414},[3885],{"type":3043,"value":3886},"      \u002F\u002F Optional: Security-related configurations\n",{"type":3038,"tag":3408,"props":3888,"children":3890},{"class":3410,"line":3889},27,[3891,3896,3900,3906,3910],{"type":3038,"tag":3408,"props":3892,"children":3893},{"style":3583},[3894],{"type":3043,"value":3895},"      trustXForwardedFor",{"type":3038,"tag":3408,"props":3897,"children":3898},{"style":3574},[3899],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":3901,"children":3903},{"style":3902},"--shiki-light:#FF5370;--shiki-default:#FF5370;--shiki-dark:#FF9CAC",[3904],{"type":3043,"value":3905}," false",{"type":3038,"tag":3408,"props":3907,"children":3908},{"style":3574},[3909],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":3911,"children":3912},{"style":3414},[3913],{"type":3043,"value":3914}," \u002F\u002F Default: false. Whether to trust X-Forwarded-For headers. See warning below.\n",{"type":3038,"tag":3408,"props":3916,"children":3918},{"class":3410,"line":3917},28,[3919],{"type":3038,"tag":3408,"props":3920,"children":3921},{"style":3574},[3922],{"type":3043,"value":3684},{"type":3038,"tag":3408,"props":3924,"children":3926},{"class":3410,"line":3925},29,[3927],{"type":3038,"tag":3408,"props":3928,"children":3929},{"style":3574},[3930],{"type":3043,"value":3931},"  },\n",{"type":3038,"tag":3408,"props":3933,"children":3935},{"class":3410,"line":3934},30,[3936,3941,3946],{"type":3038,"tag":3408,"props":3937,"children":3938},{"style":3574},[3939],{"type":3043,"value":3940},"}",{"type":3038,"tag":3408,"props":3942,"children":3943},{"style":3568},[3944],{"type":3043,"value":3945},")",{"type":3038,"tag":3408,"props":3947,"children":3948},{"style":3574},[3949],{"type":3043,"value":3950},";\n",{"type":3038,"tag":3045,"props":3952,"children":3953},{},[3954,3959,3961,3967],{"type":3038,"tag":3133,"props":3955,"children":3956},{},[3957],{"type":3043,"value":3958},"Default Configuration Values:",{"type":3043,"value":3960},"\n(These are applied by the module if not specified in your ",{"type":3038,"tag":3195,"props":3962,"children":3964},{"className":3963},[],[3965],{"type":3043,"value":3966},"nuxtApiShield",{"type":3043,"value":3968}," config)",{"type":3038,"tag":3398,"props":3970,"children":3972},{"className":3539,"code":3971,"language":3541,"meta":2982,"style":2982},"{\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",[3973],{"type":3038,"tag":3195,"props":3974,"children":3975},{"__ignoreMap":2982},[3976,3983,3999,4020,4046,4072,4079,4100,4130,4150,4166,4192,4218,4238,4245,4265,4285,4338,4354,4374,4382],{"type":3038,"tag":3408,"props":3977,"children":3978},{"class":3410,"line":3010},[3979],{"type":3038,"tag":3408,"props":3980,"children":3981},{"style":3574},[3982],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":3984,"children":3985},{"class":3410,"line":3006},[3986,3991,3995],{"type":3038,"tag":3408,"props":3987,"children":3988},{"style":3423},[3989],{"type":3043,"value":3990},"  limit",{"type":3038,"tag":3408,"props":3992,"children":3993},{"style":3574},[3994],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":3996,"children":3997},{"style":3574},[3998],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":4000,"children":4001},{"class":3410,"line":3440},[4002,4007,4011,4016],{"type":3038,"tag":3408,"props":4003,"children":4004},{"style":3423},[4005],{"type":3043,"value":4006},"    max",{"type":3038,"tag":3408,"props":4008,"children":4009},{"style":3574},[4010],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4012,"children":4013},{"style":3848},[4014],{"type":3043,"value":4015}," 12",{"type":3038,"tag":3408,"props":4017,"children":4018},{"style":3574},[4019],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4021,"children":4022},{"class":3410,"line":3449},[4023,4028,4032,4037,4041],{"type":3038,"tag":3408,"props":4024,"children":4025},{"style":3423},[4026],{"type":3043,"value":4027},"    duration",{"type":3038,"tag":3408,"props":4029,"children":4030},{"style":3574},[4031],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4033,"children":4034},{"style":3848},[4035],{"type":3043,"value":4036}," 108",{"type":3038,"tag":3408,"props":4038,"children":4039},{"style":3574},[4040],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":4042,"children":4043},{"style":3414},[4044],{"type":3043,"value":4045}," \u002F\u002F seconds\n",{"type":3038,"tag":3408,"props":4047,"children":4048},{"class":3410,"line":3002},[4049,4054,4058,4063,4067],{"type":3038,"tag":3408,"props":4050,"children":4051},{"style":3423},[4052],{"type":3043,"value":4053},"    ban",{"type":3038,"tag":3408,"props":4055,"children":4056},{"style":3574},[4057],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4059,"children":4060},{"style":3848},[4061],{"type":3043,"value":4062}," 3600",{"type":3038,"tag":3408,"props":4064,"children":4065},{"style":3574},[4066],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":4068,"children":4069},{"style":3414},[4070],{"type":3043,"value":4071},"     \u002F\u002F seconds\n",{"type":3038,"tag":3408,"props":4073,"children":4074},{"class":3410,"line":3474},[4075],{"type":3038,"tag":3408,"props":4076,"children":4077},{"style":3574},[4078],{"type":3043,"value":3931},{"type":3038,"tag":3408,"props":4080,"children":4081},{"class":3410,"line":3482},[4082,4087,4091,4096],{"type":3038,"tag":3408,"props":4083,"children":4084},{"style":3423},[4085],{"type":3043,"value":4086},"  delayOnBan",{"type":3038,"tag":3408,"props":4088,"children":4089},{"style":3574},[4090],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4092,"children":4093},{"style":3902},[4094],{"type":3043,"value":4095}," true",{"type":3038,"tag":3408,"props":4097,"children":4098},{"style":3574},[4099],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4101,"children":4102},{"class":3410,"line":3491},[4103,4108,4112,4117,4122,4126],{"type":3038,"tag":3408,"props":4104,"children":4105},{"style":3423},[4106],{"type":3043,"value":4107},"  errorMessage",{"type":3038,"tag":3408,"props":4109,"children":4110},{"style":3574},[4111],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4113,"children":4114},{"style":3574},[4115],{"type":3043,"value":4116}," \"",{"type":3038,"tag":3408,"props":4118,"children":4119},{"style":3429},[4120],{"type":3043,"value":4121},"Too Many Requests",{"type":3038,"tag":3408,"props":4123,"children":4124},{"style":3574},[4125],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4127,"children":4128},{"style":3574},[4129],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4131,"children":4132},{"class":3410,"line":3027},[4133,4138,4142,4146],{"type":3038,"tag":3408,"props":4134,"children":4135},{"style":3423},[4136],{"type":3043,"value":4137},"  retryAfterHeader",{"type":3038,"tag":3408,"props":4139,"children":4140},{"style":3574},[4141],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4143,"children":4144},{"style":3902},[4145],{"type":3043,"value":3905},{"type":3038,"tag":3408,"props":4147,"children":4148},{"style":3574},[4149],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4151,"children":4152},{"class":3410,"line":3687},[4153,4158,4162],{"type":3038,"tag":3408,"props":4154,"children":4155},{"style":3423},[4156],{"type":3043,"value":4157},"  log",{"type":3038,"tag":3408,"props":4159,"children":4160},{"style":3574},[4161],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4163,"children":4164},{"style":3574},[4165],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":4167,"children":4168},{"class":3410,"line":3696},[4169,4174,4178,4183,4187],{"type":3038,"tag":3408,"props":4170,"children":4171},{"style":3423},[4172],{"type":3043,"value":4173},"    path",{"type":3038,"tag":3408,"props":4175,"children":4176},{"style":3574},[4177],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4179,"children":4180},{"style":3574},[4181],{"type":3043,"value":4182}," \"\"",{"type":3038,"tag":3408,"props":4184,"children":4185},{"style":3574},[4186],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":4188,"children":4189},{"style":3414},[4190],{"type":3043,"value":4191}," \u002F\u002F Logging is disabled if path is empty\n",{"type":3038,"tag":3408,"props":4193,"children":4194},{"class":3410,"line":3705},[4195,4200,4204,4209,4213],{"type":3038,"tag":3408,"props":4196,"children":4197},{"style":3423},[4198],{"type":3043,"value":4199},"    attempts",{"type":3038,"tag":3408,"props":4201,"children":4202},{"style":3574},[4203],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4205,"children":4206},{"style":3848},[4207],{"type":3043,"value":4208}," 0",{"type":3038,"tag":3408,"props":4210,"children":4211},{"style":3574},[4212],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":4214,"children":4215},{"style":3414},[4216],{"type":3043,"value":4217}," \u002F\u002F Logging per IP is disabled if attempts is 0\n",{"type":3038,"tag":3408,"props":4219,"children":4220},{"class":3410,"line":3714},[4221,4226,4230,4234],{"type":3038,"tag":3408,"props":4222,"children":4223},{"style":3423},[4224],{"type":3043,"value":4225},"    fail2ban",{"type":3038,"tag":3408,"props":4227,"children":4228},{"style":3574},[4229],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4231,"children":4232},{"style":3902},[4233],{"type":3043,"value":3905},{"type":3038,"tag":3408,"props":4235,"children":4236},{"style":3574},[4237],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4239,"children":4240},{"class":3410,"line":3723},[4241],{"type":3038,"tag":3408,"props":4242,"children":4243},{"style":3574},[4244],{"type":3043,"value":3931},{"type":3038,"tag":3408,"props":4246,"children":4247},{"class":3410,"line":3732},[4248,4253,4257,4261],{"type":3038,"tag":3408,"props":4249,"children":4250},{"style":3423},[4251],{"type":3043,"value":4252},"  routes",{"type":3038,"tag":3408,"props":4254,"children":4255},{"style":3574},[4256],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4258,"children":4259},{"style":3583},[4260],{"type":3043,"value":3805},{"type":3038,"tag":3408,"props":4262,"children":4263},{"style":3574},[4264],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4266,"children":4267},{"class":3410,"line":3741},[4268,4273,4277,4281],{"type":3038,"tag":3408,"props":4269,"children":4270},{"style":3423},[4271],{"type":3043,"value":4272},"  skipRoutes",{"type":3038,"tag":3408,"props":4274,"children":4275},{"style":3574},[4276],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4278,"children":4279},{"style":3583},[4280],{"type":3043,"value":3805},{"type":3038,"tag":3408,"props":4282,"children":4283},{"style":3574},[4284],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4286,"children":4287},{"class":3410,"line":3750},[4288,4293,4297,4302,4307,4312,4316,4321,4325,4329,4333],{"type":3038,"tag":3408,"props":4289,"children":4290},{"style":3423},[4291],{"type":3043,"value":4292},"  ipTTL",{"type":3038,"tag":3408,"props":4294,"children":4295},{"style":3574},[4296],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4298,"children":4299},{"style":3848},[4300],{"type":3043,"value":4301}," 7",{"type":3038,"tag":3408,"props":4303,"children":4304},{"style":3574},[4305],{"type":3043,"value":4306}," *",{"type":3038,"tag":3408,"props":4308,"children":4309},{"style":3848},[4310],{"type":3043,"value":4311}," 24",{"type":3038,"tag":3408,"props":4313,"children":4314},{"style":3574},[4315],{"type":3043,"value":4306},{"type":3038,"tag":3408,"props":4317,"children":4318},{"style":3848},[4319],{"type":3043,"value":4320}," 60",{"type":3038,"tag":3408,"props":4322,"children":4323},{"style":3574},[4324],{"type":3043,"value":4306},{"type":3038,"tag":3408,"props":4326,"children":4327},{"style":3848},[4328],{"type":3043,"value":4320},{"type":3038,"tag":3408,"props":4330,"children":4331},{"style":3574},[4332],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":4334,"children":4335},{"style":3414},[4336],{"type":3043,"value":4337}," \u002F\u002F 7 days in seconds\n",{"type":3038,"tag":3408,"props":4339,"children":4340},{"class":3410,"line":3758},[4341,4346,4350],{"type":3038,"tag":3408,"props":4342,"children":4343},{"style":3423},[4344],{"type":3043,"value":4345},"  security",{"type":3038,"tag":3408,"props":4347,"children":4348},{"style":3574},[4349],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4351,"children":4352},{"style":3574},[4353],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":4355,"children":4356},{"class":3410,"line":3767},[4357,4362,4366,4370],{"type":3038,"tag":3408,"props":4358,"children":4359},{"style":3423},[4360],{"type":3043,"value":4361},"    trustXForwardedFor",{"type":3038,"tag":3408,"props":4363,"children":4364},{"style":3574},[4365],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4367,"children":4368},{"style":3902},[4369],{"type":3043,"value":3905},{"type":3038,"tag":3408,"props":4371,"children":4372},{"style":3574},[4373],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4375,"children":4376},{"class":3410,"line":3776},[4377],{"type":3038,"tag":3408,"props":4378,"children":4379},{"style":3574},[4380],{"type":3043,"value":4381},"  }\n",{"type":3038,"tag":3408,"props":4383,"children":4384},{"class":3410,"line":3790},[4385],{"type":3038,"tag":3408,"props":4386,"children":4387},{"style":3574},[4388],{"type":3043,"value":4389},"}\n",{"type":3038,"tag":3045,"props":4391,"children":4392},{},[4393],{"type":3038,"tag":3133,"props":4394,"children":4395},{},[4396,4398],{"type":3043,"value":4397},"Security Warning: ",{"type":3038,"tag":3195,"props":4399,"children":4401},{"className":4400},[],[4402],{"type":3043,"value":4403},"trustXForwardedFor",{"type":3038,"tag":3045,"props":4405,"children":4406},{},[4407,4409,4415,4417,4423,4425,4431],{"type":3043,"value":4408},"The ",{"type":3038,"tag":3195,"props":4410,"children":4412},{"className":4411},[],[4413],{"type":3043,"value":4414},"security.trustXForwardedFor",{"type":3043,"value":4416}," option (default is ",{"type":3038,"tag":3195,"props":4418,"children":4420},{"className":4419},[],[4421],{"type":3043,"value":4422},"false",{"type":3043,"value":4424},", set by the module) determines if the module uses the ",{"type":3038,"tag":3195,"props":4426,"children":4428},{"className":4427},[],[4429],{"type":3043,"value":4430},"X-Forwarded-For",{"type":3043,"value":4432}," HTTP header to identify the client's IP address.",{"type":3038,"tag":3095,"props":4434,"children":4435},{},[4436,4456,4494,4513],{"type":3038,"tag":3099,"props":4437,"children":4438},{},[4439,4441,4447,4449,4454],{"type":3043,"value":4440},"If set to ",{"type":3038,"tag":3195,"props":4442,"children":4444},{"className":4443},[],[4445],{"type":3043,"value":4446},"true",{"type":3043,"value":4448},": The module will use the IP address provided in the ",{"type":3038,"tag":3195,"props":4450,"children":4452},{"className":4451},[],[4453],{"type":3043,"value":4430},{"type":3043,"value":4455}," 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":3038,"tag":3099,"props":4457,"children":4458},{},[4459,4464,4466,4471,4473,4478,4480,4485,4487,4492],{"type":3038,"tag":3133,"props":4460,"children":4461},{},[4462],{"type":3043,"value":4463},"WARNING:",{"type":3043,"value":4465}," If ",{"type":3038,"tag":3195,"props":4467,"children":4469},{"className":4468},[],[4470],{"type":3043,"value":4403},{"type":3043,"value":4472}," is ",{"type":3038,"tag":3195,"props":4474,"children":4476},{"className":4475},[],[4477],{"type":3043,"value":4446},{"type":3043,"value":4479}," and your application is directly internet-facing OR your proxy is not configured to strip incoming ",{"type":3038,"tag":3195,"props":4481,"children":4483},{"className":4482},[],[4484],{"type":3043,"value":4430},{"type":3043,"value":4486}," headers from clients, malicious users can spoof their IP address by sending a fake ",{"type":3038,"tag":3195,"props":4488,"children":4490},{"className":4489},[],[4491],{"type":3043,"value":4430},{"type":3043,"value":4493}," header. This would allow them to bypass rate limits or cause other users to be incorrectly rate-limited.",{"type":3038,"tag":3099,"props":4495,"children":4496},{},[4497,4498,4503,4505,4511],{"type":3043,"value":4440},{"type":3038,"tag":3195,"props":4499,"children":4501},{"className":4500},[],[4502],{"type":3043,"value":4422},{"type":3043,"value":4504},": The module will use the direct IP address of the incoming connection (i.e., ",{"type":3038,"tag":3195,"props":4506,"children":4508},{"className":4507},[],[4509],{"type":3043,"value":4510},"event.node.req.socket.remoteAddress",{"type":3043,"value":4512},"). Use this setting if your application is directly internet-facing or if you are unsure about your proxy's configuration.",{"type":3038,"tag":3099,"props":4514,"children":4515},{},[4516,4521,4523,4529,4531,4536],{"type":3038,"tag":3133,"props":4517,"children":4518},{},[4519],{"type":3043,"value":4520},"Recommendation:",{"type":3043,"value":4522}," Only enable ",{"type":3038,"tag":3195,"props":4524,"children":4526},{"className":4525},[],[4527],{"type":3043,"value":4528},"trustXForwardedFor: true",{"type":3043,"value":4530}," 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":3038,"tag":3195,"props":4532,"children":4534},{"className":4533},[],[4535],{"type":3043,"value":4422},{"type":3043,"value":4537},".",{"type":3038,"tag":3384,"props":4539,"children":4541},{"id":4540},"_3-add-nitrostorage-to-nuxtconfigts",[4542,4544,4550,4552],{"type":3043,"value":4543},"3. Add ",{"type":3038,"tag":3195,"props":4545,"children":4547},{"className":4546},[],[4548],{"type":3043,"value":4549},"nitro\u002Fstorage",{"type":3043,"value":4551}," to ",{"type":3038,"tag":3195,"props":4553,"children":4555},{"className":4554},[],[4556],{"type":3043,"value":233},{"type":3038,"tag":3045,"props":4558,"children":4559},{},[4560,4562,4567],{"type":3043,"value":4561},"You can use any storage you want, but you have to use ",{"type":3038,"tag":3133,"props":4563,"children":4564},{},[4565],{"type":3043,"value":4566},"shield",{"type":3043,"value":4568}," as the name of the storage.",{"type":3038,"tag":3398,"props":4570,"children":4574},{"className":4571,"code":4572,"language":4573,"meta":2982,"style":2982},"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",[4575],{"type":3038,"tag":3195,"props":4576,"children":4577},{"__ignoreMap":2982},[4578,4585,4611,4636,4660,4668,4703,4711,4719,4726],{"type":3038,"tag":3408,"props":4579,"children":4580},{"class":3410,"line":3010},[4581],{"type":3038,"tag":3408,"props":4582,"children":4583},{"style":3574},[4584],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":4586,"children":4587},{"class":3410,"line":3006},[4588,4593,4599,4603,4607],{"type":3038,"tag":3408,"props":4589,"children":4590},{"style":3574},[4591],{"type":3043,"value":4592},"  \"",{"type":3038,"tag":3408,"props":4594,"children":4596},{"style":4595},"--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA",[4597],{"type":3043,"value":4598},"nitro",{"type":3038,"tag":3408,"props":4600,"children":4601},{"style":3574},[4602],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4604,"children":4605},{"style":3574},[4606],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4608,"children":4609},{"style":3574},[4610],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":4612,"children":4613},{"class":3410,"line":3440},[4614,4619,4624,4628,4632],{"type":3038,"tag":3408,"props":4615,"children":4616},{"style":3574},[4617],{"type":3043,"value":4618},"    \"",{"type":3038,"tag":3408,"props":4620,"children":4621},{"style":3423},[4622],{"type":3043,"value":4623},"storage",{"type":3038,"tag":3408,"props":4625,"children":4626},{"style":3574},[4627],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4629,"children":4630},{"style":3574},[4631],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4633,"children":4634},{"style":3574},[4635],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":4637,"children":4638},{"class":3410,"line":3449},[4639,4644,4648,4652,4656],{"type":3038,"tag":3408,"props":4640,"children":4641},{"style":3574},[4642],{"type":3043,"value":4643},"      \"",{"type":3038,"tag":3408,"props":4645,"children":4646},{"style":3848},[4647],{"type":3043,"value":4566},{"type":3038,"tag":3408,"props":4649,"children":4650},{"style":3574},[4651],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4653,"children":4654},{"style":3574},[4655],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4657,"children":4658},{"style":3574},[4659],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":4661,"children":4662},{"class":3410,"line":3002},[4663],{"type":3038,"tag":3408,"props":4664,"children":4665},{"style":3414},[4666],{"type":3043,"value":4667},"        \u002F\u002F storage name, you **must** use \"shield\" as the name\n",{"type":3038,"tag":3408,"props":4669,"children":4670},{"class":3410,"line":3474},[4671,4676,4681,4685,4689,4693,4698],{"type":3038,"tag":3408,"props":4672,"children":4673},{"style":3574},[4674],{"type":3043,"value":4675},"        \"",{"type":3038,"tag":3408,"props":4677,"children":4678},{"style":3583},[4679],{"type":3043,"value":4680},"driver",{"type":3038,"tag":3408,"props":4682,"children":4683},{"style":3574},[4684],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4686,"children":4687},{"style":3574},[4688],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4690,"children":4691},{"style":3574},[4692],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":4694,"children":4695},{"style":3429},[4696],{"type":3043,"value":4697},"memory",{"type":3038,"tag":3408,"props":4699,"children":4700},{"style":3574},[4701],{"type":3043,"value":4702},"\"\n",{"type":3038,"tag":3408,"props":4704,"children":4705},{"class":3410,"line":3482},[4706],{"type":3038,"tag":3408,"props":4707,"children":4708},{"style":3574},[4709],{"type":3043,"value":4710},"      }\n",{"type":3038,"tag":3408,"props":4712,"children":4713},{"class":3410,"line":3491},[4714],{"type":3038,"tag":3408,"props":4715,"children":4716},{"style":3574},[4717],{"type":3043,"value":4718},"    }\n",{"type":3038,"tag":3408,"props":4720,"children":4721},{"class":3410,"line":3027},[4722],{"type":3038,"tag":3408,"props":4723,"children":4724},{"style":3574},[4725],{"type":3043,"value":4381},{"type":3038,"tag":3408,"props":4727,"children":4728},{"class":3410,"line":3687},[4729],{"type":3038,"tag":3408,"props":4730,"children":4731},{"style":3574},[4732],{"type":3043,"value":4389},{"type":3038,"tag":3045,"props":4734,"children":4735},{},[4736],{"type":3043,"value":4737},"If you use for example redis, you can use the following configuration, define the host and port.",{"type":3038,"tag":3398,"props":4739,"children":4741},{"className":4571,"code":4740,"language":4573,"meta":2982,"style":2982},"{\n  \"nitro\": {\n    \"storage\": {\n      \"shield\": {\n        \"driver\": \"redis\",\n        \"host\": \"localhost\",\n        \"port\": 6379\n      }\n    }\n  }\n}\n",[4742],{"type":3038,"tag":3195,"props":4743,"children":4744},{"__ignoreMap":2982},[4745,4752,4775,4798,4821,4857,4894,4919,4926,4933,4940],{"type":3038,"tag":3408,"props":4746,"children":4747},{"class":3410,"line":3010},[4748],{"type":3038,"tag":3408,"props":4749,"children":4750},{"style":3574},[4751],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":4753,"children":4754},{"class":3410,"line":3006},[4755,4759,4763,4767,4771],{"type":3038,"tag":3408,"props":4756,"children":4757},{"style":3574},[4758],{"type":3043,"value":4592},{"type":3038,"tag":3408,"props":4760,"children":4761},{"style":4595},[4762],{"type":3043,"value":4598},{"type":3038,"tag":3408,"props":4764,"children":4765},{"style":3574},[4766],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4768,"children":4769},{"style":3574},[4770],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4772,"children":4773},{"style":3574},[4774],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":4776,"children":4777},{"class":3410,"line":3440},[4778,4782,4786,4790,4794],{"type":3038,"tag":3408,"props":4779,"children":4780},{"style":3574},[4781],{"type":3043,"value":4618},{"type":3038,"tag":3408,"props":4783,"children":4784},{"style":3423},[4785],{"type":3043,"value":4623},{"type":3038,"tag":3408,"props":4787,"children":4788},{"style":3574},[4789],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4791,"children":4792},{"style":3574},[4793],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4795,"children":4796},{"style":3574},[4797],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":4799,"children":4800},{"class":3410,"line":3449},[4801,4805,4809,4813,4817],{"type":3038,"tag":3408,"props":4802,"children":4803},{"style":3574},[4804],{"type":3043,"value":4643},{"type":3038,"tag":3408,"props":4806,"children":4807},{"style":3848},[4808],{"type":3043,"value":4566},{"type":3038,"tag":3408,"props":4810,"children":4811},{"style":3574},[4812],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4814,"children":4815},{"style":3574},[4816],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4818,"children":4819},{"style":3574},[4820],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":4822,"children":4823},{"class":3410,"line":3002},[4824,4828,4832,4836,4840,4844,4849,4853],{"type":3038,"tag":3408,"props":4825,"children":4826},{"style":3574},[4827],{"type":3043,"value":4675},{"type":3038,"tag":3408,"props":4829,"children":4830},{"style":3583},[4831],{"type":3043,"value":4680},{"type":3038,"tag":3408,"props":4833,"children":4834},{"style":3574},[4835],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4837,"children":4838},{"style":3574},[4839],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4841,"children":4842},{"style":3574},[4843],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":4845,"children":4846},{"style":3429},[4847],{"type":3043,"value":4848},"redis",{"type":3038,"tag":3408,"props":4850,"children":4851},{"style":3574},[4852],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4854,"children":4855},{"style":3574},[4856],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4858,"children":4859},{"class":3410,"line":3474},[4860,4864,4869,4873,4877,4881,4886,4890],{"type":3038,"tag":3408,"props":4861,"children":4862},{"style":3574},[4863],{"type":3043,"value":4675},{"type":3038,"tag":3408,"props":4865,"children":4866},{"style":3583},[4867],{"type":3043,"value":4868},"host",{"type":3038,"tag":3408,"props":4870,"children":4871},{"style":3574},[4872],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4874,"children":4875},{"style":3574},[4876],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4878,"children":4879},{"style":3574},[4880],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":4882,"children":4883},{"style":3429},[4884],{"type":3043,"value":4885},"localhost",{"type":3038,"tag":3408,"props":4887,"children":4888},{"style":3574},[4889],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4891,"children":4892},{"style":3574},[4893],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":4895,"children":4896},{"class":3410,"line":3482},[4897,4901,4906,4910,4914],{"type":3038,"tag":3408,"props":4898,"children":4899},{"style":3574},[4900],{"type":3043,"value":4675},{"type":3038,"tag":3408,"props":4902,"children":4903},{"style":3583},[4904],{"type":3043,"value":4905},"port",{"type":3038,"tag":3408,"props":4907,"children":4908},{"style":3574},[4909],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":4911,"children":4912},{"style":3574},[4913],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":4915,"children":4916},{"style":3848},[4917],{"type":3043,"value":4918}," 6379\n",{"type":3038,"tag":3408,"props":4920,"children":4921},{"class":3410,"line":3491},[4922],{"type":3038,"tag":3408,"props":4923,"children":4924},{"style":3574},[4925],{"type":3043,"value":4710},{"type":3038,"tag":3408,"props":4927,"children":4928},{"class":3410,"line":3027},[4929],{"type":3038,"tag":3408,"props":4930,"children":4931},{"style":3574},[4932],{"type":3043,"value":4718},{"type":3038,"tag":3408,"props":4934,"children":4935},{"class":3410,"line":3687},[4936],{"type":3038,"tag":3408,"props":4937,"children":4938},{"style":3574},[4939],{"type":3043,"value":4381},{"type":3038,"tag":3408,"props":4941,"children":4942},{"class":3410,"line":3696},[4943],{"type":3038,"tag":3408,"props":4944,"children":4945},{"style":3574},[4946],{"type":3043,"value":4389},{"type":3038,"tag":3384,"props":4948,"children":4950},{"id":4949},"_4-schedule-bundled-cleanup-tasks-in-nuxtconfigts",[4951,4953],{"type":3043,"value":4952},"4. Schedule bundled cleanup tasks in ",{"type":3038,"tag":3195,"props":4954,"children":4956},{"className":4955},[],[4957],{"type":3043,"value":233},{"type":3038,"tag":3045,"props":4959,"children":4960},{},[4961,4963,4968,4970,4976,4978,4983,4985,4991,4993,4999,5001,5007,5009,5014,5016,5022],{"type":3043,"value":4962},"The module registers two Nitro tasks for you: ",{"type":3038,"tag":3195,"props":4964,"children":4966},{"className":4965},[],[4967],{"type":3043,"value":3292},{"type":3043,"value":4969}," (removes expired ",{"type":3038,"tag":3195,"props":4971,"children":4973},{"className":4972},[],[4974],{"type":3043,"value":4975},"ban:*",{"type":3043,"value":4977}," keys) and ",{"type":3038,"tag":3195,"props":4979,"children":4981},{"className":4980},[],[4982],{"type":3043,"value":3300},{"type":3043,"value":4984}," (removes stale ",{"type":3038,"tag":3195,"props":4986,"children":4988},{"className":4987},[],[4989],{"type":3043,"value":4990},"ip:*",{"type":3043,"value":4992}," keys using ",{"type":3038,"tag":3195,"props":4994,"children":4996},{"className":4995},[],[4997],{"type":3043,"value":4998},"ipTTL",{"type":3043,"value":5000},"). Turn on Nitro tasks and add ",{"type":3038,"tag":3195,"props":5002,"children":5004},{"className":5003},[],[5005],{"type":3043,"value":5006},"scheduledTasks",{"type":3043,"value":5008}," so they run on a cadence you choose. You do ",{"type":3038,"tag":3133,"props":5010,"children":5011},{},[5012],{"type":3043,"value":5013},"not",{"type":3043,"value":5015}," need files under ",{"type":3038,"tag":3195,"props":5017,"children":5019},{"className":5018},[],[5020],{"type":3043,"value":5021},"server\u002Ftasks\u002F",{"type":3043,"value":5023}," for this default setup.",{"type":3038,"tag":3398,"props":5025,"children":5027},{"className":4571,"code":5026,"language":4573,"meta":2982,"style":2982},"{\n  \"nitro\": {\n    \"experimental\": {\n      \"tasks\": true\n    },\n    \"scheduledTasks\": {\n      \"*\u002F15 * * * *\": [\"shield:cleanBans\"],\n      \"0 0 * * *\": [\"shield:cleanIpData\"]\n    }\n  }\n}\n",[5028],{"type":3038,"tag":3195,"props":5029,"children":5030},{"__ignoreMap":2982},[5031,5038,5061,5085,5110,5117,5140,5181,5222,5229,5236],{"type":3038,"tag":3408,"props":5032,"children":5033},{"class":3410,"line":3010},[5034],{"type":3038,"tag":3408,"props":5035,"children":5036},{"style":3574},[5037],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":5039,"children":5040},{"class":3410,"line":3006},[5041,5045,5049,5053,5057],{"type":3038,"tag":3408,"props":5042,"children":5043},{"style":3574},[5044],{"type":3043,"value":4592},{"type":3038,"tag":3408,"props":5046,"children":5047},{"style":4595},[5048],{"type":3043,"value":4598},{"type":3038,"tag":3408,"props":5050,"children":5051},{"style":3574},[5052],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5054,"children":5055},{"style":3574},[5056],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5058,"children":5059},{"style":3574},[5060],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":5062,"children":5063},{"class":3410,"line":3440},[5064,5068,5073,5077,5081],{"type":3038,"tag":3408,"props":5065,"children":5066},{"style":3574},[5067],{"type":3043,"value":4618},{"type":3038,"tag":3408,"props":5069,"children":5070},{"style":3423},[5071],{"type":3043,"value":5072},"experimental",{"type":3038,"tag":3408,"props":5074,"children":5075},{"style":3574},[5076],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5078,"children":5079},{"style":3574},[5080],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5082,"children":5083},{"style":3574},[5084],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":5086,"children":5087},{"class":3410,"line":3449},[5088,5092,5097,5101,5105],{"type":3038,"tag":3408,"props":5089,"children":5090},{"style":3574},[5091],{"type":3043,"value":4643},{"type":3038,"tag":3408,"props":5093,"children":5094},{"style":3848},[5095],{"type":3043,"value":5096},"tasks",{"type":3038,"tag":3408,"props":5098,"children":5099},{"style":3574},[5100],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5102,"children":5103},{"style":3574},[5104],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5106,"children":5107},{"style":3574},[5108],{"type":3043,"value":5109}," true\n",{"type":3038,"tag":3408,"props":5111,"children":5112},{"class":3410,"line":3002},[5113],{"type":3038,"tag":3408,"props":5114,"children":5115},{"style":3574},[5116],{"type":3043,"value":3684},{"type":3038,"tag":3408,"props":5118,"children":5119},{"class":3410,"line":3474},[5120,5124,5128,5132,5136],{"type":3038,"tag":3408,"props":5121,"children":5122},{"style":3574},[5123],{"type":3043,"value":4618},{"type":3038,"tag":3408,"props":5125,"children":5126},{"style":3423},[5127],{"type":3043,"value":5006},{"type":3038,"tag":3408,"props":5129,"children":5130},{"style":3574},[5131],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5133,"children":5134},{"style":3574},[5135],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5137,"children":5138},{"style":3574},[5139],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":5141,"children":5142},{"class":3410,"line":3482},[5143,5147,5152,5156,5160,5164,5168,5172,5176],{"type":3038,"tag":3408,"props":5144,"children":5145},{"style":3574},[5146],{"type":3043,"value":4643},{"type":3038,"tag":3408,"props":5148,"children":5149},{"style":3848},[5150],{"type":3043,"value":5151},"*\u002F15 * * * *",{"type":3038,"tag":3408,"props":5153,"children":5154},{"style":3574},[5155],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5157,"children":5158},{"style":3574},[5159],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5161,"children":5162},{"style":3574},[5163],{"type":3043,"value":3596},{"type":3038,"tag":3408,"props":5165,"children":5166},{"style":3574},[5167],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5169,"children":5170},{"style":3429},[5171],{"type":3043,"value":3292},{"type":3038,"tag":3408,"props":5173,"children":5174},{"style":3574},[5175],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5177,"children":5178},{"style":3574},[5179],{"type":3043,"value":5180},"],\n",{"type":3038,"tag":3408,"props":5182,"children":5183},{"class":3410,"line":3491},[5184,5188,5193,5197,5201,5205,5209,5213,5217],{"type":3038,"tag":3408,"props":5185,"children":5186},{"style":3574},[5187],{"type":3043,"value":4643},{"type":3038,"tag":3408,"props":5189,"children":5190},{"style":3848},[5191],{"type":3043,"value":5192},"0 0 * * *",{"type":3038,"tag":3408,"props":5194,"children":5195},{"style":3574},[5196],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5198,"children":5199},{"style":3574},[5200],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5202,"children":5203},{"style":3574},[5204],{"type":3043,"value":3596},{"type":3038,"tag":3408,"props":5206,"children":5207},{"style":3574},[5208],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5210,"children":5211},{"style":3429},[5212],{"type":3043,"value":3300},{"type":3038,"tag":3408,"props":5214,"children":5215},{"style":3574},[5216],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5218,"children":5219},{"style":3574},[5220],{"type":3043,"value":5221},"]\n",{"type":3038,"tag":3408,"props":5223,"children":5224},{"class":3410,"line":3027},[5225],{"type":3038,"tag":3408,"props":5226,"children":5227},{"style":3574},[5228],{"type":3043,"value":4718},{"type":3038,"tag":3408,"props":5230,"children":5231},{"class":3410,"line":3687},[5232],{"type":3038,"tag":3408,"props":5233,"children":5234},{"style":3574},[5235],{"type":3043,"value":4381},{"type":3038,"tag":3408,"props":5237,"children":5238},{"class":3410,"line":3696},[5239],{"type":3038,"tag":3408,"props":5240,"children":5241},{"style":3574},[5242],{"type":3043,"value":4389},{"type":3038,"tag":3045,"props":5244,"children":5245},{},[5246],{"type":3043,"value":5247},"Cron expressions are examples only: for instance, clean expired bans every 15 minutes and IP tracking data daily at midnight.",{"type":3038,"tag":3384,"props":5249,"children":5251},{"id":5250},"_5-optional-custom-cleanup-task-implementations",[5252],{"type":3043,"value":5253},"5. Optional: custom cleanup task implementations",{"type":3038,"tag":3045,"props":5255,"children":5256},{},[5257,5259,5264,5266,5271],{"type":3043,"value":5258},"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":3038,"tag":3133,"props":5260,"children":5261},{},[5262],{"type":3043,"value":5263},"another",{"type":3043,"value":5265}," task name and point ",{"type":3038,"tag":3195,"props":5267,"children":5269},{"className":5268},[],[5270],{"type":3043,"value":5006},{"type":3043,"value":5272}," at that name instead.",{"type":3038,"tag":5274,"props":5275,"children":5277},"h4",{"id":5276},"a-task-for-cleaning-expired-bans",[5278],{"type":3043,"value":5279},"a) Task for cleaning expired bans",{"type":3038,"tag":3045,"props":5281,"children":5282},{},[5283,5285,5291],{"type":3043,"value":5284},"Removes ban entries (",{"type":3038,"tag":3195,"props":5286,"children":5288},{"className":5287},[],[5289],{"type":3043,"value":5290},"ban:xxx.xxx.xxx.xxx",{"type":3043,"value":5292},") after the ban timestamp has passed.",{"type":3038,"tag":3045,"props":5294,"children":5295},{},[5296,5298,5304],{"type":3043,"value":5297},"Example ",{"type":3038,"tag":3195,"props":5299,"children":5301},{"className":5300},[],[5302],{"type":3043,"value":5303},"server\u002Ftasks\u002Fshield\u002FcleanBans.ts",{"type":3043,"value":5305}," (task name must match what you schedule):",{"type":3038,"tag":3398,"props":5307,"children":5311},{"className":5308,"code":5309,"language":5310,"meta":2982,"style":2982},"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",[5312],{"type":3038,"tag":3195,"props":5313,"children":5314},{"__ignoreMap":2982},[5315,5366,5373,5397,5413,5446,5475,5482,5504,5556,5563,5571,5630,5637,5662,5703,5754,5789,5826,5839,5846,5853,5915,5953,5960],{"type":3038,"tag":3408,"props":5316,"children":5317},{"class":3410,"line":3010},[5318,5323,5328,5333,5338,5343,5347,5352,5356,5361],{"type":3038,"tag":3408,"props":5319,"children":5320},{"style":3551},[5321],{"type":3043,"value":5322},"import",{"type":3038,"tag":3408,"props":5324,"children":5325},{"style":3574},[5326],{"type":3043,"value":5327}," {",{"type":3038,"tag":3408,"props":5329,"children":5330},{"style":3568},[5331],{"type":3043,"value":5332}," isActualBanTimestampExpired",{"type":3038,"tag":3408,"props":5334,"children":5335},{"style":3574},[5336],{"type":3043,"value":5337}," }",{"type":3038,"tag":3408,"props":5339,"children":5340},{"style":3551},[5341],{"type":3043,"value":5342}," from",{"type":3038,"tag":3408,"props":5344,"children":5345},{"style":3574},[5346],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":5348,"children":5349},{"style":3429},[5350],{"type":3043,"value":5351},"#imports",{"type":3038,"tag":3408,"props":5353,"children":5354},{"style":3574},[5355],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5357,"children":5358},{"style":3574},[5359],{"type":3043,"value":5360},";",{"type":3038,"tag":3408,"props":5362,"children":5363},{"style":3414},[5364],{"type":3043,"value":5365}," \u002F\u002F Auto-imported utility from nuxt-api-shield\n",{"type":3038,"tag":3408,"props":5367,"children":5368},{"class":3410,"line":3006},[5369],{"type":3038,"tag":3408,"props":5370,"children":5371},{"emptyLinePlaceholder":1200},[5372],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":5374,"children":5375},{"class":3410,"line":3440},[5376,5380,5384,5389,5393],{"type":3038,"tag":3408,"props":5377,"children":5378},{"style":3551},[5379],{"type":3043,"value":3554},{"type":3038,"tag":3408,"props":5381,"children":5382},{"style":3551},[5383],{"type":3043,"value":3559},{"type":3038,"tag":3408,"props":5385,"children":5386},{"style":3562},[5387],{"type":3043,"value":5388}," defineTask",{"type":3038,"tag":3408,"props":5390,"children":5391},{"style":3568},[5392],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":5394,"children":5395},{"style":3574},[5396],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":5398,"children":5399},{"class":3410,"line":3449},[5400,5405,5409],{"type":3038,"tag":3408,"props":5401,"children":5402},{"style":3583},[5403],{"type":3043,"value":5404},"  meta",{"type":3038,"tag":3408,"props":5406,"children":5407},{"style":3574},[5408],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5410,"children":5411},{"style":3574},[5412],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":5414,"children":5415},{"class":3410,"line":3002},[5416,5421,5425,5429,5433,5437,5441],{"type":3038,"tag":3408,"props":5417,"children":5418},{"style":3583},[5419],{"type":3043,"value":5420},"    name",{"type":3038,"tag":3408,"props":5422,"children":5423},{"style":3574},[5424],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5426,"children":5427},{"style":3574},[5428],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":5430,"children":5431},{"style":3429},[5432],{"type":3043,"value":3292},{"type":3038,"tag":3408,"props":5434,"children":5435},{"style":3574},[5436],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5438,"children":5439},{"style":3574},[5440],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":5442,"children":5443},{"style":3414},[5444],{"type":3043,"value":5445}," \u002F\u002F Match the name in scheduledTasks\n",{"type":3038,"tag":3408,"props":5447,"children":5448},{"class":3410,"line":3474},[5449,5454,5458,5462,5467,5471],{"type":3038,"tag":3408,"props":5450,"children":5451},{"style":3583},[5452],{"type":3043,"value":5453},"    description",{"type":3038,"tag":3408,"props":5455,"children":5456},{"style":3574},[5457],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5459,"children":5460},{"style":3574},[5461],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":5463,"children":5464},{"style":3429},[5465],{"type":3043,"value":5466},"Clean expired bans from nuxt-api-shield storage.",{"type":3038,"tag":3408,"props":5468,"children":5469},{"style":3574},[5470],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5472,"children":5473},{"style":3574},[5474],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":5476,"children":5477},{"class":3410,"line":3482},[5478],{"type":3038,"tag":3408,"props":5479,"children":5480},{"style":3574},[5481],{"type":3043,"value":3931},{"type":3038,"tag":3408,"props":5483,"children":5484},{"class":3410,"line":3491},[5485,5490,5495,5500],{"type":3038,"tag":3408,"props":5486,"children":5487},{"style":4595},[5488],{"type":3043,"value":5489},"  async",{"type":3038,"tag":3408,"props":5491,"children":5492},{"style":3583},[5493],{"type":3043,"value":5494}," run",{"type":3038,"tag":3408,"props":5496,"children":5497},{"style":3574},[5498],{"type":3043,"value":5499},"()",{"type":3038,"tag":3408,"props":5501,"children":5502},{"style":3574},[5503],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":5505,"children":5506},{"class":3410,"line":3027},[5507,5512,5517,5522,5527,5531,5535,5539,5543,5547,5551],{"type":3038,"tag":3408,"props":5508,"children":5509},{"style":4595},[5510],{"type":3043,"value":5511},"    const",{"type":3038,"tag":3408,"props":5513,"children":5514},{"style":3568},[5515],{"type":3043,"value":5516}," shieldStorage",{"type":3038,"tag":3408,"props":5518,"children":5519},{"style":3574},[5520],{"type":3043,"value":5521}," =",{"type":3038,"tag":3408,"props":5523,"children":5524},{"style":3562},[5525],{"type":3043,"value":5526}," useStorage",{"type":3038,"tag":3408,"props":5528,"children":5529},{"style":3583},[5530],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":5532,"children":5533},{"style":3574},[5534],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5536,"children":5537},{"style":3429},[5538],{"type":3043,"value":4566},{"type":3038,"tag":3408,"props":5540,"children":5541},{"style":3574},[5542],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5544,"children":5545},{"style":3583},[5546],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":5548,"children":5549},{"style":3574},[5550],{"type":3043,"value":5360},{"type":3038,"tag":3408,"props":5552,"children":5553},{"style":3414},[5554],{"type":3043,"value":5555}," \u002F\u002F Use your configured storage name\n",{"type":3038,"tag":3408,"props":5557,"children":5558},{"class":3410,"line":3687},[5559],{"type":3038,"tag":3408,"props":5560,"children":5561},{"emptyLinePlaceholder":1200},[5562],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":5564,"children":5565},{"class":3410,"line":3696},[5566],{"type":3038,"tag":3408,"props":5567,"children":5568},{"style":3414},[5569],{"type":3043,"value":5570},"    \u002F\u002F Only fetch keys that start with the 'ban:' prefix\n",{"type":3038,"tag":3408,"props":5572,"children":5573},{"class":3410,"line":3705},[5574,5578,5583,5587,5592,5596,5600,5605,5609,5613,5618,5622,5626],{"type":3038,"tag":3408,"props":5575,"children":5576},{"style":4595},[5577],{"type":3043,"value":5511},{"type":3038,"tag":3408,"props":5579,"children":5580},{"style":3568},[5581],{"type":3043,"value":5582}," banKeys",{"type":3038,"tag":3408,"props":5584,"children":5585},{"style":3574},[5586],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":5588,"children":5589},{"style":3551},[5590],{"type":3043,"value":5591}," await",{"type":3038,"tag":3408,"props":5593,"children":5594},{"style":3568},[5595],{"type":3043,"value":5516},{"type":3038,"tag":3408,"props":5597,"children":5598},{"style":3574},[5599],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":5601,"children":5602},{"style":3562},[5603],{"type":3043,"value":5604},"getKeys",{"type":3038,"tag":3408,"props":5606,"children":5607},{"style":3583},[5608],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":5610,"children":5611},{"style":3574},[5612],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5614,"children":5615},{"style":3429},[5616],{"type":3043,"value":5617},"ban:",{"type":3038,"tag":3408,"props":5619,"children":5620},{"style":3574},[5621],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":5623,"children":5624},{"style":3583},[5625],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":5627,"children":5628},{"style":3574},[5629],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":5631,"children":5632},{"class":3410,"line":3714},[5633],{"type":3038,"tag":3408,"props":5634,"children":5635},{"emptyLinePlaceholder":1200},[5636],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":5638,"children":5639},{"class":3410,"line":3723},[5640,5645,5650,5654,5658],{"type":3038,"tag":3408,"props":5641,"children":5642},{"style":4595},[5643],{"type":3043,"value":5644},"    let",{"type":3038,"tag":3408,"props":5646,"children":5647},{"style":3568},[5648],{"type":3043,"value":5649}," cleanedCount",{"type":3038,"tag":3408,"props":5651,"children":5652},{"style":3574},[5653],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":5655,"children":5656},{"style":3848},[5657],{"type":3043,"value":4208},{"type":3038,"tag":3408,"props":5659,"children":5660},{"style":3574},[5661],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":5663,"children":5664},{"class":3410,"line":3732},[5665,5670,5675,5680,5685,5690,5694,5699],{"type":3038,"tag":3408,"props":5666,"children":5667},{"style":3551},[5668],{"type":3043,"value":5669},"    for",{"type":3038,"tag":3408,"props":5671,"children":5672},{"style":3583},[5673],{"type":3043,"value":5674}," (",{"type":3038,"tag":3408,"props":5676,"children":5677},{"style":4595},[5678],{"type":3043,"value":5679},"const",{"type":3038,"tag":3408,"props":5681,"children":5682},{"style":3568},[5683],{"type":3043,"value":5684}," key",{"type":3038,"tag":3408,"props":5686,"children":5687},{"style":3574},[5688],{"type":3043,"value":5689}," of",{"type":3038,"tag":3408,"props":5691,"children":5692},{"style":3568},[5693],{"type":3043,"value":5582},{"type":3038,"tag":3408,"props":5695,"children":5696},{"style":3583},[5697],{"type":3043,"value":5698},") ",{"type":3038,"tag":3408,"props":5700,"children":5701},{"style":3574},[5702],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":5704,"children":5705},{"class":3410,"line":3741},[5706,5711,5716,5720,5724,5728,5732,5737,5741,5746,5750],{"type":3038,"tag":3408,"props":5707,"children":5708},{"style":4595},[5709],{"type":3043,"value":5710},"      const",{"type":3038,"tag":3408,"props":5712,"children":5713},{"style":3568},[5714],{"type":3043,"value":5715}," bannedUntilRaw",{"type":3038,"tag":3408,"props":5717,"children":5718},{"style":3574},[5719],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":5721,"children":5722},{"style":3551},[5723],{"type":3043,"value":5591},{"type":3038,"tag":3408,"props":5725,"children":5726},{"style":3568},[5727],{"type":3043,"value":5516},{"type":3038,"tag":3408,"props":5729,"children":5730},{"style":3574},[5731],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":5733,"children":5734},{"style":3562},[5735],{"type":3043,"value":5736},"getItem",{"type":3038,"tag":3408,"props":5738,"children":5739},{"style":3583},[5740],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":5742,"children":5743},{"style":3568},[5744],{"type":3043,"value":5745},"key",{"type":3038,"tag":3408,"props":5747,"children":5748},{"style":3583},[5749],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":5751,"children":5752},{"style":3574},[5753],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":5755,"children":5756},{"class":3410,"line":3750},[5757,5762,5766,5771,5775,5780,5785],{"type":3038,"tag":3408,"props":5758,"children":5759},{"style":3551},[5760],{"type":3043,"value":5761},"      if",{"type":3038,"tag":3408,"props":5763,"children":5764},{"style":3583},[5765],{"type":3043,"value":5674},{"type":3038,"tag":3408,"props":5767,"children":5768},{"style":3562},[5769],{"type":3043,"value":5770},"isActualBanTimestampExpired",{"type":3038,"tag":3408,"props":5772,"children":5773},{"style":3583},[5774],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":5776,"children":5777},{"style":3568},[5778],{"type":3043,"value":5779},"bannedUntilRaw",{"type":3038,"tag":3408,"props":5781,"children":5782},{"style":3583},[5783],{"type":3043,"value":5784},")) ",{"type":3038,"tag":3408,"props":5786,"children":5787},{"style":3574},[5788],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":5790,"children":5791},{"class":3410,"line":3758},[5792,5797,5801,5805,5810,5814,5818,5822],{"type":3038,"tag":3408,"props":5793,"children":5794},{"style":3551},[5795],{"type":3043,"value":5796},"        await",{"type":3038,"tag":3408,"props":5798,"children":5799},{"style":3568},[5800],{"type":3043,"value":5516},{"type":3038,"tag":3408,"props":5802,"children":5803},{"style":3574},[5804],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":5806,"children":5807},{"style":3562},[5808],{"type":3043,"value":5809},"removeItem",{"type":3038,"tag":3408,"props":5811,"children":5812},{"style":3583},[5813],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":5815,"children":5816},{"style":3568},[5817],{"type":3043,"value":5745},{"type":3038,"tag":3408,"props":5819,"children":5820},{"style":3583},[5821],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":5823,"children":5824},{"style":3574},[5825],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":5827,"children":5828},{"class":3410,"line":3767},[5829,5834],{"type":3038,"tag":3408,"props":5830,"children":5831},{"style":3568},[5832],{"type":3043,"value":5833},"        cleanedCount",{"type":3038,"tag":3408,"props":5835,"children":5836},{"style":3574},[5837],{"type":3043,"value":5838},"++;\n",{"type":3038,"tag":3408,"props":5840,"children":5841},{"class":3410,"line":3776},[5842],{"type":3038,"tag":3408,"props":5843,"children":5844},{"style":3574},[5845],{"type":3043,"value":4710},{"type":3038,"tag":3408,"props":5847,"children":5848},{"class":3410,"line":3790},[5849],{"type":3038,"tag":3408,"props":5850,"children":5851},{"style":3574},[5852],{"type":3043,"value":4718},{"type":3038,"tag":3408,"props":5854,"children":5855},{"class":3410,"line":3818},[5856,5861,5865,5870,5874,5879,5884,5889,5894,5898,5903,5907,5911],{"type":3038,"tag":3408,"props":5857,"children":5858},{"style":3568},[5859],{"type":3043,"value":5860},"    console",{"type":3038,"tag":3408,"props":5862,"children":5863},{"style":3574},[5864],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":5866,"children":5867},{"style":3562},[5868],{"type":3043,"value":5869},"log",{"type":3038,"tag":3408,"props":5871,"children":5872},{"style":3583},[5873],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":5875,"children":5876},{"style":3574},[5877],{"type":3043,"value":5878},"`",{"type":3038,"tag":3408,"props":5880,"children":5881},{"style":3429},[5882],{"type":3043,"value":5883},"[nuxt-api-shield] Cleaned ",{"type":3038,"tag":3408,"props":5885,"children":5886},{"style":3574},[5887],{"type":3043,"value":5888},"${",{"type":3038,"tag":3408,"props":5890,"children":5891},{"style":3568},[5892],{"type":3043,"value":5893},"cleanedCount",{"type":3038,"tag":3408,"props":5895,"children":5896},{"style":3574},[5897],{"type":3043,"value":3940},{"type":3038,"tag":3408,"props":5899,"children":5900},{"style":3429},[5901],{"type":3043,"value":5902}," expired ban(s).",{"type":3038,"tag":3408,"props":5904,"children":5905},{"style":3574},[5906],{"type":3043,"value":5878},{"type":3038,"tag":3408,"props":5908,"children":5909},{"style":3583},[5910],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":5912,"children":5913},{"style":3574},[5914],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":5916,"children":5917},{"class":3410,"line":3826},[5918,5923,5927,5932,5936,5940,5944,5948],{"type":3038,"tag":3408,"props":5919,"children":5920},{"style":3551},[5921],{"type":3043,"value":5922},"    return",{"type":3038,"tag":3408,"props":5924,"children":5925},{"style":3574},[5926],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":5928,"children":5929},{"style":3583},[5930],{"type":3043,"value":5931}," result",{"type":3038,"tag":3408,"props":5933,"children":5934},{"style":3574},[5935],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":5937,"children":5938},{"style":3574},[5939],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":5941,"children":5942},{"style":3568},[5943],{"type":3043,"value":5649},{"type":3038,"tag":3408,"props":5945,"children":5946},{"style":3574},[5947],{"type":3043,"value":5337},{"type":3038,"tag":3408,"props":5949,"children":5950},{"style":3574},[5951],{"type":3043,"value":5952}," };\n",{"type":3038,"tag":3408,"props":5954,"children":5955},{"class":3410,"line":3835},[5956],{"type":3038,"tag":3408,"props":5957,"children":5958},{"style":3574},[5959],{"type":3043,"value":3931},{"type":3038,"tag":3408,"props":5961,"children":5962},{"class":3410,"line":3863},[5963,5967,5971],{"type":3038,"tag":3408,"props":5964,"children":5965},{"style":3574},[5966],{"type":3043,"value":3940},{"type":3038,"tag":3408,"props":5968,"children":5969},{"style":3568},[5970],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":5972,"children":5973},{"style":3574},[5974],{"type":3043,"value":3950},{"type":3038,"tag":3045,"props":5976,"children":5977},{},[5978,5979,5984,5986,5991,5993,5998],{"type":3043,"value":4408},{"type":3038,"tag":3195,"props":5980,"children":5982},{"className":5981},[],[5983],{"type":3043,"value":5770},{"type":3043,"value":5985}," utility is provided by ",{"type":3038,"tag":3195,"props":5987,"children":5989},{"className":5988},[],[5990],{"type":3043,"value":2979},{"type":3043,"value":5992}," and should be available via ",{"type":3038,"tag":3195,"props":5994,"children":5996},{"className":5995},[],[5997],{"type":3043,"value":5351},{"type":3043,"value":4537},{"type":3038,"tag":5274,"props":6000,"children":6002},{"id":6001},"b-task-for-cleaning-old-ip-tracking-data",[6003],{"type":3043,"value":6004},"b) Task for cleaning old IP tracking data",{"type":3038,"tag":3045,"props":6006,"children":6007},{},[6008,6010,6016,6018,6024,6026,6032],{"type":3043,"value":6009},"Cleans IP tracking entries (",{"type":3038,"tag":3195,"props":6011,"children":6013},{"className":6012},[],[6014],{"type":3043,"value":6015},"ip:xxx.xxx.xxx.xxx",{"type":3043,"value":6017},") whose ",{"type":3038,"tag":3195,"props":6019,"children":6021},{"className":6020},[],[6022],{"type":3043,"value":6023},"time",{"type":3043,"value":6025}," is older than ",{"type":3038,"tag":3195,"props":6027,"children":6029},{"className":6028},[],[6030],{"type":3043,"value":6031},"nuxtApiShield.ipTTL",{"type":3043,"value":6033}," (default 7 days), and drops malformed entries. That keeps storage from growing with one-off IPs that were never banned.",{"type":3038,"tag":3045,"props":6035,"children":6036},{},[6037,6038,6044],{"type":3043,"value":5297},{"type":3038,"tag":3195,"props":6039,"children":6041},{"className":6040},[],[6042],{"type":3043,"value":6043},"server\u002Ftasks\u002Fshield\u002FcleanIpData.ts",{"type":3043,"value":3591},{"type":3038,"tag":3398,"props":6046,"children":6048},{"className":5308,"code":6047,"language":5310,"meta":2982,"style":2982},"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",[6049],{"type":3038,"tag":3195,"props":6050,"children":6051},{"__ignoreMap":2982},[6052,6097,6137,6144,6167,6182,6213,6241,6248,6267,6310,6354,6361,6369,6401,6408,6456,6477,6493,6505,6572,6579,6612,6619,6676,6714,6737,6744,6779,6851,6858,6867,6932,6984,7021,7034,7043,7061,7070,7106,7118,7126,7134,7142,7162,7197,7210,7246,7254],{"type":3038,"tag":3408,"props":6053,"children":6054},{"class":3410,"line":3010},[6055,6059,6064,6068,6073,6077,6081,6085,6089,6093],{"type":3038,"tag":3408,"props":6056,"children":6057},{"style":3551},[6058],{"type":3043,"value":5322},{"type":3038,"tag":3408,"props":6060,"children":6061},{"style":3551},[6062],{"type":3043,"value":6063}," type",{"type":3038,"tag":3408,"props":6065,"children":6066},{"style":3574},[6067],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":6069,"children":6070},{"style":3568},[6071],{"type":3043,"value":6072}," RateLimit",{"type":3038,"tag":3408,"props":6074,"children":6075},{"style":3574},[6076],{"type":3043,"value":5337},{"type":3038,"tag":3408,"props":6078,"children":6079},{"style":3551},[6080],{"type":3043,"value":5342},{"type":3038,"tag":3408,"props":6082,"children":6083},{"style":3574},[6084],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":6086,"children":6087},{"style":3429},[6088],{"type":3043,"value":2979},{"type":3038,"tag":3408,"props":6090,"children":6091},{"style":3574},[6092],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6094,"children":6095},{"style":3574},[6096],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6098,"children":6099},{"class":3410,"line":3006},[6100,6104,6108,6113,6117,6121,6125,6129,6133],{"type":3038,"tag":3408,"props":6101,"children":6102},{"style":3551},[6103],{"type":3043,"value":5322},{"type":3038,"tag":3408,"props":6105,"children":6106},{"style":3574},[6107],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":6109,"children":6110},{"style":3568},[6111],{"type":3043,"value":6112}," useRuntimeConfig",{"type":3038,"tag":3408,"props":6114,"children":6115},{"style":3574},[6116],{"type":3043,"value":5337},{"type":3038,"tag":3408,"props":6118,"children":6119},{"style":3551},[6120],{"type":3043,"value":5342},{"type":3038,"tag":3408,"props":6122,"children":6123},{"style":3574},[6124],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":6126,"children":6127},{"style":3429},[6128],{"type":3043,"value":5351},{"type":3038,"tag":3408,"props":6130,"children":6131},{"style":3574},[6132],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6134,"children":6135},{"style":3574},[6136],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6138,"children":6139},{"class":3410,"line":3440},[6140],{"type":3038,"tag":3408,"props":6141,"children":6142},{"emptyLinePlaceholder":1200},[6143],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":6145,"children":6146},{"class":3410,"line":3449},[6147,6151,6155,6159,6163],{"type":3038,"tag":3408,"props":6148,"children":6149},{"style":3551},[6150],{"type":3043,"value":3554},{"type":3038,"tag":3408,"props":6152,"children":6153},{"style":3551},[6154],{"type":3043,"value":3559},{"type":3038,"tag":3408,"props":6156,"children":6157},{"style":3562},[6158],{"type":3043,"value":5388},{"type":3038,"tag":3408,"props":6160,"children":6161},{"style":3568},[6162],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":6164,"children":6165},{"style":3574},[6166],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":6168,"children":6169},{"class":3410,"line":3002},[6170,6174,6178],{"type":3038,"tag":3408,"props":6171,"children":6172},{"style":3583},[6173],{"type":3043,"value":5404},{"type":3038,"tag":3408,"props":6175,"children":6176},{"style":3574},[6177],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":6179,"children":6180},{"style":3574},[6181],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":6183,"children":6184},{"class":3410,"line":3474},[6185,6189,6193,6197,6201,6205,6209],{"type":3038,"tag":3408,"props":6186,"children":6187},{"style":3583},[6188],{"type":3043,"value":5420},{"type":3038,"tag":3408,"props":6190,"children":6191},{"style":3574},[6192],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":6194,"children":6195},{"style":3574},[6196],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":6198,"children":6199},{"style":3429},[6200],{"type":3043,"value":3300},{"type":3038,"tag":3408,"props":6202,"children":6203},{"style":3574},[6204],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6206,"children":6207},{"style":3574},[6208],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":6210,"children":6211},{"style":3414},[6212],{"type":3043,"value":5445},{"type":3038,"tag":3408,"props":6214,"children":6215},{"class":3410,"line":3482},[6216,6220,6224,6228,6233,6237],{"type":3038,"tag":3408,"props":6217,"children":6218},{"style":3583},[6219],{"type":3043,"value":5453},{"type":3038,"tag":3408,"props":6221,"children":6222},{"style":3574},[6223],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":6225,"children":6226},{"style":3574},[6227],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":6229,"children":6230},{"style":3429},[6231],{"type":3043,"value":6232},"Clean old IP tracking data from nuxt-api-shield storage.",{"type":3038,"tag":3408,"props":6234,"children":6235},{"style":3574},[6236],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6238,"children":6239},{"style":3574},[6240],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":6242,"children":6243},{"class":3410,"line":3491},[6244],{"type":3038,"tag":3408,"props":6245,"children":6246},{"style":3574},[6247],{"type":3043,"value":3931},{"type":3038,"tag":3408,"props":6249,"children":6250},{"class":3410,"line":3027},[6251,6255,6259,6263],{"type":3038,"tag":3408,"props":6252,"children":6253},{"style":4595},[6254],{"type":3043,"value":5489},{"type":3038,"tag":3408,"props":6256,"children":6257},{"style":3583},[6258],{"type":3043,"value":5494},{"type":3038,"tag":3408,"props":6260,"children":6261},{"style":3574},[6262],{"type":3043,"value":5499},{"type":3038,"tag":3408,"props":6264,"children":6265},{"style":3574},[6266],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":6268,"children":6269},{"class":3410,"line":3687},[6270,6274,6278,6282,6286,6290,6294,6298,6302,6306],{"type":3038,"tag":3408,"props":6271,"children":6272},{"style":4595},[6273],{"type":3043,"value":5511},{"type":3038,"tag":3408,"props":6275,"children":6276},{"style":3568},[6277],{"type":3043,"value":5516},{"type":3038,"tag":3408,"props":6279,"children":6280},{"style":3574},[6281],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":6283,"children":6284},{"style":3562},[6285],{"type":3043,"value":5526},{"type":3038,"tag":3408,"props":6287,"children":6288},{"style":3583},[6289],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":6291,"children":6292},{"style":3574},[6293],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6295,"children":6296},{"style":3429},[6297],{"type":3043,"value":4566},{"type":3038,"tag":3408,"props":6299,"children":6300},{"style":3574},[6301],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6303,"children":6304},{"style":3583},[6305],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":6307,"children":6308},{"style":3574},[6309],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6311,"children":6312},{"class":3410,"line":3696},[6313,6317,6322,6326,6330,6334,6338,6342,6346,6350],{"type":3038,"tag":3408,"props":6314,"children":6315},{"style":4595},[6316],{"type":3043,"value":5511},{"type":3038,"tag":3408,"props":6318,"children":6319},{"style":3568},[6320],{"type":3043,"value":6321}," config",{"type":3038,"tag":3408,"props":6323,"children":6324},{"style":3574},[6325],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":6327,"children":6328},{"style":3562},[6329],{"type":3043,"value":6112},{"type":3038,"tag":3408,"props":6331,"children":6332},{"style":3583},[6333],{"type":3043,"value":5499},{"type":3038,"tag":3408,"props":6335,"children":6336},{"style":3574},[6337],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":6339,"children":6340},{"style":3568},[6341],{"type":3043,"value":180},{"type":3038,"tag":3408,"props":6343,"children":6344},{"style":3574},[6345],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":6347,"children":6348},{"style":3568},[6349],{"type":3043,"value":3966},{"type":3038,"tag":3408,"props":6351,"children":6352},{"style":3574},[6353],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6355,"children":6356},{"class":3410,"line":3705},[6357],{"type":3038,"tag":3408,"props":6358,"children":6359},{"emptyLinePlaceholder":1200},[6360],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":6362,"children":6363},{"class":3410,"line":3714},[6364],{"type":3038,"tag":3408,"props":6365,"children":6366},{"style":3414},[6367],{"type":3043,"value":6368},"    \u002F\u002F ipTTL is expected to be in seconds from config (module applies default if not set by user)\n",{"type":3038,"tag":3408,"props":6370,"children":6371},{"class":3410,"line":3723},[6372,6376,6381,6385,6389,6393,6397],{"type":3038,"tag":3408,"props":6373,"children":6374},{"style":4595},[6375],{"type":3043,"value":5511},{"type":3038,"tag":3408,"props":6377,"children":6378},{"style":3568},[6379],{"type":3043,"value":6380}," ipTTLseconds",{"type":3038,"tag":3408,"props":6382,"children":6383},{"style":3574},[6384],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":6386,"children":6387},{"style":3568},[6388],{"type":3043,"value":6321},{"type":3038,"tag":3408,"props":6390,"children":6391},{"style":3574},[6392],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":6394,"children":6395},{"style":3568},[6396],{"type":3043,"value":4998},{"type":3038,"tag":3408,"props":6398,"children":6399},{"style":3574},[6400],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6402,"children":6403},{"class":3410,"line":3732},[6404],{"type":3038,"tag":3408,"props":6405,"children":6406},{"emptyLinePlaceholder":1200},[6407],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":6409,"children":6410},{"class":3410,"line":3741},[6411,6416,6420,6425,6430,6435,6439,6444,6448,6452],{"type":3038,"tag":3408,"props":6412,"children":6413},{"style":3551},[6414],{"type":3043,"value":6415},"    if",{"type":3038,"tag":3408,"props":6417,"children":6418},{"style":3583},[6419],{"type":3043,"value":5674},{"type":3038,"tag":3408,"props":6421,"children":6422},{"style":3574},[6423],{"type":3043,"value":6424},"!",{"type":3038,"tag":3408,"props":6426,"children":6427},{"style":3568},[6428],{"type":3043,"value":6429},"ipTTLseconds",{"type":3038,"tag":3408,"props":6431,"children":6432},{"style":3574},[6433],{"type":3043,"value":6434}," ||",{"type":3038,"tag":3408,"props":6436,"children":6437},{"style":3568},[6438],{"type":3043,"value":6380},{"type":3038,"tag":3408,"props":6440,"children":6441},{"style":3574},[6442],{"type":3043,"value":6443}," \u003C=",{"type":3038,"tag":3408,"props":6445,"children":6446},{"style":3848},[6447],{"type":3043,"value":4208},{"type":3038,"tag":3408,"props":6449,"children":6450},{"style":3583},[6451],{"type":3043,"value":5698},{"type":3038,"tag":3408,"props":6453,"children":6454},{"style":3574},[6455],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":6457,"children":6458},{"class":3410,"line":3750},[6459,6464,6468,6472],{"type":3038,"tag":3408,"props":6460,"children":6461},{"style":3568},[6462],{"type":3043,"value":6463},"      console",{"type":3038,"tag":3408,"props":6465,"children":6466},{"style":3574},[6467],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":6469,"children":6470},{"style":3562},[6471],{"type":3043,"value":5869},{"type":3038,"tag":3408,"props":6473,"children":6474},{"style":3583},[6475],{"type":3043,"value":6476},"(\n",{"type":3038,"tag":3408,"props":6478,"children":6479},{"class":3410,"line":3758},[6480,6484,6489],{"type":3038,"tag":3408,"props":6481,"children":6482},{"style":3574},[6483],{"type":3043,"value":4675},{"type":3038,"tag":3408,"props":6485,"children":6486},{"style":3429},[6487],{"type":3043,"value":6488},"[nuxt-api-shield] IP data cleanup (ipTTL) is disabled or invalid.",{"type":3038,"tag":3408,"props":6490,"children":6491},{"style":3574},[6492],{"type":3043,"value":4702},{"type":3038,"tag":3408,"props":6494,"children":6495},{"class":3410,"line":3767},[6496,6501],{"type":3038,"tag":3408,"props":6497,"children":6498},{"style":3583},[6499],{"type":3043,"value":6500},"      )",{"type":3038,"tag":3408,"props":6502,"children":6503},{"style":3574},[6504],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6506,"children":6507},{"class":3410,"line":3776},[6508,6513,6517,6521,6525,6529,6533,6537,6541,6546,6551,6555,6559,6564,6568],{"type":3038,"tag":3408,"props":6509,"children":6510},{"style":3551},[6511],{"type":3043,"value":6512},"      return",{"type":3038,"tag":3408,"props":6514,"children":6515},{"style":3574},[6516],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":6518,"children":6519},{"style":3583},[6520],{"type":3043,"value":5931},{"type":3038,"tag":3408,"props":6522,"children":6523},{"style":3574},[6524],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":6526,"children":6527},{"style":3574},[6528],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":6530,"children":6531},{"style":3583},[6532],{"type":3043,"value":5649},{"type":3038,"tag":3408,"props":6534,"children":6535},{"style":3574},[6536],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":6538,"children":6539},{"style":3848},[6540],{"type":3043,"value":4208},{"type":3038,"tag":3408,"props":6542,"children":6543},{"style":3574},[6544],{"type":3043,"value":6545}," },",{"type":3038,"tag":3408,"props":6547,"children":6548},{"style":3583},[6549],{"type":3043,"value":6550}," status",{"type":3038,"tag":3408,"props":6552,"children":6553},{"style":3574},[6554],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":6556,"children":6557},{"style":3574},[6558],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":6560,"children":6561},{"style":3429},[6562],{"type":3043,"value":6563},"disabled_or_invalid_ttl",{"type":3038,"tag":3408,"props":6565,"children":6566},{"style":3574},[6567],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6569,"children":6570},{"style":3574},[6571],{"type":3043,"value":5952},{"type":3038,"tag":3408,"props":6573,"children":6574},{"class":3410,"line":3790},[6575],{"type":3038,"tag":3408,"props":6576,"children":6577},{"style":3574},[6578],{"type":3043,"value":4718},{"type":3038,"tag":3408,"props":6580,"children":6581},{"class":3410,"line":3818},[6582,6586,6591,6595,6599,6603,6608],{"type":3038,"tag":3408,"props":6583,"children":6584},{"style":4595},[6585],{"type":3043,"value":5511},{"type":3038,"tag":3408,"props":6587,"children":6588},{"style":3568},[6589],{"type":3043,"value":6590}," ipTTLms",{"type":3038,"tag":3408,"props":6592,"children":6593},{"style":3574},[6594],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":6596,"children":6597},{"style":3568},[6598],{"type":3043,"value":6380},{"type":3038,"tag":3408,"props":6600,"children":6601},{"style":3574},[6602],{"type":3043,"value":4306},{"type":3038,"tag":3408,"props":6604,"children":6605},{"style":3848},[6606],{"type":3043,"value":6607}," 1000",{"type":3038,"tag":3408,"props":6609,"children":6610},{"style":3574},[6611],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6613,"children":6614},{"class":3410,"line":3826},[6615],{"type":3038,"tag":3408,"props":6616,"children":6617},{"emptyLinePlaceholder":1200},[6618],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":6620,"children":6621},{"class":3410,"line":3835},[6622,6626,6631,6635,6639,6643,6647,6651,6655,6659,6664,6668,6672],{"type":3038,"tag":3408,"props":6623,"children":6624},{"style":4595},[6625],{"type":3043,"value":5511},{"type":3038,"tag":3408,"props":6627,"children":6628},{"style":3568},[6629],{"type":3043,"value":6630}," ipKeys",{"type":3038,"tag":3408,"props":6632,"children":6633},{"style":3574},[6634],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":6636,"children":6637},{"style":3551},[6638],{"type":3043,"value":5591},{"type":3038,"tag":3408,"props":6640,"children":6641},{"style":3568},[6642],{"type":3043,"value":5516},{"type":3038,"tag":3408,"props":6644,"children":6645},{"style":3574},[6646],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":6648,"children":6649},{"style":3562},[6650],{"type":3043,"value":5604},{"type":3038,"tag":3408,"props":6652,"children":6653},{"style":3583},[6654],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":6656,"children":6657},{"style":3574},[6658],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6660,"children":6661},{"style":3429},[6662],{"type":3043,"value":6663},"ip:",{"type":3038,"tag":3408,"props":6665,"children":6666},{"style":3574},[6667],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6669,"children":6670},{"style":3583},[6671],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":6673,"children":6674},{"style":3574},[6675],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6677,"children":6678},{"class":3410,"line":3863},[6679,6683,6688,6692,6697,6701,6706,6710],{"type":3038,"tag":3408,"props":6680,"children":6681},{"style":4595},[6682],{"type":3043,"value":5511},{"type":3038,"tag":3408,"props":6684,"children":6685},{"style":3568},[6686],{"type":3043,"value":6687}," currentTime",{"type":3038,"tag":3408,"props":6689,"children":6690},{"style":3574},[6691],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":6693,"children":6694},{"style":3568},[6695],{"type":3043,"value":6696}," Date",{"type":3038,"tag":3408,"props":6698,"children":6699},{"style":3574},[6700],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":6702,"children":6703},{"style":3562},[6704],{"type":3043,"value":6705},"now",{"type":3038,"tag":3408,"props":6707,"children":6708},{"style":3583},[6709],{"type":3043,"value":5499},{"type":3038,"tag":3408,"props":6711,"children":6712},{"style":3574},[6713],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6715,"children":6716},{"class":3410,"line":3880},[6717,6721,6725,6729,6733],{"type":3038,"tag":3408,"props":6718,"children":6719},{"style":4595},[6720],{"type":3043,"value":5644},{"type":3038,"tag":3408,"props":6722,"children":6723},{"style":3568},[6724],{"type":3043,"value":5649},{"type":3038,"tag":3408,"props":6726,"children":6727},{"style":3574},[6728],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":6730,"children":6731},{"style":3848},[6732],{"type":3043,"value":4208},{"type":3038,"tag":3408,"props":6734,"children":6735},{"style":3574},[6736],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6738,"children":6739},{"class":3410,"line":3889},[6740],{"type":3038,"tag":3408,"props":6741,"children":6742},{"emptyLinePlaceholder":1200},[6743],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":6745,"children":6746},{"class":3410,"line":3917},[6747,6751,6755,6759,6763,6767,6771,6775],{"type":3038,"tag":3408,"props":6748,"children":6749},{"style":3551},[6750],{"type":3043,"value":5669},{"type":3038,"tag":3408,"props":6752,"children":6753},{"style":3583},[6754],{"type":3043,"value":5674},{"type":3038,"tag":3408,"props":6756,"children":6757},{"style":4595},[6758],{"type":3043,"value":5679},{"type":3038,"tag":3408,"props":6760,"children":6761},{"style":3568},[6762],{"type":3043,"value":5684},{"type":3038,"tag":3408,"props":6764,"children":6765},{"style":3574},[6766],{"type":3043,"value":5689},{"type":3038,"tag":3408,"props":6768,"children":6769},{"style":3568},[6770],{"type":3043,"value":6630},{"type":3038,"tag":3408,"props":6772,"children":6773},{"style":3583},[6774],{"type":3043,"value":5698},{"type":3038,"tag":3408,"props":6776,"children":6777},{"style":3574},[6778],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":6780,"children":6781},{"class":3410,"line":3925},[6782,6786,6791,6795,6799,6804,6808,6812,6816,6820,6824,6828,6833,6837,6842,6847],{"type":3038,"tag":3408,"props":6783,"children":6784},{"style":4595},[6785],{"type":3043,"value":5710},{"type":3038,"tag":3408,"props":6787,"children":6788},{"style":3568},[6789],{"type":3043,"value":6790}," entry",{"type":3038,"tag":3408,"props":6792,"children":6793},{"style":3574},[6794],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":6796,"children":6797},{"style":3583},[6798],{"type":3043,"value":5674},{"type":3038,"tag":3408,"props":6800,"children":6801},{"style":3551},[6802],{"type":3043,"value":6803},"await",{"type":3038,"tag":3408,"props":6805,"children":6806},{"style":3568},[6807],{"type":3043,"value":5516},{"type":3038,"tag":3408,"props":6809,"children":6810},{"style":3574},[6811],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":6813,"children":6814},{"style":3562},[6815],{"type":3043,"value":5736},{"type":3038,"tag":3408,"props":6817,"children":6818},{"style":3583},[6819],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":6821,"children":6822},{"style":3568},[6823],{"type":3043,"value":5745},{"type":3038,"tag":3408,"props":6825,"children":6826},{"style":3583},[6827],{"type":3043,"value":5784},{"type":3038,"tag":3408,"props":6829,"children":6830},{"style":3551},[6831],{"type":3043,"value":6832},"as",{"type":3038,"tag":3408,"props":6834,"children":6835},{"style":3423},[6836],{"type":3043,"value":6072},{"type":3038,"tag":3408,"props":6838,"children":6839},{"style":3574},[6840],{"type":3043,"value":6841}," |",{"type":3038,"tag":3408,"props":6843,"children":6844},{"style":3423},[6845],{"type":3043,"value":6846}," null",{"type":3038,"tag":3408,"props":6848,"children":6849},{"style":3574},[6850],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":6852,"children":6853},{"class":3410,"line":3934},[6854],{"type":3038,"tag":3408,"props":6855,"children":6856},{"emptyLinePlaceholder":1200},[6857],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":6859,"children":6861},{"class":3410,"line":6860},31,[6862],{"type":3038,"tag":3408,"props":6863,"children":6864},{"style":3414},[6865],{"type":3043,"value":6866},"      \u002F\u002F Check if entry exists and has a numeric 'time' property\n",{"type":3038,"tag":3408,"props":6868,"children":6870},{"class":3410,"line":6869},32,[6871,6875,6879,6884,6889,6894,6898,6902,6906,6911,6915,6920,6924,6928],{"type":3038,"tag":3408,"props":6872,"children":6873},{"style":3551},[6874],{"type":3043,"value":5761},{"type":3038,"tag":3408,"props":6876,"children":6877},{"style":3583},[6878],{"type":3043,"value":5674},{"type":3038,"tag":3408,"props":6880,"children":6881},{"style":3568},[6882],{"type":3043,"value":6883},"entry",{"type":3038,"tag":3408,"props":6885,"children":6886},{"style":3574},[6887],{"type":3043,"value":6888}," &&",{"type":3038,"tag":3408,"props":6890,"children":6891},{"style":3574},[6892],{"type":3043,"value":6893}," typeof",{"type":3038,"tag":3408,"props":6895,"children":6896},{"style":3568},[6897],{"type":3043,"value":6790},{"type":3038,"tag":3408,"props":6899,"children":6900},{"style":3574},[6901],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":6903,"children":6904},{"style":3568},[6905],{"type":3043,"value":6023},{"type":3038,"tag":3408,"props":6907,"children":6908},{"style":3574},[6909],{"type":3043,"value":6910}," ===",{"type":3038,"tag":3408,"props":6912,"children":6913},{"style":3574},[6914],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":6916,"children":6917},{"style":3429},[6918],{"type":3043,"value":6919},"number",{"type":3038,"tag":3408,"props":6921,"children":6922},{"style":3574},[6923],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":6925,"children":6926},{"style":3583},[6927],{"type":3043,"value":5698},{"type":3038,"tag":3408,"props":6929,"children":6930},{"style":3574},[6931],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":6933,"children":6935},{"class":3410,"line":6934},33,[6936,6941,6945,6950,6955,6959,6963,6967,6972,6976,6980],{"type":3038,"tag":3408,"props":6937,"children":6938},{"style":3551},[6939],{"type":3043,"value":6940},"        if",{"type":3038,"tag":3408,"props":6942,"children":6943},{"style":3583},[6944],{"type":3043,"value":5674},{"type":3038,"tag":3408,"props":6946,"children":6947},{"style":3568},[6948],{"type":3043,"value":6949},"currentTime",{"type":3038,"tag":3408,"props":6951,"children":6952},{"style":3574},[6953],{"type":3043,"value":6954}," -",{"type":3038,"tag":3408,"props":6956,"children":6957},{"style":3568},[6958],{"type":3043,"value":6790},{"type":3038,"tag":3408,"props":6960,"children":6961},{"style":3574},[6962],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":6964,"children":6965},{"style":3568},[6966],{"type":3043,"value":6023},{"type":3038,"tag":3408,"props":6968,"children":6969},{"style":3574},[6970],{"type":3043,"value":6971}," >",{"type":3038,"tag":3408,"props":6973,"children":6974},{"style":3568},[6975],{"type":3043,"value":6590},{"type":3038,"tag":3408,"props":6977,"children":6978},{"style":3583},[6979],{"type":3043,"value":5698},{"type":3038,"tag":3408,"props":6981,"children":6982},{"style":3574},[6983],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":6985,"children":6987},{"class":3410,"line":6986},34,[6988,6993,6997,7001,7005,7009,7013,7017],{"type":3038,"tag":3408,"props":6989,"children":6990},{"style":3551},[6991],{"type":3043,"value":6992},"          await",{"type":3038,"tag":3408,"props":6994,"children":6995},{"style":3568},[6996],{"type":3043,"value":5516},{"type":3038,"tag":3408,"props":6998,"children":6999},{"style":3574},[7000],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":7002,"children":7003},{"style":3562},[7004],{"type":3043,"value":5809},{"type":3038,"tag":3408,"props":7006,"children":7007},{"style":3583},[7008],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":7010,"children":7011},{"style":3568},[7012],{"type":3043,"value":5745},{"type":3038,"tag":3408,"props":7014,"children":7015},{"style":3583},[7016],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":7018,"children":7019},{"style":3574},[7020],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":7022,"children":7024},{"class":3410,"line":7023},35,[7025,7030],{"type":3038,"tag":3408,"props":7026,"children":7027},{"style":3568},[7028],{"type":3043,"value":7029},"          cleanedCount",{"type":3038,"tag":3408,"props":7031,"children":7032},{"style":3574},[7033],{"type":3043,"value":5838},{"type":3038,"tag":3408,"props":7035,"children":7037},{"class":3410,"line":7036},36,[7038],{"type":3038,"tag":3408,"props":7039,"children":7040},{"style":3574},[7041],{"type":3043,"value":7042},"        }\n",{"type":3038,"tag":3408,"props":7044,"children":7046},{"class":3410,"line":7045},37,[7047,7052,7057],{"type":3038,"tag":3408,"props":7048,"children":7049},{"style":3574},[7050],{"type":3043,"value":7051},"      }",{"type":3038,"tag":3408,"props":7053,"children":7054},{"style":3551},[7055],{"type":3043,"value":7056}," else",{"type":3038,"tag":3408,"props":7058,"children":7059},{"style":3574},[7060],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":7062,"children":7064},{"class":3410,"line":7063},38,[7065],{"type":3038,"tag":3408,"props":7066,"children":7067},{"style":3414},[7068],{"type":3043,"value":7069},"        \u002F\u002F Clean up entries that are null, not an object, or missing a numeric 'time'\n",{"type":3038,"tag":3408,"props":7071,"children":7073},{"class":3410,"line":7072},39,[7074,7078,7082,7086,7090,7094,7098,7102],{"type":3038,"tag":3408,"props":7075,"children":7076},{"style":3551},[7077],{"type":3043,"value":5796},{"type":3038,"tag":3408,"props":7079,"children":7080},{"style":3568},[7081],{"type":3043,"value":5516},{"type":3038,"tag":3408,"props":7083,"children":7084},{"style":3574},[7085],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":7087,"children":7088},{"style":3562},[7089],{"type":3043,"value":5809},{"type":3038,"tag":3408,"props":7091,"children":7092},{"style":3583},[7093],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":7095,"children":7096},{"style":3568},[7097],{"type":3043,"value":5745},{"type":3038,"tag":3408,"props":7099,"children":7100},{"style":3583},[7101],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":7103,"children":7104},{"style":3574},[7105],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":7107,"children":7109},{"class":3410,"line":7108},40,[7110,7114],{"type":3038,"tag":3408,"props":7111,"children":7112},{"style":3568},[7113],{"type":3043,"value":5833},{"type":3038,"tag":3408,"props":7115,"children":7116},{"style":3574},[7117],{"type":3043,"value":5838},{"type":3038,"tag":3408,"props":7119,"children":7121},{"class":3410,"line":7120},41,[7122],{"type":3038,"tag":3408,"props":7123,"children":7124},{"style":3574},[7125],{"type":3043,"value":4710},{"type":3038,"tag":3408,"props":7127,"children":7129},{"class":3410,"line":7128},42,[7130],{"type":3038,"tag":3408,"props":7131,"children":7132},{"style":3574},[7133],{"type":3043,"value":4718},{"type":3038,"tag":3408,"props":7135,"children":7137},{"class":3410,"line":7136},43,[7138],{"type":3038,"tag":3408,"props":7139,"children":7140},{"emptyLinePlaceholder":1200},[7141],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":7143,"children":7145},{"class":3410,"line":7144},44,[7146,7150,7154,7158],{"type":3038,"tag":3408,"props":7147,"children":7148},{"style":3568},[7149],{"type":3043,"value":5860},{"type":3038,"tag":3408,"props":7151,"children":7152},{"style":3574},[7153],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":7155,"children":7156},{"style":3562},[7157],{"type":3043,"value":5869},{"type":3038,"tag":3408,"props":7159,"children":7160},{"style":3583},[7161],{"type":3043,"value":6476},{"type":3038,"tag":3408,"props":7163,"children":7165},{"class":3410,"line":7164},45,[7166,7171,7175,7179,7183,7187,7192],{"type":3038,"tag":3408,"props":7167,"children":7168},{"style":3574},[7169],{"type":3043,"value":7170},"      `",{"type":3038,"tag":3408,"props":7172,"children":7173},{"style":3429},[7174],{"type":3043,"value":5883},{"type":3038,"tag":3408,"props":7176,"children":7177},{"style":3574},[7178],{"type":3043,"value":5888},{"type":3038,"tag":3408,"props":7180,"children":7181},{"style":3568},[7182],{"type":3043,"value":5893},{"type":3038,"tag":3408,"props":7184,"children":7185},{"style":3574},[7186],{"type":3043,"value":3940},{"type":3038,"tag":3408,"props":7188,"children":7189},{"style":3429},[7190],{"type":3043,"value":7191}," old\u002Fmalformed IP data entries.",{"type":3038,"tag":3408,"props":7193,"children":7194},{"style":3574},[7195],{"type":3043,"value":7196},"`\n",{"type":3038,"tag":3408,"props":7198,"children":7200},{"class":3410,"line":7199},46,[7201,7206],{"type":3038,"tag":3408,"props":7202,"children":7203},{"style":3583},[7204],{"type":3043,"value":7205},"    )",{"type":3038,"tag":3408,"props":7207,"children":7208},{"style":3574},[7209],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":7211,"children":7213},{"class":3410,"line":7212},47,[7214,7218,7222,7226,7230,7234,7238,7242],{"type":3038,"tag":3408,"props":7215,"children":7216},{"style":3551},[7217],{"type":3043,"value":5922},{"type":3038,"tag":3408,"props":7219,"children":7220},{"style":3574},[7221],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":7223,"children":7224},{"style":3583},[7225],{"type":3043,"value":5931},{"type":3038,"tag":3408,"props":7227,"children":7228},{"style":3574},[7229],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7231,"children":7232},{"style":3574},[7233],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":7235,"children":7236},{"style":3568},[7237],{"type":3043,"value":5649},{"type":3038,"tag":3408,"props":7239,"children":7240},{"style":3574},[7241],{"type":3043,"value":5337},{"type":3038,"tag":3408,"props":7243,"children":7244},{"style":3574},[7245],{"type":3043,"value":5952},{"type":3038,"tag":3408,"props":7247,"children":7249},{"class":3410,"line":7248},48,[7250],{"type":3038,"tag":3408,"props":7251,"children":7252},{"style":3574},[7253],{"type":3043,"value":3931},{"type":3038,"tag":3408,"props":7255,"children":7257},{"class":3410,"line":7256},49,[7258,7262,7266],{"type":3038,"tag":3408,"props":7259,"children":7260},{"style":3574},[7261],{"type":3043,"value":3940},{"type":3038,"tag":3408,"props":7263,"children":7264},{"style":3568},[7265],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":7267,"children":7268},{"style":3574},[7269],{"type":3043,"value":3950},{"type":3038,"tag":3045,"props":7271,"children":7272},{},[7273,7275,7280,7282,7287,7289,7294,7295,7301,7303,7308],{"type":3043,"value":7274},"Configure ",{"type":3038,"tag":3195,"props":7276,"children":7278},{"className":7277},[],[7279],{"type":3043,"value":4998},{"type":3043,"value":7281}," under ",{"type":3038,"tag":3195,"props":7283,"children":7285},{"className":7284},[],[7286],{"type":3043,"value":3966},{"type":3043,"value":7288}," if you want a TTL other than the default. Setting ",{"type":3038,"tag":3195,"props":7290,"children":7292},{"className":7291},[],[7293],{"type":3043,"value":4998},{"type":3043,"value":4551},{"type":3038,"tag":3195,"props":7296,"children":7298},{"className":7297},[],[7299],{"type":3043,"value":7300},"0",{"type":3043,"value":7302}," (or any non-positive value) makes the bundled ",{"type":3038,"tag":3195,"props":7304,"children":7306},{"className":7305},[],[7307],{"type":3043,"value":3300},{"type":3043,"value":7309}," task skip IP cleanup (it logs and exits).",{"type":3038,"tag":3045,"props":7311,"children":7312},{},[7313,7315,7321,7323,7328,7330,7335],{"type":3043,"value":7314},"If you add your own task file with the same ",{"type":3038,"tag":3195,"props":7316,"children":7318},{"className":7317},[],[7319],{"type":3043,"value":7320},"meta.name",{"type":3043,"value":7322}," as a bundled task (",{"type":3038,"tag":3195,"props":7324,"children":7326},{"className":7325},[],[7327],{"type":3043,"value":3292},{"type":3043,"value":7329}," or ",{"type":3038,"tag":3195,"props":7331,"children":7333},{"className":7332},[],[7334],{"type":3043,"value":3300},{"type":3043,"value":7336},"), Nitro may prefer your project file over the module—avoid duplicate names unless you intend to override.",{"type":3038,"tag":3121,"props":7338,"children":7340},{"id":7339},"production-deployment",[7341],{"type":3043,"value":7342},"Production Deployment",{"type":3038,"tag":3384,"props":7344,"children":7346},{"id":7345},"use-redis-as-the-storage-driver",[7347],{"type":3043,"value":7348},"Use Redis as the storage driver",{"type":3038,"tag":3045,"props":7350,"children":7351},{},[7352,7354,7359,7361,7366,7367,7373],{"type":3043,"value":7353},"For production deployments — especially with multiple server instances or significant traffic — ",{"type":3038,"tag":3133,"props":7355,"children":7356},{},[7357],{"type":3043,"value":7358},"Redis is the recommended storage driver",{"type":3043,"value":7360},". The ",{"type":3038,"tag":3195,"props":7362,"children":7364},{"className":7363},[],[7365],{"type":3043,"value":4697},{"type":3043,"value":3294},{"type":3038,"tag":3195,"props":7368,"children":7370},{"className":7369},[],[7371],{"type":3043,"value":7372},"fs",{"type":3043,"value":7374}," drivers have important limitations:",{"type":3038,"tag":7376,"props":7377,"children":7378},"table",{},[7379,7413],{"type":3038,"tag":7380,"props":7381,"children":7382},"thead",{},[7383],{"type":3038,"tag":7384,"props":7385,"children":7386},"tr",{},[7387,7393,7408],{"type":3038,"tag":7388,"props":7389,"children":7390},"th",{},[7391],{"type":3043,"value":7392},"Area",{"type":3038,"tag":7388,"props":7394,"children":7395},{},[7396,7401,7403],{"type":3038,"tag":3195,"props":7397,"children":7399},{"className":7398},[],[7400],{"type":3043,"value":4697},{"type":3043,"value":7402}," \u002F ",{"type":3038,"tag":3195,"props":7404,"children":7406},{"className":7405},[],[7407],{"type":3043,"value":7372},{"type":3038,"tag":7388,"props":7409,"children":7410},{},[7411],{"type":3043,"value":7412},"Redis",{"type":3038,"tag":7414,"props":7415,"children":7416},"tbody",{},[7417,7439,7460],{"type":3038,"tag":7384,"props":7418,"children":7419},{},[7420,7429,7434],{"type":3038,"tag":7421,"props":7422,"children":7423},"td",{},[7424],{"type":3038,"tag":3133,"props":7425,"children":7426},{},[7427],{"type":3043,"value":7428},"Multi-instance",{"type":3038,"tag":7421,"props":7430,"children":7431},{},[7432],{"type":3043,"value":7433},"Each process has its own isolated state. Rate limits reset per instance, allowing bypass.",{"type":3038,"tag":7421,"props":7435,"children":7436},{},[7437],{"type":3043,"value":7438},"Shared state across all instances.",{"type":3038,"tag":7384,"props":7440,"children":7441},{},[7442,7450,7455],{"type":3038,"tag":7421,"props":7443,"children":7444},{},[7445],{"type":3038,"tag":3133,"props":7446,"children":7447},{},[7448],{"type":3043,"value":7449},"Atomic operations",{"type":3038,"tag":7421,"props":7451,"children":7452},{},[7453],{"type":3043,"value":7454},"Read → increment → write is not atomic. Concurrent requests can both read the same count and exceed the limit simultaneously.",{"type":3038,"tag":7421,"props":7456,"children":7457},{},[7458],{"type":3043,"value":7459},"Single-threaded — reads and writes are naturally atomic. No race conditions.",{"type":3038,"tag":7384,"props":7461,"children":7462},{},[7463,7471,7497],{"type":3038,"tag":7421,"props":7464,"children":7465},{},[7466],{"type":3038,"tag":3133,"props":7467,"children":7468},{},[7469],{"type":3043,"value":7470},"Cleanup",{"type":3038,"tag":7421,"props":7472,"children":7473},{},[7474,7476,7481,7482,7487,7489,7495],{"type":3043,"value":7475},"Cleanup tasks (",{"type":3038,"tag":3195,"props":7477,"children":7479},{"className":7478},[],[7480],{"type":3043,"value":3292},{"type":3043,"value":3360},{"type":3038,"tag":3195,"props":7483,"children":7485},{"className":7484},[],[7486],{"type":3043,"value":3300},{"type":3043,"value":7488},") must scan all keys with ",{"type":3038,"tag":3195,"props":7490,"children":7492},{"className":7491},[],[7493],{"type":3043,"value":7494},"getKeys()",{"type":3043,"value":7496},". At scale this blocks the event loop.",{"type":3038,"tag":7421,"props":7498,"children":7499},{},[7500,7502,7508,7509,7515],{"type":3043,"value":7501},"Use ",{"type":3038,"tag":3195,"props":7503,"children":7505},{"className":7504},[],[7506],{"type":3043,"value":7507},"EXPIRE",{"type":3043,"value":7329},{"type":3038,"tag":3195,"props":7510,"children":7512},{"className":7511},[],[7513],{"type":3043,"value":7514},"TTL",{"type":3043,"value":7516}," natively — expired keys are reclaimed automatically without scanning.",{"type":3038,"tag":3045,"props":7518,"children":7519},{},[7520,7522,7527,7529,7534],{"type":3043,"value":7521},"To use Redis, configure the ",{"type":3038,"tag":3195,"props":7523,"children":7525},{"className":7524},[],[7526],{"type":3043,"value":4566},{"type":3043,"value":7528}," storage with the ",{"type":3038,"tag":3195,"props":7530,"children":7532},{"className":7531},[],[7533],{"type":3043,"value":4848},{"type":3043,"value":7535}," driver:",{"type":3038,"tag":3398,"props":7537,"children":7538},{"className":4571,"code":4740,"language":4573,"meta":2982,"style":2982},[7539],{"type":3038,"tag":3195,"props":7540,"children":7541},{"__ignoreMap":2982},[7542,7549,7572,7595,7618,7653,7688,7711,7718,7725,7732],{"type":3038,"tag":3408,"props":7543,"children":7544},{"class":3410,"line":3010},[7545],{"type":3038,"tag":3408,"props":7546,"children":7547},{"style":3574},[7548],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":7550,"children":7551},{"class":3410,"line":3006},[7552,7556,7560,7564,7568],{"type":3038,"tag":3408,"props":7553,"children":7554},{"style":3574},[7555],{"type":3043,"value":4592},{"type":3038,"tag":3408,"props":7557,"children":7558},{"style":4595},[7559],{"type":3043,"value":4598},{"type":3038,"tag":3408,"props":7561,"children":7562},{"style":3574},[7563],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7565,"children":7566},{"style":3574},[7567],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7569,"children":7570},{"style":3574},[7571],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":7573,"children":7574},{"class":3410,"line":3440},[7575,7579,7583,7587,7591],{"type":3038,"tag":3408,"props":7576,"children":7577},{"style":3574},[7578],{"type":3043,"value":4618},{"type":3038,"tag":3408,"props":7580,"children":7581},{"style":3423},[7582],{"type":3043,"value":4623},{"type":3038,"tag":3408,"props":7584,"children":7585},{"style":3574},[7586],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7588,"children":7589},{"style":3574},[7590],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7592,"children":7593},{"style":3574},[7594],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":7596,"children":7597},{"class":3410,"line":3449},[7598,7602,7606,7610,7614],{"type":3038,"tag":3408,"props":7599,"children":7600},{"style":3574},[7601],{"type":3043,"value":4643},{"type":3038,"tag":3408,"props":7603,"children":7604},{"style":3848},[7605],{"type":3043,"value":4566},{"type":3038,"tag":3408,"props":7607,"children":7608},{"style":3574},[7609],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7611,"children":7612},{"style":3574},[7613],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7615,"children":7616},{"style":3574},[7617],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":7619,"children":7620},{"class":3410,"line":3002},[7621,7625,7629,7633,7637,7641,7645,7649],{"type":3038,"tag":3408,"props":7622,"children":7623},{"style":3574},[7624],{"type":3043,"value":4675},{"type":3038,"tag":3408,"props":7626,"children":7627},{"style":3583},[7628],{"type":3043,"value":4680},{"type":3038,"tag":3408,"props":7630,"children":7631},{"style":3574},[7632],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7634,"children":7635},{"style":3574},[7636],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7638,"children":7639},{"style":3574},[7640],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":7642,"children":7643},{"style":3429},[7644],{"type":3043,"value":4848},{"type":3038,"tag":3408,"props":7646,"children":7647},{"style":3574},[7648],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7650,"children":7651},{"style":3574},[7652],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":7654,"children":7655},{"class":3410,"line":3474},[7656,7660,7664,7668,7672,7676,7680,7684],{"type":3038,"tag":3408,"props":7657,"children":7658},{"style":3574},[7659],{"type":3043,"value":4675},{"type":3038,"tag":3408,"props":7661,"children":7662},{"style":3583},[7663],{"type":3043,"value":4868},{"type":3038,"tag":3408,"props":7665,"children":7666},{"style":3574},[7667],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7669,"children":7670},{"style":3574},[7671],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7673,"children":7674},{"style":3574},[7675],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":7677,"children":7678},{"style":3429},[7679],{"type":3043,"value":4885},{"type":3038,"tag":3408,"props":7681,"children":7682},{"style":3574},[7683],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7685,"children":7686},{"style":3574},[7687],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":7689,"children":7690},{"class":3410,"line":3482},[7691,7695,7699,7703,7707],{"type":3038,"tag":3408,"props":7692,"children":7693},{"style":3574},[7694],{"type":3043,"value":4675},{"type":3038,"tag":3408,"props":7696,"children":7697},{"style":3583},[7698],{"type":3043,"value":4905},{"type":3038,"tag":3408,"props":7700,"children":7701},{"style":3574},[7702],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7704,"children":7705},{"style":3574},[7706],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7708,"children":7709},{"style":3848},[7710],{"type":3043,"value":4918},{"type":3038,"tag":3408,"props":7712,"children":7713},{"class":3410,"line":3491},[7714],{"type":3038,"tag":3408,"props":7715,"children":7716},{"style":3574},[7717],{"type":3043,"value":4710},{"type":3038,"tag":3408,"props":7719,"children":7720},{"class":3410,"line":3027},[7721],{"type":3038,"tag":3408,"props":7722,"children":7723},{"style":3574},[7724],{"type":3043,"value":4718},{"type":3038,"tag":3408,"props":7726,"children":7727},{"class":3410,"line":3687},[7728],{"type":3038,"tag":3408,"props":7729,"children":7730},{"style":3574},[7731],{"type":3043,"value":4381},{"type":3038,"tag":3408,"props":7733,"children":7734},{"class":3410,"line":3696},[7735],{"type":3038,"tag":3408,"props":7736,"children":7737},{"style":3574},[7738],{"type":3043,"value":4389},{"type":3038,"tag":3045,"props":7740,"children":7741},{},[7742,7744,7751],{"type":3043,"value":7743},"See the ",{"type":3038,"tag":3049,"props":7745,"children":7748},{"href":7746,"rel":7747},"https:\u002F\u002Funstorage.unjs.io\u002Fdrivers\u002Fredis",[3053],[7749],{"type":3043,"value":7750},"unstorage Redis driver docs",{"type":3043,"value":7752}," for all available options.",{"type":3038,"tag":3384,"props":7754,"children":7756},{"id":7755},"when-memory-fs-is-acceptable",[7757,7759,7764,7765,7770],{"type":3043,"value":7758},"When ",{"type":3038,"tag":3195,"props":7760,"children":7762},{"className":7761},[],[7763],{"type":3043,"value":4697},{"type":3043,"value":7402},{"type":3038,"tag":3195,"props":7766,"children":7768},{"className":7767},[],[7769],{"type":3043,"value":7372},{"type":3043,"value":7771}," is acceptable",{"type":3038,"tag":3045,"props":7773,"children":7774},{},[7775,7776,7781,7782,7787],{"type":3043,"value":4408},{"type":3038,"tag":3195,"props":7777,"children":7779},{"className":7778},[],[7780],{"type":3043,"value":4697},{"type":3043,"value":3294},{"type":3038,"tag":3195,"props":7783,"children":7785},{"className":7784},[],[7786],{"type":3043,"value":7372},{"type":3043,"value":7788}," drivers are fine for:",{"type":3038,"tag":3095,"props":7790,"children":7791},{},[7792,7797,7802],{"type":3038,"tag":3099,"props":7793,"children":7794},{},[7795],{"type":3043,"value":7796},"Single-instance deployments",{"type":3038,"tag":3099,"props":7798,"children":7799},{},[7800],{"type":3043,"value":7801},"Development environments",{"type":3038,"tag":3099,"props":7803,"children":7804},{},[7805],{"type":3043,"value":7806},"Low-traffic applications where occasional race conditions are acceptable",{"type":3038,"tag":3045,"props":7808,"children":7809},{},[7810],{"type":3043,"value":7811},"For everything else, use Redis.",{"type":3038,"tag":3121,"props":7813,"children":7815},{"id":7814},"fail2ban-integration",[7816],{"type":3043,"value":7817},"Fail2ban Integration",{"type":3038,"tag":3045,"props":7819,"children":7820},{},[7821,7823,7828,7830,7836],{"type":3043,"value":7822},"When a user exceeds the rate limit and gets banned, ",{"type":3038,"tag":3195,"props":7824,"children":7826},{"className":7825},[],[7827],{"type":3043,"value":2979},{"type":3043,"value":7829}," can write ban events to the log file in a ",{"type":3038,"tag":3195,"props":7831,"children":7833},{"className":7832},[],[7834],{"type":3043,"value":7835},"fail2ban",{"type":3043,"value":7837},"-compatible format. You can then configure fail2ban to watch these logs and automatically block the IP at the firewall level.",{"type":3038,"tag":3384,"props":7839,"children":7841},{"id":7840},"setup",[7842],{"type":3043,"value":7843},"Setup",{"type":3038,"tag":3045,"props":7845,"children":7846},{},[7847,7849,7855,7856,7861,7863,7869],{"type":3043,"value":7848},"Enable fail2ban logging by setting ",{"type":3038,"tag":3195,"props":7850,"children":7852},{"className":7851},[],[7853],{"type":3043,"value":7854},"log.fail2ban",{"type":3043,"value":4551},{"type":3038,"tag":3195,"props":7857,"children":7859},{"className":7858},[],[7860],{"type":3043,"value":4446},{"type":3043,"value":7862}," and configuring the ",{"type":3038,"tag":3195,"props":7864,"children":7866},{"className":7865},[],[7867],{"type":3043,"value":7868},"log.path",{"type":3043,"value":3591},{"type":3038,"tag":3398,"props":7871,"children":7873},{"className":3539,"code":7872,"language":3541,"meta":2982,"style":2982},"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",[7874],{"type":3038,"tag":3195,"props":7875,"children":7876},{"__ignoreMap":2982},[7877,7900,7935,7950,7966,8000,8026,8051,8058,8065],{"type":3038,"tag":3408,"props":7878,"children":7879},{"class":3410,"line":3010},[7880,7884,7888,7892,7896],{"type":3038,"tag":3408,"props":7881,"children":7882},{"style":3551},[7883],{"type":3043,"value":3554},{"type":3038,"tag":3408,"props":7885,"children":7886},{"style":3551},[7887],{"type":3043,"value":3559},{"type":3038,"tag":3408,"props":7889,"children":7890},{"style":3562},[7891],{"type":3043,"value":3565},{"type":3038,"tag":3408,"props":7893,"children":7894},{"style":3568},[7895],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":7897,"children":7898},{"style":3574},[7899],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":7901,"children":7902},{"class":3410,"line":3006},[7903,7907,7911,7915,7919,7923,7927,7931],{"type":3038,"tag":3408,"props":7904,"children":7905},{"style":3583},[7906],{"type":3043,"value":3586},{"type":3038,"tag":3408,"props":7908,"children":7909},{"style":3574},[7910],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7912,"children":7913},{"style":3568},[7914],{"type":3043,"value":3596},{"type":3038,"tag":3408,"props":7916,"children":7917},{"style":3574},[7918],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7920,"children":7921},{"style":3429},[7922],{"type":3043,"value":2979},{"type":3038,"tag":3408,"props":7924,"children":7925},{"style":3574},[7926],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7928,"children":7929},{"style":3568},[7930],{"type":3043,"value":3614},{"type":3038,"tag":3408,"props":7932,"children":7933},{"style":3574},[7934],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":7936,"children":7937},{"class":3410,"line":3440},[7938,7942,7946],{"type":3038,"tag":3408,"props":7939,"children":7940},{"style":3583},[7941],{"type":3043,"value":3627},{"type":3038,"tag":3408,"props":7943,"children":7944},{"style":3574},[7945],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7947,"children":7948},{"style":3574},[7949],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":7951,"children":7952},{"class":3410,"line":3449},[7953,7958,7962],{"type":3038,"tag":3408,"props":7954,"children":7955},{"style":3583},[7956],{"type":3043,"value":7957},"    log",{"type":3038,"tag":3408,"props":7959,"children":7960},{"style":3574},[7961],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7963,"children":7964},{"style":3574},[7965],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":7967,"children":7968},{"class":3410,"line":3002},[7969,7974,7978,7982,7987,7991,7995],{"type":3038,"tag":3408,"props":7970,"children":7971},{"style":3583},[7972],{"type":3043,"value":7973},"      path",{"type":3038,"tag":3408,"props":7975,"children":7976},{"style":3574},[7977],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":7979,"children":7980},{"style":3574},[7981],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":7983,"children":7984},{"style":3429},[7985],{"type":3043,"value":7986},"\u002Fvar\u002Flog\u002Fnuxt-api-shield",{"type":3038,"tag":3408,"props":7988,"children":7989},{"style":3574},[7990],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":7992,"children":7993},{"style":3574},[7994],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":7996,"children":7997},{"style":3414},[7998],{"type":3043,"value":7999}," \u002F\u002F required — must be set\n",{"type":3038,"tag":3408,"props":8001,"children":8002},{"class":3410,"line":3474},[8003,8008,8012,8017,8021],{"type":3038,"tag":3408,"props":8004,"children":8005},{"style":3583},[8006],{"type":3043,"value":8007},"      attempts",{"type":3038,"tag":3408,"props":8009,"children":8010},{"style":3574},[8011],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":8013,"children":8014},{"style":3848},[8015],{"type":3043,"value":8016}," 1",{"type":3038,"tag":3408,"props":8018,"children":8019},{"style":3574},[8020],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":8022,"children":8023},{"style":3414},[8024],{"type":3043,"value":8025},"                       \u002F\u002F optional — threshold for regular request logging\n",{"type":3038,"tag":3408,"props":8027,"children":8028},{"class":3410,"line":3482},[8029,8034,8038,8042,8046],{"type":3038,"tag":3408,"props":8030,"children":8031},{"style":3583},[8032],{"type":3043,"value":8033},"      fail2ban",{"type":3038,"tag":3408,"props":8035,"children":8036},{"style":3574},[8037],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":8039,"children":8040},{"style":3902},[8041],{"type":3043,"value":4095},{"type":3038,"tag":3408,"props":8043,"children":8044},{"style":3574},[8045],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":8047,"children":8048},{"style":3414},[8049],{"type":3043,"value":8050},"                     \u002F\u002F enable fail2ban format\n",{"type":3038,"tag":3408,"props":8052,"children":8053},{"class":3410,"line":3491},[8054],{"type":3038,"tag":3408,"props":8055,"children":8056},{"style":3574},[8057],{"type":3043,"value":3684},{"type":3038,"tag":3408,"props":8059,"children":8060},{"class":3410,"line":3027},[8061],{"type":3038,"tag":3408,"props":8062,"children":8063},{"style":3574},[8064],{"type":3043,"value":3931},{"type":3038,"tag":3408,"props":8066,"children":8067},{"class":3410,"line":3687},[8068,8072],{"type":3038,"tag":3408,"props":8069,"children":8070},{"style":3574},[8071],{"type":3043,"value":3940},{"type":3038,"tag":3408,"props":8073,"children":8074},{"style":3568},[8075],{"type":3043,"value":8076},")\n",{"type":3038,"tag":3045,"props":8078,"children":8079},{},[8080],{"type":3043,"value":8081},"When enabled, every ban event writes a line like:",{"type":3038,"tag":3398,"props":8083,"children":8087},{"className":8084,"code":8086,"language":3043},[8085],"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",[8088],{"type":3038,"tag":3195,"props":8089,"children":8090},{"__ignoreMap":2982},[8091],{"type":3043,"value":8086},{"type":3038,"tag":3384,"props":8093,"children":8095},{"id":8094},"fail2ban-filter-configuration",[8096],{"type":3043,"value":8097},"Fail2ban filter configuration",{"type":3038,"tag":3045,"props":8099,"children":8100},{},[8101,8103,8109],{"type":3043,"value":8102},"Create ",{"type":3038,"tag":3195,"props":8104,"children":8106},{"className":8105},[],[8107],{"type":3043,"value":8108},"\u002Fetc\u002Ffail2ban\u002Ffilter.d\u002Fnuxt-api-shield.conf",{"type":3043,"value":3591},{"type":3038,"tag":3398,"props":8111,"children":8115},{"className":8112,"code":8113,"language":8114,"meta":2982,"style":2982},"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",[8116],{"type":3038,"tag":3195,"props":8117,"children":8118},{"__ignoreMap":2982},[8119,8127],{"type":3038,"tag":3408,"props":8120,"children":8121},{"class":3410,"line":3010},[8122],{"type":3038,"tag":3408,"props":8123,"children":8124},{"style":3574},[8125],{"type":3043,"value":8126},"[Definition]\n",{"type":3038,"tag":3408,"props":8128,"children":8129},{"class":3410,"line":3006},[8130,8135,8139],{"type":3038,"tag":3408,"props":8131,"children":8132},{"style":3583},[8133],{"type":3043,"value":8134},"failregex",{"type":3038,"tag":3408,"props":8136,"children":8137},{"style":3574},[8138],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":8140,"children":8141},{"style":3568},[8142],{"type":3043,"value":8143}," ^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2},\\d{3} nuxt-api-shield ban \u003CHOST>\n",{"type":3038,"tag":3384,"props":8145,"children":8147},{"id":8146},"jail-configuration",[8148],{"type":3043,"value":8149},"Jail configuration",{"type":3038,"tag":3045,"props":8151,"children":8152},{},[8153,8155,8161],{"type":3043,"value":8154},"Add a jail entry in ",{"type":3038,"tag":3195,"props":8156,"children":8158},{"className":8157},[],[8159],{"type":3043,"value":8160},"\u002Fetc\u002Ffail2ban\u002Fjail.local",{"type":3043,"value":3591},{"type":3038,"tag":3398,"props":8163,"children":8165},{"className":8112,"code":8164,"language":8114,"meta":2982,"style":2982},"[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",[8166],{"type":3038,"tag":3195,"props":8167,"children":8168},{"__ignoreMap":2982},[8169,8177,8194,8211,8228,8245,8262,8279,8295],{"type":3038,"tag":3408,"props":8170,"children":8171},{"class":3410,"line":3010},[8172],{"type":3038,"tag":3408,"props":8173,"children":8174},{"style":3574},[8175],{"type":3043,"value":8176},"[nuxt-api-shield]\n",{"type":3038,"tag":3408,"props":8178,"children":8179},{"class":3410,"line":3006},[8180,8185,8190],{"type":3038,"tag":3408,"props":8181,"children":8182},{"style":3583},[8183],{"type":3043,"value":8184},"enabled",{"type":3038,"tag":3408,"props":8186,"children":8187},{"style":3574},[8188],{"type":3043,"value":8189},"  =",{"type":3038,"tag":3408,"props":8191,"children":8192},{"style":3568},[8193],{"type":3043,"value":5109},{"type":3038,"tag":3408,"props":8195,"children":8196},{"class":3410,"line":3440},[8197,8202,8207],{"type":3038,"tag":3408,"props":8198,"children":8199},{"style":3583},[8200],{"type":3043,"value":8201},"filter",{"type":3038,"tag":3408,"props":8203,"children":8204},{"style":3574},[8205],{"type":3043,"value":8206},"   =",{"type":3038,"tag":3408,"props":8208,"children":8209},{"style":3568},[8210],{"type":3043,"value":3437},{"type":3038,"tag":3408,"props":8212,"children":8213},{"class":3410,"line":3449},[8214,8219,8223],{"type":3038,"tag":3408,"props":8215,"children":8216},{"style":3583},[8217],{"type":3043,"value":8218},"logpath",{"type":3038,"tag":3408,"props":8220,"children":8221},{"style":3574},[8222],{"type":3043,"value":8189},{"type":3038,"tag":3408,"props":8224,"children":8225},{"style":3568},[8226],{"type":3043,"value":8227}," \u002Fvar\u002Flog\u002Fnuxt-api-shield\u002Fshield-*.log\n",{"type":3038,"tag":3408,"props":8229,"children":8230},{"class":3410,"line":3002},[8231,8235,8240],{"type":3038,"tag":3408,"props":8232,"children":8233},{"style":3583},[8234],{"type":3043,"value":4905},{"type":3038,"tag":3408,"props":8236,"children":8237},{"style":3574},[8238],{"type":3043,"value":8239},"     =",{"type":3038,"tag":3408,"props":8241,"children":8242},{"style":3568},[8243],{"type":3043,"value":8244}," http,https\n",{"type":3038,"tag":3408,"props":8246,"children":8247},{"class":3410,"line":3474},[8248,8253,8257],{"type":3038,"tag":3408,"props":8249,"children":8250},{"style":3583},[8251],{"type":3043,"value":8252},"banaction",{"type":3038,"tag":3408,"props":8254,"children":8255},{"style":3574},[8256],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":8258,"children":8259},{"style":3568},[8260],{"type":3043,"value":8261}," iptables-multiport\n",{"type":3038,"tag":3408,"props":8263,"children":8264},{"class":3410,"line":3482},[8265,8270,8274],{"type":3038,"tag":3408,"props":8266,"children":8267},{"style":3583},[8268],{"type":3043,"value":8269},"maxretry",{"type":3038,"tag":3408,"props":8271,"children":8272},{"style":3574},[8273],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":8275,"children":8276},{"style":3568},[8277],{"type":3043,"value":8278}," 1\n",{"type":3038,"tag":3408,"props":8280,"children":8281},{"class":3410,"line":3491},[8282,8287,8291],{"type":3038,"tag":3408,"props":8283,"children":8284},{"style":3583},[8285],{"type":3043,"value":8286},"findtime",{"type":3038,"tag":3408,"props":8288,"children":8289},{"style":3574},[8290],{"type":3043,"value":5521},{"type":3038,"tag":3408,"props":8292,"children":8293},{"style":3568},[8294],{"type":3043,"value":8278},{"type":3038,"tag":3408,"props":8296,"children":8297},{"class":3410,"line":3027},[8298,8303,8307],{"type":3038,"tag":3408,"props":8299,"children":8300},{"style":3583},[8301],{"type":3043,"value":8302},"bantime",{"type":3038,"tag":3408,"props":8304,"children":8305},{"style":3574},[8306],{"type":3043,"value":8189},{"type":3038,"tag":3408,"props":8308,"children":8309},{"style":3568},[8310],{"type":3043,"value":8311}," 3600\n",{"type":3038,"tag":3045,"props":8313,"children":8314},{},[8315,8317,8322,8324,8330,8332,8338,8339,8345,8347,8352],{"type":3043,"value":8316},"Since ",{"type":3038,"tag":3195,"props":8318,"children":8320},{"className":8319},[],[8321],{"type":3043,"value":2979},{"type":3043,"value":8323}," already applies its own ban logic (configurable via ",{"type":3038,"tag":3195,"props":8325,"children":8327},{"className":8326},[],[8328],{"type":3043,"value":8329},"limit.ban",{"type":3043,"value":8331},"), set ",{"type":3038,"tag":3195,"props":8333,"children":8335},{"className":8334},[],[8336],{"type":3043,"value":8337},"maxretry = 1",{"type":3043,"value":3294},{"type":3038,"tag":3195,"props":8340,"children":8342},{"className":8341},[],[8343],{"type":3043,"value":8344},"findtime = 1",{"type":3043,"value":8346}," so fail2ban acts immediately on each ban log entry. Adjust ",{"type":3038,"tag":3195,"props":8348,"children":8350},{"className":8349},[],[8351],{"type":3043,"value":8302},{"type":3043,"value":8353}," to match or extend your module-level ban duration.",{"type":3038,"tag":3045,"props":8355,"children":8356},{},[8357],{"type":3043,"value":8358},"Restart fail2ban after adding the config:",{"type":3038,"tag":3398,"props":8360,"children":8362},{"className":3400,"code":8361,"language":3402,"meta":2982,"style":2982},"sudo systemctl restart fail2ban\n",[8363],{"type":3038,"tag":3195,"props":8364,"children":8365},{"__ignoreMap":2982},[8366],{"type":3038,"tag":3408,"props":8367,"children":8368},{"class":3410,"line":3010},[8369,8374,8379,8384],{"type":3038,"tag":3408,"props":8370,"children":8371},{"style":3423},[8372],{"type":3043,"value":8373},"sudo",{"type":3038,"tag":3408,"props":8375,"children":8376},{"style":3429},[8377],{"type":3043,"value":8378}," systemctl",{"type":3038,"tag":3408,"props":8380,"children":8381},{"style":3429},[8382],{"type":3043,"value":8383}," restart",{"type":3038,"tag":3408,"props":8385,"children":8386},{"style":3429},[8387],{"type":3043,"value":8388}," fail2ban\n",{"type":3038,"tag":8390,"props":8391,"children":8392},"blockquote",{},[8393],{"type":3038,"tag":3045,"props":8394,"children":8395},{},[8396,8401,8403,8408],{"type":3038,"tag":3133,"props":8397,"children":8398},{},[8399],{"type":3043,"value":8400},"Note:",{"type":3043,"value":8402}," The ",{"type":3038,"tag":3195,"props":8404,"children":8406},{"className":8405},[],[8407],{"type":3043,"value":7868},{"type":3043,"value":8409}," directory must be readable by the fail2ban service. Ensure permissions are set accordingly.",{"type":3038,"tag":3121,"props":8411,"children":8413},{"id":8412},"typescript-types",[8414],{"type":3043,"value":8415},"TypeScript Types",{"type":3038,"tag":3045,"props":8417,"children":8418},{},[8419],{"type":3043,"value":8420},"The module exports TypeScript types that you can use in your application:",{"type":3038,"tag":3384,"props":8422,"children":8424},{"id":8423},"ratelimit-type",[8425,8431],{"type":3038,"tag":3195,"props":8426,"children":8428},{"className":8427},[],[8429],{"type":3043,"value":8430},"RateLimit",{"type":3043,"value":8432}," Type",{"type":3038,"tag":3045,"props":8434,"children":8435},{},[8436,8437,8442],{"type":3043,"value":4408},{"type":3038,"tag":3195,"props":8438,"children":8440},{"className":8439},[],[8441],{"type":3043,"value":8430},{"type":3043,"value":8443}," type represents the structure of rate limit data stored for each IP address:",{"type":3038,"tag":3398,"props":8445,"children":8447},{"className":5308,"code":8446,"language":5310,"meta":2982,"style":2982},"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",[8448],{"type":3038,"tag":3195,"props":8449,"children":8450},{"__ignoreMap":2982},[8451,8494,8501,8509,8517,8530,8543],{"type":3038,"tag":3408,"props":8452,"children":8453},{"class":3410,"line":3010},[8454,8458,8462,8466,8470,8474,8478,8482,8486,8490],{"type":3038,"tag":3408,"props":8455,"children":8456},{"style":3551},[8457],{"type":3043,"value":5322},{"type":3038,"tag":3408,"props":8459,"children":8460},{"style":3551},[8461],{"type":3043,"value":6063},{"type":3038,"tag":3408,"props":8463,"children":8464},{"style":3574},[8465],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":8467,"children":8468},{"style":3568},[8469],{"type":3043,"value":6072},{"type":3038,"tag":3408,"props":8471,"children":8472},{"style":3574},[8473],{"type":3043,"value":5337},{"type":3038,"tag":3408,"props":8475,"children":8476},{"style":3551},[8477],{"type":3043,"value":5342},{"type":3038,"tag":3408,"props":8479,"children":8480},{"style":3574},[8481],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":8483,"children":8484},{"style":3429},[8485],{"type":3043,"value":2979},{"type":3038,"tag":3408,"props":8487,"children":8488},{"style":3574},[8489],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":8491,"children":8492},{"style":3574},[8493],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":8495,"children":8496},{"class":3410,"line":3006},[8497],{"type":3038,"tag":3408,"props":8498,"children":8499},{"emptyLinePlaceholder":1200},[8500],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":8502,"children":8503},{"class":3410,"line":3440},[8504],{"type":3038,"tag":3408,"props":8505,"children":8506},{"style":3414},[8507],{"type":3043,"value":8508},"\u002F\u002F RateLimit structure:\n",{"type":3038,"tag":3408,"props":8510,"children":8511},{"class":3410,"line":3449},[8512],{"type":3038,"tag":3408,"props":8513,"children":8514},{"style":3414},[8515],{"type":3043,"value":8516},"\u002F\u002F {\n",{"type":3038,"tag":3408,"props":8518,"children":8519},{"class":3410,"line":3002},[8520,8525],{"type":3038,"tag":3408,"props":8521,"children":8522},{"style":3414},[8523],{"type":3043,"value":8524},"\u002F\u002F   count: number",{"type":3038,"tag":3408,"props":8526,"children":8527},{"style":3414},[8528],{"type":3043,"value":8529},"  \u002F\u002F Number of requests made\n",{"type":3038,"tag":3408,"props":8531,"children":8532},{"class":3410,"line":3474},[8533,8538],{"type":3038,"tag":3408,"props":8534,"children":8535},{"style":3414},[8536],{"type":3043,"value":8537},"\u002F\u002F   time: number",{"type":3038,"tag":3408,"props":8539,"children":8540},{"style":3414},[8541],{"type":3043,"value":8542},"   \u002F\u002F Timestamp of the last request\n",{"type":3038,"tag":3408,"props":8544,"children":8545},{"class":3410,"line":3482},[8546],{"type":3038,"tag":3408,"props":8547,"children":8548},{"style":3414},[8549],{"type":3043,"value":8550},"\u002F\u002F }\n",{"type":3038,"tag":3045,"props":8552,"children":8553},{},[8554],{"type":3038,"tag":3133,"props":8555,"children":8556},{},[8557],{"type":3043,"value":8558},"Usage Example:",{"type":3038,"tag":3398,"props":8560,"children":8562},{"className":5308,"code":8561,"language":5310,"meta":2982,"style":2982},"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",[8563],{"type":3038,"tag":3195,"props":8564,"children":8565},{"__ignoreMap":2982},[8566,8609,8648,8655,8700,8733,8794,8801,8818,8885,8966],{"type":3038,"tag":3408,"props":8567,"children":8568},{"class":3410,"line":3010},[8569,8573,8577,8581,8585,8589,8593,8597,8601,8605],{"type":3038,"tag":3408,"props":8570,"children":8571},{"style":3551},[8572],{"type":3043,"value":5322},{"type":3038,"tag":3408,"props":8574,"children":8575},{"style":3551},[8576],{"type":3043,"value":6063},{"type":3038,"tag":3408,"props":8578,"children":8579},{"style":3574},[8580],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":8582,"children":8583},{"style":3568},[8584],{"type":3043,"value":6072},{"type":3038,"tag":3408,"props":8586,"children":8587},{"style":3574},[8588],{"type":3043,"value":5337},{"type":3038,"tag":3408,"props":8590,"children":8591},{"style":3551},[8592],{"type":3043,"value":5342},{"type":3038,"tag":3408,"props":8594,"children":8595},{"style":3574},[8596],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":8598,"children":8599},{"style":3429},[8600],{"type":3043,"value":2979},{"type":3038,"tag":3408,"props":8602,"children":8603},{"style":3574},[8604],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":8606,"children":8607},{"style":3574},[8608],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":8610,"children":8611},{"class":3410,"line":3006},[8612,8616,8620,8624,8628,8632,8636,8640,8644],{"type":3038,"tag":3408,"props":8613,"children":8614},{"style":3551},[8615],{"type":3043,"value":5322},{"type":3038,"tag":3408,"props":8617,"children":8618},{"style":3574},[8619],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":8621,"children":8622},{"style":3568},[8623],{"type":3043,"value":5526},{"type":3038,"tag":3408,"props":8625,"children":8626},{"style":3574},[8627],{"type":3043,"value":5337},{"type":3038,"tag":3408,"props":8629,"children":8630},{"style":3551},[8631],{"type":3043,"value":5342},{"type":3038,"tag":3408,"props":8633,"children":8634},{"style":3574},[8635],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":8637,"children":8638},{"style":3429},[8639],{"type":3043,"value":5351},{"type":3038,"tag":3408,"props":8641,"children":8642},{"style":3574},[8643],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":8645,"children":8646},{"style":3574},[8647],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":8649,"children":8650},{"class":3410,"line":3440},[8651],{"type":3038,"tag":3408,"props":8652,"children":8653},{"emptyLinePlaceholder":1200},[8654],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":8656,"children":8657},{"class":3410,"line":3449},[8658,8662,8667,8672,8676,8680,8684,8688,8692,8696],{"type":3038,"tag":3408,"props":8659,"children":8660},{"style":4595},[8661],{"type":3043,"value":5679},{"type":3038,"tag":3408,"props":8663,"children":8664},{"style":3568},[8665],{"type":3043,"value":8666}," shieldStorage ",{"type":3038,"tag":3408,"props":8668,"children":8669},{"style":3574},[8670],{"type":3043,"value":8671},"=",{"type":3038,"tag":3408,"props":8673,"children":8674},{"style":3562},[8675],{"type":3043,"value":5526},{"type":3038,"tag":3408,"props":8677,"children":8678},{"style":3568},[8679],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":8681,"children":8682},{"style":3574},[8683],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":8685,"children":8686},{"style":3429},[8687],{"type":3043,"value":4566},{"type":3038,"tag":3408,"props":8689,"children":8690},{"style":3574},[8691],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":8693,"children":8694},{"style":3568},[8695],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":8697,"children":8698},{"style":3574},[8699],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":8701,"children":8702},{"class":3410,"line":3002},[8703,8707,8712,8716,8720,8725,8729],{"type":3038,"tag":3408,"props":8704,"children":8705},{"style":4595},[8706],{"type":3043,"value":5679},{"type":3038,"tag":3408,"props":8708,"children":8709},{"style":3568},[8710],{"type":3043,"value":8711}," ipKey ",{"type":3038,"tag":3408,"props":8713,"children":8714},{"style":3574},[8715],{"type":3043,"value":8671},{"type":3038,"tag":3408,"props":8717,"children":8718},{"style":3574},[8719],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":8721,"children":8722},{"style":3429},[8723],{"type":3043,"value":8724},"ip:192.168.1.1",{"type":3038,"tag":3408,"props":8726,"children":8727},{"style":3574},[8728],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":8730,"children":8731},{"style":3574},[8732],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":8734,"children":8735},{"class":3410,"line":3474},[8736,8740,8745,8749,8753,8757,8761,8765,8769,8774,8778,8782,8786,8790],{"type":3038,"tag":3408,"props":8737,"children":8738},{"style":4595},[8739],{"type":3043,"value":5679},{"type":3038,"tag":3408,"props":8741,"children":8742},{"style":3568},[8743],{"type":3043,"value":8744}," entry ",{"type":3038,"tag":3408,"props":8746,"children":8747},{"style":3574},[8748],{"type":3043,"value":8671},{"type":3038,"tag":3408,"props":8750,"children":8751},{"style":3568},[8752],{"type":3043,"value":5674},{"type":3038,"tag":3408,"props":8754,"children":8755},{"style":3551},[8756],{"type":3043,"value":6803},{"type":3038,"tag":3408,"props":8758,"children":8759},{"style":3568},[8760],{"type":3043,"value":5516},{"type":3038,"tag":3408,"props":8762,"children":8763},{"style":3574},[8764],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":8766,"children":8767},{"style":3562},[8768],{"type":3043,"value":5736},{"type":3038,"tag":3408,"props":8770,"children":8771},{"style":3568},[8772],{"type":3043,"value":8773},"(ipKey)) ",{"type":3038,"tag":3408,"props":8775,"children":8776},{"style":3551},[8777],{"type":3043,"value":6832},{"type":3038,"tag":3408,"props":8779,"children":8780},{"style":3423},[8781],{"type":3043,"value":6072},{"type":3038,"tag":3408,"props":8783,"children":8784},{"style":3574},[8785],{"type":3043,"value":6841},{"type":3038,"tag":3408,"props":8787,"children":8788},{"style":3423},[8789],{"type":3043,"value":6846},{"type":3038,"tag":3408,"props":8791,"children":8792},{"style":3574},[8793],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":8795,"children":8796},{"class":3410,"line":3482},[8797],{"type":3038,"tag":3408,"props":8798,"children":8799},{"emptyLinePlaceholder":1200},[8800],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":8802,"children":8803},{"class":3410,"line":3491},[8804,8809,8814],{"type":3038,"tag":3408,"props":8805,"children":8806},{"style":3551},[8807],{"type":3043,"value":8808},"if",{"type":3038,"tag":3408,"props":8810,"children":8811},{"style":3568},[8812],{"type":3043,"value":8813}," (entry) ",{"type":3038,"tag":3408,"props":8815,"children":8816},{"style":3574},[8817],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":8819,"children":8820},{"class":3410,"line":3027},[8821,8826,8830,8834,8838,8842,8847,8851,8855,8859,8864,8868,8873,8877,8881],{"type":3038,"tag":3408,"props":8822,"children":8823},{"style":3568},[8824],{"type":3043,"value":8825},"  console",{"type":3038,"tag":3408,"props":8827,"children":8828},{"style":3574},[8829],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":8831,"children":8832},{"style":3562},[8833],{"type":3043,"value":5869},{"type":3038,"tag":3408,"props":8835,"children":8836},{"style":3583},[8837],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":8839,"children":8840},{"style":3574},[8841],{"type":3043,"value":5878},{"type":3038,"tag":3408,"props":8843,"children":8844},{"style":3429},[8845],{"type":3043,"value":8846},"IP has made ",{"type":3038,"tag":3408,"props":8848,"children":8849},{"style":3574},[8850],{"type":3043,"value":5888},{"type":3038,"tag":3408,"props":8852,"children":8853},{"style":3568},[8854],{"type":3043,"value":6883},{"type":3038,"tag":3408,"props":8856,"children":8857},{"style":3574},[8858],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":8860,"children":8861},{"style":3568},[8862],{"type":3043,"value":8863},"count",{"type":3038,"tag":3408,"props":8865,"children":8866},{"style":3574},[8867],{"type":3043,"value":3940},{"type":3038,"tag":3408,"props":8869,"children":8870},{"style":3429},[8871],{"type":3043,"value":8872}," requests",{"type":3038,"tag":3408,"props":8874,"children":8875},{"style":3574},[8876],{"type":3043,"value":5878},{"type":3038,"tag":3408,"props":8878,"children":8879},{"style":3583},[8880],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":8882,"children":8883},{"style":3574},[8884],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":8886,"children":8887},{"class":3410,"line":3687},[8888,8892,8896,8900,8904,8908,8913,8917,8922,8926,8931,8935,8940,8944,8949,8953,8958,8962],{"type":3038,"tag":3408,"props":8889,"children":8890},{"style":3568},[8891],{"type":3043,"value":8825},{"type":3038,"tag":3408,"props":8893,"children":8894},{"style":3574},[8895],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":8897,"children":8898},{"style":3562},[8899],{"type":3043,"value":5869},{"type":3038,"tag":3408,"props":8901,"children":8902},{"style":3583},[8903],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":8905,"children":8906},{"style":3574},[8907],{"type":3043,"value":5878},{"type":3038,"tag":3408,"props":8909,"children":8910},{"style":3429},[8911],{"type":3043,"value":8912},"Last request at: ",{"type":3038,"tag":3408,"props":8914,"children":8915},{"style":3574},[8916],{"type":3043,"value":5888},{"type":3038,"tag":3408,"props":8918,"children":8919},{"style":3574},[8920],{"type":3043,"value":8921},"new",{"type":3038,"tag":3408,"props":8923,"children":8924},{"style":3562},[8925],{"type":3043,"value":6696},{"type":3038,"tag":3408,"props":8927,"children":8928},{"style":3568},[8929],{"type":3043,"value":8930},"(entry",{"type":3038,"tag":3408,"props":8932,"children":8933},{"style":3574},[8934],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":8936,"children":8937},{"style":3568},[8938],{"type":3043,"value":8939},"time)",{"type":3038,"tag":3408,"props":8941,"children":8942},{"style":3574},[8943],{"type":3043,"value":4537},{"type":3038,"tag":3408,"props":8945,"children":8946},{"style":3562},[8947],{"type":3043,"value":8948},"toISOString",{"type":3038,"tag":3408,"props":8950,"children":8951},{"style":3568},[8952],{"type":3043,"value":5499},{"type":3038,"tag":3408,"props":8954,"children":8955},{"style":3574},[8956],{"type":3043,"value":8957},"}`",{"type":3038,"tag":3408,"props":8959,"children":8960},{"style":3583},[8961],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":8963,"children":8964},{"style":3574},[8965],{"type":3043,"value":3950},{"type":3038,"tag":3408,"props":8967,"children":8968},{"class":3410,"line":3696},[8969],{"type":3038,"tag":3408,"props":8970,"children":8971},{"style":3574},[8972],{"type":3043,"value":4389},{"type":3038,"tag":3384,"props":8974,"children":8976},{"id":8975},"moduleoptions-type",[8977,8983],{"type":3038,"tag":3195,"props":8978,"children":8980},{"className":8979},[],[8981],{"type":3043,"value":8982},"ModuleOptions",{"type":3043,"value":8432},{"type":3038,"tag":3045,"props":8985,"children":8986},{},[8987],{"type":3043,"value":8988},"You can also import the module configuration type:",{"type":3038,"tag":3398,"props":8990,"children":8992},{"className":5308,"code":8991,"language":5310,"meta":2982,"style":2982},"import type { ModuleOptions } from \"nuxt-api-shield\";\n",[8993],{"type":3038,"tag":3195,"props":8994,"children":8995},{"__ignoreMap":2982},[8996],{"type":3038,"tag":3408,"props":8997,"children":8998},{"class":3410,"line":3010},[8999,9003,9007,9011,9016,9020,9024,9028,9032,9036],{"type":3038,"tag":3408,"props":9000,"children":9001},{"style":3551},[9002],{"type":3043,"value":5322},{"type":3038,"tag":3408,"props":9004,"children":9005},{"style":3551},[9006],{"type":3043,"value":6063},{"type":3038,"tag":3408,"props":9008,"children":9009},{"style":3574},[9010],{"type":3043,"value":5327},{"type":3038,"tag":3408,"props":9012,"children":9013},{"style":3568},[9014],{"type":3043,"value":9015}," ModuleOptions",{"type":3038,"tag":3408,"props":9017,"children":9018},{"style":3574},[9019],{"type":3043,"value":5337},{"type":3038,"tag":3408,"props":9021,"children":9022},{"style":3551},[9023],{"type":3043,"value":5342},{"type":3038,"tag":3408,"props":9025,"children":9026},{"style":3574},[9027],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":9029,"children":9030},{"style":3429},[9031],{"type":3043,"value":2979},{"type":3038,"tag":3408,"props":9033,"children":9034},{"style":3574},[9035],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":9037,"children":9038},{"style":3574},[9039],{"type":3043,"value":3950},{"type":3038,"tag":3121,"props":9041,"children":9043},{"id":9042},"per-route-rate-limiting",[9044],{"type":3043,"value":9045},"Per-Route Rate Limiting",{"type":3038,"tag":3045,"props":9047,"children":9048},{},[9049,9054,9056,9061],{"type":3038,"tag":3195,"props":9050,"children":9052},{"className":9051},[],[9053],{"type":3043,"value":2979},{"type":3043,"value":9055}," supports ",{"type":3038,"tag":3133,"props":9057,"children":9058},{},[9059],{"type":3043,"value":9060},"per-route rate limiting",{"type":3043,"value":9062},", allowing you to define custom limits for specific API endpoints while keeping a global default configuration for all other routes.",{"type":3038,"tag":3045,"props":9064,"children":9065},{},[9066,9068,9074,9075,9081,9083,9089],{"type":3043,"value":9067},"This is useful when certain endpoints (such as ",{"type":3038,"tag":3195,"props":9069,"children":9071},{"className":9070},[],[9072],{"type":3043,"value":9073},"\u002Fapi\u002Flogin",{"type":3043,"value":3360},{"type":3038,"tag":3195,"props":9076,"children":9078},{"className":9077},[],[9079],{"type":3043,"value":9080},"\u002Fapi\u002Fauth",{"type":3043,"value":9082},", or ",{"type":3038,"tag":3195,"props":9084,"children":9086},{"className":9085},[],[9087],{"type":3043,"value":9088},"\u002Fapi\u002Fpayment",{"type":3043,"value":9090},") require stricter protection.",{"type":3038,"tag":9092,"props":9093,"children":9094},"hr",{},[],{"type":3038,"tag":3384,"props":9096,"children":9098},{"id":9097},"configuration-example",[9099],{"type":3043,"value":9100},"Configuration Example",{"type":3038,"tag":3045,"props":9102,"children":9103},{},[9104,9105,9111],{"type":3043,"value":4408},{"type":3038,"tag":3195,"props":9106,"children":9108},{"className":9107},[],[9109],{"type":3043,"value":9110},"routes",{"type":3043,"value":9112}," option accepts a mixed array of strings (exact matches) and objects (custom limits or patterns).",{"type":3038,"tag":3398,"props":9114,"children":9116},{"className":5308,"code":9115,"language":5310,"meta":2982,"style":2982},"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",[9117],{"type":3038,"tag":3195,"props":9118,"children":9119},{"__ignoreMap":2982},[9120,9143,9178,9185,9200,9216,9236,9256,9276,9283,9290,9307,9315,9335,9342,9350,9358,9387,9408,9429,9437,9445,9452,9460,9467,9495,9515,9534,9550,9557,9569,9576],{"type":3038,"tag":3408,"props":9121,"children":9122},{"class":3410,"line":3010},[9123,9127,9131,9135,9139],{"type":3038,"tag":3408,"props":9124,"children":9125},{"style":3551},[9126],{"type":3043,"value":3554},{"type":3038,"tag":3408,"props":9128,"children":9129},{"style":3551},[9130],{"type":3043,"value":3559},{"type":3038,"tag":3408,"props":9132,"children":9133},{"style":3562},[9134],{"type":3043,"value":3565},{"type":3038,"tag":3408,"props":9136,"children":9137},{"style":3568},[9138],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":9140,"children":9141},{"style":3574},[9142],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":9144,"children":9145},{"class":3410,"line":3006},[9146,9150,9154,9158,9162,9166,9170,9174],{"type":3038,"tag":3408,"props":9147,"children":9148},{"style":3583},[9149],{"type":3043,"value":3586},{"type":3038,"tag":3408,"props":9151,"children":9152},{"style":3574},[9153],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9155,"children":9156},{"style":3568},[9157],{"type":3043,"value":3596},{"type":3038,"tag":3408,"props":9159,"children":9160},{"style":3574},[9161],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":9163,"children":9164},{"style":3429},[9165],{"type":3043,"value":2979},{"type":3038,"tag":3408,"props":9167,"children":9168},{"style":3574},[9169],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":9171,"children":9172},{"style":3568},[9173],{"type":3043,"value":3614},{"type":3038,"tag":3408,"props":9175,"children":9176},{"style":3574},[9177],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9179,"children":9180},{"class":3410,"line":3440},[9181],{"type":3038,"tag":3408,"props":9182,"children":9183},{"emptyLinePlaceholder":1200},[9184],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":9186,"children":9187},{"class":3410,"line":3449},[9188,9192,9196],{"type":3038,"tag":3408,"props":9189,"children":9190},{"style":3583},[9191],{"type":3043,"value":3627},{"type":3038,"tag":3408,"props":9193,"children":9194},{"style":3574},[9195],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9197,"children":9198},{"style":3574},[9199],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":9201,"children":9202},{"class":3410,"line":3002},[9203,9208,9212],{"type":3038,"tag":3408,"props":9204,"children":9205},{"style":3583},[9206],{"type":3043,"value":9207},"    limit",{"type":3038,"tag":3408,"props":9209,"children":9210},{"style":3574},[9211],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9213,"children":9214},{"style":3574},[9215],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":9217,"children":9218},{"class":3410,"line":3474},[9219,9224,9228,9232],{"type":3038,"tag":3408,"props":9220,"children":9221},{"style":3583},[9222],{"type":3043,"value":9223},"      max",{"type":3038,"tag":3408,"props":9225,"children":9226},{"style":3574},[9227],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9229,"children":9230},{"style":3848},[9231],{"type":3043,"value":4015},{"type":3038,"tag":3408,"props":9233,"children":9234},{"style":3574},[9235],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9237,"children":9238},{"class":3410,"line":3482},[9239,9244,9248,9252],{"type":3038,"tag":3408,"props":9240,"children":9241},{"style":3583},[9242],{"type":3043,"value":9243},"      duration",{"type":3038,"tag":3408,"props":9245,"children":9246},{"style":3574},[9247],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9249,"children":9250},{"style":3848},[9251],{"type":3043,"value":4036},{"type":3038,"tag":3408,"props":9253,"children":9254},{"style":3574},[9255],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9257,"children":9258},{"class":3410,"line":3491},[9259,9264,9268,9272],{"type":3038,"tag":3408,"props":9260,"children":9261},{"style":3583},[9262],{"type":3043,"value":9263},"      ban",{"type":3038,"tag":3408,"props":9265,"children":9266},{"style":3574},[9267],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9269,"children":9270},{"style":3848},[9271],{"type":3043,"value":4062},{"type":3038,"tag":3408,"props":9273,"children":9274},{"style":3574},[9275],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9277,"children":9278},{"class":3410,"line":3027},[9279],{"type":3038,"tag":3408,"props":9280,"children":9281},{"style":3574},[9282],{"type":3043,"value":3684},{"type":3038,"tag":3408,"props":9284,"children":9285},{"class":3410,"line":3687},[9286],{"type":3038,"tag":3408,"props":9287,"children":9288},{"emptyLinePlaceholder":1200},[9289],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":9291,"children":9292},{"class":3410,"line":3696},[9293,9298,9302],{"type":3038,"tag":3408,"props":9294,"children":9295},{"style":3583},[9296],{"type":3043,"value":9297},"    routes",{"type":3038,"tag":3408,"props":9299,"children":9300},{"style":3574},[9301],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9303,"children":9304},{"style":3568},[9305],{"type":3043,"value":9306}," [\n",{"type":3038,"tag":3408,"props":9308,"children":9309},{"class":3410,"line":3705},[9310],{"type":3038,"tag":3408,"props":9311,"children":9312},{"style":3414},[9313],{"type":3043,"value":9314},"      \u002F\u002F 1. String: uses the global default limit (exact match)\n",{"type":3038,"tag":3408,"props":9316,"children":9317},{"class":3410,"line":3714},[9318,9322,9327,9331],{"type":3038,"tag":3408,"props":9319,"children":9320},{"style":3574},[9321],{"type":3043,"value":4643},{"type":3038,"tag":3408,"props":9323,"children":9324},{"style":3429},[9325],{"type":3043,"value":9326},"\u002Fapi\u002Fexample",{"type":3038,"tag":3408,"props":9328,"children":9329},{"style":3574},[9330],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":9332,"children":9333},{"style":3574},[9334],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9336,"children":9337},{"class":3410,"line":3723},[9338],{"type":3038,"tag":3408,"props":9339,"children":9340},{"emptyLinePlaceholder":1200},[9341],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":9343,"children":9344},{"class":3410,"line":3732},[9345],{"type":3038,"tag":3408,"props":9346,"children":9347},{"style":3414},[9348],{"type":3043,"value":9349},"      \u002F\u002F 2. Object: custom rate limit for a specific route (exact match)\n",{"type":3038,"tag":3408,"props":9351,"children":9352},{"class":3410,"line":3741},[9353],{"type":3038,"tag":3408,"props":9354,"children":9355},{"style":3574},[9356],{"type":3043,"value":9357},"      {\n",{"type":3038,"tag":3408,"props":9359,"children":9360},{"class":3410,"line":3750},[9361,9366,9370,9374,9379,9383],{"type":3038,"tag":3408,"props":9362,"children":9363},{"style":3583},[9364],{"type":3043,"value":9365},"        path",{"type":3038,"tag":3408,"props":9367,"children":9368},{"style":3574},[9369],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9371,"children":9372},{"style":3574},[9373],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":9375,"children":9376},{"style":3429},[9377],{"type":3043,"value":9378},"\u002Fapi\u002Fexample-per-route",{"type":3038,"tag":3408,"props":9380,"children":9381},{"style":3574},[9382],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":9384,"children":9385},{"style":3574},[9386],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9388,"children":9389},{"class":3410,"line":3758},[9390,9395,9399,9404],{"type":3038,"tag":3408,"props":9391,"children":9392},{"style":3583},[9393],{"type":3043,"value":9394},"        max",{"type":3038,"tag":3408,"props":9396,"children":9397},{"style":3574},[9398],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9400,"children":9401},{"style":3848},[9402],{"type":3043,"value":9403}," 5",{"type":3038,"tag":3408,"props":9405,"children":9406},{"style":3574},[9407],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9409,"children":9410},{"class":3410,"line":3767},[9411,9416,9420,9425],{"type":3038,"tag":3408,"props":9412,"children":9413},{"style":3583},[9414],{"type":3043,"value":9415},"        duration",{"type":3038,"tag":3408,"props":9417,"children":9418},{"style":3574},[9419],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9421,"children":9422},{"style":3848},[9423],{"type":3043,"value":9424}," 10",{"type":3038,"tag":3408,"props":9426,"children":9427},{"style":3574},[9428],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9430,"children":9431},{"class":3410,"line":3776},[9432],{"type":3038,"tag":3408,"props":9433,"children":9434},{"style":3414},[9435],{"type":3043,"value":9436},"        \u002F\u002F \"ban\" can also be overridden per route\n",{"type":3038,"tag":3408,"props":9438,"children":9439},{"class":3410,"line":3790},[9440],{"type":3038,"tag":3408,"props":9441,"children":9442},{"style":3574},[9443],{"type":3043,"value":9444},"      },\n",{"type":3038,"tag":3408,"props":9446,"children":9447},{"class":3410,"line":3818},[9448],{"type":3038,"tag":3408,"props":9449,"children":9450},{"emptyLinePlaceholder":1200},[9451],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":9453,"children":9454},{"class":3410,"line":3826},[9455],{"type":3038,"tag":3408,"props":9456,"children":9457},{"style":3414},[9458],{"type":3043,"value":9459},"      \u002F\u002F 3. Object: Wildcard pattern\n",{"type":3038,"tag":3408,"props":9461,"children":9462},{"class":3410,"line":3835},[9463],{"type":3038,"tag":3408,"props":9464,"children":9465},{"style":3574},[9466],{"type":3043,"value":9357},{"type":3038,"tag":3408,"props":9468,"children":9469},{"class":3410,"line":3863},[9470,9474,9478,9482,9487,9491],{"type":3038,"tag":3408,"props":9471,"children":9472},{"style":3583},[9473],{"type":3043,"value":9365},{"type":3038,"tag":3408,"props":9475,"children":9476},{"style":3574},[9477],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9479,"children":9480},{"style":3574},[9481],{"type":3043,"value":4116},{"type":3038,"tag":3408,"props":9483,"children":9484},{"style":3429},[9485],{"type":3043,"value":9486},"\u002Fapi\u002Fusers\u002F*\u002Fprofile",{"type":3038,"tag":3408,"props":9488,"children":9489},{"style":3574},[9490],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":9492,"children":9493},{"style":3574},[9494],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9496,"children":9497},{"class":3410,"line":3880},[9498,9503,9507,9511],{"type":3038,"tag":3408,"props":9499,"children":9500},{"style":3583},[9501],{"type":3043,"value":9502},"        pattern",{"type":3038,"tag":3408,"props":9504,"children":9505},{"style":3574},[9506],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9508,"children":9509},{"style":3902},[9510],{"type":3043,"value":4095},{"type":3038,"tag":3408,"props":9512,"children":9513},{"style":3574},[9514],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9516,"children":9517},{"class":3410,"line":3889},[9518,9522,9526,9530],{"type":3038,"tag":3408,"props":9519,"children":9520},{"style":3583},[9521],{"type":3043,"value":9394},{"type":3038,"tag":3408,"props":9523,"children":9524},{"style":3574},[9525],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9527,"children":9528},{"style":3848},[9529],{"type":3043,"value":9424},{"type":3038,"tag":3408,"props":9531,"children":9532},{"style":3574},[9533],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9535,"children":9536},{"class":3410,"line":3917},[9537,9541,9545],{"type":3038,"tag":3408,"props":9538,"children":9539},{"style":3583},[9540],{"type":3043,"value":9415},{"type":3038,"tag":3408,"props":9542,"children":9543},{"style":3574},[9544],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9546,"children":9547},{"style":3848},[9548],{"type":3043,"value":9549}," 60\n",{"type":3038,"tag":3408,"props":9551,"children":9552},{"class":3410,"line":3925},[9553],{"type":3038,"tag":3408,"props":9554,"children":9555},{"style":3574},[9556],{"type":3043,"value":4710},{"type":3038,"tag":3408,"props":9558,"children":9559},{"class":3410,"line":3934},[9560,9565],{"type":3038,"tag":3408,"props":9561,"children":9562},{"style":3568},[9563],{"type":3043,"value":9564},"    ]",{"type":3038,"tag":3408,"props":9566,"children":9567},{"style":3574},[9568],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9570,"children":9571},{"class":3410,"line":6860},[9572],{"type":3038,"tag":3408,"props":9573,"children":9574},{"style":3574},[9575],{"type":3043,"value":3931},{"type":3038,"tag":3408,"props":9577,"children":9578},{"class":3410,"line":6869},[9579,9583,9587],{"type":3038,"tag":3408,"props":9580,"children":9581},{"style":3574},[9582],{"type":3043,"value":3940},{"type":3038,"tag":3408,"props":9584,"children":9585},{"style":3568},[9586],{"type":3043,"value":3945},{"type":3038,"tag":3408,"props":9588,"children":9589},{"style":3574},[9590],{"type":3043,"value":3950},{"type":3038,"tag":3384,"props":9592,"children":9594},{"id":9593},"wildcard-route-support",[9595],{"type":3043,"value":9596},"Wildcard Route Support",{"type":3038,"tag":3045,"props":9598,"children":9599},{},[9600,9602,9608],{"type":3043,"value":9601},"Wildcard patterns allow you to apply the same limits to groups of related API endpoints. Enable them by setting ",{"type":3038,"tag":3195,"props":9603,"children":9605},{"className":9604},[],[9606],{"type":3043,"value":9607},"pattern: true",{"type":3043,"value":9609}," in your route configuration.",{"type":3038,"tag":5274,"props":9611,"children":9613},{"id":9612},"wildcard-pattern-syntax",[9614],{"type":3043,"value":9615},"Wildcard Pattern Syntax",{"type":3038,"tag":3095,"props":9617,"children":9618},{},[9619,9663],{"type":3038,"tag":3099,"props":9620,"children":9621},{},[9622,9634,9636],{"type":3038,"tag":3133,"props":9623,"children":9624},{},[9625,9627,9633],{"type":3043,"value":9626},"Single-Segment Wildcard (",{"type":3038,"tag":3195,"props":9628,"children":9630},{"className":9629},[],[9631],{"type":3043,"value":9632},"*",{"type":3043,"value":3945},{"type":3043,"value":9635},": Matches exactly one path segment.\n",{"type":3038,"tag":3095,"props":9637,"children":9638},{},[9639],{"type":3038,"tag":3099,"props":9640,"children":9641},{},[9642,9647,9649,9655,9656,9662],{"type":3038,"tag":3195,"props":9643,"children":9645},{"className":9644},[],[9646],{"type":3043,"value":9486},{"type":3043,"value":9648}," matches ",{"type":3038,"tag":3195,"props":9650,"children":9652},{"className":9651},[],[9653],{"type":3043,"value":9654},"\u002Fapi\u002Fusers\u002F123\u002Fprofile",{"type":3043,"value":7329},{"type":3038,"tag":3195,"props":9657,"children":9659},{"className":9658},[],[9660],{"type":3043,"value":9661},"\u002Fapi\u002Fusers\u002Fadmin\u002Fprofile",{"type":3043,"value":4537},{"type":3038,"tag":3099,"props":9664,"children":9665},{},[9666,9678,9680],{"type":3038,"tag":3133,"props":9667,"children":9668},{},[9669,9671,9677],{"type":3043,"value":9670},"Multi-Segment Wildcard (",{"type":3038,"tag":3195,"props":9672,"children":9674},{"className":9673},[],[9675],{"type":3043,"value":9676},"**",{"type":3043,"value":3945},{"type":3043,"value":9679},": Matches zero or more path segments.\n",{"type":3038,"tag":3095,"props":9681,"children":9682},{},[9683],{"type":3038,"tag":3099,"props":9684,"children":9685},{},[9686,9692,9693,9699,9700,9706],{"type":3038,"tag":3195,"props":9687,"children":9689},{"className":9688},[],[9690],{"type":3043,"value":9691},"\u002Fapi\u002Freports\u002F**\u002Fsummary",{"type":3043,"value":9648},{"type":3038,"tag":3195,"props":9694,"children":9696},{"className":9695},[],[9697],{"type":3043,"value":9698},"\u002Fapi\u002Freports\u002Fmonthly\u002F2023\u002Fsummary",{"type":3043,"value":7329},{"type":3038,"tag":3195,"props":9701,"children":9703},{"className":9702},[],[9704],{"type":3043,"value":9705},"\u002Fapi\u002Freports\u002Fsummary",{"type":3043,"value":4537},{"type":3038,"tag":5274,"props":9708,"children":9710},{"id":9709},"pattern-precedence",[9711],{"type":3043,"value":9712},"Pattern Precedence",{"type":3038,"tag":9714,"props":9715,"children":9716},"ol",{},[9717,9727,9737],{"type":3038,"tag":3099,"props":9718,"children":9719},{},[9720,9725],{"type":3038,"tag":3133,"props":9721,"children":9722},{},[9723],{"type":3043,"value":9724},"Exact matches",{"type":3043,"value":9726}," always take precedence over wildcard patterns.",{"type":3038,"tag":3099,"props":9728,"children":9729},{},[9730,9735],{"type":3038,"tag":3133,"props":9731,"children":9732},{},[9733],{"type":3043,"value":9734},"More specific wildcards",{"type":3043,"value":9736}," take precedence over less specific ones.",{"type":3038,"tag":3099,"props":9738,"children":9739},{},[9740],{"type":3043,"value":9741},"When multiple wildcard patterns match, the most specific one is used.",{"type":3038,"tag":5274,"props":9743,"children":9745},{"id":9744},"important-notes",[9746],{"type":3043,"value":9747},"Important Notes",{"type":3038,"tag":3095,"props":9749,"children":9750},{},[9751,9761],{"type":3038,"tag":3099,"props":9752,"children":9753},{},[9754,9759],{"type":3038,"tag":3133,"props":9755,"children":9756},{},[9757],{"type":3043,"value":9758},"Shared Rate Limits:",{"type":3043,"value":9760}," All requests that match the same wildcard pattern share the same rate limit counter.",{"type":3038,"tag":3099,"props":9762,"children":9763},{},[9764,9769,9771,9777,9778,9784],{"type":3038,"tag":3133,"props":9765,"children":9766},{},[9767],{"type":3043,"value":9768},"Security:",{"type":3043,"value":9770}," Broad or dangerous patterns like ",{"type":3038,"tag":3195,"props":9772,"children":9774},{"className":9773},[],[9775],{"type":3043,"value":9776},"\u002F**",{"type":3043,"value":7329},{"type":3038,"tag":3195,"props":9779,"children":9781},{"className":9780},[],[9782],{"type":3043,"value":9783},"\u002F*",{"type":3043,"value":9785}," are automatically rejected to prevent accidental global blocking.",{"type":3038,"tag":3121,"props":9787,"children":9789},{"id":9788},"skipping-routes",[9790],{"type":3043,"value":9791},"Skipping Routes",{"type":3038,"tag":3045,"props":9793,"children":9794},{},[9795,9796,9802,9804,9809],{"type":3043,"value":4408},{"type":3038,"tag":3195,"props":9797,"children":9799},{"className":9798},[],[9800],{"type":3043,"value":9801},"skipRoutes",{"type":3043,"value":9803}," 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":3038,"tag":3195,"props":9805,"children":9807},{"className":9806},[],[9808],{"type":3043,"value":9110},{"type":3043,"value":9810}," array.",{"type":3038,"tag":3045,"props":9812,"children":9813},{},[9814],{"type":3043,"value":9815},"This is useful for health checks, webhook endpoints, monitoring probes, or internal status routes that should always respond regardless of traffic.",{"type":3038,"tag":3384,"props":9817,"children":9819},{"id":9818},"configuration-example-1",[9820],{"type":3043,"value":9100},{"type":3038,"tag":3398,"props":9822,"children":9824},{"className":5308,"code":9823,"language":5310,"meta":2982,"style":2982},"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",[9825],{"type":3038,"tag":3195,"props":9826,"children":9827},{"__ignoreMap":2982},[9828,9851,9886,9893,9908,9923,9942,9961,9980,9987,9994,10009,10034,10059,10084,10095,10102],{"type":3038,"tag":3408,"props":9829,"children":9830},{"class":3410,"line":3010},[9831,9835,9839,9843,9847],{"type":3038,"tag":3408,"props":9832,"children":9833},{"style":3551},[9834],{"type":3043,"value":3554},{"type":3038,"tag":3408,"props":9836,"children":9837},{"style":3551},[9838],{"type":3043,"value":3559},{"type":3038,"tag":3408,"props":9840,"children":9841},{"style":3562},[9842],{"type":3043,"value":3565},{"type":3038,"tag":3408,"props":9844,"children":9845},{"style":3568},[9846],{"type":3043,"value":3571},{"type":3038,"tag":3408,"props":9848,"children":9849},{"style":3574},[9850],{"type":3043,"value":3577},{"type":3038,"tag":3408,"props":9852,"children":9853},{"class":3410,"line":3006},[9854,9858,9862,9866,9870,9874,9878,9882],{"type":3038,"tag":3408,"props":9855,"children":9856},{"style":3583},[9857],{"type":3043,"value":3586},{"type":3038,"tag":3408,"props":9859,"children":9860},{"style":3574},[9861],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9863,"children":9864},{"style":3568},[9865],{"type":3043,"value":3596},{"type":3038,"tag":3408,"props":9867,"children":9868},{"style":3574},[9869],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":9871,"children":9872},{"style":3429},[9873],{"type":3043,"value":2979},{"type":3038,"tag":3408,"props":9875,"children":9876},{"style":3574},[9877],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":9879,"children":9880},{"style":3568},[9881],{"type":3043,"value":3614},{"type":3038,"tag":3408,"props":9883,"children":9884},{"style":3574},[9885],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9887,"children":9888},{"class":3410,"line":3440},[9889],{"type":3038,"tag":3408,"props":9890,"children":9891},{"emptyLinePlaceholder":1200},[9892],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":9894,"children":9895},{"class":3410,"line":3449},[9896,9900,9904],{"type":3038,"tag":3408,"props":9897,"children":9898},{"style":3583},[9899],{"type":3043,"value":3627},{"type":3038,"tag":3408,"props":9901,"children":9902},{"style":3574},[9903],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9905,"children":9906},{"style":3574},[9907],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":9909,"children":9910},{"class":3410,"line":3002},[9911,9915,9919],{"type":3038,"tag":3408,"props":9912,"children":9913},{"style":3583},[9914],{"type":3043,"value":9207},{"type":3038,"tag":3408,"props":9916,"children":9917},{"style":3574},[9918],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9920,"children":9921},{"style":3574},[9922],{"type":3043,"value":3636},{"type":3038,"tag":3408,"props":9924,"children":9925},{"class":3410,"line":3474},[9926,9930,9934,9938],{"type":3038,"tag":3408,"props":9927,"children":9928},{"style":3583},[9929],{"type":3043,"value":9223},{"type":3038,"tag":3408,"props":9931,"children":9932},{"style":3574},[9933],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9935,"children":9936},{"style":3848},[9937],{"type":3043,"value":4015},{"type":3038,"tag":3408,"props":9939,"children":9940},{"style":3574},[9941],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9943,"children":9944},{"class":3410,"line":3482},[9945,9949,9953,9957],{"type":3038,"tag":3408,"props":9946,"children":9947},{"style":3583},[9948],{"type":3043,"value":9243},{"type":3038,"tag":3408,"props":9950,"children":9951},{"style":3574},[9952],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9954,"children":9955},{"style":3848},[9956],{"type":3043,"value":4036},{"type":3038,"tag":3408,"props":9958,"children":9959},{"style":3574},[9960],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9962,"children":9963},{"class":3410,"line":3491},[9964,9968,9972,9976],{"type":3038,"tag":3408,"props":9965,"children":9966},{"style":3583},[9967],{"type":3043,"value":9263},{"type":3038,"tag":3408,"props":9969,"children":9970},{"style":3574},[9971],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":9973,"children":9974},{"style":3848},[9975],{"type":3043,"value":4062},{"type":3038,"tag":3408,"props":9977,"children":9978},{"style":3574},[9979],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":9981,"children":9982},{"class":3410,"line":3027},[9983],{"type":3038,"tag":3408,"props":9984,"children":9985},{"style":3574},[9986],{"type":3043,"value":3684},{"type":3038,"tag":3408,"props":9988,"children":9989},{"class":3410,"line":3687},[9990],{"type":3038,"tag":3408,"props":9991,"children":9992},{"emptyLinePlaceholder":1200},[9993],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":9995,"children":9996},{"class":3410,"line":3696},[9997,10001,10005],{"type":3038,"tag":3408,"props":9998,"children":9999},{"style":3583},[10000],{"type":3043,"value":3796},{"type":3038,"tag":3408,"props":10002,"children":10003},{"style":3574},[10004],{"type":3043,"value":3591},{"type":3038,"tag":3408,"props":10006,"children":10007},{"style":3568},[10008],{"type":3043,"value":9306},{"type":3038,"tag":3408,"props":10010,"children":10011},{"class":3410,"line":3705},[10012,10016,10021,10025,10029],{"type":3038,"tag":3408,"props":10013,"children":10014},{"style":3574},[10015],{"type":3043,"value":4643},{"type":3038,"tag":3408,"props":10017,"children":10018},{"style":3429},[10019],{"type":3043,"value":10020},"\u002Fapi\u002Fhealth",{"type":3038,"tag":3408,"props":10022,"children":10023},{"style":3574},[10024],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":10026,"children":10027},{"style":3574},[10028],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":10030,"children":10031},{"style":3414},[10032],{"type":3043,"value":10033},"          \u002F\u002F exact match\n",{"type":3038,"tag":3408,"props":10035,"children":10036},{"class":3410,"line":3714},[10037,10041,10046,10050,10054],{"type":3038,"tag":3408,"props":10038,"children":10039},{"style":3574},[10040],{"type":3043,"value":4643},{"type":3038,"tag":3408,"props":10042,"children":10043},{"style":3429},[10044],{"type":3043,"value":10045},"\u002Fapi\u002F_nuxt\u002F**",{"type":3038,"tag":3408,"props":10047,"children":10048},{"style":3574},[10049],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":10051,"children":10052},{"style":3574},[10053],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":10055,"children":10056},{"style":3414},[10057],{"type":3043,"value":10058},"        \u002F\u002F multi-segment wildcard\n",{"type":3038,"tag":3408,"props":10060,"children":10061},{"class":3410,"line":3723},[10062,10066,10071,10075,10079],{"type":3038,"tag":3408,"props":10063,"children":10064},{"style":3574},[10065],{"type":3043,"value":4643},{"type":3038,"tag":3408,"props":10067,"children":10068},{"style":3429},[10069],{"type":3043,"value":10070},"\u002Fapi\u002Fwebhooks\u002Fstripe",{"type":3038,"tag":3408,"props":10072,"children":10073},{"style":3574},[10074],{"type":3043,"value":3601},{"type":3038,"tag":3408,"props":10076,"children":10077},{"style":3574},[10078],{"type":3043,"value":3810},{"type":3038,"tag":3408,"props":10080,"children":10081},{"style":3414},[10082],{"type":3043,"value":10083}," \u002F\u002F exact match\n",{"type":3038,"tag":3408,"props":10085,"children":10086},{"class":3410,"line":3732},[10087,10091],{"type":3038,"tag":3408,"props":10088,"children":10089},{"style":3568},[10090],{"type":3043,"value":9564},{"type":3038,"tag":3408,"props":10092,"children":10093},{"style":3574},[10094],{"type":3043,"value":3619},{"type":3038,"tag":3408,"props":10096,"children":10097},{"class":3410,"line":3741},[10098],{"type":3038,"tag":3408,"props":10099,"children":10100},{"style":3574},[10101],{"type":3043,"value":3931},{"type":3038,"tag":3408,"props":10103,"children":10104},{"class":3410,"line":3750},[10105,10109],{"type":3038,"tag":3408,"props":10106,"children":10107},{"style":3574},[10108],{"type":3043,"value":3940},{"type":3038,"tag":3408,"props":10110,"children":10111},{"style":3568},[10112],{"type":3043,"value":8076},{"type":3038,"tag":3384,"props":10114,"children":10116},{"id":10115},"how-it-works",[10117],{"type":3043,"value":10118},"How It Works",{"type":3038,"tag":3095,"props":10120,"children":10121},{},[10122,10134,10146],{"type":3038,"tag":3099,"props":10123,"children":10124},{},[10125,10127,10132],{"type":3043,"value":10126},"Routes in ",{"type":3038,"tag":3195,"props":10128,"children":10130},{"className":10129},[],[10131],{"type":3043,"value":9801},{"type":3043,"value":10133}," bypass the middleware entirely — no ban check, no rate limit counter, no log entry.",{"type":3038,"tag":3099,"props":10135,"children":10136},{},[10137,10139,10144],{"type":3043,"value":10138},"The rest of your API routes (those matching the global defaults or the ",{"type":3038,"tag":3195,"props":10140,"children":10142},{"className":10141},[],[10143],{"type":3043,"value":9110},{"type":3043,"value":10145}," option) continue to be rate limited normally.",{"type":3038,"tag":3099,"props":10147,"children":10148},{},[10149,10151,10156,10158,10163],{"type":3043,"value":10150},"Supports the same wildcard syntax as per-route patterns: ",{"type":3038,"tag":3195,"props":10152,"children":10154},{"className":10153},[],[10155],{"type":3043,"value":9632},{"type":3043,"value":10157}," for single segment, ",{"type":3038,"tag":3195,"props":10159,"children":10161},{"className":10160},[],[10162],{"type":3043,"value":9676},{"type":3043,"value":10164}," for multi-segment.",{"type":3038,"tag":3121,"props":10166,"children":10168},{"id":10167},"important-considerations",[10169],{"type":3043,"value":10170},"Important Considerations",{"type":3038,"tag":3384,"props":10172,"children":10174},{"id":10173},"data-privacy-ip-address-storage",[10175],{"type":3043,"value":10176},"Data Privacy (IP Address Storage)",{"type":3038,"tag":3045,"props":10178,"children":10179},{},[10180,10185],{"type":3038,"tag":3195,"props":10181,"children":10183},{"className":10182},[],[10184],{"type":3043,"value":2979},{"type":3043,"value":10186}," 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":3038,"tag":3095,"props":10188,"children":10189},{},[10190,10231,10241],{"type":3038,"tag":3099,"props":10191,"children":10192},{},[10193,10198],{"type":3038,"tag":3133,"props":10194,"children":10195},{},[10196],{"type":3043,"value":10197},"Data Stored:",{"type":3038,"tag":3095,"props":10199,"children":10200},{},[10201,10220],{"type":3038,"tag":3099,"props":10202,"children":10203},{},[10204,10210,10212,10218],{"type":3038,"tag":3195,"props":10205,"children":10207},{"className":10206},[],[10208],{"type":3043,"value":10209},"ip:\u003CIP_ADDRESS>",{"type":3043,"value":10211},": Stores ",{"type":3038,"tag":3195,"props":10213,"children":10215},{"className":10214},[],[10216],{"type":3043,"value":10217},"{ count: number, time: number }",{"type":3043,"value":10219}," for tracking request rates.",{"type":3038,"tag":3099,"props":10221,"children":10222},{},[10223,10229],{"type":3038,"tag":3195,"props":10224,"children":10226},{"className":10225},[],[10227],{"type":3043,"value":10228},"ban:\u003CIP_ADDRESS>",{"type":3043,"value":10230},": Stores a timestamp indicating when a ban on an IP address expires.",{"type":3038,"tag":3099,"props":10232,"children":10233},{},[10234,10239],{"type":3038,"tag":3133,"props":10235,"children":10236},{},[10237],{"type":3043,"value":10238},"Compliance:",{"type":3043,"value":10240}," 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":3038,"tag":3099,"props":10242,"children":10243},{},[10244,10249],{"type":3038,"tag":3133,"props":10245,"children":10246},{},[10247],{"type":3043,"value":10248},"Data Retention:",{"type":3038,"tag":3095,"props":10250,"children":10251},{},[10252,10264],{"type":3038,"tag":3099,"props":10253,"children":10254},{},[10255,10257,10262],{"type":3043,"value":10256},"Ban entries are cleaned up by the ",{"type":3038,"tag":3195,"props":10258,"children":10260},{"className":10259},[],[10261],{"type":3043,"value":3292},{"type":3043,"value":10263}," task after expiry.",{"type":3038,"tag":3099,"props":10265,"children":10266},{},[10267,10269,10274,10276,10281],{"type":3043,"value":10268},"IP tracking entries are cleaned up by the ",{"type":3038,"tag":3195,"props":10270,"children":10272},{"className":10271},[],[10273],{"type":3043,"value":3300},{"type":3043,"value":10275}," task based on the ",{"type":3038,"tag":3195,"props":10277,"children":10279},{"className":10278},[],[10280],{"type":3043,"value":4998},{"type":3043,"value":10282}," setting.",{"type":3038,"tag":3384,"props":10284,"children":10286},{"id":10285},"storage-security",[10287],{"type":3043,"value":10288},"Storage Security",{"type":3038,"tag":3095,"props":10290,"children":10291},{},[10292,10370],{"type":3038,"tag":3099,"props":10293,"children":10294},{},[10295,10308,10310,10316,10318,10323,10324,10330,10332,10338,10340,10345,10347],{"type":3038,"tag":3133,"props":10296,"children":10297},{},[10298,10300,10306],{"type":3043,"value":10299},"Filesystem Driver (",{"type":3038,"tag":3195,"props":10301,"children":10303},{"className":10302},[],[10304],{"type":3043,"value":10305},"driver: 'fs'",{"type":3043,"value":10307},"):",{"type":3043,"value":10309}," If you use the filesystem driver for ",{"type":3038,"tag":3195,"props":10311,"children":10313},{"className":10312},[],[10314],{"type":3043,"value":10315},"unstorage",{"type":3043,"value":10317}," (e.g., ",{"type":3038,"tag":3195,"props":10319,"children":10321},{"className":10320},[],[10322],{"type":3043,"value":10305},{"type":3043,"value":3360},{"type":3038,"tag":3195,"props":10325,"children":10327},{"className":10326},[],[10328],{"type":3043,"value":10329},"base: '.shield'",{"type":3043,"value":10331},"), ensure that the storage directory (and the ",{"type":3038,"tag":3195,"props":10333,"children":10335},{"className":10334},[],[10336],{"type":3043,"value":10337},"logs",{"type":3043,"value":10339}," directory if logging is enabled via ",{"type":3038,"tag":3195,"props":10341,"children":10343},{"className":10342},[],[10344],{"type":3043,"value":7868},{"type":3043,"value":10346},") is:\n",{"type":3038,"tag":3095,"props":10348,"children":10349},{},[10350,10360],{"type":3038,"tag":3099,"props":10351,"children":10352},{},[10353,10358],{"type":3038,"tag":3133,"props":10354,"children":10355},{},[10356],{"type":3043,"value":10357},"Not web-accessible:",{"type":3043,"value":10359}," Your web server should not be configured to serve files from these directories.",{"type":3038,"tag":3099,"props":10361,"children":10362},{},[10363,10368],{"type":3038,"tag":3133,"props":10364,"children":10365},{},[10366],{"type":3043,"value":10367},"Properly permissioned:",{"type":3043,"value":10369}," The directories should have appropriate server-side file permissions to prevent unauthorized reading or writing.",{"type":3038,"tag":3099,"props":10371,"children":10372},{},[10373,10378],{"type":3038,"tag":3133,"props":10374,"children":10375},{},[10376],{"type":3043,"value":10377},"Other Drivers (Redis, etc.):",{"type":3043,"value":10379}," If using database drivers like Redis, ensure your database server itself is secured (e.g., authentication, network access controls).",{"type":3038,"tag":3384,"props":10381,"children":10383},{"id":10382},"error-message-errormessage",[10384,10386,10392],{"type":3043,"value":10385},"Error Message (",{"type":3038,"tag":3195,"props":10387,"children":10389},{"className":10388},[],[10390],{"type":3043,"value":10391},"errorMessage",{"type":3043,"value":3945},{"type":3038,"tag":3045,"props":10394,"children":10395},{},[10396,10397,10402],{"type":3043,"value":4408},{"type":3038,"tag":3195,"props":10398,"children":10400},{"className":10399},[],[10401],{"type":3043,"value":10391},{"type":3043,"value":10403}," option in the module configuration is returned in the body of a 429 response.",{"type":3038,"tag":3095,"props":10405,"children":10406},{},[10407,10412],{"type":3038,"tag":3099,"props":10408,"children":10409},{},[10410],{"type":3043,"value":10411},"It's recommended to use a plain text message.",{"type":3038,"tag":3099,"props":10413,"children":10414},{},[10415,10417,10422],{"type":3043,"value":10416},"If you choose to use HTML in your ",{"type":3038,"tag":3195,"props":10418,"children":10420},{"className":10419},[],[10421],{"type":3043,"value":10391},{"type":3043,"value":10423},", 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":3038,"tag":3121,"props":10425,"children":10427},{"id":10426},"development",[10428],{"type":3043,"value":10429},"Development",{"type":3038,"tag":3398,"props":10431,"children":10433},{"className":3400,"code":10432,"language":3402,"meta":2982,"style":2982},"# 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",[10434],{"type":3038,"tag":3195,"props":10435,"children":10436},{"__ignoreMap":2982},[10437,10445,10453,10460,10468,10480,10487,10495,10507,10514,10522,10534,10541,10549,10561,10568,10576,10588,10600,10607,10615,10627],{"type":3038,"tag":3408,"props":10438,"children":10439},{"class":3410,"line":3010},[10440],{"type":3038,"tag":3408,"props":10441,"children":10442},{"style":3414},[10443],{"type":3043,"value":10444},"# Install dependencies\n",{"type":3038,"tag":3408,"props":10446,"children":10447},{"class":3410,"line":3006},[10448],{"type":3038,"tag":3408,"props":10449,"children":10450},{"style":3423},[10451],{"type":3043,"value":10452},"yarn\n",{"type":3038,"tag":3408,"props":10454,"children":10455},{"class":3410,"line":3440},[10456],{"type":3038,"tag":3408,"props":10457,"children":10458},{"emptyLinePlaceholder":1200},[10459],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":10461,"children":10462},{"class":3410,"line":3449},[10463],{"type":3038,"tag":3408,"props":10464,"children":10465},{"style":3414},[10466],{"type":3043,"value":10467},"# Generate type stubs\n",{"type":3038,"tag":3408,"props":10469,"children":10470},{"class":3410,"line":3002},[10471,10475],{"type":3038,"tag":3408,"props":10472,"children":10473},{"style":3423},[10474],{"type":3043,"value":3463},{"type":3038,"tag":3408,"props":10476,"children":10477},{"style":3429},[10478],{"type":3043,"value":10479}," dev:prepare\n",{"type":3038,"tag":3408,"props":10481,"children":10482},{"class":3410,"line":3474},[10483],{"type":3038,"tag":3408,"props":10484,"children":10485},{"emptyLinePlaceholder":1200},[10486],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":10488,"children":10489},{"class":3410,"line":3482},[10490],{"type":3038,"tag":3408,"props":10491,"children":10492},{"style":3414},[10493],{"type":3043,"value":10494},"# Develop with the playground\n",{"type":3038,"tag":3408,"props":10496,"children":10497},{"class":3410,"line":3491},[10498,10502],{"type":3038,"tag":3408,"props":10499,"children":10500},{"style":3423},[10501],{"type":3043,"value":3463},{"type":3038,"tag":3408,"props":10503,"children":10504},{"style":3429},[10505],{"type":3043,"value":10506}," dev\n",{"type":3038,"tag":3408,"props":10508,"children":10509},{"class":3410,"line":3027},[10510],{"type":3038,"tag":3408,"props":10511,"children":10512},{"emptyLinePlaceholder":1200},[10513],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":10515,"children":10516},{"class":3410,"line":3687},[10517],{"type":3038,"tag":3408,"props":10518,"children":10519},{"style":3414},[10520],{"type":3043,"value":10521},"# Build the playground\n",{"type":3038,"tag":3408,"props":10523,"children":10524},{"class":3410,"line":3696},[10525,10529],{"type":3038,"tag":3408,"props":10526,"children":10527},{"style":3423},[10528],{"type":3043,"value":3463},{"type":3038,"tag":3408,"props":10530,"children":10531},{"style":3429},[10532],{"type":3043,"value":10533}," dev:build\n",{"type":3038,"tag":3408,"props":10535,"children":10536},{"class":3410,"line":3705},[10537],{"type":3038,"tag":3408,"props":10538,"children":10539},{"emptyLinePlaceholder":1200},[10540],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":10542,"children":10543},{"class":3410,"line":3714},[10544],{"type":3038,"tag":3408,"props":10545,"children":10546},{"style":3414},[10547],{"type":3043,"value":10548},"# Run ESLint\n",{"type":3038,"tag":3408,"props":10550,"children":10551},{"class":3410,"line":3723},[10552,10556],{"type":3038,"tag":3408,"props":10553,"children":10554},{"style":3423},[10555],{"type":3043,"value":3463},{"type":3038,"tag":3408,"props":10557,"children":10558},{"style":3429},[10559],{"type":3043,"value":10560}," lint\n",{"type":3038,"tag":3408,"props":10562,"children":10563},{"class":3410,"line":3732},[10564],{"type":3038,"tag":3408,"props":10565,"children":10566},{"emptyLinePlaceholder":1200},[10567],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":10569,"children":10570},{"class":3410,"line":3741},[10571],{"type":3038,"tag":3408,"props":10572,"children":10573},{"style":3414},[10574],{"type":3043,"value":10575},"# Run Vitest\n",{"type":3038,"tag":3408,"props":10577,"children":10578},{"class":3410,"line":3750},[10579,10583],{"type":3038,"tag":3408,"props":10580,"children":10581},{"style":3423},[10582],{"type":3043,"value":3463},{"type":3038,"tag":3408,"props":10584,"children":10585},{"style":3429},[10586],{"type":3043,"value":10587}," test\n",{"type":3038,"tag":3408,"props":10589,"children":10590},{"class":3410,"line":3758},[10591,10595],{"type":3038,"tag":3408,"props":10592,"children":10593},{"style":3423},[10594],{"type":3043,"value":3463},{"type":3038,"tag":3408,"props":10596,"children":10597},{"style":3429},[10598],{"type":3043,"value":10599}," test:watch\n",{"type":3038,"tag":3408,"props":10601,"children":10602},{"class":3410,"line":3767},[10603],{"type":3038,"tag":3408,"props":10604,"children":10605},{"emptyLinePlaceholder":1200},[10606],{"type":3043,"value":3446},{"type":3038,"tag":3408,"props":10608,"children":10609},{"class":3410,"line":3776},[10610],{"type":3038,"tag":3408,"props":10611,"children":10612},{"style":3414},[10613],{"type":3043,"value":10614},"# Release new version\n",{"type":3038,"tag":3408,"props":10616,"children":10617},{"class":3410,"line":3790},[10618,10622],{"type":3038,"tag":3408,"props":10619,"children":10620},{"style":3423},[10621],{"type":3043,"value":3463},{"type":3038,"tag":3408,"props":10623,"children":10624},{"style":3429},[10625],{"type":3043,"value":10626}," release:patch\n",{"type":3038,"tag":3408,"props":10628,"children":10629},{"class":3410,"line":3818},[10630,10634],{"type":3038,"tag":3408,"props":10631,"children":10632},{"style":3423},[10633],{"type":3043,"value":3463},{"type":3038,"tag":3408,"props":10635,"children":10636},{"style":3429},[10637],{"type":3043,"value":10638}," release:minor\n",{"type":3038,"tag":10640,"props":10641,"children":10642},"style",{},[10643],{"type":3043,"value":10644},"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":2982,"searchDepth":3006,"depth":3006,"links":10646},[10647,10648,10659,10664,10669,10675,10679,10683,10689],{"id":3123,"depth":3006,"text":399},{"id":3379,"depth":3006,"text":3382,"children":10649},[10650,10652,10654,10656,10658],{"id":3386,"depth":3440,"text":10651},"1. Add nuxt-api-shield dependency to your project",{"id":3509,"depth":3440,"text":10653},"2. Add nuxt-api-shield to the modules section of nuxt.config.ts",{"id":4540,"depth":3440,"text":10655},"3. Add nitro\u002Fstorage to nuxt.config.ts",{"id":4949,"depth":3440,"text":10657},"4. Schedule bundled cleanup tasks in nuxt.config.ts",{"id":5250,"depth":3440,"text":5253},{"id":7339,"depth":3006,"text":7342,"children":10660},[10661,10662],{"id":7345,"depth":3440,"text":7348},{"id":7755,"depth":3440,"text":10663},"When memory \u002F fs is acceptable",{"id":7814,"depth":3006,"text":7817,"children":10665},[10666,10667,10668],{"id":7840,"depth":3440,"text":7843},{"id":8094,"depth":3440,"text":8097},{"id":8146,"depth":3440,"text":8149},{"id":8412,"depth":3006,"text":8415,"children":10670},[10671,10673],{"id":8423,"depth":3440,"text":10672},"RateLimit Type",{"id":8975,"depth":3440,"text":10674},"ModuleOptions Type",{"id":9042,"depth":3006,"text":9045,"children":10676},[10677,10678],{"id":9097,"depth":3440,"text":9100},{"id":9593,"depth":3440,"text":9596},{"id":9788,"depth":3006,"text":9791,"children":10680},[10681,10682],{"id":9818,"depth":3440,"text":9100},{"id":10115,"depth":3440,"text":10118},{"id":10167,"depth":3006,"text":10170,"children":10684},[10685,10686,10687],{"id":10173,"depth":3440,"text":10176},{"id":10285,"depth":3440,"text":10288},{"id":10382,"depth":3440,"text":10688},"Error Message (errorMessage)",{"id":10426,"depth":3006,"text":10429},{"v5":10691,"v4":10692,"v3":10693,"v2":10694},"5 (nightly)","4.4.8","3.21.8","2.18.1"]